@harness-engineering/cli 4.0.1 → 4.1.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 (64) hide show
  1. package/dist/agents/skills/claude-code/harness-autopilot/SKILL.md +9 -8
  2. package/dist/agents/skills/claude-code/pre-merge-brief/SKILL.md +86 -0
  3. package/dist/agents/skills/claude-code/pre-merge-brief/skill.yaml +67 -0
  4. package/dist/agents/skills/codex/harness-autopilot/SKILL.md +9 -8
  5. package/dist/agents/skills/codex/pre-merge-brief/SKILL.md +86 -0
  6. package/dist/agents/skills/codex/pre-merge-brief/skill.yaml +67 -0
  7. package/dist/agents/skills/cursor/harness-autopilot/SKILL.md +9 -8
  8. package/dist/agents/skills/cursor/pre-merge-brief/SKILL.md +86 -0
  9. package/dist/agents/skills/cursor/pre-merge-brief/skill.yaml +67 -0
  10. package/dist/agents/skills/gemini-cli/harness-autopilot/SKILL.md +9 -8
  11. package/dist/agents/skills/gemini-cli/pre-merge-brief/SKILL.md +86 -0
  12. package/dist/agents/skills/gemini-cli/pre-merge-brief/skill.yaml +67 -0
  13. package/dist/{agents-md-VJLYEH2S.js → agents-md-7L4PKKOM.js} +3 -3
  14. package/dist/analyzer-XRCV63KC-HLTEIKAJ.js +26 -0
  15. package/dist/{architecture-YQH2NYXY.js → architecture-RCHFDI7E.js} +4 -4
  16. package/dist/{assess-project-KOTAPAHD.js → assess-project-YUDPNRS6.js} +5 -3
  17. package/dist/bin/harness-mcp.js +14 -14
  18. package/dist/bin/harness.js +24 -24
  19. package/dist/{check-phase-gate-CHU2E3OU.js → check-phase-gate-56GS3A72.js} +4 -4
  20. package/dist/{chunk-JPVOI7GP.js → chunk-4SKWGVYD.js} +2 -2
  21. package/dist/{chunk-GHBFNLV2.js → chunk-ABRYIEWJ.js} +923 -614
  22. package/dist/{chunk-36GQREOE.js → chunk-AU4YPEIE.js} +3 -3
  23. package/dist/{chunk-OQ6KOQEV.js → chunk-DGVT4DBI.js} +3 -3
  24. package/dist/{chunk-I3CGCZJF.js → chunk-GLHLXTKC.js} +5 -5
  25. package/dist/{chunk-4VXFZSYF.js → chunk-GSYBGOY3.js} +1 -1
  26. package/dist/{chunk-UWVMJEUJ.js → chunk-IGWJRAJT.js} +1 -1
  27. package/dist/{chunk-YANR2RL7.js → chunk-N4AI2WFH.js} +1 -1
  28. package/dist/{chunk-5RSXUAMN.js → chunk-NCMJXBEO.js} +1 -1
  29. package/dist/{chunk-SEA2PFVI.js → chunk-OZSKLJQW.js} +1 -1
  30. package/dist/{chunk-AX5KGRM6.js → chunk-P4NA5OQX.js} +1 -1
  31. package/dist/{chunk-7PJCK7UE.js → chunk-RY2U77OY.js} +6 -6
  32. package/dist/{chunk-6SCYTIF4.js → chunk-RZQZXWEL.js} +32 -7
  33. package/dist/{chunk-MMLQPHZ5.js → chunk-UACYZCW4.js} +31 -13
  34. package/dist/{chunk-T746REAE.js → chunk-VG4G3R2V.js} +1 -1
  35. package/dist/{chunk-7TIJXWG3.js → chunk-XW5XVVMI.js} +2 -2
  36. package/dist/{chunk-E5EW5HVJ.js → chunk-XZNCONFG.js} +1 -1
  37. package/dist/{chunk-SDMV4QHM.js → chunk-Y33P35U3.js} +24 -6
  38. package/dist/{chunk-XAVMTAUT.js → chunk-Y5HPJMTM.js} +18 -2
  39. package/dist/{chunk-6YFHUIGT.js → chunk-YJYUJSWK.js} +58 -20
  40. package/dist/{chunk-AAUY53CC.js → chunk-YWRPQZL7.js} +1 -1
  41. package/dist/{chunk-M7F2PPN3.js → chunk-YXOPQEFZ.js} +2 -2
  42. package/dist/{chunk-RG3TNIUB.js → chunk-Z4XWWNYX.js} +86 -86
  43. package/dist/{chunk-EYMOPFSD.js → chunk-ZU6T7W3U.js} +2 -2
  44. package/dist/{ci-workflow-HO4WKGNG.js → ci-workflow-TFAA5BK7.js} +3 -3
  45. package/dist/{dist-6D2F2J57.js → dist-MCTEX5QH.js} +4 -2
  46. package/dist/{docs-FP47JONV.js → docs-BBMAN3CY.js} +4 -4
  47. package/dist/{engine-YUA6IYOG.js → engine-R2YH74AL.js} +3 -3
  48. package/dist/{entropy-DBW2INZU.js → entropy-5UP5N6AF.js} +6 -3
  49. package/dist/{feedback-BPHADTRQ.js → feedback-6MDCCFZL.js} +1 -1
  50. package/dist/{generate-agent-definitions-KPVGBGDY.js → generate-agent-definitions-KKAN5DB5.js} +4 -4
  51. package/dist/hooks/sentinel-pre.js +15 -138
  52. package/dist/index.d.ts +61 -0
  53. package/dist/index.js +24 -24
  54. package/dist/{loader-QOJQ6NZM.js → loader-2WT2ZE2T.js} +3 -3
  55. package/dist/{mcp-ZPX6O767.js → mcp-5V4LPMB3.js} +14 -14
  56. package/dist/{performance-FXYTGJGQ.js → performance-2N3CFXLR.js} +4 -4
  57. package/dist/{review-pipeline-2TFQ5OAE.js → review-pipeline-XZIGBU3Q.js} +3 -3
  58. package/dist/{runtime-XK6ZCHKE.js → runtime-POME3GTR.js} +3 -3
  59. package/dist/{security-4W2P5ZGI.js → security-QLJLMSIW.js} +1 -1
  60. package/dist/{state-events-ECQAIZLU.js → state-events-YY5KBZTC.js} +3 -3
  61. package/dist/{validate-64KTEGIE.js → validate-VZORVK43.js} +4 -4
  62. package/dist/{validate-cross-check-J5PVGICB.js → validate-cross-check-OYKEDCST.js} +3 -3
  63. package/package.json +5 -4
  64. package/dist/analyzer-V633GUHY-OV335HGM.js +0 -26
