@nocobase/app-plugin-agents 1.0.0-beta.20 → 1.0.0-beta.21
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/CHANGELOG.md +24 -0
- package/dist/client/chat/agent-mode.d.ts +47 -0
- package/dist/client/chat/agent-mode.d.ts.map +1 -0
- package/dist/client/chat/agent-mode.js +78 -0
- package/dist/client/chat/agent-mode.js.map +1 -0
- package/dist/client/chat/api.d.ts +2 -1
- package/dist/client/chat/api.d.ts.map +1 -1
- package/dist/client/chat/api.js +21 -5
- package/dist/client/chat/api.js.map +1 -1
- package/dist/client/chat/controller.d.ts +26 -0
- package/dist/client/chat/controller.d.ts.map +1 -1
- package/dist/client/chat/controller.js +328 -7
- package/dist/client/chat/controller.js.map +1 -1
- package/dist/client/chat/message-model.d.ts +10 -2
- package/dist/client/chat/message-model.d.ts.map +1 -1
- package/dist/client/chat/message-model.js +19 -2
- package/dist/client/chat/message-model.js.map +1 -1
- package/dist/client/chat/panel-state.d.ts +3 -0
- package/dist/client/chat/panel-state.d.ts.map +1 -1
- package/dist/client/chat/panel-state.js +4 -6
- package/dist/client/chat/panel-state.js.map +1 -1
- package/dist/client/chat/provider.d.ts +13 -2
- package/dist/client/chat/provider.d.ts.map +1 -1
- package/dist/client/chat/provider.js +25 -2
- package/dist/client/chat/provider.js.map +1 -1
- package/dist/client/chat/use-chat.d.ts +8 -1
- package/dist/client/chat/use-chat.d.ts.map +1 -1
- package/dist/client/chat/use-chat.js +28 -4
- package/dist/client/chat/use-chat.js.map +1 -1
- package/dist/client/chat/use-conversation-model.d.ts +4 -1
- package/dist/client/chat/use-conversation-model.d.ts.map +1 -1
- package/dist/client/chat/use-conversation-model.js +4 -3
- package/dist/client/chat/use-conversation-model.js.map +1 -1
- package/dist/client/chat.d.ts +6 -0
- package/dist/client/chat.d.ts.map +1 -1
- package/dist/client/chat.js +2 -0
- package/dist/client/chat.js.map +1 -1
- package/dist/client/online/service-editor.js +6 -1
- package/dist/client/online/service-editor.js.map +1 -1
- package/dist/package.json +17 -1
- package/dist/server/composition.d.ts.map +1 -1
- package/dist/server/composition.js +4 -0
- package/dist/server/composition.js.map +1 -1
- package/dist/server/core/conversations/attachments.d.ts +1 -1
- package/dist/server/core/conversations/attachments.d.ts.map +1 -1
- package/dist/server/core/conversations/attachments.js +2 -2
- package/dist/server/core/conversations/attachments.js.map +1 -1
- package/dist/server/core/conversations/conversation.service.d.ts.map +1 -1
- package/dist/server/core/conversations/conversation.service.js +7 -0
- package/dist/server/core/conversations/conversation.service.js.map +1 -1
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/kernel/events.d.ts +9 -0
- package/dist/server/kernel/events.d.ts.map +1 -1
- package/dist/server/kernel/events.js.map +1 -1
- package/dist/server/online/agent/configuration.d.ts +2 -0
- package/dist/server/online/agent/configuration.d.ts.map +1 -1
- package/dist/server/online/agent/configuration.js +21 -2
- package/dist/server/online/agent/configuration.js.map +1 -1
- package/dist/server/online/agent/contracts.d.ts +5 -0
- package/dist/server/online/agent/contracts.d.ts.map +1 -1
- package/dist/server/online/agent/index.d.ts +1 -0
- package/dist/server/online/agent/index.d.ts.map +1 -1
- package/dist/server/online/agent/index.js.map +1 -1
- package/dist/server/online/agent/messages/resend.d.ts +7 -0
- package/dist/server/online/agent/messages/resend.d.ts.map +1 -0
- package/dist/server/online/agent/messages/resend.js +58 -0
- package/dist/server/online/agent/messages/resend.js.map +1 -0
- package/dist/server/online/agent/native/backend.d.ts +4 -0
- package/dist/server/online/agent/native/backend.d.ts.map +1 -1
- package/dist/server/online/agent/native/backend.js +17 -24
- package/dist/server/online/agent/native/backend.js.map +1 -1
- package/dist/server/online/agent/native/execution.d.ts +6 -12
- package/dist/server/online/agent/native/execution.d.ts.map +1 -1
- package/dist/server/online/agent/native/execution.js +38 -11
- package/dist/server/online/agent/native/execution.js.map +1 -1
- package/dist/server/online/agent/native/session.d.ts +2 -0
- package/dist/server/online/agent/native/session.d.ts.map +1 -1
- package/dist/server/online/agent/native/session.js +11 -0
- package/dist/server/online/agent/native/session.js.map +1 -1
- package/dist/server/online/agent/native/types.d.ts +20 -0
- package/dist/server/online/agent/native/types.d.ts.map +1 -1
- package/dist/server/online/agent/persistence/store.d.ts +17 -0
- package/dist/server/online/agent/persistence/store.d.ts.map +1 -1
- package/dist/server/online/agent/persistence/store.js +118 -17
- package/dist/server/online/agent/persistence/store.js.map +1 -1
- package/dist/server/online/agent/runner/backend.d.ts +1 -0
- package/dist/server/online/agent/runner/backend.d.ts.map +1 -1
- package/dist/server/online/agent/runner/backend.js +3 -0
- package/dist/server/online/agent/runner/backend.js.map +1 -1
- package/dist/server/online/agent/service.d.ts +2 -0
- package/dist/server/online/agent/service.d.ts.map +1 -1
- package/dist/server/online/agent/service.js +2 -0
- package/dist/server/online/agent/service.js.map +1 -1
- package/dist/server/online/agent/types.d.ts +5 -0
- package/dist/server/online/agent/types.d.ts.map +1 -1
- package/dist/server/online/agent/web-search.d.ts +13 -0
- package/dist/server/online/agent/web-search.d.ts.map +1 -0
- package/dist/server/online/agent/web-search.js +65 -0
- package/dist/server/online/agent/web-search.js.map +1 -0
- package/dist/server/online/gateway.d.ts +13 -0
- package/dist/server/online/gateway.d.ts.map +1 -1
- package/dist/server/online/gateway.js +116 -2
- package/dist/server/online/gateway.js.map +1 -1
- package/dist/server/online/index.d.ts +1 -1
- package/dist/server/online/index.d.ts.map +1 -1
- package/dist/server/online/index.js.map +1 -1
- package/dist/server/online/providers.d.ts +6 -0
- package/dist/server/online/providers.d.ts.map +1 -1
- package/dist/server/online/providers.js +29 -1
- package/dist/server/online/providers.js.map +1 -1
- package/dist/server/online/search/alibaba.d.ts +10 -0
- package/dist/server/online/search/alibaba.d.ts.map +1 -0
- package/dist/server/online/search/alibaba.js +34 -0
- package/dist/server/online/search/alibaba.js.map +1 -0
- package/dist/server/online/search/anthropic.d.ts +12 -0
- package/dist/server/online/search/anthropic.d.ts.map +1 -0
- package/dist/server/online/search/anthropic.js +62 -0
- package/dist/server/online/search/anthropic.js.map +1 -0
- package/dist/server/online/search/budget.d.ts +13 -0
- package/dist/server/online/search/budget.d.ts.map +1 -0
- package/dist/server/online/search/budget.js +63 -0
- package/dist/server/online/search/budget.js.map +1 -0
- package/dist/server/online/search/capabilities.d.ts +7 -0
- package/dist/server/online/search/capabilities.d.ts.map +1 -0
- package/dist/server/online/search/capabilities.js +75 -0
- package/dist/server/online/search/capabilities.js.map +1 -0
- package/dist/server/online/search/contracts.d.ts +20 -0
- package/dist/server/online/search/contracts.d.ts.map +1 -0
- package/dist/server/online/search/contracts.js +2 -0
- package/dist/server/online/search/contracts.js.map +1 -0
- package/dist/server/online/search/google.d.ts +12 -0
- package/dist/server/online/search/google.d.ts.map +1 -0
- package/dist/server/online/search/google.js +51 -0
- package/dist/server/online/search/google.js.map +1 -0
- package/dist/server/online/search/openai.d.ts +18 -0
- package/dist/server/online/search/openai.d.ts.map +1 -0
- package/dist/server/online/search/openai.js +51 -0
- package/dist/server/online/search/openai.js.map +1 -0
- package/dist/server/online/search/prompts.d.ts +5 -0
- package/dist/server/online/search/prompts.d.ts.map +1 -0
- package/dist/server/online/search/prompts.js +28 -0
- package/dist/server/online/search/prompts.js.map +1 -0
- package/dist/server/online/search/results.d.ts +2 -0
- package/dist/server/online/search/results.d.ts.map +1 -0
- package/dist/server/online/search/results.js +2 -0
- package/dist/server/online/search/results.js.map +1 -0
- package/dist/server/online/services.d.ts +2 -0
- package/dist/server/online/services.d.ts.map +1 -1
- package/dist/server/online/services.js +17 -2
- package/dist/server/online/services.js.map +1 -1
- package/dist/server/providers/agents.d.ts.map +1 -1
- package/dist/server/providers/agents.js +11 -0
- package/dist/server/providers/agents.js.map +1 -1
- package/dist/server/routes/chat.d.ts.map +1 -1
- package/dist/server/routes/chat.js +34 -1
- package/dist/server/routes/chat.js.map +1 -1
- package/dist/server/routes/schemas.d.ts +3 -0
- package/dist/server/routes/schemas.d.ts.map +1 -1
- package/dist/server/routes/schemas.js +9 -0
- package/dist/server/routes/schemas.js.map +1 -1
- package/dist/shared/conversations.d.ts +12 -0
- package/dist/shared/conversations.d.ts.map +1 -1
- package/dist/shared/conversations.js.map +1 -1
- package/dist/shared/models.d.ts +9 -0
- package/dist/shared/models.d.ts.map +1 -1
- package/dist/shared/models.js.map +1 -1
- package/dist/shared/resend.d.ts +10 -0
- package/dist/shared/resend.d.ts.map +1 -0
- package/dist/shared/resend.js +2 -0
- package/dist/shared/resend.js.map +1 -0
- package/dist/shared/web-search-results.d.ts +16 -0
- package/dist/shared/web-search-results.d.ts.map +1 -0
- package/dist/shared/web-search-results.js +103 -0
- package/dist/shared/web-search-results.js.map +1 -0
- package/dist/shared/web-search.d.ts +40 -0
- package/dist/shared/web-search.d.ts.map +1 -0
- package/dist/shared/web-search.js +15 -0
- package/dist/shared/web-search.js.map +1 -0
- package/docs/message-resend.md +39 -0
- package/docs/native-web-search.md +76 -0
- package/docs/ui-message-clients.md +7 -1
- package/package.json +9 -1
- package/skills/nocobase-app-plugin-agents/SKILL.md +2 -1
- package/skills/nocobase-app-plugin-agents/references/online-agent.md +9 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# @nocobase/app-plugin-agents
|
|
2
2
|
|
|
3
|
+
## 1.0.0-beta.21
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 39fa974: The chat's headless entry tells a panel which kind of agent it shows: `resolveChatAgentMode`, `configuredChatModes`, `agentsOfMode` and `chatAgentMode` split the catalog into the online agent and runner agents, and `useChatPanel()` carries `agentMode` with `setAgentMode` for a panel that switches between them. `GET /api/agents/conversations` takes `mode=online|runner` to list one kind's conversations. `ChatProvider` takes `memoryScope` (the signed-in person's id) and remembers the agent a new conversation last went to in `localStorage` (`lastAgentId`, `rememberAgent`, `readLastAgent`, `rememberLastAgent`); `newConversationAgent` takes it as a third argument, ahead of the person's and the team's defaults. Every addition is optional, and a panel that passes none of it behaves as before.
|
|
8
|
+
|
|
9
|
+
The UI Library catalog in `nocobase-app-development` describes the updated `agent-chat` and `agent-composer` items: the panel's mode switch and the agent last used, and context chips that open a preview of what they carry.
|
|
10
|
+
|
|
11
|
+
- 005418a: Add native realtime message resend and text editing with atomic history replacement, original attachment and context retention, and authoritative cross-view synchronization. Add inline Edit, Copy, and Regenerate controls with direct execution and duplicate-submit protection to the Examples chat while keeping its composer drafts and application readiness safeguards.
|
|
12
|
+
|
|
13
|
+
Use a single neutral inline editing surface with Cancel and Send outside the input. Remove the redundant attachment/context hint and hide duplicate message actions while editing.
|
|
14
|
+
|
|
15
|
+
- dfc9be3: Add opt-in native OnlineAgent web search with provider-level admission for configured OpenAI, Anthropic, Google and Alibaba chat models on official endpoints, using the selected model service with isolated retrieval, execution budgets, cancellation and usage recording. Remove model-name allowlists without claiming universal vendor compatibility. Alibaba uses its existing Chat Completions SDK with an instance-scoped search flag; source-free answers are explicitly unverified, not fabricated evidence, and display no source list. Other platforms retain strict search/source evidence requirements. Incompatible calls fail safely without fallback; other providers and compatible/custom endpoints remain unsupported.
|
|
16
|
+
|
|
17
|
+
Expose derived model capabilities and published web-search contracts, preserve the existing configuration and SDK message lifecycle, and add localized search controls and overridable result cards to the Examples chat. Include locked-SDK offline provider fixtures and desktop/mobile compiled-deployment regression coverage; real provider acceptance is not implied.
|
|
18
|
+
|
|
19
|
+
Align an unset Alibaba service endpoint with the Beijing default shown by the model-service editor instead of the SDK's implicit Singapore endpoint. Preserve explicitly configured regional endpoints and credentials.
|
|
20
|
+
|
|
21
|
+
Present web search as a full-width segmented card with independent four-line result previews and Expand/Collapse controls. Pulse the globe only while searching, omit verification labels and disclaimers from the card, and preserve evidence states and safeguards in model output and persistence.
|
|
22
|
+
|
|
23
|
+
Use one retrieval-only prompt across the four providers, returning concise facts and specific evidence gaps instead of polished answers or generic website recommendations. Guide the main model to batch distinct queries and avoid unnecessary repeated searches, while preserving structured source validation and the Alibaba-only unverified policy.
|
|
24
|
+
|
|
25
|
+
Require forced search on Alibaba's isolated retrieval calls by sending both enable_search and search_options.forced_search. Keep ordinary chat requests unchanged and retain the unverified classification for source-free answers.
|
|
26
|
+
|
|
3
27
|
## 1.0.0-beta.20
|
|
4
28
|
|
|
5
29
|
### Minor Changes
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The chat's two kinds of agent as plain data. `online` is the application's own model agent (the catalog's `online`
|
|
3
|
+
* entry, offered while a chat model is configured); `runner` is every agent that works on a runner. A panel shows one
|
|
4
|
+
* mode at a time, each with its own conversations, and offers a switch only when both are configured.
|
|
5
|
+
*
|
|
6
|
+
* The agent last used for a new conversation is remembered in `localStorage` under a key the application scopes to
|
|
7
|
+
* itself and the signed-in person; every access is guarded (private windows, blocked storage).
|
|
8
|
+
*/
|
|
9
|
+
import type { ChatAgent, ConversationMode } from '../../shared/conversations.js';
|
|
10
|
+
/** The catalog's id of the application's own model agent. */
|
|
11
|
+
export declare const ONLINE_AGENT_ID = "online";
|
|
12
|
+
/** Both modes, in the order a panel lists them. */
|
|
13
|
+
export declare const CHAT_AGENT_MODES: readonly ConversationMode[];
|
|
14
|
+
/** The mode an agent (or a conversation's agent) belongs to. */
|
|
15
|
+
export declare function chatAgentMode(agent: {
|
|
16
|
+
readonly id: string;
|
|
17
|
+
}): ConversationMode;
|
|
18
|
+
/** The agents of one mode. */
|
|
19
|
+
export declare function agentsOfMode(agents: readonly ChatAgent[], mode: ConversationMode): ChatAgent[];
|
|
20
|
+
/** The modes the catalog offers: `online` while it lists the online agent, `runner` while it lists any other. */
|
|
21
|
+
export declare function configuredChatModes(agents: readonly ChatAgent[] | undefined): readonly ConversationMode[];
|
|
22
|
+
export interface ChatAgentModeInput {
|
|
23
|
+
readonly agents: readonly ChatAgent[] | undefined;
|
|
24
|
+
/** The mode the person switched to; null when they have not. */
|
|
25
|
+
readonly chosen?: ConversationMode | null;
|
|
26
|
+
/** The open conversation's agent; it decides while a conversation is shown. */
|
|
27
|
+
readonly conversationAgent?: {
|
|
28
|
+
readonly id: string;
|
|
29
|
+
} | null;
|
|
30
|
+
/** The agent a new conversation was asked to go to. */
|
|
31
|
+
readonly newAgentId?: string | null;
|
|
32
|
+
readonly lastAgentId?: string | null;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The mode a panel shows: the open conversation's, else the one chosen, else that of the agent a new conversation goes
|
|
36
|
+
* to (asked for, last used, the person's default, the system default), else the first configured one. Null while the
|
|
37
|
+
* catalog is loading and no conversation is open, or when no mode is configured.
|
|
38
|
+
*/
|
|
39
|
+
export declare function resolveChatAgentMode({ agents, chosen, conversationAgent, newAgentId, lastAgentId, }: ChatAgentModeInput): ConversationMode | null;
|
|
40
|
+
/** Where the last used agent is kept; the application's scope (its path and the person) follows it. */
|
|
41
|
+
export declare const CHAT_LAST_AGENT_STORAGE_KEY = "nocobase:agents-chat:last-agent";
|
|
42
|
+
/** The storage key for one scope, such as the application's path and the signed-in person's id. */
|
|
43
|
+
export declare function lastAgentStorageKey(scope: string): string;
|
|
44
|
+
/** The agent last used for a new conversation in `scope`; null when none is remembered or storage is unavailable. */
|
|
45
|
+
export declare function readLastAgent(scope: string, storage?: Storage | null): string | null;
|
|
46
|
+
export declare function rememberLastAgent(scope: string, agentId: string, storage?: Storage | null): void;
|
|
47
|
+
//# sourceMappingURL=agent-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-mode.d.ts","sourceRoot":"","sources":["../../../client/chat/agent-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EACjB,MAAM,+BAA+B,CAAC;AAEvC,6DAA6D;AAC7D,eAAO,MAAM,eAAe,WAAW,CAAC;AAExC,mDAAmD;AACnD,eAAO,MAAM,gBAAgB,EAAE,SAAS,gBAAgB,EAGvD,CAAC;AAEF,gEAAgE;AAChE,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB,GAAG,gBAAgB,CAEnB;AAED,8BAA8B;AAC9B,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,SAAS,EAAE,EAC5B,IAAI,EAAE,gBAAgB,GACrB,SAAS,EAAE,CAEb;AAED,iHAAiH;AACjH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,GACvC,SAAS,gBAAgB,EAAE,CAK7B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,CAAC;IAClD,gEAAgE;IAChE,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,+EAA+E;IAC/E,QAAQ,CAAC,iBAAiB,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5D,uDAAuD;IACvD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,MAAa,EACb,iBAAwB,EACxB,UAAiB,EACjB,WAAkB,GACnB,EAAE,kBAAkB,GAAG,gBAAgB,GAAG,IAAI,CAa9C;AAED,uGAAuG;AACvG,eAAO,MAAM,2BAA2B,oCAAoC,CAAC;AAW7E,mGAAmG;AACnG,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED,qHAAqH;AACrH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,GACvB,MAAM,GAAG,IAAI,CAOf;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,GACvB,IAAI,CAMN"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/** The catalog's id of the application's own model agent. */
|
|
2
|
+
export const ONLINE_AGENT_ID = 'online';
|
|
3
|
+
/** Both modes, in the order a panel lists them. */
|
|
4
|
+
export const CHAT_AGENT_MODES = [
|
|
5
|
+
'online',
|
|
6
|
+
'runner',
|
|
7
|
+
];
|
|
8
|
+
/** The mode an agent (or a conversation's agent) belongs to. */
|
|
9
|
+
export function chatAgentMode(agent) {
|
|
10
|
+
return agent.id === ONLINE_AGENT_ID ? 'online' : 'runner';
|
|
11
|
+
}
|
|
12
|
+
/** The agents of one mode. */
|
|
13
|
+
export function agentsOfMode(agents, mode) {
|
|
14
|
+
return agents.filter((agent) => chatAgentMode(agent) === mode);
|
|
15
|
+
}
|
|
16
|
+
/** The modes the catalog offers: `online` while it lists the online agent, `runner` while it lists any other. */
|
|
17
|
+
export function configuredChatModes(agents) {
|
|
18
|
+
if (!agents)
|
|
19
|
+
return [];
|
|
20
|
+
return CHAT_AGENT_MODES.filter((mode) => agents.some((agent) => chatAgentMode(agent) === mode));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The mode a panel shows: the open conversation's, else the one chosen, else that of the agent a new conversation goes
|
|
24
|
+
* to (asked for, last used, the person's default, the system default), else the first configured one. Null while the
|
|
25
|
+
* catalog is loading and no conversation is open, or when no mode is configured.
|
|
26
|
+
*/
|
|
27
|
+
export function resolveChatAgentMode({ agents, chosen = null, conversationAgent = null, newAgentId = null, lastAgentId = null, }) {
|
|
28
|
+
if (conversationAgent)
|
|
29
|
+
return chatAgentMode(conversationAgent);
|
|
30
|
+
const modes = configuredChatModes(agents);
|
|
31
|
+
if (!agents || modes.length === 0)
|
|
32
|
+
return null;
|
|
33
|
+
if (chosen && modes.includes(chosen))
|
|
34
|
+
return chosen;
|
|
35
|
+
const find = (id) => id ? agents.find((agent) => agent.id === id) : undefined;
|
|
36
|
+
const target = find(newAgentId) ??
|
|
37
|
+
find(lastAgentId) ??
|
|
38
|
+
agents.find((agent) => agent.isMyDefault) ??
|
|
39
|
+
agents.find((agent) => agent.isSystemDefault);
|
|
40
|
+
return target ? chatAgentMode(target) : (modes[0] ?? null);
|
|
41
|
+
}
|
|
42
|
+
/** Where the last used agent is kept; the application's scope (its path and the person) follows it. */
|
|
43
|
+
export const CHAT_LAST_AGENT_STORAGE_KEY = 'nocobase:agents-chat:last-agent';
|
|
44
|
+
function localStorageOf(storage) {
|
|
45
|
+
if (storage)
|
|
46
|
+
return storage;
|
|
47
|
+
try {
|
|
48
|
+
return typeof window === 'undefined' ? null : window.localStorage;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/** The storage key for one scope, such as the application's path and the signed-in person's id. */
|
|
55
|
+
export function lastAgentStorageKey(scope) {
|
|
56
|
+
return scope
|
|
57
|
+
? `${CHAT_LAST_AGENT_STORAGE_KEY}:${scope}`
|
|
58
|
+
: CHAT_LAST_AGENT_STORAGE_KEY;
|
|
59
|
+
}
|
|
60
|
+
/** The agent last used for a new conversation in `scope`; null when none is remembered or storage is unavailable. */
|
|
61
|
+
export function readLastAgent(scope, storage) {
|
|
62
|
+
try {
|
|
63
|
+
const value = localStorageOf(storage)?.getItem(lastAgentStorageKey(scope));
|
|
64
|
+
return value ? value : null;
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export function rememberLastAgent(scope, agentId, storage) {
|
|
71
|
+
try {
|
|
72
|
+
localStorageOf(storage)?.setItem(lastAgentStorageKey(scope), agentId);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Not remembered; the next new conversation falls back to the defaults.
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=agent-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-mode.js","sourceRoot":"","sources":["../../../client/chat/agent-mode.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* The browser API of the chat (`CHAT_ROUTES` in `shared/conversations`), typed with the shared contract. One method per endpoint; answers are unwrapped from `{ data }` (a page of conversations or messages
|
|
3
3
|
* is put back together from `{ data, meta }`); failures throw `ApiClientError`.
|
|
4
4
|
*/
|
|
5
|
+
import type { OnlineAgentResendOptions } from '../../shared/resend.js';
|
|
5
6
|
import { DefaultChatTransport } from 'ai';
|
|
6
7
|
import type { AppUIMessage } from '../../shared/online-agent.js';
|
|
7
8
|
import type { UIMessagePage } from './message-model.js';
|
|
@@ -14,7 +15,7 @@ export declare class ChatApi {
|
|
|
14
15
|
configuration(id: string, signal?: AbortSignal): Promise<OnlineChatConfigSnapshot>;
|
|
15
16
|
configure(id: string, config: NonNullable<CreateConversationRequest['config']>, selectedModel?: CreateConversationRequest['selectedModel']): Promise<OnlineChatConfigSnapshot>;
|
|
16
17
|
/** Use the host's authenticated HTTP boundary; framing, parsing and replay remain the SDK's. */
|
|
17
|
-
transport(id: string, accepted: (clientId: string) => void): DefaultChatTransport<AppUIMessage>;
|
|
18
|
+
transport(id: string, accepted: (clientId: string) => void, resent?: (options: OnlineAgentResendOptions) => Promise<void>): DefaultChatTransport<AppUIMessage>;
|
|
18
19
|
conversations(query?: ConversationListQuery): Promise<ConversationPage>;
|
|
19
20
|
createConversation(request: CreateConversationRequest): Promise<ConversationDetail>;
|
|
20
21
|
conversation(id: string): Promise<ConversationDetail>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../client/chat/api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,oBAAoB,EAA6B,MAAM,IAAI,CAAC;AACrE,OAAO,KAAK,EACV,YAAY,EAEb,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtE,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EAErB,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAiB3D,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;gBAEb,GAAG,EAAE,SAAS;IAI1B,aAAa,CAClB,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,wBAAwB,CAAC;IAG7B,SAAS,CACd,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,WAAW,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,EACxD,aAAa,CAAC,EAAE,yBAAyB,CAAC,eAAe,CAAC,GACzD,OAAO,CAAC,wBAAwB,CAAC;IAMpC,gGAAgG;IACzF,SAAS,CACd,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../client/chat/api.ts"],"names":[],"mappings":"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"}
|
package/dist/client/chat/api.js
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The browser API of the chat (`CHAT_ROUTES` in `shared/conversations`), typed with the shared contract. One method per endpoint; answers are unwrapped from `{ data }` (a page of conversations or messages
|
|
3
|
-
* is put back together from `{ data, meta }`); failures throw `ApiClientError`.
|
|
4
|
-
*/
|
|
5
1
|
import { DefaultChatTransport, UI_MESSAGE_STREAM_HEADERS } from 'ai';
|
|
6
2
|
import { ApiClientError } from '@nocobase/app-client';
|
|
7
3
|
import { chatPath, } from '../../shared/conversations.js';
|
|
@@ -26,10 +22,15 @@ export class ChatApi {
|
|
|
26
22
|
});
|
|
27
23
|
}
|
|
28
24
|
/** Use the host's authenticated HTTP boundary; framing, parsing and replay remain the SDK's. */
|
|
29
|
-
transport(id, accepted) {
|
|
25
|
+
transport(id, accepted, resent) {
|
|
30
26
|
return new DefaultChatTransport({
|
|
31
27
|
api: chatPath('messages', id),
|
|
32
28
|
prepareSendMessagesRequest: ({ messages, body }) => {
|
|
29
|
+
if (body?.resendInput)
|
|
30
|
+
return {
|
|
31
|
+
api: `${chatPath('conversation', id)}/resend`,
|
|
32
|
+
body: body.resendInput,
|
|
33
|
+
};
|
|
33
34
|
if (body?.approvalInput)
|
|
34
35
|
return {
|
|
35
36
|
api: `${chatPath('conversation', id)}/approval`,
|
|
@@ -63,6 +64,20 @@ export class ChatApi {
|
|
|
63
64
|
...(body ? { json: body } : {}),
|
|
64
65
|
...(init?.signal ? { signal: init.signal } : {}),
|
|
65
66
|
});
|
|
67
|
+
const path = typeof input === 'string'
|
|
68
|
+
? input
|
|
69
|
+
: input instanceof URL
|
|
70
|
+
? input.toString()
|
|
71
|
+
: input.url;
|
|
72
|
+
if (init?.method === 'POST' && path.endsWith('/resend')) {
|
|
73
|
+
try {
|
|
74
|
+
await resent?.(body);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
await stream.cancel().catch(() => { });
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
66
81
|
if (init?.method === 'POST' &&
|
|
67
82
|
body?.message &&
|
|
68
83
|
typeof body.message === 'object' &&
|
|
@@ -84,6 +99,7 @@ export class ChatApi {
|
|
|
84
99
|
q: query.q,
|
|
85
100
|
archived: query.archived === undefined ? undefined : String(query.archived),
|
|
86
101
|
agentId: query.agentId,
|
|
102
|
+
mode: query.mode,
|
|
87
103
|
source: query.source,
|
|
88
104
|
pageToken: query.pageToken,
|
|
89
105
|
pageSize: query.pageSize,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../client/chat/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../client/chat/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
import type { OnlineAgentResendOptions } from '../../shared/resend.js';
|
|
2
|
+
import type { ConversationChanged } from '../../shared/conversations.js';
|
|
3
|
+
export type ResendResult = {
|
|
4
|
+
outcome: 'accepted' | 'rejected' | 'unknown';
|
|
5
|
+
needsSync?: boolean;
|
|
6
|
+
error?: unknown;
|
|
7
|
+
};
|
|
8
|
+
type HistoryReplacement = Extract<ConversationChanged, {
|
|
9
|
+
kind: 'conversation.historyReplaced';
|
|
10
|
+
}>;
|
|
1
11
|
import { Chat } from '@ai-sdk/react';
|
|
2
12
|
import { type ReactElement, type ReactNode } from 'react';
|
|
3
13
|
import type { ConversationDetail } from '../../shared/conversations.js';
|
|
@@ -13,6 +23,10 @@ export type StreamState = {
|
|
|
13
23
|
/** Application coordination around one SDK Chat per conversation, shared by every surface. */
|
|
14
24
|
export declare class ChatController {
|
|
15
25
|
readonly api: ChatApi;
|
|
26
|
+
private historyEpochs;
|
|
27
|
+
private replacements;
|
|
28
|
+
private resendRequests;
|
|
29
|
+
private reconciles;
|
|
16
30
|
readonly submissions: ChatSubmissions;
|
|
17
31
|
private chats;
|
|
18
32
|
private histories;
|
|
@@ -46,6 +60,17 @@ export declare class ChatController {
|
|
|
46
60
|
};
|
|
47
61
|
private historyMeta;
|
|
48
62
|
dispatch(id: string, action: MessagesAction): void;
|
|
63
|
+
private historyLifetime;
|
|
64
|
+
private invalidateHistoryReads;
|
|
65
|
+
historyReplaced(event: HistoryReplacement): void;
|
|
66
|
+
private replaceHistory;
|
|
67
|
+
private resendAccepted;
|
|
68
|
+
isResending(id: string): boolean;
|
|
69
|
+
resend(id: string, options: OnlineAgentResendOptions & {
|
|
70
|
+
messageId: string;
|
|
71
|
+
}): Promise<ResendResult>;
|
|
72
|
+
/** Only a successful read of every requested ID proves absence; never delete an unqueried message. */
|
|
73
|
+
private reconcile;
|
|
49
74
|
loadHistory(id: string, older?: boolean, fresh?: boolean): Promise<void>;
|
|
50
75
|
reread(id: string, ids: readonly string[]): Promise<AppUIMessage[]>;
|
|
51
76
|
watch(id: string): () => void;
|
|
@@ -80,4 +105,5 @@ export declare function ChatClientProvider({ children, }: {
|
|
|
80
105
|
export declare function useChatController(): ChatController;
|
|
81
106
|
export declare function useChatStream(id: string | null): StreamState | undefined;
|
|
82
107
|
export declare function useChatStreamState(id: string | null): StreamState | undefined;
|
|
108
|
+
export {};
|
|
83
109
|
//# sourceMappingURL=controller.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../client/chat/controller.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../client/chat/controller.tsx"],"names":[],"mappings":"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"}
|