@deepseek-ai/dsh-cordis-host-runner 0.1.2-alpha.2 → 0.1.2-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.i18n.yaml CHANGED
@@ -2,5 +2,5 @@
2
2
  # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
3
  # after editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write packages/extensions/cordis-host-runner/README.md
5
- README.md: ec229d225955718977679b00db522ddcf4a3035e
6
- README.zh.md: 862746798e355d9f5c53fad2b8c69be4d73db3eb
5
+ README.md: c9f573557607163103adc0ab7277f3ab569d7ab8
6
+ README.zh.md: ae0b24d66df733cca80bea24f2d2be022254dc80
package/README.md CHANGED
@@ -142,3 +142,5 @@ These limits define when the runner needs special care. They are current package
142
142
  None.
143
143
 
144
144
  </details>
145
+
146
+ **Runtime invariant:** No companion is published. The definition registry is process memory with no event stream to observe, and its one owned relation (a running definition owns a settled host-half fiber and its handler table) is established and unwound inside single awaited verbs, so package tests assert it directly.
package/README.zh.md CHANGED
@@ -142,3 +142,5 @@ runner 建立在两个分离之上。**注册表与沙箱是同一个服务。**
142
142
  无。
143
143
 
144
144
  </details>
145
+
146
+ **运行时不变式:** 不发布伴生入口。definition registry 是无事件流的进程内存;运行 definition 与 host-half fiber/handler table 的关系在单个 awaited verb 内建立和释放。
@@ -822,6 +822,10 @@ export const TYPERT = {
822
822
  "name": "AgentCancelCause",
823
823
  "declaration": "export type AgentCancelCause = { readonly kind: 'user'; } | { readonly kind: 'parent'; } | { readonly kind: 'hook'; readonly reason: string; } | { readonly kind: 'disposed'; };"
824
824
  },
