@harness-engineering/cli 1.22.0 → 1.23.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 (62) hide show
  1. package/dist/agents/skills/claude-code/harness-autopilot/SKILL.md +2 -2
  2. package/dist/agents/skills/claude-code/harness-brainstorming/SKILL.md +1 -1
  3. package/dist/agents/skills/claude-code/harness-execution/SKILL.md +1 -1
  4. package/dist/agents/skills/claude-code/harness-roadmap/SKILL.md +5 -5
  5. package/dist/agents/skills/claude-code/harness-roadmap-pilot/SKILL.md +18 -14
  6. package/dist/agents/skills/codex/harness-autopilot/SKILL.md +2 -2
  7. package/dist/agents/skills/codex/harness-brainstorming/SKILL.md +1 -1
  8. package/dist/agents/skills/codex/harness-execution/SKILL.md +1 -1
  9. package/dist/agents/skills/codex/harness-roadmap/SKILL.md +5 -5
  10. package/dist/agents/skills/codex/harness-roadmap-pilot/SKILL.md +18 -14
  11. package/dist/agents/skills/cursor/harness-autopilot/SKILL.md +2 -2
  12. package/dist/agents/skills/cursor/harness-brainstorming/SKILL.md +1 -1
  13. package/dist/agents/skills/cursor/harness-execution/SKILL.md +1 -1
  14. package/dist/agents/skills/cursor/harness-roadmap/SKILL.md +5 -5
  15. package/dist/agents/skills/cursor/harness-roadmap-pilot/SKILL.md +18 -14
  16. package/dist/agents/skills/gemini-cli/harness-autopilot/SKILL.md +2 -2
  17. package/dist/agents/skills/gemini-cli/harness-brainstorming/SKILL.md +1 -1
  18. package/dist/agents/skills/gemini-cli/harness-execution/SKILL.md +1 -1
  19. package/dist/agents/skills/gemini-cli/harness-roadmap/SKILL.md +5 -5
  20. package/dist/agents/skills/gemini-cli/harness-roadmap-pilot/SKILL.md +18 -14
  21. package/dist/{agents-md-PM7LO74M.js → agents-md-GLKJSGKT.js} +2 -2
  22. package/dist/{architecture-OVOCDTI6.js → architecture-EDSBAGR4.js} +3 -3
  23. package/dist/{assess-project-R2OZIDDS.js → assess-project-CEDY4JU3.js} +1 -1
  24. package/dist/bin/harness-mcp.js +14 -14
  25. package/dist/bin/harness.js +16 -16
  26. package/dist/{check-phase-gate-7JQ6EW5R.js → check-phase-gate-N3DTKFCZ.js} +4 -4
  27. package/dist/{chunk-SOTTK27D.js → chunk-26AUZBV4.js} +19 -19
  28. package/dist/{chunk-5FBWWMY2.js → chunk-2LAEDVOC.js} +6 -6
  29. package/dist/{chunk-TEZI27SA.js → chunk-5SWE24IG.js} +1 -1
  30. package/dist/{chunk-PUOMFNRO.js → chunk-A4AI3H3R.js} +1 -1
  31. package/dist/{chunk-W6MPLFXU.js → chunk-AIBAYANF.js} +3 -3
  32. package/dist/{chunk-ZEIEUCZL.js → chunk-AKVG4MMZ.js} +9 -9
  33. package/dist/{chunk-J7W4LTRK.js → chunk-ENA4O4WD.js} +2 -2
  34. package/dist/{chunk-GRJ7A4WT.js → chunk-GJRUIXUK.js} +1 -1
  35. package/dist/{chunk-5QTWFO24.js → chunk-HT4VPPB4.js} +8 -8
  36. package/dist/{chunk-B4WHXHF7.js → chunk-LIWGCYON.js} +1 -1
  37. package/dist/{chunk-FSLFBLYW.js → chunk-QUKH6QCJ.js} +7 -7
  38. package/dist/{chunk-DJEBBENF.js → chunk-SM22U22L.js} +95 -81
  39. package/dist/{chunk-DXYOAQQC.js → chunk-TD6MQUV2.js} +1 -1
  40. package/dist/{chunk-IK5GSLW6.js → chunk-TJ6NLLAY.js} +4 -4
  41. package/dist/{chunk-ASS5TD2Y.js → chunk-TLDCCPUZ.js} +1 -1
  42. package/dist/{chunk-U44JNY3Y.js → chunk-XDAIFVGC.js} +1 -1
  43. package/dist/{ci-workflow-OTTEERPF.js → ci-workflow-LE3QF4FP.js} +2 -2
  44. package/dist/{dist-IA6XYKNO.js → dist-OEXTQQZC.js} +1 -1
  45. package/dist/{dist-LCR2IO7U.js → dist-YIKUBJLQ.js} +2 -2
  46. package/dist/{docs-CHAYSGOP.js → docs-F5G7NAFF.js} +4 -4
  47. package/dist/{engine-4MY2U5RZ.js → engine-LX5RVGXN.js} +2 -2
  48. package/dist/{entropy-AKSZG7G5.js → entropy-A5Q2USYX.js} +3 -3
  49. package/dist/{feedback-QGCSW7SB.js → feedback-2EU25RIW.js} +1 -1
  50. package/dist/{generate-agent-definitions-KU6X2UQN.js → generate-agent-definitions-HNJHO5YQ.js} +2 -2
  51. package/dist/{graph-loader-FJN4H7Y4.js → graph-loader-XULF5QF7.js} +1 -1
  52. package/dist/index.d.ts +8 -8
  53. package/dist/index.js +16 -16
  54. package/dist/{loader-AV5XEMER.js → loader-GWIEW4HM.js} +2 -2
  55. package/dist/{mcp-LWHVQRG7.js → mcp-ID3LR6JB.js} +14 -14
  56. package/dist/{performance-ETZVXXGQ.js → performance-YAY2A6A6.js} +4 -4
  57. package/dist/{review-pipeline-3ZS3GJSP.js → review-pipeline-YD4WI3JM.js} +1 -1
  58. package/dist/{runtime-KQTJRK3H.js → runtime-UJ4YO4CA.js} +2 -2
  59. package/dist/{security-LJCLZES6.js → security-IBSUKMVD.js} +1 -1
  60. package/dist/{validate-4IA5RPEX.js → validate-NHXWKMCR.js} +3 -3
  61. package/dist/{validate-cross-check-VX2BAHQI.js → validate-cross-check-R3GV2MLM.js} +2 -2
  62. package/package.json +2 -2
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  detectEntropyDefinition,
3
3
  handleDetectEntropy
