@a-company/paradigm 3.9.0 → 3.11.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.
Files changed (39) hide show
  1. package/dist/{accept-orchestration-DIGPJVUR.js → accept-orchestration-Z35I5AYN.js} +5 -5
  2. package/dist/{assessment-loader-T4GPBHLB.js → assessment-loader-C5EOUM47.js} +0 -1
  3. package/dist/{chunk-Y4XZWCHK.js → chunk-24AAVLME.js} +8 -8
  4. package/dist/{chunk-4N6AYEEA.js → chunk-3TWXFFZ3.js} +1 -1
  5. package/dist/{chunk-5S5CF3ER.js → chunk-4ZO3ZOPM.js} +19 -2141
  6. package/dist/{chunk-6RNYVBSG.js → chunk-CP6IZGUN.js} +4 -4
  7. package/dist/{chunk-M2XMTJHQ.js → chunk-DS5QY37M.js} +201 -287
  8. package/dist/chunk-F6EJKLF4.js +4971 -0
  9. package/dist/chunk-MW5DMGBB.js +255 -0
  10. package/dist/{chunk-KFHK6EBI.js → chunk-OSYMVGWX.js} +59 -3
  11. package/dist/{chunk-GY5KO3YZ.js → chunk-RDPXBMHK.js} +1 -1
  12. package/dist/{chunk-ADOBV4PH.js → chunk-UVI3OH3G.js} +6 -2127
  13. package/dist/{diff-J6C5IHPV.js → diff-PZAYCIAE.js} +5 -5
  14. package/dist/{dist-OLFOTUHS.js → dist-6SX5ZKKF.js} +2 -2
  15. package/dist/{dist-OMY7U6NR.js → dist-YB7T54QE.js} +1 -2
  16. package/dist/{doctor-TQYRF7KK.js → doctor-3YQ55536.js} +1 -1
  17. package/dist/drift-FH2UY64B.js +251 -0
  18. package/dist/{flow-7JUH6D4H.js → flow-MCKPJGRJ.js} +1 -1
  19. package/dist/{habits-ZJBAL4HD.js → habits-NC2TRMRV.js} +2 -2
  20. package/dist/{hooks-DLZEYHI3.js → hooks-JXYHVGIN.js} +1 -1
  21. package/dist/index.js +77 -51
  22. package/dist/mcp.js +5502 -9984
  23. package/dist/{orchestrate-FAV64G2R.js → orchestrate-BGRFBGBH.js} +5 -5
  24. package/dist/{plugin-update-checker-TWBWUSAG.js → plugin-update-checker-S3W4BUJO.js} +0 -1
  25. package/dist/portal-check-2HI4FFD6.js +42 -0
  26. package/dist/portal-compliance-KQCTAQTJ.js +18 -0
  27. package/dist/{providers-NQ67LO2Z.js → providers-IONB4YRJ.js} +1 -1
  28. package/dist/reindex-ZM6J53UP.js +11 -0
  29. package/dist/{sentinel-KDIGZWKT.js → sentinel-BGCISNIK.js} +1 -1
  30. package/dist/{server-NN7WDAZJ.js → server-3K3TTJH3.js} +1 -1
  31. package/dist/{shift-KJWSJLWN.js → shift-6I6N6RNK.js} +36 -8
  32. package/dist/{spawn-EO7B2UM3.js → spawn-WGFJ5RQZ.js} +5 -5
  33. package/dist/{task-loader-GUX4KS6N.js → task-loader-7M2FCBX6.js} +0 -1
  34. package/dist/{team-6CCNANKE.js → team-AFOKQ7YQ.js} +6 -6
  35. package/dist/{triage-B5W6GZLT.js → triage-MKKIWBSW.js} +2 -2
  36. package/dist/workspace-VBTW7OYL.js +271 -0
  37. package/package.json +2 -1
  38. package/dist/chunk-HPC3JAUP.js +0 -42
  39. /package/dist/{chunk-CCG6KYBT.js → chunk-5N5LR2KS.js} +0 -0
