@code-yeongyu/senpi-codemode 2026.10.6 → 2026.10.8

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.
Files changed (72) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +20 -2
  3. package/package.json +5 -4
  4. package/src/bridge/kernel-tools-protocol.ts +8 -0
  5. package/src/bridge/reserved.ts +10 -0
  6. package/src/bridges/eval-virtual-schemas.ts +100 -0
  7. package/src/bridges/handle-bridge.ts +72 -0
  8. package/src/bridges/reserved-dispatch.ts +20 -2
  9. package/src/bridges/schema-bridge.ts +4 -0
  10. package/src/completion/handle.ts +69 -0
  11. package/src/completion/tool-bridge.ts +31 -12
  12. package/src/environments/editable-check.ts +116 -0
  13. package/src/environments/install-lock.ts +223 -0
  14. package/src/environments/py-environment.ts +98 -0
  15. package/src/environments/py-installer.ts +187 -0
  16. package/src/environments/revision-store.ts +95 -0
  17. package/src/extension/bridge-dispatch.ts +41 -0
  18. package/src/extension/bridge-tool-call.ts +5 -1
  19. package/src/extension/host-facts.ts +18 -0
  20. package/src/extension/kernel-registration.ts +5 -0
  21. package/src/extension/removed-tool-hints.ts +15 -0
  22. package/src/extension/runtime-factory.ts +3 -0
  23. package/src/extension/session-manager-contract.ts +3 -0
  24. package/src/extension/session-manager.ts +32 -5
  25. package/src/extension/start-recovery.ts +111 -0
  26. package/src/handles/completion-handles.ts +202 -0
  27. package/src/handles/handle-args.ts +103 -0
  28. package/src/handles/handle-registry.ts +164 -0
  29. package/src/handles/wait.ts +214 -0
  30. package/src/handles/watch-queue.ts +102 -0
  31. package/src/index.ts +99 -94
  32. package/src/kernels/jl/handles.jl +124 -0
  33. package/src/kernels/jl/prelude.jl +9 -0
  34. package/src/kernels/jl/runner.jl +6 -1
  35. package/src/kernels/js/handles.js +93 -0
  36. package/src/kernels/js/kernel-tools-define.d.ts +6 -0
  37. package/src/kernels/js/kernel-tools-define.js +3 -1
  38. package/src/kernels/js/kernel-tools-errors.js +2 -0
  39. package/src/kernels/js/kernel-tools-errors.ts +2 -0
  40. package/src/kernels/js/kernel-tools-registry.d.ts +2 -0
  41. package/src/kernels/js/kernel-tools-registry.js +18 -9
  42. package/src/kernels/js/kernel-tools-schema.js +6 -2
  43. package/src/kernels/js/worker-runtime.js +10 -1
  44. package/src/kernels/py/host-cell.ts +42 -0
  45. package/src/kernels/py/kernel-contract.ts +13 -2
  46. package/src/kernels/py/kernel-tools-host.ts +97 -0
  47. package/src/kernels/py/kernel.ts +88 -12
  48. package/src/kernels/py/prelude.py +797 -11
  49. package/src/kernels/py/process.ts +15 -4
  50. package/src/kernels/py/startup.ts +58 -20
  51. package/src/kernels/py/transport.ts +36 -7
  52. package/src/kernels/rb/handles.rb +97 -0
  53. package/src/kernels/rb/paths.rb +37 -0
  54. package/src/kernels/rb/prelude.rb +15 -38
  55. package/src/kernels/rb/runner.rb +7 -7
  56. package/src/kernels/sandbox/vendor/pi-codemode/LICENSE +21 -0
  57. package/src/kernels/sandbox/vendor/pi-codemode/VENDORED.md +42 -0
  58. package/src/kernels/sandbox/vendor/pi-codemode/identifier.ts +14 -0
  59. package/src/kernels/sandbox/vendor/pi-codemode/runtime/host.ts +514 -0
  60. package/src/kernels/sandbox/vendor/pi-codemode/runtime/prelude-source.ts +431 -0
  61. package/src/kernels/sandbox/vendor/pi-codemode/runtime/protocol.ts +61 -0
  62. package/src/kernels/sandbox/vendor/pi-codemode/runtime/worker.ts +231 -0
  63. package/src/kernels/sandbox/vendor/pi-codemode/types.ts +185 -0
  64. package/src/kernels/sandbox/vendor/pi-codemode/wasm.ts +37 -0
  65. package/src/kernels/shared/kernel-tools-pump.ts +6 -0
  66. package/src/kernels/shared/process-cpu.ts +69 -0
  67. package/src/kernels/shared/subprocess-queue.ts +1 -0
  68. package/src/tool/cell-handler.ts +21 -18
  69. package/src/tool/cell-reserved-dispatch.ts +51 -0
  70. package/src/tool/eval-tool-options.ts +3 -0
  71. package/src/tool/run-eval-cell.ts +2 -0
  72. package/src/tool/types.ts +15 -0
