@claudexor/cli 1.0.1
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/LICENSE +21 -0
- package/README.md +22 -0
- package/dist/args.d.ts +12 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +88 -0
- package/dist/args.js.map +1 -0
- package/dist/attachment-resolver.d.ts +11 -0
- package/dist/attachment-resolver.d.ts.map +1 -0
- package/dist/attachment-resolver.js +61 -0
- package/dist/attachment-resolver.js.map +1 -0
- package/dist/capabilities.d.ts +13 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +90 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/claudexord.d.ts +3 -0
- package/dist/claudexord.d.ts.map +1 -0
- package/dist/claudexord.js +564 -0
- package/dist/claudexord.js.map +1 -0
- package/dist/cli-io.d.ts +28 -0
- package/dist/cli-io.d.ts.map +1 -0
- package/dist/cli-io.js +37 -0
- package/dist/cli-io.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1459 -0
- package/dist/cli.js.map +1 -0
- package/dist/command-registry.d.ts +105 -0
- package/dist/command-registry.d.ts.map +1 -0
- package/dist/command-registry.js +516 -0
- package/dist/command-registry.js.map +1 -0
- package/dist/daemon-lifecycle.d.ts +18 -0
- package/dist/daemon-lifecycle.d.ts.map +1 -0
- package/dist/daemon-lifecycle.js +62 -0
- package/dist/daemon-lifecycle.js.map +1 -0
- package/dist/daemon-run.d.ts +86 -0
- package/dist/daemon-run.d.ts.map +1 -0
- package/dist/daemon-run.js +269 -0
- package/dist/daemon-run.js.map +1 -0
- package/dist/decision.d.ts +18 -0
- package/dist/decision.d.ts.map +1 -0
- package/dist/decision.js +46 -0
- package/dist/decision.js.map +1 -0
- package/dist/live.d.ts +26 -0
- package/dist/live.d.ts.map +1 -0
- package/dist/live.js +311 -0
- package/dist/live.js.map +1 -0
- package/dist/mcp-runner.d.ts +41 -0
- package/dist/mcp-runner.d.ts.map +1 -0
- package/dist/mcp-runner.js +306 -0
- package/dist/mcp-runner.js.map +1 -0
- package/dist/ops-commands.d.ts +11 -0
- package/dist/ops-commands.d.ts.map +1 -0
- package/dist/ops-commands.js +358 -0
- package/dist/ops-commands.js.map +1 -0
- package/dist/orchestrate-options.d.ts +9 -0
- package/dist/orchestrate-options.d.ts.map +1 -0
- package/dist/orchestrate-options.js +16 -0
- package/dist/orchestrate-options.js.map +1 -0
- package/dist/orphan-reaper.d.ts +9 -0
- package/dist/orphan-reaper.d.ts.map +1 -0
- package/dist/orphan-reaper.js +97 -0
- package/dist/orphan-reaper.js.map +1 -0
- package/dist/orphan-sweeper.d.ts +7 -0
- package/dist/orphan-sweeper.d.ts.map +1 -0
- package/dist/orphan-sweeper.js +289 -0
- package/dist/orphan-sweeper.js.map +1 -0
- package/dist/plugins.d.ts +44 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +1383 -0
- package/dist/plugins.js.map +1 -0
- package/dist/primary-output.d.ts +14 -0
- package/dist/primary-output.d.ts.map +1 -0
- package/dist/primary-output.js +34 -0
- package/dist/primary-output.js.map +1 -0
- package/dist/registry.d.ts +26 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +71 -0
- package/dist/registry.js.map +1 -0
- package/dist/release.d.ts +14 -0
- package/dist/release.d.ts.map +1 -0
- package/dist/release.js +49 -0
- package/dist/release.js.map +1 -0
- package/dist/repl.d.ts +26 -0
- package/dist/repl.d.ts.map +1 -0
- package/dist/repl.js +277 -0
- package/dist/repl.js.map +1 -0
- package/dist/review-command.d.ts +3 -0
- package/dist/review-command.d.ts.map +1 -0
- package/dist/review-command.js +83 -0
- package/dist/review-command.js.map +1 -0
- package/dist/reviewer-options.d.ts +18 -0
- package/dist/reviewer-options.d.ts.map +1 -0
- package/dist/reviewer-options.js +110 -0
- package/dist/reviewer-options.js.map +1 -0
- package/dist/run-options.d.ts +8 -0
- package/dist/run-options.d.ts.map +1 -0
- package/dist/run-options.js +50 -0
- package/dist/run-options.js.map +1 -0
- package/dist/run-secret-scan.d.ts +2 -0
- package/dist/run-secret-scan.d.ts.map +1 -0
- package/dist/run-secret-scan.js +5 -0
- package/dist/run-secret-scan.js.map +1 -0
- package/dist/settings-command.d.ts +3 -0
- package/dist/settings-command.d.ts.map +1 -0
- package/dist/settings-command.js +202 -0
- package/dist/settings-command.js.map +1 -0
- package/dist/settings-display.d.ts +3 -0
- package/dist/settings-display.d.ts.map +1 -0
- package/dist/settings-display.js +33 -0
- package/dist/settings-display.js.map +1 -0
- package/dist/settings-service.d.ts +15 -0
- package/dist/settings-service.d.ts.map +1 -0
- package/dist/settings-service.js +91 -0
- package/dist/settings-service.js.map +1 -0
- package/dist/setup-jobs.d.ts +28 -0
- package/dist/setup-jobs.d.ts.map +1 -0
- package/dist/setup-jobs.js +477 -0
- package/dist/setup-jobs.js.map +1 -0
- package/dist/spec.d.ts +84 -0
- package/dist/spec.d.ts.map +1 -0
- package/dist/spec.js +438 -0
- package/dist/spec.js.map +1 -0
- package/dist/trust-command.d.ts +3 -0
- package/dist/trust-command.d.ts.map +1 -0
- package/dist/trust-command.js +80 -0
- package/dist/trust-command.js.map +1 -0
- package/dist/trust-services.d.ts +7 -0
- package/dist/trust-services.d.ts.map +1 -0
- package/dist/trust-services.js +35 -0
- package/dist/trust-services.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,516 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI_COMMANDS registry — the ONE owner of the user-facing CLI surface.
|
|
3
|
+
*
|
|
4
|
+
* Command verbs, aliases, per-command flags, flag types, and the human help
|
|
5
|
+
* strings all live HERE as typed data. Everything else is a derived view:
|
|
6
|
+
* the `claudexor help` text and `help --json` machine output are rendered
|
|
7
|
+
* from it, the arg-parser flag sets (KNOWN/VALUE/BOOLEAN) are projections of
|
|
8
|
+
* it, host plugin instruction texts pull their CLI examples from it, and the
|
|
9
|
+
* docs/parity gates import the BUILT module instead of regexing source. A new
|
|
10
|
+
* command or flag added here shows up everywhere; one added anywhere else
|
|
11
|
+
* fails loudly.
|
|
12
|
+
*/
|
|
13
|
+
/** Flags shared by every run-shaped verb (they funnel into orchestrate()). */
|
|
14
|
+
const RUN_FLAGS = [
|
|
15
|
+
"harness",
|
|
16
|
+
"primary-harness",
|
|
17
|
+
"n",
|
|
18
|
+
"attempts",
|
|
19
|
+
"until-clean",
|
|
20
|
+
"create",
|
|
21
|
+
"synthesis",
|
|
22
|
+
"test",
|
|
23
|
+
"allow-protected-path",
|
|
24
|
+
"max-usd",
|
|
25
|
+
"reviewer-panel",
|
|
26
|
+
"reviewer-model",
|
|
27
|
+
"reviewer-effort",
|
|
28
|
+
"access",
|
|
29
|
+
"web",
|
|
30
|
+
"model",
|
|
31
|
+
"effort",
|
|
32
|
+
"portfolio",
|
|
33
|
+
"in-place",
|
|
34
|
+
"spec",
|
|
35
|
+
"attach",
|
|
36
|
+
"image",
|
|
37
|
+
"json",
|
|
38
|
+
];
|
|
39
|
+
export const CLI_FLAGS = [
|
|
40
|
+
{ name: "harness", kind: "value", valueHint: "<id[,id...]>", help: "Force harness(es)" },
|
|
41
|
+
{
|
|
42
|
+
name: "mode",
|
|
43
|
+
kind: "value",
|
|
44
|
+
valueHint: "<mode>",
|
|
45
|
+
help: "agent verb: ask | plan | audit | agent | orchestrate (strategies are flags, not modes);\n apply verb: delivery mode apply | commit | branch | pr",
|
|
46
|
+
},
|
|
47
|
+
{ name: "n", kind: "value", valueHint: "<N>", help: "Best-of-N width (agent): N isolated candidates + cross-review" },
|
|
48
|
+
{ name: "synthesis", kind: "value", valueHint: "<mode>", help: "Best-of-N synthesis: auto (default, only n>=3)|always|never" },
|
|
49
|
+
{ name: "attempts", kind: "value", valueHint: "<N>", help: "Convergence cap (agent): repair loop up to N attempts" },
|
|
50
|
+
{ name: "until-clean", kind: "boolean", help: "Convergence (agent): iterate until the review/gates are clean" },
|
|
51
|
+
{ name: "swarm", kind: "boolean", help: "Research swarm (audit): bounded read-only explorer fan-out" },
|
|
52
|
+
{ name: "create", kind: "boolean", help: "Create-from-scratch intent (agent)" },
|
|
53
|
+
{
|
|
54
|
+
name: "autonomy",
|
|
55
|
+
kind: "value",
|
|
56
|
+
valueHint: "<level>",
|
|
57
|
+
help: "Orchestrate: how much the orchestrator may act without confirmation:\n suggest (default, read-only plan) | auto_safe | auto_full",
|
|
58
|
+
},
|
|
59
|
+
{ name: "test", kind: "value", valueHint: '"<cmd>"', help: "Deterministic gate command(s); repeat flag or separate with ';;'" },
|
|
60
|
+
{
|
|
61
|
+
name: "allow-protected-path",
|
|
62
|
+
kind: "value",
|
|
63
|
+
valueHint: "<glob[,glob...]>",
|
|
64
|
+
help: "Explicitly approve protected gate/test path changes for this run",
|
|
65
|
+
},
|
|
66
|
+
{ name: "max-usd", kind: "value", valueHint: "<amount>", help: "Hard per-run spend cap (USD)" },
|
|
67
|
+
{ name: "max-tool-calls", kind: "value", valueHint: "<n>", help: "Orchestrate executor: cap on plan tool calls" },
|
|
68
|
+
{ name: "diff", kind: "value", valueHint: "<file>", help: "Diff file for the review verb (per-commit gate)" },
|
|
69
|
+
{ name: "intent", kind: "value", valueHint: '"<text>"', help: "Review intent context for the review verb" },
|
|
70
|
+
{ name: "tests", kind: "value", valueHint: '"<evidence>"', help: "Test evidence text for the review verb" },
|
|
71
|
+
{
|
|
72
|
+
name: "reviewer-panel",
|
|
73
|
+
kind: "value",
|
|
74
|
+
valueHint: "<list>",
|
|
75
|
+
help: 'Explicit reviewers, e.g. "claude=claude-opus-4-8:max,cursor=gemini-3.1-pro,cursor=gemini-3.5-flash,cursor=gpt-5.5-extra-high"',
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: "reviewer-model",
|
|
79
|
+
kind: "value",
|
|
80
|
+
valueHint: "<map>",
|
|
81
|
+
help: 'Per-family reviewer model, e.g. "openai=gpt-4o-mini,anthropic=claude-haiku"',
|
|
82
|
+
},
|
|
83
|
+
{ name: "reviewer-effort", kind: "value", valueHint: "<map>", help: 'Per-family reviewer effort, e.g. "anthropic=max"' },
|
|
84
|
+
{
|
|
85
|
+
name: "access",
|
|
86
|
+
kind: "value",
|
|
87
|
+
valueHint: "<profile>",
|
|
88
|
+
help: "Access profile: readonly|workspace_write|full|external_sandbox_full|inherit_native",
|
|
89
|
+
},
|
|
90
|
+
{ name: "web", kind: "value", valueHint: "<mode>", help: "External web/search policy: off|auto|cached|live" },
|
|
91
|
+
{ name: "model", kind: "value", valueHint: "<id>", help: "Model hint forwarded to the selected harness route" },
|
|
92
|
+
{ name: "effort", kind: "value", valueHint: "<level>", help: "Reasoning effort hint: low|medium|high|xhigh|max" },
|
|
93
|
+
{ name: "primary-harness", kind: "value", valueHint: "<id>", help: "Bias single-route modes and first candidate choice" },
|
|
94
|
+
{ name: "portfolio", kind: "value", valueHint: "<id>", help: "Budget/routing portfolio (default: subscription-first)" },
|
|
95
|
+
{
|
|
96
|
+
name: "in-place",
|
|
97
|
+
kind: "boolean",
|
|
98
|
+
help: "Run write turns against the live project tree (single-candidate\n in-place; best-of-N candidates stay isolated and the winner is adopted)\n instead of a throwaway envelope",
|
|
99
|
+
},
|
|
100
|
+
{ name: "answers", kind: "value", valueHint: "<file>", help: "Answers JSON for claudexor spec (batch mode)" },
|
|
101
|
+
{ name: "previous", kind: "value", valueHint: "<spec.json>", help: "Previous SpecPack JSON for section-level diff" },
|
|
102
|
+
{ name: "spec", kind: "value", valueHint: "<spec.json>", help: "Frozen SpecPack context for agent/best-of/create/convergence" },
|
|
103
|
+
{ name: "attach", kind: "value", valueHint: "<path[,path...]>", help: "Attach file(s) to ask/agent/best-of/plan/audit" },
|
|
104
|
+
{ name: "image", kind: "value", valueHint: "<path[,path...]>", help: "Attach image file(s) (alias for --attach with image kind)" },
|
|
105
|
+
{
|
|
106
|
+
name: "backend",
|
|
107
|
+
kind: "value",
|
|
108
|
+
valueHint: "<store>",
|
|
109
|
+
help: "Secrets store: auto (default)|keychain|file (file = sandbox-safe, no Keychain)",
|
|
110
|
+
},
|
|
111
|
+
{ name: "json", kind: "boolean", help: "Machine-readable JSON output" },
|
|
112
|
+
{ name: "all", kind: "boolean", help: null },
|
|
113
|
+
{
|
|
114
|
+
name: "dry-run",
|
|
115
|
+
kind: "boolean",
|
|
116
|
+
help: "Plugin: show lifecycle actions; apply: check patch without mutating",
|
|
117
|
+
},
|
|
118
|
+
{ name: "force", kind: "boolean", help: "Reapply verified Claudexor-owned plugin drift; never overwrites unowned files" },
|
|
119
|
+
{ name: "from-env", kind: "value", valueHint: "<VAR>", help: null },
|
|
120
|
+
// trust sub-flags: documented inline under the trust usage entry.
|
|
121
|
+
{ name: "allow-full-access", kind: "boolean", help: null },
|
|
122
|
+
{ name: "revoke-full-access", kind: "boolean", help: null },
|
|
123
|
+
{ name: "access-default", kind: "value", valueHint: "<profile>", help: null },
|
|
124
|
+
// decision action/option flags (subcommand-scoped; documented in the decision usage line).
|
|
125
|
+
{ name: "accept-risk", kind: "boolean", help: null },
|
|
126
|
+
{ name: "override", kind: "boolean", help: null },
|
|
127
|
+
{ name: "revert", kind: "boolean", help: null },
|
|
128
|
+
{ name: "accept-clean-patch", kind: "boolean", help: null },
|
|
129
|
+
{ name: "rerun", kind: "boolean", help: null },
|
|
130
|
+
{ name: "apply-mode", kind: "value", valueHint: "<m>", help: null },
|
|
131
|
+
{ name: "feedback", kind: "value", valueHint: '"<text>"', help: null },
|
|
132
|
+
{ name: "help", kind: "boolean", help: "Show this help" },
|
|
133
|
+
{ name: "version", kind: "boolean", help: "Print the CLI version" },
|
|
134
|
+
];
|
|
135
|
+
export const CLI_COMMANDS = [
|
|
136
|
+
{
|
|
137
|
+
id: "init",
|
|
138
|
+
summary: "Scaffold repo-local config (.claudexor/config.yaml)",
|
|
139
|
+
flags: ["json"],
|
|
140
|
+
mutability: "ops",
|
|
141
|
+
stability: "stable",
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
id: "doctor",
|
|
145
|
+
usageArgs: "[--harness <id>] [--all]",
|
|
146
|
+
summary: "Detect + conformance-test harnesses",
|
|
147
|
+
flags: ["harness", "all", "json"],
|
|
148
|
+
mutability: "read",
|
|
149
|
+
stability: "stable",
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
id: "ask",
|
|
153
|
+
usageArgs: '"<question>" [opts]',
|
|
154
|
+
summary: "Read-only answer/explanation route",
|
|
155
|
+
flags: [...RUN_FLAGS],
|
|
156
|
+
mutability: "read",
|
|
157
|
+
stability: "stable",
|
|
158
|
+
hostFallbackExample: 'claudexor ask "..."',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
id: "agent",
|
|
162
|
+
usageArgs: '"<prompt>" [opts]',
|
|
163
|
+
summary: "Run a task (default mode: agent)",
|
|
164
|
+
flags: [...RUN_FLAGS, "mode", "swarm", "autonomy", "max-tool-calls"],
|
|
165
|
+
mutability: "write",
|
|
166
|
+
stability: "stable",
|
|
167
|
+
hostFallbackExample: 'claudexor agent "..."',
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
id: "best-of",
|
|
171
|
+
usageArgs: '"<prompt>" [--n N]',
|
|
172
|
+
summary: "Best-of-N run (agent --n) with cross-family review",
|
|
173
|
+
flags: [...RUN_FLAGS],
|
|
174
|
+
mutability: "write",
|
|
175
|
+
stability: "stable",
|
|
176
|
+
hostFallbackExample: 'claudexor best-of "..." --n 4',
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
id: "plan",
|
|
180
|
+
usageArgs: '"<prompt>"',
|
|
181
|
+
summary: "Read-only planning report",
|
|
182
|
+
flags: [...RUN_FLAGS],
|
|
183
|
+
mutability: "read",
|
|
184
|
+
stability: "stable",
|
|
185
|
+
hostFallbackExample: 'claudexor plan "..."',
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
id: "orchestrate",
|
|
189
|
+
usageArgs: '"<goal>"',
|
|
190
|
+
summary: "Typed orchestration plan over the tool belt",
|
|
191
|
+
flags: [...RUN_FLAGS, "autonomy", "max-tool-calls"],
|
|
192
|
+
mutability: "write",
|
|
193
|
+
stability: "stable",
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
id: "spec",
|
|
197
|
+
usageArgs: '"<prompt>" [--answers file]',
|
|
198
|
+
summary: "Multi-harness plan grounding -> quiz -> frozen SpecPack",
|
|
199
|
+
flags: [
|
|
200
|
+
"harness",
|
|
201
|
+
"n",
|
|
202
|
+
"web",
|
|
203
|
+
"effort",
|
|
204
|
+
"max-usd",
|
|
205
|
+
"reviewer-panel",
|
|
206
|
+
"reviewer-model",
|
|
207
|
+
"reviewer-effort",
|
|
208
|
+
"answers",
|
|
209
|
+
"previous",
|
|
210
|
+
"json",
|
|
211
|
+
],
|
|
212
|
+
mutability: "read",
|
|
213
|
+
stability: "stable",
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
id: "create",
|
|
217
|
+
usageArgs: '"<prompt>"',
|
|
218
|
+
summary: "Create-from-scratch (agent --create)",
|
|
219
|
+
flags: [...RUN_FLAGS],
|
|
220
|
+
mutability: "write",
|
|
221
|
+
stability: "stable",
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
id: "audit",
|
|
225
|
+
aliases: ["map"],
|
|
226
|
+
summary: "Read-only repo audit / map",
|
|
227
|
+
flags: [...RUN_FLAGS, "swarm"],
|
|
228
|
+
mutability: "read",
|
|
229
|
+
stability: "stable",
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
id: "explore",
|
|
233
|
+
usageArgs: '"<question>"',
|
|
234
|
+
summary: "Read-only research swarm (audit --swarm)",
|
|
235
|
+
flags: [...RUN_FLAGS],
|
|
236
|
+
mutability: "read",
|
|
237
|
+
stability: "stable",
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
id: "review",
|
|
241
|
+
usageArgs: "--diff <file>",
|
|
242
|
+
summary: "Reviewer-panel review of a diff file (per-commit gate)",
|
|
243
|
+
flags: ["diff", "intent", "tests", "reviewer-panel", "json"],
|
|
244
|
+
mutability: "read",
|
|
245
|
+
stability: "stable",
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
id: "inspect",
|
|
249
|
+
usageArgs: "<run_id>",
|
|
250
|
+
summary: "Inspect a run's decision + artifacts",
|
|
251
|
+
flags: ["json"],
|
|
252
|
+
mutability: "read",
|
|
253
|
+
stability: "stable",
|
|
254
|
+
recovery: true,
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
id: "follow",
|
|
258
|
+
usageArgs: "<run_id> [--json]",
|
|
259
|
+
summary: "Live-tail a daemon run (replay + push; answer questions in the TTY)",
|
|
260
|
+
flags: ["json"],
|
|
261
|
+
mutability: "read",
|
|
262
|
+
stability: "stable",
|
|
263
|
+
recovery: true,
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
id: "apply",
|
|
267
|
+
usageArgs: "<run_id> [--mode ...]",
|
|
268
|
+
summary: "Apply a run's WorkProduct (apply|commit|branch|pr|--dry-run)",
|
|
269
|
+
flags: ["mode", "dry-run", "json"],
|
|
270
|
+
mutability: "delivery",
|
|
271
|
+
stability: "stable",
|
|
272
|
+
recovery: true,
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
id: "decision",
|
|
276
|
+
usageArgs: "<run_id> <action>",
|
|
277
|
+
summary: 'Decide a blocked run: --accept-risk|--override|--revert|--accept-clean-patch [--apply-mode m]|--rerun --feedback "<text>"',
|
|
278
|
+
flags: ["accept-risk", "override", "revert", "accept-clean-patch", "rerun", "apply-mode", "feedback", "json"],
|
|
279
|
+
mutability: "delivery",
|
|
280
|
+
stability: "stable",
|
|
281
|
+
recovery: true,
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
id: "settings",
|
|
285
|
+
usageArgs: "show|set",
|
|
286
|
+
summary: "Show/update user defaults",
|
|
287
|
+
flags: ["json"],
|
|
288
|
+
mutability: "ops",
|
|
289
|
+
stability: "stable",
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
id: "trust",
|
|
293
|
+
summary: "Show/update this repo's user-local trust",
|
|
294
|
+
extraUsageLines: [
|
|
295
|
+
{ text: "--allow-full-access", help: "Permit access=full (unsandboxed) for this repo" },
|
|
296
|
+
{ text: "--revoke-full-access", help: "Revoke the full-access allow" },
|
|
297
|
+
{ text: "--access-default <profile>", help: "readonly|workspace_write default for write modes" },
|
|
298
|
+
],
|
|
299
|
+
flags: ["allow-full-access", "revoke-full-access", "access-default", "json"],
|
|
300
|
+
mutability: "ops",
|
|
301
|
+
stability: "stable",
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
id: "auth",
|
|
305
|
+
usageArgs: "status|login",
|
|
306
|
+
summary: "Inspect native harness auth",
|
|
307
|
+
flags: ["all", "json"],
|
|
308
|
+
mutability: "ops",
|
|
309
|
+
stability: "stable",
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
id: "secrets",
|
|
313
|
+
usageArgs: "list|set|delete",
|
|
314
|
+
summary: "Manage stored API-key refs (Keychain/0600 file)",
|
|
315
|
+
flags: ["backend", "from-env", "json"],
|
|
316
|
+
mutability: "ops",
|
|
317
|
+
stability: "stable",
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
id: "release",
|
|
321
|
+
usageArgs: "check-name <name>",
|
|
322
|
+
summary: "Naming gate (npm/pypi/crates/github)",
|
|
323
|
+
flags: ["json"],
|
|
324
|
+
mutability: "read",
|
|
325
|
+
stability: "experimental",
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
id: "daemon",
|
|
329
|
+
usageArgs: "start|status|stop|logs|rotate-token",
|
|
330
|
+
summary: "Optional local daemon (claudexord)",
|
|
331
|
+
flags: ["json"],
|
|
332
|
+
mutability: "ops",
|
|
333
|
+
stability: "stable",
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
id: "mcp",
|
|
337
|
+
usageArgs: "serve",
|
|
338
|
+
summary: "Expose Claudexor as an MCP server (stdio)",
|
|
339
|
+
flags: [],
|
|
340
|
+
mutability: "ops",
|
|
341
|
+
stability: "stable",
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
id: "acp",
|
|
345
|
+
usageArgs: "serve",
|
|
346
|
+
summary: "Expose Claudexor as an ACP agent (stdio)",
|
|
347
|
+
flags: [],
|
|
348
|
+
mutability: "ops",
|
|
349
|
+
stability: "stable",
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
id: "plugin",
|
|
353
|
+
usageArgs: "install|status|doctor|repair|uninstall <host|all>",
|
|
354
|
+
summary: "Manage host integrations (cursor|claude|codex|opencode|all)",
|
|
355
|
+
flags: ["json", "dry-run", "force", "help", "version"],
|
|
356
|
+
mutability: "ops",
|
|
357
|
+
stability: "stable",
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
id: "harness",
|
|
361
|
+
usageArgs: "list [--all]",
|
|
362
|
+
summary: "List real harnesses (--all includes fakes)",
|
|
363
|
+
flags: ["all", "json"],
|
|
364
|
+
mutability: "read",
|
|
365
|
+
stability: "stable",
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
id: "models",
|
|
369
|
+
usageArgs: "[--harness <id>] [--all]",
|
|
370
|
+
summary: "List a harness's enumerable models (raw-api: OpenAI GET /v1/models; --all includes fakes)",
|
|
371
|
+
flags: ["harness", "all", "json"],
|
|
372
|
+
mutability: "read",
|
|
373
|
+
stability: "stable",
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
id: "capabilities",
|
|
377
|
+
summary: "Machine-readable capability catalog (harnesses, modes, mutability matrix) for agents",
|
|
378
|
+
flags: ["json"],
|
|
379
|
+
mutability: "read",
|
|
380
|
+
stability: "stable",
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
id: "help",
|
|
384
|
+
summary: "Show this help",
|
|
385
|
+
flags: ["json"],
|
|
386
|
+
mutability: "read",
|
|
387
|
+
stability: "stable",
|
|
388
|
+
},
|
|
389
|
+
];
|
|
390
|
+
/** REPL slash-command vocabulary (second surface, same registry). */
|
|
391
|
+
export const REPL_COMMANDS = [
|
|
392
|
+
{ name: "/ask", args: "<q>", help: "read-only answer turn" },
|
|
393
|
+
{ name: "/plan", args: "<prompt>", help: "read-only planning turn" },
|
|
394
|
+
{ name: "/audit", args: "[prompt]", help: "read-only audit turn" },
|
|
395
|
+
{ name: "/best-of", args: "<prompt>", help: "best-of-2 turn (cross-family review)" },
|
|
396
|
+
{ name: "/orchestrate", args: "<g>", help: "typed orchestration plan over the tool belt" },
|
|
397
|
+
{ name: "/thread", help: "show the current thread (turns + native sessions)" },
|
|
398
|
+
{ name: "/new", args: "[title]", help: "start a new thread" },
|
|
399
|
+
{ name: "/help", help: "this help" },
|
|
400
|
+
{ name: "/quit", help: "exit" },
|
|
401
|
+
];
|
|
402
|
+
// ---------------------------------------------------------------------------
|
|
403
|
+
// Derived projections (the old hand-maintained sets).
|
|
404
|
+
// ---------------------------------------------------------------------------
|
|
405
|
+
/** Every flag the CLI accepts anywhere (the unknown-flag preflight set). */
|
|
406
|
+
export const KNOWN_FLAGS = new Set(CLI_FLAGS.map((f) => f.name));
|
|
407
|
+
/** Flags that require a non-empty value. */
|
|
408
|
+
export const VALUE_FLAGS = CLI_FLAGS.filter((f) => f.kind === "value").map((f) => f.name);
|
|
409
|
+
/** Flags that never consume a following token as a value. */
|
|
410
|
+
export const BOOLEAN_FLAGS = new Set(CLI_FLAGS.filter((f) => f.kind === "boolean").map((f) => f.name));
|
|
411
|
+
/**
|
|
412
|
+
* Registry-enforced per-command flag scope: every command accepts exactly its
|
|
413
|
+
* declared `flags` plus the global preflight affordances. A known-but-out-of-
|
|
414
|
+
* scope flag (e.g. `spec --model`) must FAIL LOUDLY, never be silently
|
|
415
|
+
* ignored — the same bug class as unknown flags, one data-driven owner.
|
|
416
|
+
* Unknown verbs return null (dispatch owns unknown/renamed-verb errors).
|
|
417
|
+
*/
|
|
418
|
+
export function commandFlagScopeError(commandId, flagNames) {
|
|
419
|
+
const cmd = CLI_COMMANDS.find((c) => c.id === commandId || (c.aliases ?? []).includes(commandId));
|
|
420
|
+
if (!cmd)
|
|
421
|
+
return null;
|
|
422
|
+
const allowed = new Set([...cmd.flags, "json", "help", "version"]);
|
|
423
|
+
const unexpected = flagNames.filter((flag) => !allowed.has(flag));
|
|
424
|
+
if (unexpected.length === 0)
|
|
425
|
+
return null;
|
|
426
|
+
return `claudexor: flag(s) not valid for the ${cmd.id} command: ${unexpected.map((flag) => `--${flag}`).join(", ")} (see \`claudexor help\`)`;
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Host-plugin CLI fallback examples, read-only routes first (agents should
|
|
430
|
+
* reach for ask/plan before mutating runs), declaration order within a tier.
|
|
431
|
+
*/
|
|
432
|
+
export function hostFallbackExamples() {
|
|
433
|
+
const tier = (m) => (m === "read" ? 0 : 1);
|
|
434
|
+
return CLI_COMMANDS.filter((c) => c.hostFallbackExample)
|
|
435
|
+
.slice()
|
|
436
|
+
.sort((a, b) => tier(a.mutability) - tier(b.mutability))
|
|
437
|
+
.map((c) => c.hostFallbackExample);
|
|
438
|
+
}
|
|
439
|
+
/** Post-run recovery verbs (inspect/follow/apply/decision). */
|
|
440
|
+
export function recoveryVerbs() {
|
|
441
|
+
return CLI_COMMANDS.filter((c) => c.recovery).map((c) => c.id);
|
|
442
|
+
}
|
|
443
|
+
// ---------------------------------------------------------------------------
|
|
444
|
+
// Rendered views.
|
|
445
|
+
// ---------------------------------------------------------------------------
|
|
446
|
+
const USAGE_COLUMN = 42;
|
|
447
|
+
function usageLabel(cmd) {
|
|
448
|
+
const verb = cmd.aliases && cmd.aliases.length > 0 ? `${cmd.id} | ${cmd.aliases.join(" | ")}` : cmd.id;
|
|
449
|
+
return cmd.usageArgs ? `claudexor ${verb} ${cmd.usageArgs}` : `claudexor ${verb}`;
|
|
450
|
+
}
|
|
451
|
+
function padded(left, help, column = USAGE_COLUMN) {
|
|
452
|
+
const gap = Math.max(column - left.length, 3);
|
|
453
|
+
return ` ${left}${" ".repeat(gap)}${help}`;
|
|
454
|
+
}
|
|
455
|
+
/** The `claudexor help` text — generated, never hand-edited. */
|
|
456
|
+
export function renderHelp(version) {
|
|
457
|
+
const lines = [];
|
|
458
|
+
lines.push(`claudexor — harness-agnostic AI coding control plane (v${version})`);
|
|
459
|
+
lines.push("");
|
|
460
|
+
lines.push("Usage:");
|
|
461
|
+
for (const cmd of CLI_COMMANDS) {
|
|
462
|
+
lines.push(padded(usageLabel(cmd), cmd.summary));
|
|
463
|
+
for (const extra of cmd.extraUsageLines ?? []) {
|
|
464
|
+
lines.push(padded(` ${extra.text}`, extra.help));
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
lines.push("");
|
|
468
|
+
lines.push("Options:");
|
|
469
|
+
for (const flag of CLI_FLAGS) {
|
|
470
|
+
if (flag.help === null)
|
|
471
|
+
continue;
|
|
472
|
+
const label = flag.kind === "value" ? `--${flag.name} ${flag.valueHint ?? "<value>"}` : `--${flag.name}`;
|
|
473
|
+
lines.push(padded(label, flag.help, 25));
|
|
474
|
+
}
|
|
475
|
+
return lines.join("\n") + "\n";
|
|
476
|
+
}
|
|
477
|
+
/** The REPL `/help` text — generated from REPL_COMMANDS. */
|
|
478
|
+
export function renderReplHelp() {
|
|
479
|
+
const lines = [];
|
|
480
|
+
lines.push("claudexor REPL — a thread of turns over your harnesses");
|
|
481
|
+
lines.push(padded("<text>", "run an agent turn (plan first with /plan if you prefer)", 18));
|
|
482
|
+
for (const c of REPL_COMMANDS) {
|
|
483
|
+
const label = c.args ? `${c.name} ${c.args}` : c.name;
|
|
484
|
+
lines.push(padded(label, c.help, 18));
|
|
485
|
+
}
|
|
486
|
+
lines.push('Turns run "in-place" in the project (or the thread\'s worktree), so each harness');
|
|
487
|
+
lines.push("RESUMES its own native CLI session and the next turn sees the previous turn's");
|
|
488
|
+
lines.push("work. A best-of-N run races candidates in isolated envelopes and auto-applies");
|
|
489
|
+
lines.push("the winner.");
|
|
490
|
+
return lines.join("\n");
|
|
491
|
+
}
|
|
492
|
+
/** Machine-readable help (`claudexor help --json`). */
|
|
493
|
+
export function helpJson(version) {
|
|
494
|
+
return {
|
|
495
|
+
ok: true,
|
|
496
|
+
version,
|
|
497
|
+
commands: CLI_COMMANDS.map((c) => ({
|
|
498
|
+
id: c.id,
|
|
499
|
+
aliases: c.aliases ?? [],
|
|
500
|
+
usage: usageLabel(c),
|
|
501
|
+
summary: c.summary,
|
|
502
|
+
flags: c.flags,
|
|
503
|
+
mutability: c.mutability,
|
|
504
|
+
stability: c.stability,
|
|
505
|
+
recovery: c.recovery === true,
|
|
506
|
+
})),
|
|
507
|
+
flags: CLI_FLAGS.map((f) => ({
|
|
508
|
+
name: f.name,
|
|
509
|
+
kind: f.kind,
|
|
510
|
+
value_hint: f.valueHint ?? null,
|
|
511
|
+
description: f.help === null ? null : f.help.replace(/\n\s+/g, " "),
|
|
512
|
+
})),
|
|
513
|
+
repl_commands: REPL_COMMANDS.map((c) => ({ name: c.name, args: c.args ?? null, description: c.help })),
|
|
514
|
+
};
|
|
515
|
+
}
|
|
516
|
+
//# sourceMappingURL=command-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-registry.js","sourceRoot":"","sources":["../src/command-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
interface LifecycleDeps {
|
|
2
|
+
daemonDir: string;
|
|
3
|
+
logPath: string;
|
|
4
|
+
stop: () => Promise<void> | void;
|
|
5
|
+
}
|
|
6
|
+
/** Pre-start: kill surviving children of a previous daemon life, then GC
|
|
7
|
+
* envelopes/branches/tmp-homes nothing owns anymore. */
|
|
8
|
+
export declare function runStartupCrashGc(deps: Pick<LifecycleDeps, "daemonDir" | "logPath">): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Post-start: periodic live-children snapshots (the reap list a crash leaves
|
|
11
|
+
* behind) and SIGTERM/SIGINT -> graceful stop (abort children, persist,
|
|
12
|
+
* close). Returns the shutdown finalizer for the main() tail.
|
|
13
|
+
*/
|
|
14
|
+
export declare function armDaemonLifecycle(deps: LifecycleDeps): {
|
|
15
|
+
finalize: () => void;
|
|
16
|
+
};
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=daemon-lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-lifecycle.d.ts","sourceRoot":"","sources":["../src/daemon-lifecycle.ts"],"names":[],"mappings":"AAWA,UAAU,aAAa;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAClC;AAMD;wDACwD;AACxD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBzG;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG;IAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;CAAE,CAuBhF"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon process-lifecycle wiring: pre-start crash GC (orphan
|
|
3
|
+
* reap + workspace sweep), live-children bookkeeping, and graceful shutdown
|
|
4
|
+
* signals. Kept out of claudexord's main() so the entrypoint stays a thin
|
|
5
|
+
* composition root.
|
|
6
|
+
*/
|
|
7
|
+
import { appendFileSync } from "node:fs";
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
import { reapRecordedOrphans, writePidsSnapshot } from "./orphan-reaper.js";
|
|
10
|
+
import { sweepOrphanWorkspaces } from "./orphan-sweeper.js";
|
|
11
|
+
const logLine = (path, message) => {
|
|
12
|
+
appendFileSync(path, `[${new Date().toISOString()}] ${message}\n`);
|
|
13
|
+
};
|
|
14
|
+
/** Pre-start: kill surviving children of a previous daemon life, then GC
|
|
15
|
+
* envelopes/branches/tmp-homes nothing owns anymore. */
|
|
16
|
+
export async function runStartupCrashGc(deps) {
|
|
17
|
+
const pidsPath = join(deps.daemonDir, "pids.json");
|
|
18
|
+
for (const action of reapRecordedOrphans(pidsPath)) {
|
|
19
|
+
logLine(deps.logPath, `reaper: ${action}`);
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
const sweepActions = await sweepOrphanWorkspaces({
|
|
23
|
+
jobsPath: join(deps.daemonDir, "jobs.json"),
|
|
24
|
+
threadsPath: join(deps.daemonDir, "threads.json"),
|
|
25
|
+
});
|
|
26
|
+
for (const action of sweepActions) {
|
|
27
|
+
logLine(deps.logPath, `sweep: ${action}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
logLine(deps.logPath, `sweep FAILED: ${err instanceof Error ? err.message : String(err)}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Post-start: periodic live-children snapshots (the reap list a crash leaves
|
|
36
|
+
* behind) and SIGTERM/SIGINT -> graceful stop (abort children, persist,
|
|
37
|
+
* close). Returns the shutdown finalizer for the main() tail.
|
|
38
|
+
*/
|
|
39
|
+
export function armDaemonLifecycle(deps) {
|
|
40
|
+
const pidsPath = join(deps.daemonDir, "pids.json");
|
|
41
|
+
const pidsTimer = setInterval(() => writePidsSnapshot(pidsPath), 2_000);
|
|
42
|
+
pidsTimer.unref?.();
|
|
43
|
+
let stopping = false;
|
|
44
|
+
const onShutdownSignal = (sig) => {
|
|
45
|
+
if (stopping)
|
|
46
|
+
return;
|
|
47
|
+
stopping = true;
|
|
48
|
+
logLine(deps.logPath, `${sig} received; stopping daemon`);
|
|
49
|
+
void deps.stop();
|
|
50
|
+
};
|
|
51
|
+
process.on("SIGTERM", () => onShutdownSignal("SIGTERM"));
|
|
52
|
+
process.on("SIGINT", () => onShutdownSignal("SIGINT"));
|
|
53
|
+
return {
|
|
54
|
+
finalize: () => {
|
|
55
|
+
clearInterval(pidsTimer);
|
|
56
|
+
// Graceful stop aborted all children; one final snapshot records any
|
|
57
|
+
// that survived the grace window (SIGKILL escalation may be in flight).
|
|
58
|
+
writePidsSnapshot(pidsPath);
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=daemon-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-lifecycle.js","sourceRoot":"","sources":["../src/daemon-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAQ5D,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,OAAe,EAAQ,EAAE;IACtD,cAAc,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO,IAAI,CAAC,CAAC;AACrE,CAAC,CAAC;AAEF;wDACwD;AACxD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAkD;IACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACnD,KAAK,MAAM,MAAM,IAAI,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,qBAAqB,CAAC;YAC/C,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC;YAC3C,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC;SAClD,CAAC,CAAC;QACH,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,MAAM,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAmB;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;IACxE,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;IAEpB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAQ,EAAE;QAC7C,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,4BAA4B,CAAC,CAAC;QAC1D,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;IACnB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEvD,OAAO;QACL,QAAQ,EAAE,GAAG,EAAE;YACb,aAAa,CAAC,SAAS,CAAC,CAAC;YACzB,qEAAqE;YACrE,wEAAwE;YACxE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;KACF,CAAC;AACJ,CAAC"}
|