chainlesschain 0.81.0 → 0.143.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 (209) hide show
  1. package/bin/chainlesschain.js +0 -0
  2. package/package.json +1 -1
  3. package/src/commands/a2a.js +62 -0
  4. package/src/commands/activitypub.js +61 -0
  5. package/src/commands/agent-network.js +254 -1
  6. package/src/commands/agent.js +117 -0
  7. package/src/commands/audit.js +302 -0
  8. package/src/commands/automation.js +271 -1
  9. package/src/commands/bi.js +61 -0
  10. package/src/commands/bm25.js +78 -0
  11. package/src/commands/browse.js +64 -0
  12. package/src/commands/ccron.js +78 -0
  13. package/src/commands/codegen.js +224 -0
  14. package/src/commands/collab.js +341 -0
  15. package/src/commands/compliance.js +1075 -0
  16. package/src/commands/compt.js +78 -0
  17. package/src/commands/consol.js +231 -0
  18. package/src/commands/cowork.js +263 -0
  19. package/src/commands/crosschain.js +62 -0
  20. package/src/commands/dao.js +62 -0
  21. package/src/commands/dbevo.js +284 -0
  22. package/src/commands/dev.js +252 -0
  23. package/src/commands/did.js +358 -0
  24. package/src/commands/dlp.js +61 -0
  25. package/src/commands/economy.js +56 -0
  26. package/src/commands/encrypt.js +341 -0
  27. package/src/commands/evolution.js +56 -0
  28. package/src/commands/evomap.js +61 -0
  29. package/src/commands/export.js +256 -1
  30. package/src/commands/fflag.js +178 -0
  31. package/src/commands/fusion.js +258 -0
  32. package/src/commands/git.js +45 -0
  33. package/src/commands/governance.js +325 -0
  34. package/src/commands/hardening.js +411 -0
  35. package/src/commands/hmemory.js +56 -0
  36. package/src/commands/hook.js +148 -0
  37. package/src/commands/import.js +252 -0
  38. package/src/commands/incentive.js +322 -0
  39. package/src/commands/inference.js +42 -0
  40. package/src/commands/infra.js +244 -0
  41. package/src/commands/instinct.js +260 -0
  42. package/src/commands/ipfs.js +318 -0
  43. package/src/commands/itbudget.js +45 -0
  44. package/src/commands/kg.js +387 -0
  45. package/src/commands/llm.js +263 -0
  46. package/src/commands/lowcode.js +44 -0
  47. package/src/commands/matrix.js +62 -0
  48. package/src/commands/mcp.js +221 -0
  49. package/src/commands/mcpscaf.js +41 -0
  50. package/src/commands/meminj.js +41 -0
  51. package/src/commands/memory.js +248 -0
  52. package/src/commands/multimodal.js +296 -0
  53. package/src/commands/nlprog.js +356 -0
  54. package/src/commands/nostr.js +62 -0
  55. package/src/commands/note.js +244 -0
  56. package/src/commands/ops.js +354 -0
  57. package/src/commands/orchestrate.js +166 -0
  58. package/src/commands/orchgov.js +45 -0
  59. package/src/commands/org.js +277 -0
  60. package/src/commands/p2p.js +390 -0
  61. package/src/commands/pdfp.js +78 -0
  62. package/src/commands/perception.js +290 -0
  63. package/src/commands/perf.js +39 -0
  64. package/src/commands/perm.js +45 -0
  65. package/src/commands/permmem.js +251 -0
  66. package/src/commands/pipeline.js +57 -1
  67. package/src/commands/planmode.js +45 -0
  68. package/src/commands/plugin-ecosystem.js +273 -0
  69. package/src/commands/pqc.js +393 -0
  70. package/src/commands/promcomp.js +82 -0
  71. package/src/commands/quantization.js +351 -0
  72. package/src/commands/rcache.js +271 -0
  73. package/src/commands/recommend.js +382 -0
  74. package/src/commands/runtime.js +307 -0
  75. package/src/commands/scim.js +262 -0
  76. package/src/commands/seshhook.js +41 -0
  77. package/src/commands/seshsearch.js +41 -0
  78. package/src/commands/seshtail.js +41 -0
  79. package/src/commands/seshu.js +41 -0
  80. package/src/commands/session.js +258 -0
  81. package/src/commands/sganal.js +78 -0
  82. package/src/commands/siem.js +40 -0
  83. package/src/commands/skill.js +267 -1
  84. package/src/commands/slotfill.js +41 -0
  85. package/src/commands/social.js +290 -0
  86. package/src/commands/sso.js +186 -1
  87. package/src/commands/svccont.js +45 -0
  88. package/src/commands/sync.js +256 -0
  89. package/src/commands/tech.js +338 -0
  90. package/src/commands/tenant.js +351 -0
  91. package/src/commands/tms.js +45 -0
  92. package/src/commands/tokens.js +269 -0
  93. package/src/commands/topiccls.js +45 -0
  94. package/src/commands/trust.js +249 -0
  95. package/src/commands/uprof.js +45 -0
  96. package/src/commands/vcheck.js +78 -0
  97. package/src/commands/wallet.js +277 -0
  98. package/src/commands/webfetch.js +41 -0
  99. package/src/commands/workflow.js +171 -0
  100. package/src/commands/zkp.js +62 -0
  101. package/src/harness/prompt-compressor.js +331 -0
  102. package/src/index.js +65 -1
  103. package/src/lib/a2a-protocol.js +105 -0
  104. package/src/lib/activitypub-bridge.js +105 -0
  105. package/src/lib/agent-coordinator.js +325 -0
  106. package/src/lib/agent-economy.js +105 -0
  107. package/src/lib/agent-network.js +387 -0
  108. package/src/lib/agent-router.js +395 -0
  109. package/src/lib/aiops.js +478 -0
  110. package/src/lib/app-builder.js +105 -0
  111. package/src/lib/audit-logger.js +379 -0
  112. package/src/lib/automation-engine.js +330 -0
  113. package/src/lib/autonomous-agent.js +105 -0
  114. package/src/lib/autonomous-developer.js +350 -0
  115. package/src/lib/bi-engine.js +105 -0
  116. package/src/lib/bm25-search.js +81 -0
  117. package/src/lib/browser-automation.js +105 -0
  118. package/src/lib/code-agent.js +323 -0
  119. package/src/lib/collaboration-governance.js +364 -0
  120. package/src/lib/community-governance.js +436 -0
  121. package/src/lib/compliance-framework-reporter.js +105 -0
  122. package/src/lib/compliance-manager.js +434 -0
  123. package/src/lib/compression-telemetry.js +81 -0
  124. package/src/lib/content-recommendation.js +469 -0
  125. package/src/lib/content-recommender.js +105 -0
  126. package/src/lib/cowork-cron.js +81 -0
  127. package/src/lib/cowork-task-runner.js +105 -0
  128. package/src/lib/cross-chain.js +105 -0
  129. package/src/lib/crypto-manager.js +350 -0
  130. package/src/lib/dao-governance.js +105 -0
  131. package/src/lib/dbevo.js +338 -0
  132. package/src/lib/decentral-infra.js +340 -0
  133. package/src/lib/did-manager.js +367 -0
  134. package/src/lib/dlp-engine.js +105 -0
  135. package/src/lib/evolution-system.js +105 -0
  136. package/src/lib/evomap-manager.js +105 -0
  137. package/src/lib/execution-backend.js +105 -0
  138. package/src/lib/feature-flags.js +85 -0
  139. package/src/lib/git-integration.js +105 -0
  140. package/src/lib/hardening-manager.js +348 -0
  141. package/src/lib/hierarchical-memory.js +105 -0
  142. package/src/lib/hook-manager.js +380 -0
  143. package/src/lib/inference-network.js +105 -0
  144. package/src/lib/instinct-manager.js +332 -0
  145. package/src/lib/ipfs-storage.js +334 -0
  146. package/src/lib/iteration-budget.js +105 -0
  147. package/src/lib/knowledge-exporter.js +381 -0
  148. package/src/lib/knowledge-graph.js +432 -0
  149. package/src/lib/knowledge-importer.js +379 -0
  150. package/src/lib/llm-providers.js +391 -0
  151. package/src/lib/matrix-bridge.js +105 -0
  152. package/src/lib/mcp-registry.js +333 -0
  153. package/src/lib/mcp-scaffold.js +81 -0
  154. package/src/lib/memory-injection.js +81 -0
  155. package/src/lib/memory-manager.js +330 -0
  156. package/src/lib/multimodal.js +346 -0
  157. package/src/lib/nl-programming.js +343 -0
  158. package/src/lib/nostr-bridge.js +105 -0
  159. package/src/lib/note-versioning.js +327 -0
  160. package/src/lib/orchestrator.js +105 -0
  161. package/src/lib/org-manager.js +323 -0
  162. package/src/lib/p2p-manager.js +387 -0
  163. package/src/lib/pdf-parser.js +81 -0
  164. package/src/lib/perception.js +346 -0
  165. package/src/lib/perf-tuning.js +109 -1
  166. package/src/lib/permanent-memory.js +320 -0
  167. package/src/lib/permission-engine.js +81 -0
  168. package/src/lib/pipeline-orchestrator.js +105 -0
  169. package/src/lib/plan-mode.js +81 -0
  170. package/src/lib/plugin-ecosystem.js +377 -0
  171. package/src/lib/pqc-manager.js +368 -0
  172. package/src/lib/prompt-compressor.js +1 -10
  173. package/src/lib/protocol-fusion.js +417 -0
  174. package/src/lib/quantization.js +325 -0
  175. package/src/lib/response-cache.js +327 -0
  176. package/src/lib/scim-manager.js +329 -0
  177. package/src/lib/service-container.js +81 -0
  178. package/src/lib/session-consolidator.js +105 -0
  179. package/src/lib/session-hooks.js +81 -0
  180. package/src/lib/session-manager.js +329 -0
  181. package/src/lib/session-search.js +81 -0
  182. package/src/lib/session-tail.js +81 -0
  183. package/src/lib/session-usage.js +83 -0
  184. package/src/lib/siem-exporter.js +105 -0
  185. package/src/lib/skill-loader.js +377 -0
  186. package/src/lib/slot-filler.js +81 -0
  187. package/src/lib/social-graph-analytics.js +81 -0
  188. package/src/lib/social-graph.js +81 -0
  189. package/src/lib/social-manager.js +326 -0
  190. package/src/lib/sso-manager.js +332 -0
  191. package/src/lib/sub-agent-registry.js +110 -0
  192. package/src/lib/sync-manager.js +326 -0
  193. package/src/lib/task-model-selector.js +81 -0
  194. package/src/lib/tech-learning-engine.js +369 -0
  195. package/src/lib/tenant-saas.js +460 -0
  196. package/src/lib/threat-intel.js +335 -0
  197. package/src/lib/todo-manager.js +105 -0
  198. package/src/lib/token-incentive.js +293 -0
  199. package/src/lib/token-tracker.js +329 -0
  200. package/src/lib/topic-classifier.js +105 -0
  201. package/src/lib/trust-security.js +390 -0
  202. package/src/lib/ueba.js +389 -0
  203. package/src/lib/universal-runtime.js +325 -0
  204. package/src/lib/user-profile.js +81 -0
  205. package/src/lib/version-checker.js +81 -0
  206. package/src/lib/wallet-manager.js +326 -0
  207. package/src/lib/web-fetch.js +81 -0
  208. package/src/lib/workflow-engine.js +322 -0
  209. package/src/lib/zkp-engine.js +105 -0
