@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
@@ -3,11 +3,11 @@ import {
3
3
  } from "./chunk-KET4QQZB.js";
4
4
  import {
5
5
  init_dist
6
- } from "./chunk-IY2TZLY5.js";
6
+ } from "./chunk-GOHWCHCS.js";
7
7
  import {
8
8
  Err,
9
9
  Ok
10
- } from "./chunk-OH3NXXUY.js";
10
+ } from "./chunk-BDGTZRZ6.js";
11
11
 
12
12
  // src/persona/generators/runtime.ts
13
13
  init_dist();
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  init_dist
3
- } from "./chunk-IY2TZLY5.js";
3
+ } from "./chunk-GOHWCHCS.js";
4
4
  import {
5
5
  Err,
6
6
  Ok
7
- } from "./chunk-OH3NXXUY.js";
7
+ } from "./chunk-BDGTZRZ6.js";
8
8
 
9
9
  // src/persona/generators/agents-md.ts
10
10
  init_dist();
@@ -6,18 +6,18 @@ import {
6
6
  } from "./chunk-W6Y7ZW3Y.js";
7
7
  import {
8
8
  init_dist
9
- } from "./chunk-IY2TZLY5.js";
9
+ } from "./chunk-GOHWCHCS.js";
10
10
  import {
11
11
  Ok
12
- } from "./chunk-OH3NXXUY.js";
12
+ } from "./chunk-BDGTZRZ6.js";
13
13
 
14
14
  // src/mcp/tools/entropy.ts
15
15
  init_dist();
