@antelopejs/dms-ai 0.1.2 → 0.1.3
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 +49 -0
- package/dist/channels/bridge.d.ts +22 -0
- package/dist/channels/bridge.js +87 -0
- package/dist/channels/bridge.js.map +1 -0
- package/dist/channels/channel-service.d.ts +5 -0
- package/dist/channels/channel-service.js +68 -0
- package/dist/channels/channel-service.js.map +1 -0
- package/dist/channels/message-budget.d.ts +3 -0
- package/dist/channels/message-budget.js +29 -0
- package/dist/channels/message-budget.js.map +1 -0
- package/dist/channels/registry.d.ts +7 -0
- package/dist/channels/registry.js +47 -0
- package/dist/channels/registry.js.map +1 -0
- package/dist/channels/sse-stream.d.ts +19 -0
- package/dist/channels/sse-stream.js +59 -0
- package/dist/channels/sse-stream.js.map +1 -0
- package/dist/chatbox/passthrough.d.ts +3 -0
- package/dist/chatbox/passthrough.js +53 -0
- package/dist/chatbox/passthrough.js.map +1 -0
- package/dist/constants/channels.d.ts +30 -0
- package/dist/constants/channels.js +38 -0
- package/dist/constants/channels.js.map +1 -0
- package/dist/constants/chatbox.d.ts +10 -0
- package/dist/constants/chatbox.js +35 -0
- package/dist/constants/chatbox.js.map +1 -0
- package/dist/constants/sidecar.d.ts +4 -0
- package/dist/constants/sidecar.js +3 -1
- package/dist/constants/sidecar.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/lifecycle/sidecar-socket.d.ts +2 -0
- package/dist/lifecycle/sidecar-socket.js +37 -0
- package/dist/lifecycle/sidecar-socket.js.map +1 -0
- package/dist/lifecycle/sidecar-unavailable-error.d.ts +3 -0
- package/dist/lifecycle/sidecar-unavailable-error.js +10 -0
- package/dist/lifecycle/sidecar-unavailable-error.js.map +1 -0
- package/dist/routes/channels.d.ts +8 -0
- package/dist/routes/channels.js +52 -0
- package/dist/routes/channels.js.map +1 -0
- package/dist/routes/chatbox.d.ts +7 -0
- package/dist/routes/chatbox.js +47 -0
- package/dist/routes/chatbox.js.map +1 -0
- package/dist/routes/index.d.ts +2 -0
- package/dist/routes/index.js +2 -0
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/sidecar-info.js +0 -2
- package/dist/routes/sidecar-info.js.map +1 -1
- package/frontend-vue/app/components/SettingsView.vue +8 -0
- package/frontend-vue/app/plugins/ai.client.ts +137 -58
- package/frontend-vue/app/runtime/channel-client.ts +265 -0
- package/frontend-vue/app/runtime/chat-transport.ts +82 -0
- package/frontend-vue/app/runtime/constants.ts +30 -14
- package/frontend-vue/app/runtime/current-page.ts +9 -5
- package/frontend-vue/app/runtime/event-stream.ts +75 -0
- package/frontend-vue/app/runtime/overlay.ts +23 -6
- package/frontend-vue/app/runtime/sidecar-status.ts +10 -25
- package/frontend-vue/app/runtime/theme-bridge.ts +16 -4
- package/frontend-vue/package.json +3 -0
- package/frontend-vue/tests/backoff.test.ts +15 -15
- package/frontend-vue/tests/channel-client.test.ts +247 -0
- package/frontend-vue/tests/chat-transport.test.ts +67 -0
- package/frontend-vue/tests/sidecar-status.test.ts +39 -0
- package/package.json +5 -3
- package/sidecar/chatbox/dist/assets/index-C8u7mkHn.css +1 -0
- package/sidecar/chatbox/dist/assets/index-tdZvY7ee.js +52 -0
- package/sidecar/chatbox/dist/index.html +2 -2
- package/sidecar/dist/agent/disposals.d.ts +5 -0
- package/sidecar/dist/agent/disposals.js +17 -0
- package/sidecar/dist/agent/disposals.js.map +1 -0
- package/sidecar/dist/agent/effective-mode.d.ts +2 -0
- package/sidecar/dist/agent/effective-mode.js +20 -0
- package/sidecar/dist/agent/effective-mode.js.map +1 -0
- package/sidecar/dist/agent/provider.d.ts +2 -2
- package/sidecar/dist/agent/runner-events.d.ts +9 -1
- package/sidecar/dist/agent/runner.d.ts +2 -2
- package/sidecar/dist/agent/runner.js +11 -5
- package/sidecar/dist/agent/runner.js.map +1 -1
- package/sidecar/dist/agent/session.d.ts +3 -3
- package/sidecar/dist/agent/session.js +54 -34
- package/sidecar/dist/agent/session.js.map +1 -1
- package/sidecar/dist/agent/switching-runner.js +16 -14
- package/sidecar/dist/agent/switching-runner.js.map +1 -1
- package/sidecar/dist/agent/turn-end-reasons.d.ts +3 -0
- package/sidecar/dist/agent/turn-end-reasons.js +24 -0
- package/sidecar/dist/agent/turn-end-reasons.js.map +1 -0
- package/sidecar/dist/constants/agent.d.ts +6 -1
- package/sidecar/dist/constants/agent.js +13 -1
- package/sidecar/dist/constants/agent.js.map +1 -1
- package/sidecar/dist/constants/claude.d.ts +27 -1
- package/sidecar/dist/constants/claude.js +49 -0
- package/sidecar/dist/constants/claude.js.map +1 -1
- package/sidecar/dist/constants/codex.d.ts +6 -0
- package/sidecar/dist/constants/codex.js +13 -0
- package/sidecar/dist/constants/codex.js.map +1 -1
- package/sidecar/dist/constants/settings.js.map +1 -1
- package/sidecar/dist/constants/timing.d.ts +1 -0
- package/sidecar/dist/constants/timing.js +1 -0
- package/sidecar/dist/constants/timing.js.map +1 -1
- package/sidecar/dist/protocol/events.d.ts +36 -0
- package/sidecar/dist/protocol/events.js +13 -0
- package/sidecar/dist/protocol/events.js.map +1 -1
- package/sidecar/dist/providers/claude/activity.d.ts +5 -0
- package/sidecar/dist/providers/claude/activity.js +63 -0
- package/sidecar/dist/providers/claude/activity.js.map +1 -0
- package/sidecar/dist/providers/claude/adapter.js +21 -13
- package/sidecar/dist/providers/claude/adapter.js.map +1 -1
- package/sidecar/dist/providers/claude/config.d.ts +2 -1
- package/sidecar/dist/providers/claude/config.js +4 -0
- package/sidecar/dist/providers/claude/config.js.map +1 -1
- package/sidecar/dist/providers/claude/provider.js +18 -25
- package/sidecar/dist/providers/claude/provider.js.map +1 -1
- package/sidecar/dist/providers/claude/result.d.ts +3 -0
- package/sidecar/dist/providers/claude/result.js +61 -0
- package/sidecar/dist/providers/claude/result.js.map +1 -0
- package/sidecar/dist/providers/claude/safe-mode.d.ts +4 -0
- package/sidecar/dist/providers/claude/safe-mode.js +24 -0
- package/sidecar/dist/providers/claude/safe-mode.js.map +1 -0
- package/sidecar/dist/providers/codex/adapter.js +8 -2
- package/sidecar/dist/providers/codex/adapter.js.map +1 -1
- package/sidecar/dist/providers/codex/client.d.ts +1 -0
- package/sidecar/dist/providers/codex/client.js +1 -0
- package/sidecar/dist/providers/codex/client.js.map +1 -1
- package/sidecar/dist/providers/codex/config.js +2 -1
- package/sidecar/dist/providers/codex/config.js.map +1 -1
- package/sidecar/dist/providers/codex/process.js +113 -33
- package/sidecar/dist/providers/codex/process.js.map +1 -1
- package/sidecar/dist/providers/codex/provider.js +6 -4
- package/sidecar/dist/providers/codex/provider.js.map +1 -1
- package/sidecar/dist/server/routing.js +39 -21
- package/sidecar/dist/server/routing.js.map +1 -1
- package/sidecar/dist/server/turn-progress.d.ts +13 -0
- package/sidecar/dist/server/turn-progress.js +72 -0
- package/sidecar/dist/server/turn-progress.js.map +1 -0
- package/sidecar/dist/server/ws.js +4 -2
- package/sidecar/dist/server/ws.js.map +1 -1
- package/sidecar/dist/state/types.d.ts +2 -1
- package/sidecar/dist/state/types.js +1 -0
- package/sidecar/dist/state/types.js.map +1 -1
- package/sidecar/package.json +1 -1
- package/frontend-vue/app/runtime/ws-client.ts +0 -196
- package/frontend-vue/tests/sidecar-auth.test.ts +0 -87
- package/sidecar/chatbox/dist/assets/index-CEZ1NLp9.js +0 -52
- package/sidecar/chatbox/dist/assets/index-D_51Vqqk.css +0 -1
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>dms-ai chatbox</title>
|
|
7
|
-
<script type="module" crossorigin src="
|
|
8
|
-
<link rel="stylesheet" crossorigin href="
|
|
7
|
+
<script type="module" crossorigin src="./assets/index-tdZvY7ee.js"></script>
|
|
8
|
+
<link rel="stylesheet" crossorigin href="./assets/index-C8u7mkHn.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
11
|
<div id="app"></div>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export function createDisposalTracker() {
|
|
2
|
+
const pending = new Set();
|
|
3
|
+
return {
|
|
4
|
+
track: (disposal) => {
|
|
5
|
+
pending.add(disposal);
|
|
6
|
+
const forget = () => {
|
|
7
|
+
pending.delete(disposal);
|
|
8
|
+
};
|
|
9
|
+
void disposal.then(forget, forget);
|
|
10
|
+
},
|
|
11
|
+
settle: async () => {
|
|
12
|
+
while (pending.size > 0)
|
|
13
|
+
await Promise.allSettled(pending);
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=disposals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disposals.js","sourceRoot":"","sources":["../../src/agent/disposals.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,qBAAqB;IACnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiB,CAAC;IACzC,OAAO;QACL,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE;YAClB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtB,MAAM,MAAM,GAAG,GAAS,EAAE;gBACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC3B,CAAC,CAAC;YACF,KAAK,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,OAAO,OAAO,CAAC,IAAI,GAAG,CAAC;gBAAE,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7D,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { effectiveGenerationMode } from "../builder/capability.js";
|
|
2
|
+
const MODE_IN_FORCE = {
|
|
3
|
+
safe: {
|
|
4
|
+
normal: "normal",
|
|
5
|
+
acceptEdits: "acceptEdits",
|
|
6
|
+
plan: "plan",
|
|
7
|
+
auto: "acceptEdits",
|
|
8
|
+
},
|
|
9
|
+
vibe: {
|
|
10
|
+
normal: "normal",
|
|
11
|
+
acceptEdits: "acceptEdits",
|
|
12
|
+
plan: "plan",
|
|
13
|
+
auto: "auto",
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
export function effectiveChatboxMode(settings) {
|
|
17
|
+
const generationMode = effectiveGenerationMode(settings.generationMode);
|
|
18
|
+
return MODE_IN_FORCE[generationMode][settings.mode];
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=effective-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effective-mode.js","sourceRoot":"","sources":["../../src/agent/effective-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAOnE,MAAM,aAAa,GAGf;IACF,IAAI,EAAE;QACJ,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,aAAa;QAC1B,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,aAAa;KACpB;IACD,IAAI,EAAE;QACJ,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,aAAa;QAC1B,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,MAAM;KACb;CACF,CAAC;AASF,MAAM,UAAU,oBAAoB,CAAC,QAAqB;IACxD,MAAM,cAAc,GAAG,uBAAuB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACxE,OAAO,aAAa,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -20,12 +20,12 @@ export interface ProviderSessionContext {
|
|
|
20
20
|
mcpServer?: AiMcpServer;
|
|
21
21
|
onPermissionDecision?: (toolName: string, decision: PermissionDecision) => void;
|
|
22
22
|
onTokenUsage?: (usage: TokenUsage) => void;
|
|
23
|
-
onDisposed: () => void;
|
|
23
|
+
onDisposed: (disposal: Promise<void>) => void;
|
|
24
24
|
}
|
|
25
25
|
export interface ProviderSession {
|
|
26
26
|
runTurn(input: TurnInput, settings: AppSettings): AsyncIterable<RunnerEvent>;
|
|
27
27
|
interrupt(): void;
|
|
28
|
-
dispose(): void
|
|
28
|
+
dispose(): Promise<void>;
|
|
29
29
|
applySettings?(settings: AppSettings): void;
|
|
30
30
|
}
|
|
31
31
|
export interface AgentProvider {
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { ACTIVITY_KINDS } from "../constants/agent.js";
|
|
2
|
+
export type ActivityKind = (typeof ACTIVITY_KINDS)[number];
|
|
1
3
|
export interface RunnerAssistantText {
|
|
2
4
|
type: "assistant_text";
|
|
3
5
|
text: string;
|
|
@@ -24,5 +26,11 @@ export interface RunnerDone {
|
|
|
24
26
|
export interface RunnerError {
|
|
25
27
|
type: "error";
|
|
26
28
|
message: string;
|
|
29
|
+
isRetryable?: boolean;
|
|
27
30
|
}
|
|
28
|
-
export
|
|
31
|
+
export interface RunnerActivity {
|
|
32
|
+
type: "activity";
|
|
33
|
+
kind: ActivityKind;
|
|
34
|
+
detail?: string;
|
|
35
|
+
}
|
|
36
|
+
export type RunnerEvent = RunnerAssistantText | RunnerAssistantTextDelta | RunnerToolUse | RunnerToolResult | RunnerDone | RunnerError | RunnerActivity;
|
|
@@ -20,9 +20,9 @@ export interface RunnerContext {
|
|
|
20
20
|
export interface AgentRunner {
|
|
21
21
|
start(message: string, ctx: RunnerContext): AsyncIterable<RunnerEvent>;
|
|
22
22
|
interruptSession(conversationId: string): void;
|
|
23
|
-
disposeSession(conversationId: string): void
|
|
23
|
+
disposeSession(conversationId: string): Promise<void>;
|
|
24
24
|
applySettings(settings: AppSettings): void;
|
|
25
|
-
dispose(): void
|
|
25
|
+
dispose(): Promise<void>;
|
|
26
26
|
}
|
|
27
27
|
export interface AgentRunnerOptions {
|
|
28
28
|
settings?: AppSettings;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { effectiveGenerationMode } from "../builder/capability.js";
|
|
2
2
|
import { DEFAULT_SETTINGS } from "../constants/settings.js";
|
|
3
|
+
import { createDisposalTracker } from "./disposals.js";
|
|
3
4
|
import { prependHostContext } from "./host-context.js";
|
|
4
5
|
function createSession(manager, ctx) {
|
|
5
6
|
return manager.provider.createSession({
|
|
@@ -11,8 +12,9 @@ function createSession(manager, ctx) {
|
|
|
11
12
|
mcpServer: ctx.createMcpServer?.(),
|
|
12
13
|
onPermissionDecision: ctx.onPermissionDecision,
|
|
13
14
|
onTokenUsage: ctx.onTokenUsage,
|
|
14
|
-
onDisposed: () => {
|
|
15
|
+
onDisposed: (disposal) => {
|
|
15
16
|
manager.sessions.delete(ctx.conversationId);
|
|
17
|
+
manager.disposals.track(disposal);
|
|
16
18
|
},
|
|
17
19
|
});
|
|
18
20
|
}
|
|
@@ -38,15 +40,18 @@ function interruptSession(manager, conversationId) {
|
|
|
38
40
|
function disposeSession(manager, conversationId) {
|
|
39
41
|
const session = manager.sessions.get(conversationId);
|
|
40
42
|
if (session === undefined)
|
|
41
|
-
return;
|
|
43
|
+
return Promise.resolve();
|
|
42
44
|
manager.sessions.delete(conversationId);
|
|
43
|
-
session.dispose();
|
|
45
|
+
const disposal = session.dispose();
|
|
46
|
+
manager.disposals.track(disposal);
|
|
47
|
+
return disposal;
|
|
44
48
|
}
|
|
45
|
-
function disposeAll(manager) {
|
|
49
|
+
async function disposeAll(manager) {
|
|
46
50
|
const sessions = [...manager.sessions.values()];
|
|
47
51
|
manager.sessions.clear();
|
|
48
52
|
for (const session of sessions)
|
|
49
|
-
session.dispose();
|
|
53
|
+
manager.disposals.track(session.dispose());
|
|
54
|
+
await manager.disposals.settle();
|
|
50
55
|
}
|
|
51
56
|
function applySettings(manager, settings) {
|
|
52
57
|
manager.settings = settings;
|
|
@@ -59,6 +64,7 @@ export function createAgentRunner(provider, options) {
|
|
|
59
64
|
provider,
|
|
60
65
|
sessions: new Map(),
|
|
61
66
|
settings: options?.settings ?? DEFAULT_SETTINGS,
|
|
67
|
+
disposals: createDisposalTracker(),
|
|
62
68
|
};
|
|
63
69
|
return {
|
|
64
70
|
start: (message, ctx) => startTurn(manager, message, ctx),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/agent/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAM5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/agent/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,19 +4,19 @@ import type { RunnerEvent } from "./runner-events.js";
|
|
|
4
4
|
export interface SessionControls {
|
|
5
5
|
submitTurn(input: TurnInput): void | Promise<void>;
|
|
6
6
|
interrupt(): void;
|
|
7
|
-
close(): void
|
|
7
|
+
close(): Promise<void>;
|
|
8
8
|
applySettings?(settings: AppSettings): void;
|
|
9
9
|
}
|
|
10
10
|
export interface AgentSession {
|
|
11
11
|
sendTurn(input: TurnInput, timeoutMs: number): AsyncIterable<RunnerEvent>;
|
|
12
12
|
applySettings(settings: AppSettings): void;
|
|
13
13
|
interrupt(): void;
|
|
14
|
-
dispose: () => void
|
|
14
|
+
dispose: () => Promise<void>;
|
|
15
15
|
}
|
|
16
16
|
export interface SessionDeps {
|
|
17
17
|
events: AsyncIterator<RunnerEvent, void>;
|
|
18
18
|
controls: SessionControls;
|
|
19
19
|
abortController: AbortController;
|
|
20
|
-
onDisposed: () => void;
|
|
20
|
+
onDisposed: (disposal: Promise<void>) => void;
|
|
21
21
|
}
|
|
22
22
|
export declare function createAgentSession(deps: SessionDeps): AgentSession;
|
|
@@ -1,16 +1,30 @@
|
|
|
1
|
-
import { INTERRUPT_FALLBACK_MS,
|
|
1
|
+
import { INTERRUPT_FALLBACK_MS, TURN_SESSION_CLOSED_MESSAGE, TURN_STREAM_ENDED_MESSAGE, } from "../constants/agent.js";
|
|
2
2
|
import { TOOL_EXECUTION_CAP_MS } from "../constants/timing.js";
|
|
3
|
+
import { idleTimeoutReason, toolCapReason } from "./turn-end-reasons.js";
|
|
4
|
+
function isDisposed(state) {
|
|
5
|
+
return state.disposal !== null;
|
|
6
|
+
}
|
|
7
|
+
const STOPPED_OUTCOME = { type: "done" };
|
|
8
|
+
function errorOutcome(message) {
|
|
9
|
+
return { type: "error", message };
|
|
10
|
+
}
|
|
11
|
+
function abortWith(state, outcome) {
|
|
12
|
+
if (state.abortOutcome === null)
|
|
13
|
+
state.abortOutcome = outcome;
|
|
14
|
+
state.abortController.abort();
|
|
15
|
+
}
|
|
3
16
|
function disposeSession(state) {
|
|
4
|
-
if (state.
|
|
5
|
-
return;
|
|
6
|
-
state.disposed = true;
|
|
17
|
+
if (state.disposal !== null)
|
|
18
|
+
return state.disposal;
|
|
7
19
|
clearInterruptFallback(state);
|
|
8
|
-
state.controls.close();
|
|
9
|
-
state.
|
|
10
|
-
state
|
|
20
|
+
const disposal = state.controls.close();
|
|
21
|
+
state.disposal = disposal;
|
|
22
|
+
abortWith(state, errorOutcome(TURN_SESSION_CLOSED_MESSAGE));
|
|
23
|
+
state.onDisposed(disposal);
|
|
24
|
+
return disposal;
|
|
11
25
|
}
|
|
12
26
|
function applySettings(state, settings) {
|
|
13
|
-
if (state
|
|
27
|
+
if (isDisposed(state))
|
|
14
28
|
return;
|
|
15
29
|
state.controls.applySettings?.(settings);
|
|
16
30
|
}
|
|
@@ -21,7 +35,7 @@ function clearInterruptFallback(state) {
|
|
|
21
35
|
state.interruptTimer = null;
|
|
22
36
|
}
|
|
23
37
|
function interrupt(state) {
|
|
24
|
-
if (state
|
|
38
|
+
if (isDisposed(state))
|
|
25
39
|
return;
|
|
26
40
|
if (state.activeTurns === 0)
|
|
27
41
|
return;
|
|
@@ -29,39 +43,38 @@ function interrupt(state) {
|
|
|
29
43
|
clearInterruptFallback(state);
|
|
30
44
|
state.interruptTimer = setTimeout(() => {
|
|
31
45
|
state.interruptTimer = null;
|
|
32
|
-
if (state
|
|
46
|
+
if (isDisposed(state) || state.activeTurns === 0)
|
|
33
47
|
return;
|
|
34
|
-
state
|
|
48
|
+
abortWith(state, STOPPED_OUTCOME);
|
|
35
49
|
}, INTERRUPT_FALLBACK_MS);
|
|
36
50
|
}
|
|
37
51
|
function armTurnTimeout(state, timeoutMs) {
|
|
38
|
-
const
|
|
52
|
+
const idleOutcome = errorOutcome(idleTimeoutReason(timeoutMs));
|
|
53
|
+
const toolOutcome = errorOutcome(toolCapReason(TOOL_EXECUTION_CAP_MS));
|
|
39
54
|
let timer;
|
|
40
|
-
const arm = (delayMs) => {
|
|
41
|
-
timer = setTimeout(() =>
|
|
42
|
-
flag.isTimedOut = true;
|
|
43
|
-
state.abortController.abort();
|
|
44
|
-
}, delayMs);
|
|
55
|
+
const arm = (delayMs, outcome) => {
|
|
56
|
+
timer = setTimeout(() => abortWith(state, outcome), delayMs);
|
|
45
57
|
};
|
|
46
|
-
arm(timeoutMs);
|
|
58
|
+
arm(timeoutMs, idleOutcome);
|
|
47
59
|
return {
|
|
48
|
-
flag,
|
|
49
60
|
clear: () => clearTimeout(timer),
|
|
50
61
|
reset: () => {
|
|
51
62
|
clearTimeout(timer);
|
|
52
|
-
arm(timeoutMs);
|
|
63
|
+
arm(timeoutMs, idleOutcome);
|
|
53
64
|
},
|
|
54
65
|
suspend: () => {
|
|
55
66
|
clearTimeout(timer);
|
|
56
|
-
arm(TOOL_EXECUTION_CAP_MS);
|
|
67
|
+
arm(TOOL_EXECUTION_CAP_MS, toolOutcome);
|
|
57
68
|
},
|
|
58
69
|
};
|
|
59
70
|
}
|
|
60
|
-
function buildErrorEvent(
|
|
61
|
-
if (
|
|
62
|
-
return
|
|
63
|
-
|
|
64
|
-
|
|
71
|
+
function buildErrorEvent(state, err) {
|
|
72
|
+
if (state.abortOutcome !== null)
|
|
73
|
+
return state.abortOutcome;
|
|
74
|
+
return errorOutcome(err instanceof Error ? err.message : String(err));
|
|
75
|
+
}
|
|
76
|
+
function buildStreamEndedEvent(state) {
|
|
77
|
+
return state.abortOutcome ?? errorOutcome(TURN_STREAM_ENDED_MESSAGE);
|
|
65
78
|
}
|
|
66
79
|
const OUTSTANDING_TOOL_DELTAS = {
|
|
67
80
|
tool_use: 1,
|
|
@@ -71,6 +84,14 @@ function countOutstanding(outstanding, event) {
|
|
|
71
84
|
const delta = OUTSTANDING_TOOL_DELTAS[event.type] ?? 0;
|
|
72
85
|
return Math.max(0, outstanding + delta);
|
|
73
86
|
}
|
|
87
|
+
function rearmAfter(timeout, event, outstandingTools) {
|
|
88
|
+
if (outstandingTools === 0) {
|
|
89
|
+
timeout.reset();
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
if (event.type !== "activity")
|
|
93
|
+
timeout.suspend();
|
|
94
|
+
}
|
|
74
95
|
async function* readTurn(state, timeout) {
|
|
75
96
|
let outstandingTools = 0;
|
|
76
97
|
while (true) {
|
|
@@ -79,21 +100,19 @@ async function* readTurn(state, timeout) {
|
|
|
79
100
|
result = await state.events.next();
|
|
80
101
|
}
|
|
81
102
|
catch (err) {
|
|
82
|
-
yield buildErrorEvent(
|
|
83
|
-
disposeSession(state);
|
|
103
|
+
yield buildErrorEvent(state, err);
|
|
104
|
+
void disposeSession(state);
|
|
84
105
|
return;
|
|
85
106
|
}
|
|
86
107
|
if (result.done) {
|
|
87
|
-
|
|
108
|
+
yield buildStreamEndedEvent(state);
|
|
109
|
+
void disposeSession(state);
|
|
88
110
|
return;
|
|
89
111
|
}
|
|
90
112
|
const event = result.value;
|
|
91
113
|
outstandingTools = countOutstanding(outstandingTools, event);
|
|
92
114
|
yield event;
|
|
93
|
-
|
|
94
|
-
timeout.suspend();
|
|
95
|
-
else
|
|
96
|
-
timeout.reset();
|
|
115
|
+
rearmAfter(timeout, event, outstandingTools);
|
|
97
116
|
if (event.type === "done")
|
|
98
117
|
return;
|
|
99
118
|
}
|
|
@@ -132,10 +151,11 @@ function sendTurn(state, input, timeoutMs) {
|
|
|
132
151
|
export function createAgentSession(deps) {
|
|
133
152
|
const state = {
|
|
134
153
|
...deps,
|
|
135
|
-
|
|
154
|
+
disposal: null,
|
|
136
155
|
tail: Promise.resolve(),
|
|
137
156
|
activeTurns: 0,
|
|
138
157
|
interruptTimer: null,
|
|
158
|
+
abortOutcome: null,
|
|
139
159
|
};
|
|
140
160
|
return {
|
|
141
161
|
sendTurn: (input, timeoutMs) => sendTurn(state, input, timeoutMs),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/agent/session.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/agent/session.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAI/D,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAuDzE,SAAS,UAAU,CAAC,KAAmB;IACrC,OAAO,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC;AACjC,CAAC;AAED,MAAM,eAAe,GAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAEtD,SAAS,YAAY,CAAC,OAAe;IACnC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,SAAS,CAAC,KAAmB,EAAE,OAAoB;IAC1D,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI;QAAE,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC;IAC9D,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,cAAc,CAAC,KAAmB;IACzC,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC,QAAQ,CAAC;IACnD,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAC5D,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC3B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,aAAa,CAAC,KAAmB,EAAE,QAAqB;IAC/D,IAAI,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO;IAC9B,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAmB;IACjD,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI;QAAE,OAAO;IAC1C,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACnC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;AAC9B,CAAC;AAOD,SAAS,SAAS,CAAC,KAAmB;IACpC,IAAI,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO;IAC9B,IAAI,KAAK,CAAC,WAAW,KAAK,CAAC;QAAE,OAAO;IACpC,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;IAC3B,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC9B,KAAK,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;QACrC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAC5B,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,KAAK,CAAC;YAAE,OAAO;QACzD,SAAS,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IACpC,CAAC,EAAE,qBAAqB,CAAC,CAAC;AAC5B,CAAC;AAMD,SAAS,cAAc,CAAC,KAAmB,EAAE,SAAiB;IAC5D,MAAM,WAAW,GAAG,YAAY,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,YAAY,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACvE,IAAI,KAAoC,CAAC;IACzC,MAAM,GAAG,GAAG,CAAC,OAAe,EAAE,OAAoB,EAAQ,EAAE;QAC1D,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC,CAAC;IACF,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC5B,OAAO;QACL,KAAK,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC;QAChC,KAAK,EAAE,GAAG,EAAE;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,EAAE,GAAG,EAAE;YACZ,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,GAAG,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;QAC1C,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAmB,EAAE,GAAY;IACxD,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC,YAAY,CAAC;IAC3D,OAAO,YAAY,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAmB;IAChD,OAAO,KAAK,CAAC,YAAY,IAAI,YAAY,CAAC,yBAAyB,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,uBAAuB,GAA2B;IACtD,QAAQ,EAAE,CAAC;IACX,WAAW,EAAE,CAAC,CAAC;CAChB,CAAC;AAEF,SAAS,gBAAgB,CAAC,WAAmB,EAAE,KAAkB;IAC/D,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,UAAU,CACjB,OAAoB,EACpB,KAAkB,EAClB,gBAAwB;IAExB,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,CAAC,OAAO,EAAE,CAAC;AACnD,CAAC;AAED,KAAK,SAAS,CAAC,CAAC,QAAQ,CACtB,KAAmB,EACnB,OAAoB;IAEpB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,MAAyC,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAClC,KAAK,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACnC,KAAK,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,gBAAgB,GAAG,gBAAgB,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QAC7D,MAAM,KAAK,CAAC;QACZ,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO;IACpC,CAAC;AACH,CAAC;AAED,KAAK,SAAS,CAAC,CAAC,OAAO,CACrB,KAAmB,EACnB,KAAgB,EAChB,SAAiB;IAEjB,MAAM,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACvC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;IACvB,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACjD,IAAI,CAAC;QACH,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;QACvB,IAAI,KAAK,CAAC,WAAW,KAAK,CAAC;YAAE,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,KAAK,SAAS,CAAC,CAAC,SAAS,CACvB,KAAmB,EACnB,KAAgB,EAChB,SAAiB,EACjB,QAAuB,EACvB,OAAmB;IAEnB,MAAM,QAAQ,CAAC;IACf,IAAI,CAAC;QACH,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAC1C,CAAC;YAAS,CAAC;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CACf,KAAmB,EACnB,KAAgB,EAChB,SAAiB;IAEjB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC;IAC5B,IAAI,OAAO,GAAe,GAAG,EAAE,GAAE,CAAC,CAAC;IACnC,KAAK,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACnC,OAAO,GAAG,OAAO,CAAC;IACpB,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAiB;IAClD,MAAM,KAAK,GAAiB;QAC1B,GAAG,IAAI;QACP,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE;QACvB,WAAW,EAAE,CAAC;QACd,cAAc,EAAE,IAAI;QACpB,YAAY,EAAE,IAAI;KACnB,CAAC;IACF,OAAO;QACL,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC;QACjE,aAAa,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC;QAC3D,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC;QACjC,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC;KACrC,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { PROVIDER_LABEL_TOKEN, PROVIDER_LABELS, PROVIDER_SWITCH_LOG, PROVIDER_UNAVAILABLE_ERROR, } from "../constants/providers.js";
|
|
2
2
|
import { providerUnavailableReason } from "../providers/registry.js";
|
|
3
|
+
import { createDisposalTracker } from "./disposals.js";
|
|
3
4
|
function unavailableError(name, reason) {
|
|
4
5
|
const prefix = PROVIDER_UNAVAILABLE_ERROR.replace(PROVIDER_LABEL_TOKEN, PROVIDER_LABELS[name]);
|
|
5
6
|
return new Error(`${prefix} ${reason}`);
|
|
@@ -15,13 +16,22 @@ function activate(state) {
|
|
|
15
16
|
state.active = { name, runner };
|
|
16
17
|
return runner;
|
|
17
18
|
}
|
|
18
|
-
function
|
|
19
|
+
function retire(state) {
|
|
19
20
|
const previous = state.active;
|
|
20
21
|
state.active = null;
|
|
22
|
+
if (previous !== null)
|
|
23
|
+
state.retiring.track(previous.runner.dispose());
|
|
24
|
+
return previous;
|
|
25
|
+
}
|
|
26
|
+
function switchProvider(state, next) {
|
|
27
|
+
const previous = retire(state);
|
|
21
28
|
if (previous === null)
|
|
22
29
|
return;
|
|
23
30
|
console.log(`${PROVIDER_SWITCH_LOG} ${previous.name} -> ${next}`);
|
|
24
|
-
|
|
31
|
+
}
|
|
32
|
+
function retireActive(state) {
|
|
33
|
+
retire(state);
|
|
34
|
+
return state.retiring.settle();
|
|
25
35
|
}
|
|
26
36
|
function applySettings(state, settings) {
|
|
27
37
|
state.settings = settings;
|
|
@@ -31,28 +41,20 @@ function applySettings(state, settings) {
|
|
|
31
41
|
}
|
|
32
42
|
state.active?.runner.applySettings(settings);
|
|
33
43
|
}
|
|
34
|
-
function withActive(state, act) {
|
|
35
|
-
if (state.active === null)
|
|
36
|
-
return;
|
|
37
|
-
act(state.active.runner);
|
|
38
|
-
}
|
|
39
44
|
export function createSwitchingRunner(build, settings, unavailableReason = providerUnavailableReason) {
|
|
40
45
|
const state = {
|
|
41
46
|
build,
|
|
42
47
|
unavailableReason,
|
|
43
48
|
settings,
|
|
44
49
|
active: null,
|
|
50
|
+
retiring: createDisposalTracker(),
|
|
45
51
|
};
|
|
46
52
|
return {
|
|
47
53
|
start: (message, ctx) => activate(state).start(message, ctx),
|
|
48
|
-
interruptSession: (conversationId) =>
|
|
49
|
-
disposeSession: (conversationId) =>
|
|
54
|
+
interruptSession: (conversationId) => state.active?.runner.interruptSession(conversationId),
|
|
55
|
+
disposeSession: (conversationId) => state.active?.runner.disposeSession(conversationId) ?? Promise.resolve(),
|
|
50
56
|
applySettings: (next) => applySettings(state, next),
|
|
51
|
-
dispose: () =>
|
|
52
|
-
const previous = state.active;
|
|
53
|
-
state.active = null;
|
|
54
|
-
previous?.runner.dispose();
|
|
55
|
-
},
|
|
57
|
+
dispose: () => retireActive(state),
|
|
56
58
|
};
|
|
57
59
|
}
|
|
58
60
|
//# sourceMappingURL=switching-runner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switching-runner.js","sourceRoot":"","sources":["../../src/agent/switching-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"switching-runner.js","sourceRoot":"","sources":["../../src/agent/switching-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { DURATION_TOKEN, TURN_IDLE_TIMEOUT_MESSAGE, TURN_TOOL_CAP_MESSAGE, } from "../constants/agent.js";
|
|
2
|
+
const MS_PER_SECOND = 1_000;
|
|
3
|
+
const SECONDS_PER_MINUTE = 60;
|
|
4
|
+
const MIN_WHOLE_SECONDS = 1;
|
|
5
|
+
const DURATION_UNITS = { SECOND: "second", MINUTE: "minute" };
|
|
6
|
+
const PLURAL_SUFFIX = "s";
|
|
7
|
+
function countOf(count, unit) {
|
|
8
|
+
return `${count} ${unit}${count === 1 ? "" : PLURAL_SUFFIX}`;
|
|
9
|
+
}
|
|
10
|
+
export function formatDuration(ms) {
|
|
11
|
+
const seconds = Math.max(MIN_WHOLE_SECONDS, Math.round(ms / MS_PER_SECOND));
|
|
12
|
+
if (seconds < SECONDS_PER_MINUTE) {
|
|
13
|
+
return countOf(seconds, DURATION_UNITS.SECOND);
|
|
14
|
+
}
|
|
15
|
+
const minutes = Math.round(seconds / SECONDS_PER_MINUTE);
|
|
16
|
+
return countOf(minutes, DURATION_UNITS.MINUTE);
|
|
17
|
+
}
|
|
18
|
+
export function idleTimeoutReason(windowMs) {
|
|
19
|
+
return TURN_IDLE_TIMEOUT_MESSAGE.replace(DURATION_TOKEN, formatDuration(windowMs));
|
|
20
|
+
}
|
|
21
|
+
export function toolCapReason(windowMs) {
|
|
22
|
+
return TURN_TOOL_CAP_MESSAGE.replace(DURATION_TOKEN, formatDuration(windowMs));
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=turn-end-reasons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn-end-reasons.js","sourceRoot":"","sources":["../../src/agent/turn-end-reasons.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,aAAa,GAAG,KAAK,CAAC;AAC5B,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,cAAc,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAW,CAAC;AACvE,MAAM,aAAa,GAAG,GAAG,CAAC;AAE1B,SAAS,OAAO,CAAC,KAAa,EAAE,IAAY;IAC1C,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;AAC/D,CAAC;AAGD,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC;IAC5E,IAAI,OAAO,GAAG,kBAAkB,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,kBAAkB,CAAC,CAAC;IACzD,OAAO,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;AACjD,CAAC;AAGD,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,OAAO,yBAAyB,CAAC,OAAO,CACtC,cAAc,EACd,cAAc,CAAC,QAAQ,CAAC,CACzB,CAAC;AACJ,CAAC;AAGD,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,OAAO,qBAAqB,CAAC,OAAO,CAClC,cAAc,EACd,cAAc,CAAC,QAAQ,CAAC,CACzB,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
export declare const TURN_IDLE_TIMEOUT_MS: number;
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const DURATION_TOKEN = "{{duration}}";
|
|
3
|
+
export declare const TURN_IDLE_TIMEOUT_MESSAGE = "The agent reported no activity for {{duration}}, so the run was stopped.";
|
|
4
|
+
export declare const TURN_TOOL_CAP_MESSAGE = "A tool was still running after {{duration}}, so the run was stopped.";
|
|
5
|
+
export declare const TURN_STREAM_ENDED_MESSAGE = "The agent stopped before finishing its answer: its process ended unexpectedly.";
|
|
6
|
+
export declare const TURN_SESSION_CLOSED_MESSAGE = "The run was stopped because the assistant session was closed (sidecar restart, provider switch or deleted conversation).";
|
|
7
|
+
export declare const ACTIVITY_KINDS: readonly ["thinking", "responding", "writing", "tool", "compacting", "retrying"];
|
|
3
8
|
export declare const INTERRUPT_FALLBACK_MS = 4000;
|
|
4
9
|
export declare const SYSTEM_PROMPT_PLACEHOLDER_UNKNOWN = "unknown";
|
|
5
10
|
export declare const SYSTEM_PROMPT_MODULES_NONE = "none";
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
export const TURN_IDLE_TIMEOUT_MS = 5 * 60_000;
|
|
2
|
-
export const
|
|
2
|
+
export const DURATION_TOKEN = "{{duration}}";
|
|
3
|
+
export const TURN_IDLE_TIMEOUT_MESSAGE = `The agent reported no activity for ${DURATION_TOKEN}, so the run was stopped.`;
|
|
4
|
+
export const TURN_TOOL_CAP_MESSAGE = `A tool was still running after ${DURATION_TOKEN}, so the run was stopped.`;
|
|
5
|
+
export const TURN_STREAM_ENDED_MESSAGE = "The agent stopped before finishing its answer: its process ended unexpectedly.";
|
|
6
|
+
export const TURN_SESSION_CLOSED_MESSAGE = "The run was stopped because the assistant session was closed (sidecar restart, provider switch or deleted conversation).";
|
|
7
|
+
export const ACTIVITY_KINDS = [
|
|
8
|
+
"thinking",
|
|
9
|
+
"responding",
|
|
10
|
+
"writing",
|
|
11
|
+
"tool",
|
|
12
|
+
"compacting",
|
|
13
|
+
"retrying",
|
|
14
|
+
];
|
|
3
15
|
export const INTERRUPT_FALLBACK_MS = 4_000;
|
|
4
16
|
export const SYSTEM_PROMPT_PLACEHOLDER_UNKNOWN = "unknown";
|
|
5
17
|
export const SYSTEM_PROMPT_MODULES_NONE = "none";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/constants/agent.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/constants/agent.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAG,MAAM,CAAC;AAG/C,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC;AAG7C,MAAM,CAAC,MAAM,yBAAyB,GAAG,sCAAsC,cAAc,2BAA2B,CAAC;AAGzH,MAAM,CAAC,MAAM,qBAAqB,GAAG,kCAAkC,cAAc,2BAA2B,CAAC;AAGjH,MAAM,CAAC,MAAM,yBAAyB,GACpC,gFAAgF,CAAC;AAGnF,MAAM,CAAC,MAAM,2BAA2B,GACtC,0HAA0H,CAAC;AAO7H,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,UAAU;IACV,YAAY;IACZ,SAAS;IACT,MAAM;IACN,YAAY;IACZ,UAAU;CACF,CAAC;AAIX,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAE3C,MAAM,CAAC,MAAM,iCAAiC,GAAG,SAAS,CAAC;AAC3D,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC;AACjD,MAAM,CAAC,MAAM,+BAA+B,GAAG,IAAI,CAAC;AACpD,MAAM,CAAC,MAAM,wBAAwB,GAAG,UAAU,CAAC;AACnD,MAAM,CAAC,MAAM,6BAA6B,GAAG,qBAAqB,CAAC;AACnE,MAAM,CAAC,MAAM,2BAA2B,GAAG,qBAAqB,CAAC;AAOjE,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAClD,MAAM,CAAC,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;AACpD,MAAM,CAAC,MAAM,uBAAuB,GAAG,QAAQ,CAAC;AAChD,MAAM,CAAC,MAAM,uBAAuB,GAAG,QAAQ,CAAC;AAChD,MAAM,CAAC,MAAM,wBAAwB,GAAG,SAAS,CAAC;AAClD,MAAM,CAAC,MAAM,uBAAuB,GAAG,QAAQ,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { SettingSource } from "@anthropic-ai/claude-agent-sdk";
|
|
1
|
+
import type { SettingSource, TerminalReason } from "@anthropic-ai/claude-agent-sdk";
|
|
2
|
+
import type { ActivityKind } from "../agent/runner-events.js";
|
|
2
3
|
export declare const REAL_SDK_PACKAGE = "@anthropic-ai/claude-agent-sdk";
|
|
3
4
|
export declare const MOCK_CLAUDE_FLAG_ENV = "MOCK_CLAUDE";
|
|
4
5
|
export declare const MOCK_CLAUDE_FLAG_ENABLED = "1";
|
|
@@ -7,4 +8,29 @@ export declare const SYSTEM_PROMPT_PRESET_TYPE: "preset";
|
|
|
7
8
|
export declare const SYSTEM_PROMPT_PRESET_NAME: "claude_code";
|
|
8
9
|
export declare const SDK_SETTING_SOURCES_ISOLATED: SettingSource[];
|
|
9
10
|
export declare const SDK_INCLUDE_PARTIAL_MESSAGES = true;
|
|
11
|
+
export declare const PRE_TOOL_USE_HOOK_EVENT: "PreToolUse";
|
|
10
12
|
export declare const SKILL_PLUGIN_WRAPPER_DIR = "skill-plugins";
|
|
13
|
+
export declare const CLAUDE_STREAM_EVENT_TYPES: {
|
|
14
|
+
readonly MESSAGE_START: "message_start";
|
|
15
|
+
readonly CONTENT_BLOCK_START: "content_block_start";
|
|
16
|
+
readonly CONTENT_BLOCK_DELTA: "content_block_delta";
|
|
17
|
+
};
|
|
18
|
+
export declare const CLAUDE_TEXT_DELTA_TYPE = "text_delta";
|
|
19
|
+
export declare const CLAUDE_BLOCK_ACTIVITY: Record<string, ActivityKind>;
|
|
20
|
+
export declare const CLAUDE_DELTA_ACTIVITY: Record<string, ActivityKind>;
|
|
21
|
+
export declare const CLAUDE_SYSTEM_SUBTYPES: {
|
|
22
|
+
readonly STATUS: "status";
|
|
23
|
+
readonly API_RETRY: "api_retry";
|
|
24
|
+
};
|
|
25
|
+
export declare const CLAUDE_STATUS_ACTIVITY: Record<string, ActivityKind>;
|
|
26
|
+
export declare const CLAUDE_RETRY_DETAIL_TOKENS: {
|
|
27
|
+
readonly ATTEMPT: "{{attempt}}";
|
|
28
|
+
readonly MAX: "{{max}}";
|
|
29
|
+
};
|
|
30
|
+
export declare const CLAUDE_RETRY_DETAIL_TEMPLATE: string;
|
|
31
|
+
export declare const CLAUDE_RESULT_SUCCESS_SUBTYPE = "success";
|
|
32
|
+
export declare const CLAUDE_STOPPED_TERMINAL_REASONS: readonly TerminalReason[];
|
|
33
|
+
export declare const CLAUDE_UNRETRYABLE_TERMINAL_REASONS: readonly TerminalReason[];
|
|
34
|
+
export declare const CLAUDE_TERMINAL_REASON_MESSAGES: Partial<Record<TerminalReason, string>>;
|
|
35
|
+
export declare const CLAUDE_DIAGNOSTIC_ERROR_PREFIX = "[ede_diagnostic]";
|
|
36
|
+
export declare const CLAUDE_TURN_FAILED_MESSAGE = "The agent failed to complete the request.";
|