@@ -5,30 +5,30 @@ import {
5
5
  handleCreateSelfReview,
6
6
  handleRequestPeerReview,
7
7
  requestPeerReviewDefinition
8
- } from "./chunk-OQ6KOQEV.js";
8
+ } from "./chunk-DGVT4DBI.js";
9
9
  import {
10
10
  getSecurityTrendsDefinition,
11
11
  handleGetSecurityTrends,
12
12
  handleRunSecurityScan,
13
13
  runSecurityScanDefinition
14
- } from "./chunk-M7F2PPN3.js";
14
+ } from "./chunk-YXOPQEFZ.js";
15
15
  import {
16
16
  handleRunCodeReview,
17
17
  runCodeReviewDefinition,
18
18
  sortFindingsBySeverity
19
- } from "./chunk-EYMOPFSD.js";
19
+ } from "./chunk-ZU6T7W3U.js";
20
20
  import {
21
21
  assessProjectDefinition,
22
22
  handleAssessProject
23
- } from "./chunk-6SCYTIF4.js";
23
+ } from "./chunk-RZQZXWEL.js";
24
24
  import {
25
25
  checkDocsDefinition,
26
26
  handleCheckDocs
27
- } from "./chunk-I3CGCZJF.js";
27
+ } from "./chunk-GLHLXTKC.js";
28
28
  import {
29
29
  detectEntropyDefinition,
30
30
  handleDetectEntropy
31
- } from "./chunk-SDMV4QHM.js";
31
+ } from "./chunk-Y33P35U3.js";
32
32
  import {
33
33
  checkPerformanceDefinition,
34
34
  getCriticalPathsDefinition,
@@ -38,7 +38,7 @@ import {
38
38
  handleGetPerfBaselines,
39
39
  handleUpdatePerfBaselines,
40
40
  updatePerfBaselinesDefinition
41
- } from "./chunk-7PJCK7UE.js";
41
+ } from "./chunk-RY2U77OY.js";
42
42
  import {
43
43
  getBusinessKnowledgeResource
44
44
  } from "./chunk-IOW3MW2K.js";
@@ -57,17 +57,17 @@ import {
57
57
  import {
58
58
  handleValidateProject,
59
59
  validateToolDefinition
60
- } from "./chunk-36GQREOE.js";
60
+ } from "./chunk-AU4YPEIE.js";
61
61
  import {
62
62
  checkDependenciesDefinition,
63
63
  handleCheckDependencies
64
- } from "./chunk-JPVOI7GP.js";
64
+ } from "./chunk-4SKWGVYD.js";
65
65
  import {
66
66
  resultToMcpResponse
67
67
  } from "./chunk-RC3OI5NK.js";
68
68
  import {
69
69
  resolveProjectConfig
70
- } from "./chunk-SEA2PFVI.js";
70
+ } from "./chunk-OZSKLJQW.js";
71
71
  import {
72
72
  sanitizePath
73
73
  } from "./chunk-W6Y7ZW3Y.js";
@@ -93,7 +93,7 @@ import {
93
93
  findConfigFile,
94
94
  loadConfig,
95
95
  resolveConfig
96
- } from "./chunk-XAVMTAUT.js";
96
+ } from "./chunk-Y5HPJMTM.js";
97
97
  import {
98
98
  logger
99
99
  } from "./chunk-EBJQ6N4M.js";
