@wrongstack/webui-server 0.306.4 → 0.307.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.
Files changed (41) hide show
  1. package/dist/index.js +3459 -2666
  2. package/dist/protocol/client-operations.d.ts +1 -1
  3. package/dist/protocol/client-workspace.d.ts +1 -1
  4. package/dist/protocol/index.js +12 -0
  5. package/dist/protocol/registry.d.ts +2 -2
  6. package/dist/protocol/server-workspace.d.ts +1 -1
  7. package/dist/server/collaboration-ws-handler.d.ts +18 -0
  8. package/dist/server/connections/collector.d.ts +15 -0
  9. package/dist/server/connections/helpers.d.ts +18 -0
  10. package/dist/server/connections/index.d.ts +5 -0
  11. package/dist/server/connections/service-actions.d.ts +16 -0
  12. package/dist/server/connections/types.d.ts +55 -0
  13. package/dist/server/connections-health-route.d.ts +5 -66
  14. package/dist/server/entry.js +3418 -2636
  15. package/dist/server/file-handlers.d.ts +37 -0
  16. package/dist/server/goal-ws-handler.d.ts +16 -0
  17. package/dist/server/http-server/api-router.d.ts +22 -0
  18. package/dist/server/http-server/index.d.ts +6 -0
  19. package/dist/server/http-server/security-helpers.d.ts +24 -0
  20. package/dist/server/http-server/static-file-handler.d.ts +10 -0
  21. package/dist/server/http-server.d.ts +28 -87
  22. package/dist/server/index.d.ts +2 -1
  23. package/dist/server/network-info.d.ts +2 -3
  24. package/dist/server/project-watcher.d.ts +31 -0
  25. package/dist/server/sdd-board-ws-handler.d.ts +9 -0
  26. package/dist/server/sdd-wizard-ws-handler.d.ts +1 -0
  27. package/dist/server/setup-events-pattern-handlers.d.ts +10 -0
  28. package/dist/server/setup-events-status-watcher.d.ts +1 -1
  29. package/dist/server/setup-events-subagent-handlers.d.ts +14 -0
  30. package/dist/server/setup-events-tool-handlers.d.ts +18 -0
  31. package/dist/server/setup-events.d.ts +1 -2
  32. package/dist/server/shell-open.d.ts +9 -8
  33. package/dist/server/start-webui-companion.d.ts +16 -0
  34. package/dist/server/start-webui-credential-watcher.d.ts +13 -0
  35. package/dist/server/start-webui-remediation.d.ts +14 -0
  36. package/dist/server/start-webui-shutdown.d.ts +43 -0
  37. package/dist/server/start-webui-todos.d.ts +13 -0
  38. package/dist/server/start-webui.d.ts +2 -29
  39. package/dist/server/techstack-handlers.d.ts +2 -2
  40. package/dist/server/worktree-ws-handler.d.ts +7 -0
  41. package/package.json +13 -13
@@ -1,3 +1,3 @@
1
1
  export declare const CLIENT_GOAL_MESSAGE_TYPES: readonly ['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'];
2
- export declare const CLIENT_SDD_MESSAGE_TYPES: readonly ['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'];
2
+ export declare const CLIENT_SDD_MESSAGE_TYPES: readonly ['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.rewind', 'sdd.spec.start', 'specs.get', 'specs.list', 'specs.taskStatus'];
3
3
  //# sourceMappingURL=client-operations.d.ts.map
@@ -1,3 +1,3 @@
1
- export declare const CLIENT_WORKSPACE_MESSAGE_TYPES: readonly ['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'];
1
+ export declare const CLIENT_WORKSPACE_MESSAGE_TYPES: readonly ['files.create', 'files.delete', 'files.list', 'files.move', 'files.read', 'files.rename', 'files.skeleton', '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'];
2
2
  export declare const CLIENT_CONFIGURATION_MESSAGE_TYPES: readonly ['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'];
3
3
  //# sourceMappingURL=client-workspace.d.ts.map
