@provos/ironcurtain 0.12.0 → 0.13.0
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 +14 -12
- package/dist/cli.js +6 -0
- package/dist/cli.js.map +1 -1
- package/dist/config/config-command.d.ts +33 -1
- package/dist/config/config-command.js +608 -11
- package/dist/config/config-command.js.map +1 -1
- package/dist/config/openrouter-catalog.d.ts +46 -0
- package/dist/config/openrouter-catalog.js +111 -0
- package/dist/config/openrouter-catalog.js.map +1 -0
- package/dist/config/openrouter-models-fallback.d.ts +15 -0
- package/dist/config/openrouter-models-fallback.js +49 -0
- package/dist/config/openrouter-models-fallback.js.map +1 -0
- package/dist/config/types.d.ts +8 -0
- package/dist/config/user-config.d.ts +133 -7
- package/dist/config/user-config.js +234 -5
- package/dist/config/user-config.js.map +1 -1
- package/dist/daemon/daemon-command.js.map +1 -1
- package/dist/daemon/ironcurtain-daemon.js +6 -0
- package/dist/daemon/ironcurtain-daemon.js.map +1 -1
- package/dist/docker/adapters/claude-code.js +109 -1
- package/dist/docker/adapters/claude-code.js.map +1 -1
- package/dist/docker/adapters/codex.d.ts +10 -1
- package/dist/docker/adapters/codex.js +99 -20
- package/dist/docker/adapters/codex.js.map +1 -1
- package/dist/docker/adapters/goose.js +38 -2
- package/dist/docker/adapters/goose.js.map +1 -1
- package/dist/docker/agent-adapter.d.ts +29 -5
- package/dist/docker/agent-registry.js +1 -1
- package/dist/docker/agent-registry.js.map +1 -1
- package/dist/docker/apple-container-manager.d.ts +4 -4
- package/dist/docker/apple-container-manager.js +44 -22
- package/dist/docker/apple-container-manager.js.map +1 -1
- package/dist/docker/ca.js +9 -2
- package/dist/docker/ca.js.map +1 -1
- package/dist/docker/container-lifecycle.js +9 -0
- package/dist/docker/container-lifecycle.js.map +1 -1
- package/dist/docker/docker-agent-session.d.ts +31 -0
- package/dist/docker/docker-agent-session.js +67 -6
- package/dist/docker/docker-agent-session.js.map +1 -1
- package/dist/docker/docker-infrastructure.d.ts +55 -15
- package/dist/docker/docker-infrastructure.js +261 -61
- package/dist/docker/docker-infrastructure.js.map +1 -1
- package/dist/docker/docker-manager.js +127 -0
- package/dist/docker/docker-manager.js.map +1 -1
- package/dist/docker/docker-resource-lifecycle.d.ts +71 -0
- package/dist/docker/docker-resource-lifecycle.js +454 -0
- package/dist/docker/docker-resource-lifecycle.js.map +1 -0
- package/dist/docker/gc-command.d.ts +2 -0
- package/dist/docker/gc-command.js +37 -0
- package/dist/docker/gc-command.js.map +1 -0
- package/dist/docker/mitm-proxy.d.ts +6 -4
- package/dist/docker/mitm-proxy.js +105 -17
- package/dist/docker/mitm-proxy.js.map +1 -1
- package/dist/docker/network-topology.d.ts +16 -9
- package/dist/docker/network-topology.js +17 -10
- package/dist/docker/network-topology.js.map +1 -1
- package/dist/docker/openrouter.d.ts +107 -0
- package/dist/docker/openrouter.js +236 -0
- package/dist/docker/openrouter.js.map +1 -0
- package/dist/docker/orientation.js +1 -1
- package/dist/docker/orientation.js.map +1 -1
- package/dist/docker/platform.d.ts +3 -1
- package/dist/docker/platform.js +3 -1
- package/dist/docker/platform.js.map +1 -1
- package/dist/docker/provider-config.d.ts +6 -0
- package/dist/docker/provider-config.js.map +1 -1
- package/dist/docker/pty-session.d.ts +7 -0
- package/dist/docker/pty-session.js +111 -29
- package/dist/docker/pty-session.js.map +1 -1
- package/dist/docker/pty-types.d.ts +15 -0
- package/dist/docker/pty-types.js +8 -0
- package/dist/docker/pty-types.js.map +1 -1
- package/dist/docker/sse-extractor.js +55 -5
- package/dist/docker/sse-extractor.js.map +1 -1
- package/dist/docker/stream-delay.d.ts +86 -0
- package/dist/docker/stream-delay.js +218 -0
- package/dist/docker/stream-delay.js.map +1 -0
- package/dist/docker/token-stream-types.d.ts +15 -0
- package/dist/docker/trajectory-reassembler.d.ts +2 -2
- package/dist/docker/trajectory-reassembler.js +22 -2
- package/dist/docker/trajectory-reassembler.js.map +1 -1
- package/dist/docker/trajectory-tap.js +2 -2
- package/dist/docker/trajectory-tap.js.map +1 -1
- package/dist/docker/types.d.ts +63 -5
- package/dist/doctor/checks.d.ts +3 -3
- package/dist/doctor/checks.js +28 -11
- package/dist/doctor/checks.js.map +1 -1
- package/dist/doctor/doctor-command.js +1 -1
- package/dist/doctor/doctor-command.js.map +1 -1
- package/dist/escalation/escalation-watcher.js +6 -0
- package/dist/escalation/escalation-watcher.js.map +1 -1
- package/dist/{mux → escalation}/trusted-input.d.ts +7 -4
- package/dist/{mux → escalation}/trusted-input.js +8 -5
- package/dist/escalation/trusted-input.js.map +1 -0
- package/dist/hash.js.map +1 -1
- package/dist/index.js +37 -6
- package/dist/index.js.map +1 -1
- package/dist/mux/mux-app.d.ts +7 -0
- package/dist/mux/mux-app.js +17 -16
- package/dist/mux/mux-app.js.map +1 -1
- package/dist/mux/mux-command.js +8 -3
- package/dist/mux/mux-command.js.map +1 -1
- package/dist/mux/mux-input-handler.d.ts +26 -2
- package/dist/mux/mux-input-handler.js +93 -11
- package/dist/mux/mux-input-handler.js.map +1 -1
- package/dist/mux/mux-renderer.d.ts +2 -1
- package/dist/mux/mux-renderer.js +67 -0
- package/dist/mux/mux-renderer.js.map +1 -1
- package/dist/mux/provider-profile-snapshot.d.ts +44 -0
- package/dist/mux/provider-profile-snapshot.js +56 -0
- package/dist/mux/provider-profile-snapshot.js.map +1 -0
- package/dist/mux/types.d.ts +3 -2
- package/dist/mux/types.js +6 -2
- package/dist/mux/types.js.map +1 -1
- package/dist/observe/observe-command.js.map +1 -1
- package/dist/pipeline/constitution-compiler.js.map +1 -1
- package/dist/pipeline/generate-with-repair.js.map +1 -1
- package/dist/pipeline/refresh-lists.js.map +1 -1
- package/dist/pipeline/scenario-schema-validator.js.map +1 -1
- package/dist/{mux → pty}/pty-bridge.d.ts +39 -3
- package/dist/{mux → pty}/pty-bridge.js +68 -18
- package/dist/pty/pty-bridge.js.map +1 -0
- package/dist/pty/resolve-ironcurtain-bin.d.ts +17 -0
- package/dist/pty/resolve-ironcurtain-bin.js +22 -0
- package/dist/pty/resolve-ironcurtain-bin.js.map +1 -0
- package/dist/servers/fetch-server.js +2 -0
- package/dist/servers/fetch-server.js.map +1 -1
- package/dist/session/index.d.ts +1 -1
- package/dist/session/index.js +11 -2
- package/dist/session/index.js.map +1 -1
- package/dist/session/preflight.d.ts +19 -5
- package/dist/session/preflight.js +41 -25
- package/dist/session/preflight.js.map +1 -1
- package/dist/session/resource-budget-tracker.js +8 -0
- package/dist/session/resource-budget-tracker.js.map +1 -1
- package/dist/session/session-manager.d.ts +7 -0
- package/dist/session/session-manager.js.map +1 -1
- package/dist/session/types.d.ts +14 -0
- package/dist/signal/signal-bot-daemon.d.ts +1 -0
- package/dist/signal/signal-bot-daemon.js +9 -2
- package/dist/signal/signal-bot-daemon.js.map +1 -1
- package/dist/trusted-process/mcp-error-utils.js +4 -1
- package/dist/trusted-process/mcp-error-utils.js.map +1 -1
- package/dist/trusted-process/mcp-proxy-server.js +2 -0
- package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
- package/dist/trusted-process/policy-engine.js.map +1 -1
- package/dist/trusted-process/tcp-server-transport.d.ts +7 -0
- package/dist/trusted-process/tcp-server-transport.js +48 -10
- package/dist/trusted-process/tcp-server-transport.js.map +1 -1
- package/dist/utils/preflight-checks.js +1 -3
- package/dist/utils/preflight-checks.js.map +1 -1
- package/dist/utils/stdio-guard.d.ts +1 -0
- package/dist/utils/stdio-guard.js +27 -0
- package/dist/utils/stdio-guard.js.map +1 -0
- package/dist/web-ui/__tests__/config-dispatch.test.d.ts +13 -0
- package/dist/web-ui/__tests__/config-dispatch.test.js +383 -0
- package/dist/web-ui/__tests__/config-dispatch.test.js.map +1 -0
- package/dist/web-ui/__tests__/json-rpc-dispatch.test.js +6 -0
- package/dist/web-ui/__tests__/json-rpc-dispatch.test.js.map +1 -1
- package/dist/web-ui/dispatch/config-dispatch.d.ts +15 -0
- package/dist/web-ui/dispatch/config-dispatch.js +277 -0
- package/dist/web-ui/dispatch/config-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/escalation-dispatch.js +11 -2
- package/dist/web-ui/dispatch/escalation-dispatch.js.map +1 -1
- package/dist/web-ui/dispatch/pty-dispatch.d.ts +15 -0
- package/dist/web-ui/dispatch/pty-dispatch.js +66 -0
- package/dist/web-ui/dispatch/pty-dispatch.js.map +1 -0
- package/dist/web-ui/dispatch/session-dispatch.js +69 -4
- package/dist/web-ui/dispatch/session-dispatch.js.map +1 -1
- package/dist/web-ui/dispatch/types.d.ts +12 -0
- package/dist/web-ui/dispatch/types.js +38 -1
- package/dist/web-ui/dispatch/types.js.map +1 -1
- package/dist/web-ui/dispatch/workflow-dispatch.js.map +1 -1
- package/dist/web-ui/json-rpc-dispatch.js +3 -0
- package/dist/web-ui/json-rpc-dispatch.js.map +1 -1
- package/dist/web-ui/pty-session-manager.d.ts +234 -0
- package/dist/web-ui/pty-session-manager.js +599 -0
- package/dist/web-ui/pty-session-manager.js.map +1 -0
- package/dist/web-ui/web-event-bus.d.ts +9 -0
- package/dist/web-ui/web-event-bus.js.map +1 -1
- package/dist/web-ui/web-session-transport.js.map +1 -1
- package/dist/web-ui/web-ui-server.d.ts +8 -0
- package/dist/web-ui/web-ui-server.js +25 -0
- package/dist/web-ui/web-ui-server.js.map +1 -1
- package/dist/web-ui/web-ui-types.d.ts +80 -1
- package/dist/web-ui/web-ui-types.js.map +1 -1
- package/dist/web-ui-static/assets/index-CCVI4nEK.css +1 -0
- package/dist/web-ui-static/assets/index-Dm012gvY.js +114 -0
- package/dist/web-ui-static/index.html +2 -2
- package/dist/workflow/daemon-gate-commands.js +38 -42
- package/dist/workflow/daemon-gate-commands.js.map +1 -1
- package/dist/workflow/machine-builder.js.map +1 -1
- package/dist/workflow/orchestrator.js +10 -7
- package/dist/workflow/orchestrator.js.map +1 -1
- package/dist/workflow/shutdown-signals.d.ts +7 -0
- package/dist/workflow/shutdown-signals.js +40 -0
- package/dist/workflow/shutdown-signals.js.map +1 -0
- package/dist/workflow/validate.js.map +1 -1
- package/dist/workflow/workflow-command.js +10 -8
- package/dist/workflow/workflow-command.js.map +1 -1
- package/dist/workflow/workflows/evolve/README.md +66 -0
- package/dist/workflow/workflows/vuln-discovery/README.md +54 -0
- package/docker/entrypoint-claude-code.sh +22 -0
- package/package.json +31 -27
- package/src/workflow/workflows/evolve/README.md +66 -0
- package/src/workflow/workflows/vuln-discovery/README.md +54 -0
- package/dist/mux/pty-bridge.js.map +0 -1
- package/dist/mux/trusted-input.js.map +0 -1
- package/dist/web-ui-static/assets/index-BD5U6ILh.css +0 -1
- package/dist/web-ui-static/assets/index-FMsHWEfK.js +0 -79
- package/packages/web-ui/README.md +0 -113
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config-related JSON-RPC method dispatch.
|
|
3
|
+
*
|
|
4
|
+
* Handles `config.*` methods, scoped to the `modelProviders` provider-profile
|
|
5
|
+
* registry only (see docs/designs/openrouter-integration.md §5-G / §12.6):
|
|
6
|
+
* - `config.getModelProviders` — read; masks every openrouter profile's key.
|
|
7
|
+
* - `config.setModelProviders` — mutation; gated on `ctx.allowPolicyMutation`,
|
|
8
|
+
* persists the WHOLE section via `saveUserConfig`, emits `config.changed`.
|
|
9
|
+
*
|
|
10
|
+
* Mirrors the `personas.*` gated-mutation pattern for the gate + change-event
|
|
11
|
+
* (persona-dispatch.ts:219,286). Unlike personas, the mutation persists to
|
|
12
|
+
* `~/.ironcurtain/config.json` via `saveUserConfig`.
|
|
13
|
+
*/
|
|
14
|
+
import { z } from 'zod';
|
|
15
|
+
import { validateParams } from './types.js';
|
|
16
|
+
import { RpcError, MethodNotFoundError, } from '../web-ui-types.js';
|
|
17
|
+
import { loadUserConfig, saveUserConfig, maskApiKey, cloneProviderPreference, DOCKER_AGENTS, NATIVE_PROFILE_NAME, } from '../../config/user-config.js';
|
|
18
|
+
import { listOpenrouterModels } from '../../config/openrouter-catalog.js';
|
|
19
|
+
// The mask FORMAT that `maskApiKey` produces is the DTO contract (§12.6): the
|
|
20
|
+
// `resolveApiKey` round-trip below compares an incoming wire value against
|
|
21
|
+
// `maskApiKey(currentKey)`, and the frontend renders the same shape. It is
|
|
22
|
+
// shared from the `user-config.ts` leaf so the CLI editor and this daemon
|
|
23
|
+
// dispatch cannot drift — without dragging the editor's `@clack/prompts` import
|
|
24
|
+
// onto the WS path.
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
// Param schemas
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
const modelMapRuleDtoSchema = z.object({
|
|
29
|
+
match: z.string().min(1),
|
|
30
|
+
model: z.string().min(1),
|
|
31
|
+
});
|
|
32
|
+
const providerPreferenceDtoSchema = z.object({
|
|
33
|
+
order: z.array(z.string().min(1)).optional(),
|
|
34
|
+
only: z.array(z.string().min(1)).optional(),
|
|
35
|
+
allowFallbacks: z.boolean().optional(),
|
|
36
|
+
});
|
|
37
|
+
const nativeProfileDtoSchema = z.object({ type: z.literal('native') }).strict();
|
|
38
|
+
/**
|
|
39
|
+
* The openrouter profile DTO on the write path. `apiKey` is intentionally
|
|
40
|
+
* permissive (string | null | absent) because the M5 mask-unchanged contract
|
|
41
|
+
* distinguishes absent/null/mask-equal ("keep") from '' ("clear") from any
|
|
42
|
+
* other string ("set") — the empty string is a MEANINGFUL sentinel here, so it
|
|
43
|
+
* must not be rejected by a `.min(1)`.
|
|
44
|
+
*/
|
|
45
|
+
const openrouterProfileDtoSchema = z
|
|
46
|
+
.object({
|
|
47
|
+
type: z.literal('openrouter'),
|
|
48
|
+
apiKey: z.string().nullable().optional(),
|
|
49
|
+
modelMap: z.array(modelMapRuleDtoSchema).optional(),
|
|
50
|
+
perAgent: z.record(z.string(), z.string().min(1).optional()).optional(),
|
|
51
|
+
providerPreference: providerPreferenceDtoSchema.optional(),
|
|
52
|
+
sessionAffinity: z.boolean().optional(),
|
|
53
|
+
})
|
|
54
|
+
.strict();
|
|
55
|
+
const profileDtoSchema = z.discriminatedUnion('type', [nativeProfileDtoSchema, openrouterProfileDtoSchema]);
|
|
56
|
+
const setModelProvidersSchema = z.object({
|
|
57
|
+
default: z.string().min(1).optional(),
|
|
58
|
+
profiles: z.record(z.string().min(1), profileDtoSchema),
|
|
59
|
+
});
|
|
60
|
+
const getModelProvidersSchema = z.object({});
|
|
61
|
+
const listOpenrouterModelsSchema = z.object({ forceRefresh: z.boolean().optional() });
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
// Dispatch
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
export async function configDispatch(ctx, method, params) {
|
|
66
|
+
switch (method) {
|
|
67
|
+
case 'config.getModelProviders': {
|
|
68
|
+
validateParams(getModelProvidersSchema, params);
|
|
69
|
+
return getModelProviders();
|
|
70
|
+
}
|
|
71
|
+
case 'config.setModelProviders': {
|
|
72
|
+
requirePolicyMutation(ctx);
|
|
73
|
+
const input = validateParams(setModelProvidersSchema, params);
|
|
74
|
+
return setModelProviders(ctx, input);
|
|
75
|
+
}
|
|
76
|
+
// Ungated read of the PUBLIC OpenRouter catalog (mirrors getModelProviders).
|
|
77
|
+
case 'config.listOpenrouterModels': {
|
|
78
|
+
const input = validateParams(listOpenrouterModelsSchema, params);
|
|
79
|
+
const result = await listOpenrouterModels({ forceRefresh: input.forceRefresh });
|
|
80
|
+
return { models: result.models, source: result.source };
|
|
81
|
+
}
|
|
82
|
+
default:
|
|
83
|
+
throw new MethodNotFoundError(method);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// ---------------------------------------------------------------------------
|
|
87
|
+
// Read
|
|
88
|
+
// ---------------------------------------------------------------------------
|
|
89
|
+
/**
|
|
90
|
+
* Returns the resolved `modelProviders` registry with every openrouter
|
|
91
|
+
* profile's `apiKey` masked. Read-only load so a bare read never mutates the
|
|
92
|
+
* config file. The `native` profile is included key-less.
|
|
93
|
+
*/
|
|
94
|
+
function getModelProviders() {
|
|
95
|
+
const resolved = loadUserConfig({ readOnly: true }).modelProviders;
|
|
96
|
+
return toGetDto(resolved);
|
|
97
|
+
}
|
|
98
|
+
/** Maps a resolved registry to the masked wire DTO. */
|
|
99
|
+
function toGetDto(resolved) {
|
|
100
|
+
const profiles = {};
|
|
101
|
+
for (const [name, profile] of Object.entries(resolved.profiles)) {
|
|
102
|
+
profiles[name] = profile.type === 'native' ? { type: 'native' } : toOpenrouterDto(profile);
|
|
103
|
+
}
|
|
104
|
+
return { default: resolved.default, profiles };
|
|
105
|
+
}
|
|
106
|
+
function toOpenrouterDto(profile) {
|
|
107
|
+
const perAgent = {};
|
|
108
|
+
for (const agent of DOCKER_AGENTS)
|
|
109
|
+
perAgent[agent] = profile.perAgent[agent];
|
|
110
|
+
return {
|
|
111
|
+
type: 'openrouter',
|
|
112
|
+
apiKey: maskApiKey(profile.apiKey),
|
|
113
|
+
// A default-tracking profile OMITS `modelMap` so a set-back round-trip
|
|
114
|
+
// re-persists the omission (not today's materialized DEFAULT_MODEL_MAP).
|
|
115
|
+
// An explicit map (including `[]`) is serialized verbatim.
|
|
116
|
+
modelMap: profile.usesDefaultMap ? undefined : profile.modelMap.map((r) => ({ match: r.match, model: r.model })),
|
|
117
|
+
perAgent,
|
|
118
|
+
providerPreference: profile.providerPreference ? cloneProviderPreference(profile.providerPreference) : undefined,
|
|
119
|
+
sessionAffinity: profile.sessionAffinity,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Persists the whole `modelProviders` section. Applies, in order:
|
|
124
|
+
* - F7: silently drop a verbatim `profiles.native = { type: 'native' }`;
|
|
125
|
+
* reject any other value under the `native` key.
|
|
126
|
+
* - M5: per-profile apiKey — absent/null/mask-equal → keep stored key,
|
|
127
|
+
* '' → clear, other → set (compared against the currently-resolved key).
|
|
128
|
+
* - F10: if `default` names a profile absent from the write, re-point it to
|
|
129
|
+
* 'native' in the same write (never persist a dangling `default`).
|
|
130
|
+
*
|
|
131
|
+
* Writes the whole section via `saveUserConfig` (the shallow `deepMergeConfig`
|
|
132
|
+
* replaces `profiles` wholesale, so a partial write drops unmentioned profiles).
|
|
133
|
+
* Emits `config.changed`, then returns the fresh masked get DTO.
|
|
134
|
+
*/
|
|
135
|
+
function setModelProviders(ctx, input) {
|
|
136
|
+
// Snapshot the currently-resolved registry so M5 can compare against the
|
|
137
|
+
// stored key (preserve when the wire value equals its mask) and F10 can see
|
|
138
|
+
// the stored default when the write omits one.
|
|
139
|
+
const current = loadUserConfig({ readOnly: true }).modelProviders;
|
|
140
|
+
const currentProfiles = current.profiles;
|
|
141
|
+
const profiles = {};
|
|
142
|
+
for (const [name, dto] of Object.entries(input.profiles)) {
|
|
143
|
+
if (name === NATIVE_PROFILE_NAME) {
|
|
144
|
+
// F7: accept-and-drop a verbatim native echo; reject anything else.
|
|
145
|
+
if (dto.type === 'native')
|
|
146
|
+
continue;
|
|
147
|
+
throw new RpcError('INVALID_PARAMS', `"${NATIVE_PROFILE_NAME}" is a reserved profile name and cannot be redefined.`);
|
|
148
|
+
}
|
|
149
|
+
if (dto.type === 'native') {
|
|
150
|
+
// A user-named native profile is inert but harmless; persist as-is.
|
|
151
|
+
profiles[name] = { type: 'native' };
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
profiles[name] = buildOpenrouterInput(name, dto, currentProfiles[name]);
|
|
155
|
+
}
|
|
156
|
+
// F10: re-point a `default` that names a profile DROPPED in this write (one
|
|
157
|
+
// that existed in the stored config but is absent from the new `profiles`).
|
|
158
|
+
// A `default` naming a profile that never existed at all is NOT re-pointed —
|
|
159
|
+
// it falls through to the Zod `.refine` in saveUserConfig and is rejected
|
|
160
|
+
// (validation-passthrough: the request itself set a bad default).
|
|
161
|
+
const priorNames = Object.keys(currentProfiles);
|
|
162
|
+
let resolvedDefault = repointDefault(input.default, profiles, priorNames);
|
|
163
|
+
if (input.default === undefined) {
|
|
164
|
+
// The client omitted `default`; the shallow config merge would preserve the
|
|
165
|
+
// stored default. If THIS write deletes the profile that default names, that
|
|
166
|
+
// preserved default would dangle and saveUserConfig's schema `.refine` would
|
|
167
|
+
// reject the whole write with a confusing INVALID_PARAMS. Auto-repoint to
|
|
168
|
+
// native for that case — the same F10 outcome as sending it explicitly.
|
|
169
|
+
if (current.default !== NATIVE_PROFILE_NAME &&
|
|
170
|
+
!(current.default in profiles) &&
|
|
171
|
+
priorNames.includes(current.default)) {
|
|
172
|
+
resolvedDefault = NATIVE_PROFILE_NAME;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
const modelProviders = { profiles };
|
|
176
|
+
if (resolvedDefault !== undefined)
|
|
177
|
+
modelProviders.default = resolvedDefault;
|
|
178
|
+
// saveUserConfig re-validates via the Zod schema (including the reserved-name
|
|
179
|
+
// and default-must-exist `.refine`s), so a request that names a genuinely
|
|
180
|
+
// missing profile in `default` (not the F10 delete case) throws here.
|
|
181
|
+
try {
|
|
182
|
+
saveUserConfig({ modelProviders });
|
|
183
|
+
}
|
|
184
|
+
catch (err) {
|
|
185
|
+
throw new RpcError('INVALID_PARAMS', err instanceof Error ? err.message : String(err));
|
|
186
|
+
}
|
|
187
|
+
ctx.eventBus.emit('config.changed', {});
|
|
188
|
+
return getModelProviders();
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Builds one openrouter profile's persisted input shape from its DTO, resolving
|
|
192
|
+
* the M5 apiKey contract against the currently-stored profile.
|
|
193
|
+
*/
|
|
194
|
+
function buildOpenrouterInput(name, dto, current) {
|
|
195
|
+
const currentKey = current?.type === 'openrouter' ? current.apiKey : '';
|
|
196
|
+
const resolvedKey = resolveApiKey(dto.apiKey, currentKey);
|
|
197
|
+
const out = { type: 'openrouter' };
|
|
198
|
+
// The persisted schema requires apiKey.min(1); an empty resolved key means
|
|
199
|
+
// "no key" and is written by OMITTING the field entirely.
|
|
200
|
+
if (resolvedKey)
|
|
201
|
+
out.apiKey = resolvedKey;
|
|
202
|
+
if (dto.modelMap !== undefined)
|
|
203
|
+
out.modelMap = dto.modelMap.map((r) => ({ match: r.match, model: r.model }));
|
|
204
|
+
const perAgent = buildPerAgent(dto.perAgent);
|
|
205
|
+
if (perAgent)
|
|
206
|
+
out.perAgent = perAgent;
|
|
207
|
+
if (dto.providerPreference) {
|
|
208
|
+
out.providerPreference = cloneProviderPreference(dto.providerPreference);
|
|
209
|
+
}
|
|
210
|
+
if (dto.sessionAffinity !== undefined)
|
|
211
|
+
out.sessionAffinity = dto.sessionAffinity;
|
|
212
|
+
return out;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* M5 per-profile apiKey resolution:
|
|
216
|
+
* - absent / null / equal-to-the-current-mask → keep the stored key
|
|
217
|
+
* - '' (empty) → clear
|
|
218
|
+
* - any other string → set
|
|
219
|
+
*/
|
|
220
|
+
function resolveApiKey(wire, currentKey) {
|
|
221
|
+
if (wire === undefined || wire === null)
|
|
222
|
+
return currentKey;
|
|
223
|
+
if (wire === maskApiKey(currentKey))
|
|
224
|
+
return currentKey;
|
|
225
|
+
if (wire === '')
|
|
226
|
+
return '';
|
|
227
|
+
return wire;
|
|
228
|
+
}
|
|
229
|
+
/** Compacts a perAgent DTO to the persisted shape, dropping undefined/blank slugs. */
|
|
230
|
+
function buildPerAgent(input) {
|
|
231
|
+
if (!input)
|
|
232
|
+
return undefined;
|
|
233
|
+
const out = {};
|
|
234
|
+
for (const agent of DOCKER_AGENTS) {
|
|
235
|
+
const slug = input[agent];
|
|
236
|
+
if (slug)
|
|
237
|
+
out[agent] = slug;
|
|
238
|
+
}
|
|
239
|
+
return Object.keys(out).length > 0 ? out : undefined;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* F10 — resolves the `default` to persist.
|
|
243
|
+
* - unset → `undefined` (leaves it unset; resolves to 'native' at load).
|
|
244
|
+
* - 'native' or a name present in the new `profiles` → kept as-is.
|
|
245
|
+
* - a name absent from `profiles` but present in `priorNames` (a profile
|
|
246
|
+
* DELETED by this write) → re-pointed to 'native' (never persist a dangling
|
|
247
|
+
* default, which would make the next `loadUserConfig` a HARD error).
|
|
248
|
+
* - a name absent from BOTH `profiles` and `priorNames` (a bad/typo default
|
|
249
|
+
* the request itself introduced) → returned unchanged, so the Zod `.refine`
|
|
250
|
+
* in saveUserConfig rejects it (validation-passthrough, §12.6).
|
|
251
|
+
*/
|
|
252
|
+
function repointDefault(requested, profiles, priorNames) {
|
|
253
|
+
if (requested === undefined)
|
|
254
|
+
return undefined;
|
|
255
|
+
if (requested === NATIVE_PROFILE_NAME)
|
|
256
|
+
return NATIVE_PROFILE_NAME;
|
|
257
|
+
if (requested in profiles)
|
|
258
|
+
return requested;
|
|
259
|
+
// Present before this write => it was just deleted => repoint. Otherwise it
|
|
260
|
+
// was never a real profile => leave it dangling so validation rejects it.
|
|
261
|
+
return priorNames.includes(requested) ? NATIVE_PROFILE_NAME : requested;
|
|
262
|
+
}
|
|
263
|
+
// ---------------------------------------------------------------------------
|
|
264
|
+
// Gate
|
|
265
|
+
// ---------------------------------------------------------------------------
|
|
266
|
+
/**
|
|
267
|
+
* Kill-switch gate for the mutation. Throws POLICY_MUTATION_FORBIDDEN when the
|
|
268
|
+
* daemon was not launched with `--allow-policy-mutation`. Fires BEFORE any disk
|
|
269
|
+
* read so a read-only client never learns config/credential state (mirrors
|
|
270
|
+
* persona-dispatch.ts:252).
|
|
271
|
+
*/
|
|
272
|
+
function requirePolicyMutation(ctx) {
|
|
273
|
+
if (ctx.allowPolicyMutation !== true) {
|
|
274
|
+
throw new RpcError('POLICY_MUTATION_FORBIDDEN', 'Policy mutation is not enabled on this daemon.');
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=config-dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-dispatch.js","sourceRoot":"","sources":["../../../src/web-ui/dispatch/config-dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,7 +23,14 @@ export async function escalationDispatch(ctx, method, params) {
|
|
|
23
23
|
return listEscalations(ctx);
|
|
24
24
|
case 'escalations.resolve': {
|
|
25
25
|
const validated = validateParams(escalationResolveSchema, params);
|
|
26
|
-
const
|
|
26
|
+
const options = validated.whitelistSelection != null ? { whitelistSelection: validated.whitelistSelection } : undefined;
|
|
27
|
+
// PTY sessions own their escalations outside SessionManager; route to the
|
|
28
|
+
// PTY manager (writes the response file + emits escalation.resolved).
|
|
29
|
+
if (ctx.ptySessionManager?.hasEscalation(validated.escalationId)) {
|
|
30
|
+
ctx.ptySessionManager.resolveEscalation(validated.escalationId, validated.decision, options);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const result = await ctx.sessionManager.resolveSessionEscalation(validated.escalationId, validated.decision, options);
|
|
27
34
|
if (!result.resolved) {
|
|
28
35
|
throw new RpcError(result.reason === 'already_resolving' ? 'SESSION_BUSY' : 'ESCALATION_NOT_FOUND', result.reason ?? 'Failed to resolve escalation');
|
|
29
36
|
}
|
|
@@ -37,7 +44,7 @@ export async function escalationDispatch(ctx, method, params) {
|
|
|
37
44
|
// Helpers
|
|
38
45
|
// ---------------------------------------------------------------------------
|
|
39
46
|
function listEscalations(ctx) {
|
|
40
|
-
|
|
47
|
+
const turnBased = ctx.sessionManager.withPendingEscalation().flatMap((m) => {
|
|
41
48
|
const esc = m.pendingEscalation;
|
|
42
49
|
if (!esc)
|
|
43
50
|
return [];
|
|
@@ -48,5 +55,7 @@ function listEscalations(ctx) {
|
|
|
48
55
|
},
|
|
49
56
|
];
|
|
50
57
|
});
|
|
58
|
+
const pty = ctx.ptySessionManager?.listPendingEscalationDtos() ?? [];
|
|
59
|
+
return [...turnBased, ...pty];
|
|
51
60
|
}
|
|
52
61
|
//# sourceMappingURL=escalation-dispatch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"escalation-dispatch.js","sourceRoot":"","sources":["../../../src/web-ui/dispatch/escalation-dispatch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAwB,cAAc,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAsB,QAAQ,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEvF,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACxC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;CAC9D,CAAC,CAAC;AAEH,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAoB,EACpB,MAAc,EACd,MAA+B;IAE/B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,kBAAkB;YACrB,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;QAC9B,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,MAAM,SAAS,GAAG,cAAc,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;YAClE,MAAM,
|
|
1
|
+
{"version":3,"file":"escalation-dispatch.js","sourceRoot":"","sources":["../../../src/web-ui/dispatch/escalation-dispatch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAwB,cAAc,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAsB,QAAQ,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEvF,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACxC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;CAC9D,CAAC,CAAC;AAEH,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAoB,EACpB,MAAc,EACd,MAA+B;IAE/B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,kBAAkB;YACrB,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;QAC9B,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,MAAM,SAAS,GAAG,cAAc,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;YAClE,MAAM,OAAO,GACX,SAAS,CAAC,kBAAkB,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,SAAS,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAE1G,0EAA0E;YAC1E,sEAAsE;YACtE,IAAI,GAAG,CAAC,iBAAiB,EAAE,aAAa,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;gBACjE,GAAG,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC7F,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,wBAAwB,CAC9D,SAAS,CAAC,YAAY,EACtB,SAAS,CAAC,QAAQ,EAClB,OAAO,CACR,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACrB,MAAM,IAAI,QAAQ,CAChB,MAAM,CAAC,MAAM,KAAK,mBAAmB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,sBAAsB,EAC/E,MAAM,CAAC,MAAM,IAAI,8BAA8B,CAChD,CAAC;YACJ,CAAC;YACD,OAAO;QACT,CAAC;QACD;YACE,MAAM,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,eAAe,CAAC,GAAoB;IAC3C,MAAM,SAAS,GAAG,GAAG,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACzE,MAAM,GAAG,GAAG,CAAC,CAAC,iBAAiB,CAAC;QAChC,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACpB,OAAO;YACL;gBACE,GAAG,GAAG;gBACN,aAAa,EAAE,CAAC,CAAC,MAAM;aACxB;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,GAAG,CAAC,iBAAiB,EAAE,yBAAyB,EAAE,IAAI,EAAE,CAAC;IACrE,OAAO,CAAC,GAAG,SAAS,EAAE,GAAG,GAAG,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PTY terminal subscription JSON-RPC dispatch.
|
|
3
|
+
*
|
|
4
|
+
* Handles the four per-client PTY methods:
|
|
5
|
+
* - sessions.ptyAttach (subscribe + one-shot replay snapshot)
|
|
6
|
+
* - sessions.ptyDetach (unsubscribe)
|
|
7
|
+
* - sessions.ptyInput (forward base64 keystroke bytes to the child stdin)
|
|
8
|
+
* - sessions.ptyResize (resize the child PTY)
|
|
9
|
+
*
|
|
10
|
+
* All delegate to `ctx.ptySessionManager`. Mirrors token-stream-dispatch.ts:
|
|
11
|
+
* attach/detach are keyed to the calling WebSocket, so the client is required.
|
|
12
|
+
*/
|
|
13
|
+
import type { WebSocket as WsWebSocket } from 'ws';
|
|
14
|
+
import { type DispatchContext } from './types.js';
|
|
15
|
+
export declare function ptyDispatch(ctx: DispatchContext, method: string, params: Record<string, unknown>, client: WsWebSocket): unknown;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PTY terminal subscription JSON-RPC dispatch.
|
|
3
|
+
*
|
|
4
|
+
* Handles the four per-client PTY methods:
|
|
5
|
+
* - sessions.ptyAttach (subscribe + one-shot replay snapshot)
|
|
6
|
+
* - sessions.ptyDetach (unsubscribe)
|
|
7
|
+
* - sessions.ptyInput (forward base64 keystroke bytes to the child stdin)
|
|
8
|
+
* - sessions.ptyResize (resize the child PTY)
|
|
9
|
+
*
|
|
10
|
+
* All delegate to `ctx.ptySessionManager`. Mirrors token-stream-dispatch.ts:
|
|
11
|
+
* attach/detach are keyed to the calling WebSocket, so the client is required.
|
|
12
|
+
*/
|
|
13
|
+
import { z } from 'zod';
|
|
14
|
+
import { validateParams, labelSchema } from './types.js';
|
|
15
|
+
import { MethodNotFoundError, RpcError } from '../web-ui-types.js';
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Param validation schemas
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
const ptyInputSchema = z.object({ label: z.number().int().positive(), data: z.string() });
|
|
20
|
+
const ptyResizeSchema = z.object({
|
|
21
|
+
label: z.number().int().positive(),
|
|
22
|
+
cols: z.number().int().positive(),
|
|
23
|
+
rows: z.number().int().positive(),
|
|
24
|
+
});
|
|
25
|
+
// A trusted user message (not raw keystrokes): the daemon writes user-context
|
|
26
|
+
// (source 'mux-trusted-input') and injects the text into the PTY.
|
|
27
|
+
const ptyPromptSchema = z.object({ label: z.number().int().positive(), text: z.string().min(1) });
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// Dispatch
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
export function ptyDispatch(ctx, method, params, client) {
|
|
32
|
+
const manager = ctx.ptySessionManager;
|
|
33
|
+
if (!manager) {
|
|
34
|
+
throw new RpcError('INTERNAL_ERROR', 'PTY session manager not available');
|
|
35
|
+
}
|
|
36
|
+
switch (method) {
|
|
37
|
+
case 'sessions.ptyAttach': {
|
|
38
|
+
const { label } = validateParams(labelSchema, params);
|
|
39
|
+
manager.attach(label, client);
|
|
40
|
+
return { attached: true };
|
|
41
|
+
}
|
|
42
|
+
case 'sessions.ptyDetach': {
|
|
43
|
+
const { label } = validateParams(labelSchema, params);
|
|
44
|
+
manager.detach(label, client);
|
|
45
|
+
return { detached: true };
|
|
46
|
+
}
|
|
47
|
+
case 'sessions.ptyInput': {
|
|
48
|
+
const { label, data } = validateParams(ptyInputSchema, params);
|
|
49
|
+
manager.input(label, data);
|
|
50
|
+
return { accepted: true };
|
|
51
|
+
}
|
|
52
|
+
case 'sessions.ptyResize': {
|
|
53
|
+
const { label, cols, rows } = validateParams(ptyResizeSchema, params);
|
|
54
|
+
manager.resize(label, cols, rows);
|
|
55
|
+
return { resized: true };
|
|
56
|
+
}
|
|
57
|
+
case 'sessions.ptyPrompt': {
|
|
58
|
+
const { label, text } = validateParams(ptyPromptSchema, params);
|
|
59
|
+
manager.sendPrompt(label, text);
|
|
60
|
+
return { accepted: true };
|
|
61
|
+
}
|
|
62
|
+
default:
|
|
63
|
+
throw new MethodNotFoundError(method);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=pty-dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pty-dispatch.js","sourceRoot":"","sources":["../../../src/web-ui/dispatch/pty-dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,9 +5,10 @@
|
|
|
5
5
|
* budget, history, diagnostics.
|
|
6
6
|
*/
|
|
7
7
|
import { z } from 'zod';
|
|
8
|
-
import { validateParams, toSessionDto, toBudgetDto, labelSchema } from './types.js';
|
|
8
|
+
import { validateParams, toSessionDto, toBudgetDto, zeroedBudgetDto, labelSchema, } from './types.js';
|
|
9
9
|
import { RpcError, SessionNotFoundError, MethodNotFoundError, } from '../web-ui-types.js';
|
|
10
10
|
import { tokenStreamDispatch } from './token-stream-dispatch.js';
|
|
11
|
+
import { ptyDispatch } from './pty-dispatch.js';
|
|
11
12
|
import { WebSessionTransport } from '../web-session-transport.js';
|
|
12
13
|
import { loadConfig } from '../../config/index.js';
|
|
13
14
|
import { createStandaloneSession } from '../../session/index.js';
|
|
@@ -27,6 +28,14 @@ const sessionCreateSchema = z.object({
|
|
|
27
28
|
* docs/designs/mitm-token-trajectory-capture.md §10.
|
|
28
29
|
*/
|
|
29
30
|
captureTraces: z.boolean().optional(),
|
|
31
|
+
/**
|
|
32
|
+
* Docker-agent (web-pty) launch options, mirroring mux `/new`. Ignored by the
|
|
33
|
+
* code-mode chatbox path. The child `ironcurtain start --pty` validates the
|
|
34
|
+
* workspace (containment) and resolves the provider profile / model.
|
|
35
|
+
*/
|
|
36
|
+
workspacePath: z.string().min(1).optional(),
|
|
37
|
+
providerProfileName: z.string().min(1).optional(),
|
|
38
|
+
model: z.string().min(1).optional(),
|
|
30
39
|
});
|
|
31
40
|
const sessionSendSchema = z.object({ label: z.number().int().positive(), text: z.string().min(1) });
|
|
32
41
|
// ---------------------------------------------------------------------------
|
|
@@ -40,6 +49,13 @@ export async function sessionDispatch(ctx, method, params, client) {
|
|
|
40
49
|
}
|
|
41
50
|
return tokenStreamDispatch(ctx, method, params, client);
|
|
42
51
|
}
|
|
52
|
+
// Delegate PTY terminal methods to dedicated dispatch module
|
|
53
|
+
if (method.startsWith('sessions.pty')) {
|
|
54
|
+
if (!client) {
|
|
55
|
+
throw new RpcError('INTERNAL_ERROR', 'PTY methods require a WebSocket client');
|
|
56
|
+
}
|
|
57
|
+
return ptyDispatch(ctx, method, params, client);
|
|
58
|
+
}
|
|
43
59
|
switch (method) {
|
|
44
60
|
case 'sessions.list':
|
|
45
61
|
return listSessions(ctx);
|
|
@@ -48,11 +64,21 @@ export async function sessionDispatch(ctx, method, params, client) {
|
|
|
48
64
|
return getSession(ctx, label);
|
|
49
65
|
}
|
|
50
66
|
case 'sessions.create': {
|
|
51
|
-
const
|
|
52
|
-
|
|
67
|
+
const opts = validateParams(sessionCreateSchema, params);
|
|
68
|
+
// Docker mode streams a live terminal (web-pty); code mode keeps the
|
|
69
|
+
// turn-based chatbox session. The daemon's SessionMode is process-global.
|
|
70
|
+
if (ctx.mode.kind === 'docker') {
|
|
71
|
+
return createPtySession(ctx, opts);
|
|
72
|
+
}
|
|
73
|
+
return createWebSession(ctx, opts.persona, opts.captureTraces);
|
|
53
74
|
}
|
|
54
75
|
case 'sessions.end': {
|
|
55
76
|
const { label } = validateParams(labelSchema, params);
|
|
77
|
+
// Route PTY labels to their manager (they are not in SessionManager).
|
|
78
|
+
if (ctx.ptySessionManager?.has(label)) {
|
|
79
|
+
ctx.ptySessionManager.end(label);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
56
82
|
const endManaged = ctx.sessionManager.get(label);
|
|
57
83
|
const endSessionId = endManaged?.session.getInfo().id;
|
|
58
84
|
await ctx.sessionManager.end(label);
|
|
@@ -68,6 +94,10 @@ export async function sessionDispatch(ctx, method, params, client) {
|
|
|
68
94
|
}
|
|
69
95
|
case 'sessions.budget': {
|
|
70
96
|
const { label } = validateParams(labelSchema, params);
|
|
97
|
+
// PTY sessions have no turn/budget accounting; return a zeroed budget
|
|
98
|
+
// rather than throwing, so a stale/racing client degrades cleanly (§11 D2).
|
|
99
|
+
if (ctx.ptySessionManager?.has(label))
|
|
100
|
+
return zeroedBudgetDto();
|
|
71
101
|
const managed = ctx.sessionManager.get(label);
|
|
72
102
|
if (!managed)
|
|
73
103
|
throw new SessionNotFoundError(label);
|
|
@@ -75,6 +105,9 @@ export async function sessionDispatch(ctx, method, params, client) {
|
|
|
75
105
|
}
|
|
76
106
|
case 'sessions.history': {
|
|
77
107
|
const { label } = validateParams(labelSchema, params);
|
|
108
|
+
// PTY sessions carry no turn history (§11 D2).
|
|
109
|
+
if (ctx.ptySessionManager?.has(label))
|
|
110
|
+
return [];
|
|
78
111
|
const managed = ctx.sessionManager.get(label);
|
|
79
112
|
if (!managed)
|
|
80
113
|
throw new SessionNotFoundError(label);
|
|
@@ -82,6 +115,9 @@ export async function sessionDispatch(ctx, method, params, client) {
|
|
|
82
115
|
}
|
|
83
116
|
case 'sessions.diagnostics': {
|
|
84
117
|
const { label } = validateParams(labelSchema, params);
|
|
118
|
+
// PTY sessions carry no diagnostic log (§11 D2).
|
|
119
|
+
if (ctx.ptySessionManager?.has(label))
|
|
120
|
+
return [];
|
|
85
121
|
const managed = ctx.sessionManager.get(label);
|
|
86
122
|
if (!managed)
|
|
87
123
|
throw new SessionNotFoundError(label);
|
|
@@ -99,9 +135,17 @@ function cleanupSessionQueue(ctx, label) {
|
|
|
99
135
|
ctx.sessionQueues.delete(label);
|
|
100
136
|
}
|
|
101
137
|
function listSessions(ctx) {
|
|
102
|
-
|
|
138
|
+
const managed = ctx.sessionManager.all().map((m) => toSessionDto(m));
|
|
139
|
+
const pty = ctx.ptySessionManager?.listDtos() ?? [];
|
|
140
|
+
return [...managed, ...pty];
|
|
103
141
|
}
|
|
104
142
|
function getSession(ctx, label) {
|
|
143
|
+
// PTY sessions have no turn history/diagnostics; return the DTO with empty
|
|
144
|
+
// logs rather than throwing, since selecting one drives this call.
|
|
145
|
+
const ptyDto = ctx.ptySessionManager?.getDto(label);
|
|
146
|
+
if (ptyDto) {
|
|
147
|
+
return { ...ptyDto, history: [], diagnosticLog: [] };
|
|
148
|
+
}
|
|
105
149
|
const managed = ctx.sessionManager.get(label);
|
|
106
150
|
if (!managed)
|
|
107
151
|
throw new SessionNotFoundError(label);
|
|
@@ -111,6 +155,27 @@ function getSession(ctx, label) {
|
|
|
111
155
|
diagnosticLog: managed.session.getDiagnosticLog(),
|
|
112
156
|
};
|
|
113
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* Creates a Docker-agent PTY session (docker mode). Enforces the SAME
|
|
160
|
+
* concurrency cap as the turn-based path, counting PTY sessions (§11 D4) —
|
|
161
|
+
* each is a full container, so an unbounded spawn is a real resource concern.
|
|
162
|
+
*/
|
|
163
|
+
async function createPtySession(ctx, opts) {
|
|
164
|
+
const manager = ctx.ptySessionManager;
|
|
165
|
+
if (!manager) {
|
|
166
|
+
throw new RpcError('INTERNAL_ERROR', 'PTY session manager not available');
|
|
167
|
+
}
|
|
168
|
+
if (manager.size >= ctx.maxConcurrentWebSessions) {
|
|
169
|
+
throw new RpcError('RATE_LIMITED', `PTY session limit reached (max ${ctx.maxConcurrentWebSessions})`);
|
|
170
|
+
}
|
|
171
|
+
return manager.create({
|
|
172
|
+
...(opts.persona ? { persona: opts.persona } : {}),
|
|
173
|
+
...(opts.captureTraces !== undefined ? { captureTraces: opts.captureTraces } : {}),
|
|
174
|
+
...(opts.workspacePath ? { workspacePath: opts.workspacePath } : {}),
|
|
175
|
+
...(opts.providerProfileName ? { providerProfileName: opts.providerProfileName } : {}),
|
|
176
|
+
...(opts.model ? { model: opts.model } : {}),
|
|
177
|
+
});
|
|
178
|
+
}
|
|
114
179
|
async function createWebSession(ctx, persona, captureTracesOverride) {
|
|
115
180
|
const webCount = ctx.sessionManager.byKind('web').length;
|
|
116
181
|
if (webCount >= ctx.maxConcurrentWebSessions) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-dispatch.js","sourceRoot":"","sources":["../../../src/web-ui/dispatch/session-dispatch.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-dispatch.js","sourceRoot":"","sources":["../../../src/web-ui/dispatch/session-dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ import type { SessionManager, ManagedSession } from '../../session/session-manag
|
|
|
9
9
|
import type { ControlRequestHandler } from '../../daemon/control-socket.js';
|
|
10
10
|
import type { SessionMode } from '../../session/types.js';
|
|
11
11
|
import type { TokenStreamBridge } from '../token-stream-bridge.js';
|
|
12
|
+
import type { PtySessionManager, PtyWebSession } from '../pty-session-manager.js';
|
|
12
13
|
import type { WebEventBus } from '../web-event-bus.js';
|
|
13
14
|
import { type SessionDto, type BudgetSummaryDto, type DaemonStatusDto } from '../web-ui-types.js';
|
|
14
15
|
export declare const labelSchema: z.ZodObject<{
|
|
@@ -24,6 +25,8 @@ export interface DispatchContext {
|
|
|
24
25
|
readonly sessionQueues: Map<number, Promise<void>>;
|
|
25
26
|
/** Bridge for per-client token stream subscriptions. */
|
|
26
27
|
tokenStreamBridge?: TokenStreamBridge;
|
|
28
|
+
/** Manager for Docker-agent PTY terminal sessions (docker mode only). */
|
|
29
|
+
ptySessionManager?: PtySessionManager;
|
|
27
30
|
/**
|
|
28
31
|
* Daemon-process capture-traces default. Used by `sessions.create`
|
|
29
32
|
* when the JSON-RPC payload does not include `captureTraces`. See
|
|
@@ -50,5 +53,14 @@ export interface DispatchContext {
|
|
|
50
53
|
}
|
|
51
54
|
export declare function validateParams<T>(schema: z.ZodType<T>, params: Record<string, unknown>): T;
|
|
52
55
|
export declare function toSessionDto(managed: ManagedSession): SessionDto;
|
|
56
|
+
/**
|
|
57
|
+
* Builds a SessionDto for a Docker-agent PTY session. A PTY session has no
|
|
58
|
+
* turn/budget accounting, so `turnCount` is 0 and the budget is zeroed with
|
|
59
|
+
* `tokenTrackingAvailable:false`. `status` reflects the child's liveness so an
|
|
60
|
+
* abandoned-but-alive terminal is distinguishable in the list. The frontend
|
|
61
|
+
* branches on `source.kind === 'web-pty'` to render a terminal (Phase 5).
|
|
62
|
+
*/
|
|
63
|
+
export declare function toPtySessionDto(session: PtyWebSession): SessionDto;
|
|
64
|
+
export declare function zeroedBudgetDto(): BudgetSummaryDto;
|
|
53
65
|
export declare function toBudgetDto(managed: ManagedSession): BudgetSummaryDto;
|
|
54
66
|
export declare function buildStatusDto(ctx: DispatchContext): DaemonStatusDto;
|