package/dist/index.js CHANGED
@@ -110,7 +110,7 @@ ${chalk2.magenta("\u2569 ")}${chalk2.cyan("\u2534 \u2534\u2534\u2514\u2500\u253
110
110
  program.name("paradigm").description("Unified developer tools ecosystem").version(VERSION).addHelpText("before", banner);
111
111
  program.command("init").description("Initialize Paradigm in the current project").option("-f, --force", "Overwrite existing files").option("--name <name>", "Project name").option("--ide <ide>", "Target IDE: cursor, copilot, windsurf, claude").option("--migrate", "Output migration prompt for existing IDE files").option("--quick", "Non-interactive mode with smart defaults").option("--dry-run", "Show what would be created without creating").action(initCommand);
112
112
  program.command("shift").description("Full project setup in one command (init + team init + scan + sync all IDEs + doctor)").option("-f, --force", "Reinitialize even if already setup").option("-q, --quick", "Skip slow operations (scan)").option("--verify", "Run health checks after setup").option("--ide <ide>", "Target specific IDE instead of all").option("--configure-models", "Force model configuration prompts for team agents").action(async (options) => {
113
- const { shiftCommand } = await import("./shift-KJWSJLWN.js");
113
+ const { shiftCommand } = await import("./shift-6I6N6RNK.js");
114
114
  await shiftCommand(options);
115
115
  });
116
116
  program.command("setup [path]").description("Interactive setup wizard for Paradigm").option("-y, --yes", "Accept all defaults (non-interactive)").option("-f, --force", "Overwrite existing .paradigm config").action(async (path2, options) => {
@@ -132,6 +132,10 @@ portalCmd.command("validate [path]").description("Validate portal.yaml configura
132
132
  const { gateValidateCommand } = await import("./validate-F3YHBCRZ.js");
133
133
  await gateValidateCommand(path2);
134
134
  });
135
+ portalCmd.command("check").description("Check portal gate implementation compliance (declared vs used)").option("--json", "Output as JSON").action(async (options) => {
136
+ const { portalCheckCommand } = await import("./portal-check-2HI4FFD6.js");
137
+ await portalCheckCommand(options);
138
+ });
135
139
  portalCmd.command("test [path]").description("Test portals and generate test files").option("--generate", "Generate test files from portal.yaml").option("--portal <portalId>", "Test specific portal").option("--component", "Validate component access").option("--framework <framework>", "Test framework (jest, vitest, mocha)", "jest").option("--output <dir>", "Output directory for generated tests", "tests/portals").action(async (path2, options) => {
136
140
  const { gateTestCommand } = await import("./test-DK2RWLTK.js");
137
141
  await gateTestCommand(path2, options);
@@ -204,7 +208,7 @@ scanCmd.action(() => {
204
208
  });
205
209
  var flowCmd = program.command("flow").description("Flow management commands");
206
210
  flowCmd.command("diagram <flowId>").description("Generate Mermaid diagram for a flow").option("-o, --output <path>", "Output file path").action(async (flowId, options) => {
207
- const { flowDiagramCommand } = await import("./flow-7JUH6D4H.js");
211
+ const { flowDiagramCommand } = await import("./flow-MCKPJGRJ.js");
208
212
  await flowDiagramCommand(flowId, options);
209
213
  });
210
214
  flowCmd.action(() => {
@@ -212,7 +216,7 @@ flowCmd.action(() => {
212
216
  });
213
217
  var teamCmd = program.command("team").description("Multi-agent orchestration commands");
214
218
  teamCmd.command("init [path]").description("Initialize team configuration with default agents").option("-f, --force", "Overwrite existing configuration").option("--configure-models", "Force model configuration prompts").option("--no-configure-models", "Skip model configuration").option("--json", "Output as JSON").action(async (path2, options) => {
215
- const { teamInitCommand } = await import("./team-6CCNANKE.js");
219
+ const { teamInitCommand } = await import("./team-AFOKQ7YQ.js");
216
220
  await teamInitCommand(path2, {
217
221
  ...options,
218
222
  configureModels: options.configureModels,
@@ -220,47 +224,47 @@ teamCmd.command("init [path]").description("Initialize team configuration with d
220
224
  });
221
225
  });
222
226
  teamCmd.command("status [path]").description("Show current team status").option("--running", "Show only running orchestrations").option("--id <id>", "Show specific orchestration").option("--json", "Output as JSON").action(async (path2, options) => {
223
- const { teamStatusCommand } = await import("./team-6CCNANKE.js");
227
+ const { teamStatusCommand } = await import("./team-AFOKQ7YQ.js");
224
228
  await teamStatusCommand(path2, options);
225
229
  });
226
230
  teamCmd.command("handoff [path]").description("Hand off current task to another agent").requiredOption("-t, --to <agent>", "Target agent name").option("-s, --summary <text>", "Summary of what was done").option("--json", "Output as JSON").action(async (path2, options) => {
227
- const { teamHandoffCommand } = await import("./team-6CCNANKE.js");
231
+ const { teamHandoffCommand } = await import("./team-AFOKQ7YQ.js");
228
232
  await teamHandoffCommand(path2, options);
229
233
  });
230
234
  teamCmd.command("accept [handoff-id] [path]").description("Accept a pending handoff").option("-n, --note <text>", "Acceptance note").option("--json", "Output as JSON").action(async (handoffId, path2, options) => {
231
- const { teamAcceptCommand } = await import("./team-6CCNANKE.js");
235
+ const { teamAcceptCommand } = await import("./team-AFOKQ7YQ.js");
232
236
  await teamAcceptCommand(handoffId, path2, options);
233
237
  });
234
238
  teamCmd.command("check [path]").description("Check for conflicts and team health issues").option("--json", "Output as JSON").action(async (path2, options) => {
235
- const { teamCheckCommand } = await import("./team-6CCNANKE.js");
239
+ const { teamCheckCommand } = await import("./team-AFOKQ7YQ.js");
236
240
  await teamCheckCommand(path2, options);
237
241
  });
238
242
  teamCmd.command("history [path]").description("Show full activity log").option("-l, --limit <number>", "Number of entries to show", "50").option("--json", "Output as JSON").action(async (path2, options) => {
239
- const { teamHistoryCommand } = await import("./team-6CCNANKE.js");
243
+ const { teamHistoryCommand } = await import("./team-AFOKQ7YQ.js");
240
244
  await teamHistoryCommand(path2, { ...options, limit: parseInt(options.limit) });
241
245
  });
242
246
  teamCmd.command("reset [path]").description("Reset team state for fresh start").option("-f, --force", "Force reset even with pending work").option("--json", "Output as JSON").action(async (path2, options) => {
243
- const { teamResetCommand } = await import("./team-6CCNANKE.js");
247
+ const { teamResetCommand } = await import("./team-AFOKQ7YQ.js");
244
248
  await teamResetCommand(path2, options);
245
249
  });
246
250
  teamCmd.command("spawn <agent> [path]").description("Spawn an AI agent to work on a task").requiredOption("-t, --task <task>", "Task for the agent to perform").option("-m, --model <model>", "Model to use: opus, sonnet, haiku").option("-p, --provider <provider>", "Provider: auto, claude, claude-code, claude-cli, manual").option("--budget <budget>", 'Budget limits (e.g., "tokens=100000,cost=2")').option("--timeout <ms>", "Timeout in milliseconds").option("--checkpoint", "Pause for approval before writes/deletes").option("-q, --quiet", "Suppress output").option("--json", "Output as JSON").action(async (agent, path2, options) => {
247
- const { teamSpawnCommand } = await import("./spawn-EO7B2UM3.js");
251
+ const { teamSpawnCommand } = await import("./spawn-WGFJ5RQZ.js");
248
252
  await teamSpawnCommand(agent, path2, options);
249
253
  });
250
254
  teamCmd.command("orchestrate <task> [path]").description("Orchestrate a multi-agent task").option("--solo", "Run in solo mode (single Claude)").option("--faceted", "Run in faceted mode (multi-agent, default)").option("--compare", "Run both modes and compare results").option("--background", "Run in background mode (returns immediately)").option("--notify <methods>", "Notification methods: bell,desktop,file,webhook (default: bell)").option("-m, --model <model>", "Orchestrator model: opus, sonnet, haiku").option("-p, --provider <provider>", "Provider: auto, claude, claude-code, claude-cli, manual").option("--budget <budget>", 'Budget limits (e.g., "tokens=500000,cost=5")').option("--checkpoint", "Pause for approval between agents").option("--live", "Stream agent output live").option("--pm", "Enable PM governance (compliance checks before/after)").option("-q, --quiet", "Suppress output").option("--json", "Output as JSON").action(async (task, path2, options) => {
251
- const { teamOrchestrateCommand } = await import("./orchestrate-FAV64G2R.js");
255
+ const { teamOrchestrateCommand } = await import("./orchestrate-BGRFBGBH.js");
252
256
  await teamOrchestrateCommand(task, path2, options);
253
257
  });
254
258
  teamCmd.command("diff <orchestration-id> [path]").description("Show diff of changes from a completed orchestration").option("--full", "Show full file contents").option("--json", "Output as JSON").action(async (orchestrationId, path2, options) => {
255
- const { teamDiffCommand } = await import("./diff-J6C5IHPV.js");
259
+ const { teamDiffCommand } = await import("./diff-PZAYCIAE.js");
256
260
  await teamDiffCommand(orchestrationId, path2, options);
257
261
  });
258
262
  teamCmd.command("accept-orch <orchestration-id> [path]").description("Accept orchestration changes").option("-n, --note <text>", "Acceptance note").option("--json", "Output as JSON").action(async (orchestrationId, path2, options) => {
259
- const { teamAcceptOrchestrationCommand } = await import("./accept-orchestration-DIGPJVUR.js");
263
+ const { teamAcceptOrchestrationCommand } = await import("./accept-orchestration-Z35I5AYN.js");
260
264
  await teamAcceptOrchestrationCommand(orchestrationId, path2, options);
261
265
  });
262
266
  teamCmd.command("reject-orch <orchestration-id> [path]").description("Reject orchestration changes").option("-r, --reason <text>", "Rejection reason").option("--cleanup", "Delete created files").option("--json", "Output as JSON").action(async (orchestrationId, path2, options) => {
263
- const { teamRejectOrchestrationCommand } = await import("./accept-orchestration-DIGPJVUR.js");
267
+ const { teamRejectOrchestrationCommand } = await import("./accept-orchestration-Z35I5AYN.js");
264
268
  await teamRejectOrchestrationCommand(orchestrationId, path2, options);
265
269
  });
266
270
  teamCmd.command("cost [path]").description("Show cost summary for orchestrations").option("--from <date>", "From date (ISO format)").option("--to <date>", "To date (ISO format)").option("--days <n>", "Last N days").option("-d, --detailed", "Show detailed breakdown").option("--json", "Output as JSON").action(async (path2, options) => {
@@ -272,11 +276,11 @@ teamCmd.command("export [path]").description("Export orchestration data").option
272
276
  await teamExportCommand(path2, options);
273
277
  });
274
278
  teamCmd.command("providers [path]").description("Show available agent providers and their status").option("--set <provider>", "Set preferred provider: auto, claude, claude-code, claude-cli, manual").option("--json", "Output as JSON").action(async (path2, options) => {
275
- const { teamProvidersCommand } = await import("./providers-NQ67LO2Z.js");
279
+ const { teamProvidersCommand } = await import("./providers-IONB4YRJ.js");
276
280
  await teamProvidersCommand(path2, options);
277
281
  });
278
282
  teamCmd.command("models [path]").description("Configure or view agent model assignments").option("--refresh", "Refresh model cache from environment").option("--json", "Output as JSON").action(async (path2, options) => {
279
- const { teamModelsCommand } = await import("./team-6CCNANKE.js");
283
+ const { teamModelsCommand } = await import("./team-AFOKQ7YQ.js");
280
284
  await teamModelsCommand(path2, options);
281
285
  });
282
286
  var agentsCmd = teamCmd.command("agents").description("Agent management commands");
@@ -291,7 +295,7 @@ agentsCmd.action(() => {
291
295
  console.log("\nRun `paradigm team agents suggest --help` for options.\n");
292
296
  });
293
297
  teamCmd.action(async () => {
294
- const { teamStatusCommand } = await import("./team-6CCNANKE.js");
298
+ const { teamStatusCommand } = await import("./team-AFOKQ7YQ.js");
295
299
  await teamStatusCommand(void 0, {});
296
300
  });
297
301
  var pluginCmd = program.command("plugin").description("Plugin management commands");
@@ -303,10 +307,32 @@ pluginCmd.action(async () => {
303
307
  const { pluginCheckCommand } = await import("./check-UZY647TB.js");
304
308
  await pluginCheckCommand({});
305
309
  });
310
+ var workspaceCmd = program.command("workspace").description("Multi-project workspace commands");
311
+ workspaceCmd.command("init").description("Create a .paradigm-workspace file from sibling projects").option("-n, --name <name>", "Workspace name (default: directory name)").option("-f, --force", "Overwrite existing workspace file").action(async (options) => {
312
+ const { workspaceInitCommand } = await import("./workspace-VBTW7OYL.js");
313
+ await workspaceInitCommand(options);
314
+ });
315
+ workspaceCmd.command("status").description("Show workspace member status and symbol counts").option("--json", "Output as JSON").action(async (options) => {
316
+ const { workspaceStatusCommand } = await import("./workspace-VBTW7OYL.js");
317
+ await workspaceStatusCommand(options);
318
+ });
319
+ workspaceCmd.command("reindex").description("Rebuild scan-index.json for all workspace members").option("-q, --quiet", "Suppress progress output").action(async (options) => {
320
+ const { workspaceReindexCommand } = await import("./workspace-VBTW7OYL.js");
321
+ await workspaceReindexCommand(options);
322
+ });
323
+ workspaceCmd.action(async () => {
324
+ const { workspaceStatusCommand } = await import("./workspace-VBTW7OYL.js");
325
+ await workspaceStatusCommand({});
326
+ });
306
327
  program.command("doctor").description("Health check - validate Paradigm setup").action(async () => {
307
- const { doctorCommand } = await import("./doctor-TQYRF7KK.js");
328
+ const { doctorCommand } = await import("./doctor-3YQ55536.js");
308
329
  await doctorCommand();
309
330
  });
331
+ var driftCmd = program.command("drift").description("Aspect anchor drift detection");
332
+ driftCmd.command("check").description("Check aspect anchors for drift and auto-heal shifted anchors").option("--json", "Output as JSON").option("--auto-heal", "Auto-heal shifted anchors (default: true)").option("--no-auto-heal", "Disable auto-healing").action(async (options) => {
333
+ const { driftCheckCommand } = await import("./drift-FH2UY64B.js");
334
+ await driftCheckCommand(options);
335
+ });
310
336
  var globalCmd = program.command("global").description("Manage Global Brain (~/.paradigm/)");
311
337
  globalCmd.command("clean").description("Remove old files from ~/.paradigm/ (Global Brain rotation)").option("--older-than <duration>", "Remove files older than duration (e.g., 90d, 30d, 7d)", "90d").option("-n, --dry-run", "Show what would be deleted without deleting").action(async (options) => {
312
338
  const { globalCleanCommand } = await import("./global-AXILUM5X.js");
@@ -504,93 +530,93 @@ historyCmd.option("--json", "Output as JSON").action(async (options) => {
504
530
  });
505
531
  var hooksCmd = program.command("hooks").description("Git hooks for automatic history capture");
506
532
  hooksCmd.command("install").description("Install git hooks, Claude Code hooks, and Cursor hooks").option("-f, --force", "Overwrite existing hooks").option("--post-commit", "Only install post-commit hook").option("--pre-push", "Only install pre-push hook").option("--claude-code", "Only install Claude Code hooks (stop + pre-commit)").option("--cursor", "Only install Cursor hooks (.cursor/hooks.json)").option("--dry-run", "Show what would be installed without making changes").action(async (options) => {
507
- const { hooksInstallCommand } = await import("./hooks-DLZEYHI3.js");
533
+ const { hooksInstallCommand } = await import("./hooks-JXYHVGIN.js");
508
534
  await hooksInstallCommand(options);
509
535
  });
510
536
  hooksCmd.command("uninstall").description("Remove paradigm hooks (git hooks, or --cursor for Cursor hooks)").option("--cursor", "Remove Cursor hooks instead of git hooks").option("--dry-run", "Show what would be removed without making changes").action(async (options) => {
511
- const { hooksUninstallCommand } = await import("./hooks-DLZEYHI3.js");
537
+ const { hooksUninstallCommand } = await import("./hooks-JXYHVGIN.js");
512
538
  await hooksUninstallCommand(options);
513
539
  });
514
540
  hooksCmd.command("status").description("Check git hooks status").action(async () => {
515
- const { hooksStatusCommand } = await import("./hooks-DLZEYHI3.js");
541
+ const { hooksStatusCommand } = await import("./hooks-JXYHVGIN.js");
516
542
  await hooksStatusCommand();
517
543
  });
518
544
  hooksCmd.action(async () => {
519
- const { hooksStatusCommand } = await import("./hooks-DLZEYHI3.js");
545
+ const { hooksStatusCommand } = await import("./hooks-JXYHVGIN.js");
520
546
  await hooksStatusCommand();
521
547
  });
522
548
  var triageCmd = program.command("triage").description("Semantic error triage - incident management and pattern matching");
523
549
  triageCmd.command("list").alias("ls").description("List recent incidents with matched patterns").option("-l, --limit <number>", "Maximum incidents to show", "10").option("-s, --status <status>", "Filter by status: open, investigating, resolved, wont-fix, all").option("--symbol <symbol>", "Filter by symbol (e.g., @checkout, ^auth)").option("-e, --env <environment>", "Filter by environment").option("--search <text>", "Search in error messages").option("--from <date>", "Filter from date (ISO format)").option("--to <date>", "Filter to date (ISO format)").option("--json", "Output as JSON").action(async (options) => {
524
- const { triageListCommand } = await import("./triage-B5W6GZLT.js");
550
+ const { triageListCommand } = await import("./triage-MKKIWBSW.js");
525
551
  await triageListCommand(options);
526
552
  });
527
553
  triageCmd.command("show <id>").description("Show full incident details").option("--timeline", "Include flow timeline").option("--json", "Output as JSON").action(async (id, options) => {
528
- const { triageShowCommand } = await import("./triage-B5W6GZLT.js");
554
+ const { triageShowCommand } = await import("./triage-MKKIWBSW.js");
529
555
  await triageShowCommand(id, options);
530
556
  });
531
557
  triageCmd.command("resolve <id>").description("Mark incident as resolved").option("-p, --pattern <patternId>", "Pattern that led to resolution").option("-c, --commit <hash>", "Git commit hash of fix").option("--pr <url>", "Pull request URL").option("-n, --notes <text>", "Resolution notes").option("--wont-fix", "Mark as will not fix").action(async (id, options) => {
532
- const { triageResolveCommand } = await import("./triage-B5W6GZLT.js");
558
+ const { triageResolveCommand } = await import("./triage-MKKIWBSW.js");
533
559
  await triageResolveCommand(id, options);
534
560
  });
535
561
  triageCmd.command("note <id> <note>").description("Add a note to an incident").action(async (id, note) => {
536
- const { triageNoteCommand } = await import("./triage-B5W6GZLT.js");
562
+ const { triageNoteCommand } = await import("./triage-MKKIWBSW.js");
537
563
  await triageNoteCommand(id, note);
538
564
  });
539
565
  triageCmd.command("link <id1> <id2>").description("Link two related incidents").action(async (id1, id2) => {
540
- const { triageLinkCommand } = await import("./triage-B5W6GZLT.js");
566
+ const { triageLinkCommand } = await import("./triage-MKKIWBSW.js");
541
567
  await triageLinkCommand(id1, id2);
542
568
  });
543
569
  var triagePatternsCmd = triageCmd.command("patterns").description("Manage failure patterns");
544
570
  triagePatternsCmd.command("list").alias("ls").description("List all patterns").option("--source <source>", "Filter by source: manual, suggested, imported, community").option("--min-confidence <score>", "Minimum confidence score").option("--json", "Output as JSON").action(async (options) => {
545
- const { triagePatternsListCommand } = await import("./triage-B5W6GZLT.js");
571
+ const { triagePatternsListCommand } = await import("./triage-MKKIWBSW.js");
546
572
  await triagePatternsListCommand(options);
547
573
  });
548
574
  triagePatternsCmd.command("show <id>").description("Show pattern details").option("--json", "Output as JSON").action(async (id, options) => {
549
- const { triagePatternsShowCommand } = await import("./triage-B5W6GZLT.js");
575
+ const { triagePatternsShowCommand } = await import("./triage-MKKIWBSW.js");
550
576
  await triagePatternsShowCommand(id, options);
551
577
  });
552
578
  triagePatternsCmd.command("add").description("Create a new pattern").requiredOption("--id <id>", "Pattern ID (kebab-case)").requiredOption("--name <name>", "Human-readable name").option("--description <text>", "Pattern description").option("--symbols <pairs>", 'Symbol criteria (e.g., "feature:@checkout,gate:^auth")').option("--error-contains <keywords>", "Error keywords (comma-separated)").option("--missing-signals <signals>", "Expected missing signals (comma-separated)").option("--strategy <strategy>", "Resolution strategy: retry, fallback, fix-data, fix-code, ignore, escalate", "fix-code").option("--priority <priority>", "Priority: low, medium, high, critical", "medium").option("--code-hint <text>", "Code hint for resolution").option("--tags <tags>", "Tags (comma-separated)").option("--from-incident <id>", "Generate suggestion from incident").action(async (options) => {
553
- const { triagePatternsAddCommand } = await import("./triage-B5W6GZLT.js");
579
+ const { triagePatternsAddCommand } = await import("./triage-MKKIWBSW.js");
554
580
  await triagePatternsAddCommand(options);
555
581
  });
556
582
  triagePatternsCmd.command("delete <id>").alias("rm").description("Delete a pattern").action(async (id) => {
557
- const { triagePatternsDeleteCommand } = await import("./triage-B5W6GZLT.js");
583
+ const { triagePatternsDeleteCommand } = await import("./triage-MKKIWBSW.js");
558
584
  await triagePatternsDeleteCommand(id);
559
585
  });
560
586
  triagePatternsCmd.command("test <id>").description("Test pattern against historical incidents").option("-l, --limit <number>", "Max incidents to test against", "100").option("--json", "Output as JSON").action(async (id, options) => {
561
- const { triagePatternsTestCommand } = await import("./triage-B5W6GZLT.js");
587
+ const { triagePatternsTestCommand } = await import("./triage-MKKIWBSW.js");
562
588
  await triagePatternsTestCommand(id, options);
563
589
  });
564
590
  triagePatternsCmd.command("seed").description("Load built-in seed patterns").action(async () => {
565
- const { triagePatternsSeedCommand } = await import("./triage-B5W6GZLT.js");
591
+ const { triagePatternsSeedCommand } = await import("./triage-MKKIWBSW.js");
566
592
  await triagePatternsSeedCommand();
567
593
  });
568
594
  triagePatternsCmd.action(async () => {
569
- const { triagePatternsListCommand } = await import("./triage-B5W6GZLT.js");
595
+ const { triagePatternsListCommand } = await import("./triage-MKKIWBSW.js");
570
596
  await triagePatternsListCommand({});
571
597
  });
572
598
  triageCmd.command("export <type>").description("Export patterns or full backup (type: patterns, backup)").option("-o, --output <path>", "Output file path").option("--include-private", "Include private patterns").action(async (type, options) => {
573
- const { triageExportCommand } = await import("./triage-B5W6GZLT.js");
599
+ const { triageExportCommand } = await import("./triage-MKKIWBSW.js");
574
600
  await triageExportCommand(type, options);
575
601
  });
576
602
  triageCmd.command("import <file>").description("Import patterns from JSON file").option("--overwrite", "Overwrite existing patterns").action(async (file, options) => {
577
- const { triageImportCommand } = await import("./triage-B5W6GZLT.js");
603
+ const { triageImportCommand } = await import("./triage-MKKIWBSW.js");
578
604
  await triageImportCommand(file, options);
579
605
  });
580
606
  triageCmd.command("restore <file>").description("Restore from full backup").action(async (file) => {
581
- const { triageRestoreCommand } = await import("./triage-B5W6GZLT.js");
607
+ const { triageRestoreCommand } = await import("./triage-MKKIWBSW.js");
582
608
  await triageRestoreCommand(file);
583
609
  });
584
610
  triageCmd.command("stats").description("Show statistics dashboard").option("-p, --period <period>", "Time period: 1d, 7d, 30d, 90d", "7d").option("--symbol <symbol>", "Show health for specific symbol").option("--json", "Output as JSON").action(async (options) => {
585
- const { triageStatsCommand } = await import("./triage-B5W6GZLT.js");
611
+ const { triageStatsCommand } = await import("./triage-MKKIWBSW.js");
586
612
  await triageStatsCommand(options);
587
613
  });
588
614
  triageCmd.command("record").description("Manually record an incident").requiredOption("--error <message>", "Error message").requiredOption("-e, --env <environment>", "Environment").option("--feature <symbol>", "Feature symbol (@...)").option("--component <symbol>", "Component symbol (#...)").option("--flow <symbol>", "Flow symbol ($...)").option("--gate <symbol>", "Gate symbol (^...)").option("--signal <symbol>", "Signal symbol (!...)").option("--state <symbol>", "State symbol (%...)").option("--integration <symbol>", "Integration symbol (&...)").option("--service <name>", "Service name").option("--version <version>", "App version").option("--stack <trace>", "Stack trace").option("--json", "Output as JSON").action(async (options) => {
589
- const { triageRecordCommand } = await import("./triage-B5W6GZLT.js");
615
+ const { triageRecordCommand } = await import("./triage-MKKIWBSW.js");
590
616
  await triageRecordCommand(options);
591
617
  });
592
618
  triageCmd.option("-l, --limit <number>", "Maximum incidents to show", "10").option("-s, --status <status>", "Filter by status").option("--json", "Output as JSON").action(async (options) => {
593
- const { triageListCommand } = await import("./triage-B5W6GZLT.js");
619
+ const { triageListCommand } = await import("./triage-MKKIWBSW.js");
594
620
  await triageListCommand(options);
595
621
  });
596
622
  var loreCmd = program.command("lore").description("Project lore - timeline of everything that happened to this project");
@@ -628,47 +654,47 @@ loreCmd.option("-p, --port <port>", "Port to run on", "3840").option("--no-open"
628
654
  });
629
655
  var habitsCmd = program.command("habits").description("Behavioral habits - practice tracking and compliance");
630
656
  habitsCmd.command("list").alias("ls").description("List all configured habits").option("--trigger <trigger>", "Filter by trigger: preflight, postflight, on-stop, on-commit").option("--category <category>", "Filter by category: discovery, verification, testing, documentation, collaboration, security").option("--json", "Output as JSON").action(async (options) => {
631
- const { habitsListCommand } = await import("./habits-ZJBAL4HD.js");
657
+ const { habitsListCommand } = await import("./habits-NC2TRMRV.js");
632
658
  await habitsListCommand(options);
633
659
  });
634
660
  habitsCmd.command("status").description("Show practice profile with compliance rates").option("-p, --period <period>", "Time period: 7d, 30d, 90d, all", "30d").option("--json", "Output as JSON").action(async (options) => {
635
- const { habitsStatusCommand } = await import("./habits-ZJBAL4HD.js");
661
+ const { habitsStatusCommand } = await import("./habits-NC2TRMRV.js");
636
662
  await habitsStatusCommand(options);
637
663
  });
638
664
  habitsCmd.command("init").description("Initialize habits.yaml with seed habits").option("-f, --force", "Overwrite existing file").action(async (options) => {
639
- const { habitsInitCommand } = await import("./habits-ZJBAL4HD.js");
665
+ const { habitsInitCommand } = await import("./habits-NC2TRMRV.js");
640
666
  await habitsInitCommand(options);
641
667
  });
642
668
  habitsCmd.command("check").description("Evaluate habit compliance for a trigger point").requiredOption("-t, --trigger <trigger>", "Trigger: preflight, postflight, on-stop, on-commit").option("--record", "Record practice events to Sentinel").option("--json", "Output as JSON").option("--files <files>", "Comma-separated files modified (default: git diff)").option("--symbols <symbols>", "Comma-separated symbols touched").action(async (options) => {
643
- const { habitsCheckCommand } = await import("./habits-ZJBAL4HD.js");
669
+ const { habitsCheckCommand } = await import("./habits-NC2TRMRV.js");
644
670
  await habitsCheckCommand(options);
645
671
  });
646
672
  habitsCmd.command("add").description("Add a custom habit").requiredOption("--id <id>", "Habit ID (kebab-case)").requiredOption("--name <name>", "Human-readable name").requiredOption("--description <desc>", "What this habit enforces").requiredOption("--category <category>", "Category: discovery, verification, testing, documentation, collaboration, security").requiredOption("--trigger <trigger>", "Trigger: preflight, postflight, on-stop, on-commit").option("--severity <severity>", "Severity: advisory, warn, block", "advisory").option("--tools <tools>", "Comma-separated tools to check (for tool-called check type)").option("--check-type <type>", "Check type: tool-called, file-exists, file-modified, lore-recorded, symbols-registered, gates-declared, tests-exist, git-clean", "tool-called").option("--patterns <patterns>", "Comma-separated patterns (for file-exists, file-modified, tests-exist check types)").action(async (options) => {
647
- const { habitsAddCommand } = await import("./habits-ZJBAL4HD.js");
673
+ const { habitsAddCommand } = await import("./habits-NC2TRMRV.js");
648
674
  await habitsAddCommand({ ...options, checkType: options.checkType });
649
675
  });
650
676
  habitsCmd.command("edit <id>").description("Edit a habit (seed habits: only severity/enabled; custom: all fields)").option("--name <name>", "New name").option("--description <desc>", "New description").option("--category <category>", "New category").option("--trigger <trigger>", "New trigger").option("--severity <severity>", "New severity: advisory, warn, block").option("--enabled <bool>", "Enable or disable: true, false").option("--check-type <type>", "New check type").option("--patterns <patterns>", "Comma-separated patterns").option("--tools <tools>", "Comma-separated tools").action(async (id, options) => {
651
- const { habitsEditCommand } = await import("./habits-ZJBAL4HD.js");
677
+ const { habitsEditCommand } = await import("./habits-NC2TRMRV.js");
652
678
  await habitsEditCommand(id, { ...options, checkType: options.checkType });
653
679
  });
654
680
  habitsCmd.command("remove <id>").description("Remove a custom habit (seed habits cannot be removed, only disabled)").option("-y, --yes", "Skip confirmation").action(async (id, options) => {
655
- const { habitsRemoveCommand } = await import("./habits-ZJBAL4HD.js");
681
+ const { habitsRemoveCommand } = await import("./habits-NC2TRMRV.js");
656
682
  await habitsRemoveCommand(id, options);
657
683
  });
658
684
  habitsCmd.command("enable <id>").description("Enable a habit").action(async (id) => {
659
- const { habitsToggleCommand } = await import("./habits-ZJBAL4HD.js");
685
+ const { habitsToggleCommand } = await import("./habits-NC2TRMRV.js");
660
686
  await habitsToggleCommand(id, "enable");
661
687
  });
662
688
  habitsCmd.command("disable <id>").description("Disable a habit").action(async (id) => {
663
- const { habitsToggleCommand } = await import("./habits-ZJBAL4HD.js");
689
+ const { habitsToggleCommand } = await import("./habits-NC2TRMRV.js");
664
690
  await habitsToggleCommand(id, "disable");
665
691
  });
666
692
  habitsCmd.action(async () => {
667
- const { habitsListCommand } = await import("./habits-ZJBAL4HD.js");
693
+ const { habitsListCommand } = await import("./habits-NC2TRMRV.js");
668
694
  await habitsListCommand({});
669
695
  });
670
696
  program.command("sentinel [path]").description("Launch the Sentinel UI - unified codebase intelligence visualizer").option("-p, --port <port>", "Port to run on", "3838").option("--no-open", "Don't open browser automatically").action(async (path2, options) => {
671
- const { sentinelCommand } = await import("./sentinel-KDIGZWKT.js");
697
+ const { sentinelCommand } = await import("./sentinel-BGCISNIK.js");
672
698
  await sentinelCommand(path2, options);
673
699
  });
674
700
  program.command("university").description("Launch Paradigm University - interactive learning platform & PLSAT certification").option("-p, --port <port>", "Port to run on", "3839").option("--no-open", "Don't open browser automatically").action(async (options) => {