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,86 +1,123 @@
1
- /** Minimal adapter shape for forward-compat schema compares. */
2
- export interface AgentSchemaSupport {
3
- id: string;
4
- name: string;
5
- commandsSchema: number;
6
- hooksSchema?: number;
7
- }
8
- /** Per-file install record for chezmoi-style drift detection on command markdown. */
1
+ export { LEDGER_SCHEMA, MIN_SUPPORTED_LEDGER_SCHEMA } from "./ledger-migrations.js";
2
+ /** Per-file install record for chezmoi-style drift detection on managed markdown. */
9
3
  export interface AgentFileState {
10
4
  /** `sha256:…` of the exact bytes Grounder last wrote (see `hashContent`). */
11
- hash?: string;
5
+ hash: string;
12
6
  }
13
- export interface AgentState {
14
- commandsSchema: number;
15
- hooksSchema?: number;
7
+ export interface AgentLedgerEntry {
16
8
  files: Record<string, AgentFileState>;
9
+ /**
10
+ * Tri-state, deliberately not a plain boolean: `undefined` = never recorded
11
+ * (legacy ledger, or hooks never touched), `true` = on, `false` =
12
+ * explicitly turned off via `--no-hooks`. Collapsing "never recorded" into
13
+ * `false` would make setup/migrate's disk-recognizer hydration silently
14
+ * flip a user's `--no-hooks` opt-out back on.
15
+ */
16
+ hooksEnabled?: boolean;
17
+ /**
18
+ * The exact `{{GROUNDER_CLI}}` substitution (`runtimeInvocation()`) used the
19
+ * last time `setup`/`migrate` actually wrote this agent's files. Lets the
20
+ * cheap drift check (`installDriftDetected`) re-render "desired" content
21
+ * with the *same* invocation baked in last time, instead of the checking
22
+ * process's own `process.execPath` — see
23
+ * docs/architecture/runtime-invocation.md's "Repair loop" section for why
24
+ * that distinction matters. `undefined` for a ledger predating this field;
25
+ * self-heals on the next real `setup`/`migrate`.
26
+ */
27
+ lastInvocation?: string;
17
28
  }
18
29
  export interface GrounderState {
30
+ /** `state.json`'s own file-format version — forward-compat for the ledger shape itself. */
31
+ ledgerSchema: number;
19
32
  /** Package version that last wrote install artifacts (via setup / migrate). */
20
33
  grounderVersion: string;
21
- agents: Record<string, AgentState>;
34
+ agents: Record<string, AgentLedgerEntry>;
22
35
  }
23
36
  export declare function statePath(homeDir?: string): string;
24
37
  /**
25
38
  * Read `~/.grounder/state.json`. Missing file → `null` (legacy / pre-ledger
26
- * install callers should treat missing agent entries as schema 0).
39
+ * install). A `ledgerSchema` older than current (only v0.5.0's real shape
40
+ * `commandsSchema`/`hooksSchema`, no `ledgerSchema` field — has ever existed
41
+ * on disk) is upgraded to the current shape in memory only; disk is untouched
42
+ * until a real ledger write (`setup`/`migrate`/`setLedgerFileHash`/etc).
43
+ * `status`, `doctor`, and `handoff peek` must never write `state.json` as a
44
+ * side effect of reading it.
45
+ *
46
+ * The gate runs immediately after `JSON.parse`, ahead of the
47
+ * `grounderVersion`/`agents` validation below: a schema-2 file that
48
+ * restructures `agents` must report "upgrade grounder", not "missing
49
+ * agents — fix or remove it".
27
50
  */
28
51
  export declare function readGrounderState(homeDir?: string): Promise<GrounderState | null>;
52
+ /** Atomic write — tmp file + rename, so a crash mid-write never leaves a truncated ledger. */
29
53
  export declare function writeGrounderState(state: GrounderState, homeDir?: string): Promise<void>;
30
- /** Recorded commands schema for an agent, or `0` when missing (legacy). */
31
- export declare function recordedCommandsSchema(state: GrounderState | null, agentId: string): number;
32
- /** Hooks version stored for an agent, or `0` if missing (never stored / never installed). */
33
- export declare function recordedHooksSchema(state: GrounderState | null, agentId: string): number;
34
- export interface RecordAgentInstallOptions {
54
+ /** Last-recorded content hash for a managed file, or `undefined` if unknown. */
55
+ export declare function recordedFileHash(state: GrounderState | null, agentId: string, filePath: string): string | undefined;
56
+ /** One agent's last-applied manifest, or `undefined` when this agent has no ledger entry at all. */
57
+ export declare function ledgerFilesFor(state: GrounderState | null, agentId: string): Record<string, AgentFileState> | undefined;
58
+ /** Tri-state hooks intent for an agent: `undefined` (never recorded) / `true` / `false`. */
59
+ export declare function recordedHooksEnabled(state: GrounderState | null, agentId: string): boolean | undefined;
60
+ /** The `{{GROUNDER_CLI}}` invocation used at this agent's last real install, or `undefined`. */
61
+ export declare function recordedInvocation(state: GrounderState | null, agentId: string): string | undefined;
62
+ /**
63
+ * Persist one file's hash for one agent, right after that file's own write
64
+ * succeeds — per-artifact, not batched, so a mid-run crash leaves the ledger
65
+ * consistent with whatever actually completed. No-op if already current.
66
+ */
67
+ export declare function setLedgerFileHash(opts: {
35
68
  agentId: string;
36
- /**
37
- * When set, updates the commands version in state; when omitted, keeps the
38
- * existing value (or `0` for a new agent). Omit when every command file was
39
- * skipped as locally edited or from an old install, so state does not look
40
- * up to date when the files were not updated.
41
- */
42
- commandsSchema?: number;
43
- /** When set, updates the hooks version; when omitted, keeps any existing value. */
44
- hooksSchema?: number;
45
- /**
46
- * Merge into the agent's `files` map (absolute path → state). Omitting leaves
47
- * existing entries alone; pass `{}` is a no-op merge.
48
- */
49
- files?: Record<string, AgentFileState>;
69
+ filePath: string;
70
+ hash: string;
50
71
  grounderVersion: string;
51
72
  homeDir?: string;
52
- }
73
+ }): Promise<void>;
53
74
  /**
54
- * Merge one agent's install info into `~/.grounder/state.json`. Creates the
55
- * file when missing. Keeps other agents and merges any provided `files` over
56
- * this agent's existing map.
75
+ * Drop one path's ledger entry for a file deleted outright (tombstone
76
+ * retirement), where there is no new hash to overwrite it with. No-op when
77
+ * there's no state, no such agent, or no recorded entry for that path.
57
78
  */
58
- export declare function recordAgentInstall(opts: RecordAgentInstallOptions): Promise<GrounderState>;
79
+ export declare function forgetLedgerFile(opts: {
80
+ agentId: string;
81
+ filePath: string;
82
+ grounderVersion: string;
83
+ homeDir?: string;
84
+ }): Promise<void>;
85
+ /** Persist an agent's hooks intent (tri-state). Setup/migrate only — never called from doctor. */
86
+ export declare function setHooksEnabled(opts: {
87
+ agentId: string;
88
+ enabled: boolean;
89
+ grounderVersion: string;
90
+ homeDir?: string;
91
+ }): Promise<void>;
59
92
  /**
60
- * True when `state.json` says this machine's install is behind what this
61
- * Grounder version expects. Used by peek/status they only read `state.json`,
62
- * they do not look at Cursor/Claude files on disk.
63
- *
64
- * If there is no state file, returns false (callers handle that separately).
65
- * Only agents listed in state are checked.
66
- *
67
- * Session hooks: if an agent has no `hooksSchema` in state, that means hooks
68
- * were never turned on for them. That is not "behind" — otherwise peek would
69
- * keep telling people who never enabled hooks to run migrate. Doctor verifies
70
- * on-disk command/hook drift via migrate dry-run, and also warns when files
71
- * already match but these ledger schema numbers still lag.
93
+ * Persist the exact invocation used for this agent's just-completed real
94
+ * install, so the cheap drift check can replay it later instead of the
95
+ * checking process's own `process.execPath`. No-op if already current.
72
96
  */
73
- export declare function isInstallSchemaStale(state: GrounderState | null, agents: ReadonlyArray<AgentSchemaSupport>): boolean;
97
+ export declare function setLedgerInvocation(opts: {
98
+ agentId: string;
99
+ invocation: string;
100
+ grounderVersion: string;
101
+ homeDir?: string;
102
+ }): Promise<void>;
74
103
  /**
75
- * True when state says hooks are newer than this Grounder understands.
76
- * No stored hooks version is not "newer".
104
+ * Shared by `touchGrounderVersion`'s own no-op guard and `migrate`/`setup`'s
105
+ * reported "did the ledger change" row, so the two can't independently drift
106
+ * on the same comparison.
77
107
  */
78
- export declare function isHooksSchemaAhead(recorded: number | undefined, expected: number | undefined): boolean;
79
- /** Last-recorded content hash for a managed file, or `undefined` if unknown. */
80
- export declare function recordedFileHash(state: GrounderState | null, agentId: string, filePath: string): string | undefined;
108
+ export declare function ledgerVersionChanged(existing: GrounderState | null, grounderVersion: string): boolean;
109
+ /**
110
+ * Stamp `grounderVersion` unconditionally the hook for an all-noop plan
111
+ * (nothing else in a per-artifact write loop touches it when every entry was
112
+ * `noop`), so the upgrade banner still clears on a fully-current machine.
113
+ */
114
+ export declare function touchGrounderVersion(grounderVersion: string, homeDir?: string): Promise<void>;
81
115
  /**
82
- * Hard stop when `state.json` has install versions newer than this Grounder
83
- * understands. Missing state or unknown agents are fine (older installs).
116
+ * Write-path-only hard stop (gap 2): an older binary reconciling a ledger
117
+ * written by a newer one must refuse to write, not silently overwrite newer
118
+ * skill files with older ones. Never called from `doctor`/`status`/`peek` —
119
+ * those keep today's warning and stay fully functional against a newer
120
+ * ledger (see `package-version-notice.ts`'s `"behind"` branch).
84
121
  */
85
- export declare function assertAgentSchemasSupported(state: GrounderState | null, agents: ReadonlyArray<AgentSchemaSupport>): void;
122
+ export declare function assertVersionSupportsWrite(runningVersion: string, state: GrounderState | null): void;
86
123
  //# sourceMappingURL=state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/connector/state.ts"],"names":[],"mappings":"AAMA,gEAAgE;AAChE,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qFAAqF;AACrF,MAAM,WAAW,cAAc;IAC7B,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,aAAa;IAC5B,+EAA+E;IAC/E,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACpC;AAED,wBAAgB,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAuDvF;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9F;AAED,2EAA2E;AAC3E,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3F;AAED,6FAA6F;AAC7F,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAExF;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mFAAmF;IACnF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACvC,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,aAAa,CAAC,CA0BhG;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,GAAG,IAAI,EAC3B,MAAM,EAAE,aAAa,CAAC,kBAAkB,CAAC,GACxC,OAAO,CAsBT;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAKT;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,aAAa,GAAG,IAAI,EAC3B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,SAAS,CAEpB;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,aAAa,GAAG,IAAI,EAC3B,MAAM,EAAE,aAAa,CAAC,kBAAkB,CAAC,GACxC,IAAI,CA2BN"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/connector/state.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,27 @@
1
- import { mkdir, readFile, writeFile } from "node:fs/promises";
1
+ import { readFile } from "node:fs/promises";
2
2
  import path from "node:path";
3
- import { fileExists } from "../util/fs.js";
3
+ import { fileExists, writeFileAtomic } from "../util/fs.js";
4
+ import { packageVersionRelation } from "../util/semver.js";
4
5
  import { resolveHomeDir } from "./home.js";
6
+ import { applyLedgerUpgrades, LEDGER_SCHEMA, MIN_SUPPORTED_LEDGER_SCHEMA, } from "./ledger-migrations.js";
5
7
  import { UnsupportedSchemaError } from "./unsupported-schema.js";
8
+ export { LEDGER_SCHEMA, MIN_SUPPORTED_LEDGER_SCHEMA } from "./ledger-migrations.js";
6
9
  export function statePath(homeDir) {
7
10
  return path.join(resolveHomeDir(homeDir), ".grounder", "state.json");
8
11
  }
9
12
  /**
10
13
  * Read `~/.grounder/state.json`. Missing file → `null` (legacy / pre-ledger
11
- * install callers should treat missing agent entries as schema 0).
14
+ * install). A `ledgerSchema` older than current (only v0.5.0's real shape
15
+ * `commandsSchema`/`hooksSchema`, no `ledgerSchema` field — has ever existed
16
+ * on disk) is upgraded to the current shape in memory only; disk is untouched
17
+ * until a real ledger write (`setup`/`migrate`/`setLedgerFileHash`/etc).
18
+ * `status`, `doctor`, and `handoff peek` must never write `state.json` as a
19
+ * side effect of reading it.
20
+ *
21
+ * The gate runs immediately after `JSON.parse`, ahead of the
22
+ * `grounderVersion`/`agents` validation below: a schema-2 file that
23
+ * restructures `agents` must report "upgrade grounder", not "missing
24
+ * agents — fix or remove it".
12
25
  */
13
26
  export async function readGrounderState(homeDir) {
14
27
  const filePath = statePath(homeDir);
@@ -23,149 +36,194 @@ export async function readGrounderState(homeDir) {
23
36
  const detail = error instanceof Error ? error.message : String(error);
24
37
  throw new Error(`Invalid grounder state at ${filePath}: ${detail}. Fix or remove it, then run: grounder migrate --force`);
25
38
  }
26
- if (typeof raw.grounderVersion !== "string" || raw.grounderVersion.length === 0) {
39
+ if (raw === null || typeof raw !== "object" || Array.isArray(raw)) {
40
+ // Same "missing grounderVersion" message a non-object payload already
41
+ // gets further down (`raw.grounderVersion` on a boxed number/string
42
+ // reads as `undefined`, not a throw) — `null` is the one JSON value
43
+ // whose property access throws before reaching that check, so it's
44
+ // guarded here explicitly rather than falling through.
45
+ throw new Error(`Invalid grounder state at ${filePath}: missing grounderVersion. Fix or remove it, then run: grounder migrate --force`);
46
+ }
47
+ let ledgerSchema;
48
+ if (raw.ledgerSchema === undefined) {
49
+ ledgerSchema = 0;
50
+ }
51
+ else if (typeof raw.ledgerSchema === "number" && Number.isInteger(raw.ledgerSchema)) {
52
+ ledgerSchema = raw.ledgerSchema;
53
+ }
54
+ else {
55
+ // Deliberate tightening, not preserved behavior: previously a non-number
56
+ // silently became `0`.
57
+ throw new Error(`Invalid grounder state at ${filePath}: ledgerSchema must be an integer. Fix or remove it, then run: grounder migrate --force`);
58
+ }
59
+ if (ledgerSchema > LEDGER_SCHEMA) {
60
+ throw new UnsupportedSchemaError(`${filePath} requires ledger schema ${ledgerSchema}; this grounder supports ${LEDGER_SCHEMA}. Upgrade grounder.`);
61
+ }
62
+ if (ledgerSchema < MIN_SUPPORTED_LEDGER_SCHEMA) {
63
+ throw new Error(`Invalid grounder state at ${filePath}: ledger schema ${ledgerSchema} is older than this grounder supports (minimum ${MIN_SUPPORTED_LEDGER_SCHEMA}). Fix or remove it, then run: grounder migrate --force`);
64
+ }
65
+ const upgraded = applyLedgerUpgrades(raw, ledgerSchema);
66
+ if (typeof upgraded.grounderVersion !== "string" || upgraded.grounderVersion.length === 0) {
27
67
  throw new Error(`Invalid grounder state at ${filePath}: missing grounderVersion. Fix or remove it, then run: grounder migrate --force`);
28
68
  }
29
- if (raw.agents === null || typeof raw.agents !== "object" || Array.isArray(raw.agents)) {
69
+ if (upgraded.agents === null ||
70
+ typeof upgraded.agents !== "object" ||
71
+ Array.isArray(upgraded.agents)) {
30
72
  throw new Error(`Invalid grounder state at ${filePath}: missing agents`);
31
73
  }
74
+ // Explicit field-by-field construction (not a spread of `upgraded`'s agent
75
+ // entries) so an upgraded-but-unknown key can never round-trip back to disk
76
+ // through `withUpdatedAgent`'s `...existing.agents` spread.
32
77
  const agents = {};
33
- for (const [id, entry] of Object.entries(raw.agents)) {
78
+ for (const [id, entry] of Object.entries(upgraded.agents)) {
34
79
  if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
35
80
  throw new Error(`Invalid grounder state at ${filePath}: bad agent entry "${id}"`);
36
81
  }
37
- const commandsSchema = entry.commandsSchema;
38
- if (typeof commandsSchema !== "number" || !Number.isInteger(commandsSchema)) {
39
- throw new Error(`Invalid grounder state at ${filePath}: agent "${id}" missing commandsSchema`);
82
+ const e = entry;
83
+ const filesRaw = e.files;
84
+ // Drop, rather than cast through, any file entry whose `hash` isn't a
85
+ // string — a corrupted or hand-edited `{ hash: 123 }` / `{}` entry would
86
+ // otherwise persist forever via `withUpdatedAgent`'s `...prev.files`
87
+ // spread and compare unequal to every real hash anyway.
88
+ const files = {};
89
+ if (filesRaw && typeof filesRaw === "object" && !Array.isArray(filesRaw)) {
90
+ for (const [entryPath, fileEntry] of Object.entries(filesRaw)) {
91
+ const hash = fileEntry?.hash;
92
+ if (typeof hash === "string") {
93
+ files[entryPath] = { hash };
94
+ }
95
+ }
40
96
  }
41
- const hooksSchema = entry.hooksSchema;
42
- if (hooksSchema !== undefined &&
43
- (typeof hooksSchema !== "number" || !Number.isInteger(hooksSchema))) {
44
- throw new Error(`Invalid grounder state at ${filePath}: agent "${id}" has invalid hooksSchema`);
45
- }
46
- const filesRaw = entry.files;
47
- const files = filesRaw && typeof filesRaw === "object" && !Array.isArray(filesRaw) ? { ...filesRaw } : {};
97
+ const hooksEnabled = typeof e.hooksEnabled === "boolean" ? e.hooksEnabled : undefined;
98
+ // Empty string treated as missing, not as a real (empty) override a
99
+ // hand-edited `"lastInvocation": ""` would otherwise pass `?? ` in
100
+ // `desiredArtifacts()`'s override check and render with no interpreter
101
+ // baked in at all.
102
+ const lastInvocation = typeof e.lastInvocation === "string" && e.lastInvocation.length > 0
103
+ ? e.lastInvocation
104
+ : undefined;
48
105
  agents[id] = {
49
- commandsSchema,
50
- ...(hooksSchema !== undefined ? { hooksSchema } : {}),
51
106
  files,
107
+ ...(hooksEnabled !== undefined ? { hooksEnabled } : {}),
108
+ ...(lastInvocation !== undefined ? { lastInvocation } : {}),
52
109
  };
53
110
  }
54
- return { grounderVersion: raw.grounderVersion, agents };
111
+ return { ledgerSchema: LEDGER_SCHEMA, grounderVersion: upgraded.grounderVersion, agents };
55
112
  }
113
+ /** Atomic write — tmp file + rename, so a crash mid-write never leaves a truncated ledger. */
56
114
  export async function writeGrounderState(state, homeDir) {
57
- const filePath = statePath(homeDir);
58
- await mkdir(path.dirname(filePath), { recursive: true });
59
- await writeFile(filePath, `${JSON.stringify(state, null, 2)}\n`, "utf8");
115
+ await writeFileAtomic(statePath(homeDir), `${JSON.stringify(state, null, 2)}\n`);
60
116
  }
61
- /** Recorded commands schema for an agent, or `0` when missing (legacy). */
62
- export function recordedCommandsSchema(state, agentId) {
63
- return state?.agents[agentId]?.commandsSchema ?? 0;
117
+ /** Last-recorded content hash for a managed file, or `undefined` if unknown. */
118
+ export function recordedFileHash(state, agentId, filePath) {
119
+ return state?.agents[agentId]?.files[filePath]?.hash;
64
120
  }
65
- /** Hooks version stored for an agent, or `0` if missing (never stored / never installed). */
66
- export function recordedHooksSchema(state, agentId) {
67
- return state?.agents[agentId]?.hooksSchema ?? 0;
121
+ /** One agent's last-applied manifest, or `undefined` when this agent has no ledger entry at all. */
122
+ export function ledgerFilesFor(state, agentId) {
123
+ return state?.agents[agentId]?.files;
68
124
  }
69
- /**
70
- * Merge one agent's install info into `~/.grounder/state.json`. Creates the
71
- * file when missing. Keeps other agents and merges any provided `files` over
72
- * this agent's existing map.
73
- */
74
- export async function recordAgentInstall(opts) {
75
- const existing = await readGrounderState(opts.homeDir);
76
- const prev = existing?.agents[opts.agentId];
77
- const nextEntry = {
78
- commandsSchema: opts.commandsSchema !== undefined ? opts.commandsSchema : (prev?.commandsSchema ?? 0),
79
- files: {
80
- ...(prev?.files ? { ...prev.files } : {}),
81
- ...(opts.files ?? {}),
82
- },
83
- };
84
- if (opts.hooksSchema !== undefined) {
85
- nextEntry.hooksSchema = opts.hooksSchema;
86
- }
87
- else if (prev?.hooksSchema !== undefined) {
88
- nextEntry.hooksSchema = prev.hooksSchema;
89
- }
90
- const next = {
91
- grounderVersion: opts.grounderVersion,
125
+ /** Tri-state hooks intent for an agent: `undefined` (never recorded) / `true` / `false`. */
126
+ export function recordedHooksEnabled(state, agentId) {
127
+ return state?.agents[agentId]?.hooksEnabled;
128
+ }
129
+ /** The `{{GROUNDER_CLI}}` invocation used at this agent's last real install, or `undefined`. */
130
+ export function recordedInvocation(state, agentId) {
131
+ return state?.agents[agentId]?.lastInvocation;
132
+ }
133
+ function withUpdatedAgent(existing, agentId, updateEntry, grounderVersion) {
134
+ const prevAgent = existing?.agents[agentId] ?? { files: {} };
135
+ return {
136
+ ledgerSchema: LEDGER_SCHEMA,
137
+ grounderVersion,
92
138
  agents: {
93
139
  ...(existing?.agents ?? {}),
94
- [opts.agentId]: nextEntry,
140
+ [agentId]: updateEntry(prevAgent),
95
141
  },
96
142
  };
143
+ }
144
+ /**
145
+ * Persist one file's hash for one agent, right after that file's own write
146
+ * succeeds — per-artifact, not batched, so a mid-run crash leaves the ledger
147
+ * consistent with whatever actually completed. No-op if already current.
148
+ */
149
+ export async function setLedgerFileHash(opts) {
150
+ const existing = await readGrounderState(opts.homeDir);
151
+ if (existing?.agents[opts.agentId]?.files[opts.filePath]?.hash === opts.hash) {
152
+ return;
153
+ }
154
+ const next = withUpdatedAgent(existing, opts.agentId, (prev) => ({ ...prev, files: { ...prev.files, [opts.filePath]: { hash: opts.hash } } }), opts.grounderVersion);
97
155
  await writeGrounderState(next, opts.homeDir);
98
- return next;
99
156
  }
100
157
  /**
101
- * True when `state.json` says this machine's install is behind what this
102
- * Grounder version expects. Used by peek/status they only read `state.json`,
103
- * they do not look at Cursor/Claude files on disk.
104
- *
105
- * If there is no state file, returns false (callers handle that separately).
106
- * Only agents listed in state are checked.
107
- *
108
- * Session hooks: if an agent has no `hooksSchema` in state, that means hooks
109
- * were never turned on for them. That is not "behind" — otherwise peek would
110
- * keep telling people who never enabled hooks to run migrate. Doctor verifies
111
- * on-disk command/hook drift via migrate dry-run, and also warns when files
112
- * already match but these ledger schema numbers still lag.
158
+ * Drop one path's ledger entry for a file deleted outright (tombstone
159
+ * retirement), where there is no new hash to overwrite it with. No-op when
160
+ * there's no state, no such agent, or no recorded entry for that path.
113
161
  */
114
- export function isInstallSchemaStale(state, agents) {
115
- if (!state) {
116
- return false;
162
+ export async function forgetLedgerFile(opts) {
163
+ const existing = await readGrounderState(opts.homeDir);
164
+ const prevAgent = existing?.agents[opts.agentId];
165
+ if (!existing || !prevAgent || !(opts.filePath in prevAgent.files)) {
166
+ return;
117
167
  }
118
- for (const agent of agents) {
119
- const entry = state.agents[agent.id];
120
- if (!entry) {
121
- continue;
122
- }
123
- if (entry.commandsSchema < agent.commandsSchema) {
124
- return true;
125
- }
126
- if (agent.hooksSchema !== undefined &&
127
- entry.hooksSchema !== undefined &&
128
- entry.hooksSchema < agent.hooksSchema) {
129
- return true;
130
- }
168
+ const files = Object.fromEntries(Object.entries(prevAgent.files).filter(([p]) => p !== opts.filePath));
169
+ const next = withUpdatedAgent(existing, opts.agentId, (prev) => ({ ...prev, files }), opts.grounderVersion);
170
+ await writeGrounderState(next, opts.homeDir);
171
+ }
172
+ /** Persist an agent's hooks intent (tri-state). Setup/migrate only — never called from doctor. */
173
+ export async function setHooksEnabled(opts) {
174
+ const existing = await readGrounderState(opts.homeDir);
175
+ if (existing?.agents[opts.agentId]?.hooksEnabled === opts.enabled) {
176
+ return;
131
177
  }
132
- return false;
178
+ const next = withUpdatedAgent(existing, opts.agentId, (prev) => ({ ...prev, hooksEnabled: opts.enabled }), opts.grounderVersion);
179
+ await writeGrounderState(next, opts.homeDir);
133
180
  }
134
181
  /**
135
- * True when state says hooks are newer than this Grounder understands.
136
- * No stored hooks version is not "newer".
182
+ * Persist the exact invocation used for this agent's just-completed real
183
+ * install, so the cheap drift check can replay it later instead of the
184
+ * checking process's own `process.execPath`. No-op if already current.
137
185
  */
138
- export function isHooksSchemaAhead(recorded, expected) {
139
- if (expected === undefined || recorded === undefined) {
140
- return false;
186
+ export async function setLedgerInvocation(opts) {
187
+ const existing = await readGrounderState(opts.homeDir);
188
+ if (existing?.agents[opts.agentId]?.lastInvocation === opts.invocation) {
189
+ return;
141
190
  }
142
- return recorded > expected;
191
+ const next = withUpdatedAgent(existing, opts.agentId, (prev) => ({ ...prev, lastInvocation: opts.invocation }), opts.grounderVersion);
192
+ await writeGrounderState(next, opts.homeDir);
143
193
  }
144
- /** Last-recorded content hash for a managed file, or `undefined` if unknown. */
145
- export function recordedFileHash(state, agentId, filePath) {
146
- return state?.agents[agentId]?.files[filePath]?.hash;
194
+ /**
195
+ * Shared by `touchGrounderVersion`'s own no-op guard and `migrate`/`setup`'s
196
+ * reported "did the ledger change" row, so the two can't independently drift
197
+ * on the same comparison.
198
+ */
199
+ export function ledgerVersionChanged(existing, grounderVersion) {
200
+ return existing?.grounderVersion !== grounderVersion;
201
+ }
202
+ /**
203
+ * Stamp `grounderVersion` unconditionally — the hook for an all-noop plan
204
+ * (nothing else in a per-artifact write loop touches it when every entry was
205
+ * `noop`), so the upgrade banner still clears on a fully-current machine.
206
+ */
207
+ export async function touchGrounderVersion(grounderVersion, homeDir) {
208
+ const existing = await readGrounderState(homeDir);
209
+ if (!ledgerVersionChanged(existing, grounderVersion)) {
210
+ return;
211
+ }
212
+ await writeGrounderState({ ledgerSchema: LEDGER_SCHEMA, grounderVersion, agents: existing?.agents ?? {} }, homeDir);
147
213
  }
148
214
  /**
149
- * Hard stop when `state.json` has install versions newer than this Grounder
150
- * understands. Missing state or unknown agents are fine (older installs).
215
+ * Write-path-only hard stop (gap 2): an older binary reconciling a ledger
216
+ * written by a newer one must refuse to write, not silently overwrite newer
217
+ * skill files with older ones. Never called from `doctor`/`status`/`peek` —
218
+ * those keep today's warning and stay fully functional against a newer
219
+ * ledger (see `package-version-notice.ts`'s `"behind"` branch).
151
220
  */
152
- export function assertAgentSchemasSupported(state, agents) {
221
+ export function assertVersionSupportsWrite(runningVersion, state) {
153
222
  if (!state) {
154
223
  return;
155
224
  }
156
- for (const agent of agents) {
157
- const recorded = state.agents[agent.id];
158
- if (!recorded) {
159
- continue;
160
- }
161
- if (recorded.commandsSchema > agent.commandsSchema) {
162
- throw new UnsupportedSchemaError(`${agent.name} commands schema ${recorded.commandsSchema} is newer than this grounder supports (${agent.commandsSchema}). Upgrade grounder.`);
163
- }
164
- if (recorded.hooksSchema !== undefined &&
165
- agent.hooksSchema !== undefined &&
166
- recorded.hooksSchema > agent.hooksSchema) {
167
- throw new UnsupportedSchemaError(`${agent.name} hooks schema ${recorded.hooksSchema} is newer than this grounder supports (${agent.hooksSchema}). Upgrade grounder.`);
168
- }
225
+ if (packageVersionRelation(runningVersion, state.grounderVersion) === "behind") {
226
+ throw new UnsupportedSchemaError(`This Grounder (${runningVersion}) is older than your configuration (${state.grounderVersion}). Install a newer Grounder.`);
169
227
  }
170
228
  }
171
229
  //# sourceMappingURL=state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/connector/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/connector/state.ts"],"names":[],"mappings":"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"}
package/dist/help.d.ts CHANGED
@@ -24,7 +24,7 @@ export declare const COMMANDS: readonly CommandMeta[];
24
24
  * Command ids the CLI dispatches (including parent topics). Keep in sync with
25
25
  * `cli.ts` / `helpExitCode(...)` call sites — the invariant test locks this.
26
26
  */
27
- export declare const DISPATCHED_COMMAND_IDS: readonly ["setup", "link", "note", "note list", "handoff", "handoff list", "handoff peek", "plan", "plan list", "search", "path", "path notes", "path logs", "path plans", "status", "doctor", "migrate", "help"];
27
+ export declare const DISPATCHED_COMMAND_IDS: readonly ["setup", "link", "note", "note list", "handoff", "handoff list", "handoff peek", "plan", "plan list", "search", "overview", "path", "path notes", "path logs", "path plans", "status", "doctor", "migrate", "help"];
28
28
  /** True when argv contains an exact `-h` or `--help` token. */
29
29
  export declare function wantsHelp(argv: string[]): boolean;
30
30
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAE5D,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;AAE3F,MAAM,WAAW,WAAW;IAC1B,yDAAyD;IACzD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAaD;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,SAAS,WAAW,EAqN1C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,mNAmBzB,CAAC;AAIX,+DAA+D;AAC/D,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAEjD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,WAAW,GAAG,SAAS,CAY9E;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CASxD;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAMrD;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM7E;AAkDD,8EAA8E;AAC9E,wBAAgB,aAAa,IAAI,IAAI,CAepC;AAED,sFAAsF;AACtF,wBAAgB,aAAa,IAAI,IAAI,CAepC;AAED,2DAA2D;AAC3D,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAe9C"}
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAE5D,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;AAE3F,MAAM,WAAW,WAAW;IAC1B,yDAAyD;IACzD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAaD;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,SAAS,WAAW,EA0O1C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,+NAoBzB,CAAC;AAIX,+DAA+D;AAC/D,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAEjD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,WAAW,GAAG,SAAS,CAY9E;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CASxD;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAMrD;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM7E;AAkDD,8EAA8E;AAC9E,wBAAgB,aAAa,IAAI,IAAI,CAepC;AAED,sFAAsF;AACtF,wBAAgB,aAAa,IAAI,IAAI,CAepC;AAED,2DAA2D;AAC3D,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAe9C"}