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,150 @@
|
|
|
1
|
+
import { withHomeDir } from "../connector/home.js";
|
|
2
|
+
import { resolveLogsDir, resolveNotesDir, resolvePlansDir } from "../connector/vault.js";
|
|
3
|
+
import { helpExitCode } from "../help.js";
|
|
4
|
+
import { flagBool, parseArgs } from "../util/parse-args.js";
|
|
5
|
+
import { toFileUri, vaultRelativePath } from "../util/path.js";
|
|
6
|
+
import { listHandoffsDetailed } from "../vault/list-handoffs.js";
|
|
7
|
+
import { listNotesDetailed } from "../vault/list-notes.js";
|
|
8
|
+
import { listPlansDetailed } from "../vault/list-plans.js";
|
|
9
|
+
import { writeSection, writeVaultItemListEntries } from "./output.js";
|
|
10
|
+
import { requireLinkedProject } from "./require-linked.js";
|
|
11
|
+
const DEFAULT_LIMIT = 3;
|
|
12
|
+
const USAGE = "Usage: grounder overview [--limit <n>] [--markdown] [--json]\n";
|
|
13
|
+
function usageError() {
|
|
14
|
+
process.stderr.write(USAGE);
|
|
15
|
+
return 1;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* CLI entry for `grounder overview [--limit <n>] [--markdown] [--json]`.
|
|
19
|
+
* `--limit` must be a positive integer when provided.
|
|
20
|
+
* @returns Exit code (`0` on success, `1` on usage or config errors).
|
|
21
|
+
*/
|
|
22
|
+
export async function runOverview(argv) {
|
|
23
|
+
const helpCode = helpExitCode(argv, "overview");
|
|
24
|
+
if (helpCode !== null) {
|
|
25
|
+
return helpCode;
|
|
26
|
+
}
|
|
27
|
+
const { positional, flags } = parseArgs(argv);
|
|
28
|
+
if (positional.length > 0) {
|
|
29
|
+
return usageError();
|
|
30
|
+
}
|
|
31
|
+
for (const key of flags.keys()) {
|
|
32
|
+
if (key !== "limit" && key !== "markdown" && key !== "json") {
|
|
33
|
+
return usageError();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const markdown = flagBool(flags, "markdown");
|
|
37
|
+
const json = flagBool(flags, "json");
|
|
38
|
+
if (markdown && json) {
|
|
39
|
+
process.stderr.write("Use only one of --markdown or --json.\n");
|
|
40
|
+
return 1;
|
|
41
|
+
}
|
|
42
|
+
const limitRaw = flags.get("limit");
|
|
43
|
+
let limit = DEFAULT_LIMIT;
|
|
44
|
+
if (limitRaw !== undefined) {
|
|
45
|
+
if (typeof limitRaw !== "string") {
|
|
46
|
+
return usageError();
|
|
47
|
+
}
|
|
48
|
+
const trimmed = limitRaw.trim();
|
|
49
|
+
const parsed = Number.parseInt(trimmed, 10);
|
|
50
|
+
if (!/^\d+$/.test(trimmed) || Number.isNaN(parsed) || parsed < 1) {
|
|
51
|
+
return usageError();
|
|
52
|
+
}
|
|
53
|
+
limit = parsed;
|
|
54
|
+
}
|
|
55
|
+
return runOverviewWithOptions({ limit, markdown, json });
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Lists a bucket uncapped (each lister already builds this full sorted array
|
|
59
|
+
* internally before slicing, so this costs no extra traversal) and slices
|
|
60
|
+
* locally — giving `--json` an honest `total` instead of reporting the
|
|
61
|
+
* shown-count twice under different names.
|
|
62
|
+
*/
|
|
63
|
+
async function gatherBucket(dir, noun, title, limit, lister) {
|
|
64
|
+
const all = await lister(dir);
|
|
65
|
+
return { dir, noun, title, all, shown: all.slice(0, limit) };
|
|
66
|
+
}
|
|
67
|
+
function jsonBucket(bucket) {
|
|
68
|
+
return {
|
|
69
|
+
total: bucket.all.length,
|
|
70
|
+
count: bucket.shown.length,
|
|
71
|
+
truncated: bucket.all.length > bucket.shown.length,
|
|
72
|
+
items: bucket.shown.map((entry) => ({
|
|
73
|
+
path: entry.path,
|
|
74
|
+
relativePath: vaultRelativePath(bucket.dir, entry.path),
|
|
75
|
+
fileUri: toFileUri(entry.path),
|
|
76
|
+
mtimeMs: entry.mtimeMs,
|
|
77
|
+
})),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Header line for one bucket's text/markdown section. Unlike the shared
|
|
82
|
+
* `note`/`handoff`/`plan list` header (`writeVaultItemList`'s
|
|
83
|
+
* `count === limit` → "there may be more" guess), overview already has the
|
|
84
|
+
* true total for free (see {@link gatherBucket}), so it reports an exact
|
|
85
|
+
* "N of M" instead of a maybe — the `--markdown` skill path relays this
|
|
86
|
+
* straight to the agent, where an honest count matters more than terseness.
|
|
87
|
+
*/
|
|
88
|
+
function bucketHeader(bucket) {
|
|
89
|
+
const total = bucket.all.length;
|
|
90
|
+
const shown = bucket.shown.length;
|
|
91
|
+
if (total === 0) {
|
|
92
|
+
return `No ${bucket.noun.plural}.\n`;
|
|
93
|
+
}
|
|
94
|
+
if (shown === total) {
|
|
95
|
+
const label = total === 1 ? bucket.noun.singular : bucket.noun.plural;
|
|
96
|
+
return `All ${total} ${label}:\n\n`;
|
|
97
|
+
}
|
|
98
|
+
return `Most recent ${shown} of ${total} ${bucket.noun.plural}:\n\n`;
|
|
99
|
+
}
|
|
100
|
+
function writeTextOutput(buckets, markdown) {
|
|
101
|
+
buckets.forEach((bucket, index) => {
|
|
102
|
+
if (index > 0) {
|
|
103
|
+
process.stdout.write("\n");
|
|
104
|
+
}
|
|
105
|
+
writeSection(bucket.title);
|
|
106
|
+
process.stdout.write(bucketHeader(bucket));
|
|
107
|
+
writeVaultItemListEntries(bucket.shown.map((entry) => entry.path), { markdown, titleRootDir: bucket.dir });
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
function writeJsonOutput(buckets) {
|
|
111
|
+
const payload = {};
|
|
112
|
+
for (const bucket of buckets) {
|
|
113
|
+
payload[bucket.noun.plural] = jsonBucket(bucket);
|
|
114
|
+
}
|
|
115
|
+
process.stdout.write(`${JSON.stringify(payload)}\n`);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Resolves the linked project, gathers a per-bucket count + capped recent
|
|
119
|
+
* titles across `notes/`, `logs/` (handoffs), and `plans/` — the same
|
|
120
|
+
* newest-first listings `note/handoff/plan list` use, in one call. `--json`
|
|
121
|
+
* items also include `mtimeMs` (the same on-disk mtime each lister already
|
|
122
|
+
* fetches to rank entries; see `listNotesDetailed` / `listHandoffsDetailed` /
|
|
123
|
+
* `listPlansDetailed`). Text and markdown stay title + path only.
|
|
124
|
+
* @returns Exit code (`0` on success, `1` when vault/link is missing).
|
|
125
|
+
*/
|
|
126
|
+
export async function runOverviewWithOptions(options = {}) {
|
|
127
|
+
return withHomeDir(options.homeDir, async () => {
|
|
128
|
+
const linked = await requireLinkedProject(options.cwd ?? process.cwd());
|
|
129
|
+
if (!linked) {
|
|
130
|
+
return 1;
|
|
131
|
+
}
|
|
132
|
+
const limit = options.limit ?? DEFAULT_LIMIT;
|
|
133
|
+
const notesDir = resolveNotesDir(linked.home, linked.repo);
|
|
134
|
+
const logsDir = resolveLogsDir(linked.home, linked.repo);
|
|
135
|
+
const plansDir = resolvePlansDir(linked.home, linked.repo);
|
|
136
|
+
const buckets = await Promise.all([
|
|
137
|
+
gatherBucket(notesDir, { singular: "note", plural: "notes" }, "Notes", limit, listNotesDetailed),
|
|
138
|
+
gatherBucket(logsDir, { singular: "handoff", plural: "handoffs" }, "Handoffs", limit, listHandoffsDetailed),
|
|
139
|
+
gatherBucket(plansDir, { singular: "plan", plural: "plans" }, "Plans", limit, listPlansDetailed),
|
|
140
|
+
]);
|
|
141
|
+
if (options.json) {
|
|
142
|
+
writeJsonOutput(buckets);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
writeTextOutput(buckets, options.markdown === true);
|
|
146
|
+
}
|
|
147
|
+
return 0;
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=overview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overview.js","sourceRoot":"","sources":["../../src/commands/overview.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,27 +4,35 @@ export interface PlanListOptions {
|
|
|
4
4
|
cwd?: string;
|
|
5
5
|
/** Max plans to print, newest first (default: 5). */
|
|
6
6
|
limit?: number;
|
|
7
|
+
/**
|
|
8
|
+
* Agent relay: `[bucketRelativePath](fileUri)` on the title line (default:
|
|
9
|
+
* plain bucket-relative stem path). Absolute path stays indented beneath
|
|
10
|
+
* either way.
|
|
11
|
+
*/
|
|
12
|
+
markdown?: boolean;
|
|
7
13
|
/** Override home dir / `GROUNDER_HOME` (tests). */
|
|
8
14
|
homeDir?: string;
|
|
9
15
|
}
|
|
10
16
|
/**
|
|
11
|
-
* CLI entry for `grounder plan list [--limit <n>]`.
|
|
17
|
+
* CLI entry for `grounder plan list [--limit <n>] [--markdown]`.
|
|
12
18
|
* `--limit` must be a positive integer when provided.
|
|
13
19
|
* @returns Exit code (`0` on success, `1` on usage or config errors).
|
|
14
20
|
*/
|
|
15
21
|
export declare function runPlanList(argv: string[]): Promise<number>;
|
|
16
22
|
/**
|
|
17
|
-
* Resolves the linked project, lists recent plans under `plans/`
|
|
18
|
-
* Prints a count header (blank line after when non-empty), then
|
|
19
|
-
* numbered two-line block — `N. ` +
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
23
|
+
* Resolves the linked project, lists recent plans under `plans/` recursively
|
|
24
|
+
* (newest first). Prints a count header (blank line after when non-empty), then
|
|
25
|
+
* each plan as a numbered two-line block — `N. ` + bucket-relative stem path
|
|
26
|
+
* (nested files include subfolders), then the indented absolute path —
|
|
27
|
+
* separated by a blank line. With `markdown: true`, the title line is
|
|
28
|
+
* `[bucketRelativePath](fileUri)` under `plans/` (`.md` kept; no `plans/`
|
|
29
|
+
* prefix). The title line ends with two trailing spaces (a Markdown hard line
|
|
30
|
+
* break) so agents can relay stdout into chat and keep title and path on
|
|
31
|
+
* separate rendered lines. When `plans/` is empty, prints `No plans.` only. The
|
|
32
|
+
* number is positional within this listing only (not a stable identifier — a
|
|
33
|
+
* later `plan list` call may renumber if plans change) and exists purely so a
|
|
34
|
+
* human or agent can refer to "plan 2" in the same conversation without
|
|
35
|
+
* retyping the path. Same vault/link prerequisites as `grounder plan`.
|
|
28
36
|
* @returns Exit code (`0` on success, `1` when vault/link is missing).
|
|
29
37
|
*/
|
|
30
38
|
export declare function runPlanListWithOptions(options?: PlanListOptions): Promise<number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/plan/list.ts"],"names":[],"mappings":"AAUA,0EAA0E;AAC1E,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AASD;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAgCjE;AAED
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/plan/list.ts"],"names":[],"mappings":"AAUA,0EAA0E;AAC1E,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AASD;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAgCjE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqB3F"}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { withHomeDir } from "../../connector/home.js";
|
|
2
2
|
import { resolvePlansDir } from "../../connector/vault.js";
|
|
3
3
|
import { helpExitCode } from "../../help.js";
|
|
4
|
-
import { parseArgs } from "../../util/parse-args.js";
|
|
4
|
+
import { flagBool, parseArgs } from "../../util/parse-args.js";
|
|
5
5
|
import { listPlans } from "../../vault/list-plans.js";
|
|
6
6
|
import { writeVaultItemList } from "../output.js";
|
|
7
7
|
import { requireLinkedProject } from "../require-linked.js";
|
|
8
8
|
const DEFAULT_LIMIT = 5;
|
|
9
|
-
const USAGE = "Usage: grounder plan list [--limit <n>]\n";
|
|
9
|
+
const USAGE = "Usage: grounder plan list [--limit <n>] [--markdown]\n";
|
|
10
10
|
function usageError() {
|
|
11
11
|
process.stderr.write(USAGE);
|
|
12
12
|
return 1;
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
|
-
* CLI entry for `grounder plan list [--limit <n>]`.
|
|
15
|
+
* CLI entry for `grounder plan list [--limit <n>] [--markdown]`.
|
|
16
16
|
* `--limit` must be a positive integer when provided.
|
|
17
17
|
* @returns Exit code (`0` on success, `1` on usage or config errors).
|
|
18
18
|
*/
|
|
@@ -26,7 +26,7 @@ export async function runPlanList(argv) {
|
|
|
26
26
|
return usageError();
|
|
27
27
|
}
|
|
28
28
|
for (const key of flags.keys()) {
|
|
29
|
-
if (key !== "limit") {
|
|
29
|
+
if (key !== "limit" && key !== "markdown") {
|
|
30
30
|
return usageError();
|
|
31
31
|
}
|
|
32
32
|
}
|
|
@@ -43,20 +43,22 @@ export async function runPlanList(argv) {
|
|
|
43
43
|
}
|
|
44
44
|
limit = parsed;
|
|
45
45
|
}
|
|
46
|
-
return runPlanListWithOptions({ limit });
|
|
46
|
+
return runPlanListWithOptions({ limit, markdown: flagBool(flags, "markdown") });
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
49
|
-
* Resolves the linked project, lists recent plans under `plans/`
|
|
50
|
-
* Prints a count header (blank line after when non-empty), then
|
|
51
|
-
* numbered two-line block — `N. ` +
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
49
|
+
* Resolves the linked project, lists recent plans under `plans/` recursively
|
|
50
|
+
* (newest first). Prints a count header (blank line after when non-empty), then
|
|
51
|
+
* each plan as a numbered two-line block — `N. ` + bucket-relative stem path
|
|
52
|
+
* (nested files include subfolders), then the indented absolute path —
|
|
53
|
+
* separated by a blank line. With `markdown: true`, the title line is
|
|
54
|
+
* `[bucketRelativePath](fileUri)` under `plans/` (`.md` kept; no `plans/`
|
|
55
|
+
* prefix). The title line ends with two trailing spaces (a Markdown hard line
|
|
56
|
+
* break) so agents can relay stdout into chat and keep title and path on
|
|
57
|
+
* separate rendered lines. When `plans/` is empty, prints `No plans.` only. The
|
|
58
|
+
* number is positional within this listing only (not a stable identifier — a
|
|
59
|
+
* later `plan list` call may renumber if plans change) and exists purely so a
|
|
60
|
+
* human or agent can refer to "plan 2" in the same conversation without
|
|
61
|
+
* retyping the path. Same vault/link prerequisites as `grounder plan`.
|
|
60
62
|
* @returns Exit code (`0` on success, `1` when vault/link is missing).
|
|
61
63
|
*/
|
|
62
64
|
export async function runPlanListWithOptions(options = {}) {
|
|
@@ -68,7 +70,10 @@ export async function runPlanListWithOptions(options = {}) {
|
|
|
68
70
|
const limit = options.limit ?? DEFAULT_LIMIT;
|
|
69
71
|
const plansDir = resolvePlansDir(linked.home, linked.repo);
|
|
70
72
|
const paths = await listPlans(plansDir, { limit });
|
|
71
|
-
writeVaultItemList(paths, limit, { singular: "plan", plural: "plans" }
|
|
73
|
+
writeVaultItemList(paths, limit, { singular: "plan", plural: "plans" }, {
|
|
74
|
+
markdown: options.markdown === true,
|
|
75
|
+
titleRootDir: plansDir,
|
|
76
|
+
});
|
|
72
77
|
return 0;
|
|
73
78
|
});
|
|
74
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/plan/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/plan/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,aAAa,GAAG,CAAC,CAAC;AAkBxB,MAAM,KAAK,GAAG,wDAAwD,CAAC;AAEvE,SAAS,UAAU;IACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc;IAC9C,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACjD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,UAAU,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/B,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YAC1C,OAAO,UAAU,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,KAAK,GAAG,aAAa,CAAC;IAC1B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,UAAU,EAAE,CAAC;QACtB,CAAC;QACD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACjE,OAAO,UAAU,EAAE,CAAC;QACtB,CAAC;QACD,KAAK,GAAG,MAAM,CAAC;IACjB,CAAC;IAED,OAAO,sBAAsB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;AAClF,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,UAA2B,EAAE;IACxE,OAAO,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,aAAa,CAAC;QAC7C,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACnD,kBAAkB,CAChB,KAAK,EACL,KAAK,EACL,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EACrC;YACE,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,IAAI;YACnC,YAAY,EAAE,QAAQ;SACvB,CACF,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/commands/plan.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ export interface PlanOptions {
|
|
|
13
13
|
planPath?: string;
|
|
14
14
|
/** When true, overwrite an existing plan (preserving original `created`). */
|
|
15
15
|
force?: boolean;
|
|
16
|
+
/** Topic keywords for search (`--topics "auth,jwt,middleware"`). */
|
|
17
|
+
topics?: string[];
|
|
16
18
|
/** Override home dir / `GROUNDER_HOME` (tests). */
|
|
17
19
|
homeDir?: string;
|
|
18
20
|
/** Fixed clock for deterministic `created` / `updated` (tests). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAeA,sEAAsE;AACtE,MAAM,WAAW,WAAW;IAC1B,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAeA,sEAAsE;AACtE,MAAM,WAAW,WAAW;IAC1B,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA6B7D;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA4C9E"}
|
package/dist/commands/plan.js
CHANGED
|
@@ -8,8 +8,8 @@ import { isPathInside, isRealPathInside, resolveUserPath } from "../util/path.js
|
|
|
8
8
|
import { sanitizePlanName } from "../util/plan-name.js";
|
|
9
9
|
import { updatePlanAtPath, writePlan } from "../vault/write-plan.js";
|
|
10
10
|
import { requireLinkedProject } from "./require-linked.js";
|
|
11
|
-
const USAGE = "Usage: grounder plan <text> --title <name> [--force]\n" +
|
|
12
|
-
" or: grounder plan <text> --path <file>";
|
|
11
|
+
const USAGE = "Usage: grounder plan <text> --title <name> [--force] [--topics <list>]\n" +
|
|
12
|
+
" or: grounder plan <text> --path <file> [--topics <list>]";
|
|
13
13
|
/**
|
|
14
14
|
* CLI entry for `grounder plan <text> (--title <name> [--force] | --path <file>)`.
|
|
15
15
|
* @returns Exit code (`0` on success, `1` on usage or config errors).
|
|
@@ -25,11 +25,19 @@ export async function runPlan(argv) {
|
|
|
25
25
|
process.stderr.write(`${USAGE}\n`);
|
|
26
26
|
return 1;
|
|
27
27
|
}
|
|
28
|
+
const topicsRaw = flagString(flags, "topics");
|
|
29
|
+
const topics = topicsRaw
|
|
30
|
+
? topicsRaw
|
|
31
|
+
.split(",")
|
|
32
|
+
.map((t) => t.trim())
|
|
33
|
+
.filter(Boolean)
|
|
34
|
+
: undefined;
|
|
28
35
|
return runPlanWithOptions({
|
|
29
36
|
text,
|
|
30
37
|
title: flagString(flags, "title"),
|
|
31
38
|
planPath: flagString(flags, "path"),
|
|
32
39
|
force: flagBool(flags, "force"),
|
|
40
|
+
topics,
|
|
33
41
|
});
|
|
34
42
|
}
|
|
35
43
|
/**
|
|
@@ -79,6 +87,7 @@ async function writeByTitle(plansDir, projectId, name, options) {
|
|
|
79
87
|
const result = await writePlan(plansDir, name, options.text, {
|
|
80
88
|
projectId,
|
|
81
89
|
force: options.force,
|
|
90
|
+
topics: options.topics,
|
|
82
91
|
now: options.now,
|
|
83
92
|
});
|
|
84
93
|
if (result.status === "exists") {
|
|
@@ -113,6 +122,7 @@ async function updateByPath(plansDir, projectId, options) {
|
|
|
113
122
|
}
|
|
114
123
|
const result = await updatePlanAtPath(filePath, options.text, {
|
|
115
124
|
projectId,
|
|
125
|
+
topics: options.topics,
|
|
116
126
|
now: options.now,
|
|
117
127
|
});
|
|
118
128
|
process.stdout.write(`Updated ${result.path}\n`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,KAAK,GACT,
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { ArtifactStatus } from "../agents/types.js";
|
|
2
|
+
import type { GrounderState } from "../connector/state.js";
|
|
3
|
+
import type { PlanAction, PlanEntry } from "../reconcile/core.js";
|
|
4
|
+
import type { ApplyAgentInstallsResult } from "./apply.js";
|
|
5
|
+
/** A row's plan status, independent of tense — "current" never changes wording; the
|
|
6
|
+
* others are rendered as an infinitive in a dry run and past tense in a real one. */
|
|
7
|
+
export type RowStatus = "current" | "create" | "update" | "delete" | "forget" | "modified";
|
|
8
|
+
export interface Row {
|
|
9
|
+
status: RowStatus;
|
|
10
|
+
target: string;
|
|
11
|
+
path: string;
|
|
12
|
+
/** Only meaningful when `status === "modified"` — what `--force` would do to this path. */
|
|
13
|
+
forceAction?: "overwrite" | "delete";
|
|
14
|
+
}
|
|
15
|
+
/** For hook/runtime rows, still reported via the old imperative `ArtifactStatus` shape. */
|
|
16
|
+
export declare function toRowStatus(status: ArtifactStatus): RowStatus;
|
|
17
|
+
/**
|
|
18
|
+
* Whole-file artifact rows come straight from the reconciler's own plan
|
|
19
|
+
* vocabulary. `forget` gets its own status, distinct from `noop`'s
|
|
20
|
+
* "current" — a forget entry always changes `state.json` (see
|
|
21
|
+
* `planChangesLedger`), even though it never touches the file itself, so
|
|
22
|
+
* folding it into "current"/"unchanged" would hide the one row that explains
|
|
23
|
+
* why the trailing state row says "updated".
|
|
24
|
+
*/
|
|
25
|
+
export declare function rowStatusFromPlanAction(action: PlanAction): RowStatus;
|
|
26
|
+
export declare function rowFromPlanEntry(target: string, entry: PlanEntry): Row;
|
|
27
|
+
export declare const VERB: Record<RowStatus, {
|
|
28
|
+
dry: string;
|
|
29
|
+
real: string;
|
|
30
|
+
}>;
|
|
31
|
+
/**
|
|
32
|
+
* Table cell label per status — the same word in dry-run and real, so the
|
|
33
|
+
* table asserts one outcome vocabulary instead of reconjugating per row
|
|
34
|
+
* (matching `kubectl apply`'s created/configured/unchanged). Dry-run-ness is
|
|
35
|
+
* already announced once above the table and in the summary sentence, which
|
|
36
|
+
* keeps its own tense (`VERB` above) since "would create" is a sentence
|
|
37
|
+
* construction, not a table cell.
|
|
38
|
+
*
|
|
39
|
+
* `modified` is deliberately not "modified" here: that word would read as
|
|
40
|
+
* Grounder having modified the file, when the row means the opposite — a
|
|
41
|
+
* local edit was found and Grounder left it untouched. "conflict" names that
|
|
42
|
+
* outcome without implying an action was taken (see the STATUS header below,
|
|
43
|
+
* not ACTION, for the same reason).
|
|
44
|
+
*
|
|
45
|
+
* `forget` is deliberately not "unchanged" here, even though the file itself
|
|
46
|
+
* is untouched: the ledger entry for it is dropped, which is exactly the
|
|
47
|
+
* "updated" the trailing state row reports — collapsing it into "unchanged"
|
|
48
|
+
* would leave that state-row change unexplained by any visible row.
|
|
49
|
+
*/
|
|
50
|
+
export declare const TABLE_LABEL: Record<RowStatus, string>;
|
|
51
|
+
/**
|
|
52
|
+
* Runtime + per-agent whole-file/hook rows shared by `setup` and `migrate` —
|
|
53
|
+
* both callers add the trailing state/ledger row on top since that isn't
|
|
54
|
+
* part of `applyAgentInstalls`'s result. Tombstone retirement is already
|
|
55
|
+
* folded into each agent's own `plan`, so it lands right after that agent's
|
|
56
|
+
* own artifact rows with no separate grouping step needed.
|
|
57
|
+
*/
|
|
58
|
+
export declare function rowsFromApplyResult(applyResult: ApplyAgentInstallsResult): Row[];
|
|
59
|
+
/**
|
|
60
|
+
* The trailing `state` row both `setup` and `migrate` append — same
|
|
61
|
+
* create/update/current rule either way, so the two callers can't drift on
|
|
62
|
+
* how a ledger write is reported. `ledgerChanged` is each caller's own
|
|
63
|
+
* computation; this only owns turning that bit plus prior-state nullness
|
|
64
|
+
* into a `Row`.
|
|
65
|
+
*/
|
|
66
|
+
export declare function stateRow(ledgerChanged: boolean, priorState: GrounderState | null, path: string): Row;
|
|
67
|
+
export declare function plural(count: number, noun: string): string;
|
|
68
|
+
export declare function renderTable(rows: Row[]): void;
|
|
69
|
+
export declare function renderSummary(rows: Row[], dryRun: boolean): void;
|
|
70
|
+
/**
|
|
71
|
+
* Per-agent hook failures `applyAgentInstalls` isolated (see
|
|
72
|
+
* `AgentApplyResult#error`) — printed after the table/summary so a failing
|
|
73
|
+
* agent's hook error doesn't obscure whether other agents (or this agent's
|
|
74
|
+
* own whole-file artifacts, already applied by this point) succeeded.
|
|
75
|
+
*/
|
|
76
|
+
export declare function renderAgentErrors(applyResult: ApplyAgentInstallsResult): void;
|
|
77
|
+
/**
|
|
78
|
+
* @param forceCommand The command line (without `--force`) the reader should
|
|
79
|
+
* re-run to resolve conflicts. Both `setup` and `migrate` pass `"grounder
|
|
80
|
+
* migrate"` today — `setup --force` applies just as well, but pointing every
|
|
81
|
+
* conflict at one canonical command keeps the remediation message the same
|
|
82
|
+
* regardless of which command surfaced the conflict.
|
|
83
|
+
*/
|
|
84
|
+
export declare function renderModifiedNote(rows: Row[], forceCommand: string): void;
|
|
85
|
+
//# sourceMappingURL=render-artifact-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-artifact-table.d.ts","sourceRoot":"","sources":["../../src/commands/render-artifact-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D;qFACqF;AACrF,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE3F,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,2FAA2F;IAC3F,WAAW,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;CACtC;AAED,2FAA2F;AAC3F,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,CAS7D;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAerE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,GAAG,CAOtE;AAED,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAOjE,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAOjD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,wBAAwB,GAAG,GAAG,EAAE,CA8BhF;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,aAAa,EAAE,OAAO,EACtB,UAAU,EAAE,aAAa,GAAG,IAAI,EAChC,IAAI,EAAE,MAAM,GACX,GAAG,CAGL;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAW7C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CA4DhE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,wBAAwB,GAAG,IAAI,CAa7E;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAuB1E"}
|