grounder 0.4.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 (221) hide show
  1. package/README.md +150 -271
  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 -178
  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 -143
  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 +80 -13
  23. package/dist/agents/hook-runtime.d.ts.map +1 -1
  24. package/dist/agents/hook-runtime.js +278 -74
  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 +15 -10
  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 +197 -101
  40. package/dist/commands/doctor.js.map +1 -1
  41. package/dist/commands/handoff/list.d.ts +23 -13
  42. package/dist/commands/handoff/list.d.ts.map +1 -1
  43. package/dist/commands/handoff/list.js +28 -16
  44. package/dist/commands/handoff/list.js.map +1 -1
  45. package/dist/commands/handoff/peek.d.ts +1 -1
  46. package/dist/commands/handoff/peek.d.ts.map +1 -1
  47. package/dist/commands/handoff/peek.js +28 -12
  48. package/dist/commands/handoff/peek.js.map +1 -1
  49. package/dist/commands/handoff.d.ts +2 -0
  50. package/dist/commands/handoff.d.ts.map +1 -1
  51. package/dist/commands/handoff.js +10 -1
  52. package/dist/commands/handoff.js.map +1 -1
  53. package/dist/commands/install-drift.d.ts +34 -0
  54. package/dist/commands/install-drift.d.ts.map +1 -0
  55. package/dist/commands/install-drift.js +72 -0
  56. package/dist/commands/install-drift.js.map +1 -0
  57. package/dist/commands/link.d.ts +12 -0
  58. package/dist/commands/link.d.ts.map +1 -0
  59. package/dist/commands/{repo/init.js → link.js} +35 -27
  60. package/dist/commands/link.js.map +1 -0
  61. package/dist/commands/migrate.d.ts +11 -3
  62. package/dist/commands/migrate.d.ts.map +1 -1
  63. package/dist/commands/migrate.js +66 -34
  64. package/dist/commands/migrate.js.map +1 -1
  65. package/dist/commands/note/list.d.ts +17 -9
  66. package/dist/commands/note/list.d.ts.map +1 -1
  67. package/dist/commands/note/list.js +19 -14
  68. package/dist/commands/note/list.js.map +1 -1
  69. package/dist/commands/note.d.ts +2 -0
  70. package/dist/commands/note.d.ts.map +1 -1
  71. package/dist/commands/note.js +10 -1
  72. package/dist/commands/note.js.map +1 -1
  73. package/dist/commands/output.d.ts +22 -2
  74. package/dist/commands/output.d.ts.map +1 -1
  75. package/dist/commands/output.js +18 -6
  76. package/dist/commands/output.js.map +1 -1
  77. package/dist/commands/overview.d.ts +33 -0
  78. package/dist/commands/overview.d.ts.map +1 -0
  79. package/dist/commands/overview.js +150 -0
  80. package/dist/commands/overview.js.map +1 -0
  81. package/dist/commands/plan/list.d.ts +20 -12
  82. package/dist/commands/plan/list.d.ts.map +1 -1
  83. package/dist/commands/plan/list.js +22 -17
  84. package/dist/commands/plan/list.js.map +1 -1
  85. package/dist/commands/plan.d.ts +2 -0
  86. package/dist/commands/plan.d.ts.map +1 -1
  87. package/dist/commands/plan.js +12 -2
  88. package/dist/commands/plan.js.map +1 -1
  89. package/dist/commands/render-artifact-table.d.ts +85 -0
  90. package/dist/commands/render-artifact-table.d.ts.map +1 -0
  91. package/dist/commands/render-artifact-table.js +232 -0
  92. package/dist/commands/render-artifact-table.js.map +1 -0
  93. package/dist/commands/require-linked.js +2 -2
  94. package/dist/commands/require-linked.js.map +1 -1
  95. package/dist/commands/search.d.ts +23 -0
  96. package/dist/commands/search.d.ts.map +1 -0
  97. package/dist/commands/search.js +288 -0
  98. package/dist/commands/search.js.map +1 -0
  99. package/dist/commands/{vault/init.d.ts → setup.d.ts} +5 -4
  100. package/dist/commands/setup.d.ts.map +1 -0
  101. package/dist/commands/setup.js +210 -0
  102. package/dist/commands/setup.js.map +1 -0
  103. package/dist/commands/status.d.ts +7 -0
  104. package/dist/commands/status.d.ts.map +1 -1
  105. package/dist/commands/status.js +273 -83
  106. package/dist/commands/status.js.map +1 -1
  107. package/dist/commands/upgrade-banner.d.ts +2 -2
  108. package/dist/commands/upgrade-banner.js +2 -2
  109. package/dist/connector/home.d.ts +12 -0
  110. package/dist/connector/home.d.ts.map +1 -1
  111. package/dist/connector/home.js +26 -2
  112. package/dist/connector/home.js.map +1 -1
  113. package/dist/connector/ledger-migrations.d.ts +55 -0
  114. package/dist/connector/ledger-migrations.d.ts.map +1 -0
  115. package/dist/connector/ledger-migrations.js +94 -0
  116. package/dist/connector/ledger-migrations.js.map +1 -0
  117. package/dist/connector/state.d.ts +97 -60
  118. package/dist/connector/state.d.ts.map +1 -1
  119. package/dist/connector/state.js +165 -107
  120. package/dist/connector/state.js.map +1 -1
  121. package/dist/connector/vault.d.ts +2 -0
  122. package/dist/connector/vault.d.ts.map +1 -1
  123. package/dist/connector/vault.js +6 -1
  124. package/dist/connector/vault.js.map +1 -1
  125. package/dist/help.d.ts +3 -3
  126. package/dist/help.d.ts.map +1 -1
  127. package/dist/help.js +97 -56
  128. package/dist/help.js.map +1 -1
  129. package/dist/reconcile/apply.d.ts +31 -0
  130. package/dist/reconcile/apply.d.ts.map +1 -0
  131. package/dist/reconcile/apply.js +97 -0
  132. package/dist/reconcile/apply.js.map +1 -0
  133. package/dist/reconcile/core.d.ts +82 -0
  134. package/dist/reconcile/core.d.ts.map +1 -0
  135. package/dist/reconcile/core.js +163 -0
  136. package/dist/reconcile/core.js.map +1 -0
  137. package/dist/reconcile/disk.d.ts +13 -0
  138. package/dist/reconcile/disk.d.ts.map +1 -0
  139. package/dist/reconcile/disk.js +28 -0
  140. package/dist/reconcile/disk.js.map +1 -0
  141. package/dist/util/frontmatter.d.ts +9 -7
  142. package/dist/util/frontmatter.d.ts.map +1 -1
  143. package/dist/util/frontmatter.js +29 -4
  144. package/dist/util/frontmatter.js.map +1 -1
  145. package/dist/util/fs.d.ts +14 -0
  146. package/dist/util/fs.d.ts.map +1 -1
  147. package/dist/util/fs.js +27 -1
  148. package/dist/util/fs.js.map +1 -1
  149. package/dist/util/merge-json.d.ts +13 -2
  150. package/dist/util/merge-json.d.ts.map +1 -1
  151. package/dist/util/merge-json.js +24 -10
  152. package/dist/util/merge-json.js.map +1 -1
  153. package/dist/util/path.d.ts +23 -0
  154. package/dist/util/path.d.ts.map +1 -1
  155. package/dist/util/path.js +39 -0
  156. package/dist/util/path.js.map +1 -1
  157. package/dist/vault/list-handoffs.d.ts +14 -2
  158. package/dist/vault/list-handoffs.d.ts.map +1 -1
  159. package/dist/vault/list-handoffs.js +40 -23
  160. package/dist/vault/list-handoffs.js.map +1 -1
  161. package/dist/vault/list-markdown.d.ts +8 -0
  162. package/dist/vault/list-markdown.d.ts.map +1 -0
  163. package/dist/vault/list-markdown.js +35 -0
  164. package/dist/vault/list-markdown.js.map +1 -0
  165. package/dist/vault/list-notes.d.ts +15 -6
  166. package/dist/vault/list-notes.d.ts.map +1 -1
  167. package/dist/vault/list-notes.js +23 -27
  168. package/dist/vault/list-notes.js.map +1 -1
  169. package/dist/vault/list-plans.d.ts +12 -3
  170. package/dist/vault/list-plans.d.ts.map +1 -1
  171. package/dist/vault/list-plans.js +20 -24
  172. package/dist/vault/list-plans.js.map +1 -1
  173. package/dist/vault/search.d.ts +55 -0
  174. package/dist/vault/search.d.ts.map +1 -0
  175. package/dist/vault/search.js +432 -0
  176. package/dist/vault/search.js.map +1 -0
  177. package/dist/vault/write-handoff.d.ts +2 -0
  178. package/dist/vault/write-handoff.d.ts.map +1 -1
  179. package/dist/vault/write-handoff.js +5 -0
  180. package/dist/vault/write-handoff.js.map +1 -1
  181. package/dist/vault/write-note.d.ts +2 -0
  182. package/dist/vault/write-note.d.ts.map +1 -1
  183. package/dist/vault/write-note.js +9 -1
  184. package/dist/vault/write-note.js.map +1 -1
  185. package/dist/vault/write-plan.d.ts +4 -0
  186. package/dist/vault/write-plan.d.ts.map +1 -1
  187. package/dist/vault/write-plan.js +14 -1
  188. package/dist/vault/write-plan.js.map +1 -1
  189. package/package.json +11 -4
  190. package/templates/agents/claude/skills/grounder-handoff/SKILL.md +73 -0
  191. package/templates/agents/claude/{commands/grounder-note.md → skills/grounder-note/SKILL.md} +12 -2
  192. package/templates/agents/claude/skills/grounder-overview/SKILL.md +21 -0
  193. package/templates/agents/claude/{commands/grounder-plan.md → skills/grounder-plan/SKILL.md} +13 -5
  194. package/templates/agents/claude/skills/grounder-recall/SKILL.md +34 -0
  195. package/templates/agents/claude/skills/grounder-search/SKILL.md +152 -0
  196. package/templates/agents/cursor/skills/grounder-handoff/SKILL.md +73 -0
  197. package/templates/agents/cursor/{commands/grounder-note.md → skills/grounder-note/SKILL.md} +12 -2
  198. package/templates/agents/cursor/skills/grounder-overview/SKILL.md +21 -0
  199. package/templates/agents/cursor/{commands/grounder-plan.md → skills/grounder-plan/SKILL.md} +13 -5
  200. package/templates/agents/cursor/skills/grounder-recall/SKILL.md +34 -0
  201. package/templates/agents/cursor/skills/grounder-search/SKILL.md +152 -0
  202. package/templates/vault/plan.md +1 -1
  203. package/templates/vault/session-handoff.md +2 -1
  204. package/dist/agents/install-command.d.ts +0 -35
  205. package/dist/agents/install-command.d.ts.map +0 -1
  206. package/dist/agents/install-command.js +0 -65
  207. package/dist/agents/install-command.js.map +0 -1
  208. package/dist/commands/apply-agent-installs.d.ts +0 -34
  209. package/dist/commands/apply-agent-installs.d.ts.map +0 -1
  210. package/dist/commands/apply-agent-installs.js +0 -137
  211. package/dist/commands/apply-agent-installs.js.map +0 -1
  212. package/dist/commands/repo/init.d.ts +0 -11
  213. package/dist/commands/repo/init.d.ts.map +0 -1
  214. package/dist/commands/repo/init.js.map +0 -1
  215. package/dist/commands/vault/init.d.ts.map +0 -1
  216. package/dist/commands/vault/init.js +0 -90
  217. package/dist/commands/vault/init.js.map +0 -1
  218. package/templates/agents/claude/commands/grounder-task-handoff.md +0 -54
  219. package/templates/agents/claude/commands/grounder-task.md +0 -22
  220. package/templates/agents/cursor/commands/grounder-task-handoff.md +0 -54
  221. package/templates/agents/cursor/commands/grounder-task.md +0 -22
