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.
- package/README.md +150 -271
- package/dist/agents/claude.d.ts +4 -4
- package/dist/agents/claude.d.ts.map +1 -1
- package/dist/agents/claude.js +158 -178
- package/dist/agents/claude.js.map +1 -1
- package/dist/agents/cursor.d.ts +3 -3
- package/dist/agents/cursor.d.ts.map +1 -1
- package/dist/agents/cursor.js +97 -143
- package/dist/agents/cursor.js.map +1 -1
- package/dist/agents/home-skills.d.ts +46 -0
- package/dist/agents/home-skills.d.ts.map +1 -0
- package/dist/agents/home-skills.js +83 -0
- package/dist/agents/home-skills.js.map +1 -0
- package/dist/agents/hook-fragment.d.ts +52 -0
- package/dist/agents/hook-fragment.d.ts.map +1 -0
- package/dist/agents/hook-fragment.js +76 -0
- package/dist/agents/hook-fragment.js.map +1 -0
- package/dist/agents/hook-install.d.ts +62 -0
- package/dist/agents/hook-install.d.ts.map +1 -0
- package/dist/agents/hook-install.js +74 -0
- package/dist/agents/hook-install.js.map +1 -0
- package/dist/agents/hook-runtime.d.ts +80 -13
- package/dist/agents/hook-runtime.d.ts.map +1 -1
- package/dist/agents/hook-runtime.js +278 -74
- package/dist/agents/hook-runtime.js.map +1 -1
- package/dist/agents/index.d.ts +8 -14
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +13 -19
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/types.d.ts +56 -16
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/cli.js +15 -10
- package/dist/cli.js.map +1 -1
- package/dist/commands/apply.d.ts +69 -0
- package/dist/commands/apply.d.ts.map +1 -0
- package/dist/commands/apply.js +238 -0
- package/dist/commands/apply.js.map +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +197 -101
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/handoff/list.d.ts +23 -13
- package/dist/commands/handoff/list.d.ts.map +1 -1
- package/dist/commands/handoff/list.js +28 -16
- package/dist/commands/handoff/list.js.map +1 -1
- package/dist/commands/handoff/peek.d.ts +1 -1
- package/dist/commands/handoff/peek.d.ts.map +1 -1
- package/dist/commands/handoff/peek.js +28 -12
- package/dist/commands/handoff/peek.js.map +1 -1
- package/dist/commands/handoff.d.ts +2 -0
- package/dist/commands/handoff.d.ts.map +1 -1
- package/dist/commands/handoff.js +10 -1
- package/dist/commands/handoff.js.map +1 -1
- package/dist/commands/install-drift.d.ts +34 -0
- package/dist/commands/install-drift.d.ts.map +1 -0
- package/dist/commands/install-drift.js +72 -0
- package/dist/commands/install-drift.js.map +1 -0
- package/dist/commands/link.d.ts +12 -0
- package/dist/commands/link.d.ts.map +1 -0
- package/dist/commands/{repo/init.js → link.js} +35 -27
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/migrate.d.ts +11 -3
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +66 -34
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/note/list.d.ts +17 -9
- package/dist/commands/note/list.d.ts.map +1 -1
- package/dist/commands/note/list.js +19 -14
- package/dist/commands/note/list.js.map +1 -1
- package/dist/commands/note.d.ts +2 -0
- package/dist/commands/note.d.ts.map +1 -1
- package/dist/commands/note.js +10 -1
- package/dist/commands/note.js.map +1 -1
- package/dist/commands/output.d.ts +22 -2
- package/dist/commands/output.d.ts.map +1 -1
- package/dist/commands/output.js +18 -6
- package/dist/commands/output.js.map +1 -1
- package/dist/commands/overview.d.ts +33 -0
- package/dist/commands/overview.d.ts.map +1 -0
- package/dist/commands/overview.js +150 -0
- package/dist/commands/overview.js.map +1 -0
- package/dist/commands/plan/list.d.ts +20 -12
- package/dist/commands/plan/list.d.ts.map +1 -1
- package/dist/commands/plan/list.js +22 -17
- package/dist/commands/plan/list.js.map +1 -1
- package/dist/commands/plan.d.ts +2 -0
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +12 -2
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/render-artifact-table.d.ts +85 -0
- package/dist/commands/render-artifact-table.d.ts.map +1 -0
- package/dist/commands/render-artifact-table.js +232 -0
- package/dist/commands/render-artifact-table.js.map +1 -0
- package/dist/commands/require-linked.js +2 -2
- package/dist/commands/require-linked.js.map +1 -1
- package/dist/commands/search.d.ts +23 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +288 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/{vault/init.d.ts → setup.d.ts} +5 -4
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +210 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +273 -83
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/upgrade-banner.d.ts +2 -2
- package/dist/commands/upgrade-banner.js +2 -2
- package/dist/connector/home.d.ts +12 -0
- package/dist/connector/home.d.ts.map +1 -1
- package/dist/connector/home.js +26 -2
- package/dist/connector/home.js.map +1 -1
- package/dist/connector/ledger-migrations.d.ts +55 -0
- package/dist/connector/ledger-migrations.d.ts.map +1 -0
- package/dist/connector/ledger-migrations.js +94 -0
- package/dist/connector/ledger-migrations.js.map +1 -0
- package/dist/connector/state.d.ts +97 -60
- package/dist/connector/state.d.ts.map +1 -1
- package/dist/connector/state.js +165 -107
- package/dist/connector/state.js.map +1 -1
- package/dist/connector/vault.d.ts +2 -0
- package/dist/connector/vault.d.ts.map +1 -1
- package/dist/connector/vault.js +6 -1
- package/dist/connector/vault.js.map +1 -1
- package/dist/help.d.ts +3 -3
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +97 -56
- package/dist/help.js.map +1 -1
- package/dist/reconcile/apply.d.ts +31 -0
- package/dist/reconcile/apply.d.ts.map +1 -0
- package/dist/reconcile/apply.js +97 -0
- package/dist/reconcile/apply.js.map +1 -0
- package/dist/reconcile/core.d.ts +82 -0
- package/dist/reconcile/core.d.ts.map +1 -0
- package/dist/reconcile/core.js +163 -0
- package/dist/reconcile/core.js.map +1 -0
- package/dist/reconcile/disk.d.ts +13 -0
- package/dist/reconcile/disk.d.ts.map +1 -0
- package/dist/reconcile/disk.js +28 -0
- package/dist/reconcile/disk.js.map +1 -0
- package/dist/util/frontmatter.d.ts +9 -7
- package/dist/util/frontmatter.d.ts.map +1 -1
- package/dist/util/frontmatter.js +29 -4
- package/dist/util/frontmatter.js.map +1 -1
- package/dist/util/fs.d.ts +14 -0
- package/dist/util/fs.d.ts.map +1 -1
- package/dist/util/fs.js +27 -1
- package/dist/util/fs.js.map +1 -1
- package/dist/util/merge-json.d.ts +13 -2
- package/dist/util/merge-json.d.ts.map +1 -1
- package/dist/util/merge-json.js +24 -10
- package/dist/util/merge-json.js.map +1 -1
- package/dist/util/path.d.ts +23 -0
- package/dist/util/path.d.ts.map +1 -1
- package/dist/util/path.js +39 -0
- package/dist/util/path.js.map +1 -1
- package/dist/vault/list-handoffs.d.ts +14 -2
- package/dist/vault/list-handoffs.d.ts.map +1 -1
- package/dist/vault/list-handoffs.js +40 -23
- package/dist/vault/list-handoffs.js.map +1 -1
- package/dist/vault/list-markdown.d.ts +8 -0
- package/dist/vault/list-markdown.d.ts.map +1 -0
- package/dist/vault/list-markdown.js +35 -0
- package/dist/vault/list-markdown.js.map +1 -0
- package/dist/vault/list-notes.d.ts +15 -6
- package/dist/vault/list-notes.d.ts.map +1 -1
- package/dist/vault/list-notes.js +23 -27
- package/dist/vault/list-notes.js.map +1 -1
- package/dist/vault/list-plans.d.ts +12 -3
- package/dist/vault/list-plans.d.ts.map +1 -1
- package/dist/vault/list-plans.js +20 -24
- package/dist/vault/list-plans.js.map +1 -1
- package/dist/vault/search.d.ts +55 -0
- package/dist/vault/search.d.ts.map +1 -0
- package/dist/vault/search.js +432 -0
- package/dist/vault/search.js.map +1 -0
- package/dist/vault/write-handoff.d.ts +2 -0
- package/dist/vault/write-handoff.d.ts.map +1 -1
- package/dist/vault/write-handoff.js +5 -0
- package/dist/vault/write-handoff.js.map +1 -1
- package/dist/vault/write-note.d.ts +2 -0
- package/dist/vault/write-note.d.ts.map +1 -1
- package/dist/vault/write-note.js +9 -1
- package/dist/vault/write-note.js.map +1 -1
- package/dist/vault/write-plan.d.ts +4 -0
- package/dist/vault/write-plan.d.ts.map +1 -1
- package/dist/vault/write-plan.js +14 -1
- package/dist/vault/write-plan.js.map +1 -1
- package/package.json +11 -4
- package/templates/agents/claude/skills/grounder-handoff/SKILL.md +73 -0
- package/templates/agents/claude/{commands/grounder-note.md → skills/grounder-note/SKILL.md} +12 -2
- package/templates/agents/claude/skills/grounder-overview/SKILL.md +21 -0
- package/templates/agents/claude/{commands/grounder-plan.md → skills/grounder-plan/SKILL.md} +13 -5
- package/templates/agents/claude/skills/grounder-recall/SKILL.md +34 -0
- package/templates/agents/claude/skills/grounder-search/SKILL.md +152 -0
- package/templates/agents/cursor/skills/grounder-handoff/SKILL.md +73 -0
- package/templates/agents/cursor/{commands/grounder-note.md → skills/grounder-note/SKILL.md} +12 -2
- package/templates/agents/cursor/skills/grounder-overview/SKILL.md +21 -0
- package/templates/agents/cursor/{commands/grounder-plan.md → skills/grounder-plan/SKILL.md} +13 -5
- package/templates/agents/cursor/skills/grounder-recall/SKILL.md +34 -0
- package/templates/agents/cursor/skills/grounder-search/SKILL.md +152 -0
- package/templates/vault/plan.md +1 -1
- package/templates/vault/session-handoff.md +2 -1
- package/dist/agents/install-command.d.ts +0 -35
- package/dist/agents/install-command.d.ts.map +0 -1
- package/dist/agents/install-command.js +0 -65
- package/dist/agents/install-command.js.map +0 -1
- package/dist/commands/apply-agent-installs.d.ts +0 -34
- package/dist/commands/apply-agent-installs.d.ts.map +0 -1
- package/dist/commands/apply-agent-installs.js +0 -137
- package/dist/commands/apply-agent-installs.js.map +0 -1
- package/dist/commands/repo/init.d.ts +0 -11
- package/dist/commands/repo/init.d.ts.map +0 -1
- package/dist/commands/repo/init.js.map +0 -1
- package/dist/commands/vault/init.d.ts.map +0 -1
- package/dist/commands/vault/init.js +0 -90
- package/dist/commands/vault/init.js.map +0 -1
- package/templates/agents/claude/commands/grounder-task-handoff.md +0 -54
- package/templates/agents/claude/commands/grounder-task.md +0 -22
- package/templates/agents/cursor/commands/grounder-task-handoff.md +0 -54
- package/templates/agents/cursor/commands/grounder-task.md +0 -22
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/** For hook/runtime rows, still reported via the old imperative `ArtifactStatus` shape. */
|
|
2
|
+
export function toRowStatus(status) {
|
|
3
|
+
switch (status) {
|
|
4
|
+
case "skipped":
|
|
5
|
+
return "current";
|
|
6
|
+
case "created":
|
|
7
|
+
return "create";
|
|
8
|
+
case "overwritten":
|
|
9
|
+
return "update";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Whole-file artifact rows come straight from the reconciler's own plan
|
|
14
|
+
* vocabulary. `forget` gets its own status, distinct from `noop`'s
|
|
15
|
+
* "current" — a forget entry always changes `state.json` (see
|
|
16
|
+
* `planChangesLedger`), even though it never touches the file itself, so
|
|
17
|
+
* folding it into "current"/"unchanged" would hide the one row that explains
|
|
18
|
+
* why the trailing state row says "updated".
|
|
19
|
+
*/
|
|
20
|
+
export function rowStatusFromPlanAction(action) {
|
|
21
|
+
switch (action) {
|
|
22
|
+
case "noop":
|
|
23
|
+
return "current";
|
|
24
|
+
case "forget":
|
|
25
|
+
return "forget";
|
|
26
|
+
case "create":
|
|
27
|
+
return "create";
|
|
28
|
+
case "update":
|
|
29
|
+
return "update";
|
|
30
|
+
case "delete":
|
|
31
|
+
return "delete";
|
|
32
|
+
case "conflict":
|
|
33
|
+
return "modified";
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function rowFromPlanEntry(target, entry) {
|
|
37
|
+
return {
|
|
38
|
+
status: rowStatusFromPlanAction(entry.action),
|
|
39
|
+
target,
|
|
40
|
+
path: entry.path,
|
|
41
|
+
forceAction: entry.blockedAction,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export const VERB = {
|
|
45
|
+
current: { dry: "current", real: "current" },
|
|
46
|
+
create: { dry: "create", real: "created" },
|
|
47
|
+
update: { dry: "update", real: "updated" },
|
|
48
|
+
delete: { dry: "delete", real: "deleted" },
|
|
49
|
+
forget: { dry: "forget", real: "forgotten" },
|
|
50
|
+
modified: { dry: "modified", real: "modified" },
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Table cell label per status — the same word in dry-run and real, so the
|
|
54
|
+
* table asserts one outcome vocabulary instead of reconjugating per row
|
|
55
|
+
* (matching `kubectl apply`'s created/configured/unchanged). Dry-run-ness is
|
|
56
|
+
* already announced once above the table and in the summary sentence, which
|
|
57
|
+
* keeps its own tense (`VERB` above) since "would create" is a sentence
|
|
58
|
+
* construction, not a table cell.
|
|
59
|
+
*
|
|
60
|
+
* `modified` is deliberately not "modified" here: that word would read as
|
|
61
|
+
* Grounder having modified the file, when the row means the opposite — a
|
|
62
|
+
* local edit was found and Grounder left it untouched. "conflict" names that
|
|
63
|
+
* outcome without implying an action was taken (see the STATUS header below,
|
|
64
|
+
* not ACTION, for the same reason).
|
|
65
|
+
*
|
|
66
|
+
* `forget` is deliberately not "unchanged" here, even though the file itself
|
|
67
|
+
* is untouched: the ledger entry for it is dropped, which is exactly the
|
|
68
|
+
* "updated" the trailing state row reports — collapsing it into "unchanged"
|
|
69
|
+
* would leave that state-row change unexplained by any visible row.
|
|
70
|
+
*/
|
|
71
|
+
export const TABLE_LABEL = {
|
|
72
|
+
current: "unchanged",
|
|
73
|
+
create: "created",
|
|
74
|
+
update: "updated",
|
|
75
|
+
delete: "deleted",
|
|
76
|
+
forget: "forgotten",
|
|
77
|
+
modified: "conflict",
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Runtime + per-agent whole-file/hook rows shared by `setup` and `migrate` —
|
|
81
|
+
* both callers add the trailing state/ledger row on top since that isn't
|
|
82
|
+
* part of `applyAgentInstalls`'s result. Tombstone retirement is already
|
|
83
|
+
* folded into each agent's own `plan`, so it lands right after that agent's
|
|
84
|
+
* own artifact rows with no separate grouping step needed.
|
|
85
|
+
*/
|
|
86
|
+
export function rowsFromApplyResult(applyResult) {
|
|
87
|
+
const rows = [];
|
|
88
|
+
if (applyResult.runtime) {
|
|
89
|
+
rows.push({
|
|
90
|
+
status: toRowStatus(applyResult.runtime.status),
|
|
91
|
+
target: "runtime",
|
|
92
|
+
path: applyResult.runtime.cliPath,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
for (const agentResult of applyResult.agents) {
|
|
96
|
+
for (const entry of agentResult.plan) {
|
|
97
|
+
rows.push(rowFromPlanEntry(agentResult.agent.id, entry));
|
|
98
|
+
}
|
|
99
|
+
if (agentResult.hooks) {
|
|
100
|
+
for (const [path, status] of Object.entries(agentResult.hooks.artifacts)) {
|
|
101
|
+
rows.push({
|
|
102
|
+
status: toRowStatus(status),
|
|
103
|
+
// Distinguishes a hook artifact from that agent's command/skill
|
|
104
|
+
// rows above — echoing (not textually identical to) the "hook
|
|
105
|
+
// <path>" wording setup's pre-confirm preview list already uses.
|
|
106
|
+
target: `${agentResult.agent.id} hook`,
|
|
107
|
+
path,
|
|
108
|
+
// No `forceAction` — hooks always-converge with no conflict/`--force`
|
|
109
|
+
// gate (see `AgentAdapter#installHooks`'s own docs), so a hook row
|
|
110
|
+
// never lands in RowStatus "modified".
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return rows;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* The trailing `state` row both `setup` and `migrate` append — same
|
|
119
|
+
* create/update/current rule either way, so the two callers can't drift on
|
|
120
|
+
* how a ledger write is reported. `ledgerChanged` is each caller's own
|
|
121
|
+
* computation; this only owns turning that bit plus prior-state nullness
|
|
122
|
+
* into a `Row`.
|
|
123
|
+
*/
|
|
124
|
+
export function stateRow(ledgerChanged, priorState, path) {
|
|
125
|
+
const status = !ledgerChanged ? "current" : !priorState ? "create" : "update";
|
|
126
|
+
return { status, target: "state", path };
|
|
127
|
+
}
|
|
128
|
+
export function plural(count, noun) {
|
|
129
|
+
return `${count} ${noun}${count === 1 ? "" : "s"}`;
|
|
130
|
+
}
|
|
131
|
+
export function renderTable(rows) {
|
|
132
|
+
const statusWidth = Math.max("STATUS".length, ...rows.map((r) => TABLE_LABEL[r.status].length)) + 1;
|
|
133
|
+
const targetWidth = Math.max("TARGET".length, ...rows.map((r) => r.target.length)) + 1;
|
|
134
|
+
process.stdout.write(`${"STATUS".padEnd(statusWidth)}${"TARGET".padEnd(targetWidth)}PATH\n`);
|
|
135
|
+
for (const row of rows) {
|
|
136
|
+
const verb = TABLE_LABEL[row.status];
|
|
137
|
+
process.stdout.write(`${verb.padEnd(statusWidth)}${row.target.padEnd(targetWidth)}${row.path}\n`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
export function renderSummary(rows, dryRun) {
|
|
141
|
+
const counts = {
|
|
142
|
+
current: 0,
|
|
143
|
+
create: 0,
|
|
144
|
+
update: 0,
|
|
145
|
+
delete: 0,
|
|
146
|
+
forget: 0,
|
|
147
|
+
modified: 0,
|
|
148
|
+
};
|
|
149
|
+
for (const row of rows) {
|
|
150
|
+
counts[row.status]++;
|
|
151
|
+
}
|
|
152
|
+
const acted = [];
|
|
153
|
+
for (const status of ["create", "update", "delete", "forget"]) {
|
|
154
|
+
if (counts[status] > 0) {
|
|
155
|
+
acted.push(`${VERB[status][dryRun ? "dry" : "real"]} ${counts[status]}`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (acted.length === 0 && counts.modified === 0) {
|
|
159
|
+
process.stdout.write(counts.current > 0
|
|
160
|
+
? `Nothing to do — ${plural(counts.current, "file")} unchanged.\n`
|
|
161
|
+
: "Nothing to do.\n");
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
// Conflicts get their own trailer here (in addition to the per-file detail
|
|
165
|
+
// in `renderModifiedNote`) so a run whose only pending work is a left-alone
|
|
166
|
+
// conflict never reports "Nothing to do" — see the `acted.length === 0`
|
|
167
|
+
// check above, which now only fires when there's truly nothing pending.
|
|
168
|
+
const trailers = [];
|
|
169
|
+
if (counts.current > 0) {
|
|
170
|
+
trailers.push(`${plural(counts.current, "file")} unchanged`);
|
|
171
|
+
}
|
|
172
|
+
if (counts.modified > 0) {
|
|
173
|
+
trailers.push(`${plural(counts.modified, "file")} left as ${counts.modified === 1 ? "a conflict" : "conflicts"}`);
|
|
174
|
+
}
|
|
175
|
+
let line;
|
|
176
|
+
if (dryRun) {
|
|
177
|
+
line = acted.length > 0 ? `Would ${acted.join(", ")}` : "Nothing to write";
|
|
178
|
+
for (const trailer of trailers) {
|
|
179
|
+
line += `, ${trailer}`;
|
|
180
|
+
}
|
|
181
|
+
line +=
|
|
182
|
+
acted.length > 0 ? ". Run without --dry-run to apply." : ". Run with --force to resolve.";
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
line = acted.join(", ");
|
|
186
|
+
for (const trailer of trailers) {
|
|
187
|
+
line += line ? `, ${trailer}` : trailer;
|
|
188
|
+
}
|
|
189
|
+
line += ".";
|
|
190
|
+
line = (line[0]?.toUpperCase() ?? "") + line.slice(1);
|
|
191
|
+
}
|
|
192
|
+
process.stdout.write(`${line}\n`);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Per-agent hook failures `applyAgentInstalls` isolated (see
|
|
196
|
+
* `AgentApplyResult#error`) — printed after the table/summary so a failing
|
|
197
|
+
* agent's hook error doesn't obscure whether other agents (or this agent's
|
|
198
|
+
* own whole-file artifacts, already applied by this point) succeeded.
|
|
199
|
+
*/
|
|
200
|
+
export function renderAgentErrors(applyResult) {
|
|
201
|
+
const failed = applyResult.agents.filter((a) => a.error !== undefined);
|
|
202
|
+
if (failed.length === 0) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
process.stderr.write(`\n${plural(failed.length, "agent")} hook install failed (its other artifacts above still applied):\n`);
|
|
206
|
+
for (const { agent, error } of failed) {
|
|
207
|
+
process.stderr.write(` ${agent.id}: ${error}\n`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* @param forceCommand The command line (without `--force`) the reader should
|
|
212
|
+
* re-run to resolve conflicts. Both `setup` and `migrate` pass `"grounder
|
|
213
|
+
* migrate"` today — `setup --force` applies just as well, but pointing every
|
|
214
|
+
* conflict at one canonical command keeps the remediation message the same
|
|
215
|
+
* regardless of which command surfaced the conflict.
|
|
216
|
+
*/
|
|
217
|
+
export function renderModifiedNote(rows, forceCommand) {
|
|
218
|
+
const modified = rows.filter((r) => r.status === "modified");
|
|
219
|
+
if (modified.length === 0) {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
process.stdout.write(`\n${plural(modified.length, "file")} left alone — Grounder can't confirm ${modified.length === 1 ? "it's" : "they're"} unedited:\n`);
|
|
223
|
+
for (const row of modified) {
|
|
224
|
+
const action = row.forceAction === "delete" ? "would be deleted" : "would be overwritten";
|
|
225
|
+
process.stdout.write(` ${row.path} (${action})\n`);
|
|
226
|
+
}
|
|
227
|
+
const hasOverwrite = modified.some((r) => r.forceAction !== "delete");
|
|
228
|
+
const hasDelete = modified.some((r) => r.forceAction === "delete");
|
|
229
|
+
const verb = hasOverwrite && hasDelete ? "overwrite or delete" : hasDelete ? "delete" : "overwrite";
|
|
230
|
+
process.stdout.write(`Run '${forceCommand} --force' to ${verb} ${modified.length === 1 ? "it" : "them"} (any local edits are lost).\n`);
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=render-artifact-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-artifact-table.js","sourceRoot":"","sources":["../../src/commands/render-artifact-table.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,10 +7,10 @@ export async function requireLinkedProject(cwd) {
|
|
|
7
7
|
const result = await resolveLinkedProject(cwd);
|
|
8
8
|
if (!result.ok) {
|
|
9
9
|
if (result.error === "no-vault") {
|
|
10
|
-
process.stderr.write("No vault configured. Run: grounder
|
|
10
|
+
process.stderr.write("No vault configured. Run: grounder setup <path>\n");
|
|
11
11
|
}
|
|
12
12
|
else {
|
|
13
|
-
process.stderr.write("Folder not linked. Run: grounder
|
|
13
|
+
process.stderr.write("Folder not linked. Run: grounder link\n");
|
|
14
14
|
}
|
|
15
15
|
return null;
|
|
16
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"require-linked.js","sourceRoot":"","sources":["../../src/commands/require-linked.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAElF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAW;IACpD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"require-linked.js","sourceRoot":"","sources":["../../src/commands/require-linked.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAElF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAW;IACpD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Options for {@link runSearchWithOptions} (CLI parsing and tests). */
|
|
2
|
+
export interface SearchCommandOptions {
|
|
3
|
+
cwd?: string;
|
|
4
|
+
homeDir?: string;
|
|
5
|
+
query: string;
|
|
6
|
+
terms?: string[];
|
|
7
|
+
limit?: number;
|
|
8
|
+
maxHits?: number;
|
|
9
|
+
context?: number;
|
|
10
|
+
since?: Date;
|
|
11
|
+
markdown?: boolean;
|
|
12
|
+
json?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* CLI entry for `grounder search <query>`.
|
|
16
|
+
* @returns Exit code (`0` on success, `1` on usage or config errors).
|
|
17
|
+
*/
|
|
18
|
+
export declare function runSearch(argv: string[]): Promise<number>;
|
|
19
|
+
/**
|
|
20
|
+
* Resolves the linked project, searches its vault root, prints formatted hits.
|
|
21
|
+
*/
|
|
22
|
+
export declare function runSearchWithOptions(options: SearchCommandOptions): Promise<number>;
|
|
23
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAUA,wEAAwE;AACxE,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAmND;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAuE/D;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkCzF"}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { withHomeDir } from "../connector/home.js";
|
|
3
|
+
import { resolveProjectVaultRoot } from "../connector/vault.js";
|
|
4
|
+
import { helpExitCode } from "../help.js";
|
|
5
|
+
import { fileExists } from "../util/fs.js";
|
|
6
|
+
import { flagBool, flagString, parseArgs } from "../util/parse-args.js";
|
|
7
|
+
import { formatMarkdownFileLink, toFileUri, vaultRelativePath } from "../util/path.js";
|
|
8
|
+
import { searchVault } from "../vault/search.js";
|
|
9
|
+
import { requireLinkedProject } from "./require-linked.js";
|
|
10
|
+
const USAGE = "Usage: grounder search <query> [--terms <csv>] [--limit <n>] [--max-hits <n>] [--context <n>] [--since <date>] [--markdown] [--json]\n";
|
|
11
|
+
function usageError() {
|
|
12
|
+
process.stderr.write(USAGE);
|
|
13
|
+
return 1;
|
|
14
|
+
}
|
|
15
|
+
function parseIntFlag(raw, label, min) {
|
|
16
|
+
if (raw === undefined) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
if (typeof raw !== "string") {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
const trimmed = raw.trim();
|
|
23
|
+
const parsed = Number.parseInt(trimmed, 10);
|
|
24
|
+
const desc = min === 0 ? "a non-negative integer" : "a positive integer";
|
|
25
|
+
if (!/^\d+$/.test(trimmed) || Number.isNaN(parsed) || parsed < min) {
|
|
26
|
+
process.stderr.write(`Invalid ${label}: must be ${desc}.\n`);
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
return parsed;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Parses `--since` / `--after`: calendar date (`2026-08-01` = local midnight),
|
|
33
|
+
* ISO datetime, or relative (`7d`, `30d`). Returns `null` on invalid input
|
|
34
|
+
* (after writing an error message).
|
|
35
|
+
*/
|
|
36
|
+
function parseSinceDate(raw) {
|
|
37
|
+
if (raw === undefined) {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
if (typeof raw !== "string") {
|
|
41
|
+
process.stderr.write("Invalid --since: expected a date string.\n");
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
const trimmed = raw.trim();
|
|
45
|
+
const relMatch = /^(\d+)d$/i.exec(trimmed);
|
|
46
|
+
if (relMatch) {
|
|
47
|
+
const days = Number.parseInt(relMatch[1], 10);
|
|
48
|
+
const d = new Date();
|
|
49
|
+
d.setDate(d.getDate() - days);
|
|
50
|
+
d.setHours(0, 0, 0, 0);
|
|
51
|
+
return d;
|
|
52
|
+
}
|
|
53
|
+
const isoDay = /^(\d{4})-(\d{2})-(\d{2})$/.exec(trimmed);
|
|
54
|
+
if (isoDay) {
|
|
55
|
+
const year = Number.parseInt(isoDay[1], 10);
|
|
56
|
+
const month = Number.parseInt(isoDay[2], 10);
|
|
57
|
+
const day = Number.parseInt(isoDay[3], 10);
|
|
58
|
+
const parsed = new Date(year, month - 1, day);
|
|
59
|
+
if (parsed.getFullYear() !== year ||
|
|
60
|
+
parsed.getMonth() !== month - 1 ||
|
|
61
|
+
parsed.getDate() !== day) {
|
|
62
|
+
process.stderr.write(`Invalid --since: "${trimmed}" is not a valid date (use YYYY-MM-DD or Nd).\n`);
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
parsed.setHours(0, 0, 0, 0);
|
|
66
|
+
return parsed;
|
|
67
|
+
}
|
|
68
|
+
const parsed = new Date(trimmed);
|
|
69
|
+
if (Number.isNaN(parsed.getTime())) {
|
|
70
|
+
process.stderr.write(`Invalid --since: "${trimmed}" is not a valid date (use YYYY-MM-DD or Nd).\n`);
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
return parsed;
|
|
74
|
+
}
|
|
75
|
+
function parseTermsCsv(raw) {
|
|
76
|
+
if (!raw) {
|
|
77
|
+
return [];
|
|
78
|
+
}
|
|
79
|
+
return raw
|
|
80
|
+
.split(",")
|
|
81
|
+
.map((part) => part.trim())
|
|
82
|
+
.filter((part) => part.length > 0);
|
|
83
|
+
}
|
|
84
|
+
function fileStem(filePath) {
|
|
85
|
+
return path.basename(filePath, ".md");
|
|
86
|
+
}
|
|
87
|
+
function formatSummary(outcome) {
|
|
88
|
+
if (outcome.totalMatchCount === 0) {
|
|
89
|
+
return `No matches for "${outcome.query}".`;
|
|
90
|
+
}
|
|
91
|
+
if (outcome.truncated) {
|
|
92
|
+
return `Found ${outcome.totalMatchCount} matches in ${outcome.totalFileCount} files (showing ${outcome.files.length}).`;
|
|
93
|
+
}
|
|
94
|
+
return `Found ${outcome.totalMatchCount} matches in ${outcome.totalFileCount} files.`;
|
|
95
|
+
}
|
|
96
|
+
function writePlainOutput(outcome) {
|
|
97
|
+
process.stdout.write(`${formatSummary(outcome)}\n`);
|
|
98
|
+
if (outcome.totalMatchCount === 0) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
if (outcome.truncated) {
|
|
102
|
+
process.stdout.write(`Showing top ${outcome.files.length} of ${outcome.totalFileCount} files.\n`);
|
|
103
|
+
}
|
|
104
|
+
process.stdout.write("\n");
|
|
105
|
+
outcome.files.forEach((file, index) => {
|
|
106
|
+
if (index > 0) {
|
|
107
|
+
process.stdout.write("\n");
|
|
108
|
+
}
|
|
109
|
+
const label = fileStem(file.filePath);
|
|
110
|
+
const topicTag = file.topicsMatch ? " [topics]" : "";
|
|
111
|
+
process.stdout.write(`${index + 1}. ${label}${topicTag} \n ${file.filePath}\n`);
|
|
112
|
+
if (file.hits.length === 0) {
|
|
113
|
+
// Filename-only match (2026-09-07): no body line to quote — say so
|
|
114
|
+
// instead of printing a bare file with no evidence of why it matched.
|
|
115
|
+
process.stdout.write(` (matched by filename: ${file.matchedTerms.join(", ")})\n`);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
for (const hit of file.hits) {
|
|
119
|
+
const snippet = hit.snippet.replace(/\s+/g, " ").trim();
|
|
120
|
+
process.stdout.write(` L${hit.line} (${hit.matchedTerm}): ${snippet}\n`);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
function formatSnippetBlock(snippet) {
|
|
125
|
+
let fence = "```";
|
|
126
|
+
while (snippet.includes(fence)) {
|
|
127
|
+
fence += "`";
|
|
128
|
+
}
|
|
129
|
+
return `${fence}\n${snippet}\n${fence}\n`;
|
|
130
|
+
}
|
|
131
|
+
function writeMarkdownOutput(outcome) {
|
|
132
|
+
process.stdout.write(`${formatSummary(outcome)}\n`);
|
|
133
|
+
if (outcome.totalMatchCount === 0) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
if (outcome.truncated) {
|
|
137
|
+
process.stdout.write(`Showing top ${outcome.files.length} of ${outcome.totalFileCount} files.\n`);
|
|
138
|
+
}
|
|
139
|
+
process.stdout.write("\n");
|
|
140
|
+
for (const file of outcome.files) {
|
|
141
|
+
const label = fileStem(file.filePath);
|
|
142
|
+
process.stdout.write(`### ${formatMarkdownFileLink(label, file.filePath)}\n\n`);
|
|
143
|
+
if (file.hits.length === 0) {
|
|
144
|
+
// Filename-only match (2026-09-07): no body line to quote.
|
|
145
|
+
process.stdout.write(`(matched by filename: ${file.matchedTerms.join(", ")})\n\n`);
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
for (const hit of file.hits) {
|
|
149
|
+
process.stdout.write(`L${hit.line} (${hit.matchedTerm}):\n\n`);
|
|
150
|
+
process.stdout.write(formatSnippetBlock(hit.snippet));
|
|
151
|
+
process.stdout.write("\n");
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function alsoMatchedHint(filePath, matchedTerms) {
|
|
156
|
+
const stem = fileStem(filePath);
|
|
157
|
+
return `${stem} — ${matchedTerms.slice(0, 2).join(", ")}`;
|
|
158
|
+
}
|
|
159
|
+
function writeJsonOutput(outcome, rootDir) {
|
|
160
|
+
const payload = {
|
|
161
|
+
query: outcome.query,
|
|
162
|
+
terms: outcome.terms,
|
|
163
|
+
termHitCounts: outcome.termHitCounts,
|
|
164
|
+
summary: formatSummary(outcome),
|
|
165
|
+
truncated: outcome.truncated,
|
|
166
|
+
totalMatchCount: outcome.totalMatchCount,
|
|
167
|
+
totalFileCount: outcome.totalFileCount,
|
|
168
|
+
vaultRoot: rootDir,
|
|
169
|
+
vaultRootUri: toFileUri(rootDir),
|
|
170
|
+
hits: outcome.files.map((file) => ({
|
|
171
|
+
file: file.filePath,
|
|
172
|
+
relativePath: vaultRelativePath(rootDir, file.filePath),
|
|
173
|
+
fileUri: toFileUri(file.filePath),
|
|
174
|
+
alsoMatchedHint: alsoMatchedHint(file.filePath, file.matchedTerms),
|
|
175
|
+
mtimeMs: file.mtimeMs,
|
|
176
|
+
topicsMatch: file.topicsMatch,
|
|
177
|
+
matches: file.hits.map((hit) => ({
|
|
178
|
+
line: hit.line,
|
|
179
|
+
term: hit.matchedTerm,
|
|
180
|
+
snippet: hit.snippet,
|
|
181
|
+
})),
|
|
182
|
+
})),
|
|
183
|
+
};
|
|
184
|
+
process.stdout.write(`${JSON.stringify(payload)}\n`);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* CLI entry for `grounder search <query>`.
|
|
188
|
+
* @returns Exit code (`0` on success, `1` on usage or config errors).
|
|
189
|
+
*/
|
|
190
|
+
export async function runSearch(argv) {
|
|
191
|
+
const helpCode = helpExitCode(argv, "search");
|
|
192
|
+
if (helpCode !== null) {
|
|
193
|
+
return helpCode;
|
|
194
|
+
}
|
|
195
|
+
const { positional, flags } = parseArgs(argv);
|
|
196
|
+
if (positional.length === 0) {
|
|
197
|
+
return usageError();
|
|
198
|
+
}
|
|
199
|
+
const allowedFlags = new Set([
|
|
200
|
+
"terms",
|
|
201
|
+
"limit",
|
|
202
|
+
"max-hits",
|
|
203
|
+
"context",
|
|
204
|
+
"since",
|
|
205
|
+
"after",
|
|
206
|
+
"markdown",
|
|
207
|
+
"json",
|
|
208
|
+
]);
|
|
209
|
+
for (const key of flags.keys()) {
|
|
210
|
+
if (!allowedFlags.has(key)) {
|
|
211
|
+
return usageError();
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
const markdown = flagBool(flags, "markdown");
|
|
215
|
+
const json = flagBool(flags, "json");
|
|
216
|
+
if (markdown && json) {
|
|
217
|
+
process.stderr.write("Use only one of --markdown or --json.\n");
|
|
218
|
+
return 1;
|
|
219
|
+
}
|
|
220
|
+
const limit = parseIntFlag(flags.get("limit"), "--limit", 1);
|
|
221
|
+
if (limit === null && flags.has("limit")) {
|
|
222
|
+
return 1;
|
|
223
|
+
}
|
|
224
|
+
const maxHits = parseIntFlag(flags.get("max-hits"), "--max-hits", 1);
|
|
225
|
+
if (maxHits === null && flags.has("max-hits")) {
|
|
226
|
+
return 1;
|
|
227
|
+
}
|
|
228
|
+
const context = parseIntFlag(flags.get("context"), "--context", 0);
|
|
229
|
+
if (context === null && flags.has("context")) {
|
|
230
|
+
return 1;
|
|
231
|
+
}
|
|
232
|
+
const sinceRaw = flags.get("since") ?? flags.get("after");
|
|
233
|
+
const since = parseSinceDate(sinceRaw);
|
|
234
|
+
if (since === null) {
|
|
235
|
+
return 1;
|
|
236
|
+
}
|
|
237
|
+
const query = positional.join(" ").trim();
|
|
238
|
+
if (!query) {
|
|
239
|
+
return usageError();
|
|
240
|
+
}
|
|
241
|
+
return runSearchWithOptions({
|
|
242
|
+
query,
|
|
243
|
+
terms: parseTermsCsv(flagString(flags, "terms")),
|
|
244
|
+
limit: limit ?? undefined,
|
|
245
|
+
maxHits: maxHits ?? undefined,
|
|
246
|
+
context: context ?? undefined,
|
|
247
|
+
since: since ?? undefined,
|
|
248
|
+
markdown,
|
|
249
|
+
json,
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Resolves the linked project, searches its vault root, prints formatted hits.
|
|
254
|
+
*/
|
|
255
|
+
export async function runSearchWithOptions(options) {
|
|
256
|
+
return withHomeDir(options.homeDir, async () => {
|
|
257
|
+
const linked = await requireLinkedProject(options.cwd ?? process.cwd());
|
|
258
|
+
if (!linked) {
|
|
259
|
+
return 1;
|
|
260
|
+
}
|
|
261
|
+
const rootDir = resolveProjectVaultRoot(linked.home, linked.repo);
|
|
262
|
+
if (!(await fileExists(rootDir))) {
|
|
263
|
+
process.stderr.write(`Project vault root not found: ${rootDir}\n`);
|
|
264
|
+
process.stderr.write("Run: grounder setup <vault-path>\n");
|
|
265
|
+
return 1;
|
|
266
|
+
}
|
|
267
|
+
const outcome = await searchVault({
|
|
268
|
+
rootDir,
|
|
269
|
+
query: options.query,
|
|
270
|
+
terms: options.terms,
|
|
271
|
+
...(options.limit !== undefined ? { limit: options.limit } : {}),
|
|
272
|
+
...(options.maxHits !== undefined ? { maxHits: options.maxHits } : {}),
|
|
273
|
+
...(options.context !== undefined ? { context: options.context } : {}),
|
|
274
|
+
...(options.since !== undefined ? { since: options.since } : {}),
|
|
275
|
+
});
|
|
276
|
+
if (options.json) {
|
|
277
|
+
writeJsonOutput(outcome, rootDir);
|
|
278
|
+
}
|
|
279
|
+
else if (options.markdown) {
|
|
280
|
+
writeMarkdownOutput(outcome);
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
writePlainOutput(outcome);
|
|
284
|
+
}
|
|
285
|
+
return 0;
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
export interface
|
|
1
|
+
export interface SetupOptions {
|
|
2
2
|
vaultPath: string;
|
|
3
3
|
yes?: boolean;
|
|
4
4
|
force?: boolean;
|
|
5
5
|
/** Also install session-start teaser hooks for adapters that support them. */
|
|
6
6
|
hooks?: boolean;
|
|
7
|
+
dryRun?: boolean;
|
|
7
8
|
homeDir?: string;
|
|
8
9
|
/** Agent ids to install for. Defaults to auto-detecting installed agents. */
|
|
9
10
|
agents?: string[];
|
|
10
11
|
}
|
|
11
|
-
export declare function
|
|
12
|
-
export declare function
|
|
13
|
-
//# sourceMappingURL=
|
|
12
|
+
export declare function runSetup(argv: string[]): Promise<number>;
|
|
13
|
+
export declare function runSetupWithOptions(options: SetupOptions): Promise<number>;
|
|
14
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAkCA,MAAM,WAAW,YAAY;IAC3B,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,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAyBD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA2B9D;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAmKhF"}
|