general-agent-runtime 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +311 -0
- package/dist/agent/agent.d.ts +14 -0
- package/dist/agent/agent.js +25 -0
- package/dist/agent/agent.js.map +1 -0
- package/dist/agent/builder.d.ts +28 -0
- package/dist/agent/builder.js +178 -0
- package/dist/agent/builder.js.map +1 -0
- package/dist/agent/create-agent.d.ts +2 -0
- package/dist/agent/create-agent.js +29 -0
- package/dist/agent/create-agent.js.map +1 -0
- package/dist/agent/index.d.ts +8 -0
- package/dist/agent/index.js +8 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/integrations/session-context-source.d.ts +12 -0
- package/dist/agent/integrations/session-context-source.js +84 -0
- package/dist/agent/integrations/session-context-source.js.map +1 -0
- package/dist/agent/integrations/session-run-recorder.d.ts +17 -0
- package/dist/agent/integrations/session-run-recorder.js +60 -0
- package/dist/agent/integrations/session-run-recorder.js.map +1 -0
- package/dist/agent/loop-factory.d.ts +11 -0
- package/dist/agent/loop-factory.js +16 -0
- package/dist/agent/loop-factory.js.map +1 -0
- package/dist/agent/run-manager.d.ts +38 -0
- package/dist/agent/run-manager.js +96 -0
- package/dist/agent/run-manager.js.map +1 -0
- package/dist/agent/types.d.ts +38 -0
- package/dist/agent/types.js +2 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +88 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/renderer.d.ts +2 -0
- package/dist/cli/renderer.js +36 -0
- package/dist/cli/renderer.js.map +1 -0
- package/dist/compaction/budget.d.ts +14 -0
- package/dist/compaction/budget.js +28 -0
- package/dist/compaction/budget.js.map +1 -0
- package/dist/compaction/deterministic.d.ts +9 -0
- package/dist/compaction/deterministic.js +106 -0
- package/dist/compaction/deterministic.js.map +1 -0
- package/dist/compaction/index.d.ts +5 -0
- package/dist/compaction/index.js +5 -0
- package/dist/compaction/index.js.map +1 -0
- package/dist/compaction/manager.d.ts +22 -0
- package/dist/compaction/manager.js +111 -0
- package/dist/compaction/manager.js.map +1 -0
- package/dist/compaction/semantic.d.ts +13 -0
- package/dist/compaction/semantic.js +234 -0
- package/dist/compaction/semantic.js.map +1 -0
- package/dist/compaction/strategy.d.ts +1 -0
- package/dist/compaction/strategy.js +2 -0
- package/dist/compaction/strategy.js.map +1 -0
- package/dist/compaction/types.d.ts +40 -0
- package/dist/compaction/types.js +2 -0
- package/dist/compaction/types.js.map +1 -0
- package/dist/context/budget.d.ts +12 -0
- package/dist/context/budget.js +13 -0
- package/dist/context/budget.js.map +1 -0
- package/dist/context/controller.d.ts +17 -0
- package/dist/context/controller.js +78 -0
- package/dist/context/controller.js.map +1 -0
- package/dist/context/index.d.ts +14 -0
- package/dist/context/index.js +13 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/manager.d.ts +10 -0
- package/dist/context/manager.js +65 -0
- package/dist/context/manager.js.map +1 -0
- package/dist/context/pipeline.d.ts +16 -0
- package/dist/context/pipeline.js +45 -0
- package/dist/context/pipeline.js.map +1 -0
- package/dist/context/projection.d.ts +8 -0
- package/dist/context/projection.js +10 -0
- package/dist/context/projection.js.map +1 -0
- package/dist/context/source.d.ts +6 -0
- package/dist/context/source.js +2 -0
- package/dist/context/source.js.map +1 -0
- package/dist/context/sources/dynamic.d.ts +10 -0
- package/dist/context/sources/dynamic.js +13 -0
- package/dist/context/sources/dynamic.js.map +1 -0
- package/dist/context/sources/project.d.ts +19 -0
- package/dist/context/sources/project.js +75 -0
- package/dist/context/sources/project.js.map +1 -0
- package/dist/context/sources/system.d.ts +14 -0
- package/dist/context/sources/system.js +23 -0
- package/dist/context/sources/system.js.map +1 -0
- package/dist/context/sources/user.d.ts +14 -0
- package/dist/context/sources/user.js +23 -0
- package/dist/context/sources/user.js.map +1 -0
- package/dist/context/stages/deduplicate.d.ts +7 -0
- package/dist/context/stages/deduplicate.js +19 -0
- package/dist/context/stages/deduplicate.js.map +1 -0
- package/dist/context/stages/expiration.d.ts +5 -0
- package/dist/context/stages/expiration.js +14 -0
- package/dist/context/stages/expiration.js.map +1 -0
- package/dist/context/stages/visibility.d.ts +5 -0
- package/dist/context/stages/visibility.js +7 -0
- package/dist/context/stages/visibility.js.map +1 -0
- package/dist/context/types.d.ts +72 -0
- package/dist/context/types.js +2 -0
- package/dist/context/types.js.map +1 -0
- package/dist/errors/codes.d.ts +1 -0
- package/dist/errors/codes.js +2 -0
- package/dist/errors/codes.js.map +1 -0
- package/dist/errors/index.d.ts +4 -0
- package/dist/errors/index.js +4 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/normalize.d.ts +2 -0
- package/dist/errors/normalize.js +32 -0
- package/dist/errors/normalize.js.map +1 -0
- package/dist/errors/runtime-error.d.ts +18 -0
- package/dist/errors/runtime-error.js +21 -0
- package/dist/errors/runtime-error.js.map +1 -0
- package/dist/errors/serialize.d.ts +2 -0
- package/dist/errors/serialize.js +12 -0
- package/dist/errors/serialize.js.map +1 -0
- package/dist/events/bus.d.ts +17 -0
- package/dist/events/bus.js +52 -0
- package/dist/events/bus.js.map +1 -0
- package/dist/events/index.d.ts +6 -0
- package/dist/events/index.js +5 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/publisher.d.ts +12 -0
- package/dist/events/publisher.js +22 -0
- package/dist/events/publisher.js.map +1 -0
- package/dist/events/sequence.d.ts +6 -0
- package/dist/events/sequence.js +14 -0
- package/dist/events/sequence.js.map +1 -0
- package/dist/events/sink.d.ts +5 -0
- package/dist/events/sink.js +2 -0
- package/dist/events/sink.js.map +1 -0
- package/dist/events/stream.d.ts +12 -0
- package/dist/events/stream.js +46 -0
- package/dist/events/stream.js.map +1 -0
- package/dist/events/types.d.ts +42 -0
- package/dist/events/types.js +2 -0
- package/dist/events/types.js.map +1 -0
- package/dist/hooks/bus.d.ts +14 -0
- package/dist/hooks/bus.js +104 -0
- package/dist/hooks/bus.js.map +1 -0
- package/dist/hooks/index.d.ts +5 -0
- package/dist/hooks/index.js +5 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/policy.d.ts +3 -0
- package/dist/hooks/policy.js +33 -0
- package/dist/hooks/policy.js.map +1 -0
- package/dist/hooks/registry.d.ts +13 -0
- package/dist/hooks/registry.js +31 -0
- package/dist/hooks/registry.js.map +1 -0
- package/dist/hooks/timeout.d.ts +2 -0
- package/dist/hooks/timeout.js +63 -0
- package/dist/hooks/timeout.js.map +1 -0
- package/dist/hooks/types.d.ts +40 -0
- package/dist/hooks/types.js +2 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/loop/index.d.ts +7 -0
- package/dist/loop/index.js +6 -0
- package/dist/loop/index.js.map +1 -0
- package/dist/loop/loop.d.ts +22 -0
- package/dist/loop/loop.js +623 -0
- package/dist/loop/loop.js.map +1 -0
- package/dist/loop/policy.d.ts +21 -0
- package/dist/loop/policy.js +54 -0
- package/dist/loop/policy.js.map +1 -0
- package/dist/loop/recorder.d.ts +9 -0
- package/dist/loop/recorder.js +2 -0
- package/dist/loop/recorder.js.map +1 -0
- package/dist/loop/state.d.ts +18 -0
- package/dist/loop/state.js +81 -0
- package/dist/loop/state.js.map +1 -0
- package/dist/loop/stream-assembler.d.ts +12 -0
- package/dist/loop/stream-assembler.js +76 -0
- package/dist/loop/stream-assembler.js.map +1 -0
- package/dist/loop/transition.d.ts +2 -0
- package/dist/loop/transition.js +27 -0
- package/dist/loop/transition.js.map +1 -0
- package/dist/loop/types.d.ts +53 -0
- package/dist/loop/types.js +2 -0
- package/dist/loop/types.js.map +1 -0
- package/dist/model/index.d.ts +6 -0
- package/dist/model/index.js +5 -0
- package/dist/model/index.js.map +1 -0
- package/dist/model/provider.d.ts +6 -0
- package/dist/model/provider.js +2 -0
- package/dist/model/provider.js.map +1 -0
- package/dist/model/providers/openai-compatible/adapter.d.ts +3 -0
- package/dist/model/providers/openai-compatible/adapter.js +92 -0
- package/dist/model/providers/openai-compatible/adapter.js.map +1 -0
- package/dist/model/providers/openai-compatible/errors.d.ts +3 -0
- package/dist/model/providers/openai-compatible/errors.js +68 -0
- package/dist/model/providers/openai-compatible/errors.js.map +1 -0
- package/dist/model/providers/openai-compatible/provider.d.ts +18 -0
- package/dist/model/providers/openai-compatible/provider.js +182 -0
- package/dist/model/providers/openai-compatible/provider.js.map +1 -0
- package/dist/model/providers/openai-compatible/stream-parser.d.ts +1 -0
- package/dist/model/providers/openai-compatible/stream-parser.js +45 -0
- package/dist/model/providers/openai-compatible/stream-parser.js.map +1 -0
- package/dist/model/registry.d.ts +9 -0
- package/dist/model/registry.js +35 -0
- package/dist/model/registry.js.map +1 -0
- package/dist/model/types.d.ts +49 -0
- package/dist/model/types.js +2 -0
- package/dist/model/types.js.map +1 -0
- package/dist/session/factory.d.ts +13 -0
- package/dist/session/factory.js +14 -0
- package/dist/session/factory.js.map +1 -0
- package/dist/session/index.d.ts +8 -0
- package/dist/session/index.js +7 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/jsonl-store.d.ts +20 -0
- package/dist/session/jsonl-store.js +264 -0
- package/dist/session/jsonl-store.js.map +1 -0
- package/dist/session/projector.d.ts +4 -0
- package/dist/session/projector.js +104 -0
- package/dist/session/projector.js.map +1 -0
- package/dist/session/serializer.d.ts +5 -0
- package/dist/session/serializer.js +126 -0
- package/dist/session/serializer.js.map +1 -0
- package/dist/session/session.d.ts +32 -0
- package/dist/session/session.js +129 -0
- package/dist/session/session.js.map +1 -0
- package/dist/session/store.d.ts +9 -0
- package/dist/session/store.js +2 -0
- package/dist/session/store.js.map +1 -0
- package/dist/session/types.d.ts +29 -0
- package/dist/session/types.js +2 -0
- package/dist/session/types.js.map +1 -0
- package/dist/settings/defaults.d.ts +7 -0
- package/dist/settings/defaults.js +40 -0
- package/dist/settings/defaults.js.map +1 -0
- package/dist/settings/env-source.d.ts +8 -0
- package/dist/settings/env-source.js +26 -0
- package/dist/settings/env-source.js.map +1 -0
- package/dist/settings/file-source.d.ts +9 -0
- package/dist/settings/file-source.js +32 -0
- package/dist/settings/file-source.js.map +1 -0
- package/dist/settings/index.d.ts +8 -0
- package/dist/settings/index.js +7 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/resolver.d.ts +5 -0
- package/dist/settings/resolver.js +29 -0
- package/dist/settings/resolver.js.map +1 -0
- package/dist/settings/runtime-source.d.ts +8 -0
- package/dist/settings/runtime-source.js +11 -0
- package/dist/settings/runtime-source.js.map +1 -0
- package/dist/settings/schema.d.ts +37 -0
- package/dist/settings/schema.js +47 -0
- package/dist/settings/schema.js.map +1 -0
- package/dist/settings/source.d.ts +5 -0
- package/dist/settings/source.js +2 -0
- package/dist/settings/source.js.map +1 -0
- package/dist/settings/types.d.ts +46 -0
- package/dist/settings/types.js +2 -0
- package/dist/settings/types.js.map +1 -0
- package/dist/tools/builtin/list-directory.d.ts +17 -0
- package/dist/tools/builtin/list-directory.js +31 -0
- package/dist/tools/builtin/list-directory.js.map +1 -0
- package/dist/tools/builtin/read-file.d.ts +14 -0
- package/dist/tools/builtin/read-file.js +23 -0
- package/dist/tools/builtin/read-file.js.map +1 -0
- package/dist/tools/builtin/run-command.d.ts +19 -0
- package/dist/tools/builtin/run-command.js +46 -0
- package/dist/tools/builtin/run-command.js.map +1 -0
- package/dist/tools/builtin/write-file.d.ts +20 -0
- package/dist/tools/builtin/write-file.js +29 -0
- package/dist/tools/builtin/write-file.js.map +1 -0
- package/dist/tools/executor.d.ts +29 -0
- package/dist/tools/executor.js +212 -0
- package/dist/tools/executor.js.map +1 -0
- package/dist/tools/index.d.ts +10 -0
- package/dist/tools/index.js +9 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/registry.d.ts +19 -0
- package/dist/tools/registry.js +42 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/result-processor.d.ts +4 -0
- package/dist/tools/result-processor.js +122 -0
- package/dist/tools/result-processor.js.map +1 -0
- package/dist/tools/tool.d.ts +8 -0
- package/dist/tools/tool.js +2 -0
- package/dist/tools/tool.js.map +1 -0
- package/dist/tools/types.d.ts +44 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/validator.d.ts +5 -0
- package/dist/tools/validator.js +112 -0
- package/dist/tools/validator.js.map +1 -0
- package/dist/types/compaction.d.ts +22 -0
- package/dist/types/compaction.js +2 -0
- package/dist/types/compaction.js.map +1 -0
- package/dist/types/error.d.ts +10 -0
- package/dist/types/error.js +2 -0
- package/dist/types/error.js.map +1 -0
- package/dist/types/ids.d.ts +12 -0
- package/dist/types/ids.js +2 -0
- package/dist/types/ids.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/json.d.ts +7 -0
- package/dist/types/json.js +2 -0
- package/dist/types/json.js.map +1 -0
- package/dist/types/message.d.ts +39 -0
- package/dist/types/message.js +2 -0
- package/dist/types/message.js.map +1 -0
- package/dist/types/metadata.d.ts +2 -0
- package/dist/types/metadata.js +2 -0
- package/dist/types/metadata.js.map +1 -0
- package/dist/types/runtime.d.ts +20 -0
- package/dist/types/runtime.js +2 -0
- package/dist/types/runtime.js.map +1 -0
- package/dist/types/tool.d.ts +12 -0
- package/dist/types/tool.js +2 -0
- package/dist/types/tool.js.map +1 -0
- package/dist/types/usage.d.ts +17 -0
- package/dist/types/usage.js +2 -0
- package/dist/types/usage.js.map +1 -0
- package/dist/utils/deep.d.ts +2 -0
- package/dist/utils/deep.js +34 -0
- package/dist/utils/deep.js.map +1 -0
- package/dist/utils/id.d.ts +10 -0
- package/dist/utils/id.js +14 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/message.d.ts +11 -0
- package/dist/utils/message.js +31 -0
- package/dist/utils/message.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { COMPACTION_CHECKPOINT_MESSAGE_KIND } from "../../types/compaction.js";
|
|
2
|
+
import { newContextItemId, newMessageId, } from "../../utils/id.js";
|
|
3
|
+
function checkpointText(checkpoint) {
|
|
4
|
+
const sections = [
|
|
5
|
+
`Conversation summary:\n${checkpoint.summary}`,
|
|
6
|
+
checkpoint.currentGoal
|
|
7
|
+
? `Current goal:\n${checkpoint.currentGoal}`
|
|
8
|
+
: undefined,
|
|
9
|
+
checkpoint.decisions?.length
|
|
10
|
+
? `Decisions:\n- ${checkpoint.decisions.join("\n- ")}`
|
|
11
|
+
: undefined,
|
|
12
|
+
checkpoint.constraints?.length
|
|
13
|
+
? `Constraints:\n- ${checkpoint.constraints.join("\n- ")}`
|
|
14
|
+
: undefined,
|
|
15
|
+
checkpoint.importantFacts?.length
|
|
16
|
+
? `Important facts:\n- ${checkpoint.importantFacts.join("\n- ")}`
|
|
17
|
+
: undefined,
|
|
18
|
+
checkpoint.modifiedResources?.length
|
|
19
|
+
? `Modified resources:\n- ${checkpoint.modifiedResources.join("\n- ")}`
|
|
20
|
+
: undefined,
|
|
21
|
+
checkpoint.pendingTasks?.length
|
|
22
|
+
? `Pending tasks:\n- ${checkpoint.pendingTasks.join("\n- ")}`
|
|
23
|
+
: undefined,
|
|
24
|
+
].filter((value) => value !== undefined);
|
|
25
|
+
return sections.join("\n\n");
|
|
26
|
+
}
|
|
27
|
+
function checkpointMessage(checkpoint) {
|
|
28
|
+
return {
|
|
29
|
+
id: newMessageId(),
|
|
30
|
+
role: "assistant",
|
|
31
|
+
parts: [{ type: "text", text: checkpointText(checkpoint) }],
|
|
32
|
+
createdAt: checkpoint.createdAt,
|
|
33
|
+
metadata: {
|
|
34
|
+
kind: COMPACTION_CHECKPOINT_MESSAGE_KIND,
|
|
35
|
+
compactionId: checkpoint.id,
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function messagesAfterCheckpoint(messages, checkpoint) {
|
|
40
|
+
const coveredId = checkpoint.coversThroughMessageId;
|
|
41
|
+
if (coveredId === undefined) {
|
|
42
|
+
return [...messages];
|
|
43
|
+
}
|
|
44
|
+
const coveredIndex = messages.findIndex((message) => message.id === coveredId);
|
|
45
|
+
if (coveredIndex < 0) {
|
|
46
|
+
return [...messages];
|
|
47
|
+
}
|
|
48
|
+
return messages.slice(coveredIndex + 1);
|
|
49
|
+
}
|
|
50
|
+
export class SessionContextSource {
|
|
51
|
+
store;
|
|
52
|
+
projector;
|
|
53
|
+
id = "session";
|
|
54
|
+
scope = "session";
|
|
55
|
+
constructor(store, projector) {
|
|
56
|
+
this.store = store;
|
|
57
|
+
this.projector = projector;
|
|
58
|
+
}
|
|
59
|
+
async load(request, signal) {
|
|
60
|
+
signal?.throwIfAborted();
|
|
61
|
+
const projection = await this.projector.project(this.store.read(request.sessionId, signal), signal);
|
|
62
|
+
const content = projection.latestCompaction === undefined
|
|
63
|
+
? [...projection.messages]
|
|
64
|
+
: [
|
|
65
|
+
checkpointMessage(projection.latestCompaction),
|
|
66
|
+
...messagesAfterCheckpoint(projection.messages, projection.latestCompaction),
|
|
67
|
+
];
|
|
68
|
+
if (content.length === 0) {
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
return [
|
|
72
|
+
{
|
|
73
|
+
id: newContextItemId(),
|
|
74
|
+
scope: this.scope,
|
|
75
|
+
source: this.id,
|
|
76
|
+
priority: 0,
|
|
77
|
+
visibility: "model",
|
|
78
|
+
content,
|
|
79
|
+
createdAt: new Date().toISOString(),
|
|
80
|
+
},
|
|
81
|
+
];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=session-context-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-context-source.js","sourceRoot":"","sources":["../../../src/agent/integrations/session-context-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { RunRecorder } from "../../loop/recorder.js";
|
|
2
|
+
import type { Session } from "../../session/session.js";
|
|
3
|
+
import type { ToolExecutionResult } from "../../tools/types.js";
|
|
4
|
+
import type { AgentMessage, CompactionCheckpoint, SessionId, Usage } from "../../types/index.js";
|
|
5
|
+
import type { RunRecorderFactory } from "../run-manager.js";
|
|
6
|
+
export declare class SessionRunRecorderFactory implements RunRecorderFactory {
|
|
7
|
+
create(session: Session): RunRecorder;
|
|
8
|
+
}
|
|
9
|
+
export declare class SessionRunRecorder implements RunRecorder {
|
|
10
|
+
private readonly session;
|
|
11
|
+
readonly sessionId: SessionId;
|
|
12
|
+
constructor(session: Session);
|
|
13
|
+
appendUser(message: AgentMessage, signal?: AbortSignal): Promise<void>;
|
|
14
|
+
appendAssistant(message: AgentMessage, usage?: Usage, signal?: AbortSignal): Promise<void>;
|
|
15
|
+
appendToolResults(results: readonly ToolExecutionResult[], signal?: AbortSignal): Promise<void>;
|
|
16
|
+
appendCompaction(checkpoint: CompactionCheckpoint, signal?: AbortSignal): Promise<void>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { createToolResultMessage } from "../../utils/message.js";
|
|
2
|
+
function jsonPayload(value) {
|
|
3
|
+
return structuredClone(value);
|
|
4
|
+
}
|
|
5
|
+
export class SessionRunRecorderFactory {
|
|
6
|
+
create(session) {
|
|
7
|
+
return new SessionRunRecorder(session);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export class SessionRunRecorder {
|
|
11
|
+
session;
|
|
12
|
+
sessionId;
|
|
13
|
+
constructor(session) {
|
|
14
|
+
this.session = session;
|
|
15
|
+
this.sessionId = session.id;
|
|
16
|
+
}
|
|
17
|
+
async appendUser(message, signal) {
|
|
18
|
+
await this.session.append({
|
|
19
|
+
type: "message",
|
|
20
|
+
payload: jsonPayload(message),
|
|
21
|
+
}, signal);
|
|
22
|
+
}
|
|
23
|
+
async appendAssistant(message, usage, signal) {
|
|
24
|
+
const entries = [
|
|
25
|
+
{
|
|
26
|
+
type: "message",
|
|
27
|
+
payload: jsonPayload(message),
|
|
28
|
+
},
|
|
29
|
+
];
|
|
30
|
+
if (usage !== undefined) {
|
|
31
|
+
entries.push({
|
|
32
|
+
type: "usage",
|
|
33
|
+
payload: jsonPayload(usage),
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
await this.session.appendMany(entries, signal);
|
|
37
|
+
}
|
|
38
|
+
async appendToolResults(results, signal) {
|
|
39
|
+
const messages = results.map((result) => createToolResultMessage({
|
|
40
|
+
callId: result.call.callId,
|
|
41
|
+
toolName: result.call.toolName,
|
|
42
|
+
content: result.content,
|
|
43
|
+
isError: result.isError,
|
|
44
|
+
...(result.metadata === undefined
|
|
45
|
+
? {}
|
|
46
|
+
: { metadata: result.metadata }),
|
|
47
|
+
}));
|
|
48
|
+
await this.session.appendMany(messages.map((message) => ({
|
|
49
|
+
type: "message",
|
|
50
|
+
payload: jsonPayload(message),
|
|
51
|
+
})), signal);
|
|
52
|
+
}
|
|
53
|
+
async appendCompaction(checkpoint, signal) {
|
|
54
|
+
await this.session.append({
|
|
55
|
+
type: "compaction",
|
|
56
|
+
payload: jsonPayload(checkpoint),
|
|
57
|
+
}, signal);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=session-run-recorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-run-recorder.js","sourceRoot":"","sources":["../../../src/agent/integrations/session-run-recorder.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAGjE,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,eAAe,CAAC,KAAK,CAAc,CAAC;AAC7C,CAAC;AAED,MAAM,OAAO,yBAAyB;IACpC,MAAM,CAAC,OAAgB;QACrB,OAAO,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;CACF;AAED,MAAM,OAAO,kBAAkB;IAGA;IAFpB,SAAS,CAAY;IAE9B,YAA6B,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAC3C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,UAAU,CACd,OAAqB,EACrB,MAAoB;QAEpB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CACvB;YACE,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC;SAC9B,EACD,MAAM,CACP,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,OAAqB,EACrB,KAAa,EACb,MAAoB;QAEpB,MAAM,OAAO,GAGR;YACH;gBACE,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC;aAC9B;SACF,CAAC;QAEF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC;aAC5B,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,OAAuC,EACvC,MAAoB;QAEpB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACtC,uBAAuB,CAAC;YACtB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;YAC1B,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;YAC9B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS;gBAC/B,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;SACnC,CAAC,CACH,CAAC;QAEF,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAC3B,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACzB,IAAI,EAAE,SAAkB;YACxB,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC;SAC9B,CAAC,CAAC,EACH,MAAM,CACP,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,UAAgC,EAChC,MAAoB;QAEpB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CACvB;YACE,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC;SACjC,EACD,MAAM,CACP,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type AgentLoop, type AgentLoopDependencies, type AgentLoopOptions, type RunRecorder } from "../loop/index.js";
|
|
2
|
+
export interface AgentLoopFactory {
|
|
3
|
+
create(recorder: RunRecorder): AgentLoop;
|
|
4
|
+
}
|
|
5
|
+
export type DefaultAgentLoopFactoryDependencies = Omit<AgentLoopDependencies, "recorder">;
|
|
6
|
+
export declare class DefaultAgentLoopFactory implements AgentLoopFactory {
|
|
7
|
+
private readonly dependencies;
|
|
8
|
+
private readonly options;
|
|
9
|
+
constructor(dependencies: DefaultAgentLoopFactoryDependencies, options: AgentLoopOptions);
|
|
10
|
+
create(recorder: RunRecorder): AgentLoop;
|
|
11
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { DefaultAgentLoop, } from "../loop/index.js";
|
|
2
|
+
export class DefaultAgentLoopFactory {
|
|
3
|
+
dependencies;
|
|
4
|
+
options;
|
|
5
|
+
constructor(dependencies, options) {
|
|
6
|
+
this.dependencies = dependencies;
|
|
7
|
+
this.options = options;
|
|
8
|
+
}
|
|
9
|
+
create(recorder) {
|
|
10
|
+
return new DefaultAgentLoop({
|
|
11
|
+
...this.dependencies,
|
|
12
|
+
recorder,
|
|
13
|
+
}, this.options);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=loop-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-factory.js","sourceRoot":"","sources":["../../src/agent/loop-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,GAKjB,MAAM,kBAAkB,CAAC;AAS1B,MAAM,OAAO,uBAAuB;IAEf;IACA;IAFnB,YACmB,YAAiD,EACjD,OAAyB;QADzB,iBAAY,GAAZ,YAAY,CAAqC;QACjD,YAAO,GAAP,OAAO,CAAkB;IACzC,CAAC;IAEJ,MAAM,CAAC,QAAqB;QAC1B,OAAO,IAAI,gBAAgB,CACzB;YACE,GAAG,IAAI,CAAC,YAAY;YACpB,QAAQ;SACT,EACD,IAAI,CAAC,OAAO,CACb,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { AgentEvent } from "../events/types.js";
|
|
2
|
+
import type { ModelProvider } from "../model/provider.js";
|
|
3
|
+
import type { SessionFactory } from "../session/factory.js";
|
|
4
|
+
import type { Session } from "../session/session.js";
|
|
5
|
+
import type { SessionProjector } from "../session/types.js";
|
|
6
|
+
import type { RuntimeConfig } from "../settings/types.js";
|
|
7
|
+
import type { AgentMessage, AgentRunState, RunId, SessionId } from "../types/index.js";
|
|
8
|
+
import type { RunRecorder } from "../loop/recorder.js";
|
|
9
|
+
import type { AgentLoopFactory } from "./loop-factory.js";
|
|
10
|
+
import type { AgentRunOptions } from "./types.js";
|
|
11
|
+
export interface RunRecorderFactory {
|
|
12
|
+
create(session: Session): RunRecorder;
|
|
13
|
+
}
|
|
14
|
+
export interface RunManager {
|
|
15
|
+
run(input: AgentMessage, options?: AgentRunOptions): AsyncIterable<AgentEvent>;
|
|
16
|
+
resume(sessionId: SessionId, options?: Omit<AgentRunOptions, "sessionId">): Promise<void>;
|
|
17
|
+
abort(runId: RunId): void;
|
|
18
|
+
getState(runId: RunId): Readonly<AgentRunState> | undefined;
|
|
19
|
+
}
|
|
20
|
+
export interface DefaultRunManagerDependencies {
|
|
21
|
+
readonly config: RuntimeConfig;
|
|
22
|
+
readonly modelProvider: ModelProvider;
|
|
23
|
+
readonly sessionFactory: SessionFactory;
|
|
24
|
+
readonly sessionProjector: SessionProjector;
|
|
25
|
+
readonly recorderFactory: RunRecorderFactory;
|
|
26
|
+
readonly loopFactory: AgentLoopFactory;
|
|
27
|
+
}
|
|
28
|
+
export declare class DefaultRunManager implements RunManager {
|
|
29
|
+
private readonly dependencies;
|
|
30
|
+
private readonly activeRuns;
|
|
31
|
+
private readonly states;
|
|
32
|
+
constructor(dependencies: DefaultRunManagerDependencies);
|
|
33
|
+
run(input: AgentMessage, options?: AgentRunOptions): AsyncIterable<AgentEvent>;
|
|
34
|
+
resume(sessionId: SessionId, options?: Omit<AgentRunOptions, "sessionId">): Promise<void>;
|
|
35
|
+
abort(runId: RunId): void;
|
|
36
|
+
getState(runId: RunId): Readonly<AgentRunState> | undefined;
|
|
37
|
+
private forwardAbort;
|
|
38
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
export class DefaultRunManager {
|
|
2
|
+
dependencies;
|
|
3
|
+
activeRuns = new Map();
|
|
4
|
+
states = new Map();
|
|
5
|
+
constructor(dependencies) {
|
|
6
|
+
this.dependencies = dependencies;
|
|
7
|
+
}
|
|
8
|
+
async *run(input, options = {}) {
|
|
9
|
+
const controller = new AbortController();
|
|
10
|
+
const detachSignal = this.forwardAbort(options.signal, controller);
|
|
11
|
+
try {
|
|
12
|
+
controller.signal.throwIfAborted();
|
|
13
|
+
const session = options.sessionId === undefined
|
|
14
|
+
? await this.dependencies.sessionFactory.create(options.metadata === undefined
|
|
15
|
+
? {}
|
|
16
|
+
: { metadata: structuredClone(options.metadata) }, controller.signal)
|
|
17
|
+
: await this.dependencies.sessionFactory.open(options.sessionId, controller.signal);
|
|
18
|
+
const capabilities = await this.dependencies.modelProvider.getCapabilities(this.dependencies.config.model.model);
|
|
19
|
+
controller.signal.throwIfAborted();
|
|
20
|
+
const recorder = this.dependencies.recorderFactory.create(session);
|
|
21
|
+
const loop = this.dependencies.loopFactory.create(recorder);
|
|
22
|
+
let runId;
|
|
23
|
+
try {
|
|
24
|
+
for await (const event of loop.run({
|
|
25
|
+
input: structuredClone(input),
|
|
26
|
+
model: this.dependencies.config.model.model,
|
|
27
|
+
capabilities,
|
|
28
|
+
...(this.dependencies.config.model.temperature === undefined
|
|
29
|
+
? {}
|
|
30
|
+
: {
|
|
31
|
+
temperature: this.dependencies.config.model.temperature,
|
|
32
|
+
}),
|
|
33
|
+
...(this.dependencies.config.model.maxOutputTokens === undefined
|
|
34
|
+
? {}
|
|
35
|
+
: {
|
|
36
|
+
maxOutputTokens: this.dependencies.config.model.maxOutputTokens,
|
|
37
|
+
}),
|
|
38
|
+
...(this.dependencies.config.model.extra === undefined
|
|
39
|
+
? {}
|
|
40
|
+
: {
|
|
41
|
+
providerOptions: structuredClone(this.dependencies.config.model.extra),
|
|
42
|
+
}),
|
|
43
|
+
}, controller.signal)) {
|
|
44
|
+
if (runId === undefined && event.runId !== undefined) {
|
|
45
|
+
runId = event.runId;
|
|
46
|
+
this.activeRuns.set(runId, { controller, loop });
|
|
47
|
+
}
|
|
48
|
+
if (runId !== undefined) {
|
|
49
|
+
this.states.set(runId, loop.getState());
|
|
50
|
+
}
|
|
51
|
+
yield event;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
const state = loop.getState();
|
|
56
|
+
this.states.set(state.runId, state);
|
|
57
|
+
this.activeRuns.delete(state.runId);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
detachSignal();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async resume(sessionId, options = {}) {
|
|
65
|
+
options.signal?.throwIfAborted();
|
|
66
|
+
const session = await this.dependencies.sessionFactory.open(sessionId, options.signal);
|
|
67
|
+
await this.dependencies.sessionProjector.project(session.entries(options.signal), options.signal);
|
|
68
|
+
}
|
|
69
|
+
abort(runId) {
|
|
70
|
+
this.activeRuns.get(runId)?.controller.abort("user_abort");
|
|
71
|
+
}
|
|
72
|
+
getState(runId) {
|
|
73
|
+
const active = this.activeRuns.get(runId);
|
|
74
|
+
if (active !== undefined) {
|
|
75
|
+
return active.loop.getState();
|
|
76
|
+
}
|
|
77
|
+
return this.states.get(runId);
|
|
78
|
+
}
|
|
79
|
+
forwardAbort(signal, controller) {
|
|
80
|
+
if (signal === undefined) {
|
|
81
|
+
return () => undefined;
|
|
82
|
+
}
|
|
83
|
+
const abort = () => {
|
|
84
|
+
if (!controller.signal.aborted) {
|
|
85
|
+
controller.abort(signal.reason);
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
if (signal.aborted) {
|
|
89
|
+
abort();
|
|
90
|
+
return () => undefined;
|
|
91
|
+
}
|
|
92
|
+
signal.addEventListener("abort", abort, { once: true });
|
|
93
|
+
return () => signal.removeEventListener("abort", abort);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=run-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-manager.js","sourceRoot":"","sources":["../../src/agent/run-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { CompactionStrategy } from "../compaction/types.js";
|
|
2
|
+
import type { ContextSource } from "../context/source.js";
|
|
3
|
+
import type { AgentEvent } from "../events/types.js";
|
|
4
|
+
import type { EventSink } from "../events/sink.js";
|
|
5
|
+
import type { Hook } from "../hooks/types.js";
|
|
6
|
+
import type { ModelProvider } from "../model/provider.js";
|
|
7
|
+
import type { SessionStore } from "../session/store.js";
|
|
8
|
+
import type { DeepPartial, RuntimeConfig } from "../settings/types.js";
|
|
9
|
+
import type { Tool } from "../tools/tool.js";
|
|
10
|
+
import type { AgentMessage, AgentRunState, Metadata, RunId, SessionId } from "../types/index.js";
|
|
11
|
+
export interface AgentRunOptions {
|
|
12
|
+
sessionId?: SessionId;
|
|
13
|
+
metadata?: Metadata;
|
|
14
|
+
signal?: AbortSignal;
|
|
15
|
+
}
|
|
16
|
+
export interface Agent {
|
|
17
|
+
run(input: string | AgentMessage, options?: AgentRunOptions): AsyncIterable<AgentEvent>;
|
|
18
|
+
resume(sessionId: SessionId, options?: Omit<AgentRunOptions, "sessionId">): Promise<void>;
|
|
19
|
+
abort(runId: RunId): void;
|
|
20
|
+
getState(runId: RunId): Readonly<AgentRunState> | undefined;
|
|
21
|
+
}
|
|
22
|
+
export interface AgentBuilder {
|
|
23
|
+
withConfig(config: RuntimeConfig): AgentBuilder;
|
|
24
|
+
withModelProvider(provider: ModelProvider): AgentBuilder;
|
|
25
|
+
withSessionStore(store: SessionStore): AgentBuilder;
|
|
26
|
+
withContextSource(source: ContextSource): AgentBuilder;
|
|
27
|
+
withTool(tool: Tool): AgentBuilder;
|
|
28
|
+
withHook(hook: Hook): AgentBuilder;
|
|
29
|
+
withEventSink(sink: EventSink): AgentBuilder;
|
|
30
|
+
withCompactionStrategy(strategy: CompactionStrategy): AgentBuilder;
|
|
31
|
+
build(): Agent;
|
|
32
|
+
}
|
|
33
|
+
export interface CreateAgentOptions {
|
|
34
|
+
readonly model?: string;
|
|
35
|
+
readonly apiKey?: string;
|
|
36
|
+
readonly baseUrl?: string;
|
|
37
|
+
readonly config?: DeepPartial<RuntimeConfig>;
|
|
38
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":""}
|
package/dist/cli/main.js
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createInterface } from "node:readline/promises";
|
|
3
|
+
import { stdin, stdout } from "node:process";
|
|
4
|
+
import { createAgent, } from "../index.js";
|
|
5
|
+
import { renderAgentEvent } from "./renderer.js";
|
|
6
|
+
function parseSessionArg(args) {
|
|
7
|
+
const index = args.indexOf("--session");
|
|
8
|
+
if (index === -1) {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
const value = args[index + 1];
|
|
12
|
+
if (value === undefined || value.startsWith("--")) {
|
|
13
|
+
throw new Error("--session requires a session id");
|
|
14
|
+
}
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
if (process.argv.includes("--help") || process.argv.includes("-h")) {
|
|
18
|
+
process.stdout.write([
|
|
19
|
+
"General Agent Runtime CLI",
|
|
20
|
+
"",
|
|
21
|
+
"Usage:",
|
|
22
|
+
" general-agent-runtime",
|
|
23
|
+
" general-agent-runtime --session <session-id>",
|
|
24
|
+
"",
|
|
25
|
+
"Environment:",
|
|
26
|
+
" AGENT_BASE_URL",
|
|
27
|
+
" AGENT_API_KEY",
|
|
28
|
+
" AGENT_MODEL",
|
|
29
|
+
"",
|
|
30
|
+
"Ctrl+C aborts the active run; press Ctrl+C while idle to exit.",
|
|
31
|
+
"",
|
|
32
|
+
].join("\n"));
|
|
33
|
+
process.exit(0);
|
|
34
|
+
}
|
|
35
|
+
const agent = await createAgent();
|
|
36
|
+
let sessionId = parseSessionArg(process.argv.slice(2));
|
|
37
|
+
let activeController;
|
|
38
|
+
let running = false;
|
|
39
|
+
if (sessionId !== undefined) {
|
|
40
|
+
await agent.resume(sessionId);
|
|
41
|
+
process.stderr.write(`[session] resumed ${sessionId}\n`);
|
|
42
|
+
}
|
|
43
|
+
const rl = createInterface({ input: stdin, output: stdout });
|
|
44
|
+
process.on("SIGINT", () => {
|
|
45
|
+
if (running && activeController !== undefined) {
|
|
46
|
+
activeController.abort("user_abort");
|
|
47
|
+
process.stderr.write("\n[abort requested]\n");
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
rl.close();
|
|
51
|
+
});
|
|
52
|
+
try {
|
|
53
|
+
while (true) {
|
|
54
|
+
let input;
|
|
55
|
+
try {
|
|
56
|
+
input = (await rl.question("> ")).trim();
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
if (input.length === 0) {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (input === "/exit" || input === "/quit") {
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
const controller = new AbortController();
|
|
68
|
+
activeController = controller;
|
|
69
|
+
running = true;
|
|
70
|
+
try {
|
|
71
|
+
for await (const event of agent.run(input, {
|
|
72
|
+
...(sessionId === undefined ? {} : { sessionId }),
|
|
73
|
+
signal: controller.signal,
|
|
74
|
+
})) {
|
|
75
|
+
sessionId ??= event.sessionId;
|
|
76
|
+
renderAgentEvent(event);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
finally {
|
|
80
|
+
running = false;
|
|
81
|
+
activeController = undefined;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
rl.close();
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
function summarize(value, maxChars = 240) {
|
|
2
|
+
const text = typeof value === "string" ? value : JSON.stringify(value);
|
|
3
|
+
return text.length <= maxChars
|
|
4
|
+
? text
|
|
5
|
+
: `${text.slice(0, maxChars)}…`;
|
|
6
|
+
}
|
|
7
|
+
export function renderAgentEvent(event) {
|
|
8
|
+
if (event.type === "message_delta") {
|
|
9
|
+
process.stdout.write(event.data.delta);
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
if (event.type === "tool_start") {
|
|
13
|
+
process.stderr.write(`\n[tool:start] ${event.data.call.toolName}\n`);
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (event.type === "tool_end") {
|
|
17
|
+
process.stderr.write(`[tool:end] ${event.data.result.call.toolName} ${event.data.result.isError ? "error" : "ok"}: ${summarize(event.data.result.content)}\n`);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (event.type === "compact_start") {
|
|
21
|
+
process.stderr.write(`\n[compact:start] ${event.data.reason}\n`);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (event.type === "compact_end") {
|
|
25
|
+
process.stderr.write("[compact:end]\n");
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (event.type === "error") {
|
|
29
|
+
process.stderr.write(`\n[error] ${event.data.error.code}: ${event.data.error.message}\n`);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (event.type === "run_end") {
|
|
33
|
+
process.stdout.write(`\n[done: ${event.data.reason}]\n`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/cli/renderer.ts"],"names":[],"mappings":"AAEA,SAAS,SAAS,CAAC,KAAc,EAAE,QAAQ,GAAG,GAAG;IAC/C,MAAM,IAAI,GACR,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5D,OAAO,IAAI,CAAC,MAAM,IAAI,QAAQ;QAC5B,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAiB;IAChD,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,kBAAkB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAC/C,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,cAAc,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAC3C,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IACxC,KAAK,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAC9C,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qBAAqB,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAC3C,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,aAAa,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CACpE,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ModelCapabilities } from "../model/types.js";
|
|
2
|
+
import type { AgentMessage } from "../types/index.js";
|
|
3
|
+
import type { ContextBudgetEstimator, ContextBudgetUsage } from "./types.js";
|
|
4
|
+
export interface MessageTokenEstimator {
|
|
5
|
+
estimate(messages: readonly AgentMessage[]): number;
|
|
6
|
+
}
|
|
7
|
+
export declare class CharacterBudgetTokenEstimator implements MessageTokenEstimator {
|
|
8
|
+
estimate(messages: readonly AgentMessage[]): number;
|
|
9
|
+
}
|
|
10
|
+
export declare class DefaultContextBudgetEstimator implements ContextBudgetEstimator {
|
|
11
|
+
private readonly estimator;
|
|
12
|
+
constructor(estimator?: MessageTokenEstimator);
|
|
13
|
+
estimate(messages: readonly AgentMessage[], capabilities: ModelCapabilities): Promise<ContextBudgetUsage>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export class CharacterBudgetTokenEstimator {
|
|
2
|
+
estimate(messages) {
|
|
3
|
+
if (messages.length === 0) {
|
|
4
|
+
return 0;
|
|
5
|
+
}
|
|
6
|
+
return Math.max(1, Math.ceil(JSON.stringify(messages).length / 4));
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export class DefaultContextBudgetEstimator {
|
|
10
|
+
estimator;
|
|
11
|
+
constructor(estimator = new CharacterBudgetTokenEstimator()) {
|
|
12
|
+
this.estimator = estimator;
|
|
13
|
+
}
|
|
14
|
+
async estimate(messages, capabilities) {
|
|
15
|
+
const contextWindow = Math.max(1, capabilities.contextWindow);
|
|
16
|
+
const reservedOutputTokens = Math.min(capabilities.maxOutputTokens ??
|
|
17
|
+
Math.max(1, Math.floor(contextWindow / 4)), Math.max(0, contextWindow - 1));
|
|
18
|
+
const estimatedInputTokens = this.estimator.estimate(messages);
|
|
19
|
+
const ratio = Math.min(Number.MAX_SAFE_INTEGER, (estimatedInputTokens + reservedOutputTokens) / contextWindow);
|
|
20
|
+
return {
|
|
21
|
+
estimatedInputTokens,
|
|
22
|
+
contextWindow,
|
|
23
|
+
reservedOutputTokens,
|
|
24
|
+
ratio,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=budget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget.js","sourceRoot":"","sources":["../../src/compaction/budget.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,6BAA6B;IACxC,QAAQ,CAAC,QAAiC;QACxC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;CACF;AAED,MAAM,OAAO,6BAA6B;IAIrB;IADnB,YACmB,YACf,IAAI,6BAA6B,EAAE;QADpB,cAAS,GAAT,SAAS,CACW;IACpC,CAAC;IAEJ,KAAK,CAAC,QAAQ,CACZ,QAAiC,EACjC,YAA+B;QAE/B,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;QAC9D,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CACnC,YAAY,CAAC,eAAe;YAC1B,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,EAC5C,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC,CAC/B,CAAC;QACF,MAAM,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,MAAM,CAAC,gBAAgB,EACvB,CAAC,oBAAoB,GAAG,oBAAoB,CAAC,GAAG,aAAa,CAC9D,CAAC;QAEF,OAAO;YACL,oBAAoB;YACpB,aAAa;YACb,oBAAoB;YACpB,KAAK;SACN,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type MessageTokenEstimator } from "./budget.js";
|
|
2
|
+
import type { CompactionResult, CompactionStrategy, CompactionStrategyRequest } from "./types.js";
|
|
3
|
+
export declare class DeterministicCompactionStrategy implements CompactionStrategy {
|
|
4
|
+
private readonly estimator;
|
|
5
|
+
readonly id = "deterministic";
|
|
6
|
+
constructor(estimator?: MessageTokenEstimator);
|
|
7
|
+
supports(reason: CompactionStrategyRequest["reason"]): boolean;
|
|
8
|
+
compact(request: CompactionStrategyRequest, signal?: AbortSignal): Promise<CompactionResult>;
|
|
9
|
+
}
|