openhorse 0.1.15 → 0.1.16

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 (87) hide show
  1. package/dist/cli.js +36 -39
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/index.d.ts.map +1 -1
  4. package/dist/commands/index.js +54 -1
  5. package/dist/commands/index.js.map +1 -1
  6. package/dist/framework/index.d.ts +2 -0
  7. package/dist/framework/index.d.ts.map +1 -1
  8. package/dist/framework/index.js +8 -1
  9. package/dist/framework/index.js.map +1 -1
  10. package/dist/framework/prompt.d.ts.map +1 -1
  11. package/dist/framework/prompt.js +1 -0
  12. package/dist/framework/prompt.js.map +1 -1
  13. package/dist/framework/query.d.ts +3 -0
  14. package/dist/framework/query.d.ts.map +1 -1
  15. package/dist/framework/query.js +35 -16
  16. package/dist/framework/query.js.map +1 -1
  17. package/dist/framework/store.d.ts +3 -0
  18. package/dist/framework/store.d.ts.map +1 -1
  19. package/dist/framework/store.js.map +1 -1
  20. package/dist/harness/assembler.d.ts +5 -0
  21. package/dist/harness/assembler.d.ts.map +1 -0
  22. package/dist/harness/assembler.js +71 -0
  23. package/dist/harness/assembler.js.map +1 -0
  24. package/dist/harness/capsule.d.ts +4 -0
  25. package/dist/harness/capsule.d.ts.map +1 -0
  26. package/dist/harness/capsule.js +99 -0
  27. package/dist/harness/capsule.js.map +1 -0
  28. package/dist/harness/context-harness.d.ts +41 -0
  29. package/dist/harness/context-harness.d.ts.map +1 -0
  30. package/dist/harness/context-harness.js +139 -0
  31. package/dist/harness/context-harness.js.map +1 -0
  32. package/dist/harness/contract.d.ts +4 -0
  33. package/dist/harness/contract.d.ts.map +1 -0
  34. package/dist/harness/contract.js +62 -0
  35. package/dist/harness/contract.js.map +1 -0
  36. package/dist/harness/drift-guard.d.ts +12 -0
  37. package/dist/harness/drift-guard.d.ts.map +1 -0
  38. package/dist/harness/drift-guard.js +50 -0
  39. package/dist/harness/drift-guard.js.map +1 -0
  40. package/dist/harness/index.d.ts +10 -0
  41. package/dist/harness/index.d.ts.map +1 -0
  42. package/dist/harness/index.js +21 -0
  43. package/dist/harness/index.js.map +1 -0
  44. package/dist/harness/ledger.d.ts +29 -0
  45. package/dist/harness/ledger.d.ts.map +1 -0
  46. package/dist/harness/ledger.js +122 -0
  47. package/dist/harness/ledger.js.map +1 -0
  48. package/dist/harness/types.d.ts +81 -0
  49. package/dist/harness/types.d.ts.map +1 -0
  50. package/dist/harness/types.js +3 -0
  51. package/dist/harness/types.js.map +1 -0
  52. package/dist/index.d.ts +2 -2
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +7 -1
  55. package/dist/index.js.map +1 -1
  56. package/dist/services/compact/auto-compact.d.ts +37 -8
  57. package/dist/services/compact/auto-compact.d.ts.map +1 -1
  58. package/dist/services/compact/auto-compact.js +80 -17
  59. package/dist/services/compact/auto-compact.js.map +1 -1
  60. package/dist/services/compact/compact.d.ts +3 -0
  61. package/dist/services/compact/compact.d.ts.map +1 -1
  62. package/dist/services/compact/compact.js +13 -1
  63. package/dist/services/compact/compact.js.map +1 -1
  64. package/dist/services/model-context.d.ts +44 -0
  65. package/dist/services/model-context.d.ts.map +1 -0
  66. package/dist/services/model-context.js +134 -0
  67. package/dist/services/model-context.js.map +1 -0
  68. package/dist/services/session-storage.d.ts +9 -0
  69. package/dist/services/session-storage.d.ts.map +1 -1
  70. package/dist/services/session-storage.js +12 -0
  71. package/dist/services/session-storage.js.map +1 -1
  72. package/dist/tools/bash_security.d.ts +10 -0
  73. package/dist/tools/bash_security.d.ts.map +1 -1
  74. package/dist/tools/bash_security.js +30 -1
  75. package/dist/tools/bash_security.js.map +1 -1
  76. package/dist/ui/command-panel.d.ts.map +1 -1
  77. package/dist/ui/command-panel.js +12 -12
  78. package/dist/ui/command-panel.js.map +1 -1
  79. package/dist/ui/stream-markdown.d.ts +1 -8
  80. package/dist/ui/stream-markdown.d.ts.map +1 -1
  81. package/dist/ui/stream-markdown.js +4 -129
  82. package/dist/ui/stream-markdown.js.map +1 -1
  83. package/dist/ui/user-input.d.ts +10 -0
  84. package/dist/ui/user-input.d.ts.map +1 -0
  85. package/dist/ui/user-input.js +66 -0
  86. package/dist/ui/user-input.js.map +1 -0
  87. package/package.json +1 -1
@@ -9,7 +9,7 @@
9
9
  * - State Store (pub-sub)
10
10
  */
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.resetToolState = exports.subscribeToolState = exports.setToolState = exports.getToolState = exports.Store = exports.getSystemPrompt = exports.buildSystemPrompt = exports.query = exports.toOpenAITools = exports.toOpenAITool = exports.buildTool = void 0;
12
+ exports.resetToolState = exports.subscribeToolState = exports.setToolState = exports.getToolState = exports.assembleHarnessMessages = exports.renderContextCapsule = exports.createContextCapsule = exports.ContextLedger = exports.createContextHarness = exports.ContextHarness = exports.Store = exports.getSystemPrompt = exports.buildSystemPrompt = exports.query = exports.toOpenAITools = exports.toOpenAITool = exports.buildTool = void 0;
13
13
  var tool_1 = require("./tool");