4
- } from "./chunk-IK5GSLW6.js";
4
+ } from "./chunk-TJ6NLLAY.js";
5
5
  import {
6
6
  checkPerformanceDefinition,
7
7
  getCriticalPathsDefinition,
@@ -11,7 +11,7 @@ import {
11
11
  handleGetPerfBaselines,
12
12
  handleUpdatePerfBaselines,
13
13
  updatePerfBaselinesDefinition
14
- } from "./chunk-FSLFBLYW.js";
14
+ } from "./chunk-QUKH6QCJ.js";
15
15
  import {
16
16
  analyzeDiffDefinition,
17
17
  createSelfReviewDefinition,
@@ -19,19 +19,19 @@ import {
19
19
  handleCreateSelfReview,
20
20
  handleRequestPeerReview,
21
21
  requestPeerReviewDefinition
22
- } from "./chunk-ZEIEUCZL.js";
22
+ } from "./chunk-AKVG4MMZ.js";
23
23
  import {
24
24
  handleRunSecurityScan,
25
25
  runSecurityScanDefinition
26
- } from "./chunk-DXYOAQQC.js";
26
+ } from "./chunk-TD6MQUV2.js";
27
27
  import {
28
28
  handleRunCodeReview,
29
29
  runCodeReviewDefinition
30
- } from "./chunk-B4WHXHF7.js";
30
+ } from "./chunk-LIWGCYON.js";
31
31
  import {
32
32
  assessProjectDefinition,
33
33
  handleAssessProject
34
- } from "./chunk-5FBWWMY2.js";
34
+ } from "./chunk-2LAEDVOC.js";
35
35
  import {
36
36
  GENERATED_HEADER_CLAUDE,
37
37
  GENERATED_HEADER_CODEX,
@@ -44,25 +44,25 @@ import {
44
44
  import {
45
45
  handleValidateProject,
46
46
  validateToolDefinition
47
- } from "./chunk-J7W4LTRK.js";
47
+ } from "./chunk-ENA4O4WD.js";
48
48
  import {
49
49
  loadGraphStore
50
- } from "./chunk-ASS5TD2Y.js";
50
+ } from "./chunk-TLDCCPUZ.js";
51
51
  import {
52
52
  checkDependenciesDefinition,
53
53
  handleCheckDependencies
54
- } from "./chunk-W6MPLFXU.js";
54
+ } from "./chunk-AIBAYANF.js";
55
55
  import {
56
56
  resolveProjectConfig
57
57
  } from "./chunk-H7Y5CKTM.js";
58
58
  import {
59
59
  checkDocsDefinition,
60
60
  handleCheckDocs
61
- } from "./chunk-5QTWFO24.js";
61
+ } from "./chunk-HT4VPPB4.js";
62
62
  import {
63
63
  TrackerConfigSchema,
64
64
  resolveConfig
65
- } from "./chunk-GRJ7A4WT.js";
65
+ } from "./chunk-GJRUIXUK.js";
66
66
  import {
67
67
  resultToMcpResponse
68
68
  } from "./chunk-IDZNPTYD.js";
