@wrongstack/webui-server 0.299.0 → 0.301.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/dist/index.js +854 -268
- package/dist/protocol/client-conversation.d.ts +1 -1
- package/dist/protocol/index.js +23 -1
- package/dist/protocol/projections.d.ts +8 -0
- package/dist/protocol/registry.d.ts +2 -2
- package/dist/protocol/server-conversation.d.ts +2 -2
- package/dist/protocol/version.d.ts +2 -0
- package/dist/server/connections-health-route.d.ts +10 -0
- package/dist/server/context-editor.d.ts +9 -0
- package/dist/server/conversation-routes.d.ts +1 -0
- package/dist/server/discover-mailbox-bridge.d.ts +5 -0
- package/dist/server/embedded-host-adapters.d.ts +1 -1
- package/dist/server/embedded-lifecycle.d.ts +23 -5
- package/dist/server/entry.js +1296 -262
- package/dist/server/fallback-choice.d.ts +19 -0
- package/dist/server/goal-ws-handler.d.ts +12 -0
- package/dist/server/http-server.d.ts +49 -0
- package/dist/server/index.d.ts +1 -1
- package/dist/server/instance-registry.d.ts +21 -0
- package/dist/server/kanban-broadcast.d.ts +37 -0
- package/dist/server/lifecycle.d.ts +6 -0
- package/dist/server/mcp-handlers.d.ts +3 -2
- package/dist/server/pref-helpers.d.ts +1 -1
- package/dist/server/provider-handlers.d.ts +2 -2
- package/dist/server/provider-routes.d.ts +3 -1
- package/dist/server/ws-auth.d.ts +18 -0
- package/dist/server/ws-payload-validation.d.ts +7 -0
- package/package.json +11 -11
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const CLIENT_CONVERSATION_MESSAGE_TYPES: readonly ['abort', 'ping', 'user_message', 'tool.confirm_result', 'completion.request', 'model.switch', 'model.refine', 'autonomy.switch', 'context.clear', 'context.compact', 'context.debug', 'context.editor.open', 'context.editor.validate', 'context.editor.apply', 'context.mode.create', 'context.mode.delete', 'context.mode.switch', 'context.mode.update', 'context.modes.list', 'context.repair', 'mode.switch', 'modes.list', 'session.checkpoints', 'session.delete', 'session.inspect', 'session.new', 'session.rename', 'session.resume', 'session.rewind', 'session.save', 'sessions.list', 'side_effects.list', 'stats.get', 'todo.update', 'todos.clear', 'todos.get', 'todos.remove'];
|
|
1
|
+
export declare const CLIENT_CONVERSATION_MESSAGE_TYPES: readonly ['abort', 'ping', 'user_message', 'tool.confirm_result', 'topic.advice', 'completion.request', 'model.switch', 'model.refine', 'model.fallback_choice', 'autonomy.switch', 'context.clear', 'context.compact', 'context.debug', 'context.editor.open', 'context.editor.validate', 'context.editor.apply', 'context.mode.create', 'context.mode.delete', 'context.mode.switch', 'context.mode.update', 'context.modes.list', 'context.repair', 'mode.switch', 'modes.list', 'session.checkpoints', 'session.delete', 'session.inspect', 'session.new', 'session.rename', 'session.resume', 'session.rewind', 'session.save', 'sessions.list', 'side_effects.list', 'stats.get', 'todo.update', 'todos.clear', 'todos.get', 'todos.remove'];
|
|
2
2
|
export declare const CLIENT_COLLABORATION_MESSAGE_TYPES: readonly ['collab.join', 'collab.leave', 'collab.annotate', 'collab.resolve', 'collab.request_pause', 'collab.resume', 'collab.grant_control', 'collab.inject_tool', 'mailbox.action', 'mailbox.agents', 'mailbox.clear', 'mailbox.compact', 'mailbox.messages', 'mailbox.purge', 'mailbox.send'];
|
|
3
3
|
//# sourceMappingURL=client-conversation.d.ts.map
|
package/dist/protocol/index.js
CHANGED
|
@@ -67,9 +67,11 @@ var CLIENT_CONVERSATION_MESSAGE_TYPES = [
|
|
|
67
67
|
"ping",
|
|
68
68
|
"user_message",
|
|
69
69
|
"tool.confirm_result",
|
|
70
|
+
"topic.advice",
|
|
70
71
|
"completion.request",
|
|
71
72
|
"model.switch",
|
|
72
73
|
"model.refine",
|
|
74
|
+
"model.fallback_choice",
|
|
73
75
|
"autonomy.switch",
|
|
74
76
|
"context.clear",
|
|
75
77
|
"context.compact",
|
|
@@ -341,6 +343,7 @@ var SERVER_CONVERSATION_MESSAGE_TYPES = [
|
|
|
341
343
|
"provider.active_blocked",
|
|
342
344
|
"provider.error",
|
|
343
345
|
"provider.fallback",
|
|
346
|
+
"provider.fallback_pending",
|
|
344
347
|
"provider.response",
|
|
345
348
|
"provider.retry",
|
|
346
349
|
"provider.status_changed",
|
|
@@ -367,6 +370,7 @@ var SERVER_CONVERSATION_MESSAGE_TYPES = [
|
|
|
367
370
|
"tool.loop_detected",
|
|
368
371
|
"tool.progress",
|
|
369
372
|
"tool.started",
|
|
373
|
+
"topic.advice_result",
|
|
370
374
|
"tools.list",
|
|
371
375
|
"trust.persisted"
|
|
372
376
|
];
|
|
@@ -382,6 +386,7 @@ var SERVER_COLLABORATION_MESSAGE_TYPES = [
|
|
|
382
386
|
"collab.state",
|
|
383
387
|
"mailbox.action_result",
|
|
384
388
|
"mailbox.agent_registered",
|
|
389
|
+
"mailbox.agent_deregistered",
|
|
385
390
|
"mailbox.agents",
|
|
386
391
|
"mailbox.cleared",
|
|
387
392
|
"mailbox.compacted",
|
|
@@ -761,6 +766,13 @@ function projectToolMessage(message) {
|
|
|
761
766
|
}
|
|
762
767
|
return null;
|
|
763
768
|
}
|
|
769
|
+
function optionalFinite(value) {
|
|
770
|
+
if (typeof value !== "number" || !Number.isFinite(value)) return void 0;
|
|
771
|
+
return value;
|
|
772
|
+
}
|
|
773
|
+
function optionalString(value) {
|
|
774
|
+
return typeof value === "string" && value.length > 0 ? value : void 0;
|
|
775
|
+
}
|
|
764
776
|
function projectFleetMessage(message) {
|
|
765
777
|
const payload = record(message.payload);
|
|
766
778
|
if (!payload) return null;
|
|
@@ -769,7 +781,15 @@ function projectFleetMessage(message) {
|
|
|
769
781
|
return {
|
|
770
782
|
kind: "concurrency",
|
|
771
783
|
active: finite(payload["fleetConcurrency"]),
|
|
772
|
-
maximum: finite(payload["fleetConcurrencyMax"])
|
|
784
|
+
maximum: finite(payload["fleetConcurrencyMax"]),
|
|
785
|
+
maxSpawns: optionalFinite(payload["maxSpawns"]),
|
|
786
|
+
usedSpawns: optionalFinite(payload["usedSpawns"]),
|
|
787
|
+
remainingSpawns: optionalFinite(payload["remainingSpawns"]),
|
|
788
|
+
maxSpawnsSource: optionalString(payload["maxSpawnsSource"]),
|
|
789
|
+
maxConcurrentSource: optionalString(payload["maxConcurrentSource"]),
|
|
790
|
+
effectiveSource: optionalString(payload["effectiveSource"]),
|
|
791
|
+
checkpointMaxSpawns: optionalFinite(payload["checkpointMaxSpawns"]),
|
|
792
|
+
ceilingMismatch: payload["ceilingMismatch"] === true ? true : void 0
|
|
773
793
|
};
|
|
774
794
|
case "client.status_update":
|
|
775
795
|
return { kind: "client-status", status: payload };
|
|
@@ -860,6 +880,8 @@ var SURFACE_PROTOCOL_CAPABILITIES = [
|
|
|
860
880
|
"chronicle.metrics",
|
|
861
881
|
"chronicle.status",
|
|
862
882
|
"connections.health",
|
|
883
|
+
/** Bounded topic-shift advice plus same-session provider-context boundaries. */
|
|
884
|
+
"context.topic-boundary",
|
|
863
885
|
/** Interview resume/discard + lastAgentText/lastRunId continuity. */
|
|
864
886
|
"sdd.interview.continuity",
|
|
865
887
|
/** Launch multi-agent runs from a graph id or resolved spec id. */
|
|
@@ -70,6 +70,14 @@ export type FleetProjection = {
|
|
|
70
70
|
kind: 'concurrency';
|
|
71
71
|
active: number;
|
|
72
72
|
maximum: number;
|
|
73
|
+
maxSpawns?: number | undefined;
|
|
74
|
+
usedSpawns?: number | undefined;
|
|
75
|
+
remainingSpawns?: number | undefined;
|
|
76
|
+
maxSpawnsSource?: string | undefined;
|
|
77
|
+
maxConcurrentSource?: string | undefined;
|
|
78
|
+
effectiveSource?: string | undefined;
|
|
79
|
+
checkpointMaxSpawns?: number | undefined;
|
|
80
|
+
ceilingMismatch?: boolean | undefined;
|
|
73
81
|
} | {
|
|
74
82
|
kind: 'client-status';
|
|
75
83
|
status: Record<string, unknown>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export declare const CLIENT_MESSAGE_TYPES: readonly ["abort", "ping", "user_message", "tool.confirm_result", "completion.request", "model.switch", "model.refine", "autonomy.switch", "context.clear", "context.compact", "context.debug", "context.editor.open", "context.editor.validate", "context.editor.apply", "context.mode.create", "context.mode.delete", "context.mode.switch", "context.mode.update", "context.modes.list", "context.repair", "mode.switch", "modes.list", "session.checkpoints", "session.delete", "session.inspect", "session.new", "session.rename", "session.resume", "session.rewind", "session.save", "sessions.list", "side_effects.list", "stats.get", "todo.update", "todos.clear", "todos.get", "todos.remove", "collab.join", "collab.leave", "collab.annotate", "collab.resolve", "collab.request_pause", "collab.resume", "collab.grant_control", "collab.inject_tool", "mailbox.action", "mailbox.agents", "mailbox.clear", "mailbox.compact", "mailbox.messages", "mailbox.purge", "mailbox.send", "files.list", "files.read", "files.tree", "files.write", "git.changes", "git.diff", "git.info", "projects.add", "projects.list", "projects.select", "working_dir.set", "worktree.cleanup", "worktree.diff", "worktree.merge", "worktree.remove", "worktree.scan", "shell.open", "process.kill", "process.killAll", "process.list", "terminal.close", "terminal.create", "terminal.input", "terminal.resize", "codebase.index.server.shutdown", "connections.health", "connections.service_action", "diag.get", "key.add", "key.delete", "key.set_active", "key.update", "prefs.get", "prefs.update", "provider.add", "provider.clear_models", "provider.custom_models.remove", "provider.custom_models.set", "provider.models", "provider.models.search", "provider.probe", "provider.remove", "provider.status.clear", "provider.status.get", "provider.status.retry", "provider.undo_clear", "provider.update", "providers.list", "providers.saved", "tool.disable", "tool.enable", "tools.list", "webui.shutdown", "goal-state.get", "goal.addTask", "goal.assess", "goal.assignTask", "goal.clear", "goal.get", "goal.list", "goal.load", "goal.moveTask", "goal.pause", "goal.resume", "goal.retryTask", "goal.revert", "goal.runTask", "goal.save", "goal.selectPhase", "goal.start", "goal.state", "goal.status", "goal.stop", "goal.taskStatus", "goal.toggleAutonomous", "plan.get", "plan.item.update", "plan.template_use", "task.update", "tasks.get", "sdd.board.cancel_task", "sdd.board.cleanup_worktrees", "sdd.board.delete_task", "sdd.board.destroy", "sdd.board.get", "sdd.board.list", "sdd.board.pause", "sdd.board.reassign", "sdd.board.resume", "sdd.board.retry", "sdd.board.retry_all_failed", "sdd.board.rollback", "sdd.board.set_task_fallbacks", "sdd.board.set_task_model", "sdd.board.set_task_verification", "sdd.board.split_task", "sdd.board.stop", "sdd.run.from_graph", "sdd.run.from_spec", "sdd.run.start", "sdd.spec.approve", "sdd.spec.discard", "sdd.spec.get", "sdd.spec.message", "sdd.spec.start", "specs.get", "specs.list", "specs.taskStatus", "brain.ask", "brain.config.get", "brain.config.set", "brain.risk", "brain.status", "chronicle.facet", "chronicle.facets", "chronicle.graph", "chronicle.metrics", "chronicle.query", "chronicle.status", "config.doctor", "design.list", "design.materialize", "design.set", "design.state", "design.swap", "design.tune", "design.use", "design.verify", "memory.list", "memory.sage.backfillRecoverable", "memory.sage.candidateResolve", "memory.sage.delete", "memory.sage.forFile", "memory.sage.get", "memory.sage.graph", "memory.sage.list", "memory.sage.listPage", "memory.sage.recover", "memory.sage.remember", "memory.sage.update", "auth.oauth.cancel", "auth.oauth.code", "auth.oauth.start", "mcp.add", "mcp.disable", "mcp.discover", "mcp.enable", "mcp.list", "mcp.prompt.get", "mcp.prompts", "mcp.remove", "mcp.resource.read", "mcp.resources", "mcp.restart", "mcp.sleep", "mcp.update", "mcp.wake", "prompts.content", "prompts.create", "prompts.favorite", "prompts.list", "prompts.recent", "prompts.search", "prompts.used", "skills.content", "skills.create", "skills.edit", "skills.export", "skills.install", "skills.list", "skills.uninstall", "skills.update"];
|
|
2
|
-
export declare const SERVER_MESSAGE_TYPES: readonly ["error", "log", "pong", "side_effects", "agent.status_changed", "agent.timeline.message", "client.status_update", "chimera.report_available", "compaction.failed", "completion.result", "context.compacted", "context.debug", "context.editor.snapshot", "context.editor.validation", "context.editor.applied", "context.mode.changed", "context.modes.list", "context.repaired", "ctx.max_context", "ctx.pct", "delegate.completed", "delegate.started", "iteration.completed", "iteration.limit_reached", "iteration.started", "model.refine_result", "modes.list", "provider.active_blocked", "provider.error", "provider.fallback", "provider.response", "provider.retry", "provider.status_changed", "provider.stream_error", "provider.text_delta", "provider.thinking_delta", "run.result", "session.checkpoints", "session.damaged", "session.end", "session.inspect", "session.rewound", "session.start", "session.stats", "sessions.list", "sessions.status_update", "stats.get", "token.cost_estimate_unavailable", "token.threshold", "tool.confirm_needed", "tool.disabled", "tool.enabled", "tool.executed", "tool.loop_detected", "tool.progress", "tool.started", "tools.list", "trust.persisted", "collab.annotation.added", "collab.annotation.resolved", "collab.event", "collab.injection.granted", "collab.participant.joined", "collab.participant.left", "collab.pause.granted", "collab.pause.released", "collab.state", "mailbox.action_result", "mailbox.agent_registered", "mailbox.agents", "mailbox.cleared", "mailbox.compacted", "mailbox.event", "mailbox.messages", "mailbox.sent", "mailbox.purged", "mailbox.received", "subagent.budget_extended", "subagent.event", "checkpoint.written", "codemap.file_event", "codemap.index_updated", "codemap.tool_executed", "codemap.tool_started", "file.saved", "files.list", "files.read", "files.tree", "files.written", "git.changes", "git.diff", "git.info", "process.list", "projects.added", "projects.list", "projects.selected", "terminal.exit", "terminal.output", "working_dir.changed", "worktree.cleanup_result", "worktree.diff_result", "worktree.event", "worktree.merge_result", "worktree.orphans", "worktree.state", "auth.oauth.status", "codebase.index.server.shutdown_result", "connections.health_error", "connections.health_result", "connections.service_action_result", "diag.get", "key.operation_result", "model.switch_result", "prefs.updated", "provider.catalog", "provider.models", "provider.models.search_result", "provider.probe", "provider.status.snapshot", "providers.saved", "budget.decision", "budget.threshold_reached", "coordinator.stats", "coordinator.status", "eternal.iteration", "fleet.concurrency_update", "goal-state.updated", "goal.assess.result", "goal.list", "goal.paused", "goal.resumed", "goal.saved", "goal.error", "goal.stopped", "goal.failed", "goal.completed", "goal.cleared", "goal.reverted", "goal.progress", "goal.state", "in_flight.ended", "in_flight.started", "plan.updated", "task.completed", "task.failed", "task.pending", "task.started", "tasks.updated", "todos.cleared", "todos.updated", "kanban.task.activity", "sdd.board.lifecycle_result", "sdd.board.list", "sdd.board.snapshot", "sdd.run.started", "sdd.spec.agent_text", "sdd.spec.error", "sdd.spec.snapshot", "specs.detail", "specs.list", "consensus.vote_cast", "consensus.vote_initiated", "consensus.vote_resolved", "cron.job_fired", "cron.snapshot", "techstack.job.cancelled", "techstack.job.failed", "techstack.job.progress", "techstack.job.started", "techstack.report.delivered", "techstack.report.ready", "techstack.snapshot.updated", "techstack.workspace.completed", "brain.answer", "brain.config", "brain.event", "brain.status", "chronicle.error", "chronicle.facet_result", "chronicle.facets_result", "chronicle.graph_result", "chronicle.metrics_result", "chronicle.query_result", "chronicle.status_result", "config.doctor.result", "design.list", "design.materialize", "design.set", "design.state", "design.swap", "design.tune", "design.use", "design.verify", "memory.event", "memory.list", "memory.sage.backfillRecoverable", "memory.sage.candidateResolve", "memory.sage.delete", "memory.sage.forFile", "memory.sage.get", "memory.sage.graph", "memory.sage.list", "memory.sage.listPage", "memory.sage.recover", "memory.sage.remember", "memory.sage.update", "mcp.content.error", "mcp.content.selected", "mcp.list", "mcp.operation_result", "mcp.prompts", "mcp.resources", "mcp.server.added", "mcp.server.connected", "mcp.server.disconnected", "mcp.server.discovered", "mcp.server.error", "mcp.server.reconnected", "mcp.server.removed", "mcp.server.sleeping", "mcp.server.updated", "mcp.server.waking", "prompts.content", "prompts.created", "prompts.favorite", "prompts.list", "prompts.recent", "prompts.search", "prompts.used", "skills.content", "skills.created", "skills.edited", "skills.exported", "skills.installed", "skills.list", "skills.uninstalled", "skills.updated"];
|
|
1
|
+
export declare const CLIENT_MESSAGE_TYPES: readonly ["abort", "ping", "user_message", "tool.confirm_result", "topic.advice", "completion.request", "model.switch", "model.refine", "model.fallback_choice", "autonomy.switch", "context.clear", "context.compact", "context.debug", "context.editor.open", "context.editor.validate", "context.editor.apply", "context.mode.create", "context.mode.delete", "context.mode.switch", "context.mode.update", "context.modes.list", "context.repair", "mode.switch", "modes.list", "session.checkpoints", "session.delete", "session.inspect", "session.new", "session.rename", "session.resume", "session.rewind", "session.save", "sessions.list", "side_effects.list", "stats.get", "todo.update", "todos.clear", "todos.get", "todos.remove", "collab.join", "collab.leave", "collab.annotate", "collab.resolve", "collab.request_pause", "collab.resume", "collab.grant_control", "collab.inject_tool", "mailbox.action", "mailbox.agents", "mailbox.clear", "mailbox.compact", "mailbox.messages", "mailbox.purge", "mailbox.send", "files.list", "files.read", "files.tree", "files.write", "git.changes", "git.diff", "git.info", "projects.add", "projects.list", "projects.select", "working_dir.set", "worktree.cleanup", "worktree.diff", "worktree.merge", "worktree.remove", "worktree.scan", "shell.open", "process.kill", "process.killAll", "process.list", "terminal.close", "terminal.create", "terminal.input", "terminal.resize", "codebase.index.server.shutdown", "connections.health", "connections.service_action", "diag.get", "key.add", "key.delete", "key.set_active", "key.update", "prefs.get", "prefs.update", "provider.add", "provider.clear_models", "provider.custom_models.remove", "provider.custom_models.set", "provider.models", "provider.models.search", "provider.probe", "provider.remove", "provider.status.clear", "provider.status.get", "provider.status.retry", "provider.undo_clear", "provider.update", "providers.list", "providers.saved", "tool.disable", "tool.enable", "tools.list", "webui.shutdown", "goal-state.get", "goal.addTask", "goal.assess", "goal.assignTask", "goal.clear", "goal.get", "goal.list", "goal.load", "goal.moveTask", "goal.pause", "goal.resume", "goal.retryTask", "goal.revert", "goal.runTask", "goal.save", "goal.selectPhase", "goal.start", "goal.state", "goal.status", "goal.stop", "goal.taskStatus", "goal.toggleAutonomous", "plan.get", "plan.item.update", "plan.template_use", "task.update", "tasks.get", "sdd.board.cancel_task", "sdd.board.cleanup_worktrees", "sdd.board.delete_task", "sdd.board.destroy", "sdd.board.get", "sdd.board.list", "sdd.board.pause", "sdd.board.reassign", "sdd.board.resume", "sdd.board.retry", "sdd.board.retry_all_failed", "sdd.board.rollback", "sdd.board.set_task_fallbacks", "sdd.board.set_task_model", "sdd.board.set_task_verification", "sdd.board.split_task", "sdd.board.stop", "sdd.run.from_graph", "sdd.run.from_spec", "sdd.run.start", "sdd.spec.approve", "sdd.spec.discard", "sdd.spec.get", "sdd.spec.message", "sdd.spec.start", "specs.get", "specs.list", "specs.taskStatus", "brain.ask", "brain.config.get", "brain.config.set", "brain.risk", "brain.status", "chronicle.facet", "chronicle.facets", "chronicle.graph", "chronicle.metrics", "chronicle.query", "chronicle.status", "config.doctor", "design.list", "design.materialize", "design.set", "design.state", "design.swap", "design.tune", "design.use", "design.verify", "memory.list", "memory.sage.backfillRecoverable", "memory.sage.candidateResolve", "memory.sage.delete", "memory.sage.forFile", "memory.sage.get", "memory.sage.graph", "memory.sage.list", "memory.sage.listPage", "memory.sage.recover", "memory.sage.remember", "memory.sage.update", "auth.oauth.cancel", "auth.oauth.code", "auth.oauth.start", "mcp.add", "mcp.disable", "mcp.discover", "mcp.enable", "mcp.list", "mcp.prompt.get", "mcp.prompts", "mcp.remove", "mcp.resource.read", "mcp.resources", "mcp.restart", "mcp.sleep", "mcp.update", "mcp.wake", "prompts.content", "prompts.create", "prompts.favorite", "prompts.list", "prompts.recent", "prompts.search", "prompts.used", "skills.content", "skills.create", "skills.edit", "skills.export", "skills.install", "skills.list", "skills.uninstall", "skills.update"];
|
|
2
|
+
export declare const SERVER_MESSAGE_TYPES: readonly ["error", "log", "pong", "side_effects", "agent.status_changed", "agent.timeline.message", "client.status_update", "chimera.report_available", "compaction.failed", "completion.result", "context.compacted", "context.debug", "context.editor.snapshot", "context.editor.validation", "context.editor.applied", "context.mode.changed", "context.modes.list", "context.repaired", "ctx.max_context", "ctx.pct", "delegate.completed", "delegate.started", "iteration.completed", "iteration.limit_reached", "iteration.started", "model.refine_result", "modes.list", "provider.active_blocked", "provider.error", "provider.fallback", "provider.fallback_pending", "provider.response", "provider.retry", "provider.status_changed", "provider.stream_error", "provider.text_delta", "provider.thinking_delta", "run.result", "session.checkpoints", "session.damaged", "session.end", "session.inspect", "session.rewound", "session.start", "session.stats", "sessions.list", "sessions.status_update", "stats.get", "token.cost_estimate_unavailable", "token.threshold", "tool.confirm_needed", "tool.disabled", "tool.enabled", "tool.executed", "tool.loop_detected", "tool.progress", "tool.started", "topic.advice_result", "tools.list", "trust.persisted", "collab.annotation.added", "collab.annotation.resolved", "collab.event", "collab.injection.granted", "collab.participant.joined", "collab.participant.left", "collab.pause.granted", "collab.pause.released", "collab.state", "mailbox.action_result", "mailbox.agent_registered", "mailbox.agent_deregistered", "mailbox.agents", "mailbox.cleared", "mailbox.compacted", "mailbox.event", "mailbox.messages", "mailbox.sent", "mailbox.purged", "mailbox.received", "subagent.budget_extended", "subagent.event", "checkpoint.written", "codemap.file_event", "codemap.index_updated", "codemap.tool_executed", "codemap.tool_started", "file.saved", "files.list", "files.read", "files.tree", "files.written", "git.changes", "git.diff", "git.info", "process.list", "projects.added", "projects.list", "projects.selected", "terminal.exit", "terminal.output", "working_dir.changed", "worktree.cleanup_result", "worktree.diff_result", "worktree.event", "worktree.merge_result", "worktree.orphans", "worktree.state", "auth.oauth.status", "codebase.index.server.shutdown_result", "connections.health_error", "connections.health_result", "connections.service_action_result", "diag.get", "key.operation_result", "model.switch_result", "prefs.updated", "provider.catalog", "provider.models", "provider.models.search_result", "provider.probe", "provider.status.snapshot", "providers.saved", "budget.decision", "budget.threshold_reached", "coordinator.stats", "coordinator.status", "eternal.iteration", "fleet.concurrency_update", "goal-state.updated", "goal.assess.result", "goal.list", "goal.paused", "goal.resumed", "goal.saved", "goal.error", "goal.stopped", "goal.failed", "goal.completed", "goal.cleared", "goal.reverted", "goal.progress", "goal.state", "in_flight.ended", "in_flight.started", "plan.updated", "task.completed", "task.failed", "task.pending", "task.started", "tasks.updated", "todos.cleared", "todos.updated", "kanban.task.activity", "sdd.board.lifecycle_result", "sdd.board.list", "sdd.board.snapshot", "sdd.run.started", "sdd.spec.agent_text", "sdd.spec.error", "sdd.spec.snapshot", "specs.detail", "specs.list", "consensus.vote_cast", "consensus.vote_initiated", "consensus.vote_resolved", "cron.job_fired", "cron.snapshot", "techstack.job.cancelled", "techstack.job.failed", "techstack.job.progress", "techstack.job.started", "techstack.report.delivered", "techstack.report.ready", "techstack.snapshot.updated", "techstack.workspace.completed", "brain.answer", "brain.config", "brain.event", "brain.status", "chronicle.error", "chronicle.facet_result", "chronicle.facets_result", "chronicle.graph_result", "chronicle.metrics_result", "chronicle.query_result", "chronicle.status_result", "config.doctor.result", "design.list", "design.materialize", "design.set", "design.state", "design.swap", "design.tune", "design.use", "design.verify", "memory.event", "memory.list", "memory.sage.backfillRecoverable", "memory.sage.candidateResolve", "memory.sage.delete", "memory.sage.forFile", "memory.sage.get", "memory.sage.graph", "memory.sage.list", "memory.sage.listPage", "memory.sage.recover", "memory.sage.remember", "memory.sage.update", "mcp.content.error", "mcp.content.selected", "mcp.list", "mcp.operation_result", "mcp.prompts", "mcp.resources", "mcp.server.added", "mcp.server.connected", "mcp.server.disconnected", "mcp.server.discovered", "mcp.server.error", "mcp.server.reconnected", "mcp.server.removed", "mcp.server.sleeping", "mcp.server.updated", "mcp.server.waking", "prompts.content", "prompts.created", "prompts.favorite", "prompts.list", "prompts.recent", "prompts.search", "prompts.used", "skills.content", "skills.created", "skills.edited", "skills.exported", "skills.installed", "skills.list", "skills.uninstalled", "skills.updated"];
|
|
3
3
|
export type ExactClientMessageType = (typeof CLIENT_MESSAGE_TYPES)[number];
|
|
4
4
|
export type ExactServerMessageType = (typeof SERVER_MESSAGE_TYPES)[number];
|
|
5
5
|
export declare function isRegisteredMessageType(type: string, direction: 'client' | 'server'): boolean;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const SERVER_CONVERSATION_MESSAGE_TYPES: readonly ['error', 'log', 'pong', 'side_effects', 'agent.status_changed', 'agent.timeline.message', 'client.status_update', 'chimera.report_available', 'compaction.failed', 'completion.result', 'context.compacted', 'context.debug', 'context.editor.snapshot', 'context.editor.validation', 'context.editor.applied', 'context.mode.changed', 'context.modes.list', 'context.repaired', 'ctx.max_context', 'ctx.pct', 'delegate.completed', 'delegate.started', 'iteration.completed', 'iteration.limit_reached', 'iteration.started', 'model.refine_result', 'modes.list', 'provider.active_blocked', 'provider.error', 'provider.fallback', 'provider.response', 'provider.retry', 'provider.status_changed', 'provider.stream_error', 'provider.text_delta', 'provider.thinking_delta', 'run.result', 'session.checkpoints', 'session.damaged', 'session.end', 'session.inspect', 'session.rewound', 'session.start', 'session.stats', 'sessions.list', 'sessions.status_update', 'stats.get', 'token.cost_estimate_unavailable', 'token.threshold', 'tool.confirm_needed', 'tool.disabled', 'tool.enabled', 'tool.executed', 'tool.loop_detected', 'tool.progress', 'tool.started', 'tools.list', 'trust.persisted'];
|
|
2
|
-
export declare const SERVER_COLLABORATION_MESSAGE_TYPES: readonly ['collab.annotation.added', 'collab.annotation.resolved', 'collab.event', 'collab.injection.granted', 'collab.participant.joined', 'collab.participant.left', 'collab.pause.granted', 'collab.pause.released', 'collab.state', 'mailbox.action_result', 'mailbox.agent_registered', 'mailbox.agents', 'mailbox.cleared', 'mailbox.compacted', 'mailbox.event', 'mailbox.messages', 'mailbox.sent', 'mailbox.purged', 'mailbox.received', 'subagent.budget_extended', 'subagent.event'];
|
|
1
|
+
export declare const SERVER_CONVERSATION_MESSAGE_TYPES: readonly ['error', 'log', 'pong', 'side_effects', 'agent.status_changed', 'agent.timeline.message', 'client.status_update', 'chimera.report_available', 'compaction.failed', 'completion.result', 'context.compacted', 'context.debug', 'context.editor.snapshot', 'context.editor.validation', 'context.editor.applied', 'context.mode.changed', 'context.modes.list', 'context.repaired', 'ctx.max_context', 'ctx.pct', 'delegate.completed', 'delegate.started', 'iteration.completed', 'iteration.limit_reached', 'iteration.started', 'model.refine_result', 'modes.list', 'provider.active_blocked', 'provider.error', 'provider.fallback', 'provider.fallback_pending', 'provider.response', 'provider.retry', 'provider.status_changed', 'provider.stream_error', 'provider.text_delta', 'provider.thinking_delta', 'run.result', 'session.checkpoints', 'session.damaged', 'session.end', 'session.inspect', 'session.rewound', 'session.start', 'session.stats', 'sessions.list', 'sessions.status_update', 'stats.get', 'token.cost_estimate_unavailable', 'token.threshold', 'tool.confirm_needed', 'tool.disabled', 'tool.enabled', 'tool.executed', 'tool.loop_detected', 'tool.progress', 'tool.started', 'topic.advice_result', 'tools.list', 'trust.persisted'];
|
|
2
|
+
export declare const SERVER_COLLABORATION_MESSAGE_TYPES: readonly ['collab.annotation.added', 'collab.annotation.resolved', 'collab.event', 'collab.injection.granted', 'collab.participant.joined', 'collab.participant.left', 'collab.pause.granted', 'collab.pause.released', 'collab.state', 'mailbox.action_result', 'mailbox.agent_registered', 'mailbox.agent_deregistered', 'mailbox.agents', 'mailbox.cleared', 'mailbox.compacted', 'mailbox.event', 'mailbox.messages', 'mailbox.sent', 'mailbox.purged', 'mailbox.received', 'subagent.budget_extended', 'subagent.event'];
|
|
3
3
|
//# sourceMappingURL=server-conversation.d.ts.map
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export declare const SURFACE_PROTOCOL_VERSION: 1;
|
|
2
2
|
export declare const SURFACE_PROTOCOL_MIN_VERSION: 1;
|
|
3
3
|
export declare const SURFACE_PROTOCOL_CAPABILITIES: readonly ['protocol.directional-decoder', 'protocol.recursive-key-safety', 'chronicle.query', 'chronicle.facet', 'chronicle.facets', 'chronicle.graph', 'chronicle.metrics', 'chronicle.status', 'connections.health',
|
|
4
|
+
/** Bounded topic-shift advice plus same-session provider-context boundaries. */
|
|
5
|
+
'context.topic-boundary',
|
|
4
6
|
/** Interview resume/discard + lastAgentText/lastRunId continuity. */
|
|
5
7
|
'sdd.interview.continuity',
|
|
6
8
|
/** Launch multi-agent runs from a graph id or resolved spec id. */
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { TrustBoundary } from '@wrongstack/core/security';
|
|
2
|
+
import { authorizeWebUIAction } from './privileged-actions.js';
|
|
1
3
|
import type { WebSocket } from 'ws';
|
|
2
4
|
import type { WSClientMessage, WSServerMessage } from './types.js';
|
|
3
5
|
export type ConnectionHealthStatus = 'healthy' | 'degraded' | 'offline' | 'unavailable' | 'error';
|
|
@@ -41,6 +43,14 @@ export interface ConnectionsHealthContext {
|
|
|
41
43
|
send(ws: WebSocket, message: WSServerMessage): void;
|
|
42
44
|
backend: ConnectionsHealthReport['backend'];
|
|
43
45
|
collect?: (() => Promise<ConnectionsHealthReport>) | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* Policy authority for `connections.service_action`. Optional so the
|
|
48
|
+
* read-only `connections.health` route keeps working without one, but the
|
|
49
|
+
* action route REFUSES when it is absent rather than proceeding unchecked —
|
|
50
|
+
* a missing boundary must not read as "allowed".
|
|
51
|
+
*/
|
|
52
|
+
trustBoundary?: TrustBoundary | undefined;
|
|
53
|
+
logger?: Parameters<typeof authorizeWebUIAction>[2];
|
|
44
54
|
}
|
|
45
55
|
/** One read-only health report for every per-project backend connection. */
|
|
46
56
|
export declare function handleConnectionsHealthRoute(context: ConnectionsHealthContext, ws: WebSocket, message: WSClientMessage): Promise<boolean>;
|
|
@@ -7,6 +7,12 @@ export interface ContextEditorMessage {
|
|
|
7
7
|
content: string | ContextEditorBlock[];
|
|
8
8
|
ts?: string | undefined;
|
|
9
9
|
}
|
|
10
|
+
export interface ContextEditorRemoval {
|
|
11
|
+
messageIndex: number;
|
|
12
|
+
blockIndex?: number | undefined;
|
|
13
|
+
start?: number | undefined;
|
|
14
|
+
end?: number | undefined;
|
|
15
|
+
}
|
|
10
16
|
export interface ContextEditorMetrics {
|
|
11
17
|
messages: number;
|
|
12
18
|
blocks: number;
|
|
@@ -85,6 +91,7 @@ export interface ContextEditorSnapshot {
|
|
|
85
91
|
preview: string;
|
|
86
92
|
blockCount: number | null;
|
|
87
93
|
warnings: ContextEditorWarning[];
|
|
94
|
+
pairedAssistantIndices: number[];
|
|
88
95
|
}>;
|
|
89
96
|
diagnostics: ContextEditorDiagnostics;
|
|
90
97
|
}
|
|
@@ -99,6 +106,7 @@ export declare function validateContextEditorProposal(input: {
|
|
|
99
106
|
tools?: ReturnType<ToolRegistry['list']> | undefined;
|
|
100
107
|
baseRevision: string;
|
|
101
108
|
messages: unknown;
|
|
109
|
+
removals: unknown;
|
|
102
110
|
allowRepair: boolean;
|
|
103
111
|
runActive?: boolean | undefined;
|
|
104
112
|
}): ContextEditorValidationResult;
|
|
@@ -107,6 +115,7 @@ export declare function applyContextEditorProposal(input: {
|
|
|
107
115
|
tools?: ReturnType<ToolRegistry['list']> | undefined;
|
|
108
116
|
baseRevision: string;
|
|
109
117
|
messages: unknown;
|
|
118
|
+
removals: unknown;
|
|
110
119
|
allowRepair: boolean;
|
|
111
120
|
runActive?: boolean | undefined;
|
|
112
121
|
}): Promise<ContextEditorValidationResult | ContextEditorAppliedResult>;
|
|
@@ -2,6 +2,7 @@ import type { WebSocket } from 'ws';
|
|
|
2
2
|
import type { WSClientMessage } from './types.js';
|
|
3
3
|
export interface ConversationRouteHandlers {
|
|
4
4
|
userMessage: (ws: WebSocket, msg: WSClientMessage) => Promise<void> | void;
|
|
5
|
+
topicAdvice: (ws: WebSocket, msg: WSClientMessage) => Promise<void> | void;
|
|
5
6
|
abort: (ws: WebSocket, msg: WSClientMessage) => Promise<void> | void;
|
|
6
7
|
ping: (ws: WebSocket, msg: WSClientMessage) => Promise<void> | void;
|
|
7
8
|
confirmTool: (ws: WebSocket, msg: WSClientMessage) => Promise<void> | void;
|
|
@@ -21,6 +21,11 @@ export interface MailboxBridgeParams {
|
|
|
21
21
|
* spawn `wstack mailbox serve` and wait briefly for the lock to become
|
|
22
22
|
* healthy. Failure stays non-fatal: the WebUI can run without external
|
|
23
23
|
* agent HTTP connectivity.
|
|
24
|
+
*
|
|
25
|
+
* Gated on `features.mailboxBridge`, which defaults to 'off' — the
|
|
26
|
+
* bridge only serves EXTERNAL agents and no WebUI code path reads the
|
|
27
|
+
* handle stashed on `ctx.meta`, so a detached ~130 MB CLI process per
|
|
28
|
+
* project was overhead nobody collected on. Opt in with 'auto'.
|
|
24
29
|
*/
|
|
25
30
|
export declare function discoverMailboxBridgeForWebui(params: MailboxBridgeParams): Promise<void>;
|
|
26
31
|
//# sourceMappingURL=discover-mailbox-bridge.d.ts.map
|
|
@@ -51,7 +51,7 @@ export declare function createEmbeddedProviderOperations(ctx: EmbeddedProviderCo
|
|
|
51
51
|
apiKey?: string | undefined;
|
|
52
52
|
models?: string[] | undefined;
|
|
53
53
|
customModels?: ProviderConfig['customModels'] | undefined;
|
|
54
|
-
}) => Promise<
|
|
54
|
+
}) => Promise<boolean>;
|
|
55
55
|
handleProviderRemove: (ws: WebSocket, providerId: string) => Promise<void>;
|
|
56
56
|
handleProviderClearModels: (ws: WebSocket, providerId: string) => Promise<void>;
|
|
57
57
|
handleCustomModelSet: (ws: WebSocket, providerId: string, modelId: string, definition: NonNullable<ProviderConfig['customModels']>[string]) => Promise<void>;
|
|
@@ -33,6 +33,11 @@ export interface RegisterWebuiInstanceParams {
|
|
|
33
33
|
startedAt: string;
|
|
34
34
|
/** Registry base dir (dirname of globalConfigPath); undefined ⇒ registry default. */
|
|
35
35
|
registryBaseDir: string | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* This instance's API access token, recorded so a same-project TUI/REPL can
|
|
38
|
+
* authenticate `POST /api/fleet/ping` (H3). See `WebUIInstanceRecord`.
|
|
39
|
+
*/
|
|
40
|
+
authToken?: string | undefined;
|
|
36
41
|
}
|
|
37
42
|
export interface RegisterWebuiInstanceDeps {
|
|
38
43
|
registerFn?: (record: WebUIInstanceRecord, baseDir?: string) => Promise<void>;
|
|
@@ -73,7 +78,19 @@ export interface WebuiShutdownResources {
|
|
|
73
78
|
/** Run and drop every event-bus unsubscriber. */
|
|
74
79
|
unsubscribeEvents: () => void;
|
|
75
80
|
/** Dispose long-lived handlers, timers, watchers, and project services owned by the host. */
|
|
76
|
-
disposeResources?: (() => void) | undefined;
|
|
81
|
+
disposeResources?: (() => void | Promise<void>) | undefined;
|
|
82
|
+
/**
|
|
83
|
+
* Stop session-owned child processes (MCP, bash/exec tools, mailbox helpers,
|
|
84
|
+
* dev servers). Runs **before** the HTTP/WS close so children cannot keep
|
|
85
|
+
* stdio handles open and strand the parent event loop (issue #322).
|
|
86
|
+
* Bounded by {@link childCleanupTimeoutMs}; failures are best-effort.
|
|
87
|
+
*/
|
|
88
|
+
stopOwnedChildren?: (() => void | Promise<void>) | undefined;
|
|
89
|
+
/**
|
|
90
|
+
* Upper bound for {@link stopOwnedChildren} + async dispose before servers
|
|
91
|
+
* close. Default 10_000 ms.
|
|
92
|
+
*/
|
|
93
|
+
childCleanupTimeoutMs?: number | undefined;
|
|
77
94
|
/** Close every connected socket and clear the client map. */
|
|
78
95
|
closeClients: () => void;
|
|
79
96
|
/** Close the static HTTP server (no-op when WS-only). */
|
|
@@ -99,10 +116,11 @@ export interface WebuiShutdownResources {
|
|
|
99
116
|
* second Ctrl+C, or a signal after another server in the same process
|
|
100
117
|
* already stopped) return immediately.
|
|
101
118
|
*
|
|
102
|
-
* Order
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
119
|
+
* Order (issue #322): abort runs → unsubscribe events → stop owned children
|
|
120
|
+
* (bounded) → dispose resources (bounded) → close clients → close HTTP/WS →
|
|
121
|
+
* unregister from the instance registry → onStopped once unregister settles.
|
|
122
|
+
* Registry removal is deferred until after child cleanup so operators do not
|
|
123
|
+
* see a "stopped" registry entry while the process tree is still alive.
|
|
106
124
|
*/
|
|
107
125
|
export declare function createWebuiShutdown(res: WebuiShutdownResources): () => void;
|
|
108
126
|
/**
|