14
14
  Object.defineProperty(exports, "buildTool", { enumerable: true, get: function () { return tool_1.buildTool; } });
15
15
  Object.defineProperty(exports, "toOpenAITool", { enumerable: true, get: function () { return tool_1.toOpenAITool; } });
@@ -21,6 +21,13 @@ Object.defineProperty(exports, "buildSystemPrompt", { enumerable: true, get: fun
21
21
  Object.defineProperty(exports, "getSystemPrompt", { enumerable: true, get: function () { return prompt_1.getSystemPrompt; } });
22
22
  var store_1 = require("./store");
23
23
  Object.defineProperty(exports, "Store", { enumerable: true, get: function () { return store_1.Store; } });
24
+ var harness_1 = require("../harness");
25
+ Object.defineProperty(exports, "ContextHarness", { enumerable: true, get: function () { return harness_1.ContextHarness; } });
26
+ Object.defineProperty(exports, "createContextHarness", { enumerable: true, get: function () { return harness_1.createContextHarness; } });
27
+ Object.defineProperty(exports, "ContextLedger", { enumerable: true, get: function () { return harness_1.ContextLedger; } });
28
+ Object.defineProperty(exports, "createContextCapsule", { enumerable: true, get: function () { return harness_1.createContextCapsule; } });
29
+ Object.defineProperty(exports, "renderContextCapsule", { enumerable: true, get: function () { return harness_1.renderContextCapsule; } });
30
+ Object.defineProperty(exports, "assembleHarnessMessages", { enumerable: true, get: function () { return harness_1.assembleHarnessMessages; } });
24
31
  var tool_state_1 = require("./tool-state");
25
32
  Object.defineProperty(exports, "getToolState", { enumerable: true, get: function () { return tool_state_1.getToolState; } });
26
33
  Object.defineProperty(exports, "setToolState", { enumerable: true, get: function () { return tool_state_1.setToolState; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/framework/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,+BAAgE;AAAvD,iGAAA,SAAS,OAAA;AAAE,oGAAA,YAAY,OAAA;AAAE,qGAAA,aAAa,OAAA;AAW/C,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AAGd,mCAA8D;AAArD,2GAAA,iBAAiB,OAAA;AAAE,yGAAA,eAAe,OAAA;AAG3C,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AAGd,2CAKsB;AAJpB,0GAAA,YAAY,OAAA;AACZ,0GAAA,YAAY,OAAA;AACZ,gHAAA,kBAAkB,OAAA;AAClB,4GAAA,cAAc,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/framework/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,+BAAgE;AAAvD,iGAAA,SAAS,OAAA;AAAE,oGAAA,YAAY,OAAA;AAAE,qGAAA,aAAa,OAAA;AAW/C,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AAGd,mCAA8D;AAArD,2GAAA,iBAAiB,OAAA;AAAE,yGAAA,eAAe,OAAA;AAG3C,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AAGd,sCAOoB;AANlB,yGAAA,cAAc,OAAA;AACd,+GAAA,oBAAoB,OAAA;AACpB,wGAAA,aAAa,OAAA;AACb,+GAAA,oBAAoB,OAAA;AACpB,+GAAA,oBAAoB,OAAA;AACpB,kHAAA,uBAAuB,OAAA;AAUzB,2CAKsB;AAJpB,0GAAA,YAAY,OAAA;AACZ,0GAAA,YAAY,OAAA;AACZ,gHAAA,kBAAkB,OAAA;AAClB,4GAAA,cAAc,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/framework/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAM5C,4CAA4C;AAC5C,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2FAA2F;IAC3F,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,6BAA6B;AAC7B,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC;CACxC;AAiED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAmBzF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAI1D"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/framework/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAM5C,4CAA4C;AAC5C,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2FAA2F;IAC3F,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,6BAA6B;AAC7B,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC;CACxC;AAkED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAmBzF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAI1D"}
@@ -29,6 +29,7 @@ Your core mission is to solve the user's problem — be concise, direct, and act
29
29
  - Ask clarifying questions only when the user's intent is genuinely ambiguous or there are multiple equally-valid paths
30
30
  - Write code, don't describe it
31
31
  - Output plans/proposals as workspace markdown files, not just text
32
+ - When summarizing repository changes, only name files verified by tool output such as git_status, git diff, or direct file reads
32
33
  - Keep responses structured and short
33
34
  - Respond in the same language as the user`,
34
35
  },
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/framework/prompt.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AA+FH,8CAmBC;AAMD,0CAIC;AAlGD,+EAA+E;AAC/E,OAAO;AACP,+EAA+E;AAE/E,MAAM,QAAQ,GAAoB;IAChC;QACE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,GAAG,EAAE,CAAC;4FAC0E;KACzF;IACD;QACE,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,GAAG,EAAE,CAAC;;;;;;;;2CAQyB;KACxC;IACD;QACE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;YACd,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxD,OAAO,oBAAoB,SAAS;+EACqC,CAAC;QAC5E,CAAC;KACF;IACD;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;uBACE,GAAG,CAAC,GAAG;cAChB,GAAG,CAAC,QAAQ;aACb,GAAG,CAAC,WAAW,EAAE;KAC3B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;YACd,IAAI,CAAC,GAAG,CAAC,aAAa;gBAAE,OAAO,EAAE,CAAC;YAClC,OAAO,oBAAoB,GAAG,CAAC,aAAa,EAAE,CAAC;QACjD,CAAC;KACF;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;YACd,IAAI,CAAC,GAAG,CAAC,aAAa;gBAAE,OAAO,EAAE,CAAC;YAClC,OAAO,GAAG,CAAC,aAAa,CAAC;QAC3B,CAAC;KACF;CACF,CAAC;AAEF,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,GAAkB;IAClD,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,SAAS;QAE9B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;KACnC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe,CAAC,GAAkB;IAChD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/framework/prompt.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAgGH,8CAmBC;AAMD,0CAIC;AAnGD,+EAA+E;AAC/E,OAAO;AACP,+EAA+E;AAE/E,MAAM,QAAQ,GAAoB;IAChC;QACE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,GAAG,EAAE,CAAC;4FAC0E;KACzF;IACD;QACE,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,GAAG,EAAE,CAAC;;;;;;;;;2CASyB;KACxC;IACD;QACE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;YACd,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxD,OAAO,oBAAoB,SAAS;+EACqC,CAAC;QAC5E,CAAC;KACF;IACD;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;uBACE,GAAG,CAAC,GAAG;cAChB,GAAG,CAAC,QAAQ;aACb,GAAG,CAAC,WAAW,EAAE;KAC3B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;YACd,IAAI,CAAC,GAAG,CAAC,aAAa;gBAAE,OAAO,EAAE,CAAC;YAClC,OAAO,oBAAoB,GAAG,CAAC,aAAa,EAAE,CAAC;QACjD,CAAC;KACF;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;YACd,IAAI,CAAC,GAAG,CAAC,aAAa;gBAAE,OAAO,EAAE,CAAC;YAClC,OAAO,GAAG,CAAC,aAAa,CAAC;QAC3B,CAAC;KACF;CACF,CAAC;AAEF,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,GAAkB;IAClD,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,SAAS;QAE9B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;KACnC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe,CAAC,GAAkB;IAChD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACjC,CAAC"}
@@ -13,6 +13,7 @@ import type { OpenHorseTool, ToolContext } from './tool';
13
13
  import type { PermissionMode } from '../commands/types';
14
14
  import type { CostTracker } from '../core/cost-tracker';
15
15
  import { type StrategyTracker } from '../core/strategy-tracker';
16
+ import type { ContextHarness } from '../harness';
16
17
  export type QueryEvent = {
17
18
  type: 'request_start';
18
19
  model: string;
@@ -71,6 +72,8 @@ export interface QueryParams {
71
72
  costTracker?: CostTracker;
72
73
  /** Strategy tracker for alternative approaches */
73
74
  strategyTracker?: StrategyTracker;
75
+ /** Optional Context Harness for turn-level context, ledger, and completion gates */
76
+ harness?: ContextHarness;
74
77
  }
75
78
  /**
76
79
  * Generator-based agentic loop.
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/framework/query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAQ,MAAM,iBAAiB,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAoB,MAAM,QAAQ,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAyB,KAAK,eAAe,EAAuB,MAAM,0BAA0B,CAAC;AAQ5G,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5H;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACzG;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAMrH,MAAM,WAAW,WAAW;IAC1B,yEAAyE;IACzE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,sBAAsB;IACtB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB;4CACwC;IACxC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1G,2BAA2B;IAC3B,GAAG,EAAE,UAAU,CAAC;IAChB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,2DAA2D;IAC3D,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,yCAAyC;IACzC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,6BAA6B;IAC7B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,uCAAuC;IACvC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,kDAAkD;IAClD,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAuB,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CA4N5E"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/framework/query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAQ,MAAM,iBAAiB,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAoB,MAAM,QAAQ,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAyB,KAAK,eAAe,EAAuB,MAAM,0BAA0B,CAAC;AAE5G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5H;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACzG;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAMrH,MAAM,WAAW,WAAW;IAC1B,yEAAyE;IACzE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,sBAAsB;IACtB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB;4CACwC;IACxC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1G,2BAA2B;IAC3B,GAAG,EAAE,UAAU,CAAC;IAChB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,2DAA2D;IAC3D,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,yCAAyC;IACzC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,6BAA6B;IAC7B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,uCAAuC;IACvC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,kDAAkD;IAClD,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,oFAAoF;IACpF,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAuB,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAkP5E"}
@@ -14,7 +14,6 @@ exports.query = query;
14
14
  const tool_1 = require("./tool");
15
15
  const strategy_tracker_1 = require("../core/strategy-tracker");
16
16
  const auto_compact_1 = require("../services/compact/auto-compact");
17
- const compact_1 = require("../services/compact/compact");
18
17
  // ============================================================================
19
18
  // query() — async generator
20
19
  // ============================================================================
@@ -36,7 +35,7 @@ const compact_1 = require("../services/compact/compact");
36
35
  async function* query(params) {
37
36
  const { messages, tools, toolExecutor, llm, maxTurns, // 无默认值,可选参数
38
37
  abortSignal, streamCallbacks, costTracker, strategyTracker = (0, strategy_tracker_1.createStrategyTracker)({ maxAttempts: 5 }), // 增加到 5 次
39
- } = params;
38
+ harness, } = params;
40
39
  const openaiTools = (0, tool_1.toOpenAITools)(tools);
41
40
  let turn = 0;
42
41
  // 无限循环,依赖安全机制停止
@@ -62,8 +61,10 @@ async function* query(params) {
62
61
  };
63
62
  return;
64
63
  }
65
- // Stream the LLM response
66
- const response = await llm.chatStream(messages, streamCallbacks, openaiTools);
64
+ // Stream the LLM response. Harness context is injected into a cloned
65
+ // request payload so the durable conversation history stays clean.
66
+ const requestMessages = harness ? harness.assembleMessages(messages) : messages;
67
+ const response = await llm.chatStream(requestMessages, streamCallbacks, openaiTools);
67
68
  // Save assistant message to history
68
69
  const assistantMsg = {
69
70
  role: 'assistant',
@@ -73,6 +74,7 @@ async function* query(params) {
73
74
  assistantMsg.tool_calls = response.toolCalls;
74
75
  }
75
76
  messages.push(assistantMsg);
77
+ harness?.recordAssistantResponse(response);
76
78
  // Handle tool calls
77
79
  if (response.toolCalls && response.toolCalls.length > 0) {
78
80
  for (const tc of response.toolCalls) {
@@ -99,10 +101,14 @@ async function* query(params) {
99
101
  callId: tc.id,
100
102
  };
101
103
  const start = Date.now();
104
+ const drift = harness?.beforeToolUse({ name: tc.function.name, args });
102
105
  // Permission check before execution
103
106
  let result;
104
107
  const tool = tools.find(t => t.name === tc.function.name);
105
- if (tool?.checkPermissions && params.toolContext) {
108
+ if (drift?.status === 'block') {
109
+ result = harness.asToolBlockedResult(drift);
110
+ }
111
+ else if (tool?.checkPermissions && params.toolContext) {
106
112
  const perm = tool.checkPermissions(args, params.toolContext);
107
113
  if (perm.behavior === 'deny') {
108
114
  result = JSON.stringify({
@@ -163,6 +169,14 @@ async function* query(params) {
163
169
  toolError = 'Invalid JSON result';
164
170
  }
165
171
  strategyTracker.recordResult(attemptId, strategyResult, errorMsg, duration);
172
+ harness?.recordToolResult({
173
+ name: tc.function.name,
174
+ args,
175
+ result,
176
+ duration,
177
+ success: toolSuccess,
178
+ error: toolError,
179
+ });
166
180
  yield {
167
181
  type: 'tool_result',
168
182
  name: tc.function.name,
@@ -200,22 +214,27 @@ async function* query(params) {
200
214
  // Continue to next turn
201
215
  continue;
202
216
  }
203
- // No tool calls — done
217
+ // No tool calls — done, unless the harness requires one more pass.
218
+ const completionGate = harness?.beforeComplete();
219
+ if (completionGate && !completionGate.canComplete) {
220
+ messages.push(harness.asCompletionBlockedMessage(completionGate));
221
+ continue;
222
+ }
204
223
  yield { type: 'message', role: 'assistant', content: response.content };
205
224
  // Record usage to cost tracker
206
225
  if (costTracker && response.usage) {
207
226
  costTracker.record(response.usage, { model: response.model });
208
227
  }
209
- // Auto-compact: check if conversation exceeds threshold
210
- const compactThreshold = 50;
211
- if ((0, compact_1.needsCompact)(messages, compactThreshold)) {
212
- const autoCompact = (0, auto_compact_1.getAutoCompact)({ threshold: compactThreshold });
213
- const compacted = await autoCompact.checkAndCompact(messages);
214
- if (compacted.length < messages.length) {
215
- // Replace messages array content (keep reference for caller)
216
- messages.length = 0;
217
- messages.push(...compacted);
218
- }
228
+ // Auto-compact at 95% context usage (token-based)
229
+ const totalTokens = response.usage?.promptTokens ?? 0;
230
+ const autoCompact = (0, auto_compact_1.getAutoCompact)({
231
+ modelId: response.model || llm.getModel(),
232
+ getContextCapsule: harness ? () => harness.getCapsule() : undefined,
233
+ });
234
+ const compacted = await autoCompact.checkAndCompact(messages, totalTokens);
235
+ if (compacted.length < messages.length) {
236
+ messages.length = 0;
237
+ messages.push(...compacted);
219
238
  }
220
239
  yield {
221
240
  type: 'complete',
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/framework/query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/framework/query.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;AA0EH,sBAkPC;AAtTD,iCAAuC;AACvC,+DAA4G;AAC5G,mEAAkE;AA+ClE,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E;;;;;;;;;;;;;;GAcG;AACI,KAAK,SAAS,CAAC,CAAC,KAAK,CAAC,MAAmB;IAC9C,MAAM,EACJ,QAAQ,EACR,KAAK,EACL,YAAY,EACZ,GAAG,EACH,QAAQ,EAAG,YAAY;IACvB,WAAW,EACX,eAAe,EACf,WAAW,EACX,eAAe,GAAG,IAAA,wCAAqB,EAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,EAAG,UAAU;IACxE,OAAO,GACR,GAAG,MAAM,CAAC;IAEX,MAAM,WAAW,GAAG,IAAA,oBAAa,EAAC,KAAK,CAAsB,CAAC;IAC9D,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,gBAAgB;IAChB,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,EAAE,CAAC;QAEP,cAAc;QACd,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC;YACzB,MAAM;gBACJ,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,sBAAsB;gBAC/B,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE;aACtB,CAAC;YACF,OAAO;QACT,CAAC;QAED,gBAAgB;QAChB,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC;QAE7D,uDAAuD;QACvD,IAAI,QAAQ,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;YAChC,MAAM;gBACJ,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,0BAA0B,QAAQ,4BAA4B;gBACvE,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE;aACtB,CAAC;YACF,OAAO;QACT,CAAC;QAED,qEAAqE;QACrE,mEAAmE;QACnE,MAAM,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAChF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,eAAe,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC;QAErF,oCAAoC;QACpC,MAAM,YAAY,GAAY;YAC5B,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,QAAQ,CAAC,OAAO;SAC1B,CAAC;QACF,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YACvB,YAAY,CAAC,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC;QAC/C,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5B,OAAO,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAE3C,oBAAoB;QACpB,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACpC,yEAAyE;gBACzE,IAAI,IAAI,GAA4B,EAAE,CAAC;gBACvC,MAAM,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;gBAC5C,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,CAAC;wBACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC7B,CAAC;oBAAC,MAAM,CAAC;wBACP,IAAI,GAAG,EAAE,CAAC;oBACZ,CAAC;gBACH,CAAC;gBAED,gEAAgE;gBAChE,EAAE,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAE7C,+BAA+B;gBAC/B,MAAM,SAAS,GAAG,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAClE,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAErD,MAAM;oBACJ,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;oBACtB,IAAI;oBACJ,MAAM,EAAE,EAAE,CAAC,EAAE;iBACd,CAAC;gBAEF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAEzB,MAAM,KAAK,GAAG,OAAO,EAAE,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBAEvE,oCAAoC;gBACpC,IAAI,MAAc,CAAC;gBACnB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAE1D,IAAI,KAAK,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;oBAC9B,MAAM,GAAG,OAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;gBAC/C,CAAC;qBAAM,IAAI,IAAI,EAAE,gBAAgB,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;oBACxD,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;oBAE7D,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;wBAC7B,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;4BACtB,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,IAAI,CAAC,MAAM,IAAI,mBAAmB;yBAC1C,CAAC,CAAC;oBACL,CAAC;yBAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;wBAC1E,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;4BACtB,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,8BAA8B;yBAC9D,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,iCAAiC;wBACjC,IAAI,CAAC;4BACH,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;wBACnE,CAAC;wBAAC,OAAO,GAAQ,EAAE,CAAC;4BAClB,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;gCACtB,OAAO,EAAE,KAAK;gCACd,KAAK,EAAE,yBAAyB,GAAG,CAAC,OAAO,EAAE;6BAC9C,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,iCAAiC;oBACjC,IAAI,CAAC;wBACH,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;oBACnE,CAAC;oBAAC,OAAO,GAAQ,EAAE,CAAC;wBAClB,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;4BACtB,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,yBAAyB,GAAG,CAAC,OAAO,EAAE;yBAC9C,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;gBAEpC,wCAAwC;gBACxC,IAAI,WAAW,GAAG,IAAI,CAAC;gBACvB,IAAI,SAA6B,CAAC;gBAClC,IAAI,cAAc,GAAyB,SAAS,CAAC;gBACrD,IAAI,QAA4B,CAAC;gBACjC,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAClC,WAAW,GAAG,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;oBACtC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;oBACzB,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;wBAC7B,cAAc,GAAG,QAAQ,CAAC;wBAC1B,QAAQ,GAAG,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC;oBAC7C,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,cAAc,GAAG,QAAQ,CAAC;oBAC1B,QAAQ,GAAG,gBAAgB,CAAC;oBAC5B,WAAW,GAAG,KAAK,CAAC;oBACpB,SAAS,GAAG,qBAAqB,CAAC;gBACpC,CAAC;gBACD,eAAe,CAAC,YAAY,CAAC,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAC5E,OAAO,EAAE,gBAAgB,CAAC;oBACxB,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;oBACtB,IAAI;oBACJ,MAAM;oBACN,QAAQ;oBACR,OAAO,EAAE,WAAW;oBACpB,KAAK,EAAE,SAAS;iBACjB,CAAC,CAAC;gBAEH,MAAM;oBACJ,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;oBACtB,MAAM;oBACN,QAAQ;oBACR,OAAO,EAAE,WAAW,EAAI,2BAA2B;oBACnD,KAAK,EAAE,SAAS,EAAQ,yBAAyB;iBAClD,CAAC;gBAEF,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,MAAM;oBACf,YAAY,EAAE,EAAE,CAAC,EAAE;iBACpB,CAAC,CAAC;gBAEH,6BAA6B;gBAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,QAAQ,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,iBAAiB,EAAE,CAAC,QAAQ,CAAC,IAAI,YAAY,SAAS,uDAAuD;qBACvH,CAAC,CAAC;gBACL,CAAC;gBAED,qDAAqD;gBACrD,IAAI,eAAe,CAAC,WAAW,EAAE,EAAE,CAAC;oBAClC,MAAM,UAAU,GAAG,eAAe,CAAC,kBAAkB,EAAE,CAAC;oBACxD,IAAI,UAAU,EAAE,CAAC;wBACf,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,UAAU,EAAE,CAAC;wBACjD,iDAAiD;wBACjD,QAAQ,CAAC,IAAI,CAAC;4BACZ,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE,UAAU;yBACpB,CAAC,CAAC;wBACH,eAAe,CAAC,KAAK,EAAE,CAAC;oBAC1B,CAAC;gBACH,CAAC;YACH,CAAC;YAED,wBAAwB;YACxB,SAAS;QACX,CAAC;QAED,mEAAmE;QACnE,MAAM,cAAc,GAAG,OAAO,EAAE,cAAc,EAAE,CAAC;QACjD,IAAI,cAAc,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;YAClD,QAAQ,CAAC,IAAI,CAAC,OAAQ,CAAC,0BAA0B,CAAC,cAAc,CAAC,CAAC,CAAC;YACnE,SAAS;QACX,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;QAExE,+BAA+B;QAC/B,IAAI,WAAW,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YAClC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,kDAAkD;QAClD,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,IAAA,6BAAc,EAAC;YACjC,OAAO,EAAE,QAAQ,CAAC,KAAK,IAAI,GAAG,CAAC,QAAQ,EAAE;YACzC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS;SACpE,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,eAAe,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC3E,IAAI,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;YACvC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACpB,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAC9B,CAAC;QAED,MAAM;YACJ,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;SACtB,CAAC;QACF,OAAO;IACT,CAAC;IACD,uEAAuE;AACzE,CAAC"}
@@ -10,6 +10,7 @@ import type { OpenHorseCLIConfig } from '../services/config';
10
10
  import type { PermissionMode } from '../commands/types';
11
11
  import { CostTracker } from '../core/cost-tracker';
12
12
  import type { TodoItem } from './tool-state';
13
+ import type { HarnessState } from '../harness';
13
14
  export interface AppState {
14
15
  config: OpenHorseCLIConfig;
15
16
  tools: OpenHorseTool[];
@@ -32,6 +33,8 @@ export interface AppState {
32
33
  planMode: boolean;
33
34
  /** Latest plan from exit_plan_mode (mirrored from tool-state) */
34
35
  currentPlan: string | null;
36
+ /** Context Harness serializable state */
37
+ harnessState?: HarnessState;
35
38
  }
36
39
  type Listener = (state: AppState) => void;
37
40
  export declare class Store {
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/framework/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAM7C,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,mBAAmB,EAAE,OAAO,EAAE,CAAC;IAC/B,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACtE,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,aAAa,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,mEAAmE;IACnE,QAAQ,EAAE,OAAO,CAAC;IAClB,iEAAiE;IACjE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAMD,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;AAE1C,qBAAa,KAAK;IAChB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,SAAS,CAA4B;gBAEjC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,qBAAqB,GAAG,cAAc,GAAG,YAAY,GAAG,gBAAgB,GAAG,aAAa,GAAG,eAAe,GAAG,eAAe,GAAG,OAAO,GAAG,UAAU,GAAG,aAAa,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAgB5N,qCAAqC;IACrC,WAAW,IAAI,QAAQ;IAIvB,mEAAmE;IACnE,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI;IAKzC,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI;IAO1C,8CAA8C;IAC9C,iBAAiB,IAAI,IAAI;IAOzB,wCAAwC;IACxC,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAIjC,4DAA4D;IAC5D,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAM9B,sCAAsC;IACtC,aAAa,CAAC,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAI9E,uCAAuC;IACvC,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAI7C,iDAAiD;IACjD,mBAAmB,IAAI,cAAc;CAMtC"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/framework/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,mBAAmB,EAAE,OAAO,EAAE,CAAC;IAC/B,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACtE,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,aAAa,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,mEAAmE;IACnE,QAAQ,EAAE,OAAO,CAAC;IAClB,iEAAiE;IACjE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,yCAAyC;IACzC,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAMD,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;AAE1C,qBAAa,KAAK;IAChB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,SAAS,CAA4B;gBAEjC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,qBAAqB,GAAG,cAAc,GAAG,YAAY,GAAG,gBAAgB,GAAG,aAAa,GAAG,eAAe,GAAG,eAAe,GAAG,OAAO,GAAG,UAAU,GAAG,aAAa,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAgB5N,qCAAqC;IACrC,WAAW,IAAI,QAAQ;IAIvB,mEAAmE;IACnE,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI;IAKzC,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI;IAO1C,8CAA8C;IAC9C,iBAAiB,IAAI,IAAI;IAOzB,wCAAwC;IACxC,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAIjC,4DAA4D;IAC5D,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAM9B,sCAAsC;IACtC,aAAa,CAAC,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAI9E,uCAAuC;IACvC,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAI7C,iDAAiD;IACjD,mBAAmB,IAAI,cAAc;CAMtC"}
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/framework/store.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAMH,uDAAmD;AAkCnD,MAAa,KAAK;IAIhB,YAAY,OAAgN;QAFpN,cAAS,GAAkB,IAAI,GAAG,EAAE,CAAC;QAG3C,IAAI,CAAC,KAAK,GAAG;YACX,mBAAmB,EAAE,EAAE;YACvB,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,IAAI;YAChB,cAAc,EAAE,SAAS;YACzB,WAAW,EAAE,IAAI,0BAAW,EAAE;YAC9B,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,IAAI;YACjB,GAAG,OAAO;SACC,CAAC;IAChB,CAAC;IAED,qCAAqC;IACrC,WAAW;QACT,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,mEAAmE;IACnE,SAAS,CAAC,QAAkB;QAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,8DAA8D;IAC9D,QAAQ,CAAC,OAA0B;QACjC,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC;QAC3C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,iBAAiB;QACf,IAAI,CAAC,QAAQ,CAAC;YACZ,mBAAmB,EAAE,EAAE;YACvB,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;IACL,CAAC;IAED,wCAAwC;IACxC,aAAa,CAAC,GAAY;QACxB,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,4DAA4D;IAC5D,UAAU,CAAC,GAAY;QACrB,IAAI,CAAC,QAAQ,CAAC;YACZ,mBAAmB,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;IAED,sCAAsC;IACtC,aAAa,CAAC,KAAyD;QACrE,IAAI,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,uCAAuC;IACvC,iBAAiB,CAAC,IAAoB;QACpC,IAAI,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,iDAAiD;IACjD,mBAAmB;QACjB,MAAM,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5C,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AA5ED,sBA4EC"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/framework/store.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAMH,uDAAmD;AAqCnD,MAAa,KAAK;IAIhB,YAAY,OAAgN;QAFpN,cAAS,GAAkB,IAAI,GAAG,EAAE,CAAC;QAG3C,IAAI,CAAC,KAAK,GAAG;YACX,mBAAmB,EAAE,EAAE;YACvB,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,IAAI;YAChB,cAAc,EAAE,SAAS;YACzB,WAAW,EAAE,IAAI,0BAAW,EAAE;YAC9B,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,IAAI;YACjB,GAAG,OAAO;SACC,CAAC;IAChB,CAAC;IAED,qCAAqC;IACrC,WAAW;QACT,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,mEAAmE;IACnE,SAAS,CAAC,QAAkB;QAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,8DAA8D;IAC9D,QAAQ,CAAC,OAA0B;QACjC,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC;QAC3C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,iBAAiB;QACf,IAAI,CAAC,QAAQ,CAAC;YACZ,mBAAmB,EAAE,EAAE;YACvB,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;IACL,CAAC;IAED,wCAAwC;IACxC,aAAa,CAAC,GAAY;QACxB,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,4DAA4D;IAC5D,UAAU,CAAC,GAAY;QACrB,IAAI,CAAC,QAAQ,CAAC;YACZ,mBAAmB,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;IAED,sCAAsC;IACtC,aAAa,CAAC,KAAyD;QACrE,IAAI,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,uCAAuC;IACvC,iBAAiB,CAAC,IAAoB;QACpC,IAAI,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,iDAAiD;IACjD,mBAAmB;QACjB,MAAM,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5C,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AA5ED,sBA4EC"}
@@ -0,0 +1,5 @@
1
+ import type { Message } from '../services/llm';
2
+ import type { HarnessConfig, HarnessState } from './types';
3
+ export declare function renderHarnessContext(state: HarnessState, modelId: string, config?: HarnessConfig): string;
4
+ export declare function assembleHarnessMessages(messages: Message[], state: HarnessState, modelId: string, config?: HarnessConfig): Message[];
5
+ //# sourceMappingURL=assembler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assembler.d.ts","sourceRoot":"","sources":["../../src/harness/assembler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG/C,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAW3D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,aAAkB,GAAG,MAAM,CAwC7G;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,aAAkB,GACzB,OAAO,EAAE,CAkBX"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderHarnessContext = renderHarnessContext;
4
+ exports.assembleHarnessMessages = assembleHarnessMessages;
5
+ const model_context_1 = require("../services/model-context");
6
+ const capsule_1 = require("./capsule");
7
+ function estimateTokens(text) {
8
+ return Math.ceil(text.length / 4);
9
+ }
10
+ function truncateByChars(text, maxChars) {
11
+ if (text.length <= maxChars)
12
+ return text;
13
+ return text.slice(0, Math.max(0, maxChars - 80)) + '\n[truncated by Context Harness]';
14
+ }
15
+ function renderHarnessContext(state, modelId, config = {}) {
16
+ const contract = state.contract;
17
+ if (!contract && state.ledger.length === 0 && !state.capsule)
18
+ return '';
19
+ const contextWindow = (0, model_context_1.getModelContextWindow)(modelId);
20
+ const evidenceBudgetRatio = config.evidenceBudgetRatio ?? 0.3;
21
+ const maxChars = Math.max(2000, Math.floor(contextWindow * evidenceBudgetRatio * 4 * 0.08));
22
+ const lines = ['[OpenHorse Context Harness]'];
23
+ if (contract) {
24
+ lines.push('', 'Task Contract:');
25
+ lines.push(`- Objective: ${contract.objective}`);
26
+ for (const req of contract.requirements.slice(0, 8)) {
27
+ lines.push(`- Requirement: ${req}`);
28
+ }
29
+ for (const item of contract.successCriteria.slice(0, 6)) {
30
+ lines.push(`- Success: ${item}`);
31
+ }
32
+ for (const item of contract.prohibitions.slice(0, 6)) {
33
+ lines.push(`- Prohibition: ${item}`);
34
+ }
35
+ }
36
+ if (state.capsule) {
37
+ lines.push('', (0, capsule_1.renderContextCapsule)(state.capsule));
38
+ }
39
+ const evidence = [...state.ledger]
40
+ .sort((a, b) => b.importance - a.importance || b.createdAt - a.createdAt)
41
+ .slice(0, 10);
42
+ if (evidence.length > 0) {
43
+ lines.push('', 'Relevant Evidence:');
44
+ for (const entry of evidence) {
45
+ lines.push(`- [${entry.type}] ${entry.content}`);
46
+ }
47
+ }
48
+ lines.push('', 'Use this context to stay on the current task. Do not claim verification unless it is listed above or produced by a tool result in this turn.');
49
+ const rendered = lines.join('\n');
50
+ return truncateByChars(rendered, Math.max(maxChars, estimateTokens(rendered) * 2));
51
+ }
52
+ function assembleHarnessMessages(messages, state, modelId, config = {}) {
53
+ if (config.enabled === false)
54
+ return messages;
55
+ const harnessContext = renderHarnessContext(state, modelId, config);
56
+ if (!harnessContext.trim())
57
+ return messages;
58
+ const cloned = messages.map(message => ({ ...message }));
59
+ const systemIndex = cloned.findIndex(message => message.role === 'system');
60
+ if (systemIndex >= 0) {
61
+ cloned[systemIndex] = {
62
+ ...cloned[systemIndex],
63
+ content: `${cloned[systemIndex].content}\n\n---\n${harnessContext}`,
64
+ };
65
+ }
66
+ else {
67
+ cloned.unshift({ role: 'system', content: harnessContext });
68
+ }
69
+ return cloned;
70
+ }
71
+ //# sourceMappingURL=assembler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assembler.js","sourceRoot":"","sources":["../../src/harness/assembler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ContextCapsule, ContextLedgerEntry, TaskContract } from './types';
2
+ export declare function createContextCapsule(contract: TaskContract | undefined, entries: ContextLedgerEntry[]): ContextCapsule;
3
+ export declare function renderContextCapsule(capsule: ContextCapsule): string;
4
+ //# sourceMappingURL=capsule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capsule.d.ts","sourceRoot":"","sources":["../../src/harness/capsule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAY,YAAY,EAAE,MAAM,SAAS,CAAC;AAqB1F,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,YAAY,GAAG,SAAS,EAClC,OAAO,EAAE,kBAAkB,EAAE,GAC5B,cAAc,CAgDhB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAsCpE"}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createContextCapsule = createContextCapsule;
4
+ exports.renderContextCapsule = renderContextCapsule;
5
+ function metadataString(entry, key) {
6
+ const value = entry.metadata?.[key];
7
+ return typeof value === 'string' && value ? value : undefined;
8
+ }
9
+ function metadataBool(entry, key) {
10
+ const value = entry.metadata?.[key];
11
+ return typeof value === 'boolean' ? value : undefined;
12
+ }
13
+ function unique(items) {
14
+ return [...new Set(items.filter(Boolean))];
15
+ }
16
+ function compactLine(text, max = 160) {
17
+ const normalized = text.replace(/\s+/g, ' ').trim();
18
+ return normalized.length > max ? normalized.slice(0, max - 3) + '...' : normalized;
19
+ }
20
+ function createContextCapsule(contract, entries) {
21
+ const now = Date.now();
22
+ const keyFacts = [...entries]
23
+ .filter(entry => entry.importance >= 4 || entry.type === 'user_requirement')
24
+ .sort((a, b) => b.importance - a.importance || b.createdAt - a.createdAt)
25
+ .slice(0, 12);
26
+ const todoEntries = entries.filter(entry => entry.type === 'todo');
27
+ const currentPlan = todoEntries.slice(0, 8).map((entry, index) => ({
28
+ id: entry.id,
29
+ title: compactLine(entry.content),
30
+ status: index === 0 ? 'in_progress' : 'pending',
31
+ }));
32
+ const verificationEntries = entries.filter(entry => entry.type === 'verification' || entry.type === 'test_result');
33
+ const passed = verificationEntries
34
+ .filter(entry => metadataBool(entry, 'success') === true)
35
+ .map(entry => compactLine(entry.content));
36
+ const failed = verificationEntries
37
+ .filter(entry => metadataBool(entry, 'success') === false)
38
+ .map(entry => compactLine(entry.content));
39
+ const commandsRun = unique(verificationEntries.map(entry => metadataString(entry, 'command') || '').filter(Boolean));
40
+ const changedFiles = unique(entries.map(entry => metadataString(entry, 'changedFile') || metadataString(entry, 'path') || '').filter(Boolean));
41
+ const completed = entries
42
+ .filter(entry => entry.type === 'decision' || (entry.type === 'tool_result' && metadataBool(entry, 'success') === true))
43
+ .slice(-8)
44
+ .map(entry => compactLine(entry.content));
45
+ const openTodos = currentPlan.length > 0
46
+ ? currentPlan.filter(step => step.status !== 'completed').map(step => step.title)
47
+ : (contract?.successCriteria ?? []).map(item => compactLine(item));
48
+ return {
49
+ contract,
50
+ currentPlan,
51
+ completed,
52
+ openTodos,
53
+ keyFacts,
54
+ changedFiles,
55
+ verification: {
56
+ commandsRun,
57
+ passed,
58
+ failed,
59
+ warnings: entries.filter(entry => entry.type === 'risk' || entry.type === 'blocker').slice(-5).map(entry => compactLine(entry.content)),
60
+ },
61
+ nextAction: openTodos[0] || (contract ? `Continue: ${contract.objective}` : 'Continue the current task.'),
62
+ createdAt: now,
63
+ updatedAt: now,
64
+ };
65
+ }
66
+ function renderContextCapsule(capsule) {
67
+ const contract = capsule.contract;
68
+ const lines = ['## Context Capsule'];
69
+ if (contract) {
70
+ lines.push('', `Objective: ${contract.objective}`);
71
+ if (contract.requirements.length > 0) {
72
+ lines.push('Requirements:');
73
+ lines.push(...contract.requirements.map(item => `- ${item}`));
74
+ }
75
+ if (contract.prohibitions.length > 0) {
76
+ lines.push('Prohibitions:');
77
+ lines.push(...contract.prohibitions.map(item => `- ${item}`));
78
+ }
79
+ }
80
+ if (capsule.openTodos.length > 0) {
81
+ lines.push('', 'Open todos:');
82
+ lines.push(...capsule.openTodos.map(item => `- ${item}`));
83
+ }
84
+ if (capsule.keyFacts.length > 0) {
85
+ lines.push('', 'Key facts:');
86
+ lines.push(...capsule.keyFacts.slice(0, 8).map(entry => `- ${entry.content}`));
87
+ }
88
+ if (capsule.verification.passed.length > 0 || capsule.verification.failed.length > 0) {
89
+ lines.push('', 'Verification:');
90
+ lines.push(...capsule.verification.passed.map(item => `- Passed: ${item}`));
91
+ lines.push(...capsule.verification.failed.map(item => `- Failed: ${item}`));
92
+ }
93
+ if (capsule.changedFiles.length > 0) {
94
+ lines.push('', `Changed files: ${capsule.changedFiles.join(', ')}`);
95
+ }
96
+ lines.push('', `Next action: ${capsule.nextAction}`);
97
+ return lines.join('\n');
98
+ }
99
+ //# sourceMappingURL=capsule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capsule.js","sourceRoot":"","sources":["../../src/harness/capsule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { LLMResponse, Message } from '../services/llm';
2
+ import type { CompletionGateResult, ContextCapsule, DriftCheckResult, HarnessConfig, HarnessState } from './types';
3
+ export interface ContextHarnessOptions {
4
+ cwd: string;
5
+ modelId: string;
6
+ state?: HarnessState;
7
+ config?: HarnessConfig;
8
+ }
9
+ export declare class ContextHarness {
10
+ private readonly cwd;
11
+ private readonly modelId;
12
+ private readonly config;
13
+ private contract;
14
+ private ledger;
15
+ private capsule?;
16
+ private completionBlockCount;
17
+ constructor(options: ContextHarnessOptions);
18
+ updateContractFromUserInput(input: string): void;
19
+ assembleMessages(messages: Message[]): Message[];
20
+ recordAssistantResponse(response: LLMResponse): void;
21
+ beforeToolUse(params: {
22
+ name: string;
23
+ args: Record<string, unknown>;
24
+ }): DriftCheckResult;
25
+ recordToolResult(params: {
26
+ name: string;
27
+ args: Record<string, unknown>;
28
+ result: string;
29
+ duration: number;
30
+ success: boolean;
31
+ error?: string;
32
+ }): void;
33
+ beforeComplete(): CompletionGateResult;
34
+ asCompletionBlockedMessage(result: CompletionGateResult): Message;
35
+ asToolBlockedResult(result: DriftCheckResult): string;
36
+ getCapsule(): ContextCapsule | undefined;
37
+ toJSON(): HarnessState;
38
+ private refreshCapsule;
39
+ }
40
+ export declare function createContextHarness(options: ContextHarnessOptions): ContextHarness;
41
+ //# sourceMappingURL=context-harness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-harness.d.ts","sourceRoot":"","sources":["../../src/harness/context-harness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAM5D,OAAO,KAAK,EACV,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,YAAY,EACb,MAAM,SAAS,CAAC;AAcjB,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAC,CAAiB;IACjC,OAAO,CAAC,oBAAoB,CAAS;gBAEzB,OAAO,EAAE,qBAAqB;IAU1C,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAShD,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE;IAIhD,uBAAuB,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI;IAQpD,aAAa,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,gBAAgB;IAsBxF,gBAAgB,CAAC,MAAM,EAAE;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,IAAI;IAMR,cAAc,IAAI,oBAAoB;IAgCtC,0BAA0B,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO;IAOjE,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM;IAQrD,UAAU,IAAI,cAAc,GAAG,SAAS;IAKxC,MAAM,IAAI,YAAY;IAUtB,OAAO,CAAC,cAAc;CAIvB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CAEnF"}