@@ -9,6 +9,7 @@ import type { EvalSchemaToolInfo } from "../bridges/schema-bridge.ts";
9
9
  import type { CompletionRequest, CompletionResult } from "../completion/handler.ts";
10
10
  import type { ResolvedCodemodeSettings } from "../config/settings.ts";
11
11
  import type { EvalExecutionTracker } from "../extension/session-manager.ts";
12
+ import type { HandleRegistry } from "../handles/handle-registry.ts";
12
13
  import type { EvalTimeoutFactory } from "./cell-execution.ts";
13
14
  import type { EvalDetachedCellManager } from "./detached-cell-manager.ts";
14
15
  import type { EvalExecutionEventPayload } from "./eval-execution-event.ts";
@@ -50,6 +51,8 @@ export interface CreateEvalToolOptions {
50
51
  readonly imageResizer?: EvalImageResizer;
51
52
  readonly executionTracker?: EvalExecutionTracker;
52
53
  readonly cellManager?: EvalDetachedCellManager;
54
+ /** The session generation's handle registry (`wait()`, `handle()`, completion handles); absent before session_start. */
55
+ readonly handles?: HandleRegistry;
53
56
  readonly onCellSettled?: (payload: EvalExecutionEventPayload) => void;
54
57
  readonly timeoutFactory?: EvalTimeoutFactory;
55
58
  readonly proxyExecutor?: (params: EvalToolInput, signal?: AbortSignal) => Promise<AgentToolResult<EvalToolDetails>>;
@@ -224,6 +224,8 @@ async function executeCell(
224
224
  : { artifactPath: join(options.artifactsDir, `eval-${randomUUID()}.log`) }),
225
225
  ...(options.imageResizer === undefined ? {} : { imageResizer: options.imageResizer }),
226
226
  ...(kernelTools === undefined ? {} : { kernelTools }),
227
+ ...(options.handles === undefined ? {} : { handles: options.handles }),
228
+ hardDeadlineMs: cell.startedAtMs + cell.hardLimitSeconds * 1_000,
227
229
  });
228
230
  handler = activeHandler;
229
231
  cellManager.bindKernel(
package/src/tool/types.ts CHANGED
@@ -144,9 +144,24 @@ export function createEvalInputSchema(
144
144
  export type EvalKernelResult = Extract<KernelToHostMessage, { type: "result" }>;
145
145
  export type EvalToolCallMessage = Extract<KernelToHostMessage, { type: "tool-call" }>;
146
146
 
147
+ export type HostCellOutcome =
148
+ | { readonly ok: true; readonly valueRepr?: string }
149
+ | { readonly ok: false; readonly error: { readonly message: string; readonly name?: string } };
150
+
151
+ /**
152
+ * Work the host runs in the cell's place when the entry reaches the front of the kernel's queue: no code is
153
+ * sent to the interpreter, and aborting the signal (interrupt, timeout, kernel close) ends it without
154
+ * restarting the interpreter.
155
+ */
156
+ export type HostCellExecutor = (context: {
157
+ readonly signal: AbortSignal;
158
+ readonly emit: (message: KernelToHostMessage) => void;
159
+ }) => Promise<HostCellOutcome>;
160
+
147
161
  export interface EvalKernelRunInput {
148
162
  readonly cellId: string;
149
163
  readonly code: string;
164
+ readonly host?: HostCellExecutor;
150
165
  readonly timeoutMs?: number;
151
166
  readonly onStarted?: () => void;
152
167
  readonly onMessage?: (message: KernelToHostMessage) => void;