@harness-engineering/cli 2.7.1 → 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 (139) 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/codex/align-design-system/SKILL.md +18 -0
  24. package/dist/agents/skills/codex/align-design-system/skill.yaml +3 -0
  25. package/dist/agents/skills/codex/harness-brainstorming/SKILL.md +37 -5
  26. package/dist/agents/skills/codex/harness-code-review/SKILL.md +107 -22
  27. package/dist/agents/skills/codex/harness-code-review/references/confidence-rubric.md +45 -0
  28. package/dist/agents/skills/codex/harness-code-review/references/risk-keywords.md +40 -0
  29. package/dist/agents/skills/codex/harness-code-review/skill.yaml +3 -0
  30. package/dist/agents/skills/codex/harness-compound/SKILL.md +7 -4
  31. package/dist/agents/skills/codex/harness-ideate/SKILL.md +277 -0
  32. package/dist/agents/skills/codex/harness-ideate/references/scoring.md +88 -0
  33. package/dist/agents/skills/codex/harness-ideate/skill.yaml +66 -0
  34. package/dist/agents/skills/codex/harness-planning/SKILL.md +14 -4
  35. package/dist/agents/skills/codex/harness-pulse/SKILL.md +12 -16
  36. package/dist/agents/skills/codex/harness-roadmap-pilot/SKILL.md +34 -6
  37. package/dist/agents/skills/codex/harness-strategy/SKILL.md +152 -0
  38. package/dist/agents/skills/codex/harness-strategy/references/interview.md +122 -0
  39. package/dist/agents/skills/codex/harness-strategy/skill.yaml +54 -0
  40. package/dist/agents/skills/codex/initialize-harness-project/SKILL.md +76 -10
  41. package/dist/agents/skills/cursor/align-design-system/SKILL.md +18 -0
  42. package/dist/agents/skills/cursor/align-design-system/skill.yaml +3 -0
  43. package/dist/agents/skills/cursor/harness-brainstorming/SKILL.md +37 -5
  44. package/dist/agents/skills/cursor/harness-code-review/SKILL.md +107 -22
  45. package/dist/agents/skills/cursor/harness-code-review/references/confidence-rubric.md +45 -0
  46. package/dist/agents/skills/cursor/harness-code-review/references/risk-keywords.md +40 -0
  47. package/dist/agents/skills/cursor/harness-code-review/skill.yaml +3 -0
  48. package/dist/agents/skills/cursor/harness-compound/SKILL.md +7 -4
  49. package/dist/agents/skills/cursor/harness-ideate/SKILL.md +277 -0
  50. package/dist/agents/skills/cursor/harness-ideate/references/scoring.md +88 -0
  51. package/dist/agents/skills/cursor/harness-ideate/skill.yaml +66 -0
  52. package/dist/agents/skills/cursor/harness-planning/SKILL.md +14 -4
  53. package/dist/agents/skills/cursor/harness-pulse/SKILL.md +12 -16
  54. package/dist/agents/skills/cursor/harness-roadmap-pilot/SKILL.md +34 -6
  55. package/dist/agents/skills/cursor/harness-strategy/SKILL.md +152 -0
  56. package/dist/agents/skills/cursor/harness-strategy/references/interview.md +122 -0
  57. package/dist/agents/skills/cursor/harness-strategy/skill.yaml +54 -0
  58. package/dist/agents/skills/cursor/initialize-harness-project/SKILL.md +76 -10
  59. package/dist/agents/skills/gemini-cli/align-design-system/SKILL.md +18 -0
  60. package/dist/agents/skills/gemini-cli/align-design-system/skill.yaml +3 -0
  61. package/dist/agents/skills/gemini-cli/harness-brainstorming/SKILL.md +37 -5
  62. package/dist/agents/skills/gemini-cli/harness-code-review/SKILL.md +107 -22
  63. package/dist/agents/skills/gemini-cli/harness-code-review/references/confidence-rubric.md +45 -0
  64. package/dist/agents/skills/gemini-cli/harness-code-review/references/risk-keywords.md +40 -0
  65. package/dist/agents/skills/gemini-cli/harness-code-review/skill.yaml +3 -0
  66. package/dist/agents/skills/gemini-cli/harness-compound/SKILL.md +7 -4
  67. package/dist/agents/skills/gemini-cli/harness-ideate/SKILL.md +277 -0
  68. package/dist/agents/skills/gemini-cli/harness-ideate/references/scoring.md +88 -0
  69. package/dist/agents/skills/gemini-cli/harness-ideate/skill.yaml +66 -0
  70. package/dist/agents/skills/gemini-cli/harness-planning/SKILL.md +14 -4
  71. package/dist/agents/skills/gemini-cli/harness-pulse/SKILL.md +12 -16
  72. package/dist/agents/skills/gemini-cli/harness-roadmap-pilot/SKILL.md +34 -6
  73. package/dist/agents/skills/gemini-cli/harness-strategy/SKILL.md +152 -0
  74. package/dist/agents/skills/gemini-cli/harness-strategy/references/interview.md +122 -0
  75. package/dist/agents/skills/gemini-cli/harness-strategy/skill.yaml +54 -0
  76. package/dist/agents/skills/gemini-cli/initialize-harness-project/SKILL.md +76 -10
  77. package/dist/agents/skills/package.json +1 -1
  78. package/dist/agents/skills/tests/harness-strategy.test.ts +145 -0
  79. package/dist/agents-md-WMJO5HSM.js +13 -0
  80. package/dist/analyzer-V633GUHY-MBCQWKDU.js +26 -0
  81. package/dist/{architecture-LUR2I67H.js → architecture-EVYVGPRZ.js} +6 -6
  82. package/dist/{assess-project-OJWECOP2.js → assess-project-KZG563SO.js} +1 -1
  83. package/dist/bin/harness-mcp.js +17 -17
  84. package/dist/bin/harness.js +27 -27
  85. package/dist/{check-phase-gate-HS5KYLRO.js → check-phase-gate-MK364VXS.js} +6 -6
  86. package/dist/{chunk-6UHDQP2N.js → chunk-2N4OENGE.js} +1 -1
  87. package/dist/{chunk-FC4JPM6W.js → chunk-2SNRCAC3.js} +3 -3
  88. package/dist/{chunk-LGYXR2KZ.js → chunk-4BDOSCNY.js} +137 -71
  89. package/dist/{chunk-N5NSSLMU.js → chunk-5XL5QJ5B.js} +2 -2
  90. package/dist/{chunk-LECXPXS3.js → chunk-7EQAZKJ5.js} +2 -2
  91. package/dist/{chunk-LYIPI2SJ.js → chunk-ACOOG3UW.js} +6 -6
  92. package/dist/{chunk-FXZI6NJ2.js → chunk-B7KMTHN3.js} +51 -4
  93. package/dist/{chunk-OH3NXXUY.js → chunk-BDGTZRZ6.js} +11 -1
  94. package/dist/{chunk-NIVWM7OW.js → chunk-C7J55C6E.js} +10 -10
  95. package/dist/{chunk-7PLIWP7U.js → chunk-CAQPSFPT.js} +4042 -738
  96. package/dist/{chunk-TIH53QXY.js → chunk-CLI4K2CH.js} +1 -1
  97. package/dist/{chunk-INBTDBV2.js → chunk-EEFRPEWT.js} +1 -1
  98. package/dist/{chunk-VI4IS55S.js → chunk-FZ5MBXEG.js} +6 -6
  99. package/dist/{chunk-WZY5U6NS.js → chunk-GOHWCHCS.js} +1809 -812
  100. package/dist/{chunk-VSIRUZQP.js → chunk-HRSE6IQD.js} +2 -2
  101. package/dist/{chunk-CZPOPMMI.js → chunk-KBCPELBC.js} +3 -3
  102. package/dist/{chunk-7AF6C5GE.js → chunk-KI6PHH6Q.js} +3 -3
  103. package/dist/{chunk-KN3EMDZ5.js → chunk-LADPYELQ.js} +23 -3
  104. package/dist/{chunk-Y4T6ENKQ.js → chunk-N55WOGN3.js} +86 -17
  105. package/dist/{chunk-H2ZJOJ7A.js → chunk-PP6ZRL5T.js} +316 -42
  106. package/dist/{chunk-RJ2WEES5.js → chunk-STESM73J.js} +2 -2
  107. package/dist/{chunk-B2VAYLYI.js → chunk-UBZQE3JN.js} +2 -2
  108. package/dist/{chunk-GGSNWH7P.js → chunk-UJFNIWC7.js} +5 -5
  109. package/dist/{chunk-FEKBXX2J.js → chunk-UUO4K7NX.js} +9 -9
  110. package/dist/{chunk-Z3TMCCZB.js → chunk-UXPWSV3B.js} +9 -9
  111. package/dist/{chunk-O2ASYKA6.js → chunk-VBNJAKUH.js} +2 -2
  112. package/dist/{chunk-PTHX545Q.js → chunk-X4EFYVCZ.js} +2 -2
  113. package/dist/{ci-workflow-MDSTHJOY.js → ci-workflow-IW2H5DC4.js} +5 -5
  114. package/dist/{dist-E3SAAHCM.js → dist-ICW4QUEW.js} +5 -1
  115. package/dist/{dist-72ID44UE.js → dist-JCFK263L.js} +52 -4
  116. package/dist/{dist-R3TOOPJ7.js → dist-OWHMNL4W.js} +1 -1
  117. package/dist/{docs-2RFOJ6XY.js → docs-7CP6VV42.js} +6 -6
  118. package/dist/engine-MKJEBWU7.js +13 -0
  119. package/dist/{entropy-3UX6644G.js → entropy-6JOZJYG7.js} +5 -5
  120. package/dist/{feedback-CVCFYND4.js → feedback-T65AEJEG.js} +1 -1
  121. package/dist/{generate-agent-definitions-HZ3XENWO.js → generate-agent-definitions-4VI4YTO2.js} +6 -6
  122. package/dist/{glob-helper-EX4YZKZO.js → glob-helper-GLZAURJC.js} +1 -1
  123. package/dist/{graph-loader-EIFEOUVI.js → graph-loader-HHXN5FLP.js} +1 -1
  124. package/dist/index.d.ts +202 -0
  125. package/dist/index.js +27 -27
  126. package/dist/{loader-6RHWU5FH.js → loader-AWTHHE3A.js} +5 -5
  127. package/dist/{mcp-OYR26JDI.js → mcp-JBIBINO2.js} +17 -17
  128. package/dist/{performance-JJMIRXCH.js → performance-NCOUDOMW.js} +6 -6
  129. package/dist/{review-pipeline-BHQZIXWZ.js → review-pipeline-YIC6JPMY.js} +5 -5
  130. package/dist/{runtime-DALTAVTN.js → runtime-5MHV4UEE.js} +5 -5
  131. package/dist/{scan-LYKLM4EQ.js → scan-P7YFKB77.js} +1 -1
  132. package/dist/{security-RMLMYFPB.js → security-VZPJNIDP.js} +1 -1
  133. package/dist/{validate-R7DZRDFK.js → validate-7BE4VTFI.js} +6 -6
  134. package/dist/validate-cross-check-F7GEBRDH.js +13 -0
  135. package/package.json +7 -7
  136. package/dist/agents-md-FKMKH6ZF.js +0 -13
  137. package/dist/analyzer-H3AHBFSL-KPOPJYRB.js +0 -26
  138. package/dist/engine-BSFKOGPN.js +0 -13
  139. package/dist/validate-cross-check-AUUZFNVL.js +0 -13
