@harness-engineering/cli 4.3.2 → 5.0.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 (76) hide show
  1. package/dist/agents/skills/claude-code/harness-brainstorming/SKILL.md +3 -1
  2. package/dist/agents/skills/claude-code/harness-roadmap-pilot/SKILL.md +5 -0
  3. package/dist/agents/skills/claude-code/harness-rollback/SKILL.md +124 -0
  4. package/dist/agents/skills/claude-code/harness-rollback/skill.yaml +52 -0
  5. package/dist/agents/skills/claude-code/product-requirements/SKILL.md +150 -0
  6. package/dist/agents/skills/claude-code/product-requirements/skill.yaml +70 -0
  7. package/dist/agents/skills/codex/harness-brainstorming/SKILL.md +3 -1
  8. package/dist/agents/skills/codex/harness-roadmap-pilot/SKILL.md +5 -0
  9. package/dist/agents/skills/codex/harness-rollback/SKILL.md +124 -0
  10. package/dist/agents/skills/codex/harness-rollback/skill.yaml +52 -0
  11. package/dist/agents/skills/codex/product-requirements/SKILL.md +150 -0
  12. package/dist/agents/skills/codex/product-requirements/skill.yaml +70 -0
  13. package/dist/agents/skills/cursor/harness-brainstorming/SKILL.md +3 -1
  14. package/dist/agents/skills/cursor/harness-roadmap-pilot/SKILL.md +5 -0
  15. package/dist/agents/skills/cursor/harness-rollback/SKILL.md +124 -0
  16. package/dist/agents/skills/cursor/harness-rollback/skill.yaml +52 -0
  17. package/dist/agents/skills/cursor/product-requirements/SKILL.md +150 -0
  18. package/dist/agents/skills/cursor/product-requirements/skill.yaml +70 -0
  19. package/dist/agents/skills/gemini-cli/harness-brainstorming/SKILL.md +3 -1
  20. package/dist/agents/skills/gemini-cli/harness-roadmap-pilot/SKILL.md +5 -0
  21. package/dist/agents/skills/gemini-cli/harness-rollback/SKILL.md +124 -0
  22. package/dist/agents/skills/gemini-cli/harness-rollback/skill.yaml +52 -0
  23. package/dist/agents/skills/gemini-cli/product-requirements/SKILL.md +150 -0
  24. package/dist/agents/skills/gemini-cli/product-requirements/skill.yaml +70 -0
  25. package/dist/{agents-md-N4ULMUAK.js → agents-md-GOFDOUEI.js} +4 -4
  26. package/dist/{analyzer-XRCV63KC-WGRHW2ZM.js → analyzer-XRCV63KC-CUGBENHK.js} +2 -2
  27. package/dist/{architecture-OIMIBDJC.js → architecture-UJZTBKJ2.js} +5 -5
  28. package/dist/{assess-project-ITSB6W4L.js → assess-project-S3UOQUQW.js} +1 -1
  29. package/dist/bin/harness-mcp.js +15 -15
  30. package/dist/bin/harness.js +25 -25
  31. package/dist/{check-phase-gate-GN4X7HT6.js → check-phase-gate-SQ2X2Q7T.js} +5 -5
  32. package/dist/{chunk-F3GNBRGL.js → chunk-4ITYAEOA.js} +85 -85
  33. package/dist/{chunk-H5GN7R43.js → chunk-6RXT67Q4.js} +2 -2
  34. package/dist/{chunk-GTHL3TRZ.js → chunk-7BBQ5C7I.js} +2 -2
  35. package/dist/{chunk-574JCBYH.js → chunk-AIFPI3UZ.js} +2 -2
  36. package/dist/{chunk-CRHQYBDA.js → chunk-CFK4RJFP.js} +89 -4
  37. package/dist/{chunk-TKPAOB2T.js → chunk-DFWM2SNS.js} +2 -2
  38. package/dist/{chunk-LP764MGR.js → chunk-DPG2WNSN.js} +3 -3
  39. package/dist/{chunk-T46G6YNI.js → chunk-DSXUS6KG.js} +3 -3
  40. package/dist/{chunk-CMU4DNLY.js → chunk-DU6AUYTA.js} +1 -1
  41. package/dist/{chunk-MEDRUIRO.js → chunk-FXO3EODY.js} +3 -3
  42. package/dist/{chunk-D7A5JR7M.js → chunk-JGW4CHIJ.js} +2 -2
  43. package/dist/{chunk-JZL2O3RC.js → chunk-KI64IQLS.js} +5 -5
  44. package/dist/{chunk-5BUHPOCP.js → chunk-OIMJWYWF.js} +7 -7
  45. package/dist/{chunk-HJYAXAYQ.js → chunk-OWJTMHVP.js} +2 -2
  46. package/dist/{chunk-YVI7ZV73.js → chunk-PSFJ5YKQ.js} +585 -154
  47. package/dist/{chunk-VJDSB7CI.js → chunk-R5C7ZFON.js} +14 -0
  48. package/dist/{chunk-MIZQY35D.js → chunk-RD75T4XK.js} +2 -2
  49. package/dist/{chunk-7RH2NTLA.js → chunk-RPOBWUKV.js} +1 -1
  50. package/dist/{chunk-U2NOOATF.js → chunk-SQDQMVNE.js} +6 -6
  51. package/dist/{chunk-6NEJPS7W.js → chunk-T2PQWRRK.js} +2 -2
  52. package/dist/{chunk-NEMB36N4.js → chunk-UJW4POA3.js} +2 -2
  53. package/dist/{chunk-LTYVAKWK.js → chunk-V6QYVM6K.js} +20 -2
  54. package/dist/{chunk-PT65VY4S.js → chunk-WHPZG5TX.js} +6 -6
  55. package/dist/{chunk-XKILFNRK.js → chunk-XC7NR63Q.js} +2 -2
  56. package/dist/{chunk-73QZ43DF.js → chunk-YE7NZ44F.js} +2 -2
  57. package/dist/{ci-workflow-PA3WL6WK.js → ci-workflow-5WHUEHOF.js} +4 -4
  58. package/dist/{dist-ISDDHDOR.js → dist-O7MTFDG5.js} +1 -1
  59. package/dist/{dist-BWFFVKEW.js → dist-SOKOW7BC.js} +5 -3
  60. package/dist/{docs-HOTWQJQF.js → docs-AEHPPDKX.js} +5 -5
  61. package/dist/{engine-MVG2SPGD.js → engine-HYM5SLCD.js} +4 -4
  62. package/dist/{entropy-3B4U2BTF.js → entropy-6KH5G3NR.js} +5 -5
  63. package/dist/{feedback-WIWWDVUC.js → feedback-AUP2JK43.js} +1 -1
  64. package/dist/{generate-agent-definitions-KPRHY6X3.js → generate-agent-definitions-OH4RF445.js} +5 -5
  65. package/dist/index.d.ts +66 -0
  66. package/dist/index.js +25 -25
  67. package/dist/{loader-SPJ2ZGYW.js → loader-KWRPA7D5.js} +4 -4
  68. package/dist/{mcp-VSSIWTII.js → mcp-JTPO5RAK.js} +15 -15
  69. package/dist/{performance-JYFS27B3.js → performance-HW53ZIAF.js} +5 -5
  70. package/dist/{review-pipeline-BDT6Y6QV.js → review-pipeline-2R7UBFTG.js} +4 -4
  71. package/dist/{runtime-ZEPHPPQJ.js → runtime-BB35PFZY.js} +4 -4
  72. package/dist/{security-FWSDTTEW.js → security-IDJHGBBH.js} +1 -1
  73. package/dist/{state-events-PBDNQPXT.js → state-events-H3GGBKTB.js} +4 -4
  74. package/dist/{validate-XIMNCIKR.js → validate-6SDGP7AH.js} +5 -5
  75. package/dist/{validate-cross-check-H2OUHTID.js → validate-cross-check-OF3FPM32.js} +4 -4
  76. package/package.json +8 -8
