@optima-chat/agentic-sdk 0.35.0 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/conversation-api.d.ts +6 -0
- package/dist/client/conversation-api.d.ts.map +1 -1
- package/dist/client/conversation-api.js +29 -0
- package/dist/client/conversation-api.js.map +1 -1
- package/dist/client/delivery-outbox.d.ts +10 -0
- package/dist/client/delivery-outbox.d.ts.map +1 -1
- package/dist/client/delivery-outbox.js +5 -0
- package/dist/client/delivery-outbox.js.map +1 -1
- package/dist/client/event-parser.d.ts +3 -0
- package/dist/client/event-parser.d.ts.map +1 -1
- package/dist/client/event-parser.js +14 -0
- package/dist/client/event-parser.js.map +1 -1
- package/dist/client/gateway-client.d.ts +47 -0
- package/dist/client/gateway-client.d.ts.map +1 -1
- package/dist/client/gateway-client.js +107 -17
- package/dist/client/gateway-client.js.map +1 -1
- package/dist/client/midturn-coordinator.d.ts +37 -0
- package/dist/client/midturn-coordinator.d.ts.map +1 -0
- package/dist/client/midturn-coordinator.js +144 -0
- package/dist/client/midturn-coordinator.js.map +1 -0
- package/dist/client/midturn-settlement.d.ts +45 -0
- package/dist/client/midturn-settlement.d.ts.map +1 -0
- package/dist/client/midturn-settlement.js +40 -0
- package/dist/client/midturn-settlement.js.map +1 -0
- package/dist/client/pinned-at.d.ts +7 -0
- package/dist/client/pinned-at.d.ts.map +1 -0
- package/dist/client/pinned-at.js +16 -0
- package/dist/client/pinned-at.js.map +1 -0
- package/dist/client/processing-events.d.ts +7 -0
- package/dist/client/processing-events.d.ts.map +1 -0
- package/dist/client/processing-events.js +14 -0
- package/dist/client/processing-events.js.map +1 -0
- package/dist/hooks/use-abort-with-escape-hatch.d.ts.map +1 -1
- package/dist/hooks/use-abort-with-escape-hatch.js +3 -1
- package/dist/hooks/use-abort-with-escape-hatch.js.map +1 -1
- package/dist/hooks/use-conversations.d.ts +3 -0
- package/dist/hooks/use-conversations.d.ts.map +1 -1
- package/dist/hooks/use-conversations.js +12 -0
- package/dist/hooks/use-conversations.js.map +1 -1
- package/dist/hooks/use-current-chat.d.ts +4 -0
- package/dist/hooks/use-current-chat.d.ts.map +1 -1
- package/dist/hooks/use-current-chat.js +12 -5
- package/dist/hooks/use-current-chat.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/provider/chat-context.d.ts +3 -0
- package/dist/provider/chat-context.d.ts.map +1 -1
- package/dist/provider/chat-context.js.map +1 -1
- package/dist/provider/chat-provider.d.ts +16 -1
- package/dist/provider/chat-provider.d.ts.map +1 -1
- package/dist/provider/chat-provider.js +80 -17
- package/dist/provider/chat-provider.js.map +1 -1
- package/dist/store/chat-store.d.ts +35 -1
- package/dist/store/chat-store.d.ts.map +1 -1
- package/dist/store/chat-store.js +100 -59
- package/dist/store/chat-store.js.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"midturn-settlement.js","sourceRoot":"","sources":["../../src/client/midturn-settlement.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 会话置顶时间的三态读取(spec I6)。
|
|
3
|
+
* 协议包尚未发布 pinnedAt 字段,故用内联 cast 读(同 event-parser 的 readTaskConversationId)。
|
|
4
|
+
* 🔴 不要用 isoToEpoch:它对非法字符串返回 0,会被 chat 的 typeof === 'number' 误判为已置顶。
|
|
5
|
+
*/
|
|
6
|
+
export declare function readPinnedAt(raw: unknown): number | null | undefined;
|
|
7
|
+
//# sourceMappingURL=pinned-at.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pinned-at.d.ts","sourceRoot":"","sources":["../../src/client/pinned-at.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAMpE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 会话置顶时间的三态读取(spec I6)。
|
|
3
|
+
* 协议包尚未发布 pinnedAt 字段,故用内联 cast 读(同 event-parser 的 readTaskConversationId)。
|
|
4
|
+
* 🔴 不要用 isoToEpoch:它对非法字符串返回 0,会被 chat 的 typeof === 'number' 误判为已置顶。
|
|
5
|
+
*/
|
|
6
|
+
export function readPinnedAt(raw) {
|
|
7
|
+
if (raw === undefined)
|
|
8
|
+
return undefined;
|
|
9
|
+
if (raw === null)
|
|
10
|
+
return null;
|
|
11
|
+
if (typeof raw !== 'string')
|
|
12
|
+
return undefined;
|
|
13
|
+
const ts = Date.parse(raw);
|
|
14
|
+
return Number.isFinite(ts) ? ts : undefined;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=pinned-at.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pinned-at.js","sourceRoot":"","sources":["../../src/client/pinned-at.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Events whose arrival means "this conversation has active streaming".
|
|
3
|
+
* When any of these arrives with a `conversation_id`, the id joins
|
|
4
|
+
* `processingConversationIds`. See Spec 2.9.
|
|
5
|
+
*/
|
|
6
|
+
export declare const PROCESSING_ADD_EVENTS: Set<"finish" | "error" | "info" | "warning" | "content" | "progress" | "session_ready" | "message_receipt" | "token_refresh_needed" | "billing_error" | "restore_conversations" | "init" | "ready" | "thinking" | "text_delta" | "tool_call" | "tool_result" | "tool_progress" | "ask_question" | "approval_request" | "conversation_update" | "session_recovering" | "session_recovered" | "pong" | "conversation_title_updated" | "skills_synced" | "skills_sync_error" | "restore_started" | "restore_complete" | "restore_failed" | "client_upgrade_required" | "resigned" | "adopted" | "permission_decision" | "subagent_progress" | "task_started" | "task_completed" | "task_failed" | "task_schedule_updated" | "briefing_published">;
|
|
7
|
+
//# sourceMappingURL=processing-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processing-events.d.ts","sourceRoot":"","sources":["../../src/client/processing-events.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,gtBAOhC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Events whose arrival means "this conversation has active streaming".
|
|
3
|
+
* When any of these arrives with a `conversation_id`, the id joins
|
|
4
|
+
* `processingConversationIds`. See Spec 2.9.
|
|
5
|
+
*/
|
|
6
|
+
export const PROCESSING_ADD_EVENTS = new Set([
|
|
7
|
+
'thinking',
|
|
8
|
+
'text_delta',
|
|
9
|
+
'content',
|
|
10
|
+
'tool_call',
|
|
11
|
+
'tool_result',
|
|
12
|
+
'progress',
|
|
13
|
+
]);
|
|
14
|
+
//# sourceMappingURL=processing-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processing-events.js","sourceRoot":"","sources":["../../src/client/processing-events.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAsB;IAChE,UAAU;IACV,YAAY;IACZ,SAAS;IACT,WAAW;IACX,aAAa;IACb,UAAU;CACX,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-abort-with-escape-hatch.d.ts","sourceRoot":"","sources":["../../src/hooks/use-abort-with-escape-hatch.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkEG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,6BAA6B;IAC5C,2DAA2D;IAC3D,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,yCAAyC;IACzC,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAED,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,8BAAmC,GAC3C,6BAA6B,
|
|
1
|
+
{"version":3,"file":"use-abort-with-escape-hatch.d.ts","sourceRoot":"","sources":["../../src/hooks/use-abort-with-escape-hatch.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkEG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,6BAA6B;IAC5C,2DAA2D;IAC3D,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,yCAAyC;IACzC,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAED,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,8BAAmC,GAC3C,6BAA6B,CA+C/B"}
|
|
@@ -35,7 +35,9 @@ export function useAbortWithEscapeHatch(options = {}) {
|
|
|
35
35
|
}
|
|
36
36
|
const timer = setTimeout(() => {
|
|
37
37
|
setAbortingConversationId(null);
|
|
38
|
-
|
|
38
|
+
// ac#1021:'escape_hatch' ⇒ settleStuckTurn 在收尾之后向 midTurnSink 发 E10
|
|
39
|
+
// (用户已经放弃这一轮,在飞的插话判 presumed_lost{escape_hatch})。
|
|
40
|
+
store.getState().settleStuckTurn(abortingConversationId, 'escape_hatch');
|
|
39
41
|
onEscapeRef.current?.(abortingConversationId);
|
|
40
42
|
}, timeoutMs);
|
|
41
43
|
return () => clearTimeout(timer);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-abort-with-escape-hatch.js","sourceRoot":"","sources":["../../src/hooks/use-abort-with-escape-hatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAyF7D,MAAM,UAAU,uBAAuB,CACrC,UAA0C,EAAE;IAE5C,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IACjD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IAC3C,MAAM,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAE1F,MAAM,qBAAqB,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC;IAC9E,mDAAmD;IACnD,8CAA8C;IAC9C,MAAM,kBAAkB,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAC/C,sBAAsB,KAAK,IAAI;QAC7B,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,GAAG,CAAC,sBAAsB,CAAC;YACvD,CAAC,sBAAsB,KAAK,CAAC,CAAC,qBAAqB,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAC5F,CAAC;IAEF,uDAAuD;IACvD,kCAAkC;IAClC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrC,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IACjC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,qBAAqB,CAAC;QAC9D,IAAI,CAAC,cAAc;YAAE,OAAO;QAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,CAAC;QAChE,yBAAyB,CAAC,cAAc,CAAC,CAAC;IAC5C,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAEpB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,sBAAsB;YAAE,OAAO;QACpC,oBAAoB;QACpB,IAAI,sBAAsB,KAAK,qBAAqB,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5E,yBAAyB,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,yBAAyB,CAAC,IAAI,CAAC,CAAC;YAChC,KAAK,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"use-abort-with-escape-hatch.js","sourceRoot":"","sources":["../../src/hooks/use-abort-with-escape-hatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAyF7D,MAAM,UAAU,uBAAuB,CACrC,UAA0C,EAAE;IAE5C,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IACjD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IAC3C,MAAM,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAE1F,MAAM,qBAAqB,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC;IAC9E,mDAAmD;IACnD,8CAA8C;IAC9C,MAAM,kBAAkB,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAC/C,sBAAsB,KAAK,IAAI;QAC7B,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,GAAG,CAAC,sBAAsB,CAAC;YACvD,CAAC,sBAAsB,KAAK,CAAC,CAAC,qBAAqB,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAC5F,CAAC;IAEF,uDAAuD;IACvD,kCAAkC;IAClC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrC,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IACjC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,qBAAqB,CAAC;QAC9D,IAAI,CAAC,cAAc;YAAE,OAAO;QAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,CAAC;QAChE,yBAAyB,CAAC,cAAc,CAAC,CAAC;IAC5C,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAEpB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,sBAAsB;YAAE,OAAO;QACpC,oBAAoB;QACpB,IAAI,sBAAsB,KAAK,qBAAqB,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5E,yBAAyB,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,yBAAyB,CAAC,IAAI,CAAC,CAAC;YAChC,oEAAoE;YACpE,kDAAkD;YAClD,KAAK,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,sBAAsB,EAAE,cAAc,CAAC,CAAC;YACzE,WAAW,CAAC,OAAO,EAAE,CAAC,sBAAsB,CAAC,CAAC;QAChD,CAAC,EAAE,SAAS,CAAC,CAAC;QACd,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,EAAE,CAAC,sBAAsB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAE1F,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;AAC3C,CAAC"}
|
|
@@ -8,5 +8,8 @@ export declare function useConversations(): {
|
|
|
8
8
|
deleteConversation: (conversationId: string) => Promise<void>;
|
|
9
9
|
renameConversation: (conversationId: string, title: string) => Promise<void>;
|
|
10
10
|
switchConversation: (conversationId: string) => void;
|
|
11
|
+
pinSupported: boolean;
|
|
12
|
+
pinConversation: (conversationId: string) => Promise<void>;
|
|
13
|
+
unpinConversation: (conversationId: string) => Promise<void>;
|
|
11
14
|
};
|
|
12
15
|
//# sourceMappingURL=use-conversations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-conversations.d.ts","sourceRoot":"","sources":["../../src/hooks/use-conversations.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3D,wBAAgB,gBAAgB,IAAI;IAClC,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,kBAAkB,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9D,kBAAkB,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,kBAAkB,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E,kBAAkB,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"use-conversations.d.ts","sourceRoot":"","sources":["../../src/hooks/use-conversations.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3D,wBAAgB,gBAAgB,IAAI;IAClC,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,kBAAkB,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9D,kBAAkB,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,kBAAkB,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E,kBAAkB,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,iBAAiB,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D,CA4EA"}
|
|
@@ -10,6 +10,7 @@ export function useConversations() {
|
|
|
10
10
|
isLoading: s.conversationsLoading,
|
|
11
11
|
error: s.conversationsError,
|
|
12
12
|
})));
|
|
13
|
+
const pinSupported = useStore(store, (s) => s.supportsConversationPin);
|
|
13
14
|
const createConversation = useCallback(async (title) => {
|
|
14
15
|
const conversation = await api.createConversation(title);
|
|
15
16
|
store.getState().addConversation(conversation);
|
|
@@ -31,12 +32,23 @@ export function useConversations() {
|
|
|
31
32
|
const switchConversation = useCallback((conversationId) => {
|
|
32
33
|
store.getState().setCurrentConversationId(conversationId);
|
|
33
34
|
}, [store]);
|
|
35
|
+
const pinConversation = useCallback(async (conversationId) => {
|
|
36
|
+
const { pinnedAt } = await api.pinConversation(conversationId);
|
|
37
|
+
store.getState().setConversationPinnedAt(conversationId, pinnedAt);
|
|
38
|
+
}, [api, store]);
|
|
39
|
+
const unpinConversation = useCallback(async (conversationId) => {
|
|
40
|
+
await api.unpinConversation(conversationId);
|
|
41
|
+
store.getState().setConversationPinnedAt(conversationId, null);
|
|
42
|
+
}, [api, store]);
|
|
34
43
|
return {
|
|
35
44
|
...state,
|
|
36
45
|
createConversation,
|
|
37
46
|
deleteConversation,
|
|
38
47
|
renameConversation,
|
|
39
48
|
switchConversation,
|
|
49
|
+
pinSupported,
|
|
50
|
+
pinConversation,
|
|
51
|
+
unpinConversation,
|
|
40
52
|
};
|
|
41
53
|
}
|
|
42
54
|
//# sourceMappingURL=use-conversations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-conversations.js","sourceRoot":"","sources":["../../src/hooks/use-conversations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,MAAM,UAAU,gBAAgB;
|
|
1
|
+
{"version":3,"file":"use-conversations.js","sourceRoot":"","sources":["../../src/hooks/use-conversations.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,6 +41,10 @@ export declare function useCurrentChat(): {
|
|
|
41
41
|
* ⑤ **额度耗尽 / guardrail 拦截**(`terminal`)——注意这条下**能力位是 true、内容非空、
|
|
42
42
|
* 连接健康**,上面 ①–④ 一条都不成立,只有 `failed` 观测得到;
|
|
43
43
|
* ⑥ ack 超时三次 / transient 预算耗尽(`timeout_exhaust` / `transient_exhaust`)。
|
|
44
|
+
* ⑦ **held**(ac#1021 生成中发送)——同一会话还有一条插话消息在飞时,本帧**尚未入
|
|
45
|
+
* outbox**:`deliveryState` 恒 `undefined`、`retryMessage()` 恒返 `false`,直到前一条
|
|
46
|
+
* 收敛、本帧被 drain 出网才开始走上面的漏斗。此档下 `sendMessage` **不**抛错(消息
|
|
47
|
+
* 已被接管),渲染态读 `Message.midTurn` 观测。
|
|
44
48
|
*
|
|
45
49
|
* 发送失败时抛错、无返回值(`client.send()` 返 `false` ⇒ 本函数抛
|
|
46
50
|
* `Error('Failed to send message')`),调用方本就要 catch。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-current-chat.d.ts","sourceRoot":"","sources":["../../src/hooks/use-current-chat.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,SAAS,EACT,OAAO,EAEP,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAQrB,wBAAgB,cAAc,IAAI;IAChC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB
|
|
1
|
+
{"version":3,"file":"use-current-chat.d.ts","sourceRoot":"","sources":["../../src/hooks/use-current-chat.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,SAAS,EACT,OAAO,EAEP,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAQrB,wBAAgB,cAAc,IAAI;IAChC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4CG;IACH,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChF,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,+DAA+D;IAC/D,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;CAC9C,CAgLA"}
|
|
@@ -8,7 +8,7 @@ import { useChatContext } from '../provider/chat-context.js';
|
|
|
8
8
|
const EMPTY_MESSAGES = [];
|
|
9
9
|
Object.freeze(EMPTY_MESSAGES);
|
|
10
10
|
export function useCurrentChat() {
|
|
11
|
-
const { store, client, api, workspaceProvider } = useChatContext();
|
|
11
|
+
const { store, client, api, workspaceProvider, coordinator } = useChatContext();
|
|
12
12
|
const conversationId = useStore(store, (s) => s.currentConversationId);
|
|
13
13
|
const state = useStore(store, useShallow((s) => {
|
|
14
14
|
const id = s.currentConversationId;
|
|
@@ -88,7 +88,7 @@ export function useCurrentChat() {
|
|
|
88
88
|
status: 'complete',
|
|
89
89
|
createdAt: Date.now(),
|
|
90
90
|
});
|
|
91
|
-
const
|
|
91
|
+
const frame = {
|
|
92
92
|
type: 'message',
|
|
93
93
|
conversation_id: conversationId,
|
|
94
94
|
content,
|
|
@@ -97,7 +97,11 @@ export function useCurrentChat() {
|
|
|
97
97
|
// disarmed/旧 gateway 由 client 剥除走旧语义——G3)。空 content 不附(spec §5.1 例外②)。
|
|
98
98
|
...(content.length > 0 ? { client_msg_id: userMessageId } : {}),
|
|
99
99
|
...(options?.metadata !== undefined ? { metadata: options.metadata } : {}),
|
|
100
|
-
}
|
|
100
|
+
};
|
|
101
|
+
// ac#1021:出站统一经 coordinator —— 它按「C 上有没有在飞的插话」决定 held / 插话 /
|
|
102
|
+
// 直发三条腿,不建机器时就是原来的 `client.send(frame)`,返回值语义逐字不变。
|
|
103
|
+
// held 也返 true(消息已被接管,只是还没出网)。
|
|
104
|
+
const sent = coordinator.submit(conversationId, userMessageId, frame);
|
|
101
105
|
if (!sent)
|
|
102
106
|
throw new Error('Failed to send message');
|
|
103
107
|
// gw#1587 §5.1:thinking 置位移到「真正投出」时(GatewayClient onMessageDispatched →
|
|
@@ -105,7 +109,7 @@ export function useCurrentChat() {
|
|
|
105
109
|
// 返回这条消息的 id = 乐观消息 id = 帧上的 client_msg_id = deliveryState 的索引键。
|
|
106
110
|
// 调用方靠它把「我发的那条」与它的 message_receipt 对应起来(边界见签名处 JSDoc)。
|
|
107
111
|
return userMessageId;
|
|
108
|
-
}, [conversationId,
|
|
112
|
+
}, [conversationId, store, workspaceProvider, coordinator]);
|
|
109
113
|
const abort = useCallback(() => {
|
|
110
114
|
if (!conversationId)
|
|
111
115
|
return;
|
|
@@ -115,7 +119,10 @@ export function useCurrentChat() {
|
|
|
115
119
|
if (!conversationId)
|
|
116
120
|
return;
|
|
117
121
|
client.send({ type: 'reset_conversation', conversation_id: conversationId });
|
|
118
|
-
|
|
122
|
+
// ac#1021:重置 = 这条会话的上下文没了,在飞的插话机器按 T15 判 lost(conversation_gone),
|
|
123
|
+
// 排队中的 held 项一并清掉 —— 它们要插的那个轮次已经不存在了。
|
|
124
|
+
coordinator.onConversationGone(conversationId);
|
|
125
|
+
}, [conversationId, client, coordinator]);
|
|
119
126
|
const loadHistory = useCallback(async () => {
|
|
120
127
|
if (!conversationId)
|
|
121
128
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-current-chat.js","sourceRoot":"","sources":["../../src/hooks/use-current-chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAQ7D,2EAA2E;AAC3E,2EAA2E;AAC3E,yEAAyE;AACzE,MAAM,cAAc,GAAc,EAAE,CAAC;AACrC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;AAE9B,MAAM,UAAU,cAAc;
|
|
1
|
+
{"version":3,"file":"use-current-chat.js","sourceRoot":"","sources":["../../src/hooks/use-current-chat.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -25,6 +25,7 @@ export type { DeleteFileVariables, RenameFileVariables, UploadFilesVariables, }
|
|
|
25
25
|
export { workspaceKeys, WORKSPACE_DEFAULT_PATH } from './hooks/workspace-query-keys.js';
|
|
26
26
|
export type { UseWorkspaceFilesOptions, UseWorkspaceFilesResult } from './hooks/use-workspace-files.js';
|
|
27
27
|
export type { ChatProviderProps, ConnectionState, MessageStatus, ToolCallStatus, ChatError, Conversation, ConversationLastMessageKind, Message, MessageAttachment, ToolCall, QuestionRequest, ApprovalRequestWithId, SendMessageOptions, UploadResult, RecoveryStatus, } from './types.js';
|
|
28
|
+
export type { MidTurnState, Settlement, Cause } from './client/midturn-settlement.js';
|
|
28
29
|
export type { WorkspaceProvider, WorkspaceFile, FilePreview, ShareLink, UploadProgress, AuthenticatedUploader, UploadOptions, ListOptions, DeleteOptions, } from './workspace/types.js';
|
|
29
30
|
export { WorkspaceFileError } from './workspace/errors.js';
|
|
30
31
|
export { createDefaultWorkspaceProvider, type DefaultWorkspaceProviderOptions, } from './workspace/default-provider.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAK3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,YAAY,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAMvE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAG3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAGrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,YAAY,EACV,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC5E,YAAY,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,gBAAgB,GACjB,MAAM,oCAAoC,CAAC;AAC5C,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACxF,YAAY,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAGxG,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,cAAc,EACd,SAAS,EACT,YAAY,EACZ,2BAA2B,EAC3B,OAAO,EACP,iBAAiB,EACjB,QAAQ,EACR,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,cAAc,GACf,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,SAAS,EACT,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,WAAW,EACX,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EACL,8BAA8B,EAC9B,KAAK,+BAA+B,GACrC,MAAM,iCAAiC,CAAC;AAGzC,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC3G,OAAO,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAGjG,YAAY,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACV,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,cAAc,GACf,MAAM,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,2DAA2D;AAC3D,8EAA8E;AAC9E,wDAAwD;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,qEAAqE;AACrE,uFAAuF;AACvF,mFAAmF;AACnF,+DAA+D;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,QAAQ;AACR,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AACrF,kEAAkE;AAClE,8CAA8C;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAKjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAG/E,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,gBAAgB,GACjB,MAAM,oCAAoC,CAAC;AAM5C,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,2DAA2D;AAC3D,8EAA8E;AAC9E,wDAAwD;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,qEAAqE;AACrE,uFAAuF;AACvF,mFAAmF;AACnF,+DAA+D;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,QAAQ;AACR,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AACrF,kEAAkE;AAClE,8CAA8C;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAKjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAG/E,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,gBAAgB,GACjB,MAAM,oCAAoC,CAAC;AAM5C,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAqCxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EACL,8BAA8B,GAE/B,MAAM,iCAAiC,CAAC;AAIzC,OAAO,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -4,12 +4,15 @@ import type { GatewayClient } from '../client/gateway-client.js';
|
|
|
4
4
|
import type { ConversationAPI } from '../client/conversation-api.js';
|
|
5
5
|
import type { WorkspaceProvider } from '../workspace/types.js';
|
|
6
6
|
import type { TasksProvider } from '../tasks/types.js';
|
|
7
|
+
import type { MidTurnCoordinator } from '../client/midturn-coordinator.js';
|
|
7
8
|
export interface ChatContextValue {
|
|
8
9
|
store: StoreApi<ChatStore>;
|
|
9
10
|
client: GatewayClient;
|
|
10
11
|
api: ConversationAPI;
|
|
11
12
|
workspaceProvider: WorkspaceProvider | null;
|
|
12
13
|
tasksProvider: TasksProvider | null;
|
|
14
|
+
/** ac#1021:出站消息经它 submit(held / 插话 / 直发三条腿的定序都在里面)。 */
|
|
15
|
+
coordinator: MidTurnCoordinator;
|
|
13
16
|
}
|
|
14
17
|
export declare const ChatContext: import("react").Context<ChatContextValue | null>;
|
|
15
18
|
export declare function useChatContext(): ChatContextValue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-context.d.ts","sourceRoot":"","sources":["../../src/provider/chat-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-context.d.ts","sourceRoot":"","sources":["../../src/provider/chat-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAE3E,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC3B,MAAM,EAAE,aAAa,CAAC;IACtB,GAAG,EAAE,eAAe,CAAC;IACrB,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC5C,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,uDAAuD;IACvD,WAAW,EAAE,kBAAkB,CAAC;CACjC;AAED,eAAO,MAAM,WAAW,kDAA+C,CAAC;AAExE,wBAAgB,cAAc,IAAI,gBAAgB,CAMjD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-context.js","sourceRoot":"","sources":["../../src/provider/chat-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-context.js","sourceRoot":"","sources":["../../src/provider/chat-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAmBlD,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAA0B,IAAI,CAAC,CAAC;AAExE,MAAM,UAAU,cAAc;IAC5B,MAAM,GAAG,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { ErrorInfo, ServerEvent } from '@optima-chat/gateway-protocol';
|
|
2
|
-
import type { ChatStore } from '../store/chat-store.js';
|
|
2
|
+
import type { ChatStore, MidTurnSink } from '../store/chat-store.js';
|
|
3
|
+
import { GatewayClient } from '../client/gateway-client.js';
|
|
4
|
+
import { MidTurnCoordinator } from '../client/midturn-coordinator.js';
|
|
3
5
|
import type { ChatProviderProps } from '../types.js';
|
|
4
6
|
import type { StoreApi } from 'zustand/vanilla';
|
|
5
7
|
/**
|
|
@@ -9,6 +11,19 @@ import type { StoreApi } from 'zustand/vanilla';
|
|
|
9
11
|
* ChatProvider event handler to trigger Layer A token recovery (#54).
|
|
10
12
|
*/
|
|
11
13
|
export declare function isAuthExpiredSignal(error: ErrorInfo): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* ac#1021:把 `MidTurnCoordinator` 的依赖注入口接到真 store + 真 GatewayClient 上。
|
|
16
|
+
*
|
|
17
|
+
* `getClient` 是**惰性**的(读 `clientRef.current`):coordinator 在 `useMemo` 里先于
|
|
18
|
+
* `new GatewayClient` 创建,构造那一刻 client 还不存在。client 为 null 时三个 client 侧
|
|
19
|
+
* 依赖各自退化成「发不出去 / 未武装 / 纪元 0」,submit 走 ④ 直发腿返 false,宿主照旧 throw。
|
|
20
|
+
*
|
|
21
|
+
* ⛔ 本函数**绝不写 store**:它在渲染期(`useMemo`)跑,而本 provider 里有一处裸
|
|
22
|
+
* `store.subscribe`(restoring-timeout 对账),渲染期 set() 会同步把它拉起来。
|
|
23
|
+
*/
|
|
24
|
+
export declare function createMidTurnCoordinator(store: StoreApi<ChatStore>, getClient: () => Pick<GatewayClient, 'send' | 'isDeliveryArmed' | 'currentDeliveryEpoch'> | null): MidTurnCoordinator;
|
|
25
|
+
/** ac#1021:store 的两个会话收尾原语 → coordinator 的对应入口。 */
|
|
26
|
+
export declare const midTurnSinkFor: (coordinator: MidTurnCoordinator) => MidTurnSink;
|
|
12
27
|
/**
|
|
13
28
|
* <ChatProvider> — wires GatewayClient + ConversationAPI + Store together,
|
|
14
29
|
* parses incoming ServerEvents into store mutations, and forwards selected
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-provider.d.ts","sourceRoot":"","sources":["../../src/provider/chat-provider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"chat-provider.d.ts","sourceRoot":"","sources":["../../src/provider/chat-provider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,SAAS,EAET,WAAW,EACZ,MAAM,+BAA+B,CAAC;AAGvC,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAKtE,OAAO,KAAK,EAAE,iBAAiB,EAA8B,MAAM,aAAa,CAAC;AACjF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAkDhD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAQ7D;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC1B,SAAS,EAAE,MAAM,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,iBAAiB,GAAG,sBAAsB,CAAC,GAAG,IAAI,GAC/F,kBAAkB,CAuBpB;AAED,mDAAmD;AACnD,eAAO,MAAM,cAAc,GAAI,aAAa,kBAAkB,KAAG,WAG/D,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,KAAK,CAAC,YAAY,CA4MzE;AAsED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC1B,KAAK,EAAE,iBAAiB,GACvB,IAAI,CA8DN"}
|
|
@@ -4,8 +4,10 @@ import { reconcileRestoringTimeouts } from './restoring-timeout.js';
|
|
|
4
4
|
import { ChatContext } from './chat-context.js';
|
|
5
5
|
import { createChatStore } from '../store/chat-store.js';
|
|
6
6
|
import { GatewayClient } from '../client/gateway-client.js';
|
|
7
|
+
import { MidTurnCoordinator } from '../client/midturn-coordinator.js';
|
|
7
8
|
import { ConversationAPI } from '../client/conversation-api.js';
|
|
8
9
|
import { parseServerEvent } from '../client/event-parser.js';
|
|
10
|
+
import { PROCESSING_ADD_EVENTS } from '../client/processing-events.js';
|
|
9
11
|
// Anti-loop guard for Layer A: after a recovery attempt, subsequent
|
|
10
12
|
// AUTH_TOKEN_INVALID signals within this window only fire onAuthError but
|
|
11
13
|
// do NOT re-trigger reconnect. Keyed by store identity so multiple
|
|
@@ -65,6 +67,41 @@ export function isAuthExpiredSignal(error) {
|
|
|
65
67
|
return false;
|
|
66
68
|
return /(expired|invalid|rejected)/.test(msg);
|
|
67
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* ac#1021:把 `MidTurnCoordinator` 的依赖注入口接到真 store + 真 GatewayClient 上。
|
|
72
|
+
*
|
|
73
|
+
* `getClient` 是**惰性**的(读 `clientRef.current`):coordinator 在 `useMemo` 里先于
|
|
74
|
+
* `new GatewayClient` 创建,构造那一刻 client 还不存在。client 为 null 时三个 client 侧
|
|
75
|
+
* 依赖各自退化成「发不出去 / 未武装 / 纪元 0」,submit 走 ④ 直发腿返 false,宿主照旧 throw。
|
|
76
|
+
*
|
|
77
|
+
* ⛔ 本函数**绝不写 store**:它在渲染期(`useMemo`)跑,而本 provider 里有一处裸
|
|
78
|
+
* `store.subscribe`(restoring-timeout 对账),渲染期 set() 会同步把它拉起来。
|
|
79
|
+
*/
|
|
80
|
+
export function createMidTurnCoordinator(store, getClient) {
|
|
81
|
+
return new MidTurnCoordinator({
|
|
82
|
+
send: (frame) => getClient()?.send(frame) ?? false,
|
|
83
|
+
isArmed: () => getClient()?.isDeliveryArmed() ?? false,
|
|
84
|
+
currentEpoch: () => getClient()?.currentDeliveryEpoch() ?? 0,
|
|
85
|
+
busy: (conversationId) => store.getState().processingConversationIds.has(conversationId),
|
|
86
|
+
allowMidTurn: () => store.getState().midTurnSteerSupported === true,
|
|
87
|
+
read: (conversationId, msgId) => store.getState().messages[conversationId]?.find((m) => m.id === msgId)?.midTurn,
|
|
88
|
+
write: (conversationId, msgId, state) => store.getState().setMidTurn(conversationId, msgId, state),
|
|
89
|
+
// store 顺序(每个会话内按 addMessage 的先后)——coordinator 的 applyEach 依赖它做
|
|
90
|
+
// 「先套全体再 drain」的确定性遍历。
|
|
91
|
+
listTracked: (conversationId) => {
|
|
92
|
+
const messages = store.getState().messages;
|
|
93
|
+
const keys = conversationId ? [conversationId] : Object.keys(messages);
|
|
94
|
+
return keys.flatMap((k) => (messages[k] ?? [])
|
|
95
|
+
.filter((m) => m.midTurn !== undefined)
|
|
96
|
+
.map((m) => ({ conversationId: k, msgId: m.id })));
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
/** ac#1021:store 的两个会话收尾原语 → coordinator 的对应入口。 */
|
|
101
|
+
export const midTurnSinkFor = (coordinator) => ({
|
|
102
|
+
onEscapeHatch: (conversationId) => coordinator.onEscapeHatch(conversationId),
|
|
103
|
+
onConversationGone: (conversationId) => coordinator.onConversationGone(conversationId),
|
|
104
|
+
});
|
|
68
105
|
/**
|
|
69
106
|
* <ChatProvider> — wires GatewayClient + ConversationAPI + Store together,
|
|
70
107
|
* parses incoming ServerEvents into store mutations, and forwards selected
|
|
@@ -97,7 +134,12 @@ export function ChatProvider(props) {
|
|
|
97
134
|
// Keep latest props accessible inside stable callbacks.
|
|
98
135
|
const propsRef = useRef(props);
|
|
99
136
|
propsRef.current = props;
|
|
137
|
+
const coordinatorRef = useRef(null);
|
|
100
138
|
const client = useMemo(() => {
|
|
139
|
+
// ⚠️ 必须在 `new GatewayClient` **之前**:下面的 onEvent / onDeliveryStateChange /
|
|
140
|
+
// onConnectionTerminal 三个回调都闭包引用它。
|
|
141
|
+
const coordinator = createMidTurnCoordinator(store, () => clientRef.current);
|
|
142
|
+
coordinatorRef.current = coordinator;
|
|
101
143
|
const c = new GatewayClient({
|
|
102
144
|
gatewayUrl,
|
|
103
145
|
tokenProvider,
|
|
@@ -131,6 +173,11 @@ export function ChatProvider(props) {
|
|
|
131
173
|
return;
|
|
132
174
|
}
|
|
133
175
|
handleServerEvent(event, store, propsRef.current);
|
|
176
|
+
// ⚠️ 顺序承重(spec §3 定序):coordinator 的 busy()/drain 读
|
|
177
|
+
// `processingConversationIds`,那个集合由上面这行维护。挪到前面去,`finish` 到达时
|
|
178
|
+
// C 还是「忙」的,held 项会带 midTurn 出网 —— 正是 A6s 压的那一格。
|
|
179
|
+
// 上面 auth-expired 的早退分支**有意**不喂 coordinator:它连 handleServerEvent 都没跑。
|
|
180
|
+
coordinator.onServerEvent(event);
|
|
134
181
|
},
|
|
135
182
|
onConnectionStateChange: (state) => {
|
|
136
183
|
store.getState().setConnectionState(state);
|
|
@@ -142,11 +189,21 @@ export function ChatProvider(props) {
|
|
|
142
189
|
// 只写消息级字段;conv 级 processing/isThinking 仍由 turn 事件独占驱动(spec §5.4)。
|
|
143
190
|
onDeliveryStateChange: (clientMsgId, state, cause) => {
|
|
144
191
|
store.getState().setDeliveryState(clientMsgId, state, cause);
|
|
192
|
+
// ac#1021 E9/E11:消息级投递终局 → 机器。先写 store 再喂机器,与 onEvent 同款定序。
|
|
193
|
+
coordinator.onDeliveryState(clientMsgId, state, cause);
|
|
145
194
|
},
|
|
195
|
+
// ac#1021 E7/E8:连接终局。outbox 已在此之前把存量条目判 failed{conn_terminal}。
|
|
196
|
+
onConnectionTerminal: (epochBelow) => coordinator.onConnectionTerminal(epochBelow),
|
|
146
197
|
// gw#1587 §5.1:消息真正投出时置 thinking(入队不置——gap 入队后 failed 的消息不 wedge
|
|
147
198
|
// composer)。conv 级 thinking 由 turn 事件驱动,本置位 = 用户消息离开客户端的时点。
|
|
148
|
-
|
|
149
|
-
|
|
199
|
+
// ac#1021 X2:门 = 「投出的是**当前会话**的消息」。held 项可能在用户切走之后才被 drain
|
|
200
|
+
// 出网,无门的话全局 isThinking 会被举在**新**会话上,而清它的 finishMessage 只对当前
|
|
201
|
+
// 会话生效 ⇒ 新会话 composer 锁死到再切一次。门同 applyAction 的 setThinking case。
|
|
202
|
+
// 顺带覆盖今天 reconnect-gap 入队、session_ready 之后才 dispatch 的同型窄洞。
|
|
203
|
+
onMessageDispatched: (_clientMsgId, conversationId) => {
|
|
204
|
+
if (conversationId === store.getState().currentConversationId) {
|
|
205
|
+
store.getState().setThinking(true);
|
|
206
|
+
}
|
|
150
207
|
},
|
|
151
208
|
onError: (err) => {
|
|
152
209
|
store.getState().setConnectionError(err);
|
|
@@ -185,11 +242,15 @@ export function ChatProvider(props) {
|
|
|
185
242
|
}, [gatewayUrl, tokenProvider]);
|
|
186
243
|
// Connect on mount / reconnect on deps change.
|
|
187
244
|
useEffect(() => {
|
|
245
|
+
// ac#1021:sink 的注册在这里(effect = 提交后),**不在 useMemo 里** —— 渲染期写
|
|
246
|
+
// zustand 会同步唤醒本文件下面那处裸 `store.subscribe`(restoring-timeout 对账)。
|
|
247
|
+
store.getState().setMidTurnSink(midTurnSinkFor(coordinatorRef.current));
|
|
188
248
|
void client.connect();
|
|
189
249
|
return () => {
|
|
190
250
|
client.disconnect();
|
|
251
|
+
store.getState().setMidTurnSink(null);
|
|
191
252
|
};
|
|
192
|
-
}, [client]);
|
|
253
|
+
}, [client, store]);
|
|
193
254
|
// Restoring timeout reconciler: track per-conversation 'restoring' state timers.
|
|
194
255
|
const restoringTimers = useRef(new Map());
|
|
195
256
|
useEffect(() => {
|
|
@@ -222,21 +283,15 @@ export function ChatProvider(props) {
|
|
|
222
283
|
}, [props.onTokenChange]);
|
|
223
284
|
const workspaceProvider = props.workspaceProvider ?? null;
|
|
224
285
|
const tasksProvider = props.tasksProvider ?? null;
|
|
225
|
-
return (_jsx(ChatContext.Provider, { value: {
|
|
286
|
+
return (_jsx(ChatContext.Provider, { value: {
|
|
287
|
+
store,
|
|
288
|
+
client,
|
|
289
|
+
api,
|
|
290
|
+
workspaceProvider,
|
|
291
|
+
tasksProvider,
|
|
292
|
+
coordinator: coordinatorRef.current,
|
|
293
|
+
}, children: children }));
|
|
226
294
|
}
|
|
227
|
-
/**
|
|
228
|
-
* Events whose arrival means "this conversation has active streaming".
|
|
229
|
-
* When any of these arrives with a `conversation_id`, the id joins
|
|
230
|
-
* `processingConversationIds`. See Spec 2.9.
|
|
231
|
-
*/
|
|
232
|
-
const PROCESSING_ADD_EVENTS = new Set([
|
|
233
|
-
'thinking',
|
|
234
|
-
'text_delta',
|
|
235
|
-
'content',
|
|
236
|
-
'tool_call',
|
|
237
|
-
'tool_result',
|
|
238
|
-
'progress',
|
|
239
|
-
]);
|
|
240
295
|
/** Return the conversation_id from an event, or null if it has none. */
|
|
241
296
|
function getEventConversationId(event) {
|
|
242
297
|
const maybe = event.conversation_id;
|
|
@@ -332,6 +387,11 @@ export function handleServerEvent(event, store, props) {
|
|
|
332
387
|
if (event.session.activeConversation) {
|
|
333
388
|
s.addProcessingConversation(event.session.activeConversation.conversationId);
|
|
334
389
|
}
|
|
390
|
+
// ac#1021 L1 能力位三态:键缺席(老 gateway)⇒ null,不是 false —— 两者对「允不允许
|
|
391
|
+
// 插话」的判定相同,但 null 还额外意味着「这个 gateway 根本没表过态」。
|
|
392
|
+
s.setMidTurnSteerSupported('midTurnSteer' in event.session
|
|
393
|
+
? event.session.midTurnSteer === true
|
|
394
|
+
: null);
|
|
335
395
|
// ac#917:与上面那条 add 放在一起——本函数里所有写 processingConversationIds 的地方
|
|
336
396
|
// 都在这一块,别把它挪到 applyAction 里去。
|
|
337
397
|
// ⚠️ **实测过:相对 `recovery` 的先后不承重。** 把本调用挪到 applyAction 循环之后,
|
|
@@ -366,6 +426,9 @@ function applyAction(action, store, props, fromTick = false) {
|
|
|
366
426
|
case 'setConversations':
|
|
367
427
|
s.setConversations(action.conversations);
|
|
368
428
|
return;
|
|
429
|
+
case 'setConversationPinSupported':
|
|
430
|
+
s.setConversationPinSupported(action.supported);
|
|
431
|
+
return;
|
|
369
432
|
case 'mergeConversations':
|
|
370
433
|
s.mergeConversations(action.conversations);
|
|
371
434
|
return;
|