825
+ {
826
+ "name": "AgentMessageSource",
827
+ "declaration": "export interface AgentMessageSource {\n readonly kind: 'agent-message';\n readonly form: 'relay';\n readonly senderSessionId: SessionId;\n}"
828
+ },
825
829
  {
826
830
  "name": "AgentOptions",
827
831
  "declaration": "export interface AgentOptions {\n provider?: string;\n model?: string;\n reasoningEffort?: ReasoningEffortId;\n maxTokens?: number;\n subagentDepth?: number;\n}"
@@ -858,6 +862,10 @@ export const TYPERT = {
858
862
  "name": "Branded",
859
863
  "declaration": "export type Branded<B extends string> = string & { readonly [BRAND]: B; };"
860
864
  },
865
+ {
866
+ "name": "BrandedNumber",
867
+ "declaration": "export type BrandedNumber<B extends string> = number & { readonly [BRAND]: B; };"
868
+ },
861
869
  {
862
870
  "name": "CancelOptions",
863
871
  "declaration": "export interface CancelOptions {\n keepInbox?: boolean | undefined;\n}"
@@ -902,10 +910,6 @@ export const TYPERT = {
902
910
  "name": "ContinuableSubagentDescriptorData",
903
911
  "declaration": "export interface ContinuableSubagentDescriptorData extends SubagentDescriptorBase {\n readonly mode: 'continuable';\n readonly label: string;\n readonly agentProvider?: string;\n readonly agentModel?: string;\n readonly agentReasoningEffort?: ReasoningEffortId;\n readonly persona?: string;\n readonly toolFilter?: ToolRestriction;\n}"
904
912
  },
905
- {
906
- "name": "CoordinatorMessageSource",
907
- "declaration": "export interface CoordinatorMessageSource {\n readonly kind: 'coordinator';\n readonly form: 'relay';\n readonly senderSessionId: SessionId;\n}"
908
- },
909
913
  {
910
914
  "name": "CordisInspectMethodManifest",
911
915
  "declaration": "export interface CordisInspectMethodManifest {\n name: string;\n description: string;\n inputSchema: JsonValue;\n outputSchema: JsonValue;\n}"
@@ -1044,7 +1048,7 @@ export const TYPERT = {
1044
1048
  },
1045
1049
  {
1046
1050
  "name": "MessageSourceMap",
1047
- "declaration": "export interface MessageSourceMap {\n user: { kind: 'user'; };\n plugin: { kind: 'plugin'; plugin: string; } & ContextFormed;\n model: ModelMessageSource;\n tool: ToolMessageSource;\n 'user-rpc': { kind: 'user'; rpcId: SessionRequestId; clientTimeZone?: string; };\n coordinator: CoordinatorMessageSource;\n 'subagent-report': SubagentReportMessageSource;\n 'subagent-settled': SubagentSettledMessageSource;\n 'skill-invocation': SkillInvocationSource;\n 'team-message': TeamMessageSource;\n goal: GoalMessageSource;\n 'session-reference': SessionReferenceSource;\n}"
1051
+ "declaration": "export interface MessageSourceMap {\n user: { kind: 'user'; };\n plugin: { kind: 'plugin'; plugin: string; } & ContextFormed;\n model: ModelMessageSource;\n tool: ToolMessageSource;\n 'user-rpc': { kind: 'user'; rpcId: SessionRequestId; clientTimeZone?: string; };\n 'agent-message': AgentMessageSource;\n 'subagent-settled': SubagentSettledMessageSource;\n 'skill-invocation': SkillInvocationSource;\n 'team-message': TeamMessageSource;\n goal: GoalMessageSource;\n 'session-reference': SessionReferenceSource;\n}"
1048
1052
  },
1049
1053
  {
1050
1054
  "name": "ModelMessageSource",
@@ -1058,6 +1062,10 @@ export const TYPERT = {
1058
1062
  "name": "OneShotSubagentDescriptorData",
1059
1063
  "declaration": "export interface OneShotSubagentDescriptorData extends SubagentDescriptorBase {\n readonly mode: 'one-shot';\n readonly label?: string;\n}"
1060
1064
  },
1065
+ {
1066
+ "name": "OptionalSessionSeq",
1067
+ "declaration": "export type OptionalSessionSeq = SessionSeq | null;"
1068
+ },
1061
1069
  {
1062
1070
  "name": "ProviderRequestId",
1063
1071
  "declaration": "export type ProviderRequestId = Branded<'ProviderRequestId'>;"
@@ -1096,15 +1104,15 @@ export const TYPERT = {
1096
1104
  },
1097
1105
  {
1098
1106
  "name": "Session",
1099
- "declaration": "export class Session {\n get surface(): SessionSurface;\n readonly header: SessionHeader;\n get id(): SessionId;\n readonly firstLiveSeq: number;\n get events(): readonly SessionEvent[];\n get seq(): number;\n append<T extends SessionEventType>(type: T, data: SessionEventMap[T], ...opts: T extends SurfaceEventType ? [opts: SurfaceIntent] : []): SessionEvent<T>;\n requestHeader(): EpochHeader | undefined;\n requestContext(): RequestContext | undefined;\n deriveMessages(): Message[];\n deriveEventMessage(event: SessionEvent): Message | null;\n}"
1107
+ "declaration": "export class Session {\n get surface(): SessionSurface;\n readonly header: SessionHeader;\n readonly inheritedEventCount: SessionLogOffset;\n get id(): SessionId;\n readonly firstLiveSeq: SessionLogOffset;\n eventAt(seq: SessionSeq): SessionEvent | undefined;\n snapshotEvents(fromSeq: SessionLogOffset = SessionLogOffset(0), toSeqExclusive: SessionLogOffset = this.seq): readonly SessionEvent[];\n ownEvents(): readonly SessionEvent[];\n isOwnSeq(seq: SessionSeq): boolean;\n get seq(): SessionLogOffset;\n append<T extends SessionEventType>(type: T, data: SessionEventMap[T], ...opts: T extends SurfaceEventType ? [opts: SurfaceIntent] : []): SessionEvent<T>;\n requestHeader(): EpochHeader | undefined;\n requestContext(): RequestContext | undefined;\n deriveMessages(): Message[];\n deriveEventMessage(event: SessionEvent): Message | null;\n}"
1100
1108
  },
1101
1109
  {
1102
1110
  "name": "SessionEvent",
1103
- "declaration": "export type SessionEvent<T extends SessionEventType = SessionEventType> = { [K in SessionEventType]: { type: K; seq: number; time: number; data: SessionEventMap[K]; ignorable?: true; } & (K extends SurfaceEventType ? { sourceEventSeqs?: number[]; surfaceOp?: SurfaceOp; } : object) }[T];"
1111
+ "declaration": "export type SessionEvent<T extends SessionEventType = SessionEventType> = { [K in SessionEventType]: { type: K; seq: SessionSeq; time: number; data: SessionEventMap[K]; ignorable?: true; } & (K extends SurfaceEventType ? { sourceEventSeqs?: SessionSeq[]; surfaceOp?: SurfaceOp; } : object) }[T];"
1104
1112
  },
1105
1113
  {
1106
1114
  "name": "SessionEventMap",
1107
- "declaration": "export interface SessionEventMap {\n 'turn/start': { turn: number; };\n 'turn/end': { turn: number; reason: TurnEndReason; };\n 'step/start': { turn: number; step: number; };\n 'step/end': { turn: number; step: number; };\n 'user/message': UserMessage;\n 'assistant/chunk': { turn: number; step: number; chunk: StreamChunk; };\n 'assistant/message': { turn: number; step: number; message: AssistantMessage; usage?: TokenUsage; interrupted?: true; };\n 'tool/call': { turn: number; step: number; callId: ToolCallId; name: string; arguments: string; };\n 'tool/result': { turn: number; step: number; message: ToolResultMessage; error?: { name: string; code: string; }; meta?: JsonValue; };\n 'request/header': { header: EpochHeader; reason: RequestHeaderReason; startsSeries?: true; };\n 'request/context': RequestContext;\n 'session/end-seed': Record<string, never>;\n 'agent/inbox/spliced': { target: InboxTarget; start: number; removedCount?: number; inserted: UserMessage[]; outcome?: 'canceled'; };\n 'approval/asked': { id: ApprovalRequestId; toolName: string; callId?: ToolCallId; reason?: string; };\n 'approval/decided': { id: ApprovalRequestId; outcome: ApprovalOutcome; };\n 'approval/policy': { policy: ApprovalPolicy; source?: 'delegation'; };\n 'tool/code-dispatch-start': PtcDispatchStartEventData;\n 'tool/code-dispatch': PtcDispatchEventData;\n 'agent-preset/selected': { agentPreset: string; };\n 'session/title': SessionTitleEventData;\n 'todo/write': { todos: TodoItem[]; };\n 'model/selection': ModelSelection;\n 'subagent/descriptor': SubagentDescriptorData;\n 'sandbox/mode': { mode: SandboxMode; source?: 'delegation'; };\n 'command/run': { commandId: CommandId; name: string; args?: string; source: CommandSource; };\n 'command/done': { commandId: CommandId; kind: 'success' | 'error'; text?: string; sourceEventSeq?: number; };\n 'team/member': { version: 1; teamId: TeamId; member: TeamMemberSnapshot; };\n 'team/task': { version: 1; teamId: TeamId; task: TeamTaskSnapshot; };\n 'team/message/queued': { version: 1; teamId: TeamId; message: TeamMessageSnapshot; };\n 'team/message/delivered': { version: 1; teamId: TeamId; messageId: TeamMessageId; targetId: SessionId; };\n 'goal/change': GoalChangeMeta;\n 'compaction/start': { compactionId: CompactionId; sourceCommandId?: CommandId; turn: number | null; };\n 'compaction/summary': { compactionId: CompactionId; sourceCommandId?: CommandId; summary: ContentBlock[]; shadowedRange: { start: number; end: number; }; shadowedSeqs: number[]; shadowedTokenCount: number; provider: string; model: string; maxTokens?: number; usage?: TokenUsage; } & ({ rawOutput: ContentBlock[]; llmStreamCall: true; } | { rawOutput?: ContentBlock[]; llmStreamCall?: never; });\n 'compaction/end': { compactionId: CompactionId; sourceCommandId?: CommandId; turn: number | null; error?: string; };\n 'compaction/prune': { shadowedRange: { start: number; end: number; }; shadowedSeqs: number[]; shadowedTokenCount: number; };\n}"
1115
+ "declaration": "export interface SessionEventMap {\n 'turn/start': { turn: number; };\n 'turn/end': { turn: number; reason: TurnEndReason; };\n 'step/start': { turn: number; step: number; };\n 'step/end': { turn: number; step: number; };\n 'user/message': UserMessage;\n 'assistant/chunk': { turn: number; step: number; chunk: StreamChunk; };\n 'assistant/message': { turn: number; step: number; message: AssistantMessage; usage?: TokenUsage; interrupted?: true; };\n 'tool/call': { turn: number; step: number; callId: ToolCallId; name: string; arguments: string; };\n 'tool/result': { turn: number; step: number; message: ToolResultMessage; error?: { name: string; code: string; }; meta?: JsonValue; };\n 'request/header': { header: EpochHeader; reason: RequestHeaderReason; startsSeries?: true; };\n 'request/context': RequestContext;\n 'session/end-seed': Record<string, never>;\n 'agent/inbox/spliced': { target: InboxTarget; start: number; removedCount?: number; inserted: UserMessage[]; outcome?: 'canceled'; };\n 'approval/asked': { id: ApprovalRequestId; toolName: string; callId?: ToolCallId; reason?: string; };\n 'approval/decided': { id: ApprovalRequestId; outcome: ApprovalOutcome; };\n 'approval/policy': { policy: ApprovalPolicy; source?: 'delegation'; };\n 'tool/code-dispatch-start': PtcDispatchStartEventData;\n 'tool/code-dispatch': PtcDispatchEventData;\n 'agent-preset/selected': { agentPreset: string; };\n 'session/title': SessionTitleEventData;\n 'todo/write': { todos: TodoItem[]; };\n 'model/selection': ModelSelection;\n 'subagent/descriptor': SubagentDescriptorData;\n 'sandbox/mode': { mode: SandboxMode; source?: 'delegation'; };\n 'command/run': { commandId: CommandId; name: string; args?: string; source: CommandSource; };\n 'command/done': { commandId: CommandId; kind: 'success' | 'error'; text?: string; sourceEventSeq?: import('@deepseek-ai/dsh-session/types').SessionSeq; };\n 'team/member': { version: 1; teamId: TeamId; member: TeamMemberSnapshot; };\n 'team/task': { version: 1; teamId: TeamId; task: TeamTaskSnapshot; };\n 'team/message/queued': { version: 1; teamId: TeamId; message: TeamMessageSnapshot; };\n 'team/message/delivered': { version: 1; teamId: TeamId; messageId: TeamMessageId; targetId: SessionId; };\n 'goal/change': GoalChangeMeta;\n 'compaction/start': { compactionId: CompactionId; sourceCommandId?: CommandId; turn: number | null; };\n 'compaction/summary': { compactionId: CompactionId; sourceCommandId?: CommandId; summary: ContentBlock[]; shadowedRange: { start: SessionSeq; end: SessionSeq; }; shadowedSeqs: SessionSeq[]; shadowedTokenCount: number; provider: string; model: string; maxTokens?: number; usage?: TokenUsage; } & ({ rawOutput: ContentBlock[]; llmStreamCall: true; } | { rawOutput?: ContentBlock[]; llmStreamCall?: never; });\n 'compaction/end': { compactionId: CompactionId; sourceCommandId?: CommandId; turn: number | null; error?: string; };\n 'compaction/prune': { shadowedRange: { start: SessionSeq; end: SessionSeq; }; shadowedSeqs: SessionSeq[]; shadowedTokenCount: number; };\n}"
1108
1116
  },
1109
1117
  {
1110
1118
  "name": "SessionEventType",
@@ -1112,27 +1120,35 @@ export const TYPERT = {
1112
1120
  },
1113
1121
  {
1114
1122
  "name": "SessionHeader",
1115
- "declaration": "export interface SessionHeader {\n readonly version: number;\n readonly id: SessionId;\n readonly createdAt: number;\n readonly cwd?: string;\n readonly parentSession?: SessionId;\n readonly seedLength?: number;\n readonly origin?: 'subagent';\n readonly delegationDepth?: number;\n readonly agentPreset?: string;\n}"
1123
+ "declaration": "export interface SessionHeader {\n readonly version: number;\n readonly id: SessionId;\n readonly createdAt: number;\n readonly cwd?: string;\n readonly parentSession?: SessionId;\n readonly isSeeded: boolean;\n readonly origin?: 'subagent';\n readonly delegationDepth?: number;\n readonly agentPreset?: string;\n}"
1116
1124
  },
1117
1125
  {
1118
1126
  "name": "SessionId",
1119
1127
  "declaration": "export type SessionId = Branded<'SessionId'>;"
1120
1128
  },
1129
+ {
1130
+ "name": "SessionLogOffset",
1131
+ "declaration": "export type SessionLogOffset = BrandedNumber<'SessionLogOffset'>;"
1132
+ },
1121
1133
  {
1122
1134
  "name": "SessionReferenceSource",
1123
- "declaration": "export interface SessionReferenceSource {\n kind: 'session-reference';\n form: 'recall';\n version: 1;\n references: { sessionId: string; label: string; capturedThroughSeq: number | null; compacted: boolean; originalMessages: number; retainedMessages: number; omittedMessages: number; omittedBytes: number; truncated: boolean; inputIndex: number; }[];\n}"
1135
+ "declaration": "export interface SessionReferenceSource {\n kind: 'session-reference';\n form: 'recall';\n version: 1;\n references: { sessionId: string; label: string; capturedThroughSeq: OptionalSessionSeq; compacted: boolean; originalMessages: number; retainedMessages: number; omittedMessages: number; omittedBytes: number; truncated: boolean; inputIndex: number; }[];\n}"
1124
1136
  },
1125
1137
  {
1126
1138
  "name": "SessionRequestId",
1127
1139
  "declaration": "export type SessionRequestId = Branded<'session-request-id'>;"
1128
1140
  },
1141
+ {
1142
+ "name": "SessionSeq",
1143
+ "declaration": "export type SessionSeq = BrandedNumber<'SessionSeq'>;"
1144
+ },
1129
1145
  {
1130
1146
  "name": "SessionSurface",
1131
- "declaration": "export interface SessionSurface {\n readonly nodes: readonly number[];\n readonly replaceGeneration: number;\n}"
1147
+ "declaration": "export interface SessionSurface {\n readonly nodes: readonly SessionSeq[];\n readonly replaceGeneration: number;\n}"
1132
1148
  },
1133
1149
  {
1134
1150
  "name": "SessionTitleEventData",
1135
- "declaration": "export interface SessionTitleEventData {\n readonly title: string;\n readonly messageSeqs: number[];\n readonly source: SessionTitleSource;\n}"
1151
+ "declaration": "export interface SessionTitleEventData {\n readonly title: string;\n readonly messageSeqs: SessionSeq[];\n readonly source: SessionTitleSource;\n}"
1136
1152
  },
1137
1153
  {
1138
1154
  "name": "SessionTitleModelProvenance",
@@ -1162,10 +1178,6 @@ export const TYPERT = {
1162
1178
  "name": "SubagentDescriptorData",
1163
1179
  "declaration": "export type SubagentDescriptorData = OneShotSubagentDescriptorData | ContinuableSubagentDescriptorData;"
1164
1180
  },
1165
- {
1166
- "name": "SubagentReportMessageSource",
1167
- "declaration": "export interface SubagentReportMessageSource {\n readonly kind: 'subagent-report';\n readonly form: 'relay';\n readonly senderSessionId: SessionId;\n}"
1168
- },
1169
1181
  {
1170
1182
  "name": "SubagentSettledMessageSource",
1171
1183
  "declaration": "export interface SubagentSettledMessageSource {\n readonly kind: 'subagent-settled';\n readonly form: 'notice';\n readonly summary: string;\n readonly senderSessionId: SessionId;\n}"
@@ -1176,11 +1188,11 @@ export const TYPERT = {
1176
1188
  },
1177
1189
  {
1178
1190
  "name": "SurfaceIntent",
1179
- "declaration": "export interface SurfaceIntent {\n surfaceOp: SurfaceOp;\n sourceEventSeqs?: number[];\n}"
1191
+ "declaration": "export interface SurfaceIntent {\n surfaceOp: SurfaceOp;\n sourceEventSeqs?: SessionSeq[];\n}"
1180
1192
  },
1181
1193
  {
1182
1194
  "name": "SurfaceOp",
1183
- "declaration": "export type SurfaceOp = 'append' | { op: 'replace'; start: number; end: number; };"
1195
+ "declaration": "export type SurfaceOp = 'append' | { op: 'replace'; start: SessionSeq; end: SessionSeq; };"
1184
1196
  },
1185
1197
  {
1186
1198
  "name": "TeamId",
@@ -1441,6 +1453,10 @@ export const TYPERT = {
1441
1453
  "name": "AgentCancelCause",
1442
1454
  "declaration": "export type AgentCancelCause = { readonly kind: 'user'; } | { readonly kind: 'parent'; } | { readonly kind: 'hook'; readonly reason: string; } | { readonly kind: 'disposed'; };"
1443
1455
  },
1456
+ {
1457
+ "name": "AgentMessageSource",
1458
+ "declaration": "export interface AgentMessageSource {\n readonly kind: 'agent-message';\n readonly form: 'relay';\n readonly senderSessionId: SessionId;\n}"
1459
+ },
1444
1460
  {
1445
1461
  "name": "AgentOptions",
1446
1462
  "declaration": "export interface AgentOptions {\n provider?: string;\n model?: string;\n reasoningEffort?: ReasoningEffortId;\n maxTokens?: number;\n subagentDepth?: number;\n}"
@@ -1481,6 +1497,10 @@ export const TYPERT = {
1481
1497
  "name": "Branded",
1482
1498
  "declaration": "export type Branded<B extends string> = string & { readonly [BRAND]: B; };"
1483
1499
  },
1500
+ {
1501
+ "name": "BrandedNumber",
1502
+ "declaration": "export type BrandedNumber<B extends string> = number & { readonly [BRAND]: B; };"
1503
+ },
1484
1504
  {
1485
1505
  "name": "CancelOptions",
1486
1506
  "declaration": "export interface CancelOptions {\n keepInbox?: boolean | undefined;\n}"
@@ -1525,10 +1545,6 @@ export const TYPERT = {
1525
1545
  "name": "ContinuableSubagentDescriptorData",
1526
1546
  "declaration": "export interface ContinuableSubagentDescriptorData extends SubagentDescriptorBase {\n readonly mode: 'continuable';\n readonly label: string;\n readonly agentProvider?: string;\n readonly agentModel?: string;\n readonly agentReasoningEffort?: ReasoningEffortId;\n readonly persona?: string;\n readonly toolFilter?: ToolRestriction;\n}"
1527
1547
  },
1528
- {
1529
- "name": "CoordinatorMessageSource",
1530
- "declaration": "export interface CoordinatorMessageSource {\n readonly kind: 'coordinator';\n readonly form: 'relay';\n readonly senderSessionId: SessionId;\n}"
1531
- },
1532
1548
  {
1533
1549
  "name": "CordisDynamicPackageId",
1534
1550
  "declaration": "export type CordisDynamicPackageId = Branded<'CordisDynamicPackageId'>;"
@@ -1755,7 +1771,7 @@ export const TYPERT = {
1755
1771
  },
1756
1772
  {
1757
1773
  "name": "MessageSourceMap",
1758
- "declaration": "export interface MessageSourceMap {\n user: { kind: 'user'; };\n plugin: { kind: 'plugin'; plugin: string; } & ContextFormed;\n model: ModelMessageSource;\n tool: ToolMessageSource;\n 'user-rpc': { kind: 'user'; rpcId: SessionRequestId; clientTimeZone?: string; };\n coordinator: CoordinatorMessageSource;\n 'subagent-report': SubagentReportMessageSource;\n 'subagent-settled': SubagentSettledMessageSource;\n 'skill-invocation': SkillInvocationSource;\n 'team-message': TeamMessageSource;\n goal: GoalMessageSource;\n 'session-reference': SessionReferenceSource;\n}"
1774
+ "declaration": "export interface MessageSourceMap {\n user: { kind: 'user'; };\n plugin: { kind: 'plugin'; plugin: string; } & ContextFormed;\n model: ModelMessageSource;\n tool: ToolMessageSource;\n 'user-rpc': { kind: 'user'; rpcId: SessionRequestId; clientTimeZone?: string; };\n 'agent-message': AgentMessageSource;\n 'subagent-settled': SubagentSettledMessageSource;\n 'skill-invocation': SkillInvocationSource;\n 'team-message': TeamMessageSource;\n goal: GoalMessageSource;\n 'session-reference': SessionReferenceSource;\n}"
1759
1775
  },
1760
1776
  {
1761
1777
  "name": "ModelMessageSource",
@@ -1769,6 +1785,10 @@ export const TYPERT = {
1769
1785
  "name": "OneShotSubagentDescriptorData",
1770
1786
  "declaration": "export interface OneShotSubagentDescriptorData extends SubagentDescriptorBase {\n readonly mode: 'one-shot';\n readonly label?: string;\n}"
1771
1787
  },
1788
+ {
1789
+ "name": "OptionalSessionSeq",
1790
+ "declaration": "export type OptionalSessionSeq = SessionSeq | null;"
1791
+ },
1772
1792
  {
1773
1793
  "name": "ProviderRequestId",
1774
1794
  "declaration": "export type ProviderRequestId = Branded<'ProviderRequestId'>;"
@@ -1807,15 +1827,15 @@ export const TYPERT = {
1807
1827
  },
1808
1828
  {
1809
1829
  "name": "Session",
1810
- "declaration": "export class Session {\n get surface(): SessionSurface;\n readonly header: SessionHeader;\n get id(): SessionId;\n readonly firstLiveSeq: number;\n get events(): readonly SessionEvent[];\n get seq(): number;\n append<T extends SessionEventType>(type: T, data: SessionEventMap[T], ...opts: T extends SurfaceEventType ? [opts: SurfaceIntent] : []): SessionEvent<T>;\n requestHeader(): EpochHeader | undefined;\n requestContext(): RequestContext | undefined;\n deriveMessages(): Message[];\n deriveEventMessage(event: SessionEvent): Message | null;\n}"
1830
+ "declaration": "export class Session {\n get surface(): SessionSurface;\n readonly header: SessionHeader;\n readonly inheritedEventCount: SessionLogOffset;\n get id(): SessionId;\n readonly firstLiveSeq: SessionLogOffset;\n eventAt(seq: SessionSeq): SessionEvent | undefined;\n snapshotEvents(fromSeq: SessionLogOffset = SessionLogOffset(0), toSeqExclusive: SessionLogOffset = this.seq): readonly SessionEvent[];\n ownEvents(): readonly SessionEvent[];\n isOwnSeq(seq: SessionSeq): boolean;\n get seq(): SessionLogOffset;\n append<T extends SessionEventType>(type: T, data: SessionEventMap[T], ...opts: T extends SurfaceEventType ? [opts: SurfaceIntent] : []): SessionEvent<T>;\n requestHeader(): EpochHeader | undefined;\n requestContext(): RequestContext | undefined;\n deriveMessages(): Message[];\n deriveEventMessage(event: SessionEvent): Message | null;\n}"
1811
1831
  },
1812
1832
  {
1813
1833
  "name": "SessionEvent",
1814
- "declaration": "export type SessionEvent<T extends SessionEventType = SessionEventType> = { [K in SessionEventType]: { type: K; seq: number; time: number; data: SessionEventMap[K]; ignorable?: true; } & (K extends SurfaceEventType ? { sourceEventSeqs?: number[]; surfaceOp?: SurfaceOp; } : object) }[T];"
1834
+ "declaration": "export type SessionEvent<T extends SessionEventType = SessionEventType> = { [K in SessionEventType]: { type: K; seq: SessionSeq; time: number; data: SessionEventMap[K]; ignorable?: true; } & (K extends SurfaceEventType ? { sourceEventSeqs?: SessionSeq[]; surfaceOp?: SurfaceOp; } : object) }[T];"
1815
1835
  },
1816
1836
  {
1817
1837
  "name": "SessionEventMap",
1818
- "declaration": "export interface SessionEventMap {\n 'turn/start': { turn: number; };\n 'turn/end': { turn: number; reason: TurnEndReason; };\n 'step/start': { turn: number; step: number; };\n 'step/end': { turn: number; step: number; };\n 'user/message': UserMessage;\n 'assistant/chunk': { turn: number; step: number; chunk: StreamChunk; };\n 'assistant/message': { turn: number; step: number; message: AssistantMessage; usage?: TokenUsage; interrupted?: true; };\n 'tool/call': { turn: number; step: number; callId: ToolCallId; name: string; arguments: string; };\n 'tool/result': { turn: number; step: number; message: ToolResultMessage; error?: { name: string; code: string; }; meta?: JsonValue; };\n 'request/header': { header: EpochHeader; reason: RequestHeaderReason; startsSeries?: true; };\n 'request/context': RequestContext;\n 'session/end-seed': Record<string, never>;\n 'agent/inbox/spliced': { target: InboxTarget; start: number; removedCount?: number; inserted: UserMessage[]; outcome?: 'canceled'; };\n 'approval/asked': { id: ApprovalRequestId; toolName: string; callId?: ToolCallId; reason?: string; };\n 'approval/decided': { id: ApprovalRequestId; outcome: ApprovalOutcome; };\n 'approval/policy': { policy: ApprovalPolicy; source?: 'delegation'; };\n 'tool/code-dispatch-start': PtcDispatchStartEventData;\n 'tool/code-dispatch': PtcDispatchEventData;\n 'agent-preset/selected': { agentPreset: string; };\n 'session/title': SessionTitleEventData;\n 'todo/write': { todos: TodoItem[]; };\n 'model/selection': ModelSelection;\n 'subagent/descriptor': SubagentDescriptorData;\n 'sandbox/mode': { mode: SandboxMode; source?: 'delegation'; };\n 'command/run': { commandId: CommandId; name: string; args?: string; source: CommandSource; };\n 'command/done': { commandId: CommandId; kind: 'success' | 'error'; text?: string; sourceEventSeq?: number; };\n 'team/member': { version: 1; teamId: TeamId; member: TeamMemberSnapshot; };\n 'team/task': { version: 1; teamId: TeamId; task: TeamTaskSnapshot; };\n 'team/message/queued': { version: 1; teamId: TeamId; message: TeamMessageSnapshot; };\n 'team/message/delivered': { version: 1; teamId: TeamId; messageId: TeamMessageId; targetId: SessionId; };\n 'goal/change': GoalChangeMeta;\n 'compaction/start': { compactionId: CompactionId; sourceCommandId?: CommandId; turn: number | null; };\n 'compaction/summary': { compactionId: CompactionId; sourceCommandId?: CommandId; summary: ContentBlock[]; shadowedRange: { start: number; end: number; }; shadowedSeqs: number[]; shadowedTokenCount: number; provider: string; model: string; maxTokens?: number; usage?: TokenUsage; } & ({ rawOutput: ContentBlock[]; llmStreamCall: true; } | { rawOutput?: ContentBlock[]; llmStreamCall?: never; });\n 'compaction/end': { compactionId: CompactionId; sourceCommandId?: CommandId; turn: number | null; error?: string; };\n 'compaction/prune': { shadowedRange: { start: number; end: number; }; shadowedSeqs: number[]; shadowedTokenCount: number; };\n}"
1838
+ "declaration": "export interface SessionEventMap {\n 'turn/start': { turn: number; };\n 'turn/end': { turn: number; reason: TurnEndReason; };\n 'step/start': { turn: number; step: number; };\n 'step/end': { turn: number; step: number; };\n 'user/message': UserMessage;\n 'assistant/chunk': { turn: number; step: number; chunk: StreamChunk; };\n 'assistant/message': { turn: number; step: number; message: AssistantMessage; usage?: TokenUsage; interrupted?: true; };\n 'tool/call': { turn: number; step: number; callId: ToolCallId; name: string; arguments: string; };\n 'tool/result': { turn: number; step: number; message: ToolResultMessage; error?: { name: string; code: string; }; meta?: JsonValue; };\n 'request/header': { header: EpochHeader; reason: RequestHeaderReason; startsSeries?: true; };\n 'request/context': RequestContext;\n 'session/end-seed': Record<string, never>;\n 'agent/inbox/spliced': { target: InboxTarget; start: number; removedCount?: number; inserted: UserMessage[]; outcome?: 'canceled'; };\n 'approval/asked': { id: ApprovalRequestId; toolName: string; callId?: ToolCallId; reason?: string; };\n 'approval/decided': { id: ApprovalRequestId; outcome: ApprovalOutcome; };\n 'approval/policy': { policy: ApprovalPolicy; source?: 'delegation'; };\n 'tool/code-dispatch-start': PtcDispatchStartEventData;\n 'tool/code-dispatch': PtcDispatchEventData;\n 'agent-preset/selected': { agentPreset: string; };\n 'session/title': SessionTitleEventData;\n 'todo/write': { todos: TodoItem[]; };\n 'model/selection': ModelSelection;\n 'subagent/descriptor': SubagentDescriptorData;\n 'sandbox/mode': { mode: SandboxMode; source?: 'delegation'; };\n 'command/run': { commandId: CommandId; name: string; args?: string; source: CommandSource; };\n 'command/done': { commandId: CommandId; kind: 'success' | 'error'; text?: string; sourceEventSeq?: import('@deepseek-ai/dsh-session/types').SessionSeq; };\n 'team/member': { version: 1; teamId: TeamId; member: TeamMemberSnapshot; };\n 'team/task': { version: 1; teamId: TeamId; task: TeamTaskSnapshot; };\n 'team/message/queued': { version: 1; teamId: TeamId; message: TeamMessageSnapshot; };\n 'team/message/delivered': { version: 1; teamId: TeamId; messageId: TeamMessageId; targetId: SessionId; };\n 'goal/change': GoalChangeMeta;\n 'compaction/start': { compactionId: CompactionId; sourceCommandId?: CommandId; turn: number | null; };\n 'compaction/summary': { compactionId: CompactionId; sourceCommandId?: CommandId; summary: ContentBlock[]; shadowedRange: { start: SessionSeq; end: SessionSeq; }; shadowedSeqs: SessionSeq[]; shadowedTokenCount: number; provider: string; model: string; maxTokens?: number; usage?: TokenUsage; } & ({ rawOutput: ContentBlock[]; llmStreamCall: true; } | { rawOutput?: ContentBlock[]; llmStreamCall?: never; });\n 'compaction/end': { compactionId: CompactionId; sourceCommandId?: CommandId; turn: number | null; error?: string; };\n 'compaction/prune': { shadowedRange: { start: SessionSeq; end: SessionSeq; }; shadowedSeqs: SessionSeq[]; shadowedTokenCount: number; };\n}"
1819
1839
  },
1820
1840
  {
1821
1841
  "name": "SessionEventType",
@@ -1823,27 +1843,35 @@ export const TYPERT = {
1823
1843
  },
1824
1844
  {
1825
1845
  "name": "SessionHeader",
1826
- "declaration": "export interface SessionHeader {\n readonly version: number;\n readonly id: SessionId;\n readonly createdAt: number;\n readonly cwd?: string;\n readonly parentSession?: SessionId;\n readonly seedLength?: number;\n readonly origin?: 'subagent';\n readonly delegationDepth?: number;\n readonly agentPreset?: string;\n}"
1846
+ "declaration": "export interface SessionHeader {\n readonly version: number;\n readonly id: SessionId;\n readonly createdAt: number;\n readonly cwd?: string;\n readonly parentSession?: SessionId;\n readonly isSeeded: boolean;\n readonly origin?: 'subagent';\n readonly delegationDepth?: number;\n readonly agentPreset?: string;\n}"
1827
1847
  },
1828
1848
  {
1829
1849
  "name": "SessionId",
1830
1850
  "declaration": "export type SessionId = Branded<'SessionId'>;"
1831
1851
  },
1852
+ {
1853
+ "name": "SessionLogOffset",
1854
+ "declaration": "export type SessionLogOffset = BrandedNumber<'SessionLogOffset'>;"
1855
+ },
1832
1856
  {
1833
1857
  "name": "SessionReferenceSource",
1834
- "declaration": "export interface SessionReferenceSource {\n kind: 'session-reference';\n form: 'recall';\n version: 1;\n references: { sessionId: string; label: string; capturedThroughSeq: number | null; compacted: boolean; originalMessages: number; retainedMessages: number; omittedMessages: number; omittedBytes: number; truncated: boolean; inputIndex: number; }[];\n}"
1858
+ "declaration": "export interface SessionReferenceSource {\n kind: 'session-reference';\n form: 'recall';\n version: 1;\n references: { sessionId: string; label: string; capturedThroughSeq: OptionalSessionSeq; compacted: boolean; originalMessages: number; retainedMessages: number; omittedMessages: number; omittedBytes: number; truncated: boolean; inputIndex: number; }[];\n}"
1835
1859
  },
1836
1860
  {
1837
1861
  "name": "SessionRequestId",
1838
1862
  "declaration": "export type SessionRequestId = Branded<'session-request-id'>;"
1839
1863
  },
1864
+ {
1865
+ "name": "SessionSeq",
1866
+ "declaration": "export type SessionSeq = BrandedNumber<'SessionSeq'>;"
1867
+ },
1840
1868
  {
1841
1869
  "name": "SessionSurface",
1842
- "declaration": "export interface SessionSurface {\n readonly nodes: readonly number[];\n readonly replaceGeneration: number;\n}"
1870
+ "declaration": "export interface SessionSurface {\n readonly nodes: readonly SessionSeq[];\n readonly replaceGeneration: number;\n}"
1843
1871
  },
1844
1872
  {
1845
1873
  "name": "SessionTitleEventData",
1846
- "declaration": "export interface SessionTitleEventData {\n readonly title: string;\n readonly messageSeqs: number[];\n readonly source: SessionTitleSource;\n}"
1874
+ "declaration": "export interface SessionTitleEventData {\n readonly title: string;\n readonly messageSeqs: SessionSeq[];\n readonly source: SessionTitleSource;\n}"
1847
1875
  },
1848
1876
  {
1849
1877
  "name": "SessionTitleModelProvenance",
@@ -1873,10 +1901,6 @@ export const TYPERT = {
1873
1901
  "name": "SubagentDescriptorData",
1874
1902
  "declaration": "export type SubagentDescriptorData = OneShotSubagentDescriptorData | ContinuableSubagentDescriptorData;"
1875
1903
  },
1876
- {
1877
- "name": "SubagentReportMessageSource",
1878
- "declaration": "export interface SubagentReportMessageSource {\n readonly kind: 'subagent-report';\n readonly form: 'relay';\n readonly senderSessionId: SessionId;\n}"
1879
- },
1880
1904
  {
1881
1905
  "name": "SubagentSettledMessageSource",
1882
1906
  "declaration": "export interface SubagentSettledMessageSource {\n readonly kind: 'subagent-settled';\n readonly form: 'notice';\n readonly summary: string;\n readonly senderSessionId: SessionId;\n}"
@@ -1887,11 +1911,11 @@ export const TYPERT = {
1887
1911
  },
1888
1912
  {
1889
1913
  "name": "SurfaceIntent",
1890
- "declaration": "export interface SurfaceIntent {\n surfaceOp: SurfaceOp;\n sourceEventSeqs?: number[];\n}"
1914
+ "declaration": "export interface SurfaceIntent {\n surfaceOp: SurfaceOp;\n sourceEventSeqs?: SessionSeq[];\n}"
1891
1915
  },
1892
1916
  {
1893
1917
  "name": "SurfaceOp",
1894
- "declaration": "export type SurfaceOp = 'append' | { op: 'replace'; start: number; end: number; };"
1918
+ "declaration": "export type SurfaceOp = 'append' | { op: 'replace'; start: SessionSeq; end: SessionSeq; };"
1895
1919
  },
1896
1920
  {
1897
1921
  "name": "TeamId",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-cordis-host-runner",
3
3
  "description": "Dynamic package definition registry, host-half sandbox lifecycle, and invoke handler table for model-mounted dual-half packages",
4
- "version": "0.1.2-alpha.2",
4
+ "version": "0.1.2-alpha.4",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -18,10 +18,6 @@
18
18
  "types": "./lib/types/index.d.ts",
19
19
  "default": "./lib/index.js"
20
20
  },
21
- "./invariant": {
22
- "types": "./lib/types/invariant.d.ts",
23
- "default": "./lib/invariant.js"
24
- },
25
21
  "./types": {
26
22
  "types": "./lib/types/types.d.ts",
27
23
  "default": "./lib/types/types.js"
@@ -39,7 +35,6 @@
39
35
  },
40
36
  "files": [
41
37
  "lib/index.js",
42
- "lib/invariant.js",
43
38
  "lib/types/**/*.js",
44
39
  "lib/types/**/*.d.ts",
45
40
  "lib/typert.host.js",
@@ -50,30 +45,28 @@
50
45
  "license": "MIT",
51
46
  "dependencies": {
52
47
  "zod": "^4.4.3",
53
- "@deepseek-ai/dsh-util-values": "^0.1.2-alpha.2",
54
- "@deepseek-ai/schemastery": "^3.18.2"
48
+ "@deepseek-ai/schemastery": "^3.18.2",
49
+ "@deepseek-ai/dsh-util-values": "^0.1.2-alpha.4"
55
50
  },
56
51
  "peerDependencies": {
57
52
  "@deepseek-ai/cordis": "^4.0.2",
58
- "@deepseek-ai/dsh-agent": "^0.1.2-alpha.2",
59
- "@deepseek-ai/dsh-brand": "^0.1.2-alpha.2",
60
- "@deepseek-ai/dsh-llm": "^0.1.2-alpha.2",
61
- "@deepseek-ai/dsh-scope": "^0.1.2-alpha.2",
62
- "@deepseek-ai/dsh-session": "^0.1.2-alpha.2",
63
- "@deepseek-ai/dsh-tools": "^0.1.2-alpha.2",
64
- "@deepseek-ai/dsh-typert-protocol": "^0.1.2-alpha.2",
65
- "@deepseek-ai/dsh-invariants": "^0.1.2-alpha.2"
53
+ "@deepseek-ai/dsh-agent": "^0.1.2-alpha.4",
54
+ "@deepseek-ai/dsh-brand": "^0.1.2-alpha.4",
55
+ "@deepseek-ai/dsh-llm": "^0.1.2-alpha.4",
56
+ "@deepseek-ai/dsh-scope": "^0.1.2-alpha.4",
57
+ "@deepseek-ai/dsh-session": "^0.1.2-alpha.4",
58
+ "@deepseek-ai/dsh-tools": "^0.1.2-alpha.4",
59
+ "@deepseek-ai/dsh-typert-protocol": "^0.1.2-alpha.4"
66
60
  },
67
61
  "devDependencies": {
68
62
  "@deepseek-ai/cordis": "^4.0.2",
69
63
  "@deepseek-ai/cordis-plugin-timer": "^1.1.4",
70
- "@deepseek-ai/dsh-agent": "^0.1.2-alpha.2",
71
- "@deepseek-ai/dsh-brand": "^0.1.2-alpha.2",
72
- "@deepseek-ai/dsh-invariants": "^0.1.2-alpha.2",
73
- "@deepseek-ai/dsh-llm": "^0.1.2-alpha.2",
74
- "@deepseek-ai/dsh-scope": "^0.1.2-alpha.2",
75
- "@deepseek-ai/dsh-tools": "^0.1.2-alpha.2",
76
- "@deepseek-ai/dsh-session": "^0.1.2-alpha.2",
77
- "@deepseek-ai/dsh-typert-protocol": "^0.1.2-alpha.2"
64
+ "@deepseek-ai/dsh-agent": "^0.1.2-alpha.4",
65
+ "@deepseek-ai/dsh-brand": "^0.1.2-alpha.4",
66
+ "@deepseek-ai/dsh-llm": "^0.1.2-alpha.4",
67
+ "@deepseek-ai/dsh-scope": "^0.1.2-alpha.4",
68
+ "@deepseek-ai/dsh-session": "^0.1.2-alpha.4",
69
+ "@deepseek-ai/dsh-tools": "^0.1.2-alpha.4",
70
+ "@deepseek-ai/dsh-typert-protocol": "^0.1.2-alpha.4"
78
71
  }
79
72
  }
package/lib/invariant.js DELETED
@@ -1,25 +0,0 @@
1
- //#region lib/types/invariant.js
2
- /**
3
- * Package-owned invariant companion for `@deepseek-ai/dsh-cordis-host-runner`.
4
- * @module @deepseek-ai/dsh-cordis-host-runner/invariant
5
- */
6
- const PACKAGE_NAME = "@deepseek-ai/dsh-cordis-host-runner";
7
- /** Cordis companion plugin name. */
8
- const name = "cordis-host-runner-invariant";
9
- /** Service required before the companion can reserve package ownership. */
10
- const inject = ["invariants"];
11
- /**
12
- * No runtime invariant: the definition registry is process memory with no event
13
- * stream to observe, and its one owned relation (a running definition owns a
14
- * settled host-half fiber and its handler table) is established and unwound
15
- * inside single awaited verbs, so package tests assert it directly.
16
- */
17
- const install = () => {};
18
- /**
19
- * Register this package's invariant companion.
20
- * @param ctx - Cordis context carrying the invariant service.
21
- * @returns the installed registration's disposer after setup succeeds.
22
- */
23
- const apply = (ctx) => Promise.resolve(ctx.invariants.register(PACKAGE_NAME, install));
24
- //#endregion
25
- export { apply, inject, name };
@@ -1,16 +0,0 @@
1
- /**
2
- * Package-owned invariant companion for `@deepseek-ai/dsh-cordis-host-runner`.
3
- * @module @deepseek-ai/dsh-cordis-host-runner/invariant
4
- */
5
- import type { Context } from '@deepseek-ai/cordis';
6
- /** Cordis companion plugin name. */
7
- export declare const name = "cordis-host-runner-invariant";
8
- /** Service required before the companion can reserve package ownership. */
9
- export declare const inject: string[];
10
- /**
11
- * Register this package's invariant companion.
12
- * @param ctx - Cordis context carrying the invariant service.
13
- * @returns the installed registration's disposer after setup succeeds.
14
- */
15
- export declare const apply: (ctx: Context) => Promise<() => void>;
16
- //# sourceMappingURL=invariant.d.ts.map
@@ -1,24 +0,0 @@
1
- /**
2
- * Package-owned invariant companion for `@deepseek-ai/dsh-cordis-host-runner`.
3
- * @module @deepseek-ai/dsh-cordis-host-runner/invariant
4
- */
5
- const PACKAGE_NAME = '@deepseek-ai/dsh-cordis-host-runner';
6
- /** Cordis companion plugin name. */
7
- export const name = 'cordis-host-runner-invariant';
8
- /** Service required before the companion can reserve package ownership. */
9
- export const inject = ['invariants'];
10
- /**
11
- * No runtime invariant: the definition registry is process memory with no event
12
- * stream to observe, and its one owned relation (a running definition owns a
13
- * settled host-half fiber and its handler table) is established and unwound
14
- * inside single awaited verbs, so package tests assert it directly.
15
- */
16
- const install = () => { };
17
- /**
18
- * Register this package's invariant companion.
19
- * @param ctx - Cordis context carrying the invariant service.
20
- * @returns the installed registration's disposer after setup succeeds.
21
- */
22
- export const apply = (ctx) => Promise.resolve(ctx.invariants.register(PACKAGE_NAME, install));
23
- /* jscpd:ignore-end */
24
- //# sourceMappingURL=invariant.js.map