grounder 0.5.0 → 0.6.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 +21 -20
- package/dist/agents/claude.d.ts +4 -4
- package/dist/agents/claude.d.ts.map +1 -1
- package/dist/agents/claude.js +158 -179
- package/dist/agents/claude.js.map +1 -1
- package/dist/agents/cursor.d.ts +3 -3
- package/dist/agents/cursor.d.ts.map +1 -1
- package/dist/agents/cursor.js +97 -144
- package/dist/agents/cursor.js.map +1 -1
- package/dist/agents/home-skills.d.ts +46 -0
- package/dist/agents/home-skills.d.ts.map +1 -0
- package/dist/agents/home-skills.js +83 -0
- package/dist/agents/home-skills.js.map +1 -0
- package/dist/agents/hook-fragment.d.ts +52 -0
- package/dist/agents/hook-fragment.d.ts.map +1 -0
- package/dist/agents/hook-fragment.js +76 -0
- package/dist/agents/hook-fragment.js.map +1 -0
- package/dist/agents/hook-install.d.ts +62 -0
- package/dist/agents/hook-install.d.ts.map +1 -0
- package/dist/agents/hook-install.js +74 -0
- package/dist/agents/hook-install.js.map +1 -0
- package/dist/agents/hook-runtime.d.ts +77 -10
- package/dist/agents/hook-runtime.d.ts.map +1 -1
- package/dist/agents/hook-runtime.js +274 -70
- package/dist/agents/hook-runtime.js.map +1 -1
- package/dist/agents/index.d.ts +8 -14
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +13 -19
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/types.d.ts +56 -16
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/apply.d.ts +69 -0
- package/dist/commands/apply.d.ts.map +1 -0
- package/dist/commands/apply.js +238 -0
- package/dist/commands/apply.js.map +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +190 -97
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/handoff/peek.d.ts +1 -1
- package/dist/commands/handoff/peek.d.ts.map +1 -1
- package/dist/commands/handoff/peek.js +28 -12
- package/dist/commands/handoff/peek.js.map +1 -1
- package/dist/commands/install-drift.d.ts +34 -0
- package/dist/commands/install-drift.d.ts.map +1 -0
- package/dist/commands/install-drift.js +72 -0
- package/dist/commands/install-drift.js.map +1 -0
- package/dist/commands/migrate.d.ts +11 -3
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +67 -33
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/overview.d.ts +33 -0
- package/dist/commands/overview.d.ts.map +1 -0
- package/dist/commands/overview.js +150 -0
- package/dist/commands/overview.js.map +1 -0
- package/dist/commands/render-artifact-table.d.ts +85 -0
- package/dist/commands/render-artifact-table.d.ts.map +1 -0
- package/dist/commands/render-artifact-table.js +232 -0
- package/dist/commands/render-artifact-table.js.map +1 -0
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +15 -4
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +86 -13
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +269 -88
- package/dist/commands/status.js.map +1 -1
- package/dist/connector/ledger-migrations.d.ts +55 -0
- package/dist/connector/ledger-migrations.d.ts.map +1 -0
- package/dist/connector/ledger-migrations.js +94 -0
- package/dist/connector/ledger-migrations.js.map +1 -0
- package/dist/connector/state.d.ts +96 -59
- package/dist/connector/state.d.ts.map +1 -1
- package/dist/connector/state.js +165 -107
- package/dist/connector/state.js.map +1 -1
- package/dist/help.d.ts +1 -1
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +27 -5
- package/dist/help.js.map +1 -1
- package/dist/reconcile/apply.d.ts +31 -0
- package/dist/reconcile/apply.d.ts.map +1 -0
- package/dist/reconcile/apply.js +97 -0
- package/dist/reconcile/apply.js.map +1 -0
- package/dist/reconcile/core.d.ts +82 -0
- package/dist/reconcile/core.d.ts.map +1 -0
- package/dist/reconcile/core.js +163 -0
- package/dist/reconcile/core.js.map +1 -0
- package/dist/reconcile/disk.d.ts +13 -0
- package/dist/reconcile/disk.d.ts.map +1 -0
- package/dist/reconcile/disk.js +28 -0
- package/dist/reconcile/disk.js.map +1 -0
- package/dist/util/fs.d.ts +14 -0
- package/dist/util/fs.d.ts.map +1 -1
- package/dist/util/fs.js +27 -1
- package/dist/util/fs.js.map +1 -1
- package/dist/util/merge-json.d.ts +13 -2
- package/dist/util/merge-json.d.ts.map +1 -1
- package/dist/util/merge-json.js +24 -10
- package/dist/util/merge-json.js.map +1 -1
- package/dist/vault/list-handoffs.d.ts +13 -3
- package/dist/vault/list-handoffs.d.ts.map +1 -1
- package/dist/vault/list-handoffs.js +28 -13
- package/dist/vault/list-handoffs.js.map +1 -1
- package/dist/vault/list-notes.d.ts +12 -3
- package/dist/vault/list-notes.d.ts.map +1 -1
- package/dist/vault/list-notes.js +13 -7
- package/dist/vault/list-notes.js.map +1 -1
- package/dist/vault/list-plans.d.ts +12 -3
- package/dist/vault/list-plans.d.ts.map +1 -1
- package/dist/vault/list-plans.js +13 -7
- package/dist/vault/list-plans.js.map +1 -1
- package/dist/vault/search.d.ts.map +1 -1
- package/dist/vault/search.js +128 -24
- package/dist/vault/search.js.map +1 -1
- package/package.json +2 -2
- package/templates/agents/claude/skills/grounder-handoff/SKILL.md +73 -0
- package/templates/agents/claude/{commands/grounder-note.md → skills/grounder-note/SKILL.md} +6 -0
- package/templates/agents/claude/skills/grounder-overview/SKILL.md +21 -0
- package/templates/agents/claude/{commands/grounder-plan.md → skills/grounder-plan/SKILL.md} +6 -0
- package/templates/agents/claude/skills/grounder-recall/SKILL.md +34 -0
- package/templates/agents/claude/{commands/grounder-search.md → skills/grounder-search/SKILL.md} +16 -8
- package/templates/agents/cursor/skills/grounder-handoff/SKILL.md +73 -0
- package/templates/agents/cursor/{commands/grounder-note.md → skills/grounder-note/SKILL.md} +6 -0
- package/templates/agents/cursor/skills/grounder-overview/SKILL.md +21 -0
- package/templates/agents/cursor/{commands/grounder-plan.md → skills/grounder-plan/SKILL.md} +6 -0
- package/templates/agents/cursor/skills/grounder-recall/SKILL.md +34 -0
- package/templates/agents/cursor/{commands/grounder-search.md → skills/grounder-search/SKILL.md} +16 -8
- package/templates/vault/plan.md +1 -1
- package/templates/vault/session-handoff.md +2 -1
- package/dist/agents/install-command.d.ts +0 -35
- package/dist/agents/install-command.d.ts.map +0 -1
- package/dist/agents/install-command.js +0 -65
- package/dist/agents/install-command.js.map +0 -1
- package/dist/commands/apply-agent-installs.d.ts +0 -34
- package/dist/commands/apply-agent-installs.d.ts.map +0 -1
- package/dist/commands/apply-agent-installs.js +0 -137
- package/dist/commands/apply-agent-installs.js.map +0 -1
- package/templates/agents/claude/commands/grounder-task-handoff.md +0 -58
- package/templates/agents/claude/commands/grounder-task.md +0 -22
- package/templates/agents/cursor/commands/grounder-task-handoff.md +0 -58
- package/templates/agents/cursor/commands/grounder-task.md +0 -22
package/dist/agents/types.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* - `created` / `overwritten` — wrote new content
|
|
3
3
|
* - `skipped` — already current (or dry-run would no-op)
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
*
|
|
5
|
+
* No `modified`/conflict status here: hook fragments always-converge (see
|
|
6
|
+
* `installHooks`'s own docs on `AgentAdapter`) — unlike whole-file artifacts,
|
|
7
|
+
* there is no `--force` gate to report a blocked state for.
|
|
6
8
|
*/
|
|
7
|
-
export type ArtifactStatus = "created" | "skipped" | "overwritten"
|
|
9
|
+
export type ArtifactStatus = "created" | "skipped" | "overwritten";
|
|
8
10
|
export interface AgentInstallOptions {
|
|
9
11
|
force?: boolean;
|
|
10
12
|
/** Preview decisions without writing files or updating the install ledger. */
|
|
@@ -20,24 +22,62 @@ export interface AgentAdapter {
|
|
|
20
22
|
readonly id: string;
|
|
21
23
|
/** Human-readable display name, e.g. "Cursor". */
|
|
22
24
|
readonly name: string;
|
|
25
|
+
/** Returns true when this agent appears to be installed on the machine. */
|
|
26
|
+
isInstalled(): Promise<boolean>;
|
|
27
|
+
/** Absolute paths of whole-file artifacts this adapter installs (read-only inspect). */
|
|
28
|
+
expectedArtifacts(homeDir?: string): string[];
|
|
23
29
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
30
|
+
* Pure render (package-local template read only, no host filesystem
|
|
31
|
+
* touched): every whole-file artifact this adapter currently wants
|
|
32
|
+
* installed, path → rendered content. Reconciled against the ledger and
|
|
33
|
+
* disk by `reconcile()`.
|
|
34
|
+
*
|
|
35
|
+
* `options.invocation`, when given, replaces the live process's own
|
|
36
|
+
* `runtimeInvocation()` for the `{{GROUNDER_CLI}}` substitution. The real
|
|
37
|
+
* write path (`setup`/`migrate`, and `doctor`'s dry-run preview of it) must
|
|
38
|
+
* never pass this — it needs the live `process.execPath` so switching Node
|
|
39
|
+
* and re-running `migrate` still repairs a stale interpreter path (see
|
|
40
|
+
* docs/architecture/runtime-invocation.md's "Repair loop"). Only the cheap
|
|
41
|
+
* drift check (`status`/`peek`) passes the ledger's last-recorded
|
|
42
|
+
* invocation, so a *different* checking process never manufactures false
|
|
43
|
+
* drift purely from its own `process.execPath` differing from whatever
|
|
44
|
+
* process last ran a real install. An options object rather than a second
|
|
45
|
+
* positional string, deliberately: this is the one call that must never be
|
|
46
|
+
* passed on the write path, and a bare positional is easy to pass by
|
|
47
|
+
* mistake once a third parameter exists.
|
|
26
48
|
*/
|
|
27
|
-
|
|
49
|
+
desiredArtifacts(homeDir?: string, options?: {
|
|
50
|
+
invocation?: string;
|
|
51
|
+
}): Promise<Record<string, string>>;
|
|
28
52
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
53
|
+
* Historical paths a previous install shape wrote that the current shape no
|
|
54
|
+
* longer wants at all (e.g. pre-Agent-Skills command markdown) — unioned
|
|
55
|
+
* into the "previous desired" side of `reconcile()`'s diff so they retire
|
|
56
|
+
* even when the ledger never recorded them (pre-hash-tracking installs).
|
|
57
|
+
*/
|
|
58
|
+
tombstones(homeDir?: string): string[];
|
|
59
|
+
/**
|
|
60
|
+
* Directories this adapter is allowed to create in and delete from for its
|
|
61
|
+
* whole-file artifacts (skills dir, legacy commands dir) — never hook
|
|
62
|
+
* config, which is a shared JSON file merged/unmerged in place, not
|
|
63
|
+
* whole-file reconciled. Callers use this to keep a stray ledger entry
|
|
64
|
+
* (hand-edited or corrupted `state.json`) from being treated as a delete
|
|
65
|
+
* candidate just because it happens to share this agent's id.
|
|
66
|
+
*/
|
|
67
|
+
ownedPrefixes(homeDir?: string): string[];
|
|
68
|
+
/**
|
|
69
|
+
* Optional: converge session hooks (separate from whole-file artifact
|
|
70
|
+
* install) — always-converge, no conflict/`--force` gate: removes every
|
|
71
|
+
* recognizer match and inserts exactly one canonical entry.
|
|
31
72
|
*/
|
|
32
|
-
readonly hooksSchema?: number;
|
|
33
|
-
/** Returns true when this agent appears to be installed on the machine. */
|
|
34
|
-
isInstalled(): Promise<boolean>;
|
|
35
|
-
/** Absolute paths of artifacts this adapter installs (read-only inspect). */
|
|
36
|
-
expectedArtifacts(homeDir?: string): string[];
|
|
37
|
-
/** Install all agent-specific artifacts (commands, rules, etc.). */
|
|
38
|
-
install(opts: AgentInstallOptions): Promise<AgentInstallResult>;
|
|
39
|
-
/** Optional: install session hooks (separate from slash-command install). */
|
|
40
73
|
installHooks?(opts: AgentInstallOptions): Promise<AgentInstallResult>;
|
|
74
|
+
/**
|
|
75
|
+
* Optional: remove Grounder's hook fragment entirely (`--no-hooks`). Must
|
|
76
|
+
* actually delete the entry, not just report it as absent — an opt-out
|
|
77
|
+
* that leaves the fragment in place isn't sticky against the next
|
|
78
|
+
* `migrate`.
|
|
79
|
+
*/
|
|
80
|
+
removeHooks?(opts: AgentInstallOptions): Promise<AgentInstallResult>;
|
|
41
81
|
/** Optional: absolute path(s) of hook config this adapter would touch. */
|
|
42
82
|
expectedHookArtifacts?(homeDir?: string): string[];
|
|
43
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;AAEnE,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2EAA2E;IAC3E,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,wFAAwF;IACxF,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9C;;;;;;;;;;;;;;;;;;;OAmBG;IACH,gBAAgB,CACd,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAChC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnC;;;;;OAKG;IACH,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvC;;;;;;;OAOG;IACH,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1C;;;;OAIG;IACH,YAAY,CAAC,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACtE;;;;;OAKG;IACH,WAAW,CAAC,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrE,0EAA0E;IAC1E,qBAAqB,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACpD"}
|
package/dist/cli.js
CHANGED
|
@@ -10,6 +10,7 @@ import { runLink } from "./commands/link.js";
|
|
|
10
10
|
import { runMigrate } from "./commands/migrate.js";
|
|
11
11
|
import { runNoteList } from "./commands/note/list.js";
|
|
12
12
|
import { runNote } from "./commands/note.js";
|
|
13
|
+
import { runOverview } from "./commands/overview.js";
|
|
13
14
|
import { runPathLogs } from "./commands/path/logs.js";
|
|
14
15
|
import { runPathNotes } from "./commands/path/notes.js";
|
|
15
16
|
import { runPathPlans } from "./commands/path/plans.js";
|
|
@@ -91,6 +92,9 @@ async function main() {
|
|
|
91
92
|
if (command === "search") {
|
|
92
93
|
process.exit(await runSearch(rest));
|
|
93
94
|
}
|
|
95
|
+
if (command === "overview") {
|
|
96
|
+
process.exit(await runOverview(rest));
|
|
97
|
+
}
|
|
94
98
|
if (command === "path") {
|
|
95
99
|
if (rest[0] === "notes") {
|
|
96
100
|
process.exit(await runPathNotes(rest.slice(1)));
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEnG,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACjF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAE9E,CAAC;AAEF,SAAS,YAAY;IACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAc;IACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,sFAAsF;AACtF,SAAS,eAAe,CAAC,SAAiB,EAAE,MAAe;IACzD,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC1C,aAAa,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACzB,aAAa,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE,CAAC;QAChD,YAAY,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAEhC,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,8EAA8E;IAC9E,MAAM,iBAAiB,GACrB,SAAS,CAAC,IAAI,CAAC;QACf,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;QAC7C,OAAO,KAAK,SAAS;QACrB,OAAO,KAAK,OAAO,CAAC;IACtB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,MAAM,qBAAqB,EAAE,CAAC;IAChC,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEnG,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACjF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAE9E,CAAC;AAEF,SAAS,YAAY;IACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAc;IACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,sFAAsF;AACtF,SAAS,eAAe,CAAC,SAAiB,EAAE,MAAe;IACzD,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC1C,aAAa,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACzB,aAAa,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE,CAAC;QAChD,YAAY,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAEhC,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,8EAA8E;IAC9E,MAAM,iBAAiB,GACrB,SAAS,CAAC,IAAI,CAAC;QACf,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;QAC7C,OAAO,KAAK,SAAS;QACrB,OAAO,KAAK,OAAO,CAAC;IACtB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,MAAM,qBAAqB,EAAE,CAAC;IAChC,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { AgentAdapter, AgentInstallResult, ArtifactStatus } from "../agents/types.js";
|
|
2
|
+
import { type PlanEntry } from "../reconcile/core.js";
|
|
3
|
+
export interface ApplyAgentInstallsOptions {
|
|
4
|
+
agents: AgentAdapter[];
|
|
5
|
+
force?: boolean;
|
|
6
|
+
/** Explicitly install/refresh session hooks (setup --hooks / migrate --hooks). */
|
|
7
|
+
hooks?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Explicitly turn hooks off (`migrate --no-hooks`) — removes the fragment
|
|
10
|
+
* and flips `hooksEnabled` to `false` (sticky: a later plain `migrate`
|
|
11
|
+
* will not re-hydrate it). Mutually exclusive with `hooks` in practice
|
|
12
|
+
* (the CLI layer rejects both at once); if both are somehow set, `hooks`
|
|
13
|
+
* wins for that one call.
|
|
14
|
+
*/
|
|
15
|
+
noHooks?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* When true (migrate), also refresh hooks that were previously enabled or
|
|
18
|
+
* already present on disk — without installing hooks for agents that never
|
|
19
|
+
* opted in.
|
|
20
|
+
*/
|
|
21
|
+
refreshInstalledHooks?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Retire tombstoned legacy paths (pre-skill `grounder-*.md` command files).
|
|
24
|
+
* Defaults to `true` (`migrate`'s behavior). `setup` passes `false` — per
|
|
25
|
+
* `docs/upgrading.md`, `setup --force` is a documented repair path that
|
|
26
|
+
* never deletes legacy files, only `migrate` does; `setup` overwriting a
|
|
27
|
+
* user's hand-edited leftover on `--force` would silently discard edits
|
|
28
|
+
* that were never ported into the new `SKILL.md`.
|
|
29
|
+
*/
|
|
30
|
+
retireLegacy?: boolean;
|
|
31
|
+
dryRun?: boolean;
|
|
32
|
+
homeDir?: string;
|
|
33
|
+
/** Running package version — recorded in the ledger and checked on the write path. */
|
|
34
|
+
grounderVersion: string;
|
|
35
|
+
}
|
|
36
|
+
export interface AgentApplyResult {
|
|
37
|
+
agent: AgentAdapter;
|
|
38
|
+
plan: PlanEntry[];
|
|
39
|
+
hooks?: AgentInstallResult;
|
|
40
|
+
/** Would/did this agent's install change `~/.grounder/state.json`? */
|
|
41
|
+
ledgerChanged: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Set when this agent's hook install/removal threw (e.g. a shared hook
|
|
44
|
+
* config file has a `hooks` key that isn't a JSON object — see
|
|
45
|
+
* `readHooksObject`). This agent's whole-file artifacts (`plan` above)
|
|
46
|
+
* already applied by this point regardless; only the hook step failed, and
|
|
47
|
+
* later agents in the same run are unaffected — see the per-agent `try`
|
|
48
|
+
* in the loop below.
|
|
49
|
+
*/
|
|
50
|
+
error?: string;
|
|
51
|
+
}
|
|
52
|
+
export interface ApplyAgentInstallsResult {
|
|
53
|
+
runtime?: {
|
|
54
|
+
cliPath: string;
|
|
55
|
+
status: ArtifactStatus;
|
|
56
|
+
mode: "symlink" | "copy";
|
|
57
|
+
};
|
|
58
|
+
agents: AgentApplyResult[];
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Materialize runtime + install/refresh agent whole-file artifacts (and
|
|
62
|
+
* optional hooks). Shared by `grounder setup` and `grounder migrate`, both of
|
|
63
|
+
* which render the result themselves via `render-artifact-table.ts`.
|
|
64
|
+
*
|
|
65
|
+
* `--dry-run` = compute plans and preview, never call `applyPlan()` or write
|
|
66
|
+
* hooks/ledger.
|
|
67
|
+
*/
|
|
68
|
+
export declare function applyAgentInstalls(opts: ApplyAgentInstallsOptions): Promise<ApplyAgentInstallsResult>;
|
|
69
|
+
//# sourceMappingURL=apply.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/commands/apply.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAa3F,OAAO,EAAE,KAAK,SAAS,EAAgC,MAAM,sBAAsB,CAAC;AAKpF,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kFAAkF;IAClF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sFAAsF;IACtF,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,sEAAsE;IACtE,aAAa,EAAE,OAAO,CAAC;IACvB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,cAAc,CAAC;QAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAA;KAAE,CAAC;IAChF,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B;AAyCD;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,wBAAwB,CAAC,CA2MnC"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { hookFileHasGrounderEntry, installHookRuntime, isHookRuntimeStale, runtimeCliPath, runtimeInvocation, runtimeMode, } from "../agents/hook-runtime.js";
|
|
2
|
+
import { ownedLedgerFiles } from "../agents/index.js";
|
|
3
|
+
import { assertVersionSupportsWrite, ledgerFilesFor, readGrounderState, recordedHooksEnabled, recordedInvocation, setHooksEnabled, setLedgerInvocation, touchGrounderVersion, } from "../connector/state.js";
|
|
4
|
+
import { isUnsupportedSchemaError } from "../connector/unsupported-schema.js";
|
|
5
|
+
import { applyPlan } from "../reconcile/apply.js";
|
|
6
|
+
import { planChangesLedger, reconcile } from "../reconcile/core.js";
|
|
7
|
+
import { readDiskHashes } from "../reconcile/disk.js";
|
|
8
|
+
import { fileExists } from "../util/fs.js";
|
|
9
|
+
import { hashContent } from "../util/hash.js";
|
|
10
|
+
async function agentHasInstalledHooks(agent, homeDir) {
|
|
11
|
+
if (!agent.expectedHookArtifacts) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
const paths = agent.expectedHookArtifacts(homeDir);
|
|
15
|
+
for (const p of paths) {
|
|
16
|
+
if (await hookFileHasGrounderEntry(p)) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* `hooksEnabled` tri-state drives whether a plain (no `--hooks`) migrate
|
|
24
|
+
* refreshes hooks: `true` → refresh, `false` → never (sticky opt-out),
|
|
25
|
+
* `undefined` → fall back to an on-disk recognizer match (legacy ledger, or
|
|
26
|
+
* hooks installed before the ledger tracked them at all).
|
|
27
|
+
*/
|
|
28
|
+
async function shouldInstallHooks(agent, opts, hooksEnabled) {
|
|
29
|
+
if (!agent.installHooks) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
if (opts.hooks) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
if (!opts.refreshInstalledHooks) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
if (hooksEnabled !== undefined) {
|
|
39
|
+
return hooksEnabled;
|
|
40
|
+
}
|
|
41
|
+
return agentHasInstalledHooks(agent, opts.homeDir);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Materialize runtime + install/refresh agent whole-file artifacts (and
|
|
45
|
+
* optional hooks). Shared by `grounder setup` and `grounder migrate`, both of
|
|
46
|
+
* which render the result themselves via `render-artifact-table.ts`.
|
|
47
|
+
*
|
|
48
|
+
* `--dry-run` = compute plans and preview, never call `applyPlan()` or write
|
|
49
|
+
* hooks/ledger.
|
|
50
|
+
*/
|
|
51
|
+
export async function applyAgentInstalls(opts) {
|
|
52
|
+
const force = opts.force ?? false;
|
|
53
|
+
const dryRun = opts.dryRun ?? false;
|
|
54
|
+
const retireLegacy = opts.retireLegacy ?? true;
|
|
55
|
+
const homeDir = opts.homeDir;
|
|
56
|
+
const agents = opts.agents;
|
|
57
|
+
const state = await readGrounderState(homeDir);
|
|
58
|
+
// Not gated on `dryRun` — a dry-run preview must refuse exactly like a real
|
|
59
|
+
// run would, so the two never disagree about whether this binary can write
|
|
60
|
+
// at all (see docs/architecture/state-reconciliation.md).
|
|
61
|
+
assertVersionSupportsWrite(opts.grounderVersion, state);
|
|
62
|
+
let runtime;
|
|
63
|
+
if (agents.length > 0) {
|
|
64
|
+
const cliPath = runtimeCliPath(homeDir);
|
|
65
|
+
// Grounder owns this directory outright (no user edits to protect), so
|
|
66
|
+
// `force` isn't needed to justify a reinstall — only actual staleness is.
|
|
67
|
+
const stale = await isHookRuntimeStale(homeDir);
|
|
68
|
+
if (!stale) {
|
|
69
|
+
runtime = { cliPath, status: "skipped", mode: await runtimeMode() };
|
|
70
|
+
}
|
|
71
|
+
else if (dryRun) {
|
|
72
|
+
runtime = {
|
|
73
|
+
cliPath,
|
|
74
|
+
status: (await fileExists(cliPath)) ? "overwritten" : "created",
|
|
75
|
+
mode: await runtimeMode(),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
runtime = await installHookRuntime({ homeDir });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const results = [];
|
|
83
|
+
for (const agent of agents) {
|
|
84
|
+
// No invocation override here, deliberately: this is the real write path
|
|
85
|
+
// (`setup`/`migrate`), which must always render against the live
|
|
86
|
+
// process's own `process.execPath` so switching Node and re-running
|
|
87
|
+
// `migrate` still repairs a stale interpreter path. See
|
|
88
|
+
// docs/architecture/runtime-invocation.md's "Repair loop" — only the
|
|
89
|
+
// cheap drift check (`install-drift.ts`) replays a stored invocation.
|
|
90
|
+
const desired = await agent.desiredArtifacts(homeDir);
|
|
91
|
+
const tombstones = retireLegacy ? agent.tombstones(homeDir) : [];
|
|
92
|
+
let ledgerFiles = ownedLedgerFiles(agent, ledgerFilesFor(state, agent.id), homeDir);
|
|
93
|
+
if (!retireLegacy && ledgerFiles) {
|
|
94
|
+
// `setup` must not retire legacy paths it already retired the ledger
|
|
95
|
+
// entry for either — an empty `tombstones` list alone isn't enough:
|
|
96
|
+
// `ownedLedgerFiles` still includes the legacy-commands-dir entry
|
|
97
|
+
// `migrate` recorded, and reconcile() would still see it and plan a
|
|
98
|
+
// delete. Restrict the ledger view itself to currently-desired paths.
|
|
99
|
+
const desiredPaths = new Set(Object.keys(desired));
|
|
100
|
+
ledgerFiles = Object.fromEntries(Object.entries(ledgerFiles).filter(([p]) => desiredPaths.has(p)));
|
|
101
|
+
}
|
|
102
|
+
const diskPaths = new Set([
|
|
103
|
+
...Object.keys(desired),
|
|
104
|
+
...Object.keys(ledgerFiles ?? {}),
|
|
105
|
+
...tombstones,
|
|
106
|
+
]);
|
|
107
|
+
const disk = await readDiskHashes(diskPaths);
|
|
108
|
+
const desiredHashes = {};
|
|
109
|
+
for (const [p, content] of Object.entries(desired)) {
|
|
110
|
+
desiredHashes[p] = hashContent(content);
|
|
111
|
+
}
|
|
112
|
+
const plan = reconcile(desiredHashes, tombstones, ledgerFiles, disk, force);
|
|
113
|
+
// `lastInvocation` only means "the {{GROUNDER_CLI}} baked into files'
|
|
114
|
+
// recorded hashes" if applying this plan actually gives every desired
|
|
115
|
+
// path a live hash. A desired path stuck on `conflict` (force not passed,
|
|
116
|
+
// on-disk content Grounder can't vouch for) keeps whatever hash it had
|
|
117
|
+
// before — recording the live invocation anyway would make the cheap
|
|
118
|
+
// check replay it against that stale hash and report drift forever, even
|
|
119
|
+
// after the conflict is resolved by an unrelated later run. Only skip
|
|
120
|
+
// when *nothing* for this agent got a live hash this run (every desired
|
|
121
|
+
// path conflicted) — a mixed run still records it: the paths that did
|
|
122
|
+
// get a live hash now correctly replay, and the still-conflicted ones
|
|
123
|
+
// showing drift is real remaining work (they need `--force`), not a
|
|
124
|
+
// false positive.
|
|
125
|
+
const hasLiveDesiredWrite = plan.some((entry) => entry.action !== "conflict" && desiredHashes[entry.path] !== undefined);
|
|
126
|
+
// Computed unconditionally (not just inside the `!dryRun` write below) so
|
|
127
|
+
// dry-run and a real run report the same "would state.json change?"
|
|
128
|
+
// verdict — matching `hooksLedgerChanged`'s pattern below. A self-heal
|
|
129
|
+
// case (a current install whose ledger predates this field) has an
|
|
130
|
+
// all-noop `plan` and unchanged hooks, so without this, `ledgerChanged`
|
|
131
|
+
// would miss the one write `setLedgerInvocation` is about to make.
|
|
132
|
+
const invocation = runtimeInvocation(homeDir);
|
|
133
|
+
const invocationChanged = hasLiveDesiredWrite && recordedInvocation(state, agent.id) !== invocation;
|
|
134
|
+
if (!dryRun) {
|
|
135
|
+
await applyPlan({
|
|
136
|
+
agentId: agent.id,
|
|
137
|
+
plan,
|
|
138
|
+
content: desired,
|
|
139
|
+
grounderVersion: opts.grounderVersion,
|
|
140
|
+
homeDir,
|
|
141
|
+
ownedPrefixes: agent.ownedPrefixes(homeDir),
|
|
142
|
+
});
|
|
143
|
+
if (hasLiveDesiredWrite) {
|
|
144
|
+
// Record what `{{GROUNDER_CLI}}` was actually rendered with above
|
|
145
|
+
// (the live process's own `process.execPath` — `desired` was never
|
|
146
|
+
// computed with an override), so the cheap drift check can replay
|
|
147
|
+
// the exact same invocation later instead of whichever process
|
|
148
|
+
// happens to be checking. See
|
|
149
|
+
// docs/architecture/runtime-invocation.md's "Repair loop".
|
|
150
|
+
await setLedgerInvocation({
|
|
151
|
+
agentId: agent.id,
|
|
152
|
+
invocation,
|
|
153
|
+
grounderVersion: opts.grounderVersion,
|
|
154
|
+
homeDir,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// A tombstoned path that's simply already gone (`noop`) carries nothing
|
|
159
|
+
// actionable — drop it from the table-facing plan (matches the old
|
|
160
|
+
// migration runner's "already-absent stays unreported"). Every other
|
|
161
|
+
// outcome, including a desired path's own `noop`, stays visible.
|
|
162
|
+
const desiredPaths = new Set(Object.keys(desired));
|
|
163
|
+
const visiblePlan = plan.filter((entry) => desiredPaths.has(entry.path) || entry.action !== "noop");
|
|
164
|
+
const hooksEnabled = recordedHooksEnabled(state, agent.id);
|
|
165
|
+
let hooksResult;
|
|
166
|
+
let hooksLedgerChanged = false;
|
|
167
|
+
let hooksError;
|
|
168
|
+
// Isolated per agent: a hook merge can throw on a shared config file this
|
|
169
|
+
// agent doesn't own the shape of (e.g. a `hooks` key that isn't a JSON
|
|
170
|
+
// object — see `readHooksObject`). Left uncaught, that unwinds past this
|
|
171
|
+
// loop and skips every agent after this one, even though their installs
|
|
172
|
+
// are entirely independent. `UnsupportedSchemaError` is the one exception
|
|
173
|
+
// that must still abort the whole run (same contract as
|
|
174
|
+
// `assertVersionSupportsWrite` above).
|
|
175
|
+
try {
|
|
176
|
+
if (opts.noHooks && !opts.hooks) {
|
|
177
|
+
const removeHooksFn = agent.removeHooks;
|
|
178
|
+
if (removeHooksFn) {
|
|
179
|
+
hooksResult = await removeHooksFn({ force, dryRun, homeDir });
|
|
180
|
+
if (hooksEnabled !== false) {
|
|
181
|
+
hooksLedgerChanged = true;
|
|
182
|
+
if (!dryRun) {
|
|
183
|
+
await setHooksEnabled({
|
|
184
|
+
agentId: agent.id,
|
|
185
|
+
enabled: false,
|
|
186
|
+
grounderVersion: opts.grounderVersion,
|
|
187
|
+
homeDir,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
else if (await shouldInstallHooks(agent, opts, hooksEnabled)) {
|
|
194
|
+
const installHooksFn = agent.installHooks;
|
|
195
|
+
if (installHooksFn) {
|
|
196
|
+
hooksResult = await installHooksFn({ force, dryRun, homeDir });
|
|
197
|
+
if (hooksEnabled !== true) {
|
|
198
|
+
hooksLedgerChanged = true;
|
|
199
|
+
if (!dryRun) {
|
|
200
|
+
await setHooksEnabled({
|
|
201
|
+
agentId: agent.id,
|
|
202
|
+
enabled: true,
|
|
203
|
+
grounderVersion: opts.grounderVersion,
|
|
204
|
+
homeDir,
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
if (isUnsupportedSchemaError(error)) {
|
|
213
|
+
throw error;
|
|
214
|
+
}
|
|
215
|
+
hooksError = error instanceof Error ? error.message : String(error);
|
|
216
|
+
}
|
|
217
|
+
const ledgerChanged = planChangesLedger(plan, ledgerFiles, desiredHashes) ||
|
|
218
|
+
hooksLedgerChanged ||
|
|
219
|
+
invocationChanged;
|
|
220
|
+
results.push({
|
|
221
|
+
agent,
|
|
222
|
+
plan: visiblePlan,
|
|
223
|
+
hooks: hooksResult,
|
|
224
|
+
ledgerChanged,
|
|
225
|
+
error: hooksError,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
// Per-artifact writes above have no hook for an all-noop plan — stamp
|
|
229
|
+
// grounderVersion unconditionally at the end of a real run so the upgrade
|
|
230
|
+
// banner still clears on a fully-current machine (matches the old
|
|
231
|
+
// recordAgentInstallState's every-real-run behavior). A no-op write when
|
|
232
|
+
// already current.
|
|
233
|
+
if (!dryRun && agents.length > 0) {
|
|
234
|
+
await touchGrounderVersion(opts.grounderVersion, homeDir);
|
|
235
|
+
}
|
|
236
|
+
return { runtime, agents: results };
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=apply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/commands/apply.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAuCA,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA8vBD,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ/D;AAED,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBvF"}
|