@neuroverseos/governance 0.3.1 → 0.3.3

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.
Files changed (132) hide show
  1. package/.well-known/ai-plugin.json +34 -9
  2. package/AGENTS.md +72 -24
  3. package/README.md +343 -248
  4. package/dist/adapters/autoresearch.cjs +1345 -0
  5. package/dist/adapters/autoresearch.d.cts +111 -0
  6. package/dist/adapters/autoresearch.d.ts +111 -0
  7. package/dist/adapters/autoresearch.js +12 -0
  8. package/dist/adapters/deep-agents.cjs +1528 -0
  9. package/dist/adapters/deep-agents.d.cts +181 -0
  10. package/dist/adapters/deep-agents.d.ts +181 -0
  11. package/dist/adapters/deep-agents.js +17 -0
  12. package/dist/adapters/express.cjs +1253 -0
  13. package/dist/adapters/express.d.cts +66 -0
  14. package/dist/adapters/express.d.ts +66 -0
  15. package/dist/adapters/express.js +12 -0
  16. package/dist/adapters/index.cjs +2112 -0
  17. package/dist/adapters/index.d.cts +8 -0
  18. package/dist/adapters/index.d.ts +8 -0
  19. package/dist/adapters/index.js +68 -0
  20. package/dist/adapters/langchain.cjs +1315 -0
  21. package/dist/adapters/langchain.d.cts +89 -0
  22. package/dist/adapters/langchain.d.ts +89 -0
  23. package/dist/adapters/langchain.js +17 -0
  24. package/dist/adapters/openai.cjs +1345 -0
  25. package/dist/adapters/openai.d.cts +99 -0
  26. package/dist/adapters/openai.d.ts +99 -0
  27. package/dist/adapters/openai.js +17 -0
  28. package/dist/adapters/openclaw.cjs +1337 -0
  29. package/dist/adapters/openclaw.d.cts +99 -0
  30. package/dist/adapters/openclaw.d.ts +99 -0
  31. package/dist/adapters/openclaw.js +17 -0
  32. package/dist/add-ROOZLU62.js +314 -0
  33. package/dist/behavioral-MJO34S6Q.js +118 -0
  34. package/dist/bootstrap-CQRZVOXK.js +116 -0
  35. package/dist/bootstrap-emitter-Q7UIJZ2O.js +7 -0
  36. package/dist/bootstrap-parser-EEF36XDU.js +7 -0
  37. package/dist/browser.global.js +941 -0
  38. package/dist/build-QKOBBC23.js +341 -0
  39. package/dist/chunk-3WQLXYTP.js +91 -0
  40. package/dist/chunk-4FLICVVA.js +119 -0
  41. package/dist/chunk-4NGDRRQH.js +10 -0
  42. package/dist/chunk-5TPFNWRU.js +215 -0
  43. package/dist/chunk-5U2MQO5P.js +57 -0
  44. package/dist/chunk-6CZSKEY5.js +164 -0
  45. package/dist/chunk-6S5CFQXY.js +624 -0
  46. package/dist/chunk-7P3S7MAY.js +1090 -0
  47. package/dist/chunk-A5W4GNQO.js +130 -0
  48. package/dist/chunk-A7GKPPU7.js +226 -0
  49. package/dist/chunk-AKW5YVCE.js +96 -0
  50. package/dist/chunk-B6OXJLJ5.js +622 -0
  51. package/dist/chunk-BNKJPUPQ.js +113 -0
  52. package/dist/chunk-BQZMOEML.js +43 -0
  53. package/dist/chunk-CNSO6XW5.js +207 -0
  54. package/dist/chunk-CTZHONLA.js +135 -0
  55. package/dist/chunk-D2UCV5AK.js +326 -0
  56. package/dist/chunk-EMQDLDAF.js +458 -0
  57. package/dist/chunk-F66BVUYB.js +340 -0
  58. package/dist/chunk-G7DJ6VOD.js +101 -0
  59. package/dist/chunk-I3RRAYK2.js +11 -0
  60. package/dist/chunk-IS4WUH6Y.js +363 -0
  61. package/dist/chunk-MH7BT4VH.js +15 -0
  62. package/dist/chunk-O5ABKEA7.js +304 -0
  63. package/dist/chunk-OT6PXH54.js +61 -0
  64. package/dist/chunk-PVTQQS3Y.js +186 -0
  65. package/dist/chunk-Q6O7ZLO2.js +62 -0
  66. package/dist/chunk-QLPTHTVB.js +253 -0
  67. package/dist/chunk-QWGCMQQD.js +16 -0
  68. package/dist/chunk-QXBFT7NI.js +201 -0
  69. package/dist/chunk-TG6SEF24.js +246 -0
  70. package/dist/chunk-U6U7EJZL.js +177 -0
  71. package/dist/chunk-W7LLXRGY.js +830 -0
  72. package/dist/chunk-ZJTDUCC2.js +194 -0
  73. package/dist/chunk-ZWI3NIXK.js +314 -0
  74. package/dist/cli/neuroverse.cjs +14191 -0
  75. package/dist/cli/neuroverse.d.cts +1 -0
  76. package/dist/cli/neuroverse.d.ts +1 -0
  77. package/dist/cli/neuroverse.js +227 -0
  78. package/dist/cli/plan.cjs +2439 -0
  79. package/dist/cli/plan.d.cts +20 -0
  80. package/dist/cli/plan.d.ts +20 -0
  81. package/dist/cli/plan.js +353 -0
  82. package/dist/cli/run.cjs +2001 -0
  83. package/dist/cli/run.d.cts +20 -0
  84. package/dist/cli/run.d.ts +20 -0
  85. package/dist/cli/run.js +143 -0
  86. package/dist/configure-ai-6TZ3MCSI.js +132 -0
  87. package/dist/decision-flow-M63D47LO.js +61 -0
  88. package/dist/demo-G43RLCPK.js +469 -0
  89. package/dist/derive-FJZVIPUZ.js +153 -0
  90. package/dist/doctor-6BC6X2VO.js +173 -0
  91. package/dist/equity-penalties-SG5IZQ7I.js +244 -0
  92. package/dist/explain-RHBU2GBR.js +51 -0
  93. package/dist/guard-AJCCGZMF.js +92 -0
  94. package/dist/guard-contract-DqFcTScd.d.cts +821 -0
  95. package/dist/guard-contract-DqFcTScd.d.ts +821 -0
  96. package/dist/guard-engine-PNR6MHCM.js +10 -0
  97. package/dist/impact-3XVDSCBU.js +59 -0
  98. package/dist/improve-TQP4ECSY.js +66 -0
  99. package/dist/index.cjs +7591 -0
  100. package/dist/index.d.cts +2195 -0
  101. package/dist/index.d.ts +2195 -0
  102. package/dist/index.js +472 -0
  103. package/dist/infer-world-IFXCACJ5.js +543 -0
  104. package/dist/init-FYPV4SST.js +144 -0
  105. package/dist/init-world-TI7ARHBT.js +223 -0
  106. package/dist/mcp-server-5Y3ZM7TV.js +13 -0
  107. package/dist/model-adapter-VXEKB4LS.js +11 -0
  108. package/dist/playground-VZBNPPBO.js +560 -0
  109. package/dist/redteam-MZPZD3EF.js +357 -0
  110. package/dist/session-JYOARW54.js +15 -0
  111. package/dist/shared-7RLUHNMU.js +16 -0
  112. package/dist/shared-B8dvUUD8.d.cts +60 -0
  113. package/dist/shared-Dr5Wiay8.d.ts +60 -0
  114. package/dist/simulate-LJXYBC6M.js +83 -0
  115. package/dist/test-BOOR4A5F.js +217 -0
  116. package/dist/trace-PKV4KX56.js +166 -0
  117. package/dist/validate-RALX7CZS.js +81 -0
  118. package/dist/validate-engine-7ZXFVGF2.js +7 -0
  119. package/dist/viz/assets/index-B8SaeJZZ.js +23 -0
  120. package/dist/viz/index.html +23 -0
  121. package/dist/world-BIP4GZBZ.js +376 -0
  122. package/dist/world-loader-Y6HMQH2D.js +13 -0
  123. package/dist/worlds/autoresearch.nv-world.md +230 -0
  124. package/dist/worlds/coding-agent.nv-world.md +211 -0
  125. package/dist/worlds/derivation-world.nv-world.md +278 -0
  126. package/dist/worlds/research-agent.nv-world.md +169 -0
  127. package/dist/worlds/social-media.nv-world.md +198 -0
  128. package/dist/worlds/trading-agent.nv-world.md +218 -0
  129. package/examples/social-media-sim/bridge.py +209 -0
  130. package/examples/social-media-sim/simulation.py +927 -0
  131. package/package.json +16 -3
  132. package/simulate.html +4 -336
