@a-company/paradigm 3.0.2 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -109,7 +109,7 @@ ${chalk2.magenta("\u2569 ")}${chalk2.cyan("\u2534 \u2534\u2534\u2514\u2500\u253
109
109
  program.name("paradigm").description("Unified developer tools ecosystem").version(VERSION).addHelpText("before", banner);
110
110
  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);
111
111
  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) => {
112
- const { shiftCommand } = await import("./shift-NABNKPGL.js");
112
+ const { shiftCommand } = await import("./shift-DLV5YLFJ.js");
113
113
  await shiftCommand(options);
114
114
  });
115
115
  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) => {
@@ -470,118 +470,139 @@ historyCmd.option("--json", "Output as JSON").action(async (options) => {
470
470
  });
471
471
  var hooksCmd = program.command("hooks").description("Git hooks for automatic history capture");
472
472
  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)").action(async (options) => {
473
- const { hooksInstallCommand } = await import("./hooks-7TQIRXXS.js");
473
+ const { hooksInstallCommand } = await import("./hooks-ZVGXLK6Z.js");
474
474
  await hooksInstallCommand(options);
475
475
  });
476
476
  hooksCmd.command("uninstall").description("Remove paradigm hooks (git hooks, or --cursor for Cursor hooks)").option("--cursor", "Remove Cursor hooks instead of git hooks").action(async (options) => {
477
- const { hooksUninstallCommand } = await import("./hooks-7TQIRXXS.js");
477
+ const { hooksUninstallCommand } = await import("./hooks-ZVGXLK6Z.js");
478
478
  await hooksUninstallCommand(options);
479
479
  });
480
480
  hooksCmd.command("status").description("Check git hooks status").action(async () => {
481
- const { hooksStatusCommand } = await import("./hooks-7TQIRXXS.js");
481
+ const { hooksStatusCommand } = await import("./hooks-ZVGXLK6Z.js");
482
482
  await hooksStatusCommand();
483
483
  });
484
484
  hooksCmd.action(async () => {
485
- const { hooksStatusCommand } = await import("./hooks-7TQIRXXS.js");
485
+ const { hooksStatusCommand } = await import("./hooks-ZVGXLK6Z.js");
486
486
  await hooksStatusCommand();
487
487
  });
488
488
  var triageCmd = program.command("triage").description("Semantic error triage - incident management and pattern matching");
489
489
  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) => {
490
- const { triageListCommand } = await import("./triage-RM5KNG5V.js");
490
+ const { triageListCommand } = await import("./triage-TBIWJA6R.js");
491
491
  await triageListCommand(options);
492
492
  });
493
493
  triageCmd.command("show <id>").description("Show full incident details").option("--timeline", "Include flow timeline").option("--json", "Output as JSON").action(async (id, options) => {
494
- const { triageShowCommand } = await import("./triage-RM5KNG5V.js");
494
+ const { triageShowCommand } = await import("./triage-TBIWJA6R.js");
495
495
  await triageShowCommand(id, options);
496
496
  });
497
497
  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) => {
498
- const { triageResolveCommand } = await import("./triage-RM5KNG5V.js");
498
+ const { triageResolveCommand } = await import("./triage-TBIWJA6R.js");
499
499
  await triageResolveCommand(id, options);
500
500
  });
501
501
  triageCmd.command("note <id> <note>").description("Add a note to an incident").action(async (id, note) => {
502
- const { triageNoteCommand } = await import("./triage-RM5KNG5V.js");
502
+ const { triageNoteCommand } = await import("./triage-TBIWJA6R.js");
503
503
  await triageNoteCommand(id, note);
504
504
  });
505
505
  triageCmd.command("link <id1> <id2>").description("Link two related incidents").action(async (id1, id2) => {
506
- const { triageLinkCommand } = await import("./triage-RM5KNG5V.js");
506
+ const { triageLinkCommand } = await import("./triage-TBIWJA6R.js");
507
507
  await triageLinkCommand(id1, id2);
508
508
  });
509
509
  var triagePatternsCmd = triageCmd.command("patterns").description("Manage failure patterns");
