@vinhnt-sdk/core 0.1.1 → 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 +194 -12
- package/dist/agent/agent-factory.d.ts +11 -0
- package/dist/agent/agent-factory.d.ts.map +1 -1
- package/dist/agent/agent-factory.js +11 -2
- package/dist/agent/agent-factory.js.map +1 -1
- package/dist/agent/agent-registry.d.ts +3 -0
- package/dist/agent/agent-registry.d.ts.map +1 -1
- package/dist/agent/agent-registry.js.map +1 -1
- package/dist/agent/create-agent-tool.d.ts +13 -13
- package/dist/agent/create-agent-tool.d.ts.map +1 -1
- package/dist/agent/delegate-batch-tool.d.ts.map +1 -1
- package/dist/agent/delegate-batch-tool.js +1 -1
- package/dist/agent/delegate-batch-tool.js.map +1 -1
- package/dist/agent/delegate-tool.js +1 -1
- package/dist/agent/delegate-tool.js.map +1 -1
- package/dist/agent/execution-engine.d.ts +1 -1
- package/dist/agent/execution-engine.d.ts.map +1 -1
- package/dist/agent/spawn-agent-tool.d.ts +10 -10
- package/dist/agent/spawn-agent-tool.d.ts.map +1 -1
- package/dist/event-bus/bridge.d.ts +2 -3
- package/dist/event-bus/bridge.d.ts.map +1 -1
- package/dist/event-bus/bridge.js +12 -5
- package/dist/event-bus/bridge.js.map +1 -1
- package/dist/event-bus/global-bus.d.ts +8 -0
- package/dist/event-bus/global-bus.d.ts.map +1 -1
- package/dist/event-bus/global-bus.js +48 -0
- package/dist/event-bus/global-bus.js.map +1 -1
- package/dist/event-bus/in-memory-bus.d.ts +14 -0
- package/dist/event-bus/in-memory-bus.d.ts.map +1 -1
- package/dist/event-bus/in-memory-bus.js +53 -0
- package/dist/event-bus/in-memory-bus.js.map +1 -1
- package/dist/event-bus/types.d.ts +17 -0
- package/dist/event-bus/types.d.ts.map +1 -1
- package/dist/fakes/fake-approval-store.d.ts +2 -2
- package/dist/fakes/fake-approval-store.d.ts.map +1 -1
- package/dist/fakes/fake-approval-store.js +28 -6
- package/dist/fakes/fake-approval-store.js.map +1 -1
- package/dist/fakes/fake-model.d.ts.map +1 -1
- package/dist/fakes/fake-model.js +2 -1
- package/dist/fakes/fake-model.js.map +1 -1
- package/dist/fakes/fake-store.d.ts +4 -1
- package/dist/fakes/fake-store.d.ts.map +1 -1
- package/dist/fakes/fake-store.js +33 -0
- package/dist/fakes/fake-store.js.map +1 -1
- package/dist/index.d.ts +232 -109
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +191 -66
- package/dist/index.js.map +1 -1
- package/dist/kernel/approval-handler.d.ts +1 -1
- package/dist/kernel/approval-handler.d.ts.map +1 -1
- package/dist/kernel/approval-handler.js +5 -1
- package/dist/kernel/approval-handler.js.map +1 -1
- package/dist/kernel/circuit-breaker.d.ts +19 -1
- package/dist/kernel/circuit-breaker.d.ts.map +1 -1
- package/dist/kernel/circuit-breaker.js +54 -10
- package/dist/kernel/circuit-breaker.js.map +1 -1
- package/dist/kernel/kernel-error.d.ts +3 -2
- package/dist/kernel/kernel-error.d.ts.map +1 -1
- package/dist/kernel/kernel-error.js +5 -6
- package/dist/kernel/kernel-error.js.map +1 -1
- package/dist/kernel/kernel-session.d.ts +13 -5
- package/dist/kernel/kernel-session.d.ts.map +1 -1
- package/dist/kernel/kernel-session.js +71 -13
- package/dist/kernel/kernel-session.js.map +1 -1
- package/dist/kernel/kernel-types.d.ts +82 -9
- package/dist/kernel/kernel-types.d.ts.map +1 -1
- package/dist/kernel/kernel-types.js.map +1 -1
- package/dist/kernel/kernel.d.ts +94 -20
- package/dist/kernel/kernel.d.ts.map +1 -1
- package/dist/kernel/kernel.js +591 -70
- package/dist/kernel/kernel.js.map +1 -1
- package/dist/kernel/model-caller.d.ts +30 -2
- package/dist/kernel/model-caller.d.ts.map +1 -1
- package/dist/kernel/model-caller.js +55 -20
- package/dist/kernel/model-caller.js.map +1 -1
- package/dist/kernel/permission-gate.d.ts +6 -4
- package/dist/kernel/permission-gate.d.ts.map +1 -1
- package/dist/kernel/permission-gate.js +16 -6
- package/dist/kernel/permission-gate.js.map +1 -1
- package/dist/kernel/run-context.d.ts +26 -0
- package/dist/kernel/run-context.d.ts.map +1 -0
- package/dist/kernel/run-context.js +13 -0
- package/dist/kernel/run-context.js.map +1 -0
- package/dist/kernel/run-loop.d.ts +35 -14
- package/dist/kernel/run-loop.d.ts.map +1 -1
- package/dist/kernel/run-loop.js +295 -87
- package/dist/kernel/run-loop.js.map +1 -1
- package/dist/kernel/self-correction.d.ts +2 -2
- package/dist/kernel/self-correction.d.ts.map +1 -1
- package/dist/kernel/self-correction.js +3 -2
- package/dist/kernel/self-correction.js.map +1 -1
- package/dist/kernel/state-machine.d.ts +2 -0
- package/dist/kernel/state-machine.d.ts.map +1 -1
- package/dist/kernel/state-machine.js +2 -0
- package/dist/kernel/state-machine.js.map +1 -1
- package/dist/kernel/step-executor.d.ts +11 -3
- package/dist/kernel/step-executor.d.ts.map +1 -1
- package/dist/kernel/step-executor.js +54 -24
- package/dist/kernel/step-executor.js.map +1 -1
- package/dist/kernel/sub-agent-runner.d.ts +10 -7
- package/dist/kernel/sub-agent-runner.d.ts.map +1 -1
- package/dist/kernel/sub-agent-runner.js +105 -31
- package/dist/kernel/sub-agent-runner.js.map +1 -1
- package/dist/kernel/tool-context-builder.d.ts +7 -2
- package/dist/kernel/tool-context-builder.d.ts.map +1 -1
- package/dist/kernel/tool-context-builder.js +23 -6
- package/dist/kernel/tool-context-builder.js.map +1 -1
- package/dist/kernel/tool-error-router.d.ts +1 -1
- package/dist/kernel/tool-error-router.d.ts.map +1 -1
- package/dist/kernel/tool-error-router.js +4 -3
- package/dist/kernel/tool-error-router.js.map +1 -1
- package/dist/logger.d.ts +5 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +3 -0
- package/dist/logger.js.map +1 -1
- package/dist/model.d.ts +3 -1
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +2 -0
- package/dist/model.js.map +1 -1
- package/dist/plugin/manager.d.ts +3 -1
- package/dist/plugin/manager.d.ts.map +1 -1
- package/dist/plugin/manager.js +51 -3
- package/dist/plugin/manager.js.map +1 -1
- package/dist/plugin/plugin-file-loader.js +2 -2
- package/dist/plugin/plugin-file-loader.js.map +1 -1
- package/dist/plugin.d.ts +50 -4
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +14 -1
- package/dist/plugin.js.map +1 -1
- package/dist/session/null-store.d.ts +1 -0
- package/dist/session/null-store.d.ts.map +1 -1
- package/dist/session/null-store.js +7 -0
- package/dist/session/null-store.js.map +1 -1
- package/dist/session/run-coordinator.d.ts +9 -3
- package/dist/session/run-coordinator.d.ts.map +1 -1
- package/dist/session/run-coordinator.js +4 -0
- package/dist/session/run-coordinator.js.map +1 -1
- package/dist/skill/create-skill-tool.d.ts +5 -4
- package/dist/skill/create-skill-tool.d.ts.map +1 -1
- package/dist/skill/create-skill-tool.js +8 -5
- package/dist/skill/create-skill-tool.js.map +1 -1
- package/dist/skill/skill-def-registry.d.ts +6 -0
- package/dist/skill/skill-def-registry.d.ts.map +1 -1
- package/dist/skill/skill-def-registry.js +4 -0
- package/dist/skill/skill-def-registry.js.map +1 -1
- package/dist/system-context/sources/instructions-source.js +1 -1
- package/dist/system-context/sources/instructions-source.js.map +1 -1
- package/dist/tool/bridge.d.ts +7 -1
- package/dist/tool/bridge.d.ts.map +1 -1
- package/dist/tool/bridge.js +5 -0
- package/dist/tool/bridge.js.map +1 -1
- package/dist/tool/builtin-provider.d.ts +35 -0
- package/dist/tool/builtin-provider.d.ts.map +1 -0
- package/dist/tool/builtin-provider.js +75 -0
- package/dist/tool/builtin-provider.js.map +1 -0
- package/dist/tool/index.d.ts +21 -23
- package/dist/tool/index.d.ts.map +1 -1
- package/dist/tool/index.js +19 -18
- package/dist/tool/index.js.map +1 -1
- package/dist/tool/provider-helpers.d.ts.map +1 -1
- package/dist/tool/provider-helpers.js +3 -2
- package/dist/tool/provider-helpers.js.map +1 -1
- package/dist/tool/runtime.d.ts +23 -2
- package/dist/tool/runtime.d.ts.map +1 -1
- package/dist/tool/runtime.js +20 -16
- package/dist/tool/runtime.js.map +1 -1
- package/dist/tracer.d.ts +5 -0
- package/dist/tracer.d.ts.map +1 -1
- package/dist/tracer.js +4 -0
- package/dist/tracer.js.map +1 -1
- package/dist/workflow/agent-graph.js +3 -3
- package/dist/workflow/agent-graph.js.map +1 -1
- package/dist/workflow/workflow-helpers.js +2 -2
- package/dist/workflow/workflow-helpers.js.map +1 -1
- package/dist/workspace.d.ts +7 -0
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +4 -0
- package/dist/workspace.js.map +1 -1
- package/package.json +18 -62
package/dist/index.js
CHANGED
|
@@ -1,77 +1,202 @@
|
|
|
1
1
|
// @vinhnt-sdk/core
|
|
2
2
|
// Core agent engine for building AI coding agents
|
|
3
|
-
|
|
4
|
-
//
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
export { restoreRunFromStore, findActiveSessionIds } from "./session/durable-reload.js";
|
|
24
|
-
export { NullRunEventStore, NullSessionStore } from "./session/null-store.js";
|
|
25
|
-
export { InMemorySessionTree } from "./session/session-tree.js";
|
|
26
|
-
export { createDefaultSessionTitleGenerator } from "./session/title.js";
|
|
27
|
-
export { SessionRunCoordinator, kernelAsRunHandler } from "./session/run-coordinator.js";
|
|
28
|
-
export { InMemoryAgentRegistry } from "./agent/agent-registry.js";
|
|
29
|
-
export { AgentParser } from "./agent/agent-parser.js";
|
|
30
|
-
export { createAgent, createSubAgent, validateAgentConfig } from "./agent/agent-factory.js";
|
|
31
|
-
export { ExecutionEngine } from "./agent/execution-engine.js";
|
|
32
|
-
export { createSpawnAgentTool } from "./agent/spawn-agent-tool.js";
|
|
33
|
-
export { createDelegateTool } from "./agent/delegate-tool.js";
|
|
34
|
-
export { createDelegateBatchTool } from "./agent/delegate-batch-tool.js";
|
|
35
|
-
export { createListAgentsTool } from "./agent/list-agents-tool.js";
|
|
36
|
-
export { createCreateAgentTool } from "./agent/create-agent-tool.js";
|
|
37
|
-
export { SkillParser } from "./skill/skill-parser.js";
|
|
38
|
-
export { InMemorySkillDefRegistry } from "./skill/skill-def-registry.js";
|
|
39
|
-
export { createSkillTool, createSkillSearchTool } from "./skill/skill-tool.js";
|
|
40
|
-
export { createCreateSkillTool } from "./skill/create-skill-tool.js";
|
|
41
|
-
// === Permission system ===
|
|
42
|
-
export { checkRiskAllowed, resolveEffectivePermissions, mergeRulesets, normalizePermissions, evaluatePermission } from "./permission/checker.js";
|
|
43
|
-
export { matchPermission, buildPermissionRules } from "./permission/evaluator.js";
|
|
44
|
-
export { createContextRegistry } from "./system-context/registry.js";
|
|
45
|
-
export { createDateSource } from "./system-context/sources/date-source.js";
|
|
46
|
-
export { createWorkspaceSource } from "./system-context/sources/workspace-source.js";
|
|
47
|
-
export { createInstructionsSource } from "./system-context/sources/instructions-source.js";
|
|
48
|
-
export { createAgentSource } from "./system-context/sources/agent-source.js";
|
|
49
|
-
export { createSystemPromptSource } from "./system-context/prompts/system-prompt-source.js";
|
|
50
|
-
export { createSkillGuidanceSource } from "./system-context/sources/skill-guidance-source.js";
|
|
51
|
-
// === Knowledge system ===
|
|
52
|
-
export { InMemoryMemoryStore, SessionMemory, BoundedMemory, ContextCompressor, LlmCompactor, WriteApprovalQueue, BackgroundReview, LearningEngine, createMemorySearchTool, buildPrompt } from "@vinhnt-sdk/knowledge";
|
|
3
|
+
//
|
|
4
|
+
// PUBLIC API - Only essential exports for users
|
|
5
|
+
// Internal implementation details are NOT exported here
|
|
6
|
+
/**
|
|
7
|
+
* Core agent kernel for building AI coding agents.
|
|
8
|
+
*
|
|
9
|
+
* The kernel manages agent lifecycle, tool execution, permissions, and LLM interactions.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { AgentKernel } from "@vinhnt-sdk/core";
|
|
14
|
+
*
|
|
15
|
+
* const kernel = new AgentKernel({
|
|
16
|
+
* workspaceRoot: "/path/to/project",
|
|
17
|
+
* maxConcurrent: 3,
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* await kernel.start();
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
53
23
|
// === Kernel (core runtime) ===
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Main agent kernel class - manages agent lifecycle and execution.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* const kernel = new AgentKernel({
|
|
30
|
+
* workspaceRoot: "/path/to/project",
|
|
31
|
+
* maxConcurrent: 3,
|
|
32
|
+
* toolRegistry: myToolRegistry,
|
|
33
|
+
* });
|
|
34
|
+
*
|
|
35
|
+
* const run = await kernel.startRun({
|
|
36
|
+
* agentId: "coder",
|
|
37
|
+
* prompt: "Write a hello world program",
|
|
38
|
+
* });
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export { AgentKernel, KernelError } from "./kernel/kernel.js";
|
|
61
42
|
export { canTransitionRun, terminalRunStatuses } from "./kernel/state-machine.js";
|
|
62
|
-
export {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
43
|
+
export { RunStateMachine } from "@vinhnt-sdk/step-executor";
|
|
44
|
+
// === Agent system ===
|
|
45
|
+
/**
|
|
46
|
+
* Factory function for creating agent configurations.
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* const agent = createAgent({
|
|
51
|
+
* id: "coder",
|
|
52
|
+
* name: "Coder Agent",
|
|
53
|
+
* model: "gpt-4",
|
|
54
|
+
* systemPrompt: "You are a helpful coding assistant.",
|
|
55
|
+
* });
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export { createAgent } from "./agent/agent-factory.js";
|
|
59
|
+
// === Event bus ===
|
|
60
|
+
/**
|
|
61
|
+
* In-memory event bus for publishing and subscribing to events.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```typescript
|
|
65
|
+
* const bus = new InMemoryEventBus();
|
|
66
|
+
*
|
|
67
|
+
* bus.on("tool.executed", (event) => {
|
|
68
|
+
* console.log("Tool executed:", event.toolId);
|
|
69
|
+
* });
|
|
70
|
+
*
|
|
71
|
+
* await bus.publish({
|
|
72
|
+
* type: "tool.executed",
|
|
73
|
+
* toolId: "read_file",
|
|
74
|
+
* timestamp: Date.now(),
|
|
75
|
+
* });
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export { InMemoryEventBus } from "@vinhnt-sdk/event";
|
|
79
|
+
// === Session management ===
|
|
80
|
+
/**
|
|
81
|
+
* In-memory session state management.
|
|
82
|
+
*/
|
|
83
|
+
export { InMemorySessionState } from "@vinhnt-sdk/session";
|
|
84
|
+
/**
|
|
85
|
+
* Coordinates multiple runs within a session.
|
|
86
|
+
*/
|
|
87
|
+
export { SessionRunCoordinator } from "./session/run-coordinator.js";
|
|
88
|
+
// === Agent registry ===
|
|
89
|
+
/**
|
|
90
|
+
* In-memory agent registry for managing agent configurations.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```typescript
|
|
94
|
+
* const registry = new InMemoryAgentRegistry();
|
|
95
|
+
* registry.register({
|
|
96
|
+
* id: "coder",
|
|
97
|
+
* name: "Coder Agent",
|
|
98
|
+
* model: "gpt-4",
|
|
99
|
+
* });
|
|
100
|
+
*
|
|
101
|
+
* const agent = registry.get("coder");
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
export { InMemoryAgentRegistry } from "./agent/agent-registry.js";
|
|
105
|
+
// === Model registry ===
|
|
106
|
+
/**
|
|
107
|
+
* In-memory model registry for managing model providers.
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```typescript
|
|
111
|
+
* const registry = new InMemoryModelRegistry();
|
|
112
|
+
* registry.register({
|
|
113
|
+
* id: "openai",
|
|
114
|
+
* name: "OpenAI",
|
|
115
|
+
* baseUrl: "https://api.openai.com",
|
|
116
|
+
* });
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
67
119
|
export { InMemoryModelRegistry } from "./model.js";
|
|
120
|
+
export { getTextContent } from "./model.js";
|
|
68
121
|
// === Permission stores ===
|
|
69
|
-
|
|
122
|
+
/**
|
|
123
|
+
* In-memory approval store for managing permission approvals.
|
|
124
|
+
*/
|
|
125
|
+
export { InMemoryApprovalStore } from "@vinhnt-sdk/permission";
|
|
126
|
+
// === Workspace ===
|
|
127
|
+
/**
|
|
128
|
+
* Workspace manager for handling file operations and workspace context.
|
|
129
|
+
*/
|
|
130
|
+
export { WorkspaceManager } from "./workspace.js";
|
|
131
|
+
// === Skill system ===
|
|
132
|
+
/**
|
|
133
|
+
* In-memory skill definition registry.
|
|
134
|
+
*/
|
|
135
|
+
export { InMemorySkillDefRegistry } from "./skill/skill-def-registry.js";
|
|
70
136
|
// === Tracing ===
|
|
137
|
+
/**
|
|
138
|
+
* Request tracing for monitoring and debugging.
|
|
139
|
+
*/
|
|
71
140
|
export { Tracer } from "./tracer.js";
|
|
72
141
|
// === Logger ===
|
|
142
|
+
/**
|
|
143
|
+
* Set the global logger instance.
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* ```typescript
|
|
147
|
+
* import { setLogger } from "@vinhnt-sdk/core";
|
|
148
|
+
*
|
|
149
|
+
* setLogger({
|
|
150
|
+
* info: (msg, ...args) => console.log(msg, ...args),
|
|
151
|
+
* warn: (msg, ...args) => console.warn(msg, ...args),
|
|
152
|
+
* error: (msg, ...args) => console.error(msg, ...args),
|
|
153
|
+
* debug: (msg, ...args) => console.debug(msg, ...args),
|
|
154
|
+
* });
|
|
155
|
+
* ```
|
|
156
|
+
*/
|
|
73
157
|
export { setLogger, setLogLevel, getLogger } from "./logger.js";
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
158
|
+
export { createDisposable } from "./plugin.js";
|
|
159
|
+
/**
|
|
160
|
+
* Error classes for the SDK.
|
|
161
|
+
*
|
|
162
|
+
* All errors extend VntError and include error codes and retryable flags.
|
|
163
|
+
*/
|
|
164
|
+
export { VntError, AgentNotFoundError, AgentValidationError, AgentPermissionDenied, ToolNotFoundError, ToolExecutionError, ToolPermissionDenied, RunNotFoundError, RunAbortedError, RunTimeoutError, CircuitBreakerOpenError, ToolInputError, PermissionDeniedError, ValidationError, TimeoutError, NetworkError, RateLimitError, AuthenticationError, ConfigurationError, PluginError, } from "@vinhnt-sdk/schema";
|
|
165
|
+
// === Re-export essential types from tools ===
|
|
166
|
+
/**
|
|
167
|
+
* Define a custom tool.
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* ```typescript
|
|
171
|
+
* import { defineTool } from "@vinhnt-sdk/core";
|
|
172
|
+
* import { z } from "zod";
|
|
173
|
+
*
|
|
174
|
+
* const myTool = defineTool({
|
|
175
|
+
* name: "my_tool",
|
|
176
|
+
* description: "A custom tool",
|
|
177
|
+
* risk: "read",
|
|
178
|
+
* input: z.object({
|
|
179
|
+
* query: z.string(),
|
|
180
|
+
* }),
|
|
181
|
+
* async execute(input, ctx) {
|
|
182
|
+
* return `Result: ${input.query}`;
|
|
183
|
+
* },
|
|
184
|
+
* });
|
|
185
|
+
* ```
|
|
186
|
+
*/
|
|
187
|
+
export { ToolRegistry, LazyToolRegistry, ToolProviderRegistry, defineTool, toolToDefinition, zodSchemaToNestedJsonSchema, createCodingDomain, generateDiff, createReadFileTool, createWriteFileTool, createEditFileTool, createApplyPatchTool, createListDirectoryTool, createReadImageTool, readImageToContentParts, FileReadTracker, InMemoryFileHistory, createFileHistoryHook, createShellTool, ToolSandbox, signalToToolContext, createSandbox, createWebFetchTool, createWebSearchTool, TavilySearchProvider, SerperSearchProvider, createGitStatusTool, createGitDiffTool, createGitLogTool, createGitCommitTool, createGlobFilesTool, createGrepFilesTool, createToolSearchTool, createQuestionTool, createTodoWriteTool, AgentToolProvider, SkillToolProvider, ToolFileProvider, ToolFileLoader, } from "@vinhnt-sdk/tools";
|
|
188
|
+
export { BuiltinToolProvider } from "./tool/builtin-provider.js";
|
|
189
|
+
export { ToolRuntime } from "./tool/runtime.js";
|
|
190
|
+
export { createKernelTools, createPluginToolHook } from "./tool/bridge.js";
|
|
191
|
+
export { createToolProviderRegistry, createToolProvider, registerProviderTools } from "./tool/provider-helpers.js";
|
|
192
|
+
// === Re-export essential types from knowledge ===
|
|
193
|
+
/**
|
|
194
|
+
* Bounded memory store with size limits.
|
|
195
|
+
*/
|
|
196
|
+
export { BoundedMemory, ContextCompressor } from "@vinhnt-sdk/knowledge";
|
|
197
|
+
// === Re-export essential types from security ===
|
|
198
|
+
/**
|
|
199
|
+
* Redact secrets from text.
|
|
200
|
+
*/
|
|
201
|
+
export { redactSecrets, detectSecrets } from "@vinhnt-sdk/security";
|
|
77
202
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,kDAAkD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,5 +13,5 @@ export interface ApprovalHandlerDeps {
|
|
|
13
13
|
readonly pluginManager: PluginManager | undefined;
|
|
14
14
|
currentAgent: AgentConfig | undefined;
|
|
15
15
|
}
|
|
16
|
-
export declare function handleApproval(permResult: PermissionCheckResult, tc: ToolExecutionPlan, toolCtx: ToolContext, runId: RunId, ctx: RequestContext, _sessionId: string | undefined, messages: ChatMessage[], deps: ApprovalHandlerDeps): Promise<boolean>;
|
|
16
|
+
export declare function handleApproval(permResult: PermissionCheckResult, tc: ToolExecutionPlan, toolCtx: ToolContext, runId: RunId, ctx: RequestContext, _sessionId: string | undefined, messages: ChatMessage[], deps: ApprovalHandlerDeps, selfApproving?: boolean): Promise<boolean>;
|
|
17
17
|
//# sourceMappingURL=approval-handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval-handler.d.ts","sourceRoot":"","sources":["../../src/kernel/approval-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE;QAAE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,oBAAoB,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IACrI,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,aAAa,GAAG,SAAS,CAAC;IAClD,YAAY,EAAE,WAAW,GAAG,SAAS,CAAC;CACvC;AAED,wBAAsB,cAAc,CAClC,UAAU,EAAE,qBAAqB,EACjC,EAAE,EAAE,iBAAiB,EACrB,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,WAAW,EAAE,EACvB,IAAI,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"approval-handler.d.ts","sourceRoot":"","sources":["../../src/kernel/approval-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE;QAAE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,oBAAoB,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IACrI,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,aAAa,GAAG,SAAS,CAAC;IAClD,YAAY,EAAE,WAAW,GAAG,SAAS,CAAC;CACvC;AAED,wBAAsB,cAAc,CAClC,UAAU,EAAE,qBAAqB,EACjC,EAAE,EAAE,iBAAiB,EACrB,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,QAAQ,EAAE,WAAW,EAAE,EACvB,IAAI,EAAE,mBAAmB,EACzB,aAAa,CAAC,EAAE,OAAO,GACtB,OAAO,CAAC,OAAO,CAAC,CA+BlB"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { toolDomain } from "./kernel-utils.js";
|
|
2
|
-
export async function handleApproval(permResult, tc, toolCtx, runId, ctx, _sessionId, messages, deps) {
|
|
2
|
+
export async function handleApproval(permResult, tc, toolCtx, runId, ctx, _sessionId, messages, deps, selfApproving) {
|
|
3
3
|
if (!permResult.needsApproval || permResult.allowed)
|
|
4
4
|
return true;
|
|
5
|
+
// Single approval path: self-approving tools ask via their own `ctx.ask`
|
|
6
|
+
// (which persists savePatterns on "always"). Defer the gate-level ask.
|
|
7
|
+
if (selfApproving)
|
|
8
|
+
return true;
|
|
5
9
|
const savedOk = deps.permissionGate.checkSavedApproval(tc.toolName, deps.currentAgent?.id);
|
|
6
10
|
if (savedOk)
|
|
7
11
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval-handler.js","sourceRoot":"","sources":["../../src/kernel/approval-handler.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAS/C,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAiC,EACjC,EAAqB,EACrB,OAAoB,EACpB,KAAY,EACZ,GAAmB,EACnB,UAA8B,EAC9B,QAAuB,EACvB,IAAyB;
|
|
1
|
+
{"version":3,"file":"approval-handler.js","sourceRoot":"","sources":["../../src/kernel/approval-handler.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAS/C,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAiC,EACjC,EAAqB,EACrB,OAAoB,EACpB,KAAY,EACZ,GAAmB,EACnB,UAA8B,EAC9B,QAAuB,EACvB,IAAyB,EACzB,aAAuB;IAEvB,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,UAAU,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAEjE,yEAAyE;IACzE,uEAAuE;IACvE,IAAI,aAAa;QAAE,OAAO,IAAI,CAAC;IAE/B,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC3F,IAAI,OAAO;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9B,UAAU,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE;QACjC,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,MAAM,EAAE,UAAU,CAAC,MAAO;KAC3B,CAAC,CAAC;IAEH,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACtE,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YACzB,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa;YACnD,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO;YAC1D,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,QAAQ,oBAAoB,EAAE;SACvJ,CAAC,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,QAAQ,oBAAoB,EAAE,CAAC,CAAC;QACjH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -4,6 +4,12 @@ export interface CircuitBreakerOptions {
|
|
|
4
4
|
successThreshold?: number;
|
|
5
5
|
resetTimeoutMs?: number;
|
|
6
6
|
isFailure?: (err: unknown) => boolean;
|
|
7
|
+
/** Maximum number of retries for transient failures. Default: 3 */
|
|
8
|
+
maxRetries?: number;
|
|
9
|
+
/** Base delay for exponential backoff in ms. Default: 1000 */
|
|
10
|
+
backoffMs?: number;
|
|
11
|
+
/** Maximum delay for backoff in ms. Default: 30000 */
|
|
12
|
+
maxBackoffMs?: number;
|
|
7
13
|
}
|
|
8
14
|
export declare class CircuitBreaker {
|
|
9
15
|
private state;
|
|
@@ -13,10 +19,22 @@ export declare class CircuitBreaker {
|
|
|
13
19
|
private readonly options;
|
|
14
20
|
constructor(options?: CircuitBreakerOptions);
|
|
15
21
|
getState(): CircuitState;
|
|
16
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Execute a function with circuit breaker and retry logic.
|
|
24
|
+
* Retries on transient failures with exponential backoff.
|
|
25
|
+
*
|
|
26
|
+
* @param fn - The async function to execute
|
|
27
|
+
* @param signal - Optional AbortSignal for cancellation
|
|
28
|
+
* @returns The result of the function
|
|
29
|
+
* @throws CircuitBreakerOpenError if circuit is open
|
|
30
|
+
* @throws The original error if all retries fail
|
|
31
|
+
*/
|
|
32
|
+
call<T>(fn: () => Promise<T>, signal?: AbortSignal): Promise<T>;
|
|
17
33
|
private onSuccess;
|
|
18
34
|
private onFailure;
|
|
19
35
|
reset(): void;
|
|
36
|
+
/** Get the current configuration options. */
|
|
37
|
+
getOptions(): Readonly<Required<CircuitBreakerOptions>>;
|
|
20
38
|
}
|
|
21
39
|
export declare class CircuitBreakerOpenError extends Error {
|
|
22
40
|
readonly remainingMs: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../src/kernel/circuit-breaker.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE3D,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../src/kernel/circuit-breaker.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE3D,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC;IACtC,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAkBD,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;gBAE9C,OAAO,CAAC,EAAE,qBAAqB;IAO3C,QAAQ,IAAI,YAAY;IAQxB;;;;;;;;;OASG;IACG,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;IAoDrE,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,SAAS;IAcjB,KAAK,IAAI,IAAI;IAOb,6CAA6C;IAC7C,UAAU,IAAI,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;CAGxD;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAEjB,cAAc,EAAE,MAAM;CAKnC"}
|
|
@@ -2,6 +2,9 @@ const DEFAULT_OPTIONS = {
|
|
|
2
2
|
failureThreshold: 5,
|
|
3
3
|
successThreshold: 2,
|
|
4
4
|
resetTimeoutMs: 30_000,
|
|
5
|
+
maxRetries: 3,
|
|
6
|
+
backoffMs: 1000,
|
|
7
|
+
maxBackoffMs: 30_000,
|
|
5
8
|
isFailure: (err) => {
|
|
6
9
|
const msg = err instanceof Error ? err.message.toLowerCase() : String(err).toLowerCase();
|
|
7
10
|
if (msg.includes("auth") || msg.includes("unauthorized") || msg.includes("invalid api key"))
|
|
@@ -20,7 +23,10 @@ export class CircuitBreaker {
|
|
|
20
23
|
halfOpenSuccesses = 0;
|
|
21
24
|
options;
|
|
22
25
|
constructor(options) {
|
|
23
|
-
this.options = {
|
|
26
|
+
this.options = {
|
|
27
|
+
...DEFAULT_OPTIONS,
|
|
28
|
+
...Object.fromEntries(Object.entries(options ?? {}).filter(([, v]) => v !== undefined)),
|
|
29
|
+
};
|
|
24
30
|
}
|
|
25
31
|
getState() {
|
|
26
32
|
if (this.state === "open" && Date.now() - this.lastFailureTime >= this.options.resetTimeoutMs) {
|
|
@@ -29,20 +35,54 @@ export class CircuitBreaker {
|
|
|
29
35
|
}
|
|
30
36
|
return this.state;
|
|
31
37
|
}
|
|
32
|
-
|
|
38
|
+
/**
|
|
39
|
+
* Execute a function with circuit breaker and retry logic.
|
|
40
|
+
* Retries on transient failures with exponential backoff.
|
|
41
|
+
*
|
|
42
|
+
* @param fn - The async function to execute
|
|
43
|
+
* @param signal - Optional AbortSignal for cancellation
|
|
44
|
+
* @returns The result of the function
|
|
45
|
+
* @throws CircuitBreakerOpenError if circuit is open
|
|
46
|
+
* @throws The original error if all retries fail
|
|
47
|
+
*/
|
|
48
|
+
async call(fn, signal) {
|
|
33
49
|
const state = this.getState();
|
|
34
50
|
if (state === "open") {
|
|
35
51
|
throw new CircuitBreakerOpenError(this.options.resetTimeoutMs);
|
|
36
52
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
53
|
+
let lastError;
|
|
54
|
+
let attempt = 0;
|
|
55
|
+
while (attempt <= this.options.maxRetries) {
|
|
56
|
+
if (signal?.aborted) {
|
|
57
|
+
throw new DOMException("Aborted", "AbortError");
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
const result = await fn();
|
|
61
|
+
this.onSuccess();
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
lastError = err;
|
|
66
|
+
// Check if error is retryable
|
|
67
|
+
if (!this.options.isFailure(err)) {
|
|
68
|
+
throw err;
|
|
69
|
+
}
|
|
70
|
+
this.onFailure(err);
|
|
71
|
+
// Don't retry if we've hit the circuit breaker
|
|
72
|
+
if (this.getState() === "open") {
|
|
73
|
+
throw new CircuitBreakerOpenError(this.options.resetTimeoutMs);
|
|
74
|
+
}
|
|
75
|
+
// Don't retry on last attempt
|
|
76
|
+
if (attempt >= this.options.maxRetries) {
|
|
77
|
+
throw err;
|
|
78
|
+
}
|
|
79
|
+
// Calculate delay with exponential backoff
|
|
80
|
+
const delay = Math.min(this.options.backoffMs * Math.pow(2, attempt), this.options.maxBackoffMs);
|
|
81
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
82
|
+
attempt++;
|
|
83
|
+
}
|
|
45
84
|
}
|
|
85
|
+
throw lastError;
|
|
46
86
|
}
|
|
47
87
|
onSuccess() {
|
|
48
88
|
if (this.state === "half_open") {
|
|
@@ -76,6 +116,10 @@ export class CircuitBreaker {
|
|
|
76
116
|
this.lastFailureTime = 0;
|
|
77
117
|
this.halfOpenSuccesses = 0;
|
|
78
118
|
}
|
|
119
|
+
/** Get the current configuration options. */
|
|
120
|
+
getOptions() {
|
|
121
|
+
return this.options;
|
|
122
|
+
}
|
|
79
123
|
}
|
|
80
124
|
export class CircuitBreakerOpenError extends Error {
|
|
81
125
|
remainingMs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/kernel/circuit-breaker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/kernel/circuit-breaker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { VntError } from "@vinhnt-sdk/schema";
|
|
2
2
|
export type KernelErrorCode = "session_busy" | "cancelled" | "max_steps_exceeded" | "max_tokens_exceeded" | "tool_failed" | "model_failed" | "session_store_failed" | "internal_error" | "timeout" | "model_unavailable";
|
|
3
3
|
export declare class KernelError extends VntError {
|
|
4
|
-
readonly code:
|
|
5
|
-
|
|
4
|
+
readonly code: string;
|
|
5
|
+
readonly retryable = false;
|
|
6
|
+
constructor(kernelCode: KernelErrorCode, message: string, cause?: unknown);
|
|
6
7
|
}
|
|
7
8
|
//# sourceMappingURL=kernel-error.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kernel-error.d.ts","sourceRoot":"","sources":["../../src/kernel/kernel-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,MAAM,eAAe,GACvB,cAAc,GACd,WAAW,GACX,oBAAoB,GACpB,qBAAqB,GACrB,aAAa,GACb,cAAc,GACd,sBAAsB,GACtB,gBAAgB,GAChB,SAAS,GACT,mBAAmB,CAAC;AAExB,qBAAa,WAAY,SAAQ,QAAQ;IACvC,
|
|
1
|
+
{"version":3,"file":"kernel-error.d.ts","sourceRoot":"","sources":["../../src/kernel/kernel-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,MAAM,eAAe,GACvB,cAAc,GACd,WAAW,GACX,oBAAoB,GACpB,qBAAqB,GACrB,aAAa,GACb,cAAc,GACd,sBAAsB,GACtB,gBAAgB,GAChB,SAAS,GACT,mBAAmB,CAAC;AAExB,qBAAa,WAAY,SAAQ,QAAQ;IACvC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,SAAS,SAAS;gBAEtB,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAK1E"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { VntError } from "@vinhnt-sdk/schema";
|
|
2
2
|
export class KernelError extends VntError {
|
|
3
3
|
code;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
this.
|
|
8
|
-
|
|
9
|
-
this.cause = inner;
|
|
4
|
+
retryable = false;
|
|
5
|
+
constructor(kernelCode, message, cause) {
|
|
6
|
+
super(message, { cause });
|
|
7
|
+
this.code = kernelCode;
|
|
8
|
+
this.name = `KernelError.${kernelCode}`;
|
|
10
9
|
}
|
|
11
10
|
}
|
|
12
11
|
//# sourceMappingURL=kernel-error.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kernel-error.js","sourceRoot":"","sources":["../../src/kernel/kernel-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAc9C,MAAM,OAAO,WAAY,SAAQ,QAAQ;
|
|
1
|
+
{"version":3,"file":"kernel-error.js","sourceRoot":"","sources":["../../src/kernel/kernel-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAc9C,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACvB,IAAI,CAAS;IACb,SAAS,GAAG,KAAK,CAAC;IAElC,YAAY,UAA2B,EAAE,OAAe,EAAE,KAAe;QACvE,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,eAAe,UAAU,EAAE,CAAC;IAC1C,CAAC;CACF"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { RequestContext, RunId, AgentConfig, KnownRunEvent } from "@vinhnt-sdk/schema";
|
|
2
|
-
import type {
|
|
2
|
+
import type { EventBus } from "@vinhnt-sdk/event";
|
|
3
|
+
import type { RunEventStore, SessionStore } from "@vinhnt-sdk/session";
|
|
3
4
|
import type { PluginManager } from "../plugin.js";
|
|
4
|
-
import type { ModelCaller } from "
|
|
5
|
-
import type { ToolSaga } from "
|
|
6
|
-
import type { EventBus } from "../event-bus/types.js";
|
|
5
|
+
import type { ModelCaller } from "@vinhnt-sdk/llm";
|
|
6
|
+
import type { ToolSaga } from "@vinhnt-sdk/tools";
|
|
7
7
|
export interface KernelSessionDeps {
|
|
8
8
|
store: RunEventStore;
|
|
9
9
|
eventBus?: EventBus;
|
|
@@ -25,6 +25,14 @@ export declare function addSessionMessage(deps: KernelSessionDeps, sessionId: st
|
|
|
25
25
|
cost?: number;
|
|
26
26
|
}): Promise<void>;
|
|
27
27
|
export declare function updateSessionOnComplete(deps: KernelSessionDeps, sessionId: string | undefined, runId: RunId, totalInputTokens: number, totalOutputTokens: number): Promise<void>;
|
|
28
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Atomically persist a terminal run event (e.g. `run.completed`) together with
|
|
30
|
+
* the session terminal stats (model/tokens/cost) when the store supports
|
|
31
|
+
* {@link RunEventStore.appendTransactional}. When it does not, the session is
|
|
32
|
+
* updated BEFORE the event is emitted — closing the crash gap where a process
|
|
33
|
+
* dies between the two writes and terminal stats are lost.
|
|
34
|
+
*/
|
|
35
|
+
export declare function emitCompletedWithSession(deps: KernelSessionDeps, event: Omit<KnownRunEvent, "sequence">, sessionId: string | undefined, runId: RunId, totalInputTokens: number, totalOutputTokens: number, _status: string): Promise<void>;
|
|
36
|
+
export declare function emitFail(deps: KernelSessionDeps, runId: RunId, ctx: RequestContext, reason: string, steps: number, sessionId?: string, totalInputTokens?: number, totalOutputTokens?: number, durationMs?: number, cancelled?: boolean): Promise<void>;
|
|
29
37
|
export declare function buildAgentIdentity(agent: AgentConfig | undefined): string;
|
|
30
38
|
//# sourceMappingURL=kernel-session.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kernel-session.d.ts","sourceRoot":"","sources":["../../src/kernel/kernel-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"kernel-session.d.ts","sourceRoot":"","sources":["../../src/kernel/kernel-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAY,MAAM,oBAAoB,CAAC;AAEtG,OAAO,KAAK,EAAmB,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AASD,wBAAsB,SAAS,CAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,OAAO,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB9H;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,iBAAiB,EACvB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7H,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,iBAAiB,EACvB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,KAAK,EAAE,KAAK,EACZ,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CAWf;AA6BD;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,iBAAiB,EACvB,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,EACtC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,KAAK,EAAE,KAAK,EACZ,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,MAAM,EACzB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,iBAAiB,EACvB,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,EAClB,gBAAgB,SAAI,EACpB,iBAAiB,SAAI,EACrB,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,UAAQ,GAChB,OAAO,CAAC,IAAI,CAAC,CAgBf;AAOD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAqBzE"}
|