@harness-engineering/cli 2.7.0 → 2.8.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 (143) hide show
  1. package/dist/agents/personas/adversarial-reviewer.yaml +43 -0
  2. package/dist/agents/personas/frontend-races-reviewer.yaml +54 -0
  3. package/dist/agents/personas/typescript-strict-reviewer.yaml +53 -0
  4. package/dist/agents/skills/CHANGELOG.md +12 -0
  5. package/dist/agents/skills/claude-code/align-design-system/SKILL.md +18 -0
  6. package/dist/agents/skills/claude-code/align-design-system/skill.yaml +3 -0
  7. package/dist/agents/skills/claude-code/harness-brainstorming/SKILL.md +37 -5
  8. package/dist/agents/skills/claude-code/harness-code-review/SKILL.md +107 -22
  9. package/dist/agents/skills/claude-code/harness-code-review/references/confidence-rubric.md +45 -0
  10. package/dist/agents/skills/claude-code/harness-code-review/references/risk-keywords.md +40 -0
  11. package/dist/agents/skills/claude-code/harness-code-review/skill.yaml +3 -0
  12. package/dist/agents/skills/claude-code/harness-compound/SKILL.md +7 -4
  13. package/dist/agents/skills/claude-code/harness-ideate/SKILL.md +277 -0
  14. package/dist/agents/skills/claude-code/harness-ideate/references/scoring.md +88 -0
  15. package/dist/agents/skills/claude-code/harness-ideate/skill.yaml +66 -0
  16. package/dist/agents/skills/claude-code/harness-planning/SKILL.md +14 -4
  17. package/dist/agents/skills/claude-code/harness-pulse/SKILL.md +12 -16
  18. package/dist/agents/skills/claude-code/harness-roadmap-pilot/SKILL.md +34 -6
  19. package/dist/agents/skills/claude-code/harness-strategy/SKILL.md +152 -0
  20. package/dist/agents/skills/claude-code/harness-strategy/references/interview.md +122 -0
  21. package/dist/agents/skills/claude-code/harness-strategy/skill.yaml +54 -0
  22. package/dist/agents/skills/claude-code/initialize-harness-project/SKILL.md +76 -10
  23. package/dist/agents/skills/claude-code/naming-craft/SKILL.md +74 -2
  24. package/dist/agents/skills/codex/align-design-system/SKILL.md +18 -0
  25. package/dist/agents/skills/codex/align-design-system/skill.yaml +3 -0
  26. package/dist/agents/skills/codex/harness-brainstorming/SKILL.md +37 -5
  27. package/dist/agents/skills/codex/harness-code-review/SKILL.md +107 -22
  28. package/dist/agents/skills/codex/harness-code-review/references/confidence-rubric.md +45 -0
  29. package/dist/agents/skills/codex/harness-code-review/references/risk-keywords.md +40 -0
  30. package/dist/agents/skills/codex/harness-code-review/skill.yaml +3 -0
  31. package/dist/agents/skills/codex/harness-compound/SKILL.md +7 -4
  32. package/dist/agents/skills/codex/harness-ideate/SKILL.md +277 -0
  33. package/dist/agents/skills/codex/harness-ideate/references/scoring.md +88 -0
  34. package/dist/agents/skills/codex/harness-ideate/skill.yaml +66 -0
  35. package/dist/agents/skills/codex/harness-planning/SKILL.md +14 -4
  36. package/dist/agents/skills/codex/harness-pulse/SKILL.md +12 -16
  37. package/dist/agents/skills/codex/harness-roadmap-pilot/SKILL.md +34 -6
  38. package/dist/agents/skills/codex/harness-strategy/SKILL.md +152 -0
  39. package/dist/agents/skills/codex/harness-strategy/references/interview.md +122 -0
  40. package/dist/agents/skills/codex/harness-strategy/skill.yaml +54 -0
  41. package/dist/agents/skills/codex/initialize-harness-project/SKILL.md +76 -10
  42. package/dist/agents/skills/codex/naming-craft/SKILL.md +74 -2
  43. package/dist/agents/skills/cursor/align-design-system/SKILL.md +18 -0
  44. package/dist/agents/skills/cursor/align-design-system/skill.yaml +3 -0
  45. package/dist/agents/skills/cursor/harness-brainstorming/SKILL.md +37 -5
  46. package/dist/agents/skills/cursor/harness-code-review/SKILL.md +107 -22
  47. package/dist/agents/skills/cursor/harness-code-review/references/confidence-rubric.md +45 -0
  48. package/dist/agents/skills/cursor/harness-code-review/references/risk-keywords.md +40 -0
  49. package/dist/agents/skills/cursor/harness-code-review/skill.yaml +3 -0
  50. package/dist/agents/skills/cursor/harness-compound/SKILL.md +7 -4
  51. package/dist/agents/skills/cursor/harness-ideate/SKILL.md +277 -0
  52. package/dist/agents/skills/cursor/harness-ideate/references/scoring.md +88 -0
  53. package/dist/agents/skills/cursor/harness-ideate/skill.yaml +66 -0
  54. package/dist/agents/skills/cursor/harness-planning/SKILL.md +14 -4
  55. package/dist/agents/skills/cursor/harness-pulse/SKILL.md +12 -16
  56. package/dist/agents/skills/cursor/harness-roadmap-pilot/SKILL.md +34 -6
  57. package/dist/agents/skills/cursor/harness-strategy/SKILL.md +152 -0
  58. package/dist/agents/skills/cursor/harness-strategy/references/interview.md +122 -0
  59. package/dist/agents/skills/cursor/harness-strategy/skill.yaml +54 -0
  60. package/dist/agents/skills/cursor/initialize-harness-project/SKILL.md +76 -10
  61. package/dist/agents/skills/cursor/naming-craft/SKILL.md +74 -2
  62. package/dist/agents/skills/gemini-cli/align-design-system/SKILL.md +18 -0
  63. package/dist/agents/skills/gemini-cli/align-design-system/skill.yaml +3 -0
  64. package/dist/agents/skills/gemini-cli/harness-brainstorming/SKILL.md +37 -5
  65. package/dist/agents/skills/gemini-cli/harness-code-review/SKILL.md +107 -22
  66. package/dist/agents/skills/gemini-cli/harness-code-review/references/confidence-rubric.md +45 -0
  67. package/dist/agents/skills/gemini-cli/harness-code-review/references/risk-keywords.md +40 -0
  68. package/dist/agents/skills/gemini-cli/harness-code-review/skill.yaml +3 -0
  69. package/dist/agents/skills/gemini-cli/harness-compound/SKILL.md +7 -4
  70. package/dist/agents/skills/gemini-cli/harness-ideate/SKILL.md +277 -0
  71. package/dist/agents/skills/gemini-cli/harness-ideate/references/scoring.md +88 -0
  72. package/dist/agents/skills/gemini-cli/harness-ideate/skill.yaml +66 -0
  73. package/dist/agents/skills/gemini-cli/harness-planning/SKILL.md +14 -4
  74. package/dist/agents/skills/gemini-cli/harness-pulse/SKILL.md +12 -16
  75. package/dist/agents/skills/gemini-cli/harness-roadmap-pilot/SKILL.md +34 -6
  76. package/dist/agents/skills/gemini-cli/harness-strategy/SKILL.md +152 -0
  77. package/dist/agents/skills/gemini-cli/harness-strategy/references/interview.md +122 -0
  78. package/dist/agents/skills/gemini-cli/harness-strategy/skill.yaml +54 -0
  79. package/dist/agents/skills/gemini-cli/initialize-harness-project/SKILL.md +76 -10
  80. package/dist/agents/skills/gemini-cli/naming-craft/SKILL.md +74 -2
  81. package/dist/agents/skills/package.json +1 -1
  82. package/dist/agents/skills/tests/harness-strategy.test.ts +145 -0
  83. package/dist/agents-md-WMJO5HSM.js +13 -0
  84. package/dist/analyzer-V633GUHY-MBCQWKDU.js +26 -0
  85. package/dist/{architecture-ZTEHGIHD.js → architecture-EVYVGPRZ.js} +6 -6
  86. package/dist/{assess-project-OKDW3YSK.js → assess-project-KZG563SO.js} +1 -1
  87. package/dist/bin/harness-mcp.js +17 -17
  88. package/dist/bin/harness.js +27 -27
  89. package/dist/{check-phase-gate-YJWFDW66.js → check-phase-gate-MK364VXS.js} +6 -6
  90. package/dist/{chunk-6UHDQP2N.js → chunk-2N4OENGE.js} +1 -1
  91. package/dist/{chunk-OLTVDPA2.js → chunk-2SNRCAC3.js} +3 -3
  92. package/dist/{chunk-HLPY3RHE.js → chunk-4BDOSCNY.js} +909 -559
  93. package/dist/{chunk-S7GEONXL.js → chunk-5XL5QJ5B.js} +2 -2
  94. package/dist/{chunk-OQE6ME2Z.js → chunk-7EQAZKJ5.js} +2 -2
  95. package/dist/{chunk-QUPC37UB.js → chunk-ACOOG3UW.js} +6 -6
  96. package/dist/{chunk-B4OLYXZ4.js → chunk-B7KMTHN3.js} +89 -7
  97. package/dist/{chunk-OH3NXXUY.js → chunk-BDGTZRZ6.js} +11 -1
  98. package/dist/{chunk-P7EO7USC.js → chunk-C7J55C6E.js} +10 -10
  99. package/dist/{chunk-4EGPFB7V.js → chunk-CAQPSFPT.js} +4753 -744
  100. package/dist/{chunk-TIH53QXY.js → chunk-CLI4K2CH.js} +1 -1
  101. package/dist/{chunk-ZKA3TGYS.js → chunk-EEFRPEWT.js} +1 -1
  102. package/dist/{chunk-TIZ3L6CU.js → chunk-FZ5MBXEG.js} +6 -6
  103. package/dist/{chunk-IY2TZLY5.js → chunk-GOHWCHCS.js} +1809 -812
  104. package/dist/{chunk-VG6UK6G6.js → chunk-HRSE6IQD.js} +2 -2
  105. package/dist/{chunk-67RP7MLR.js → chunk-KBCPELBC.js} +3 -3
  106. package/dist/{chunk-MQG7FHXX.js → chunk-KI6PHH6Q.js} +3 -3
  107. package/dist/{chunk-HMMSWRWR.js → chunk-LADPYELQ.js} +23 -3
  108. package/dist/{chunk-W3PDVZ4I.js → chunk-N55WOGN3.js} +90 -21
  109. package/dist/{chunk-H2ZJOJ7A.js → chunk-PP6ZRL5T.js} +316 -42
  110. package/dist/{chunk-B3B64OPD.js → chunk-STESM73J.js} +2 -2
  111. package/dist/{chunk-WOXR6I3R.js → chunk-UBZQE3JN.js} +2 -2
  112. package/dist/{chunk-6T5AYG5S.js → chunk-UJFNIWC7.js} +5 -5
  113. package/dist/{chunk-CXAHK5PJ.js → chunk-UUO4K7NX.js} +9 -9
  114. package/dist/{chunk-Z2GUITAS.js → chunk-UXPWSV3B.js} +9 -9
  115. package/dist/{chunk-PARV3G2F.js → chunk-VBNJAKUH.js} +2 -2
  116. package/dist/{chunk-XTIPZUPR.js → chunk-X4EFYVCZ.js} +2 -2
  117. package/dist/{ci-workflow-YGTQTNVC.js → ci-workflow-IW2H5DC4.js} +5 -5
  118. package/dist/{dist-E3SAAHCM.js → dist-ICW4QUEW.js} +5 -1
  119. package/dist/{dist-XIJWWQ5N.js → dist-JCFK263L.js} +52 -4
  120. package/dist/{dist-R3TOOPJ7.js → dist-OWHMNL4W.js} +1 -1
  121. package/dist/{docs-KCTLXK2G.js → docs-7CP6VV42.js} +6 -6
  122. package/dist/engine-MKJEBWU7.js +13 -0
  123. package/dist/{entropy-M27JUL3V.js → entropy-6JOZJYG7.js} +5 -5
  124. package/dist/{feedback-W25QO3OL.js → feedback-T65AEJEG.js} +1 -1
  125. package/dist/{generate-agent-definitions-RNMU5U5R.js → generate-agent-definitions-4VI4YTO2.js} +6 -6
  126. package/dist/{glob-helper-EX4YZKZO.js → glob-helper-GLZAURJC.js} +1 -1
  127. package/dist/{graph-loader-EIFEOUVI.js → graph-loader-HHXN5FLP.js} +1 -1
  128. package/dist/index.d.ts +627 -6
  129. package/dist/index.js +27 -27
  130. package/dist/{loader-HZKJ5ABV.js → loader-AWTHHE3A.js} +5 -5
  131. package/dist/{mcp-NEAPIDTT.js → mcp-JBIBINO2.js} +17 -17
  132. package/dist/{performance-3AVQUDRG.js → performance-NCOUDOMW.js} +6 -6
  133. package/dist/{review-pipeline-KA7SGUXJ.js → review-pipeline-YIC6JPMY.js} +5 -5
  134. package/dist/{runtime-IP6FVV5M.js → runtime-5MHV4UEE.js} +5 -5
  135. package/dist/{scan-LYKLM4EQ.js → scan-P7YFKB77.js} +1 -1
  136. package/dist/{security-EAR4FJWI.js → security-VZPJNIDP.js} +1 -1
  137. package/dist/{validate-EVH3UXIC.js → validate-7BE4VTFI.js} +6 -6
  138. package/dist/validate-cross-check-F7GEBRDH.js +13 -0
  139. package/package.json +7 -7
  140. package/dist/agents-md-267R2NUJ.js +0 -13
  141. package/dist/analyzer-VY6DJVOU-WYKV3TTW.js +0 -26
  142. package/dist/engine-J64WPH5K.js +0 -13
  143. package/dist/validate-cross-check-SNE3SQOB.js +0 -13