@@ -0,0 +1,20 @@
1
+ /**
2
+ * neuroverse plan — Plan Enforcement CLI
3
+ *
4
+ * Subcommands:
5
+ * compile Parse plan markdown into plan.json
6
+ * check Check an action against a plan (stdin → stdout)
7
+ * status Show plan progress
8
+ * advance Mark a step as completed
9
+ * derive Generate a full world from a plan
10
+ *
11
+ * Usage:
12
+ * neuroverse plan compile <plan.md> [--output plan.json]
13
+ * echo '{"intent":"..."}' | neuroverse plan check --plan plan.json [--world ./world/]
14
+ * neuroverse plan status --plan plan.json
15
+ * neuroverse plan advance <step_id> --plan plan.json
16
+ * neuroverse plan derive <plan.md> [--output ./world/]
17
+ */
18
+ declare function main(args: string[]): Promise<void>;
19
+
20
+ export { main };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * neuroverse plan — Plan Enforcement CLI
3
+ *
4
+ * Subcommands:
5
+ * compile Parse plan markdown into plan.json
6
+ * check Check an action against a plan (stdin → stdout)
7
+ * status Show plan progress
8
+ * advance Mark a step as completed
9
+ * derive Generate a full world from a plan
10
+ *
11
+ * Usage:
12
+ * neuroverse plan compile <plan.md> [--output plan.json]
13
+ * echo '{"intent":"..."}' | neuroverse plan check --plan plan.json [--world ./world/]
14
+ * neuroverse plan status --plan plan.json
15
+ * neuroverse plan advance <step_id> --plan plan.json
16
+ * neuroverse plan derive <plan.md> [--output ./world/]
17
+ */
18
+ declare function main(args: string[]): Promise<void>;
19
+
20
+ export { main };
@@ -0,0 +1,353 @@
1
+ import {
2
+ readStdin
3
+ } from "../chunk-BQZMOEML.js";
4
+ import {
5
+ PLAN_EXIT_CODES,
6
+ parsePlanMarkdown
7
+ } from "../chunk-6CZSKEY5.js";
8
+ import {
9
+ advancePlan,
10
+ evaluatePlan,
11
+ getPlanProgress
12
+ } from "../chunk-QLPTHTVB.js";
13
+ import "../chunk-QWGCMQQD.js";
14
+
15
+ // src/cli/plan.ts
16
+ import { readFileSync, writeFileSync } from "fs";
17
+ function parseArg(args, flag) {
18
+ const idx = args.indexOf(flag);
19
+ return idx >= 0 && idx + 1 < args.length ? args[idx + 1] : void 0;
20
+ }
21
+ async function compileCommand(args) {
22
+ const inputPath = args.find((a) => !a.startsWith("--"));
23
+ if (!inputPath) {
24
+ process.stderr.write("Usage: neuroverse plan compile <plan.md> [--output plan.json]\n");
25
+ process.exit(PLAN_EXIT_CODES.ERROR);
26
+ return;
27
+ }
28
+ const outputPath = parseArg(args, "--output") ?? inputPath.replace(/\.md$/, ".json");
29
+ let markdown;
30
+ try {
31
+ markdown = readFileSync(inputPath, "utf-8");
32
+ } catch (err) {
33
+ process.stderr.write(`Error reading ${inputPath}: ${err}
34
+ `);
35
+ process.exit(PLAN_EXIT_CODES.ERROR);
36
+ return;
37
+ }
38
+ const result = parsePlanMarkdown(markdown);
39
+ if (!result.success || !result.plan) {
40
+ process.stderr.write(`Parse errors:
41
+ `);
42
+ for (const error of result.errors) {
43
+ process.stderr.write(` - ${error}
44
+ `);
45
+ }
46
+ process.exit(PLAN_EXIT_CODES.ERROR);
47
+ return;
48
+ }
49
+ writeFileSync(outputPath, JSON.stringify(result.plan, null, 2) + "\n");
50
+ const plan = result.plan;
51
+ process.stdout.write(`Plan compiled: ${plan.plan_id}
52
+ `);
53
+ process.stdout.write(` Objective: ${plan.objective}
54
+ `);
55
+ process.stdout.write(` Steps: ${plan.steps.length}
56
+ `);
57
+ process.stdout.write(` Constraints: ${plan.constraints.length}
58
+ `);
59
+ process.stdout.write(` Sequential: ${plan.sequential}
60
+ `);
61
+ process.stdout.write(` Completion: ${plan.completion}
62
+ `);
63
+ if (plan.world_id) process.stdout.write(` World: ${plan.world_id}
64
+ `);
65
+ if (plan.expires_at) process.stdout.write(` Expires: ${plan.expires_at}
66
+ `);
67
+ process.stdout.write(` Output: ${outputPath}
68
+ `);
69
+ }
70
+ async function checkCommand(args) {
71
+ const planPath = parseArg(args, "--plan");
72
+ if (!planPath) {
73
+ process.stderr.write(`Usage: echo '{"intent":"..."}' | neuroverse plan check --plan plan.json
74
+ `);
75
+ process.exit(PLAN_EXIT_CODES.ERROR);
76
+ return;
77
+ }
78
+ let plan;
79
+ try {
80
+ plan = JSON.parse(readFileSync(planPath, "utf-8"));
81
+ } catch (err) {
82
+ process.stderr.write(`Error reading plan: ${err}
83
+ `);
84
+ process.exit(PLAN_EXIT_CODES.ERROR);
85
+ return;
86
+ }
87
+ const stdinData = await readStdin();
88
+ let event;
89
+ try {
90
+ event = JSON.parse(stdinData);
91
+ } catch {
92
+ process.stderr.write('Error: stdin must be valid JSON with an "intent" field.\n');
93
+ process.exit(PLAN_EXIT_CODES.ERROR);
94
+ return;
95
+ }
96
+ if (!event.intent) {
97
+ process.stderr.write('Error: event must have an "intent" field.\n');
98
+ process.exit(PLAN_EXIT_CODES.ERROR);
99
+ return;
100
+ }
101
+ const worldPath = parseArg(args, "--world");
102
+ if (worldPath) {
103
+ const { loadWorld } = await import("../world-loader-Y6HMQH2D.js");
104
+ const { evaluateGuard } = await import("../guard-engine-PNR6MHCM.js");
105
+ const world = await loadWorld(worldPath);
106
+ const verdict2 = evaluateGuard(event, world, { plan });
107
+ process.stdout.write(JSON.stringify(verdict2, null, 2) + "\n");
108
+ const exitCode2 = verdict2.status === "ALLOW" ? 0 : verdict2.status === "BLOCK" ? 1 : 2;
109
+ process.exit(exitCode2);
110
+ return;
111
+ }
112
+ const verdict = evaluatePlan(event, plan);
113
+ process.stdout.write(JSON.stringify(verdict, null, 2) + "\n");
114
+ const exitCode = PLAN_EXIT_CODES[verdict.status] ?? PLAN_EXIT_CODES.ERROR;
115
+ process.exit(exitCode);
116
+ }
117
+ async function statusCommand(args) {
118
+ const planPath = parseArg(args, "--plan");
119
+ if (!planPath) {
120
+ process.stderr.write("Usage: neuroverse plan status --plan plan.json\n");
121
+ process.exit(PLAN_EXIT_CODES.ERROR);
122
+ return;
123
+ }
124
+ let plan;
125
+ try {
126
+ plan = JSON.parse(readFileSync(planPath, "utf-8"));
127
+ } catch (err) {
128
+ process.stderr.write(`Error reading plan: ${err}
129
+ `);
130
+ process.exit(PLAN_EXIT_CODES.ERROR);
131
+ return;
132
+ }
133
+ const progress = getPlanProgress(plan);
134
+ process.stdout.write(`Plan: ${plan.plan_id}
135
+ `);
136
+ process.stdout.write(`Objective: ${plan.objective}
137
+ `);
138
+ process.stdout.write(`Completion: ${plan.completion ?? "trust"}
139
+ `);
140
+ process.stdout.write(`Progress: ${progress.completed}/${progress.total} (${progress.percentage}%)
141
+ `);
142
+ process.stdout.write(`
143
+ Steps:
144
+ `);
145
+ for (const step of plan.steps) {
146
+ const status = step.status === "completed" ? "[x]" : step.status === "active" ? "[>]" : step.status === "skipped" ? "[-]" : "[ ]";
147
+ let line = ` ${status} ${step.label}`;
148
+ if (step.tags?.length) line += ` [tag: ${step.tags.join(", ")}]`;
149
+ if (step.verify) line += ` [verify: ${step.verify}]`;
150
+ if (step.requires?.length) line += ` (after: ${step.requires.join(", ")})`;
151
+ process.stdout.write(line + "\n");
152
+ }
153
+ if (plan.constraints.length > 0) {
154
+ process.stdout.write(`
155
+ Constraints:
156
+ `);
157
+ for (const c of plan.constraints) {
158
+ process.stdout.write(` - ${c.description} [${c.type}/${c.enforcement}]
159
+ `);
160
+ }
161
+ }
162
+ }
163
+ async function advanceCommand(args) {
164
+ const stepId = args.find((a) => !a.startsWith("--"));
165
+ const planPath = parseArg(args, "--plan");
166
+ if (!stepId || !planPath) {
167
+ process.stderr.write("Usage: neuroverse plan advance <step_id> --plan plan.json [--evidence <type> --proof <proof>]\n");
168
+ process.exit(PLAN_EXIT_CODES.ERROR);
169
+ return;
170
+ }
171
+ let plan;
172
+ try {
173
+ plan = JSON.parse(readFileSync(planPath, "utf-8"));
174
+ } catch (err) {
175
+ process.stderr.write(`Error reading plan: ${err}
176
+ `);
177
+ process.exit(PLAN_EXIT_CODES.ERROR);
178
+ return;
179
+ }
180
+ const evidenceType = parseArg(args, "--evidence");
181
+ const evidenceProof = parseArg(args, "--proof");
182
+ let evidence;
183
+ if (evidenceType && evidenceProof) {
184
+ evidence = {
185
+ type: evidenceType,
186
+ proof: evidenceProof,
187
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
188
+ };
189
+ } else if (evidenceType || evidenceProof) {
190
+ process.stderr.write("Error: --evidence and --proof must both be provided.\n");
191
+ process.exit(PLAN_EXIT_CODES.ERROR);
192
+ return;
193
+ }
194
+ const result = advancePlan(plan, stepId, evidence);
195
+ if (!result.success) {
196
+ process.stderr.write(`Error: ${result.reason}
197
+ `);
198
+ process.exit(PLAN_EXIT_CODES.ERROR);
199
+ return;
200
+ }
201
+ writeFileSync(planPath, JSON.stringify(result.plan, null, 2) + "\n");
202
+ const progress = getPlanProgress(result.plan);
203
+ const step = plan.steps.find((s) => s.id === stepId);
204
+ process.stdout.write(`Step completed: ${step.label}
205
+ `);
206
+ if (result.evidence) {
207
+ process.stdout.write(`Evidence: ${result.evidence.type} = ${result.evidence.proof}
208
+ `);
209
+ }
210
+ process.stdout.write(`Progress: ${progress.completed}/${progress.total} (${progress.percentage}%)
211
+ `);
212
+ if (progress.completed === progress.total) {
213
+ process.stdout.write(`
214
+ Plan complete!
215
+ `);
216
+ }
217
+ }
218
+ async function deriveCommand(args) {
219
+ const inputPath = args.find((a) => !a.startsWith("--"));
220
+ if (!inputPath) {
221
+ process.stderr.write("Usage: neuroverse plan derive <plan.md> [--output ./world/]\n");
222
+ process.exit(PLAN_EXIT_CODES.ERROR);
223
+ return;
224
+ }
225
+ const outputDir = parseArg(args, "--output") ?? "./derived-world/";
226
+ let markdown;
227
+ try {
228
+ markdown = readFileSync(inputPath, "utf-8");
229
+ } catch (err) {
230
+ process.stderr.write(`Error reading ${inputPath}: ${err}
231
+ `);
232
+ process.exit(PLAN_EXIT_CODES.ERROR);
233
+ return;
234
+ }
235
+ const result = parsePlanMarkdown(markdown);
236
+ if (!result.success || !result.plan) {
237
+ process.stderr.write(`Parse errors:
238
+ `);
239
+ for (const error of result.errors) {
240
+ process.stderr.write(` - ${error}
241
+ `);
242
+ }
243
+ process.exit(PLAN_EXIT_CODES.ERROR);
244
+ return;
245
+ }
246
+ const plan = result.plan;
247
+ const { mkdirSync } = await import("fs");
248
+ mkdirSync(outputDir, { recursive: true });
249
+ const worldJson = {
250
+ world_id: `plan_${plan.plan_id}`,
251
+ name: `Derived: ${plan.objective}`,
252
+ thesis: plan.objective,
253
+ version: "1.0.0",
254
+ runtime_mode: "COMPLIANCE",
255
+ default_assumption_profile: "default",
256
+ default_alternative_profile: "default",
257
+ modules: ["governance"],
258
+ players: { thinking_space: true, experience_space: false, action_space: true }
259
+ };
260
+ const invariants = plan.constraints.map((c, i) => ({
261
+ id: `inv_${c.id}`,
262
+ label: c.description,
263
+ type: "structural",
264
+ enforcement: c.enforcement === "block" ? "hard" : "soft"
265
+ }));
266
+ const guards = {
267
+ intent_vocabulary: {},
268
+ guards: plan.steps.map((step) => {
269
+ const patternKey = `plan_step_${step.id}`;
270
+ return {
271
+ id: `guard_${step.id}`,
272
+ label: `Plan step: ${step.label}`,
273
+ description: `Governs execution of plan step: ${step.label}`,
274
+ category: "operational",
275
+ enforcement: "warn",
276
+ intent_patterns: [patternKey],
277
+ appliesTo: step.tools ?? [],
278
+ default_enabled: true,
279
+ immutable: false
280
+ };
281
+ })
282
+ };
283
+ for (const step of plan.steps) {
284
+ const keywords = step.label.toLowerCase().split(/\s+/).filter((w) => w.length > 3);
285
+ const pattern = keywords.map((k) => `(?=.*${k})`).join("") + ".*";
286
+ guards.intent_vocabulary[`plan_step_${step.id}`] = {
287
+ pattern,
288
+ description: step.label
289
+ };
290
+ }
291
+ writeFileSync(`${outputDir}/world.json`, JSON.stringify(worldJson, null, 2) + "\n");
292
+ writeFileSync(`${outputDir}/invariants.json`, JSON.stringify(invariants, null, 2) + "\n");
293
+ writeFileSync(`${outputDir}/guards.json`, JSON.stringify(guards, null, 2) + "\n");
294
+ process.stdout.write(`World derived from plan: ${plan.plan_id}
295
+ `);
296
+ process.stdout.write(` Output: ${outputDir}
297
+ `);
298
+ process.stdout.write(` Files: world.json, invariants.json, guards.json
299
+ `);
300
+ process.stdout.write(` Guards: ${plan.steps.length} (one per step)
301
+ `);
302
+ process.stdout.write(` Invariants: ${plan.constraints.length} (one per constraint)
303
+ `);
304
+ }
305
+ var PLAN_USAGE = `
306
+ neuroverse plan \u2014 Plan enforcement for AI agents.
307
+
308
+ Subcommands:
309
+ compile Parse plan markdown into plan.json
310
+ check Check an action against a plan (stdin \u2192 stdout)
311
+ status Show plan progress
312
+ advance Mark a step as completed
313
+ derive Generate a full world from a plan
314
+
315
+ Usage:
316
+ neuroverse plan compile <plan.md> [--output plan.json]
317
+ echo '{"intent":"..."}' | neuroverse plan check --plan plan.json [--world ./world/]
318
+ neuroverse plan status --plan plan.json
319
+ neuroverse plan advance <step_id> --plan plan.json
320
+ neuroverse plan derive <plan.md> [--output ./world/]
321
+ `.trim();
322
+ async function main(args) {
323
+ const subcommand = args[0];
324
+ const subArgs = args.slice(1);
325
+ switch (subcommand) {
326
+ case "compile":
327
+ return compileCommand(subArgs);
328
+ case "check":
329
+ return checkCommand(subArgs);
330
+ case "status":
331
+ return statusCommand(subArgs);
332
+ case "advance":
333
+ return advanceCommand(subArgs);
334
+ case "derive":
335
+ return deriveCommand(subArgs);
336
+ case "--help":
337
+ case "-h":
338
+ case "help":
339
+ case void 0:
340
+ process.stdout.write(PLAN_USAGE + "\n");
341
+ process.exit(0);
342
+ break;
343
+ default:
344
+ process.stderr.write(`Unknown plan subcommand: "${subcommand}"
345
+
346
+ `);
347
+ process.stdout.write(PLAN_USAGE + "\n");
348
+ process.exit(1);
349
+ }
350
+ }
351
+ export {
352
+ main
353
+ };