@@ -16,6 +16,32 @@ import {
16
16
  getAuditReport,
17
17
  runConfigAudit,
18
18
  deployCheck,
19
+ // V2 (Phase 29)
20
+ AUDIT_STATUS_V2,
21
+ BASELINE_STATUS_V2,
22
+ SEVERITY_V2,
23
+ HARDENING_DEFAULT_MAX_CONCURRENT_AUDITS,
24
+ HARDENING_DEFAULT_BASELINE_RETENTION_MS,
25
+ HARDENING_DEFAULT_AUDIT_TIMEOUT_MS,
26
+ setMaxConcurrentAudits,
27
+ getMaxConcurrentAudits,
28
+ setBaselineRetentionMs,
29
+ getBaselineRetentionMs,
30
+ setAuditTimeoutMs,
31
+ getAuditTimeoutMs,
32
+ getRunningAuditCount,
33
+ registerAuditV2,
34
+ startAudit,
35
+ completeAudit,
36
+ setAuditStatusV2,
37
+ getAuditStatusV2,
38
+ autoTimeoutAudits,
39
+ createBaselineV2,
40
+ getBaselineStatusV2,
41
+ setBaselineStatusV2,
42
+ activateBaseline,
43
+ autoArchiveStaleBaselines,
44
+ getHardeningStatsV2,
19
45
  } from "../lib/hardening-manager.js";