510
510
  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) => {
511
- const { triagePatternsListCommand } = await import("./triage-RM5KNG5V.js");
511
+ const { triagePatternsListCommand } = await import("./triage-TBIWJA6R.js");
512
512
  await triagePatternsListCommand(options);
513
513
  });
514
514
  triagePatternsCmd.command("show <id>").description("Show pattern details").option("--json", "Output as JSON").action(async (id, options) => {
515
- const { triagePatternsShowCommand } = await import("./triage-RM5KNG5V.js");
515
+ const { triagePatternsShowCommand } = await import("./triage-TBIWJA6R.js");
516
516
  await triagePatternsShowCommand(id, options);
517
517
  });
518
518
  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) => {
519
- const { triagePatternsAddCommand } = await import("./triage-RM5KNG5V.js");
519
+ const { triagePatternsAddCommand } = await import("./triage-TBIWJA6R.js");
520
520
  await triagePatternsAddCommand(options);
521
521
  });
522
522
  triagePatternsCmd.command("delete <id>").alias("rm").description("Delete a pattern").action(async (id) => {
523
- const { triagePatternsDeleteCommand } = await import("./triage-RM5KNG5V.js");
523
+ const { triagePatternsDeleteCommand } = await import("./triage-TBIWJA6R.js");
524
524
  await triagePatternsDeleteCommand(id);
525
525
  });
526
526
  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) => {
527
- const { triagePatternsTestCommand } = await import("./triage-RM5KNG5V.js");
527
+ const { triagePatternsTestCommand } = await import("./triage-TBIWJA6R.js");
528
528
  await triagePatternsTestCommand(id, options);
529
529
  });
530
530
  triagePatternsCmd.command("seed").description("Load built-in seed patterns").action(async () => {
531
- const { triagePatternsSeedCommand } = await import("./triage-RM5KNG5V.js");
531
+ const { triagePatternsSeedCommand } = await import("./triage-TBIWJA6R.js");
532
532
  await triagePatternsSeedCommand();
533
533
  });
534
534
  triagePatternsCmd.action(async () => {
535
- const { triagePatternsListCommand } = await import("./triage-RM5KNG5V.js");
535
+ const { triagePatternsListCommand } = await import("./triage-TBIWJA6R.js");
536
536
  await triagePatternsListCommand({});
537
537
  });
538
538
  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) => {
539
- const { triageExportCommand } = await import("./triage-RM5KNG5V.js");
539
+ const { triageExportCommand } = await import("./triage-TBIWJA6R.js");
540
540
  await triageExportCommand(type, options);
541
541
  });
542
542
  triageCmd.command("import <file>").description("Import patterns from JSON file").option("--overwrite", "Overwrite existing patterns").action(async (file, options) => {
543
- const { triageImportCommand } = await import("./triage-RM5KNG5V.js");
543
+ const { triageImportCommand } = await import("./triage-TBIWJA6R.js");
544
544
  await triageImportCommand(file, options);
545
545
  });
546
546
  triageCmd.command("restore <file>").description("Restore from full backup").action(async (file) => {
547
- const { triageRestoreCommand } = await import("./triage-RM5KNG5V.js");
547
+ const { triageRestoreCommand } = await import("./triage-TBIWJA6R.js");
548
548
  await triageRestoreCommand(file);
549
549
  });
550
550
  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) => {
551
- const { triageStatsCommand } = await import("./triage-RM5KNG5V.js");
551
+ const { triageStatsCommand } = await import("./triage-TBIWJA6R.js");
552
552
  await triageStatsCommand(options);
553
553
  });
554
554
  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) => {
555
- const { triageRecordCommand } = await import("./triage-RM5KNG5V.js");
555
+ const { triageRecordCommand } = await import("./triage-TBIWJA6R.js");
556
556
  await triageRecordCommand(options);
557
557
  });
558
558
  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) => {
559
- const { triageListCommand } = await import("./triage-RM5KNG5V.js");
559
+ const { triageListCommand } = await import("./triage-TBIWJA6R.js");
560
560
  await triageListCommand(options);
561
561
  });
562
562
  var loreCmd = program.command("lore").description("Project lore - timeline of everything that happened to this project");
