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.
Files changed (144) hide show
  1. package/README.md +21 -20
  2. package/dist/agents/claude.d.ts +4 -4
  3. package/dist/agents/claude.d.ts.map +1 -1
  4. package/dist/agents/claude.js +158 -179
  5. package/dist/agents/claude.js.map +1 -1
  6. package/dist/agents/cursor.d.ts +3 -3
  7. package/dist/agents/cursor.d.ts.map +1 -1
  8. package/dist/agents/cursor.js +97 -144
  9. package/dist/agents/cursor.js.map +1 -1
  10. package/dist/agents/home-skills.d.ts +46 -0
  11. package/dist/agents/home-skills.d.ts.map +1 -0
  12. package/dist/agents/home-skills.js +83 -0
  13. package/dist/agents/home-skills.js.map +1 -0
  14. package/dist/agents/hook-fragment.d.ts +52 -0
  15. package/dist/agents/hook-fragment.d.ts.map +1 -0
  16. package/dist/agents/hook-fragment.js +76 -0
  17. package/dist/agents/hook-fragment.js.map +1 -0
  18. package/dist/agents/hook-install.d.ts +62 -0
  19. package/dist/agents/hook-install.d.ts.map +1 -0
  20. package/dist/agents/hook-install.js +74 -0
  21. package/dist/agents/hook-install.js.map +1 -0
  22. package/dist/agents/hook-runtime.d.ts +77 -10
  23. package/dist/agents/hook-runtime.d.ts.map +1 -1
  24. package/dist/agents/hook-runtime.js +274 -70
  25. package/dist/agents/hook-runtime.js.map +1 -1
  26. package/dist/agents/index.d.ts +8 -14
  27. package/dist/agents/index.d.ts.map +1 -1
  28. package/dist/agents/index.js +13 -19
  29. package/dist/agents/index.js.map +1 -1
  30. package/dist/agents/types.d.ts +56 -16
  31. package/dist/agents/types.d.ts.map +1 -1
  32. package/dist/cli.js +4 -0
  33. package/dist/cli.js.map +1 -1
  34. package/dist/commands/apply.d.ts +69 -0
  35. package/dist/commands/apply.d.ts.map +1 -0
  36. package/dist/commands/apply.js +238 -0
  37. package/dist/commands/apply.js.map +1 -0
  38. package/dist/commands/doctor.d.ts.map +1 -1
  39. package/dist/commands/doctor.js +190 -97
  40. package/dist/commands/doctor.js.map +1 -1
  41. package/dist/commands/handoff/peek.d.ts +1 -1
  42. package/dist/commands/handoff/peek.d.ts.map +1 -1
  43. package/dist/commands/handoff/peek.js +28 -12
  44. package/dist/commands/handoff/peek.js.map +1 -1
  45. package/dist/commands/install-drift.d.ts +34 -0
  46. package/dist/commands/install-drift.d.ts.map +1 -0
  47. package/dist/commands/install-drift.js +72 -0
  48. package/dist/commands/install-drift.js.map +1 -0
  49. package/dist/commands/migrate.d.ts +11 -3
  50. package/dist/commands/migrate.d.ts.map +1 -1
  51. package/dist/commands/migrate.js +67 -33
  52. package/dist/commands/migrate.js.map +1 -1
  53. package/dist/commands/overview.d.ts +33 -0
  54. package/dist/commands/overview.d.ts.map +1 -0
  55. package/dist/commands/overview.js +150 -0
  56. package/dist/commands/overview.js.map +1 -0
  57. package/dist/commands/render-artifact-table.d.ts +85 -0
  58. package/dist/commands/render-artifact-table.d.ts.map +1 -0
  59. package/dist/commands/render-artifact-table.js +232 -0
  60. package/dist/commands/render-artifact-table.js.map +1 -0
  61. package/dist/commands/search.d.ts.map +1 -1
  62. package/dist/commands/search.js +15 -4
  63. package/dist/commands/search.js.map +1 -1
  64. package/dist/commands/setup.d.ts.map +1 -1
  65. package/dist/commands/setup.js +86 -13
  66. package/dist/commands/setup.js.map +1 -1
  67. package/dist/commands/status.d.ts +7 -0
  68. package/dist/commands/status.d.ts.map +1 -1
  69. package/dist/commands/status.js +269 -88
  70. package/dist/commands/status.js.map +1 -1
  71. package/dist/connector/ledger-migrations.d.ts +55 -0
  72. package/dist/connector/ledger-migrations.d.ts.map +1 -0
  73. package/dist/connector/ledger-migrations.js +94 -0
  74. package/dist/connector/ledger-migrations.js.map +1 -0
  75. package/dist/connector/state.d.ts +96 -59
  76. package/dist/connector/state.d.ts.map +1 -1
  77. package/dist/connector/state.js +165 -107
  78. package/dist/connector/state.js.map +1 -1
  79. package/dist/help.d.ts +1 -1
  80. package/dist/help.d.ts.map +1 -1
  81. package/dist/help.js +27 -5
  82. package/dist/help.js.map +1 -1
  83. package/dist/reconcile/apply.d.ts +31 -0
  84. package/dist/reconcile/apply.d.ts.map +1 -0
  85. package/dist/reconcile/apply.js +97 -0
  86. package/dist/reconcile/apply.js.map +1 -0
  87. package/dist/reconcile/core.d.ts +82 -0
  88. package/dist/reconcile/core.d.ts.map +1 -0
  89. package/dist/reconcile/core.js +163 -0
  90. package/dist/reconcile/core.js.map +1 -0
  91. package/dist/reconcile/disk.d.ts +13 -0
  92. package/dist/reconcile/disk.d.ts.map +1 -0
  93. package/dist/reconcile/disk.js +28 -0
  94. package/dist/reconcile/disk.js.map +1 -0
  95. package/dist/util/fs.d.ts +14 -0
  96. package/dist/util/fs.d.ts.map +1 -1
  97. package/dist/util/fs.js +27 -1
  98. package/dist/util/fs.js.map +1 -1
  99. package/dist/util/merge-json.d.ts +13 -2
  100. package/dist/util/merge-json.d.ts.map +1 -1
  101. package/dist/util/merge-json.js +24 -10
  102. package/dist/util/merge-json.js.map +1 -1
  103. package/dist/vault/list-handoffs.d.ts +13 -3
  104. package/dist/vault/list-handoffs.d.ts.map +1 -1
  105. package/dist/vault/list-handoffs.js +28 -13
  106. package/dist/vault/list-handoffs.js.map +1 -1
  107. package/dist/vault/list-notes.d.ts +12 -3
  108. package/dist/vault/list-notes.d.ts.map +1 -1
  109. package/dist/vault/list-notes.js +13 -7
  110. package/dist/vault/list-notes.js.map +1 -1
  111. package/dist/vault/list-plans.d.ts +12 -3
  112. package/dist/vault/list-plans.d.ts.map +1 -1
  113. package/dist/vault/list-plans.js +13 -7
  114. package/dist/vault/list-plans.js.map +1 -1
  115. package/dist/vault/search.d.ts.map +1 -1
  116. package/dist/vault/search.js +128 -24
  117. package/dist/vault/search.js.map +1 -1
  118. package/package.json +2 -2
  119. package/templates/agents/claude/skills/grounder-handoff/SKILL.md +73 -0
  120. package/templates/agents/claude/{commands/grounder-note.md → skills/grounder-note/SKILL.md} +6 -0
  121. package/templates/agents/claude/skills/grounder-overview/SKILL.md +21 -0
  122. package/templates/agents/claude/{commands/grounder-plan.md → skills/grounder-plan/SKILL.md} +6 -0
  123. package/templates/agents/claude/skills/grounder-recall/SKILL.md +34 -0
  124. package/templates/agents/claude/{commands/grounder-search.md → skills/grounder-search/SKILL.md} +16 -8
  125. package/templates/agents/cursor/skills/grounder-handoff/SKILL.md +73 -0
  126. package/templates/agents/cursor/{commands/grounder-note.md → skills/grounder-note/SKILL.md} +6 -0
  127. package/templates/agents/cursor/skills/grounder-overview/SKILL.md +21 -0
  128. package/templates/agents/cursor/{commands/grounder-plan.md → skills/grounder-plan/SKILL.md} +6 -0
  129. package/templates/agents/cursor/skills/grounder-recall/SKILL.md +34 -0
  130. package/templates/agents/cursor/{commands/grounder-search.md → skills/grounder-search/SKILL.md} +16 -8
  131. package/templates/vault/plan.md +1 -1
  132. package/templates/vault/session-handoff.md +2 -1
  133. package/dist/agents/install-command.d.ts +0 -35
  134. package/dist/agents/install-command.d.ts.map +0 -1
  135. package/dist/agents/install-command.js +0 -65
  136. package/dist/agents/install-command.js.map +0 -1
  137. package/dist/commands/apply-agent-installs.d.ts +0 -34
  138. package/dist/commands/apply-agent-installs.d.ts.map +0 -1
  139. package/dist/commands/apply-agent-installs.js +0 -137
  140. package/dist/commands/apply-agent-installs.js.map +0 -1
  141. package/templates/agents/claude/commands/grounder-task-handoff.md +0 -58
  142. package/templates/agents/claude/commands/grounder-task.md +0 -22
  143. package/templates/agents/cursor/commands/grounder-task-handoff.md +0 -58
  144. package/templates/agents/cursor/commands/grounder-task.md +0 -22
@@ -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
- * - `modified` — on-disk content differs from last Grounder write; left alone
5
- * unless `--force`
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" | "modified";
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
- * Bump when `install()` output's contract changes (placeholders, file set,
25
- * frontmatter). Recorded in `~/.grounder/state.json`.
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
- readonly commandsSchema: number;
49
+ desiredArtifacts(homeDir?: string, options?: {
50
+ invocation?: string;
51
+ }): Promise<Record<string, string>>;
28
52
  /**
29
- * Bump when `installHooks()` output's contract changes. Omit when the
30
- * adapter has no hooks. Recorded in `~/.grounder/state.json`.
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;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,CAAC;AAEhF,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;;;OAGG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,2EAA2E;IAC3E,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,6EAA6E;IAC7E,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9C,oEAAoE;IACpE,OAAO,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAChE,6EAA6E;IAC7E,YAAY,CAAC,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACtE,0EAA0E;IAC1E,qBAAqB,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACpD"}
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":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -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":"AAqCA,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAipBD,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"}
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"}