@nanonets/graft 0.22.0 → 0.23.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 +11 -10
- package/dist/app/checkout.d.ts +0 -32
- package/dist/app/checkout.d.ts.map +1 -1
- package/dist/app/checkout.js +0 -45
- package/dist/app/checkout.js.map +1 -1
- package/dist/app/identity.d.ts +0 -56
- package/dist/app/identity.d.ts.map +1 -1
- package/dist/app/identity.js +0 -119
- package/dist/app/identity.js.map +1 -1
- package/dist/app/main.js +0 -8
- package/dist/app/main.js.map +1 -1
- package/dist/app/server.d.ts +0 -20
- package/dist/app/server.d.ts.map +1 -1
- package/dist/app/server.js +0 -121
- package/dist/app/server.js.map +1 -1
- package/dist/ask/ask.d.ts +0 -3
- package/dist/ask/ask.d.ts.map +1 -1
- package/dist/ask/ask.js +1 -3
- package/dist/ask/ask.js.map +1 -1
- package/dist/brand.d.ts.map +1 -1
- package/dist/brand.js +4 -1
- package/dist/brand.js.map +1 -1
- package/dist/check/learning-edits.d.ts +9 -0
- package/dist/check/learning-edits.d.ts.map +1 -0
- package/dist/check/learning-edits.js +62 -0
- package/dist/check/learning-edits.js.map +1 -0
- package/dist/claude/format.d.ts +1 -9
- package/dist/claude/format.d.ts.map +1 -1
- package/dist/claude/format.js +6 -21
- package/dist/claude/format.js.map +1 -1
- package/dist/claude/hook-layers.d.ts.map +1 -1
- package/dist/claude/hook-layers.js +5 -3
- package/dist/claude/hook-layers.js.map +1 -1
- package/dist/claude/hooks.d.ts +6 -0
- package/dist/claude/hooks.d.ts.map +1 -1
- package/dist/claude/hooks.js +101 -14
- package/dist/claude/hooks.js.map +1 -1
- package/dist/claude/init.d.ts +38 -7
- package/dist/claude/init.d.ts.map +1 -1
- package/dist/claude/init.js +172 -33
- package/dist/claude/init.js.map +1 -1
- package/dist/claude/settings-merge.d.ts +23 -0
- package/dist/claude/settings-merge.d.ts.map +1 -1
- package/dist/claude/settings-merge.js +103 -7
- package/dist/claude/settings-merge.js.map +1 -1
- package/dist/claude/shim-template.d.ts.map +1 -1
- package/dist/claude/shim-template.js +39 -3
- package/dist/claude/shim-template.js.map +1 -1
- package/dist/claude/skill-template.d.ts +4 -3
- package/dist/claude/skill-template.d.ts.map +1 -1
- package/dist/claude/skill-template.js +25 -10
- package/dist/claude/skill-template.js.map +1 -1
- package/dist/claude/state.d.ts +1 -1
- package/dist/claude/state.d.ts.map +1 -1
- package/dist/cli-picker.d.ts +15 -0
- package/dist/cli-picker.d.ts.map +1 -1
- package/dist/cli-picker.js +33 -3
- package/dist/cli-picker.js.map +1 -1
- package/dist/cli.js +141 -60
- package/dist/cli.js.map +1 -1
- package/dist/cloud/diff.d.ts +2 -0
- package/dist/cloud/diff.d.ts.map +1 -1
- package/dist/cloud/diff.js +1 -0
- package/dist/cloud/diff.js.map +1 -1
- package/dist/context/map-dir.d.ts +13 -0
- package/dist/context/map-dir.d.ts.map +1 -0
- package/dist/context/map-dir.js +67 -0
- package/dist/context/map-dir.js.map +1 -0
- package/dist/context/node-file.d.ts +4 -3
- package/dist/context/node-file.d.ts.map +1 -1
- package/dist/context/node-file.js +18 -4
- package/dist/context/node-file.js.map +1 -1
- package/dist/hosts/claude-global.d.ts.map +1 -1
- package/dist/hosts/claude-global.js +31 -11
- package/dist/hosts/claude-global.js.map +1 -1
- package/dist/hosts/config-write.js +1 -1
- package/dist/hosts/config-write.js.map +1 -1
- package/dist/hosts/retract.d.ts.map +1 -1
- package/dist/hosts/retract.js +15 -6
- package/dist/hosts/retract.js.map +1 -1
- package/dist/notes/branches.d.ts +18 -1
- package/dist/notes/branches.d.ts.map +1 -1
- package/dist/notes/branches.js +73 -7
- package/dist/notes/branches.js.map +1 -1
- package/dist/notes/cold-start.d.ts +54 -4
- package/dist/notes/cold-start.d.ts.map +1 -1
- package/dist/notes/cold-start.js +97 -36
- package/dist/notes/cold-start.js.map +1 -1
- package/dist/notes/edit-overlap.d.ts +62 -0
- package/dist/notes/edit-overlap.d.ts.map +1 -0
- package/dist/notes/edit-overlap.js +202 -0
- package/dist/notes/edit-overlap.js.map +1 -0
- package/dist/notes/notes.d.ts +25 -4
- package/dist/notes/notes.d.ts.map +1 -1
- package/dist/notes/notes.js +65 -15
- package/dist/notes/notes.js.map +1 -1
- package/dist/notes/pr-reviews.d.ts +108 -0
- package/dist/notes/pr-reviews.d.ts.map +1 -0
- package/dist/notes/pr-reviews.js +325 -0
- package/dist/notes/pr-reviews.js.map +1 -0
- package/dist/notes/repo-trail.d.ts +3 -1
- package/dist/notes/repo-trail.d.ts.map +1 -1
- package/dist/notes/repo-trail.js +40 -3
- package/dist/notes/repo-trail.js.map +1 -1
- package/dist/notes/session-cost.d.ts +16 -4
- package/dist/notes/session-cost.d.ts.map +1 -1
- package/dist/notes/session-cost.js +120 -11
- package/dist/notes/session-cost.js.map +1 -1
- package/dist/telemetry/contract.d.ts.map +1 -1
- package/dist/telemetry/contract.js +6 -5
- package/dist/telemetry/contract.js.map +1 -1
- package/dist/upkeep-run.d.ts.map +1 -1
- package/dist/upkeep-run.js +4 -2
- package/dist/upkeep-run.js.map +1 -1
- package/dist/upkeep.js +2 -2
- package/dist/upkeep.js.map +1 -1
- package/dist/util/state.d.ts.map +1 -1
- package/dist/util/state.js +2 -1
- package/dist/util/state.js.map +1 -1
- package/package.json +1 -1
- package/dist/app/brain-build-process.d.ts +0 -22
- package/dist/app/brain-build-process.d.ts.map +0 -1
- package/dist/app/brain-build-process.js +0 -129
- package/dist/app/brain-build-process.js.map +0 -1
- package/dist/app/brain-build-worker.d.ts +0 -35
- package/dist/app/brain-build-worker.d.ts.map +0 -1
- package/dist/app/brain-build-worker.js +0 -56
- package/dist/app/brain-build-worker.js.map +0 -1
- package/dist/app/brain-build.d.ts +0 -160
- package/dist/app/brain-build.d.ts.map +0 -1
- package/dist/app/brain-build.js +0 -278
- package/dist/app/brain-build.js.map +0 -1
- package/dist/app/history.d.ts +0 -163
- package/dist/app/history.d.ts.map +0 -1
- package/dist/app/history.js +0 -319
- package/dist/app/history.js.map +0 -1
- package/dist/app/sources.d.ts +0 -81
- package/dist/app/sources.d.ts.map +0 -1
- package/dist/app/sources.js +0 -470
- package/dist/app/sources.js.map +0 -1
package/dist/claude/init.d.ts
CHANGED
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
import { type GlobalWrite } from '../hosts/claude-global.js';
|
|
2
2
|
import { type McpWrite } from '../hosts/mcp-config.js';
|
|
3
|
+
import { ignoreInTrailDir } from '../notes/repo-trail.js';
|
|
4
|
+
export { ignoreInTrailDir };
|
|
3
5
|
import type { PlannedWrite } from '../hosts/plan.js';
|
|
4
6
|
import { type Brand } from '../brand.js';
|
|
7
|
+
/** trail's committed hook, inside `.trail/` where a `.claude/*` ignore rule can't drop it. */
|
|
8
|
+
export declare const TRAIL_HOOK: string;
|
|
9
|
+
/** The status line's shim. Also in `.trail/`, but ignored there: only people with trail draw it. */
|
|
10
|
+
export declare const TRAIL_STATUSLINE: string;
|
|
11
|
+
/** Where trail's skill goes: the user's own `~/.claude`, never the repo. */
|
|
12
|
+
export declare function trailSkillPath(home?: string): string;
|
|
5
13
|
/**
|
|
6
14
|
* The files `runInit` writes — pure, no writes, so `--dry-run` and the picker
|
|
7
|
-
* can report them up front.
|
|
8
|
-
* outside the project.
|
|
15
|
+
* can report them up front.
|
|
9
16
|
*/
|
|
10
|
-
export declare function claudeTargets(dir: string, initBrand?: Brand): PlannedWrite[];
|
|
17
|
+
export declare function claudeTargets(dir: string, initBrand?: Brand, home?: string): PlannedWrite[];
|
|
11
18
|
/**
|
|
12
19
|
* The name the Claude Code wiring goes by in `dir`: trail's where `trail init`
|
|
13
20
|
* is wiring it now (`initBrand`) or already did, graft's everywhere else.
|
|
@@ -15,8 +22,25 @@ export declare function claudeTargets(dir: string, initBrand?: Brand): PlannedWr
|
|
|
15
22
|
* refreshing the wiring writes the same files and never flips them back.
|
|
16
23
|
*/
|
|
17
24
|
export declare function wiringName(dir: string, initBrand?: Brand): Brand;
|
|
18
|
-
/**
|
|
19
|
-
|
|
25
|
+
/**
|
|
26
|
+
* `claudeTargets` under one name.
|
|
27
|
+
*
|
|
28
|
+
* trail splits what it writes in two. Shared, committed once by whoever sets
|
|
29
|
+
* the repo up: `.trail/hook.cjs` and one SessionStart entry in
|
|
30
|
+
* `.claude/settings.json`, which is all a teammate without trail needs to be
|
|
31
|
+
* shown the learnings and offered trail. Personal, where git never looks: the
|
|
32
|
+
* status line and allowlist in `.claude/settings.local.json`, the skill in
|
|
33
|
+
* `~/.claude/skills/`, and the other hooks in `~/.claude` (hosts/claude-global.ts).
|
|
34
|
+
* No MCP server: the hooks and the `trail` command do what it did.
|
|
35
|
+
*/
|
|
36
|
+
export declare function claudeTargetsFor(dir: string, name: Brand, home?: string): PlannedWrite[];
|
|
37
|
+
/**
|
|
38
|
+
* The layout every graft repo has, and trail repos had before 0.23: shims in
|
|
39
|
+
* `.claude/helpers/`, the skill in `.claude/skills/`, the server in `.mcp.json`,
|
|
40
|
+
* in that order. `runInit` writes it for graft; for trail it's what a refresh
|
|
41
|
+
* clears away, and what uninstall removes under both names.
|
|
42
|
+
*/
|
|
43
|
+
export declare function legacyClaudeTargets(dir: string, name: Brand): PlannedWrite[];
|
|
20
44
|
/**
|
|
21
45
|
* Build the graph if it isn't there yet. Not Claude-specific: the wiring for any
|
|
22
46
|
* host points at `graft/`, so `graft init` builds whichever hosts were selected —
|
|
@@ -30,9 +54,10 @@ export declare function buildGraphIfMissing(dir: string, opts: {
|
|
|
30
54
|
export interface InitResult {
|
|
31
55
|
settingsPath: string;
|
|
32
56
|
shims: string[];
|
|
57
|
+
/** Where the skill went; '' when nothing was written (trail under `--no-global`). */
|
|
33
58
|
skill: string;
|
|
34
|
-
/** the `.mcp.json` write registering the graft MCP server for Claude Code. */
|
|
35
|
-
mcp: McpWrite;
|
|
59
|
+
/** the `.mcp.json` write registering the graft MCP server for Claude Code; trail writes none. */
|
|
60
|
+
mcp: McpWrite | null;
|
|
36
61
|
/** the user-level writes under `~/.claude`, empty when `global: false`. */
|
|
37
62
|
global: GlobalWrite[];
|
|
38
63
|
warnings: string[];
|
|
@@ -46,4 +71,10 @@ export declare function runInit(dir: string, opts?: {
|
|
|
46
71
|
home?: string;
|
|
47
72
|
brand?: Brand;
|
|
48
73
|
}): InitResult;
|
|
74
|
+
/**
|
|
75
|
+
* Keep a personal file out of git without touching the repo's `.gitignore`:
|
|
76
|
+
* if nothing ignores it already, it goes in `.git/info/exclude`, which is
|
|
77
|
+
* never committed. A folder that isn't a git checkout is left alone.
|
|
78
|
+
*/
|
|
79
|
+
export declare function keepOutOfGit(dir: string, rel: string): void;
|
|
49
80
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/claude/init.ts"],"names":[],"mappings":"AAIA,OAAO,EAA6C,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAIxG,OAAO,EAA6B,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAqB,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAE5D
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/claude/init.ts"],"names":[],"mappings":"AAIA,OAAO,EAA6C,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAIxG,OAAO,EAA6B,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAqB,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAE5D,8FAA8F;AAC9F,eAAO,MAAM,UAAU,QAA6B,CAAC;AACrD,oGAAoG;AACpG,eAAO,MAAM,gBAAgB,QAAmC,CAAC;AACjE,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,IAAI,GAAE,MAAkB,GAAG,MAAM,CAE/D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAE3F;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,CAEhE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAE,MAAkB,GAAG,YAAY,EAAE,CAUnG;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,YAAY,EAAE,CAW5E;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAarG;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,qFAAqF;IACrF,KAAK,EAAE,MAAM,CAAC;IACd,iGAAiG;IACjG,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;IACrB,2EAA2E;IAC3E,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,OAAO,CACrB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAO,GACrH,UAAU,CAwCZ;AAwFD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAgB3D"}
|
package/dist/claude/init.js
CHANGED
|
@@ -1,21 +1,31 @@
|
|
|
1
|
-
import { mkdirSync, writeFileSync, readFileSync, chmodSync, rmSync } from 'node:fs';
|
|
2
|
-
import { join, dirname, resolve } from 'node:path';
|
|
1
|
+
import { mkdirSync, writeFileSync, readFileSync, chmodSync, rmSync, rmdirSync, existsSync, appendFileSync } from 'node:fs';
|
|
2
|
+
import { join, dirname, resolve, isAbsolute } from 'node:path';
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
4
|
import { execFileSync } from 'node:child_process';
|
|
5
5
|
import { disableGraftServerIn, installClaudeGlobal } from '../hosts/claude-global.js';
|
|
6
|
-
import { mergeGraftSettings } from './settings-merge.js';
|
|
6
|
+
import { mergeGraftSettings, mergeTrailShared, mergeTrailLocal } from './settings-merge.js';
|
|
7
7
|
import { statuslineShim, hooksShim, rememberInstall } from './shim-template.js';
|
|
8
8
|
import { skillTemplate } from './skill-template.js';
|
|
9
9
|
import { mergeJsonKey, serverEntry } from '../hosts/mcp-config.js';
|
|
10
|
+
import { readJsonObject } from '../hosts/config-write.js';
|
|
11
|
+
import { ignoreInTrailDir } from '../notes/repo-trail.js';
|
|
12
|
+
export { ignoreInTrailDir };
|
|
10
13
|
import { hasGraftIndex } from '../graph/root.js';
|
|
11
14
|
import { repoWiredForTrail } from '../brand.js';
|
|
15
|
+
/** trail's committed hook, inside `.trail/` where a `.claude/*` ignore rule can't drop it. */
|
|
16
|
+
export const TRAIL_HOOK = join('.trail', 'hook.cjs');
|
|
17
|
+
/** The status line's shim. Also in `.trail/`, but ignored there: only people with trail draw it. */
|
|
18
|
+
export const TRAIL_STATUSLINE = join('.trail', 'statusline.cjs');
|
|
19
|
+
/** Where trail's skill goes: the user's own `~/.claude`, never the repo. */
|
|
20
|
+
export function trailSkillPath(home = homedir()) {
|
|
21
|
+
return join(home, '.claude', 'skills', 'trail', 'SKILL.md');
|
|
22
|
+
}
|
|
12
23
|
/**
|
|
13
24
|
* The files `runInit` writes — pure, no writes, so `--dry-run` and the picker
|
|
14
|
-
* can report them up front.
|
|
15
|
-
* outside the project.
|
|
25
|
+
* can report them up front.
|
|
16
26
|
*/
|
|
17
|
-
export function claudeTargets(dir, initBrand) {
|
|
18
|
-
return claudeTargetsFor(dir, wiringName(dir, initBrand));
|
|
27
|
+
export function claudeTargets(dir, initBrand, home) {
|
|
28
|
+
return claudeTargetsFor(dir, wiringName(dir, initBrand), home);
|
|
19
29
|
}
|
|
20
30
|
/**
|
|
21
31
|
* The name the Claude Code wiring goes by in `dir`: trail's where `trail init`
|
|
@@ -26,8 +36,36 @@ export function claudeTargets(dir, initBrand) {
|
|
|
26
36
|
export function wiringName(dir, initBrand) {
|
|
27
37
|
return initBrand === 'trail' || repoWiredForTrail(dir) ? 'trail' : 'graft';
|
|
28
38
|
}
|
|
29
|
-
/**
|
|
30
|
-
|
|
39
|
+
/**
|
|
40
|
+
* `claudeTargets` under one name.
|
|
41
|
+
*
|
|
42
|
+
* trail splits what it writes in two. Shared, committed once by whoever sets
|
|
43
|
+
* the repo up: `.trail/hook.cjs` and one SessionStart entry in
|
|
44
|
+
* `.claude/settings.json`, which is all a teammate without trail needs to be
|
|
45
|
+
* shown the learnings and offered trail. Personal, where git never looks: the
|
|
46
|
+
* status line and allowlist in `.claude/settings.local.json`, the skill in
|
|
47
|
+
* `~/.claude/skills/`, and the other hooks in `~/.claude` (hosts/claude-global.ts).
|
|
48
|
+
* No MCP server: the hooks and the `trail` command do what it did.
|
|
49
|
+
*/
|
|
50
|
+
export function claudeTargetsFor(dir, name, home = homedir()) {
|
|
51
|
+
if (name !== 'trail')
|
|
52
|
+
return legacyClaudeTargets(dir, name);
|
|
53
|
+
const t = (path, what) => ({ hostId: 'claude', id: 'claude', path, scope: 'repo', kind: 'claude', what });
|
|
54
|
+
return [
|
|
55
|
+
t(join(dir, '.claude', 'settings.json'), 'trail SessionStart hook, shared'),
|
|
56
|
+
t(join(dir, TRAIL_HOOK), 'hooks shim, shared'),
|
|
57
|
+
t(join(dir, '.claude', 'settings.local.json'), 'trail statusline + allowlist, yours'),
|
|
58
|
+
t(join(dir, TRAIL_STATUSLINE), 'statusline shim, git-ignored'),
|
|
59
|
+
{ hostId: 'claude', id: 'claude', path: trailSkillPath(home), scope: 'global', kind: 'claude', what: 'trail skill' },
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* The layout every graft repo has, and trail repos had before 0.23: shims in
|
|
64
|
+
* `.claude/helpers/`, the skill in `.claude/skills/`, the server in `.mcp.json`,
|
|
65
|
+
* in that order. `runInit` writes it for graft; for trail it's what a refresh
|
|
66
|
+
* clears away, and what uninstall removes under both names.
|
|
67
|
+
*/
|
|
68
|
+
export function legacyClaudeTargets(dir, name) {
|
|
31
69
|
const t = (path, what, kind = 'claude') => ({ hostId: 'claude', id: 'claude', path, scope: 'repo', kind, what });
|
|
32
70
|
return [
|
|
33
71
|
t(join(dir, '.claude', 'settings.json'), `${name} statusline + hook blocks`),
|
|
@@ -61,17 +99,14 @@ export function buildGraphIfMissing(dir, opts) {
|
|
|
61
99
|
}
|
|
62
100
|
}
|
|
63
101
|
export function runInit(dir, opts = {}) {
|
|
102
|
+
if (wiringName(dir, opts.brand) === 'trail')
|
|
103
|
+
return runTrailInit(dir, opts);
|
|
64
104
|
// Same list `--dry-run` and the picker report, so the two can't drift apart.
|
|
65
|
-
const
|
|
66
|
-
const [settings, statusline, hooks, skill, mcpTarget] = claudeTargetsFor(dir, name).map((t) => t.path);
|
|
105
|
+
const [settings, statusline, hooks, skill, mcpTarget] = legacyClaudeTargets(dir, 'graft').map((t) => t.path);
|
|
67
106
|
mkdirSync(dirname(statusline), { recursive: true });
|
|
68
107
|
const settingsPath = settings;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
existing = JSON.parse(readFileSync(settingsPath, 'utf8'));
|
|
72
|
-
}
|
|
73
|
-
catch { /* none/invalid → start fresh */ }
|
|
74
|
-
const { merged, warnings } = mergeGraftSettings(existing, { statusline: opts.statusline, name });
|
|
108
|
+
const existing = readSettings(settingsPath);
|
|
109
|
+
const { merged, warnings } = mergeGraftSettings(existing, { statusline: opts.statusline, name: 'graft' });
|
|
75
110
|
writeFileSync(settingsPath, `${JSON.stringify(merged, null, 2)}\n`);
|
|
76
111
|
const sl = statusline;
|
|
77
112
|
const hk = hooks;
|
|
@@ -86,31 +121,135 @@ export function runInit(dir, opts = {}) {
|
|
|
86
121
|
// greps source. Overwritten each run (graft owns this file), like the shims above.
|
|
87
122
|
const skillPath = skill;
|
|
88
123
|
mkdirSync(dirname(skillPath), { recursive: true });
|
|
89
|
-
writeFileSync(skillPath, skillTemplate(
|
|
90
|
-
// A repo moving from graft's names to trail's: the graft-named shims and
|
|
91
|
-
// skill go, so the agent doesn't load two copies. Their settings entries
|
|
92
|
-
// were already replaced by the merge above.
|
|
93
|
-
if (name === 'trail') {
|
|
94
|
-
const [, oldSl, oldHk, oldSkill] = claudeTargetsFor(dir, 'graft').map((t) => t.path);
|
|
95
|
-
for (const f of [oldSl, oldHk])
|
|
96
|
-
rmSync(f, { force: true });
|
|
97
|
-
rmSync(dirname(oldSkill), { recursive: true, force: true });
|
|
98
|
-
}
|
|
124
|
+
writeFileSync(skillPath, skillTemplate('graft'));
|
|
99
125
|
// Register the graft MCP server in the project's .mcp.json so Claude Code
|
|
100
126
|
// exposes graft_find_code/graft_trace_calls/etc. as tools — the same keyed merge the
|
|
101
127
|
// other hosts use (existing servers preserved; unparseable files skipped).
|
|
102
|
-
const mcp = mergeJsonKey('claude', mcpTarget, 'mcpServers', serverEntry({ brand:
|
|
128
|
+
const mcp = mergeJsonKey('claude', mcpTarget, 'mcpServers', serverEntry({ brand: 'graft' }), 'graft');
|
|
103
129
|
// The same wiring again, one level up in `~/.claude`, because everything above
|
|
104
130
|
// this line can be erased by a `.gitignore` and lost to `git worktree add`. See
|
|
105
131
|
// hosts/claude-global.ts for the failure that motivates it. Gated on the same
|
|
106
132
|
// flag `registerMcpConfigs` uses, so `--no-global` still means "nothing outside
|
|
107
133
|
// this repo".
|
|
108
|
-
const global = opts.global === false ? [] : installClaudeGlobal(opts.home ?? homedir(),
|
|
109
|
-
// A trail repo on a machine with graft's server installed for everything:
|
|
110
|
-
// graft goes off in this folder, so Claude lists one server here.
|
|
111
|
-
if (name === 'trail' && opts.global !== false)
|
|
112
|
-
global.push(disableGraftServerIn(opts.home ?? homedir(), resolve(dir)));
|
|
134
|
+
const global = opts.global === false ? [] : installClaudeGlobal(opts.home ?? homedir(), 'graft');
|
|
113
135
|
const built = buildGraphIfMissing(dir, opts);
|
|
114
136
|
return { settingsPath, shims: [sl, hk], skill: skillPath, mcp, global, warnings, built };
|
|
115
137
|
}
|
|
138
|
+
function readSettings(path) {
|
|
139
|
+
try {
|
|
140
|
+
return JSON.parse(readFileSync(path, 'utf8'));
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return {};
|
|
144
|
+
} // none/invalid → start fresh
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* `runInit` for a repo on trail. Shared: `.trail/hook.cjs` and its one
|
|
148
|
+
* SessionStart entry in `.claude/settings.json`. Personal: everything else.
|
|
149
|
+
* Run again over a repo set up the old way, it moves it: the old shims, the
|
|
150
|
+
* repo skill and trail's `.mcp.json` server go.
|
|
151
|
+
*/
|
|
152
|
+
function runTrailInit(dir, opts) {
|
|
153
|
+
const home = opts.home ?? homedir();
|
|
154
|
+
const global = opts.global !== false;
|
|
155
|
+
const [settings, hook, local, statusline, skill] = claudeTargetsFor(dir, 'trail', home).map((t) => t.path);
|
|
156
|
+
mkdirSync(dirname(hook), { recursive: true });
|
|
157
|
+
writeFileSync(hook, hooksShim());
|
|
158
|
+
chmodSync(hook, 0o755);
|
|
159
|
+
writeFileSync(statusline, statuslineShim());
|
|
160
|
+
chmodSync(statusline, 0o755);
|
|
161
|
+
ignoreInTrailDir(dir, 'statusline.cjs');
|
|
162
|
+
rememberInstall(home);
|
|
163
|
+
const shared = mergeTrailShared(readSettings(settings));
|
|
164
|
+
mkdirSync(dirname(settings), { recursive: true });
|
|
165
|
+
writeFileSync(settings, `${JSON.stringify(shared, null, 2)}\n`);
|
|
166
|
+
// Hooks for every other event come from `~/.claude`. Only when that's off do
|
|
167
|
+
// they go in the personal file, beside the status line.
|
|
168
|
+
const { merged, warnings } = mergeTrailLocal(readSettings(local), { statusline: opts.statusline, hooks: !global });
|
|
169
|
+
writeFileSync(local, `${JSON.stringify(merged, null, 2)}\n`);
|
|
170
|
+
keepOutOfGit(dir, join('.claude', 'settings.local.json'));
|
|
171
|
+
let skillPath = '';
|
|
172
|
+
if (global) {
|
|
173
|
+
mkdirSync(dirname(skill), { recursive: true });
|
|
174
|
+
writeFileSync(skill, skillTemplate('trail'));
|
|
175
|
+
skillPath = skill;
|
|
176
|
+
}
|
|
177
|
+
clearOldLayout(dir);
|
|
178
|
+
const globalWrites = global ? installClaudeGlobal(home, 'trail') : [];
|
|
179
|
+
// A trail repo on a machine with graft's server installed for everything:
|
|
180
|
+
// graft goes off in this folder, so its tools don't show here.
|
|
181
|
+
if (global)
|
|
182
|
+
globalWrites.push(disableGraftServerIn(home, resolve(dir)));
|
|
183
|
+
const built = buildGraphIfMissing(dir, opts);
|
|
184
|
+
return { settingsPath: settings, shims: [statusline, hook], skill: skillPath, mcp: null, global: globalWrites, warnings, built };
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* What trail wrote before 0.23 and doesn't any more: both names' shims in
|
|
188
|
+
* `.claude/helpers/`, the skill in `.claude/skills/`, and trail's server in
|
|
189
|
+
* `.mcp.json`. Settings entries are already gone: the merges replace them.
|
|
190
|
+
*/
|
|
191
|
+
function clearOldLayout(dir) {
|
|
192
|
+
for (const n of ['graft', 'trail']) {
|
|
193
|
+
const [, oldSl, oldHk, oldSkill] = legacyClaudeTargets(dir, n).map((t) => t.path);
|
|
194
|
+
rmSync(oldSl, { force: true });
|
|
195
|
+
rmSync(oldHk, { force: true });
|
|
196
|
+
rmSync(dirname(oldSkill), { recursive: true, force: true });
|
|
197
|
+
}
|
|
198
|
+
// The folders they were in, once nothing else is: rmdir refuses a non-empty one.
|
|
199
|
+
for (const d of [join(dir, '.claude', 'helpers'), join(dir, '.claude', 'skills')]) {
|
|
200
|
+
try {
|
|
201
|
+
rmdirSync(d);
|
|
202
|
+
}
|
|
203
|
+
catch { /* holds the user's files, or was never there */ }
|
|
204
|
+
}
|
|
205
|
+
dropServer(join(dir, '.mcp.json'), ['trail', 'graft']);
|
|
206
|
+
}
|
|
207
|
+
/** Take trail's (or graft's) server out of an `.mcp.json`; the file goes if nothing else was in it. */
|
|
208
|
+
function dropServer(path, names) {
|
|
209
|
+
try {
|
|
210
|
+
const loaded = readJsonObject(path);
|
|
211
|
+
if (loaded === 'unparseable' || !loaded.existed)
|
|
212
|
+
return;
|
|
213
|
+
const root = loaded.root;
|
|
214
|
+
const servers = root.mcpServers;
|
|
215
|
+
if (!servers || typeof servers !== 'object' || !names.some((n) => n in servers))
|
|
216
|
+
return;
|
|
217
|
+
for (const n of names)
|
|
218
|
+
delete servers[n];
|
|
219
|
+
if (Object.keys(servers).length === 0)
|
|
220
|
+
delete root.mcpServers;
|
|
221
|
+
if (Object.keys(root).length === 0)
|
|
222
|
+
rmSync(path, { force: true });
|
|
223
|
+
else
|
|
224
|
+
writeFileSync(path, `${JSON.stringify(root, null, 2)}\n`);
|
|
225
|
+
}
|
|
226
|
+
catch { /* leave it as the user has it */ }
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Keep a personal file out of git without touching the repo's `.gitignore`:
|
|
230
|
+
* if nothing ignores it already, it goes in `.git/info/exclude`, which is
|
|
231
|
+
* never committed. A folder that isn't a git checkout is left alone.
|
|
232
|
+
*/
|
|
233
|
+
export function keepOutOfGit(dir, rel) {
|
|
234
|
+
try {
|
|
235
|
+
execFileSync('git', ['check-ignore', '-q', '--', rel], { cwd: dir, stdio: 'ignore' });
|
|
236
|
+
return; // exit 0: already ignored
|
|
237
|
+
}
|
|
238
|
+
catch (e) {
|
|
239
|
+
if (e.status !== 1)
|
|
240
|
+
return; // 128: not a git checkout
|
|
241
|
+
}
|
|
242
|
+
try {
|
|
243
|
+
let exclude = execFileSync('git', ['rev-parse', '--git-path', 'info/exclude'], { cwd: dir, encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();
|
|
244
|
+
if (!isAbsolute(exclude))
|
|
245
|
+
exclude = join(dir, exclude);
|
|
246
|
+
const line = `/${rel.split('\\').join('/')}`;
|
|
247
|
+
const text = existsSync(exclude) ? readFileSync(exclude, 'utf8') : '';
|
|
248
|
+
if (text.split('\n').some((l) => l.trim() === line))
|
|
249
|
+
return;
|
|
250
|
+
mkdirSync(dirname(exclude), { recursive: true });
|
|
251
|
+
appendFileSync(exclude, `${text && !text.endsWith('\n') ? '\n' : ''}${line}\n`);
|
|
252
|
+
}
|
|
253
|
+
catch { /* best-effort: git status shows the file, and nothing else breaks */ }
|
|
254
|
+
}
|
|
116
255
|
//# sourceMappingURL=init.js.map
|
package/dist/claude/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/claude/init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/claude/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
type Json = Record<string, any>;
|
|
2
|
+
/** trail's committed hook, `.trail/hook.cjs`, run for one event. */
|
|
3
|
+
export declare function trailHookCmd(arg: string): string;
|
|
2
4
|
/**
|
|
3
5
|
* Is this allowlist entry one graft wrote?
|
|
4
6
|
*
|
|
@@ -39,5 +41,26 @@ export declare function mergeGraftSettings(existing: Json, opts?: {
|
|
|
39
41
|
export declare function mergeGraftHooks(existing: Json, helpers: string): {
|
|
40
42
|
merged: Json;
|
|
41
43
|
};
|
|
44
|
+
/**
|
|
45
|
+
* trail's part of the committed `.claude/settings.json`: one SessionStart entry
|
|
46
|
+
* running `.trail/hook.cjs`, and nothing else. For a teammate without trail it
|
|
47
|
+
* shows the learnings and offers trail; with trail it hands off to the install.
|
|
48
|
+
* Anything an older init put here (status line, the other hooks, allowlist,
|
|
49
|
+
* footer regex) comes out, so the file a team commits is the same on every machine.
|
|
50
|
+
*/
|
|
51
|
+
export declare function mergeTrailShared(existing: Json): Json;
|
|
52
|
+
/**
|
|
53
|
+
* trail's part of `.claude/settings.local.json`, the person's own: the status
|
|
54
|
+
* line, the footer regex and the allowlist, plus, when `~/.claude` doesn't carry
|
|
55
|
+
* them (`--no-global`), the hooks for every event but session start, which the
|
|
56
|
+
* shared file already runs once.
|
|
57
|
+
*/
|
|
58
|
+
export declare function mergeTrailLocal(existing: Json, opts?: {
|
|
59
|
+
statusline?: boolean;
|
|
60
|
+
hooks?: boolean;
|
|
61
|
+
}): {
|
|
62
|
+
merged: Json;
|
|
63
|
+
warnings: string[];
|
|
64
|
+
};
|
|
42
65
|
export {};
|
|
43
66
|
//# sourceMappingURL=settings-merge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-merge.d.ts","sourceRoot":"","sources":["../../src/claude/settings-merge.ts"],"names":[],"mappings":"AAEA,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"settings-merge.d.ts","sourceRoot":"","sources":["../../src/claude/settings-merge.ts"],"names":[],"mappings":"AAEA,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAkChC,oEAAoE;AACpE,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD;AAiCD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEzD;AAED,wFAAwF;AACxF,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAEvD;AAOD,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAE7E;AA8BD,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,IAAI,EACd,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;CAAO,GAC5D;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAuCtC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,IAAI,CAAA;CAAE,CASjF;AA+BD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAQrD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,IAAI,EACd,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GACnD;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAoBtC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { isGraftEntry } from '../hosts/config-write.js';
|
|
2
2
|
const slCmd = (name = 'graft') => `node "\${CLAUDE_PROJECT_DIR:-.}/.claude/helpers/${name}-statusline.cjs"`;
|
|
3
|
+
/** trail's status line, from the shim in `.trail/` (see claude/init.ts). */
|
|
4
|
+
const TRAIL_SL_CMD = 'node "${CLAUDE_PROJECT_DIR:-.}/.trail/statusline.cjs"';
|
|
3
5
|
/** Stable marker for "this statusLine is Graft's", not the full command string —
|
|
4
6
|
* an older shim path or a GRAFT_DIR wrapper still names this file. Either name. */
|
|
5
|
-
const STATUSLINE_HELPER = /(graft|trail)-statusline\.cjs/;
|
|
7
|
+
const STATUSLINE_HELPER = /(graft|trail)-statusline\.cjs|\.trail\/statusline\.cjs/;
|
|
6
8
|
const FOOTER = 'graft/[\\w./-]+\\.md';
|
|
7
9
|
// Every form graft is actually invoked as. 'graft:*' covers a global install;
|
|
8
10
|
// the other two cover a repo working on graft itself (or any consumer running it
|
|
@@ -27,11 +29,17 @@ const REPO_HELPERS = '${CLAUDE_PROJECT_DIR:-.}/.claude/helpers';
|
|
|
27
29
|
function hookCmd(arg, helpers = REPO_HELPERS, name = 'graft') {
|
|
28
30
|
return `node "${helpers}/${name}-hooks.cjs" ${arg}`;
|
|
29
31
|
}
|
|
32
|
+
/** trail's committed hook, `.trail/hook.cjs`, run for one event. */
|
|
33
|
+
export function trailHookCmd(arg) {
|
|
34
|
+
return `node "\${CLAUDE_PROJECT_DIR:-.}/.trail/hook.cjs" ${arg}`;
|
|
35
|
+
}
|
|
30
36
|
function graftBlocks(helpers, name = 'graft') {
|
|
31
|
-
|
|
37
|
+
return hookBlocks((arg) => hookCmd(arg, helpers, name));
|
|
38
|
+
}
|
|
39
|
+
function hookBlocks(hookCmd_) {
|
|
32
40
|
return {
|
|
33
41
|
PostToolUse: [
|
|
34
|
-
{ matcher: 'Write|Edit|MultiEdit', hooks: [{ type: 'command', command: hookCmd_('post-edit'
|
|
42
|
+
{ matcher: 'Write|Edit|MultiEdit', hooks: [{ type: 'command', command: hookCmd_('post-edit'), timeout: 10000 }] },
|
|
35
43
|
// Score the usage mix and sum token savings. A graft retrieval (CLI `graft …`
|
|
36
44
|
// via Bash, or the `graft_*` MCP tools) prints a `[graft] tokens saved ≈ N`
|
|
37
45
|
// footer this hook sums into the session total; the same hook classifies
|
|
@@ -39,7 +47,7 @@ function graftBlocks(helpers, name = 'graft') {
|
|
|
39
47
|
// `graft stats` and the `session_summary` graft-vs-grep ratio. Broad matcher,
|
|
40
48
|
// but the handler no-ops instantly unless there is something to record, so an
|
|
41
49
|
// unrelated Bash or a plain Read costs only a stdin read.
|
|
42
|
-
{ matcher: 'Bash|mcp__graft__|mcp__trail__|Read|Grep|Glob', hooks: [{ type: 'command', command: hookCmd_('tool-savings'
|
|
50
|
+
{ matcher: 'Bash|mcp__graft__|mcp__trail__|Read|Grep|Glob', hooks: [{ type: 'command', command: hookCmd_('tool-savings'), timeout: 8000 }] },
|
|
43
51
|
],
|
|
44
52
|
// Longer budget than the other hooks: its `graft ask` is a real query, and a
|
|
45
53
|
// query now brings the graph up to date first (graph/refresh.ts) — usually
|
|
@@ -49,9 +57,12 @@ function graftBlocks(helpers, name = 'graft') {
|
|
|
49
57
|
// this bump (8s) keeps a child that fits inside 8s. Changing the number here is
|
|
50
58
|
// therefore safe on its own — but it only reaches an existing repo when someone
|
|
51
59
|
// re-runs `graft init`, since that is the only caller of this function.
|
|
52
|
-
UserPromptSubmit: [{ hooks: [{ type: 'command', command: hookCmd_('prompt'
|
|
53
|
-
SessionStart: [{ hooks: [{ type: 'command', command: hookCmd_('session-start'
|
|
54
|
-
Stop: [{ hooks: [{ type: 'command', command: hookCmd_('stop'
|
|
60
|
+
UserPromptSubmit: [{ hooks: [{ type: 'command', command: hookCmd_('prompt'), timeout: 15000 }] }],
|
|
61
|
+
SessionStart: [{ hooks: [{ type: 'command', command: hookCmd_('session-start'), timeout: 8000 }] }],
|
|
62
|
+
Stop: [{ hooks: [{ type: 'command', command: hookCmd_('stop'), timeout: 8000 }] }],
|
|
63
|
+
// Sends the telemetry queue in a detached child, so closing Claude isn't
|
|
64
|
+
// slowed. Not fired when the terminal is killed; session start sends what's left.
|
|
65
|
+
SessionEnd: [{ hooks: [{ type: 'command', command: hookCmd_('session-end'), timeout: 5000 }] }],
|
|
55
66
|
};
|
|
56
67
|
}
|
|
57
68
|
/**
|
|
@@ -151,4 +162,89 @@ export function mergeGraftHooks(existing, helpers) {
|
|
|
151
162
|
}
|
|
152
163
|
return { merged };
|
|
153
164
|
}
|
|
165
|
+
/** Drop every fragment graft or trail wrote from a settings object, keeping the user's. */
|
|
166
|
+
function withoutOurs(existing) {
|
|
167
|
+
const merged = { ...(existing ?? {}) };
|
|
168
|
+
for (const key of ['statusLine', 'subagentStatusLine'])
|
|
169
|
+
if (isGraftStatusline(merged[key]))
|
|
170
|
+
delete merged[key];
|
|
171
|
+
if (merged.hooks && typeof merged.hooks === 'object' && !Array.isArray(merged.hooks)) {
|
|
172
|
+
const hooks = {};
|
|
173
|
+
for (const [event, prior] of Object.entries(merged.hooks)) {
|
|
174
|
+
const kept = Array.isArray(prior) ? prior.filter((e) => !isGraftEntry(e)) : prior;
|
|
175
|
+
if (!Array.isArray(kept) || kept.length)
|
|
176
|
+
hooks[event] = kept;
|
|
177
|
+
}
|
|
178
|
+
if (Object.keys(hooks).length)
|
|
179
|
+
merged.hooks = hooks;
|
|
180
|
+
else
|
|
181
|
+
delete merged.hooks;
|
|
182
|
+
}
|
|
183
|
+
if (Array.isArray(merged.footerLinksRegexes)) {
|
|
184
|
+
const kept = merged.footerLinksRegexes.filter((r) => !isGraftFooterRegex(r));
|
|
185
|
+
if (kept.length)
|
|
186
|
+
merged.footerLinksRegexes = kept;
|
|
187
|
+
else
|
|
188
|
+
delete merged.footerLinksRegexes;
|
|
189
|
+
}
|
|
190
|
+
if (merged.permissions && typeof merged.permissions === 'object' && Array.isArray(merged.permissions.allow)) {
|
|
191
|
+
const allow = merged.permissions.allow.filter((e) => !isGraftAllowEntry(e));
|
|
192
|
+
const permissions = { ...merged.permissions };
|
|
193
|
+
if (allow.length)
|
|
194
|
+
permissions.allow = allow;
|
|
195
|
+
else
|
|
196
|
+
delete permissions.allow;
|
|
197
|
+
if (Object.keys(permissions).length)
|
|
198
|
+
merged.permissions = permissions;
|
|
199
|
+
else
|
|
200
|
+
delete merged.permissions;
|
|
201
|
+
}
|
|
202
|
+
return merged;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* trail's part of the committed `.claude/settings.json`: one SessionStart entry
|
|
206
|
+
* running `.trail/hook.cjs`, and nothing else. For a teammate without trail it
|
|
207
|
+
* shows the learnings and offers trail; with trail it hands off to the install.
|
|
208
|
+
* Anything an older init put here (status line, the other hooks, allowlist,
|
|
209
|
+
* footer regex) comes out, so the file a team commits is the same on every machine.
|
|
210
|
+
*/
|
|
211
|
+
export function mergeTrailShared(existing) {
|
|
212
|
+
const merged = withoutOurs(existing);
|
|
213
|
+
merged.hooks = { ...(merged.hooks ?? {}) };
|
|
214
|
+
merged.hooks.SessionStart = [
|
|
215
|
+
...(Array.isArray(merged.hooks.SessionStart) ? merged.hooks.SessionStart : []),
|
|
216
|
+
{ hooks: [{ type: 'command', command: trailHookCmd('session-start'), timeout: 8000 }] },
|
|
217
|
+
];
|
|
218
|
+
return merged;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* trail's part of `.claude/settings.local.json`, the person's own: the status
|
|
222
|
+
* line, the footer regex and the allowlist, plus, when `~/.claude` doesn't carry
|
|
223
|
+
* them (`--no-global`), the hooks for every event but session start, which the
|
|
224
|
+
* shared file already runs once.
|
|
225
|
+
*/
|
|
226
|
+
export function mergeTrailLocal(existing, opts = {}) {
|
|
227
|
+
const merged = withoutOurs(existing);
|
|
228
|
+
const warnings = [];
|
|
229
|
+
if (statuslineWanted(opts)) {
|
|
230
|
+
for (const key of ['statusLine', 'subagentStatusLine']) {
|
|
231
|
+
if (!merged[key])
|
|
232
|
+
merged[key] = { type: 'command', command: TRAIL_SL_CMD };
|
|
233
|
+
else if (key === 'statusLine')
|
|
234
|
+
warnings.push('Existing statusLine left untouched (a session allows only one). To use Trail, point it at .trail/statusline.cjs.');
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
if (opts.hooks) {
|
|
238
|
+
merged.hooks = { ...(merged.hooks ?? {}) };
|
|
239
|
+
for (const [event, blocks] of Object.entries(hookBlocks(trailHookCmd))) {
|
|
240
|
+
if (event === 'SessionStart')
|
|
241
|
+
continue;
|
|
242
|
+
merged.hooks[event] = [...(Array.isArray(merged.hooks[event]) ? merged.hooks[event] : []), ...blocks];
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
merged.footerLinksRegexes = [...(merged.footerLinksRegexes ?? []), FOOTER];
|
|
246
|
+
merged.permissions = { ...(merged.permissions ?? {}) };
|
|
247
|
+
merged.permissions.allow = [...(merged.permissions.allow ?? []), ...ALLOW_ENTRIES];
|
|
248
|
+
return { merged, warnings };
|
|
249
|
+
}
|
|
154
250
|
//# sourceMappingURL=settings-merge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-merge.js","sourceRoot":"","sources":["../../src/claude/settings-merge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIxD,MAAM,KAAK,GAAG,CAAC,OAA0B,OAAO,EAAE,EAAE,CAAC,mDAAmD,IAAI,kBAAkB,CAAC;AAC/H;mFACmF;AACnF,MAAM,iBAAiB,GAAG
|
|
1
|
+
{"version":3,"file":"settings-merge.js","sourceRoot":"","sources":["../../src/claude/settings-merge.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shim-template.d.ts","sourceRoot":"","sources":["../../src/claude/shim-template.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shim-template.d.ts","sourceRoot":"","sources":["../../src/claude/shim-template.ts"],"names":[],"mappings":"AAwMA,wBAAgB,cAAc,IAAI,MAAM,CAA8C;AACtF,wBAAgB,SAAS,IAAI,MAAM,CAAqE;AAExG,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,IAAI,GAAE,MAAkB,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAEtG;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,IAAI,GAAE,MAAkB,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,EAAE,IAAI,GAAE,MAAwB,GAAG,IAAI,CAGpI"}
|