@namzu/sdk 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +167 -0
- package/dist/agents/ReactiveAgent.d.ts.map +1 -1
- package/dist/agents/ReactiveAgent.js +5 -0
- package/dist/agents/ReactiveAgent.js.map +1 -1
- package/dist/agents/SupervisorAgent.d.ts +22 -1
- package/dist/agents/SupervisorAgent.d.ts.map +1 -1
- package/dist/agents/SupervisorAgent.js +47 -14
- package/dist/agents/SupervisorAgent.js.map +1 -1
- package/dist/agents/__tests__/supervisor-ledger.test.d.ts +2 -0
- package/dist/agents/__tests__/supervisor-ledger.test.d.ts.map +1 -0
- package/dist/agents/__tests__/supervisor-ledger.test.js +131 -0
- package/dist/agents/__tests__/supervisor-ledger.test.js.map +1 -0
- package/dist/config/runtime.d.ts +24 -0
- package/dist/config/runtime.d.ts.map +1 -1
- package/dist/config/runtime.js +9 -0
- package/dist/config/runtime.js.map +1 -1
- package/dist/connector/builtins/webhook.test.js +17 -0
- package/dist/connector/builtins/webhook.test.js.map +1 -1
- package/dist/connector/index.d.ts +1 -0
- package/dist/connector/index.d.ts.map +1 -1
- package/dist/connector/index.js +1 -0
- package/dist/connector/index.js.map +1 -1
- package/dist/connector/mcp/client.d.ts.map +1 -1
- package/dist/connector/mcp/client.js +4 -0
- package/dist/connector/mcp/client.js.map +1 -1
- package/dist/connector/mcp/index.d.ts +1 -0
- package/dist/connector/mcp/index.d.ts.map +1 -1
- package/dist/connector/mcp/index.js +1 -0
- package/dist/connector/mcp/index.js.map +1 -1
- package/dist/connector/mcp/streamable-http.d.ts +22 -0
- package/dist/connector/mcp/streamable-http.d.ts.map +1 -0
- package/dist/connector/mcp/streamable-http.js +128 -0
- package/dist/connector/mcp/streamable-http.js.map +1 -0
- package/dist/connector/mcp/streamable-http.test.d.ts +2 -0
- package/dist/connector/mcp/streamable-http.test.d.ts.map +1 -0
- package/dist/connector/mcp/streamable-http.test.js +132 -0
- package/dist/connector/mcp/streamable-http.test.js.map +1 -0
- package/dist/persona/assembler.d.ts.map +1 -1
- package/dist/persona/assembler.js +18 -9
- package/dist/persona/assembler.js.map +1 -1
- package/dist/provider/collect.d.ts.map +1 -1
- package/dist/provider/collect.js +4 -1
- package/dist/provider/collect.js.map +1 -1
- package/dist/public-runtime.d.ts +1 -1
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +1 -1
- package/dist/public-runtime.js.map +1 -1
- package/dist/registry/tool/execute.d.ts +27 -0
- package/dist/registry/tool/execute.d.ts.map +1 -1
- package/dist/registry/tool/execute.js +124 -21
- package/dist/registry/tool/execute.js.map +1 -1
- package/dist/registry/tool/execute.test.d.ts +9 -6
- package/dist/registry/tool/execute.test.d.ts.map +1 -1
- package/dist/registry/tool/execute.test.js +72 -10
- package/dist/registry/tool/execute.test.js.map +1 -1
- package/dist/registry/toolset/catalog.test.js +62 -0
- package/dist/registry/toolset/catalog.test.js.map +1 -1
- package/dist/runtime/query/__tests__/deferred-tools.test.js +43 -5
- package/dist/runtime/query/__tests__/deferred-tools.test.js.map +1 -1
- package/dist/runtime/query/__tests__/long-document-flow.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/long-document-flow.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/long-document-flow.test.js +154 -0
- package/dist/runtime/query/__tests__/long-document-flow.test.js.map +1 -0
- package/dist/runtime/query/__tests__/prompt.test.js +15 -11
- package/dist/runtime/query/__tests__/prompt.test.js.map +1 -1
- package/dist/runtime/query/index.d.ts +9 -0
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +23 -2
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/runtime/query/iteration/index.d.ts +2 -0
- package/dist/runtime/query/iteration/index.d.ts.map +1 -1
- package/dist/runtime/query/iteration/index.js +99 -6
- package/dist/runtime/query/iteration/index.js.map +1 -1
- package/dist/runtime/query/iteration/phases/checkpoint.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/checkpoint.js +2 -2
- package/dist/runtime/query/iteration/phases/checkpoint.js.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction.d.ts +8 -0
- package/dist/runtime/query/iteration/phases/compaction.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction.js +84 -3
- package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
- package/dist/runtime/query/iteration/phases/context.d.ts +12 -0
- package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/context.js +53 -0
- package/dist/runtime/query/iteration/phases/context.js.map +1 -1
- package/dist/runtime/query/iteration/phases/hitl-abort-race.test.d.ts +2 -0
- package/dist/runtime/query/iteration/phases/hitl-abort-race.test.d.ts.map +1 -0
- package/dist/runtime/query/iteration/phases/hitl-abort-race.test.js +73 -0
- package/dist/runtime/query/iteration/phases/hitl-abort-race.test.js.map +1 -0
- package/dist/runtime/query/iteration/phases/hitl-answer-question.test.d.ts +2 -0
- package/dist/runtime/query/iteration/phases/hitl-answer-question.test.d.ts.map +1 -0
- package/dist/runtime/query/iteration/phases/hitl-answer-question.test.js +120 -0
- package/dist/runtime/query/iteration/phases/hitl-answer-question.test.js.map +1 -0
- package/dist/runtime/query/iteration/phases/tool-review.d.ts +1 -1
- package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/tool-review.js +7 -2
- package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
- package/dist/runtime/query/iteration/phases/working-memory-compaction.test.d.ts +19 -0
- package/dist/runtime/query/iteration/phases/working-memory-compaction.test.d.ts.map +1 -0
- package/dist/runtime/query/iteration/phases/working-memory-compaction.test.js +177 -0
- package/dist/runtime/query/iteration/phases/working-memory-compaction.test.js.map +1 -0
- package/dist/runtime/query/iteration/phases/working-memory.d.ts +31 -0
- package/dist/runtime/query/iteration/phases/working-memory.d.ts.map +1 -0
- package/dist/runtime/query/iteration/phases/working-memory.js +81 -0
- package/dist/runtime/query/iteration/phases/working-memory.js.map +1 -0
- package/dist/session/workspace/__tests__/shared-run.test.js +1 -1
- package/dist/session/workspace/__tests__/shared-run.test.js.map +1 -1
- package/dist/session/workspace/shared-run.js +1 -0
- package/dist/session/workspace/shared-run.js.map +1 -1
- package/dist/skills/loader.test.js +8 -8
- package/dist/skills/loader.test.js.map +1 -1
- package/dist/streaming/coalesce.test.js.map +1 -1
- package/dist/tools/builtins/__tests__/payload-budget.test.js +48 -0
- package/dist/tools/builtins/__tests__/payload-budget.test.js.map +1 -1
- package/dist/tools/builtins/__tests__/read-file.test.js +9 -0
- package/dist/tools/builtins/__tests__/read-file.test.js.map +1 -1
- package/dist/tools/builtins/read-file.d.ts.map +1 -1
- package/dist/tools/builtins/read-file.js +50 -2
- package/dist/tools/builtins/read-file.js.map +1 -1
- package/dist/tools/builtins/search-tools.d.ts.map +1 -1
- package/dist/tools/builtins/search-tools.js +32 -7
- package/dist/tools/builtins/search-tools.js.map +1 -1
- package/dist/tools/coordinator/__tests__/approve-plan.test.d.ts +2 -0
- package/dist/tools/coordinator/__tests__/approve-plan.test.d.ts.map +1 -0
- package/dist/tools/coordinator/__tests__/approve-plan.test.js +114 -0
- package/dist/tools/coordinator/__tests__/approve-plan.test.js.map +1 -0
- package/dist/tools/coordinator/__tests__/ask-user-question.test.d.ts +2 -0
- package/dist/tools/coordinator/__tests__/ask-user-question.test.d.ts.map +1 -0
- package/dist/tools/coordinator/__tests__/ask-user-question.test.js +309 -0
- package/dist/tools/coordinator/__tests__/ask-user-question.test.js.map +1 -0
- package/dist/tools/coordinator/index.d.ts +8 -0
- package/dist/tools/coordinator/index.d.ts.map +1 -1
- package/dist/tools/coordinator/index.js +195 -15
- package/dist/tools/coordinator/index.js.map +1 -1
- package/dist/types/agent/index.d.ts +1 -0
- package/dist/types/agent/index.d.ts.map +1 -1
- package/dist/types/agent/index.js +1 -0
- package/dist/types/agent/index.js.map +1 -1
- package/dist/types/agent/reactive.d.ts +15 -0
- package/dist/types/agent/reactive.d.ts.map +1 -1
- package/dist/types/agent/supervisor.d.ts +18 -0
- package/dist/types/agent/supervisor.d.ts.map +1 -1
- package/dist/types/agent/working-memory.d.ts +29 -0
- package/dist/types/agent/working-memory.d.ts.map +1 -0
- package/dist/types/agent/working-memory.js +2 -0
- package/dist/types/agent/working-memory.js.map +1 -0
- package/dist/types/common/index.d.ts +10 -0
- package/dist/types/common/index.d.ts.map +1 -1
- package/dist/types/common/index.js +18 -0
- package/dist/types/common/index.js.map +1 -1
- package/dist/types/common/usage-merge.test.d.ts +2 -0
- package/dist/types/common/usage-merge.test.d.ts.map +1 -0
- package/dist/types/common/usage-merge.test.js +48 -0
- package/dist/types/common/usage-merge.test.js.map +1 -0
- package/dist/types/connector/mcp.d.ts +9 -2
- package/dist/types/connector/mcp.d.ts.map +1 -1
- package/dist/types/hitl/index.d.ts +42 -0
- package/dist/types/hitl/index.d.ts.map +1 -1
- package/dist/types/hitl/index.js +11 -0
- package/dist/types/hitl/index.js.map +1 -1
- package/dist/types/provider/chat.d.ts +9 -0
- package/dist/types/provider/chat.d.ts.map +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +25 -4
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
- package/src/agents/ReactiveAgent.ts +5 -0
- package/src/agents/SupervisorAgent.ts +56 -16
- package/src/agents/__tests__/supervisor-ledger.test.ts +185 -0
- package/src/config/runtime.ts +9 -0
- package/src/connector/builtins/webhook.test.ts +21 -0
- package/src/connector/index.ts +1 -0
- package/src/connector/mcp/client.ts +4 -0
- package/src/connector/mcp/index.ts +1 -0
- package/src/connector/mcp/streamable-http.test.ts +169 -0
- package/src/connector/mcp/streamable-http.ts +152 -0
- package/src/persona/assembler.ts +18 -6
- package/src/provider/collect.ts +4 -1
- package/src/public-runtime.ts +1 -0
- package/src/registry/tool/execute.test.ts +85 -10
- package/src/registry/tool/execute.ts +124 -21
- package/src/registry/toolset/catalog.test.ts +68 -0
- package/src/runtime/query/__tests__/deferred-tools.test.ts +52 -5
- package/src/runtime/query/__tests__/long-document-flow.test.ts +180 -0
- package/src/runtime/query/__tests__/prompt.test.ts +15 -11
- package/src/runtime/query/index.ts +34 -2
- package/src/runtime/query/iteration/index.ts +98 -6
- package/src/runtime/query/iteration/phases/checkpoint.ts +7 -2
- package/src/runtime/query/iteration/phases/compaction.ts +89 -3
- package/src/runtime/query/iteration/phases/context.ts +58 -0
- package/src/runtime/query/iteration/phases/hitl-abort-race.test.ts +86 -0
- package/src/runtime/query/iteration/phases/hitl-answer-question.test.ts +139 -0
- package/src/runtime/query/iteration/phases/tool-review.ts +7 -3
- package/src/runtime/query/iteration/phases/working-memory-compaction.test.ts +215 -0
- package/src/runtime/query/iteration/phases/working-memory.ts +86 -0
- package/src/session/workspace/__tests__/shared-run.test.ts +1 -1
- package/src/session/workspace/shared-run.ts +1 -0
- package/src/skills/loader.test.ts +8 -8
- package/src/streaming/coalesce.test.ts +3 -3
- package/src/tools/builtins/__tests__/payload-budget.test.ts +63 -0
- package/src/tools/builtins/__tests__/read-file.test.ts +12 -0
- package/src/tools/builtins/read-file.ts +50 -2
- package/src/tools/builtins/search-tools.ts +38 -7
- package/src/tools/coordinator/__tests__/approve-plan.test.ts +139 -0
- package/src/tools/coordinator/__tests__/ask-user-question.test.ts +370 -0
- package/src/tools/coordinator/index.ts +227 -17
- package/src/types/agent/index.ts +1 -0
- package/src/types/agent/reactive.ts +17 -0
- package/src/types/agent/supervisor.ts +20 -0
- package/src/types/agent/working-memory.ts +29 -0
- package/src/types/common/index.ts +19 -0
- package/src/types/common/usage-merge.test.ts +53 -0
- package/src/types/connector/mcp.ts +14 -2
- package/src/types/hitl/index.ts +52 -1
- package/src/types/provider/chat.ts +10 -0
- package/src/version.ts +26 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/types/connector/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACjG,OAAO,KAAK,EACX,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,MAAM,iBAAiB,CAAA;AAExB,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/types/connector/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ export type HITLResumeDecision = {
|
|
|
7
7
|
action: 'continue';
|
|
8
8
|
} | {
|
|
9
9
|
action: 'approve_plan';
|
|
10
|
+
feedback?: string;
|
|
10
11
|
} | {
|
|
11
12
|
action: 'reject_plan';
|
|
12
13
|
feedback: string;
|
|
@@ -18,6 +19,21 @@ export type HITLResumeDecision = {
|
|
|
18
19
|
} | {
|
|
19
20
|
action: 'reject_tools';
|
|
20
21
|
feedback: string;
|
|
22
|
+
} | {
|
|
23
|
+
action: 'answer_question';
|
|
24
|
+
selectedOptionIds: string[];
|
|
25
|
+
freeText?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Echo of `UserQuestionData.questionId` — the misdirection
|
|
28
|
+
* guard. The park/resolve registry on hosts is typically
|
|
29
|
+
* keyed by run, so a stale client can answer question N
|
|
30
|
+
* after question N+1 re-parked under the same run. When
|
|
31
|
+
* present and it does not match the asking tool's own
|
|
32
|
+
* questionId, the tool treats the decision as unanswered
|
|
33
|
+
* instead of fabricating a selection against the wrong
|
|
34
|
+
* question.
|
|
35
|
+
*/
|
|
36
|
+
questionId?: string;
|
|
21
37
|
} | {
|
|
22
38
|
action: 'pause';
|
|
23
39
|
reason: string;
|
|
@@ -40,6 +56,11 @@ export type HITLDecisionRequest = {
|
|
|
40
56
|
runId: RunId;
|
|
41
57
|
checkpointId: CheckpointId;
|
|
42
58
|
summary: CheckpointSummary;
|
|
59
|
+
} | {
|
|
60
|
+
type: 'user_question';
|
|
61
|
+
runId: RunId;
|
|
62
|
+
checkpointId: CheckpointId;
|
|
63
|
+
question: UserQuestionData;
|
|
43
64
|
};
|
|
44
65
|
export type ResumeHandler = (request: HITLDecisionRequest) => Promise<HITLResumeDecision>;
|
|
45
66
|
export interface ToolCallSummary {
|
|
@@ -53,6 +74,27 @@ export interface ToolModification {
|
|
|
53
74
|
action: 'approve' | 'deny' | 'modify';
|
|
54
75
|
modifiedInput?: unknown;
|
|
55
76
|
}
|
|
77
|
+
export interface UserQuestionOption {
|
|
78
|
+
id: string;
|
|
79
|
+
label: string;
|
|
80
|
+
description?: string;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* A model-authored question for the user, parked through the
|
|
84
|
+
* `ResumeHandler` exactly like a plan approval. `questionId` equals
|
|
85
|
+
* the asking `tool_use_id` so the host can mint stable, mergeable
|
|
86
|
+
* activity ids per question and so answers can be matched back to
|
|
87
|
+
* the question that asked them (see
|
|
88
|
+
* `HITLResumeDecision['answer_question'].questionId`).
|
|
89
|
+
*/
|
|
90
|
+
export interface UserQuestionData {
|
|
91
|
+
questionId: string;
|
|
92
|
+
question: string;
|
|
93
|
+
header?: string;
|
|
94
|
+
options: UserQuestionOption[];
|
|
95
|
+
multiSelect: boolean;
|
|
96
|
+
allowFreeText: boolean;
|
|
97
|
+
}
|
|
56
98
|
export interface PlanApprovalData {
|
|
57
99
|
planId: PlanId;
|
|
58
100
|
title: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/hitl/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD,YAAY,EAAE,YAAY,EAAE,CAAA;AAE5B,MAAM,MAAM,kBAAkB,GAC3B;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,GACtB;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/hitl/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/hitl/index.js
CHANGED
|
@@ -6,6 +6,17 @@ export function autoApproveHandler(request) {
|
|
|
6
6
|
return Promise.resolve({ action: 'approve_tools' });
|
|
7
7
|
case 'iteration_checkpoint':
|
|
8
8
|
return Promise.resolve({ action: 'continue' });
|
|
9
|
+
case 'user_question':
|
|
10
|
+
// Headless runs must never deadlock on a question and must
|
|
11
|
+
// never fabricate a user choice: answer with an explicit
|
|
12
|
+
// no-selection sentinel so the asking tool renders "the user
|
|
13
|
+
// did not answer" rather than consent.
|
|
14
|
+
return Promise.resolve({
|
|
15
|
+
action: 'answer_question',
|
|
16
|
+
selectedOptionIds: [],
|
|
17
|
+
freeText: 'No user is available to answer. Proceed using your best judgment.',
|
|
18
|
+
questionId: request.question.questionId,
|
|
19
|
+
});
|
|
9
20
|
default: {
|
|
10
21
|
const _exhaustive = request;
|
|
11
22
|
throw new Error(`Unhandled HITL request type: ${_exhaustive.type}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/hitl/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/hitl/index.ts"],"names":[],"mappings":"AA8IA,MAAM,UAAU,kBAAkB,CAAC,OAA4B;IAC9D,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,eAAe;YACnB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAA;QACnD,KAAK,aAAa;YACjB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAA;QACpD,KAAK,sBAAsB;YAC1B,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;QAC/C,KAAK,eAAe;YACnB,2DAA2D;YAC3D,yDAAyD;YACzD,6DAA6D;YAC7D,uCAAuC;YACvC,OAAO,OAAO,CAAC,OAAO,CAAC;gBACtB,MAAM,EAAE,iBAAiB;gBACzB,iBAAiB,EAAE,EAAE;gBACrB,QAAQ,EAAE,mEAAmE;gBAC7E,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,UAAU;aACvC,CAAC,CAAA;QACH,OAAO,CAAC,CAAC,CAAC;YACT,MAAM,WAAW,GAAU,OAAO,CAAA;YAClC,MAAM,IAAI,KAAK,CAAC,gCAAiC,WAAmC,CAAC,IAAI,EAAE,CAAC,CAAA;QAC7F,CAAC;IACF,CAAC;AACF,CAAC"}
|
|
@@ -28,6 +28,15 @@ export interface ChatCompletionParams {
|
|
|
28
28
|
maxTokens?: number;
|
|
29
29
|
stream?: boolean;
|
|
30
30
|
stop?: string[];
|
|
31
|
+
/**
|
|
32
|
+
* Per-call cancellation. Aborting it tears down the in-flight model
|
|
33
|
+
* request (the provider passes it to the underlying fetch / SDK) AND the
|
|
34
|
+
* runtime races the stream consumer against it, so a Stop stops the
|
|
35
|
+
* CURRENT turn mid-flight — not only between turns. Optional and inert
|
|
36
|
+
* when unset: a non-aborted signal is behaviourally identical to omitting
|
|
37
|
+
* it, so existing callers are unaffected.
|
|
38
|
+
*/
|
|
39
|
+
signal?: AbortSignal;
|
|
31
40
|
toolChoice?: ToolChoice;
|
|
32
41
|
parallelToolCalls?: boolean;
|
|
33
42
|
cacheControl?: CacheControl;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../src/types/provider/chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAErD,MAAM,MAAM,UAAU,GACnB,MAAM,GACN,MAAM,GACN,UAAU,GACV;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAA;AAEnD,MAAM,MAAM,cAAc,GACvB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IACA,IAAI,EAAE,aAAa,CAAA;IACnB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAC/E,CAAA;AAEJ,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,KAAK,CAAC,EAAE,aAAa,EAAE,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IAEf,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAE3B,YAAY,CAAC,EAAE,YAAY,CAAA;IAE3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B,cAAc,CAAC,EAAE,cAAc,CAAA;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACtC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE;QACR,IAAI,EAAE,WAAW,CAAA;QACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;QACtB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;KACtB,CAAA;IACD,YAAY,EAAE,MAAM,GAAG,YAAY,GAAG,QAAQ,GAAG,gBAAgB,CAAA;IACjE,KAAK,EAAE,UAAU,CAAA;CACjB"}
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../src/types/provider/chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAErD,MAAM,MAAM,UAAU,GACnB,MAAM,GACN,MAAM,GACN,UAAU,GACV;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAA;AAEnD,MAAM,MAAM,cAAc,GACvB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IACA,IAAI,EAAE,aAAa,CAAA;IACnB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAC/E,CAAA;AAEJ,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,KAAK,CAAC,EAAE,aAAa,EAAE,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IAEf;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;IAEpB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAE3B,YAAY,CAAC,EAAE,YAAY,CAAA;IAE3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B,cAAc,CAAC,EAAE,cAAc,CAAA;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACtC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE;QACR,IAAI,EAAE,WAAW,CAAA;QACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;QACtB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;KACtB,CAAA;IACD,YAAY,EAAE,MAAM,GAAG,YAAY,GAAG,QAAQ,GAAG,gBAAgB,CAAA;IACjE,KAAK,EAAE,UAAU,CAAA;CACjB"}
|
package/dist/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,OAAO,EAAE,MAAsB,CAAA"}
|
package/dist/version.js
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
/**
|
|
5
|
+
* The SDK's package version, read from package.json relative to this module.
|
|
6
|
+
*
|
|
7
|
+
* Wrapped in try/catch (mirroring the CLI's readPackageVersion): a bundler
|
|
8
|
+
* like esbuild collapses the whole dist tree into a single file, so at runtime
|
|
9
|
+
* `../package.json` no longer resolves next to the bundle. Without the guard,
|
|
10
|
+
* this module's top-level read throws at import time and takes the entire
|
|
11
|
+
* process down — which is exactly what broke the bundled desktop runtime
|
|
12
|
+
* (`Cannot find module '../package.json'` on any code path that touches the
|
|
13
|
+
* SDK runtime). The version string is cosmetic, so a placeholder is fine.
|
|
14
|
+
*/
|
|
15
|
+
function readVersion() {
|
|
16
|
+
try {
|
|
17
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
18
|
+
const pkg = JSON.parse(readFileSync(join(here, '..', 'package.json'), 'utf8'));
|
|
19
|
+
return typeof pkg.version === 'string' ? pkg.version : '0.0.0';
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return '0.0.0';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export const VERSION = readVersion();
|
|
5
26
|
//# sourceMappingURL=version.js.map
|
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC;;;;;;;;;;GAUG;AACH,SAAS,WAAW;IACnB,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAE5E,CAAA;QACD,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAA;IAC/D,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,OAAO,CAAA;IACf,CAAC;AACF,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAW,WAAW,EAAE,CAAA"}
|
package/package.json
CHANGED
|
@@ -48,6 +48,11 @@ export class ReactiveAgent extends AbstractAgent<ReactiveAgentConfig, ReactiveAg
|
|
|
48
48
|
tools: config.tools,
|
|
49
49
|
...(config.verificationGate ? { verificationGate: config.verificationGate } : {}),
|
|
50
50
|
...(config.sandboxProvider ? { sandboxProvider: config.sandboxProvider } : {}),
|
|
51
|
+
// Working-memory / compaction seam (optional; absent => unchanged run path).
|
|
52
|
+
...(config.compactionConfig ? { compactionConfig: config.compactionConfig } : {}),
|
|
53
|
+
...(config.workingMemoryProvider
|
|
54
|
+
? { workingMemoryProvider: config.workingMemoryProvider }
|
|
55
|
+
: {}),
|
|
51
56
|
runConfig: {
|
|
52
57
|
model: config.model,
|
|
53
58
|
tokenBudget: config.tokenBudget,
|
|
@@ -4,21 +4,63 @@ import { ToolRegistry } from '../registry/tool/execute.js'
|
|
|
4
4
|
import { drainQuery } from '../runtime/query/index.js'
|
|
5
5
|
import type { LaunchedTaskMeta } from '../runtime/query/iteration/phases/context.js'
|
|
6
6
|
import { buildCoordinatorTools } from '../tools/coordinator/index.js'
|
|
7
|
-
import type { TaskGateway } from '../types/agent/gateway.js'
|
|
7
|
+
import type { TaskGateway, TaskHandle } from '../types/agent/gateway.js'
|
|
8
8
|
import type {
|
|
9
9
|
AgentInput,
|
|
10
10
|
AgentMetadata,
|
|
11
|
+
AgentTaskResult,
|
|
11
12
|
SupervisorAgentConfig,
|
|
12
13
|
SupervisorAgentResult,
|
|
13
14
|
} from '../types/agent/index.js'
|
|
14
15
|
import type { AgentTaskContext } from '../types/agent/task.js'
|
|
15
|
-
import type { AgentId, TaskId } from '../types/ids/index.js'
|
|
16
|
+
import type { AgentId, RunId, TaskId } from '../types/ids/index.js'
|
|
16
17
|
import { deriveChildState } from '../types/invocation/index.js'
|
|
17
18
|
import type { RunEventListener } from '../types/run/index.js'
|
|
18
19
|
import type { ActorRef } from '../types/session/actor.js'
|
|
19
20
|
import { ZERO_COST } from '../utils/cost.js'
|
|
20
21
|
import { AbstractAgent } from './AbstractAgent.js'
|
|
21
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Build the authoritative per-task ledger from the gateway's task handles.
|
|
25
|
+
*
|
|
26
|
+
* A handle carries a `result` only when its worker actually produced one. A
|
|
27
|
+
* handle with NO result never produced a verifiable outcome, so it MUST NOT be
|
|
28
|
+
* synthesized as a success: the synthesized status is always the terminal
|
|
29
|
+
* `'failed'`, regardless of the handle's reported `state` (which may itself be
|
|
30
|
+
* `'completed'`).
|
|
31
|
+
*
|
|
32
|
+
* The earlier implementation cast `handle.state` onto the synthesized result's
|
|
33
|
+
* status, letting a worker that ended without a result count toward
|
|
34
|
+
* `completedTasks`. That produced fabricated "done" workers with empty outputs
|
|
35
|
+
* (cowork task 02c5cf2b): the supervisor reported "3 workers done, 40KB
|
|
36
|
+
* reports" when the workers never started. Real workers (those with a present
|
|
37
|
+
* `result`) are unaffected — their `result` is preserved verbatim.
|
|
38
|
+
*/
|
|
39
|
+
export function synthesizeTaskResults(
|
|
40
|
+
taskHandles: readonly TaskHandle[],
|
|
41
|
+
runId: RunId,
|
|
42
|
+
now: number = Date.now(),
|
|
43
|
+
): AgentTaskResult[] {
|
|
44
|
+
return taskHandles.map((handle, index) => ({
|
|
45
|
+
agentId: handle.agentId,
|
|
46
|
+
result: handle.result ?? {
|
|
47
|
+
runId,
|
|
48
|
+
status: 'failed' as const,
|
|
49
|
+
usage: { ...EMPTY_TOKEN_USAGE },
|
|
50
|
+
cost: { ...ZERO_COST },
|
|
51
|
+
iterations: 0,
|
|
52
|
+
durationMs: now - handle.createdAt,
|
|
53
|
+
messages: [],
|
|
54
|
+
},
|
|
55
|
+
taskIndex: index,
|
|
56
|
+
}))
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** Count only the task results that genuinely completed. */
|
|
60
|
+
export function countCompletedTasks(taskResults: readonly AgentTaskResult[]): number {
|
|
61
|
+
return taskResults.filter((t) => t.result.status === 'completed').length
|
|
62
|
+
}
|
|
63
|
+
|
|
22
64
|
export class SupervisorAgent extends AbstractAgent<SupervisorAgentConfig, SupervisorAgentResult> {
|
|
23
65
|
readonly type = 'supervisor' as const
|
|
24
66
|
|
|
@@ -110,6 +152,10 @@ export class SupervisorAgent extends AbstractAgent<SupervisorAgentConfig, Superv
|
|
|
110
152
|
onTaskLaunched: (agentTaskId, meta) => {
|
|
111
153
|
launchedTasks.set(agentTaskId, meta)
|
|
112
154
|
},
|
|
155
|
+
// With a resume handler present the coordinator surface gains
|
|
156
|
+
// ask_user_question — the model can park the run on a question
|
|
157
|
+
// routed through the same HITL channel as plan approvals.
|
|
158
|
+
...(config.resumeHandler ? { resumeHandler: config.resumeHandler } : {}),
|
|
113
159
|
})
|
|
114
160
|
|
|
115
161
|
const tools = new ToolRegistry()
|
|
@@ -171,26 +217,20 @@ export class SupervisorAgent extends AbstractAgent<SupervisorAgentConfig, Superv
|
|
|
171
217
|
...(config.resumeHandler ? { resumeHandler: config.resumeHandler } : {}),
|
|
172
218
|
...(config.verificationGate ? { verificationGate: config.verificationGate } : {}),
|
|
173
219
|
...(config.sandboxProvider ? { sandboxProvider: config.sandboxProvider } : {}),
|
|
220
|
+
// Working-memory / compaction seam (optional; absent => unchanged
|
|
221
|
+
// run path, byte-identical for every existing consumer).
|
|
222
|
+
...(config.compactionConfig ? { compactionConfig: config.compactionConfig } : {}),
|
|
223
|
+
...(config.workingMemoryProvider
|
|
224
|
+
? { workingMemoryProvider: config.workingMemoryProvider }
|
|
225
|
+
: {}),
|
|
174
226
|
},
|
|
175
227
|
listener,
|
|
176
228
|
)
|
|
177
229
|
|
|
178
230
|
const taskHandles = gateway.listTasks()
|
|
179
|
-
const taskResults = taskHandles
|
|
180
|
-
agentId: handle.agentId,
|
|
181
|
-
result: handle.result ?? {
|
|
182
|
-
runId,
|
|
183
|
-
status: handle.state as 'completed' | 'failed' | 'cancelled',
|
|
184
|
-
usage: { ...EMPTY_TOKEN_USAGE },
|
|
185
|
-
cost: { ...ZERO_COST },
|
|
186
|
-
iterations: 0,
|
|
187
|
-
durationMs: Date.now() - handle.createdAt,
|
|
188
|
-
messages: [],
|
|
189
|
-
},
|
|
190
|
-
taskIndex: index,
|
|
191
|
-
}))
|
|
231
|
+
const taskResults = synthesizeTaskResults(taskHandles, runId)
|
|
192
232
|
|
|
193
|
-
const completedTasks = taskResults
|
|
233
|
+
const completedTasks = countCompletedTasks(taskResults)
|
|
194
234
|
|
|
195
235
|
return {
|
|
196
236
|
runId: run.id,
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
import type { TaskHandle } from '../../types/agent/gateway.js'
|
|
3
|
+
import type { AgentTaskResult, BaseAgentResult } from '../../types/agent/index.js'
|
|
4
|
+
import type { RunId, TaskId } from '../../types/ids/index.js'
|
|
5
|
+
import { countCompletedTasks, synthesizeTaskResults } from '../SupervisorAgent.js'
|
|
6
|
+
|
|
7
|
+
const RUN_ID = 'run-supervisor' as RunId
|
|
8
|
+
const NOW = 1_000_000
|
|
9
|
+
|
|
10
|
+
function at(results: AgentTaskResult[], index: number): AgentTaskResult {
|
|
11
|
+
const entry = results[index]
|
|
12
|
+
if (!entry) {
|
|
13
|
+
throw new Error(`expected a task result at index ${index}, got ${results.length} results`)
|
|
14
|
+
}
|
|
15
|
+
return entry
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function handle(overrides: Partial<TaskHandle> & Pick<TaskHandle, 'state'>): TaskHandle {
|
|
19
|
+
return {
|
|
20
|
+
taskId: 'task-1' as TaskId,
|
|
21
|
+
agentId: 'worker-1',
|
|
22
|
+
createdAt: NOW - 5_000,
|
|
23
|
+
...overrides,
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function completedResult(): BaseAgentResult {
|
|
28
|
+
return {
|
|
29
|
+
runId: 'run-worker' as RunId,
|
|
30
|
+
status: 'completed',
|
|
31
|
+
usage: {
|
|
32
|
+
promptTokens: 10,
|
|
33
|
+
completionTokens: 20,
|
|
34
|
+
totalTokens: 30,
|
|
35
|
+
cachedTokens: 0,
|
|
36
|
+
cacheWriteTokens: 0,
|
|
37
|
+
},
|
|
38
|
+
cost: {
|
|
39
|
+
inputCostPer1M: 0,
|
|
40
|
+
outputCostPer1M: 0,
|
|
41
|
+
totalCost: 0,
|
|
42
|
+
cacheDiscount: 0,
|
|
43
|
+
},
|
|
44
|
+
iterations: 3,
|
|
45
|
+
durationMs: 4_200,
|
|
46
|
+
messages: [],
|
|
47
|
+
result: 'real worker output',
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
describe('supervisor ledger truthfulness', () => {
|
|
52
|
+
describe('synthesizeTaskResults', () => {
|
|
53
|
+
it('synthesizes a FAILED result when a handle has no result, regardless of state', () => {
|
|
54
|
+
// A worker that ended with no result is NOT a success even when the
|
|
55
|
+
// handle reports a terminal 'completed' state — this is the exact
|
|
56
|
+
// fabrication that made the supervisor claim "3 workers done" with
|
|
57
|
+
// empty outputs (cowork task 02c5cf2b).
|
|
58
|
+
const results = synthesizeTaskResults(
|
|
59
|
+
[handle({ state: 'completed', result: undefined })],
|
|
60
|
+
RUN_ID,
|
|
61
|
+
NOW,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
expect(results).toHaveLength(1)
|
|
65
|
+
expect(at(results, 0).result.status).toBe('failed')
|
|
66
|
+
expect(at(results, 0).result.status).not.toBe('completed')
|
|
67
|
+
expect(at(results, 0).result.runId).toBe(RUN_ID)
|
|
68
|
+
expect(at(results, 0).result.durationMs).toBe(NOW - (NOW - 5_000))
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
it('synthesizes a FAILED result for a genuinely failed handle', () => {
|
|
72
|
+
const results = synthesizeTaskResults(
|
|
73
|
+
[handle({ state: 'failed', result: undefined })],
|
|
74
|
+
RUN_ID,
|
|
75
|
+
NOW,
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
expect(at(results, 0).result.status).toBe('failed')
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
it('synthesizes a FAILED result for a canceled handle with no result', () => {
|
|
82
|
+
const results = synthesizeTaskResults(
|
|
83
|
+
[handle({ state: 'canceled', result: undefined })],
|
|
84
|
+
RUN_ID,
|
|
85
|
+
NOW,
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
expect(at(results, 0).result.status).toBe('failed')
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
it('preserves a present completed result verbatim (real workers unaffected)', () => {
|
|
92
|
+
const real = completedResult()
|
|
93
|
+
const results = synthesizeTaskResults(
|
|
94
|
+
[handle({ state: 'completed', result: real })],
|
|
95
|
+
RUN_ID,
|
|
96
|
+
NOW,
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
expect(at(results, 0).result).toBe(real)
|
|
100
|
+
expect(at(results, 0).result.status).toBe('completed')
|
|
101
|
+
expect(at(results, 0).result.result).toBe('real worker output')
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
it('preserves a present failed result verbatim', () => {
|
|
105
|
+
const failed: BaseAgentResult = { ...completedResult(), status: 'failed' }
|
|
106
|
+
const results = synthesizeTaskResults(
|
|
107
|
+
[handle({ state: 'failed', result: failed })],
|
|
108
|
+
RUN_ID,
|
|
109
|
+
NOW,
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
expect(at(results, 0).result).toBe(failed)
|
|
113
|
+
expect(at(results, 0).result.status).toBe('failed')
|
|
114
|
+
})
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
describe('countCompletedTasks', () => {
|
|
118
|
+
it('excludes an absent-result handle from completedTasks', () => {
|
|
119
|
+
const taskResults = synthesizeTaskResults(
|
|
120
|
+
[
|
|
121
|
+
handle({
|
|
122
|
+
taskId: 'task-a' as TaskId,
|
|
123
|
+
agentId: 'a',
|
|
124
|
+
state: 'completed',
|
|
125
|
+
result: undefined,
|
|
126
|
+
}),
|
|
127
|
+
handle({
|
|
128
|
+
taskId: 'task-b' as TaskId,
|
|
129
|
+
agentId: 'b',
|
|
130
|
+
state: 'completed',
|
|
131
|
+
result: completedResult(),
|
|
132
|
+
}),
|
|
133
|
+
],
|
|
134
|
+
RUN_ID,
|
|
135
|
+
NOW,
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
// Two handles, both with handle.state === 'completed', but only the
|
|
139
|
+
// one that actually produced a result counts.
|
|
140
|
+
expect(taskResults).toHaveLength(2)
|
|
141
|
+
expect(countCompletedTasks(taskResults)).toBe(1)
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
it('counts every present completed result', () => {
|
|
145
|
+
const taskResults = synthesizeTaskResults(
|
|
146
|
+
[
|
|
147
|
+
handle({
|
|
148
|
+
taskId: 'task-a' as TaskId,
|
|
149
|
+
agentId: 'a',
|
|
150
|
+
state: 'completed',
|
|
151
|
+
result: completedResult(),
|
|
152
|
+
}),
|
|
153
|
+
handle({
|
|
154
|
+
taskId: 'task-b' as TaskId,
|
|
155
|
+
agentId: 'b',
|
|
156
|
+
state: 'completed',
|
|
157
|
+
result: completedResult(),
|
|
158
|
+
}),
|
|
159
|
+
],
|
|
160
|
+
RUN_ID,
|
|
161
|
+
NOW,
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
expect(countCompletedTasks(taskResults)).toBe(2)
|
|
165
|
+
})
|
|
166
|
+
|
|
167
|
+
it('reports zero completed when no worker produced a result', () => {
|
|
168
|
+
const taskResults = synthesizeTaskResults(
|
|
169
|
+
[
|
|
170
|
+
handle({
|
|
171
|
+
taskId: 'task-a' as TaskId,
|
|
172
|
+
agentId: 'a',
|
|
173
|
+
state: 'completed',
|
|
174
|
+
result: undefined,
|
|
175
|
+
}),
|
|
176
|
+
handle({ taskId: 'task-b' as TaskId, agentId: 'b', state: 'running', result: undefined }),
|
|
177
|
+
],
|
|
178
|
+
RUN_ID,
|
|
179
|
+
NOW,
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
expect(countCompletedTasks(taskResults)).toBe(0)
|
|
183
|
+
})
|
|
184
|
+
})
|
|
185
|
+
})
|
package/src/config/runtime.ts
CHANGED
|
@@ -18,6 +18,15 @@ export const TaskRouterConfigSchema = z
|
|
|
18
18
|
|
|
19
19
|
export const CompactionConfigSchema = z.object({
|
|
20
20
|
strategy: z.enum(['structured', 'sliding-window', 'disabled']).default('structured'),
|
|
21
|
+
/**
|
|
22
|
+
* Optional model context-window size (tokens) the compaction trigger
|
|
23
|
+
* measures the CURRENT window against. NO default: when omitted the
|
|
24
|
+
* trigger falls back to the run-level cumulative `tokenBudget` exactly as
|
|
25
|
+
* before, so existing consumers are byte-identical. Hosts that keep
|
|
26
|
+
* `tokenBudget` unlimited (0) set this so compaction fires on
|
|
27
|
+
* window-pressure instead of being a silent no-op.
|
|
28
|
+
*/
|
|
29
|
+
contextWindowTokens: z.number().positive().optional(),
|
|
21
30
|
triggerThreshold: z.number().min(0).max(1).default(0.7),
|
|
22
31
|
resetThreshold: z.number().min(0).max(1).default(0.4),
|
|
23
32
|
keepRecentMessages: z.number().positive().default(4),
|
|
@@ -126,6 +126,27 @@ describe('WebhookConnector', () => {
|
|
|
126
126
|
expect((await c.execute('send', { payload: {} })).success).toBe(false)
|
|
127
127
|
})
|
|
128
128
|
|
|
129
|
+
it('healthCheck returns false when the HEAD fetch throws', async () => {
|
|
130
|
+
const c = new WebhookConnector()
|
|
131
|
+
await c.connect({ url: 'https://hook.example.com' })
|
|
132
|
+
fetchMock.mockRejectedValueOnce(new Error('network down'))
|
|
133
|
+
expect(await c.healthCheck()).toBe(false)
|
|
134
|
+
})
|
|
135
|
+
|
|
136
|
+
it('reads a text body when the response is not JSON', async () => {
|
|
137
|
+
const c = new WebhookConnector()
|
|
138
|
+
await c.connect({ url: 'https://hook.example.com' })
|
|
139
|
+
fetchMock.mockResolvedValueOnce(
|
|
140
|
+
makeResponse({
|
|
141
|
+
status: 200,
|
|
142
|
+
headers: { 'content-type': 'text/plain' },
|
|
143
|
+
body: 'plain-text-ack',
|
|
144
|
+
}),
|
|
145
|
+
)
|
|
146
|
+
const result = await c.execute('send', { payload: { k: 'v' } })
|
|
147
|
+
expect((result.output as { body: unknown }).body).toBe('plain-text-ack')
|
|
148
|
+
})
|
|
149
|
+
|
|
129
150
|
it('metadata.deliveredAt is a recent timestamp', async () => {
|
|
130
151
|
const before = Date.now()
|
|
131
152
|
const c = new WebhookConnector()
|
package/src/connector/index.ts
CHANGED
|
@@ -19,6 +19,7 @@ import { generateMCPClientId } from '../../utils/id.js'
|
|
|
19
19
|
import { type Logger, getRootLogger } from '../../utils/logger.js'
|
|
20
20
|
import { HttpSseTransport } from './http-sse.js'
|
|
21
21
|
import { StdioTransport } from './stdio.js'
|
|
22
|
+
import { StreamableHttpTransport } from './streamable-http.js'
|
|
22
23
|
|
|
23
24
|
import { MCP_PROTOCOL_VERSION } from '../../constants/mcp/index.js'
|
|
24
25
|
import { VERSION } from '../../version.js'
|
|
@@ -175,6 +176,9 @@ export class MCPClient {
|
|
|
175
176
|
return new StdioTransport(config)
|
|
176
177
|
case 'http-sse':
|
|
177
178
|
return new HttpSseTransport(config)
|
|
179
|
+
case 'streamable_http':
|
|
180
|
+
case 'streamable-http':
|
|
181
|
+
return new StreamableHttpTransport(config)
|
|
178
182
|
default:
|
|
179
183
|
throw new Error(`Unsupported MCP transport type: ${(config as MCPTransportUnion).type}`)
|
|
180
184
|
}
|