@wrongstack/webui-server 0.295.0 → 0.295.1
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 +6466 -5762
- package/dist/index.js.map +4 -4
- package/dist/protocol/client-integrations.d.ts +1 -1
- package/dist/protocol/client-integrations.d.ts.map +1 -1
- package/dist/protocol/index.d.ts +1 -0
- package/dist/protocol/index.d.ts.map +1 -1
- package/dist/protocol/index.js +33 -1
- package/dist/protocol/index.js.map +3 -3
- package/dist/protocol/projections.d.ts +2 -0
- package/dist/protocol/projections.d.ts.map +1 -1
- package/dist/protocol/registry.d.ts +2 -2
- package/dist/protocol/registry.d.ts.map +1 -1
- package/dist/protocol/replay-payload.d.ts +41 -0
- package/dist/protocol/replay-payload.d.ts.map +1 -0
- package/dist/protocol/server-integrations.d.ts +1 -1
- package/dist/protocol/server-integrations.d.ts.map +1 -1
- package/dist/protocol/server-workspace.d.ts +1 -1
- package/dist/protocol/server-workspace.d.ts.map +1 -1
- package/dist/protocol/version.d.ts +1 -1
- package/dist/protocol/version.d.ts.map +1 -1
- package/dist/server/agent-roster-handlers.d.ts +5 -1
- package/dist/server/agent-roster-handlers.d.ts.map +1 -1
- package/dist/server/brain-handlers.d.ts.map +1 -1
- package/dist/server/chronicle-routes.d.ts +3 -1
- package/dist/server/chronicle-routes.d.ts.map +1 -1
- package/dist/server/codebase-indexing.d.ts.map +1 -1
- package/dist/server/codemap-cache.d.ts +14 -0
- package/dist/server/codemap-cache.d.ts.map +1 -0
- package/dist/server/codemap-handlers.d.ts +2 -3
- package/dist/server/codemap-handlers.d.ts.map +1 -1
- package/dist/server/connection-handler.d.ts +2 -1
- package/dist/server/connection-handler.d.ts.map +1 -1
- package/dist/server/embedded-lifecycle.d.ts.map +1 -1
- package/dist/server/entry.js +5549 -4991
- package/dist/server/entry.js.map +4 -4
- package/dist/server/index.d.ts +3 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/kanban-board-watcher.d.ts +19 -0
- package/dist/server/kanban-board-watcher.d.ts.map +1 -0
- package/dist/server/kanban-dispatch.d.ts +1 -0
- package/dist/server/kanban-dispatch.d.ts.map +1 -1
- package/dist/server/kanban-routes.d.ts +8 -0
- package/dist/server/kanban-routes.d.ts.map +1 -1
- package/dist/server/kanban-run-mirror.d.ts.map +1 -1
- package/dist/server/kanban-supervisor.d.ts.map +1 -1
- package/dist/server/message-dispatcher.d.ts.map +1 -1
- package/dist/server/network-info.d.ts +50 -0
- package/dist/server/network-info.d.ts.map +1 -0
- package/dist/server/pre-context-services.d.ts +1 -1
- package/dist/server/pre-context-services.d.ts.map +1 -1
- package/dist/server/sdd-board-ws-handler.d.ts.map +1 -1
- package/dist/server/sdd-wizard-wiring.d.ts +7 -1
- package/dist/server/sdd-wizard-wiring.d.ts.map +1 -1
- package/dist/server/session-handlers.d.ts +1 -1
- package/dist/server/session-handlers.d.ts.map +1 -1
- package/dist/server/setup-events.d.ts.map +1 -1
- package/dist/server/start-webui.d.ts.map +1 -1
- package/dist/server/ws-auth.d.ts.map +1 -1
- package/package.json +10 -10
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const CLIENT_KNOWLEDGE_MESSAGE_TYPES: readonly ['brain.ask', 'brain.config.get', 'brain.config.set', 'brain.risk', 'brain.status', 'chronicle.facet', 'chronicle.facets', 'chronicle.graph', 'chronicle.query', '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'];
|
|
1
|
+
export declare const CLIENT_KNOWLEDGE_MESSAGE_TYPES: readonly ['brain.ask', 'brain.config.get', 'brain.config.set', 'brain.risk', 'brain.status', 'chronicle.facet', 'chronicle.facets', 'chronicle.graph', 'chronicle.metrics', 'chronicle.query', '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'];
|
|
2
2
|
export declare const CLIENT_EXTENSION_MESSAGE_TYPES: readonly ['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'];
|
|
3
3
|
//# sourceMappingURL=client-integrations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-integrations.d.ts","sourceRoot":"","sources":["../../src/protocol/client-integrations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,YACzC,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,YAAY,EACZ,eAAe,EACf,aAAa,EACb,iCAAiC,EACjC,8BAA8B,EAC9B,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,CACZ,CAAC;AAEX,eAAO,MAAM,8BAA8B,YACzC,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,aAAa,EACb,cAAc,EACd,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,eAAe,CACP,CAAC"}
|
|
1
|
+
{"version":3,"file":"client-integrations.d.ts","sourceRoot":"","sources":["../../src/protocol/client-integrations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,YACzC,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,YAAY,EACZ,eAAe,EACf,aAAa,EACb,iCAAiC,EACjC,8BAA8B,EAC9B,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,CACZ,CAAC;AAEX,eAAO,MAAM,8BAA8B,YACzC,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,aAAa,EACb,cAAc,EACd,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,eAAe,CACP,CAAC"}
|
package/dist/protocol/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { createSurfaceConnectionState, DEFAULT_SURFACE_CONNECTION_CONFIG, enqueueBounded, isConnectionHeartbeatTimedOut, markConnectionActivity, markConnectionConnecting, markConnectionOpen, planConnectionReconnect, type ReconnectPlan, resetConnection, type SurfaceConnectionConfig, type SurfaceConnectionPhase, type SurfaceConnectionState, stopConnection, } from './connection-fsm.js';
|
|
2
2
|
export { decodeProtocolFrame, decodeProtocolMessage } from './decoder.js';
|
|
3
3
|
export { type ChatProjection, type FleetProjection, type HqAlertProjection, type HqCommandStatusProjection, type HqEventProjection, type HqFleetProjection, projectChatMessage, projectFleetMessage, projectHqAlertMessage, projectHqCommandStatusMessage, projectHqEventMessage, projectHqFleetMessage, projectSessionMessage, projectToolMessage, type SessionProjection, type ToolProjection, } from './projections.js';
|
|
4
|
+
export { buildReplayPayload, REPLAY_MESSAGE_CAP, type ReplayPayloadFields, type ReplaySource, } from './replay-payload.js';
|
|
4
5
|
export { CLIENT_MESSAGE_TYPES, type ExactClientMessageType, type ExactServerMessageType, isRegisteredMessageType, SERVER_MESSAGE_TYPES, } from './registry.js';
|
|
5
6
|
export type { CanonicalClientMessage, CanonicalClientMessageType, CanonicalServerMessage, CanonicalServerMessageType, ProtocolDecodeIssue, ProtocolDecodeResult, ProtocolDirection, ProtocolEnvelope, } from './types.js';
|
|
6
7
|
export { negotiateProtocol, type ProtocolAdvertisement, type ProtocolNegotiation, protocolAdvertisement, SURFACE_PROTOCOL_CAPABILITIES, SURFACE_PROTOCOL_MIN_VERSION, SURFACE_PROTOCOL_VERSION, type SurfaceProtocolCapability, } from './version.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/protocol/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,iCAAiC,EACjC,cAAc,EACd,6BAA6B,EAC7B,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,aAAa,EAClB,eAAe,EACf,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,6BAA6B,EAC7B,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,EACpB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,sBAAsB,EACtB,0BAA0B,EAC1B,sBAAsB,EACtB,0BAA0B,EAC1B,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,qBAAqB,EACrB,6BAA6B,EAC7B,4BAA4B,EAC5B,wBAAwB,EACxB,KAAK,yBAAyB,GAC/B,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/protocol/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,iCAAiC,EACjC,cAAc,EACd,6BAA6B,EAC7B,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,aAAa,EAClB,eAAe,EACf,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,6BAA6B,EAC7B,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,oBAAoB,EACpB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,sBAAsB,EACtB,0BAA0B,EAC1B,sBAAsB,EACtB,0BAA0B,EAC1B,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,qBAAqB,EACrB,6BAA6B,EAC7B,4BAA4B,EAC5B,wBAAwB,EACxB,KAAK,yBAAyB,GAC/B,MAAM,cAAc,CAAC"}
|
package/dist/protocol/index.js
CHANGED
|
@@ -124,6 +124,7 @@ var CLIENT_KNOWLEDGE_MESSAGE_TYPES = [
|
|
|
124
124
|
"chronicle.facet",
|
|
125
125
|
"chronicle.facets",
|
|
126
126
|
"chronicle.graph",
|
|
127
|
+
"chronicle.metrics",
|
|
127
128
|
"chronicle.query",
|
|
128
129
|
"config.doctor",
|
|
129
130
|
"design.list",
|
|
@@ -378,6 +379,7 @@ var SERVER_KNOWLEDGE_MESSAGE_TYPES = [
|
|
|
378
379
|
"chronicle.facet_result",
|
|
379
380
|
"chronicle.facets_result",
|
|
380
381
|
"chronicle.graph_result",
|
|
382
|
+
"chronicle.metrics_result",
|
|
381
383
|
"chronicle.query_result",
|
|
382
384
|
"config.doctor.result",
|
|
383
385
|
"design.list",
|
|
@@ -500,6 +502,7 @@ var SERVER_AUTOMATION_MESSAGE_TYPES = [
|
|
|
500
502
|
var SERVER_WORKSPACE_MESSAGE_TYPES = [
|
|
501
503
|
"checkpoint.written",
|
|
502
504
|
"codemap.file_event",
|
|
505
|
+
"codemap.index_updated",
|
|
503
506
|
"codemap.tool_executed",
|
|
504
507
|
"codemap.tool_started",
|
|
505
508
|
"file.saved",
|
|
@@ -653,6 +656,7 @@ function projectSessionMessage(message) {
|
|
|
653
656
|
maxContext: finite(payload["maxContext"]),
|
|
654
657
|
reset: payload["reset"] === true,
|
|
655
658
|
replayMessages: Array.isArray(payload["replayMessages"]) ? payload["replayMessages"] : null,
|
|
659
|
+
replayMarkers: Array.isArray(payload["replayMarkers"]) ? payload["replayMarkers"] : null,
|
|
656
660
|
replayUsage: record(payload["replayUsage"])
|
|
657
661
|
};
|
|
658
662
|
}
|
|
@@ -779,6 +783,31 @@ function projectHqCommandStatusMessage(message) {
|
|
|
779
783
|
return { kind: "hq-command-status", command };
|
|
780
784
|
}
|
|
781
785
|
|
|
786
|
+
// src/protocol/replay-payload.ts
|
|
787
|
+
import { CHAT_MARKER_SOURCES, projectSessionMarkers } from "@wrongstack/core/types";
|
|
788
|
+
var REPLAY_MESSAGE_CAP = 2e3;
|
|
789
|
+
function buildReplayPayload(source) {
|
|
790
|
+
const out = {};
|
|
791
|
+
const messages = source.messages;
|
|
792
|
+
if (messages.length > 0) {
|
|
793
|
+
out.replayMessages = messages.length > REPLAY_MESSAGE_CAP ? messages.slice(-REPLAY_MESSAGE_CAP) : [...messages];
|
|
794
|
+
}
|
|
795
|
+
if (source.events && source.events.length > 0) {
|
|
796
|
+
const markers = projectSessionMarkers(source.events, CHAT_MARKER_SOURCES);
|
|
797
|
+
if (markers.length > 0) out.replayMarkers = markers;
|
|
798
|
+
}
|
|
799
|
+
const usage = source.usage;
|
|
800
|
+
if (usage && usage.input + usage.output + (usage.cacheRead ?? 0) + (usage.cacheWrite ?? 0) > 0) {
|
|
801
|
+
out.replayUsage = {
|
|
802
|
+
input: usage.input,
|
|
803
|
+
output: usage.output,
|
|
804
|
+
cacheRead: usage.cacheRead ?? 0,
|
|
805
|
+
cacheWrite: usage.cacheWrite ?? 0
|
|
806
|
+
};
|
|
807
|
+
}
|
|
808
|
+
return out;
|
|
809
|
+
}
|
|
810
|
+
|
|
782
811
|
// src/protocol/version.ts
|
|
783
812
|
var SURFACE_PROTOCOL_VERSION = 1;
|
|
784
813
|
var SURFACE_PROTOCOL_MIN_VERSION = 1;
|
|
@@ -788,7 +817,8 @@ var SURFACE_PROTOCOL_CAPABILITIES = [
|
|
|
788
817
|
"chronicle.query",
|
|
789
818
|
"chronicle.facet",
|
|
790
819
|
"chronicle.facets",
|
|
791
|
-
"chronicle.graph"
|
|
820
|
+
"chronicle.graph",
|
|
821
|
+
"chronicle.metrics"
|
|
792
822
|
];
|
|
793
823
|
function protocolAdvertisement() {
|
|
794
824
|
return {
|
|
@@ -812,10 +842,12 @@ function negotiateProtocol(peer) {
|
|
|
812
842
|
export {
|
|
813
843
|
CLIENT_MESSAGE_TYPES,
|
|
814
844
|
DEFAULT_SURFACE_CONNECTION_CONFIG,
|
|
845
|
+
REPLAY_MESSAGE_CAP,
|
|
815
846
|
SERVER_MESSAGE_TYPES,
|
|
816
847
|
SURFACE_PROTOCOL_CAPABILITIES,
|
|
817
848
|
SURFACE_PROTOCOL_MIN_VERSION,
|
|
818
849
|
SURFACE_PROTOCOL_VERSION,
|
|
850
|
+
buildReplayPayload,
|
|
819
851
|
createSurfaceConnectionState,
|
|
820
852
|
decodeProtocolFrame,
|
|
821
853
|
decodeProtocolMessage,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../src/protocol/connection-fsm.ts", "../../src/protocol/client-conversation.ts", "../../src/protocol/client-integrations.ts", "../../src/protocol/client-operations.ts", "../../src/protocol/client-workspace.ts", "../../src/protocol/server-conversation.ts", "../../src/protocol/server-integrations.ts", "../../src/protocol/server-operations.ts", "../../src/protocol/server-workspace.ts", "../../src/protocol/registry.ts", "../../src/protocol/decoder.ts", "../../src/protocol/projections.ts", "../../src/protocol/version.ts"],
|
|
4
|
-
"sourcesContent": ["export type SurfaceConnectionPhase = 'idle' | 'connecting' | 'open' | 'reconnecting' | 'closed';\n\nexport interface SurfaceConnectionConfig {\n maxReconnectAttempts: number;\n initialBackoffMs: number;\n maxBackoffMs: number;\n backoffMultiplier: number;\n jitterRatio: number;\n queueLimit: number;\n heartbeatIntervalMs: number;\n heartbeatTimeoutMs: number;\n}\n\nexport interface SurfaceConnectionState {\n phase: SurfaceConnectionPhase;\n reconnectAttempt: number;\n lastActivityAt: number | null;\n stopped: boolean;\n}\n\nexport interface ReconnectPlan {\n attempt: number;\n delayMs: number;\n retryAt: number;\n}\n\nexport const DEFAULT_SURFACE_CONNECTION_CONFIG: SurfaceConnectionConfig = {\n maxReconnectAttempts: 10,\n initialBackoffMs: 1_000,\n maxBackoffMs: 30_000,\n backoffMultiplier: 2,\n jitterRatio: 0,\n queueLimit: 1_000,\n heartbeatIntervalMs: 0,\n heartbeatTimeoutMs: 0,\n};\n\nexport function createSurfaceConnectionState(): SurfaceConnectionState {\n return { phase: 'idle', reconnectAttempt: 0, lastActivityAt: null, stopped: false };\n}\n\nexport function markConnectionConnecting(state: SurfaceConnectionState): SurfaceConnectionState {\n if (state.stopped) return state;\n return { ...state, phase: 'connecting' };\n}\n\nexport function markConnectionOpen(\n state: SurfaceConnectionState,\n now = Date.now(),\n): SurfaceConnectionState {\n return {\n ...state,\n phase: 'open',\n reconnectAttempt: 0,\n lastActivityAt: now,\n stopped: false,\n };\n}\n\nexport function markConnectionActivity(\n state: SurfaceConnectionState,\n now = Date.now(),\n): SurfaceConnectionState {\n return { ...state, lastActivityAt: now };\n}\n\nexport function stopConnection(state: SurfaceConnectionState): SurfaceConnectionState {\n return { ...state, phase: 'closed', stopped: true };\n}\n\nexport function resetConnection(state: SurfaceConnectionState): SurfaceConnectionState {\n return { ...state, phase: 'idle', reconnectAttempt: 0, stopped: false };\n}\n\nexport function planConnectionReconnect(\n state: SurfaceConnectionState,\n config: SurfaceConnectionConfig,\n now = Date.now(),\n random = Math.random,\n): { state: SurfaceConnectionState; plan: ReconnectPlan | null } {\n if (state.stopped || state.reconnectAttempt >= config.maxReconnectAttempts) {\n return { state: { ...state, phase: 'closed' }, plan: null };\n }\n const attempt = state.reconnectAttempt + 1;\n const base = Math.min(\n config.initialBackoffMs * config.backoffMultiplier ** (attempt - 1),\n config.maxBackoffMs,\n );\n const centeredJitter = (random() * 2 - 1) * config.jitterRatio;\n const delayMs = Math.max(0, Math.round(base * (1 + centeredJitter)));\n return {\n state: { ...state, phase: 'reconnecting', reconnectAttempt: attempt },\n plan: { attempt, delayMs, retryAt: now + delayMs },\n };\n}\n\nexport function isConnectionHeartbeatTimedOut(\n state: SurfaceConnectionState,\n config: SurfaceConnectionConfig,\n now = Date.now(),\n): boolean {\n if (state.phase !== 'open' || state.lastActivityAt === null) return false;\n if (config.heartbeatIntervalMs <= 0) return false;\n return now - state.lastActivityAt > config.heartbeatIntervalMs + config.heartbeatTimeoutMs;\n}\n\nexport function enqueueBounded<T>(\n queue: readonly T[],\n item: T,\n limit: number,\n): { queue: T[]; dropped: T | null } {\n if (limit <= 0) return { queue: [], dropped: item };\n if (queue.length < limit) return { queue: [...queue, item], dropped: null };\n return { queue: [...queue.slice(queue.length - limit + 1), item], dropped: queue[0] ?? null };\n}\n", "export const CLIENT_CONVERSATION_MESSAGE_TYPES = [\n 'abort',\n 'ping',\n 'user_message',\n 'tool.confirm_result',\n 'completion.request',\n 'model.switch',\n 'model.refine',\n 'autonomy.switch',\n 'context.clear',\n 'context.compact',\n 'context.debug',\n 'context.mode.create',\n 'context.mode.delete',\n 'context.mode.switch',\n 'context.mode.update',\n 'context.modes.list',\n 'context.repair',\n 'mode.switch',\n 'modes.list',\n 'session.checkpoints',\n 'session.delete',\n 'session.new',\n 'session.rename',\n 'session.resume',\n 'session.rewind',\n 'session.save',\n 'sessions.list',\n 'side_effects.list',\n 'stats.get',\n 'todo.update',\n 'todos.clear',\n 'todos.get',\n 'todos.remove',\n] as const;\n\nexport const CLIENT_COLLABORATION_MESSAGE_TYPES = [\n 'collab.join',\n 'collab.leave',\n 'collab.annotate',\n 'collab.resolve',\n 'collab.request_pause',\n 'collab.resume',\n 'collab.grant_control',\n 'collab.inject_tool',\n 'mailbox.agents',\n 'mailbox.clear',\n 'mailbox.compact',\n 'mailbox.messages',\n 'mailbox.purge',\n 'mailbox.send',\n] as const;\n", "export const CLIENT_KNOWLEDGE_MESSAGE_TYPES = [\n 'brain.ask',\n 'brain.config.get',\n 'brain.config.set',\n 'brain.risk',\n 'brain.status',\n 'chronicle.facet',\n 'chronicle.facets',\n 'chronicle.graph',\n 'chronicle.query',\n 'config.doctor',\n 'design.list',\n 'design.materialize',\n 'design.set',\n 'design.state',\n 'design.swap',\n 'design.tune',\n 'design.use',\n 'design.verify',\n 'memory.list',\n 'memory.sage.backfillRecoverable',\n 'memory.sage.candidateResolve',\n 'memory.sage.delete',\n 'memory.sage.forFile',\n 'memory.sage.get',\n 'memory.sage.graph',\n 'memory.sage.list',\n 'memory.sage.listPage',\n 'memory.sage.recover',\n 'memory.sage.remember',\n 'memory.sage.update',\n] as const;\n\nexport const CLIENT_EXTENSION_MESSAGE_TYPES = [\n 'auth.oauth.cancel',\n 'auth.oauth.code',\n 'auth.oauth.start',\n 'mcp.add',\n 'mcp.disable',\n 'mcp.discover',\n 'mcp.enable',\n 'mcp.list',\n 'mcp.prompt.get',\n 'mcp.prompts',\n 'mcp.remove',\n 'mcp.resource.read',\n 'mcp.resources',\n 'mcp.restart',\n 'mcp.sleep',\n 'mcp.update',\n 'mcp.wake',\n 'prompts.content',\n 'prompts.create',\n 'prompts.favorite',\n 'prompts.list',\n 'prompts.recent',\n 'prompts.search',\n 'prompts.used',\n 'skills.content',\n 'skills.create',\n 'skills.edit',\n 'skills.export',\n 'skills.install',\n 'skills.list',\n 'skills.uninstall',\n 'skills.update',\n] as const;\n", "export const CLIENT_GOAL_MESSAGE_TYPES = [\n 'goal-state.get',\n 'goal.addTask',\n 'goal.assignTask',\n 'goal.clear',\n 'goal.get',\n 'goal.list',\n 'goal.load',\n 'goal.moveTask',\n 'goal.pause',\n 'goal.resume',\n 'goal.retryTask',\n 'goal.revert',\n 'goal.runTask',\n 'goal.save',\n 'goal.selectPhase',\n 'goal.start',\n 'goal.state',\n 'goal.status',\n 'goal.stop',\n 'goal.taskStatus',\n 'goal.toggleAutonomous',\n 'plan.get',\n 'plan.item.update',\n 'plan.template_use',\n 'task.update',\n 'tasks.get',\n] as const;\n\nexport const CLIENT_SDD_MESSAGE_TYPES = [\n 'sdd.board.cancel_task',\n 'sdd.board.cleanup_worktrees',\n 'sdd.board.delete_task',\n 'sdd.board.destroy',\n 'sdd.board.get',\n 'sdd.board.list',\n 'sdd.board.pause',\n 'sdd.board.reassign',\n 'sdd.board.resume',\n 'sdd.board.retry',\n 'sdd.board.retry_all_failed',\n 'sdd.board.rollback',\n 'sdd.board.set_task_fallbacks',\n 'sdd.board.set_task_model',\n 'sdd.board.set_task_verification',\n 'sdd.board.split_task',\n 'sdd.board.stop',\n 'sdd.run.start',\n 'sdd.spec.approve',\n 'sdd.spec.get',\n 'sdd.spec.message',\n 'sdd.spec.start',\n 'specs.get',\n 'specs.list',\n 'specs.taskStatus',\n] as const;\n", "export const CLIENT_WORKSPACE_MESSAGE_TYPES = [\n 'files.list',\n 'files.read',\n 'files.tree',\n 'files.write',\n 'git.changes',\n 'git.diff',\n 'git.info',\n 'projects.add',\n 'projects.list',\n 'projects.select',\n 'working_dir.set',\n 'worktree.cleanup',\n 'worktree.diff',\n 'worktree.merge',\n 'worktree.remove',\n 'worktree.scan',\n 'shell.open',\n 'process.kill',\n 'process.killAll',\n 'process.list',\n 'terminal.close',\n 'terminal.create',\n 'terminal.input',\n 'terminal.resize',\n] as const;\n\nexport const CLIENT_CONFIGURATION_MESSAGE_TYPES = [\n 'diag.get',\n 'key.add',\n 'key.delete',\n 'key.set_active',\n 'key.update',\n 'prefs.get',\n 'prefs.update',\n 'provider.add',\n 'provider.clear_models',\n 'provider.models',\n 'provider.probe',\n 'provider.remove',\n 'provider.undo_clear',\n 'provider.update',\n 'providers.list',\n 'providers.saved',\n 'tool.disable',\n 'tool.enable',\n 'tools.list',\n 'webui.shutdown',\n] as const;\n", "export const SERVER_CONVERSATION_MESSAGE_TYPES = [\n 'error',\n 'log',\n 'pong',\n 'side_effects',\n 'agent.status_changed',\n 'agent.timeline.message',\n 'client.status_update',\n 'compaction.failed',\n 'completion.result',\n 'context.compacted',\n 'context.debug',\n 'context.mode.changed',\n 'context.modes.list',\n 'context.repaired',\n 'ctx.max_context',\n 'ctx.pct',\n 'delegate.completed',\n 'delegate.started',\n 'iteration.completed',\n 'iteration.limit_reached',\n 'iteration.started',\n 'model.refine_result',\n 'modes.list',\n 'provider.active_blocked',\n 'provider.error',\n 'provider.fallback',\n 'provider.response',\n 'provider.retry',\n 'provider.status_changed',\n 'provider.stream_error',\n 'provider.text_delta',\n 'provider.thinking_delta',\n 'run.result',\n 'session.checkpoints',\n 'session.damaged',\n 'session.end',\n 'session.rewound',\n 'session.start',\n 'session.stats',\n 'sessions.list',\n 'sessions.status_update',\n 'stats.get',\n 'token.cost_estimate_unavailable',\n 'token.threshold',\n 'tool.confirm_needed',\n 'tool.disabled',\n 'tool.enabled',\n 'tool.executed',\n 'tool.loop_detected',\n 'tool.progress',\n 'tool.started',\n 'tools.list',\n 'trust.persisted',\n] as const;\n\nexport const SERVER_COLLABORATION_MESSAGE_TYPES = [\n 'collab.annotation.added',\n 'collab.annotation.resolved',\n 'collab.event',\n 'collab.injection.granted',\n 'collab.participant.joined',\n 'collab.participant.left',\n 'collab.pause.granted',\n 'collab.pause.released',\n 'collab.state',\n 'mailbox.agent_registered',\n 'mailbox.agents',\n 'mailbox.cleared',\n 'mailbox.compacted',\n 'mailbox.event',\n 'mailbox.messages',\n 'mailbox.sent',\n 'mailbox.purged',\n 'mailbox.received',\n 'subagent.budget_extended',\n 'subagent.event',\n] as const;\n", "export const SERVER_KNOWLEDGE_MESSAGE_TYPES = [\n 'brain.answer',\n 'brain.config',\n 'brain.event',\n 'brain.status',\n 'chronicle.error',\n 'chronicle.facet_result',\n 'chronicle.facets_result',\n 'chronicle.graph_result',\n 'chronicle.query_result',\n 'config.doctor.result',\n 'design.list',\n 'design.materialize',\n 'design.set',\n 'design.state',\n 'design.swap',\n 'design.tune',\n 'design.use',\n 'design.verify',\n 'memory.event',\n 'memory.list',\n 'memory.sage.backfillRecoverable',\n 'memory.sage.candidateResolve',\n 'memory.sage.delete',\n 'memory.sage.forFile',\n 'memory.sage.get',\n 'memory.sage.graph',\n 'memory.sage.list',\n 'memory.sage.listPage',\n 'memory.sage.recover',\n 'memory.sage.remember',\n 'memory.sage.update',\n] as const;\n\nexport const SERVER_EXTENSION_MESSAGE_TYPES = [\n 'mcp.content.error',\n 'mcp.content.selected',\n 'mcp.list',\n 'mcp.operation_result',\n 'mcp.prompts',\n 'mcp.resources',\n 'mcp.server.added',\n 'mcp.server.connected',\n 'mcp.server.disconnected',\n 'mcp.server.discovered',\n 'mcp.server.error',\n 'mcp.server.reconnected',\n 'mcp.server.removed',\n 'mcp.server.sleeping',\n 'mcp.server.updated',\n 'mcp.server.waking',\n 'prompts.content',\n 'prompts.created',\n 'prompts.favorite',\n 'prompts.list',\n 'prompts.recent',\n 'prompts.search',\n 'prompts.used',\n 'skills.content',\n 'skills.created',\n 'skills.edited',\n 'skills.exported',\n 'skills.installed',\n 'skills.list',\n 'skills.uninstalled',\n 'skills.updated',\n] as const;\n", "export const SERVER_GOAL_MESSAGE_TYPES = [\n 'budget.decision',\n 'budget.threshold_reached',\n 'coordinator.stats',\n 'coordinator.status',\n 'eternal.iteration',\n 'fleet.concurrency_update',\n 'goal-state.updated',\n 'goal.list',\n 'goal.paused',\n 'goal.resumed',\n 'goal.saved',\n 'goal.error',\n 'goal.stopped',\n 'goal.failed',\n 'goal.completed',\n 'goal.cleared',\n 'goal.reverted',\n 'goal.progress',\n 'goal.state',\n 'in_flight.ended',\n 'in_flight.started',\n 'plan.updated',\n 'task.completed',\n 'task.failed',\n 'task.pending',\n 'task.started',\n 'tasks.updated',\n 'todos.cleared',\n 'todos.updated',\n] as const;\n\nexport const SERVER_SDD_MESSAGE_TYPES = [\n 'kanban.task.activity',\n 'sdd.board.lifecycle_result',\n 'sdd.board.list',\n 'sdd.board.snapshot',\n 'sdd.run.started',\n 'sdd.spec.agent_text',\n 'sdd.spec.error',\n 'sdd.spec.snapshot',\n 'specs.detail',\n 'specs.list',\n] as const;\n\nexport const SERVER_AUTOMATION_MESSAGE_TYPES = [\n 'consensus.vote_cast',\n 'consensus.vote_initiated',\n 'consensus.vote_resolved',\n 'cron.job_fired',\n 'cron.snapshot',\n 'techstack.job.cancelled',\n 'techstack.job.failed',\n 'techstack.job.progress',\n 'techstack.job.started',\n 'techstack.report.delivered',\n 'techstack.report.ready',\n 'techstack.snapshot.updated',\n 'techstack.workspace.completed',\n] as const;\n", "export const SERVER_WORKSPACE_MESSAGE_TYPES = [\n 'checkpoint.written',\n 'codemap.file_event',\n 'codemap.tool_executed',\n 'codemap.tool_started',\n 'file.saved',\n 'files.list',\n 'files.read',\n 'files.tree',\n 'files.written',\n 'git.changes',\n 'git.diff',\n 'git.info',\n 'process.list',\n 'projects.added',\n 'projects.list',\n 'projects.selected',\n 'terminal.exit',\n 'terminal.output',\n 'working_dir.changed',\n 'worktree.cleanup_result',\n 'worktree.diff_result',\n 'worktree.event',\n 'worktree.merge_result',\n 'worktree.orphans',\n 'worktree.state',\n] as const;\n\nexport const SERVER_CONFIGURATION_MESSAGE_TYPES = [\n 'auth.oauth.status',\n 'diag.get',\n 'key.operation_result',\n 'prefs.updated',\n 'provider.catalog',\n 'provider.models',\n 'provider.probe',\n 'providers.saved',\n] as const;\n", "import {\n CLIENT_COLLABORATION_MESSAGE_TYPES,\n CLIENT_CONVERSATION_MESSAGE_TYPES,\n} from './client-conversation.js';\nimport {\n CLIENT_EXTENSION_MESSAGE_TYPES,\n CLIENT_KNOWLEDGE_MESSAGE_TYPES,\n} from './client-integrations.js';\nimport { CLIENT_GOAL_MESSAGE_TYPES, CLIENT_SDD_MESSAGE_TYPES } from './client-operations.js';\nimport {\n CLIENT_CONFIGURATION_MESSAGE_TYPES,\n CLIENT_WORKSPACE_MESSAGE_TYPES,\n} from './client-workspace.js';\nimport {\n SERVER_COLLABORATION_MESSAGE_TYPES,\n SERVER_CONVERSATION_MESSAGE_TYPES,\n} from './server-conversation.js';\nimport {\n SERVER_EXTENSION_MESSAGE_TYPES,\n SERVER_KNOWLEDGE_MESSAGE_TYPES,\n} from './server-integrations.js';\nimport {\n SERVER_AUTOMATION_MESSAGE_TYPES,\n SERVER_GOAL_MESSAGE_TYPES,\n SERVER_SDD_MESSAGE_TYPES,\n} from './server-operations.js';\nimport {\n SERVER_CONFIGURATION_MESSAGE_TYPES,\n SERVER_WORKSPACE_MESSAGE_TYPES,\n} from './server-workspace.js';\n\nexport const CLIENT_MESSAGE_TYPES = [\n ...CLIENT_CONVERSATION_MESSAGE_TYPES,\n ...CLIENT_COLLABORATION_MESSAGE_TYPES,\n ...CLIENT_WORKSPACE_MESSAGE_TYPES,\n ...CLIENT_CONFIGURATION_MESSAGE_TYPES,\n ...CLIENT_GOAL_MESSAGE_TYPES,\n ...CLIENT_SDD_MESSAGE_TYPES,\n ...CLIENT_KNOWLEDGE_MESSAGE_TYPES,\n ...CLIENT_EXTENSION_MESSAGE_TYPES,\n] as const;\n\nexport const SERVER_MESSAGE_TYPES = [\n ...SERVER_CONVERSATION_MESSAGE_TYPES,\n ...SERVER_COLLABORATION_MESSAGE_TYPES,\n ...SERVER_WORKSPACE_MESSAGE_TYPES,\n ...SERVER_CONFIGURATION_MESSAGE_TYPES,\n ...SERVER_GOAL_MESSAGE_TYPES,\n ...SERVER_SDD_MESSAGE_TYPES,\n ...SERVER_AUTOMATION_MESSAGE_TYPES,\n ...SERVER_KNOWLEDGE_MESSAGE_TYPES,\n ...SERVER_EXTENSION_MESSAGE_TYPES,\n] as const;\n\nexport type ExactClientMessageType = (typeof CLIENT_MESSAGE_TYPES)[number];\nexport type ExactServerMessageType = (typeof SERVER_MESSAGE_TYPES)[number];\n\nconst CLIENT_TYPE_SET: ReadonlySet<string> = new Set(CLIENT_MESSAGE_TYPES);\nconst SERVER_TYPE_SET: ReadonlySet<string> = new Set(SERVER_MESSAGE_TYPES);\n\nexport function isRegisteredMessageType(type: string, direction: 'client' | 'server'): boolean {\n const exact = direction === 'client' ? CLIENT_TYPE_SET : SERVER_TYPE_SET;\n return (\n exact.has(type) ||\n (type.startsWith('kanban.') && type.length > 'kanban.'.length) ||\n (type.startsWith('agent-roster.') && type.length > 'agent-roster.'.length)\n );\n}\n", "import { isRegisteredMessageType } from './registry.js';\nimport type {\n CanonicalClientMessage,\n CanonicalServerMessage,\n ProtocolDecodeIssue,\n ProtocolDecodeResult,\n ProtocolDirection,\n ProtocolEnvelope,\n} from './types.js';\n\nconst FORBIDDEN_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\nconst MAX_PAYLOAD_DEPTH = 32;\n\nfunction inspectValue(value: unknown, path: string, depth: number): ProtocolDecodeIssue | null {\n if (depth > MAX_PAYLOAD_DEPTH) {\n return { code: 'too_deep', message: 'Protocol payload exceeds the nesting limit', path };\n }\n if (value === null || typeof value !== 'object') return null;\n\n for (const key of Object.keys(value)) {\n const childPath = `${path}.${key}`;\n if (FORBIDDEN_KEYS.has(key)) {\n return { code: 'unsafe_key', message: `Unsafe protocol key: ${key}`, path: childPath };\n }\n const issue = inspectValue((value as Record<string, unknown>)[key], childPath, depth + 1);\n if (issue) return issue;\n }\n return null;\n}\n\nexport function decodeProtocolMessage(\n input: unknown,\n direction: 'client',\n): ProtocolDecodeResult<CanonicalClientMessage>;\nexport function decodeProtocolMessage(\n input: unknown,\n direction: 'server',\n): ProtocolDecodeResult<CanonicalServerMessage>;\nexport function decodeProtocolMessage(\n input: unknown,\n direction: ProtocolDirection,\n): ProtocolDecodeResult<ProtocolEnvelope> {\n if (input === null || typeof input !== 'object' || Array.isArray(input)) {\n return {\n ok: false,\n issue: { code: 'invalid_envelope', message: 'Protocol message must be an object' },\n };\n }\n\n const envelope = input as Record<string, unknown>;\n if (typeof envelope['type'] !== 'string' || envelope['type'].length === 0) {\n return {\n ok: false,\n issue: { code: 'invalid_type', message: 'Protocol message type must be a non-empty string' },\n };\n }\n if (!isRegisteredMessageType(envelope['type'], direction)) {\n return {\n ok: false,\n issue: { code: 'unknown_type', message: `Unknown ${direction} message: ${envelope['type']}` },\n };\n }\n if (direction === 'server' && !Object.hasOwn(envelope, 'payload')) {\n return {\n ok: false,\n issue: { code: 'invalid_envelope', message: 'Server protocol messages require a payload' },\n };\n }\n\n const issue = inspectValue(envelope, '$', 0);\n if (issue) return { ok: false, issue };\n return { ok: true, message: input as ProtocolEnvelope };\n}\n\nexport function decodeProtocolFrame(\n frame: string,\n direction: 'client',\n): ProtocolDecodeResult<CanonicalClientMessage>;\nexport function decodeProtocolFrame(\n frame: string,\n direction: 'server',\n): ProtocolDecodeResult<CanonicalServerMessage>;\nexport function decodeProtocolFrame(\n frame: string,\n direction: ProtocolDirection,\n): ProtocolDecodeResult<ProtocolEnvelope> {\n try {\n return decodeProtocolMessage(JSON.parse(frame), direction as 'client');\n } catch {\n return {\n ok: false,\n issue: { code: 'invalid_envelope', message: 'Protocol frame is not valid JSON' },\n };\n }\n}\n", "import type { HqAlertMessage, HqCommandAuditEntry, HqEventEnvelope, HqSnapshot } from '@wrongstack/core/hq';\nimport type { ProtocolEnvelope } from './types.js';\n\nfunction record(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction text(value: unknown, fallback = ''): string {\n return typeof value === 'string' ? value : fallback;\n}\n\nfunction finite(value: unknown, fallback = 0): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : fallback;\n}\n\n/** When a key is present it must be an array; when absent it is acceptable. */\nfunction optionalArray(value: unknown): boolean {\n return value === undefined || Array.isArray(value);\n}\n\n/** Validate that all required numeric fields of a totals object are finite. */\nfunction isValidHqTotals(totals: Record<string, unknown>): boolean {\n return (\n finite(totals['activeProjects']) === totals['activeProjects'] &&\n finite(totals['activeClients']) === totals['activeClients'] &&\n finite(totals['activeSessions']) === totals['activeSessions'] &&\n finite(totals['activeSubagents']) === totals['activeSubagents'] &&\n finite(totals['unreadMailboxMessages']) === totals['unreadMailboxMessages'] &&\n finite(totals['incompleteMailboxMessages']) === totals['incompleteMailboxMessages'] &&\n finite(totals['totalCostUsd']) === totals['totalCostUsd']\n );\n}\n\nexport interface SessionProjection {\n kind: 'session';\n id: string;\n provider: string;\n model: string;\n projectName: string;\n cwd: string;\n maxContext: number;\n reset: boolean;\n replayMessages: unknown[] | null;\n replayUsage: Record<string, unknown> | null;\n}\n\nexport function projectSessionMessage(message: ProtocolEnvelope): SessionProjection | null {\n if (message.type !== 'session.start') return null;\n const payload = record(message.payload);\n if (!payload) return null;\n return {\n kind: 'session',\n id: text(payload['sessionId']),\n provider: text(payload['provider']),\n model: text(payload['model']),\n projectName: text(payload['projectName'], 'Project'),\n cwd: text(payload['cwd']),\n maxContext: finite(payload['maxContext']),\n reset: payload['reset'] === true,\n replayMessages: Array.isArray(payload['replayMessages']) ? payload['replayMessages'] : null,\n replayUsage: record(payload['replayUsage']),\n };\n}\n\nexport type ChatProjection =\n | { kind: 'thinking-delta'; text: string }\n | { kind: 'text-delta'; text: string; messageId: string }\n | { kind: 'response'; content: unknown }\n | { kind: 'run-result'; status: string; iterations: number; finalText?: string | undefined }\n | { kind: 'error'; message: string };\n\nexport function projectChatMessage(message: ProtocolEnvelope): ChatProjection | null {\n const payload = record(message.payload);\n if (!payload) return null;\n switch (message.type) {\n case 'provider.thinking_delta': {\n const value = text(payload['text']);\n return value ? { kind: 'thinking-delta', text: value } : null;\n }\n case 'provider.text_delta': {\n const value = text(payload['text']);\n return value\n ? { kind: 'text-delta', text: value, messageId: text(payload['messageId']) }\n : null;\n }\n case 'provider.response':\n return { kind: 'response', content: payload['content'] };\n case 'run.result':\n return {\n kind: 'run-result',\n status: text(payload['status']),\n iterations: finite(payload['iterations'], 1),\n ...(typeof payload['finalText'] === 'string' ? { finalText: payload['finalText'] } : {}),\n };\n case 'error':\n return { kind: 'error', message: text(payload['message'], 'Run failed') };\n default:\n return null;\n }\n}\n\nexport type ToolProjection =\n | { kind: 'started'; id: string; name: string; input: unknown; messageId: string }\n | { kind: 'progress'; id: string; name: string; eventType: string; text: string }\n | {\n kind: 'executed';\n id: string;\n name: string;\n ok: boolean;\n output?: string | undefined;\n durationMs: number;\n };\n\nexport function projectToolMessage(message: ProtocolEnvelope): ToolProjection | null {\n const payload = record(message.payload);\n if (!payload) return null;\n if (message.type === 'tool.started') {\n const name = text(payload['name'], 'tool');\n return {\n kind: 'started',\n id: text(payload['id'], name),\n name,\n input: payload['input'],\n messageId: text(payload['messageId']),\n };\n }\n if (message.type === 'tool.progress') {\n const event = record(payload['event']);\n return {\n kind: 'progress',\n id: text(payload['id']),\n name: text(payload['name'], 'tool'),\n eventType: text(event?.['type']),\n text: text(event?.['text']).trim(),\n };\n }\n if (message.type === 'tool.executed') {\n return {\n kind: 'executed',\n id: text(payload['id']),\n name: text(payload['name']),\n ok: payload['ok'] !== false,\n durationMs: finite(payload['durationMs']),\n ...(typeof payload['output'] === 'string' ? { output: payload['output'] } : {}),\n };\n }\n return null;\n}\n\nexport type FleetProjection =\n | { kind: 'concurrency'; active: number; maximum: number }\n | { kind: 'client-status'; status: Record<string, unknown> }\n | { kind: 'sessions'; sessions: unknown[] }\n | { kind: 'coordinator'; agents: Array<Record<string, unknown>> };\n\nexport function projectFleetMessage(message: ProtocolEnvelope): FleetProjection | null {\n const payload = record(message.payload);\n if (!payload) return null;\n switch (message.type) {\n case 'fleet.concurrency_update':\n return {\n kind: 'concurrency',\n active: finite(payload['fleetConcurrency']),\n maximum: finite(payload['fleetConcurrencyMax']),\n };\n case 'client.status_update':\n return { kind: 'client-status', status: payload };\n case 'sessions.status_update':\n return {\n kind: 'sessions',\n sessions: Array.isArray(payload['sessions']) ? payload['sessions'] : [],\n };\n case 'coordinator.stats':\n return {\n kind: 'coordinator',\n agents: Array.isArray(payload['subagentStatuses'])\n ? payload['subagentStatuses'].filter(\n (item): item is Record<string, unknown> => record(item) !== null,\n )\n : [],\n };\n default:\n return null;\n }\n}\n\nexport interface HqFleetProjection {\n kind: 'hq-snapshot';\n snapshot: HqSnapshot;\n}\n\n/**\n * Validate the stable outer shape of an HQ fleet snapshot before a browser\n * surface commits it to state. Domain-specific records remain owned by Core;\n * this boundary only rejects truncated or unrelated wire frames.\n */\nexport function projectHqFleetMessage(message: {\n type: string;\n snapshot?: unknown;\n}): HqFleetProjection | null {\n if (message.type !== 'hq.snapshot') return null;\n const snapshot = record(message.snapshot);\n const totals = snapshot ? record(snapshot['totals']) : null;\n if (\n !snapshot ||\n typeof snapshot['generatedAt'] !== 'string' ||\n !Array.isArray(snapshot['clients']) ||\n !Array.isArray(snapshot['projects']) ||\n !Array.isArray(snapshot['sessions']) ||\n !Array.isArray(snapshot['fleets']) ||\n !Array.isArray(snapshot['mailboxes']) ||\n !totals ||\n !isValidHqTotals(totals) ||\n !optionalArray(snapshot['machines']) ||\n !optionalArray(snapshot['liveSessions']) ||\n !optionalArray(snapshot['mcpServers'])\n ) {\n return null;\n }\n return { kind: 'hq-snapshot', snapshot: snapshot as unknown as HqSnapshot };\n}\n\n// \u2500\u2500 HQ sibling projections (event, alert, command_status) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n//\n// These mirrors of projectHqFleetMessage validate the outer envelope shape of\n// hq.event / hq.alert / hq.command_status frames before the browser surface\n// commits them to store state, closing the trust-boundary gap flagged in\n// review \u2014 every branch now passes through a projection, not just hq.snapshot.\n\nexport interface HqEventProjection {\n kind: 'hq-event';\n event: HqEventEnvelope;\n}\n\nexport function projectHqEventMessage(message: {\n type: string;\n event?: unknown;\n}): HqEventProjection | null {\n if (message.type !== 'hq.event') return null;\n const event = record(message.event);\n if (\n !event ||\n typeof event['id'] !== 'string' ||\n typeof event['type'] !== 'string' ||\n typeof event['timestamp'] !== 'string' ||\n typeof event['clientId'] !== 'string' ||\n typeof event['projectId'] !== 'string' ||\n typeof event['seq'] !== 'number'\n ) {\n return null;\n }\n return { kind: 'hq-event', event: event as unknown as HqEventEnvelope };\n}\n\nexport interface HqAlertProjection {\n kind: 'hq-alert';\n alert: HqAlertMessage;\n}\n\nexport function projectHqAlertMessage(message: {\n type: string;\n severity?: unknown;\n message?: unknown;\n timestamp?: unknown;\n}): HqAlertProjection | null {\n if (message.type !== 'hq.alert') return null;\n if (\n typeof message['severity'] !== 'string' ||\n !['info', 'warn', 'error'].includes(message['severity']) ||\n typeof message['message'] !== 'string' ||\n typeof message['timestamp'] !== 'string'\n ) {\n return null;\n }\n return { kind: 'hq-alert', alert: message as unknown as HqAlertMessage };\n}\n\nexport interface HqCommandStatusProjection {\n kind: 'hq-command-status';\n command: HqCommandAuditEntry;\n}\n\nexport function projectHqCommandStatusMessage(message: {\n type: string;\n command?: unknown;\n}): HqCommandStatusProjection | null {\n if (message.type !== 'hq.command_status') return null;\n const command = record(message.command);\n if (\n !command ||\n typeof command['commandId'] !== 'string' ||\n typeof command['type'] !== 'string' ||\n typeof command['clientId'] !== 'string' ||\n typeof command['enqueuedBy'] !== 'string' ||\n typeof command['enqueuedAt'] !== 'string' ||\n typeof command['status'] !== 'string' ||\n !['queued', 'delivered', 'acked'].includes(command['status'])\n ) {\n return null;\n }\n return { kind: 'hq-command-status', command: command as unknown as HqCommandAuditEntry };\n}\n", "export const SURFACE_PROTOCOL_VERSION = 1 as const;\nexport const SURFACE_PROTOCOL_MIN_VERSION = 1 as const;\n\nexport const SURFACE_PROTOCOL_CAPABILITIES = [\n 'protocol.directional-decoder',\n 'protocol.recursive-key-safety',\n 'chronicle.query',\n 'chronicle.facet',\n 'chronicle.facets',\n 'chronicle.graph',\n] as const;\n\nexport type SurfaceProtocolCapability = (typeof SURFACE_PROTOCOL_CAPABILITIES)[number];\n\nexport interface ProtocolAdvertisement {\n protocolVersion?: number | undefined;\n protocolCapabilities?: readonly string[] | undefined;\n}\n\nexport interface ProtocolNegotiation {\n compatible: boolean;\n legacyPeer: boolean;\n version: number;\n capabilities: SurfaceProtocolCapability[];\n}\n\nexport function protocolAdvertisement(): {\n protocolVersion: typeof SURFACE_PROTOCOL_VERSION;\n protocolCapabilities: SurfaceProtocolCapability[];\n} {\n return {\n protocolVersion: SURFACE_PROTOCOL_VERSION,\n protocolCapabilities: [...SURFACE_PROTOCOL_CAPABILITIES],\n };\n}\n\nexport function negotiateProtocol(peer: ProtocolAdvertisement): ProtocolNegotiation {\n const peerVersion = peer.protocolVersion;\n const legacyPeer = peerVersion === undefined;\n const version = legacyPeer\n ? SURFACE_PROTOCOL_VERSION\n : Math.min(peerVersion, SURFACE_PROTOCOL_VERSION);\n const compatible =\n legacyPeer || (Number.isInteger(peerVersion) && peerVersion >= SURFACE_PROTOCOL_MIN_VERSION);\n const advertised = new Set(peer.protocolCapabilities ?? []);\n return {\n compatible,\n legacyPeer,\n version,\n capabilities: SURFACE_PROTOCOL_CAPABILITIES.filter((item) => advertised.has(item)),\n };\n}\n"],
|
|
5
|
-
"mappings": "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A,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AClEO,IAAM,4BAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,2BAA2B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACvDO,IAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,qCAAqC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AChDO,IAAM,oCAAoC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,qCAAqC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AC7EO,IAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AClEO,IAAM,4BAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,2BAA2B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,kCAAkC;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AC3DO,IAAM,iCAAiC;AAAA,EA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",
|
|
3
|
+
"sources": ["../../src/protocol/connection-fsm.ts", "../../src/protocol/client-conversation.ts", "../../src/protocol/client-integrations.ts", "../../src/protocol/client-operations.ts", "../../src/protocol/client-workspace.ts", "../../src/protocol/server-conversation.ts", "../../src/protocol/server-integrations.ts", "../../src/protocol/server-operations.ts", "../../src/protocol/server-workspace.ts", "../../src/protocol/registry.ts", "../../src/protocol/decoder.ts", "../../src/protocol/projections.ts", "../../src/protocol/replay-payload.ts", "../../src/protocol/version.ts"],
|
|
4
|
+
"sourcesContent": ["export type SurfaceConnectionPhase = 'idle' | 'connecting' | 'open' | 'reconnecting' | 'closed';\n\nexport interface SurfaceConnectionConfig {\n maxReconnectAttempts: number;\n initialBackoffMs: number;\n maxBackoffMs: number;\n backoffMultiplier: number;\n jitterRatio: number;\n queueLimit: number;\n heartbeatIntervalMs: number;\n heartbeatTimeoutMs: number;\n}\n\nexport interface SurfaceConnectionState {\n phase: SurfaceConnectionPhase;\n reconnectAttempt: number;\n lastActivityAt: number | null;\n stopped: boolean;\n}\n\nexport interface ReconnectPlan {\n attempt: number;\n delayMs: number;\n retryAt: number;\n}\n\nexport const DEFAULT_SURFACE_CONNECTION_CONFIG: SurfaceConnectionConfig = {\n maxReconnectAttempts: 10,\n initialBackoffMs: 1_000,\n maxBackoffMs: 30_000,\n backoffMultiplier: 2,\n jitterRatio: 0,\n queueLimit: 1_000,\n heartbeatIntervalMs: 0,\n heartbeatTimeoutMs: 0,\n};\n\nexport function createSurfaceConnectionState(): SurfaceConnectionState {\n return { phase: 'idle', reconnectAttempt: 0, lastActivityAt: null, stopped: false };\n}\n\nexport function markConnectionConnecting(state: SurfaceConnectionState): SurfaceConnectionState {\n if (state.stopped) return state;\n return { ...state, phase: 'connecting' };\n}\n\nexport function markConnectionOpen(\n state: SurfaceConnectionState,\n now = Date.now(),\n): SurfaceConnectionState {\n return {\n ...state,\n phase: 'open',\n reconnectAttempt: 0,\n lastActivityAt: now,\n stopped: false,\n };\n}\n\nexport function markConnectionActivity(\n state: SurfaceConnectionState,\n now = Date.now(),\n): SurfaceConnectionState {\n return { ...state, lastActivityAt: now };\n}\n\nexport function stopConnection(state: SurfaceConnectionState): SurfaceConnectionState {\n return { ...state, phase: 'closed', stopped: true };\n}\n\nexport function resetConnection(state: SurfaceConnectionState): SurfaceConnectionState {\n return { ...state, phase: 'idle', reconnectAttempt: 0, stopped: false };\n}\n\nexport function planConnectionReconnect(\n state: SurfaceConnectionState,\n config: SurfaceConnectionConfig,\n now = Date.now(),\n random = Math.random,\n): { state: SurfaceConnectionState; plan: ReconnectPlan | null } {\n if (state.stopped || state.reconnectAttempt >= config.maxReconnectAttempts) {\n return { state: { ...state, phase: 'closed' }, plan: null };\n }\n const attempt = state.reconnectAttempt + 1;\n const base = Math.min(\n config.initialBackoffMs * config.backoffMultiplier ** (attempt - 1),\n config.maxBackoffMs,\n );\n const centeredJitter = (random() * 2 - 1) * config.jitterRatio;\n const delayMs = Math.max(0, Math.round(base * (1 + centeredJitter)));\n return {\n state: { ...state, phase: 'reconnecting', reconnectAttempt: attempt },\n plan: { attempt, delayMs, retryAt: now + delayMs },\n };\n}\n\nexport function isConnectionHeartbeatTimedOut(\n state: SurfaceConnectionState,\n config: SurfaceConnectionConfig,\n now = Date.now(),\n): boolean {\n if (state.phase !== 'open' || state.lastActivityAt === null) return false;\n if (config.heartbeatIntervalMs <= 0) return false;\n return now - state.lastActivityAt > config.heartbeatIntervalMs + config.heartbeatTimeoutMs;\n}\n\nexport function enqueueBounded<T>(\n queue: readonly T[],\n item: T,\n limit: number,\n): { queue: T[]; dropped: T | null } {\n if (limit <= 0) return { queue: [], dropped: item };\n if (queue.length < limit) return { queue: [...queue, item], dropped: null };\n return { queue: [...queue.slice(queue.length - limit + 1), item], dropped: queue[0] ?? null };\n}\n", "export const CLIENT_CONVERSATION_MESSAGE_TYPES = [\n 'abort',\n 'ping',\n 'user_message',\n 'tool.confirm_result',\n 'completion.request',\n 'model.switch',\n 'model.refine',\n 'autonomy.switch',\n 'context.clear',\n 'context.compact',\n 'context.debug',\n 'context.mode.create',\n 'context.mode.delete',\n 'context.mode.switch',\n 'context.mode.update',\n 'context.modes.list',\n 'context.repair',\n 'mode.switch',\n 'modes.list',\n 'session.checkpoints',\n 'session.delete',\n 'session.new',\n 'session.rename',\n 'session.resume',\n 'session.rewind',\n 'session.save',\n 'sessions.list',\n 'side_effects.list',\n 'stats.get',\n 'todo.update',\n 'todos.clear',\n 'todos.get',\n 'todos.remove',\n] as const;\n\nexport const CLIENT_COLLABORATION_MESSAGE_TYPES = [\n 'collab.join',\n 'collab.leave',\n 'collab.annotate',\n 'collab.resolve',\n 'collab.request_pause',\n 'collab.resume',\n 'collab.grant_control',\n 'collab.inject_tool',\n 'mailbox.agents',\n 'mailbox.clear',\n 'mailbox.compact',\n 'mailbox.messages',\n 'mailbox.purge',\n 'mailbox.send',\n] as const;\n", "export const CLIENT_KNOWLEDGE_MESSAGE_TYPES = [\n 'brain.ask',\n 'brain.config.get',\n 'brain.config.set',\n 'brain.risk',\n 'brain.status',\n 'chronicle.facet',\n 'chronicle.facets',\n 'chronicle.graph',\n 'chronicle.metrics',\n 'chronicle.query',\n 'config.doctor',\n 'design.list',\n 'design.materialize',\n 'design.set',\n 'design.state',\n 'design.swap',\n 'design.tune',\n 'design.use',\n 'design.verify',\n 'memory.list',\n 'memory.sage.backfillRecoverable',\n 'memory.sage.candidateResolve',\n 'memory.sage.delete',\n 'memory.sage.forFile',\n 'memory.sage.get',\n 'memory.sage.graph',\n 'memory.sage.list',\n 'memory.sage.listPage',\n 'memory.sage.recover',\n 'memory.sage.remember',\n 'memory.sage.update',\n] as const;\n\nexport const CLIENT_EXTENSION_MESSAGE_TYPES = [\n 'auth.oauth.cancel',\n 'auth.oauth.code',\n 'auth.oauth.start',\n 'mcp.add',\n 'mcp.disable',\n 'mcp.discover',\n 'mcp.enable',\n 'mcp.list',\n 'mcp.prompt.get',\n 'mcp.prompts',\n 'mcp.remove',\n 'mcp.resource.read',\n 'mcp.resources',\n 'mcp.restart',\n 'mcp.sleep',\n 'mcp.update',\n 'mcp.wake',\n 'prompts.content',\n 'prompts.create',\n 'prompts.favorite',\n 'prompts.list',\n 'prompts.recent',\n 'prompts.search',\n 'prompts.used',\n 'skills.content',\n 'skills.create',\n 'skills.edit',\n 'skills.export',\n 'skills.install',\n 'skills.list',\n 'skills.uninstall',\n 'skills.update',\n] as const;\n", "export const CLIENT_GOAL_MESSAGE_TYPES = [\n 'goal-state.get',\n 'goal.addTask',\n 'goal.assignTask',\n 'goal.clear',\n 'goal.get',\n 'goal.list',\n 'goal.load',\n 'goal.moveTask',\n 'goal.pause',\n 'goal.resume',\n 'goal.retryTask',\n 'goal.revert',\n 'goal.runTask',\n 'goal.save',\n 'goal.selectPhase',\n 'goal.start',\n 'goal.state',\n 'goal.status',\n 'goal.stop',\n 'goal.taskStatus',\n 'goal.toggleAutonomous',\n 'plan.get',\n 'plan.item.update',\n 'plan.template_use',\n 'task.update',\n 'tasks.get',\n] as const;\n\nexport const CLIENT_SDD_MESSAGE_TYPES = [\n 'sdd.board.cancel_task',\n 'sdd.board.cleanup_worktrees',\n 'sdd.board.delete_task',\n 'sdd.board.destroy',\n 'sdd.board.get',\n 'sdd.board.list',\n 'sdd.board.pause',\n 'sdd.board.reassign',\n 'sdd.board.resume',\n 'sdd.board.retry',\n 'sdd.board.retry_all_failed',\n 'sdd.board.rollback',\n 'sdd.board.set_task_fallbacks',\n 'sdd.board.set_task_model',\n 'sdd.board.set_task_verification',\n 'sdd.board.split_task',\n 'sdd.board.stop',\n 'sdd.run.start',\n 'sdd.spec.approve',\n 'sdd.spec.get',\n 'sdd.spec.message',\n 'sdd.spec.start',\n 'specs.get',\n 'specs.list',\n 'specs.taskStatus',\n] as const;\n", "export const CLIENT_WORKSPACE_MESSAGE_TYPES = [\n 'files.list',\n 'files.read',\n 'files.tree',\n 'files.write',\n 'git.changes',\n 'git.diff',\n 'git.info',\n 'projects.add',\n 'projects.list',\n 'projects.select',\n 'working_dir.set',\n 'worktree.cleanup',\n 'worktree.diff',\n 'worktree.merge',\n 'worktree.remove',\n 'worktree.scan',\n 'shell.open',\n 'process.kill',\n 'process.killAll',\n 'process.list',\n 'terminal.close',\n 'terminal.create',\n 'terminal.input',\n 'terminal.resize',\n] as const;\n\nexport const CLIENT_CONFIGURATION_MESSAGE_TYPES = [\n 'diag.get',\n 'key.add',\n 'key.delete',\n 'key.set_active',\n 'key.update',\n 'prefs.get',\n 'prefs.update',\n 'provider.add',\n 'provider.clear_models',\n 'provider.models',\n 'provider.probe',\n 'provider.remove',\n 'provider.undo_clear',\n 'provider.update',\n 'providers.list',\n 'providers.saved',\n 'tool.disable',\n 'tool.enable',\n 'tools.list',\n 'webui.shutdown',\n] as const;\n", "export const SERVER_CONVERSATION_MESSAGE_TYPES = [\n 'error',\n 'log',\n 'pong',\n 'side_effects',\n 'agent.status_changed',\n 'agent.timeline.message',\n 'client.status_update',\n 'compaction.failed',\n 'completion.result',\n 'context.compacted',\n 'context.debug',\n 'context.mode.changed',\n 'context.modes.list',\n 'context.repaired',\n 'ctx.max_context',\n 'ctx.pct',\n 'delegate.completed',\n 'delegate.started',\n 'iteration.completed',\n 'iteration.limit_reached',\n 'iteration.started',\n 'model.refine_result',\n 'modes.list',\n 'provider.active_blocked',\n 'provider.error',\n 'provider.fallback',\n 'provider.response',\n 'provider.retry',\n 'provider.status_changed',\n 'provider.stream_error',\n 'provider.text_delta',\n 'provider.thinking_delta',\n 'run.result',\n 'session.checkpoints',\n 'session.damaged',\n 'session.end',\n 'session.rewound',\n 'session.start',\n 'session.stats',\n 'sessions.list',\n 'sessions.status_update',\n 'stats.get',\n 'token.cost_estimate_unavailable',\n 'token.threshold',\n 'tool.confirm_needed',\n 'tool.disabled',\n 'tool.enabled',\n 'tool.executed',\n 'tool.loop_detected',\n 'tool.progress',\n 'tool.started',\n 'tools.list',\n 'trust.persisted',\n] as const;\n\nexport const SERVER_COLLABORATION_MESSAGE_TYPES = [\n 'collab.annotation.added',\n 'collab.annotation.resolved',\n 'collab.event',\n 'collab.injection.granted',\n 'collab.participant.joined',\n 'collab.participant.left',\n 'collab.pause.granted',\n 'collab.pause.released',\n 'collab.state',\n 'mailbox.agent_registered',\n 'mailbox.agents',\n 'mailbox.cleared',\n 'mailbox.compacted',\n 'mailbox.event',\n 'mailbox.messages',\n 'mailbox.sent',\n 'mailbox.purged',\n 'mailbox.received',\n 'subagent.budget_extended',\n 'subagent.event',\n] as const;\n", "export const SERVER_KNOWLEDGE_MESSAGE_TYPES = [\n 'brain.answer',\n 'brain.config',\n 'brain.event',\n 'brain.status',\n 'chronicle.error',\n 'chronicle.facet_result',\n 'chronicle.facets_result',\n 'chronicle.graph_result',\n 'chronicle.metrics_result',\n 'chronicle.query_result',\n 'config.doctor.result',\n 'design.list',\n 'design.materialize',\n 'design.set',\n 'design.state',\n 'design.swap',\n 'design.tune',\n 'design.use',\n 'design.verify',\n 'memory.event',\n 'memory.list',\n 'memory.sage.backfillRecoverable',\n 'memory.sage.candidateResolve',\n 'memory.sage.delete',\n 'memory.sage.forFile',\n 'memory.sage.get',\n 'memory.sage.graph',\n 'memory.sage.list',\n 'memory.sage.listPage',\n 'memory.sage.recover',\n 'memory.sage.remember',\n 'memory.sage.update',\n] as const;\n\nexport const SERVER_EXTENSION_MESSAGE_TYPES = [\n 'mcp.content.error',\n 'mcp.content.selected',\n 'mcp.list',\n 'mcp.operation_result',\n 'mcp.prompts',\n 'mcp.resources',\n 'mcp.server.added',\n 'mcp.server.connected',\n 'mcp.server.disconnected',\n 'mcp.server.discovered',\n 'mcp.server.error',\n 'mcp.server.reconnected',\n 'mcp.server.removed',\n 'mcp.server.sleeping',\n 'mcp.server.updated',\n 'mcp.server.waking',\n 'prompts.content',\n 'prompts.created',\n 'prompts.favorite',\n 'prompts.list',\n 'prompts.recent',\n 'prompts.search',\n 'prompts.used',\n 'skills.content',\n 'skills.created',\n 'skills.edited',\n 'skills.exported',\n 'skills.installed',\n 'skills.list',\n 'skills.uninstalled',\n 'skills.updated',\n] as const;\n", "export const SERVER_GOAL_MESSAGE_TYPES = [\n 'budget.decision',\n 'budget.threshold_reached',\n 'coordinator.stats',\n 'coordinator.status',\n 'eternal.iteration',\n 'fleet.concurrency_update',\n 'goal-state.updated',\n 'goal.list',\n 'goal.paused',\n 'goal.resumed',\n 'goal.saved',\n 'goal.error',\n 'goal.stopped',\n 'goal.failed',\n 'goal.completed',\n 'goal.cleared',\n 'goal.reverted',\n 'goal.progress',\n 'goal.state',\n 'in_flight.ended',\n 'in_flight.started',\n 'plan.updated',\n 'task.completed',\n 'task.failed',\n 'task.pending',\n 'task.started',\n 'tasks.updated',\n 'todos.cleared',\n 'todos.updated',\n] as const;\n\nexport const SERVER_SDD_MESSAGE_TYPES = [\n 'kanban.task.activity',\n 'sdd.board.lifecycle_result',\n 'sdd.board.list',\n 'sdd.board.snapshot',\n 'sdd.run.started',\n 'sdd.spec.agent_text',\n 'sdd.spec.error',\n 'sdd.spec.snapshot',\n 'specs.detail',\n 'specs.list',\n] as const;\n\nexport const SERVER_AUTOMATION_MESSAGE_TYPES = [\n 'consensus.vote_cast',\n 'consensus.vote_initiated',\n 'consensus.vote_resolved',\n 'cron.job_fired',\n 'cron.snapshot',\n 'techstack.job.cancelled',\n 'techstack.job.failed',\n 'techstack.job.progress',\n 'techstack.job.started',\n 'techstack.report.delivered',\n 'techstack.report.ready',\n 'techstack.snapshot.updated',\n 'techstack.workspace.completed',\n] as const;\n", "export const SERVER_WORKSPACE_MESSAGE_TYPES = [\n 'checkpoint.written',\n 'codemap.file_event',\n 'codemap.index_updated',\n 'codemap.tool_executed',\n 'codemap.tool_started',\n 'file.saved',\n 'files.list',\n 'files.read',\n 'files.tree',\n 'files.written',\n 'git.changes',\n 'git.diff',\n 'git.info',\n 'process.list',\n 'projects.added',\n 'projects.list',\n 'projects.selected',\n 'terminal.exit',\n 'terminal.output',\n 'working_dir.changed',\n 'worktree.cleanup_result',\n 'worktree.diff_result',\n 'worktree.event',\n 'worktree.merge_result',\n 'worktree.orphans',\n 'worktree.state',\n] as const;\n\nexport const SERVER_CONFIGURATION_MESSAGE_TYPES = [\n 'auth.oauth.status',\n 'diag.get',\n 'key.operation_result',\n 'prefs.updated',\n 'provider.catalog',\n 'provider.models',\n 'provider.probe',\n 'providers.saved',\n] as const;\n", "import {\n CLIENT_COLLABORATION_MESSAGE_TYPES,\n CLIENT_CONVERSATION_MESSAGE_TYPES,\n} from './client-conversation.js';\nimport {\n CLIENT_EXTENSION_MESSAGE_TYPES,\n CLIENT_KNOWLEDGE_MESSAGE_TYPES,\n} from './client-integrations.js';\nimport { CLIENT_GOAL_MESSAGE_TYPES, CLIENT_SDD_MESSAGE_TYPES } from './client-operations.js';\nimport {\n CLIENT_CONFIGURATION_MESSAGE_TYPES,\n CLIENT_WORKSPACE_MESSAGE_TYPES,\n} from './client-workspace.js';\nimport {\n SERVER_COLLABORATION_MESSAGE_TYPES,\n SERVER_CONVERSATION_MESSAGE_TYPES,\n} from './server-conversation.js';\nimport {\n SERVER_EXTENSION_MESSAGE_TYPES,\n SERVER_KNOWLEDGE_MESSAGE_TYPES,\n} from './server-integrations.js';\nimport {\n SERVER_AUTOMATION_MESSAGE_TYPES,\n SERVER_GOAL_MESSAGE_TYPES,\n SERVER_SDD_MESSAGE_TYPES,\n} from './server-operations.js';\nimport {\n SERVER_CONFIGURATION_MESSAGE_TYPES,\n SERVER_WORKSPACE_MESSAGE_TYPES,\n} from './server-workspace.js';\n\nexport const CLIENT_MESSAGE_TYPES = [\n ...CLIENT_CONVERSATION_MESSAGE_TYPES,\n ...CLIENT_COLLABORATION_MESSAGE_TYPES,\n ...CLIENT_WORKSPACE_MESSAGE_TYPES,\n ...CLIENT_CONFIGURATION_MESSAGE_TYPES,\n ...CLIENT_GOAL_MESSAGE_TYPES,\n ...CLIENT_SDD_MESSAGE_TYPES,\n ...CLIENT_KNOWLEDGE_MESSAGE_TYPES,\n ...CLIENT_EXTENSION_MESSAGE_TYPES,\n] as const;\n\nexport const SERVER_MESSAGE_TYPES = [\n ...SERVER_CONVERSATION_MESSAGE_TYPES,\n ...SERVER_COLLABORATION_MESSAGE_TYPES,\n ...SERVER_WORKSPACE_MESSAGE_TYPES,\n ...SERVER_CONFIGURATION_MESSAGE_TYPES,\n ...SERVER_GOAL_MESSAGE_TYPES,\n ...SERVER_SDD_MESSAGE_TYPES,\n ...SERVER_AUTOMATION_MESSAGE_TYPES,\n ...SERVER_KNOWLEDGE_MESSAGE_TYPES,\n ...SERVER_EXTENSION_MESSAGE_TYPES,\n] as const;\n\nexport type ExactClientMessageType = (typeof CLIENT_MESSAGE_TYPES)[number];\nexport type ExactServerMessageType = (typeof SERVER_MESSAGE_TYPES)[number];\n\nconst CLIENT_TYPE_SET: ReadonlySet<string> = new Set(CLIENT_MESSAGE_TYPES);\nconst SERVER_TYPE_SET: ReadonlySet<string> = new Set(SERVER_MESSAGE_TYPES);\n\nexport function isRegisteredMessageType(type: string, direction: 'client' | 'server'): boolean {\n const exact = direction === 'client' ? CLIENT_TYPE_SET : SERVER_TYPE_SET;\n return (\n exact.has(type) ||\n (type.startsWith('kanban.') && type.length > 'kanban.'.length) ||\n (type.startsWith('agent-roster.') && type.length > 'agent-roster.'.length)\n );\n}\n", "import { isRegisteredMessageType } from './registry.js';\nimport type {\n CanonicalClientMessage,\n CanonicalServerMessage,\n ProtocolDecodeIssue,\n ProtocolDecodeResult,\n ProtocolDirection,\n ProtocolEnvelope,\n} from './types.js';\n\nconst FORBIDDEN_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\nconst MAX_PAYLOAD_DEPTH = 32;\n\nfunction inspectValue(value: unknown, path: string, depth: number): ProtocolDecodeIssue | null {\n if (depth > MAX_PAYLOAD_DEPTH) {\n return { code: 'too_deep', message: 'Protocol payload exceeds the nesting limit', path };\n }\n if (value === null || typeof value !== 'object') return null;\n\n for (const key of Object.keys(value)) {\n const childPath = `${path}.${key}`;\n if (FORBIDDEN_KEYS.has(key)) {\n return { code: 'unsafe_key', message: `Unsafe protocol key: ${key}`, path: childPath };\n }\n const issue = inspectValue((value as Record<string, unknown>)[key], childPath, depth + 1);\n if (issue) return issue;\n }\n return null;\n}\n\nexport function decodeProtocolMessage(\n input: unknown,\n direction: 'client',\n): ProtocolDecodeResult<CanonicalClientMessage>;\nexport function decodeProtocolMessage(\n input: unknown,\n direction: 'server',\n): ProtocolDecodeResult<CanonicalServerMessage>;\nexport function decodeProtocolMessage(\n input: unknown,\n direction: ProtocolDirection,\n): ProtocolDecodeResult<ProtocolEnvelope> {\n if (input === null || typeof input !== 'object' || Array.isArray(input)) {\n return {\n ok: false,\n issue: { code: 'invalid_envelope', message: 'Protocol message must be an object' },\n };\n }\n\n const envelope = input as Record<string, unknown>;\n if (typeof envelope['type'] !== 'string' || envelope['type'].length === 0) {\n return {\n ok: false,\n issue: { code: 'invalid_type', message: 'Protocol message type must be a non-empty string' },\n };\n }\n if (!isRegisteredMessageType(envelope['type'], direction)) {\n return {\n ok: false,\n issue: { code: 'unknown_type', message: `Unknown ${direction} message: ${envelope['type']}` },\n };\n }\n if (direction === 'server' && !Object.hasOwn(envelope, 'payload')) {\n return {\n ok: false,\n issue: { code: 'invalid_envelope', message: 'Server protocol messages require a payload' },\n };\n }\n\n const issue = inspectValue(envelope, '$', 0);\n if (issue) return { ok: false, issue };\n return { ok: true, message: input as ProtocolEnvelope };\n}\n\nexport function decodeProtocolFrame(\n frame: string,\n direction: 'client',\n): ProtocolDecodeResult<CanonicalClientMessage>;\nexport function decodeProtocolFrame(\n frame: string,\n direction: 'server',\n): ProtocolDecodeResult<CanonicalServerMessage>;\nexport function decodeProtocolFrame(\n frame: string,\n direction: ProtocolDirection,\n): ProtocolDecodeResult<ProtocolEnvelope> {\n try {\n return decodeProtocolMessage(JSON.parse(frame), direction as 'client');\n } catch {\n return {\n ok: false,\n issue: { code: 'invalid_envelope', message: 'Protocol frame is not valid JSON' },\n };\n }\n}\n", "import type { HqAlertMessage, HqCommandAuditEntry, HqEventEnvelope, HqSnapshot } from '@wrongstack/core/hq';\nimport type { ProtocolEnvelope } from './types.js';\n\nfunction record(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction text(value: unknown, fallback = ''): string {\n return typeof value === 'string' ? value : fallback;\n}\n\nfunction finite(value: unknown, fallback = 0): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : fallback;\n}\n\n/** When a key is present it must be an array; when absent it is acceptable. */\nfunction optionalArray(value: unknown): boolean {\n return value === undefined || Array.isArray(value);\n}\n\n/** Validate that all required numeric fields of a totals object are finite. */\nfunction isValidHqTotals(totals: Record<string, unknown>): boolean {\n return (\n finite(totals['activeProjects']) === totals['activeProjects'] &&\n finite(totals['activeClients']) === totals['activeClients'] &&\n finite(totals['activeSessions']) === totals['activeSessions'] &&\n finite(totals['activeSubagents']) === totals['activeSubagents'] &&\n finite(totals['unreadMailboxMessages']) === totals['unreadMailboxMessages'] &&\n finite(totals['incompleteMailboxMessages']) === totals['incompleteMailboxMessages'] &&\n finite(totals['totalCostUsd']) === totals['totalCostUsd']\n );\n}\n\nexport interface SessionProjection {\n kind: 'session';\n id: string;\n provider: string;\n model: string;\n projectName: string;\n cwd: string;\n maxContext: number;\n reset: boolean;\n replayMessages: unknown[] | null;\n /** Audit markers replayed alongside the conversation. */\n replayMarkers: unknown[] | null;\n replayUsage: Record<string, unknown> | null;\n}\n\nexport function projectSessionMessage(message: ProtocolEnvelope): SessionProjection | null {\n if (message.type !== 'session.start') return null;\n const payload = record(message.payload);\n if (!payload) return null;\n return {\n kind: 'session',\n id: text(payload['sessionId']),\n provider: text(payload['provider']),\n model: text(payload['model']),\n projectName: text(payload['projectName'], 'Project'),\n cwd: text(payload['cwd']),\n maxContext: finite(payload['maxContext']),\n reset: payload['reset'] === true,\n replayMessages: Array.isArray(payload['replayMessages']) ? payload['replayMessages'] : null,\n replayMarkers: Array.isArray(payload['replayMarkers']) ? payload['replayMarkers'] : null,\n replayUsage: record(payload['replayUsage']),\n };\n}\n\nexport type ChatProjection =\n | { kind: 'thinking-delta'; text: string }\n | { kind: 'text-delta'; text: string; messageId: string }\n | { kind: 'response'; content: unknown }\n | { kind: 'run-result'; status: string; iterations: number; finalText?: string | undefined }\n | { kind: 'error'; message: string };\n\nexport function projectChatMessage(message: ProtocolEnvelope): ChatProjection | null {\n const payload = record(message.payload);\n if (!payload) return null;\n switch (message.type) {\n case 'provider.thinking_delta': {\n const value = text(payload['text']);\n return value ? { kind: 'thinking-delta', text: value } : null;\n }\n case 'provider.text_delta': {\n const value = text(payload['text']);\n return value\n ? { kind: 'text-delta', text: value, messageId: text(payload['messageId']) }\n : null;\n }\n case 'provider.response':\n return { kind: 'response', content: payload['content'] };\n case 'run.result':\n return {\n kind: 'run-result',\n status: text(payload['status']),\n iterations: finite(payload['iterations'], 1),\n ...(typeof payload['finalText'] === 'string' ? { finalText: payload['finalText'] } : {}),\n };\n case 'error':\n return { kind: 'error', message: text(payload['message'], 'Run failed') };\n default:\n return null;\n }\n}\n\nexport type ToolProjection =\n | { kind: 'started'; id: string; name: string; input: unknown; messageId: string }\n | { kind: 'progress'; id: string; name: string; eventType: string; text: string }\n | {\n kind: 'executed';\n id: string;\n name: string;\n ok: boolean;\n output?: string | undefined;\n durationMs: number;\n };\n\nexport function projectToolMessage(message: ProtocolEnvelope): ToolProjection | null {\n const payload = record(message.payload);\n if (!payload) return null;\n if (message.type === 'tool.started') {\n const name = text(payload['name'], 'tool');\n return {\n kind: 'started',\n id: text(payload['id'], name),\n name,\n input: payload['input'],\n messageId: text(payload['messageId']),\n };\n }\n if (message.type === 'tool.progress') {\n const event = record(payload['event']);\n return {\n kind: 'progress',\n id: text(payload['id']),\n name: text(payload['name'], 'tool'),\n eventType: text(event?.['type']),\n text: text(event?.['text']).trim(),\n };\n }\n if (message.type === 'tool.executed') {\n return {\n kind: 'executed',\n id: text(payload['id']),\n name: text(payload['name']),\n ok: payload['ok'] !== false,\n durationMs: finite(payload['durationMs']),\n ...(typeof payload['output'] === 'string' ? { output: payload['output'] } : {}),\n };\n }\n return null;\n}\n\nexport type FleetProjection =\n | { kind: 'concurrency'; active: number; maximum: number }\n | { kind: 'client-status'; status: Record<string, unknown> }\n | { kind: 'sessions'; sessions: unknown[] }\n | { kind: 'coordinator'; agents: Array<Record<string, unknown>> };\n\nexport function projectFleetMessage(message: ProtocolEnvelope): FleetProjection | null {\n const payload = record(message.payload);\n if (!payload) return null;\n switch (message.type) {\n case 'fleet.concurrency_update':\n return {\n kind: 'concurrency',\n active: finite(payload['fleetConcurrency']),\n maximum: finite(payload['fleetConcurrencyMax']),\n };\n case 'client.status_update':\n return { kind: 'client-status', status: payload };\n case 'sessions.status_update':\n return {\n kind: 'sessions',\n sessions: Array.isArray(payload['sessions']) ? payload['sessions'] : [],\n };\n case 'coordinator.stats':\n return {\n kind: 'coordinator',\n agents: Array.isArray(payload['subagentStatuses'])\n ? payload['subagentStatuses'].filter(\n (item): item is Record<string, unknown> => record(item) !== null,\n )\n : [],\n };\n default:\n return null;\n }\n}\n\nexport interface HqFleetProjection {\n kind: 'hq-snapshot';\n snapshot: HqSnapshot;\n}\n\n/**\n * Validate the stable outer shape of an HQ fleet snapshot before a browser\n * surface commits it to state. Domain-specific records remain owned by Core;\n * this boundary only rejects truncated or unrelated wire frames.\n */\nexport function projectHqFleetMessage(message: {\n type: string;\n snapshot?: unknown;\n}): HqFleetProjection | null {\n if (message.type !== 'hq.snapshot') return null;\n const snapshot = record(message.snapshot);\n const totals = snapshot ? record(snapshot['totals']) : null;\n if (\n !snapshot ||\n typeof snapshot['generatedAt'] !== 'string' ||\n !Array.isArray(snapshot['clients']) ||\n !Array.isArray(snapshot['projects']) ||\n !Array.isArray(snapshot['sessions']) ||\n !Array.isArray(snapshot['fleets']) ||\n !Array.isArray(snapshot['mailboxes']) ||\n !totals ||\n !isValidHqTotals(totals) ||\n !optionalArray(snapshot['machines']) ||\n !optionalArray(snapshot['liveSessions']) ||\n !optionalArray(snapshot['mcpServers'])\n ) {\n return null;\n }\n return { kind: 'hq-snapshot', snapshot: snapshot as unknown as HqSnapshot };\n}\n\n// \u2500\u2500 HQ sibling projections (event, alert, command_status) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n//\n// These mirrors of projectHqFleetMessage validate the outer envelope shape of\n// hq.event / hq.alert / hq.command_status frames before the browser surface\n// commits them to store state, closing the trust-boundary gap flagged in\n// review \u2014 every branch now passes through a projection, not just hq.snapshot.\n\nexport interface HqEventProjection {\n kind: 'hq-event';\n event: HqEventEnvelope;\n}\n\nexport function projectHqEventMessage(message: {\n type: string;\n event?: unknown;\n}): HqEventProjection | null {\n if (message.type !== 'hq.event') return null;\n const event = record(message.event);\n if (\n !event ||\n typeof event['id'] !== 'string' ||\n typeof event['type'] !== 'string' ||\n typeof event['timestamp'] !== 'string' ||\n typeof event['clientId'] !== 'string' ||\n typeof event['projectId'] !== 'string' ||\n typeof event['seq'] !== 'number'\n ) {\n return null;\n }\n return { kind: 'hq-event', event: event as unknown as HqEventEnvelope };\n}\n\nexport interface HqAlertProjection {\n kind: 'hq-alert';\n alert: HqAlertMessage;\n}\n\nexport function projectHqAlertMessage(message: {\n type: string;\n severity?: unknown;\n message?: unknown;\n timestamp?: unknown;\n}): HqAlertProjection | null {\n if (message.type !== 'hq.alert') return null;\n if (\n typeof message['severity'] !== 'string' ||\n !['info', 'warn', 'error'].includes(message['severity']) ||\n typeof message['message'] !== 'string' ||\n typeof message['timestamp'] !== 'string'\n ) {\n return null;\n }\n return { kind: 'hq-alert', alert: message as unknown as HqAlertMessage };\n}\n\nexport interface HqCommandStatusProjection {\n kind: 'hq-command-status';\n command: HqCommandAuditEntry;\n}\n\nexport function projectHqCommandStatusMessage(message: {\n type: string;\n command?: unknown;\n}): HqCommandStatusProjection | null {\n if (message.type !== 'hq.command_status') return null;\n const command = record(message.command);\n if (\n !command ||\n typeof command['commandId'] !== 'string' ||\n typeof command['type'] !== 'string' ||\n typeof command['clientId'] !== 'string' ||\n typeof command['enqueuedBy'] !== 'string' ||\n typeof command['enqueuedAt'] !== 'string' ||\n typeof command['status'] !== 'string' ||\n !['queued', 'delivered', 'acked'].includes(command['status'])\n ) {\n return null;\n }\n return { kind: 'hq-command-status', command: command as unknown as HqCommandAuditEntry };\n}\n", "/**\n * Replay payload assembly for `session.start`.\n *\n * Two servers build this frame \u2014 the standalone WebUI server and the\n * CLI-hosted bridge \u2014 and they had already drifted (one fell back to the live\n * in-memory conversation, the other did not; only one applied the message cap\n * consistently). Both now call this, so the wire shape has a single definition.\n *\n * `replayMarkers` carries audit markers (compaction, mode switch, skill\n * activation, subagent lifecycle, provider retries, truncation) that a live\n * client renders as they stream in. Without them a reconnect or a session\n * resume silently drops everything except the conversation, so the same\n * session reads differently before and after a reload. Only the *projected*\n * markers cross the wire \u2014 never the raw event stream \u2014 so a 50k-event session\n * still costs a few dozen short strings.\n */\nimport type { Message, SessionEvent, SessionMarker, Usage } from '@wrongstack/core/types';\nimport { CHAT_MARKER_SOURCES, projectSessionMarkers } from '@wrongstack/core/types';\n\n/**\n * Upper bound on replayed conversation messages. A very long session would\n * otherwise push a multi-megabyte frame on every connect; the full transcript\n * remains on disk and in the session store.\n */\nexport const REPLAY_MESSAGE_CAP = 2_000;\n\nexport interface ReplaySource {\n messages: readonly Message[];\n /** Raw JSONL events, when the caller loaded them. Markers are projected from these. */\n events?: readonly SessionEvent[] | undefined;\n usage?: Usage | undefined;\n}\n\nexport interface ReplayPayloadFields {\n replayMessages?: Message[] | undefined;\n replayMarkers?: SessionMarker[] | undefined;\n replayUsage?: Usage | undefined;\n}\n\n/**\n * Build the replay fields of a `session.start` payload. Fields are omitted\n * rather than sent empty, so an existing client's \"did the server send a\n * replay?\" checks keep working unchanged.\n */\nexport function buildReplayPayload(source: ReplaySource): ReplayPayloadFields {\n const out: ReplayPayloadFields = {};\n\n const messages = source.messages;\n if (messages.length > 0) {\n out.replayMessages =\n messages.length > REPLAY_MESSAGE_CAP\n ? messages.slice(-REPLAY_MESSAGE_CAP)\n : [...messages];\n }\n\n if (source.events && source.events.length > 0) {\n const markers = projectSessionMarkers(source.events, CHAT_MARKER_SOURCES);\n if (markers.length > 0) out.replayMarkers = markers;\n }\n\n const usage = source.usage;\n if (\n usage &&\n usage.input + usage.output + (usage.cacheRead ?? 0) + (usage.cacheWrite ?? 0) > 0\n ) {\n out.replayUsage = {\n input: usage.input,\n output: usage.output,\n cacheRead: usage.cacheRead ?? 0,\n cacheWrite: usage.cacheWrite ?? 0,\n };\n }\n\n return out;\n}\n", "export const SURFACE_PROTOCOL_VERSION = 1 as const;\nexport const SURFACE_PROTOCOL_MIN_VERSION = 1 as const;\n\nexport const SURFACE_PROTOCOL_CAPABILITIES = [\n 'protocol.directional-decoder',\n 'protocol.recursive-key-safety',\n 'chronicle.query',\n 'chronicle.facet',\n 'chronicle.facets',\n 'chronicle.graph',\n 'chronicle.metrics',\n] as const;\n\nexport type SurfaceProtocolCapability = (typeof SURFACE_PROTOCOL_CAPABILITIES)[number];\n\nexport interface ProtocolAdvertisement {\n protocolVersion?: number | undefined;\n protocolCapabilities?: readonly string[] | undefined;\n}\n\nexport interface ProtocolNegotiation {\n compatible: boolean;\n legacyPeer: boolean;\n version: number;\n capabilities: SurfaceProtocolCapability[];\n}\n\nexport function protocolAdvertisement(): {\n protocolVersion: typeof SURFACE_PROTOCOL_VERSION;\n protocolCapabilities: SurfaceProtocolCapability[];\n} {\n return {\n protocolVersion: SURFACE_PROTOCOL_VERSION,\n protocolCapabilities: [...SURFACE_PROTOCOL_CAPABILITIES],\n };\n}\n\nexport function negotiateProtocol(peer: ProtocolAdvertisement): ProtocolNegotiation {\n const peerVersion = peer.protocolVersion;\n const legacyPeer = peerVersion === undefined;\n const version = legacyPeer\n ? SURFACE_PROTOCOL_VERSION\n : Math.min(peerVersion, SURFACE_PROTOCOL_VERSION);\n const compatible =\n legacyPeer || (Number.isInteger(peerVersion) && peerVersion >= SURFACE_PROTOCOL_MIN_VERSION);\n const advertised = new Set(peer.protocolCapabilities ?? []);\n return {\n compatible,\n legacyPeer,\n version,\n capabilities: SURFACE_PROTOCOL_CAPABILITIES.filter((item) => advertised.has(item)),\n };\n}\n"],
|
|
5
|
+
"mappings": "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A,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACnEO,IAAM,4BAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,2BAA2B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACvDO,IAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,qCAAqC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AChDO,IAAM,oCAAoC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,qCAAqC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AC7EO,IAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACnEO,IAAM,4BAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,2BAA2B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,kCAAkC;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AC3DO,IAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,qCAAqC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACPO,IAAM,uBAAuB;AAAA,EAClC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAEO,IAAM,uBAAuB;AAAA,EAClC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAKA,IAAM,kBAAuC,IAAI,IAAI,oBAAoB;AACzE,IAAM,kBAAuC,IAAI,IAAI,oBAAoB;AAElE,SAAS,wBAAwB,MAAc,WAAyC;AAC7F,QAAM,QAAQ,cAAc,WAAW,kBAAkB;AACzD,SACE,MAAM,IAAI,IAAI,KACb,KAAK,WAAW,SAAS,KAAK,KAAK,SAAS,UAAU,UACtD,KAAK,WAAW,eAAe,KAAK,KAAK,SAAS,gBAAgB;AAEvE;;;ACzDA,IAAM,iBAAiB,oBAAI,IAAI,CAAC,aAAa,eAAe,WAAW,CAAC;AACxE,IAAM,oBAAoB;AAE1B,SAAS,aAAa,OAAgB,MAAc,OAA2C;AAC7F,MAAI,QAAQ,mBAAmB;AAC7B,WAAO,EAAE,MAAM,YAAY,SAAS,8CAA8C,KAAK;AAAA,EACzF;AACA,MAAI,UAAU,QAAQ,OAAO,UAAU,SAAU,QAAO;AAExD,aAAW,OAAO,OAAO,KAAK,KAAK,GAAG;AACpC,UAAM,YAAY,GAAG,IAAI,IAAI,GAAG;AAChC,QAAI,eAAe,IAAI,GAAG,GAAG;AAC3B,aAAO,EAAE,MAAM,cAAc,SAAS,wBAAwB,GAAG,IAAI,MAAM,UAAU;AAAA,IACvF;AACA,UAAM,QAAQ,aAAc,MAAkC,GAAG,GAAG,WAAW,QAAQ,CAAC;AACxF,QAAI,MAAO,QAAO;AAAA,EACpB;AACA,SAAO;AACT;AAUO,SAAS,sBACd,OACA,WACwC;AACxC,MAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AACvE,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,OAAO,EAAE,MAAM,oBAAoB,SAAS,qCAAqC;AAAA,IACnF;AAAA,EACF;AAEA,QAAM,WAAW;AACjB,MAAI,OAAO,SAAS,MAAM,MAAM,YAAY,SAAS,MAAM,EAAE,WAAW,GAAG;AACzE,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,OAAO,EAAE,MAAM,gBAAgB,SAAS,mDAAmD;AAAA,IAC7F;AAAA,EACF;AACA,MAAI,CAAC,wBAAwB,SAAS,MAAM,GAAG,SAAS,GAAG;AACzD,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,OAAO,EAAE,MAAM,gBAAgB,SAAS,WAAW,SAAS,aAAa,SAAS,MAAM,CAAC,GAAG;AAAA,IAC9F;AAAA,EACF;AACA,MAAI,cAAc,YAAY,CAAC,OAAO,OAAO,UAAU,SAAS,GAAG;AACjE,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,OAAO,EAAE,MAAM,oBAAoB,SAAS,6CAA6C;AAAA,IAC3F;AAAA,EACF;AAEA,QAAM,QAAQ,aAAa,UAAU,KAAK,CAAC;AAC3C,MAAI,MAAO,QAAO,EAAE,IAAI,OAAO,MAAM;AACrC,SAAO,EAAE,IAAI,MAAM,SAAS,MAA0B;AACxD;AAUO,SAAS,oBACd,OACA,WACwC;AACxC,MAAI;AACF,WAAO,sBAAsB,KAAK,MAAM,KAAK,GAAG,SAAqB;AAAA,EACvE,QAAQ;AACN,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,OAAO,EAAE,MAAM,oBAAoB,SAAS,mCAAmC;AAAA,IACjF;AAAA,EACF;AACF;;;AC3FA,SAAS,OAAO,OAAgD;AAC9D,SAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IACrE,QACD;AACN;AAEA,SAAS,KAAK,OAAgB,WAAW,IAAY;AACnD,SAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAS,OAAO,OAAgB,WAAW,GAAW;AACpD,SAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,IAAI,QAAQ;AACvE;AAGA,SAAS,cAAc,OAAyB;AAC9C,SAAO,UAAU,UAAa,MAAM,QAAQ,KAAK;AACnD;AAGA,SAAS,gBAAgB,QAA0C;AACjE,SACE,OAAO,OAAO,gBAAgB,CAAC,MAAM,OAAO,gBAAgB,KAC5D,OAAO,OAAO,eAAe,CAAC,MAAM,OAAO,eAAe,KAC1D,OAAO,OAAO,gBAAgB,CAAC,MAAM,OAAO,gBAAgB,KAC5D,OAAO,OAAO,iBAAiB,CAAC,MAAM,OAAO,iBAAiB,KAC9D,OAAO,OAAO,uBAAuB,CAAC,MAAM,OAAO,uBAAuB,KAC1E,OAAO,OAAO,2BAA2B,CAAC,MAAM,OAAO,2BAA2B,KAClF,OAAO,OAAO,cAAc,CAAC,MAAM,OAAO,cAAc;AAE5D;AAiBO,SAAS,sBAAsB,SAAqD;AACzF,MAAI,QAAQ,SAAS,gBAAiB,QAAO;AAC7C,QAAM,UAAU,OAAO,QAAQ,OAAO;AACtC,MAAI,CAAC,QAAS,QAAO;AACrB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,IAAI,KAAK,QAAQ,WAAW,CAAC;AAAA,IAC7B,UAAU,KAAK,QAAQ,UAAU,CAAC;AAAA,IAClC,OAAO,KAAK,QAAQ,OAAO,CAAC;AAAA,IAC5B,aAAa,KAAK,QAAQ,aAAa,GAAG,SAAS;AAAA,IACnD,KAAK,KAAK,QAAQ,KAAK,CAAC;AAAA,IACxB,YAAY,OAAO,QAAQ,YAAY,CAAC;AAAA,IACxC,OAAO,QAAQ,OAAO,MAAM;AAAA,IAC5B,gBAAgB,MAAM,QAAQ,QAAQ,gBAAgB,CAAC,IAAI,QAAQ,gBAAgB,IAAI;AAAA,IACvF,eAAe,MAAM,QAAQ,QAAQ,eAAe,CAAC,IAAI,QAAQ,eAAe,IAAI;AAAA,IACpF,aAAa,OAAO,QAAQ,aAAa,CAAC;AAAA,EAC5C;AACF;AASO,SAAS,mBAAmB,SAAkD;AACnF,QAAM,UAAU,OAAO,QAAQ,OAAO;AACtC,MAAI,CAAC,QAAS,QAAO;AACrB,UAAQ,QAAQ,MAAM;AAAA,IACpB,KAAK,2BAA2B;AAC9B,YAAM,QAAQ,KAAK,QAAQ,MAAM,CAAC;AAClC,aAAO,QAAQ,EAAE,MAAM,kBAAkB,MAAM,MAAM,IAAI;AAAA,IAC3D;AAAA,IACA,KAAK,uBAAuB;AAC1B,YAAM,QAAQ,KAAK,QAAQ,MAAM,CAAC;AAClC,aAAO,QACH,EAAE,MAAM,cAAc,MAAM,OAAO,WAAW,KAAK,QAAQ,WAAW,CAAC,EAAE,IACzE;AAAA,IACN;AAAA,IACA,KAAK;AACH,aAAO,EAAE,MAAM,YAAY,SAAS,QAAQ,SAAS,EAAE;AAAA,IACzD,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ,KAAK,QAAQ,QAAQ,CAAC;AAAA,QAC9B,YAAY,OAAO,QAAQ,YAAY,GAAG,CAAC;AAAA,QAC3C,GAAI,OAAO,QAAQ,WAAW,MAAM,WAAW,EAAE,WAAW,QAAQ,WAAW,EAAE,IAAI,CAAC;AAAA,MACxF;AAAA,IACF,KAAK;AACH,aAAO,EAAE,MAAM,SAAS,SAAS,KAAK,QAAQ,SAAS,GAAG,YAAY,EAAE;AAAA,IAC1E;AACE,aAAO;AAAA,EACX;AACF;AAcO,SAAS,mBAAmB,SAAkD;AACnF,QAAM,UAAU,OAAO,QAAQ,OAAO;AACtC,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,QAAQ,SAAS,gBAAgB;AACnC,UAAM,OAAO,KAAK,QAAQ,MAAM,GAAG,MAAM;AACzC,WAAO;AAAA,MACL,MAAM;AAAA,MACN,IAAI,KAAK,QAAQ,IAAI,GAAG,IAAI;AAAA,MAC5B;AAAA,MACA,OAAO,QAAQ,OAAO;AAAA,MACtB,WAAW,KAAK,QAAQ,WAAW,CAAC;AAAA,IACtC;AAAA,EACF;AACA,MAAI,QAAQ,SAAS,iBAAiB;AACpC,UAAM,QAAQ,OAAO,QAAQ,OAAO,CAAC;AACrC,WAAO;AAAA,MACL,MAAM;AAAA,MACN,IAAI,KAAK,QAAQ,IAAI,CAAC;AAAA,MACtB,MAAM,KAAK,QAAQ,MAAM,GAAG,MAAM;AAAA,MAClC,WAAW,KAAK,QAAQ,MAAM,CAAC;AAAA,MAC/B,MAAM,KAAK,QAAQ,MAAM,CAAC,EAAE,KAAK;AAAA,IACnC;AAAA,EACF;AACA,MAAI,QAAQ,SAAS,iBAAiB;AACpC,WAAO;AAAA,MACL,MAAM;AAAA,MACN,IAAI,KAAK,QAAQ,IAAI,CAAC;AAAA,MACtB,MAAM,KAAK,QAAQ,MAAM,CAAC;AAAA,MAC1B,IAAI,QAAQ,IAAI,MAAM;AAAA,MACtB,YAAY,OAAO,QAAQ,YAAY,CAAC;AAAA,MACxC,GAAI,OAAO,QAAQ,QAAQ,MAAM,WAAW,EAAE,QAAQ,QAAQ,QAAQ,EAAE,IAAI,CAAC;AAAA,IAC/E;AAAA,EACF;AACA,SAAO;AACT;AAQO,SAAS,oBAAoB,SAAmD;AACrF,QAAM,UAAU,OAAO,QAAQ,OAAO;AACtC,MAAI,CAAC,QAAS,QAAO;AACrB,UAAQ,QAAQ,MAAM;AAAA,IACpB,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ,OAAO,QAAQ,kBAAkB,CAAC;AAAA,QAC1C,SAAS,OAAO,QAAQ,qBAAqB,CAAC;AAAA,MAChD;AAAA,IACF,KAAK;AACH,aAAO,EAAE,MAAM,iBAAiB,QAAQ,QAAQ;AAAA,IAClD,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU,MAAM,QAAQ,QAAQ,UAAU,CAAC,IAAI,QAAQ,UAAU,IAAI,CAAC;AAAA,MACxE;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ,MAAM,QAAQ,QAAQ,kBAAkB,CAAC,IAC7C,QAAQ,kBAAkB,EAAE;AAAA,UAC1B,CAAC,SAA0C,OAAO,IAAI,MAAM;AAAA,QAC9D,IACA,CAAC;AAAA,MACP;AAAA,IACF;AACE,aAAO;AAAA,EACX;AACF;AAYO,SAAS,sBAAsB,SAGT;AAC3B,MAAI,QAAQ,SAAS,cAAe,QAAO;AAC3C,QAAM,WAAW,OAAO,QAAQ,QAAQ;AACxC,QAAM,SAAS,WAAW,OAAO,SAAS,QAAQ,CAAC,IAAI;AACvD,MACE,CAAC,YACD,OAAO,SAAS,aAAa,MAAM,YACnC,CAAC,MAAM,QAAQ,SAAS,SAAS,CAAC,KAClC,CAAC,MAAM,QAAQ,SAAS,UAAU,CAAC,KACnC,CAAC,MAAM,QAAQ,SAAS,UAAU,CAAC,KACnC,CAAC,MAAM,QAAQ,SAAS,QAAQ,CAAC,KACjC,CAAC,MAAM,QAAQ,SAAS,WAAW,CAAC,KACpC,CAAC,UACD,CAAC,gBAAgB,MAAM,KACvB,CAAC,cAAc,SAAS,UAAU,CAAC,KACnC,CAAC,cAAc,SAAS,cAAc,CAAC,KACvC,CAAC,cAAc,SAAS,YAAY,CAAC,GACrC;AACA,WAAO;AAAA,EACT;AACA,SAAO,EAAE,MAAM,eAAe,SAA4C;AAC5E;AAcO,SAAS,sBAAsB,SAGT;AAC3B,MAAI,QAAQ,SAAS,WAAY,QAAO;AACxC,QAAM,QAAQ,OAAO,QAAQ,KAAK;AAClC,MACE,CAAC,SACD,OAAO,MAAM,IAAI,MAAM,YACvB,OAAO,MAAM,MAAM,MAAM,YACzB,OAAO,MAAM,WAAW,MAAM,YAC9B,OAAO,MAAM,UAAU,MAAM,YAC7B,OAAO,MAAM,WAAW,MAAM,YAC9B,OAAO,MAAM,KAAK,MAAM,UACxB;AACA,WAAO;AAAA,EACT;AACA,SAAO,EAAE,MAAM,YAAY,MAA2C;AACxE;AAOO,SAAS,sBAAsB,SAKT;AAC3B,MAAI,QAAQ,SAAS,WAAY,QAAO;AACxC,MACE,OAAO,QAAQ,UAAU,MAAM,YAC/B,CAAC,CAAC,QAAQ,QAAQ,OAAO,EAAE,SAAS,QAAQ,UAAU,CAAC,KACvD,OAAO,QAAQ,SAAS,MAAM,YAC9B,OAAO,QAAQ,WAAW,MAAM,UAChC;AACA,WAAO;AAAA,EACT;AACA,SAAO,EAAE,MAAM,YAAY,OAAO,QAAqC;AACzE;AAOO,SAAS,8BAA8B,SAGT;AACnC,MAAI,QAAQ,SAAS,oBAAqB,QAAO;AACjD,QAAM,UAAU,OAAO,QAAQ,OAAO;AACtC,MACE,CAAC,WACD,OAAO,QAAQ,WAAW,MAAM,YAChC,OAAO,QAAQ,MAAM,MAAM,YAC3B,OAAO,QAAQ,UAAU,MAAM,YAC/B,OAAO,QAAQ,YAAY,MAAM,YACjC,OAAO,QAAQ,YAAY,MAAM,YACjC,OAAO,QAAQ,QAAQ,MAAM,YAC7B,CAAC,CAAC,UAAU,aAAa,OAAO,EAAE,SAAS,QAAQ,QAAQ,CAAC,GAC5D;AACA,WAAO;AAAA,EACT;AACA,SAAO,EAAE,MAAM,qBAAqB,QAAmD;AACzF;;;ACjSA,SAAS,qBAAqB,6BAA6B;AAOpD,IAAM,qBAAqB;AAoB3B,SAAS,mBAAmB,QAA2C;AAC5E,QAAM,MAA2B,CAAC;AAElC,QAAM,WAAW,OAAO;AACxB,MAAI,SAAS,SAAS,GAAG;AACvB,QAAI,iBACF,SAAS,SAAS,qBACd,SAAS,MAAM,CAAC,kBAAkB,IAClC,CAAC,GAAG,QAAQ;AAAA,EACpB;AAEA,MAAI,OAAO,UAAU,OAAO,OAAO,SAAS,GAAG;AAC7C,UAAM,UAAU,sBAAsB,OAAO,QAAQ,mBAAmB;AACxE,QAAI,QAAQ,SAAS,EAAG,KAAI,gBAAgB;AAAA,EAC9C;AAEA,QAAM,QAAQ,OAAO;AACrB,MACE,SACA,MAAM,QAAQ,MAAM,UAAU,MAAM,aAAa,MAAM,MAAM,cAAc,KAAK,GAChF;AACA,QAAI,cAAc;AAAA,MAChB,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,MACd,WAAW,MAAM,aAAa;AAAA,MAC9B,YAAY,MAAM,cAAc;AAAA,IAClC;AAAA,EACF;AAEA,SAAO;AACT;;;AC1EO,IAAM,2BAA2B;AACjC,IAAM,+BAA+B;AAErC,IAAM,gCAAgC;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAgBO,SAAS,wBAGd;AACA,SAAO;AAAA,IACL,iBAAiB;AAAA,IACjB,sBAAsB,CAAC,GAAG,6BAA6B;AAAA,EACzD;AACF;AAEO,SAAS,kBAAkB,MAAkD;AAClF,QAAM,cAAc,KAAK;AACzB,QAAM,aAAa,gBAAgB;AACnC,QAAM,UAAU,aACZ,2BACA,KAAK,IAAI,aAAa,wBAAwB;AAClD,QAAM,aACJ,cAAe,OAAO,UAAU,WAAW,KAAK,eAAe;AACjE,QAAM,aAAa,IAAI,IAAI,KAAK,wBAAwB,CAAC,CAAC;AAC1D,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc,8BAA8B,OAAO,CAAC,SAAS,WAAW,IAAI,IAAI,CAAC;AAAA,EACnF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -10,6 +10,8 @@ export interface SessionProjection {
|
|
|
10
10
|
maxContext: number;
|
|
11
11
|
reset: boolean;
|
|
12
12
|
replayMessages: unknown[] | null;
|
|
13
|
+
/** Audit markers replayed alongside the conversation. */
|
|
14
|
+
replayMarkers: unknown[] | null;
|
|
13
15
|
replayUsage: Record<string, unknown> | null;
|
|
14
16
|
}
|
|
15
17
|
export declare function projectSessionMessage(message: ProtocolEnvelope): SessionProjection | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projections.d.ts","sourceRoot":"","sources":["../../src/protocol/projections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAkCnD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC7C;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,iBAAiB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"projections.d.ts","sourceRoot":"","sources":["../../src/protocol/projections.ts"],"names":[],"mappings":"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"}
|
|
@@ -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.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.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.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", "diag.get", "key.add", "key.delete", "key.set_active", "key.update", "prefs.get", "prefs.update", "provider.add", "provider.clear_models", "provider.models", "provider.probe", "provider.remove", "provider.undo_clear", "provider.update", "providers.list", "providers.saved", "tool.disable", "tool.enable", "tools.list", "webui.shutdown", "goal-state.get", "goal.addTask", "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.start", "sdd.spec.approve", "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.query", "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", "compaction.failed", "completion.result", "context.compacted", "context.debug", "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.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.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.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", "diag.get", "key.operation_result", "prefs.updated", "provider.catalog", "provider.models", "provider.probe", "providers.saved", "budget.decision", "budget.threshold_reached", "coordinator.stats", "coordinator.status", "eternal.iteration", "fleet.concurrency_update", "goal-state.updated", "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.query_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", "completion.request", "model.switch", "model.refine", "autonomy.switch", "context.clear", "context.compact", "context.debug", "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.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.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", "diag.get", "key.add", "key.delete", "key.set_active", "key.update", "prefs.get", "prefs.update", "provider.add", "provider.clear_models", "provider.models", "provider.probe", "provider.remove", "provider.undo_clear", "provider.update", "providers.list", "providers.saved", "tool.disable", "tool.enable", "tools.list", "webui.shutdown", "goal-state.get", "goal.addTask", "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.start", "sdd.spec.approve", "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", "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", "compaction.failed", "completion.result", "context.compacted", "context.debug", "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.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.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", "diag.get", "key.operation_result", "prefs.updated", "provider.catalog", "provider.models", "provider.probe", "providers.saved", "budget.decision", "budget.threshold_reached", "coordinator.stats", "coordinator.status", "eternal.iteration", "fleet.concurrency_update", "goal-state.updated", "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", "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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/protocol/registry.ts"],"names":[],"mappings":"AA+BA,eAAO,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/protocol/registry.ts"],"names":[],"mappings":"AA+BA,eAAO,MAAM,oBAAoB,+lHASvB,CAAC;AAEX,eAAO,MAAM,oBAAoB,63IAUvB,CAAC;AAEX,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3E,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAK3E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAO7F"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Replay payload assembly for `session.start`.
|
|
3
|
+
*
|
|
4
|
+
* Two servers build this frame — the standalone WebUI server and the
|
|
5
|
+
* CLI-hosted bridge — and they had already drifted (one fell back to the live
|
|
6
|
+
* in-memory conversation, the other did not; only one applied the message cap
|
|
7
|
+
* consistently). Both now call this, so the wire shape has a single definition.
|
|
8
|
+
*
|
|
9
|
+
* `replayMarkers` carries audit markers (compaction, mode switch, skill
|
|
10
|
+
* activation, subagent lifecycle, provider retries, truncation) that a live
|
|
11
|
+
* client renders as they stream in. Without them a reconnect or a session
|
|
12
|
+
* resume silently drops everything except the conversation, so the same
|
|
13
|
+
* session reads differently before and after a reload. Only the *projected*
|
|
14
|
+
* markers cross the wire — never the raw event stream — so a 50k-event session
|
|
15
|
+
* still costs a few dozen short strings.
|
|
16
|
+
*/
|
|
17
|
+
import type { Message, SessionEvent, SessionMarker, Usage } from '@wrongstack/core/types';
|
|
18
|
+
/**
|
|
19
|
+
* Upper bound on replayed conversation messages. A very long session would
|
|
20
|
+
* otherwise push a multi-megabyte frame on every connect; the full transcript
|
|
21
|
+
* remains on disk and in the session store.
|
|
22
|
+
*/
|
|
23
|
+
export declare const REPLAY_MESSAGE_CAP = 2000;
|
|
24
|
+
export interface ReplaySource {
|
|
25
|
+
messages: readonly Message[];
|
|
26
|
+
/** Raw JSONL events, when the caller loaded them. Markers are projected from these. */
|
|
27
|
+
events?: readonly SessionEvent[] | undefined;
|
|
28
|
+
usage?: Usage | undefined;
|
|
29
|
+
}
|
|
30
|
+
export interface ReplayPayloadFields {
|
|
31
|
+
replayMessages?: Message[] | undefined;
|
|
32
|
+
replayMarkers?: SessionMarker[] | undefined;
|
|
33
|
+
replayUsage?: Usage | undefined;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Build the replay fields of a `session.start` payload. Fields are omitted
|
|
37
|
+
* rather than sent empty, so an existing client's "did the server send a
|
|
38
|
+
* replay?" checks keep working unchanged.
|
|
39
|
+
*/
|
|
40
|
+
export declare function buildReplayPayload(source: ReplaySource): ReplayPayloadFields;
|
|
41
|
+
//# sourceMappingURL=replay-payload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay-payload.d.ts","sourceRoot":"","sources":["../../src/protocol/replay-payload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAG1F;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AAExC,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,uFAAuF;IACvF,MAAM,CAAC,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,CAAC;IAC7C,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,CAAC,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;IACvC,aAAa,CAAC,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IAC5C,WAAW,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;CACjC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,mBAAmB,CA8B5E"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const SERVER_KNOWLEDGE_MESSAGE_TYPES: readonly ['brain.answer', 'brain.config', 'brain.event', 'brain.status', 'chronicle.error', 'chronicle.facet_result', 'chronicle.facets_result', 'chronicle.graph_result', 'chronicle.query_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'];
|
|
1
|
+
export declare const SERVER_KNOWLEDGE_MESSAGE_TYPES: readonly ['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', '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'];
|
|
2
2
|
export declare const SERVER_EXTENSION_MESSAGE_TYPES: readonly ['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
|
//# sourceMappingURL=server-integrations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-integrations.d.ts","sourceRoot":"","sources":["../../src/protocol/server-integrations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,YACzC,cAAc,EACd,cAAc,EACd,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,aAAa,EACb,iCAAiC,EACjC,8BAA8B,EAC9B,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,CACZ,CAAC;AAEX,eAAO,MAAM,8BAA8B,YACzC,mBAAmB,EACnB,sBAAsB,EACtB,UAAU,EACV,sBAAsB,EACtB,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,EACzB,uBAAuB,EACvB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,gBAAgB,CACR,CAAC"}
|
|
1
|
+
{"version":3,"file":"server-integrations.d.ts","sourceRoot":"","sources":["../../src/protocol/server-integrations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,YACzC,cAAc,EACd,cAAc,EACd,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,sBAAsB,EACtB,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,aAAa,EACb,iCAAiC,EACjC,8BAA8B,EAC9B,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,CACZ,CAAC;AAEX,eAAO,MAAM,8BAA8B,YACzC,mBAAmB,EACnB,sBAAsB,EACtB,UAAU,EACV,sBAAsB,EACtB,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,EACzB,uBAAuB,EACvB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,gBAAgB,CACR,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const SERVER_WORKSPACE_MESSAGE_TYPES: readonly ['checkpoint.written', 'codemap.file_event', '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.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'];
|
|
2
2
|
export declare const SERVER_CONFIGURATION_MESSAGE_TYPES: readonly ['auth.oauth.status', 'diag.get', 'key.operation_result', 'prefs.updated', 'provider.catalog', 'provider.models', 'provider.probe', 'providers.saved'];
|
|
3
3
|
//# sourceMappingURL=server-workspace.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-workspace.d.ts","sourceRoot":"","sources":["../../src/protocol/server-workspace.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,YACzC,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,aAAa,EACb,UAAU,EACV,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,CACR,CAAC;AAEX,eAAO,MAAM,kCAAkC,YAC7C,mBAAmB,EACnB,UAAU,EACV,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,CACT,CAAC"}
|
|
1
|
+
{"version":3,"file":"server-workspace.d.ts","sourceRoot":"","sources":["../../src/protocol/server-workspace.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,YACzC,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,aAAa,EACb,UAAU,EACV,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,CACR,CAAC;AAEX,eAAO,MAAM,kCAAkC,YAC7C,mBAAmB,EACnB,UAAU,EACV,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,CACT,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export declare const SURFACE_PROTOCOL_VERSION: 1;
|
|
2
2
|
export declare const SURFACE_PROTOCOL_MIN_VERSION: 1;
|
|
3
|
-
export declare const SURFACE_PROTOCOL_CAPABILITIES: readonly ['protocol.directional-decoder', 'protocol.recursive-key-safety', 'chronicle.query', 'chronicle.facet', 'chronicle.facets', 'chronicle.graph'];
|
|
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'];
|
|
4
4
|
export type SurfaceProtocolCapability = (typeof SURFACE_PROTOCOL_CAPABILITIES)[number];
|
|
5
5
|
export interface ProtocolAdvertisement {
|
|
6
6
|
protocolVersion?: number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/protocol/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,EAAG,CAAU,CAAC;AACnD,eAAO,MAAM,4BAA4B,EAAG,CAAU,CAAC;AAEvD,eAAO,MAAM,6BAA6B,YACxC,8BAA8B,EAC9B,+BAA+B,EAC/B,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/protocol/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,EAAG,CAAU,CAAC;AACnD,eAAO,MAAM,4BAA4B,EAAG,CAAU,CAAC;AAEvD,eAAO,MAAM,6BAA6B,YACxC,8BAA8B,EAC9B,+BAA+B,EAC/B,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,CACX,CAAC;AAEX,MAAM,MAAM,yBAAyB,GAAG,CAAC,OAAO,6BAA6B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvF,MAAM,WAAW,qBAAqB;IACpC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,yBAAyB,EAAE,CAAC;CAC3C;AAED,wBAAgB,qBAAqB,IAAI;IACvC,eAAe,EAAE,OAAO,wBAAwB,CAAC;IACjD,oBAAoB,EAAE,yBAAyB,EAAE,CAAC;CACnD,CAKA;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,mBAAmB,CAelF"}
|