grounder 0.2.0 → 0.3.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 +81 -32
- package/dist/agents/claude.d.ts +1 -0
- package/dist/agents/claude.d.ts.map +1 -1
- package/dist/agents/claude.js +38 -13
- package/dist/agents/claude.js.map +1 -1
- package/dist/agents/cursor.d.ts +1 -0
- package/dist/agents/cursor.d.ts.map +1 -1
- package/dist/agents/cursor.js +38 -13
- package/dist/agents/cursor.js.map +1 -1
- package/dist/agents/hook-runtime.d.ts +65 -21
- package/dist/agents/hook-runtime.d.ts.map +1 -1
- package/dist/agents/hook-runtime.js +172 -31
- package/dist/agents/hook-runtime.js.map +1 -1
- package/dist/agents/index.d.ts +18 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +27 -4
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/install-command.d.ts +37 -0
- package/dist/agents/install-command.d.ts.map +1 -0
- package/dist/agents/install-command.js +65 -0
- package/dist/agents/install-command.js.map +1 -0
- package/dist/agents/types.d.ts +19 -1
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/cli.js +58 -60
- package/dist/cli.js.map +1 -1
- package/dist/commands/apply-agent-installs.d.ts +34 -0
- package/dist/commands/apply-agent-installs.d.ts.map +1 -0
- package/dist/commands/apply-agent-installs.js +137 -0
- package/dist/commands/apply-agent-installs.js.map +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +202 -51
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/handoff/list.d.ts.map +1 -1
- package/dist/commands/handoff/list.js +5 -0
- package/dist/commands/handoff/list.js.map +1 -1
- package/dist/commands/handoff/peek.d.ts +5 -2
- package/dist/commands/handoff/peek.d.ts.map +1 -1
- package/dist/commands/handoff/peek.js +47 -6
- package/dist/commands/handoff/peek.js.map +1 -1
- package/dist/commands/handoff.d.ts.map +1 -1
- package/dist/commands/handoff.js +5 -0
- package/dist/commands/handoff.js.map +1 -1
- package/dist/commands/migrate.d.ts +23 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +104 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/note.d.ts.map +1 -1
- package/dist/commands/note.js +5 -0
- package/dist/commands/note.js.map +1 -1
- package/dist/commands/package-version-notice.d.ts +18 -0
- package/dist/commands/package-version-notice.d.ts.map +1 -0
- package/dist/commands/package-version-notice.js +39 -0
- package/dist/commands/package-version-notice.js.map +1 -0
- package/dist/commands/path/logs.d.ts +1 -1
- package/dist/commands/path/logs.d.ts.map +1 -1
- package/dist/commands/path/logs.js +6 -1
- package/dist/commands/path/logs.js.map +1 -1
- package/dist/commands/path/notes.d.ts +1 -1
- package/dist/commands/path/notes.d.ts.map +1 -1
- package/dist/commands/path/notes.js +6 -1
- package/dist/commands/path/notes.js.map +1 -1
- package/dist/commands/path/plans.d.ts +7 -0
- package/dist/commands/path/plans.d.ts.map +1 -0
- package/dist/commands/path/plans.js +22 -0
- package/dist/commands/path/plans.js.map +1 -0
- package/dist/commands/plan/list.d.ts +23 -0
- package/dist/commands/plan/list.d.ts.map +1 -0
- package/dist/commands/plan/list.js +69 -0
- package/dist/commands/plan/list.js.map +1 -0
- package/dist/commands/plan.d.ts +34 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +121 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/repo/init.d.ts.map +1 -1
- package/dist/commands/repo/init.js +12 -1
- package/dist/commands/repo/init.js.map +1 -1
- package/dist/commands/status.d.ts +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +52 -9
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/upgrade-banner.d.ts +9 -0
- package/dist/commands/upgrade-banner.d.ts.map +1 -0
- package/dist/commands/upgrade-banner.js +27 -0
- package/dist/commands/upgrade-banner.js.map +1 -0
- package/dist/commands/vault/init.d.ts.map +1 -1
- package/dist/commands/vault/init.js +18 -29
- package/dist/commands/vault/init.js.map +1 -1
- package/dist/connector/repo.d.ts +2 -0
- package/dist/connector/repo.d.ts.map +1 -1
- package/dist/connector/repo.js +12 -1
- package/dist/connector/repo.js.map +1 -1
- package/dist/connector/state.d.ts +95 -0
- package/dist/connector/state.d.ts.map +1 -0
- package/dist/connector/state.js +189 -0
- package/dist/connector/state.js.map +1 -0
- package/dist/connector/unsupported-schema.d.ts +9 -0
- package/dist/connector/unsupported-schema.d.ts.map +1 -0
- package/dist/connector/unsupported-schema.js +14 -0
- package/dist/connector/unsupported-schema.js.map +1 -0
- package/dist/connector/vault.d.ts +2 -0
- package/dist/connector/vault.d.ts.map +1 -1
- package/dist/connector/vault.js +6 -1
- package/dist/connector/vault.js.map +1 -1
- package/dist/help.d.ts +45 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +355 -0
- package/dist/help.js.map +1 -0
- package/dist/util/fs.d.ts +6 -0
- package/dist/util/fs.d.ts.map +1 -1
- package/dist/util/fs.js +15 -1
- package/dist/util/fs.js.map +1 -1
- package/dist/util/hash.d.ts +3 -0
- package/dist/util/hash.d.ts.map +1 -0
- package/dist/util/hash.js +6 -0
- package/dist/util/hash.js.map +1 -0
- package/dist/util/path.d.ts +10 -0
- package/dist/util/path.d.ts.map +1 -1
- package/dist/util/path.js +31 -0
- package/dist/util/path.js.map +1 -1
- package/dist/util/plan-name.d.ts +10 -0
- package/dist/util/plan-name.d.ts.map +1 -0
- package/dist/util/plan-name.js +18 -0
- package/dist/util/plan-name.js.map +1 -0
- package/dist/util/semver.d.ts +10 -0
- package/dist/util/semver.d.ts.map +1 -0
- package/dist/util/semver.js +40 -0
- package/dist/util/semver.js.map +1 -0
- package/dist/vault/layout.d.ts +2 -0
- package/dist/vault/layout.d.ts.map +1 -1
- package/dist/vault/layout.js +4 -0
- package/dist/vault/layout.js.map +1 -1
- package/dist/vault/list-plans.d.ts +11 -0
- package/dist/vault/list-plans.d.ts.map +1 -0
- package/dist/vault/list-plans.js +40 -0
- package/dist/vault/list-plans.js.map +1 -0
- package/dist/vault/write-plan.d.ts +28 -0
- package/dist/vault/write-plan.d.ts.map +1 -0
- package/dist/vault/write-plan.js +61 -0
- package/dist/vault/write-plan.js.map +1 -0
- package/package.json +1 -1
- package/templates/agents/claude/commands/grounder-note.md +1 -1
- package/templates/agents/claude/commands/grounder-plan.md +65 -0
- package/templates/agents/claude/commands/grounder-task-handoff.md +3 -3
- package/templates/agents/claude/commands/grounder-task.md +2 -2
- package/templates/agents/cursor/commands/grounder-note.md +1 -1
- package/templates/agents/cursor/commands/grounder-plan.md +65 -0
- package/templates/agents/cursor/commands/grounder-task-handoff.md +3 -3
- package/templates/agents/cursor/commands/grounder-task.md +2 -2
- package/templates/vault/plan.md +16 -0
|
@@ -1,51 +1,67 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Home-local
|
|
2
|
+
* Home-local runtime shared by session hooks *and* slash commands (originally
|
|
3
|
+
* "Issue 2 — replace `npx grounder` in session hooks"; later extended to cover
|
|
4
|
+
* slash-command templates too, since they had the identical problem).
|
|
3
5
|
*
|
|
4
6
|
* ## Why
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* the
|
|
8
|
-
*
|
|
7
|
+
* Both surfaces used to shell out via `npx grounder …`. `npx <pkg>` (no
|
|
8
|
+
* version specifier) matches against whatever `grounder` version exists in
|
|
9
|
+
* the *current project's own dependencies*; only when the project doesn't
|
|
10
|
+
* declare `grounder` as a dependency does it fall back to fetching
|
|
11
|
+
* `grounder@latest` from the registry. Session hooks and slash commands both
|
|
12
|
+
* run from arbitrary linked projects, which normally have no reason to depend
|
|
13
|
+
* on `grounder` themselves, so contributors (and anyone ahead of the last
|
|
14
|
+
* publish, or deliberately pinned to an older version) get the wrong binary.
|
|
15
|
+
* Global `pnpm link` / `pnpm add -g` does not change this fallback — see
|
|
16
|
+
* [npm/cli#9244](https://github.com/npm/cli/issues/9244).
|
|
9
17
|
*
|
|
10
18
|
* ## Design
|
|
11
|
-
* On `vault init
|
|
12
|
-
* `~/.grounder/runtime/dist/` and point host hook configs
|
|
13
|
-
*
|
|
14
|
-
*
|
|
19
|
+
* On `vault init`, materialize this package's `dist/` at
|
|
20
|
+
* `~/.grounder/runtime/dist/` and point both host hook configs *and* the
|
|
21
|
+
* commands copied into `~/.cursor/commands/` / `~/.claude/commands/` at:
|
|
22
|
+
* `process.execPath` + `~/.grounder/runtime/dist/cli.js` + `<subcommand> …`
|
|
23
|
+
* No global install and no registry fetch at invocation time, for either
|
|
24
|
+
* surface. This mirrors how Corepack (packageManager shims) and Husky/lint-staged
|
|
25
|
+
* (moved off bare `npx` for the same reason, see the strapi/strapi#27006 fix)
|
|
26
|
+
* solve the identical "ambient resolution isn't stable" problem.
|
|
15
27
|
*
|
|
16
28
|
* How it's materialized depends on where grounder is running from:
|
|
17
29
|
* - **Durable source** (monorepo checkout, global install, linked devDependency) →
|
|
18
30
|
* **symlink** `dist/` straight to the source. `pnpm build` / upgrading the
|
|
19
|
-
* global install overwrites that same path in place, so
|
|
20
|
-
* new code immediately — no re-run of `vault init` ever needed.
|
|
31
|
+
* global install overwrites that same path in place, so hooks and commands
|
|
32
|
+
* pick up new code immediately — no re-run of `vault init` ever needed.
|
|
21
33
|
* - **Ephemeral source** (bare `npx grounder …`, no install — each invocation
|
|
22
34
|
* resolves to an immutable, version-keyed npx cache dir that can be evicted
|
|
23
35
|
* or swapped out from under a symlink) → **copy** `dist/`. Re-run
|
|
24
|
-
* `grounder vault init <vault
|
|
25
|
-
*
|
|
26
|
-
*
|
|
36
|
+
* `grounder vault init <vault>` after upgrading to refresh; this is an
|
|
37
|
+
* inherent limitation of using npx with no install for something that must
|
|
38
|
+
* persist, not something we can engineer around.
|
|
27
39
|
*
|
|
28
40
|
* This mirrors husky/pre-commit hook shims: staying current is an explicit,
|
|
29
|
-
* idempotent step (never silent self-healing inside
|
|
41
|
+
* idempotent step (never silent self-healing inside a hook itself — session
|
|
30
42
|
* hooks must stay fast and side-effect-free), and the step is a no-op unless
|
|
31
43
|
* something has actually changed.
|
|
32
44
|
*
|
|
33
45
|
* ## REVERT
|
|
34
|
-
* To restore the previous `npx grounder
|
|
46
|
+
* To restore the previous `npx grounder …` behavior for hooks and/or commands:
|
|
35
47
|
* 1. Delete this file and its tests (`test/agents/hook-runtime.test.ts`).
|
|
36
48
|
* 2. In `cursor.ts` / `claude.ts`, set `*_PEEK_HOOK_COMMAND` back to
|
|
37
|
-
* `"npx grounder handoff peek"`
|
|
38
|
-
*
|
|
39
|
-
* {@link
|
|
49
|
+
* `"npx grounder handoff peek"` and `installCommand` back to a plain
|
|
50
|
+
* `copyFile` (drop the `{{GROUNDER_CLI}}` template substitution), dropping
|
|
51
|
+
* calls to {@link installHookRuntime} / {@link peekHookCommand} /
|
|
52
|
+
* {@link runtimeInvocation} / {@link extractRuntimeNodePath} /
|
|
53
|
+
* {@link findRuntimeNodePathsInText} /
|
|
54
|
+
* {@link collectGrounderPeekHookCommands} / {@link hookFileGrounderPeekCommands} /
|
|
55
|
+
* {@link isGrounderPeekHookCommand} / {@link isHookRuntimeStale}.
|
|
40
56
|
* 3. Remove runtime paths from `expectedHookArtifacts` and docs that mention
|
|
41
|
-
* `~/.grounder/runtime
|
|
57
|
+
* `~/.grounder/runtime`, and revert templates' `{{GROUNDER_CLI}}` back to
|
|
58
|
+
* literal `npx grounder`.
|
|
42
59
|
*/
|
|
43
60
|
import type { ArtifactStatus } from "./types.js";
|
|
44
61
|
/** Marker written next to the materialized runtime for debugging / staleness checks. */
|
|
45
62
|
export interface HookRuntimeManifest {
|
|
46
63
|
mode: "symlink" | "copy";
|
|
47
64
|
version: string;
|
|
48
|
-
nodePath: string;
|
|
49
65
|
sourcePackageRoot: string;
|
|
50
66
|
installedAt: string;
|
|
51
67
|
}
|
|
@@ -59,6 +75,26 @@ export declare function runtimeManifestPath(homeDir?: string): string;
|
|
|
59
75
|
* (Cursor/Claude run hooks via a shell on macOS/Linux and Git Bash on Windows).
|
|
60
76
|
*/
|
|
61
77
|
export declare function shellQuote(value: string): string;
|
|
78
|
+
/**
|
|
79
|
+
* Extract the baked Node interpreter path from a home-runtime invocation
|
|
80
|
+
* string (`'<abs node>' '<abs …/runtime/dist/cli.js>' …`).
|
|
81
|
+
*
|
|
82
|
+
* Returns `null` when the string is not that exact shape — including legacy
|
|
83
|
+
* `npx grounder …` entries, which have no absolute interpreter to validate.
|
|
84
|
+
*/
|
|
85
|
+
export declare function extractRuntimeNodePath(command: unknown): string | null;
|
|
86
|
+
/**
|
|
87
|
+
* Find every baked Node interpreter path embedded in free-form text (slash-command
|
|
88
|
+
* markdown, etc.). Scans for the same `'<abs node>' '<abs …/cli.js>'` shape as
|
|
89
|
+
* {@link extractRuntimeNodePath}, including mid-line / backtick-wrapped uses.
|
|
90
|
+
*/
|
|
91
|
+
export declare function findRuntimeNodePathsInText(text: string): string[];
|
|
92
|
+
/**
|
|
93
|
+
* Quoted `<node> <runtime cli.js>` prefix, shared by every home-runtime
|
|
94
|
+
* invocation (session hooks and slash-command templates alike). Append
|
|
95
|
+
* subcommand args to build a full command string.
|
|
96
|
+
*/
|
|
97
|
+
export declare function runtimeInvocation(homeDir?: string): string;
|
|
62
98
|
/**
|
|
63
99
|
* Build the sessionStart / SessionStart hook command for the home runtime.
|
|
64
100
|
*
|
|
@@ -72,6 +108,14 @@ export declare function peekHookCommand(homeDir?: string, extraArgs?: readonly s
|
|
|
72
108
|
* Used so upgrades replace the old entry instead of appending a duplicate.
|
|
73
109
|
*/
|
|
74
110
|
export declare function isGrounderPeekHookCommand(command: unknown): boolean;
|
|
111
|
+
/** Collect Grounder peek hook `command` strings nested anywhere in parsed JSON. */
|
|
112
|
+
export declare function collectGrounderPeekHookCommands(value: unknown): string[];
|
|
113
|
+
/** True when any nested `command` field in parsed JSON is Grounder's peek hook. */
|
|
114
|
+
export declare function jsonContainsGrounderPeekCommand(value: unknown): boolean;
|
|
115
|
+
/** Grounder peek hook command strings in a hooks/settings JSON file (empty if absent/unreadable). */
|
|
116
|
+
export declare function hookFileGrounderPeekCommands(filePath: string): Promise<string[]>;
|
|
117
|
+
/** True when a hooks/settings JSON file contains Grounder's peek hook entry. */
|
|
118
|
+
export declare function hookFileHasGrounderEntry(filePath: string): Promise<boolean>;
|
|
75
119
|
/**
|
|
76
120
|
* True when the materialized runtime is missing or out of date for the given
|
|
77
121
|
* source package:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-runtime.d.ts","sourceRoot":"","sources":["../../src/agents/hook-runtime.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"hook-runtime.d.ts","sourceRoot":"","sources":["../../src/agents/hook-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AAkBH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKjD,wFAAwF;AACxF,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,6FAA6F;AAC7F,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAgCD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAyBtE;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAcjE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,GAAE,SAAS,MAAM,EAAO,GAAG,MAAM,CAE3F;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAanE;AAED,mFAAmF;AACnF,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAqBxE;AAED,mFAAmF;AACnF,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEvE;AAED,qGAAqG;AACrG,wBAAsB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAUtF;AAED,gFAAgF;AAChF,wBAAsB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEjF;AA2DD;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,CAAC,EAAE,MAAM,EAChB,WAAW,GAAE,MAA2B,GACvC,OAAO,CAAC,OAAO,CAAC,CAkBlB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAA;CAAE,CAAC,CAkEjF"}
|
|
@@ -1,44 +1,61 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Home-local
|
|
2
|
+
* Home-local runtime shared by session hooks *and* slash commands (originally
|
|
3
|
+
* "Issue 2 — replace `npx grounder` in session hooks"; later extended to cover
|
|
4
|
+
* slash-command templates too, since they had the identical problem).
|
|
3
5
|
*
|
|
4
6
|
* ## Why
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* the
|
|
8
|
-
*
|
|
7
|
+
* Both surfaces used to shell out via `npx grounder …`. `npx <pkg>` (no
|
|
8
|
+
* version specifier) matches against whatever `grounder` version exists in
|
|
9
|
+
* the *current project's own dependencies*; only when the project doesn't
|
|
10
|
+
* declare `grounder` as a dependency does it fall back to fetching
|
|
11
|
+
* `grounder@latest` from the registry. Session hooks and slash commands both
|
|
12
|
+
* run from arbitrary linked projects, which normally have no reason to depend
|
|
13
|
+
* on `grounder` themselves, so contributors (and anyone ahead of the last
|
|
14
|
+
* publish, or deliberately pinned to an older version) get the wrong binary.
|
|
15
|
+
* Global `pnpm link` / `pnpm add -g` does not change this fallback — see
|
|
16
|
+
* [npm/cli#9244](https://github.com/npm/cli/issues/9244).
|
|
9
17
|
*
|
|
10
18
|
* ## Design
|
|
11
|
-
* On `vault init
|
|
12
|
-
* `~/.grounder/runtime/dist/` and point host hook configs
|
|
13
|
-
*
|
|
14
|
-
*
|
|
19
|
+
* On `vault init`, materialize this package's `dist/` at
|
|
20
|
+
* `~/.grounder/runtime/dist/` and point both host hook configs *and* the
|
|
21
|
+
* commands copied into `~/.cursor/commands/` / `~/.claude/commands/` at:
|
|
22
|
+
* `process.execPath` + `~/.grounder/runtime/dist/cli.js` + `<subcommand> …`
|
|
23
|
+
* No global install and no registry fetch at invocation time, for either
|
|
24
|
+
* surface. This mirrors how Corepack (packageManager shims) and Husky/lint-staged
|
|
25
|
+
* (moved off bare `npx` for the same reason, see the strapi/strapi#27006 fix)
|
|
26
|
+
* solve the identical "ambient resolution isn't stable" problem.
|
|
15
27
|
*
|
|
16
28
|
* How it's materialized depends on where grounder is running from:
|
|
17
29
|
* - **Durable source** (monorepo checkout, global install, linked devDependency) →
|
|
18
30
|
* **symlink** `dist/` straight to the source. `pnpm build` / upgrading the
|
|
19
|
-
* global install overwrites that same path in place, so
|
|
20
|
-
* new code immediately — no re-run of `vault init` ever needed.
|
|
31
|
+
* global install overwrites that same path in place, so hooks and commands
|
|
32
|
+
* pick up new code immediately — no re-run of `vault init` ever needed.
|
|
21
33
|
* - **Ephemeral source** (bare `npx grounder …`, no install — each invocation
|
|
22
34
|
* resolves to an immutable, version-keyed npx cache dir that can be evicted
|
|
23
35
|
* or swapped out from under a symlink) → **copy** `dist/`. Re-run
|
|
24
|
-
* `grounder vault init <vault
|
|
25
|
-
*
|
|
26
|
-
*
|
|
36
|
+
* `grounder vault init <vault>` after upgrading to refresh; this is an
|
|
37
|
+
* inherent limitation of using npx with no install for something that must
|
|
38
|
+
* persist, not something we can engineer around.
|
|
27
39
|
*
|
|
28
40
|
* This mirrors husky/pre-commit hook shims: staying current is an explicit,
|
|
29
|
-
* idempotent step (never silent self-healing inside
|
|
41
|
+
* idempotent step (never silent self-healing inside a hook itself — session
|
|
30
42
|
* hooks must stay fast and side-effect-free), and the step is a no-op unless
|
|
31
43
|
* something has actually changed.
|
|
32
44
|
*
|
|
33
45
|
* ## REVERT
|
|
34
|
-
* To restore the previous `npx grounder
|
|
46
|
+
* To restore the previous `npx grounder …` behavior for hooks and/or commands:
|
|
35
47
|
* 1. Delete this file and its tests (`test/agents/hook-runtime.test.ts`).
|
|
36
48
|
* 2. In `cursor.ts` / `claude.ts`, set `*_PEEK_HOOK_COMMAND` back to
|
|
37
|
-
* `"npx grounder handoff peek"`
|
|
38
|
-
*
|
|
39
|
-
* {@link
|
|
49
|
+
* `"npx grounder handoff peek"` and `installCommand` back to a plain
|
|
50
|
+
* `copyFile` (drop the `{{GROUNDER_CLI}}` template substitution), dropping
|
|
51
|
+
* calls to {@link installHookRuntime} / {@link peekHookCommand} /
|
|
52
|
+
* {@link runtimeInvocation} / {@link extractRuntimeNodePath} /
|
|
53
|
+
* {@link findRuntimeNodePathsInText} /
|
|
54
|
+
* {@link collectGrounderPeekHookCommands} / {@link hookFileGrounderPeekCommands} /
|
|
55
|
+
* {@link isGrounderPeekHookCommand} / {@link isHookRuntimeStale}.
|
|
40
56
|
* 3. Remove runtime paths from `expectedHookArtifacts` and docs that mention
|
|
41
|
-
* `~/.grounder/runtime
|
|
57
|
+
* `~/.grounder/runtime`, and revert templates' `{{GROUNDER_CLI}}` back to
|
|
58
|
+
* literal `npx grounder`.
|
|
42
59
|
*/
|
|
43
60
|
import { cp, lstat, mkdir, readFile, realpath, rename, rm, symlink, writeFile, } from "node:fs/promises";
|
|
44
61
|
import os from "node:os";
|
|
@@ -66,6 +83,95 @@ export function runtimeManifestPath(homeDir) {
|
|
|
66
83
|
export function shellQuote(value) {
|
|
67
84
|
return `'${value.replace(/'/g, `'\\''`)}'`;
|
|
68
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* Reverse one {@link shellQuote} token starting at `start`.
|
|
88
|
+
* Handles the close/escape/reopen sequence (`'\''`) for embedded quotes.
|
|
89
|
+
*/
|
|
90
|
+
function parseShellQuoted(input, start) {
|
|
91
|
+
if (input[start] !== "'") {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
let i = start + 1;
|
|
95
|
+
let value = "";
|
|
96
|
+
while (i < input.length) {
|
|
97
|
+
if (input[i] === "'") {
|
|
98
|
+
// shellQuote escape: close quote, literal `'`, reopen — characters `'\''`
|
|
99
|
+
if (input[i + 1] === "\\" && input[i + 2] === "'" && input[i + 3] === "'") {
|
|
100
|
+
value += "'";
|
|
101
|
+
i += 4;
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
return { value, next: i + 1 };
|
|
105
|
+
}
|
|
106
|
+
value += input[i];
|
|
107
|
+
i += 1;
|
|
108
|
+
}
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
function isAbsolutePath(p) {
|
|
112
|
+
return path.posix.isAbsolute(p) || path.win32.isAbsolute(p);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Extract the baked Node interpreter path from a home-runtime invocation
|
|
116
|
+
* string (`'<abs node>' '<abs …/runtime/dist/cli.js>' …`).
|
|
117
|
+
*
|
|
118
|
+
* Returns `null` when the string is not that exact shape — including legacy
|
|
119
|
+
* `npx grounder …` entries, which have no absolute interpreter to validate.
|
|
120
|
+
*/
|
|
121
|
+
export function extractRuntimeNodePath(command) {
|
|
122
|
+
if (typeof command !== "string") {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
const trimmed = command.trim();
|
|
126
|
+
const first = parseShellQuoted(trimmed, 0);
|
|
127
|
+
if (!first || !isAbsolutePath(first.value)) {
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
let i = first.next;
|
|
131
|
+
if (trimmed[i] !== " ") {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
while (trimmed[i] === " ") {
|
|
135
|
+
i += 1;
|
|
136
|
+
}
|
|
137
|
+
const second = parseShellQuoted(trimmed, i);
|
|
138
|
+
if (!second) {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
const cliNormalized = second.value.replace(/\\/g, "/");
|
|
142
|
+
if (!cliNormalized.includes("/.grounder/runtime/dist/cli.js")) {
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
return first.value;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Find every baked Node interpreter path embedded in free-form text (slash-command
|
|
149
|
+
* markdown, etc.). Scans for the same `'<abs node>' '<abs …/cli.js>'` shape as
|
|
150
|
+
* {@link extractRuntimeNodePath}, including mid-line / backtick-wrapped uses.
|
|
151
|
+
*/
|
|
152
|
+
export function findRuntimeNodePathsInText(text) {
|
|
153
|
+
const found = [];
|
|
154
|
+
const seen = new Set();
|
|
155
|
+
for (let i = 0; i < text.length; i++) {
|
|
156
|
+
if (text[i] !== "'") {
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
const nodePath = extractRuntimeNodePath(text.slice(i));
|
|
160
|
+
if (nodePath !== null && !seen.has(nodePath)) {
|
|
161
|
+
seen.add(nodePath);
|
|
162
|
+
found.push(nodePath);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return found;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Quoted `<node> <runtime cli.js>` prefix, shared by every home-runtime
|
|
169
|
+
* invocation (session hooks and slash-command templates alike). Append
|
|
170
|
+
* subcommand args to build a full command string.
|
|
171
|
+
*/
|
|
172
|
+
export function runtimeInvocation(homeDir) {
|
|
173
|
+
return `${shellQuote(process.execPath)} ${shellQuote(runtimeCliPath(homeDir))}`;
|
|
174
|
+
}
|
|
69
175
|
/**
|
|
70
176
|
* Build the sessionStart / SessionStart hook command for the home runtime.
|
|
71
177
|
*
|
|
@@ -73,14 +179,7 @@ export function shellQuote(value) {
|
|
|
73
179
|
* @param extraArgs - Extra CLI args after `handoff peek` (e.g. `--json` for Cursor)
|
|
74
180
|
*/
|
|
75
181
|
export function peekHookCommand(homeDir, extraArgs = []) {
|
|
76
|
-
|
|
77
|
-
shellQuote(process.execPath),
|
|
78
|
-
shellQuote(runtimeCliPath(homeDir)),
|
|
79
|
-
"handoff",
|
|
80
|
-
"peek",
|
|
81
|
-
...extraArgs,
|
|
82
|
-
];
|
|
83
|
-
return parts.join(" ");
|
|
182
|
+
return [runtimeInvocation(homeDir), "handoff", "peek", ...extraArgs].join(" ");
|
|
84
183
|
}
|
|
85
184
|
/**
|
|
86
185
|
* True when `command` is Grounder's peek hook — current home-runtime form or
|
|
@@ -99,6 +198,50 @@ export function isGrounderPeekHookCommand(command) {
|
|
|
99
198
|
const normalized = trimmed.replace(/\\/g, "/");
|
|
100
199
|
return (normalized.includes("/.grounder/runtime/dist/cli.js") && /\bhandoff\s+peek\b/.test(normalized));
|
|
101
200
|
}
|
|
201
|
+
/** Collect Grounder peek hook `command` strings nested anywhere in parsed JSON. */
|
|
202
|
+
export function collectGrounderPeekHookCommands(value) {
|
|
203
|
+
const out = [];
|
|
204
|
+
const walk = (v) => {
|
|
205
|
+
if (Array.isArray(v)) {
|
|
206
|
+
for (const item of v) {
|
|
207
|
+
walk(item);
|
|
208
|
+
}
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
if (v && typeof v === "object") {
|
|
212
|
+
const obj = v;
|
|
213
|
+
if (typeof obj.command === "string" && isGrounderPeekHookCommand(obj.command)) {
|
|
214
|
+
out.push(obj.command);
|
|
215
|
+
}
|
|
216
|
+
for (const child of Object.values(obj)) {
|
|
217
|
+
walk(child);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
walk(value);
|
|
222
|
+
return out;
|
|
223
|
+
}
|
|
224
|
+
/** True when any nested `command` field in parsed JSON is Grounder's peek hook. */
|
|
225
|
+
export function jsonContainsGrounderPeekCommand(value) {
|
|
226
|
+
return collectGrounderPeekHookCommands(value).length > 0;
|
|
227
|
+
}
|
|
228
|
+
/** Grounder peek hook command strings in a hooks/settings JSON file (empty if absent/unreadable). */
|
|
229
|
+
export async function hookFileGrounderPeekCommands(filePath) {
|
|
230
|
+
try {
|
|
231
|
+
if (!(await fileExists(filePath))) {
|
|
232
|
+
return [];
|
|
233
|
+
}
|
|
234
|
+
const parsed = JSON.parse(await readFile(filePath, "utf8"));
|
|
235
|
+
return collectGrounderPeekHookCommands(parsed);
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
return [];
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/** True when a hooks/settings JSON file contains Grounder's peek hook entry. */
|
|
242
|
+
export async function hookFileHasGrounderEntry(filePath) {
|
|
243
|
+
return (await hookFileGrounderPeekCommands(filePath)).length > 0;
|
|
244
|
+
}
|
|
102
245
|
/**
|
|
103
246
|
* Best-effort: is `root` inside a throwaway cache (npx / pnpm dlx), where
|
|
104
247
|
* content can be evicted or swapped for a *different* version at any time?
|
|
@@ -130,7 +273,6 @@ async function readRuntimeManifest(homeDir) {
|
|
|
130
273
|
return {
|
|
131
274
|
mode: raw.mode,
|
|
132
275
|
version: raw.version,
|
|
133
|
-
nodePath: typeof raw.nodePath === "string" ? raw.nodePath : "",
|
|
134
276
|
sourcePackageRoot: typeof raw.sourcePackageRoot === "string" ? raw.sourcePackageRoot : "",
|
|
135
277
|
installedAt: typeof raw.installedAt === "string" ? raw.installedAt : "",
|
|
136
278
|
};
|
|
@@ -201,7 +343,7 @@ export async function installHookRuntime(options) {
|
|
|
201
343
|
const cliPath = runtimeCliPath(options.homeDir);
|
|
202
344
|
const existed = await fileExists(cliPath);
|
|
203
345
|
if (!(await fileExists(path.join(sourceDistDir, "cli.js")))) {
|
|
204
|
-
throw new Error(`Grounder dist missing at ${sourceDistDir}. Run \`pnpm build\` (or install a published package) before vault init
|
|
346
|
+
throw new Error(`Grounder dist missing at ${sourceDistDir}. Run \`pnpm build\` (or install a published package) before vault init.`);
|
|
205
347
|
}
|
|
206
348
|
await mkdir(runtimeDir, { recursive: true });
|
|
207
349
|
// Stage into a sibling path first, then swap. If symlink/cp fails, the live
|
|
@@ -250,7 +392,6 @@ export async function installHookRuntime(options) {
|
|
|
250
392
|
const manifest = {
|
|
251
393
|
mode,
|
|
252
394
|
version: await readPackageVersion(packageRoot),
|
|
253
|
-
nodePath: process.execPath,
|
|
254
395
|
sourcePackageRoot: packageRoot,
|
|
255
396
|
installedAt: new Date().toISOString(),
|
|
256
397
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-runtime.js","sourceRoot":"","sources":["../../src/agents/hook-runtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hook-runtime.js","sourceRoot":"","sources":["../../src/agents/hook-runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/agents/index.d.ts
CHANGED
|
@@ -2,10 +2,28 @@ import type { AgentAdapter } from "./types.js";
|
|
|
2
2
|
export { claude } from "./claude.js";
|
|
3
3
|
export { cursor } from "./cursor.js";
|
|
4
4
|
export type { AgentAdapter, AgentInstallOptions, AgentInstallResult, ArtifactStatus, } from "./types.js";
|
|
5
|
+
/** Every agent adapter this Grounder build knows about (Cursor, Claude, …). */
|
|
6
|
+
export declare const ALL_AGENTS: readonly AgentAdapter[];
|
|
5
7
|
/**
|
|
6
8
|
* Resolve which adapters to run:
|
|
7
9
|
* - If `ids` is provided, return those adapters (throws on unknown id).
|
|
8
10
|
* - Otherwise, auto-detect by checking isInstalled() for each adapter.
|
|
9
11
|
*/
|
|
10
12
|
export declare function resolveAgents(ids?: string[]): Promise<AgentAdapter[]>;
|
|
13
|
+
/**
|
|
14
|
+
* Write this agent's install version info into `~/.grounder/state.json` after
|
|
15
|
+
* install. If hooks were installed and the agent supports them, store the hooks
|
|
16
|
+
* version; otherwise leave any existing hooks version as-is.
|
|
17
|
+
*
|
|
18
|
+
* When `advanceCommandsSchema` is false (every command file was left alone
|
|
19
|
+
* because it looked locally edited or from an old install), do not bump the
|
|
20
|
+
* commands version in state — otherwise doctor/peek would stop warning even
|
|
21
|
+
* though the files were never updated. Use `--force` (or a real write) first.
|
|
22
|
+
*/
|
|
23
|
+
export declare function recordAgentInstallState(agent: AgentAdapter, opts?: {
|
|
24
|
+
hooksInstalled?: boolean;
|
|
25
|
+
homeDir?: string;
|
|
26
|
+
/** Default true. Pass false when no command file was written or already up to date. */
|
|
27
|
+
advanceCommandsSchema?: boolean;
|
|
28
|
+
}): Promise<void>;
|
|
11
29
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EACV,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,+EAA+E;AAC/E,eAAO,MAAM,UAAU,EAAE,SAAS,YAAY,EAAqB,CAAC;AAEpE;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAc3E;AAED;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,YAAY,EACnB,IAAI,GAAE;IACJ,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uFAAuF;IACvF,qBAAqB,CAAC,EAAE,OAAO,CAAC;CAC5B,GACL,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
package/dist/agents/index.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import { recordAgentInstall } from "../connector/state.js";
|
|
2
|
+
import { VERSION } from "../index.js";
|
|
1
3
|
import { claude } from "./claude.js";
|
|
2
4
|
import { cursor } from "./cursor.js";
|
|
3
5
|
export { claude } from "./claude.js";
|
|
4
6
|
export { cursor } from "./cursor.js";
|
|
5
|
-
|
|
7
|
+
/** Every agent adapter this Grounder build knows about (Cursor, Claude, …). */
|
|
8
|
+
export const ALL_AGENTS = [cursor, claude];
|
|
6
9
|
/**
|
|
7
10
|
* Resolve which adapters to run:
|
|
8
11
|
* - If `ids` is provided, return those adapters (throws on unknown id).
|
|
@@ -10,14 +13,34 @@ const ALL_ADAPTERS = [cursor, claude];
|
|
|
10
13
|
*/
|
|
11
14
|
export async function resolveAgents(ids) {
|
|
12
15
|
if (ids && ids.length > 0) {
|
|
13
|
-
const found =
|
|
14
|
-
const unknown = ids.filter((id) => !
|
|
16
|
+
const found = ALL_AGENTS.filter((a) => ids.includes(a.id));
|
|
17
|
+
const unknown = ids.filter((id) => !ALL_AGENTS.some((a) => a.id === id));
|
|
15
18
|
if (unknown.length > 0) {
|
|
16
19
|
throw new Error(`Unknown agent id(s): ${unknown.join(", ")}`);
|
|
17
20
|
}
|
|
18
21
|
return found;
|
|
19
22
|
}
|
|
20
|
-
const results = await Promise.all(
|
|
23
|
+
const results = await Promise.all(ALL_AGENTS.map(async (a) => ({ adapter: a, ok: await a.isInstalled() })));
|
|
21
24
|
return results.filter((r) => r.ok).map((r) => r.adapter);
|
|
22
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Write this agent's install version info into `~/.grounder/state.json` after
|
|
28
|
+
* install. If hooks were installed and the agent supports them, store the hooks
|
|
29
|
+
* version; otherwise leave any existing hooks version as-is.
|
|
30
|
+
*
|
|
31
|
+
* When `advanceCommandsSchema` is false (every command file was left alone
|
|
32
|
+
* because it looked locally edited or from an old install), do not bump the
|
|
33
|
+
* commands version in state — otherwise doctor/peek would stop warning even
|
|
34
|
+
* though the files were never updated. Use `--force` (or a real write) first.
|
|
35
|
+
*/
|
|
36
|
+
export async function recordAgentInstallState(agent, opts = {}) {
|
|
37
|
+
const advanceCommandsSchema = opts.advanceCommandsSchema !== false;
|
|
38
|
+
await recordAgentInstall({
|
|
39
|
+
agentId: agent.id,
|
|
40
|
+
...(advanceCommandsSchema ? { commandsSchema: agent.commandsSchema } : {}),
|
|
41
|
+
hooksSchema: opts.hooksInstalled && agent.hooksSchema !== undefined ? agent.hooksSchema : undefined,
|
|
42
|
+
grounderVersion: VERSION,
|
|
43
|
+
homeDir: opts.homeDir,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
23
46
|
//# sourceMappingURL=index.js.map
|
package/dist/agents/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAQrC,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAQrC,+EAA+E;AAC/E,MAAM,CAAC,MAAM,UAAU,GAA4B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEpE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAc;IAChD,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACzE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CACzE,CAAC;IACF,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,KAAmB,EACnB,OAKI,EAAE;IAEN,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,KAAK,KAAK,CAAC;IACnE,MAAM,kBAAkB,CAAC;QACvB,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,WAAW,EACT,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QACxF,eAAe,EAAE,OAAO;QACxB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { AgentInstallOptions, ArtifactStatus } from "./types.js";
|
|
2
|
+
export interface InstallCommandFileOptions extends AgentInstallOptions {
|
|
3
|
+
agentId: string;
|
|
4
|
+
commandsSchema: number;
|
|
5
|
+
templateDir: string;
|
|
6
|
+
commandsDir: string;
|
|
7
|
+
filename: string;
|
|
8
|
+
}
|
|
9
|
+
export interface InstallCommandFileResult {
|
|
10
|
+
dest: string;
|
|
11
|
+
status: ArtifactStatus;
|
|
12
|
+
/** Present when content was (or would be) written — for ledger updates. */
|
|
13
|
+
hash?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Install one slash-command markdown file with chezmoi-style drift detection.
|
|
17
|
+
*
|
|
18
|
+
* When the file already exists and `--force` is off:
|
|
19
|
+
* - on-disk hash matches the ledger → safe to refresh to the new template
|
|
20
|
+
* - no ledger hash, or on-disk hash differs → treat as user-edited (`modified`)
|
|
21
|
+
*/
|
|
22
|
+
export declare function installCommandFile(opts: InstallCommandFileOptions): Promise<InstallCommandFileResult>;
|
|
23
|
+
/**
|
|
24
|
+
* Persist per-file hashes after a command install. No-op when `files` is empty
|
|
25
|
+
* or `dryRun` is set.
|
|
26
|
+
*/
|
|
27
|
+
export declare function recordCommandFileHashes(opts: {
|
|
28
|
+
agentId: string;
|
|
29
|
+
commandsSchema: number;
|
|
30
|
+
files: Record<string, {
|
|
31
|
+
schema: number;
|
|
32
|
+
hash: string;
|
|
33
|
+
}>;
|
|
34
|
+
homeDir?: string;
|
|
35
|
+
dryRun?: boolean;
|
|
36
|
+
}): Promise<void>;
|
|
37
|
+
//# sourceMappingURL=install-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-command.d.ts","sourceRoot":"","sources":["../../src/agents/install-command.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,wBAAwB,CAAC,CAuCnC;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,EAAE;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAWhB"}
|