grounder 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -20
- package/dist/agents/claude.d.ts +4 -4
- package/dist/agents/claude.d.ts.map +1 -1
- package/dist/agents/claude.js +158 -179
- 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 -144
- 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 +77 -10
- package/dist/agents/hook-runtime.d.ts.map +1 -1
- package/dist/agents/hook-runtime.js +274 -70
- 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 +4 -0
- 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 +190 -97
- package/dist/commands/doctor.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/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/migrate.d.ts +11 -3
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +67 -33
- package/dist/commands/migrate.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/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/search.d.ts.map +1 -1
- package/dist/commands/search.js +15 -4
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +86 -13
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +269 -88
- package/dist/commands/status.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 +96 -59
- 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/help.d.ts +1 -1
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +27 -5
- 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/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/vault/list-handoffs.d.ts +13 -3
- package/dist/vault/list-handoffs.d.ts.map +1 -1
- package/dist/vault/list-handoffs.js +28 -13
- package/dist/vault/list-handoffs.js.map +1 -1
- package/dist/vault/list-notes.d.ts +12 -3
- package/dist/vault/list-notes.d.ts.map +1 -1
- package/dist/vault/list-notes.js +13 -7
- 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 +13 -7
- package/dist/vault/list-plans.js.map +1 -1
- package/dist/vault/search.d.ts.map +1 -1
- package/dist/vault/search.js +128 -24
- package/dist/vault/search.js.map +1 -1
- package/package.json +2 -2
- package/templates/agents/claude/skills/grounder-handoff/SKILL.md +73 -0
- package/templates/agents/claude/{commands/grounder-note.md → skills/grounder-note/SKILL.md} +6 -0
- package/templates/agents/claude/skills/grounder-overview/SKILL.md +21 -0
- package/templates/agents/claude/{commands/grounder-plan.md → skills/grounder-plan/SKILL.md} +6 -0
- package/templates/agents/claude/skills/grounder-recall/SKILL.md +34 -0
- package/templates/agents/claude/{commands/grounder-search.md → skills/grounder-search/SKILL.md} +16 -8
- package/templates/agents/cursor/skills/grounder-handoff/SKILL.md +73 -0
- package/templates/agents/cursor/{commands/grounder-note.md → skills/grounder-note/SKILL.md} +6 -0
- package/templates/agents/cursor/skills/grounder-overview/SKILL.md +21 -0
- package/templates/agents/cursor/{commands/grounder-plan.md → skills/grounder-plan/SKILL.md} +6 -0
- package/templates/agents/cursor/skills/grounder-recall/SKILL.md +34 -0
- package/templates/agents/cursor/{commands/grounder-search.md → skills/grounder-search/SKILL.md} +16 -8
- 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/templates/agents/claude/commands/grounder-task-handoff.md +0 -58
- package/templates/agents/claude/commands/grounder-task.md +0 -22
- package/templates/agents/cursor/commands/grounder-task-handoff.md +0 -58
- package/templates/agents/cursor/commands/grounder-task.md +0 -22
package/dist/commands/status.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
|
-
import { ALL_AGENTS } from "../agents/index.js";
|
|
3
2
|
import { currentBranch, findGitRoot } from "../connector/git.js";
|
|
4
3
|
import { homeConfigPath, readHomeConfig, withHomeDir } from "../connector/home.js";
|
|
5
4
|
import { findLinkedRepoRoot, readRepoConfig, repoConfigPath, } from "../connector/repo.js";
|
|
6
|
-
import {
|
|
5
|
+
import { readGrounderState, statePath } from "../connector/state.js";
|
|
7
6
|
import { isUnsupportedSchemaError } from "../connector/unsupported-schema.js";
|
|
8
7
|
import { resolveLogsDir, resolveNotesDir, resolvePlansDir, resolveProjectVaultRoot, resolveVaultRoot, } from "../connector/vault.js";
|
|
9
8
|
import { helpExitCode } from "../help.js";
|
|
10
9
|
import { VERSION } from "../index.js";
|
|
10
|
+
import { flagBool, parseArgs } from "../util/parse-args.js";
|
|
11
|
+
import { installDriftDetected } from "./install-drift.js";
|
|
11
12
|
import { writeSection } from "./output.js";
|
|
12
13
|
import { packageVersionNotice } from "./package-version-notice.js";
|
|
13
14
|
const LABEL_WIDTH = 12;
|
|
@@ -17,32 +18,13 @@ const REPO_INIT_FORCE = "grounder link --force";
|
|
|
17
18
|
const MIGRATE = "grounder migrate";
|
|
18
19
|
const MIGRATE_FORCE = "grounder migrate --force";
|
|
19
20
|
const UPGRADE_GROUNDER = "upgrade grounder";
|
|
21
|
+
const USAGE = "Usage: grounder status [--json]\n";
|
|
20
22
|
function statusLine(label, value) {
|
|
21
23
|
return ` ${label.padEnd(LABEL_WIDTH)}${value}\n`;
|
|
22
24
|
}
|
|
23
|
-
/**
|
|
24
|
-
* `findLinkedRepoRoot` walks up to the nearest `.grounder.json`, so a
|
|
25
|
-
* subdirectory of a linked repo inherits that link. Surface it explicitly
|
|
26
|
-
* when `linkedRoot` isn't `cwd` itself, so callers (agents included) don't
|
|
27
|
-
* mistake an ancestor's link for this exact folder being linked.
|
|
28
|
-
*/
|
|
29
|
-
function writeAncestorNoteIfAny(cwd, linkedRoot) {
|
|
30
|
-
if (linkedRoot === cwd) {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
process.stdout.write(statusLine("Note:", `linked ancestor — ${cwd} itself is unlinked; grounder link here would create a separate project`));
|
|
34
|
-
}
|
|
35
25
|
function errorDetail(error) {
|
|
36
26
|
return error instanceof Error ? error.message : String(error);
|
|
37
27
|
}
|
|
38
|
-
async function writeGitLine(gitRoot) {
|
|
39
|
-
if (!gitRoot) {
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
const branch = await currentBranch(gitRoot);
|
|
43
|
-
const gitValue = branch !== undefined ? `${gitRoot} (branch: ${branch})` : gitRoot;
|
|
44
|
-
process.stdout.write(statusLine("Git:", gitValue));
|
|
45
|
-
}
|
|
46
28
|
async function tryReadHome() {
|
|
47
29
|
try {
|
|
48
30
|
return { home: await readHomeConfig(), invalid: null };
|
|
@@ -63,91 +45,290 @@ async function tryReadRepo(linkedRoot) {
|
|
|
63
45
|
};
|
|
64
46
|
}
|
|
65
47
|
}
|
|
66
|
-
async function
|
|
48
|
+
async function gatherStateInfo(homeDir) {
|
|
67
49
|
try {
|
|
68
50
|
const state = await readGrounderState(homeDir);
|
|
69
51
|
if (!state) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
process.stdout.write(statusLine("Package:", packageNotice.status));
|
|
77
|
-
}
|
|
78
|
-
if (isInstallSchemaStale(state, ALL_AGENTS)) {
|
|
79
|
-
process.stdout.write(statusLine("Schemas:", `ledger stale → ${MIGRATE}`));
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
process.stdout.write(statusLine("Schemas:", "current"));
|
|
52
|
+
return {
|
|
53
|
+
path: statePath(homeDir),
|
|
54
|
+
status: "missing",
|
|
55
|
+
packageNotice: null,
|
|
56
|
+
installCurrent: null,
|
|
57
|
+
};
|
|
83
58
|
}
|
|
59
|
+
const notice = packageVersionNotice(VERSION, state.grounderVersion);
|
|
60
|
+
const drift = await installDriftDetected(state, homeDir);
|
|
61
|
+
return {
|
|
62
|
+
path: statePath(homeDir),
|
|
63
|
+
status: "ok",
|
|
64
|
+
packageNotice: notice,
|
|
65
|
+
installCurrent: !drift,
|
|
66
|
+
};
|
|
84
67
|
}
|
|
85
|
-
catch {
|
|
68
|
+
catch (error) {
|
|
69
|
+
return {
|
|
70
|
+
path: statePath(homeDir),
|
|
71
|
+
status: isUnsupportedSchemaError(error) ? "unsupported" : "invalid",
|
|
72
|
+
packageNotice: null,
|
|
73
|
+
installCurrent: null,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function gatherMachine(homeInvalid, home, homeDir) {
|
|
78
|
+
const configPath = homeConfigPath(homeDir);
|
|
79
|
+
if (homeInvalid) {
|
|
80
|
+
return { configPath, configState: "invalid", vaultRoot: null, state: null };
|
|
81
|
+
}
|
|
82
|
+
if (!home) {
|
|
83
|
+
return { configPath, configState: "missing", vaultRoot: null, state: null };
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
configPath,
|
|
87
|
+
configState: "ok",
|
|
88
|
+
vaultRoot: resolveVaultRoot(home),
|
|
89
|
+
state: await gatherStateInfo(homeDir),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
async function gatherGit(gitRoot) {
|
|
93
|
+
if (!gitRoot) {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
const branch = await currentBranch(gitRoot);
|
|
97
|
+
return { root: gitRoot, branch: branch ?? null };
|
|
98
|
+
}
|
|
99
|
+
async function gatherProject(params) {
|
|
100
|
+
const { cwd, gitRoot, linkedRoot, repo, repoInvalid, repoUnsupported, home } = params;
|
|
101
|
+
if (!linkedRoot) {
|
|
102
|
+
return {
|
|
103
|
+
linked: false,
|
|
104
|
+
folder: null,
|
|
105
|
+
isAncestorLink: false,
|
|
106
|
+
configPath: null,
|
|
107
|
+
configState: "missing",
|
|
108
|
+
projectId: null,
|
|
109
|
+
vaultRoot: null,
|
|
110
|
+
notesDir: null,
|
|
111
|
+
logsDir: null,
|
|
112
|
+
plansDir: null,
|
|
113
|
+
git: null,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
const git = await gatherGit(gitRoot);
|
|
117
|
+
const isAncestorLink = linkedRoot !== cwd;
|
|
118
|
+
const configPath = repoConfigPath(linkedRoot);
|
|
119
|
+
if (repoInvalid || !repo) {
|
|
120
|
+
const configState = repoUnsupported
|
|
121
|
+
? "unsupported"
|
|
122
|
+
: repoInvalid
|
|
123
|
+
? "invalid"
|
|
124
|
+
: "missing";
|
|
125
|
+
return {
|
|
126
|
+
linked: true,
|
|
127
|
+
folder: linkedRoot,
|
|
128
|
+
isAncestorLink,
|
|
129
|
+
configPath,
|
|
130
|
+
configState,
|
|
131
|
+
projectId: null,
|
|
132
|
+
vaultRoot: null,
|
|
133
|
+
notesDir: null,
|
|
134
|
+
logsDir: null,
|
|
135
|
+
plansDir: null,
|
|
136
|
+
git,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
linked: true,
|
|
141
|
+
folder: linkedRoot,
|
|
142
|
+
isAncestorLink,
|
|
143
|
+
configPath,
|
|
144
|
+
configState: "ok",
|
|
145
|
+
projectId: repo.projectId,
|
|
146
|
+
vaultRoot: home ? resolveProjectVaultRoot(home, repo) : null,
|
|
147
|
+
notesDir: home ? resolveNotesDir(home, repo) : null,
|
|
148
|
+
logsDir: home ? resolveLogsDir(home, repo) : null,
|
|
149
|
+
plansDir: home ? resolvePlansDir(home, repo) : null,
|
|
150
|
+
git,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
async function gatherStatus(options) {
|
|
154
|
+
const cwd = path.resolve(options.cwd ?? process.cwd());
|
|
155
|
+
const { home, invalid: homeInvalid } = await tryReadHome();
|
|
156
|
+
const gitRoot = await findGitRoot(cwd);
|
|
157
|
+
const linkedRoot = await findLinkedRepoRoot(cwd, gitRoot);
|
|
158
|
+
const { repo, invalid: repoInvalid, unsupported: repoUnsupported, } = linkedRoot
|
|
159
|
+
? await tryReadRepo(linkedRoot)
|
|
160
|
+
: { repo: null, invalid: null, unsupported: false };
|
|
161
|
+
const machine = await gatherMachine(homeInvalid, home, options.homeDir);
|
|
162
|
+
const project = await gatherProject({
|
|
163
|
+
cwd,
|
|
164
|
+
gitRoot,
|
|
165
|
+
linkedRoot,
|
|
166
|
+
repo,
|
|
167
|
+
repoInvalid,
|
|
168
|
+
repoUnsupported,
|
|
169
|
+
home,
|
|
170
|
+
});
|
|
171
|
+
return { cwd, machine, project };
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* `findLinkedRepoRoot` walks up to the nearest `.grounder.json`, so a
|
|
175
|
+
* subdirectory of a linked repo inherits that link. Surface it explicitly
|
|
176
|
+
* when `linkedRoot` isn't `cwd` itself, so callers (agents included) don't
|
|
177
|
+
* mistake an ancestor's link for this exact folder being linked.
|
|
178
|
+
*/
|
|
179
|
+
function writeAncestorNoteIfAny(cwd, folder) {
|
|
180
|
+
if (folder === cwd) {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
process.stdout.write(statusLine("Note:", `linked ancestor — ${cwd} itself is unlinked; grounder link here would create a separate project`));
|
|
184
|
+
}
|
|
185
|
+
function writeGitLine(git) {
|
|
186
|
+
if (!git) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
const value = git.branch !== null ? `${git.root} (branch: ${git.branch})` : git.root;
|
|
190
|
+
process.stdout.write(statusLine("Git:", value));
|
|
191
|
+
}
|
|
192
|
+
function writeStateLines(state) {
|
|
193
|
+
if (state.status === "missing") {
|
|
194
|
+
process.stdout.write(statusLine("State:", `missing → ${MIGRATE_FORCE}`));
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
if (state.status === "unsupported") {
|
|
198
|
+
process.stdout.write(statusLine("State:", `unsupported → ${UPGRADE_GROUNDER}`));
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
if (state.status === "invalid") {
|
|
86
202
|
process.stdout.write(statusLine("State:", `invalid → ${MIGRATE_FORCE}`));
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
process.stdout.write(statusLine("State:", state.path));
|
|
206
|
+
if (state.packageNotice) {
|
|
207
|
+
process.stdout.write(statusLine("Package:", state.packageNotice.status));
|
|
87
208
|
}
|
|
209
|
+
process.stdout.write(statusLine("Install:", state.installCurrent ? "current" : `outdated → ${MIGRATE}`));
|
|
210
|
+
}
|
|
211
|
+
function writeTextOutput(status) {
|
|
212
|
+
const { cwd, machine, project } = status;
|
|
213
|
+
writeSection("Machine");
|
|
214
|
+
if (machine.configState === "invalid") {
|
|
215
|
+
process.stdout.write(statusLine("Config:", `invalid → ${VAULT_INIT}`));
|
|
216
|
+
}
|
|
217
|
+
else if (machine.configState === "missing") {
|
|
218
|
+
process.stdout.write(statusLine("Config:", `missing → ${VAULT_INIT}`));
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
process.stdout.write(statusLine("Config:", machine.configPath));
|
|
222
|
+
process.stdout.write(statusLine("Vault:", machine.vaultRoot));
|
|
223
|
+
writeStateLines(machine.state);
|
|
224
|
+
}
|
|
225
|
+
process.stdout.write("\n");
|
|
226
|
+
writeSection("Project");
|
|
227
|
+
if (!project.linked) {
|
|
228
|
+
process.stdout.write(statusLine("Linked:", "no"));
|
|
229
|
+
if (machine.configState === "ok") {
|
|
230
|
+
process.stdout.write(statusLine("Config:", `missing → ${REPO_INIT}`));
|
|
231
|
+
}
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
const folder = project.folder;
|
|
235
|
+
if (project.configState !== "ok") {
|
|
236
|
+
const fix = project.configState === "unsupported"
|
|
237
|
+
? UPGRADE_GROUNDER
|
|
238
|
+
: machine.configState === "ok"
|
|
239
|
+
? REPO_INIT_FORCE
|
|
240
|
+
: VAULT_INIT;
|
|
241
|
+
process.stdout.write(statusLine("Linked:", project.configState === "unsupported" ? `unsupported → ${fix}` : `incomplete → ${fix}`));
|
|
242
|
+
process.stdout.write(statusLine("Folder:", folder));
|
|
243
|
+
writeAncestorNoteIfAny(cwd, folder);
|
|
244
|
+
process.stdout.write(statusLine("Config:", project.configState === "unsupported"
|
|
245
|
+
? `unsupported → ${UPGRADE_GROUNDER}`
|
|
246
|
+
: project.configState === "invalid"
|
|
247
|
+
? `invalid → ${REPO_INIT_FORCE}`
|
|
248
|
+
: `missing → ${REPO_INIT}`));
|
|
249
|
+
writeGitLine(project.git);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
process.stdout.write(statusLine("Linked:", "yes"));
|
|
253
|
+
process.stdout.write(statusLine("Folder:", folder));
|
|
254
|
+
writeAncestorNoteIfAny(cwd, folder);
|
|
255
|
+
process.stdout.write(statusLine("Config:", project.configPath));
|
|
256
|
+
process.stdout.write(statusLine("Id:", project.projectId));
|
|
257
|
+
if (project.notesDir) {
|
|
258
|
+
process.stdout.write(statusLine("In Vault:", project.vaultRoot));
|
|
259
|
+
process.stdout.write(statusLine("Notes:", project.notesDir));
|
|
260
|
+
process.stdout.write(statusLine("Logs:", project.logsDir));
|
|
261
|
+
process.stdout.write(statusLine("Plans:", project.plansDir));
|
|
262
|
+
}
|
|
263
|
+
writeGitLine(project.git);
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Bump whenever `writeJsonOutput`'s payload shape changes (fields added,
|
|
267
|
+
* removed, or renamed) — consumers (the VS Code extension's `status.ts`)
|
|
268
|
+
* compare this directly instead of inferring compatibility structurally.
|
|
269
|
+
*/
|
|
270
|
+
export const STATUS_JSON_SCHEMA_VERSION = 1;
|
|
271
|
+
function writeJsonOutput(status) {
|
|
272
|
+
const { machine, project } = status;
|
|
273
|
+
const payload = {
|
|
274
|
+
schemaVersion: STATUS_JSON_SCHEMA_VERSION,
|
|
275
|
+
machine: {
|
|
276
|
+
configPath: machine.configPath,
|
|
277
|
+
configState: machine.configState,
|
|
278
|
+
vaultRoot: machine.vaultRoot,
|
|
279
|
+
state: machine.state
|
|
280
|
+
? {
|
|
281
|
+
path: machine.state.path,
|
|
282
|
+
status: machine.state.status,
|
|
283
|
+
packageVersionNotice: machine.state.packageNotice?.message ?? null,
|
|
284
|
+
installCurrent: machine.state.installCurrent,
|
|
285
|
+
}
|
|
286
|
+
: null,
|
|
287
|
+
},
|
|
288
|
+
project: {
|
|
289
|
+
linked: project.linked,
|
|
290
|
+
folder: project.folder,
|
|
291
|
+
isAncestorLink: project.isAncestorLink,
|
|
292
|
+
configPath: project.configPath,
|
|
293
|
+
configState: project.configState,
|
|
294
|
+
projectId: project.projectId,
|
|
295
|
+
vaultRoot: project.vaultRoot,
|
|
296
|
+
notesDir: project.notesDir,
|
|
297
|
+
logsDir: project.logsDir,
|
|
298
|
+
plansDir: project.plansDir,
|
|
299
|
+
git: project.git,
|
|
300
|
+
},
|
|
301
|
+
};
|
|
302
|
+
process.stdout.write(`${JSON.stringify(payload)}\n`);
|
|
88
303
|
}
|
|
89
304
|
export async function runStatus(argv) {
|
|
90
305
|
const helpCode = helpExitCode(argv, "status");
|
|
91
306
|
if (helpCode !== null) {
|
|
92
307
|
return helpCode;
|
|
93
308
|
}
|
|
94
|
-
|
|
309
|
+
const { positional, flags } = parseArgs(argv);
|
|
310
|
+
if (positional.length > 0) {
|
|
311
|
+
process.stderr.write(USAGE);
|
|
312
|
+
return 1;
|
|
313
|
+
}
|
|
314
|
+
const allowedFlags = new Set(["json"]);
|
|
315
|
+
for (const key of flags.keys()) {
|
|
316
|
+
if (!allowedFlags.has(key)) {
|
|
317
|
+
process.stderr.write(USAGE);
|
|
318
|
+
return 1;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
return runStatusWithOptions({ json: flagBool(flags, "json") });
|
|
95
322
|
}
|
|
96
323
|
export async function runStatusWithOptions(options = {}) {
|
|
97
324
|
return withHomeDir(options.homeDir, async () => {
|
|
98
|
-
const
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
const linkedRoot = await findLinkedRepoRoot(cwd, gitRoot);
|
|
102
|
-
const { repo, invalid: repoInvalid, unsupported: repoUnsupported, } = linkedRoot
|
|
103
|
-
? await tryReadRepo(linkedRoot)
|
|
104
|
-
: { repo: null, invalid: null, unsupported: false };
|
|
105
|
-
writeSection("Machine");
|
|
106
|
-
if (homeInvalid) {
|
|
107
|
-
process.stdout.write(statusLine("Config:", `invalid → ${VAULT_INIT}`));
|
|
108
|
-
}
|
|
109
|
-
else if (!home) {
|
|
110
|
-
process.stdout.write(statusLine("Config:", `missing → ${VAULT_INIT}`));
|
|
325
|
+
const status = await gatherStatus(options);
|
|
326
|
+
if (options.json) {
|
|
327
|
+
writeJsonOutput(status);
|
|
111
328
|
}
|
|
112
329
|
else {
|
|
113
|
-
|
|
114
|
-
process.stdout.write(statusLine("Vault:", resolveVaultRoot(home)));
|
|
115
|
-
await writeInstallStateLine(options.homeDir);
|
|
116
|
-
}
|
|
117
|
-
process.stdout.write("\n");
|
|
118
|
-
writeSection("Project");
|
|
119
|
-
if (!linkedRoot) {
|
|
120
|
-
process.stdout.write(statusLine("Linked:", "no"));
|
|
121
|
-
if (home) {
|
|
122
|
-
process.stdout.write(statusLine("Config:", `missing → ${REPO_INIT}`));
|
|
123
|
-
}
|
|
124
|
-
return 0;
|
|
125
|
-
}
|
|
126
|
-
if (repoInvalid || !repo) {
|
|
127
|
-
const fix = repoUnsupported ? UPGRADE_GROUNDER : home ? REPO_INIT_FORCE : VAULT_INIT;
|
|
128
|
-
process.stdout.write(statusLine("Linked:", repoUnsupported ? `unsupported → ${fix}` : `incomplete → ${fix}`));
|
|
129
|
-
process.stdout.write(statusLine("Folder:", linkedRoot));
|
|
130
|
-
writeAncestorNoteIfAny(cwd, linkedRoot);
|
|
131
|
-
process.stdout.write(statusLine("Config:", repoUnsupported
|
|
132
|
-
? `unsupported → ${UPGRADE_GROUNDER}`
|
|
133
|
-
: repoInvalid
|
|
134
|
-
? `invalid → ${REPO_INIT_FORCE}`
|
|
135
|
-
: `missing → ${REPO_INIT}`));
|
|
136
|
-
await writeGitLine(gitRoot);
|
|
137
|
-
return 0;
|
|
138
|
-
}
|
|
139
|
-
process.stdout.write(statusLine("Linked:", "yes"));
|
|
140
|
-
process.stdout.write(statusLine("Folder:", linkedRoot));
|
|
141
|
-
writeAncestorNoteIfAny(cwd, linkedRoot);
|
|
142
|
-
process.stdout.write(statusLine("Config:", repoConfigPath(linkedRoot)));
|
|
143
|
-
process.stdout.write(statusLine("Id:", repo.projectId));
|
|
144
|
-
if (home) {
|
|
145
|
-
process.stdout.write(statusLine("Project Vault Root:", resolveProjectVaultRoot(home, repo)));
|
|
146
|
-
process.stdout.write(statusLine("Notes:", resolveNotesDir(home, repo)));
|
|
147
|
-
process.stdout.write(statusLine("Logs:", resolveLogsDir(home, repo)));
|
|
148
|
-
process.stdout.write(statusLine("Plans:", resolvePlansDir(home, repo)));
|
|
330
|
+
writeTextOutput(status);
|
|
149
331
|
}
|
|
150
|
-
await writeGitLine(gitRoot);
|
|
151
332
|
return 0;
|
|
152
333
|
});
|
|
153
334
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `state.json`'s own on-disk shape versioning — separate from install-content
|
|
3
|
+
* drift (skill files, hooks), which the reconciler already owns. Bump
|
|
4
|
+
* `LEDGER_SCHEMA` and add one `upgradeFromN` step whenever the file's shape
|
|
5
|
+
* itself changes; `readGrounderState` (in `state.ts`) is the only caller.
|
|
6
|
+
*
|
|
7
|
+
* No file I/O in this module. Every upgrade step takes raw untyped JSON in
|
|
8
|
+
* and returns the next version's raw JSON out — never `GrounderState`
|
|
9
|
+
* mid-chain, so a step can't accidentally assume a field the target shape
|
|
10
|
+
* doesn't have yet.
|
|
11
|
+
*/
|
|
12
|
+
/** Bumped only when `state.json`'s own on-disk shape changes (not install content). */
|
|
13
|
+
export declare const LEDGER_SCHEMA = 1;
|
|
14
|
+
/** Oldest on-disk shape this binary can still upgrade from — the pre-rewrite shape
|
|
15
|
+
* (no `ledgerSchema` field, `commandsSchema`/`hooksSchema` instead of `hooksEnabled`)
|
|
16
|
+
* is the only one that has ever existed on disk. */
|
|
17
|
+
export declare const MIN_SUPPORTED_LEDGER_SCHEMA = 0;
|
|
18
|
+
export type LedgerUpgradeStep = (raw: Record<string, unknown>) => Record<string, unknown>;
|
|
19
|
+
export type LedgerUpgradeTable = Record<number, LedgerUpgradeStep>;
|
|
20
|
+
/**
|
|
21
|
+
* Schema 0 → 1: drop `commandsSchema` (no replacement) and fold `hooksSchema` into
|
|
22
|
+
* `hooksEnabled` — a positive `hooksSchema` (hooks were actually installed) maps to
|
|
23
|
+
* `true`; `hooksSchema: 0`, an absent `hooksSchema`, or a non-numeric value all leave
|
|
24
|
+
* `hooksEnabled` unset. `0` deliberately does NOT map to `false`: `false` means an
|
|
25
|
+
* explicit `--no-hooks` opt-out, a flag that didn't exist in v0.5.0, so there's no v0.5.0
|
|
26
|
+
* ledger state that should ever produce it — mapping `0` to `false` would turn a machine
|
|
27
|
+
* that simply never installed hooks into a sticky opt-out, silencing `shouldInstallHooks`'s
|
|
28
|
+
* on-disk-recognizer fallback for it forever. (In practice v0.5.0's writer only ever
|
|
29
|
+
* persisted `hooksSchema` as the installed schema constant or omitted it entirely, so `0`
|
|
30
|
+
* likely never hit a real ledger — this is a correctness fix for the mapping, not a
|
|
31
|
+
* reaction to an observed bad value.) No `hooksEnabled`-already-present case: `hooksEnabled`
|
|
32
|
+
* didn't exist before schema 1, so a schema-0 file (v0.5.0, the only released shape without
|
|
33
|
+
* `ledgerSchema`) can never carry it.
|
|
34
|
+
*/
|
|
35
|
+
export declare function upgradeFrom0(raw: Record<string, unknown>): Record<string, unknown>;
|
|
36
|
+
/** One entry per version below `LEDGER_SCHEMA` — not a stub per hypothetical future version. */
|
|
37
|
+
export declare const REAL_LEDGER_UPGRADE_TABLE: LedgerUpgradeTable;
|
|
38
|
+
/**
|
|
39
|
+
* Walk `raw` from schema `from` up to (not including) `target`, one step per
|
|
40
|
+
* version. The walker owns the version counter — it stamps `v + 1` onto the
|
|
41
|
+
* result after each step runs, rather than trusting each step to bump it
|
|
42
|
+
* itself, so a step that forgets to would never cause an infinite loop here.
|
|
43
|
+
*
|
|
44
|
+
* A missing table entry or a step that throws both surface as the same
|
|
45
|
+
* invalid-state `Error` family the rest of `readGrounderState` uses — never a
|
|
46
|
+
* bare `TypeError` escaping a read.
|
|
47
|
+
*
|
|
48
|
+
* Test-only entry point for exercising multi-step chaining against a fake
|
|
49
|
+
* table, without bumping production `LEDGER_SCHEMA` just to test it.
|
|
50
|
+
* Production reads should use `applyLedgerUpgrades`.
|
|
51
|
+
*/
|
|
52
|
+
export declare function applyLedgerUpgradeTable(raw: Record<string, unknown>, from: number, table: LedgerUpgradeTable, target: number): Record<string, unknown>;
|
|
53
|
+
/** Production entry point — thin wrapper over `applyLedgerUpgradeTable` with the real table. */
|
|
54
|
+
export declare function applyLedgerUpgrades(raw: Record<string, unknown>, from: number): Record<string, unknown>;
|
|
55
|
+
//# sourceMappingURL=ledger-migrations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger-migrations.d.ts","sourceRoot":"","sources":["../../src/connector/ledger-migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,uFAAuF;AACvF,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B;;oDAEoD;AACpD,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C,MAAM,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC1F,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAWnE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoBlF;AAED,gGAAgG;AAChG,eAAO,MAAM,yBAAyB,EAAE,kBAEvC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,kBAAkB,EACzB,MAAM,EAAE,MAAM,GACb,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBzB;AAED,gGAAgG;AAChG,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzB"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `state.json`'s own on-disk shape versioning — separate from install-content
|
|
3
|
+
* drift (skill files, hooks), which the reconciler already owns. Bump
|
|
4
|
+
* `LEDGER_SCHEMA` and add one `upgradeFromN` step whenever the file's shape
|
|
5
|
+
* itself changes; `readGrounderState` (in `state.ts`) is the only caller.
|
|
6
|
+
*
|
|
7
|
+
* No file I/O in this module. Every upgrade step takes raw untyped JSON in
|
|
8
|
+
* and returns the next version's raw JSON out — never `GrounderState`
|
|
9
|
+
* mid-chain, so a step can't accidentally assume a field the target shape
|
|
10
|
+
* doesn't have yet.
|
|
11
|
+
*/
|
|
12
|
+
/** Bumped only when `state.json`'s own on-disk shape changes (not install content). */
|
|
13
|
+
export const LEDGER_SCHEMA = 1;
|
|
14
|
+
/** Oldest on-disk shape this binary can still upgrade from — the pre-rewrite shape
|
|
15
|
+
* (no `ledgerSchema` field, `commandsSchema`/`hooksSchema` instead of `hooksEnabled`)
|
|
16
|
+
* is the only one that has ever existed on disk. */
|
|
17
|
+
export const MIN_SUPPORTED_LEDGER_SCHEMA = 0;
|
|
18
|
+
/**
|
|
19
|
+
* Schema 0 → 1: drop `commandsSchema` (no replacement) and fold `hooksSchema` into
|
|
20
|
+
* `hooksEnabled` — a positive `hooksSchema` (hooks were actually installed) maps to
|
|
21
|
+
* `true`; `hooksSchema: 0`, an absent `hooksSchema`, or a non-numeric value all leave
|
|
22
|
+
* `hooksEnabled` unset. `0` deliberately does NOT map to `false`: `false` means an
|
|
23
|
+
* explicit `--no-hooks` opt-out, a flag that didn't exist in v0.5.0, so there's no v0.5.0
|
|
24
|
+
* ledger state that should ever produce it — mapping `0` to `false` would turn a machine
|
|
25
|
+
* that simply never installed hooks into a sticky opt-out, silencing `shouldInstallHooks`'s
|
|
26
|
+
* on-disk-recognizer fallback for it forever. (In practice v0.5.0's writer only ever
|
|
27
|
+
* persisted `hooksSchema` as the installed schema constant or omitted it entirely, so `0`
|
|
28
|
+
* likely never hit a real ledger — this is a correctness fix for the mapping, not a
|
|
29
|
+
* reaction to an observed bad value.) No `hooksEnabled`-already-present case: `hooksEnabled`
|
|
30
|
+
* didn't exist before schema 1, so a schema-0 file (v0.5.0, the only released shape without
|
|
31
|
+
* `ledgerSchema`) can never carry it.
|
|
32
|
+
*/
|
|
33
|
+
export function upgradeFrom0(raw) {
|
|
34
|
+
const rawAgents = raw.agents;
|
|
35
|
+
if (!rawAgents || typeof rawAgents !== "object" || Array.isArray(rawAgents)) {
|
|
36
|
+
return raw;
|
|
37
|
+
}
|
|
38
|
+
const agents = {};
|
|
39
|
+
for (const [id, entry] of Object.entries(rawAgents)) {
|
|
40
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
|
|
41
|
+
agents[id] = entry;
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
const e = entry;
|
|
45
|
+
const hooksEnabled = typeof e.hooksSchema === "number" && e.hooksSchema > 0 ? true : undefined;
|
|
46
|
+
agents[id] = {
|
|
47
|
+
files: e.files,
|
|
48
|
+
...(hooksEnabled !== undefined ? { hooksEnabled } : {}),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
return { ...raw, agents };
|
|
52
|
+
}
|
|
53
|
+
/** One entry per version below `LEDGER_SCHEMA` — not a stub per hypothetical future version. */
|
|
54
|
+
export const REAL_LEDGER_UPGRADE_TABLE = {
|
|
55
|
+
0: upgradeFrom0,
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Walk `raw` from schema `from` up to (not including) `target`, one step per
|
|
59
|
+
* version. The walker owns the version counter — it stamps `v + 1` onto the
|
|
60
|
+
* result after each step runs, rather than trusting each step to bump it
|
|
61
|
+
* itself, so a step that forgets to would never cause an infinite loop here.
|
|
62
|
+
*
|
|
63
|
+
* A missing table entry or a step that throws both surface as the same
|
|
64
|
+
* invalid-state `Error` family the rest of `readGrounderState` uses — never a
|
|
65
|
+
* bare `TypeError` escaping a read.
|
|
66
|
+
*
|
|
67
|
+
* Test-only entry point for exercising multi-step chaining against a fake
|
|
68
|
+
* table, without bumping production `LEDGER_SCHEMA` just to test it.
|
|
69
|
+
* Production reads should use `applyLedgerUpgrades`.
|
|
70
|
+
*/
|
|
71
|
+
export function applyLedgerUpgradeTable(raw, from, table, target) {
|
|
72
|
+
let current = raw;
|
|
73
|
+
for (let v = from; v < target; v++) {
|
|
74
|
+
const step = table[v];
|
|
75
|
+
if (!step) {
|
|
76
|
+
throw new Error(`Invalid grounder state: no ledger upgrade from schema ${v}`);
|
|
77
|
+
}
|
|
78
|
+
let next;
|
|
79
|
+
try {
|
|
80
|
+
next = step(current);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
84
|
+
throw new Error(`Invalid grounder state: ledger upgrade from schema ${v} failed: ${detail}`);
|
|
85
|
+
}
|
|
86
|
+
current = { ...next, ledgerSchema: v + 1 };
|
|
87
|
+
}
|
|
88
|
+
return current;
|
|
89
|
+
}
|
|
90
|
+
/** Production entry point — thin wrapper over `applyLedgerUpgradeTable` with the real table. */
|
|
91
|
+
export function applyLedgerUpgrades(raw, from) {
|
|
92
|
+
return applyLedgerUpgradeTable(raw, from, REAL_LEDGER_UPGRADE_TABLE, LEDGER_SCHEMA);
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=ledger-migrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger-migrations.js","sourceRoot":"","sources":["../../src/connector/ledger-migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,uFAAuF;AACvF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAE/B;;oDAEoD;AACpD,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAc7C;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,YAAY,CAAC,GAA4B;IACvD,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;IAC7B,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5E,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAoC,CAAC,EAAE,CAAC;QAC/E,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;YACnB,SAAS;QACX,CAAC;QACD,MAAM,CAAC,GAAG,KAAwB,CAAC;QACnC,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/F,MAAM,CAAC,EAAE,CAAC,GAAG;YACX,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC;AAED,gGAAgG;AAChG,MAAM,CAAC,MAAM,yBAAyB,GAAuB;IAC3D,CAAC,EAAE,YAAY;CAChB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,uBAAuB,CACrC,GAA4B,EAC5B,IAAY,EACZ,KAAyB,EACzB,MAAc;IAEd,IAAI,OAAO,GAAG,GAAG,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,IAA6B,CAAC;QAClC,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,YAAY,MAAM,EAAE,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAC7C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,mBAAmB,CACjC,GAA4B,EAC5B,IAAY;IAEZ,OAAO,uBAAuB,CAAC,GAAG,EAAE,IAAI,EAAE,yBAAyB,EAAE,aAAa,CAAC,CAAC;AACtF,CAAC"}
|