@code-yeongyu/senpi-codemode 2026.9.15-2 → 2026.9.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/README.md +24 -0
- package/package.json +4 -4
- package/src/bridge/http-server.ts +7 -1
- package/src/bridge/kernel-tools-protocol.ts +85 -0
- package/src/bridge/protocol.ts +6 -0
- package/src/bridges/agent-bridge.ts +30 -11
- package/src/extension/session-manager.ts +11 -0
- package/src/index.ts +10 -0
- package/src/kernels/jl/prelude.jl +46 -0
- package/src/kernels/jl/runner.jl +1 -1
- package/src/kernels/js/context-manager.ts +29 -0
- package/src/kernels/js/kernel-contract.ts +12 -0
- package/src/kernels/js/kernel-tools-context.d.ts +13 -0
- package/src/kernels/js/kernel-tools-context.js +7 -0
- package/src/kernels/js/kernel-tools-define.d.ts +10 -0
- package/src/kernels/js/kernel-tools-define.js +12 -0
- package/src/kernels/js/kernel-tools-errors.js +22 -0
- package/src/kernels/js/kernel-tools-errors.ts +26 -0
- package/src/kernels/js/kernel-tools-host.ts +134 -0
- package/src/kernels/js/kernel-tools-naming.js +28 -0
- package/src/kernels/js/kernel-tools-parse.d.ts +5 -0
- package/src/kernels/js/kernel-tools-parse.js +255 -0
- package/src/kernels/js/kernel-tools-pump.js +105 -0
- package/src/kernels/js/kernel-tools-registry.d.ts +27 -0
- package/src/kernels/js/kernel-tools-registry.js +127 -0
- package/src/kernels/js/kernel-tools-schema.js +69 -0
- package/src/kernels/js/kernel-tools-types.ts +42 -0
- package/src/kernels/js/prelude.ts +2 -0
- package/src/kernels/js/worker-core.js +26 -3
- package/src/kernels/js/worker-runtime.js +20 -8
- package/src/kernels/js/worker-slot.ts +6 -1
- package/src/kernels/js/worker-startup.ts +9 -7
- package/src/kernels/js/workpool.js +37 -0
- package/src/kernels/kernel-tools-unavailable.ts +5 -0
- package/src/kernels/py/kernel.ts +13 -0
- package/src/kernels/py/prelude.py +57 -3
- package/src/kernels/rb/prelude.rb +13 -2
- package/src/kernels/rb/workpool.rb +38 -0
- package/src/kernels/shared/subprocess-kernel.ts +13 -0
- package/src/kernels/shared/subprocess-queue.ts +2 -0
- package/src/prompt/eval-prompt-template.ts +4 -2
- package/src/tool/cell-handler.ts +8 -1
- package/src/tool/run-eval-cell.ts +49 -30
- package/src/tool/types.ts +2 -0
package/src/tool/cell-handler.ts
CHANGED
|
@@ -90,6 +90,8 @@ export class CellHandler {
|
|
|
90
90
|
case "init-failed":
|
|
91
91
|
case "result":
|
|
92
92
|
case "closed":
|
|
93
|
+
case "kernel-tool-describe-reply":
|
|
94
|
+
case "kernel-tool-invoke-reply":
|
|
93
95
|
return;
|
|
94
96
|
default:
|
|
95
97
|
throw new TypeError(`Unhandled kernel message: ${String(message)}`);
|
|
@@ -223,7 +225,12 @@ export class CellHandler {
|
|
|
223
225
|
type: "tool-reply",
|
|
224
226
|
callId: message.callId,
|
|
225
227
|
ok: false,
|
|
226
|
-
error: {
|
|
228
|
+
error: {
|
|
229
|
+
message: text,
|
|
230
|
+
...(error instanceof Error && "code" in error && typeof error.code === "string"
|
|
231
|
+
? { code: error.code }
|
|
232
|
+
: {}),
|
|
233
|
+
},
|
|
227
234
|
});
|
|
228
235
|
}
|
|
229
236
|
this.#resultBuilder.emitUpdate(false);
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import type
|
|
3
|
+
import { type AgentToolResult, type ExtensionContext, kernelToolsStorage } from "@code-yeongyu/senpi";
|
|
4
4
|
import { DEFAULT_FOREGROUND_WINDOW_SECONDS, defaultCodemodeSettings } from "../config/settings.ts";
|
|
5
|
+
import type { KernelToolsCapability } from "../kernels/js/kernel-tools-types.ts";
|
|
5
6
|
import { TIMEOUT_PAUSE_OP, TIMEOUT_RESUME_OP } from "../timeouts/bridge-timeout.ts";
|
|
6
7
|
import { abortError, CellExecution, defaultTimeoutFactory } from "./cell-execution.ts";
|
|
7
8
|
import { CellHandler, type CellState } from "./cell-handler.ts";
|
|
@@ -11,7 +12,7 @@ import { buildEvalExecutionEventPayload, type EvalExecutionSettleOutcome } from
|
|
|
11
12
|
import { evalTimeoutBehavior } from "./eval-request.ts";
|
|
12
13
|
import type { CreateEvalToolOptions, EvalCellInvocation } from "./eval-tool-options.ts";
|
|
13
14
|
import { describeTimeoutState } from "./interrupt-note.ts";
|
|
14
|
-
import type { EvalToolDetails } from "./types.ts";
|
|
15
|
+
import type { EvalKernel, EvalToolDetails } from "./types.ts";
|
|
15
16
|
|
|
16
17
|
export async function runEvalCell(
|
|
17
18
|
options: CreateEvalToolOptions,
|
|
@@ -166,34 +167,39 @@ async function executeCell(
|
|
|
166
167
|
void pending.catch((error: unknown) => execution.cancel(error));
|
|
167
168
|
}),
|
|
168
169
|
);
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
options.kernelManager.setContext
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
170
|
+
const runBound = async (): Promise<AgentToolResult<EvalToolDetails>> => {
|
|
171
|
+
execution.setKernel(kernel);
|
|
172
|
+
const activeHandler = new CellHandler(kernel, state, {
|
|
173
|
+
executeTool: options.executeTool,
|
|
174
|
+
...(options.listTools === undefined ? {} : { listTools: options.listTools }),
|
|
175
|
+
settings: options.settings ?? defaultCodemodeSettings,
|
|
176
|
+
...(options.complete === undefined ? {} : { complete: options.complete }),
|
|
177
|
+
ctx: bridgeContext,
|
|
178
|
+
...(options.artifactsDir === undefined
|
|
179
|
+
? {}
|
|
180
|
+
: { artifactPath: join(options.artifactsDir, `eval-${randomUUID()}.log`) }),
|
|
181
|
+
...(options.imageResizer === undefined ? {} : { imageResizer: options.imageResizer }),
|
|
182
|
+
});
|
|
183
|
+
handler = activeHandler;
|
|
184
|
+
cellManager.markRunning(
|
|
185
|
+
cell,
|
|
186
|
+
kernel,
|
|
187
|
+
() => activeHandler.liveResult(),
|
|
188
|
+
(error) => execution.cancel(error),
|
|
189
|
+
);
|
|
190
|
+
// Includes a steer already queued at execute start or received while acquiring the kernel.
|
|
191
|
+
onReady();
|
|
192
|
+
if ("setContext" in options.kernelManager && typeof options.kernelManager.setContext === "function") {
|
|
193
|
+
options.kernelManager.setContext(bridgeContext);
|
|
194
|
+
}
|
|
195
|
+
if (invocation.input.reset) await execution.wait(kernel.reset());
|
|
196
|
+
const result = await execution.wait(kernel.run({ cellId: invocation.cellId, code: invocation.input.code }));
|
|
197
|
+
if (result.ok && state.pendingBridgeCalls.length > 0)
|
|
198
|
+
await execution.wait(Promise.all(state.pendingBridgeCalls));
|
|
199
|
+
return await handler.finalize(result);
|
|
200
|
+
};
|
|
201
|
+
const kernelTools = jsKernelTools(kernel, invocation.input.language);
|
|
202
|
+
return kernelTools ? await kernelToolsStorage.run(kernelTools, runBound) : await runBound();
|
|
197
203
|
} catch (error) {
|
|
198
204
|
if (handler && error instanceof Error && error.name === "CodemodeSessionDisposedError")
|
|
199
205
|
return await handler.finalizeCancellation(error);
|
|
@@ -206,3 +212,16 @@ async function executeCell(
|
|
|
206
212
|
if (handler) await handler.flushOutput();
|
|
207
213
|
}
|
|
208
214
|
}
|
|
215
|
+
|
|
216
|
+
function jsKernelTools(kernel: EvalKernel, language: string): KernelToolsCapability | undefined {
|
|
217
|
+
if (language !== "js") return undefined;
|
|
218
|
+
if (!("describeKernelTools" in kernel) || typeof kernel.describeKernelTools !== "function") return undefined;
|
|
219
|
+
const js = kernel as EvalKernel & {
|
|
220
|
+
describeKernelTools: KernelToolsCapability["describe"];
|
|
221
|
+
invokeKernelTool: KernelToolsCapability["invoke"];
|
|
222
|
+
};
|
|
223
|
+
return {
|
|
224
|
+
describe: (names) => js.describeKernelTools(names),
|
|
225
|
+
invoke: (request, signal) => js.invokeKernelTool(request, signal),
|
|
226
|
+
};
|
|
227
|
+
}
|
package/src/tool/types.ts
CHANGED
|
@@ -132,6 +132,8 @@ export interface EvalKernel {
|
|
|
132
132
|
deliverToolReply(message: Extract<HostToKernelMessage, { type: "tool-reply" }>): void;
|
|
133
133
|
reset(): Promise<void>;
|
|
134
134
|
close(): Promise<void>;
|
|
135
|
+
/** Names this kernel has registered; JS collides with other languages in the same session. */
|
|
136
|
+
listKernelToolNames?(): readonly string[];
|
|
135
137
|
}
|
|
136
138
|
|
|
137
139
|
export interface EvalKernelManager {
|