@nanonets/graft 0.15.0 → 0.18.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.
- package/README.md +17 -5
- package/dist/ai/crux.d.ts +14 -1
- package/dist/ai/crux.d.ts.map +1 -1
- package/dist/ai/crux.js +31 -1
- package/dist/ai/crux.js.map +1 -1
- package/dist/ai/failure.d.ts +13 -2
- package/dist/ai/failure.d.ts.map +1 -1
- package/dist/ai/failure.js +16 -4
- package/dist/ai/failure.js.map +1 -1
- package/dist/ai/llm/factory.d.ts +6 -1
- package/dist/ai/llm/factory.d.ts.map +1 -1
- package/dist/ai/llm/factory.js +8 -0
- package/dist/ai/llm/factory.js.map +1 -1
- package/dist/ai/llm/orcarouter.d.ts +34 -0
- package/dist/ai/llm/orcarouter.d.ts.map +1 -0
- package/dist/ai/llm/orcarouter.js +45 -0
- package/dist/ai/llm/orcarouter.js.map +1 -0
- package/dist/ai/providers.d.ts.map +1 -1
- package/dist/ai/providers.js +13 -3
- package/dist/ai/providers.js.map +1 -1
- package/dist/app/brain-build.d.ts +66 -0
- package/dist/app/brain-build.d.ts.map +1 -0
- package/dist/app/brain-build.js +169 -0
- package/dist/app/brain-build.js.map +1 -0
- package/dist/app/checkout.d.ts +53 -3
- package/dist/app/checkout.d.ts.map +1 -1
- package/dist/app/checkout.js +195 -27
- package/dist/app/checkout.js.map +1 -1
- package/dist/app/events.d.ts +7 -0
- package/dist/app/events.d.ts.map +1 -1
- package/dist/app/events.js +7 -2
- package/dist/app/events.js.map +1 -1
- package/dist/app/history.d.ts +128 -0
- package/dist/app/history.d.ts.map +1 -0
- package/dist/app/history.js +269 -0
- package/dist/app/history.js.map +1 -0
- package/dist/app/identity.d.ts +33 -0
- package/dist/app/identity.d.ts.map +1 -1
- package/dist/app/identity.js +72 -0
- package/dist/app/identity.js.map +1 -1
- package/dist/app/main.js +12 -0
- package/dist/app/main.js.map +1 -1
- package/dist/app/pages.d.ts +17 -0
- package/dist/app/pages.d.ts.map +1 -1
- package/dist/app/pages.js +112 -5
- package/dist/app/pages.js.map +1 -1
- package/dist/app/review-process.d.ts +66 -0
- package/dist/app/review-process.d.ts.map +1 -0
- package/dist/app/review-process.js +199 -0
- package/dist/app/review-process.js.map +1 -0
- package/dist/app/review-worker.d.ts +2 -0
- package/dist/app/review-worker.d.ts.map +1 -0
- package/dist/app/review-worker.js +108 -0
- package/dist/app/review-worker.js.map +1 -0
- package/dist/app/review.d.ts.map +1 -1
- package/dist/app/review.js +14 -1
- package/dist/app/review.js.map +1 -1
- package/dist/app/server.d.ts +22 -2
- package/dist/app/server.d.ts.map +1 -1
- package/dist/app/server.js +77 -3
- package/dist/app/server.js.map +1 -1
- package/dist/app/sources.d.ts +68 -0
- package/dist/app/sources.d.ts.map +1 -0
- package/dist/app/sources.js +341 -0
- package/dist/app/sources.js.map +1 -0
- package/dist/ask/ask.d.ts +6 -0
- package/dist/ask/ask.d.ts.map +1 -1
- package/dist/ask/ask.js +30 -2
- package/dist/ask/ask.js.map +1 -1
- package/dist/blast/blast-cli.d.ts.map +1 -1
- package/dist/blast/blast-cli.js +6 -30
- package/dist/blast/blast-cli.js.map +1 -1
- package/dist/blast/name.d.ts +13 -0
- package/dist/blast/name.d.ts.map +1 -1
- package/dist/blast/name.js +36 -0
- package/dist/blast/name.js.map +1 -1
- package/dist/brain/attach.d.ts +44 -0
- package/dist/brain/attach.d.ts.map +1 -0
- package/dist/brain/attach.js +63 -0
- package/dist/brain/attach.js.map +1 -0
- package/dist/brain/connect.d.ts +59 -0
- package/dist/brain/connect.d.ts.map +1 -0
- package/dist/brain/connect.js +80 -0
- package/dist/brain/connect.js.map +1 -0
- package/dist/brain/link.d.ts +82 -0
- package/dist/brain/link.d.ts.map +1 -0
- package/dist/brain/link.js +136 -0
- package/dist/brain/link.js.map +1 -0
- package/dist/brain/push.d.ts +72 -0
- package/dist/brain/push.d.ts.map +1 -0
- package/dist/brain/push.js +191 -0
- package/dist/brain/push.js.map +1 -0
- package/dist/brain/wire.d.ts +38 -0
- package/dist/brain/wire.d.ts.map +1 -0
- package/dist/brain/wire.js +133 -0
- package/dist/brain/wire.js.map +1 -0
- package/dist/claude/format.d.ts.map +1 -1
- package/dist/claude/format.js +10 -3
- package/dist/claude/format.js.map +1 -1
- package/dist/claude/hooks.d.ts.map +1 -1
- package/dist/claude/hooks.js +125 -24
- package/dist/claude/hooks.js.map +1 -1
- package/dist/claude/init.d.ts +6 -0
- package/dist/claude/init.d.ts.map +1 -1
- package/dist/claude/init.js +10 -2
- package/dist/claude/init.js.map +1 -1
- package/dist/claude/session-metrics.d.ts +73 -0
- package/dist/claude/session-metrics.d.ts.map +1 -0
- package/dist/claude/session-metrics.js +206 -0
- package/dist/claude/session-metrics.js.map +1 -0
- package/dist/claude/settings-merge.d.ts +25 -1
- package/dist/claude/settings-merge.d.ts.map +1 -1
- package/dist/claude/settings-merge.js +88 -25
- package/dist/claude/settings-merge.js.map +1 -1
- package/dist/claude/skill-template.d.ts.map +1 -1
- package/dist/claude/skill-template.js +6 -0
- package/dist/claude/skill-template.js.map +1 -1
- package/dist/claude/state.d.ts +26 -0
- package/dist/claude/state.d.ts.map +1 -1
- package/dist/claude/state.js +14 -1
- package/dist/claude/state.js.map +1 -1
- package/dist/claude/tally.d.ts +27 -0
- package/dist/claude/tally.d.ts.map +1 -1
- package/dist/claude/tally.js +74 -1
- package/dist/claude/tally.js.map +1 -1
- package/dist/cli.js +237 -4
- package/dist/cli.js.map +1 -1
- package/dist/context/build.d.ts +11 -0
- package/dist/context/build.d.ts.map +1 -1
- package/dist/context/build.js +27 -6
- package/dist/context/build.js.map +1 -1
- package/dist/context/check.d.ts.map +1 -1
- package/dist/context/check.js +5 -13
- package/dist/context/check.js.map +1 -1
- package/dist/context/node-file.d.ts +1 -1
- package/dist/context/node-file.d.ts.map +1 -1
- package/dist/context/node-file.js +38 -6
- package/dist/context/node-file.js.map +1 -1
- package/dist/context/price.d.ts +49 -0
- package/dist/context/price.d.ts.map +1 -0
- package/dist/context/price.js +83 -0
- package/dist/context/price.js.map +1 -0
- package/dist/context/savings.d.ts +20 -2
- package/dist/context/savings.d.ts.map +1 -1
- package/dist/context/savings.js +57 -4
- package/dist/context/savings.js.map +1 -1
- package/dist/engine.d.ts +2 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +1 -0
- package/dist/engine.js.map +1 -1
- package/dist/graph/cards.d.ts +4 -3
- package/dist/graph/cards.d.ts.map +1 -1
- package/dist/graph/cards.js +34 -6
- package/dist/graph/cards.js.map +1 -1
- package/dist/graph/enrich.d.ts +4 -4
- package/dist/graph/enrich.d.ts.map +1 -1
- package/dist/graph/enrich.js +32 -6
- package/dist/graph/enrich.js.map +1 -1
- package/dist/graph/generic.d.ts +10 -0
- package/dist/graph/generic.d.ts.map +1 -1
- package/dist/graph/generic.js +20 -2
- package/dist/graph/generic.js.map +1 -1
- package/dist/graph/workspace.d.ts +2 -0
- package/dist/graph/workspace.d.ts.map +1 -1
- package/dist/graph/workspace.js +173 -6
- package/dist/graph/workspace.js.map +1 -1
- package/dist/hosts/antigravity.d.ts +2 -2
- package/dist/hosts/antigravity.d.ts.map +1 -1
- package/dist/hosts/claude-global.d.ts +33 -0
- package/dist/hosts/claude-global.d.ts.map +1 -0
- package/dist/hosts/claude-global.js +118 -0
- package/dist/hosts/claude-global.js.map +1 -0
- package/dist/hosts/codex-hooks.d.ts +2 -6
- package/dist/hosts/codex-hooks.d.ts.map +1 -1
- package/dist/hosts/codex-hooks.js +7 -30
- package/dist/hosts/codex-hooks.js.map +1 -1
- package/dist/hosts/config-write.d.ts +36 -0
- package/dist/hosts/config-write.d.ts.map +1 -0
- package/dist/hosts/config-write.js +63 -0
- package/dist/hosts/config-write.js.map +1 -0
- package/dist/hosts/cursor-hooks.d.ts +18 -0
- package/dist/hosts/cursor-hooks.d.ts.map +1 -0
- package/dist/hosts/cursor-hooks.js +100 -0
- package/dist/hosts/cursor-hooks.js.map +1 -0
- package/dist/hosts/init.d.ts +2 -2
- package/dist/hosts/init.d.ts.map +1 -1
- package/dist/hosts/init.js +8 -2
- package/dist/hosts/init.js.map +1 -1
- package/dist/hosts/mcp-config.d.ts +3 -5
- package/dist/hosts/mcp-config.d.ts.map +1 -1
- package/dist/hosts/mcp-config.js +5 -10
- package/dist/hosts/mcp-config.js.map +1 -1
- package/dist/hosts/plan.d.ts.map +1 -1
- package/dist/hosts/plan.js +7 -1
- package/dist/hosts/plan.js.map +1 -1
- package/dist/hosts/retract.d.ts.map +1 -1
- package/dist/hosts/retract.js +33 -13
- package/dist/hosts/retract.js.map +1 -1
- package/dist/hosts/sections.d.ts +23 -2
- package/dist/hosts/sections.d.ts.map +1 -1
- package/dist/hosts/sections.js +25 -9
- package/dist/hosts/sections.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/ingest/fs.d.ts +20 -0
- package/dist/ingest/fs.d.ts.map +1 -1
- package/dist/ingest/fs.js +76 -3
- package/dist/ingest/fs.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +33 -4
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool-names.d.ts +20 -0
- package/dist/mcp/tool-names.d.ts.map +1 -0
- package/dist/mcp/tool-names.js +36 -0
- package/dist/mcp/tool-names.js.map +1 -0
- package/dist/mcp/tools.d.ts +11 -2
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +14 -22
- package/dist/mcp/tools.js.map +1 -1
- package/dist/telemetry/contract.d.ts.map +1 -1
- package/dist/telemetry/contract.js +10 -1
- package/dist/telemetry/contract.js.map +1 -1
- package/dist/telemetry/flush.d.ts.map +1 -1
- package/dist/telemetry/flush.js +1 -0
- package/dist/telemetry/flush.js.map +1 -1
- package/dist/telemetry/gate.d.ts +14 -0
- package/dist/telemetry/gate.d.ts.map +1 -1
- package/dist/telemetry/gate.js +18 -2
- package/dist/telemetry/gate.js.map +1 -1
- package/dist/telemetry/identity.d.ts +7 -0
- package/dist/telemetry/identity.d.ts.map +1 -1
- package/dist/telemetry/identity.js.map +1 -1
- package/dist/telemetry/index.d.ts +2 -2
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +2 -2
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/sessions.d.ts +19 -2
- package/dist/telemetry/sessions.d.ts.map +1 -1
- package/dist/telemetry/sessions.js +57 -40
- package/dist/telemetry/sessions.js.map +1 -1
- package/dist/telemetry/track.d.ts +22 -3
- package/dist/telemetry/track.d.ts.map +1 -1
- package/dist/telemetry/track.js +34 -5
- package/dist/telemetry/track.js.map +1 -1
- package/dist/upkeep-run.d.ts.map +1 -1
- package/dist/upkeep-run.js +12 -2
- package/dist/upkeep-run.js.map +1 -1
- package/dist/upkeep.d.ts +25 -4
- package/dist/upkeep.d.ts.map +1 -1
- package/dist/upkeep.js +40 -1
- package/dist/upkeep.js.map +1 -1
- package/dist/util/state.d.ts +9 -0
- package/dist/util/state.d.ts.map +1 -1
- package/dist/util/state.js.map +1 -1
- package/package.json +2 -2
- package/scripts/postinstall.mjs +42 -3
- package/scripts/run-tests.mjs +14 -0
package/dist/hosts/sections.d.ts
CHANGED
|
@@ -1,9 +1,30 @@
|
|
|
1
1
|
export declare const START = "<!-- graft:start -->";
|
|
2
2
|
export declare const END = "<!-- graft:end -->";
|
|
3
|
+
/**
|
|
4
|
+
* A brain's rules go in their OWN fenced block, not inside the instruction
|
|
5
|
+
* block above.
|
|
6
|
+
*
|
|
7
|
+
* They have to be separately addressable: the instruction body is static and
|
|
8
|
+
* rewritten by `init`, while rules change whenever the brain does and are
|
|
9
|
+
* refreshed on their own. One pair of markers for both would mean every rules
|
|
10
|
+
* refresh rewrites the instructions too, and `graft uninstall` could not remove
|
|
11
|
+
* one without the other.
|
|
12
|
+
*/
|
|
13
|
+
export declare const BRAIN_START = "<!-- graft:brain:start -->";
|
|
14
|
+
export declare const BRAIN_END = "<!-- graft:brain:end -->";
|
|
15
|
+
/** One addressable managed region in a file the user owns. */
|
|
16
|
+
export interface Markers {
|
|
17
|
+
start: string;
|
|
18
|
+
end: string;
|
|
19
|
+
}
|
|
20
|
+
export declare const GRAFT_MARKERS: Markers;
|
|
21
|
+
export declare const BRAIN_MARKERS: Markers;
|
|
22
|
+
/** Every managed region graft may own in a user-owned file. */
|
|
23
|
+
export declare const ALL_MARKERS: Markers[];
|
|
3
24
|
export type UpsertAction = 'created' | 'appended' | 'replaced' | 'unchanged';
|
|
4
25
|
type LineEnding = '\n' | '\r\n';
|
|
5
|
-
export declare function fencedBlock(body: string, eol?: LineEnding): string;
|
|
6
|
-
export declare function upsertSection(filePath: string, body: string): {
|
|
26
|
+
export declare function fencedBlock(body: string, eol?: LineEnding, markers?: Markers): string;
|
|
27
|
+
export declare function upsertSection(filePath: string, body: string, markers?: Markers): {
|
|
7
28
|
action: UpsertAction;
|
|
8
29
|
};
|
|
9
30
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sections.d.ts","sourceRoot":"","sources":["../../src/hosts/sections.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,KAAK,yBAAyB,CAAC;AAC5C,eAAO,MAAM,GAAG,uBAAuB,CAAC;AAExC,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;AAE7E,KAAK,UAAU,GAAG,IAAI,GAAG,MAAM,CAAC;AAEhC,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,UAAiB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"sections.d.ts","sourceRoot":"","sources":["../../src/hosts/sections.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,KAAK,yBAAyB,CAAC;AAC5C,eAAO,MAAM,GAAG,uBAAuB,CAAC;AAExC;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,+BAA+B,CAAC;AACxD,eAAO,MAAM,SAAS,6BAA6B,CAAC;AAEpD,8DAA8D;AAC9D,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,eAAO,MAAM,aAAa,EAAE,OAAoC,CAAC;AACjE,eAAO,MAAM,aAAa,EAAE,OAAgD,CAAC;AAE7E,+DAA+D;AAC/D,eAAO,MAAM,WAAW,EAAE,OAAO,EAAmC,CAAC;AAErE,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;AAE7E,KAAK,UAAU,GAAG,IAAI,GAAG,MAAM,CAAC;AAEhC,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,UAAiB,EAAE,OAAO,GAAE,OAAuB,GAAG,MAAM,CAM1G;AAeD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,OAAuB,GAAG;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,CA+BxH"}
|
package/dist/hosts/sections.js
CHANGED
|
@@ -6,11 +6,27 @@ import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
|
|
|
6
6
|
import { dirname } from 'node:path';
|
|
7
7
|
export const START = '<!-- graft:start -->';
|
|
8
8
|
export const END = '<!-- graft:end -->';
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* A brain's rules go in their OWN fenced block, not inside the instruction
|
|
11
|
+
* block above.
|
|
12
|
+
*
|
|
13
|
+
* They have to be separately addressable: the instruction body is static and
|
|
14
|
+
* rewritten by `init`, while rules change whenever the brain does and are
|
|
15
|
+
* refreshed on their own. One pair of markers for both would mean every rules
|
|
16
|
+
* refresh rewrites the instructions too, and `graft uninstall` could not remove
|
|
17
|
+
* one without the other.
|
|
18
|
+
*/
|
|
19
|
+
export const BRAIN_START = '<!-- graft:brain:start -->';
|
|
20
|
+
export const BRAIN_END = '<!-- graft:brain:end -->';
|
|
21
|
+
export const GRAFT_MARKERS = { start: START, end: END };
|
|
22
|
+
export const BRAIN_MARKERS = { start: BRAIN_START, end: BRAIN_END };
|
|
23
|
+
/** Every managed region graft may own in a user-owned file. */
|
|
24
|
+
export const ALL_MARKERS = [GRAFT_MARKERS, BRAIN_MARKERS];
|
|
25
|
+
export function fencedBlock(body, eol = '\n', markers = GRAFT_MARKERS) {
|
|
10
26
|
// Normalize any pre-existing '\r' out of the body first so callers passing
|
|
11
27
|
// a CRLF (or stray-CR) body never get doubled '\r' when eol is '\r\n'.
|
|
12
28
|
const normalizedBody = body.replace(/\r/g, '');
|
|
13
|
-
const block = `${
|
|
29
|
+
const block = `${markers.start}\n${normalizedBody.replace(/\s+$/, '')}\n${markers.end}`;
|
|
14
30
|
return eol === '\n' ? block : block.replace(/\n/g, '\r\n');
|
|
15
31
|
}
|
|
16
32
|
/** The file's dominant line ending: CRLF if any '\r\n' is present, else LF. */
|
|
@@ -25,9 +41,9 @@ function markerLineIndex(lines, marker, from = 0) {
|
|
|
25
41
|
}
|
|
26
42
|
return -1;
|
|
27
43
|
}
|
|
28
|
-
export function upsertSection(filePath, body) {
|
|
44
|
+
export function upsertSection(filePath, body, markers = GRAFT_MARKERS) {
|
|
29
45
|
if (!existsSync(filePath)) {
|
|
30
|
-
const block = fencedBlock(body);
|
|
46
|
+
const block = fencedBlock(body, '\n', markers);
|
|
31
47
|
mkdirSync(dirname(filePath), { recursive: true });
|
|
32
48
|
writeFileSync(filePath, `${block}\n`);
|
|
33
49
|
return { action: 'created' };
|
|
@@ -41,18 +57,18 @@ export function upsertSection(filePath, body) {
|
|
|
41
57
|
// trailing-'\r' element sat next to a '\n' join, e.g. right after END, or
|
|
42
58
|
// when the block was the entire file).
|
|
43
59
|
const lines = text.split(/\r\n|\n/);
|
|
44
|
-
const s = markerLineIndex(lines,
|
|
45
|
-
const e = s === -1 ? -1 : markerLineIndex(lines,
|
|
60
|
+
const s = markerLineIndex(lines, markers.start);
|
|
61
|
+
const e = s === -1 ? -1 : markerLineIndex(lines, markers.end, s + 1);
|
|
46
62
|
if (s !== -1 && e !== -1) {
|
|
47
63
|
const current = lines.slice(s, e + 1).join('\n');
|
|
48
|
-
if (current === fencedBlock(body))
|
|
64
|
+
if (current === fencedBlock(body, '\n', markers))
|
|
49
65
|
return { action: 'unchanged' };
|
|
50
|
-
const block = fencedBlock(body, eol);
|
|
66
|
+
const block = fencedBlock(body, eol, markers);
|
|
51
67
|
const next = [...lines.slice(0, s), ...block.split(eol), ...lines.slice(e + 1)];
|
|
52
68
|
writeFileSync(filePath, next.join(eol));
|
|
53
69
|
return { action: 'replaced' };
|
|
54
70
|
}
|
|
55
|
-
const block = fencedBlock(body, eol);
|
|
71
|
+
const block = fencedBlock(body, eol, markers);
|
|
56
72
|
const doubleEol = eol + eol;
|
|
57
73
|
const sep = text.endsWith(doubleEol) ? '' : text.endsWith(eol) ? eol : doubleEol;
|
|
58
74
|
writeFileSync(filePath, `${text}${sep}${block}${eol}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sections.js","sourceRoot":"","sources":["../../src/hosts/sections.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,MAAM,KAAK,GAAG,sBAAsB,CAAC;AAC5C,MAAM,CAAC,MAAM,GAAG,GAAG,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"sections.js","sourceRoot":"","sources":["../../src/hosts/sections.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -30,6 +30,8 @@ export type { ChatModel, ChatRequest, ChatResponse, Message, ToolSpec, ToolCall,
|
|
|
30
30
|
export { createChatModel, type ProviderKind, type ChatModelConfig } from "./ai/llm/factory.js";
|
|
31
31
|
export { OpenAIChatModel } from "./ai/llm/openai.js";
|
|
32
32
|
export { AnthropicChatModel } from "./ai/llm/anthropic.js";
|
|
33
|
+
export { LiteLLMChatModel, listLiteLLMModels, DEFAULT_LITELLM_BASE_URL } from "./ai/llm/litellm.js";
|
|
34
|
+
export { OrcaRouterChatModel, listOrcaRouterModels, DEFAULT_ORCAROUTER_BASE_URL } from "./ai/llm/orcarouter.js";
|
|
33
35
|
export { ChatSynthesizer } from "./ai/synthesize.js";
|
|
34
36
|
export type { Synthesizer, SynthNode, SynthLink, FileSummary } from "./ai/synthesize.js";
|
|
35
37
|
export { ChatSummarizer } from "./ai/summarize.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzG,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACrE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AACtE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEzF,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAG5E,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAClH,OAAO,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzG,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACrE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AACtE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEzF,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAG5E,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAClH,OAAO,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAGhH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -23,6 +23,8 @@ export { resolveConfig, DEFAULTS, DEFAULT_MODELS } from "./ai/providers.js";
|
|
|
23
23
|
export { createChatModel } from "./ai/llm/factory.js";
|
|
24
24
|
export { OpenAIChatModel } from "./ai/llm/openai.js";
|
|
25
25
|
export { AnthropicChatModel } from "./ai/llm/anthropic.js";
|
|
26
|
+
export { LiteLLMChatModel, listLiteLLMModels, DEFAULT_LITELLM_BASE_URL } from "./ai/llm/litellm.js";
|
|
27
|
+
export { OrcaRouterChatModel, listOrcaRouterModels, DEFAULT_ORCAROUTER_BASE_URL } from "./ai/llm/orcarouter.js";
|
|
26
28
|
// Engine ops, for advanced/custom setups.
|
|
27
29
|
export { ChatSynthesizer } from "./ai/synthesize.js";
|
|
28
30
|
export { ChatSummarizer } from "./ai/summarize.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAKtE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAI5E,OAAO,EAAE,eAAe,EAA2C,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAKtE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAI5E,OAAO,EAAE,eAAe,EAA2C,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAEhH,0CAA0C;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/ingest/fs.d.ts
CHANGED
|
@@ -55,5 +55,25 @@ export interface WalkOptions {
|
|
|
55
55
|
/** Include nested Git clones the parent index does not track. Default false. */
|
|
56
56
|
followNestedRepos?: boolean;
|
|
57
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Directory `walkDir` actually enumerates.
|
|
60
|
+
*
|
|
61
|
+
* `path.resolve` does not follow a symlink, and git discovers the repo from the
|
|
62
|
+
* child cwd. Unwrap a symlink-to-directory once so the walk runs inside the
|
|
63
|
+
* target. Ordinary directories stay as `resolve(dir)` — not `realpath` — so a
|
|
64
|
+
* macOS `/var/folders/…` scratch path is the path the caller handed us.
|
|
65
|
+
*
|
|
66
|
+
* A broken symlink throws instead of the `scandir ENOENT` `readdirSync` would
|
|
67
|
+
* raise after git fails. Internal symlink policy is not decided here.
|
|
68
|
+
*/
|
|
69
|
+
export declare function canonicalWalkRoot(dir: string): string;
|
|
70
|
+
/**
|
|
71
|
+
* Recursively list source files under `dir`. A directory symlink as the *input
|
|
72
|
+
* root* is unwrapped once ({@link canonicalWalkRoot}); emitted paths are remapped
|
|
73
|
+
* onto the caller-facing root so `relPosix` stays `src/foo.ts` rather than a
|
|
74
|
+
* `../` escape through the physical path (macOS `/tmp` → `/private/tmp`).
|
|
75
|
+
* Symlinks *inside* the tree are not followed: git still `lstat`s each listed
|
|
76
|
+
* path, and the filesystem walk still requires `Dirent.isFile` / `isDirectory`.
|
|
77
|
+
*/
|
|
58
78
|
export declare function walkDir(dir: string, includes?: ReadonlySet<string>, opts?: WalkOptions): string[];
|
|
59
79
|
//# sourceMappingURL=fs.d.ts.map
|
package/dist/ingest/fs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/ingest/fs.ts"],"names":[],"mappings":"AAOA,kEAAkE;AAClE,eAAO,MAAM,SAAS,aAgBpB,CAAC;AAEH,uFAAuF;AACvF,eAAO,MAAM,cAAc,UAAY,CAAC;AAExC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAInF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,WAAW;IAC1B,gFAAgF;IAChF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,OAAO,CACrB,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,EAC9B,IAAI,GAAE,WAAgB,GACrB,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/ingest/fs.ts"],"names":[],"mappings":"AAOA,kEAAkE;AAClE,eAAO,MAAM,SAAS,aAgBpB,CAAC;AAEH,uFAAuF;AACvF,eAAO,MAAM,cAAc,UAAY,CAAC;AAExC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAInF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,WAAW;IAC1B,gFAAgF;IAChF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA0BrD;AAoBD;;;;;;;GAOG;AACH,wBAAgB,OAAO,CACrB,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,EAC9B,IAAI,GAAE,WAAgB,GACrB,MAAM,EAAE,CAKV"}
|
package/dist/ingest/fs.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Filesystem walking used by `init`/`check` to enumerate a repo's source files.
|
|
3
3
|
*/
|
|
4
4
|
import { spawnSync } from "node:child_process";
|
|
5
|
-
import { existsSync, lstatSync, readdirSync, statSync } from "node:fs";
|
|
6
|
-
import { join, relative, resolve } from "node:path";
|
|
5
|
+
import { existsSync, lstatSync, readdirSync, realpathSync, statSync } from "node:fs";
|
|
6
|
+
import { isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
7
7
|
/** Directories that are dependency/build output, never source. */
|
|
8
8
|
export const SKIP_DIRS = new Set([
|
|
9
9
|
"node_modules",
|
|
@@ -51,8 +51,81 @@ export function shouldSkipDir(name, includes) {
|
|
|
51
51
|
return false;
|
|
52
52
|
return SKIP_DIRS.has(name);
|
|
53
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Directory `walkDir` actually enumerates.
|
|
56
|
+
*
|
|
57
|
+
* `path.resolve` does not follow a symlink, and git discovers the repo from the
|
|
58
|
+
* child cwd. Unwrap a symlink-to-directory once so the walk runs inside the
|
|
59
|
+
* target. Ordinary directories stay as `resolve(dir)` — not `realpath` — so a
|
|
60
|
+
* macOS `/var/folders/…` scratch path is the path the caller handed us.
|
|
61
|
+
*
|
|
62
|
+
* A broken symlink throws instead of the `scandir ENOENT` `readdirSync` would
|
|
63
|
+
* raise after git fails. Internal symlink policy is not decided here.
|
|
64
|
+
*/
|
|
65
|
+
export function canonicalWalkRoot(dir) {
|
|
66
|
+
const abs = resolve(dir);
|
|
67
|
+
let st;
|
|
68
|
+
try {
|
|
69
|
+
st = lstatSync(abs);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return abs;
|
|
73
|
+
}
|
|
74
|
+
if (!st.isSymbolicLink())
|
|
75
|
+
return abs;
|
|
76
|
+
let real;
|
|
77
|
+
try {
|
|
78
|
+
real = realpathSync(abs);
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
const code = err && typeof err === "object" && "code" in err ? String(err.code) : "";
|
|
82
|
+
if (code === "ELOOP")
|
|
83
|
+
throw new Error(`symbolic link loop: ${abs}`);
|
|
84
|
+
throw new Error(`broken symbolic link: ${abs}`);
|
|
85
|
+
}
|
|
86
|
+
let realSt;
|
|
87
|
+
try {
|
|
88
|
+
realSt = statSync(real);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
throw new Error(`broken symbolic link: ${abs}`);
|
|
92
|
+
}
|
|
93
|
+
if (!realSt.isDirectory())
|
|
94
|
+
return abs;
|
|
95
|
+
return real;
|
|
96
|
+
}
|
|
97
|
+
function escapedCanonical(canonical, abs) {
|
|
98
|
+
const rel = relative(canonical, abs);
|
|
99
|
+
return rel === ".." || rel.startsWith(`..${sep}`) || isAbsolute(rel);
|
|
100
|
+
}
|
|
101
|
+
/** Keep emitted paths on the requested root so relative paths stay stable. */
|
|
102
|
+
function remapWalkPaths(requested, canonical, files) {
|
|
103
|
+
if (requested === canonical)
|
|
104
|
+
return files;
|
|
105
|
+
const out = [];
|
|
106
|
+
for (const abs of files) {
|
|
107
|
+
if (escapedCanonical(canonical, abs))
|
|
108
|
+
continue;
|
|
109
|
+
const rel = relative(canonical, abs);
|
|
110
|
+
if (rel === "")
|
|
111
|
+
continue;
|
|
112
|
+
out.push(join(requested, rel));
|
|
113
|
+
}
|
|
114
|
+
return out;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Recursively list source files under `dir`. A directory symlink as the *input
|
|
118
|
+
* root* is unwrapped once ({@link canonicalWalkRoot}); emitted paths are remapped
|
|
119
|
+
* onto the caller-facing root so `relPosix` stays `src/foo.ts` rather than a
|
|
120
|
+
* `../` escape through the physical path (macOS `/tmp` → `/private/tmp`).
|
|
121
|
+
* Symlinks *inside* the tree are not followed: git still `lstat`s each listed
|
|
122
|
+
* path, and the filesystem walk still requires `Dirent.isFile` / `isDirectory`.
|
|
123
|
+
*/
|
|
54
124
|
export function walkDir(dir, includes, opts = {}) {
|
|
55
|
-
|
|
125
|
+
const requested = resolve(dir);
|
|
126
|
+
const root = canonicalWalkRoot(requested);
|
|
127
|
+
const files = gitVisibleFiles(root, includes, opts) ?? walkFilesystem(root, includes);
|
|
128
|
+
return remapWalkPaths(requested, root, files);
|
|
56
129
|
}
|
|
57
130
|
/** Git's canonical working-tree file set, relative to `dir`. Tracked files are
|
|
58
131
|
* deliberately included even when a later ignore rule matches them; `.gitignore`
|
package/dist/ingest/fs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/ingest/fs.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/ingest/fs.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAiEA;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,SAAM,GAAG,IAAI,CAgFtF"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
import { createInterface } from 'node:readline';
|
|
6
6
|
import { TOOLS, callTool } from './tools.js';
|
|
7
7
|
import { mcpInstructions } from './instructions.js';
|
|
8
|
+
import { hasGraftIndex } from '../graph/root.js';
|
|
9
|
+
import { mainWorktreeRoot } from '../graph/seed.js';
|
|
8
10
|
import { runUpkeep } from '../upkeep-run.js';
|
|
9
11
|
import { runningVersion } from '../upkeep.js';
|
|
10
12
|
import { maybeFlushInBackground, track } from '../telemetry/index.js';
|
|
@@ -31,6 +33,32 @@ function reply(id, result) {
|
|
|
31
33
|
function replyError(id, code, message) {
|
|
32
34
|
send({ jsonrpc: '2.0', id, error: { code, message } });
|
|
33
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Which tools this server admits to having.
|
|
38
|
+
*
|
|
39
|
+
* `hosts/claude-global.ts` registers graft at the *user* MCP scope, which starts this
|
|
40
|
+
* server in every project the user opens — including ones that never asked for graft.
|
|
41
|
+
* Six tool schemas is real context, charged on every turn of every session, and in a
|
|
42
|
+
* repo with no graph every one of them can only answer "run graft build". So a repo
|
|
43
|
+
* that never invited graft is told there is nothing to call.
|
|
44
|
+
*
|
|
45
|
+
* The parent-checkout clause is not an optimization, it is the case the global
|
|
46
|
+
* registration exists for: a fresh `git worktree add` has no `graft/` of its own
|
|
47
|
+
* (it's gitignored, so git never checks it out) and gets one from its parent on the
|
|
48
|
+
* first query — see graph/seed.ts. Gating on this tree alone would hide graft in
|
|
49
|
+
* precisely the worktree the user is trying to work in, which is the bug, inverted.
|
|
50
|
+
*
|
|
51
|
+
* A `--dir` override is an explicit "the graph is over there", so it always
|
|
52
|
+
* advertises without a probe.
|
|
53
|
+
*/
|
|
54
|
+
function advertised(root, dirOverride) {
|
|
55
|
+
if (dirOverride !== undefined)
|
|
56
|
+
return TOOLS;
|
|
57
|
+
if (hasGraftIndex(root))
|
|
58
|
+
return TOOLS;
|
|
59
|
+
const main = mainWorktreeRoot(root);
|
|
60
|
+
return main && hasGraftIndex(main) ? TOOLS : [];
|
|
61
|
+
}
|
|
34
62
|
/**
|
|
35
63
|
* `version` is threaded in from the CLI rather than read here: `readCurrentVersion`
|
|
36
64
|
* resolves package.json relative to the calling module, and from `dist/mcp/` that
|
|
@@ -86,11 +114,12 @@ export function startMcpServer(root, dirOverride, version = '0') {
|
|
|
86
114
|
if (!isNotification)
|
|
87
115
|
reply(id, {});
|
|
88
116
|
return;
|
|
89
|
-
case 'tools/list':
|
|
90
|
-
if (
|
|
91
|
-
|
|
92
|
-
}
|
|
117
|
+
case 'tools/list': {
|
|
118
|
+
if (isNotification)
|
|
119
|
+
return;
|
|
120
|
+
reply(id, { tools: advertised(root, dirOverride).map((t) => ({ name: t.name, description: t.description, inputSchema: t.inputSchema })) });
|
|
93
121
|
return;
|
|
122
|
+
}
|
|
94
123
|
case 'tools/call': {
|
|
95
124
|
if (isNotification)
|
|
96
125
|
return;
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The graft MCP tool names, kept in a zero-import module so both the MCP server
|
|
3
|
+
* (which also pulls in the whole engine) and the session-scoring hooks (which must
|
|
4
|
+
* stay cheap and engine-free) can share one list. Adding a dependency here would
|
|
5
|
+
* drag it into every hook invocation, so this file imports nothing.
|
|
6
|
+
*/
|
|
7
|
+
/** The tools graft advertises today, as their canonical names. */
|
|
8
|
+
export declare const GRAFT_MCP_TOOL_CANONICAL: readonly ["graft_find_code", "graft_find_all", "graft_trace_calls", "graft_file_api", "graft_repo_map", "graft_check_freshness"];
|
|
9
|
+
/**
|
|
10
|
+
* The pre-0.8.1 tool names, still accepted. A name is an API: skills, saved
|
|
11
|
+
* prompts and other people's notes reference the old ones, so they map to the
|
|
12
|
+
* canonical name rather than 404.
|
|
13
|
+
*/
|
|
14
|
+
export declare const GRAFT_MCP_TOOL_ALIASES: Record<string, string>;
|
|
15
|
+
/** Every name graft answers to (canonical + legacy), lower-cased, for a membership
|
|
16
|
+
* test that anchors on the real vocabulary instead of a loose `includes('graft')`. */
|
|
17
|
+
export declare const GRAFT_MCP_TOOL_NAMES: ReadonlySet<string>;
|
|
18
|
+
/** Canonical name for a requested tool: itself, or what it was renamed to. */
|
|
19
|
+
export declare function canonicalToolName(name: string): string;
|
|
20
|
+
//# sourceMappingURL=tool-names.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-names.d.ts","sourceRoot":"","sources":["../../src/mcp/tool-names.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kEAAkE;AAClE,eAAO,MAAM,wBAAwB,kIAO3B,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAOzD,CAAC;AAEF;uFACuF;AACvF,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAEpD,CAAC;AAEF,8EAA8E;AAC9E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The graft MCP tool names, kept in a zero-import module so both the MCP server
|
|
3
|
+
* (which also pulls in the whole engine) and the session-scoring hooks (which must
|
|
4
|
+
* stay cheap and engine-free) can share one list. Adding a dependency here would
|
|
5
|
+
* drag it into every hook invocation, so this file imports nothing.
|
|
6
|
+
*/
|
|
7
|
+
/** The tools graft advertises today, as their canonical names. */
|
|
8
|
+
export const GRAFT_MCP_TOOL_CANONICAL = [
|
|
9
|
+
'graft_find_code',
|
|
10
|
+
'graft_find_all',
|
|
11
|
+
'graft_trace_calls',
|
|
12
|
+
'graft_file_api',
|
|
13
|
+
'graft_repo_map',
|
|
14
|
+
'graft_check_freshness',
|
|
15
|
+
];
|
|
16
|
+
/**
|
|
17
|
+
* The pre-0.8.1 tool names, still accepted. A name is an API: skills, saved
|
|
18
|
+
* prompts and other people's notes reference the old ones, so they map to the
|
|
19
|
+
* canonical name rather than 404.
|
|
20
|
+
*/
|
|
21
|
+
export const GRAFT_MCP_TOOL_ALIASES = {
|
|
22
|
+
graft_ask: 'graft_find_code',
|
|
23
|
+
graft_grep: 'graft_find_all',
|
|
24
|
+
graft_callers: 'graft_trace_calls',
|
|
25
|
+
graft_skeleton: 'graft_file_api',
|
|
26
|
+
graft_map: 'graft_repo_map',
|
|
27
|
+
graft_check: 'graft_check_freshness',
|
|
28
|
+
};
|
|
29
|
+
/** Every name graft answers to (canonical + legacy), lower-cased, for a membership
|
|
30
|
+
* test that anchors on the real vocabulary instead of a loose `includes('graft')`. */
|
|
31
|
+
export const GRAFT_MCP_TOOL_NAMES = new Set([...GRAFT_MCP_TOOL_CANONICAL, ...Object.keys(GRAFT_MCP_TOOL_ALIASES)].map((n) => n.toLowerCase()));
|
|
32
|
+
/** Canonical name for a requested tool: itself, or what it was renamed to. */
|
|
33
|
+
export function canonicalToolName(name) {
|
|
34
|
+
return GRAFT_MCP_TOOL_ALIASES[name] ?? name;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=tool-names.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-names.js","sourceRoot":"","sources":["../../src/mcp/tool-names.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kEAAkE;AAClE,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,iBAAiB;IACjB,gBAAgB;IAChB,mBAAmB;IACnB,gBAAgB;IAChB,gBAAgB;IAChB,uBAAuB;CACf,CAAC;AAEX;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAA2B;IAC5D,SAAS,EAAE,iBAAiB;IAC5B,UAAU,EAAE,gBAAgB;IAC5B,aAAa,EAAE,mBAAmB;IAClC,cAAc,EAAE,gBAAgB;IAChC,SAAS,EAAE,gBAAgB;IAC3B,WAAW,EAAE,uBAAuB;CACrC,CAAC;AAEF;uFACuF;AACvF,MAAM,CAAC,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAC9D,CAAC,GAAG,wBAAwB,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAClG,CAAC;AAEF,8EAA8E;AAC9E,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,sBAAsB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAC9C,CAAC"}
|
package/dist/mcp/tools.d.ts
CHANGED
|
@@ -1,11 +1,20 @@
|
|
|
1
|
+
import { canonicalToolName } from './tool-names.js';
|
|
1
2
|
export interface ToolDef {
|
|
2
3
|
name: string;
|
|
3
4
|
description: string;
|
|
4
5
|
inputSchema: object;
|
|
5
6
|
}
|
|
6
7
|
export declare const TOOLS: ToolDef[];
|
|
7
|
-
/**
|
|
8
|
-
|
|
8
|
+
/**
|
|
9
|
+
* The pre-0.8.1 tool names, still accepted, live in the dependency-free
|
|
10
|
+
* `tool-names.ts` (shared with the engine-free session hooks). The names were the
|
|
11
|
+
* reason for renaming: when a host defers graft's schemas it shows the model the
|
|
12
|
+
* *names alone* — no descriptions — so `graft_ask` had to compete with `Grep` on
|
|
13
|
+
* 9 characters. The new names say what they do; the aliases keep old callers
|
|
14
|
+
* (skills, saved prompts, notes) from 404-ing. Re-exported here so existing
|
|
15
|
+
* importers of `canonicalToolName` from this module keep working.
|
|
16
|
+
*/
|
|
17
|
+
export { canonicalToolName };
|
|
9
18
|
export declare function callTool(root: string, requestedName: string, args: Record<string, unknown>, dirOverride?: string): Promise<{
|
|
10
19
|
text: string;
|
|
11
20
|
isError: boolean;
|
package/dist/mcp/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAQD,eAAO,MAAM,KAAK,EAAE,OAAO,EAoF1B,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAQD,eAAO,MAAM,KAAK,EAAE,OAAO,EAoF1B,CAAC;AA+EF;;;;;;;;GAQG;AACH,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAE7B,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAuB7C"}
|
package/dist/mcp/tools.js
CHANGED
|
@@ -11,11 +11,13 @@ import { ensureFreshChildren, ensureFreshGraph, refreshNote } from '../graph/ref
|
|
|
11
11
|
import { contextDirFor } from '../context/node-file.js';
|
|
12
12
|
import { resolveSymbol, edgeWalk } from '../graph/traverse.js';
|
|
13
13
|
import { callersSavings, headerOf, hitLine, looseNoteFor } from '../graph/traverse-cli.js';
|
|
14
|
-
import { withSavings } from '../context/savings.js';
|
|
14
|
+
import { withSavings, setInputRate } from '../context/savings.js';
|
|
15
|
+
import { sessionInputRate } from '../claude/session-metrics.js';
|
|
15
16
|
import { grepGraph } from '../search/grep.js';
|
|
16
17
|
import { formatGrepResult, zeroHitNote } from '../search/grep-cli.js';
|
|
17
18
|
import { buildRepoMap, formatRepoMap } from '../graph/map.js';
|
|
18
19
|
import { federateAsk, federateCallers, federateCheck, federateGrep, federateMap, readWorkspace, } from '../graph/workspace.js';
|
|
20
|
+
import { canonicalToolName } from './tool-names.js';
|
|
19
21
|
const NO_GRAPH = 'no graph found — run `graft build` first';
|
|
20
22
|
function unknownSymbolText(query) {
|
|
21
23
|
return `no symbol "${query}" in the graph — check spelling or run \`graft build\``;
|
|
@@ -171,28 +173,15 @@ async function callWorkspaceTool(root, dirOverride, name, args) {
|
|
|
171
173
|
* `graft_check_freshness` answer about a graph it just fixed, i.e. always "OK". */
|
|
172
174
|
const NO_REFRESH_TOOLS = new Set(['graft_check_freshness']);
|
|
173
175
|
/**
|
|
174
|
-
* The pre-0.8.1 tool names, still accepted
|
|
175
|
-
*
|
|
176
|
-
*
|
|
177
|
-
*
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
* outcome than an ugly name. Not advertised in {@link TOOLS} — the roster stays six
|
|
182
|
-
* — so this costs nothing in the payload and only ever rescues an old caller.
|
|
176
|
+
* The pre-0.8.1 tool names, still accepted, live in the dependency-free
|
|
177
|
+
* `tool-names.ts` (shared with the engine-free session hooks). The names were the
|
|
178
|
+
* reason for renaming: when a host defers graft's schemas it shows the model the
|
|
179
|
+
* *names alone* — no descriptions — so `graft_ask` had to compete with `Grep` on
|
|
180
|
+
* 9 characters. The new names say what they do; the aliases keep old callers
|
|
181
|
+
* (skills, saved prompts, notes) from 404-ing. Re-exported here so existing
|
|
182
|
+
* importers of `canonicalToolName` from this module keep working.
|
|
183
183
|
*/
|
|
184
|
-
|
|
185
|
-
graft_ask: 'graft_find_code',
|
|
186
|
-
graft_grep: 'graft_find_all',
|
|
187
|
-
graft_callers: 'graft_trace_calls',
|
|
188
|
-
graft_skeleton: 'graft_file_api',
|
|
189
|
-
graft_map: 'graft_repo_map',
|
|
190
|
-
graft_check: 'graft_check_freshness',
|
|
191
|
-
};
|
|
192
|
-
/** Canonical name for a requested tool: itself, or what it was renamed to. */
|
|
193
|
-
export function canonicalToolName(name) {
|
|
194
|
-
return TOOL_ALIASES[name] ?? name;
|
|
195
|
-
}
|
|
184
|
+
export { canonicalToolName };
|
|
196
185
|
export async function callTool(root, requestedName, args, dirOverride) {
|
|
197
186
|
try {
|
|
198
187
|
const name = canonicalToolName(requestedName);
|
|
@@ -200,6 +189,9 @@ export async function callTool(root, requestedName, args, dirOverride) {
|
|
|
200
189
|
// Freshness first: an answer that cites file:line has to be about the code as
|
|
201
190
|
// it is right now, including edits nobody has committed (or even saved through
|
|
202
191
|
// this agent). ~3ms when nothing moved; a structural, $0 rebuild when it did.
|
|
192
|
+
// Same reason as the CLI's `noteQuery`: price this session's tokens once,
|
|
193
|
+
// here, so the formatters downstream can put a dollar figure in the nudge.
|
|
194
|
+
setInputRate(sessionInputRate(root));
|
|
203
195
|
let note = null;
|
|
204
196
|
if (!NO_REFRESH_TOOLS.has(name)) {
|
|
205
197
|
const r = ws
|