@@ -7,15 +7,15 @@ import {
7
7
  } from "./chunk-3WGJMBKH.js";
8
8
  import {
9
9
  init_dist as init_dist2
10
- } from "./chunk-WZY5U6NS.js";
10
+ } from "./chunk-GOHWCHCS.js";
11
11
  import {
12
12
  Err,
13
13
  Ok
14
- } from "./chunk-OH3NXXUY.js";
14
+ } from "./chunk-BDGTZRZ6.js";
15
15
  import {
16
16
  init_dist,
17
17
  skipDirGlobs
18
- } from "./chunk-H2ZJOJ7A.js";
18
+ } from "./chunk-PP6ZRL5T.js";
19
19
  import {
20
20
  ArchConfigSchema
21
21
  } from "./chunk-QCLOIUMX.js";
@@ -384,6 +384,47 @@ var CraftConfigSchema = z.object({
384
384
  mode: z.enum(["in-session", "mock"]).optional()
385
385
  }).optional()
386
386
  });
387
+ var LocalModelsHardwareOverrideSchema = z.object({
388
+ platform: z.enum(["macos", "nvidia", "cpu"]),
389
+ vramGb: z.number().positive(),
390
+ bandwidthGbps: z.number().positive(),
391
+ ramGb: z.number().positive().optional(),
392
+ gpuName: z.string().optional(),
393
+ cpuName: z.string().optional()
394
+ });
395
+ var LocalModelsPoolConfigSchema = z.object({
396
+ /** Hard ceiling on total on-disk size of installed pool members. */
397
+ diskBudgetGb: z.number().positive().default(100),
398
+ /** Hugging Face org allowlist. Models outside these orgs cannot be installed (D1). */
399
+ allowedOrgs: z.array(z.string()).default([]),
400
+ /** Optional family allowlist; empty means "all families under the allowed orgs". */
401
+ allowedFamilies: z.array(z.string()).default([])
402
+ });
403
+ var LocalModelsRefreshConfigSchema = z.object({
404
+ /** Re-rank cadence in ms. Floor 1h to keep HF API usage civil (D9). */
405
+ intervalMs: z.number().int().min(36e5, "minimum 1h").default(864e5),
406
+ /** Minimum score delta to emit a swap proposal (D2). */
407
+ proposalThreshold: z.number().nonnegative().default(5),
408
+ /** Random jitter added to the interval to avoid thundering herd (D9). */
409
+ jitterMs: z.number().int().nonnegative().default(6e5)
410
+ });
411
+ var LocalModelsInstallerConfigSchema = z.object({
412
+ /** `'ollama'` performs auto-install via REST; `'advisory'` emits copy-paste only (D4). */
413
+ backend: z.enum(["ollama", "advisory"]).default("ollama"),
414
+ /** Ollama REST endpoint. Only consulted when `backend === 'ollama'`. */
415
+ ollamaEndpoint: z.string().url().default("http://localhost:11434")
416
+ });
417
+ var LocalModelsConfigSchema = z.object({
418
+ /** Opt-in switch. Default false preserves today's behavior. */
419
+ enabled: z.boolean().default(false),
420
+ pool: LocalModelsPoolConfigSchema.default({}),
421
+ refresh: LocalModelsRefreshConfigSchema.default({}),
422
+ installer: LocalModelsInstallerConfigSchema.default({}),
423
+ hardware: z.object({
424
+ /** Manual override that skips autodetection (D7 fallback path). */
425
+ override: LocalModelsHardwareOverrideSchema.optional()
426
+ }).optional()
427
+ });
387
428
  var HarnessConfigSchema = z.object({
388
429
  /** Configuration schema version */
389
430
  version: z.literal(1),
@@ -505,7 +546,13 @@ var HarnessConfigSchema = z.object({
505
546
  enabled: z.boolean().default(true),
506
547
  strict: z.boolean().default(false),
507
548
  cacheTtlHours: z.number().positive().default(24)
508
- }).optional()
549
+ }).optional(),
550
+ /**
551
+ * Local Model Lifecycle Manager (LMLM) configuration. Optional and
552
+ * disabled by default (`enabled: false`); see
553
+ * `docs/changes/local-model-lifecycle-manager/proposal.md`.
554
+ */
555
+ localModels: LocalModelsConfigSchema.optional()
509
556
  });
