lockwire 0.1.0

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.
Files changed (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +327 -0
  3. package/dist/actions.d.ts +67 -0
  4. package/dist/actions.d.ts.map +1 -0
  5. package/dist/actions.js +430 -0
  6. package/dist/actions.js.map +1 -0
  7. package/dist/actor.d.ts +4 -0
  8. package/dist/actor.d.ts.map +1 -0
  9. package/dist/actor.js +14 -0
  10. package/dist/actor.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +192 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/config.d.ts +5 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +27 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/extract.d.ts +16 -0
  20. package/dist/extract.d.ts.map +1 -0
  21. package/dist/extract.js +349 -0
  22. package/dist/extract.js.map +1 -0
  23. package/dist/format.d.ts +5 -0
  24. package/dist/format.d.ts.map +1 -0
  25. package/dist/format.js +65 -0
  26. package/dist/format.js.map +1 -0
  27. package/dist/grammar.d.ts +6 -0
  28. package/dist/grammar.d.ts.map +1 -0
  29. package/dist/grammar.js +45 -0
  30. package/dist/grammar.js.map +1 -0
  31. package/dist/hash.d.ts +12 -0
  32. package/dist/hash.d.ts.map +1 -0
  33. package/dist/hash.js +34 -0
  34. package/dist/hash.js.map +1 -0
  35. package/dist/hook-claude.d.ts +6 -0
  36. package/dist/hook-claude.d.ts.map +1 -0
  37. package/dist/hook-claude.js +50 -0
  38. package/dist/hook-claude.js.map +1 -0
  39. package/dist/hook-codex.d.ts +8 -0
  40. package/dist/hook-codex.d.ts.map +1 -0
  41. package/dist/hook-codex.js +52 -0
  42. package/dist/hook-codex.js.map +1 -0
  43. package/dist/hook-common.d.ts +23 -0
  44. package/dist/hook-common.d.ts.map +1 -0
  45. package/dist/hook-common.js +72 -0
  46. package/dist/hook-common.js.map +1 -0
  47. package/dist/index.d.ts +12 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +12 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/ledger.d.ts +13 -0
  52. package/dist/ledger.d.ts.map +1 -0
  53. package/dist/ledger.js +69 -0
  54. package/dist/ledger.js.map +1 -0
  55. package/dist/lockfile.d.ts +9 -0
  56. package/dist/lockfile.d.ts.map +1 -0
  57. package/dist/lockfile.js +40 -0
  58. package/dist/lockfile.js.map +1 -0
  59. package/dist/markers.d.ts +18 -0
  60. package/dist/markers.d.ts.map +1 -0
  61. package/dist/markers.js +89 -0
  62. package/dist/markers.js.map +1 -0
  63. package/dist/mcp-server.d.ts +2 -0
  64. package/dist/mcp-server.d.ts.map +1 -0
  65. package/dist/mcp-server.js +69 -0
  66. package/dist/mcp-server.js.map +1 -0
  67. package/dist/repo.d.ts +14 -0
  68. package/dist/repo.d.ts.map +1 -0
  69. package/dist/repo.js +75 -0
  70. package/dist/repo.js.map +1 -0
  71. package/dist/types.d.ts +100 -0
  72. package/dist/types.d.ts.map +1 -0
  73. package/dist/types.js +11 -0
  74. package/dist/types.js.map +1 -0
  75. package/grammars/tree-sitter-javascript.wasm +0 -0
  76. package/grammars/tree-sitter-python.wasm +0 -0
  77. package/grammars/tree-sitter-tsx.wasm +0 -0
  78. package/grammars/tree-sitter-typescript.wasm +0 -0
  79. package/package.json +75 -0
package/dist/cli.js ADDED
@@ -0,0 +1,192 @@
1
+ #!/usr/bin/env node
2
+ import { existsSync } from "node:fs";
3
+ import { mkdir, writeFile } from "node:fs/promises";
4
+ import { ack, check, discoverDocs, history, linkDoc, linkLockfileOnly, refs, status, unlink, waive, } from "./actions.js";
5
+ import { cliActor } from "./actor.js";
6
+ import { readConfig, writeConfig } from "./config.js";
7
+ import { formatGithub, formatJson, formatText } from "./format.js";
8
+ import { runClaudeHook } from "./hook-claude.js";
9
+ import { runCodexHook } from "./hook-codex.js";
10
+ import { readLedger, verifyLedger } from "./ledger.js";
11
+ import { readLockfile, writeLockfile } from "./lockfile.js";
12
+ import { findRepoRoot } from "./repo.js";
13
+ import { DEFAULT_CONFIG } from "./types.js";
14
+ function parseFlags(args) {
15
+ const positional = [];
16
+ const flags = {};
17
+ for (let i = 0; i < args.length; i++) {
18
+ const a = args[i];
19
+ if (a === undefined)
20
+ continue;
21
+ if (a.startsWith("--")) {
22
+ const key = a.slice(2);
23
+ const next = args[i + 1];
24
+ if (next !== undefined && !next.startsWith("--")) {
25
+ flags[key] = next;
26
+ i++;
27
+ }
28
+ else {
29
+ flags[key] = true;
30
+ }
31
+ }
32
+ else {
33
+ positional.push(a);
34
+ }
35
+ }
36
+ return { positional, flags };
37
+ }
38
+ async function main() {
39
+ const [, , cmd, ...rest] = process.argv;
40
+ const { positional, flags } = parseFlags(rest);
41
+ const repoRoot = findRepoRoot(process.cwd());
42
+ const actor = cliActor();
43
+ switch (cmd) {
44
+ case "init": {
45
+ await writeConfig(repoRoot, DEFAULT_CONFIG);
46
+ if (!existsSync(`${repoRoot}/lockwire.lock`))
47
+ await writeLockfile(repoRoot, { version: 1, anchors: [] });
48
+ await mkdir(`${repoRoot}/.lockwire`, { recursive: true });
49
+ const gitattrPath = `${repoRoot}/.gitattributes`;
50
+ const line = ".lockwire/ledger.jsonl merge=union\n";
51
+ if (existsSync(gitattrPath)) {
52
+ const { readFile } = await import("node:fs/promises");
53
+ const current = await readFile(gitattrPath, "utf8");
54
+ if (!current.includes("ledger.jsonl"))
55
+ await writeFile(gitattrPath, `${current}${line}`, "utf8");
56
+ }
57
+ else {
58
+ await writeFile(gitattrPath, line, "utf8");
59
+ }
60
+ console.log("lockwire initialized: lockwire.lock, .lockwire/config.json, .gitattributes (ledger merge=union)");
61
+ break;
62
+ }
63
+ case "link": {
64
+ const config = await readConfig(repoRoot);
65
+ const [doc, target] = positional;
66
+ if (!doc)
67
+ throw new Error("usage: lockwire link <doc.md> [target] [--tiers a,b]");
68
+ if (target) {
69
+ const [path, symbol] = target.split("#");
70
+ const tiers = typeof flags.tiers === "string"
71
+ ? flags.tiers.split(",")
72
+ : symbol
73
+ ? ["sig"]
74
+ : ["path", "body"];
75
+ if (!path)
76
+ throw new Error("target must be path or path#Symbol");
77
+ const anchor = await linkLockfileOnly(repoRoot, doc, { path, ...(symbol ? { symbol } : {}) }, tiers, config, actor);
78
+ console.log(`linked ${anchor.id} -> ${target}`);
79
+ }
80
+ else {
81
+ const result = await linkDoc(repoRoot, doc, config, actor, {
82
+ reviewed: Boolean(flags.reviewed),
83
+ });
84
+ console.log(`${doc}: ${result.created} created, ${result.refreshed} refreshed${result.skipped.length ? `, ${result.skipped.length} skipped` : ""}`);
85
+ for (const s of result.skipped)
86
+ console.log(` skipped ${s.target}: ${s.reason}`);
87
+ }
88
+ break;
89
+ }
90
+ case "check": {
91
+ const config = await readConfig(repoRoot);
92
+ const changedOnly = positional.length > 0 ? positional : undefined;
93
+ const result = await check(repoRoot, config, changedOnly);
94
+ const fmt = typeof flags.format === "string" ? flags.format : "text";
95
+ const out = fmt === "json"
96
+ ? formatJson(result, null)
97
+ : fmt === "github"
98
+ ? formatGithub(result)
99
+ : formatText(result);
100
+ console.log(out);
101
+ process.exitCode = result.summary.drifted > 0 || result.summary.orphaned > 0 ? 1 : 0;
102
+ break;
103
+ }
104
+ case "status": {
105
+ const anchors = await status(repoRoot, typeof flags.scope === "string" ? flags.scope : undefined);
106
+ if (flags.json)
107
+ console.log(JSON.stringify(anchors, null, 2));
108
+ else
109
+ for (const a of anchors)
110
+ console.log(`${a.id} ${a.status.padEnd(10)} ${a.target.path}${a.target.symbol ? `#${a.target.symbol}` : ""}`);
111
+ break;
112
+ }
113
+ case "refs": {
114
+ const [target] = positional;
115
+ if (!target)
116
+ throw new Error("usage: lockwire refs <path>[#symbol]");
117
+ const [path, symbol] = target.split("#");
118
+ const anchors = await refs(repoRoot, path, symbol);
119
+ for (const a of anchors)
120
+ console.log(`${a.doc ?? "(lockfile-only)"}:${a.claim?.line ?? "-"} ${a.id}`);
121
+ break;
122
+ }
123
+ case "history": {
124
+ const [ref] = positional;
125
+ if (!ref)
126
+ throw new Error("usage: lockwire history <anchor-id | path#symbol | doc.md>");
127
+ const { events } = await history(repoRoot, ref);
128
+ for (const e of events)
129
+ console.log(`${e.ts} ${e.event.padEnd(20)} ${e.tier ?? ""} ${e.note ?? ""}`.trimEnd());
130
+ break;
131
+ }
132
+ case "ack": {
133
+ const [id] = positional;
134
+ const resolution = flags.resolution;
135
+ if (!id || typeof resolution !== "string")
136
+ throw new Error("usage: lockwire ack <id> --resolution updated|superseded|false-positive");
137
+ const config = await readConfig(repoRoot);
138
+ await ack(repoRoot, id, resolution, typeof flags.note === "string" ? flags.note : undefined, actor, config);
139
+ console.log(`acknowledged ${id}`);
140
+ break;
141
+ }
142
+ case "waive": {
143
+ const [id] = positional;
144
+ if (!id || typeof flags.reason !== "string" || typeof flags.expires !== "string")
145
+ throw new Error("usage: lockwire waive <id> --reason ... --expires YYYY-MM-DD");
146
+ await waive(repoRoot, id, flags.reason, flags.expires, actor);
147
+ console.log(`waived ${id} until ${flags.expires}`);
148
+ break;
149
+ }
150
+ case "unlink": {
151
+ const [id] = positional;
152
+ if (!id)
153
+ throw new Error("usage: lockwire unlink <id>");
154
+ await unlink(repoRoot, id);
155
+ console.log(`unlinked ${id}`);
156
+ break;
157
+ }
158
+ case "ledger": {
159
+ if (positional[0] === "verify") {
160
+ const result = await verifyLedger(repoRoot);
161
+ console.log(`${result.total} events · ${result.ok ? "all hashes verify" : `${result.badLines.length} bad line(s): ${result.badLines.join(",")}`}`);
162
+ console.log(`root: ${result.root}`);
163
+ process.exitCode = result.ok ? 0 : 1;
164
+ }
165
+ break;
166
+ }
167
+ case "hook": {
168
+ const adapter = positional[0];
169
+ if (adapter === "claude-pre" || adapter === "claude-post")
170
+ await runClaudeHook(adapter, repoRoot);
171
+ else if (adapter === "codex-pre" || adapter === "codex-post")
172
+ await runCodexHook(adapter, repoRoot);
173
+ else
174
+ throw new Error("usage: lockwire hook claude-pre|claude-post|codex-pre|codex-post");
175
+ break;
176
+ }
177
+ case "mcp": {
178
+ const { startMcpServer } = await import("./mcp-server.js");
179
+ await startMcpServer(repoRoot);
180
+ break;
181
+ }
182
+ default:
183
+ console.log("lockwire — bind documentation claims to code fingerprints\n");
184
+ console.log("commands: init, link, check, status, refs, history, ack, waive, unlink, ledger verify, hook, mcp");
185
+ process.exitCode = cmd ? 1 : 0;
186
+ }
187
+ }
188
+ main().catch((err) => {
189
+ console.error(err instanceof Error ? err.message : String(err));
190
+ process.exitCode = 1;
191
+ });
192
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { LockwireConfig } from "./types.js";
2
+ export declare function configPath(repoRoot: string): string;
3
+ export declare function readConfig(repoRoot: string): Promise<LockwireConfig>;
4
+ export declare function writeConfig(repoRoot: string, config: LockwireConfig): Promise<void>;
5
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAY1E;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzF"}
package/dist/config.js ADDED
@@ -0,0 +1,27 @@
1
+ import { existsSync } from "node:fs";
2
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
3
+ import { dirname } from "node:path";
4
+ import { DEFAULT_CONFIG } from "./types.js";
5
+ export function configPath(repoRoot) {
6
+ return `${repoRoot}/.lockwire/config.json`;
7
+ }
8
+ export async function readConfig(repoRoot) {
9
+ const path = configPath(repoRoot);
10
+ if (!existsSync(path))
11
+ return DEFAULT_CONFIG;
12
+ const raw = JSON.parse(await readFile(path, "utf8"));
13
+ return {
14
+ version: 1,
15
+ docs: raw.docs ?? DEFAULT_CONFIG.docs,
16
+ exclude: raw.exclude ?? DEFAULT_CONFIG.exclude,
17
+ normalizeLocals: raw.normalizeLocals ?? DEFAULT_CONFIG.normalizeLocals,
18
+ hook: { ...DEFAULT_CONFIG.hook, ...(raw.hook ?? {}) },
19
+ noiseBudget: { ...DEFAULT_CONFIG.noiseBudget, ...(raw.noiseBudget ?? {}) },
20
+ };
21
+ }
22
+ export async function writeConfig(repoRoot, config) {
23
+ const path = configPath(repoRoot);
24
+ await mkdir(dirname(path), { recursive: true });
25
+ await writeFile(path, `${JSON.stringify(config, null, 2)}\n`, "utf8");
26
+ }
27
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,GAAG,QAAQ,wBAAwB,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,cAAc,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,OAAO;QACL,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,cAAc,CAAC,IAAI;QACrC,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,cAAc,CAAC,OAAO;QAC9C,eAAe,EAAE,GAAG,CAAC,eAAe,IAAI,cAAc,CAAC,eAAe;QACtE,IAAI,EAAE,EAAE,GAAG,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE;QACrD,WAAW,EAAE,EAAE,GAAG,cAAc,CAAC,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE;KAC3E,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB,EAAE,MAAsB;IACxE,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACxE,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { Node } from "web-tree-sitter";
2
+ import type { LangId } from "./grammar.js";
3
+ import type { FileSymbols } from "./types.js";
4
+ /**
5
+ * Walks a parsed file and resolves every top-level function/class, and every method inside
6
+ * each class, into a dotted symbol path ("createSession", "AuthConfig.refresh") with its
7
+ * four tier fingerprints precomputed as raw material (sig string, normalized body, deps set).
8
+ */
9
+ export declare function extractFileSymbols(root: Node, lang: LangId, normalizeLocals: boolean): FileSymbols;
10
+ export declare function fileExportsFingerprint(symbols: FileSymbols): string;
11
+ /** Whole-file tiers for a file-only anchor (no `#Symbol`): same normalization pipeline, applied to the root node. */
12
+ export declare function computeWholeFileTiers(root: Node, lang: LangId, normalizeLocals: boolean): {
13
+ bodyNormalized: string;
14
+ deps: string[];
15
+ };
16
+ //# sourceMappingURL=extract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../src/extract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,YAAY,CAAC;AAoP9D;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,OAAO,GACvB,WAAW,CAoGb;AAWD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAInE;AAED,qHAAqH;AACrH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,OAAO,GACvB;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAO5C"}
@@ -0,0 +1,349 @@
1
+ import { fingerprintSet } from "./hash.js";
2
+ const IDENTIFIER_TYPES = new Set([
3
+ "identifier",
4
+ "property_identifier",
5
+ "shorthand_property_identifier",
6
+ "type_identifier",
7
+ ]);
8
+ const SKIP_ANONYMOUS = new Set([",", ";"]);
9
+ const DECLARATION_TYPES = {
10
+ typescript: {
11
+ fn: ["function_declaration"],
12
+ cls: ["class_declaration", "interface_declaration"],
13
+ method: ["method_definition"],
14
+ wrapper: ["export_statement"],
15
+ },
16
+ tsx: {
17
+ fn: ["function_declaration"],
18
+ cls: ["class_declaration", "interface_declaration"],
19
+ method: ["method_definition"],
20
+ wrapper: ["export_statement"],
21
+ },
22
+ javascript: {
23
+ fn: ["function_declaration"],
24
+ cls: ["class_declaration"],
25
+ method: ["method_definition"],
26
+ wrapper: ["export_statement"],
27
+ },
28
+ python: {
29
+ fn: ["function_definition"],
30
+ cls: ["class_definition"],
31
+ method: ["function_definition"],
32
+ wrapper: ["decorated_definition"],
33
+ },
34
+ };
35
+ /** Walks up to 2 ancestors looking for an export wrapper — covers `export function f() {}` and `export const f = ...`. */
36
+ function isExported(node, wrapperTypes) {
37
+ let n = node;
38
+ for (let i = 0; i < 2 && n; i++) {
39
+ if (n.type === "export_statement")
40
+ return true;
41
+ n = n.parent;
42
+ }
43
+ return wrapperTypes.includes(node.type);
44
+ }
45
+ function collectImportedNames(root, lang) {
46
+ const names = new Set();
47
+ const types = lang === "python"
48
+ ? ["import_statement", "import_from_statement"]
49
+ : ["import_statement", "import_clause"];
50
+ for (const imp of root.descendantsOfType(types)) {
51
+ for (const id of imp.descendantsOfType(["identifier"]))
52
+ names.add(id.text);
53
+ }
54
+ return names;
55
+ }
56
+ function collectLocalDeclared(subtree, paramNames, lang) {
57
+ const locals = new Set(paramNames);
58
+ if (lang === "python") {
59
+ for (const assign of subtree.descendantsOfType(["assignment"])) {
60
+ const left = assign.childForFieldName("left");
61
+ if (left?.type === "identifier")
62
+ locals.add(left.text);
63
+ }
64
+ for (const forStmt of subtree.descendantsOfType(["for_statement"])) {
65
+ const left = forStmt.childForFieldName("left");
66
+ if (left?.type === "identifier")
67
+ locals.add(left.text);
68
+ }
69
+ }
70
+ else {
71
+ for (const decl of subtree.descendantsOfType(["variable_declarator"])) {
72
+ const name = decl.childForFieldName("name");
73
+ if (name?.type === "identifier")
74
+ locals.add(name.text);
75
+ }
76
+ }
77
+ return locals;
78
+ }
79
+ /** Recursive structural serializer: strips comments and pure separators, keeps operators/keywords/literals, aliases locals. */
80
+ function serializeBody(node, locals, normalizeLocals, aliasOf) {
81
+ if (node.isExtra)
82
+ return ""; // comments
83
+ if (node.childCount === 0) {
84
+ if (node.isNamed) {
85
+ if (normalizeLocals && IDENTIFIER_TYPES.has(node.type) && locals.has(node.text)) {
86
+ let idx = aliasOf.get(node.text);
87
+ if (idx === undefined) {
88
+ idx = aliasOf.size + 1;
89
+ aliasOf.set(node.text, idx);
90
+ }
91
+ return `$${idx}`;
92
+ }
93
+ return `${node.type}:${node.text}`;
94
+ }
95
+ if (SKIP_ANONYMOUS.has(node.type))
96
+ return "";
97
+ return node.type;
98
+ }
99
+ const parts = [];
100
+ for (const child of node.children) {
101
+ if (!child)
102
+ continue;
103
+ const s = serializeBody(child, locals, normalizeLocals, aliasOf);
104
+ if (s)
105
+ parts.push(s);
106
+ }
107
+ return `(${node.type} ${parts.join(" ")})`;
108
+ }
109
+ function extractParamsTs(params) {
110
+ if (!params)
111
+ return [];
112
+ const out = [];
113
+ for (const p of params.namedChildren) {
114
+ if (!p)
115
+ continue;
116
+ if (p.type === "required_parameter" || p.type === "optional_parameter") {
117
+ const pattern = p.childForFieldName("pattern");
118
+ out.push({
119
+ name: pattern?.text ?? p.text,
120
+ typed: p.childForFieldName("type") !== null,
121
+ hasDefault: p.childForFieldName("value") !== null || p.type === "optional_parameter",
122
+ variadic: false,
123
+ });
124
+ }
125
+ else if (p.type === "identifier") {
126
+ out.push({ name: p.text, typed: false, hasDefault: false, variadic: false });
127
+ }
128
+ else if (p.type === "assignment_pattern") {
129
+ const left = p.childForFieldName("left");
130
+ out.push({ name: left?.text ?? p.text, typed: false, hasDefault: true, variadic: false });
131
+ }
132
+ else if (p.type === "rest_pattern") {
133
+ out.push({
134
+ name: p.text.replace(/^\.\.\./, ""),
135
+ typed: false,
136
+ hasDefault: false,
137
+ variadic: true,
138
+ });
139
+ }
140
+ }
141
+ return out;
142
+ }
143
+ function extractParamsPy(params) {
144
+ if (!params)
145
+ return [];
146
+ const out = [];
147
+ for (const p of params.namedChildren) {
148
+ if (!p)
149
+ continue;
150
+ switch (p.type) {
151
+ case "identifier":
152
+ out.push({ name: p.text, typed: false, hasDefault: false, variadic: false });
153
+ break;
154
+ case "typed_parameter":
155
+ out.push({
156
+ name: p.firstChild?.text ?? p.text,
157
+ typed: true,
158
+ hasDefault: false,
159
+ variadic: false,
160
+ });
161
+ break;
162
+ case "default_parameter": {
163
+ const name = p.childForFieldName("name");
164
+ out.push({ name: name?.text ?? p.text, typed: false, hasDefault: true, variadic: false });
165
+ break;
166
+ }
167
+ case "typed_default_parameter": {
168
+ const name = p.childForFieldName("name");
169
+ out.push({ name: name?.text ?? p.text, typed: true, hasDefault: true, variadic: false });
170
+ break;
171
+ }
172
+ case "list_splat_pattern":
173
+ out.push({
174
+ name: p.text.replace(/^\*/, ""),
175
+ typed: false,
176
+ hasDefault: false,
177
+ variadic: true,
178
+ });
179
+ break;
180
+ case "dictionary_splat_pattern":
181
+ out.push({
182
+ name: p.text.replace(/^\*\*/, ""),
183
+ typed: false,
184
+ hasDefault: false,
185
+ variadic: true,
186
+ });
187
+ break;
188
+ }
189
+ }
190
+ return out;
191
+ }
192
+ function sigForFunction(node, name, lang, exported) {
193
+ const isPy = lang === "python";
194
+ const paramsNode = node.childForFieldName("parameters");
195
+ const params = isPy ? extractParamsPy(paramsNode) : extractParamsTs(paramsNode);
196
+ const paramSig = params
197
+ .map((p) => `${p.variadic ? "..." : ""}${p.name}${p.typed ? ":T" : ""}${p.hasDefault ? "=" : ""}`)
198
+ .join(",");
199
+ const returnNode = node.childForFieldName("return_type");
200
+ const returnSig = returnNode ? returnNode.text.replace(/^:\s*/, "") : "";
201
+ const modifiers = [];
202
+ if (exported)
203
+ modifiers.push("export");
204
+ if (node.text.startsWith("async") ||
205
+ node.childForFieldName("body")?.parent?.text.startsWith("async"))
206
+ modifiers.push("async");
207
+ if (node.parent?.type === "decorated_definition") {
208
+ for (const dec of node.parent.namedChildren) {
209
+ if (dec?.type === "decorator")
210
+ modifiers.push(`@${dec.text.replace(/^@/, "")}`);
211
+ }
212
+ }
213
+ return `fn ${name}(${paramSig})${returnSig ? `->${returnSig}` : ""} [${modifiers.sort().join(",")}]`;
214
+ }
215
+ function findCallRoot(callee) {
216
+ const text = callee.text.replace(/^(this|self)\./, "");
217
+ return text;
218
+ }
219
+ function collectDeps(subtree, lang, importedNames) {
220
+ const deps = new Set();
221
+ const callTypes = lang === "python" ? ["call"] : ["call_expression"];
222
+ for (const call of subtree.descendantsOfType(callTypes)) {
223
+ const callee = lang === "python" ? call.childForFieldName("function") : call.childForFieldName("function");
224
+ if (callee)
225
+ deps.add(findCallRoot(callee));
226
+ }
227
+ for (const id of subtree.descendantsOfType(["identifier"])) {
228
+ if (importedNames.has(id.text))
229
+ deps.add(id.text);
230
+ }
231
+ return [...deps].sort();
232
+ }
233
+ /**
234
+ * Walks a parsed file and resolves every top-level function/class, and every method inside
235
+ * each class, into a dotted symbol path ("createSession", "AuthConfig.refresh") with its
236
+ * four tier fingerprints precomputed as raw material (sig string, normalized body, deps set).
237
+ */
238
+ export function extractFileSymbols(root, lang, normalizeLocals) {
239
+ const decl = DECLARATION_TYPES[lang];
240
+ const importedNames = collectImportedNames(root, lang);
241
+ const bySymbolPath = new Map();
242
+ const sigIndex = new Map();
243
+ const fileExports = [];
244
+ function unwrapDecorated(node) {
245
+ return node.type === "decorated_definition"
246
+ ? (node.childForFieldName("definition") ?? node)
247
+ : node;
248
+ }
249
+ function addSymbol(symbolPath, kind, defNode, exported) {
250
+ const name = symbolPath.includes(".")
251
+ ? symbolPath.slice(symbolPath.lastIndexOf(".") + 1)
252
+ : symbolPath;
253
+ const sigTokens = kind === "class"
254
+ ? `class ${name} [${exported ? "export" : ""}]`
255
+ : sigForFunction(defNode, name, lang, exported);
256
+ const bodyNode = defNode.childForFieldName("body") ?? defNode;
257
+ const params = lang === "python"
258
+ ? extractParamsPy(defNode.childForFieldName("parameters"))
259
+ : extractParamsTs(defNode.childForFieldName("parameters"));
260
+ const locals = collectLocalDeclared(bodyNode, params.map((p) => p.name), lang);
261
+ const bodyNormalized = serializeBody(bodyNode, locals, normalizeLocals, new Map());
262
+ const deps = collectDeps(bodyNode, lang, importedNames);
263
+ const symbol = {
264
+ kind,
265
+ name,
266
+ exported,
267
+ sigTokens,
268
+ bodyText: bodyNode.text,
269
+ bodyNormalized,
270
+ deps,
271
+ };
272
+ bySymbolPath.set(symbolPath, symbol);
273
+ if (exported)
274
+ fileExports.push(symbolPath);
275
+ const list = sigIndex.get(sigTokens) ?? [];
276
+ list.push(symbolPath);
277
+ sigIndex.set(sigTokens, list);
278
+ }
279
+ // top-level functions
280
+ for (const fnNode of root.descendantsOfType([...decl.fn, "decorated_definition"])) {
281
+ const actual = unwrapDecorated(fnNode);
282
+ if (!decl.fn.includes(actual.type))
283
+ continue;
284
+ if (actual.parent && [...decl.cls].some((c) => hasAncestorOfType(actual, c)))
285
+ continue; // handled as a method below
286
+ const nameNode = actual.childForFieldName("name");
287
+ if (!nameNode)
288
+ continue;
289
+ addSymbol(nameNode.text, "function", actual, isExported(fnNode, decl.wrapper));
290
+ }
291
+ // top-level `const foo = () => {}` / `const foo = function () {}` — common for TSX components and JS handlers
292
+ if (lang !== "python") {
293
+ for (const declarator of root.descendantsOfType(["variable_declarator"])) {
294
+ if (hasAncestorOfType(declarator, "function_declaration") ||
295
+ hasAncestorOfType(declarator, "class_declaration"))
296
+ continue;
297
+ const value = declarator.childForFieldName("value");
298
+ const nameNode = declarator.childForFieldName("name");
299
+ if (!value || !nameNode || nameNode.type !== "identifier")
300
+ continue;
301
+ if (value.type !== "arrow_function" && value.type !== "function_expression")
302
+ continue;
303
+ const lexicalDecl = declarator.parent; // variable_declarator -> lexical_declaration
304
+ addSymbol(nameNode.text, "function", value, isExported(lexicalDecl ?? declarator, decl.wrapper));
305
+ }
306
+ }
307
+ // classes and their methods
308
+ for (const clsNode of root.descendantsOfType(decl.cls)) {
309
+ const nameNode = clsNode.childForFieldName("name");
310
+ if (!nameNode)
311
+ continue;
312
+ const className = nameNode.text;
313
+ addSymbol(className, "class", clsNode, isExported(clsNode, decl.wrapper));
314
+ const body = clsNode.childForFieldName("body");
315
+ if (!body)
316
+ continue;
317
+ const methodTypes = lang === "python" ? ["function_definition", "decorated_definition"] : ["method_definition"];
318
+ for (const mNode of body.descendantsOfType(methodTypes)) {
319
+ const actual = unwrapDecorated(mNode);
320
+ const mName = actual.childForFieldName("name");
321
+ if (!mName)
322
+ continue;
323
+ addSymbol(`${className}.${mName.text}`, "method", actual, false);
324
+ }
325
+ }
326
+ return { bySymbolPath, sigIndex, fileExports };
327
+ }
328
+ function hasAncestorOfType(node, type) {
329
+ let n = node.parent;
330
+ while (n) {
331
+ if (n.type === type)
332
+ return true;
333
+ n = n.parent;
334
+ }
335
+ return false;
336
+ }
337
+ export function fileExportsFingerprint(symbols) {
338
+ return fingerprintSet(symbols.fileExports.map((path) => `${path}:${symbols.bySymbolPath.get(path)?.sigTokens ?? ""}`));
339
+ }
340
+ /** Whole-file tiers for a file-only anchor (no `#Symbol`): same normalization pipeline, applied to the root node. */
341
+ export function computeWholeFileTiers(root, lang, normalizeLocals) {
342
+ const importedNames = collectImportedNames(root, lang);
343
+ const locals = collectLocalDeclared(root, [], lang);
344
+ return {
345
+ bodyNormalized: serializeBody(root, locals, normalizeLocals, new Map()),
346
+ deps: collectDeps(root, lang, importedNames),
347
+ };
348
+ }
349
+ //# sourceMappingURL=extract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../src/extract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { CheckResult } from "./actions.js";
2
+ export declare function formatText(result: CheckResult): string;
3
+ export declare function formatJson(result: CheckResult, repo: string | null): string;
4
+ export declare function formatGithub(result: CheckResult): string;
5
+ //# sourceMappingURL=format.d.ts.map