@zhixuan92/multi-model-agent 3.12.7 → 4.0.1

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 (187) hide show
  1. package/README.md +10 -4
  2. package/dist/cli/install-skill.d.ts +7 -7
  3. package/dist/cli/install-skill.d.ts.map +1 -1
  4. package/dist/cli/install-skill.js +56 -11
  5. package/dist/cli/install-skill.js.map +1 -1
  6. package/dist/cli/serve.d.ts.map +1 -1
  7. package/dist/cli/serve.js +17 -3
  8. package/dist/cli/serve.js.map +1 -1
  9. package/dist/cli/update-skills.js +3 -3
  10. package/dist/cli/update-skills.js.map +1 -1
  11. package/dist/http/async-dispatch.d.ts +1 -1
  12. package/dist/http/async-dispatch.d.ts.map +1 -1
  13. package/dist/http/async-dispatch.js +3 -38
  14. package/dist/http/async-dispatch.js.map +1 -1
  15. package/dist/http/cwd-validator.d.ts.map +1 -1
  16. package/dist/http/cwd-validator.js +3 -0
  17. package/dist/http/cwd-validator.js.map +1 -1
  18. package/dist/http/execution-context.d.ts +8 -6
  19. package/dist/http/execution-context.d.ts.map +1 -1
  20. package/dist/http/execution-context.js +33 -15
  21. package/dist/http/execution-context.js.map +1 -1
  22. package/dist/http/handler-deps.d.ts +11 -3
  23. package/dist/http/handler-deps.d.ts.map +1 -1
  24. package/dist/http/handlers/control/batch-slice.d.ts +1 -1
  25. package/dist/http/handlers/control/batch-slice.d.ts.map +1 -1
  26. package/dist/http/handlers/control/batch.d.ts +1 -2
  27. package/dist/http/handlers/control/batch.d.ts.map +1 -1
  28. package/dist/http/handlers/control/batch.js +0 -15
  29. package/dist/http/handlers/control/batch.js.map +1 -1
  30. package/dist/http/handlers/control/context-blocks.d.ts +7 -5
  31. package/dist/http/handlers/control/context-blocks.d.ts.map +1 -1
  32. package/dist/http/handlers/control/context-blocks.js +34 -13
  33. package/dist/http/handlers/control/context-blocks.js.map +1 -1
  34. package/dist/http/handlers/control/retry.d.ts +1 -1
  35. package/dist/http/handlers/control/retry.d.ts.map +1 -1
  36. package/dist/http/handlers/control/retry.js +32 -20
  37. package/dist/http/handlers/control/retry.js.map +1 -1
  38. package/dist/http/handlers/introspection/health.d.ts +16 -10
  39. package/dist/http/handlers/introspection/health.d.ts.map +1 -1
  40. package/dist/http/handlers/introspection/health.js +9 -12
  41. package/dist/http/handlers/introspection/health.js.map +1 -1
  42. package/dist/http/handlers/introspection/status.d.ts +1 -1
  43. package/dist/http/handlers/introspection/status.d.ts.map +1 -1
  44. package/dist/http/handlers/introspection/status.js +1 -1
  45. package/dist/http/handlers/introspection/status.js.map +1 -1
  46. package/dist/http/handlers/introspection/tools-list.d.ts +1 -1
  47. package/dist/http/handlers/introspection/tools-list.d.ts.map +1 -1
  48. package/dist/http/handlers/introspection/tools-list.js +1 -1
  49. package/dist/http/handlers/introspection/tools-list.js.map +1 -1
  50. package/dist/http/handlers/tools/audit.d.ts +1 -1
  51. package/dist/http/handlers/tools/audit.d.ts.map +1 -1
  52. package/dist/http/handlers/tools/audit.js +14 -8
  53. package/dist/http/handlers/tools/audit.js.map +1 -1
  54. package/dist/http/handlers/tools/debug.d.ts +1 -1
  55. package/dist/http/handlers/tools/debug.d.ts.map +1 -1
  56. package/dist/http/handlers/tools/debug.js +14 -8
  57. package/dist/http/handlers/tools/debug.js.map +1 -1
  58. package/dist/http/handlers/tools/delegate.d.ts +1 -1
  59. package/dist/http/handlers/tools/delegate.d.ts.map +1 -1
  60. package/dist/http/handlers/tools/delegate.js +14 -21
  61. package/dist/http/handlers/tools/delegate.js.map +1 -1
  62. package/dist/http/handlers/tools/execute-plan.d.ts +1 -1
  63. package/dist/http/handlers/tools/execute-plan.d.ts.map +1 -1
  64. package/dist/http/handlers/tools/execute-plan.js +18 -25
  65. package/dist/http/handlers/tools/execute-plan.js.map +1 -1
  66. package/dist/http/handlers/tools/explore.d.ts +1 -1
  67. package/dist/http/handlers/tools/explore.d.ts.map +1 -1
  68. package/dist/http/handlers/tools/explore.js +20 -13
  69. package/dist/http/handlers/tools/explore.js.map +1 -1
  70. package/dist/http/handlers/tools/investigate.d.ts +1 -1
  71. package/dist/http/handlers/tools/investigate.d.ts.map +1 -1
  72. package/dist/http/handlers/tools/investigate.js +28 -22
  73. package/dist/http/handlers/tools/investigate.js.map +1 -1
  74. package/dist/http/handlers/tools/retry.d.ts +1 -1
  75. package/dist/http/handlers/tools/retry.d.ts.map +1 -1
  76. package/dist/http/handlers/tools/retry.js +65 -17
  77. package/dist/http/handlers/tools/retry.js.map +1 -1
  78. package/dist/http/handlers/tools/review.d.ts +1 -1
  79. package/dist/http/handlers/tools/review.d.ts.map +1 -1
  80. package/dist/http/handlers/tools/review.js +14 -8
  81. package/dist/http/handlers/tools/review.js.map +1 -1
  82. package/dist/http/handlers/tools/verify.d.ts +1 -1
  83. package/dist/http/handlers/tools/verify.d.ts.map +1 -1
  84. package/dist/http/handlers/tools/verify.js +14 -8
  85. package/dist/http/handlers/tools/verify.js.map +1 -1
  86. package/dist/http/middleware/caller-identity.js +1 -1
  87. package/dist/http/middleware/caller-identity.js.map +1 -1
  88. package/dist/http/project-registry.d.ts.map +1 -1
  89. package/dist/http/project-registry.js +0 -2
  90. package/dist/http/project-registry.js.map +1 -1
  91. package/dist/http/request-observability.js +2 -2
  92. package/dist/http/request-observability.js.map +1 -1
  93. package/dist/http/request-pipeline.d.ts +3 -2
  94. package/dist/http/request-pipeline.d.ts.map +1 -1
  95. package/dist/http/request-pipeline.js +1 -1
  96. package/dist/http/request-pipeline.js.map +1 -1
  97. package/dist/http/server.d.ts +1 -1
  98. package/dist/http/server.d.ts.map +1 -1
  99. package/dist/http/server.js +127 -55
  100. package/dist/http/server.js.map +1 -1
  101. package/dist/http/types.d.ts +8 -1
  102. package/dist/http/types.d.ts.map +1 -1
  103. package/dist/http/wire/delegate-wire.d.ts +4 -0
  104. package/dist/http/wire/delegate-wire.d.ts.map +1 -0
  105. package/dist/http/wire/delegate-wire.js +16 -0
  106. package/dist/http/wire/delegate-wire.js.map +1 -0
  107. package/dist/http/wire/execute-plan-wire.d.ts +18 -0
  108. package/dist/http/wire/execute-plan-wire.d.ts.map +1 -0
  109. package/dist/http/wire/execute-plan-wire.js +26 -0
  110. package/dist/http/wire/execute-plan-wire.js.map +1 -0
  111. package/dist/http/wire/register-all-handlers.d.ts +3 -0
  112. package/dist/http/wire/register-all-handlers.d.ts.map +1 -0
  113. package/dist/http/wire/register-all-handlers.js +25 -0
  114. package/dist/http/wire/register-all-handlers.js.map +1 -0
  115. package/dist/http/wire/registry.d.ts +3 -0
  116. package/dist/http/wire/registry.d.ts.map +1 -0
  117. package/dist/http/wire/registry.js +20 -0
  118. package/dist/http/wire/registry.js.map +1 -0
  119. package/dist/install/discover.d.ts +9 -1
  120. package/dist/install/discover.d.ts.map +1 -1
  121. package/dist/install/discover.js +14 -1
  122. package/dist/install/discover.js.map +1 -1
  123. package/dist/install/headers.d.ts +1 -1
  124. package/dist/install/headers.d.ts.map +1 -1
  125. package/dist/install/manifest-resolve.d.ts +7 -1
  126. package/dist/install/manifest-resolve.d.ts.map +1 -1
  127. package/dist/install/manifest-resolve.js +23 -4
  128. package/dist/install/manifest-resolve.js.map +1 -1
  129. package/dist/install/manifest.d.ts.map +1 -1
  130. package/dist/install/manifest.js +2 -26
  131. package/dist/install/manifest.js.map +1 -1
  132. package/dist/install/missing-skills.d.ts +8 -1
  133. package/dist/install/missing-skills.d.ts.map +1 -1
  134. package/dist/install/missing-skills.js +9 -0
  135. package/dist/install/missing-skills.js.map +1 -1
  136. package/dist/install/orchestrate.d.ts +13 -1
  137. package/dist/install/orchestrate.d.ts.map +1 -1
  138. package/dist/install/orchestrate.js +48 -3
  139. package/dist/install/orchestrate.js.map +1 -1
  140. package/dist/install/skill-manifest-sync.d.ts +11 -0
  141. package/dist/install/skill-manifest-sync.d.ts.map +1 -0
  142. package/dist/install/skill-manifest-sync.js +65 -0
  143. package/dist/install/skill-manifest-sync.js.map +1 -0
  144. package/dist/openapi.d.ts.map +1 -1
  145. package/dist/openapi.js +88 -35
  146. package/dist/openapi.js.map +1 -1
  147. package/dist/skills/_shared/error-handling.md +1 -1
  148. package/dist/skills/_shared/polling.md +3 -4
  149. package/dist/skills/_shared/response-shape.md +5 -7
  150. package/dist/skills/_shared/verify-and-review.md +2 -2
  151. package/dist/skills/mma-audit/SKILL.md +17 -7
  152. package/dist/skills/mma-context-blocks/SKILL.md +5 -5
  153. package/dist/skills/mma-debug/SKILL.md +17 -7
  154. package/dist/skills/mma-delegate/SKILL.md +13 -2
  155. package/dist/skills/mma-execute-plan/SKILL.md +13 -4
  156. package/dist/skills/mma-explore/SKILL.md +10 -4
  157. package/dist/skills/mma-investigate/SKILL.md +18 -8
  158. package/dist/skills/mma-retry/SKILL.md +7 -1
  159. package/dist/skills/mma-review/SKILL.md +17 -7
  160. package/dist/skills/mma-verify/SKILL.md +17 -7
  161. package/dist/skills/multi-model-agent/SKILL.md +14 -15
  162. package/dist/telemetry/consent.d.ts +1 -1
  163. package/dist/telemetry/consent.d.ts.map +1 -1
  164. package/dist/telemetry/consent.js +1 -1
  165. package/dist/telemetry/consent.js.map +1 -1
  166. package/dist/telemetry/flusher.js +1 -1
  167. package/dist/telemetry/flusher.js.map +1 -1
  168. package/dist/telemetry/notice.d.ts +1 -1
  169. package/dist/telemetry/notice.d.ts.map +1 -1
  170. package/dist/telemetry/recorder.d.ts +2 -2
  171. package/dist/telemetry/recorder.d.ts.map +1 -1
  172. package/dist/telemetry/recorder.js +12 -11
  173. package/dist/telemetry/recorder.js.map +1 -1
  174. package/package.json +2 -2
  175. package/dist/http/cross-tier-guard.d.ts +0 -15
  176. package/dist/http/cross-tier-guard.d.ts.map +0 -1
  177. package/dist/http/cross-tier-guard.js +0 -30
  178. package/dist/http/cross-tier-guard.js.map +0 -1
  179. package/dist/http/handlers/control/clarifications.d.ts +0 -19
  180. package/dist/http/handlers/control/clarifications.d.ts.map +0 -1
  181. package/dist/http/handlers/control/clarifications.js +0 -58
  182. package/dist/http/handlers/control/clarifications.js.map +0 -1
  183. package/dist/http/test-provider-override.d.ts +0 -4
  184. package/dist/http/test-provider-override.d.ts.map +0 -1
  185. package/dist/http/test-provider-override.js +0 -17
  186. package/dist/http/test-provider-override.js.map +0 -1
  187. package/dist/skills/mma-clarifications/SKILL.md +0 -129