@@ -91,7 +91,7 @@ import {
91
91
  checkTaint,
92
92
  scanForInjection,
93
93
  writeTaint
94
- } from "./chunk-U44JNY3Y.js";
94
+ } from "./chunk-XDAIFVGC.js";
95
95
  import {
96
96
  Err,
97
97
  Ok
@@ -561,7 +561,7 @@ ${skippedMsg}`
561
561
  async function handleInitProject(input) {
562
562
  const i = input;
563
563
  try {
564
- const { TemplateEngine } = await import("./engine-4MY2U5RZ.js");
564
+ const { TemplateEngine } = await import("./engine-LX5RVGXN.js");
565
565
  const engine = new TemplateEngine(resolveTemplatesDir());
566
566
  const safePath = sanitizePath(i.path);
567
567
  const detected = tryDetectFramework(engine, safePath, i);
@@ -582,7 +582,7 @@ var listPersonasDefinition = {
582
582
  inputSchema: { type: "object", properties: {} }
583
583
  };
584
584
  async function handleListPersonas() {
585
- const { listPersonas } = await import("./loader-AV5XEMER.js");
585
+ const { listPersonas } = await import("./loader-GWIEW4HM.js");
586
586
  const result = listPersonas(resolvePersonasDir());
587
587
  return resultToMcpResponse(result);
588
588
  }
@@ -606,10 +606,10 @@ async function handleGeneratePersonaArtifacts(input) {
606
606
  if (!/^[a-z0-9][a-z0-9._-]*$/i.test(input.name)) {
607
607
  return resultToMcpResponse(Err(new Error(`Invalid persona name: ${input.name}`)));
608
608
  }
609
- const { loadPersona } = await import("./loader-AV5XEMER.js");
610
- const { generateRuntime } = await import("./runtime-KQTJRK3H.js");
611
- const { generateAgentsMd } = await import("./agents-md-PM7LO74M.js");
612
- const { generateCIWorkflow } = await import("./ci-workflow-OTTEERPF.js");
609
+ const { loadPersona } = await import("./loader-GWIEW4HM.js");
610
+ const { generateRuntime } = await import("./runtime-UJ4YO4CA.js");
611
+ const { generateAgentsMd } = await import("./agents-md-GLKJSGKT.js");
612
+ const { generateCIWorkflow } = await import("./ci-workflow-LE3QF4FP.js");
613
613
  const personasDir = resolvePersonasDir();
614
614
  const filePath = path3.join(personasDir, `${input.name}.yaml`);
615
615
  if (!filePath.startsWith(personasDir)) {
@@ -664,7 +664,7 @@ async function handleRunPersona(input) {
664
664
  if (!/^[a-z0-9][a-z0-9._-]*$/i.test(input.persona)) {
665
665
  return resultToMcpResponse(Err(new Error(`Invalid persona name: ${input.persona}`)));
666
666
  }
667
- const { loadPersona } = await import("./loader-AV5XEMER.js");
667
+ const { loadPersona } = await import("./loader-GWIEW4HM.js");
668
668
  const { runPersona } = await import("./runner-VMYLHWOC.js");
669
669
  const { executeSkill } = await import("./skill-executor-2BZQLHYN.js");
670
670
  const personasDir = resolvePersonasDir();
@@ -1322,7 +1322,7 @@ async function autoSyncRoadmap(projectPath) {
1322
1322
  try {
1323
1323
  const roadmapFile = path11.join(projectPath, "docs", "roadmap.md");
1324
1324
  if (!fs10.existsSync(roadmapFile)) return;
1325
- const { parseRoadmap, serializeRoadmap, syncRoadmap, applySyncChanges } = await import("./dist-LCR2IO7U.js");
1325
+ const { parseRoadmap, serializeRoadmap, syncRoadmap, applySyncChanges } = await import("./dist-YIKUBJLQ.js");
1326
1326
  const raw = fs10.readFileSync(roadmapFile, "utf-8");
1327
1327
  const parseResult = parseRoadmap(raw);
1328
1328
  if (!parseResult.ok) return;
@@ -1349,7 +1349,7 @@ async function triggerExternalSync(projectPath, roadmapFile) {
1349
1349
  }
1350
1350
  const token = process.env.GITHUB_TOKEN;
1351
1351
  if (!token) return;
1352
- const { fullSync, GitHubIssuesSyncAdapter } = await import("./dist-LCR2IO7U.js");
1352
+ const { fullSync, GitHubIssuesSyncAdapter } = await import("./dist-YIKUBJLQ.js");
1353
1353
  const adapter = new GitHubIssuesSyncAdapter({
1354
1354
  token,
1355
1355
  config: trackerConfig
@@ -1461,12 +1461,12 @@ var manageStateDefinition = {
1461
1461
  }
1462
1462
  };
1463
1463
  async function handleShow(projectPath, input) {
1464
- const { loadState } = await import("./dist-LCR2IO7U.js");
1464
+ const { loadState } = await import("./dist-YIKUBJLQ.js");
1465
1465
  return resultToMcpResponse(await loadState(projectPath, input.stream, input.session));
1466
1466
  }
1467
1467
  async function handleLearn(projectPath, input) {
1468
1468
  if (!input.learning) return mcpError("Error: learning is required for learn action");
1469
- const { appendLearning } = await import("./dist-LCR2IO7U.js");
1469
+ const { appendLearning } = await import("./dist-YIKUBJLQ.js");
1470
1470
  const result = await appendLearning(
1471
1471
  projectPath,
1472
1472
  input.learning,
@@ -1481,7 +1481,7 @@ async function handleLearn(projectPath, input) {
1481
1481
  async function handleFailure(projectPath, input) {
1482
1482
  if (!input.description) return mcpError("Error: description is required for failure action");
1483
1483
  if (!input.failureType) return mcpError("Error: failureType is required for failure action");
1484
- const { appendFailure } = await import("./dist-LCR2IO7U.js");
1484
+ const { appendFailure } = await import("./dist-YIKUBJLQ.js");
1485
1485
  const result = await appendFailure(
1486
1486
  projectPath,
1487
1487
  input.description,
@@ -1494,24 +1494,24 @@ async function handleFailure(projectPath, input) {
1494
1494
  return resultToMcpResponse(Ok({ recorded: true }));
1495
1495
  }
1496
1496
  async function handleArchive(projectPath, input) {
1497
- const { archiveFailures } = await import("./dist-LCR2IO7U.js");
1497
+ const { archiveFailures } = await import("./dist-YIKUBJLQ.js");
1498
1498
  const result = await archiveFailures(projectPath, input.stream, input.session);
1499
1499
  if (!result.ok) return resultToMcpResponse(result);
1500
1500
  return resultToMcpResponse(Ok({ archived: true }));
1501
1501
  }
1502
1502
  async function handleReset(projectPath, input) {
1503
- const { saveState, DEFAULT_STATE } = await import("./dist-LCR2IO7U.js");
1503
+ const { saveState, DEFAULT_STATE } = await import("./dist-YIKUBJLQ.js");
1504
1504
  const result = await saveState(projectPath, { ...DEFAULT_STATE }, input.stream, input.session);
1505
1505
  if (!result.ok) return resultToMcpResponse(result);
1506
1506
  return resultToMcpResponse(Ok({ reset: true }));
1507
1507
  }
1508
1508
  async function handleGate(projectPath, _input) {
1509
- const { runMechanicalGate } = await import("./dist-LCR2IO7U.js");
1509
+ const { runMechanicalGate } = await import("./dist-YIKUBJLQ.js");
1510
1510
  return resultToMcpResponse(await runMechanicalGate(projectPath));
1511
1511
  }
1512
1512
  async function handleSaveHandoff(projectPath, input) {
1513
1513
  if (!input.handoff) return mcpError("Error: handoff is required for save-handoff action");
1514
- const { saveHandoff } = await import("./dist-LCR2IO7U.js");
1514
+ const { saveHandoff } = await import("./dist-YIKUBJLQ.js");
1515
1515
  const result = await saveHandoff(
1516
1516
  projectPath,
1517
1517
  input.handoff,
@@ -1523,7 +1523,7 @@ async function handleSaveHandoff(projectPath, input) {
1523
1523
  return resultToMcpResponse(Ok({ saved: true }));
1524
1524
  }
1525
1525
  async function handleLoadHandoff(projectPath, input) {
1526
- const { loadHandoff } = await import("./dist-LCR2IO7U.js");
1526
+ const { loadHandoff } = await import("./dist-YIKUBJLQ.js");
1527
1527
  return resultToMcpResponse(await loadHandoff(projectPath, input.stream, input.session));
1528
1528
  }
1529
1529
  async function handleAppendEntry(projectPath, input) {
@@ -1531,7 +1531,7 @@ async function handleAppendEntry(projectPath, input) {
1531
1531
  if (!input.section) return mcpError("Error: section is required for append_entry action");
1532
1532
  if (!input.authorSkill) return mcpError("Error: authorSkill is required for append_entry action");
1533
1533
  if (!input.content) return mcpError("Error: content is required for append_entry action");
1534
- const { appendSessionEntry } = await import("./dist-LCR2IO7U.js");
1534
+ const { appendSessionEntry } = await import("./dist-YIKUBJLQ.js");
1535
1535
  const result = await appendSessionEntry(
1536
1536
  projectPath,
1537
1537
  input.session,
@@ -1547,7 +1547,7 @@ async function handleUpdateEntryStatus(projectPath, input) {
1547
1547
  if (!input.entryId) return mcpError("Error: entryId is required for update_entry_status action");
1548
1548
  if (!input.newStatus)
1549
1549
  return mcpError("Error: newStatus is required for update_entry_status action");
1550
- const { updateSessionEntryStatus } = await import("./dist-LCR2IO7U.js");
1550
+ const { updateSessionEntryStatus } = await import("./dist-YIKUBJLQ.js");
1551
1551
  const result = await updateSessionEntryStatus(
1552
1552
  projectPath,
1553
1553
  input.session,
@@ -1560,7 +1560,7 @@ async function handleUpdateEntryStatus(projectPath, input) {
1560
1560
  async function handleReadSection(projectPath, input) {
1561
1561
  if (!input.session) return mcpError("Error: session is required for read_section action");
1562
1562
  if (!input.section) return mcpError("Error: section is required for read_section action");
1563
- const { readSessionSection } = await import("./dist-LCR2IO7U.js");
1563
+ const { readSessionSection } = await import("./dist-YIKUBJLQ.js");
1564
1564
  const result = await readSessionSection(
1565
1565
  projectPath,
1566
1566
  input.session,
@@ -1570,13 +1570,13 @@ async function handleReadSection(projectPath, input) {
1570
1570
  }
1571
1571
  async function handleReadSections(projectPath, input) {
1572
1572
  if (!input.session) return mcpError("Error: session is required for read_sections action");
1573
- const { readSessionSections } = await import("./dist-LCR2IO7U.js");
1573
+ const { readSessionSections } = await import("./dist-YIKUBJLQ.js");
1574
1574
  const result = await readSessionSections(projectPath, input.session);
1575
1575
  return resultToMcpResponse(result);
1576
1576
  }
1577
1577
  async function handleArchiveSession(projectPath, input) {
1578
1578
  if (!input.session) return mcpError("Error: session is required for archive_session action");
1579
- const { archiveSession } = await import("./dist-LCR2IO7U.js");
1579
+ const { archiveSession } = await import("./dist-YIKUBJLQ.js");
1580
1580
  const result = await archiveSession(projectPath, input.session);
1581
1581
  if (!result.ok) return resultToMcpResponse(result);
1582
1582
  await autoSyncRoadmap(projectPath);
@@ -1640,7 +1640,7 @@ var listStreamsDefinition = {
1640
1640
  };
1641
1641
  async function handleListStreams(input) {
1642
1642
  try {
1643
- const { listStreams, loadStreamIndex } = await import("./dist-LCR2IO7U.js");
1643
+ const { listStreams, loadStreamIndex } = await import("./dist-YIKUBJLQ.js");
1644
1644
  const projectPath = sanitizePath(input.path);
1645
1645
  const indexResult = await loadStreamIndex(projectPath);
1646
1646
  const streamsResult = await listStreams(projectPath);
@@ -1678,7 +1678,7 @@ var checkPhaseGateDefinition = {
1678
1678
  };
1679
1679
  async function handleCheckPhaseGate(input) {
1680
1680
  try {
1681
- const { runCheckPhaseGate } = await import("./check-phase-gate-7JQ6EW5R.js");
1681
+ const { runCheckPhaseGate } = await import("./check-phase-gate-N3DTKFCZ.js");
1682
1682
  const result = await runCheckPhaseGate({ cwd: sanitizePath(input.path) });
1683
1683
  if (result.ok) {
1684
1684
  return { content: [{ type: "text", text: JSON.stringify(result.value) }] };
@@ -1734,7 +1734,7 @@ async function handleValidateCrossCheck(input) {
1734
1734
  };
1735
1735
  }
1736
1736
  try {
1737
- const { runCrossCheck } = await import("./validate-cross-check-VX2BAHQI.js");
1737
+ const { runCrossCheck } = await import("./validate-cross-check-R3GV2MLM.js");
1738
1738
  const specsDir = path12.resolve(projectPath, input.specsDir ?? "docs/specs");
1739
1739
  if (!specsDir.startsWith(projectPath)) {
1740
1740
  return {
@@ -2379,7 +2379,7 @@ async function handleGenerateSlashCommands(input) {
2379
2379
  // src/mcp/resources/state.ts
2380
2380
  async function getStateResource(projectRoot) {
2381
2381
  try {
2382
- const { loadState, migrateToStreams } = await import("./dist-LCR2IO7U.js");
2382
+ const { loadState, migrateToStreams } = await import("./dist-YIKUBJLQ.js");
2383
2383
  await migrateToStreams(projectRoot);
2384
2384
  const result = await loadState(projectRoot);
2385
2385
  if (result.ok) {
@@ -2467,7 +2467,7 @@ async function handleQueryGraph(input) {
2467
2467
  const projectPath = sanitizePath(input.path);
2468
2468
  const store = await loadGraphStore(projectPath);
2469
2469
  if (!store) return graphNotFoundError();
2470
- const { ContextQL } = await import("./dist-IA6XYKNO.js");
2470
+ const { ContextQL } = await import("./dist-OEXTQQZC.js");
2471
2471
  const cql = new ContextQL(store);
2472
2472
  const result = cql.execute({
2473
2473
  rootNodeIds: input.rootNodeIds,
@@ -2558,7 +2558,7 @@ async function handleSearchSimilar(input) {
2558
2558
  const projectPath = sanitizePath(input.path);
2559
2559
  const store = await loadGraphStore(projectPath);
2560
2560
  if (!store) return graphNotFoundError();
2561
- const { FusionLayer } = await import("./dist-IA6XYKNO.js");
2561
+ const { FusionLayer } = await import("./dist-OEXTQQZC.js");
2562
2562
  const fusion = new FusionLayer(store);
2563
2563
  const results = fusion.search(input.query, input.topK ?? 10);
2564
2564
  if (input.mode === "summary") {
@@ -2613,7 +2613,7 @@ async function handleFindContextFor(input) {
2613
2613
  const projectPath = sanitizePath(input.path);
2614
2614
  const store = await loadGraphStore(projectPath);
2615
2615
  if (!store) return graphNotFoundError();
2616
- const { FusionLayer, ContextQL } = await import("./dist-IA6XYKNO.js");
2616
+ const { FusionLayer, ContextQL } = await import("./dist-OEXTQQZC.js");
2617
2617
  const fusion = new FusionLayer(store);
2618
2618
  const cql = new ContextQL(store);
2619
2619
  const tokenBudget = input.tokenBudget ?? 4e3;
@@ -2709,7 +2709,7 @@ async function handleGetRelationships(input) {
2709
2709
  const projectPath = sanitizePath(input.path);
2710
2710
  const store = await loadGraphStore(projectPath);
2711
2711
  if (!store) return graphNotFoundError();
2712
- const { ContextQL } = await import("./dist-IA6XYKNO.js");
2712
+ const { ContextQL } = await import("./dist-OEXTQQZC.js");
2713
2713
  const cql = new ContextQL(store);
2714
2714
  const direction = input.direction ?? "both";
2715
2715
  const bidirectional = direction === "both" || direction === "inbound";
@@ -2815,7 +2815,7 @@ async function handleGetImpact(input) {
2815
2815
  const projectPath = sanitizePath(input.path);
2816
2816
  const store = await loadGraphStore(projectPath);
2817
2817
  if (!store) return graphNotFoundError();
2818
- const { ContextQL } = await import("./dist-IA6XYKNO.js");
2818
+ const { ContextQL } = await import("./dist-OEXTQQZC.js");
2819
2819
  let targetNodeId = input.nodeId;
2820
2820
  if (!targetNodeId && input.filePath) {
2821
2821
  const fileNodes = store.findNodes({ type: "file" });
@@ -2947,7 +2947,7 @@ async function handleIngestSource(input) {
2947
2947
  try {
2948
2948
  const projectPath = sanitizePath(input.path);
2949
2949
  const graphDir = path16.join(projectPath, ".harness", "graph");
2950
- const { GraphStore, CodeIngestor, TopologicalLinker, KnowledgeIngestor, GitIngestor } = await import("./dist-IA6XYKNO.js");
2950
+ const { GraphStore, CodeIngestor, TopologicalLinker, KnowledgeIngestor, GitIngestor } = await import("./dist-OEXTQQZC.js");
2951
2951
  const fs17 = await import("fs/promises");
2952
2952
  await fs17.mkdir(graphDir, { recursive: true });
2953
2953
  const store = new GraphStore();
@@ -3022,7 +3022,7 @@ async function handleDetectAnomalies(input) {
3022
3022
  const projectPath = sanitizePath(input.path);
3023
3023
  const store = await loadGraphStore(projectPath);
3024
3024
  if (!store) return graphNotFoundError();
3025
- const { GraphAnomalyAdapter } = await import("./dist-IA6XYKNO.js");
3025
+ const { GraphAnomalyAdapter } = await import("./dist-OEXTQQZC.js");
3026
3026
  const adapter = new GraphAnomalyAdapter(store);
3027
3027
  const report = adapter.detect({
3028
3028
  ...input.threshold !== void 0 && { threshold: input.threshold },
@@ -3062,7 +3062,7 @@ async function handleAskGraph(input) {
3062
3062
  const projectPath = sanitizePath(input.path);
3063
3063
  const store = await loadGraphStore(projectPath);
3064
3064
  if (!store) return graphNotFoundError();
3065
- const { askGraph } = await import("./dist-IA6XYKNO.js");
3065
+ const { askGraph } = await import("./dist-OEXTQQZC.js");
3066
3066
  const result = await askGraph(store, input.question);
3067
3067
  return {
3068
3068
  content: [{ type: "text", text: JSON.stringify(result) }]
@@ -3198,7 +3198,7 @@ var generateAgentDefinitionsDefinition = {
3198
3198
  }
3199
3199
  };
3200
3200
  async function handleGenerateAgentDefinitions(input) {
3201
- const { generateAgentDefinitions } = await import("./generate-agent-definitions-KU6X2UQN.js");
3201
+ const { generateAgentDefinitions } = await import("./generate-agent-definitions-HNJHO5YQ.js");
3202
3202
  const platforms = input.platform === "all" || !input.platform ? ["claude-code", "gemini-cli"] : [input.platform];
3203
3203
  const results = generateAgentDefinitions({
3204
3204
  platforms: [...platforms],
@@ -3248,6 +3248,10 @@ var manageRoadmapDefinition = {
3248
3248
  items: { type: "string" },
3249
3249
  description: "Blocking feature names (optional for add/update)"
3250
3250
  },
3251
+ assignee: {
3252
+ type: "string",
3253
+ description: "Assignee username/email (optional for update). Tracks assignment history."
3254
+ },
3251
3255
  filter: {
3252
3256
  type: "string",
3253
3257
  description: 'Query filter: "blocked", "in-progress", "done", "planned", "backlog", or "milestone:<name>" (required for query)'
@@ -3397,6 +3401,9 @@ function handleUpdate(projectPath, input, deps) {
3397
3401
  if (input.spec !== void 0) feature.spec = input.spec || null;
3398
3402
  if (input.plans !== void 0) feature.plans = input.plans;
3399
3403
  if (input.blocked_by !== void 0) feature.blockedBy = input.blocked_by;
3404
+ if (input.assignee !== void 0) {
3405
+ deps.assignFeature(roadmap, feature, input.assignee, (/* @__PURE__ */ new Date()).toISOString().slice(0, 10));
3406
+ }
3400
3407
  found = true;
3401
3408
  break;
3402
3409
  }
@@ -3519,10 +3526,17 @@ function shouldTriggerExternalSync(input, response) {
3519
3526
  }
3520
3527
  async function handleManageRoadmap(input) {
3521
3528
  try {
3522
- const { parseRoadmap, serializeRoadmap, syncRoadmap, applySyncChanges } = await import("./dist-LCR2IO7U.js");
3529
+ const { parseRoadmap, serializeRoadmap, syncRoadmap, applySyncChanges, assignFeature } = await import("./dist-YIKUBJLQ.js");
3523
3530
  const { Ok: Ok2 } = await import("./dist-USY2C5JL.js");
3524
3531
  const projectPath = sanitizePath(input.path);
3525
- const deps = { parseRoadmap, serializeRoadmap, syncRoadmap, applySyncChanges, Ok: Ok2 };
3532
+ const deps = {
3533
+ parseRoadmap,
3534
+ serializeRoadmap,
3535
+ syncRoadmap,
3536
+ applySyncChanges,
3537
+ assignFeature,
3538
+ Ok: Ok2
3539
+ };
3526
3540
  const response = dispatchAction(input.action, projectPath, input, deps);
3527
3541
  if (shouldTriggerExternalSync(input, response)) {
3528
3542
  await triggerExternalSync(projectPath, roadmapPath(projectPath)).catch(() => {
@@ -3947,7 +3961,7 @@ async function handleTransition(validInput, projectPath, id) {
3947
3961
  const transition = transitionResult.data;
3948
3962
  const prompt = renderTransition(transition);
3949
3963
  try {
3950
- const { saveHandoff } = await import("./dist-LCR2IO7U.js");
3964
+ const { saveHandoff } = await import("./dist-YIKUBJLQ.js");
3951
3965
  await saveHandoff(
3952
3966
  projectPath,
3953
3967
  {
@@ -4015,7 +4029,7 @@ async function handleEmitInteraction(input) {
4015
4029
  }
4016
4030
  async function recordInteraction(projectPath, id, type, decision, stream) {
4017
4031
  try {
4018
- const { loadState, saveState } = await import("./dist-LCR2IO7U.js");
4032
+ const { loadState, saveState } = await import("./dist-YIKUBJLQ.js");
4019
4033
  const stateResult = await loadState(projectPath, stream);
4020
4034
  if (stateResult.ok) {
4021
4035
  const state = stateResult.value;
@@ -4104,10 +4118,10 @@ async function handleGatherContext(input) {
4104
4118
  input.include ?? ["state", "learnings", "handoff", "graph", "validation"]
4105
4119
  );
4106
4120
  const errors = [];
4107
- const statePromise = includeSet.has("state") ? import("./dist-LCR2IO7U.js").then(
4121
+ const statePromise = includeSet.has("state") ? import("./dist-YIKUBJLQ.js").then(
4108
4122
  (core) => core.loadState(projectPath, void 0, input.session)
4109
4123
  ) : Promise.resolve(null);
4110
- const learningsPromise = includeSet.has("learnings") ? import("./dist-LCR2IO7U.js").then(
4124
+ const learningsPromise = includeSet.has("learnings") ? import("./dist-YIKUBJLQ.js").then(
4111
4125
  (core) => core.loadBudgetedLearnings(projectPath, {
4112
4126
  intent: input.intent,
4113
4127
  tokenBudget: input.learningsBudget ?? 1e3,
@@ -4116,14 +4130,14 @@ async function handleGatherContext(input) {
4116
4130
  ...input.depth !== void 0 && { depth: input.depth }
4117
4131
  })
4118
4132
  ) : Promise.resolve(null);
4119
- const handoffPromise = includeSet.has("handoff") ? import("./dist-LCR2IO7U.js").then(
4133
+ const handoffPromise = includeSet.has("handoff") ? import("./dist-YIKUBJLQ.js").then(
4120
4134
  (core) => core.loadHandoff(projectPath, void 0, input.session)
4121
4135
  ) : Promise.resolve(null);
4122
4136
  const graphPromise = includeSet.has("graph") ? (async () => {
4123
- const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-FJN4H7Y4.js");
4137
+ const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-XULF5QF7.js");
4124
4138
  const store = await loadGraphStore2(projectPath);
4125
4139
  if (!store) return null;
4126
- const { FusionLayer, ContextQL } = await import("./dist-IA6XYKNO.js");
4140
+ const { FusionLayer, ContextQL } = await import("./dist-OEXTQQZC.js");
4127
4141
  const fusion = new FusionLayer(store);
4128
4142
  const cql = new ContextQL(store);
4129
4143
  const tokenBudget = input.tokenBudget ?? 4e3;
@@ -4160,11 +4174,11 @@ async function handleGatherContext(input) {
4160
4174
  context: contextBlocks
4161
4175
  };
4162
4176
  })() : Promise.resolve(null);
4163
- const sessionsPromise = includeSet.has("sessions") && input.session ? import("./dist-LCR2IO7U.js").then(
4177
+ const sessionsPromise = includeSet.has("sessions") && input.session ? import("./dist-YIKUBJLQ.js").then(
4164
4178
  (core) => core.readSessionSections(projectPath, input.session)
4165
4179
  ) : Promise.resolve(null);
4166
4180
  const shouldIncludeEvents = input.includeEvents !== void 0 ? input.includeEvents : includeSet.has("events") || !!input.session && !input.include;
4167
- const eventsPromise = shouldIncludeEvents ? import("./dist-LCR2IO7U.js").then(async (core) => {
4181
+ const eventsPromise = shouldIncludeEvents ? import("./dist-YIKUBJLQ.js").then(async (core) => {
4168
4182
  const result = await core.loadEvents(projectPath, {
4169
4183
  session: input.session
4170
4184
  });
@@ -4172,7 +4186,7 @@ async function handleGatherContext(input) {
4172
4186
  return core.formatEventTimeline(result.value);
4173
4187
  }) : Promise.resolve(null);
4174
4188
  const validationPromise = includeSet.has("validation") ? (async () => {
4175
- const { handleValidateProject: handleValidateProject2 } = await import("./validate-4IA5RPEX.js");
4189
+ const { handleValidateProject: handleValidateProject2 } = await import("./validate-NHXWKMCR.js");
4176
4190
  const result = await handleValidateProject2({ path: projectPath });
4177
4191
  const first = result.content[0];
4178
4192
  return first ? JSON.parse(first.text) : null;
@@ -4266,7 +4280,7 @@ async function handleGatherContext(input) {
4266
4280
  };
4267
4281
  if (input.session) {
4268
4282
  try {
4269
- const core = await import("./dist-LCR2IO7U.js");
4283
+ const core = await import("./dist-YIKUBJLQ.js");
4270
4284
  core.updateSessionIndex(
4271
4285
  projectPath,
4272
4286
  input.session,
@@ -4392,7 +4406,7 @@ async function handleReviewChanges(input) {
4392
4406
  }
4393
4407
  }
4394
4408
  async function runQuickReview(projectPath, diff, diffLines, downgraded) {
4395
- const { handleAnalyzeDiff: handleAnalyzeDiff2 } = await import("./feedback-QGCSW7SB.js");
4409
+ const { handleAnalyzeDiff: handleAnalyzeDiff2 } = await import("./feedback-2EU25RIW.js");
4396
4410
  const result = await handleAnalyzeDiff2({ diff, path: projectPath });
4397
4411
  const firstContent = result.content[0];
4398
4412
  if (!firstContent) throw new Error("Empty analyze_diff response");
@@ -4423,7 +4437,7 @@ function extractFileCount(diffParsed) {
4423
4437
  return files?.length ?? 0;
4424
4438
  }
4425
4439
  async function runStandardReview(projectPath, diff, diffLines, downgraded) {
4426
- const { handleAnalyzeDiff: handleAnalyzeDiff2, handleCreateSelfReview: handleCreateSelfReview2 } = await import("./feedback-QGCSW7SB.js");
4440
+ const { handleAnalyzeDiff: handleAnalyzeDiff2, handleCreateSelfReview: handleCreateSelfReview2 } = await import("./feedback-2EU25RIW.js");
4427
4441
  const [diffResult, reviewResult] = await Promise.all([
4428
4442
  handleAnalyzeDiff2({ diff, path: projectPath }),
4429
4443
  handleCreateSelfReview2({ path: projectPath, diff })
@@ -4455,7 +4469,7 @@ async function runStandardReview(projectPath, diff, diffLines, downgraded) {
4455
4469
  };
4456
4470
  }
4457
4471
  async function runDeepReview(projectPath, diff, diffLines, _downgraded) {
4458
- const { handleRunCodeReview: handleRunCodeReview2 } = await import("./review-pipeline-3ZS3GJSP.js");
4472
+ const { handleRunCodeReview: handleRunCodeReview2 } = await import("./review-pipeline-YD4WI3JM.js");
4459
4473
  const result = await handleRunCodeReview2({ path: projectPath, diff });
4460
4474
  const deepContent = result.content[0];
4461
4475
  if (!deepContent) throw new Error("Empty code review response");
@@ -4526,7 +4540,7 @@ async function handleCheckTaskIndependence(input) {
4526
4540
  try {
4527
4541
  const projectPath = sanitizePath(input.path);
4528
4542
  const store = await loadGraphStore(projectPath);
4529
- const { TaskIndependenceAnalyzer } = await import("./dist-IA6XYKNO.js");
4543
+ const { TaskIndependenceAnalyzer } = await import("./dist-OEXTQQZC.js");
4530
4544
  const analyzer = new TaskIndependenceAnalyzer(store ?? void 0);
4531
4545
  const result = analyzer.analyze({
4532
4546
  tasks: input.tasks,
@@ -4614,7 +4628,7 @@ async function handlePredictConflicts(input) {
4614
4628
  try {
4615
4629
  const projectPath = sanitizePath(input.path);
4616
4630
  const store = await loadGraphStore(projectPath);
4617
- const { ConflictPredictor } = await import("./dist-IA6XYKNO.js");
4631
+ const { ConflictPredictor } = await import("./dist-OEXTQQZC.js");
4618
4632
  const predictor = new ConflictPredictor(store ?? void 0);
4619
4633
  const result = predictor.predict({
4620
4634
  tasks: input.tasks,
@@ -4720,7 +4734,7 @@ async function handleDetectStaleConstraints(input) {
4720
4734
  isError: true
4721
4735
  };
4722
4736
  }
4723
- const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-FJN4H7Y4.js");
4737
+ const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-XULF5QF7.js");
4724
4738
  const store = await loadGraphStore2(projectPath);
4725
4739
  if (!store) {
4726
4740
  return {
@@ -4741,7 +4755,7 @@ async function handleDetectStaleConstraints(input) {
4741
4755
  ]
4742
4756
  };
4743
4757
  }
4744
- const { detectStaleConstraints } = await import("./dist-LCR2IO7U.js");
4758
+ const { detectStaleConstraints } = await import("./dist-YIKUBJLQ.js");
4745
4759
  const result = detectStaleConstraints(
4746
4760
  store,
4747
4761
  windowDays,
@@ -4858,10 +4872,10 @@ function countCriticalFindings(securityData) {
4858
4872
  return findings.filter((f) => f.severity === "error").length;
4859
4873
  }
4860
4874
  async function runHealthChecks(projectPath) {
4861
- const { handleAssessProject: handleAssessProject2 } = await import("./assess-project-R2OZIDDS.js");
4862
- const { handleCheckDependencies: handleCheckDependencies2 } = await import("./architecture-OVOCDTI6.js");
4863
- const { handleDetectEntropy: handleDetectEntropy2 } = await import("./entropy-AKSZG7G5.js");
4864
- const { handleRunSecurityScan: handleRunSecurityScan2 } = await import("./security-LJCLZES6.js");
4875
+ const { handleAssessProject: handleAssessProject2 } = await import("./assess-project-CEDY4JU3.js");
4876
+ const { handleCheckDependencies: handleCheckDependencies2 } = await import("./architecture-EDSBAGR4.js");
4877
+ const { handleDetectEntropy: handleDetectEntropy2 } = await import("./entropy-A5Q2USYX.js");
4878
+ const { handleRunSecurityScan: handleRunSecurityScan2 } = await import("./security-IBSUKMVD.js");
4865
4879
  const [assessResult, depsResult, entropyResult, securityResult] = await Promise.all([
4866
4880
  handleAssessProject2({
4867
4881
  path: projectPath,
@@ -4907,10 +4921,10 @@ function avg(values) {
4907
4921
  }
4908
4922
  async function runGraphMetrics(projectPath) {
4909
4923
  try {
4910
- const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-FJN4H7Y4.js");
4924
+ const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-XULF5QF7.js");
4911
4925
  const store = await loadGraphStore2(projectPath);
4912
4926
  if (!store) return ZERO_METRICS;
4913
- const { GraphCouplingAdapter, GraphComplexityAdapter, GraphAnomalyAdapter } = await import("./dist-IA6XYKNO.js");
4927
+ const { GraphCouplingAdapter, GraphComplexityAdapter, GraphAnomalyAdapter } = await import("./dist-OEXTQQZC.js");
4914
4928
  const couplingAdapter = new GraphCouplingAdapter(store);
4915
4929
  const couplingData = couplingAdapter.computeCouplingData();
4916
4930
  const files = couplingData.files;
@@ -5076,7 +5090,7 @@ async function handleGetDecayTrends(input) {
5076
5090
  };
5077
5091
  }
5078
5092
  try {
5079
- const core = await import("./dist-LCR2IO7U.js");
5093
+ const core = await import("./dist-YIKUBJLQ.js");
5080
5094
  const { TimelineManager } = core;
5081
5095
  const manager = new TimelineManager(projectPath);
5082
5096
  const timeline = manager.load();
@@ -5181,7 +5195,7 @@ async function handleCodeOutline(input) {
5181
5195
  };
5182
5196
  }
5183
5197
  try {
5184
- const { getOutline, formatOutline, EXTENSION_MAP } = await import("./dist-LCR2IO7U.js");
5198
+ const { getOutline, formatOutline, EXTENSION_MAP } = await import("./dist-YIKUBJLQ.js");
5185
5199
  const { stat } = await import("fs/promises");
5186
5200
  const stats = await stat(targetPath).catch(() => null);
5187
5201
  if (stats?.isFile()) {
@@ -5261,7 +5275,7 @@ async function handleCodeSearch(input) {
5261
5275
  };
5262
5276
  }
5263
5277
  try {
5264
- const { searchSymbols } = await import("./dist-LCR2IO7U.js");
5278
+ const { searchSymbols } = await import("./dist-YIKUBJLQ.js");
5265
5279
  const result = await searchSymbols(input.query, directory, input.glob);
5266
5280
  const lines = [`Search: "${result.query}" \u2014 ${result.matches.length} matches`];
5267
5281
  for (const match of result.matches) {
@@ -5330,7 +5344,7 @@ async function handleCodeUnfold(input) {
5330
5344
  }
5331
5345
  try {
5332
5346
  if (input.symbol) {
5333
- const { unfoldSymbol } = await import("./dist-LCR2IO7U.js");
5347
+ const { unfoldSymbol } = await import("./dist-YIKUBJLQ.js");
5334
5348
  const result = await unfoldSymbol(filePath, input.symbol);
5335
5349
  const header = result.warning ? `${result.file}:${result.startLine}-${result.endLine} ${result.warning}
5336
5350
  ` : `${result.file}:${result.startLine}-${result.endLine}
@@ -5338,7 +5352,7 @@ async function handleCodeUnfold(input) {
5338
5352
  return { content: [{ type: "text", text: header + result.content }] };
5339
5353
  }
5340
5354
  if (input.startLine != null && input.endLine != null) {
5341
- const { unfoldRange } = await import("./dist-LCR2IO7U.js");
5355
+ const { unfoldRange } = await import("./dist-YIKUBJLQ.js");
5342
5356
  const result = await unfoldRange(filePath, input.startLine, input.endLine);
5343
5357
  const header = `${result.file}:${result.startLine}-${result.endLine}
5344
5358
  `;
@@ -5400,7 +5414,7 @@ async function handleCheckTraceability(input) {
5400
5414
  isError: true
5401
5415
  };
5402
5416
  }
5403
- const { queryTraceability } = await import("./dist-IA6XYKNO.js");
5417
+ const { queryTraceability } = await import("./dist-OEXTQQZC.js");
5404
5418
  const options = {};
5405
5419
  if (input.spec) options.specPath = input.spec;
5406
5420
  if (input.feature) options.featureName = input.feature;
@@ -5523,7 +5537,7 @@ async function handlePredictFailures(input) {
5523
5537
  };
5524
5538
  }