510
557
 
511
558
  // src/config/loader.ts
@@ -21,7 +21,7 @@ function isOk(result) {
21
21
  function isErr(result) {
22
22
  return result.ok === false;
23
23
  }
24
- var STANDARD_COGNITIVE_MODES, DEFAULT_SKILL_CONTEXT_BUDGET, SESSION_SECTION_NAMES, TrajectoryMetadataSchema, PromptCacheStatsSchema, OTLPKeyValueSchema, OTLPSpanSchema, TokenScopeSchema, BridgeKindSchema, AuthTokenSchema, AuthTokenPublicSchema, AuthAuditEntrySchema, WebhookSubscriptionSchema, WebhookSubscriptionPublicSchema, GatewayEventSchema, WebhookDeliveryStatusSchema, WebhookDeliverySchema, INDEXED_FILE_KINDS, SessionSummarySchema, INSIGHTS_KEYS, SESSIONS_DEFAULTS, NotificationSinkKindSchema, NotificationSeveritySchema, NotificationActionSchema, NotificationEnvelopeSchema, NotificationSinkConfigSchema, NotificationsConfigSchema, NotificationDeliveryResultSchema, SkillProvenanceSchema, ProposalKindSchema, ProposalStatusSchema, ProposalGateFindingSchema, ProposalGateSchema, ProposalDecisionSchema, ProposalContentSchema, ProposalSourceSchema, SkillProposalSchema, EmitSkillProposalInputSchema, EditProposalInputSchema;
24
+ var STANDARD_COGNITIVE_MODES, DEFAULT_SKILL_CONTEXT_BUDGET, SESSION_SECTION_NAMES, TrajectoryMetadataSchema, PromptCacheStatsSchema, OTLPKeyValueSchema, OTLPSpanSchema, REQUIRED_STRATEGY_SECTIONS, OPTIONAL_STRATEGY_SECTIONS, TokenScopeSchema, BridgeKindSchema, AuthTokenSchema, AuthTokenPublicSchema, AuthAuditEntrySchema, WebhookSubscriptionSchema, WebhookSubscriptionPublicSchema, GatewayEventSchema, WebhookDeliveryStatusSchema, WebhookDeliverySchema, INDEXED_FILE_KINDS, SessionSummarySchema, INSIGHTS_KEYS, SESSIONS_DEFAULTS, NotificationSinkKindSchema, NotificationSeveritySchema, NotificationActionSchema, NotificationEnvelopeSchema, NotificationSinkConfigSchema, NotificationsConfigSchema, NotificationDeliveryResultSchema, SkillProvenanceSchema, ProposalKindSchema, ProposalStatusSchema, ProposalGateFindingSchema, ProposalGateSchema, ProposalDecisionSchema, ProposalContentSchema, ProposalSourceSchema, SkillProposalSchema, EmitSkillProposalInputSchema, EditProposalInputSchema;
25
25
  var init_dist = __esm({
26
26
  "../types/dist/index.mjs"() {
27
27
  STANDARD_COGNITIVE_MODES = [
@@ -96,6 +96,14 @@ var init_dist = __esm({
96
96
  attributes: z.array(OTLPKeyValueSchema),
97
97
  status: z.object({ code: z.number().int() }).optional()
98
98
  });
99
+ REQUIRED_STRATEGY_SECTIONS = [
100
+ "Target problem",
101
+ "Our approach",
102
+ "Who it's for",
103
+ "Key metrics",
104
+ "Tracks"
105
+ ];
106
+ OPTIONAL_STRATEGY_SECTIONS = ["Milestones", "Not working on", "Marketing"];
99
107
  TokenScopeSchema = z2.enum([
100
108
  "admin",
101
109
  "trigger-job",
@@ -347,6 +355,8 @@ export {
347
355
  PromptCacheStatsSchema,
348
356
  OTLPKeyValueSchema,
349
357
  OTLPSpanSchema,
358
+ REQUIRED_STRATEGY_SECTIONS,
359
+ OPTIONAL_STRATEGY_SECTIONS,
350
360
  TokenScopeSchema,
351
361
  BridgeKindSchema,
352
362
  AuthTokenSchema,
@@ -7,13 +7,13 @@ import {
7
7
  import {
8
8
  findConfigFile,
9
9
  loadConfig
10
- } from "./chunk-FXZI6NJ2.js";
10
+ } from "./chunk-B7KMTHN3.js";
11
11
  import {
12
12
  init_dist
13
- } from "./chunk-WZY5U6NS.js";
13
+ } from "./chunk-GOHWCHCS.js";
14
14
  import {
15
15
  Ok
16
- } from "./chunk-OH3NXXUY.js";
16
+ } from "./chunk-BDGTZRZ6.js";
17
17
 
18
18
  // src/mcp/tools/docs.ts
19
19
  init_dist();
@@ -50,18 +50,18 @@ 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-72ID44UE.js");
53
+ const { validateKnowledgeMap } = await import("./dist-JCFK263L.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-72ID44UE.js");
58
+ const { checkDocCoverage: checkDocCoverage2, validateKnowledgeMap } = await import("./dist-JCFK263L.js");
59
59
  const domain2 = input.domain ?? "src";
60
- const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-EIFEOUVI.js");
60
+ const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-HHXN5FLP.js");
61
61
  const store2 = await loadGraphStore2(projectPath);
62
62
  let graphCoverage2;
63
63
  if (store2) {
64
- const { Assembler } = await import("./dist-R3TOOPJ7.js");
64
+ const { Assembler } = await import("./dist-OWHMNL4W.js");
65
65
  const assembler = new Assembler(store2);
66
66
  const report = assembler.checkCoverage();
67
67
  graphCoverage2 = {
@@ -94,13 +94,13 @@ async function handleCheckDocs(input) {
94
94
  }
95
95
  return resultToMcpResponse(Ok({ coverage, integrity }));
96
96
  }
97
- const { checkDocCoverage } = await import("./dist-72ID44UE.js");
97
+ const { checkDocCoverage } = await import("./dist-JCFK263L.js");
98
98
  const domain = input.domain ?? "src";
99
- const { loadGraphStore } = await import("./graph-loader-EIFEOUVI.js");
99
+ const { loadGraphStore } = await import("./graph-loader-HHXN5FLP.js");
100
100
  const store = await loadGraphStore(projectPath);
101
101
  let graphCoverage;
102
102
  if (store) {
103
- const { Assembler } = await import("./dist-R3TOOPJ7.js");
103
+ const { Assembler } = await import("./dist-OWHMNL4W.js");
104
104
  const assembler = new Assembler(store);
105
105
  const report = assembler.checkCoverage();
106
106
  graphCoverage = {