| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- from __future__ import annotations
- import json
- from functools import lru_cache
- from pathlib import Path
- from .models import PortingBacklog, PortingModule
- SNAPSHOT_PATH = Path(__file__).resolve().parent / 'reference_data' / 'commands_snapshot.json'
- @lru_cache(maxsize=1)
- def load_command_snapshot() -> tuple[PortingModule, ...]:
- raw_entries = json.loads(SNAPSHOT_PATH.read_text())
- return tuple(
- PortingModule(
- name=entry['name'],
- responsibility=entry['responsibility'],
- source_hint=entry['source_hint'],
- status='mirrored',
- )
- for entry in raw_entries
- )
- PORTED_COMMANDS = load_command_snapshot()
- def build_command_backlog() -> PortingBacklog:
- return PortingBacklog(title='Command surface', modules=list(PORTED_COMMANDS))
- def command_names() -> list[str]:
- return [module.name for module in PORTED_COMMANDS]
- def get_command(name: str) -> PortingModule | None:
- needle = name.lower()
- for module in PORTED_COMMANDS:
- if module.name.lower() == needle:
- return module
- return None
- def find_commands(query: str, limit: int = 20) -> list[PortingModule]:
- needle = query.lower()
- matches = [module for module in PORTED_COMMANDS if needle in module.name.lower() or needle in module.source_hint.lower()]
- return matches[:limit]
- def render_command_index(limit: int = 20, query: str | None = None) -> str:
- modules = find_commands(query, limit) if query else list(PORTED_COMMANDS[:limit])
- lines = [f'Command entries: {len(PORTED_COMMANDS)}', '']
- if query:
- lines.append(f'Filtered by: {query}')
- lines.append('')
- lines.extend(f'- {module.name} — {module.source_hint}' for module in modules)
- return '\n'.join(lines)
|