@@ -352,6 +352,12 @@ var init_dist = __esm({
352
352
  "open",
353
353
  "gate-running",
354
354
  "gate-failed",
355
+ // Durable marker that a background `ollama pull` for this approved add/swap is
356
+ // in flight. Set when the pull starts, cleared to `approved` on success or back
357
+ // to `open` on a (retryable) failure. On orchestrator startup, `installing`
358
+ // proposals are re-driven so an install interrupted by a restart resumes rather
359
+ // than being lost (the pull is idempotent — ollama resumes from cached blobs).
360
+ "installing",
355
361
  "approved",
356
362
  "rejected",
357
363
  "failed_target_missing"
@@ -361,6 +367,14 @@ var init_dist = __esm({
361
367
  target: z7.object({ hfRepoId: z7.string().min(1), ollamaName: z7.string().min(1) }),
362
368
  replaces: z7.object({ ollamaName: z7.string().min(1) }).optional(),
363
369
  scoreDelta: z7.number(),
370
+ /**
371
+ * Consumption Phase 2 (T6): the target's *absolute* ranked score (not the
372
+ * delta). Optional + additive so older persisted proposals round-trip. When
373
+ * present, `onApproveModelProposal` seeds the new pool entry's `currentScore`
374
+ * from it so an explicitly-installed model isn't buried at 0 until the next
375
+ * re-rank. Absent → the entry starts at 0 (legacy behavior).
376
+ */
377
+ targetScore: z7.number().optional(),
364
378
  justification: z7.object({
365
379
  summary: z7.string(),
366
380
  benchmarkBasis: z7.array(z7.string()),
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  init_dist
3
- } from "./chunk-CRHQYBDA.js";
3
+ } from "./chunk-CFK4RJFP.js";
4
4
  import {
5
5
  Ok
6
- } from "./chunk-VJDSB7CI.js";
6
+ } from "./chunk-R5C7ZFON.js";
7
7
 
8
8
  // src/commands/validate-cross-check.ts
9
9
  init_dist();
@@ -2,7 +2,7 @@ import {
2
2
  Err,
3
3
  Ok,
4
4
  init_dist
5
- } from "./chunk-VJDSB7CI.js";
5
+ } from "./chunk-R5C7ZFON.js";
6
6
  import {
7
7
  DEFAULT_SKIP_DIRS,
8
8
  init_dist as init_dist2,
@@ -98,7 +98,7 @@ async function handleAssessProject(input) {
98
98
  let validateResult = null;
99
99
  if (checksToRun.has("validate")) {
100
100
  try {
101
- const { handleValidateProject } = await import("./validate-XIMNCIKR.js");
101
+ const { handleValidateProject } = await import("./validate-6SDGP7AH.js");
102
102
  const result = await handleValidateProject({ path: projectPath });
103
103
  const out = parseToolResponse(result, "validate");
104
104
  if ("error" in out) {
@@ -127,7 +127,7 @@ async function handleAssessProject(input) {
127
127
  parallelChecks.push(
128
128
  (async () => {
129
129
  try {
130
- const { handleCheckDependencies } = await import("./architecture-OIMIBDJC.js");
130
+ const { handleCheckDependencies } = await import("./architecture-UJZTBKJ2.js");
131
131
  const result = await handleCheckDependencies({ path: projectPath });
132
132
  const out = parseToolResponse(result, "deps");
133
133
  if ("error" in out) return out.error;
@@ -155,7 +155,7 @@ async function handleAssessProject(input) {
155
155
  parallelChecks.push(
156
156
  (async () => {
157
157
  try {
158
- const { handleCheckDocs } = await import("./docs-HOTWQJQF.js");
158
+ const { handleCheckDocs } = await import("./docs-AEHPPDKX.js");
159
159
  const result = await handleCheckDocs({ path: projectPath, scope: "coverage" });
160
160
  const out = parseToolResponse(result, "docs");
161
161
  if ("error" in out) return out.error;
@@ -183,7 +183,7 @@ async function handleAssessProject(input) {
183
183
  parallelChecks.push(
184
184
  (async () => {
185
185
  try {
186
- const { handleDetectEntropy } = await import("./entropy-3B4U2BTF.js");
186
+ const { handleDetectEntropy } = await import("./entropy-6KH5G3NR.js");
187
187
  const result = await handleDetectEntropy({ path: projectPath, type: "all" });
188
188
  const out = parseToolResponse(result, "entropy");
189
189
  if ("error" in out) return out.error;
@@ -214,7 +214,7 @@ async function handleAssessProject(input) {
214
214
  parallelChecks.push(
215
215
  (async () => {
216
216
  try {
217
- const { handleRunSecurityScan } = await import("./security-FWSDTTEW.js");
217
+ const { handleRunSecurityScan } = await import("./security-IDJHGBBH.js");
218
218
  const result = await handleRunSecurityScan({ path: projectPath });
219
219
  const out = parseToolResponse(result, "security");
220
220
  if ("error" in out) return out.error;
@@ -247,7 +247,7 @@ async function handleAssessProject(input) {
247
247
  parallelChecks.push(
248
248
  (async () => {
249
249
  try {
250
- const { handleCheckPerformance } = await import("./performance-JYFS27B3.js");
250
+ const { handleCheckPerformance } = await import("./performance-HW53ZIAF.js");
251
251
  const result = await handleCheckPerformance({ path: projectPath });
252
252
  if ("isError" in result && result.isError) {
253
253
  const msg = result.content[0]?.text ?? "Performance check failed";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  init_dist
3
- } from "./chunk-CRHQYBDA.js";
3
+ } from "./chunk-CFK4RJFP.js";
4
4
  import {
5
5
  Err,
6
6
  Ok
7
- } from "./chunk-VJDSB7CI.js";
7
+ } from "./chunk-R5C7ZFON.js";
8
8
 
9
9
  // src/templates/engine.ts
10
10
  init_dist();
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  event_sourcing_exports,
3
3
  init_dist
4
- } from "./chunk-CRHQYBDA.js";
4
+ } from "./chunk-CFK4RJFP.js";
5
5
  import {
6
6
  Ok
7
- } from "./chunk-VJDSB7CI.js";
7
+ } from "./chunk-R5C7ZFON.js";
8
8
 
9
9
  // src/shared/state-events.ts
10
10
  init_dist();
@@ -7,11 +7,11 @@ import {
7
7
  } from "./chunk-3WGJMBKH.js";
8
8
  import {
9
9
  init_dist as init_dist2
10
- } from "./chunk-CRHQYBDA.js";
10
+ } from "./chunk-CFK4RJFP.js";
11
11
  import {
12
12
  Err,
13
13
  Ok
14
- } from "./chunk-VJDSB7CI.js";
14
+ } from "./chunk-R5C7ZFON.js";
15
15
  import {
16
16
  init_dist,
17
17
  skipDirGlobs
@@ -336,6 +336,22 @@ var RoadmapConfigSchema = z.object({
336
336
  /** External tracker sync settings */
337
337
  tracker: TrackerConfigSchema.optional()
338
338
  });
339
+ var RollbackSignalRuleSchema = z.object({
340
+ /** Threshold value the signal must cross to fire. */
341
+ threshold: z.number(),
342
+ /** Which crossing direction fires: value going above or below the threshold. */
343
+ direction: z.enum(["above", "below"]),
344
+ /** Lookback window (e.g. "24h", "7d") mapping the crossing to merged PRs. */
345
+ window: z.string().regex(/^\d+[hdw]$/, 'window must be <number><h|d|w>, e.g. "24h", "7d", "2w"')
346
+ });
347
+ var RollbackConfigSchema = z.object({
348
+ /** Signal-name -> crossing rule. A crossing calls `evaluate --trigger signal`. */
349
+ signals: z.record(z.string(), RollbackSignalRuleSchema).default({}),
350
+ /** Eval-triggered arm. Dark in v1; default disabled until #31 lands. */
351
+ evalTrigger: z.object({
352
+ enabled: z.boolean().default(false)
353
+ }).default({})
354
+ });
339
355
  var KnowledgeConfigSchema = z.object({
340
356
  /** Caller-supplied domain patterns (e.g. `["agents/<dir>"]`). Extends defaults. */
341
357
  domainPatterns: z.array(z.string().regex(/^[\w.-]+\/<dir>$/)).optional().default([]),
@@ -526,6 +542,8 @@ var HarnessConfigSchema = z.object({
526
542
  }).optional(),
527
543
  /** Roadmap sync and tracker integration settings */
528
544
  roadmap: RoadmapConfigSchema.optional(),
545
+ /** Post-ship rollback circuit-breaker settings (signal arm live, eval arm dark). */
546
+ rollback: RollbackConfigSchema.optional(),
529
547
  /** Knowledge-pipeline domain-inference settings */
530
548
  knowledge: KnowledgeConfigSchema.optional(),
531
549
  /** Adoption telemetry settings */
@@ -7,13 +7,13 @@ import {
7
7
  import {
8
8
  findConfigFile,
9
9
  loadConfig
10
- } from "./chunk-LTYVAKWK.js";
10
+ } from "./chunk-V6QYVM6K.js";
11
11
  import {
12
12
  init_dist
13
- } from "./chunk-CRHQYBDA.js";
13
+ } from "./chunk-CFK4RJFP.js";
14
14
  import {
15
15
  Ok
16
- } from "./chunk-VJDSB7CI.js";
16
+ } from "./chunk-R5C7ZFON.js";
17
17
 
18
18
  // src/mcp/tools/docs.ts
19
19
  init_dist();
@@ -50,12 +50,12 @@ async function handleCheckDocs(input) {
50
50
  const projectPath = sanitizePath(input.path);
51
51
  const scope = input.scope ?? "coverage";
52
52
  if (scope === "integrity") {
53
- const { validateKnowledgeMap } = await import("./dist-BWFFVKEW.js");
53
+ const { validateKnowledgeMap } = await import("./dist-SOKOW7BC.js");
54
54
  const result2 = await validateKnowledgeMap(projectPath);
55
55
  return resultToMcpResponse(result2);
56
56
  }
57
57
  if (scope === "all") {
58
- const { checkDocCoverage: checkDocCoverage2, validateKnowledgeMap } = await import("./dist-BWFFVKEW.js");
58
+ const { checkDocCoverage: checkDocCoverage2, validateKnowledgeMap } = await import("./dist-SOKOW7BC.js");
59
59
  const domain2 = input.domain ?? "src";
60
60
  const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-STFGYKZH.js");
61
61
  const store2 = await loadGraphStore2(projectPath);
@@ -94,7 +94,7 @@ async function handleCheckDocs(input) {
94
94
  }
95
95
  return resultToMcpResponse(Ok({ coverage, integrity }));
96
96
  }
97
- const { checkDocCoverage } = await import("./dist-BWFFVKEW.js");
97
+ const { checkDocCoverage } = await import("./dist-SOKOW7BC.js");
98
98
  const domain = input.domain ?? "src";
99
99
  const { loadGraphStore } = await import("./graph-loader-STFGYKZH.js");
100
100
  const store = await loadGraphStore(projectPath);
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  init_dist
3
- } from "./chunk-CRHQYBDA.js";
3
+ } from "./chunk-CFK4RJFP.js";
4
4
  import {
5
5
  Err,
6
6
  Ok
7
- } from "./chunk-VJDSB7CI.js";
7
+ } from "./chunk-R5C7ZFON.js";
8
8
 
9
9
  // src/mcp/utils/config-resolver.ts
10
10
  init_dist();
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  init_dist
3
- } from "./chunk-CRHQYBDA.js";
3
+ } from "./chunk-CFK4RJFP.js";
4
4
  import {
5
5
  Err,
6
6
  Ok
7
- } from "./chunk-VJDSB7CI.js";
7
+ } from "./chunk-R5C7ZFON.js";
8
8
 
9
9
  // src/persona/loader.ts
10
10
  init_dist();
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  generateCIWorkflow
3
- } from "./chunk-GTHL3TRZ.js";
4
- import "./chunk-CRHQYBDA.js";
5
- import "./chunk-7RH2NTLA.js";
6
- import "./chunk-VJDSB7CI.js";
3
+ } from "./chunk-7BBQ5C7I.js";
4
+ import "./chunk-CFK4RJFP.js";
5
+ import "./chunk-RPOBWUKV.js";
6
+ import "./chunk-R5C7ZFON.js";
7
7
  import "./chunk-WZJR6SOI.js";
8
8
  import "./chunk-QCLOIUMX.js";
9
9
  import "./chunk-XARGEOJV.js";
@@ -53,7 +53,7 @@ import {
53
53
  isErr,
54
54
  isOk,
55
55
  migrateProposalRecord
56
- } from "./chunk-VJDSB7CI.js";
56
+ } from "./chunk-R5C7ZFON.js";
57
57
  import "./chunk-KFQGP6VL.js";
58
58
  init_dist();
59
59
  export {
@@ -219,6 +219,7 @@ import {
219
219
  claim,
220
220
  classifyConfidence,
221
221
  classifyFinding,
222
+ classifyRevert,
222
223
  clearFailuresCache,
223
224
  clearLearningsCache,
224
225
  clearPulseAdapters,
@@ -524,7 +525,7 @@ import {
524
525
  writeStrategyDoc,
525
526
  writeTaint,
526
527
  xssRules
527
- } from "./chunk-CRHQYBDA.js";
528
+ } from "./chunk-CFK4RJFP.js";
528
529
  import {
529
530
  EXTENSION_MAP,
530
531
  EntropyAnalyzer,
@@ -550,7 +551,7 @@ import {
550
551
  resetParserCache,
551
552
  resolveFileToLayer,
552
553
  validateDependencies
553
- } from "./chunk-7RH2NTLA.js";
554
+ } from "./chunk-RPOBWUKV.js";
554
555
  import {
555
556
  AuthAuditEntrySchema,
556
557
  AuthTokenPublicSchema,
@@ -605,7 +606,7 @@ import {
605
606
  isErr,
606
607
  isOk,
607
608
  migrateProposalRecord
608
- } from "./chunk-VJDSB7CI.js";
609
+ } from "./chunk-R5C7ZFON.js";
609
610
  import "./chunk-WZJR6SOI.js";
610
611
  import {
611
612
  ArchBaselineSchema,
@@ -932,6 +933,7 @@ export {
932
933
  claim,
933
934
  classifyConfidence,
934
935
  classifyFinding,
936
+ classifyRevert,
935
937
  clearFailuresCache,
936
938
  clearLearningsCache,
937
939
  clearPulseAdapters,
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  checkDocsDefinition,
3
3
  handleCheckDocs
4
- } from "./chunk-PT65VY4S.js";
4
+ } from "./chunk-WHPZG5TX.js";
5
5
  import "./chunk-RC3OI5NK.js";
6
6
  import "./chunk-W6Y7ZW3Y.js";
7
- import "./chunk-LTYVAKWK.js";
7
+ import "./chunk-V6QYVM6K.js";
8
8
  import "./chunk-ZCZD7FHU.js";
9
9
  import "./chunk-3WGJMBKH.js";
10
- import "./chunk-CRHQYBDA.js";
11
- import "./chunk-7RH2NTLA.js";
12
- import "./chunk-VJDSB7CI.js";
10
+ import "./chunk-CFK4RJFP.js";
11
+ import "./chunk-RPOBWUKV.js";
12
+ import "./chunk-R5C7ZFON.js";
13
13
  import "./chunk-WZJR6SOI.js";
14
14
  import "./chunk-QCLOIUMX.js";
15
15
  import "./chunk-XARGEOJV.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  TemplateEngine
3
- } from "./chunk-6NEJPS7W.js";
4
- import "./chunk-CRHQYBDA.js";
5
- import "./chunk-7RH2NTLA.js";
6
- import "./chunk-VJDSB7CI.js";
3
+ } from "./chunk-T2PQWRRK.js";
4
+ import "./chunk-CFK4RJFP.js";
5
+ import "./chunk-RPOBWUKV.js";
6
+ import "./chunk-R5C7ZFON.js";
7
7
  import "./chunk-WZJR6SOI.js";
8
8
  import "./chunk-QCLOIUMX.js";
9
9
  import "./chunk-XARGEOJV.js";
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  detectEntropyDefinition,
3
3
  handleDetectEntropy
4
- } from "./chunk-JZL2O3RC.js";
4
+ } from "./chunk-KI64IQLS.js";
5
5
  import "./chunk-RC3OI5NK.js";
6
6
  import "./chunk-W6Y7ZW3Y.js";
7
- import "./chunk-LTYVAKWK.js";
7
+ import "./chunk-V6QYVM6K.js";
8
8
  import "./chunk-ZCZD7FHU.js";
9
9
  import "./chunk-3WGJMBKH.js";
10
- import "./chunk-CRHQYBDA.js";
11
- import "./chunk-7RH2NTLA.js";
12
- import "./chunk-VJDSB7CI.js";
10
+ import "./chunk-CFK4RJFP.js";
11
+ import "./chunk-RPOBWUKV.js";
12
+ import "./chunk-R5C7ZFON.js";
13
13
  import "./chunk-WZJR6SOI.js";
14
14
  import "./chunk-QCLOIUMX.js";
15
15
  import "./chunk-XARGEOJV.js";
@@ -5,7 +5,7 @@ import {
5
5
  handleCreateSelfReview,
6
6
  handleRequestPeerReview,
7
7
  requestPeerReviewDefinition
8
- } from "./chunk-MEDRUIRO.js";
8
+ } from "./chunk-FXO3EODY.js";
9
9
  import "./chunk-RC3OI5NK.js";
10
10
  import "./chunk-W6Y7ZW3Y.js";
11
11
  import "./chunk-KFQGP6VL.js";
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  createGenerateAgentDefinitionsCommand,
3
3
  generateAgentDefinitions
4
- } from "./chunk-CMU4DNLY.js";
4
+ } from "./chunk-DU6AUYTA.js";
5
5
  import "./chunk-KET4QQZB.js";
6
- import "./chunk-73QZ43DF.js";
6
+ import "./chunk-YE7NZ44F.js";
7
7
  import "./chunk-3ISINLYT.js";
8
8
  import "./chunk-UTJJJDNN.js";
9
9
  import "./chunk-3WGJMBKH.js";
10
- import "./chunk-CRHQYBDA.js";
11
- import "./chunk-7RH2NTLA.js";
12
- import "./chunk-VJDSB7CI.js";
10
+ import "./chunk-CFK4RJFP.js";
11
+ import "./chunk-RPOBWUKV.js";
12
+ import "./chunk-R5C7ZFON.js";
13
13
  import "./chunk-WZJR6SOI.js";
14
14
  import "./chunk-QCLOIUMX.js";
15
15
  import "./chunk-XARGEOJV.js";
package/dist/index.d.ts CHANGED
@@ -1720,6 +1720,52 @@ declare const HarnessConfigSchema: z.ZodObject<{
1720
1720
  reverseStatusMap?: Record<string, string> | undefined;
1721
1721
  } | undefined;
1722
1722
  }>>;
1723
+ /** Post-ship rollback circuit-breaker settings (signal arm live, eval arm dark). */
1724
+ rollback: z.ZodOptional<z.ZodObject<{
1725
+ /** Signal-name -> crossing rule. A crossing calls `evaluate --trigger signal`. */
1726
+ signals: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
1727
+ /** Threshold value the signal must cross to fire. */
1728
+ threshold: z.ZodNumber;
1729
+ /** Which crossing direction fires: value going above or below the threshold. */
1730
+ direction: z.ZodEnum<["above", "below"]>;
1731
+ /** Lookback window (e.g. "24h", "7d") mapping the crossing to merged PRs. */
1732
+ window: z.ZodString;
1733
+ }, "strip", z.ZodTypeAny, {
1734
+ threshold: number;
1735
+ direction: "above" | "below";
1736
+ window: string;
1737
+ }, {
1738
+ threshold: number;
1739
+ direction: "above" | "below";
1740
+ window: string;
1741
+ }>>>;
1742
+ /** Eval-triggered arm. Dark in v1; default disabled until #31 lands. */
1743
+ evalTrigger: z.ZodDefault<z.ZodObject<{
1744
+ enabled: z.ZodDefault<z.ZodBoolean>;
1745
+ }, "strip", z.ZodTypeAny, {
1746
+ enabled: boolean;
1747
+ }, {
1748
+ enabled?: boolean | undefined;
1749
+ }>>;
1750
+ }, "strip", z.ZodTypeAny, {
1751
+ signals: Record<string, {
1752
+ threshold: number;
1753
+ direction: "above" | "below";
1754
+ window: string;
1755
+ }>;
1756
+ evalTrigger: {
1757
+ enabled: boolean;
1758
+ };
1759
+ }, {
1760
+ signals?: Record<string, {
1761
+ threshold: number;
1762
+ direction: "above" | "below";
1763
+ window: string;
1764
+ }> | undefined;
1765
+ evalTrigger?: {
1766
+ enabled?: boolean | undefined;
1767
+ } | undefined;
1768
+ }>>;
1723
1769
  /** Knowledge-pipeline domain-inference settings */
1724
1770
  knowledge: z.ZodOptional<z.ZodObject<{
1725
1771
  /** Caller-supplied domain patterns (e.g. `["agents/<dir>"]`). Extends defaults. */
@@ -2309,6 +2355,16 @@ declare const HarnessConfigSchema: z.ZodObject<{
2309
2355
  reverseStatusMap?: Record<string, string> | undefined;
2310
2356
  } | undefined;
2311
2357
  } | undefined;
2358
+ rollback?: {
2359
+ signals: Record<string, {
2360
+ threshold: number;
2361
+ direction: "above" | "below";
2362
+ window: string;
2363
+ }>;
2364
+ evalTrigger: {
2365
+ enabled: boolean;
2366
+ };
2367
+ } | undefined;
2312
2368
  knowledge?: {
2313
2369
  domainPatterns: string[];
2314
2370
  domainBlocklist: string[];
@@ -2635,6 +2691,16 @@ declare const HarnessConfigSchema: z.ZodObject<{
2635
2691
  reverseStatusMap?: Record<string, string> | undefined;
2636
2692
  } | undefined;
2637
2693
  } | undefined;
2694
+ rollback?: {
2695
+ signals?: Record<string, {
2696
+ threshold: number;
2697
+ direction: "above" | "below";
2698
+ window: string;
2699
+ }> | undefined;
2700
+ evalTrigger?: {
2701
+ enabled?: boolean | undefined;
2702
+ } | undefined;
2703
+ } | undefined;
2638
2704
  knowledge?: {
2639
2705
  domainPatterns?: string[] | undefined;
2640
2706
  domainBlocklist?: string[] | undefined;
package/dist/index.js CHANGED
@@ -12,20 +12,20 @@ import {
12
12
  runSnapshotCapture,
13
13
  runUninstall,
14
14
  runUninstallConstraints
15
- } from "./chunk-YVI7ZV73.js";
15
+ } from "./chunk-PSFJ5YKQ.js";
16
16
  import {
17
17
  generateRuntime
18
- } from "./chunk-574JCBYH.js";
18
+ } from "./chunk-AIFPI3UZ.js";
19
19
  import {
20
20
  generateAgentsMd
21
- } from "./chunk-TKPAOB2T.js";
21
+ } from "./chunk-DFWM2SNS.js";
22
22
  import {
23
23
  generateCIWorkflow
24
- } from "./chunk-GTHL3TRZ.js";
25
- import "./chunk-NEMB36N4.js";
24
+ } from "./chunk-7BBQ5C7I.js";
25
+ import "./chunk-UJW4POA3.js";
26
26
  import {
27
27
  runCrossCheck
28
- } from "./chunk-MIZQY35D.js";
28
+ } from "./chunk-RD75T4XK.js";
29
29
  import {
30
30
  AGENT_DESCRIPTIONS,
31
31
  DEFAULT_TOOLS,
@@ -34,14 +34,14 @@ import {
34
34
  generateAgentDefinitions,
35
35
  renderClaudeCodeAgent,
36
36
  renderGeminiAgent
37
- } from "./chunk-CMU4DNLY.js";
37
+ } from "./chunk-DU6AUYTA.js";
38
38
  import "./chunk-KET4QQZB.js";
39
39
  import {
40
40
  runScan
41
41
  } from "./chunk-YYFSFSB3.js";
42
42
  import {
43
43
  TemplateEngine
44
- } from "./chunk-6NEJPS7W.js";
44
+ } from "./chunk-T2PQWRRK.js";
45
45
  import "./chunk-CQ553GZO.js";
46
46
  import {
47
47
  generateSkillFiles
@@ -49,7 +49,7 @@ import {
49
49
  import {
50
50
  listPersonas,
51
51
  loadPersona
52
- } from "./chunk-73QZ43DF.js";
52
+ } from "./chunk-YE7NZ44F.js";
53
53
  import {
54
54
  detectTrigger,
55
55
  runPersona
@@ -64,27 +64,27 @@ import {
64
64
  OutputFormatter,
65
65
  OutputMode,
66
66
  runCheckPhaseGate
67
- } from "./chunk-LP764MGR.js";
67
+ } from "./chunk-DPG2WNSN.js";
68
68
  import {
69
69
  createHarnessServer,
70
70
  generateSlashCommands,
71
71
  getToolDefinitions,
72
72
  startServer
73
- } from "./chunk-F3GNBRGL.js";
74
- import "./chunk-MEDRUIRO.js";
75
- import "./chunk-HJYAXAYQ.js";
76
- import "./chunk-H5GN7R43.js";
77
- import "./chunk-U2NOOATF.js";
78
- import "./chunk-PT65VY4S.js";
79
- import "./chunk-JZL2O3RC.js";
80
- import "./chunk-5BUHPOCP.js";
73
+ } from "./chunk-4ITYAEOA.js";
74
+ import "./chunk-FXO3EODY.js";
75
+ import "./chunk-OWJTMHVP.js";
76
+ import "./chunk-6RXT67Q4.js";
77
+ import "./chunk-SQDQMVNE.js";
78
+ import "./chunk-WHPZG5TX.js";
79
+ import "./chunk-KI64IQLS.js";
80
+ import "./chunk-OIMJWYWF.js";
81
81
  import "./chunk-IOW3MW2K.js";
82
82
  import "./chunk-3ISINLYT.js";
83
83
  import "./chunk-4U5LDFCY.js";
84
- import "./chunk-T46G6YNI.js";
85
- import "./chunk-D7A5JR7M.js";
84
+ import "./chunk-DSXUS6KG.js";
85
+ import "./chunk-JGW4CHIJ.js";
86
86
  import "./chunk-RC3OI5NK.js";
87
- import "./chunk-XKILFNRK.js";
87
+ import "./chunk-XC7NR63Q.js";
88
88
  import "./chunk-W6Y7ZW3Y.js";
89
89
  import "./chunk-WBVCN35T.js";
90
90
  import "./chunk-UTJJJDNN.js";
@@ -94,7 +94,7 @@ import {
94
94
  findConfigFile,
95
95
  loadConfig,
96
96
  resolveConfig
97
- } from "./chunk-LTYVAKWK.js";
97
+ } from "./chunk-V6QYVM6K.js";
98
98
  import "./chunk-ZCZD7FHU.js";
99
99
  import {
100
100
  logger
@@ -104,10 +104,10 @@ import {
104
104
  ExitCode,
105
105
  handleError
106
106
  } from "./chunk-3WGJMBKH.js";
107
- import "./chunk-CRHQYBDA.js";
107
+ import "./chunk-CFK4RJFP.js";
108
108
  import "./chunk-BM3PWGXQ.js";
109
- import "./chunk-7RH2NTLA.js";
110
- import "./chunk-VJDSB7CI.js";
109
+ import "./chunk-RPOBWUKV.js";
110
+ import "./chunk-R5C7ZFON.js";
111
111
  import "./chunk-WZJR6SOI.js";
112
112
  import "./chunk-QCLOIUMX.js";
113
113
  import "./chunk-XARGEOJV.js";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  listPersonas,
3
3
  loadPersona
4
- } from "./chunk-73QZ43DF.js";
5
- import "./chunk-CRHQYBDA.js";
6
- import "./chunk-7RH2NTLA.js";
7
- import "./chunk-VJDSB7CI.js";
4
+ } from "./chunk-YE7NZ44F.js";
5
+ import "./chunk-CFK4RJFP.js";
6
+ import "./chunk-RPOBWUKV.js";
7
+ import "./chunk-R5C7ZFON.js";
8
8
  import "./chunk-WZJR6SOI.js";
9
9
  import "./chunk-QCLOIUMX.js";
10
10
  import "./chunk-XARGEOJV.js";