16
16
  async function loadEntropyGraphOptions(projectPath) {
17
- const { loadGraphStore } = await import("./graph-loader-EIFEOUVI.js");
17
+ const { loadGraphStore } = await import("./graph-loader-HHXN5FLP.js");
18
18
  const store = await loadGraphStore(projectPath);
19
19
  if (!store) return void 0;
20
- const { GraphEntropyAdapter } = await import("./dist-R3TOOPJ7.js");
20
+ const { GraphEntropyAdapter } = await import("./dist-OWHMNL4W.js");
21
21
  const adapter = new GraphEntropyAdapter(store);
22
22
  const driftData = adapter.computeDriftData();
23
23
  const deadCodeData = adapter.computeDeadCodeData();
@@ -127,7 +127,7 @@ function buildSummaryResponse(report) {
127
127
  }
128
128
  async function handleDetectEntropy(input) {
129
129
  try {
130
- const { EntropyAnalyzer } = await import("./dist-XIJWWQ5N.js");
130
+ const { EntropyAnalyzer } = await import("./dist-JCFK263L.js");
131
131
  const typeFilter = input.type ?? "all";
132
132
  const analyzer = new EntropyAnalyzer({
133
133
  rootDir: sanitizePath(input.path),
@@ -146,7 +146,7 @@ async function handleDetectEntropy(input) {
146
146
  return resultToMcpResponse(result);
147
147
  }
148
148
  if (!result.ok) return resultToMcpResponse(result);
149
- const { createFixes, applyFixes, generateSuggestions } = await import("./dist-XIJWWQ5N.js");
149
+ const { createFixes, applyFixes, generateSuggestions } = await import("./dist-JCFK263L.js");
150
150
  const report = result.value;
151
151
  const deadCode = report.deadCode;
152
152
  const fixTypesConfig = input.fixTypes ? { fixTypes: input.fixTypes } : void 0;
@@ -7,15 +7,15 @@ import {
7
7
  } from "./chunk-3WGJMBKH.js";
8
8
  import {
9
9
  init_dist as init_dist2
10
- } from "./chunk-IY2TZLY5.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";
@@ -29,6 +29,7 @@ import * as path from "path";
29
29
  init_dist2();
30
30
  init_dist();
31
31
  import { z } from "zod";
32
+ import { BackendDefSchema, RoutingConfigSchema } from "@harness-engineering/orchestrator";
32
33
  var LayerSchema = z.object({
33
34
  /** Human-readable name of the layer */
34
35
  name: z.string(),
@@ -55,7 +56,21 @@ var AgentConfigSchema = z.object({
55
56
  /** Maximum execution time in milliseconds */
56
57
  timeout: z.number().default(3e5),
57
58
  /** Optional list of skill IDs pre-authorized for the agent */
58
- skills: z.array(z.string()).optional()
59
+ skills: z.array(z.string()).optional(),
60
+ /**
61
+ * Named backend definitions (Spec 2 — multi-backend routing).
62
+ *
63
+ * Each entry maps a backend name (chosen by the project) to a backend
64
+ * type plus its connection details (model, endpoint, apiKey, etc.).
65
+ * Referenced from `craft.llm.backend`, from orchestrator routing rules,
66
+ * and from any future subsystem that needs a configured LLM backend.
67
+ *
68
+ * Schema is re-exported from @harness-engineering/orchestrator so this
69
+ * file and the orchestrator runtime validate against the same source.
70
+ */
71
+ backends: z.record(z.string(), BackendDefSchema).optional(),
72
+ /** Routing rules for orchestrator agent dispatch. */
73
+ routing: RoutingConfigSchema.optional()
59
74
  });
60
75
  var EntropyConfigSchema = z.object({
61
76
  /** Explicit entry points for reachability analysis (overrides auto-detection) */
@@ -351,6 +366,65 @@ var ComplianceConfigSchema = z.object({
351
366
  /** Branch naming convention settings */
352
367
  branching: BranchingConfigSchema.default({})
353
368
  });
369
+ var CraftConfigSchema = z.object({
370
+ llm: z.object({
371
+ /**
372
+ * Name of an entry in `agent.backends` to route craft LLM calls
373
+ * through. Supported backend types: claude, anthropic, openai,
374
+ * local, pi, mock. (gemini is declared in agent.backends but is
375
+ * not yet wired through the craft adapter.)
376
+ */
377
+ backend: z.string().optional(),
378
+ /**
379
+ * Special-case mode that doesn't correspond to a backend def.
380
+ * - `in-session` — defer prompts to the calling chat session
381
+ * via the two-step MCP flow (collect → finalize).
382
+ * - `mock` — deterministic mock provider, for tests / smoke runs.
383
+ */
384
+ mode: z.enum(["in-session", "mock"]).optional()
385
+ }).optional()
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
+ });
354
428
  var HarnessConfigSchema = z.object({
355
429
  /** Configuration schema version */
356
430
  version: z.literal(1),
@@ -402,6 +476,8 @@ var HarnessConfigSchema = z.object({
402
476
  phaseGates: PhaseGatesConfigSchema.optional(),
403
477
  /** Design system consistency settings */
404
478
  design: DesignConfigSchema.optional(),
479
+ /** Shared configuration for craft-pipeline ceiling skills (LLM-judgment) */
480
+ craft: CraftConfigSchema.optional(),
405
481
  /** Internationalization (i18n) settings */
406
482
  i18n: I18nConfigSchema.optional(),
407
483
  /** Code review settings */
@@ -453,7 +529,7 @@ var HarnessConfigSchema = z.object({
453
529
  connectors: z.record(z.string(), z.record(z.string(), z.unknown())).default({})
454
530
  }).optional(),
455
531
  /**
456
- * Hermes Phase 2 — Disk-hygiene rules consumed by `harness cleanup-sessions --all`.
532
+ * Disk-hygiene rules consumed by `harness cleanup-sessions --all`.
457
533
  * Keys correspond to registered target names (sessions, cache, maintenance,
458
534
  * dashboard-state, snapshots, analyzer-output); values override the default
459
535
  * TTL in hours. Unknown keys are ignored (forward-compatible).
@@ -462,7 +538,7 @@ var HarnessConfigSchema = z.object({
462
538
  ttlHours: z.record(z.string(), z.number().positive()).optional()
463
539
  }).optional(),
464
540
  /**
465
- * Hermes Phase 2 — Pre-launch OSV malware guard configuration.
541
+ * Pre-launch OSV malware guard configuration.
466
542
  * `enabled: false` disables the guard; `strict: true` reverses the default
467
543
  * fail-open posture on OSV.dev network errors.
468
544
  */
@@ -470,7 +546,13 @@ var HarnessConfigSchema = z.object({
470
546
  enabled: z.boolean().default(true),
471
547
  strict: z.boolean().default(false),
472
548
  cacheTtlHours: z.number().positive().default(24)
473
- }).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()
474
556
  });
475
557
 
476
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-B4OLYXZ4.js";
10
+ } from "./chunk-B7KMTHN3.js";
11
11
  import {
12
12
  init_dist
13
- } from "./chunk-IY2TZLY5.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-XIJWWQ5N.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-XIJWWQ5N.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-XIJWWQ5N.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 = {