20
46
 
21
47
  export function registerHardeningCommand(program) {
@@ -337,4 +363,389 @@ export function registerHardeningCommand(program) {
337
363
  process.exit(1);
338
364
  }
339
365
  });
366
+
367
+ /* ── V2 (Phase 29) ──────────────────────────────── */
368
+
369
+ hardening
370
+ .command("audit-statuses-v2")
371
+ .description("List V2 audit lifecycle statuses")
372
+ .option("--json", "JSON output")
373
+ .action((opts) => {
374
+ const out = Object.values(AUDIT_STATUS_V2);
375
+ if (opts.json) return console.log(JSON.stringify(out, null, 2));
376
+ for (const s of out) console.log(` ${s}`);
377
+ });
378
+
379
+ hardening
380
+ .command("baseline-statuses-v2")
381
+ .description("List V2 baseline lifecycle statuses")
382
+ .option("--json", "JSON output")
383
+ .action((opts) => {
384
+ const out = Object.values(BASELINE_STATUS_V2);
385
+ if (opts.json) return console.log(JSON.stringify(out, null, 2));
386
+ for (const s of out) console.log(` ${s}`);
387
+ });
388
+
389
+ hardening
390
+ .command("severities-v2")
391
+ .description("List V2 severity buckets")
392
+ .option("--json", "JSON output")
393
+ .action((opts) => {
394
+ const out = Object.values(SEVERITY_V2);
395
+ if (opts.json) return console.log(JSON.stringify(out, null, 2));
396
+ for (const s of out) console.log(` ${s}`);
397
+ });
398
+
399
+ hardening
400
+ .command("default-max-concurrent-audits")
401
+ .description("Default concurrent audit cap")
402
+ .option("--json", "JSON output")
403
+ .action((opts) => {
404
+ if (opts.json)
405
+ return console.log(
406
+ JSON.stringify(HARDENING_DEFAULT_MAX_CONCURRENT_AUDITS),
407
+ );
408
+ console.log(HARDENING_DEFAULT_MAX_CONCURRENT_AUDITS);
409
+ });
410
+
411
+ hardening
412
+ .command("max-concurrent-audits")
413
+ .description("Current concurrent audit cap")
414
+ .option("--json", "JSON output")
415
+ .action((opts) => {
416
+ const n = getMaxConcurrentAudits();
417
+ if (opts.json) return console.log(JSON.stringify(n));
418
+ console.log(n);
419
+ });
420
+
421
+ hardening
422
+ .command("set-max-concurrent-audits <n>")
423
+ .description("Set concurrent audit cap")
424
+ .option("--json", "JSON output")
425
+ .action((n, opts) => {
426
+ setMaxConcurrentAudits(Number(n));
427
+ const out = { maxConcurrentAudits: getMaxConcurrentAudits() };
428
+ if (opts.json) return console.log(JSON.stringify(out, null, 2));
429
+ console.log(`maxConcurrentAudits = ${out.maxConcurrentAudits}`);
430
+ });
431
+
432
+ hardening
433
+ .command("default-baseline-retention-ms")
434
+ .description("Default baseline retention in ms")
435
+ .option("--json", "JSON output")
436
+ .action((opts) => {
437
+ if (opts.json)
438
+ return console.log(
439
+ JSON.stringify(HARDENING_DEFAULT_BASELINE_RETENTION_MS),
440
+ );
441
+ console.log(HARDENING_DEFAULT_BASELINE_RETENTION_MS);
442
+ });
443
+
444
+ hardening
445
+ .command("baseline-retention-ms")
446
+ .description("Current baseline retention in ms")
447
+ .option("--json", "JSON output")
448
+ .action((opts) => {
449
+ const n = getBaselineRetentionMs();
450
+ if (opts.json) return console.log(JSON.stringify(n));
451
+ console.log(n);
452
+ });
453
+
454
+ hardening
455
+ .command("set-baseline-retention-ms <ms>")
456
+ .description("Set baseline retention in ms")
457
+ .option("--json", "JSON output")
458
+ .action((ms, opts) => {
459
+ setBaselineRetentionMs(Number(ms));
460
+ const out = { baselineRetentionMs: getBaselineRetentionMs() };
461
+ if (opts.json) return console.log(JSON.stringify(out, null, 2));
462
+ console.log(`baselineRetentionMs = ${out.baselineRetentionMs}`);
463
+ });
464
+
465
+ hardening
466
+ .command("default-audit-timeout-ms")
467
+ .description("Default audit timeout in ms")
468
+ .option("--json", "JSON output")
469
+ .action((opts) => {
470
+ if (opts.json)
471
+ return console.log(JSON.stringify(HARDENING_DEFAULT_AUDIT_TIMEOUT_MS));
472
+ console.log(HARDENING_DEFAULT_AUDIT_TIMEOUT_MS);
473
+ });
474
+
475
+ hardening
476
+ .command("audit-timeout-ms")
477
+ .description("Current audit timeout in ms")
478
+ .option("--json", "JSON output")
479
+ .action((opts) => {
480
+ const n = getAuditTimeoutMs();
481
+ if (opts.json) return console.log(JSON.stringify(n));
482
+ console.log(n);
483
+ });
484
+
485
+ hardening
486
+ .command("set-audit-timeout-ms <ms>")
487
+ .description("Set audit timeout in ms")
488
+ .option("--json", "JSON output")
489
+ .action((ms, opts) => {
490
+ setAuditTimeoutMs(Number(ms));
491
+ const out = { auditTimeoutMs: getAuditTimeoutMs() };
492
+ if (opts.json) return console.log(JSON.stringify(out, null, 2));
493
+ console.log(`auditTimeoutMs = ${out.auditTimeoutMs}`);
494
+ });
495
+
496
+ hardening
497
+ .command("running-audit-count")
498
+ .description("Number of currently RUNNING audits")
499
+ .option("--json", "JSON output")
500
+ .action((opts) => {
501
+ const n = getRunningAuditCount();
502
+ if (opts.json) return console.log(JSON.stringify(n));
503
+ console.log(n);
504
+ });
505
+
506
+ hardening
507
+ .command("register-audit-v2 <name>")
508
+ .description("Register a V2 audit entry (PENDING)")
509
+ .option("-t, --type <type>", "Audit type", "generic")
510
+ .option(
511
+ "-s, --severity <severity>",
512
+ "critical|high|medium|low|info",
513
+ "medium",
514
+ )
515
+ .option("-m, --metadata <json>", "Metadata JSON")
516
+ .option("--json", "JSON output")
517
+ .action(async (name, opts) => {
518
+ try {
519
+ const { db } = await bootstrap();
520
+ ensureHardeningTables(db);
521
+ const metadata = opts.metadata ? JSON.parse(opts.metadata) : undefined;
522
+ const r = registerAuditV2(db, {
523
+ name,
524
+ type: opts.type,
525
+ severity: opts.severity,
526
+ metadata,
527
+ });
528
+ if (opts.json) console.log(JSON.stringify(r, null, 2));
529
+ else console.log(`Registered audit ${r.audit_id} (${r.status})`);
530
+ await shutdown();
531
+ } catch (err) {
532
+ logger.error(`Failed: ${err.message}`);
533
+ process.exit(1);
534
+ }
535
+ });
536
+
537
+ hardening
538
+ .command("start-audit <audit-id>")
539
+ .description("Start a PENDING audit (enforces concurrency cap)")
540
+ .option("--json", "JSON output")
541
+ .action(async (auditId, opts) => {
542
+ try {
543
+ const { db } = await bootstrap();
544
+ ensureHardeningTables(db);
545
+ const r = startAudit(db, auditId);
546
+ if (opts.json) console.log(JSON.stringify(r, null, 2));
547
+ else console.log(`${auditId} → ${r.status}`);
548
+ await shutdown();
549
+ } catch (err) {
550
+ logger.error(`Failed: ${err.message}`);
551
+ process.exit(1);
552
+ }
553
+ });
554
+
555
+ hardening
556
+ .command("complete-audit <audit-id>")
557
+ .description("Complete a RUNNING audit")
558
+ .option("-p, --passed <n>", "Passed check count", parseInt)
559
+ .option("-f, --failed <n>", "Failed check count", parseInt)
560
+ .option("-w, --warning-threshold <n>", "Score threshold for WARNING (0–1)")
561
+ .option("--json", "JSON output")
562
+ .action(async (auditId, opts) => {
563
+ try {
564
+ const { db } = await bootstrap();
565
+ ensureHardeningTables(db);
566
+ const warningThreshold = opts.warningThreshold
567
+ ? Number(opts.warningThreshold)
568
+ : undefined;
569
+ const r = completeAudit(db, auditId, {
570
+ passed: opts.passed ?? 0,
571
+ failed: opts.failed ?? 0,
572
+ warningThreshold,
573
+ });
574
+ if (opts.json) console.log(JSON.stringify(r, null, 2));
575
+ else console.log(`${auditId} → ${r.status} (score: ${r.score})`);
576
+ await shutdown();
577
+ } catch (err) {
578
+ logger.error(`Failed: ${err.message}`);
579
+ process.exit(1);
580
+ }
581
+ });
582
+
583
+ hardening
584
+ .command("set-audit-status-v2 <audit-id> <status>")
585
+ .description("Transition audit to a new status")
586
+ .option("-e, --error-message <msg>")
587
+ .option("-m, --metadata <json>")
588
+ .option("--json", "JSON output")
589
+ .action(async (auditId, status, opts) => {
590
+ try {
591
+ const { db } = await bootstrap();
592
+ ensureHardeningTables(db);
593
+ const patch = {};
594
+ if (opts.errorMessage !== undefined)
595
+ patch.errorMessage = opts.errorMessage;
596
+ if (opts.metadata !== undefined)
597
+ patch.metadata = JSON.parse(opts.metadata);
598
+ const r = setAuditStatusV2(db, auditId, status, patch);
599
+ if (opts.json) console.log(JSON.stringify(r, null, 2));
600
+ else console.log(`${auditId} → ${r.status}`);
601
+ await shutdown();
602
+ } catch (err) {
603
+ logger.error(`Failed: ${err.message}`);
604
+ process.exit(1);
605
+ }
606
+ });
607
+
608
+ hardening
609
+ .command("audit-status-v2 <audit-id>")
610
+ .description("Get V2 audit status")
611
+ .option("--json", "JSON output")
612
+ .action((auditId, opts) => {
613
+ const r = getAuditStatusV2(auditId);
614
+ if (opts.json) return console.log(JSON.stringify(r, null, 2));
615
+ if (!r) return console.log("(not found)");
616
+ console.log(`${auditId}: ${r.status}`);
617
+ });
618
+
619
+ hardening
620
+ .command("auto-timeout-audits")
621
+ .description("Bulk-fail RUNNING audits past auditTimeoutMs")
622
+ .option("--json", "JSON output")
623
+ .action(async (opts) => {
624
+ try {
625
+ const { db } = await bootstrap();
626
+ ensureHardeningTables(db);
627
+ const r = autoTimeoutAudits(db);
628
+ if (opts.json) console.log(JSON.stringify(r, null, 2));
629
+ else console.log(`Timed out ${r.length} audit(s)`);
630
+ await shutdown();
631
+ } catch (err) {
632
+ logger.error(`Failed: ${err.message}`);
633
+ process.exit(1);
634
+ }
635
+ });
636
+
637
+ hardening
638
+ .command("create-baseline-v2 <name>")
639
+ .description("Create a V2 baseline (DRAFT)")
640
+ .option("-v, --version <ver>", "Version", "1.0.0")
641
+ .option("-m, --metadata <json>", "Metadata JSON")
642
+ .option("--json", "JSON output")
643
+ .action(async (name, opts) => {
644
+ try {
645
+ const { db } = await bootstrap();
646
+ ensureHardeningTables(db);
647
+ const metadata = opts.metadata ? JSON.parse(opts.metadata) : undefined;
648
+ const r = createBaselineV2(db, {
649
+ name,
650
+ version: opts.version,
651
+ metadata,
652
+ });
653
+ if (opts.json) console.log(JSON.stringify(r, null, 2));
654
+ else console.log(`Baseline ${r.baseline_id} (${r.status})`);
655
+ await shutdown();
656
+ } catch (err) {
657
+ logger.error(`Failed: ${err.message}`);
658
+ process.exit(1);
659
+ }
660
+ });
661
+
662
+ hardening
663
+ .command("activate-baseline <baseline-id>")
664
+ .description("Activate a DRAFT baseline (supersedes previous ACTIVE)")
665
+ .option("--json", "JSON output")
666
+ .action(async (baselineId, opts) => {
667
+ try {
668
+ const { db } = await bootstrap();
669
+ ensureHardeningTables(db);
670
+ const r = activateBaseline(db, baselineId);
671
+ if (opts.json) console.log(JSON.stringify(r, null, 2));
672
+ else console.log(`${baselineId} → ${r.status}`);
673
+ await shutdown();
674
+ } catch (err) {
675
+ logger.error(`Failed: ${err.message}`);
676
+ process.exit(1);
677
+ }
678
+ });
679
+
680
+ hardening
681
+ .command("set-baseline-status-v2 <baseline-id> <status>")
682
+ .description("Transition baseline to a new status")
683
+ .option("-r, --reason <reason>")
684
+ .option("-m, --metadata <json>")
685
+ .option("--json", "JSON output")
686
+ .action(async (baselineId, status, opts) => {
687
+ try {
688
+ const { db } = await bootstrap();
689
+ ensureHardeningTables(db);
690
+ const patch = {};
691
+ if (opts.reason !== undefined) patch.reason = opts.reason;
692
+ if (opts.metadata !== undefined)
693
+ patch.metadata = JSON.parse(opts.metadata);
694
+ const r = setBaselineStatusV2(db, baselineId, status, patch);
695
+ if (opts.json) console.log(JSON.stringify(r, null, 2));
696
+ else console.log(`${baselineId} → ${r.status}`);
697
+ await shutdown();
698
+ } catch (err) {
699
+ logger.error(`Failed: ${err.message}`);
700
+ process.exit(1);
701
+ }
702
+ });
703
+
704
+ hardening
705
+ .command("baseline-status-v2 <baseline-id>")
706
+ .description("Get V2 baseline status")
707
+ .option("--json", "JSON output")
708
+ .action((baselineId, opts) => {
709
+ const r = getBaselineStatusV2(baselineId);
710
+ if (opts.json) return console.log(JSON.stringify(r, null, 2));
711
+ if (!r) return console.log("(not found)");
712
+ console.log(`${baselineId}: ${r.status}`);
713
+ });
714
+
715
+ hardening
716
+ .command("auto-archive-stale-baselines")
717
+ .description("Bulk-archive SUPERSEDED baselines past retention")
718
+ .option("--json", "JSON output")
719
+ .action(async (opts) => {
720
+ try {
721
+ const { db } = await bootstrap();
722
+ ensureHardeningTables(db);
723
+ const r = autoArchiveStaleBaselines(db);
724
+ if (opts.json) console.log(JSON.stringify(r, null, 2));
725
+ else console.log(`Archived ${r.length} baseline(s)`);
726
+ await shutdown();
727
+ } catch (err) {
728
+ logger.error(`Failed: ${err.message}`);
729
+ process.exit(1);
730
+ }
731
+ });
732
+
733
+ hardening
734
+ .command("stats-v2")
735
+ .description("V2 hardening statistics")
736
+ .option("--json", "JSON output")
737
+ .action((opts) => {
738
+ const s = getHardeningStatsV2();
739
+ if (opts.json) return console.log(JSON.stringify(s, null, 2));
740
+ console.log(`Audits: ${s.totalAudits} (running=${s.runningAudits})`);
741
+ for (const [st, n] of Object.entries(s.auditsByStatus)) {
742
+ if (n > 0) console.log(` ${st.padEnd(10)} ${n}`);
743
+ }
744
+ console.log(
745
+ `Baselines: ${s.totalBaselines} (active=${s.activeBaselines})`,
746
+ );
747
+ console.log(
748
+ `config: maxConcurrentAudits=${s.maxConcurrentAudits} baselineRetentionMs=${s.baselineRetentionMs} auditTimeoutMs=${s.auditTimeoutMs}`,
749
+ );
750
+ });
340
751
  }