@@ -0,0 +1,152 @@
1
+ ---
2
+ name: grounder-search
3
+ description: Search this project's vault content for relevant context.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ Search this project's vault content for relevant context.
8
+
9
+ **Silence:** write **no assistant text** until step 3. Rounds 1–2 are tool calls with an empty/absent text part — not “I’ll search…”, not “I’ll read…”, not “**Analyzing…**”, not query/terms narration.
10
+
11
+ Use this when the user asks to find prior project-vault context by topic, keyword, concept, or phrase.
12
+
13
+ Scope is this linked project only — the CLI resolves and searches under the linked project vault root. Do not search outside it.
14
+
15
+ ## Turn budget (speed)
16
+
17
+ **Rounds 1–2: tool calls only — no text part in those messages.** Not even one sentence.
18
+
19
+ Exactly **two** assistant turns with tools, then the answer. Allowed tools, nothing else:
20
+
21
+ 1. Round 1 — Shell only: one `search … --json` (optional second search in the *same* round only per the broaden rule below). Message = that tool call, nothing else.
22
+ 2. Round 2 — Read only: **one** parallel batch of full-file reads (hits 1–4). Message = those Read calls, nothing else.
23
+ 3. Final answer to the user (first and only chat text).
24
+
25
+ **Do not** Glob, Grep, extra Shell, or status/UI tools (`UpdateCurrentStep`, `TodoWrite`, and similar). Do not add a third tool turn. Do not explore the repo.
26
+
27
+ ## Output contract (default — hybrid)
28
+
29
+ - Do not echo commands or shell output.
30
+ - **Never paste CLI JSON, snippets, or raw stdout into chat** — parse `--json` internally only.
31
+ - One final synthesized response only.
32
+
33
+ **Path links (mandatory for every listed file):**
34
+ - Visible title = `hits[].relativePath` from JSON **exactly** (project-vault-relative; the folder that contains `notes/`, `logs/`, and `plans/`). Example: `plans/archive/0.2.0 and older/doc.md`.
35
+ - **Do not** derive the title from `hits[].file`, path segments, or parent-vault prefixes.
36
+ - **Wrong titles:** `10-Projects/grounder/plans/…`, `%20` in the visible title, or any path above the project vault root.
37
+ - Link href = `hits[].fileUri` from JSON (spaces already percent-encoded).
38
+ - Markdown form: `[hits[i].relativePath](hits[i].fileUri)`
39
+
40
+ **Numbering (mandatory):**
41
+ - Number every listed file, continuing across sections (`1…` in **Read these**, then `5…` in **Also matched`).
42
+ - Do not restart at 1 in **Also matched**. Do not use bullet-only lists without numbers.
43
+
44
+ **Zero-hit disclosure (mandatory, both modes):** if `totalFileCount` is 0 (after the broaden attempt for topic/request), answer exactly `No matches in [<vaultRoot>](<vaultRootUri>) for this topic.` (`vaultRoot`/`vaultRootUri` from the JSON payload — the vault folder actually searched) instead of the Structure below.
45
+
46
+ Structure (non-empty results):
47
+
48
+ 1. **Opening** — one sentence of what the vault says (not a search recap). Never start with “I have searched…”, “I found…”, or similar.
49
+ 2. **Read these** — hits 1–4 only; numbered linked paths + optional role + short bullets under each. You may list a design/archive authority first *among those four*.
50
+ 3. **Also matched** — leftover top-10 **in CLI order** (do not reshuffle); numbered linked paths + one short phrase each. Use `hits[].alsoMatchedHint` — it is always present, even for a filename-only match with no `matches[]` line. `matches[].term` is a same-length alternative only when `matches[]` is non-empty. Every line must end with ` — phrase`; bare links are invalid. Omit if empty.
51
+
52
+ Example shape (`##` headings required — not bold-only, not `###`):
53
+
54
+ ```markdown
55
+ Vault notes discuss …
56
+
57
+ ## Read these
58
+ 1. [plans/archive/0.3.0/schema_….md](file:///…/schema_….md) — design authority
59
+ - …
60
+ 2. [plans/…](file:///…) — …
61
+ ## Also matched
62
+ 3. [plans/archive/0.2.0 and older/doc.md](file:///…/0.2.0%20and%20older/doc.md) — one phrase
63
+ 4. [plans/…](file:///…) — one phrase
64
+ ```
65
+
66
+ **Lookup mode:** explicit lookup wording (`exact phrase`, `this line`, `the wording`) **or** the entire input after stripping retrieval wrappers is a bare `"quoted span"` → one search with `--json` (no `--terms`, no full reads). Non-empty: list each hit as `[relativePath](fileUri)` (Path links rules) followed by its `matches[]` lines (`L{line} ({term}): {snippet}`), CLI order, no synthesis. A hit with an empty `matches[]` matched only by filename, not content — print `(matched by filename — no line to quote)` instead of inventing a snippet line. Empty (`totalFileCount` 0): Zero-hit disclosure.
67
+
68
+ ## Steps
69
+
70
+ 1. **Query and terms (private)** — classify, then build argv. Classification is silent (no chat text). The CLI line-scans `query` plus `--terms`; a file whose name (not just body) matches a term can also surface with no line hit at all (`matches[]` empty) — see **Also matched** and **Lookup mode** for how to gloss those. Multi-word queries only match lines that contain that phrase verbatim. Rank is dominated by how many distinct terms hit the **same** file — complementary vault words beat extra English synonyms and source module names.
71
+
72
+ **Classify** after stripping retrieval wrappers (`find`, `search for`, `documents discussing`, `notes about`, `look up`). Then pick one:
73
+
74
+ - **Lookup** — explicit lookup wording (`exact phrase`, `this line`, `the wording`), **or** leftover is a bare `"quoted span"`. `query` = the quoted text, unmodified — execution: see **Lookup mode** above.
75
+ - **Request** — leftover still has request syntax (any of): `that mention` / `that discuss` / `that talk about`; leftover starts with `plans that` / `notes that` / `docs that` / `documents that`; trailing scope `both in` / `either in` / `in CLI and`. Do **not** pass that leftover as `query`. `query` = one primary noun or named command from the topic (tight phrase; do not prefix a product name). Extra nouns go in `--terms`.
76
+ - **Topic leftover** — leftover is already a topic noun-phrase. `query` = leftover, same words, same order. Do not paraphrase, shorten, or coin a new phrase.
77
+
78
+ Strip only retrieval wrappers. Do not pass the whole utterance. Do not recycle the query as a `--terms` item.
79
+
80
+ Examples below are a **fictional** domain. Copy the shape; invent tokens for *this* topic. Do not reuse these strings as `--terms`.
81
+
82
+ Example — lookup. User: `find "retry of expired jobs"`
83
+ - class: lookup
84
+ - argv: {{GROUNDER_CLI}} search "retry of expired jobs" --json
85
+
86
+ Example — topic leftover. User: `find documents discussing retry of expired jobs`
87
+ - class: topic leftover
88
+ - query: `retry of expired jobs` (leftover after stripping the wrapper)
89
+ - wrong query: `expired job retries` (rewritten)
90
+ - wrong class: request (`documents discussing` is a wrapper)
91
+
92
+ Example — request. User: `find plans that mention updating the charge or refund command, both in worker and API`
93
+ - class: request (`plans that mention` / `both in` stay leftover — not the topic)
94
+ - query: `charge` (one named command from leftover; not `billing charge`)
95
+ - terms: `refund,settlement,invoices.json,RefundPolicy`
96
+ - from leftover: `refund` (the other named command)
97
+ - invented: `settlement` (domain), `invoices.json` (file), `RefundPolicy` (schema) — guess this project's equivalents
98
+ - wrong query: `plans that mention updating the charge or refund command, both in worker and API`
99
+ - wrong query: `charge refund command` (joined nouns)
100
+ - not as terms: `plan`, `command`, `api`
101
+
102
+ **Terms** — invent 3–5 complementary vault tokens for *this* topic, then stop. They need not appear in the utterance:
103
+ 1. Domain noun/phrase from the topic (skip if it would duplicate the query)
104
+ 2. Named command or product verb if the topic has one — never a lone generic verb (`migrate`, `install`)
105
+ 3. One on-disk identifier (filename, config key, schema field) guessed for this project
106
+ 4–5. Only another vault/product token. No paraphrase of the query.
107
+
108
+ **Never as terms** (unless the user asked about code layout): repo paths, `packages/…`, source module / file stems. Lone high-df words (`plan`, `command`, `cli`) flatten rank. Prefer words that appear in vault notes (named commands, config files, domain identifiers).
109
+
110
+ Example — user: `look up why the retry queue must skip expired jobs`
111
+ - class: topic leftover
112
+ - query: `why the retry queue must skip expired jobs`
113
+ - terms: `retry queue,dead letter,jobs.json,RetryPolicy,ttl` (`retry queue` from leftover; others invented)
114
+ - not: `queue-worker`, `process-jobs`, `skip`, `look up`
115
+
116
+ 2. **Search (tool round 1):**
117
+
118
+ ```bash
119
+ {{GROUNDER_CLI}} search "<query>" --terms "<csv>" --context 2 --json
120
+ ```
121
+
122
+ **Always quote `--terms`.** Unquoted CSV with spaces corrupts argv.
123
+
124
+ Parse JSON privately. Take hits in CLI order (`hits[0]` …). For links use `relativePath` + `fileUri`; for Also matched gloss use `alsoMatchedHint` (always present) — do not quote snippets.
125
+
126
+ **Broaden once (silent)** only if: `totalFileCount` is 0; or ≤2 and every hit is meta (`discussions/search/`, or snippet only quotes the query); or any term in `termHitCounts` has a count of 0 (that term produced no files — it was a bad guess and must be replaced). Otherwise do not re-search.
127
+
128
+ Broaden call (use `--context 3` — weaker matches need more context):
129
+
130
+ ```bash
131
+ {{GROUNDER_CLI}} search "<query>" --terms "<csv-with-replacement>" --context 3 --json
132
+ ```
133
+
134
+ **Broaden strategy (deterministic):** check `termHitCounts` first — if any term has count 0, replace **that term** (not slot-3) with a different product/vault token. If no zero-hit term, drop slot-3 (the on-disk identifier). Keep slots 1–2 (product noun/verb) unchanged. Do not invent new terms or rewrite existing ones.
135
+
136
+ 3. **Read (tool round 2)** — mandatory unless lookup:
137
+ - Full-read CLI hits **1–4** in rank order, **all in one parallel batch**.
138
+ - Read path = `hits[i].file` (absolute). Link title/href = `hits[i].relativePath` + `hits[i].fileUri`.
139
+ - **No skips, no substitutions, no “maybe also hit 5.”** Trust CLI order; judge relevance only when writing the answer.
140
+ - Request vault read permissions as needed.
141
+
142
+ 4. **Answer** — synthesize immediately after reads:
143
+ - Claims only from files you full-read. Unread hits must not grow new facts.
144
+ - **Read these:** useful full-reads (those 1–4 only). Thin/off-topic reads get one blunt numbered line there or move to **Also matched**.
145
+ - **Also matched:** remaining top-10 you did not deep-summarize, **in CLI leftover order**. Copy `alsoMatchedHint` (always present, even for a filename-only match); every line ends with ` — phrase`.
146
+ - Every file line: `[relativePath](fileUri)` from JSON; continue numbering across sections.
147
+ - Prefer design/archive docs when they are the authority among the files you read.
148
+
149
+ Run from the linked project folder or any subdirectory beneath it.
150
+ Run {{GROUNDER_CLI}} with `required_permissions: ["all"]` (vault is outside the workspace).
151
+ Do not write to vault files during search.
152
+ Do not grep the vault yourself — the CLI ranks; you read and synthesize.
@@ -1,4 +1,4 @@
1
- <!-- Reference shape for /grounder-plan. Not installed or filled by the CLI — slash commands embed this structure. -->
1
+ <!-- Reference shape for /grounder-plan. Not installed or filled by the CLI — skills embed this structure. -->
2
2
 
3
3
  # Plan: <title>
4
4
 
@@ -1,4 +1,4 @@
1
- <!-- Reference shape for /grounder-task-handoff. Not installed or filled by the CLI — slash commands embed this structure. -->
1
+ <!-- Reference shape for /grounder-handoff. Not installed or filled by the CLI — skills embed this structure. -->
2
2
 
3
3
  # Handoff: <title or short label>
4
4
 
@@ -17,3 +17,4 @@
17
17
 
18
18
  ## Files
19
19
  - path/to/relevant.ts
20
+ - path/to/plan.md (Status section updated) # link the driving plan/ticket here, if one was in play
@@ -1,35 +0,0 @@
1
- import type { AgentInstallOptions, ArtifactStatus } from "./types.js";
2
- export interface InstallCommandFileOptions extends AgentInstallOptions {
3
- agentId: string;
4
- templateDir: string;
5
- commandsDir: string;
6
- filename: string;
7
- }
8
- export interface InstallCommandFileResult {
9
- dest: string;
10
- status: ArtifactStatus;
11
- /** Present when content was (or would be) written — for ledger updates. */
12
- hash?: string;
13
- }
14
- /**
15
- * Install one slash-command markdown file with chezmoi-style drift detection.
16
- *
17
- * When the file already exists and `--force` is off:
18
- * - on-disk hash matches the ledger → safe to refresh to the new template
19
- * - no ledger hash, or on-disk hash differs → treat as user-edited (`modified`)
20
- */
21
- export declare function installCommandFile(opts: InstallCommandFileOptions): Promise<InstallCommandFileResult>;
22
- /**
23
- * Persist per-file hashes after a command install. No-op when `files` is empty
24
- * or `dryRun` is set.
25
- */
26
- export declare function recordCommandFileHashes(opts: {
27
- agentId: string;
28
- commandsSchema: number;
29
- files: Record<string, {
30
- hash: string;
31
- }>;
32
- homeDir?: string;
33
- dryRun?: boolean;
34
- }): Promise<void>;
35
- //# sourceMappingURL=install-command.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"install-command.d.ts","sourceRoot":"","sources":["../../src/agents/install-command.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,wBAAwB,CAAC,CAuCnC;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,EAAE;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAWhB"}
@@ -1,65 +0,0 @@
1
- import { mkdir, readFile, writeFile } from "node:fs/promises";
2
- import path from "node:path";
3
- import { readGrounderState, recordAgentInstall, recordedFileHash } from "../connector/state.js";
4
- import { VERSION } from "../index.js";
5
- import { fileExists } from "../util/fs.js";
6
- import { hashContent } from "../util/hash.js";
7
- import { runtimeInvocation } from "./hook-runtime.js";
8
- /**
9
- * Install one slash-command markdown file with chezmoi-style drift detection.
10
- *
11
- * When the file already exists and `--force` is off:
12
- * - on-disk hash matches the ledger → safe to refresh to the new template
13
- * - no ledger hash, or on-disk hash differs → treat as user-edited (`modified`)
14
- */
15
- export async function installCommandFile(opts) {
16
- const dest = path.join(opts.commandsDir, opts.filename);
17
- const existed = await fileExists(dest);
18
- const template = await readFile(path.join(opts.templateDir, opts.filename), "utf8");
19
- const rendered = template.replaceAll("{{GROUNDER_CLI}}", runtimeInvocation(opts.homeDir));
20
- const renderedHash = hashContent(rendered);
21
- if (existed && !opts.force) {
22
- const onDisk = await readFile(dest, "utf8");
23
- const onDiskHash = hashContent(onDisk);
24
- const state = await readGrounderState(opts.homeDir);
25
- const recorded = recordedFileHash(state, opts.agentId, dest);
26
- if (recorded !== undefined && recorded === onDiskHash) {
27
- // Untouched since Grounder last wrote it — safe to auto-update.
28
- if (onDiskHash === renderedHash) {
29
- return { dest, status: "skipped", hash: renderedHash };
30
- }
31
- if (!opts.dryRun) {
32
- await writeFile(dest, rendered);
33
- }
34
- return { dest, status: "overwritten", hash: renderedHash };
35
- }
36
- // Legacy (no hash) or user-edited — protect content.
37
- return { dest, status: "modified" };
38
- }
39
- if (!opts.dryRun) {
40
- await mkdir(path.dirname(dest), { recursive: true });
41
- await writeFile(dest, rendered);
42
- }
43
- return {
44
- dest,
45
- status: existed ? "overwritten" : "created",
46
- hash: renderedHash,
47
- };
48
- }
49
- /**
50
- * Persist per-file hashes after a command install. No-op when `files` is empty
51
- * or `dryRun` is set.
52
- */
53
- export async function recordCommandFileHashes(opts) {
54
- if (opts.dryRun || Object.keys(opts.files).length === 0) {
55
- return;
56
- }
57
- await recordAgentInstall({
58
- agentId: opts.agentId,
59
- commandsSchema: opts.commandsSchema,
60
- files: opts.files,
61
- grounderVersion: VERSION,
62
- homeDir: opts.homeDir,
63
- });
64
- }
65
- //# sourceMappingURL=install-command.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"install-command.js","sourceRoot":"","sources":["../../src/agents/install-command.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- import type { AgentAdapter, AgentInstallResult, ArtifactStatus } from "../agents/types.js";
2
- export interface ApplyAgentInstallsOptions {
3
- agents: AgentAdapter[];
4
- force?: boolean;
5
- /** Explicitly install/refresh session hooks (vault init --hooks / migrate --hooks). */
6
- hooks?: boolean;
7
- /**
8
- * When true (migrate), also refresh hooks that were previously recorded or
9
- * already present on disk — without installing hooks for agents that never
10
- * opted in.
11
- */
12
- refreshInstalledHooks?: boolean;
13
- dryRun?: boolean;
14
- homeDir?: string;
15
- }
16
- export interface AgentApplyResult {
17
- agent: AgentAdapter;
18
- commands: AgentInstallResult;
19
- hooks?: AgentInstallResult;
20
- }
21
- export interface ApplyAgentInstallsResult {
22
- runtime?: {
23
- cliPath: string;
24
- status: ArtifactStatus;
25
- mode: "symlink" | "copy";
26
- };
27
- agents: AgentApplyResult[];
28
- }
29
- /**
30
- * Materialize runtime + install/refresh agent command (and optional hook)
31
- * artifacts. Shared by `grounder vault init` and `grounder migrate`.
32
- */
33
- export declare function applyAgentInstalls(opts: ApplyAgentInstallsOptions): Promise<ApplyAgentInstallsResult>;
34
- //# sourceMappingURL=apply-agent-installs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apply-agent-installs.d.ts","sourceRoot":"","sources":["../../src/commands/apply-agent-installs.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAS3F,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uFAAuF;IACvF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B;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;AA+DD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,wBAAwB,CAAC,CA6FnC"}
@@ -1,137 +0,0 @@
1
- import { hookFileHasGrounderEntry, installHookRuntime, runtimeCliPath, } from "../agents/hook-runtime.js";
2
- import { recordAgentInstallState } from "../agents/index.js";
3
- import { assertAgentSchemasSupported, readGrounderState, recordedHooksSchema, statePath, } from "../connector/state.js";
4
- async function agentHasInstalledHooks(agent, homeDir) {
5
- if (!agent.expectedHookArtifacts) {
6
- return false;
7
- }
8
- const paths = agent.expectedHookArtifacts(homeDir);
9
- for (const p of paths) {
10
- if (await hookFileHasGrounderEntry(p)) {
11
- return true;
12
- }
13
- }
14
- return false;
15
- }
16
- async function shouldInstallHooks(agent, opts, state) {
17
- if (!agent.installHooks) {
18
- return false;
19
- }
20
- if (opts.hooks) {
21
- return true;
22
- }
23
- if (!opts.refreshInstalledHooks) {
24
- return false;
25
- }
26
- if (recordedHooksSchema(state, agent.id) > 0) {
27
- return true;
28
- }
29
- return agentHasInstalledHooks(agent, opts.homeDir);
30
- }
31
- function commandLabel(status, artifactPath, dryRun) {
32
- switch (status) {
33
- case "skipped":
34
- return dryRun ? "would skip (already current)" : "already current (skipped)";
35
- case "modified":
36
- return dryRun
37
- ? `would skip locally modified (needs --force): ${artifactPath}`
38
- : `locally modified (skipped — use --force): ${artifactPath}`;
39
- case "created":
40
- return dryRun ? `would install: ${artifactPath}` : `installed: ${artifactPath}`;
41
- case "overwritten":
42
- return dryRun ? `would update: ${artifactPath}` : `updated: ${artifactPath}`;
43
- }
44
- }
45
- function hookLabel(status, artifactPath, dryRun) {
46
- switch (status) {
47
- case "skipped":
48
- return dryRun ? "would skip (already current)" : "already exists (skipped)";
49
- case "created":
50
- return dryRun ? `would install: ${artifactPath}` : `installed: ${artifactPath}`;
51
- case "overwritten":
52
- return dryRun ? `would update: ${artifactPath}` : `updated: ${artifactPath}`;
53
- case "modified":
54
- return dryRun ? `would skip: ${artifactPath}` : `skipped: ${artifactPath}`;
55
- }
56
- }
57
- /**
58
- * Materialize runtime + install/refresh agent command (and optional hook)
59
- * artifacts. Shared by `grounder vault init` and `grounder migrate`.
60
- */
61
- export async function applyAgentInstalls(opts) {
62
- const force = opts.force ?? false;
63
- const dryRun = opts.dryRun ?? false;
64
- const homeDir = opts.homeDir;
65
- const agents = opts.agents;
66
- const state = await readGrounderState(homeDir);
67
- assertAgentSchemasSupported(state, agents);
68
- let runtime;
69
- if (agents.length > 0) {
70
- if (dryRun) {
71
- process.stdout.write(`✓ Grounder runtime would refresh: ${runtimeCliPath(homeDir)}\n`);
72
- }
73
- else {
74
- runtime = await installHookRuntime({ homeDir });
75
- const runtimeLabel = runtime.status === "skipped"
76
- ? "already exists (skipped)"
77
- : `installed (${runtime.mode}): ${runtime.cliPath}`;
78
- process.stdout.write(`✓ Grounder runtime ${runtimeLabel}\n`);
79
- }
80
- }
81
- const results = [];
82
- for (const agent of agents) {
83
- const commands = await agent.install({ force, dryRun, homeDir });
84
- for (const [artifactPath, status] of Object.entries(commands.artifacts)) {
85
- process.stdout.write(`✓ ${agent.name} command ${commandLabel(status, artifactPath, dryRun)}\n`);
86
- }
87
- if (Object.keys(commands.artifacts).length === 0) {
88
- process.stdout.write(`✓ ${agent.name}: no artifacts to install yet\n`);
89
- }
90
- let hooksResult;
91
- let hooksInstalled = false;
92
- if (await shouldInstallHooks(agent, opts, state)) {
93
- const installHooks = agent.installHooks;
94
- if (installHooks) {
95
- hooksResult = await installHooks({ force, dryRun, homeDir });
96
- hooksInstalled = true;
97
- for (const [artifactPath, status] of Object.entries(hooksResult.artifacts)) {
98
- process.stdout.write(`✓ ${agent.name} hook ${hookLabel(status, artifactPath, dryRun)}\n`);
99
- }
100
- }
101
- }
102
- if (!dryRun) {
103
- const statuses = Object.values(commands.artifacts);
104
- // Only bump the commands version in state when at least one file was
105
- // written or already up to date. If every file was skipped as locally
106
- // edited (or from before Grounder tracked hashes), do not mark state as
107
- // current — otherwise plain migrate would silence doctor while leaving
108
- // those old command files untouched.
109
- const advanceCommandsSchema = statuses.length === 0 || statuses.some((status) => status !== "modified");
110
- await recordAgentInstallState(agent, {
111
- hooksInstalled,
112
- homeDir,
113
- advanceCommandsSchema,
114
- });
115
- }
116
- results.push({ agent, commands, hooks: hooksResult });
117
- }
118
- if (agents.length > 0) {
119
- const ledger = statePath(homeDir);
120
- if (dryRun) {
121
- process.stdout.write(state
122
- ? `✓ Install state would update: ${ledger}\n`
123
- : `✓ Install state would create: ${ledger}\n`);
124
- }
125
- else {
126
- process.stdout.write(state ? `✓ Install state updated: ${ledger}\n` : `✓ Install state created: ${ledger}\n`);
127
- }
128
- }
129
- const modifiedWithoutForce = !force &&
130
- results.some((r) => Object.values(r.commands.artifacts).some((s) => s === "modified"));
131
- if (modifiedWithoutForce) {
132
- process.stdout.write("\nNote: some command files were left alone (local edits, or an install from before Grounder 0.3).\n" +
133
- " To refresh them: grounder migrate --force\n");
134
- }
135
- return { runtime, agents: results };
136
- }
137
- //# sourceMappingURL=apply-agent-installs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apply-agent-installs.js","sourceRoot":"","sources":["../../src/commands/apply-agent-installs.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- export interface RepoInitOptions {
2
- cwd?: string;
3
- yes?: boolean;
4
- force?: boolean;
5
- id?: string;
6
- vault?: string;
7
- homeDir?: string;
8
- }
9
- export declare function runRepoInit(argv: string[]): Promise<number>;
10
- export declare function runRepoInitWithOptions(options?: RepoInitOptions): Promise<number>;
11
- //# sourceMappingURL=init.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/repo/init.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAajE;AAED,wBAAsB,sBAAsB,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4E3F"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/repo/init.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/vault/init.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBlE;AAED,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAiExF"}
@@ -1,90 +0,0 @@
1
- import { mkdir } from "node:fs/promises";
2
- import { runtimeCliPath } from "../../agents/hook-runtime.js";
3
- import { resolveAgents } from "../../agents/index.js";
4
- import { homeConfigPath, readHomeConfig, withHomeDir, writeHomeConfig, } from "../../connector/home.js";
5
- import { helpExitCode } from "../../help.js";
6
- import { flagBool, flagStrings, parseArgs } from "../../util/parse-args.js";
7
- import { resolveUserPath } from "../../util/path.js";
8
- import { confirm } from "../../util/prompt.js";
9
- import { projectsParent } from "../../vault/layout.js";
10
- import { applyAgentInstalls } from "../apply-agent-installs.js";
11
- export async function runVaultInit(argv) {
12
- const helpCode = helpExitCode(argv, "vault init");
13
- if (helpCode !== null) {
14
- return helpCode;
15
- }
16
- const { positional, flags, repeated } = parseArgs(argv);
17
- const vaultPathArg = positional[0];
18
- const yes = flagBool(flags, "yes", "y");
19
- const force = flagBool(flags, "force", "f");
20
- const hooks = flagBool(flags, "hooks");
21
- const agents = flagStrings(repeated, "agent");
22
- if (!vaultPathArg) {
23
- process.stderr.write("Usage: grounder vault init <path>\n");
24
- return 1;
25
- }
26
- return runVaultInitWithOptions({
27
- vaultPath: vaultPathArg,
28
- yes,
29
- force,
30
- hooks,
31
- agents: agents.length > 0 ? agents : undefined,
32
- });
33
- }
34
- export async function runVaultInitWithOptions(options) {
35
- return withHomeDir(options.homeDir, async () => {
36
- const vaultRoot = resolveUserPath(options.vaultPath);
37
- const yes = options.yes ?? false;
38
- const force = options.force ?? false;
39
- const hooks = options.hooks ?? false;
40
- const homeDir = options.homeDir;
41
- const existingHome = await readHomeConfig();
42
- const projectsDir = projectsParent(vaultRoot);
43
- const agents = await resolveAgents(options.agents);
44
- if (existingHome && existingHome.vaultRoot !== vaultRoot && !force) {
45
- process.stderr.write(`Home config already exists with vault ${existingHome.vaultRoot}. Use --force to overwrite.\n`);
46
- return 1;
47
- }
48
- process.stdout.write(`Vault root: ${vaultRoot}\n`);
49
- process.stdout.write("Will write:\n");
50
- process.stdout.write(` home ${homeConfigPath(homeDir)}\n`);
51
- process.stdout.write(" vault 10-Projects/ (if missing)\n");
52
- if (agents.length > 0) {
53
- // Shared across agents (slash commands + optional hooks) — list once.
54
- process.stdout.write(` grounder runtime ${runtimeCliPath(homeDir)}\n`);
55
- }
56
- for (const agent of agents) {
57
- for (const artifactPath of agent.expectedArtifacts(homeDir)) {
58
- process.stdout.write(` ${agent.id.padEnd(8)} ${artifactPath}\n`);
59
- }
60
- if (hooks && agent.expectedHookArtifacts) {
61
- for (const hookPath of agent.expectedHookArtifacts(homeDir)) {
62
- process.stdout.write(` ${agent.id.padEnd(8)} hook ${hookPath}\n`);
63
- }
64
- }
65
- }
66
- if (agents.length === 0) {
67
- process.stdout.write(" (no supported agents detected — skipping agent artifacts)\n");
68
- }
69
- process.stdout.write("\n");
70
- if (!yes) {
71
- const proceed = await confirm("Proceed?");
72
- if (!proceed) {
73
- process.stdout.write("Aborted.\n");
74
- return 0;
75
- }
76
- }
77
- await writeHomeConfig({ vaultRoot });
78
- await mkdir(projectsDir, { recursive: true });
79
- process.stdout.write("✓ Wrote home config\n");
80
- process.stdout.write(`✓ Vault scaffold: ${projectsDir}\n`);
81
- await applyAgentInstalls({
82
- agents,
83
- force,
84
- hooks,
85
- homeDir,
86
- });
87
- return 0;
88
- });
89
- }
90
- //# sourceMappingURL=init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/vault/init.ts"],"names":[],"mappings":"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"}