@@ -1 +1 @@
1
- {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../../src/http/handlers/tools/debug.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIlD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,CA0C/D"}
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../../src/http/handlers/tools/debug.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,CAiD/D"}
@@ -1,10 +1,9 @@
1
- import * as debug from '@zhixuan92/multi-model-agent-core/tool-schemas/debug';
2
- import { executeDebug } from '@zhixuan92/multi-model-agent-core/executors/debug';
1
+ import * as debug from '@zhixuan92/multi-model-agent-core/tools/debug/schema';
2
+ import { executeTask } from '@zhixuan92/multi-model-agent-core/lifecycle/task-executor';
3
+ import { toolConfig } from '@zhixuan92/multi-model-agent-core/tools/debug/tool-config';
3
4
  import { sendError, sendJson } from '../../errors.js';
4
5
  import { asyncDispatch } from '../../async-dispatch.js';
5
6
  import { emitRequestReceived } from '../../request-observability.js';
6
- import { assertCrossTierConfigured } from '../../cross-tier-guard.js';
7
- import { resolveReadOnlyReviewFlag } from '@zhixuan92/multi-model-agent-core/config/read-only-review-flag';
8
7
  export function buildDebugHandler(deps) {
9
8
  return async (_req, res, _params, ctx) => {
10
9
  const parsed = debug.inputSchema.safeParse(ctx.body);
@@ -14,9 +13,6 @@ export function buildDebugHandler(deps) {
14
13
  });
15
14
  return;
16
15
  }
17
- const flag = resolveReadOnlyReviewFlag();
18
- if (flag.isEnabledFor('debug_task') && !assertCrossTierConfigured(deps.config, res))
19
- return;
20
16
  const input = parsed.data;
21
17
  const cwd = ctx.cwd;
22
18
  const reserveResult = deps.projectRegistry.reserveProject(cwd);
@@ -36,7 +32,17 @@ export function buildDebugHandler(deps) {
36
32
  projectContext: pc,
37
33
  deps,
38
34
  executor: async (executionCtx) => {
39
- return executeDebug(executionCtx, input);
35
+ const callExecutor = () => executeTask(toolConfig, executionCtx, input);
36
+ if (deps.routeDispatcher) {
37
+ const result = await deps.routeDispatcher.dispatch({
38
+ route: 'debug',
39
+ toolCategory: 'read_only',
40
+ rawRequest: input,
41
+ executor: () => callExecutor(),
42
+ });
43
+ return result.body;
44
+ }
45
+ return callExecutor();
40
46
  },
41
47
  });
