grounder 0.2.0 → 0.4.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 +179 -66
- package/dist/agents/claude.d.ts +1 -0
- package/dist/agents/claude.d.ts.map +1 -1
- package/dist/agents/claude.js +37 -13
- package/dist/agents/claude.js.map +1 -1
- package/dist/agents/cursor.d.ts +1 -0
- package/dist/agents/cursor.d.ts.map +1 -1
- package/dist/agents/cursor.js +37 -13
- package/dist/agents/cursor.js.map +1 -1
- package/dist/agents/hook-runtime.d.ts +65 -21
- package/dist/agents/hook-runtime.d.ts.map +1 -1
- package/dist/agents/hook-runtime.js +172 -31
- package/dist/agents/hook-runtime.js.map +1 -1
- package/dist/agents/index.d.ts +18 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +27 -4
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/install-command.d.ts +35 -0
- package/dist/agents/install-command.d.ts.map +1 -0
- package/dist/agents/install-command.js +65 -0
- package/dist/agents/install-command.js.map +1 -0
- package/dist/agents/types.d.ts +19 -1
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/cli.js +62 -60
- package/dist/cli.js.map +1 -1
- package/dist/commands/apply-agent-installs.d.ts +34 -0
- package/dist/commands/apply-agent-installs.d.ts.map +1 -0
- package/dist/commands/apply-agent-installs.js +137 -0
- package/dist/commands/apply-agent-installs.js.map +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +278 -60
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/handoff/list.d.ts +15 -7
- package/dist/commands/handoff/list.d.ts.map +1 -1
- package/dist/commands/handoff/list.js +21 -13
- package/dist/commands/handoff/list.js.map +1 -1
- package/dist/commands/handoff/peek.d.ts +5 -2
- package/dist/commands/handoff/peek.d.ts.map +1 -1
- package/dist/commands/handoff/peek.js +47 -6
- package/dist/commands/handoff/peek.js.map +1 -1
- package/dist/commands/handoff.d.ts.map +1 -1
- package/dist/commands/handoff.js +5 -0
- package/dist/commands/handoff.js.map +1 -1
- package/dist/commands/migrate.d.ts +23 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +104 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/note/list.d.ts +28 -0
- package/dist/commands/note/list.d.ts.map +1 -0
- package/dist/commands/note/list.js +72 -0
- package/dist/commands/note/list.js.map +1 -0
- package/dist/commands/note.d.ts.map +1 -1
- package/dist/commands/note.js +6 -1
- package/dist/commands/note.js.map +1 -1
- package/dist/commands/output.d.ts +27 -0
- package/dist/commands/output.d.ts.map +1 -0
- package/dist/commands/output.js +51 -0
- package/dist/commands/output.js.map +1 -0
- package/dist/commands/package-version-notice.d.ts +18 -0
- package/dist/commands/package-version-notice.d.ts.map +1 -0
- package/dist/commands/package-version-notice.js +39 -0
- package/dist/commands/package-version-notice.js.map +1 -0
- package/dist/commands/path/logs.d.ts +1 -1
- package/dist/commands/path/logs.d.ts.map +1 -1
- package/dist/commands/path/logs.js +6 -1
- package/dist/commands/path/logs.js.map +1 -1
- package/dist/commands/path/notes.d.ts +1 -1
- package/dist/commands/path/notes.d.ts.map +1 -1
- package/dist/commands/path/notes.js +6 -1
- package/dist/commands/path/notes.js.map +1 -1
- package/dist/commands/path/plans.d.ts +7 -0
- package/dist/commands/path/plans.d.ts.map +1 -0
- package/dist/commands/path/plans.js +22 -0
- package/dist/commands/path/plans.js.map +1 -0
- package/dist/commands/plan/list.d.ts +31 -0
- package/dist/commands/plan/list.d.ts.map +1 -0
- package/dist/commands/plan/list.js +75 -0
- package/dist/commands/plan/list.js.map +1 -0
- package/dist/commands/plan.d.ts +34 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +121 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/repo/init.d.ts.map +1 -1
- package/dist/commands/repo/init.js +12 -1
- package/dist/commands/repo/init.js.map +1 -1
- package/dist/commands/status.d.ts +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +62 -18
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/upgrade-banner.d.ts +9 -0
- package/dist/commands/upgrade-banner.d.ts.map +1 -0
- package/dist/commands/upgrade-banner.js +27 -0
- package/dist/commands/upgrade-banner.js.map +1 -0
- package/dist/commands/vault/init.d.ts.map +1 -1
- package/dist/commands/vault/init.js +18 -29
- package/dist/commands/vault/init.js.map +1 -1
- package/dist/connector/repo.d.ts +2 -0
- package/dist/connector/repo.d.ts.map +1 -1
- package/dist/connector/repo.js +12 -1
- package/dist/connector/repo.js.map +1 -1
- package/dist/connector/state.d.ts +86 -0
- package/dist/connector/state.d.ts.map +1 -0
- package/dist/connector/state.js +171 -0
- package/dist/connector/state.js.map +1 -0
- package/dist/connector/unsupported-schema.d.ts +9 -0
- package/dist/connector/unsupported-schema.d.ts.map +1 -0
- package/dist/connector/unsupported-schema.js +14 -0
- package/dist/connector/unsupported-schema.js.map +1 -0
- 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 +45 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +368 -0
- package/dist/help.js.map +1 -0
- package/dist/util/fs.d.ts +6 -0
- package/dist/util/fs.d.ts.map +1 -1
- package/dist/util/fs.js +15 -1
- package/dist/util/fs.js.map +1 -1
- package/dist/util/hash.d.ts +3 -0
- package/dist/util/hash.d.ts.map +1 -0
- package/dist/util/hash.js +6 -0
- package/dist/util/hash.js.map +1 -0
- package/dist/util/parse-args.d.ts.map +1 -1
- package/dist/util/parse-args.js +11 -2
- package/dist/util/parse-args.js.map +1 -1
- package/dist/util/path.d.ts +10 -0
- package/dist/util/path.d.ts.map +1 -1
- package/dist/util/path.js +31 -0
- package/dist/util/path.js.map +1 -1
- package/dist/util/plan-name.d.ts +10 -0
- package/dist/util/plan-name.d.ts.map +1 -0
- package/dist/util/plan-name.js +18 -0
- package/dist/util/plan-name.js.map +1 -0
- package/dist/util/semver.d.ts +10 -0
- package/dist/util/semver.d.ts.map +1 -0
- package/dist/util/semver.js +40 -0
- package/dist/util/semver.js.map +1 -0
- package/dist/vault/layout.d.ts +2 -0
- package/dist/vault/layout.d.ts.map +1 -1
- package/dist/vault/layout.js +4 -0
- package/dist/vault/layout.js.map +1 -1
- package/dist/vault/list-notes.d.ts +15 -0
- package/dist/vault/list-notes.d.ts.map +1 -0
- package/dist/vault/list-notes.js +44 -0
- package/dist/vault/list-notes.js.map +1 -0
- package/dist/vault/list-plans.d.ts +11 -0
- package/dist/vault/list-plans.d.ts.map +1 -0
- package/dist/vault/list-plans.js +40 -0
- package/dist/vault/list-plans.js.map +1 -0
- package/dist/vault/write-plan.d.ts +28 -0
- package/dist/vault/write-plan.d.ts.map +1 -0
- package/dist/vault/write-plan.js +61 -0
- package/dist/vault/write-plan.js.map +1 -0
- package/package.json +5 -3
- package/templates/agents/claude/commands/grounder-note.md +25 -3
- package/templates/agents/claude/commands/grounder-plan.md +69 -0
- package/templates/agents/claude/commands/grounder-task-handoff.md +3 -3
- package/templates/agents/claude/commands/grounder-task.md +5 -3
- package/templates/agents/cursor/commands/grounder-note.md +26 -4
- package/templates/agents/cursor/commands/grounder-plan.md +69 -0
- package/templates/agents/cursor/commands/grounder-task-handoff.md +4 -4
- package/templates/agents/cursor/commands/grounder-task.md +6 -4
- package/templates/vault/plan.md +16 -0
package/dist/commands/doctor.js
CHANGED
|
@@ -1,19 +1,36 @@
|
|
|
1
1
|
import { readFile, stat } from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import {
|
|
3
|
+
import { extractRuntimeNodePath, findRuntimeNodePathsInText, hookFileGrounderPeekCommands, isHookRuntimeStale, } from "../agents/hook-runtime.js";
|
|
4
4
|
import { resolveAgents } from "../agents/index.js";
|
|
5
5
|
import { findGitRoot } from "../connector/git.js";
|
|
6
6
|
import { homeConfigPath, readHomeConfig, withHomeDir } from "../connector/home.js";
|
|
7
7
|
import { findLinkedRepoRoot, readRepoConfig } from "../connector/repo.js";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import { isHooksSchemaAhead, readGrounderState, recordedCommandsSchema, recordedHooksSchema, statePath, } from "../connector/state.js";
|
|
9
|
+
import { isUnsupportedSchemaError } from "../connector/unsupported-schema.js";
|
|
10
|
+
import { resolveLogsDir, resolveNotesDir, resolvePlansDir, resolveVaultRoot, } from "../connector/vault.js";
|
|
11
|
+
import { helpExitCode } from "../help.js";
|
|
12
|
+
import { VERSION } from "../index.js";
|
|
13
|
+
import { fileExists, isExecutable } from "../util/fs.js";
|
|
10
14
|
import { flagBool, parseArgs } from "../util/parse-args.js";
|
|
11
15
|
import { projectsParent } from "../vault/layout.js";
|
|
12
16
|
import { failCheck, okCheck, warnCheck } from "./check.js";
|
|
17
|
+
import { fixArrow, writeSection } from "./output.js";
|
|
18
|
+
import { packageVersionNotice } from "./package-version-notice.js";
|
|
13
19
|
const VAULT_INIT = "grounder vault init <path>";
|
|
14
|
-
const
|
|
15
|
-
const
|
|
20
|
+
const MIGRATE = "grounder migrate";
|
|
21
|
+
const MIGRATE_FORCE = "grounder migrate --force";
|
|
22
|
+
const MIGRATE_HOOKS = "grounder migrate --hooks";
|
|
16
23
|
const REPO_INIT = "grounder init";
|
|
24
|
+
const UPGRADE_GROUNDER = "upgrade grounder";
|
|
25
|
+
/** First baked Node path that is missing or not executable; `null` if all ok / none found. */
|
|
26
|
+
async function firstDanglingRuntimeNode(nodePaths) {
|
|
27
|
+
for (const nodePath of nodePaths) {
|
|
28
|
+
if (!(await isExecutable(nodePath))) {
|
|
29
|
+
return nodePath;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
17
34
|
async function isDirectory(dirPath) {
|
|
18
35
|
try {
|
|
19
36
|
const info = await stat(dirPath);
|
|
@@ -26,11 +43,10 @@ async function isDirectory(dirPath) {
|
|
|
26
43
|
function formatCheck(check) {
|
|
27
44
|
const level = check.level.padEnd(4);
|
|
28
45
|
const id = check.id.padEnd(18);
|
|
29
|
-
|
|
30
|
-
return ` ${level} ${id} ${check.message}${fix}\n`;
|
|
46
|
+
return ` ${level} ${id} ${check.message}${fixArrow(check.fix)}\n`;
|
|
31
47
|
}
|
|
32
|
-
function
|
|
33
|
-
|
|
48
|
+
function writeChecks(title, checks) {
|
|
49
|
+
writeSection(title);
|
|
34
50
|
for (const check of checks) {
|
|
35
51
|
process.stdout.write(formatCheck(check));
|
|
36
52
|
}
|
|
@@ -99,7 +115,113 @@ async function checkProjectsDir(vaultRoot) {
|
|
|
99
115
|
}
|
|
100
116
|
return okCheck("projects-dir", `10-Projects/ present (${projectsDir})`);
|
|
101
117
|
}
|
|
102
|
-
|
|
118
|
+
/**
|
|
119
|
+
* Load `~/.grounder/state.json` for doctor.
|
|
120
|
+
* Missing → warn (legacy / pre-ledger); corrupt → fail; present → ok.
|
|
121
|
+
*/
|
|
122
|
+
async function loadInstallState(homeDir) {
|
|
123
|
+
const filePath = statePath(homeDir);
|
|
124
|
+
try {
|
|
125
|
+
const state = await readGrounderState(homeDir);
|
|
126
|
+
if (!state) {
|
|
127
|
+
return {
|
|
128
|
+
state: null,
|
|
129
|
+
check: warnCheck("install-state", "install state missing (pre-ledger / never migrated)", MIGRATE_FORCE),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
state,
|
|
134
|
+
check: okCheck("install-state", `install state present (${filePath})`),
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
139
|
+
return {
|
|
140
|
+
state: null,
|
|
141
|
+
check: failCheck("install-state", `install state invalid: ${detail}`, `fix or remove ${filePath}, then ${MIGRATE_FORCE}`),
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/** Warn when package version disagrees with the last migrate/vault-init ledger write. */
|
|
146
|
+
function checkPackageVersion(state) {
|
|
147
|
+
if (!state) {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
const notice = packageVersionNotice(VERSION, state.grounderVersion);
|
|
151
|
+
if (!notice) {
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
return warnCheck("package-version", notice.message, notice.fix);
|
|
155
|
+
}
|
|
156
|
+
function commandsSchemaAhead(agent, state, stateReadable) {
|
|
157
|
+
if (!stateReadable) {
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
return recordedCommandsSchema(state, agent.id) > agent.commandsSchema;
|
|
161
|
+
}
|
|
162
|
+
function commandsSchemaBehind(agent, state, stateReadable) {
|
|
163
|
+
if (!stateReadable || !state?.agents[agent.id]) {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
return recordedCommandsSchema(state, agent.id) < agent.commandsSchema;
|
|
167
|
+
}
|
|
168
|
+
function hooksSchemaAhead(agent, state, stateReadable) {
|
|
169
|
+
if (!stateReadable || agent.hooksSchema === undefined) {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
return isHooksSchemaAhead(state?.agents[agent.id]?.hooksSchema, agent.hooksSchema);
|
|
173
|
+
}
|
|
174
|
+
/** Match {@link isInstallSchemaStale}: only when a hooks version was recorded. */
|
|
175
|
+
function hooksSchemaBehindInLedger(agent, state, stateReadable) {
|
|
176
|
+
if (!stateReadable || agent.hooksSchema === undefined) {
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
const recorded = state?.agents[agent.id]?.hooksSchema;
|
|
180
|
+
if (recorded === undefined) {
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
return recorded < agent.hooksSchema;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* When on-disk files already match templates but `state.json` schema numbers
|
|
187
|
+
* lag, surface the same migrate hint `status` shows for ledger staleness.
|
|
188
|
+
*/
|
|
189
|
+
function applyLedgerSchemaLag(check, opts) {
|
|
190
|
+
if (check.level !== "ok" || !opts.behind) {
|
|
191
|
+
return check;
|
|
192
|
+
}
|
|
193
|
+
return warnCheck(opts.id, `${opts.agentName}: ${opts.kind} schema behind in ledger (recorded ${opts.recorded}, current ${opts.current}; files match)`, MIGRATE);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Map migrate dry-run artifact statuses onto a doctor check.
|
|
197
|
+
* `modified` needs `--force`; `overwritten` / `created` would write on plain migrate.
|
|
198
|
+
* Only `skipped` counts as up to date.
|
|
199
|
+
*/
|
|
200
|
+
function checkFromInstallPreview(id, agentName, kind, preview, upToDateMessage) {
|
|
201
|
+
const statuses = Object.values(preview.artifacts);
|
|
202
|
+
const modified = statuses.filter((s) => s === "modified").length;
|
|
203
|
+
const created = statuses.filter((s) => s === "created").length;
|
|
204
|
+
const overwritten = statuses.filter((s) => s === "overwritten").length;
|
|
205
|
+
const wouldWrite = created + overwritten;
|
|
206
|
+
if (modified === 0 && wouldWrite === 0) {
|
|
207
|
+
return okCheck(id, upToDateMessage);
|
|
208
|
+
}
|
|
209
|
+
if (modified === 0) {
|
|
210
|
+
return warnCheck(id, `${agentName}: ${pendingWriteMessage(kind, created, overwritten)}`, MIGRATE);
|
|
211
|
+
}
|
|
212
|
+
return warnCheck(id, `${agentName}: ${modified} ${kind} locally modified (needs --force to refresh)` +
|
|
213
|
+
(wouldWrite > 0 ? `, ${wouldWrite} would auto-update` : ""), MIGRATE_FORCE);
|
|
214
|
+
}
|
|
215
|
+
function pendingWriteMessage(kind, created, overwritten) {
|
|
216
|
+
if (created > 0 && overwritten > 0) {
|
|
217
|
+
return `${created + overwritten} ${kind} would install or update on next migrate`;
|
|
218
|
+
}
|
|
219
|
+
if (created > 0) {
|
|
220
|
+
return `${created} ${kind} would install on next migrate`;
|
|
221
|
+
}
|
|
222
|
+
return `${overwritten} ${kind} would update on next migrate`;
|
|
223
|
+
}
|
|
224
|
+
async function checkAgentArtifacts(state, stateReadable, homeDir) {
|
|
103
225
|
const agents = await resolveAgents();
|
|
104
226
|
const checks = [];
|
|
105
227
|
for (const agent of agents) {
|
|
@@ -108,10 +230,48 @@ async function checkAgentArtifacts(homeDir) {
|
|
|
108
230
|
const presentCount = present.filter(Boolean).length;
|
|
109
231
|
const id = `agent-${agent.id}`;
|
|
110
232
|
if (presentCount === expected.length) {
|
|
111
|
-
|
|
233
|
+
// Missing/non-executable baked Node in slash-command markdown → fail.
|
|
234
|
+
// Do not compare to process.execPath. Legacy npx / non-runtime shapes skip.
|
|
235
|
+
const texts = await Promise.all(expected.map(async (p) => {
|
|
236
|
+
try {
|
|
237
|
+
return await readFile(p, "utf8");
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
return "";
|
|
241
|
+
}
|
|
242
|
+
}));
|
|
243
|
+
const danglingNode = await firstDanglingRuntimeNode(texts.flatMap((text) => findRuntimeNodePathsInText(text)));
|
|
244
|
+
if (danglingNode) {
|
|
245
|
+
checks.push(failCheck(id, `${agent.name} command Node interpreter missing or not executable (${danglingNode})`, MIGRATE));
|
|
246
|
+
}
|
|
247
|
+
else if (commandsSchemaAhead(agent, state, stateReadable)) {
|
|
248
|
+
const recorded = recordedCommandsSchema(state, agent.id);
|
|
249
|
+
checks.push(failCheck(id, `${agent.name} commands schema newer than this grounder (recorded ${recorded}, supported ${agent.commandsSchema})`, UPGRADE_GROUNDER));
|
|
250
|
+
}
|
|
251
|
+
else if (stateReadable) {
|
|
252
|
+
try {
|
|
253
|
+
const preview = await agent.install({ force: false, dryRun: true, homeDir });
|
|
254
|
+
const previewCheck = checkFromInstallPreview(id, agent.name, "command file(s)", preview, `${agent.name} command files up to date`);
|
|
255
|
+
checks.push(applyLedgerSchemaLag(previewCheck, {
|
|
256
|
+
id,
|
|
257
|
+
agentName: agent.name,
|
|
258
|
+
kind: "commands",
|
|
259
|
+
recorded: recordedCommandsSchema(state, agent.id),
|
|
260
|
+
current: agent.commandsSchema,
|
|
261
|
+
behind: commandsSchemaBehind(agent, state, stateReadable),
|
|
262
|
+
}));
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
266
|
+
checks.push(warnCheck(id, `${agent.name}: could not verify command drift (${detail})`, MIGRATE));
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
checks.push(okCheck(id, `${agent.name} command files present`));
|
|
271
|
+
}
|
|
112
272
|
continue;
|
|
113
273
|
}
|
|
114
|
-
const fix = `${
|
|
274
|
+
const fix = `${MIGRATE_FORCE} (or --agent=${agent.id})`;
|
|
115
275
|
if (presentCount === 0) {
|
|
116
276
|
checks.push(warnCheck(id, `${agent.name} detected but no Grounder command files`, fix));
|
|
117
277
|
}
|
|
@@ -122,62 +282,80 @@ async function checkAgentArtifacts(homeDir) {
|
|
|
122
282
|
}
|
|
123
283
|
return checks;
|
|
124
284
|
}
|
|
125
|
-
/** True when any nested `command` field is Grounder's peek hook (Cursor or Claude shape). */
|
|
126
|
-
function jsonContainsGrounderPeekCommand(value) {
|
|
127
|
-
if (Array.isArray(value)) {
|
|
128
|
-
return value.some(jsonContainsGrounderPeekCommand);
|
|
129
|
-
}
|
|
130
|
-
if (value && typeof value === "object") {
|
|
131
|
-
const obj = value;
|
|
132
|
-
if (isGrounderPeekHookCommand(obj.command)) {
|
|
133
|
-
return true;
|
|
134
|
-
}
|
|
135
|
-
return Object.values(obj).some(jsonContainsGrounderPeekCommand);
|
|
136
|
-
}
|
|
137
|
-
return false;
|
|
138
|
-
}
|
|
139
|
-
async function hookFileHasGrounderEntry(filePath) {
|
|
140
|
-
try {
|
|
141
|
-
if (!(await fileExists(filePath))) {
|
|
142
|
-
return false;
|
|
143
|
-
}
|
|
144
|
-
const parsed = JSON.parse(await readFile(filePath, "utf8"));
|
|
145
|
-
return jsonContainsGrounderPeekCommand(parsed);
|
|
146
|
-
}
|
|
147
|
-
catch {
|
|
148
|
-
return false;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
285
|
/**
|
|
152
286
|
* Warn-only: session hooks are opt-in. Missing entry never fails doctor.
|
|
153
287
|
* One check per detected agent that declares `expectedHookArtifacts`.
|
|
154
288
|
*
|
|
155
|
-
*
|
|
156
|
-
* `~/.grounder/runtime` materialization
|
|
157
|
-
*
|
|
289
|
+
* Slash commands and session hooks both depend on the shared
|
|
290
|
+
* `~/.grounder/runtime` materialization, so it's checked whenever *either* is
|
|
291
|
+
* installed — stale mainly for bare-npx copy installs after an upgrade
|
|
292
|
+
* (symlink installs stay current without re-init).
|
|
158
293
|
*/
|
|
159
|
-
async function checkAgentHooks(homeDir) {
|
|
294
|
+
async function checkAgentHooks(state, stateReadable, homeDir) {
|
|
160
295
|
const agents = await resolveAgents();
|
|
161
296
|
const checks = [];
|
|
162
297
|
let anyHooksInstalled = false;
|
|
298
|
+
const commandsPresent = await Promise.all(agents.map((agent) => Promise.all(agent.expectedArtifacts(homeDir).map((p) => fileExists(p)))));
|
|
299
|
+
const anyCommandsInstalled = commandsPresent.some((present) => present.some(Boolean));
|
|
300
|
+
// Shared runtime staleness alone makes installHooks dry-run report would-update;
|
|
301
|
+
// keep that as a single hook-runtime warn below instead of doubling up.
|
|
302
|
+
const runtimeStale = await isHookRuntimeStale(homeDir);
|
|
163
303
|
for (const agent of agents) {
|
|
164
304
|
if (!agent.expectedHookArtifacts) {
|
|
165
305
|
continue;
|
|
166
306
|
}
|
|
167
307
|
const expected = agent.expectedHookArtifacts(homeDir);
|
|
168
|
-
const
|
|
308
|
+
const peekCommandsByFile = await Promise.all(expected.map((p) => hookFileGrounderPeekCommands(p)));
|
|
309
|
+
const present = peekCommandsByFile.map((cmds) => cmds.length > 0);
|
|
169
310
|
const id = `agent-${agent.id}-hooks`;
|
|
170
311
|
if (present.every(Boolean) && expected.length > 0) {
|
|
171
312
|
anyHooksInstalled = true;
|
|
172
|
-
|
|
313
|
+
// Missing/non-executable baked Node → fail. Do not compare to
|
|
314
|
+
// process.execPath: a different-but-still-present install is fine.
|
|
315
|
+
// Legacy `npx` entries have no absolute interpreter (extract → null) — skip.
|
|
316
|
+
const danglingNode = await firstDanglingRuntimeNode(peekCommandsByFile.flat().flatMap((cmd) => {
|
|
317
|
+
const nodePath = extractRuntimeNodePath(cmd);
|
|
318
|
+
return nodePath !== null ? [nodePath] : [];
|
|
319
|
+
}));
|
|
320
|
+
if (danglingNode) {
|
|
321
|
+
checks.push(failCheck(id, `${agent.name} session hook Node interpreter missing or not executable (${danglingNode})`, MIGRATE));
|
|
322
|
+
}
|
|
323
|
+
else if (hooksSchemaAhead(agent, state, stateReadable)) {
|
|
324
|
+
const recorded = recordedHooksSchema(state, agent.id);
|
|
325
|
+
checks.push(failCheck(id, `${agent.name} hooks schema newer than this grounder (recorded ${recorded}, supported ${agent.hooksSchema})`, UPGRADE_GROUNDER));
|
|
326
|
+
}
|
|
327
|
+
else if (runtimeStale) {
|
|
328
|
+
checks.push(okCheck(id, `${agent.name} session hook installed`));
|
|
329
|
+
}
|
|
330
|
+
else if (stateReadable && agent.installHooks) {
|
|
331
|
+
try {
|
|
332
|
+
const preview = await agent.installHooks({ force: false, dryRun: true, homeDir });
|
|
333
|
+
const previewCheck = checkFromInstallPreview(id, agent.name, "session hook file(s)", preview, `${agent.name} session hook up to date`);
|
|
334
|
+
checks.push(applyLedgerSchemaLag(previewCheck, {
|
|
335
|
+
id,
|
|
336
|
+
agentName: agent.name,
|
|
337
|
+
kind: "hooks",
|
|
338
|
+
recorded: recordedHooksSchema(state, agent.id),
|
|
339
|
+
current: agent.hooksSchema ?? 0,
|
|
340
|
+
behind: hooksSchemaBehindInLedger(agent, state, stateReadable),
|
|
341
|
+
}));
|
|
342
|
+
}
|
|
343
|
+
catch (error) {
|
|
344
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
345
|
+
checks.push(warnCheck(id, `${agent.name}: could not verify session hook drift (${detail})`, MIGRATE));
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
checks.push(okCheck(id, `${agent.name} session hook installed`));
|
|
350
|
+
}
|
|
173
351
|
}
|
|
174
352
|
else {
|
|
175
|
-
checks.push(warnCheck(id, `${agent.name} detected but no Grounder session hook`,
|
|
353
|
+
checks.push(warnCheck(id, `${agent.name} detected but no Grounder session hook`, MIGRATE_HOOKS));
|
|
176
354
|
}
|
|
177
355
|
}
|
|
178
|
-
if (anyHooksInstalled) {
|
|
179
|
-
if (
|
|
180
|
-
checks.push(warnCheck("hook-runtime", "hook runtime stale or missing (re-run after upgrading, especially bare npx)",
|
|
356
|
+
if (anyHooksInstalled || anyCommandsInstalled) {
|
|
357
|
+
if (runtimeStale) {
|
|
358
|
+
checks.push(warnCheck("hook-runtime", "hook runtime stale or missing (re-run after upgrading, especially bare npx)", MIGRATE));
|
|
181
359
|
}
|
|
182
360
|
else {
|
|
183
361
|
checks.push(okCheck("hook-runtime", "hook runtime current"));
|
|
@@ -189,13 +367,28 @@ async function runMachineChecks(homeDir) {
|
|
|
189
367
|
const { check: homeCheck, home } = await checkHomeConfig();
|
|
190
368
|
const { check: vaultCheck, vaultRoot } = await checkVault(home);
|
|
191
369
|
const projectsCheck = await checkProjectsDir(vaultRoot);
|
|
192
|
-
const
|
|
193
|
-
|
|
370
|
+
const { state, check: stateCheck } = await loadInstallState(homeDir);
|
|
371
|
+
// Corrupt ledger: don't invent schema-0 migrate warns on top of the fail.
|
|
372
|
+
const stateReadable = stateCheck.level !== "fail";
|
|
373
|
+
const packageVersionCheck = checkPackageVersion(state);
|
|
194
374
|
return {
|
|
195
|
-
checks: [
|
|
375
|
+
checks: [
|
|
376
|
+
homeCheck,
|
|
377
|
+
vaultCheck,
|
|
378
|
+
projectsCheck,
|
|
379
|
+
stateCheck,
|
|
380
|
+
...(packageVersionCheck ? [packageVersionCheck] : []),
|
|
381
|
+
],
|
|
382
|
+
state,
|
|
383
|
+
stateReadable,
|
|
196
384
|
home,
|
|
197
385
|
};
|
|
198
386
|
}
|
|
387
|
+
async function runAgentChecks(state, stateReadable, homeDir) {
|
|
388
|
+
const agentChecks = await checkAgentArtifacts(state, stateReadable, homeDir);
|
|
389
|
+
const hookChecks = await checkAgentHooks(state, stateReadable, homeDir);
|
|
390
|
+
return [...agentChecks, ...hookChecks];
|
|
391
|
+
}
|
|
199
392
|
async function runProjectChecks(cwd, home) {
|
|
200
393
|
const checks = [];
|
|
201
394
|
const gitRoot = await findGitRoot(cwd);
|
|
@@ -205,10 +398,12 @@ async function runProjectChecks(cwd, home) {
|
|
|
205
398
|
checks.push(failCheck("repo-config-valid", "cannot validate projectId (no repo config)", REPO_INIT));
|
|
206
399
|
checks.push(failCheck("notes-dir", "cannot resolve notes/ (no repo config)", REPO_INIT));
|
|
207
400
|
checks.push(failCheck("logs-dir", "cannot resolve logs/ (no repo config)", REPO_INIT));
|
|
401
|
+
checks.push(failCheck("plans-dir", "cannot resolve plans/ (no repo config)", REPO_INIT));
|
|
208
402
|
}
|
|
209
403
|
else {
|
|
210
404
|
checks.push(okCheck("repo-config", `repo config present (${path.join(linkedRoot, ".grounder.json")})`));
|
|
211
405
|
let repo = null;
|
|
406
|
+
let repoUnsupported = false;
|
|
212
407
|
try {
|
|
213
408
|
repo = await readRepoConfig(linkedRoot);
|
|
214
409
|
if (!repo) {
|
|
@@ -220,23 +415,39 @@ async function runProjectChecks(cwd, home) {
|
|
|
220
415
|
}
|
|
221
416
|
catch (error) {
|
|
222
417
|
const detail = error instanceof Error ? error.message : String(error);
|
|
223
|
-
|
|
418
|
+
if (isUnsupportedSchemaError(error)) {
|
|
419
|
+
repoUnsupported = true;
|
|
420
|
+
checks.push(failCheck("repo-config-valid", detail, UPGRADE_GROUNDER));
|
|
421
|
+
}
|
|
422
|
+
else {
|
|
423
|
+
checks.push(failCheck("repo-config-valid", `invalid repo config: ${detail}`, `Fix or re-run ${REPO_INIT} --force`));
|
|
424
|
+
}
|
|
224
425
|
}
|
|
225
426
|
if (!home || !repo) {
|
|
226
|
-
const reason = !home
|
|
227
|
-
|
|
427
|
+
const reason = !home
|
|
428
|
+
? "no home config"
|
|
429
|
+
: repoUnsupported
|
|
430
|
+
? "unsupported repo config version"
|
|
431
|
+
: "no valid repo config";
|
|
432
|
+
const fix = !home ? VAULT_INIT : repoUnsupported ? UPGRADE_GROUNDER : REPO_INIT;
|
|
228
433
|
checks.push(failCheck("notes-dir", `cannot resolve notes/ (${reason})`, fix));
|
|
229
434
|
checks.push(failCheck("logs-dir", `cannot resolve logs/ (${reason})`, fix));
|
|
435
|
+
checks.push(failCheck("plans-dir", `cannot resolve plans/ (${reason})`, fix));
|
|
230
436
|
}
|
|
231
437
|
else {
|
|
232
438
|
const notes = resolveNotesDir(home, repo);
|
|
233
439
|
const logs = resolveLogsDir(home, repo);
|
|
440
|
+
const plans = resolvePlansDir(home, repo);
|
|
441
|
+
// Missing layout dirs are warn, not fail: note/handoff/plan writers mkdir on first use.
|
|
234
442
|
checks.push((await isDirectory(notes))
|
|
235
443
|
? okCheck("notes-dir", `notes/ present (${notes})`)
|
|
236
|
-
:
|
|
444
|
+
: warnCheck("notes-dir", `notes/ missing (${notes})`, REPO_INIT));
|
|
237
445
|
checks.push((await isDirectory(logs))
|
|
238
446
|
? okCheck("logs-dir", `logs/ present (${logs})`)
|
|
239
|
-
:
|
|
447
|
+
: warnCheck("logs-dir", `logs/ missing (${logs})`, REPO_INIT));
|
|
448
|
+
checks.push((await isDirectory(plans))
|
|
449
|
+
? okCheck("plans-dir", `plans/ present (${plans})`)
|
|
450
|
+
: warnCheck("plans-dir", `plans/ missing (${plans})`, REPO_INIT));
|
|
240
451
|
}
|
|
241
452
|
}
|
|
242
453
|
if (!gitRoot) {
|
|
@@ -248,19 +459,26 @@ async function runProjectChecks(cwd, home) {
|
|
|
248
459
|
return checks;
|
|
249
460
|
}
|
|
250
461
|
export async function runDoctor(argv) {
|
|
462
|
+
const helpCode = helpExitCode(argv, "doctor");
|
|
463
|
+
if (helpCode !== null) {
|
|
464
|
+
return helpCode;
|
|
465
|
+
}
|
|
251
466
|
const { flags } = parseArgs(argv);
|
|
252
467
|
return runDoctorWithOptions({ global: flagBool(flags, "global") });
|
|
253
468
|
}
|
|
254
469
|
export async function runDoctorWithOptions(options = {}) {
|
|
255
470
|
return withHomeDir(options.homeDir, async () => {
|
|
256
471
|
const cwd = path.resolve(options.cwd ?? process.cwd());
|
|
257
|
-
const { checks: machineChecks, home } = await runMachineChecks(options.homeDir);
|
|
472
|
+
const { checks: machineChecks, state, stateReadable, home, } = await runMachineChecks(options.homeDir);
|
|
473
|
+
const agentChecks = await runAgentChecks(state, stateReadable, options.homeDir);
|
|
258
474
|
const projectChecks = options.global ? [] : await runProjectChecks(cwd, home);
|
|
259
|
-
const checks = [...machineChecks, ...projectChecks];
|
|
260
|
-
|
|
475
|
+
const checks = [...machineChecks, ...agentChecks, ...projectChecks];
|
|
476
|
+
writeChecks("Machine", machineChecks);
|
|
477
|
+
process.stdout.write("\n");
|
|
478
|
+
writeChecks("Agents", agentChecks);
|
|
261
479
|
if (!options.global) {
|
|
262
480
|
process.stdout.write("\n");
|
|
263
|
-
|
|
481
|
+
writeChecks("Project", projectChecks);
|
|
264
482
|
}
|
|
265
483
|
process.stdout.write("\n");
|
|
266
484
|
process.stdout.write(summarize(checks));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
export interface HandoffListOptions {
|
|
3
3
|
/** Directory used to find the linked repo (default: `process.cwd()`). */
|
|
4
4
|
cwd?: string;
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* Default list: max handoffs to print, newest first (default: 5).
|
|
7
|
+
* With `--head`: bounds the usable-handoff fallback scan only (not output count).
|
|
8
|
+
*/
|
|
6
9
|
limit?: number;
|
|
7
10
|
/**
|
|
8
11
|
* Print only the single newest *usable* handoff path (skips empty/unreadable
|
|
@@ -20,12 +23,17 @@ export interface HandoffListOptions {
|
|
|
20
23
|
*/
|
|
21
24
|
export declare function runHandoffList(argv: string[]): Promise<number>;
|
|
22
25
|
/**
|
|
23
|
-
* Resolves the linked project, lists recent
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
26
|
+
* Resolves the linked project, lists recent handoffs under `logs/` (newest first).
|
|
27
|
+
* Default: prints a count header (blank line after when non-empty), then each
|
|
28
|
+
* handoff as a numbered two-line block — `N. ` + full filename stem (including
|
|
29
|
+
* timestamp prefix), then the indented absolute path — separated by a blank
|
|
30
|
+
* line. The title line ends with two trailing spaces (a Markdown hard line
|
|
31
|
+
* break) so agents can relay stdout into chat and keep title and path on
|
|
32
|
+
* separate rendered lines. When `logs/` is empty, prints `No handoffs.` only.
|
|
33
|
+
* The number is positional within this listing only (not a stable identifier).
|
|
34
|
+
* With `head: true`, prints only the single newest *usable* handoff path (or
|
|
35
|
+
* empty stdout) — see {@link findUsableHandoff}. Same vault/link prerequisites
|
|
36
|
+
* as `grounder handoff`.
|
|
29
37
|
* @returns Exit code (`0` on success, `1` when vault/link is missing).
|
|
30
38
|
*/
|
|
31
39
|
export declare function runHandoffListWithOptions(options?: HandoffListOptions): Promise<number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/handoff/list.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/handoff/list.ts"],"names":[],"mappings":"AAWA,6EAA6E;AAC7E,MAAM,WAAW,kBAAkB;IACjC,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AASD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAgCpE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,yBAAyB,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBjG"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { withHomeDir } from "../../connector/home.js";
|
|
2
2
|
import { resolveLogsDir } from "../../connector/vault.js";
|
|
3
|
+
import { helpExitCode } from "../../help.js";
|
|
3
4
|
import { flagBool, parseArgs } from "../../util/parse-args.js";
|
|
4
5
|
import { findUsableHandoff } from "../../vault/find-usable-handoff.js";
|
|
5
6
|
import { listHandoffs } from "../../vault/list-handoffs.js";
|
|
7
|
+
import { writeVaultItemList } from "../output.js";
|
|
6
8
|
import { requireLinkedProject } from "../require-linked.js";
|
|
7
9
|
const DEFAULT_LIMIT = 5;
|
|
8
10
|
const USAGE = "Usage: grounder handoff list [--limit <n>] [--head]\n";
|
|
@@ -16,6 +18,10 @@ function usageError() {
|
|
|
16
18
|
* @returns Exit code (`0` on success, `1` on usage or config errors).
|
|
17
19
|
*/
|
|
18
20
|
export async function runHandoffList(argv) {
|
|
21
|
+
const helpCode = helpExitCode(argv, "handoff list");
|
|
22
|
+
if (helpCode !== null) {
|
|
23
|
+
return helpCode;
|
|
24
|
+
}
|
|
19
25
|
const { positional, flags } = parseArgs(argv);
|
|
20
26
|
if (positional.length > 0) {
|
|
21
27
|
return usageError();
|
|
@@ -41,12 +47,17 @@ export async function runHandoffList(argv) {
|
|
|
41
47
|
return runHandoffListWithOptions({ limit, head: flagBool(flags, "head") });
|
|
42
48
|
}
|
|
43
49
|
/**
|
|
44
|
-
* Resolves the linked project, lists recent
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
+
* Resolves the linked project, lists recent handoffs under `logs/` (newest first).
|
|
51
|
+
* Default: prints a count header (blank line after when non-empty), then each
|
|
52
|
+
* handoff as a numbered two-line block — `N. ` + full filename stem (including
|
|
53
|
+
* timestamp prefix), then the indented absolute path — separated by a blank
|
|
54
|
+
* line. The title line ends with two trailing spaces (a Markdown hard line
|
|
55
|
+
* break) so agents can relay stdout into chat and keep title and path on
|
|
56
|
+
* separate rendered lines. When `logs/` is empty, prints `No handoffs.` only.
|
|
57
|
+
* The number is positional within this listing only (not a stable identifier).
|
|
58
|
+
* With `head: true`, prints only the single newest *usable* handoff path (or
|
|
59
|
+
* empty stdout) — see {@link findUsableHandoff}. Same vault/link prerequisites
|
|
60
|
+
* as `grounder handoff`.
|
|
50
61
|
* @returns Exit code (`0` on success, `1` when vault/link is missing).
|
|
51
62
|
*/
|
|
52
63
|
export async function runHandoffListWithOptions(options = {}) {
|
|
@@ -55,20 +66,17 @@ export async function runHandoffListWithOptions(options = {}) {
|
|
|
55
66
|
if (!linked) {
|
|
56
67
|
return 1;
|
|
57
68
|
}
|
|
69
|
+
const limit = options.limit ?? DEFAULT_LIMIT;
|
|
58
70
|
const logsDir = resolveLogsDir(linked.home, linked.repo);
|
|
59
71
|
if (options.head) {
|
|
60
|
-
const usable = await findUsableHandoff(logsDir, { limit
|
|
72
|
+
const usable = await findUsableHandoff(logsDir, { limit });
|
|
61
73
|
if (usable) {
|
|
62
74
|
process.stdout.write(`${usable.path}\n`);
|
|
63
75
|
}
|
|
64
76
|
return 0;
|
|
65
77
|
}
|
|
66
|
-
const paths = await listHandoffs(logsDir, {
|
|
67
|
-
|
|
68
|
-
});
|
|
69
|
-
for (const filePath of paths) {
|
|
70
|
-
process.stdout.write(`${filePath}\n`);
|
|
71
|
-
}
|
|
78
|
+
const paths = await listHandoffs(logsDir, { limit });
|
|
79
|
+
writeVaultItemList(paths, limit, { singular: "handoff", plural: "handoffs" });
|
|
72
80
|
return 0;
|
|
73
81
|
});
|
|
74
82
|
}
|