@@ -129,7 +129,7 @@ import {
129
129
  scanForInjection,
130
130
  serializeEnvelope,
131
131
  writeTaint
132
- } from "./chunk-MMLQPHZ5.js";
132
+ } from "./chunk-UACYZCW4.js";
133
133
  import {
134
134
  Err,
135
135
  INDEXED_FILE_KINDS,
@@ -745,7 +745,7 @@ async function handleInsightsSummary(input) {
745
745
  const skip = Array.isArray(input.skip) ? input.skip.filter(
746
746
  (k) => typeof k === "string" && INSIGHTS_KEYS.includes(k)
747
747
  ) : void 0;
748
- const { composeInsights } = await import("./dist-6D2F2J57.js");
748
+ const { composeInsights } = await import("./dist-MCTEX5QH.js");
749
749
  const report = await composeInsights(projectPath, {
750
750
  ...skip && skip.length > 0 && { skip }
751
751
  });
@@ -921,7 +921,7 @@ ${skippedMsg}`
921
921
  async function handleInitProject(input) {
922
922
  const i = input;
923
923
  try {
924
- const { TemplateEngine } = await import("./engine-YUA6IYOG.js");
924
+ const { TemplateEngine } = await import("./engine-R2YH74AL.js");
925
925
  const engine = new TemplateEngine(resolveTemplatesDir());
926
926
  const safePath = sanitizePath(i.path);
927
927
  const detected = tryDetectFramework(engine, safePath, i);
@@ -943,7 +943,7 @@ var listPersonasDefinition = {
943
943
  inputSchema: { type: "object", properties: {} }
944
944
  };
945
945
  async function handleListPersonas() {
946
- const { listPersonas } = await import("./loader-QOJQ6NZM.js");
946
+ const { listPersonas } = await import("./loader-2WT2ZE2T.js");
947
947
  const result = listPersonas(resolvePersonasDir());
948
948
  return resultToMcpResponse(result);
949
949
  }
@@ -967,10 +967,10 @@ async function handleGeneratePersonaArtifacts(input) {
967
967
  if (!/^[a-z0-9][a-z0-9._-]*$/i.test(input.name)) {
968
968
  return resultToMcpResponse(Err(new Error(`Invalid persona name: ${input.name}`)));
969
969
  }
970
- const { loadPersona } = await import("./loader-QOJQ6NZM.js");
971
- const { generateRuntime } = await import("./runtime-XK6ZCHKE.js");
972
- const { generateAgentsMd } = await import("./agents-md-VJLYEH2S.js");
973
- const { generateCIWorkflow } = await import("./ci-workflow-HO4WKGNG.js");
970
+ const { loadPersona } = await import("./loader-2WT2ZE2T.js");
971
+ const { generateRuntime } = await import("./runtime-POME3GTR.js");
972
+ const { generateAgentsMd } = await import("./agents-md-7L4PKKOM.js");
973
+ const { generateCIWorkflow } = await import("./ci-workflow-TFAA5BK7.js");
974
974
  const personasDir = resolvePersonasDir();
975
975
  const filePath = path4.join(personasDir, `${input.name}.yaml`);
976
976
  if (!filePath.startsWith(personasDir)) {
@@ -1025,7 +1025,7 @@ async function handleRunPersona(input) {
1025
1025
  if (!/^[a-z0-9][a-z0-9._-]*$/i.test(input.persona)) {
1026
1026
  return resultToMcpResponse(Err(new Error(`Invalid persona name: ${input.persona}`)));
1027
1027
  }
1028
- const { loadPersona } = await import("./loader-QOJQ6NZM.js");
1028
+ const { loadPersona } = await import("./loader-2WT2ZE2T.js");
1029
1029
  const { runPersona } = await import("./runner-AAEF2TXY.js");
1030
1030
  const { executeSkill } = await import("./skill-executor-BGUCAVBU.js");
1031
1031
  const personasDir = resolvePersonasDir();
@@ -1548,7 +1548,7 @@ async function handleRunSkill(input) {
1548
1548
  }
1549
1549
  if (input.path) {
1550
1550
  const projectPath = sanitizePath(input.path);
1551
- const { readHarnessState, isEmptyHarnessState } = await import("./state-events-ECQAIZLU.js");
1551
+ const { readHarnessState, isEmptyHarnessState } = await import("./state-events-YY5KBZTC.js");
1552
1552
  const stateResult = await readHarnessState(projectPath);
1553
1553
  if (stateResult.ok && !isEmptyHarnessState(stateResult.value)) {
1554
1554
  const stateContent = JSON.stringify(stateResult.value, null, 2);
@@ -1747,7 +1747,7 @@ import * as path11 from "path";
1747
1747
  async function autoSyncRoadmap(projectPath) {
1748
1748
  try {
1749
1749
  if (!roadmapSourceExists(projectPath)) return;
1750
- const { syncRoadmap, applySyncChanges } = await import("./dist-6D2F2J57.js");
1750
+ const { syncRoadmap, applySyncChanges } = await import("./dist-MCTEX5QH.js");
1751
1751
  const store = resolveRoadmapStore({ projectRoot: projectPath });
1752
1752
  const loaded = await store.load();
1753
1753
  if (!loaded.ok) return;
@@ -1778,7 +1778,7 @@ async function triggerExternalSync(projectPath) {
1778
1778
  console.warn("[roadmap-sync] GITHUB_TOKEN not found \u2014 external sync skipped");
1779
1779
  return;
1780
1780
  }
1781
- const { fullSync, GitHubIssuesSyncAdapter } = await import("./dist-6D2F2J57.js");
1781
+ const { fullSync, GitHubIssuesSyncAdapter } = await import("./dist-MCTEX5QH.js");
1782
1782
  const adapter = new GitHubIssuesSyncAdapter({
1783
1783
  token,
1784
1784
  config: trackerConfig
@@ -1898,14 +1898,14 @@ var manageStateDefinition = {
1898
1898
  }
1899
1899
  };
1900
1900
  async function handleShow(projectPath, input) {
1901
- const { readHarnessState } = await import("./state-events-ECQAIZLU.js");
1901
+ const { readHarnessState } = await import("./state-events-YY5KBZTC.js");
1902
1902
  return resultToMcpResponse(
1903
1903
  await readHarnessState(projectPath, { stream: input.stream, session: input.session })
1904
1904
  );
1905
1905
  }
1906
1906
  async function handleLearn(projectPath, input) {
1907
1907
  if (!input.learning) return mcpError("Error: learning is required for learn action");
1908
- const { appendLearning } = await import("./dist-6D2F2J57.js");
1908
+ const { appendLearning } = await import("./dist-MCTEX5QH.js");
1909
1909
  const result = await appendLearning(
1910
1910
  projectPath,
1911
1911
  input.learning,
@@ -1920,7 +1920,7 @@ async function handleLearn(projectPath, input) {
1920
1920
  async function handleFailure(projectPath, input) {
1921
1921
  if (!input.description) return mcpError("Error: description is required for failure action");
1922
1922
  if (!input.failureType) return mcpError("Error: failureType is required for failure action");
1923
- const { appendFailure } = await import("./dist-6D2F2J57.js");
1923
+ const { appendFailure } = await import("./dist-MCTEX5QH.js");
1924
1924
  const result = await appendFailure(
1925
1925
  projectPath,
1926
1926
  input.description,
@@ -1939,13 +1939,13 @@ async function handleFailure(projectPath, input) {
1939
1939
  return resultToMcpResponse(Ok({ recorded: true }));
1940
1940
  }
1941
1941
  async function handleArchive(projectPath, input) {
1942
- const { archiveFailures } = await import("./dist-6D2F2J57.js");
1942
+ const { archiveFailures } = await import("./dist-MCTEX5QH.js");
1943
1943
  const result = await archiveFailures(projectPath, input.stream, input.session);
1944
1944
  if (!result.ok) return resultToMcpResponse(result);
1945
1945
  return resultToMcpResponse(Ok({ archived: true }));
1946
1946
  }
1947
1947
  async function handleReset(projectPath, input) {
1948
- const { eventSourcing } = await import("./dist-6D2F2J57.js");
1948
+ const { eventSourcing } = await import("./dist-MCTEX5QH.js");
1949
1949
  const result = await eventSourcing.resetEventLog(projectPath, {
1950
1950
  stream: input.stream,
1951
1951
  session: input.session
@@ -1954,7 +1954,7 @@ async function handleReset(projectPath, input) {
1954
1954
  return resultToMcpResponse(Ok({ reset: true }));
1955
1955
  }
1956
1956
  async function handleGate(projectPath, input) {
1957
- const { runMechanicalGate } = await import("./dist-6D2F2J57.js");
1957
+ const { runMechanicalGate } = await import("./dist-MCTEX5QH.js");
1958
1958
  const result = await runMechanicalGate(projectPath);
1959
1959
  if (result.ok) {
1960
1960
  await emitSkillEvent(projectPath, {
@@ -1974,7 +1974,7 @@ async function handleGate(projectPath, input) {
1974
1974
  }
1975
1975
  async function handleSaveHandoff(projectPath, input) {
1976
1976
  if (!input.handoff) return mcpError("Error: handoff is required for save-handoff action");
1977
- const { saveHandoff } = await import("./dist-6D2F2J57.js");
1977
+ const { saveHandoff } = await import("./dist-MCTEX5QH.js");
1978
1978
  const result = await saveHandoff(
1979
1979
  projectPath,
1980
1980
  input.handoff,
@@ -1996,7 +1996,7 @@ async function handleSaveHandoff(projectPath, input) {
1996
1996
  return resultToMcpResponse(Ok({ saved: true }));
1997
1997
  }
1998
1998
  async function handleLoadHandoff(projectPath, input) {
1999
- const { loadHandoff } = await import("./dist-6D2F2J57.js");
1999
+ const { loadHandoff } = await import("./dist-MCTEX5QH.js");
2000
2000
  return resultToMcpResponse(await loadHandoff(projectPath, input.stream, input.session));
2001
2001
  }
2002
2002
  async function handleAppendEntry(projectPath, input) {
@@ -2004,7 +2004,7 @@ async function handleAppendEntry(projectPath, input) {
2004
2004
  if (!input.authorSkill) return mcpError("Error: authorSkill is required for append_entry action");
2005
2005
  if (!input.content) return mcpError("Error: content is required for append_entry action");
2006
2006
  if (input.session) {
2007
- const { appendSessionEntry } = await import("./dist-6D2F2J57.js");
2007
+ const { appendSessionEntry } = await import("./dist-MCTEX5QH.js");
2008
2008
  const result = await appendSessionEntry(
2009
2009
  projectPath,
2010
2010
  input.session,
@@ -2018,7 +2018,7 @@ async function handleAppendEntry(projectPath, input) {
2018
2018
  return mcpError("Error: session is required for non-decisions sections");
2019
2019
  }
2020
2020
  const { randomUUID: randomUUID10 } = await import("crypto");
2021
- const { emitCoreEvent } = await import("./state-events-ECQAIZLU.js");
2021
+ const { emitCoreEvent } = await import("./state-events-YY5KBZTC.js");
2022
2022
  const r = await emitCoreEvent(
2023
2023
  projectPath,
2024
2024
  {
@@ -2036,7 +2036,7 @@ async function handleUpdateEntryStatus(projectPath, input) {
2036
2036
  if (!input.entryId) return mcpError("Error: entryId is required for update_entry_status action");
2037
2037
  if (!input.newStatus)
2038
2038
  return mcpError("Error: newStatus is required for update_entry_status action");
2039
- const { updateSessionEntryStatus } = await import("./dist-6D2F2J57.js");
2039
+ const { updateSessionEntryStatus } = await import("./dist-MCTEX5QH.js");
2040
2040
  const result = await updateSessionEntryStatus(
2041
2041
  projectPath,
2042
2042
  input.session,
@@ -2046,7 +2046,7 @@ async function handleUpdateEntryStatus(projectPath, input) {
2046
2046
  );
2047
2047
  if (result.ok && input.section === "decisions" && input.newStatus === "resolved") {
2048
2048
  try {
2049
- const { emitApprovalResolved } = await import("./state-events-ECQAIZLU.js");
2049
+ const { emitApprovalResolved } = await import("./state-events-YY5KBZTC.js");
2050
2050
  await emitApprovalResolved(projectPath, input.entryId, input.newStatus, {
2051
2051
  stream: input.stream
2052
2052
  });
@@ -2058,7 +2058,7 @@ async function handleUpdateEntryStatus(projectPath, input) {
2058
2058
  async function handleReadSection(projectPath, input) {
2059
2059
  if (!input.session) return mcpError("Error: session is required for read_section action");
2060
2060
  if (!input.section) return mcpError("Error: section is required for read_section action");
2061
- const { readSessionSection } = await import("./dist-6D2F2J57.js");
2061
+ const { readSessionSection } = await import("./dist-MCTEX5QH.js");
2062
2062
  const result = await readSessionSection(
2063
2063
  projectPath,
2064
2064
  input.session,
@@ -2068,13 +2068,13 @@ async function handleReadSection(projectPath, input) {
2068
2068
  }
2069
2069
  async function handleReadSections(projectPath, input) {
2070
2070
  if (!input.session) return mcpError("Error: session is required for read_sections action");
2071
- const { readSessionSections } = await import("./dist-6D2F2J57.js");
2071
+ const { readSessionSections } = await import("./dist-MCTEX5QH.js");
2072
2072
  const result = await readSessionSections(projectPath, input.session);
2073
2073
  return resultToMcpResponse(result);
2074
2074
  }
2075
2075
  async function handleArchiveSession(projectPath, input) {
2076
2076
  if (!input.session) return mcpError("Error: session is required for archive_session action");
2077
- const { archiveSession } = await import("./dist-6D2F2J57.js");
2077
+ const { archiveSession } = await import("./dist-MCTEX5QH.js");
2078
2078
  const { buildArchiveHooks } = await import("@harness-engineering/orchestrator");
2079
2079
  const hooks = buildArchiveHooks({ projectPath });
2080
2080
  const result = await archiveSession(projectPath, input.session, { hooks });
@@ -2117,7 +2117,7 @@ async function handlePhaseComplete(projectPath, input) {
2117
2117
  async function handleTaskTransition(projectPath, input) {
2118
2118
  if (!input.taskId) return mcpError("Error: taskId is required for task-transition action");
2119
2119
  if (!input.toLane) return mcpError("Error: toLane is required for task-transition action");
2120
- const { eventSourcing } = await import("./dist-6D2F2J57.js");
2120
+ const { eventSourcing } = await import("./dist-MCTEX5QH.js");
2121
2121
  const scope = { stream: input.stream, session: input.session };
2122
2122
  if (input.dependsOn) {
2123
2123
  const reg = await eventSourcing.registerTask(projectPath, input.taskId, input.dependsOn, scope);
@@ -2181,7 +2181,7 @@ var listStreamsDefinition = {
2181
2181
  };
2182
2182
  async function handleListStreams(input) {
2183
2183
  try {
2184
- const { listStreams, loadStreamIndex } = await import("./dist-6D2F2J57.js");
2184
+ const { listStreams, loadStreamIndex } = await import("./dist-MCTEX5QH.js");
2185
2185
  const projectPath = sanitizePath(input.path);
2186
2186
  const indexResult = await loadStreamIndex(projectPath);
2187
2187
  const streamsResult = await listStreams(projectPath);
@@ -2219,7 +2219,7 @@ var checkPhaseGateDefinition = {
2219
2219
  };
2220
2220
  async function handleCheckPhaseGate(input) {
2221
2221
  try {
2222
- const { runCheckPhaseGate } = await import("./check-phase-gate-CHU2E3OU.js");
2222
+ const { runCheckPhaseGate } = await import("./check-phase-gate-56GS3A72.js");
2223
2223
  const result = await runCheckPhaseGate({ cwd: sanitizePath(input.path) });
2224
2224
  if (result.ok) {
2225
2225
  return { content: [{ type: "text", text: JSON.stringify(result.value) }] };
@@ -2275,7 +2275,7 @@ async function handleValidateCrossCheck(input) {
2275
2275
  };
2276
2276
  }
2277
2277
  try {
2278
- const { runCrossCheck } = await import("./validate-cross-check-J5PVGICB.js");
2278
+ const { runCrossCheck } = await import("./validate-cross-check-OYKEDCST.js");
2279
2279
  const specsDir = path12.resolve(projectPath, input.specsDir ?? "docs/specs");
2280
2280
  if (!specsDir.startsWith(projectPath)) {
2281
2281
  return {
@@ -3098,8 +3098,8 @@ async function handleGenerateSlashCommands(input) {
3098
3098
  // src/mcp/resources/state.ts
3099
3099
  async function getStateResource(projectRoot) {
3100
3100
  try {
3101
- const { migrateToStreams } = await import("./dist-6D2F2J57.js");
3102
- const { readHarnessState } = await import("./state-events-ECQAIZLU.js");
3101
+ const { migrateToStreams } = await import("./dist-MCTEX5QH.js");
3102
+ const { readHarnessState } = await import("./state-events-YY5KBZTC.js");
3103
3103
  await migrateToStreams(projectRoot);
3104
3104
  const result = await readHarnessState(projectRoot);
3105
3105
  if (result.ok) {
@@ -3132,7 +3132,7 @@ function graphNotFoundError() {
3132
3132
  content: [
3133
3133
  {
3134
3134
  type: "text",
3135
- text: "No graph found. Run `harness scan` or use `ingest_source` tool first."
3135
+ text: "No graph found. Run `harness graph scan` or use `ingest_source` tool first."
3136
3136
  }
3137
3137
  ],
3138
3138
  isError: true
@@ -4048,7 +4048,7 @@ async function getGraphResource(projectRoot) {
4048
4048
  if (!store) {
4049
4049
  return JSON.stringify({
4050
4050
  status: "no_graph",
4051
- message: "No knowledge graph found. Run harness scan to build one."
4051
+ message: "No knowledge graph found. Run harness graph scan to build one."
4052
4052
  });
4053
4053
  }
4054
4054
  const lastScanTimestamp = await readLastScanTimestamp(projectRoot);
@@ -4119,7 +4119,7 @@ var generateAgentDefinitionsDefinition = {
4119
4119
  }
4120
4120
  };
4121
4121
  async function handleGenerateAgentDefinitions(input) {
4122
- const { generateAgentDefinitions } = await import("./generate-agent-definitions-KPVGBGDY.js");
4122
+ const { generateAgentDefinitions } = await import("./generate-agent-definitions-KKAN5DB5.js");
4123
4123
  const platforms = input.platform === "all" || !input.platform ? ["claude-code", "gemini-cli"] : [input.platform];
4124
4124
  const results = generateAgentDefinitions({
4125
4125
  platforms: [...platforms],
@@ -4836,7 +4836,7 @@ async function handleManageRoadmap(input) {
4836
4836
  release,
4837
4837
  promoteFeature,
4838
4838
  groomRoadmap
4839
- } = await import("./dist-6D2F2J57.js");
4839
+ } = await import("./dist-MCTEX5QH.js");
4840
4840
  const { Ok: Ok2 } = await import("./dist-ICW4QUEW.js");
4841
4841
  const projectPath = projectPathPre;
4842
4842
  const deps = {
@@ -5280,7 +5280,7 @@ async function handleTransition(validInput, projectPath, id) {
5280
5280
  const transition = transitionResult.data;
5281
5281
  const prompt = renderTransition(transition);
5282
5282
  try {
5283
- const { saveHandoff } = await import("./dist-6D2F2J57.js");
5283
+ const { saveHandoff } = await import("./dist-MCTEX5QH.js");
5284
5284
  await saveHandoff(
5285
5285
  projectPath,
5286
5286
  {
@@ -5361,7 +5361,7 @@ async function handleEmitInteraction(input) {
5361
5361
  }
5362
5362
  async function recordInteraction(projectPath, id, type, decision, stream) {
5363
5363
  try {
5364
- const { emitCoreEvent, emitUserInputCaptured, emitApprovalRequested } = await import("./state-events-ECQAIZLU.js");
5364
+ const { emitCoreEvent, emitUserInputCaptured, emitApprovalRequested } = await import("./state-events-YY5KBZTC.js");
5365
5365
  await emitCoreEvent(
5366
5366
  projectPath,
5367
5367
  {
@@ -5522,10 +5522,10 @@ async function handleGatherContext(input) {
5522
5522
  input.include ?? ["state", "learnings", "handoff", "graph", "validation", "businessKnowledge"]
5523
5523
  );
5524
5524
  const errors = [];
5525
- const statePromise = includeSet.has("state") ? import("./state-events-ECQAIZLU.js").then(
5525
+ const statePromise = includeSet.has("state") ? import("./state-events-YY5KBZTC.js").then(
5526
5526
  (m) => m.readHarnessState(projectPath, { session: input.session })
5527
5527
  ) : Promise.resolve(null);
5528
- const learningsPromise = includeSet.has("learnings") ? import("./dist-6D2F2J57.js").then(
5528
+ const learningsPromise = includeSet.has("learnings") ? import("./dist-MCTEX5QH.js").then(
5529
5529
  (core) => core.loadBudgetedLearnings(projectPath, {
5530
5530
  intent: input.intent,
5531
5531
  tokenBudget: input.learningsBudget ?? 1e3,
@@ -5534,7 +5534,7 @@ async function handleGatherContext(input) {
5534
5534
  ...input.depth !== void 0 && { depth: input.depth }
5535
5535
  })
5536
5536
  ) : Promise.resolve(null);
5537
- const handoffPromise = includeSet.has("handoff") ? import("./dist-6D2F2J57.js").then(
5537
+ const handoffPromise = includeSet.has("handoff") ? import("./dist-MCTEX5QH.js").then(
5538
5538
  (core) => core.loadHandoff(projectPath, void 0, input.session)
5539
5539
  ) : Promise.resolve(null);
5540
5540
  const graphPromise = includeSet.has("graph") ? (async () => {
@@ -5578,15 +5578,15 @@ async function handleGatherContext(input) {
5578
5578
  context: contextBlocks
5579
5579
  };
5580
5580
  })() : Promise.resolve(null);
5581
- const sessionsPromise = includeSet.has("sessions") && input.session ? import("./dist-6D2F2J57.js").then(
5581
+ const sessionsPromise = includeSet.has("sessions") && input.session ? import("./dist-MCTEX5QH.js").then(
5582
5582
  (core) => core.readSessionSections(projectPath, input.session)
5583
5583
  ) : Promise.resolve(null);
5584
5584
  const shouldIncludeEvents = input.includeEvents !== void 0 ? input.includeEvents : includeSet.has("events") || !!input.session && !input.include;
5585
- const eventsPromise = shouldIncludeEvents ? import("./state-events-ECQAIZLU.js").then(
5585
+ const eventsPromise = shouldIncludeEvents ? import("./state-events-YY5KBZTC.js").then(
5586
5586
  (m) => m.readAuditTimeline(projectPath, { session: input.session })
5587
5587
  ) : Promise.resolve(null);
5588
5588
  const validationPromise = includeSet.has("validation") ? (async () => {
5589
- const { handleValidateProject: handleValidateProject2 } = await import("./validate-64KTEGIE.js");
5589
+ const { handleValidateProject: handleValidateProject2 } = await import("./validate-VZORVK43.js");
5590
5590
  const result = await handleValidateProject2({ path: projectPath });
5591
5591
  const first = result.content[0];
5592
5592
  return first ? JSON.parse(first.text) : null;
@@ -5689,7 +5689,7 @@ async function handleGatherContext(input) {
5689
5689
  };
5690
5690
  if (input.session) {
5691
5691
  try {
5692
- const core = await import("./dist-6D2F2J57.js");
5692
+ const core = await import("./dist-MCTEX5QH.js");
5693
5693
  core.updateSessionIndex(
5694
5694
  projectPath,
5695
5695
  input.session,
@@ -5887,7 +5887,7 @@ async function handleReviewChanges(input) {
5887
5887
  }
5888
5888
  }
5889
5889
  async function runQuickReview(projectPath, diff, diffLines, downgraded, offset, limit) {
5890
- const { handleAnalyzeDiff: handleAnalyzeDiff2 } = await import("./feedback-BPHADTRQ.js");
5890
+ const { handleAnalyzeDiff: handleAnalyzeDiff2 } = await import("./feedback-6MDCCFZL.js");
5891
5891
  const result = await handleAnalyzeDiff2({ diff, path: projectPath });
5892
5892
  const firstContent = result.content[0];
5893
5893
  if (!firstContent) throw new Error("Empty analyze_diff response");
@@ -5922,7 +5922,7 @@ function extractFileCount(diffParsed) {
5922
5922
  return files?.length ?? 0;
5923
5923
  }
5924
5924
  async function runStandardReview(projectPath, diff, diffLines, downgraded, offset, limit) {
5925
- const { handleAnalyzeDiff: handleAnalyzeDiff2, handleCreateSelfReview: handleCreateSelfReview2 } = await import("./feedback-BPHADTRQ.js");
5925
+ const { handleAnalyzeDiff: handleAnalyzeDiff2, handleCreateSelfReview: handleCreateSelfReview2 } = await import("./feedback-6MDCCFZL.js");
5926
5926
  const [diffResult, reviewResult] = await Promise.all([
5927
5927
  handleAnalyzeDiff2({ diff, path: projectPath }),
5928
5928
  handleCreateSelfReview2({ path: projectPath, diff })
@@ -5957,7 +5957,7 @@ async function runStandardReview(projectPath, diff, diffLines, downgraded, offse
5957
5957
  };
5958
5958
  }
5959
5959
  async function runDeepReview(projectPath, diff, diffLines, _downgraded, offset, limit) {
5960
- const { handleRunCodeReview: handleRunCodeReview2 } = await import("./review-pipeline-2TFQ5OAE.js");
5960
+ const { handleRunCodeReview: handleRunCodeReview2 } = await import("./review-pipeline-XZIGBU3Q.js");
5961
5961
  const result = await handleRunCodeReview2({
5962
5962
  path: projectPath,
5963
5963
  diff,
@@ -6252,7 +6252,7 @@ async function handleDetectStaleConstraints(input) {
6252
6252
  ]
6253
6253
  };
6254
6254
  }
6255
- const { detectStaleConstraints } = await import("./dist-6D2F2J57.js");
6255
+ const { detectStaleConstraints } = await import("./dist-MCTEX5QH.js");
6256
6256
  const result = detectStaleConstraints(
6257
6257
  store,
6258
6258
  windowDays,
@@ -6383,10 +6383,10 @@ function countCriticalFindings(securityData) {
6383
6383
  return findings.filter((f) => f.severity === "error").length;
6384
6384
  }
6385
6385
  async function runHealthChecks(projectPath) {
6386
- const { handleAssessProject: handleAssessProject2 } = await import("./assess-project-KOTAPAHD.js");
6387
- const { handleCheckDependencies: handleCheckDependencies2 } = await import("./architecture-YQH2NYXY.js");
6388
- const { handleDetectEntropy: handleDetectEntropy2 } = await import("./entropy-DBW2INZU.js");
6389
- const { handleRunSecurityScan: handleRunSecurityScan2 } = await import("./security-4W2P5ZGI.js");
6386
+ const { handleAssessProject: handleAssessProject2 } = await import("./assess-project-YUDPNRS6.js");
6387
+ const { handleCheckDependencies: handleCheckDependencies2 } = await import("./architecture-RCHFDI7E.js");
6388
+ const { handleDetectEntropy: handleDetectEntropy2 } = await import("./entropy-5UP5N6AF.js");
6389
+ const { handleRunSecurityScan: handleRunSecurityScan2 } = await import("./security-QLJLMSIW.js");
6390
6390
  const [assessResult, depsResult, entropyResult, securityResult] = await Promise.all([
6391
6391
  handleAssessProject2({
6392
6392
  path: projectPath,
@@ -7220,7 +7220,7 @@ async function handleGetDecayTrends(input) {
7220
7220
  };
7221
7221
  }
7222
7222
  try {
7223
- const core = await import("./dist-6D2F2J57.js");
7223
+ const core = await import("./dist-MCTEX5QH.js");
7224
7224
  const { TimelineManager } = core;
7225
7225
  const manager = new TimelineManager(projectPath);
7226
7226
  const timeline = manager.load();
@@ -7355,7 +7355,7 @@ async function handleCodeOutline(input) {
7355
7355
  };
7356
7356
  }
7357
7357
  try {
7358
- const { getOutline, formatOutline, EXTENSION_MAP } = await import("./dist-6D2F2J57.js");
7358
+ const { getOutline, formatOutline, EXTENSION_MAP } = await import("./dist-MCTEX5QH.js");
7359
7359
  const { stat } = await import("fs/promises");
7360
7360
  const stats = await stat(targetPath).catch(() => null);
7361
7361
  if (stats?.isFile()) {
@@ -7374,7 +7374,7 @@ async function handleCodeOutline(input) {
7374
7374
  })
7375
7375
  );
7376
7376
  fileStats.sort((a, b) => b.mtimeMs - a.mtimeMs);
7377
- const { paginate: paginate2 } = await import("./dist-6D2F2J57.js");
7377
+ const { paginate: paginate2 } = await import("./dist-MCTEX5QH.js");
7378
7378
  const paged = paginate2(fileStats, input.offset ?? 0, input.limit ?? 30);
7379
7379
  const results = [];
7380
7380
  for (const entry of paged.items) {
@@ -7447,7 +7447,7 @@ async function handleCodeSearch(input) {
7447
7447
  };
7448
7448
  }
7449
7449
  try {
7450
- const { searchSymbols } = await import("./dist-6D2F2J57.js");
7450
+ const { searchSymbols } = await import("./dist-MCTEX5QH.js");
7451
7451
  const result = await searchSymbols(input.query, directory, input.glob);
7452
7452
  const lines = [`Search: "${result.query}" \u2014 ${result.matches.length} matches`];
7453
7453
  for (const match of result.matches) {
@@ -7516,7 +7516,7 @@ async function handleCodeUnfold(input) {
7516
7516
  }
7517
7517
  try {
7518
7518
  if (input.symbol) {
7519
- const { unfoldSymbol } = await import("./dist-6D2F2J57.js");
7519
+ const { unfoldSymbol } = await import("./dist-MCTEX5QH.js");
7520
7520
  const result = await unfoldSymbol(filePath, input.symbol);
7521
7521
  const header = result.warning ? `${result.file}:${result.startLine}-${result.endLine} ${result.warning}
7522
7522
  ` : `${result.file}:${result.startLine}-${result.endLine}
@@ -7524,7 +7524,7 @@ async function handleCodeUnfold(input) {
7524
7524
  return { content: [{ type: "text", text: header + result.content }] };
7525
7525
  }
7526
7526
  if (input.startLine != null && input.endLine != null) {
7527
- const { unfoldRange } = await import("./dist-6D2F2J57.js");
7527
+ const { unfoldRange } = await import("./dist-MCTEX5QH.js");
7528
7528
  const result = await unfoldRange(filePath, input.startLine, input.endLine);
7529
7529
  const header = `${result.file}:${result.startLine}-${result.endLine}
7530
7530
  `;
@@ -7580,7 +7580,7 @@ async function handleCheckTraceability(input) {
7580
7580
  content: [
7581
7581
  {
7582
7582
  type: "text",
7583
- text: "No graph found. Run `harness scan` or use `ingest_source` tool first."
7583
+ text: "No graph found. Run `harness graph scan` or use `ingest_source` tool first."
7584
7584
  }
7585
7585
  ],
7586
7586
  isError: true
@@ -7598,7 +7598,7 @@ async function handleCheckTraceability(input) {
7598
7598
  type: "text",
7599
7599
  text: JSON.stringify({
7600
7600
  status: "no-requirements",
7601
- message: "No requirement nodes found in graph. Run `harness scan` to ingest spec requirements."
7601
+ message: "No requirement nodes found in graph. Run `harness graph scan` to ingest spec requirements."
7602
7602
  })
7603
7603
  }
7604
7604
  ]
@@ -7709,7 +7709,7 @@ async function handlePredictFailures(input) {
7709
7709
  };
7710
7710
  }
7711
7711
  try {
7712
- const core = await import("./dist-6D2F2J57.js");
7712
+ const core = await import("./dist-MCTEX5QH.js");
7713
7713
  const { TimelineManager, PredictionEngine, SpecImpactEstimator } = core;
7714
7714
  const manager = new TimelineManager(projectPath);
7715
7715
  const includeRoadmap = input.includeRoadmap !== false;
@@ -8599,7 +8599,7 @@ async function handleIntentMode(projectPath, intent, pipeline, budget, filterCon
8599
8599
  content: [
8600
8600
  {
8601
8601
  type: "text",
8602
- text: "No graph found. Run `harness scan` or use `ingest_source` tool first."
8602
+ text: "No graph found. Run `harness graph scan` or use `ingest_source` tool first."
8603
8603
  }
8604
8604
  ],
8605
8605
  isError: true
@@ -8818,7 +8818,7 @@ async function handleDetectConstraintEmergence(input) {
8818
8818
  }
8819
8819
  const nodePath = await import("path");
8820
8820
  const historyPath = nodePath.resolve(projectPath, ".harness/arch/violation-history.json");
8821
- const { ViolationHistoryManager, detectEmergentConstraints } = await import("./dist-6D2F2J57.js");
8821
+ const { ViolationHistoryManager, detectEmergentConstraints } = await import("./dist-MCTEX5QH.js");
8822
8822
  const manager = new ViolationHistoryManager(historyPath);
8823
8823
  const history = manager.load();
8824
8824
  const options = { windowWeeks, minOccurrences };
@@ -8906,7 +8906,7 @@ async function handleRunCIChecks(input) {
8906
8906
  };
8907
8907
  }
8908
8908
  try {
8909
- const { runCIChecks } = await import("./dist-6D2F2J57.js");
8909
+ const { runCIChecks } = await import("./dist-MCTEX5QH.js");
8910
8910
  const skip = input.checks ? VALID_CHECKS.filter((c) => !input.checks.includes(c)) : [];
8911
8911
  const result = await runCIChecks({
8912
8912
  projectRoot: projectPath,
@@ -8968,7 +8968,7 @@ async function handleGenerateBlueprint(input) {
8968
8968
  };
8969
8969
  }
8970
8970
  try {
8971
- const { ProjectScanner } = await import("./dist-6D2F2J57.js");
8971
+ const { ProjectScanner } = await import("./dist-MCTEX5QH.js");
8972
8972
  const scanner = new ProjectScanner(projectPath);
8973
8973
  const data = await scanner.scan();
8974
8974
  return {
@@ -9171,7 +9171,7 @@ function validateProposalCrossFields(input) {
9171
9171
  }
9172
9172
  async function loadCoreProposalApi() {
9173
9173
  try {
9174
- const core = await import("./dist-6D2F2J57.js");
9174
+ const core = await import("./dist-MCTEX5QH.js");
9175
9175
  return {
9176
9176
  createProposal: core.createProposal,
9177
9177
  ProposalConflictError: core.ProposalConflictError
@@ -19765,7 +19765,7 @@ async function handleValidateStrategy(input) {
19765
19765
  } catch (error) {
19766
19766
  return mcpError2(error instanceof Error ? error.message : String(error));
19767
19767
  }
19768
- const { validateStrategy } = await import("./dist-6D2F2J57.js");
19768
+ const { validateStrategy } = await import("./dist-MCTEX5QH.js");
19769
19769
  const result = await validateStrategy(projectPath);
19770
19770
  if (!result.ok) {
19771
19771
  return mcpJson({ present: true, valid: false, error: result.error.message });
@@ -19790,7 +19790,7 @@ async function handleReadStrategy(input) {
19790
19790
  } catch (error) {
19791
19791
  return mcpError2(error instanceof Error ? error.message : String(error));
19792
19792
  }
19793
- const core = await import("./dist-6D2F2J57.js");
19793
+ const core = await import("./dist-MCTEX5QH.js");
19794
19794
  const validation = await core.validateStrategy(projectPath);
19795
19795
  if (!validation.ok) {
19796
19796
  return mcpJson({ present: true, valid: false, error: validation.error.message });
@@ -19842,7 +19842,7 @@ async function handleWriteStrategy(input) {
19842
19842
  } catch (error) {
19843
19843
  return mcpError2(error instanceof Error ? error.message : String(error));
19844
19844
  }
19845
- const core = await import("./dist-6D2F2J57.js");
19845
+ const core = await import("./dist-MCTEX5QH.js");
19846
19846
  try {
19847
19847
  core.writeStrategyDoc(input.doc, {
19848
19848
  cwd: projectPath,
@@ -19886,7 +19886,7 @@ async function handleSeedPulseFromStrategy(input) {
19886
19886
  } catch (error) {
19887
19887
  return mcpError3(error instanceof Error ? error.message : String(error));
19888
19888
  }
19889
- const core = await import("./dist-6D2F2J57.js");
19889
+ const core = await import("./dist-MCTEX5QH.js");
19890
19890
  const seed = core.seedFromStrategy({ cwd: projectPath });
19891
19891
  return mcpJson2(seed);
19892
19892
  }
@@ -19921,7 +19921,7 @@ async function handleWritePulseConfig(input) {
19921
19921
  return mcpError3(error instanceof Error ? error.message : String(error));
19922
19922
  }
19923
19923
  const resolvedConfigPath = input.configPath !== void 0 ? path55.isAbsolute(input.configPath) ? input.configPath : path55.join(projectPath, input.configPath) : path55.join(projectPath, "harness.config.json");
19924
- const core = await import("./dist-6D2F2J57.js");
19924
+ const core = await import("./dist-MCTEX5QH.js");
19925
19925
  try {
19926
19926
  core.writePulseConfig(input.config, {
19927
19927
  configPath: resolvedConfigPath,
@@ -19970,7 +19970,7 @@ async function handleAcquireCompoundLock(input) {
19970
19970
  } catch (error) {
19971
19971
  return mcpError4(error instanceof Error ? error.message : String(error));
19972
19972
  }
19973
- const core = await import("./dist-6D2F2J57.js");
19973
+ const core = await import("./dist-MCTEX5QH.js");
19974
19974
  try {
19975
19975
  const handle = core.acquireCompoundLock(
19976
19976
  input.category,
@@ -20334,7 +20334,7 @@ async function appendUpdateNotification(result, resolvedRoot) {
20334
20334
  shouldRunCheck,
20335
20335
  readCheckState,
20336
20336
  spawnBackgroundCheck
20337
- } = await import("./dist-6D2F2J57.js");
20337
+ } = await import("./dist-MCTEX5QH.js");
20338
20338
  const { CLI_VERSION } = await import("./version-CUI434OP.js");
20339
20339
  const configInterval = readConfigInterval(resolvedRoot);
20340
20340
  const DEFAULT_INTERVAL = 864e5;