@@ -712,4 +712,60 @@ export function registerHmemoryCommand(program) {
712
712
  process.exit(1);
713
713
  }
714
714
  });
715
+
716
+ _registerHmemoryV2Commands(hmemory);
717
+ }
718
+ function _registerHmemoryV2Commands(parent) {
719
+ const L = async () => await import("../lib/hierarchical-memory.js");
720
+
721
+ parent.command("enums-v2").description("Show V2 enums (tier maturity + promotion lifecycle)")
722
+ .action(async () => { const m = await L(); console.log(JSON.stringify({ tierMaturity: m.HMEM_TIER_MATURITY_V2, promotionLifecycle: m.HMEM_PROMOTION_LIFECYCLE_V2 }, null, 2)); });
723
+ parent.command("config-v2").description("Show V2 config thresholds")
724
+ .action(async () => { const m = await L(); console.log(JSON.stringify({ maxActiveHmemTiersPerOwner: m.getMaxActiveHmemTiersPerOwnerV2(), maxPendingHmemPromotionsPerTier: m.getMaxPendingHmemPromotionsPerTierV2(), hmemTierIdleMs: m.getHmemTierIdleMsV2(), hmemPromotionStuckMs: m.getHmemPromotionStuckMsV2() }, null, 2)); });
725
+ parent.command("set-max-active-tiers-v2 <n>").description("Set max active tiers per owner")
726
+ .action(async (n) => { const m = await L(); m.setMaxActiveHmemTiersPerOwnerV2(Number(n)); console.log("ok"); });
727
+ parent.command("set-max-pending-promotions-v2 <n>").description("Set max pending promotions per tier")
728
+ .action(async (n) => { const m = await L(); m.setMaxPendingHmemPromotionsPerTierV2(Number(n)); console.log("ok"); });
729
+ parent.command("set-tier-idle-ms-v2 <n>").description("Set tier idle threshold (ms)")
730
+ .action(async (n) => { const m = await L(); m.setHmemTierIdleMsV2(Number(n)); console.log("ok"); });
731
+ parent.command("set-promotion-stuck-ms-v2 <n>").description("Set promotion stuck threshold (ms)")
732
+ .action(async (n) => { const m = await L(); m.setHmemPromotionStuckMsV2(Number(n)); console.log("ok"); });
733
+
734
+ parent.command("register-tier-v2 <id> <owner>").description("Register V2 memory tier")
735
+ .option("--level <l>", "Tier level", "short-term").action(async (id, owner, o) => { const m = await L(); console.log(JSON.stringify(m.registerHmemTierV2({ id, owner, level: o.level }), null, 2)); });
736
+ parent.command("activate-tier-v2 <id>").description("Activate tier")
737
+ .action(async (id) => { const m = await L(); console.log(JSON.stringify(m.activateHmemTierV2(id), null, 2)); });
738
+ parent.command("dormant-tier-v2 <id>").description("Mark tier dormant")
739
+ .action(async (id) => { const m = await L(); console.log(JSON.stringify(m.dormantHmemTierV2(id), null, 2)); });
740
+ parent.command("retire-tier-v2 <id>").description("Retire tier (terminal)")
741
+ .action(async (id) => { const m = await L(); console.log(JSON.stringify(m.retireHmemTierV2(id), null, 2)); });
742
+ parent.command("touch-tier-v2 <id>").description("Touch tier lastTouchedAt")
743
+ .action(async (id) => { const m = await L(); console.log(JSON.stringify(m.touchHmemTierV2(id), null, 2)); });
744
+ parent.command("get-tier-v2 <id>").description("Get V2 tier")
745
+ .action(async (id) => { const m = await L(); console.log(JSON.stringify(m.getHmemTierV2(id), null, 2)); });
746
+ parent.command("list-tiers-v2").description("List all V2 tiers")
747
+ .action(async () => { const m = await L(); console.log(JSON.stringify(m.listHmemTiersV2(), null, 2)); });
748
+
749
+ parent.command("create-promotion-v2 <id> <tierId>").description("Create V2 promotion (queued)")
750
+ .option("--item-key <k>", "Item key", "").action(async (id, tierId, o) => { const m = await L(); console.log(JSON.stringify(m.createHmemPromotionV2({ id, tierId, itemKey: o.itemKey }), null, 2)); });
751
+ parent.command("start-promotion-v2 <id>").description("Start promotion (queued→promoting)")
752
+ .action(async (id) => { const m = await L(); console.log(JSON.stringify(m.startHmemPromotionV2(id), null, 2)); });
753
+ parent.command("complete-promotion-v2 <id>").description("Complete promotion (promoting→promoted)")
754
+ .action(async (id) => { const m = await L(); console.log(JSON.stringify(m.completeHmemPromotionV2(id), null, 2)); });
755
+ parent.command("fail-promotion-v2 <id> [reason]").description("Fail promotion")
756
+ .action(async (id, reason) => { const m = await L(); console.log(JSON.stringify(m.failHmemPromotionV2(id, reason), null, 2)); });
757
+ parent.command("cancel-promotion-v2 <id> [reason]").description("Cancel promotion")
758
+ .action(async (id, reason) => { const m = await L(); console.log(JSON.stringify(m.cancelHmemPromotionV2(id, reason), null, 2)); });
759
+ parent.command("get-promotion-v2 <id>").description("Get V2 promotion")
760
+ .action(async (id) => { const m = await L(); console.log(JSON.stringify(m.getHmemPromotionV2(id), null, 2)); });
761
+ parent.command("list-promotions-v2").description("List all V2 promotions")
762
+ .action(async () => { const m = await L(); console.log(JSON.stringify(m.listHmemPromotionsV2(), null, 2)); });
763
+
764
+ parent.command("auto-dormant-idle-v2").description("Auto-dormant idle active tiers")
765
+ .action(async () => { const m = await L(); console.log(JSON.stringify(m.autoDormantIdleHmemTiersV2(), null, 2)); });
766
+ parent.command("auto-fail-stuck-v2").description("Auto-fail stuck promoting promotions")
767
+ .action(async () => { const m = await L(); console.log(JSON.stringify(m.autoFailStuckHmemPromotionsV2(), null, 2)); });
768
+
769
+ parent.command("gov-stats-v2").description("V2 governance aggregate stats")
770
+ .action(async () => { const m = await L(); console.log(JSON.stringify(m.getHierarchicalMemoryGovStatsV2(), null, 2)); });
715
771
  }