package/dist/index.d.ts CHANGED
@@ -398,14 +398,286 @@ declare const HarnessConfigSchema: z.ZodObject<{
398
398
  timeout: z.ZodDefault<z.ZodNumber>;
399
399
  /** Optional list of skill IDs pre-authorized for the agent */
400
400
  skills: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
401
+ /**
402
+ * Named backend definitions (Spec 2 — multi-backend routing).
403
+ *
404
+ * Each entry maps a backend name (chosen by the project) to a backend
405
+ * type plus its connection details (model, endpoint, apiKey, etc.).
406
+ * Referenced from `craft.llm.backend`, from orchestrator routing rules,
407
+ * and from any future subsystem that needs a configured LLM backend.
408
+ *
409
+ * Schema is re-exported from @harness-engineering/orchestrator so this
410
+ * file and the orchestrator runtime validate against the same source.
411
+ */
412
+ backends: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
413
+ type: z.ZodLiteral<"mock">;
414
+ }, "strict", z.ZodTypeAny, {
415
+ type: "mock";
416
+ }, {
417
+ type: "mock";
418
+ }>, z.ZodObject<{
419
+ type: z.ZodLiteral<"claude">;
420
+ command: z.ZodOptional<z.ZodString>;
421
+ }, "strict", z.ZodTypeAny, {
422
+ type: "claude";
423
+ command?: string | undefined;
424
+ }, {
425
+ type: "claude";
426
+ command?: string | undefined;
427
+ }>, z.ZodObject<{
428
+ type: z.ZodLiteral<"anthropic">;
429
+ model: z.ZodString;
430
+ apiKey: z.ZodOptional<z.ZodString>;
431
+ }, "strict", z.ZodTypeAny, {
432
+ type: "anthropic";
433
+ model: string;
434
+ apiKey?: string | undefined;
435
+ }, {
436
+ type: "anthropic";
437
+ model: string;
438
+ apiKey?: string | undefined;
439
+ }>, z.ZodObject<{
440
+ type: z.ZodLiteral<"openai">;
441
+ model: z.ZodString;
442
+ apiKey: z.ZodOptional<z.ZodString>;
443
+ }, "strict", z.ZodTypeAny, {
444
+ type: "openai";
445
+ model: string;
446
+ apiKey?: string | undefined;
447
+ }, {
448
+ type: "openai";
449
+ model: string;
450
+ apiKey?: string | undefined;
451
+ }>, z.ZodObject<{
452
+ type: z.ZodLiteral<"gemini">;
453
+ model: z.ZodString;
454
+ apiKey: z.ZodOptional<z.ZodString>;
455
+ }, "strict", z.ZodTypeAny, {
456
+ type: "gemini";
457
+ model: string;
458
+ apiKey?: string | undefined;
459
+ }, {
460
+ type: "gemini";
461
+ model: string;
462
+ apiKey?: string | undefined;
463
+ }>, z.ZodObject<{
464
+ type: z.ZodLiteral<"local">;
465
+ endpoint: z.ZodString;
466
+ model: z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "atleastone">]>;
467
+ apiKey: z.ZodOptional<z.ZodString>;
468
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
469
+ probeIntervalMs: z.ZodOptional<z.ZodNumber>;
470
+ }, "strict", z.ZodTypeAny, {
471
+ type: "local";
472
+ model: string | [string, ...string[]];
473
+ endpoint: string;
474
+ apiKey?: string | undefined;
475
+ timeoutMs?: number | undefined;
476
+ probeIntervalMs?: number | undefined;
477
+ }, {
478
+ type: "local";
479
+ model: string | [string, ...string[]];
480
+ endpoint: string;
481
+ apiKey?: string | undefined;
482
+ timeoutMs?: number | undefined;
483
+ probeIntervalMs?: number | undefined;
484
+ }>, z.ZodObject<{
485
+ type: z.ZodLiteral<"pi">;
486
+ endpoint: z.ZodString;
487
+ model: z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "atleastone">]>;
488
+ apiKey: z.ZodOptional<z.ZodString>;
489
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
490
+ probeIntervalMs: z.ZodOptional<z.ZodNumber>;
491
+ }, "strict", z.ZodTypeAny, {
492
+ type: "pi";
493
+ model: string | [string, ...string[]];
494
+ endpoint: string;
495
+ apiKey?: string | undefined;
496
+ timeoutMs?: number | undefined;
497
+ probeIntervalMs?: number | undefined;
498
+ }, {
499
+ type: "pi";
500
+ model: string | [string, ...string[]];
501
+ endpoint: string;
502
+ apiKey?: string | undefined;
503
+ timeoutMs?: number | undefined;
504
+ probeIntervalMs?: number | undefined;
505
+ }>]>>>;
506
+ /** Routing rules for orchestrator agent dispatch. */
507
+ routing: z.ZodOptional<z.ZodObject<{
508
+ default: z.ZodUnion<[z.ZodString, z.ZodReadonly<z.ZodArray<z.ZodString, "atleastone">>]>;
509
+ 'quick-fix': z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodReadonly<z.ZodArray<z.ZodString, "atleastone">>]>>;
510
+ 'guided-change': z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodReadonly<z.ZodArray<z.ZodString, "atleastone">>]>>;
511
+ 'full-exploration': z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodReadonly<z.ZodArray<z.ZodString, "atleastone">>]>>;
512
+ diagnostic: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodReadonly<z.ZodArray<z.ZodString, "atleastone">>]>>;
513
+ intelligence: z.ZodOptional<z.ZodObject<{
514
+ sel: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodReadonly<z.ZodArray<z.ZodString, "atleastone">>]>>;
515
+ pesl: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodReadonly<z.ZodArray<z.ZodString, "atleastone">>]>>;
516
+ }, "strict", z.ZodTypeAny, {
517
+ sel?: string | readonly [string, ...string[]] | undefined;
518
+ pesl?: string | readonly [string, ...string[]] | undefined;
519
+ }, {
520
+ sel?: string | readonly [string, ...string[]] | undefined;
521
+ pesl?: string | readonly [string, ...string[]] | undefined;
522
+ }>>;
523
+ isolation: z.ZodOptional<z.ZodObject<{
524
+ none: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodReadonly<z.ZodArray<z.ZodString, "atleastone">>]>>;
525
+ container: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodReadonly<z.ZodArray<z.ZodString, "atleastone">>]>>;
526
+ "remote-sandbox": z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodReadonly<z.ZodArray<z.ZodString, "atleastone">>]>>;
527
+ }, "strict", z.ZodTypeAny, {
528
+ none?: string | readonly [string, ...string[]] | undefined;
529
+ container?: string | readonly [string, ...string[]] | undefined;
530
+ "remote-sandbox"?: string | readonly [string, ...string[]] | undefined;
531
+ }, {
532
+ none?: string | readonly [string, ...string[]] | undefined;
533
+ container?: string | readonly [string, ...string[]] | undefined;
534
+ "remote-sandbox"?: string | readonly [string, ...string[]] | undefined;
535
+ }>>;
536
+ skills: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodReadonly<z.ZodArray<z.ZodString, "atleastone">>]>>>;
537
+ modes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodReadonly<z.ZodArray<z.ZodString, "atleastone">>]>>>;
538
+ }, "strict", z.ZodTypeAny, {
539
+ default: string | readonly [string, ...string[]];
540
+ 'quick-fix'?: string | readonly [string, ...string[]] | undefined;
541
+ 'guided-change'?: string | readonly [string, ...string[]] | undefined;
542
+ 'full-exploration'?: string | readonly [string, ...string[]] | undefined;
543
+ diagnostic?: string | readonly [string, ...string[]] | undefined;
544
+ intelligence?: {
545
+ sel?: string | readonly [string, ...string[]] | undefined;
546
+ pesl?: string | readonly [string, ...string[]] | undefined;
547
+ } | undefined;
548
+ isolation?: {
549
+ none?: string | readonly [string, ...string[]] | undefined;
550
+ container?: string | readonly [string, ...string[]] | undefined;
551
+ "remote-sandbox"?: string | readonly [string, ...string[]] | undefined;
552
+ } | undefined;
553
+ skills?: Record<string, string | readonly [string, ...string[]]> | undefined;
554
+ modes?: Record<string, string | readonly [string, ...string[]]> | undefined;
555
+ }, {
556
+ default: string | readonly [string, ...string[]];
557
+ 'quick-fix'?: string | readonly [string, ...string[]] | undefined;
558
+ 'guided-change'?: string | readonly [string, ...string[]] | undefined;
559
+ 'full-exploration'?: string | readonly [string, ...string[]] | undefined;
560
+ diagnostic?: string | readonly [string, ...string[]] | undefined;
561
+ intelligence?: {
562
+ sel?: string | readonly [string, ...string[]] | undefined;
563
+ pesl?: string | readonly [string, ...string[]] | undefined;
564
+ } | undefined;
565
+ isolation?: {
566
+ none?: string | readonly [string, ...string[]] | undefined;
567
+ container?: string | readonly [string, ...string[]] | undefined;
568
+ "remote-sandbox"?: string | readonly [string, ...string[]] | undefined;
569
+ } | undefined;
570
+ skills?: Record<string, string | readonly [string, ...string[]]> | undefined;
571
+ modes?: Record<string, string | readonly [string, ...string[]]> | undefined;
572
+ }>>;
401
573
  }, "strip", z.ZodTypeAny, {
402
574
  executor: "subprocess" | "cloud" | "noop";
403
575
  timeout: number;
404
576
  skills?: string[] | undefined;
577
+ backends?: Record<string, {
578
+ type: "mock";
579
+ } | {
580
+ type: "claude";
581
+ command?: string | undefined;
582
+ } | {
583
+ type: "anthropic";
584
+ model: string;
585
+ apiKey?: string | undefined;
586
+ } | {
587
+ type: "openai";
588
+ model: string;
589
+ apiKey?: string | undefined;
590
+ } | {
591
+ type: "gemini";
592
+ model: string;
593
+ apiKey?: string | undefined;
594
+ } | {
595
+ type: "local";
596
+ model: string | [string, ...string[]];
597
+ endpoint: string;
598
+ apiKey?: string | undefined;
599
+ timeoutMs?: number | undefined;
600
+ probeIntervalMs?: number | undefined;
601
+ } | {
602
+ type: "pi";
603
+ model: string | [string, ...string[]];
604
+ endpoint: string;
605
+ apiKey?: string | undefined;
606
+ timeoutMs?: number | undefined;
607
+ probeIntervalMs?: number | undefined;
608
+ }> | undefined;
609
+ routing?: {
610
+ default: string | readonly [string, ...string[]];
611
+ 'quick-fix'?: string | readonly [string, ...string[]] | undefined;
612
+ 'guided-change'?: string | readonly [string, ...string[]] | undefined;
613
+ 'full-exploration'?: string | readonly [string, ...string[]] | undefined;
614
+ diagnostic?: string | readonly [string, ...string[]] | undefined;
615
+ intelligence?: {
616
+ sel?: string | readonly [string, ...string[]] | undefined;
617
+ pesl?: string | readonly [string, ...string[]] | undefined;
618
+ } | undefined;
619
+ isolation?: {
620
+ none?: string | readonly [string, ...string[]] | undefined;
621
+ container?: string | readonly [string, ...string[]] | undefined;
622
+ "remote-sandbox"?: string | readonly [string, ...string[]] | undefined;
623
+ } | undefined;
624
+ skills?: Record<string, string | readonly [string, ...string[]]> | undefined;
625
+ modes?: Record<string, string | readonly [string, ...string[]]> | undefined;
626
+ } | undefined;
405
627
  }, {
406
628
  executor?: "subprocess" | "cloud" | "noop" | undefined;
407
629
  timeout?: number | undefined;
408
630
  skills?: string[] | undefined;
631
+ backends?: Record<string, {
632
+ type: "mock";
633
+ } | {
634
+ type: "claude";
635
+ command?: string | undefined;
636
+ } | {
637
+ type: "anthropic";
638
+ model: string;
639
+ apiKey?: string | undefined;
640
+ } | {
641
+ type: "openai";
642
+ model: string;
643
+ apiKey?: string | undefined;
644
+ } | {
645
+ type: "gemini";
646
+ model: string;
647
+ apiKey?: string | undefined;
648
+ } | {
649
+ type: "local";
650
+ model: string | [string, ...string[]];
651
+ endpoint: string;
652
+ apiKey?: string | undefined;
653
+ timeoutMs?: number | undefined;
654
+ probeIntervalMs?: number | undefined;
655
+ } | {
656
+ type: "pi";
657
+ model: string | [string, ...string[]];
658
+ endpoint: string;
659
+ apiKey?: string | undefined;
660
+ timeoutMs?: number | undefined;
661
+ probeIntervalMs?: number | undefined;
662
+ }> | undefined;
663
+ routing?: {
664
+ default: string | readonly [string, ...string[]];
665
+ 'quick-fix'?: string | readonly [string, ...string[]] | undefined;
666
+ 'guided-change'?: string | readonly [string, ...string[]] | undefined;
667
+ 'full-exploration'?: string | readonly [string, ...string[]] | undefined;
668
+ diagnostic?: string | readonly [string, ...string[]] | undefined;
669
+ intelligence?: {
670
+ sel?: string | readonly [string, ...string[]] | undefined;
671
+ pesl?: string | readonly [string, ...string[]] | undefined;
672
+ } | undefined;
673
+ isolation?: {
674
+ none?: string | readonly [string, ...string[]] | undefined;
675
+ container?: string | readonly [string, ...string[]] | undefined;
676
+ "remote-sandbox"?: string | readonly [string, ...string[]] | undefined;
677
+ } | undefined;
678
+ skills?: Record<string, string | readonly [string, ...string[]]> | undefined;
679
+ modes?: Record<string, string | readonly [string, ...string[]]> | undefined;
680
+ } | undefined;
409
681
  }>>;