5525
5539
  try {
5526
- const core = await import("./dist-LCR2IO7U.js");
5540
+ const core = await import("./dist-YIKUBJLQ.js");
5527
5541
  const { TimelineManager, PredictionEngine, SpecImpactEstimator } = core;
5528
5542
  const manager = new TimelineManager(projectPath);
5529
5543
  const includeRoadmap = input.includeRoadmap !== false;
@@ -6056,7 +6070,7 @@ async function appendUpdateNotification(result, resolvedRoot) {
6056
6070
  shouldRunCheck,
6057
6071
  readCheckState,
6058
6072
  spawnBackgroundCheck
6059
- } = await import("./dist-LCR2IO7U.js");
6073
+ } = await import("./dist-YIKUBJLQ.js");
6060
6074
  const { CLI_VERSION } = await import("./version-KFFPOQAX.js");
6061
6075
  const configInterval = readConfigInterval(resolvedRoot);
6062
6076
  const DEFAULT_INTERVAL = 864e5;
@@ -26,7 +26,7 @@ var runSecurityScanDefinition = {
26
26
  };
27
27
  async function handleRunSecurityScan(input) {
28
28
  try {
29
- const core = await import("./dist-LCR2IO7U.js");
29
+ const core = await import("./dist-YIKUBJLQ.js");
30
30
  const projectRoot = sanitizePath(input.path);
31
31
  let configData = {};
32
32
  try {