@@ -247,6 +247,7 @@ var CLIENT_SDD_MESSAGE_TYPES = [
247
247
  "sdd.spec.discard",
248
248
  "sdd.spec.get",
249
249
  "sdd.spec.message",
250
+ "sdd.spec.rewind",
250
251
  "sdd.spec.start",
251
252
  "specs.get",
252
253
  "specs.list",
@@ -255,8 +256,13 @@ var CLIENT_SDD_MESSAGE_TYPES = [
255
256
 
256
257
  // src/protocol/client-workspace.ts
257
258
  var CLIENT_WORKSPACE_MESSAGE_TYPES = [
259
+ "files.create",
260
+ "files.delete",
258
261
  "files.list",
262
+ "files.move",
259
263
  "files.read",
264
+ "files.rename",
265
+ "files.skeleton",
260
266
  "files.tree",
261
267
  "files.write",
262
268
  "git.changes",
@@ -540,9 +546,15 @@ var SERVER_WORKSPACE_MESSAGE_TYPES = [
540
546
  "codemap.tool_executed",
541
547
  "codemap.tool_started",
542
548
  "file.saved",
549
+ "files.created",
550
+ "files.deleted",
543
551
  "files.list",
552
+ "files.moved",
544
553
  "files.read",
554
+ "files.renamed",
555
+ "files.skeleton_result",
545
556
  "files.tree",
557
+ "files.tree.changed",
546
558
  "files.written",
547
559
  "git.changes",
548
560
  "git.diff",
@@ -1,5 +1,5 @@
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.listCandidates", "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.listCandidates", "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.create", "files.delete", "files.list", "files.move", "files.read", "files.rename", "files.skeleton", "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.rewind", "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.listCandidates", "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.created", "files.deleted", "files.list", "files.moved", "files.read", "files.renamed", "files.skeleton_result", "files.tree", "files.tree.changed", "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.listCandidates", "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_WORKSPACE_MESSAGE_TYPES: readonly ['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'];
1
+ export declare const SERVER_WORKSPACE_MESSAGE_TYPES: readonly ['checkpoint.written', 'codemap.file_event', 'codemap.index_updated', 'codemap.tool_executed', 'codemap.tool_started', 'file.saved', 'files.created', 'files.deleted', 'files.list', 'files.moved', 'files.read', 'files.renamed', 'files.skeleton_result', 'files.tree', 'files.tree.changed', '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'];
2
2
  export declare const SERVER_CONFIGURATION_MESSAGE_TYPES: readonly ['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'];
3
3
  //# sourceMappingURL=server-workspace.d.ts.map
@@ -71,6 +71,13 @@ export declare class CollaborationWebSocketHandler {
71
71
  /** sessionId → participants currently watching it. */
72
72
  private readonly bySession;
73
73
  private broadcastInterval;
74
+ /**
75
+ * Last-broadcast participant-set fingerprint per session. The 2s interval
76
+ * only re-sends `collab.state` when the fingerprint changed (join/leave),
77
+ * so an idle session costs one tiny string build per tick instead of a
78
+ * serialize + fan-out.
79
+ */
80
+ private readonly lastStateFingerprints;
74
81
  private readonly offs;
75
82
  constructor(events: EventBus, logger: Logger,
76
83
  /**
@@ -143,6 +150,17 @@ export declare class CollaborationWebSocketHandler {
143
150
  */
144
151
  private historyEventToKind;
145
152
  private stateMessage;
153
+ /**
154
+ * Cheap participant-set identity: participant ids are unique per join and
155
+ * `joinedAt` distinguishes a rejoin, so the fingerprint changes exactly on
156
+ * join/leave — the only events that alter `collab.state`.
157
+ */
158
+ private stateFingerprint;
159
+ /**
160
+ * Broadcast the current state for a session and record the fingerprint.
161
+ * Used on join/leave (eager broadcast) and by the periodic interval.
162
+ */
163
+ private broadcastState;
146
164
  private ensureBroadcast;
147
165
  private stopBroadcast;
148
166
  private broadcast;
@@ -0,0 +1,15 @@
1
+ import type { ConnectionHealthService, ConnectionsHealthReport } from './types.js';
2
+ export declare function collectConnectionsHealth(options: {
3
+ projectRoot: string;
4
+ indexDir?: string | undefined;
5
+ backend: ConnectionsHealthReport['backend'];
6
+ }): Promise<ConnectionsHealthReport>;
7
+ export declare function webuiHealth(backend: ConnectionsHealthReport['backend']): ConnectionHealthService;
8
+ export declare function sessionCatalogHealth(projectRoot: string): Promise<ConnectionHealthService>;
9
+ export declare function chronicleHealth(projectRoot: string): Promise<ConnectionHealthService>;
10
+ export declare function codebaseIndexHealth(projectRoot: string, indexDir?: string): Promise<ConnectionHealthService>;
11
+ export declare function sageHealth(projectRoot: string): Promise<ConnectionHealthService>;
12
+ export declare function kanbanHealth(projectRoot: string): Promise<ConnectionHealthService>;
13
+ export declare function mailboxHealth(projectRoot: string): Promise<ConnectionHealthService>;
14
+ export declare function governanceHealth(projectRoot: string): Promise<ConnectionHealthService>;
15
+ //# sourceMappingURL=collector.d.ts.map
@@ -0,0 +1,18 @@
1
+ import type { ConnectionHealthService } from './types.js';
2
+ export declare const RESTART_POLL_INTERVAL_MS = 250;
3
+ export declare const RESTART_DEADLINE_MS = 3000;
4
+ /**
5
+ * Raw socket probe — checks if anything is listening on an IPC endpoint
6
+ * (Unix domain socket or Windows named pipe) without sending protocol frames.
7
+ * Used for services whose client API offers no non-spawning probe.
8
+ */
9
+ export declare function isEndpointAlive(endpoint: string): Promise<boolean>;
10
+ /**
11
+ * Give a shutdown signal time to take effect before re-establishing the
12
+ * connection. When a probe is provided, polls until the server confirms it
13
+ * is down. Falls back to a single sleep when no probe is available.
14
+ */
15
+ export declare function waitForShutdown(probe?: () => Promise<boolean>): Promise<void>;
16
+ export declare function failureService(id: ConnectionHealthService['id'], label: string, required: boolean, mode: string, error: unknown, latencyMs?: number): ConnectionHealthService;
17
+ export declare function isOfflineConnectionError(error: unknown): boolean;
18
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1,5 @@
1
+ export * from './types.js';
2
+ export * from './helpers.js';
3
+ export * from './collector.js';
4
+ export * from './service-actions.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,16 @@
1
+ import type { WebSocket } from 'ws';
2
+ import type { WSClientMessage } from '../types.js';
3
+ import type { ConnectionHealthService, ConnectionsHealthContext, ServiceActionResult } from './types.js';
4
+ export declare function handleConnectionsServiceAction(ws: WebSocket, message: WSClientMessage, context: ConnectionsHealthContext): Promise<boolean>;
5
+ export declare function executeServiceAction(serviceId: ConnectionHealthService['id'], action: 'shutdown' | 'restart', projectRoot: string, indexDir: string | undefined): Promise<ServiceActionResult>;
6
+ export declare function killKanbanServer(projectRoot: string, action: 'shutdown' | 'restart'): Promise<ServiceActionResult>;
7
+ export declare function restartKanbanServer(projectRoot: string): Promise<ServiceActionResult>;
8
+ export declare function killSageServer(projectRoot: string, action: 'shutdown' | 'restart'): Promise<ServiceActionResult>;
9
+ export declare function restartSageServer(projectRoot: string): Promise<ServiceActionResult>;
10
+ export declare function killChronicleServer(projectRoot: string, action: 'shutdown' | 'restart'): Promise<ServiceActionResult>;
11
+ export declare function restartChronicleServer(projectRoot: string): Promise<ServiceActionResult>;
12
+ export declare function killCodebaseIndexServer(projectRoot: string, indexDir: string | undefined, action: 'shutdown' | 'restart'): Promise<ServiceActionResult>;
13
+ export declare function restartCodebaseIndexServer(projectRoot: string, indexDir: string | undefined): Promise<ServiceActionResult>;
14
+ export declare function killMailboxServer(projectRoot: string, action: 'shutdown' | 'restart'): Promise<ServiceActionResult>;
15
+ export declare function restartMailboxServer(projectRoot: string): Promise<ServiceActionResult>;
16
+ //# sourceMappingURL=service-actions.d.ts.map
@@ -0,0 +1,55 @@
1
+ import type { TrustBoundary } from '@wrongstack/core/security';
2
+ import type { WebSocket } from 'ws';
3
+ import type { authorizeWebUIAction } from '../privileged-actions.js';
4
+ import type { WSServerMessage } from '../types.js';
5
+ export type ConnectionHealthStatus = 'healthy' | 'degraded' | 'offline' | 'unavailable' | 'error';
6
+ export interface ConnectionHealthService {
7
+ id: 'webui' | 'session-catalog' | 'chronicle' | 'codebase-index' | 'sage' | 'kanban' | 'mailbox' | 'governance';
8
+ label: string;
9
+ status: ConnectionHealthStatus;
10
+ required: boolean;
11
+ mode: string;
12
+ detail: string;
13
+ ownerPid?: number | undefined;
14
+ endpoint?: string | undefined;
15
+ storage?: string | undefined;
16
+ uptimeMs?: number | undefined;
17
+ latencyMs?: number | undefined;
18
+ clients?: number | undefined;
19
+ activeRequests?: number | undefined;
20
+ queuedWork?: number | undefined;
21
+ watcher?: {
22
+ active: boolean;
23
+ watchedFiles?: number | undefined;
24
+ } | undefined;
25
+ lastError?: string | undefined;
26
+ control?: 'shutdown' | 'none' | undefined;
27
+ advisory?: {
28
+ code: string;
29
+ operatorAction: 'none' | 'observe' | 'investigate';
30
+ executionDisposition: 'continue';
31
+ } | undefined;
32
+ }
33
+ export interface ConnectionsHealthReport {
34
+ checkedAt: number;
35
+ overall: 'healthy' | 'degraded' | 'error';
36
+ backend: 'standalone' | 'cli-embedded';
37
+ projectRoot: string;
38
+ services: ConnectionHealthService[];
39
+ }
40
+ export interface ConnectionsHealthContext {
41
+ getProjectRoot(): string;
42
+ getIndexDir(): string | undefined;
43
+ send(ws: WebSocket, message: WSServerMessage): void;
44
+ backend: ConnectionsHealthReport['backend'];
45
+ collect?: (() => Promise<ConnectionsHealthReport>) | undefined;
46
+ trustBoundary?: TrustBoundary | undefined;
47
+ logger?: Parameters<typeof authorizeWebUIAction>[2];
48
+ }
49
+ export interface ServiceActionResult {
50
+ serviceId: ConnectionHealthService['id'] | null;
51
+ action: 'shutdown' | 'restart';
52
+ success: boolean;
53
+ message: string;
54
+ }
55
+ //# sourceMappingURL=types.d.ts.map
@@ -1,70 +1,9 @@
1
- import type { TrustBoundary } from '@wrongstack/core/security';
2
1
  import type { WebSocket } from 'ws';
3
- import { authorizeWebUIAction } from './privileged-actions.js';
4
- import type { WSClientMessage, WSServerMessage } from './types.js';
5
- export type ConnectionHealthStatus = 'healthy' | 'degraded' | 'offline' | 'unavailable' | 'error';
6
- export interface ConnectionHealthService {
7
- id: 'webui' | 'session-catalog' | 'chronicle' | 'codebase-index' | 'sage' | 'kanban' | 'mailbox' | 'governance';
8
- label: string;
9
- status: ConnectionHealthStatus;
10
- required: boolean;
11
- mode: string;
12
- detail: string;
13
- ownerPid?: number | undefined;
14
- endpoint?: string | undefined;
15
- storage?: string | undefined;
16
- uptimeMs?: number | undefined;
17
- latencyMs?: number | undefined;
18
- clients?: number | undefined;
19
- activeRequests?: number | undefined;
20
- queuedWork?: number | undefined;
21
- watcher?: {
22
- active: boolean;
23
- watchedFiles?: number | undefined;
24
- } | undefined;
25
- lastError?: string | undefined;
26
- control?: 'shutdown' | 'none' | undefined;
27
- advisory?: {
28
- code: string;
29
- operatorAction: 'none' | 'observe' | 'investigate';
30
- executionDisposition: 'continue';
31
- } | undefined;
32
- }
33
- export interface ConnectionsHealthReport {
34
- checkedAt: number;
35
- overall: 'healthy' | 'degraded' | 'error';
36
- backend: 'standalone' | 'cli-embedded';
37
- projectRoot: string;
38
- services: ConnectionHealthService[];
39
- }
40
- export interface ConnectionsHealthContext {
41
- getProjectRoot(): string;
42
- getIndexDir(): string | undefined;
43
- send(ws: WebSocket, message: WSServerMessage): void;
44
- backend: ConnectionsHealthReport['backend'];
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];
54
- }
2
+ import type { ConnectionsHealthContext } from './connections/types.js';
3
+ import type { WSClientMessage } from './types.js';
4
+ export * from './connections/types.js';
5
+ export * from './connections/collector.js';
6
+ export * from './connections/service-actions.js';
55
7
  /** One read-only health report for every per-project backend connection. */
56
8
  export declare function handleConnectionsHealthRoute(context: ConnectionsHealthContext, ws: WebSocket, message: WSClientMessage): Promise<boolean>;
57
- export declare function collectConnectionsHealth(options: {
58
- projectRoot: string;
59
- indexDir?: string | undefined;
60
- backend: ConnectionsHealthReport['backend'];
61
- }): Promise<ConnectionsHealthReport>;
62
- export interface ServiceActionResult {
63
- serviceId: ConnectionHealthService['id'] | null;
64
- action: 'shutdown' | 'restart';
65
- success: boolean;
66
- message: string;
67
- }
68
- /** Handle WS message type `connections.service_action` — reset or kill a service. */
69
- export declare function handleConnectionsServiceAction(ws: WebSocket, message: WSClientMessage, context: ConnectionsHealthContext): Promise<boolean>;
70
9
  //# sourceMappingURL=connections-health-route.d.ts.map