agent-codinglanguage-mapper 1.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- agent_codinglanguage_mapper/__init__.py +20 -0
- agent_codinglanguage_mapper/__main__.py +4 -0
- agent_codinglanguage_mapper/_version.py +2 -0
- agent_codinglanguage_mapper/adapters/__init__.py +4 -0
- agent_codinglanguage_mapper/adapters/delphi.py +822 -0
- agent_codinglanguage_mapper/adapters/delphi_frontend/__init__.py +6 -0
- agent_codinglanguage_mapper/adapters/delphi_frontend/comment_builder.py +29 -0
- agent_codinglanguage_mapper/adapters/delphi_frontend/consts.py +345 -0
- agent_codinglanguage_mapper/adapters/delphi_frontend/grammar.py +460 -0
- agent_codinglanguage_mapper/adapters/delphi_frontend/lark_builder.py +2674 -0
- agent_codinglanguage_mapper/adapters/delphi_frontend/lark_tokens.py +237 -0
- agent_codinglanguage_mapper/adapters/delphi_frontend/lsp_server.py +1832 -0
- agent_codinglanguage_mapper/adapters/delphi_frontend/nodes.py +371 -0
- agent_codinglanguage_mapper/adapters/delphi_frontend/parser.py +193 -0
- agent_codinglanguage_mapper/adapters/delphi_frontend/preprocessor.py +997 -0
- agent_codinglanguage_mapper/adapters/delphi_frontend/project_discovery.py +518 -0
- agent_codinglanguage_mapper/adapters/delphi_frontend/project_indexer.py +319 -0
- agent_codinglanguage_mapper/adapters/delphi_frontend/semantic.py +375 -0
- agent_codinglanguage_mapper/adapters/delphi_frontend/semantic_builder.py +1384 -0
- agent_codinglanguage_mapper/adapters/delphi_frontend/source_reader.py +17 -0
- agent_codinglanguage_mapper/adapters/delphi_frontend/workspace.py +67 -0
- agent_codinglanguage_mapper/adapters/tree_sitter.py +1722 -0
- agent_codinglanguage_mapper/cli.py +138 -0
- agent_codinglanguage_mapper/discovery.py +1328 -0
- agent_codinglanguage_mapper/indexer.py +1102 -0
- agent_codinglanguage_mapper/integration.py +186 -0
- agent_codinglanguage_mapper/lsp_server.py +413 -0
- agent_codinglanguage_mapper/lsp_service.py +447 -0
- agent_codinglanguage_mapper/mapper.py +596 -0
- agent_codinglanguage_mapper/models.py +101 -0
- agent_codinglanguage_mapper/protocol.py +152 -0
- agent_codinglanguage_mapper/rendering.py +153 -0
- agent_codinglanguage_mapper/templates/opencode/plugins/codebase_map.ts +191 -0
- agent_codinglanguage_mapper/templates/skill/SKILL.md +52 -0
- agent_codinglanguage_mapper/worker.py +29 -0
- agent_codinglanguage_mapper/workspace.py +114 -0
- agent_codinglanguage_mapper-1.0.0.dist-info/METADATA +383 -0
- agent_codinglanguage_mapper-1.0.0.dist-info/RECORD +42 -0
- agent_codinglanguage_mapper-1.0.0.dist-info/WHEEL +5 -0
- agent_codinglanguage_mapper-1.0.0.dist-info/entry_points.txt +2 -0
- agent_codinglanguage_mapper-1.0.0.dist-info/licenses/LICENSE +373 -0
- agent_codinglanguage_mapper-1.0.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import argparse
|
|
4
|
+
import json
|
|
5
|
+
import os
|
|
6
|
+
import sys
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
from typing import Sequence
|
|
9
|
+
|
|
10
|
+
from .integration import install_opencode, install_skill
|
|
11
|
+
from .mapper import CodebaseMapper
|
|
12
|
+
from .models import Language
|
|
13
|
+
from .rendering import layer_data, render_markdown, write_index
|
|
14
|
+
from .worker import serve_worker
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
LAYERS = (
|
|
18
|
+
"overview",
|
|
19
|
+
"projects",
|
|
20
|
+
"languages",
|
|
21
|
+
"files",
|
|
22
|
+
"file",
|
|
23
|
+
"symbols",
|
|
24
|
+
"symbol",
|
|
25
|
+
"implementation",
|
|
26
|
+
"references",
|
|
27
|
+
"problems",
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _root_argument(parser: argparse.ArgumentParser) -> None:
|
|
32
|
+
parser.add_argument("--root", type=Path, default=Path("."))
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def build_parser() -> argparse.ArgumentParser:
|
|
36
|
+
parser = argparse.ArgumentParser(prog="codinglanguage-mapper")
|
|
37
|
+
subparsers = parser.add_subparsers(dest="command", required=True)
|
|
38
|
+
|
|
39
|
+
view = subparsers.add_parser("view", help="Render a layered codebase view.")
|
|
40
|
+
_root_argument(view)
|
|
41
|
+
view.add_argument("--project-file", type=Path)
|
|
42
|
+
view.add_argument("--layer", choices=LAYERS, required=True)
|
|
43
|
+
view.add_argument("--query", default="")
|
|
44
|
+
view.add_argument("--format", choices=("json", "markdown"), default="markdown")
|
|
45
|
+
view.add_argument("--language", dest="languages", action="append", choices=[item.value for item in Language])
|
|
46
|
+
|
|
47
|
+
index = subparsers.add_parser("index", help="Materialize a codebase index.")
|
|
48
|
+
_root_argument(index)
|
|
49
|
+
index.add_argument("--out", type=Path, default=Path(".codinglanguage-mapper/index/index.json"))
|
|
50
|
+
|
|
51
|
+
doctor = subparsers.add_parser("doctor", help="Report discovery and parser readiness.")
|
|
52
|
+
_root_argument(doctor)
|
|
53
|
+
doctor.add_argument("--format", choices=("json", "text"), default="text")
|
|
54
|
+
|
|
55
|
+
lsp = subparsers.add_parser("lsp", help="Start the multi-language LSP server.")
|
|
56
|
+
_root_argument(lsp)
|
|
57
|
+
|
|
58
|
+
worker = subparsers.add_parser("worker", help="Serve Protocol 3 NDJSON requests.")
|
|
59
|
+
_root_argument(worker)
|
|
60
|
+
worker.add_argument("--project-file", type=Path)
|
|
61
|
+
|
|
62
|
+
skill = subparsers.add_parser("skill", help="Install agent skills.")
|
|
63
|
+
skill_subparsers = skill.add_subparsers(dest="skill_command", required=True)
|
|
64
|
+
skill_install = skill_subparsers.add_parser("install")
|
|
65
|
+
skill_install.add_argument("--target", type=Path, default=Path("."))
|
|
66
|
+
skill_install.add_argument("--force", action="store_true")
|
|
67
|
+
|
|
68
|
+
opencode = subparsers.add_parser("opencode", help="Install OpenCode integration.")
|
|
69
|
+
opencode_subparsers = opencode.add_subparsers(dest="opencode_command", required=True)
|
|
70
|
+
opencode_install = opencode_subparsers.add_parser("install")
|
|
71
|
+
opencode_install.add_argument("--target", type=Path, default=Path("."))
|
|
72
|
+
opencode_install.add_argument("--python", default=sys.executable)
|
|
73
|
+
opencode_install.add_argument("--force", action="store_true")
|
|
74
|
+
opencode_install.add_argument("--write", "--write-config", dest="write_config", action="store_true")
|
|
75
|
+
return parser
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def main(argv: Sequence[str] | None = None) -> int:
|
|
79
|
+
args = build_parser().parse_args(argv)
|
|
80
|
+
if args.command == "lsp":
|
|
81
|
+
from .lsp_server import main as lsp_main
|
|
82
|
+
|
|
83
|
+
os.chdir(args.root.expanduser().resolve())
|
|
84
|
+
lsp_main()
|
|
85
|
+
return 0
|
|
86
|
+
if args.command == "worker":
|
|
87
|
+
return serve_worker(args.root, sys.stdin, sys.stdout)
|
|
88
|
+
if args.command == "skill":
|
|
89
|
+
path = install_skill(args.target, force=args.force)
|
|
90
|
+
print(path)
|
|
91
|
+
return 0
|
|
92
|
+
if args.command == "opencode":
|
|
93
|
+
paths = install_opencode(
|
|
94
|
+
args.target,
|
|
95
|
+
python_executable=args.python,
|
|
96
|
+
force=args.force,
|
|
97
|
+
write_config=args.write_config,
|
|
98
|
+
)
|
|
99
|
+
print(json.dumps({"installed": [str(path) for path in paths]}, sort_keys=True))
|
|
100
|
+
return 0
|
|
101
|
+
|
|
102
|
+
with CodebaseMapper.open(args.root) as mapper:
|
|
103
|
+
if args.command == "view":
|
|
104
|
+
languages = tuple(Language(item) for item in (args.languages or ()))
|
|
105
|
+
data = layer_data(mapper, args.layer, query=args.query, languages=languages)
|
|
106
|
+
if args.format == "json":
|
|
107
|
+
print(json.dumps(data, indent=2, sort_keys=True))
|
|
108
|
+
else:
|
|
109
|
+
print(render_markdown(data, title=args.layer.replace("_", " ").title()), end="")
|
|
110
|
+
return 0
|
|
111
|
+
if args.command == "index":
|
|
112
|
+
path = write_index(mapper, args.out)
|
|
113
|
+
print(json.dumps({"path": str(path), "revision": mapper.snapshot.revision}, sort_keys=True))
|
|
114
|
+
return 0
|
|
115
|
+
report = _doctor_report(mapper)
|
|
116
|
+
if args.format == "json":
|
|
117
|
+
print(json.dumps(report, indent=2, sort_keys=True))
|
|
118
|
+
else:
|
|
119
|
+
status = "ready" if report["ok"] else "problems"
|
|
120
|
+
print(f"status: {status}")
|
|
121
|
+
print("languages: " + ", ".join(item.value for item in Language))
|
|
122
|
+
print(f"files: {report['files']}")
|
|
123
|
+
print(f"errors: {report['errors']}")
|
|
124
|
+
return 0 if report["ok"] else 1
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def _doctor_report(mapper: CodebaseMapper) -> dict[str, object]:
|
|
128
|
+
errors = [item for item in mapper.snapshot.problems if item.severity == "error"]
|
|
129
|
+
return {
|
|
130
|
+
"ok": not errors,
|
|
131
|
+
"workspace": str(mapper.root),
|
|
132
|
+
"revision": mapper.snapshot.revision,
|
|
133
|
+
"languages": [item.value for item in Language],
|
|
134
|
+
"files": len(mapper.snapshot.files),
|
|
135
|
+
"symbols": len(mapper.snapshot.symbols),
|
|
136
|
+
"problems": len(mapper.snapshot.problems),
|
|
137
|
+
"errors": len(errors),
|
|
138
|
+
}
|