410
682
  /** Source-file ingestion controls (skip-dirs, exclude patterns, gitignore handling) */
411
683
  ingest: z.ZodOptional<z.ZodObject<{
@@ -1115,6 +1387,41 @@ declare const HarnessConfigSchema: z.ZodObject<{
1115
1387
  } | undefined;
1116
1388
  } | undefined;
1117
1389
  }>>;
1390
+ /** Shared configuration for craft-pipeline ceiling skills (LLM-judgment) */
1391
+ craft: z.ZodOptional<z.ZodObject<{
1392
+ llm: z.ZodOptional<z.ZodObject<{
1393
+ /**
1394
+ * Name of an entry in `agent.backends` to route craft LLM calls
1395
+ * through. Supported backend types: claude, anthropic, openai,
1396
+ * local, pi, mock. (gemini is declared in agent.backends but is
1397
+ * not yet wired through the craft adapter.)
1398
+ */
1399
+ backend: z.ZodOptional<z.ZodString>;
1400
+ /**
1401
+ * Special-case mode that doesn't correspond to a backend def.
1402
+ * - `in-session` — defer prompts to the calling chat session
1403
+ * via the two-step MCP flow (collect → finalize).
1404
+ * - `mock` — deterministic mock provider, for tests / smoke runs.
1405
+ */
1406
+ mode: z.ZodOptional<z.ZodEnum<["in-session", "mock"]>>;
1407
+ }, "strip", z.ZodTypeAny, {
1408
+ mode?: "in-session" | "mock" | undefined;
1409
+ backend?: string | undefined;
1410
+ }, {
1411
+ mode?: "in-session" | "mock" | undefined;
1412
+ backend?: string | undefined;
1413
+ }>>;
1414
+ }, "strip", z.ZodTypeAny, {
1415
+ llm?: {
1416
+ mode?: "in-session" | "mock" | undefined;
1417
+ backend?: string | undefined;
1418
+ } | undefined;
1419
+ }, {
1420
+ llm?: {
1421
+ mode?: "in-session" | "mock" | undefined;
1422
+ backend?: string | undefined;
1423
+ } | undefined;
1424
+ }>>;
1118
1425
  /** Internationalization (i18n) settings */
