@nanonets/graft 0.21.1 → 0.22.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 +549 -315
- package/dist/app/review-process.d.ts.map +1 -1
- package/dist/app/review-process.js +6 -5
- package/dist/app/review-process.js.map +1 -1
- package/dist/app/sources.js +2 -2
- package/dist/app/sources.js.map +1 -1
- package/dist/ask/ask.d.ts +12 -6
- package/dist/ask/ask.d.ts.map +1 -1
- package/dist/ask/ask.js +28 -38
- package/dist/ask/ask.js.map +1 -1
- package/dist/bin/graft.d.ts +3 -0
- package/dist/bin/graft.d.ts.map +1 -0
- package/dist/bin/graft.js +8 -0
- package/dist/bin/graft.js.map +1 -0
- package/dist/bin/trail.d.ts +3 -0
- package/dist/bin/trail.d.ts.map +1 -0
- package/dist/bin/trail.js +6 -0
- package/dist/bin/trail.js.map +1 -0
- package/dist/blast/blast-cli.d.ts.map +1 -1
- package/dist/blast/blast-cli.js +2 -1
- package/dist/blast/blast-cli.js.map +1 -1
- package/dist/blast/render.d.ts.map +1 -1
- package/dist/blast/render.js +3 -2
- package/dist/blast/render.js.map +1 -1
- package/dist/brand.d.ts +97 -0
- package/dist/brand.d.ts.map +1 -0
- package/dist/brand.js +254 -0
- package/dist/brand.js.map +1 -0
- package/dist/check/local-check.d.ts +104 -0
- package/dist/check/local-check.d.ts.map +1 -0
- package/dist/check/local-check.js +830 -0
- package/dist/check/local-check.js.map +1 -0
- package/dist/check/types.d.ts +31 -0
- package/dist/check/types.d.ts.map +1 -0
- package/dist/check/types.js +2 -0
- package/dist/check/types.js.map +1 -0
- package/dist/claude/format.d.ts +44 -1
- package/dist/claude/format.d.ts.map +1 -1
- package/dist/claude/format.js +113 -19
- package/dist/claude/format.js.map +1 -1
- package/dist/claude/hook-layers.d.ts +8 -0
- package/dist/claude/hook-layers.d.ts.map +1 -0
- package/dist/claude/hook-layers.js +72 -0
- package/dist/claude/hook-layers.js.map +1 -0
- package/dist/claude/hooks.d.ts +34 -0
- package/dist/claude/hooks.d.ts.map +1 -1
- package/dist/claude/hooks.js +220 -12
- package/dist/claude/hooks.js.map +1 -1
- package/dist/claude/init.d.ts +12 -1
- package/dist/claude/init.d.ts.map +1 -1
- package/dist/claude/init.js +48 -19
- package/dist/claude/init.js.map +1 -1
- package/dist/claude/session-metrics.d.ts +1 -1
- package/dist/claude/session-metrics.d.ts.map +1 -1
- package/dist/claude/session-metrics.js +11 -8
- package/dist/claude/session-metrics.js.map +1 -1
- package/dist/claude/settings-merge.d.ts +1 -0
- package/dist/claude/settings-merge.d.ts.map +1 -1
- package/dist/claude/settings-merge.js +21 -18
- package/dist/claude/settings-merge.js.map +1 -1
- package/dist/claude/shim-template.d.ts +17 -2
- package/dist/claude/shim-template.d.ts.map +1 -1
- package/dist/claude/shim-template.js +116 -22
- package/dist/claude/shim-template.js.map +1 -1
- package/dist/claude/skill-template.d.ts +10 -1
- package/dist/claude/skill-template.d.ts.map +1 -1
- package/dist/claude/skill-template.js +132 -1
- package/dist/claude/skill-template.js.map +1 -1
- package/dist/claude/state.d.ts +8 -0
- package/dist/claude/state.d.ts.map +1 -1
- package/dist/claude/state.js.map +1 -1
- package/dist/claude/statusline.d.ts.map +1 -1
- package/dist/claude/statusline.js +4 -1
- package/dist/claude/statusline.js.map +1 -1
- package/dist/claude/tally.js +1 -1
- package/dist/claude/tally.js.map +1 -1
- package/dist/cli-epilogue.d.ts +0 -6
- package/dist/cli-epilogue.d.ts.map +1 -1
- package/dist/cli-epilogue.js +5 -4
- package/dist/cli-epilogue.js.map +1 -1
- package/dist/cli-meta.d.ts +8 -0
- package/dist/cli-meta.d.ts.map +1 -1
- package/dist/cli-meta.js +28 -8
- package/dist/cli-meta.js.map +1 -1
- package/dist/cli-picker.d.ts.map +1 -1
- package/dist/cli-picker.js +11 -7
- package/dist/cli-picker.js.map +1 -1
- package/dist/cli.d.ts +0 -5
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +1039 -559
- package/dist/cli.js.map +1 -1
- package/dist/cloud/diff.d.ts +18 -0
- package/dist/cloud/diff.d.ts.map +1 -0
- package/dist/cloud/diff.js +58 -0
- package/dist/cloud/diff.js.map +1 -0
- package/dist/cloud/nudge.d.ts +66 -0
- package/dist/cloud/nudge.d.ts.map +1 -0
- package/dist/cloud/nudge.js +269 -0
- package/dist/cloud/nudge.js.map +1 -0
- package/dist/cloud/workspace-sync.d.ts +58 -0
- package/dist/cloud/workspace-sync.d.ts.map +1 -0
- package/dist/cloud/workspace-sync.js +268 -0
- package/dist/cloud/workspace-sync.js.map +1 -0
- package/dist/cloud/workspace.d.ts +159 -0
- package/dist/cloud/workspace.d.ts.map +1 -0
- package/dist/cloud/workspace.js +134 -0
- package/dist/cloud/workspace.js.map +1 -0
- package/dist/context/check.d.ts +1 -1
- package/dist/context/check.d.ts.map +1 -1
- package/dist/context/check.js +9 -8
- package/dist/context/check.js.map +1 -1
- package/dist/context/node-file.js +1 -1
- package/dist/context/node-file.js.map +1 -1
- package/dist/context/savings.d.ts.map +1 -1
- package/dist/context/savings.js +10 -7
- package/dist/context/savings.js.map +1 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +3 -1
- package/dist/engine.js.map +1 -1
- package/dist/graph/build.d.ts +30 -0
- package/dist/graph/build.d.ts.map +1 -1
- package/dist/graph/build.js +65 -19
- package/dist/graph/build.js.map +1 -1
- package/dist/graph/cards.d.ts.map +1 -1
- package/dist/graph/cards.js +4 -2
- package/dist/graph/cards.js.map +1 -1
- package/dist/graph/check.d.ts.map +1 -1
- package/dist/graph/check.js +17 -18
- package/dist/graph/check.js.map +1 -1
- package/dist/graph/container.d.ts.map +1 -1
- package/dist/graph/container.js +7 -2
- package/dist/graph/container.js.map +1 -1
- package/dist/graph/extract-cache.d.ts +4 -0
- package/dist/graph/extract-cache.d.ts.map +1 -1
- package/dist/graph/extract-cache.js.map +1 -1
- package/dist/graph/extract.d.ts +2 -0
- package/dist/graph/extract.d.ts.map +1 -1
- package/dist/graph/extract.js +5 -32
- package/dist/graph/extract.js.map +1 -1
- package/dist/graph/generic.d.ts +7 -1
- package/dist/graph/generic.d.ts.map +1 -1
- package/dist/graph/generic.js +48 -8
- package/dist/graph/generic.js.map +1 -1
- package/dist/graph/native.d.ts +38 -0
- package/dist/graph/native.d.ts.map +1 -0
- package/dist/graph/native.js +169 -0
- package/dist/graph/native.js.map +1 -0
- package/dist/graph/refresh.d.ts.map +1 -1
- package/dist/graph/refresh.js +3 -2
- package/dist/graph/refresh.js.map +1 -1
- package/dist/graph/traverse-cli.d.ts.map +1 -1
- package/dist/graph/traverse-cli.js +4 -3
- package/dist/graph/traverse-cli.js.map +1 -1
- package/dist/graph/workspace-cli.d.ts +2 -0
- package/dist/graph/workspace-cli.d.ts.map +1 -1
- package/dist/graph/workspace-cli.js +13 -1
- package/dist/graph/workspace-cli.js.map +1 -1
- package/dist/graph/workspace.d.ts.map +1 -1
- package/dist/graph/workspace.js +6 -5
- package/dist/graph/workspace.js.map +1 -1
- package/dist/hosts/antigravity.d.ts +10 -3
- package/dist/hosts/antigravity.d.ts.map +1 -1
- package/dist/hosts/antigravity.js +27 -10
- package/dist/hosts/antigravity.js.map +1 -1
- package/dist/hosts/claude-global.d.ts +27 -4
- package/dist/hosts/claude-global.d.ts.map +1 -1
- package/dist/hosts/claude-global.js +90 -9
- package/dist/hosts/claude-global.js.map +1 -1
- package/dist/hosts/codex-hooks.d.ts.map +1 -1
- package/dist/hosts/codex-hooks.js +1 -2
- package/dist/hosts/codex-hooks.js.map +1 -1
- package/dist/hosts/config-write.d.ts.map +1 -1
- package/dist/hosts/config-write.js +2 -1
- package/dist/hosts/config-write.js.map +1 -1
- package/dist/hosts/cursor-hooks.d.ts +5 -2
- package/dist/hosts/cursor-hooks.d.ts.map +1 -1
- package/dist/hosts/cursor-hooks.js +14 -9
- package/dist/hosts/cursor-hooks.js.map +1 -1
- package/dist/hosts/init.d.ts +3 -0
- package/dist/hosts/init.d.ts.map +1 -1
- package/dist/hosts/init.js +32 -10
- package/dist/hosts/init.js.map +1 -1
- package/dist/hosts/instructions.d.ts +9 -4
- package/dist/hosts/instructions.d.ts.map +1 -1
- package/dist/hosts/instructions.js +19 -16
- package/dist/hosts/instructions.js.map +1 -1
- package/dist/hosts/mcp-config.d.ts +19 -4
- package/dist/hosts/mcp-config.d.ts.map +1 -1
- package/dist/hosts/mcp-config.js +81 -30
- package/dist/hosts/mcp-config.js.map +1 -1
- package/dist/hosts/plan.d.ts.map +1 -1
- package/dist/hosts/plan.js +11 -9
- package/dist/hosts/plan.js.map +1 -1
- package/dist/hosts/registry.d.ts +25 -2
- package/dist/hosts/registry.d.ts.map +1 -1
- package/dist/hosts/registry.js +53 -0
- package/dist/hosts/registry.js.map +1 -1
- package/dist/hosts/retract.d.ts.map +1 -1
- package/dist/hosts/retract.js +73 -33
- package/dist/hosts/retract.js.map +1 -1
- package/dist/hosts/sections.d.ts +17 -1
- package/dist/hosts/sections.d.ts.map +1 -1
- package/dist/hosts/sections.js +52 -2
- package/dist/hosts/sections.js.map +1 -1
- package/dist/mcp/instructions.d.ts +1 -25
- package/dist/mcp/instructions.d.ts.map +1 -1
- package/dist/mcp/instructions.js +6 -4
- package/dist/mcp/instructions.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +7 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool-names.d.ts +10 -3
- package/dist/mcp/tool-names.d.ts.map +1 -1
- package/dist/mcp/tool-names.js +13 -5
- package/dist/mcp/tool-names.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +6 -5
- package/dist/mcp/tools.js.map +1 -1
- package/dist/notes/ask-notes.d.ts +8 -0
- package/dist/notes/ask-notes.d.ts.map +1 -0
- package/dist/notes/ask-notes.js +18 -0
- package/dist/notes/ask-notes.js.map +1 -0
- package/dist/notes/branches.d.ts +85 -0
- package/dist/notes/branches.d.ts.map +1 -0
- package/dist/notes/branches.js +238 -0
- package/dist/notes/branches.js.map +1 -0
- package/dist/notes/cold-start.d.ts +127 -0
- package/dist/notes/cold-start.d.ts.map +1 -0
- package/dist/notes/cold-start.js +476 -0
- package/dist/notes/cold-start.js.map +1 -0
- package/dist/notes/git-facts.d.ts +17 -0
- package/dist/notes/git-facts.d.ts.map +1 -0
- package/dist/notes/git-facts.js +117 -0
- package/dist/notes/git-facts.js.map +1 -0
- package/dist/notes/home.d.ts +87 -0
- package/dist/notes/home.d.ts.map +1 -0
- package/dist/notes/home.js +423 -0
- package/dist/notes/home.js.map +1 -0
- package/dist/notes/notes.d.ts +178 -0
- package/dist/notes/notes.d.ts.map +1 -0
- package/dist/notes/notes.js +498 -0
- package/dist/notes/notes.js.map +1 -0
- package/dist/notes/repo-trail.d.ts +16 -0
- package/dist/notes/repo-trail.d.ts.map +1 -0
- package/dist/notes/repo-trail.js +74 -0
- package/dist/notes/repo-trail.js.map +1 -0
- package/dist/notes/session-cost.d.ts +21 -0
- package/dist/notes/session-cost.d.ts.map +1 -0
- package/dist/notes/session-cost.js +162 -0
- package/dist/notes/session-cost.js.map +1 -0
- package/dist/search/grep-cli.d.ts.map +1 -1
- package/dist/search/grep-cli.js +4 -3
- package/dist/search/grep-cli.js.map +1 -1
- package/dist/skills/skills.d.ts +118 -0
- package/dist/skills/skills.d.ts.map +1 -0
- package/dist/skills/skills.js +370 -0
- package/dist/skills/skills.js.map +1 -0
- package/dist/telemetry/contract.d.ts +2 -14
- package/dist/telemetry/contract.d.ts.map +1 -1
- package/dist/telemetry/contract.js +39 -24
- package/dist/telemetry/contract.js.map +1 -1
- package/dist/telemetry/gate.d.ts.map +1 -1
- package/dist/telemetry/gate.js +2 -1
- package/dist/telemetry/gate.js.map +1 -1
- package/dist/telemetry/notice.d.ts +1 -1
- package/dist/telemetry/notice.d.ts.map +1 -1
- package/dist/telemetry/notice.js +6 -5
- package/dist/telemetry/notice.js.map +1 -1
- package/dist/telemetry/track.d.ts.map +1 -1
- package/dist/telemetry/track.js +5 -0
- package/dist/telemetry/track.js.map +1 -1
- package/dist/upkeep-run.d.ts +7 -0
- package/dist/upkeep-run.d.ts.map +1 -1
- package/dist/upkeep-run.js +52 -12
- package/dist/upkeep-run.js.map +1 -1
- package/dist/upkeep.d.ts +9 -19
- package/dist/upkeep.d.ts.map +1 -1
- package/dist/upkeep.js +38 -59
- package/dist/upkeep.js.map +1 -1
- package/dist/util/browser.d.ts +3 -0
- package/dist/util/browser.d.ts.map +1 -0
- package/dist/util/browser.js +14 -0
- package/dist/util/browser.js.map +1 -0
- package/dist/util/front-matter.d.ts +19 -0
- package/dist/util/front-matter.d.ts.map +1 -0
- package/dist/util/front-matter.js +21 -0
- package/dist/util/front-matter.js.map +1 -0
- package/dist/util/state.d.ts +1 -18
- package/dist/util/state.d.ts.map +1 -1
- package/dist/util/state.js +4 -2
- package/dist/util/state.js.map +1 -1
- package/dist/viz/assemble.js +1 -1
- package/dist/viz/assemble.js.map +1 -1
- package/dist/viz/serve.d.ts.map +1 -1
- package/dist/viz/serve.js +4 -3
- package/dist/viz/serve.js.map +1 -1
- package/package.json +7 -7
- package/scripts/pack-trail.mjs +53 -0
- package/scripts/postinstall.mjs +17 -2
- package/scripts/run-tests.mjs +4 -1
- package/dist/brain/attach.d.ts +0 -44
- package/dist/brain/attach.d.ts.map +0 -1
- package/dist/brain/attach.js +0 -63
- package/dist/brain/attach.js.map +0 -1
- package/dist/brain/claude-md.d.ts +0 -61
- package/dist/brain/claude-md.d.ts.map +0 -1
- package/dist/brain/claude-md.js +0 -171
- package/dist/brain/claude-md.js.map +0 -1
- package/dist/brain/connect.d.ts +0 -59
- package/dist/brain/connect.d.ts.map +0 -1
- package/dist/brain/connect.js +0 -80
- package/dist/brain/connect.js.map +0 -1
- package/dist/brain/context-files.d.ts +0 -79
- package/dist/brain/context-files.d.ts.map +0 -1
- package/dist/brain/context-files.js +0 -245
- package/dist/brain/context-files.js.map +0 -1
- package/dist/brain/link.d.ts +0 -106
- package/dist/brain/link.d.ts.map +0 -1
- package/dist/brain/link.js +0 -167
- package/dist/brain/link.js.map +0 -1
- package/dist/brain/pull.d.ts +0 -48
- package/dist/brain/pull.d.ts.map +0 -1
- package/dist/brain/pull.js +0 -257
- package/dist/brain/pull.js.map +0 -1
- package/dist/brain/push.d.ts +0 -155
- package/dist/brain/push.d.ts.map +0 -1
- package/dist/brain/push.js +0 -304
- package/dist/brain/push.js.map +0 -1
- package/dist/brain/signup.d.ts +0 -117
- package/dist/brain/signup.d.ts.map +0 -1
- package/dist/brain/signup.js +0 -276
- package/dist/brain/signup.js.map +0 -1
- package/dist/brain/upload.d.ts +0 -61
- package/dist/brain/upload.d.ts.map +0 -1
- package/dist/brain/upload.js +0 -210
- package/dist/brain/upload.js.map +0 -1
- package/dist/brain/watch.d.ts +0 -209
- package/dist/brain/watch.d.ts.map +0 -1
- package/dist/brain/watch.js +0 -397
- package/dist/brain/watch.js.map +0 -1
- package/dist/brain/wire.d.ts +0 -38
- package/dist/brain/wire.d.ts.map +0 -1
- package/dist/brain/wire.js +0 -133
- package/dist/brain/wire.js.map +0 -1
- package/dist/legacy-args.d.ts +0 -12
- package/dist/legacy-args.d.ts.map +0 -1
- package/dist/legacy-args.js +0 -31
- package/dist/legacy-args.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context-files.js","sourceRoot":"","sources":["../../src/brain/context-files.ts"],"names":[],"mappings":"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"}
|
package/dist/brain/link.d.ts
DELETED
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
/** How long a cached rule set is served before upkeep refreshes it. */
|
|
2
|
-
export declare const RULES_TTL_MS: number;
|
|
3
|
-
/**
|
|
4
|
-
* The TTL used while the cache holds NO rules.
|
|
5
|
-
*
|
|
6
|
-
* A brain is connected during onboarding while it is still being mined, so the
|
|
7
|
-
* first pull legitimately returns nothing. Six hours of that is the difference
|
|
8
|
-
* between the feature working and the user concluding it does not: they wired
|
|
9
|
-
* graft up, got an empty rulebook, and nothing would go back for the real one
|
|
10
|
-
* until tomorrow. Two minutes costs one cheap request per session until the
|
|
11
|
-
* rules land, and then the normal TTL takes over.
|
|
12
|
-
*/
|
|
13
|
-
export declare const EMPTY_RULES_TTL_MS: number;
|
|
14
|
-
/** One rule from the brain, anchored to a symbol in this repo. */
|
|
15
|
-
export interface BrainRule {
|
|
16
|
-
ruleId: string;
|
|
17
|
-
/** A graft node id: `<path>#<QualifiedName>`. */
|
|
18
|
-
symbol: string;
|
|
19
|
-
/** The symbol's body hash when the rule was mined; '' when unrecorded. */
|
|
20
|
-
fingerprint: string;
|
|
21
|
-
rule: string;
|
|
22
|
-
/** Deep link to the commit or pull request that established it. */
|
|
23
|
-
sourceUrl?: string;
|
|
24
|
-
}
|
|
25
|
-
/** The cached rule set, as stored under the repo's graft cache. */
|
|
26
|
-
export interface RulesCache {
|
|
27
|
-
brainId: string;
|
|
28
|
-
fetchedAt: number;
|
|
29
|
-
rules: BrainRule[];
|
|
30
|
-
/** When a refresh was last ATTEMPTED, successful or not. Separate from
|
|
31
|
-
* `fetchedAt`, which records when rules last actually arrived: without the
|
|
32
|
-
* distinction, a brain that is still building would be re-checked on every
|
|
33
|
-
* single command, because its `fetchedAt` never advances. */
|
|
34
|
-
checkedAt?: number;
|
|
35
|
-
}
|
|
36
|
-
/** The persisted brain link. */
|
|
37
|
-
export interface BrainLink {
|
|
38
|
-
brainId: string;
|
|
39
|
-
/** Workspace API key (`nn...`). Stored in the git-ignored `.graft/`. */
|
|
40
|
-
token: string;
|
|
41
|
-
/** Set only when the user pointed graft at a non-default host. */
|
|
42
|
-
baseUrl?: string;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* The link for repo `dir`, or null when it has none.
|
|
46
|
-
*
|
|
47
|
-
* `GRAFT_BRAIN_TOKEN` / `GRAFT_BRAIN_ID` override the stored pair, so CI can
|
|
48
|
-
* attach a brain without writing to the checkout.
|
|
49
|
-
*/
|
|
50
|
-
export declare function readLink(dir: string): BrainLink | null;
|
|
51
|
-
/** Persist the link for repo `dir`, merging into any existing build config.
|
|
52
|
-
*
|
|
53
|
-
* The write is what creates `.graft/config.json`, and that file holds the read
|
|
54
|
-
* token — which is exactly why this is also where it gets ignored. The comment
|
|
55
|
-
* on {@link BrainLink} has claimed `.graft/` was "git-ignored" since the day it
|
|
56
|
-
* was written, and nothing ever made it true: `ensureGitignored` only ever ran
|
|
57
|
-
* for the graph cache. Every repository anyone ran `graft trail connect` in was
|
|
58
|
-
* therefore one `git add -A` away from publishing a credential. */
|
|
59
|
-
export declare function writeLink(dir: string, link: BrainLink): void;
|
|
60
|
-
/** Forget the link for repo `dir`. Leaves the cached rules for `uninstall` to remove. */
|
|
61
|
-
export declare function clearLink(dir: string): void;
|
|
62
|
-
/** Where the rule cache lives: beside the graph, since it is derived data. */
|
|
63
|
-
export declare function rulesCachePath(dir: string): string;
|
|
64
|
-
export declare function readRulesCache(dir: string): RulesCache | null;
|
|
65
|
-
export declare function writeRulesCache(dir: string, cache: RulesCache): void;
|
|
66
|
-
/**
|
|
67
|
-
* Whether a cached set is old enough to refetch.
|
|
68
|
-
*
|
|
69
|
-
* Keyed off the last ATTEMPT, not the last success, and with a much shorter
|
|
70
|
-
* window while the cache is empty — see EMPTY_RULES_TTL_MS for why that case
|
|
71
|
-
* is the one that matters.
|
|
72
|
-
*/
|
|
73
|
-
export declare function cacheIsStale(cache: RulesCache | null, now?: number): boolean;
|
|
74
|
-
/** Record that a refresh was attempted, without claiming rules arrived. */
|
|
75
|
-
export declare function markRulesChecked(dir: string, now?: number): void;
|
|
76
|
-
/**
|
|
77
|
-
* The base URL for a link, honouring the env override first so a misconfigured
|
|
78
|
-
* stored value can always be corrected without editing a file.
|
|
79
|
-
*/
|
|
80
|
-
export declare function baseUrlFor(link: BrainLink): string;
|
|
81
|
-
/** The API host before there is a link to read one from: signing up. */
|
|
82
|
-
export declare function apiBaseUrl(): string;
|
|
83
|
-
/** A sign-up an agent-run push started and has not collected yet. */
|
|
84
|
-
export interface PendingSignup {
|
|
85
|
-
/** The state in the link, which is what claims the trail. */
|
|
86
|
-
state: string;
|
|
87
|
-
/** The repository the link was for, so a changed remote starts over. */
|
|
88
|
-
repo: string;
|
|
89
|
-
createdAt: number;
|
|
90
|
-
}
|
|
91
|
-
/** The sign-up waiting on repo `dir`, or null when there is none or it is too
|
|
92
|
-
* old to claim, or it was for a different repository. */
|
|
93
|
-
export declare function readPendingSignup(dir: string, repo: string, maxAgeMs: number, now?: number): PendingSignup | null;
|
|
94
|
-
/** Save the sign-up an agent-run push just started. Git-ignored like the link,
|
|
95
|
-
* because the state claims a read token. */
|
|
96
|
-
export declare function writePendingSignup(dir: string, pending: PendingSignup): void;
|
|
97
|
-
export declare function clearPendingSignup(dir: string): void;
|
|
98
|
-
/**
|
|
99
|
-
* Fetch the brain's symbol-anchored rules.
|
|
100
|
-
*
|
|
101
|
-
* Returns null on any failure — an unreachable brain, a revoked token, a
|
|
102
|
-
* malformed body. Never throws: `ask` degrades to the code-only answer it gave
|
|
103
|
-
* before a brain was attached, which is the whole reason the cache exists.
|
|
104
|
-
*/
|
|
105
|
-
export declare function fetchRules(link: BrainLink, fetchImpl?: typeof fetch): Promise<BrainRule[] | null>;
|
|
106
|
-
//# sourceMappingURL=link.d.ts.map
|
package/dist/brain/link.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/brain/link.ts"],"names":[],"mappings":"AAsBA,uEAAuE;AACvE,eAAO,MAAM,YAAY,QAAqB,CAAC;AAE/C;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,QAAgB,CAAC;AAEhD,kEAAkE;AAClE,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,mEAAmE;AACnE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB;;;iEAG6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,gCAAgC;AAChC,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAStD;AAED;;;;;;;mEAOmE;AACnE,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAG5D;AAED,yFAAyF;AACzF,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAE7D;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAEpE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,EAAE,GAAG,SAAa,GAAG,OAAO,CAIhF;AAED,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,IAAI,CAIpE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAElD;AAED,wEAAwE;AACxE,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,qEAAqE;AACrE,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;yDACyD;AACzD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,aAAa,GAAG,IAAI,CAIrH;AAED;4CAC4C;AAC5C,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAG5E;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEpD;AAeD;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,SAAS,EACf,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CA4B7B"}
|
package/dist/brain/link.js
DELETED
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The link between a repo's graft graph and a Trail brain.
|
|
3
|
-
*
|
|
4
|
-
* A brain holds the rules mined out of this repository's history — what the
|
|
5
|
-
* team decided and why, which the code graph cannot see. Graft holds the code
|
|
6
|
-
* and can say which symbols an answer touches. This module is the join: the
|
|
7
|
-
* token identifying the brain, and the rules cached beside it so `ask` never
|
|
8
|
-
* waits on the network.
|
|
9
|
-
*
|
|
10
|
-
* The link lives in the per-repo, git-ignored `.graft/config.json`, next to the
|
|
11
|
-
* other persisted build choices. Not in `~/.graft/`: a brain belongs to one
|
|
12
|
-
* repository, and two checkouts of different repos on one machine must not
|
|
13
|
-
* share one.
|
|
14
|
-
*/
|
|
15
|
-
import { readBuildConfig, patchBuildConfig, cacheDir, readJson, writeJsonAtomic } from '../util/state.js';
|
|
16
|
-
import { join } from 'node:path';
|
|
17
|
-
import { ensureGitignored, LINK_NOTE } from '../context/node-file.js';
|
|
18
|
-
import { BUILD_CONFIG_DIR } from '../util/state.js';
|
|
19
|
-
/** Default API host. Overridden by GRAFT_BRAIN_URL, for staging and self-hosted. */
|
|
20
|
-
const DEFAULT_BRAIN_BASE_URL = 'https://agents.nanonets.com';
|
|
21
|
-
/** How long a cached rule set is served before upkeep refreshes it. */
|
|
22
|
-
export const RULES_TTL_MS = 6 * 60 * 60 * 1000; // 6 hours
|
|
23
|
-
/**
|
|
24
|
-
* The TTL used while the cache holds NO rules.
|
|
25
|
-
*
|
|
26
|
-
* A brain is connected during onboarding while it is still being mined, so the
|
|
27
|
-
* first pull legitimately returns nothing. Six hours of that is the difference
|
|
28
|
-
* between the feature working and the user concluding it does not: they wired
|
|
29
|
-
* graft up, got an empty rulebook, and nothing would go back for the real one
|
|
30
|
-
* until tomorrow. Two minutes costs one cheap request per session until the
|
|
31
|
-
* rules land, and then the normal TTL takes over.
|
|
32
|
-
*/
|
|
33
|
-
export const EMPTY_RULES_TTL_MS = 2 * 60 * 1000;
|
|
34
|
-
/**
|
|
35
|
-
* The link for repo `dir`, or null when it has none.
|
|
36
|
-
*
|
|
37
|
-
* `GRAFT_BRAIN_TOKEN` / `GRAFT_BRAIN_ID` override the stored pair, so CI can
|
|
38
|
-
* attach a brain without writing to the checkout.
|
|
39
|
-
*/
|
|
40
|
-
export function readLink(dir) {
|
|
41
|
-
const envToken = process.env.GRAFT_BRAIN_TOKEN;
|
|
42
|
-
const envBrain = process.env.GRAFT_BRAIN_ID;
|
|
43
|
-
if (envToken && envBrain) {
|
|
44
|
-
return { brainId: envBrain, token: envToken, baseUrl: process.env.GRAFT_BRAIN_URL };
|
|
45
|
-
}
|
|
46
|
-
const stored = readBuildConfig(dir)?.brain;
|
|
47
|
-
if (!stored?.brainId || !stored?.token)
|
|
48
|
-
return null;
|
|
49
|
-
return stored;
|
|
50
|
-
}
|
|
51
|
-
/** Persist the link for repo `dir`, merging into any existing build config.
|
|
52
|
-
*
|
|
53
|
-
* The write is what creates `.graft/config.json`, and that file holds the read
|
|
54
|
-
* token — which is exactly why this is also where it gets ignored. The comment
|
|
55
|
-
* on {@link BrainLink} has claimed `.graft/` was "git-ignored" since the day it
|
|
56
|
-
* was written, and nothing ever made it true: `ensureGitignored` only ever ran
|
|
57
|
-
* for the graph cache. Every repository anyone ran `graft trail connect` in was
|
|
58
|
-
* therefore one `git add -A` away from publishing a credential. */
|
|
59
|
-
export function writeLink(dir, link) {
|
|
60
|
-
patchBuildConfig(dir, { brain: link });
|
|
61
|
-
ensureGitignored(dir, join(dir, BUILD_CONFIG_DIR), LINK_NOTE);
|
|
62
|
-
}
|
|
63
|
-
/** Forget the link for repo `dir`. Leaves the cached rules for `uninstall` to remove. */
|
|
64
|
-
export function clearLink(dir) {
|
|
65
|
-
patchBuildConfig(dir, { brain: undefined });
|
|
66
|
-
}
|
|
67
|
-
/** Where the rule cache lives: beside the graph, since it is derived data. */
|
|
68
|
-
export function rulesCachePath(dir) {
|
|
69
|
-
return join(cacheDir(dir), 'brain-rules.json');
|
|
70
|
-
}
|
|
71
|
-
export function readRulesCache(dir) {
|
|
72
|
-
return readJson(rulesCachePath(dir));
|
|
73
|
-
}
|
|
74
|
-
export function writeRulesCache(dir, cache) {
|
|
75
|
-
writeJsonAtomic(rulesCachePath(dir), cache, true);
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Whether a cached set is old enough to refetch.
|
|
79
|
-
*
|
|
80
|
-
* Keyed off the last ATTEMPT, not the last success, and with a much shorter
|
|
81
|
-
* window while the cache is empty — see EMPTY_RULES_TTL_MS for why that case
|
|
82
|
-
* is the one that matters.
|
|
83
|
-
*/
|
|
84
|
-
export function cacheIsStale(cache, now = Date.now()) {
|
|
85
|
-
if (!cache)
|
|
86
|
-
return true;
|
|
87
|
-
const ttl = cache.rules.length === 0 ? EMPTY_RULES_TTL_MS : RULES_TTL_MS;
|
|
88
|
-
return now - (cache.checkedAt ?? cache.fetchedAt) > ttl;
|
|
89
|
-
}
|
|
90
|
-
/** Record that a refresh was attempted, without claiming rules arrived. */
|
|
91
|
-
export function markRulesChecked(dir, now = Date.now()) {
|
|
92
|
-
const cache = readRulesCache(dir);
|
|
93
|
-
if (!cache)
|
|
94
|
-
return;
|
|
95
|
-
writeRulesCache(dir, { ...cache, checkedAt: now });
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* The base URL for a link, honouring the env override first so a misconfigured
|
|
99
|
-
* stored value can always be corrected without editing a file.
|
|
100
|
-
*/
|
|
101
|
-
export function baseUrlFor(link) {
|
|
102
|
-
return (process.env.GRAFT_BRAIN_URL || link.baseUrl || DEFAULT_BRAIN_BASE_URL).replace(/\/+$/, '');
|
|
103
|
-
}
|
|
104
|
-
/** The API host before there is a link to read one from: signing up. */
|
|
105
|
-
export function apiBaseUrl() {
|
|
106
|
-
return (process.env.GRAFT_BRAIN_URL || DEFAULT_BRAIN_BASE_URL).replace(/\/+$/, '');
|
|
107
|
-
}
|
|
108
|
-
/** The sign-up waiting on repo `dir`, or null when there is none or it is too
|
|
109
|
-
* old to claim, or it was for a different repository. */
|
|
110
|
-
export function readPendingSignup(dir, repo, maxAgeMs, now = Date.now()) {
|
|
111
|
-
const p = readBuildConfig(dir)?.pendingSignup;
|
|
112
|
-
if (!p?.state || p.repo !== repo || !(now - p.createdAt < maxAgeMs))
|
|
113
|
-
return null;
|
|
114
|
-
return p;
|
|
115
|
-
}
|
|
116
|
-
/** Save the sign-up an agent-run push just started. Git-ignored like the link,
|
|
117
|
-
* because the state claims a read token. */
|
|
118
|
-
export function writePendingSignup(dir, pending) {
|
|
119
|
-
patchBuildConfig(dir, { pendingSignup: pending });
|
|
120
|
-
ensureGitignored(dir, join(dir, BUILD_CONFIG_DIR), LINK_NOTE);
|
|
121
|
-
}
|
|
122
|
-
export function clearPendingSignup(dir) {
|
|
123
|
-
patchBuildConfig(dir, { pendingSignup: undefined });
|
|
124
|
-
}
|
|
125
|
-
/** Timeout for one rules fetch. Short: `ask` must never block on this. */
|
|
126
|
-
const FETCH_TIMEOUT_MS = 5000;
|
|
127
|
-
/**
|
|
128
|
-
* Fetch the brain's symbol-anchored rules.
|
|
129
|
-
*
|
|
130
|
-
* Returns null on any failure — an unreachable brain, a revoked token, a
|
|
131
|
-
* malformed body. Never throws: `ask` degrades to the code-only answer it gave
|
|
132
|
-
* before a brain was attached, which is the whole reason the cache exists.
|
|
133
|
-
*/
|
|
134
|
-
export async function fetchRules(link, fetchImpl = fetch) {
|
|
135
|
-
// The PUBLIC, token-authenticated route: graft runs on a laptop with no
|
|
136
|
-
// session, and the token it holds is scoped to this one brain rather than the
|
|
137
|
-
// workspace. The protected route is for the app itself.
|
|
138
|
-
const url = `${baseUrlFor(link)}/api/public/brains/${encodeURIComponent(link.brainId)}/rules/anchors`;
|
|
139
|
-
try {
|
|
140
|
-
const res = await fetchImpl(url, {
|
|
141
|
-
headers: { authorization: `Bearer ${link.token}`, accept: 'application/json' },
|
|
142
|
-
signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),
|
|
143
|
-
});
|
|
144
|
-
if (!res.ok)
|
|
145
|
-
return null;
|
|
146
|
-
const body = (await res.json());
|
|
147
|
-
if (!Array.isArray(body.anchors))
|
|
148
|
-
return null;
|
|
149
|
-
const out = [];
|
|
150
|
-
for (const a of body.anchors) {
|
|
151
|
-
if (!a?.symbol || !a?.rule)
|
|
152
|
-
continue;
|
|
153
|
-
out.push({
|
|
154
|
-
ruleId: String(a.rule_id ?? ''),
|
|
155
|
-
symbol: a.symbol,
|
|
156
|
-
fingerprint: String(a.fingerprint ?? ''),
|
|
157
|
-
rule: a.rule,
|
|
158
|
-
sourceUrl: a.source_url || undefined,
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
return out;
|
|
162
|
-
}
|
|
163
|
-
catch {
|
|
164
|
-
return null;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
//# sourceMappingURL=link.js.map
|
package/dist/brain/link.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/brain/link.ts"],"names":[],"mappings":"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"}
|
package/dist/brain/pull.d.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { type ConnectResult } from "./connect.js";
|
|
2
|
-
import type { BrainLink } from "./link.js";
|
|
3
|
-
import { type Suggestions } from "./watch.js";
|
|
4
|
-
export interface PullOptions {
|
|
5
|
-
home: string;
|
|
6
|
-
/** The agents this repo is wired for; empty means no choice was recorded. */
|
|
7
|
-
wired: string[];
|
|
8
|
-
dryRun?: boolean;
|
|
9
|
-
fetchImpl?: typeof fetch;
|
|
10
|
-
write?: (line: string) => void;
|
|
11
|
-
}
|
|
12
|
-
/** The rules line: how many, and which files they are in. */
|
|
13
|
-
export declare function rulesLine(repo: string, res: ConnectResult): string | null;
|
|
14
|
-
/**
|
|
15
|
-
* Trail's suggestions, cut to the files the wired agents read: how many, and
|
|
16
|
-
* whose files they are (`the files claude and cursor read`).
|
|
17
|
-
*
|
|
18
|
-
* Every suggestion Trail has made, whatever became of it — the counts it sends
|
|
19
|
-
* do not say which are still waiting for review and which were dismissed.
|
|
20
|
-
*/
|
|
21
|
-
export declare function suggestedFor(s: Suggestions | undefined, wired: string[]): {
|
|
22
|
-
count: number;
|
|
23
|
-
whose: string;
|
|
24
|
-
};
|
|
25
|
-
/**
|
|
26
|
-
* The suggestions line after a build:
|
|
27
|
-
* `● 18 suggestions for the files claude, agents and cursor read`. Null when
|
|
28
|
-
* there are none to mention.
|
|
29
|
-
*/
|
|
30
|
-
export declare function suggestionsLine(s: Suggestions | undefined, wired: string[], again: boolean): string | null;
|
|
31
|
-
/**
|
|
32
|
-
* What a pull says about the suggestions it did not write:
|
|
33
|
-
* `● 20 suggested so far for the files claude read, 2 of them accepted`.
|
|
34
|
-
*
|
|
35
|
-
* This is what lets an agent watching the trail say "there are suggestions
|
|
36
|
-
* waiting for you" before anything has been accepted. "So far", because the
|
|
37
|
-
* build keeps adding them after the push returns. Null when Trail sent no
|
|
38
|
-
* counts, or counts that cannot hold what was accepted.
|
|
39
|
-
*/
|
|
40
|
-
export declare function suggestedLine(suggested: {
|
|
41
|
-
count: number;
|
|
42
|
-
whose: string;
|
|
43
|
-
}, accepted: number): string | null;
|
|
44
|
-
/**
|
|
45
|
-
* Run the pull. Returns the exit code; every line goes through `write`.
|
|
46
|
-
*/
|
|
47
|
-
export declare function runTrailPull(repo: string, link: BrainLink, opts: PullOptions): Promise<number>;
|
|
48
|
-
//# sourceMappingURL=pull.d.ts.map
|
package/dist/brain/pull.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/brain/pull.ts"],"names":[],"mappings":"AAYA,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAchE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAQD,6DAA6D;AAC7D,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CASzE;AAQD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,WAAW,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAwB1G;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,WAAW,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAI1G;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI1G;AAiCD;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAiIpG"}
|
package/dist/brain/pull.js
DELETED
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `graft trail pull`: one command for both things a trail hands this repo.
|
|
3
|
-
*
|
|
4
|
-
* First the rules, refreshed into graft's own blocks in the agent files (what
|
|
5
|
-
* `graft trail pull` always did). Then every change accepted in Trail, for every
|
|
6
|
-
* context file the picked agents read — the root CLAUDE.md (what `graft
|
|
7
|
-
* claude-md pull` did, and still does, as an alias of this), and then AGENTS.md,
|
|
8
|
-
* folder CLAUDE.md files, Cursor rules and skills when Trail serves them.
|
|
9
|
-
*
|
|
10
|
-
* Files for agents that were not picked are neither listed nor written.
|
|
11
|
-
*/
|
|
12
|
-
import { isAbsolute, relative } from "node:path";
|
|
13
|
-
import { connectBrain } from "./connect.js";
|
|
14
|
-
import { fetchAcceptedChanges, markApplied } from "./claude-md.js";
|
|
15
|
-
import { changeSummary, fetchContextFiles, kindForPath, markContextFilesApplied, planContextFile, readByWired, readersOf, writePlannedFile, } from "./context-files.js";
|
|
16
|
-
import { reviewUrl } from "./signup.js";
|
|
17
|
-
import { fetchRepoState } from "./watch.js";
|
|
18
|
-
import { CONTEXT_FILE_KINDS, countBucket } from "../telemetry/contract.js";
|
|
19
|
-
import { track } from "../telemetry/track.js";
|
|
20
|
-
/** Repo-relative, forward slashes, for printing. */
|
|
21
|
-
function show(repo, path) {
|
|
22
|
-
const rel = isAbsolute(path) ? relative(repo, path) : path;
|
|
23
|
-
return rel.split("\\").join("/");
|
|
24
|
-
}
|
|
25
|
-
/** The rules line: how many, and which files they are in. */
|
|
26
|
-
export function rulesLine(repo, res) {
|
|
27
|
-
if (res.warning)
|
|
28
|
-
return `⚠ ${res.warning}`;
|
|
29
|
-
if (res.ruleCount === 0)
|
|
30
|
-
return "· the trail has no rules yet — run graft trail push to read this repo into it";
|
|
31
|
-
const n = res.ruleCount.toLocaleString("en-US");
|
|
32
|
-
const where = res.writes.map((w) => show(repo, w.path)).join(", ");
|
|
33
|
-
const rules = `${n} rule${res.ruleCount === 1 ? "" : "s"}`;
|
|
34
|
-
if (!where)
|
|
35
|
-
return `✓ ${rules} pulled · no instruction file to write them into — graft ask still carries them`;
|
|
36
|
-
if (res.writes.every((w) => w.action === "unchanged"))
|
|
37
|
-
return `✓ rules already current · ${n} in ${where}`;
|
|
38
|
-
return `✓ ${rules} refreshed in ${where}`;
|
|
39
|
-
}
|
|
40
|
-
/** `a, b and c`. */
|
|
41
|
-
function joinAnd(items) {
|
|
42
|
-
if (items.length <= 1)
|
|
43
|
-
return items.join("");
|
|
44
|
-
return `${items.slice(0, -1).join(", ")} and ${items[items.length - 1]}`;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Trail's suggestions, cut to the files the wired agents read: how many, and
|
|
48
|
-
* whose files they are (`the files claude and cursor read`).
|
|
49
|
-
*
|
|
50
|
-
* Every suggestion Trail has made, whatever became of it — the counts it sends
|
|
51
|
-
* do not say which are still waiting for review and which were dismissed.
|
|
52
|
-
*/
|
|
53
|
-
export function suggestedFor(s, wired) {
|
|
54
|
-
if (!s)
|
|
55
|
-
return { count: 0, whose: "" };
|
|
56
|
-
let count = 0;
|
|
57
|
-
const kinds = new Set();
|
|
58
|
-
if (s.claudeMd > 0 && readByWired("claude_md", wired)) {
|
|
59
|
-
count += s.claudeMd;
|
|
60
|
-
kinds.add("claude_md");
|
|
61
|
-
}
|
|
62
|
-
if (s.files) {
|
|
63
|
-
for (const f of s.files) {
|
|
64
|
-
if (f.changes <= 0 || !readByWired(f.kind, wired))
|
|
65
|
-
continue;
|
|
66
|
-
count += f.changes;
|
|
67
|
-
kinds.add(f.kind);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
else if (s.contextFiles > 0) {
|
|
71
|
-
// No per-file list from this Trail, so no way to cut it to the wired agents'
|
|
72
|
-
// files: the count is Trail's total.
|
|
73
|
-
count += s.contextFiles;
|
|
74
|
-
for (const k of ["agents_md", "folder_claude_md", "cursor_rule", "skill"])
|
|
75
|
-
kinds.add(k);
|
|
76
|
-
}
|
|
77
|
-
const readers = wired.length
|
|
78
|
-
? wired.filter((w) => [...kinds].some((k) => readersOf(k, [w]).length > 0))
|
|
79
|
-
: [];
|
|
80
|
-
return { count, whose: readers.length ? `the files ${joinAnd(readers)} read` : "this repo's context files" };
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* The suggestions line after a build:
|
|
84
|
-
* `● 18 suggestions for the files claude, agents and cursor read`. Null when
|
|
85
|
-
* there are none to mention.
|
|
86
|
-
*/
|
|
87
|
-
export function suggestionsLine(s, wired, again) {
|
|
88
|
-
const { count, whose } = suggestedFor(s, wired);
|
|
89
|
-
if (count === 0)
|
|
90
|
-
return null;
|
|
91
|
-
return `● ${count.toLocaleString("en-US")} ${again ? "new " : ""}suggestion${count === 1 ? "" : "s"} for ${whose}`;
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* What a pull says about the suggestions it did not write:
|
|
95
|
-
* `● 20 suggested so far for the files claude read, 2 of them accepted`.
|
|
96
|
-
*
|
|
97
|
-
* This is what lets an agent watching the trail say "there are suggestions
|
|
98
|
-
* waiting for you" before anything has been accepted. "So far", because the
|
|
99
|
-
* build keeps adding them after the push returns. Null when Trail sent no
|
|
100
|
-
* counts, or counts that cannot hold what was accepted.
|
|
101
|
-
*/
|
|
102
|
-
export function suggestedLine(suggested, accepted) {
|
|
103
|
-
if (suggested.count === 0 || suggested.count < accepted)
|
|
104
|
-
return null;
|
|
105
|
-
const taken = accepted === 0 ? "none accepted yet" : `${accepted.toLocaleString("en-US")} of them accepted`;
|
|
106
|
-
return `● ${suggested.count.toLocaleString("en-US")} suggested so far for ${suggested.whose}, ${taken}`;
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* The `trail_pulled` event for one pull. Only the outcome, which kinds of file
|
|
110
|
-
* were written, and bucketed counts leave the machine — see TELEMETRY.md.
|
|
111
|
-
*/
|
|
112
|
-
function trackPull(repo, home, outcome, planned = [], suggested = 0) {
|
|
113
|
-
const wrote = planned.filter((p) => p.plan.status && p.plan.written.length > 0);
|
|
114
|
-
const kinds = [...new Set(wrote.map((p) => p.kind))]
|
|
115
|
-
.filter((k) => CONTEXT_FILE_KINDS.includes(k))
|
|
116
|
-
.sort()
|
|
117
|
-
.join(",");
|
|
118
|
-
track("trail_pulled", {
|
|
119
|
-
outcome,
|
|
120
|
-
kinds,
|
|
121
|
-
files_bucket: countBucket(wrote.length),
|
|
122
|
-
changes_bucket: countBucket(wrote.reduce((n, p) => n + p.plan.written.length, 0)),
|
|
123
|
-
skipped_bucket: countBucket(planned.reduce((n, p) => n + p.plan.skipped.length, 0)),
|
|
124
|
-
suggested_bucket: countBucket(suggested),
|
|
125
|
-
}, { repo, home });
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Run the pull. Returns the exit code; every line goes through `write`.
|
|
129
|
-
*/
|
|
130
|
-
export async function runTrailPull(repo, link, opts) {
|
|
131
|
-
const write = opts.write ?? ((l) => console.error(l));
|
|
132
|
-
const fetchImpl = opts.fetchImpl ?? fetch;
|
|
133
|
-
let code = 0;
|
|
134
|
-
// Read beside everything else: it only adds a line, and a Trail that cannot
|
|
135
|
-
// answer it costs the pull nothing.
|
|
136
|
-
const repoState = fetchRepoState(link, fetchImpl);
|
|
137
|
-
// 1. The rules. Skipped on a dry run, which writes nothing at all.
|
|
138
|
-
if (!opts.dryRun) {
|
|
139
|
-
const res = await connectBrain(repo, link, {
|
|
140
|
-
home: opts.home,
|
|
141
|
-
ids: opts.wired.length > 0 ? opts.wired : undefined,
|
|
142
|
-
fetchImpl,
|
|
143
|
-
});
|
|
144
|
-
const line = rulesLine(repo, res);
|
|
145
|
-
if (line)
|
|
146
|
-
write(line);
|
|
147
|
-
if (res.warning)
|
|
148
|
-
code = 1;
|
|
149
|
-
}
|
|
150
|
-
// 2. Accepted changes: the root CLAUDE.md, then every other context file.
|
|
151
|
-
const planned = [];
|
|
152
|
-
let accepted = 0;
|
|
153
|
-
const md = await fetchAcceptedChanges(link, fetchImpl);
|
|
154
|
-
if ("error" in md) {
|
|
155
|
-
if (!md.unsupported) {
|
|
156
|
-
write(`✗ ${md.error}`);
|
|
157
|
-
code = 1;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
else if (md.changes.length > 0) {
|
|
161
|
-
const file = { kind: kindForPath(md.path || "CLAUDE.md"), path: md.path || "CLAUDE.md", changes: md.changes };
|
|
162
|
-
if (readByWired(file.kind, opts.wired)) {
|
|
163
|
-
accepted += file.changes.length;
|
|
164
|
-
planned.push({ plan: planContextFile(repo, file), source: "claude-md", kind: file.kind });
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
const ctx = await fetchContextFiles(link, fetchImpl);
|
|
168
|
-
if ("error" in ctx) {
|
|
169
|
-
write(`✗ ${ctx.error}`);
|
|
170
|
-
code = 1;
|
|
171
|
-
}
|
|
172
|
-
else if (!("unsupported" in ctx)) {
|
|
173
|
-
for (const file of ctx.files) {
|
|
174
|
-
if (file.changes.length === 0 || !readByWired(file.kind, opts.wired))
|
|
175
|
-
continue;
|
|
176
|
-
accepted += file.changes.length;
|
|
177
|
-
planned.push({ plan: planContextFile(repo, file), source: "context-files", kind: file.kind });
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
const suggested = suggestedFor((await repoState)?.suggestions, opts.wired);
|
|
181
|
-
const waiting = suggestedLine(suggested, accepted);
|
|
182
|
-
if (accepted === 0) {
|
|
183
|
-
if (code === 0) {
|
|
184
|
-
if (waiting) {
|
|
185
|
-
write(waiting);
|
|
186
|
-
write(` review: ${reviewUrl(link.brainId)}`);
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
write("· nothing accepted in Trail yet — review:");
|
|
190
|
-
write(` ${reviewUrl(link.brainId)}`);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
trackPull(repo, opts.home, code === 0 ? "nothing_accepted" : "error", [], suggested.count);
|
|
194
|
-
return code;
|
|
195
|
-
}
|
|
196
|
-
const writing = planned.filter((p) => p.plan.status);
|
|
197
|
-
const changes = writing.reduce((n, p) => n + p.plan.written.length, 0);
|
|
198
|
-
if (writing.length > 0) {
|
|
199
|
-
write(`✓ ${opts.dryRun ? "would write" : "wrote"} ${changes} accepted change${changes === 1 ? "" : "s"}`);
|
|
200
|
-
const width = Math.max(30, ...writing.map((p) => p.plan.path.length)) + 2;
|
|
201
|
-
for (const { plan } of writing) {
|
|
202
|
-
const summary = changeSummary(plan.written);
|
|
203
|
-
write(` ${plan.status} ${summary ? plan.path.padEnd(width) : plan.path}${summary}`.trimEnd());
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
else if (planned.some((p) => p.plan.present.length > 0)) {
|
|
207
|
-
write("✓ every accepted change is already in these files");
|
|
208
|
-
}
|
|
209
|
-
for (const { plan } of planned) {
|
|
210
|
-
for (const s of plan.skipped) {
|
|
211
|
-
const what = s.change.kind === "edit" || s.change.kind === "add" ? `${changeSummary([s.change])} in ${plan.path}` : plan.path;
|
|
212
|
-
write(`⚠ skipped ${what} — ${s.why}; edit it in Trail, then pull again`);
|
|
213
|
-
code = 1;
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
if (waiting) {
|
|
217
|
-
write(waiting);
|
|
218
|
-
write(` review: ${reviewUrl(link.brainId)}`);
|
|
219
|
-
}
|
|
220
|
-
if (opts.dryRun) {
|
|
221
|
-
write("· dry run — nothing written, and Trail was not told");
|
|
222
|
-
trackPull(repo, opts.home, "dry_run", planned, suggested.count);
|
|
223
|
-
return code;
|
|
224
|
-
}
|
|
225
|
-
for (const { plan } of writing) {
|
|
226
|
-
try {
|
|
227
|
-
writePlannedFile(repo, plan);
|
|
228
|
-
}
|
|
229
|
-
catch (e) {
|
|
230
|
-
write(`✗ could not write ${plan.path}: ${e instanceof Error ? e.message : e}`);
|
|
231
|
-
// Nothing from a file that was not written is reported as applied.
|
|
232
|
-
plan.written = [];
|
|
233
|
-
plan.present = [];
|
|
234
|
-
code = 1;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
// Written now or already there: either way Trail should stop listing it.
|
|
238
|
-
const done = (source) => planned.filter((p) => p.source === source).flatMap((p) => [...p.plan.written, ...p.plan.present].map((c) => c.id));
|
|
239
|
-
const told = (await markApplied(link, done("claude-md"), fetchImpl)) && (await markContextFilesApplied(link, done("context-files"), fetchImpl));
|
|
240
|
-
if (!told)
|
|
241
|
-
write("⚠ could not tell Trail which changes were written; it may still list them");
|
|
242
|
-
if (writing.length > 0)
|
|
243
|
-
write("· review with git diff, then commit");
|
|
244
|
-
const anyWritten = planned.some((p) => p.plan.status && p.plan.written.length > 0);
|
|
245
|
-
const anyPresent = planned.some((p) => p.plan.present.length > 0);
|
|
246
|
-
const anySkipped = planned.some((p) => p.plan.skipped.length > 0);
|
|
247
|
-
const outcome = anyWritten
|
|
248
|
-
? "written"
|
|
249
|
-
: anyPresent
|
|
250
|
-
? "already_present"
|
|
251
|
-
: anySkipped
|
|
252
|
-
? "skipped"
|
|
253
|
-
: "error";
|
|
254
|
-
trackPull(repo, opts.home, outcome, planned, suggested.count);
|
|
255
|
-
return code;
|
|
256
|
-
}
|
|
257
|
-
//# sourceMappingURL=pull.js.map
|
package/dist/brain/pull.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/brain/pull.ts"],"names":[],"mappings":"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"}
|