@@ -334,4 +334,152 @@ export function registerHookCommand(program) {
334
334
  logger.log(` ${chalk.cyan(ev)}`);
335
335
  }
336
336
  });
337
+
338
+ // ===== V2 governance subcommands (hook-manager V2) =====
339
+ hook
340
+ .command("maturities-v2")
341
+ .description("List hook profile maturity states (V2)")
342
+ .action(async () => {
343
+ const m = await import("../lib/hook-manager.js");
344
+ console.log(JSON.stringify(m.HOOK_PROFILE_MATURITY_V2, null, 2));
345
+ });
346
+ hook
347
+ .command("exec-lifecycle-v2")
348
+ .description("List hook exec lifecycle states (V2)")
349
+ .action(async () => {
350
+ const m = await import("../lib/hook-manager.js");
351
+ console.log(JSON.stringify(m.HOOK_EXEC_LIFECYCLE_V2, null, 2));
352
+ });
353
+ hook
354
+ .command("stats-v2")
355
+ .description("Show hook-manager V2 stats")
356
+ .action(async () => {
357
+ const m = await import("../lib/hook-manager.js");
358
+ console.log(JSON.stringify(m.getHookManagerStatsV2(), null, 2));
359
+ });
360
+ hook
361
+ .command("config-v2")
362
+ .description("Show hook-manager V2 config")
363
+ .action(async () => {
364
+ const m = await import("../lib/hook-manager.js");
365
+ console.log(
366
+ JSON.stringify(
367
+ {
368
+ maxActiveHooksPerOwner: m.getMaxActiveHooksPerOwnerV2(),
369
+ maxPendingExecsPerHook: m.getMaxPendingExecsPerHookV2(),
370
+ hookIdleMs: m.getHookIdleMsV2(),
371
+ hookExecStuckMs: m.getHookExecStuckMsV2(),
372
+ },
373
+ null,
374
+ 2,
375
+ ),
376
+ );
377
+ });
378
+ hook
379
+ .command("register-profile-v2 <id> <owner> [event]")
380
+ .action(async (id, owner, event) => {
381
+ const m = await import("../lib/hook-manager.js");
382
+ console.log(
383
+ JSON.stringify(m.registerHookProfileV2({ id, owner, event }), null, 2),
384
+ );
385
+ });
386
+ hook.command("activate-profile-v2 <id>").action(async (id) => {
387
+ const m = await import("../lib/hook-manager.js");
388
+ console.log(JSON.stringify(m.activateHookProfileV2(id), null, 2));
389
+ });
390
+ hook.command("disable-profile-v2 <id>").action(async (id) => {
391
+ const m = await import("../lib/hook-manager.js");
392
+ console.log(JSON.stringify(m.disableHookProfileV2(id), null, 2));
393
+ });
394
+ hook.command("retire-profile-v2 <id>").action(async (id) => {
395
+ const m = await import("../lib/hook-manager.js");
396
+ console.log(JSON.stringify(m.retireHookProfileV2(id), null, 2));
397
+ });
398
+ hook.command("touch-profile-v2 <id>").action(async (id) => {
399
+ const m = await import("../lib/hook-manager.js");
400
+ console.log(JSON.stringify(m.touchHookProfileV2(id), null, 2));
401
+ });
402
+ hook.command("get-profile-v2 <id>").action(async (id) => {
403
+ const m = await import("../lib/hook-manager.js");
404
+ console.log(JSON.stringify(m.getHookProfileV2(id), null, 2));
405
+ });
406
+ hook.command("list-profiles-v2").action(async () => {
407
+ const m = await import("../lib/hook-manager.js");
408
+ console.log(JSON.stringify(m.listHookProfilesV2(), null, 2));
409
+ });
410
+ hook.command("create-exec-v2 <id> <hookId>").action(async (id, hookId) => {
411
+ const m = await import("../lib/hook-manager.js");
412
+ console.log(JSON.stringify(m.createHookExecV2({ id, hookId }), null, 2));
413
+ });
414
+ hook.command("start-exec-v2 <id>").action(async (id) => {
415
+ const m = await import("../lib/hook-manager.js");
416
+ console.log(JSON.stringify(m.startHookExecV2(id), null, 2));
417
+ });
418
+ hook.command("complete-exec-v2 <id>").action(async (id) => {
419
+ const m = await import("../lib/hook-manager.js");
420
+ console.log(JSON.stringify(m.completeHookExecV2(id), null, 2));
421
+ });
422
+ hook.command("fail-exec-v2 <id> [reason]").action(async (id, reason) => {
423
+ const m = await import("../lib/hook-manager.js");
424
+ console.log(JSON.stringify(m.failHookExecV2(id, reason), null, 2));
425
+ });
426
+ hook.command("cancel-exec-v2 <id> [reason]").action(async (id, reason) => {
427
+ const m = await import("../lib/hook-manager.js");
428
+ console.log(JSON.stringify(m.cancelHookExecV2(id, reason), null, 2));
429
+ });
430
+ hook.command("get-exec-v2 <id>").action(async (id) => {
431
+ const m = await import("../lib/hook-manager.js");
432
+ console.log(JSON.stringify(m.getHookExecV2(id), null, 2));
433
+ });
434
+ hook.command("list-execs-v2").action(async () => {
435
+ const m = await import("../lib/hook-manager.js");
436
+ console.log(JSON.stringify(m.listHookExecsV2(), null, 2));
437
+ });
438
+ hook.command("auto-disable-idle-v2").action(async () => {
439
+ const m = await import("../lib/hook-manager.js");
440
+ console.log(JSON.stringify(m.autoDisableIdleHooksV2(), null, 2));
441
+ });
442
+ hook.command("auto-fail-stuck-v2").action(async () => {
443
+ const m = await import("../lib/hook-manager.js");
444
+ console.log(JSON.stringify(m.autoFailStuckHookExecsV2(), null, 2));
445
+ });
446
+ hook.command("set-max-active-hooks-v2 <n>").action(async (n) => {
447
+ const m = await import("../lib/hook-manager.js");
448
+ m.setMaxActiveHooksPerOwnerV2(parseInt(n, 10));
449
+ console.log(
450
+ JSON.stringify(
451
+ { maxActiveHooksPerOwner: m.getMaxActiveHooksPerOwnerV2() },
452
+ null,
453
+ 2,
454
+ ),
455
+ );
456
+ });
457
+ hook.command("set-max-pending-execs-v2 <n>").action(async (n) => {
458
+ const m = await import("../lib/hook-manager.js");
459
+ m.setMaxPendingExecsPerHookV2(parseInt(n, 10));
460
+ console.log(
461
+ JSON.stringify(
462
+ { maxPendingExecsPerHook: m.getMaxPendingExecsPerHookV2() },
463
+ null,
464
+ 2,
465
+ ),
466
+ );
467
+ });
468
+ hook.command("set-hook-idle-ms-v2 <n>").action(async (n) => {
469
+ const m = await import("../lib/hook-manager.js");
470
+ m.setHookIdleMsV2(parseInt(n, 10));
471
+ console.log(JSON.stringify({ hookIdleMs: m.getHookIdleMsV2() }, null, 2));
472
+ });
473
+ hook.command("set-hook-exec-stuck-ms-v2 <n>").action(async (n) => {
474
+ const m = await import("../lib/hook-manager.js");
475
+ m.setHookExecStuckMsV2(parseInt(n, 10));
476
+ console.log(
477
+ JSON.stringify({ hookExecStuckMs: m.getHookExecStuckMsV2() }, null, 2),
478
+ );
479
+ });
480
+ hook.command("reset-state-v2").action(async () => {
481
+ const m = await import("../lib/hook-manager.js");
482
+ m._resetStateHookManagerV2();
483
+ console.log(JSON.stringify({ ok: true }, null, 2));
484
+ });
337
485
  }