1119
1426
  i18n: z.ZodOptional<z.ZodObject<{
1120
1427
  /** Whether i18n management is enabled */
@@ -1520,7 +1827,7 @@ declare const HarnessConfigSchema: z.ZodObject<{
1520
1827
  connectors?: Record<string, Record<string, unknown>> | undefined;
1521
1828
  }>>;
1522
1829
  /**
1523
- * Hermes Phase 2 — Disk-hygiene rules consumed by `harness cleanup-sessions --all`.
1830
+ * Disk-hygiene rules consumed by `harness cleanup-sessions --all`.
1524
1831
  * Keys correspond to registered target names (sessions, cache, maintenance,
1525
1832
  * dashboard-state, snapshots, analyzer-output); values override the default
1526
1833
  * TTL in hours. Unknown keys are ignored (forward-compatible).
@@ -1533,7 +1840,7 @@ declare const HarnessConfigSchema: z.ZodObject<{
1533
1840
  ttlHours?: Record<string, number> | undefined;
1534
1841
  }>>;
1535
1842
  /**
1536
- * Hermes Phase 2 — Pre-launch OSV malware guard configuration.
1843
+ * Pre-launch OSV malware guard configuration.
1537
1844
  * `enabled: false` disables the guard; `strict: true` reverses the default
1538
1845
  * fail-open posture on OSV.dev network errors.
1539
1846
  */
@@ -1542,14 +1849,162 @@ declare const HarnessConfigSchema: z.ZodObject<{
1542
1849
  strict: z.ZodDefault<z.ZodBoolean>;
1543
1850
  cacheTtlHours: z.ZodDefault<z.ZodNumber>;
1544
1851
  }, "strip", z.ZodTypeAny, {
1545
- enabled: boolean;
1546
1852
  strict: boolean;
1853
+ enabled: boolean;
1547
1854
  cacheTtlHours: number;
1548
1855
  }, {
1549
- enabled?: boolean | undefined;
1550
1856
  strict?: boolean | undefined;
1857
+ enabled?: boolean | undefined;
1551
1858
  cacheTtlHours?: number | undefined;
1552
1859
  }>>;
1860
+ /**
1861
+ * Local Model Lifecycle Manager (LMLM) configuration. Optional and
1862
+ * disabled by default (`enabled: false`); see
1863
+ * `docs/changes/local-model-lifecycle-manager/proposal.md`.
1864
+ */
1865
+ localModels: z.ZodOptional<z.ZodObject<{
1866
+ /** Opt-in switch. Default false preserves today's behavior. */
1867
+ enabled: z.ZodDefault<z.ZodBoolean>;
1868
+ pool: z.ZodDefault<z.ZodObject<{
1869
+ /** Hard ceiling on total on-disk size of installed pool members. */
1870
+ diskBudgetGb: z.ZodDefault<z.ZodNumber>;
1871
+ /** Hugging Face org allowlist. Models outside these orgs cannot be installed (D1). */
1872
+ allowedOrgs: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
1873
+ /** Optional family allowlist; empty means "all families under the allowed orgs". */
1874
+ allowedFamilies: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
1875
+ }, "strip", z.ZodTypeAny, {
1876
+ diskBudgetGb: number;
1877
+ allowedOrgs: string[];
1878
+ allowedFamilies: string[];
1879
+ }, {
1880
+ diskBudgetGb?: number | undefined;
1881
+ allowedOrgs?: string[] | undefined;
1882
+ allowedFamilies?: string[] | undefined;
1883
+ }>>;
1884
+ refresh: z.ZodDefault<z.ZodObject<{
1885
+ /** Re-rank cadence in ms. Floor 1h to keep HF API usage civil (D9). */
1886
+ intervalMs: z.ZodDefault<z.ZodNumber>;
1887
+ /** Minimum score delta to emit a swap proposal (D2). */
1888
+ proposalThreshold: z.ZodDefault<z.ZodNumber>;
1889
+ /** Random jitter added to the interval to avoid thundering herd (D9). */
1890
+ jitterMs: z.ZodDefault<z.ZodNumber>;
1891
+ }, "strip", z.ZodTypeAny, {
1892
+ proposalThreshold: number;
1893
+ intervalMs: number;
1894
+ jitterMs: number;
1895
+ }, {
1896
+ proposalThreshold?: number | undefined;
1897
+ intervalMs?: number | undefined;
1898
+ jitterMs?: number | undefined;
1899
+ }>>;
1900
+ installer: z.ZodDefault<z.ZodObject<{
1901
+ /** `'ollama'` performs auto-install via REST; `'advisory'` emits copy-paste only (D4). */
1902
+ backend: z.ZodDefault<z.ZodEnum<["ollama", "advisory"]>>;
1903
+ /** Ollama REST endpoint. Only consulted when `backend === 'ollama'`. */
1904
+ ollamaEndpoint: z.ZodDefault<z.ZodString>;
1905
+ }, "strip", z.ZodTypeAny, {
1906
+ backend: "ollama" | "advisory";
1907
+ ollamaEndpoint: string;
1908
+ }, {
1909
+ backend?: "ollama" | "advisory" | undefined;
1910
+ ollamaEndpoint?: string | undefined;
1911
+ }>>;
1912
+ hardware: z.ZodOptional<z.ZodObject<{
1913
+ /** Manual override that skips autodetection (D7 fallback path). */
1914
+ override: z.ZodOptional<z.ZodObject<{
1915
+ platform: z.ZodEnum<["macos", "nvidia", "cpu"]>;
1916
+ vramGb: z.ZodNumber;
1917
+ bandwidthGbps: z.ZodNumber;
1918
+ ramGb: z.ZodOptional<z.ZodNumber>;
1919
+ gpuName: z.ZodOptional<z.ZodString>;
1920
+ cpuName: z.ZodOptional<z.ZodString>;
1921
+ }, "strip", z.ZodTypeAny, {
1922
+ platform: "macos" | "nvidia" | "cpu";
1923
+ vramGb: number;
1924
+ bandwidthGbps: number;
1925
+ ramGb?: number | undefined;
1926
+ gpuName?: string | undefined;
1927
+ cpuName?: string | undefined;
1928
+ }, {
1929
+ platform: "macos" | "nvidia" | "cpu";
1930
+ vramGb: number;
1931
+ bandwidthGbps: number;
1932
+ ramGb?: number | undefined;
1933
+ gpuName?: string | undefined;
1934
+ cpuName?: string | undefined;
1935
+ }>>;
1936
+ }, "strip", z.ZodTypeAny, {
1937
+ override?: {
1938
+ platform: "macos" | "nvidia" | "cpu";
1939
+ vramGb: number;
1940
+ bandwidthGbps: number;
1941
+ ramGb?: number | undefined;
1942
+ gpuName?: string | undefined;
1943
+ cpuName?: string | undefined;
1944
+ } | undefined;
1945
+ }, {
1946
+ override?: {
1947
+ platform: "macos" | "nvidia" | "cpu";
1948
+ vramGb: number;
1949
+ bandwidthGbps: number;
1950
+ ramGb?: number | undefined;
1951
+ gpuName?: string | undefined;
1952
+ cpuName?: string | undefined;
1953
+ } | undefined;
1954
+ }>>;
1955
+ }, "strip", z.ZodTypeAny, {
1956
+ enabled: boolean;
1957
+ pool: {
1958
+ diskBudgetGb: number;
1959
+ allowedOrgs: string[];
1960
+ allowedFamilies: string[];
1961
+ };
1962
+ refresh: {
1963
+ proposalThreshold: number;
1964
+ intervalMs: number;
1965
+ jitterMs: number;
1966
+ };
1967
+ installer: {
1968
+ backend: "ollama" | "advisory";
1969
+ ollamaEndpoint: string;
1970
+ };
1971
+ hardware?: {
1972
+ override?: {
1973
+ platform: "macos" | "nvidia" | "cpu";
1974
+ vramGb: number;
1975
+ bandwidthGbps: number;
1976
+ ramGb?: number | undefined;
1977
+ gpuName?: string | undefined;
1978
+ cpuName?: string | undefined;
1979
+ } | undefined;
1980
+ } | undefined;
1981
+ }, {
1982
+ enabled?: boolean | undefined;
1983
+ pool?: {
1984
+ diskBudgetGb?: number | undefined;
1985
+ allowedOrgs?: string[] | undefined;
1986
+ allowedFamilies?: string[] | undefined;
1987
+ } | undefined;
1988
+ refresh?: {
1989
+ proposalThreshold?: number | undefined;
1990
+ intervalMs?: number | undefined;
1991
+ jitterMs?: number | undefined;
1992
+ } | undefined;
1993
+ installer?: {
1994
+ backend?: "ollama" | "advisory" | undefined;
1995
+ ollamaEndpoint?: string | undefined;
1996
+ } | undefined;
1997
+ hardware?: {
1998
+ override?: {
1999
+ platform: "macos" | "nvidia" | "cpu";
2000
+ vramGb: number;
2001
+ bandwidthGbps: number;
2002
+ ramGb?: number | undefined;
2003
+ gpuName?: string | undefined;
2004
+ cpuName?: string | undefined;
2005
+ } | undefined;
2006
+ } | undefined;
2007
+ }>>;
1553
2008
  }, "strip", z.ZodTypeAny, {
1554
2009
  version: 1;
1555
2010
  rootDir: string;
@@ -1561,6 +2016,12 @@ declare const HarnessConfigSchema: z.ZodObject<{
1561
2016
  neverSuggest: string[];
1562
2017
  tierOverrides: Record<string, number>;
1563
2018
  } | undefined;
2019
+ craft?: {
2020
+ llm?: {
2021
+ mode?: "in-session" | "mock" | undefined;
2022
+ backend?: string | undefined;
2023
+ } | undefined;
2024
+ } | undefined;
1564
2025
  layers?: {
1565
2026
  name: string;
1566
2027
  pattern: string;
@@ -1578,6 +2039,56 @@ declare const HarnessConfigSchema: z.ZodObject<{
1578
2039
  executor: "subprocess" | "cloud" | "noop";
1579
2040
  timeout: number;
1580
2041
  skills?: string[] | undefined;
2042
+ backends?: Record<string, {
2043
+ type: "mock";
2044
+ } | {
2045
+ type: "claude";
2046
+ command?: string | undefined;
2047
+ } | {
2048
+ type: "anthropic";
2049
+ model: string;
2050
+ apiKey?: string | undefined;
2051
+ } | {
2052
+ type: "openai";
2053
+ model: string;
2054
+ apiKey?: string | undefined;
2055
+ } | {
2056
+ type: "gemini";
2057
+ model: string;
2058
+ apiKey?: string | undefined;
2059
+ } | {
2060
+ type: "local";
2061
+ model: string | [string, ...string[]];
2062
+ endpoint: string;
2063
+ apiKey?: string | undefined;
2064
+ timeoutMs?: number | undefined;
2065
+ probeIntervalMs?: number | undefined;
2066
+ } | {
2067
+ type: "pi";
2068
+ model: string | [string, ...string[]];
2069
+ endpoint: string;
2070
+ apiKey?: string | undefined;
2071
+ timeoutMs?: number | undefined;
2072
+ probeIntervalMs?: number | undefined;
2073
+ }> | undefined;
2074
+ routing?: {
2075
+ default: string | readonly [string, ...string[]];
2076
+ 'quick-fix'?: string | readonly [string, ...string[]] | undefined;
2077
+ 'guided-change'?: string | readonly [string, ...string[]] | undefined;
2078
+ 'full-exploration'?: string | readonly [string, ...string[]] | undefined;
2079
+ diagnostic?: string | readonly [string, ...string[]] | undefined;
2080
+ intelligence?: {
2081
+ sel?: string | readonly [string, ...string[]] | undefined;
2082
+ pesl?: string | readonly [string, ...string[]] | undefined;
2083
+ } | undefined;
2084
+ isolation?: {
2085
+ none?: string | readonly [string, ...string[]] | undefined;
2086
+ container?: string | readonly [string, ...string[]] | undefined;
2087
+ "remote-sandbox"?: string | readonly [string, ...string[]] | undefined;
2088
+ } | undefined;
2089
+ skills?: Record<string, string | readonly [string, ...string[]]> | undefined;
2090
+ modes?: Record<string, string | readonly [string, ...string[]]> | undefined;
2091
+ } | undefined;
1581
2092
  } | undefined;
1582
2093
  ingest?: {
1583
2094
  respectGitignore: boolean;
@@ -1781,10 +2292,37 @@ declare const HarnessConfigSchema: z.ZodObject<{
1781
2292
  ttlHours?: Record<string, number> | undefined;
1782
2293
  } | undefined;
1783
2294
  osvGuard?: {
1784
- enabled: boolean;
1785
2295
  strict: boolean;
2296
+ enabled: boolean;
1786
2297
  cacheTtlHours: number;
1787
2298
  } | undefined;
2299
+ localModels?: {
2300
+ enabled: boolean;
2301
+ pool: {
2302
+ diskBudgetGb: number;
2303
+ allowedOrgs: string[];
2304
+ allowedFamilies: string[];
2305
+ };
2306
+ refresh: {
2307
+ proposalThreshold: number;
2308
+ intervalMs: number;
2309
+ jitterMs: number;
2310
+ };
2311
+ installer: {
2312
+ backend: "ollama" | "advisory";
2313
+ ollamaEndpoint: string;
2314
+ };
2315
+ hardware?: {
2316
+ override?: {
2317
+ platform: "macos" | "nvidia" | "cpu";
2318
+ vramGb: number;
2319
+ bandwidthGbps: number;
2320
+ ramGb?: number | undefined;
2321
+ gpuName?: string | undefined;
2322
+ cpuName?: string | undefined;
2323
+ } | undefined;
2324
+ } | undefined;
2325
+ } | undefined;
1788
2326
  }, {
1789
2327
  version: 1;
1790
2328
  name?: string | undefined;
@@ -1793,6 +2331,12 @@ declare const HarnessConfigSchema: z.ZodObject<{
1793
2331
  neverSuggest?: string[] | undefined;
1794
2332
  tierOverrides?: Record<string, number> | undefined;
1795
2333
  } | undefined;
2334
+ craft?: {
2335
+ llm?: {
2336
+ mode?: "in-session" | "mock" | undefined;
2337
+ backend?: string | undefined;
2338
+ } | undefined;
2339
+ } | undefined;
1796
2340
  rootDir?: string | undefined;
1797
2341
  layers?: {
1798
2342
  name: string;
@@ -1813,6 +2357,56 @@ declare const HarnessConfigSchema: z.ZodObject<{
1813
2357
  executor?: "subprocess" | "cloud" | "noop" | undefined;
1814
2358
  timeout?: number | undefined;
1815
2359
  skills?: string[] | undefined;
2360
+ backends?: Record<string, {
2361
+ type: "mock";
2362
+ } | {
2363
+ type: "claude";
2364
+ command?: string | undefined;
2365
+ } | {
2366
+ type: "anthropic";
2367
+ model: string;
2368
+ apiKey?: string | undefined;
2369
+ } | {
2370
+ type: "openai";
2371
+ model: string;
2372
+ apiKey?: string | undefined;
2373
+ } | {
2374
+ type: "gemini";
2375
+ model: string;
2376
+ apiKey?: string | undefined;
2377
+ } | {
2378
+ type: "local";
2379
+ model: string | [string, ...string[]];
2380
+ endpoint: string;
2381
+ apiKey?: string | undefined;
2382
+ timeoutMs?: number | undefined;
2383
+ probeIntervalMs?: number | undefined;
2384
+ } | {
2385
+ type: "pi";
2386
+ model: string | [string, ...string[]];
2387
+ endpoint: string;
2388
+ apiKey?: string | undefined;
2389
+ timeoutMs?: number | undefined;
2390
+ probeIntervalMs?: number | undefined;
2391
+ }> | undefined;
2392
+ routing?: {
2393
+ default: string | readonly [string, ...string[]];
2394
+ 'quick-fix'?: string | readonly [string, ...string[]] | undefined;
2395
+ 'guided-change'?: string | readonly [string, ...string[]] | undefined;
2396
+ 'full-exploration'?: string | readonly [string, ...string[]] | undefined;
2397
+ diagnostic?: string | readonly [string, ...string[]] | undefined;
2398
+ intelligence?: {
2399
+ sel?: string | readonly [string, ...string[]] | undefined;
2400
+ pesl?: string | readonly [string, ...string[]] | undefined;
2401
+ } | undefined;
2402
+ isolation?: {
2403
+ none?: string | readonly [string, ...string[]] | undefined;
2404
+ container?: string | readonly [string, ...string[]] | undefined;
2405
+ "remote-sandbox"?: string | readonly [string, ...string[]] | undefined;
2406
+ } | undefined;
2407
+ skills?: Record<string, string | readonly [string, ...string[]]> | undefined;
2408
+ modes?: Record<string, string | readonly [string, ...string[]]> | undefined;
2409
+ } | undefined;
1816
2410
  } | undefined;
1817
2411
  ingest?: {
1818
2412
  skipDirs?: string[] | undefined;
@@ -2016,10 +2610,37 @@ declare const HarnessConfigSchema: z.ZodObject<{
2016
2610
  ttlHours?: Record<string, number> | undefined;
2017
2611
  } | undefined;
2018
2612
  osvGuard?: {
2019
- enabled?: boolean | undefined;
2020
2613
  strict?: boolean | undefined;
2614
+ enabled?: boolean | undefined;
2021
2615
  cacheTtlHours?: number | undefined;
2022
2616
  } | undefined;
2617
+ localModels?: {
2618
+ enabled?: boolean | undefined;
2619
+ pool?: {
2620
+ diskBudgetGb?: number | undefined;
2621
+ allowedOrgs?: string[] | undefined;
2622
+ allowedFamilies?: string[] | undefined;
2623
+ } | undefined;
2624
+ refresh?: {
2625
+ proposalThreshold?: number | undefined;
2626
+ intervalMs?: number | undefined;
2627
+ jitterMs?: number | undefined;
2628
+ } | undefined;
2629
+ installer?: {
2630
+ backend?: "ollama" | "advisory" | undefined;
2631
+ ollamaEndpoint?: string | undefined;
2632
+ } | undefined;
2633
+ hardware?: {
2634
+ override?: {
2635
+ platform: "macos" | "nvidia" | "cpu";
2636
+ vramGb: number;
2637
+ bandwidthGbps: number;
2638
+ ramGb?: number | undefined;
2639
+ gpuName?: string | undefined;
2640
+ cpuName?: string | undefined;
2641
+ } | undefined;
2642
+ } | undefined;
2643
+ } | undefined;
2023
2644
  }>;
2024
2645
  /**
2025
2646
  * Type representing the full Harness configuration.