42
48
  await emitRequestReceived({ config: deps.config, batchId, route: _req.url ?? '', parsed: input });
@@ -1 +1 @@
1
- {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../../../src/http/handlers/tools/debug.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,sDAAsD,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,mDAAmD,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gEAAgE,CAAC;AAE3G,MAAM,UAAU,iBAAiB,CAAC,IAAiB;IACjD,OAAO,KAAK,EAAE,IAAqB,EAAE,GAAmB,EAAE,OAA+B,EAAE,GAAG,EAAE,EAAE;QAChG,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,EAAE,gCAAgC,EAAE;gBACvE,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;aACpC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,yBAAyB,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;YAAE,OAAO;QAE5F,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;QAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAI,CAAC;QAErB,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC/D,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;YACtB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QACD,MAAM,EAAE,GAAG,aAAa,CAAC,cAAc,CAAC;QACxC,EAAE,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAE5C,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC;QAC7C,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;YAC3C,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,GAAG;YACf,QAAQ;YACR,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,cAAc,EAAE,EAAE;YAClB,IAAI;YACJ,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE;gBAC/B,OAAO,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YAC3C,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,mBAAmB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAElG,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../../../src/http/handlers/tools/debug.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,sDAAsD,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,2DAA2D,CAAC;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,2DAA2D,CAAC;AACvF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAErE,MAAM,UAAU,iBAAiB,CAAC,IAAiB;IACjD,OAAO,KAAK,EAAE,IAAqB,EAAE,GAAmB,EAAE,OAA+B,EAAE,GAAG,EAAE,EAAE;QAChG,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,EAAE,gCAAgC,EAAE;gBACvE,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;aACpC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;QAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAI,CAAC;QAErB,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC/D,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;YACtB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QACD,MAAM,EAAE,GAAG,aAAa,CAAC,cAAc,CAAC;QACxC,EAAE,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAE5C,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC;QAC7C,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;YAC3C,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,GAAG;YACf,QAAQ;YACR,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,cAAc,EAAE,EAAE;YAClB,IAAI;YACJ,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE;gBAC/B,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;gBACxE,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;wBACjD,KAAK,EAAE,OAAO;wBACd,YAAY,EAAE,WAAW;wBACzB,UAAU,EAAE,KAAK;wBACjB,QAAQ,EAAE,GAAG,EAAE,CAAC,YAAY,EAAE;qBAC/B,CAAC,CAAC;oBACH,OAAO,MAAM,CAAC,IAAI,CAAC;gBACrB,CAAC;gBACD,OAAO,YAAY,EAAE,CAAC;YACxB,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,mBAAmB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAElG,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
1
  import type { HandlerDeps } from '../../handler-deps.js';
2
- import type { RawHandler } from '../../router.js';
2
+ import type { RawHandler } from '../../types.js';
3
3
  export declare function buildDelegateHandler(deps: HandlerDeps): RawHandler;
4
4
  //# sourceMappingURL=delegate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"delegate.d.ts","sourceRoot":"","sources":["../../../../src/http/handlers/tools/delegate.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAgBlD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,CA6ClE"}
1
+ {"version":3,"file":"delegate.d.ts","sourceRoot":"","sources":["../../../../src/http/handlers/tools/delegate.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,CAiDlE"}
@@ -1,23 +1,11 @@
1
- import * as delegate from '@zhixuan92/multi-model-agent-core/tool-schemas/delegate';
2
- import { executeDelegate } from '@zhixuan92/multi-model-agent-core/executors/delegate';
1
+ import * as delegate from '@zhixuan92/multi-model-agent-core/tools/delegate/schema';
2
+ import { executeTask } from '@zhixuan92/multi-model-agent-core/lifecycle/task-executor';
3
+ import { toolConfig } from '@zhixuan92/multi-model-agent-core/tools/delegate/tool-config';
3
4
  import { sendError, sendJson } from '../../errors.js';
4
5
  import { asyncDispatch } from '../../async-dispatch.js';
5
6
  import { emitRequestReceived } from '../../request-observability.js';
6
- /** Builds injectDefaults for delegate/retry — fills harness-level TaskSpec fields from config. */
7
- function makeInjectDefaults(config, cwd) {
8
- return (tasks) => tasks.map(t => ({
9
- ...t,
10
- cwd: t.cwd ?? cwd,
11
- tools: t.tools ?? config.defaults?.tools ?? 'full',
12
- timeoutMs: t.timeoutMs ?? config.defaults?.timeoutMs ?? 1_800_000,
13
- maxCostUSD: t.maxCostUSD ?? config.defaults?.maxCostUSD ?? 10,
14
- sandboxPolicy: t.sandboxPolicy ?? config.defaults?.sandboxPolicy ?? 'cwd-only',
15
- parentModel: t.parentModel ?? config.defaults?.parentModel ?? process.env['PARENT_MODEL_NAME'],
16
- }));
17
- }
18
7
  export function buildDelegateHandler(deps) {
19
8
  return async (_req, res, _params, ctx) => {
20
- // Step 7: Validate body against delegate.inputSchema
21
9
  const parsed = delegate.inputSchema.safeParse(ctx.body);
22
10
  if (!parsed.success) {
23
11
  sendError(res, 400, 'invalid_request', 'Request body validation failed', {
@@ -27,7 +15,6 @@ export function buildDelegateHandler(deps) {
27
15
  }
28
16
  const input = parsed.data;
29
17
  const cwd = ctx.cwd;
30
- // Step 8: Get or create project context, update activity timestamp
31
18
  const reserveResult = deps.projectRegistry.reserveProject(cwd);
32
19
  if (!reserveResult.ok) {
33
20
  sendError(res, 503, reserveResult.error, reserveResult.message);
@@ -35,9 +22,7 @@ export function buildDelegateHandler(deps) {
35
22
  }
36
23
  const pc = reserveResult.projectContext;
37
24
  pc.lastActivityAt = Date.now();
38
- // Release the reservation (HTTP requests are not session-based)
39
25
  deps.projectRegistry.cancelReservation(cwd);
40
- // Step 9: Async-dispatch
41
26
  const blockIds = input.tasks.flatMap(t => t.contextBlockIds ?? []);
42
27
  const { batchId, statusUrl } = asyncDispatch({
43
28
  tool: 'delegate',
@@ -47,9 +32,17 @@ export function buildDelegateHandler(deps) {
47
32
  projectContext: pc,
48
33
  deps,
49
34
  executor: async (executionCtx) => {
50
- return executeDelegate(executionCtx, input, {
51
- injectDefaults: makeInjectDefaults(deps.config, cwd),
52
- });
35
+ const callExecutor = () => executeTask(toolConfig, executionCtx, input);
36
+ if (deps.routeDispatcher) {
37
+ const result = await deps.routeDispatcher.dispatch({
38
+ route: 'delegate',
39
+ toolCategory: 'artifact_producing',
40
+ rawRequest: input,
41
+ executor: () => callExecutor(),
42
+ });
43
+ return result.body;
44
+ }
45
+ return callExecutor();
53
46
  },
54
47
  });
55
48
  await emitRequestReceived({ config: deps.config, batchId, route: _req.url ?? '', parsed: input });
@@ -1 +1 @@
1
- {"version":3,"file":"delegate.js","sourceRoot":"","sources":["../../../../src/http/handlers/tools/delegate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delegate.js","sourceRoot":"","sources":["../../../../src/http/handlers/tools/delegate.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import type { HandlerDeps } from '../../handler-deps.js';
2
- import type { RawHandler } from '../../router.js';
2
+ import type { RawHandler } from '../../types.js';
3
3
  export declare function buildExecutePlanHandler(deps: HandlerDeps): RawHandler;
4
4
  //# sourceMappingURL=execute-plan.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"execute-plan.d.ts","sourceRoot":"","sources":["../../../../src/http/handlers/tools/execute-plan.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,CAsDrE"}
1
+ {"version":3,"file":"execute-plan.d.ts","sourceRoot":"","sources":["../../../../src/http/handlers/tools/execute-plan.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,CAiDrE"}
@@ -1,33 +1,16 @@
1
- import * as executePlan from '@zhixuan92/multi-model-agent-core/tool-schemas/execute-plan';
2
- import { executeExecutePlan } from '@zhixuan92/multi-model-agent-core/executors/execute-plan';
1
+ import { executePlanInputSchema } from '@zhixuan92/multi-model-agent-core/tools/execute-plan/tool-config';
2
+ import { executeTask } from '@zhixuan92/multi-model-agent-core/lifecycle/task-executor';
3
+ import { toolConfig } from '@zhixuan92/multi-model-agent-core/tools/execute-plan/tool-config';
3
4
  import { sendError, sendJson } from '../../errors.js';
4
5
  import { asyncDispatch } from '../../async-dispatch.js';
5
6
  import { emitRequestReceived } from '../../request-observability.js';
6
7
  export function buildExecutePlanHandler(deps) {
7
8
  return async (_req, res, _params, ctx) => {
8
- const parsed = executePlan.inputSchema.safeParse(ctx.body);
9
+ const parsed = executePlanInputSchema.safeParse(ctx.body);
9
10
  if (!parsed.success) {
10
- const fieldErrors = {};
11
- for (const issue of parsed.error.issues) {
12
- let path = issue.path.join('.');
13
- if (path === '' && issue.message.includes('"agentType"')) {
14
- path = 'agentType';
15
- }
16
- else if (path.startsWith('tasks.') && issue.message === 'Invalid input') {
17
- const task = issue.path.reduce((value, segment) => {
18
- if (value && typeof value === 'object')
19
- return value[segment];
20
- return undefined;
21
- }, ctx.body);
22
- if (task && typeof task === 'object' && 'agentType' in task) {
23
- path = `${path}.agentType`;
24
- }
25
- }
26
- if (!fieldErrors[path])
27
- fieldErrors[path] = [];
28
- fieldErrors[path].push(issue.message);
29
- }
30
- sendError(res, 400, 'invalid_request', 'Request body validation failed', { fieldErrors });
11
+ sendError(res, 400, 'invalid_request', 'Request body validation failed', {
12
+ fieldErrors: parsed.error.flatten(),
13
+ });
31
14
  return;
32
15
  }
33
16
  const input = parsed.data;
@@ -49,7 +32,17 @@ export function buildExecutePlanHandler(deps) {
49
32
  projectContext: pc,
50
33
  deps,
51
34
  executor: async (executionCtx) => {
52
- return executeExecutePlan(executionCtx, input);
35
+ const callExecutor = () => executeTask(toolConfig, executionCtx, input);
36
+ if (deps.routeDispatcher) {
37
+ const result = await deps.routeDispatcher.dispatch({
38
+ route: 'execute_plan',
39
+ toolCategory: 'artifact_producing',
40
+ rawRequest: input,
41
+ executor: () => callExecutor(),
42
+ });
43
+ return result.body;
44
+ }
45
+ return callExecutor();
53
46
  },
54
47
  });
55
48
  await emitRequestReceived({ config: deps.config, batchId, route: _req.url ?? '', parsed: input });
@@ -1 +1 @@
1
- {"version":3,"file":"execute-plan.js","sourceRoot":"","sources":["../../../../src/http/handlers/tools/execute-plan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execute-plan.js","sourceRoot":"","sources":["../../../../src/http/handlers/tools/execute-plan.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kEAAkE,CAAC;AAE1G,OAAO,EAAE,WAAW,EAAE,MAAM,2DAA2D,CAAC;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,kEAAkE,CAAC;AAC9F,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAGrE,MAAM,UAAU,uBAAuB,CAAC,IAAiB;IACvD,OAAO,KAAK,EAAE,IAAqB,EAAE,GAAmB,EAAE,OAA+B,EAAE,GAAG,EAAE,EAAE;QAChG,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,EAAE,gCAAgC,EAAE;gBACvE,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;aACpC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAyB,MAAM,CAAC,IAAI,CAAC;QAChD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAI,CAAC;QAErB,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC/D,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;YACtB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QACD,MAAM,EAAE,GAAG,aAAa,CAAC,cAAc,CAAC;QACxC,EAAE,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAE5C,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC;QAC7C,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;YAC3C,IAAI,EAAE,cAAc;YACpB,UAAU,EAAE,GAAG;YACf,QAAQ;YACR,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,cAAc,EAAE,EAAE;YAClB,IAAI;YACJ,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE;gBAC/B,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;gBACxE,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;wBACjD,KAAK,EAAE,cAAc;wBACrB,YAAY,EAAE,oBAAoB;wBAClC,UAAU,EAAE,KAAK;wBACjB,QAAQ,EAAE,GAAG,EAAE,CAAC,YAAY,EAAE;qBAC/B,CAAC,CAAC;oBACH,OAAO,MAAM,CAAC,IAAI,CAAC;gBACrB,CAAC;gBACD,OAAO,YAAY,EAAE,CAAC;YACxB,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,mBAAmB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAElG,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
1
  import type { HandlerDeps } from '../../handler-deps.js';
2
- import type { RawHandler } from '../../router.js';
2
+ import type { RawHandler } from '../../types.js';
3
3
  export declare function buildExploreHandler(deps: HandlerDeps): RawHandler;
4
4
  //# sourceMappingURL=explore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"explore.d.ts","sourceRoot":"","sources":["../../../../src/http/handlers/tools/explore.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAKlD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,CAwEjE"}
1
+ {"version":3,"file":"explore.d.ts","sourceRoot":"","sources":["../../../../src/http/handlers/tools/explore.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,CAiFjE"}
@@ -1,13 +1,11 @@
1
1
  import * as path from 'node:path';
2
2
  import { realpathSync } from 'node:fs';
3
- import * as explore from '@zhixuan92/multi-model-agent-core/tool-schemas/explore';
4
- import { executeExplore } from '@zhixuan92/multi-model-agent-core/executors/explore';
3
+ import * as explore from '@zhixuan92/multi-model-agent-core/tools/explore/schema';
4
+ import { executeExplore } from '@zhixuan92/multi-model-agent-core/research/explore-orchestrator';
5
5
  import { sendError, sendJson } from '../../errors.js';
6
6
  import { asyncDispatch } from '../../async-dispatch.js';
7
7
  import { emitRequestReceived } from '../../request-observability.js';
8
8
  import { canonicalizeFilePaths } from '../../canonicalize-file-paths.js';
9
- import { assertCrossTierConfigured } from '../../cross-tier-guard.js';
10
- import { resolveReadOnlyReviewFlag } from '@zhixuan92/multi-model-agent-core/config/read-only-review-flag';
11
9
  export function buildExploreHandler(deps) {
12
10
  return async (req, res, _params, ctx) => {
13
11
  const parsed = explore.inputSchema.safeParse(ctx.body);
@@ -18,9 +16,6 @@ export function buildExploreHandler(deps) {
18
16
  return;
19
17
  }
20
18
  const input = parsed.data;
21
- const flag = resolveReadOnlyReviewFlag();
22
- if (flag.isEnabledFor('explore') && !assertCrossTierConfigured(deps.config, res))
23
- return;
24
19
  const cwd = ctx.cwd;
25
20
  const reserveResult = deps.projectRegistry.reserveProject(cwd);
26
21
  if (!reserveResult.ok) {
@@ -65,12 +60,24 @@ export function buildExploreHandler(deps) {
65
60
  batchRegistry: deps.batchRegistry,
66
61
  projectContext: pc,
67
62
  deps,
68
- executor: async (executionCtx) => executeExplore(executionCtx, {
69
- input,
70
- resolvedContextBlocks,
71
- canonicalizedAnchors,
72
- relativeAnchorsForPrompt,
73
- }),
63
+ executor: async (executionCtx) => {
64
+ const callExecutor = () => executeExplore(executionCtx, {
65
+ input,
66
+ resolvedContextBlocks,
67
+ canonicalizedAnchors,
68
+ relativeAnchorsForPrompt,
69
+ });
70
+ if (deps.routeDispatcher) {
71
+ const result = await deps.routeDispatcher.dispatch({
72
+ route: 'explore',
73
+ toolCategory: 'research',
74
+ rawRequest: input,
75
+ executor: () => callExecutor(),
76
+ });
77
+ return result.body;
78
+ }
79
+ return callExecutor();
80
+ },
74
81
  });
75
82
  await emitRequestReceived({ config: deps.config, batchId, route: req.url ?? '', parsed: input });
76
83
  sendJson(res, 202, { batchId, statusUrl });
@@ -1 +1 @@
1
- {"version":3,"file":"explore.js","sourceRoot":"","sources":["../../../../src/http/handlers/tools/explore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"explore.js","sourceRoot":"","sources":["../../../../src/http/handlers/tools/explore.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import type { HandlerDeps } from '../../handler-deps.js';
2
- import type { RawHandler } from '../../router.js';
2
+ import type { RawHandler } from '../../types.js';
3
3
  export declare function buildInvestigateHandler(deps: HandlerDeps): RawHandler;
4
4
  //# sourceMappingURL=investigate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"investigate.d.ts","sourceRoot":"","sources":["../../../../src/http/handlers/tools/investigate.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAKlD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,CA8ErE"}
1
+ {"version":3,"file":"investigate.d.ts","sourceRoot":"","sources":["../../../../src/http/handlers/tools/investigate.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,CAuFrE"}
@@ -1,17 +1,14 @@
1
- // packages/server/src/http/handlers/tools/investigate.ts
2
1
  import * as path from 'node:path';
3
2
  import { realpathSync } from 'node:fs';
4
- import * as investigate from '@zhixuan92/multi-model-agent-core/tool-schemas/investigate';
5
- import { executeInvestigate } from '@zhixuan92/multi-model-agent-core/executors/investigate';
3
+ import * as investigate from '@zhixuan92/multi-model-agent-core/tools/investigate/schema';
4
+ import { executeTask } from '@zhixuan92/multi-model-agent-core/lifecycle/task-executor';
5
+ import { toolConfig } from '@zhixuan92/multi-model-agent-core/tools/investigate/tool-config';
6
6
  import { sendError, sendJson } from '../../errors.js';
7
7
  import { asyncDispatch } from '../../async-dispatch.js';
8
8
  import { emitRequestReceived } from '../../request-observability.js';
9
9
  import { canonicalizeFilePaths } from '../../canonicalize-file-paths.js';
10
- import { assertCrossTierConfigured } from '../../cross-tier-guard.js';
11
- import { resolveReadOnlyReviewFlag } from '@zhixuan92/multi-model-agent-core/config/read-only-review-flag';
12
10
  export function buildInvestigateHandler(deps) {
13
- return async (req, res, _params, ctx) => {
14
- // Step 1: schema.
11
+ return async (_req, res, _params, ctx) => {
15
12
  const parsed = investigate.inputSchema.safeParse(ctx.body);
16
13
  if (!parsed.success) {
17
14
  sendError(res, 400, 'invalid_request', 'Request body validation failed', {
@@ -20,11 +17,7 @@ export function buildInvestigateHandler(deps) {
20
17
  return;
21
18
  }
22
19
  const input = parsed.data;
23
- const flag = resolveReadOnlyReviewFlag();
24
- if (flag.isEnabledFor('investigate_codebase') && !assertCrossTierConfigured(deps.config, res))
25
- return;
26
20
  const cwd = ctx.cwd;
27
- // Step 2: reservation lifecycle (mirrors audit.ts; reservation is just a cwd-validity gate).
28
21
  const reserveResult = deps.projectRegistry.reserveProject(cwd);
29
22
  if (!reserveResult.ok) {
30
23
  sendError(res, 503, reserveResult.error, reserveResult.message);
@@ -33,7 +26,7 @@ export function buildInvestigateHandler(deps) {
33
26
  const pc = reserveResult.projectContext;
34
27
  pc.lastActivityAt = Date.now();
35
28
  deps.projectRegistry.cancelReservation(cwd);
36
- // Step 3: synchronously resolve context blocks.
29
+ // Resolve context blocks.
37
30
  const blockIds = input.contextBlockIds ?? [];
38
31
  const resolvedContextBlocks = [];
39
32
  const missingBlocks = [];
@@ -50,7 +43,7 @@ export function buildInvestigateHandler(deps) {
50
43
  sendError(res, 400, 'context_block_not_found', 'one or more context block IDs do not exist', { missingBlocks });
51
44
  return;
52
45
  }
53
- // Step 4: synchronously canonicalize filePaths.
46
+ // Canonicalize file paths.
54
47
  const rawPaths = input.filePaths ?? [];
55
48
  const canonResult = canonicalizeFilePaths(rawPaths, cwd);
56
49
  if (!Array.isArray(canonResult)) {
@@ -58,13 +51,19 @@ export function buildInvestigateHandler(deps) {
58
51
  return;
59
52
  }
60
53
  const canonicalizedFilePaths = canonResult;
61
- // Step 5: precompute relative-for-prompt paths so the compiler stays pure.
54
+ // Pre-compute relative paths for prompt.
62
55
  const realCwd = realpathSync(cwd);
63
56
  const relativeFilePathsForPrompt = canonicalizedFilePaths.map(p => {
64
57
  const rel = path.relative(realCwd, p);
65
58
  return rel === '' ? '.' : rel;
66
59
  });
67
- // Step 6: dispatch.
60
+ // Build enriched input for the generic task executor.
61
+ const enrichedInput = {
62
+ ...input,
63
+ resolvedContextBlocks,
64
+ canonicalizedFilePaths,
65
+ relativeFilePathsForPrompt,
66
+ };
68
67
  const { batchId, statusUrl } = asyncDispatch({
69
68
  tool: 'investigate',
70
69
  projectCwd: cwd,
@@ -72,14 +71,21 @@ export function buildInvestigateHandler(deps) {
72
71
  batchRegistry: deps.batchRegistry,
73
72
  projectContext: pc,
74
73
  deps,
75
- executor: async (executionCtx) => executeInvestigate(executionCtx, {
76
- input,
77
- resolvedContextBlocks,
78
- canonicalizedFilePaths,
79
- relativeFilePathsForPrompt,
80
- }),
74
+ executor: async (executionCtx) => {
75
+ const callExecutor = () => executeTask(toolConfig, executionCtx, enrichedInput);
76
+ if (deps.routeDispatcher) {
77
+ const result = await deps.routeDispatcher.dispatch({
78
+ route: 'investigate',
79
+ toolCategory: 'read_only',
80
+ rawRequest: enrichedInput,
81
+ executor: () => callExecutor(),
82
+ });
83
+ return result.body;
84
+ }
85
+ return callExecutor();
86
+ },
81
87
  });
82
- await emitRequestReceived({ config: deps.config, batchId, route: req.url ?? '', parsed: input });
88
+ await emitRequestReceived({ config: deps.config, batchId, route: _req.url ?? '', parsed: input });
83
89
  sendJson(res, 202, { batchId, statusUrl });
84
90
  };
85
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"investigate.js","sourceRoot":"","sources":["../../../../src/http/handlers/tools/investigate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"investigate.js","sourceRoot":"","sources":["../../../../src/http/handlers/tools/investigate.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import type { HandlerDeps } from '../../handler-deps.js';
2
- import type { RawHandler } from '../../router.js';
2
+ import type { RawHandler } from '../../types.js';
3
3
  export declare function buildRetryHandler(deps: HandlerDeps): RawHandler;
4
4
  //# sourceMappingURL=retry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../../src/http/handlers/tools/retry.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAgBlD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,CAsC/D"}
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../../src/http/handlers/tools/retry.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,CAiG/D"}
@@ -1,19 +1,8 @@
1
- import * as retry from '@zhixuan92/multi-model-agent-core/tool-schemas/retry';
2
- import { executeRetry } from '@zhixuan92/multi-model-agent-core/executors/retry';
1
+ import * as retry from '@zhixuan92/multi-model-agent-core/tools/retry/schema';
2
+ import { executeTask } from '@zhixuan92/multi-model-agent-core/lifecycle/task-executor';
3
+ import { toolConfig } from '@zhixuan92/multi-model-agent-core/tools/retry/tool-config';
3
4
  import { sendError, sendJson } from '../../errors.js';
4
5
  import { asyncDispatch } from '../../async-dispatch.js';
5
- /** Same inject-defaults logic as delegate — fills harness fields from config. */
6
- function makeInjectDefaults(config, cwd) {
7
- return (tasks) => tasks.map(t => ({
8
- ...t,
9
- cwd: t.cwd ?? cwd,
10
- tools: t.tools ?? config.defaults?.tools ?? 'full',
11
- timeoutMs: t.timeoutMs ?? config.defaults?.timeoutMs ?? 1_800_000,
12
- maxCostUSD: t.maxCostUSD ?? config.defaults?.maxCostUSD ?? 10,
13
- sandboxPolicy: t.sandboxPolicy ?? config.defaults?.sandboxPolicy ?? 'cwd-only',
14
- parentModel: t.parentModel ?? config.defaults?.parentModel ?? process.env['PARENT_MODEL_NAME'],
15
- }));
16
- }
17
6
  export function buildRetryHandler(deps) {
18
7
  return async (_req, res, _params, ctx) => {
19
8
  const parsed = retry.inputSchema.safeParse(ctx.body);
@@ -25,6 +14,16 @@ export function buildRetryHandler(deps) {
25
14
  }
26
15
  const input = parsed.data;
27
16
  const cwd = ctx.cwd;
17
+ // Resolve original batch's toolCategory for dispatcher budget selection.
18
+ let originalToolCategory;
19
+ if (deps.routeDispatcher) {
20
+ const original = deps.batchRegistry.get(input.batchId);
21
+ if (original
22
+ && original.toolCategory
23
+ && original.toolCategory !== 'assist') {
24
+ originalToolCategory = original.toolCategory;
25
+ }
26
+ }
28
27
  const reserveResult = deps.projectRegistry.reserveProject(cwd);
29
28
  if (!reserveResult.ok) {
30
29
  sendError(res, 503, reserveResult.error, reserveResult.message);
@@ -41,9 +40,58 @@ export function buildRetryHandler(deps) {
41
40
  projectContext: pc,
42
41
  deps,
43
42
  executor: async (executionCtx) => {
44
- return executeRetry(executionCtx, input, {
45
- injectDefaults: makeInjectDefaults(deps.config, cwd),
46
- });
43
+ const callExecutor = async () => {
44
+ const batchCache = executionCtx.projectContext.batchCache;
45
+ const batch = batchCache.get(input.batchId);
46
+ if (!batch) {
47
+ throw new Error(`batch "${input.batchId}" is unknown or expired — re-dispatch with full task specs via delegate_tasks`);
48
+ }
49
+ batchCache.touch(input.batchId);
50
+ for (const i of input.taskIndices) {
51
+ if (i < 0 || i >= batch.tasks.length) {
52
+ throw new Error(`index ${i} is out of range for batch ${input.batchId} (size ${batch.tasks.length})`);
53
+ }
54
+ }
55
+ const subset = input.taskIndices.map((i) => batch.tasks[i]);
56
+ if (!executionCtx.batchId)
57
+ throw new Error('retry requires batchId');
58
+ const retryBatchId = batchCache.remember(executionCtx.batchId, subset);
59
+ let retryAborted = false;
60
+ let results = [];
61
+ try {
62
+ const result = await executeTask(toolConfig, executionCtx, input);
63
+ results = Array.isArray(result.results) ? result.results : [];
64
+ return result;
65
+ }
66
+ catch (err) {
67
+ retryAborted = true;
68
+ throw err;
69
+ }
70
+ finally {
71
+ if (retryAborted) {
72
+ try {
73
+ batchCache.abort(retryBatchId);
74
+ }
75
+ catch { /* already terminal */ }
76
+ }
77
+ else {
78
+ try {
79
+ batchCache.complete(retryBatchId, results);
80
+ }
81
+ catch { /* already terminal */ }
82
+ }
83
+ }
84
+ };
85
+ if (deps.routeDispatcher && originalToolCategory) {
86
+ const result = await deps.routeDispatcher.dispatch({
87
+ route: 'retry',
88
+ toolCategory: originalToolCategory,
89
+ rawRequest: { batchId: input.batchId, retryableFor: input.taskIndices, cwd },
90
+ executor: () => callExecutor(),
91
+ });
92
+ return result.body;
93
+ }
94
+ return callExecutor();
47
95
  },
48
96
  });
49
97
  sendJson(res, 202, { batchId, statusUrl });
@@ -1 +1 @@
1
- {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../../src/http/handlers/tools/retry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../../src/http/handlers/tools/retry.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import type { HandlerDeps } from '../../handler-deps.js';
2
- import type { RawHandler } from '../../router.js';
2
+ import type { RawHandler } from '../../types.js';
3
3
  export declare function buildReviewHandler(deps: HandlerDeps): RawHandler;
4
4
  //# sourceMappingURL=review.d.ts.map