@zhixuan92/multi-model-agent 3.12.7 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -4
- package/dist/cli/install-skill.d.ts +7 -7
- package/dist/cli/install-skill.d.ts.map +1 -1
- package/dist/cli/install-skill.js +56 -11
- package/dist/cli/install-skill.js.map +1 -1
- package/dist/cli/serve.d.ts.map +1 -1
- package/dist/cli/serve.js +17 -3
- package/dist/cli/serve.js.map +1 -1
- package/dist/cli/update-skills.js +3 -3
- package/dist/cli/update-skills.js.map +1 -1
- package/dist/http/async-dispatch.d.ts +1 -1
- package/dist/http/async-dispatch.d.ts.map +1 -1
- package/dist/http/async-dispatch.js +3 -38
- package/dist/http/async-dispatch.js.map +1 -1
- package/dist/http/cwd-validator.d.ts.map +1 -1
- package/dist/http/cwd-validator.js +3 -0
- package/dist/http/cwd-validator.js.map +1 -1
- package/dist/http/execution-context.d.ts +8 -6
- package/dist/http/execution-context.d.ts.map +1 -1
- package/dist/http/execution-context.js +33 -15
- package/dist/http/execution-context.js.map +1 -1
- package/dist/http/handler-deps.d.ts +11 -3
- package/dist/http/handler-deps.d.ts.map +1 -1
- package/dist/http/handlers/control/batch-slice.d.ts +1 -1
- package/dist/http/handlers/control/batch-slice.d.ts.map +1 -1
- package/dist/http/handlers/control/batch.d.ts +1 -2
- package/dist/http/handlers/control/batch.d.ts.map +1 -1
- package/dist/http/handlers/control/batch.js +0 -15
- package/dist/http/handlers/control/batch.js.map +1 -1
- package/dist/http/handlers/control/context-blocks.d.ts +7 -5
- package/dist/http/handlers/control/context-blocks.d.ts.map +1 -1
- package/dist/http/handlers/control/context-blocks.js +34 -13
- package/dist/http/handlers/control/context-blocks.js.map +1 -1
- package/dist/http/handlers/control/retry.d.ts +1 -1
- package/dist/http/handlers/control/retry.d.ts.map +1 -1
- package/dist/http/handlers/control/retry.js +32 -20
- package/dist/http/handlers/control/retry.js.map +1 -1
- package/dist/http/handlers/introspection/health.d.ts +16 -10
- package/dist/http/handlers/introspection/health.d.ts.map +1 -1
- package/dist/http/handlers/introspection/health.js +9 -12
- package/dist/http/handlers/introspection/health.js.map +1 -1
- package/dist/http/handlers/introspection/status.d.ts +1 -1
- package/dist/http/handlers/introspection/status.d.ts.map +1 -1
- package/dist/http/handlers/introspection/status.js +1 -1
- package/dist/http/handlers/introspection/status.js.map +1 -1
- package/dist/http/handlers/introspection/tools-list.d.ts +1 -1
- package/dist/http/handlers/introspection/tools-list.d.ts.map +1 -1
- package/dist/http/handlers/introspection/tools-list.js +1 -1
- package/dist/http/handlers/introspection/tools-list.js.map +1 -1
- package/dist/http/handlers/tools/audit.d.ts +1 -1
- package/dist/http/handlers/tools/audit.d.ts.map +1 -1
- package/dist/http/handlers/tools/audit.js +14 -8
- package/dist/http/handlers/tools/audit.js.map +1 -1
- package/dist/http/handlers/tools/debug.d.ts +1 -1
- package/dist/http/handlers/tools/debug.d.ts.map +1 -1
- package/dist/http/handlers/tools/debug.js +14 -8
- package/dist/http/handlers/tools/debug.js.map +1 -1
- package/dist/http/handlers/tools/delegate.d.ts +1 -1
- package/dist/http/handlers/tools/delegate.d.ts.map +1 -1
- package/dist/http/handlers/tools/delegate.js +14 -21
- package/dist/http/handlers/tools/delegate.js.map +1 -1
- package/dist/http/handlers/tools/execute-plan.d.ts +1 -1
- package/dist/http/handlers/tools/execute-plan.d.ts.map +1 -1
- package/dist/http/handlers/tools/execute-plan.js +18 -25
- package/dist/http/handlers/tools/execute-plan.js.map +1 -1
- package/dist/http/handlers/tools/explore.d.ts +1 -1
- package/dist/http/handlers/tools/explore.d.ts.map +1 -1
- package/dist/http/handlers/tools/explore.js +20 -13
- package/dist/http/handlers/tools/explore.js.map +1 -1
- package/dist/http/handlers/tools/investigate.d.ts +1 -1
- package/dist/http/handlers/tools/investigate.d.ts.map +1 -1
- package/dist/http/handlers/tools/investigate.js +28 -22
- package/dist/http/handlers/tools/investigate.js.map +1 -1
- package/dist/http/handlers/tools/retry.d.ts +1 -1
- package/dist/http/handlers/tools/retry.d.ts.map +1 -1
- package/dist/http/handlers/tools/retry.js +65 -17
- package/dist/http/handlers/tools/retry.js.map +1 -1
- package/dist/http/handlers/tools/review.d.ts +1 -1
- package/dist/http/handlers/tools/review.d.ts.map +1 -1
- package/dist/http/handlers/tools/review.js +14 -8
- package/dist/http/handlers/tools/review.js.map +1 -1
- package/dist/http/handlers/tools/verify.d.ts +1 -1
- package/dist/http/handlers/tools/verify.d.ts.map +1 -1
- package/dist/http/handlers/tools/verify.js +14 -8
- package/dist/http/handlers/tools/verify.js.map +1 -1
- package/dist/http/middleware/caller-identity.js +1 -1
- package/dist/http/middleware/caller-identity.js.map +1 -1
- package/dist/http/project-registry.d.ts.map +1 -1
- package/dist/http/project-registry.js +0 -2
- package/dist/http/project-registry.js.map +1 -1
- package/dist/http/request-observability.js +2 -2
- package/dist/http/request-observability.js.map +1 -1
- package/dist/http/request-pipeline.d.ts +3 -2
- package/dist/http/request-pipeline.d.ts.map +1 -1
- package/dist/http/request-pipeline.js +1 -1
- package/dist/http/request-pipeline.js.map +1 -1
- package/dist/http/server.d.ts +1 -1
- package/dist/http/server.d.ts.map +1 -1
- package/dist/http/server.js +127 -55
- package/dist/http/server.js.map +1 -1
- package/dist/http/types.d.ts +8 -1
- package/dist/http/types.d.ts.map +1 -1
- package/dist/http/wire/delegate-wire.d.ts +4 -0
- package/dist/http/wire/delegate-wire.d.ts.map +1 -0
- package/dist/http/wire/delegate-wire.js +16 -0
- package/dist/http/wire/delegate-wire.js.map +1 -0
- package/dist/http/wire/execute-plan-wire.d.ts +18 -0
- package/dist/http/wire/execute-plan-wire.d.ts.map +1 -0
- package/dist/http/wire/execute-plan-wire.js +26 -0
- package/dist/http/wire/execute-plan-wire.js.map +1 -0
- package/dist/http/wire/register-all-handlers.d.ts +3 -0
- package/dist/http/wire/register-all-handlers.d.ts.map +1 -0
- package/dist/http/wire/register-all-handlers.js +25 -0
- package/dist/http/wire/register-all-handlers.js.map +1 -0
- package/dist/http/wire/registry.d.ts +3 -0
- package/dist/http/wire/registry.d.ts.map +1 -0
- package/dist/http/wire/registry.js +20 -0
- package/dist/http/wire/registry.js.map +1 -0
- package/dist/install/discover.d.ts +9 -1
- package/dist/install/discover.d.ts.map +1 -1
- package/dist/install/discover.js +14 -1
- package/dist/install/discover.js.map +1 -1
- package/dist/install/headers.d.ts +1 -1
- package/dist/install/headers.d.ts.map +1 -1
- package/dist/install/manifest-resolve.d.ts +7 -1
- package/dist/install/manifest-resolve.d.ts.map +1 -1
- package/dist/install/manifest-resolve.js +23 -4
- package/dist/install/manifest-resolve.js.map +1 -1
- package/dist/install/manifest.d.ts.map +1 -1
- package/dist/install/manifest.js +2 -26
- package/dist/install/manifest.js.map +1 -1
- package/dist/install/missing-skills.d.ts +8 -1
- package/dist/install/missing-skills.d.ts.map +1 -1
- package/dist/install/missing-skills.js +9 -0
- package/dist/install/missing-skills.js.map +1 -1
- package/dist/install/orchestrate.d.ts +13 -1
- package/dist/install/orchestrate.d.ts.map +1 -1
- package/dist/install/orchestrate.js +48 -3
- package/dist/install/orchestrate.js.map +1 -1
- package/dist/install/skill-manifest-sync.d.ts +11 -0
- package/dist/install/skill-manifest-sync.d.ts.map +1 -0
- package/dist/install/skill-manifest-sync.js +65 -0
- package/dist/install/skill-manifest-sync.js.map +1 -0
- package/dist/openapi.d.ts.map +1 -1
- package/dist/openapi.js +88 -35
- package/dist/openapi.js.map +1 -1
- package/dist/skills/_shared/error-handling.md +1 -1
- package/dist/skills/_shared/polling.md +3 -4
- package/dist/skills/_shared/response-shape.md +5 -7
- package/dist/skills/_shared/verify-and-review.md +2 -2
- package/dist/skills/mma-audit/SKILL.md +17 -7
- package/dist/skills/mma-context-blocks/SKILL.md +5 -5
- package/dist/skills/mma-debug/SKILL.md +17 -7
- package/dist/skills/mma-delegate/SKILL.md +13 -2
- package/dist/skills/mma-execute-plan/SKILL.md +13 -4
- package/dist/skills/mma-explore/SKILL.md +10 -4
- package/dist/skills/mma-investigate/SKILL.md +18 -8
- package/dist/skills/mma-retry/SKILL.md +7 -1
- package/dist/skills/mma-review/SKILL.md +17 -7
- package/dist/skills/mma-verify/SKILL.md +17 -7
- package/dist/skills/multi-model-agent/SKILL.md +14 -15
- package/dist/telemetry/consent.d.ts +1 -1
- package/dist/telemetry/consent.d.ts.map +1 -1
- package/dist/telemetry/consent.js +1 -1
- package/dist/telemetry/consent.js.map +1 -1
- package/dist/telemetry/flusher.js +1 -1
- package/dist/telemetry/flusher.js.map +1 -1
- package/dist/telemetry/notice.d.ts +1 -1
- package/dist/telemetry/notice.d.ts.map +1 -1
- package/dist/telemetry/recorder.d.ts +2 -2
- package/dist/telemetry/recorder.d.ts.map +1 -1
- package/dist/telemetry/recorder.js +12 -11
- package/dist/telemetry/recorder.js.map +1 -1
- package/package.json +2 -2
- package/dist/http/cross-tier-guard.d.ts +0 -15
- package/dist/http/cross-tier-guard.d.ts.map +0 -1
- package/dist/http/cross-tier-guard.js +0 -30
- package/dist/http/cross-tier-guard.js.map +0 -1
- package/dist/http/handlers/control/clarifications.d.ts +0 -19
- package/dist/http/handlers/control/clarifications.d.ts.map +0 -1
- package/dist/http/handlers/control/clarifications.js +0 -58
- package/dist/http/handlers/control/clarifications.js.map +0 -1
- package/dist/http/test-provider-override.d.ts +0 -4
- package/dist/http/test-provider-override.d.ts.map +0 -1
- package/dist/http/test-provider-override.js +0 -17
- package/dist/http/test-provider-override.js.map +0 -1
- 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":"
|
|
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/
|
|
2
|
-
import {
|
|
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
|
-
|
|
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,
|
|
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 '../../
|
|
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,
|
|
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/
|
|
2
|
-
import {
|
|
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
|
-
|
|
51
|
-
|
|
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":"AAGA,OAAO,KAAK,QAAQ,MAAM,yDAAyD,CAAC;AACpF,OAAO,EAAE,
|
|
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 '../../
|
|
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":"
|
|
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
|
|
2
|
-
import {
|
|
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 =
|
|
9
|
+
const parsed = executePlanInputSchema.safeParse(ctx.body);
|
|
9
10
|
if (!parsed.success) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
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":"AAGA,OAAO,
|
|
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 '../../
|
|
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,
|
|
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/
|
|
4
|
-
import { executeExplore } from '@zhixuan92/multi-model-agent-core/
|
|
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) =>
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,KAAK,OAAO,MAAM,wDAAwD,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
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 '../../
|
|
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,
|
|
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/
|
|
5
|
-
import {
|
|
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 (
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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) =>
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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:
|
|
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":"AAAA,
|
|
1
|
+
{"version":3,"file":"investigate.js","sourceRoot":"","sources":["../../../../src/http/handlers/tools/investigate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,KAAK,WAAW,MAAM,4DAA4D,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,2DAA2D,CAAC;AACxF,OAAO,EAAE,UAAU,EAAiC,MAAM,iEAAiE,CAAC;AAC5H,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,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,MAAM,UAAU,uBAAuB,CAAC,IAAiB;IACvD,OAAO,KAAK,EAAE,IAAqB,EAAE,GAAmB,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;QACxE,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3D,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;QACD,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,0BAA0B;QAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC;QAC7C,MAAM,qBAAqB,GAA2C,EAAE,CAAC;QACzE,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,yBAAyB,EAAE,4CAA4C,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;YAChH,OAAO;QACT,CAAC;QAED,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,qBAAqB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,EAAE,kCAAkC,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;YACrH,OAAO;QACT,CAAC;QACD,MAAM,sBAAsB,GAAG,WAAW,CAAC;QAE3C,yCAAyC;QACzC,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,0BAA0B,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAChE,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACtC,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,sDAAsD;QACtD,MAAM,aAAa,GAA6B;YAC9C,GAAG,KAAK;YACR,qBAAqB;YACrB,sBAAsB;YACtB,0BAA0B;SAC3B,CAAC;QAEF,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;YAC3C,IAAI,EAAE,aAAa;YACnB,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,aAAa,CAAC,CAAC;gBAChF,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;wBACjD,KAAK,EAAE,aAAa;wBACpB,YAAY,EAAE,WAAW;wBACzB,UAAU,EAAE,aAAa;wBACzB,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;QAClG,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 '../../
|
|
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":"
|
|
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/
|
|
2
|
-
import {
|
|
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
|
-
|
|
45
|
-
|
|
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":"
|
|
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 '../../
|
|
2
|
+
import type { RawHandler } from '../../types.js';
|
|
3
3
|
export declare function buildReviewHandler(deps: HandlerDeps): RawHandler;
|
|
4
4
|
//# sourceMappingURL=review.d.ts.map
|