563
563
  loreCmd.command("list").alias("ls").description("List recent lore entries").option("--author <author>", "Filter by author").option("--type <type>", "Filter by type: agent-session, human-note, decision, review, incident, milestone").option("--symbol <symbol>", "Filter by symbol").option("--tags <tags>", "Filter by tags (comma-separated)").option("-l, --limit <number>", "Number of entries", "20").option("--json", "Output as JSON").action(async (options) => {
564
- const { loreListCommand } = await import("./list-QMUE7DPK.js");
564
+ const { loreListCommand } = await import("./list-SDYF6T7M.js");
565
565
  await loreListCommand(options);
566
566
  });
567
567
  loreCmd.command("show <id>").description("Show full detail for a lore entry").option("--json", "Output as JSON").action(async (id, options) => {
568
- const { loreShowCommand } = await import("./show-S653P3TO.js");
568
+ const { loreShowCommand } = await import("./show-QRV7CWKT.js");
569
569
  await loreShowCommand(id, options);
570
570
  });
571
571
  loreCmd.command("record").description("Record a new lore entry (human note, milestone, etc.)").option("--type <type>", "Entry type: human-note, decision, milestone", "human-note").option("--author <author>", "Author name").option("--title <title>", "Entry title").option("--summary <summary>", "Entry summary").option("--symbols <symbols>", "Comma-separated symbols").option("--tags <tags>", "Comma-separated tags").action(async (options) => {
572
- const { loreRecordCommand } = await import("./record-5CTCDFUO.js");
572
+ const { loreRecordCommand } = await import("./record-5IY5RWTI.js");
573
573
  await loreRecordCommand(options);
574
574
  });
575
575
  loreCmd.command("review <id>").description("Add a review to a lore entry").option("--reviewer <name>", "Reviewer name").option("--completeness <n>", "Completeness score (1-5)", "3").option("--quality <n>", "Quality score (1-5)", "3").option("--notes <text>", "Review notes").action(async (id, options) => {
576
- const { loreReviewCommand } = await import("./review-QEDNQAIO.js");
576
+ const { loreReviewCommand } = await import("./review-CSA223ZJ.js");
577
577
  await loreReviewCommand(id, options);
578
578
  });
579
579
  loreCmd.option("-p, --port <port>", "Port to run on", "3840").option("--no-open", "Don't open browser automatically").action(async (options) => {
580
580
  const { loreServeCommand } = await import("./serve-WCIRW244.js");
581
581
  await loreServeCommand(void 0, options);
582
582
  });
583
+ var habitsCmd = program.command("habits").description("Behavioral habits - practice tracking and compliance");
584
+ 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) => {
585
+ const { habitsListCommand } = await import("./habits-YVCOZ2LC.js");
586
+ await habitsListCommand(options);
587
+ });
588
+ 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) => {
589
+ const { habitsStatusCommand } = await import("./habits-YVCOZ2LC.js");
590
+ await habitsStatusCommand(options);
591
+ });
592
+ habitsCmd.command("init").description("Initialize habits.yaml with seed habits").option("-f, --force", "Overwrite existing file").action(async (options) => {
593
+ const { habitsInitCommand } = await import("./habits-YVCOZ2LC.js");
594
+ await habitsInitCommand(options);
595
+ });
596
+ 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)").action(async (options) => {
597
+ const { habitsAddCommand } = await import("./habits-YVCOZ2LC.js");
598
+ await habitsAddCommand(options);
599
+ });
600
+ habitsCmd.action(async () => {
601
+ const { habitsListCommand } = await import("./habits-YVCOZ2LC.js");
602
+ await habitsListCommand({});
603
+ });
583
604
  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) => {
584
- const { sentinelCommand } = await import("./sentinel-RSEXIRXM.js");
605
+ const { sentinelCommand } = await import("./sentinel-WB7GIK4V.js");
585
606
  await sentinelCommand(path2, options);
586
607
  });
587
608
  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) => {
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  loadLoreEntries
4
- } from "./chunk-27OSFWHG.js";
4
+ } from "./chunk-X3ROB27T.js";
5
5
  import "./chunk-MO4EEYFW.js";
6
6
 
7
7
  // src/commands/lore/list.ts