@nocobase/app-plugin-agents 1.0.0-beta.27 → 1.0.0-beta.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +40 -22
  3. package/dist/client/chat/api.d.ts +18 -1
  4. package/dist/client/chat/api.d.ts.map +1 -1
  5. package/dist/client/chat/api.js +37 -0
  6. package/dist/client/chat/api.js.map +1 -1
  7. package/dist/client/chat/coalesced-invalidation.d.ts +15 -0
  8. package/dist/client/chat/coalesced-invalidation.d.ts.map +1 -0
  9. package/dist/client/chat/coalesced-invalidation.js +29 -0
  10. package/dist/client/chat/coalesced-invalidation.js.map +1 -0
  11. package/dist/client/chat/controller.d.ts +8 -1
  12. package/dist/client/chat/controller.d.ts.map +1 -1
  13. package/dist/client/chat/controller.js +21 -0
  14. package/dist/client/chat/controller.js.map +1 -1
  15. package/dist/client/chat/message-model.d.ts.map +1 -1
  16. package/dist/client/chat/message-model.js +4 -0
  17. package/dist/client/chat/message-model.js.map +1 -1
  18. package/dist/client/chat/submissions.d.ts +3 -0
  19. package/dist/client/chat/submissions.d.ts.map +1 -1
  20. package/dist/client/chat/submissions.js +1 -0
  21. package/dist/client/chat/submissions.js.map +1 -1
  22. package/dist/client/chat/use-chat-scroll.d.ts +8 -1
  23. package/dist/client/chat/use-chat-scroll.d.ts.map +1 -1
  24. package/dist/client/chat/use-chat-scroll.js +29 -5
  25. package/dist/client/chat/use-chat-scroll.js.map +1 -1
  26. package/dist/client/chat/use-chat.d.ts +2 -0
  27. package/dist/client/chat/use-chat.d.ts.map +1 -1
  28. package/dist/client/chat/use-chat.js +17 -7
  29. package/dist/client/chat/use-chat.js.map +1 -1
  30. package/dist/client/components/agent-prompt-callout.d.ts +19 -0
  31. package/dist/client/components/agent-prompt-callout.d.ts.map +1 -0
  32. package/dist/client/components/agent-prompt-callout.js +28 -0
  33. package/dist/client/components/agent-prompt-callout.js.map +1 -0
  34. package/dist/client/locales/chat.en-US.d.ts +1 -0
  35. package/dist/client/locales/chat.en-US.d.ts.map +1 -1
  36. package/dist/client/locales/chat.en-US.js +1 -0
  37. package/dist/client/locales/chat.en-US.js.map +1 -1
  38. package/dist/client/locales/chat.zh-CN.d.ts.map +1 -1
  39. package/dist/client/locales/chat.zh-CN.js +1 -0
  40. package/dist/client/locales/chat.zh-CN.js.map +1 -1
  41. package/dist/client/locales/de-DE.d.ts.map +1 -1
  42. package/dist/client/locales/de-DE.js +1 -0
  43. package/dist/client/locales/de-DE.js.map +1 -1
  44. package/dist/client/locales/es-ES.d.ts.map +1 -1
  45. package/dist/client/locales/es-ES.js +1 -0
  46. package/dist/client/locales/es-ES.js.map +1 -1
  47. package/dist/client/locales/fr-FR.d.ts.map +1 -1
  48. package/dist/client/locales/fr-FR.js +1 -0
  49. package/dist/client/locales/fr-FR.js.map +1 -1
  50. package/dist/client/locales/id-ID.d.ts.map +1 -1
  51. package/dist/client/locales/id-ID.js +1 -0
  52. package/dist/client/locales/id-ID.js.map +1 -1
  53. package/dist/client/locales/ja-JP.d.ts.map +1 -1
  54. package/dist/client/locales/ja-JP.js +1 -0
  55. package/dist/client/locales/ja-JP.js.map +1 -1
  56. package/dist/client/locales/pt-BR.d.ts.map +1 -1
  57. package/dist/client/locales/pt-BR.js +1 -0
  58. package/dist/client/locales/pt-BR.js.map +1 -1
  59. package/dist/client/locales/runtimes.en-US.d.ts +4 -1
  60. package/dist/client/locales/runtimes.en-US.d.ts.map +1 -1
  61. package/dist/client/locales/runtimes.en-US.js +6 -3
  62. package/dist/client/locales/runtimes.en-US.js.map +1 -1
  63. package/dist/client/locales/runtimes.zh-CN.d.ts.map +1 -1
  64. package/dist/client/locales/runtimes.zh-CN.js +6 -3
  65. package/dist/client/locales/runtimes.zh-CN.js.map +1 -1
  66. package/dist/client/locales/vi-VN.d.ts.map +1 -1
  67. package/dist/client/locales/vi-VN.js +1 -0
  68. package/dist/client/locales/vi-VN.js.map +1 -1
  69. package/dist/client/locales/zh-TW.d.ts.map +1 -1
  70. package/dist/client/locales/zh-TW.js +1 -0
  71. package/dist/client/locales/zh-TW.js.map +1 -1
  72. package/dist/client/pages/runtimes/connect.d.ts.map +1 -1
  73. package/dist/client/pages/runtimes/connect.js +16 -10
  74. package/dist/client/pages/runtimes/connect.js.map +1 -1
  75. package/dist/client/pages/skills/index.js +2 -2
  76. package/dist/client/pages/skills/index.js.map +1 -1
  77. package/dist/database/migrations/.manifest.json +8 -0
  78. package/dist/database/migrations/202611010001_ag_conversation_runner_attention.d.ts +4 -0
  79. package/dist/database/migrations/202611010001_ag_conversation_runner_attention.d.ts.map +1 -0
  80. package/dist/database/migrations/202611010001_ag_conversation_runner_attention.js +30 -0
  81. package/dist/database/migrations/202611010001_ag_conversation_runner_attention.js.map +1 -0
  82. package/dist/database/migrations/202611010002_ag_create_conversation_links.d.ts +4 -0
  83. package/dist/database/migrations/202611010002_ag_create_conversation_links.d.ts.map +1 -0
  84. package/dist/database/migrations/202611010002_ag_create_conversation_links.js +30 -0
  85. package/dist/database/migrations/202611010002_ag_create_conversation_links.js.map +1 -0
  86. package/dist/package.json +1 -1
  87. package/dist/server/composition.d.ts.map +1 -1
  88. package/dist/server/composition.js +1 -0
  89. package/dist/server/composition.js.map +1 -1
  90. package/dist/server/core/conversations/attachments.d.ts +5 -0
  91. package/dist/server/core/conversations/attachments.d.ts.map +1 -1
  92. package/dist/server/core/conversations/attachments.js +10 -0
  93. package/dist/server/core/conversations/attachments.js.map +1 -1
  94. package/dist/server/core/conversations/conversation.service.d.ts +3 -1
  95. package/dist/server/core/conversations/conversation.service.d.ts.map +1 -1
  96. package/dist/server/core/conversations/conversation.service.js +693 -32
  97. package/dist/server/core/conversations/conversation.service.js.map +1 -1
  98. package/dist/server/core/conversations/conversation.store.d.ts +24 -0
  99. package/dist/server/core/conversations/conversation.store.d.ts.map +1 -1
  100. package/dist/server/core/conversations/conversation.store.js +10 -0
  101. package/dist/server/core/conversations/conversation.store.js.map +1 -1
  102. package/dist/server/core/conversations/index.d.ts +1 -1
  103. package/dist/server/core/conversations/index.d.ts.map +1 -1
  104. package/dist/server/core/conversations/index.js.map +1 -1
  105. package/dist/server/core/conversations/links.d.ts +27 -0
  106. package/dist/server/core/conversations/links.d.ts.map +1 -0
  107. package/dist/server/core/conversations/links.js +188 -0
  108. package/dist/server/core/conversations/links.js.map +1 -0
  109. package/dist/server/core/conversations/ports.d.ts +107 -3
  110. package/dist/server/core/conversations/ports.d.ts.map +1 -1
  111. package/dist/server/core/runs/claim.d.ts.map +1 -1
  112. package/dist/server/core/runs/claim.js +47 -3
  113. package/dist/server/core/runs/claim.js.map +1 -1
  114. package/dist/server/core/runs/lifecycle.d.ts.map +1 -1
  115. package/dist/server/core/runs/lifecycle.js +28 -3
  116. package/dist/server/core/runs/lifecycle.js.map +1 -1
  117. package/dist/server/core/runs/ports.d.ts +15 -0
  118. package/dist/server/core/runs/ports.d.ts.map +1 -1
  119. package/dist/server/core/runs/ports.js.map +1 -1
  120. package/dist/server/core/runs/run-data-purge.d.ts +7 -0
  121. package/dist/server/core/runs/run-data-purge.d.ts.map +1 -1
  122. package/dist/server/core/runs/run-data-purge.js +13 -0
  123. package/dist/server/core/runs/run-data-purge.js.map +1 -1
  124. package/dist/server/core/runs/run.store.d.ts +6 -2
  125. package/dist/server/core/runs/run.store.d.ts.map +1 -1
  126. package/dist/server/core/runs/run.store.js +28 -10
  127. package/dist/server/core/runs/run.store.js.map +1 -1
  128. package/dist/server/kernel/errors.d.ts +1 -1
  129. package/dist/server/kernel/errors.d.ts.map +1 -1
  130. package/dist/server/kernel/errors.js +2 -0
  131. package/dist/server/kernel/errors.js.map +1 -1
  132. package/dist/server/kernel/events.d.ts +19 -0
  133. package/dist/server/kernel/events.d.ts.map +1 -1
  134. package/dist/server/kernel/events.js.map +1 -1
  135. package/dist/server/online/agent/contracts.d.ts +5 -0
  136. package/dist/server/online/agent/contracts.d.ts.map +1 -1
  137. package/dist/server/online/agent/native/session.d.ts +1 -0
  138. package/dist/server/online/agent/native/session.d.ts.map +1 -1
  139. package/dist/server/online/agent/native/session.js +4 -1
  140. package/dist/server/online/agent/native/session.js.map +1 -1
  141. package/dist/server/online/agent/persistence/store.d.ts.map +1 -1
  142. package/dist/server/online/agent/persistence/store.js +8 -1
  143. package/dist/server/online/agent/persistence/store.js.map +1 -1
  144. package/dist/server/online/agent/runner/backend.d.ts +15 -0
  145. package/dist/server/online/agent/runner/backend.d.ts.map +1 -1
  146. package/dist/server/online/agent/runner/backend.js +310 -70
  147. package/dist/server/online/agent/runner/backend.js.map +1 -1
  148. package/dist/server/online/agent/runner/projection.d.ts +24 -2
  149. package/dist/server/online/agent/runner/projection.d.ts.map +1 -1
  150. package/dist/server/online/agent/runner/projection.js +330 -26
  151. package/dist/server/online/agent/runner/projection.js.map +1 -1
  152. package/dist/server/online/agent/runner/types.d.ts +8 -1
  153. package/dist/server/online/agent/runner/types.d.ts.map +1 -1
  154. package/dist/server/online/agent/types.d.ts +2 -0
  155. package/dist/server/online/agent/types.d.ts.map +1 -1
  156. package/dist/server/providers/agents.d.ts +7 -0
  157. package/dist/server/providers/agents.d.ts.map +1 -1
  158. package/dist/server/providers/agents.js +3 -1
  159. package/dist/server/providers/agents.js.map +1 -1
  160. package/dist/server/providers/runners.d.ts.map +1 -1
  161. package/dist/server/providers/runners.js +12 -1
  162. package/dist/server/providers/runners.js.map +1 -1
  163. package/dist/server/routes/chat.d.ts.map +1 -1
  164. package/dist/server/routes/chat.js +270 -2
  165. package/dist/server/routes/chat.js.map +1 -1
  166. package/dist/server/routes/run.d.ts.map +1 -1
  167. package/dist/server/routes/run.js +44 -0
  168. package/dist/server/routes/run.js.map +1 -1
  169. package/dist/server/routes/schemas.d.ts +15 -1
  170. package/dist/server/routes/schemas.d.ts.map +1 -1
  171. package/dist/server/routes/schemas.js +116 -1
  172. package/dist/server/routes/schemas.js.map +1 -1
  173. package/dist/server/runners/workspaces.d.ts.map +1 -1
  174. package/dist/server/runners/workspaces.js +46 -2
  175. package/dist/server/runners/workspaces.js.map +1 -1
  176. package/dist/server/tokens.d.ts +1 -1
  177. package/dist/server/tokens.d.ts.map +1 -1
  178. package/dist/server/tokens.js.map +1 -1
  179. package/dist/shared/conversations.d.ts +107 -1
  180. package/dist/shared/conversations.d.ts.map +1 -1
  181. package/dist/shared/conversations.js +19 -0
  182. package/dist/shared/conversations.js.map +1 -1
  183. package/dist/shared/ui-message.d.ts +30 -0
  184. package/dist/shared/ui-message.d.ts.map +1 -1
  185. package/dist/shared/ui-message.js +17 -0
  186. package/dist/shared/ui-message.js.map +1 -1
  187. package/package.json +9 -9
  188. package/skills/nocobase-app-plugin-agents/references/extension-points.md +19 -19
  189. package/skills/nocobase-app-plugin-agents/references/online-agent.md +16 -2
@@ -0,0 +1,188 @@
1
+ import { CONVERSATION_LINK_KIND_PATTERN, } from '../../../shared/conversations.js';
2
+ import { invalid, notFound } from '../../kernel/errors.js';
3
+ import { findConversation, linksRepo, lockConversation, } from './conversation.store.js';
4
+ /** At most this many links are listed for one conversation, and this many conversations for one target. */
5
+ const CONVERSATION_LINKS_MAX = 200;
6
+ function checkTarget(target) {
7
+ if (!CONVERSATION_LINK_KIND_PATTERN.test(target.kind))
8
+ throw invalid('kind is not a link kind.', { field: 'kind' });
9
+ if (typeof target.targetId !== 'string' ||
10
+ target.targetId.length === 0 ||
11
+ target.targetId.length > 255)
12
+ throw invalid('targetId must be 1 to 255 characters.', {
13
+ field: 'targetId',
14
+ });
15
+ }
16
+ export function createConversationLinks(deps) {
17
+ const { tx, ids, now } = deps;
18
+ const kinds = new Map();
19
+ async function owned(conn, userId, id) {
20
+ const record = await findConversation(conn, id);
21
+ if (!record || record.userId !== userId)
22
+ throw notFound('Conversation');
23
+ return record;
24
+ }
25
+ /** Each kind's views of its targets, for `userId`. */
26
+ async function views(conn, userId, rows) {
27
+ const found = new Map();
28
+ const byKind = new Map();
29
+ for (const row of rows)
30
+ byKind.set(row.kind, [...(byKind.get(row.kind) ?? []), row.targetId]);
31
+ for (const [key, targetIds] of byKind) {
32
+ const resolved = await kinds
33
+ .get(key)
34
+ ?.resolve?.(conn, userId, [...new Set(targetIds)]);
35
+ for (const [targetId, view] of resolved ?? [])
36
+ found.set(`${key}:${targetId}`, view);
37
+ }
38
+ return found;
39
+ }
40
+ function linkOf(row, found) {
41
+ return {
42
+ id: row.id,
43
+ conversationId: row.conversationId,
44
+ kind: row.kind,
45
+ targetId: row.targetId,
46
+ origin: row.origin,
47
+ createdAt: row.createdAt,
48
+ view: found.get(`${row.kind}:${row.targetId}`) ?? null,
49
+ };
50
+ }
51
+ async function rowsOf(conn, conversationId) {
52
+ return (await linksRepo(conn).findMany({
53
+ filter: { conversationId },
54
+ sort: (sort) => [sort.field('createdAt').asc(), sort.field('id').asc()],
55
+ limit: CONVERSATION_LINKS_MAX,
56
+ })).filter((row) => kinds.has(row.kind));
57
+ }
58
+ /** Ties the target to the locked conversation; the row, and whether it is new. */
59
+ async function tie(unit, record, target, origin, createdById) {
60
+ const filter = {
61
+ conversationId: record.id,
62
+ kind: target.kind,
63
+ targetId: target.targetId,
64
+ };
65
+ const existing = await linksRepo(unit.conn).findOne({ filter });
66
+ if (existing)
67
+ return { row: existing, created: false };
68
+ const id = ids.next();
69
+ await linksRepo(unit.conn).createOne({
70
+ values: { id, ...filter, origin, createdById, createdAt: now() },
71
+ });
72
+ deps.changed(unit, record);
73
+ return {
74
+ row: (await linksRepo(unit.conn).findOne({ filter: { id } })),
75
+ created: true,
76
+ };
77
+ }
78
+ async function conversationIds(conn, target) {
79
+ const rows = await linksRepo(conn).findMany({
80
+ filter: { kind: target.kind, targetId: target.targetId },
81
+ sort: (sort) => sort.field('createdAt').desc(),
82
+ limit: CONVERSATION_LINKS_MAX,
83
+ });
84
+ return [...new Set(rows.map((row) => row.conversationId))];
85
+ }
86
+ return {
87
+ registerKind(kind) {
88
+ if (!CONVERSATION_LINK_KIND_PATTERN.test(kind.key))
89
+ throw new Error(`Not a conversation link kind: ${kind.key}`);
90
+ if (kinds.has(kind.key))
91
+ throw new Error(`Conversation link kind already registered: ${kind.key}`);
92
+ kinds.set(kind.key, kind);
93
+ return () => {
94
+ if (kinds.get(kind.key) === kind)
95
+ kinds.delete(kind.key);
96
+ };
97
+ },
98
+ hasKind: (key) => kinds.has(key),
99
+ async list(userId, conversationId) {
100
+ const conn = tx.read();
101
+ await owned(conn, userId, conversationId);
102
+ const rows = await rowsOf(conn, conversationId);
103
+ const found = await views(conn, userId, rows);
104
+ return rows.map((row) => linkOf(row, found));
105
+ },
106
+ async add(userId, conversationId, target) {
107
+ checkTarget(target);
108
+ const kind = kinds.get(target.kind);
109
+ if (!kind)
110
+ throw invalid(`${target.kind} is not a kind conversations link to.`, {
111
+ field: 'kind',
112
+ });
113
+ const conn = tx.read();
114
+ await owned(conn, userId, conversationId);
115
+ // Resolved before the transaction: the kind reads what the owner may see.
116
+ const view = kind.resolve
117
+ ? (await kind.resolve(conn, userId, [target.targetId])).get(target.targetId)
118
+ : undefined;
119
+ if (kind.resolve && !view)
120
+ throw invalid('targetId names nothing you may see.', {
121
+ field: 'targetId',
122
+ });
123
+ const row = await tx.run(async (unit) => {
124
+ const record = await lockConversation(unit.conn, conversationId, now());
125
+ if (!record || record.userId !== userId)
126
+ throw notFound('Conversation');
127
+ return (await tie(unit, record, target, 'user', userId)).row;
128
+ });
129
+ return linkOf(row, new Map(view ? [[`${target.kind}:${target.targetId}`, view]] : []));
130
+ },
131
+ async remove(userId, conversationId, linkId) {
132
+ await tx.run(async (unit) => {
133
+ const record = await lockConversation(unit.conn, conversationId, now());
134
+ if (!record || record.userId !== userId)
135
+ throw notFound('Conversation');
136
+ const deleted = await linksRepo(unit.conn).deleteMany({
137
+ filter: { id: linkId, conversationId },
138
+ });
139
+ if (deleted.deletedCount !== 1)
140
+ throw notFound('Link');
141
+ deps.changed(unit, record);
142
+ });
143
+ },
144
+ async attach(conversationId, target, options = {}) {
145
+ checkTarget(target);
146
+ const work = async (unit) => {
147
+ const record = await lockConversation(unit.conn, conversationId, now());
148
+ if (!record)
149
+ return false;
150
+ return (await tie(unit, record, target, options.origin ?? 'application', null)).created;
151
+ };
152
+ return options.outer ? work(options.outer) : tx.run(work);
153
+ },
154
+ async linkedTo(conn, target) {
155
+ const found = [];
156
+ for (const id of await conversationIds(conn, target)) {
157
+ const record = await findConversation(conn, id);
158
+ if (record)
159
+ found.push(deps.refOf(record));
160
+ }
161
+ return found;
162
+ },
163
+ async turnSection(conn, conversation) {
164
+ const rows = await rowsOf(conn, conversation.id);
165
+ if (rows.length === 0)
166
+ return null;
167
+ const found = await views(conn, conversation.userId, rows);
168
+ const lines = rows.flatMap((row) => {
169
+ const view = found.get(`${row.kind}:${row.targetId}`);
170
+ // What the owner may no longer see is left out, as it is from their list.
171
+ if (kinds.get(row.kind)?.resolve && !view)
172
+ return [];
173
+ const name = view?.key ?? row.targetId;
174
+ return [
175
+ `- ${row.kind} ${name}${view ? `: ${view.title}` : ''}${view?.status ? ` (${view.status})` : ''}`,
176
+ ];
177
+ });
178
+ return lines.length > 0
179
+ ? [
180
+ 'Linked work (what this conversation drives, as it stands now):',
181
+ ...lines,
182
+ ]
183
+ : null;
184
+ },
185
+ conversationIds,
186
+ };
187
+ }
188
+ //# sourceMappingURL=links.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"links.js","sourceRoot":"","sources":["../../../../server/core/conversations/links.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@
10
10
  import type { DatabaseConnection } from '@nocobase/db';
11
11
  import type { Agent } from '../../../shared/agents.js';
12
12
  import type { I18nText } from '../../../shared/i18n.js';
13
- import type { ChatAgent, ConversationNotice, ConversationDetail, ConversationListQuery, ConversationPage, ConversationPatch, ConversationSource, CreateConversationRequest, MessagePage, SendMessageRequest, SendMessageResult, StartConversationRequest, ResolvedPageContext } from '../../../shared/conversations.js';
13
+ import type { ChatAgent, ConversationAttentionCounts, ConversationUsage, ConversationLink, ConversationLinkView, ConversationNotice, ConversationDetail, ConversationListQuery, ConversationPage, ConversationPatch, ConversationSource, CreateConversationRequest, MessagePage, SendMessageRequest, SendMessageResult, StartConversationRequest, ResolvedPageContext } from '../../../shared/conversations.js';
14
14
  import type { Run } from '../../../shared/runs.js';
15
15
  import type { Tx } from '../../kernel/tx.js';
16
16
  import type { NewInput, SubjectBinding } from '../runs/index.js';
@@ -39,12 +39,60 @@ export interface ConversationRuleLines {
39
39
  readonly rules?: readonly string[];
40
40
  /** Sections after the rules, each a list of lines (a heading line, then `- ` lines). */
41
41
  readonly sections?: readonly (readonly string[])[];
42
+ /**
43
+ * Sections added to every turn after its first line, each a list of lines: what is current now, such as the work the
44
+ * conversation drives. A resumed session does not read the system layer again, and these never stop it resuming.
45
+ */
46
+ readonly turn?: readonly (readonly string[])[];
42
47
  }
43
48
  /**
44
49
  * The application's part of the system layer of a conversation's runs, such as its rules for changing data for the
45
50
  * person. Database reads only; called in the claim's transaction.
46
51
  */
47
52
  export type ConversationRules = (conn: DatabaseConnection, context: ConversationRulesContext) => Promise<ConversationRuleLines>;
53
+ /** A kind of record conversations may be tied to (`ConversationLinks.registerKind`), such as an issue. */
54
+ export interface ConversationLinkKind {
55
+ /** `CONVERSATION_LINK_KIND_PATTERN`; a key is registered once. */
56
+ readonly key: string;
57
+ readonly title?: I18nText;
58
+ /**
59
+ * How each of `targetIds` looks to `userId`, leaving out the ones they may not see. Database reads on `conn` only: it
60
+ * is also read in the claim's transaction, for the "Linked work" section of each turn. Without it the owner may tie
61
+ * any id of the kind, and its links show no view.
62
+ */
63
+ resolve?(conn: DatabaseConnection, userId: string, targetIds: readonly string[]): Promise<ReadonlyMap<string, ConversationLinkView>>;
64
+ }
65
+ /** A record of a registered kind. */
66
+ export interface ConversationLinkTarget {
67
+ readonly kind: string;
68
+ readonly targetId: string;
69
+ }
70
+ /** What conversations are tied to. A target is tied to a conversation once. */
71
+ export interface ConversationLinks {
72
+ /** Returns what removes the kind. Links of a kind that is not registered stay stored but are not listed. */
73
+ registerKind(kind: ConversationLinkKind): () => void;
74
+ hasKind(key: string): boolean;
75
+ /** The conversation's links, oldest first, as its owner sees them. */
76
+ list(userId: string, conversationId: string): Promise<ConversationLink[]>;
77
+ /** The owner ties a target they may see; tying one again answers the existing link. */
78
+ add(userId: string, conversationId: string, target: ConversationLinkTarget): Promise<ConversationLink>;
79
+ /** 404 for a link the conversation does not have. */
80
+ remove(userId: string, conversationId: string, linkId: string): Promise<void>;
81
+ /**
82
+ * Trusted: ties a target without asking its kind whether anyone may see it, such as what the agent of a run on the
83
+ * conversation created (`ConversationService.ofRunId`). In `outer`'s transaction when given. False when the
84
+ * conversation is gone or already had the link.
85
+ */
86
+ attach(conversationId: string, target: ConversationLinkTarget, options?: {
87
+ readonly origin?: 'agent' | 'application';
88
+ readonly outer?: Tx;
89
+ }): Promise<boolean>;
90
+ /**
91
+ * Trusted: every conversation tied to the target, whoever owns it, such as to deliver news to each
92
+ * (`ConversationService.deliver`). A person reads their own with `list` and `linkKind`, `linkTargetId`.
93
+ */
94
+ linkedTo(conn: DatabaseConnection, target: ConversationLinkTarget): Promise<readonly ConversationRef[]>;
95
+ }
48
96
  /** A place a conversation may be started from besides the panel (`StartConversationRequest.source`). */
49
97
  export interface ConversationSourceKind {
50
98
  /** `CONVERSATION_SOURCE_PATTERN`, not `panel`. */
@@ -63,6 +111,11 @@ export interface ConversationNews {
63
111
  readonly notice: ConversationNotice;
64
112
  /** Handed to the agent as run input on the conversation's key, when the agent may still be woken. */
65
113
  readonly input?: NewInput;
114
+ /**
115
+ * A Runner OnlineAgent conversation hands `input` to its agent only when this is true: as a new run, or into the one
116
+ * that works on it now. Its owner sees that run's replies in the conversation like any other.
117
+ */
118
+ readonly wake?: boolean;
66
119
  }
67
120
  /** Which messages to read: the newest `limit`, those before a `seq` (older), or those after one (newer). */
68
121
  export interface MessageReadOptions {
@@ -92,15 +145,54 @@ export interface ConversationService {
92
145
  expectedConfig: OnlineAgentConfig;
93
146
  workContext?: ResolvedPageContext;
94
147
  business?: OnlineAgentJson;
148
+ /** Join the run already answering: the runner steers it into the turn or takes it as the next one. */
149
+ queue?: boolean;
95
150
  }): Promise<{
96
151
  readonly seq: number;
97
152
  readonly run: SendMessageResult['run'];
98
153
  }>;
154
+ /**
155
+ * Takes back a message queued while the agent worked (`queue`), while its runner has not taken it: it stays in the
156
+ * history, marked withdrawn, and the agent never sees it.
157
+ */
158
+ withdraw(userId: string, id: string, messageId: string): Promise<void>;
99
159
  /** A new conversation and its first message (`StartConversationRequest`): the application pages' buttons. */
100
160
  start(userId: string, request: StartConversationRequest): Promise<SendMessageResult>;
101
161
  markRead(userId: string, id: string): Promise<ConversationDetail>;
162
+ /**
163
+ * The owner saw the conversation up to message `seq`: a reply or failure waiting for them up to there is settled; a
164
+ * question (`confirm`) waits until they write.
165
+ */
166
+ markSeen(userId: string, id: string, seq: number): Promise<ConversationDetail>;
167
+ /** How many of the owner's open conversations are unread, and how many need them. */
168
+ attention(userId: string): Promise<ConversationAttentionCounts>;
169
+ /** What the conversation's runs used (`ConversationUsage`); owner only. */
170
+ usage(userId: string, id: string): Promise<ConversationUsage>;
171
+ /**
172
+ * The application told the owner of the conversation up to `seq` (a reminder, a push), so it tells them once; the
173
+ * highest one is kept.
174
+ */
175
+ markNoticed(conversationId: string, seq: number): Promise<void>;
176
+ /**
177
+ * Unbinds the conversation from its runner: the next run goes to whichever runner takes it first, which binds it,
178
+ * starting a fresh session with the conversation's history. The old directory is left to the runner's cleanup.
179
+ */
180
+ switchRunner(userId: string, id: string): Promise<ConversationDetail>;
181
+ /** Changes the agent of an idle Runner conversation, preserving history and links; its next message starts a fresh session. */
182
+ switchAgent(userId: string, id: string, agentId: string): Promise<ConversationDetail>;
102
183
  /** Cancels the conversation's open runs: a queued one at once, a working one is asked to stop. */
103
184
  stop(userId: string, id: string): Promise<ConversationDetail>;
185
+ /**
186
+ * Deletes the owner's conversation for good: its open runs are cancelled, its messages, files, links and kept
187
+ * sessions go, its inbox notices are settled, and runners remove its working directories and session files on
188
+ * their next report.
189
+ */
190
+ delete(userId: string, id: string): Promise<void>;
191
+ /**
192
+ * Deletes conversations archived more than `days` days before `now`, as `delete` does, in batches; answers how many
193
+ * it deleted.
194
+ */
195
+ purgeArchived(days: number, now?: Date): Promise<number>;
104
196
  /** Moves the conversation to the system default agent until `restore`; a new session. */
105
197
  fallback(userId: string, id: string): Promise<ConversationDetail>;
106
198
  /** Moves the conversation back to its own agent; a new session. */
@@ -110,6 +202,17 @@ export interface ConversationService {
110
202
  * `CONVERSATION_CONFLICT` `titleLocked` once the owner renamed it. For the CLI command `conversation title set`.
111
203
  */
112
204
  setTitleFromRun(run: Pick<Run, 'subject' | 'actorUserId'>, title: string): Promise<ConversationDetail>;
205
+ /**
206
+ * The agent of a run on the conversation asks its owner something (`confirm`), which waits for them until they write.
207
+ * For the CLI command `conversation ask-owner`.
208
+ */
209
+ askOwnerFromRun(run: Pick<Run, 'subject' | 'actorUserId'>, question: string, issue?: string): Promise<ConversationDetail>;
210
+ /** Settles only a question about this issue asked before its recorded resumption. */
211
+ settleOwnerQuestion(id: string, issue: string, resumedAt: string): Promise<boolean>;
212
+ /** `homeOf` for a stored run, by id: the conversation what the run did goes back to, or null. */
213
+ ofRunId(runId: string): Promise<ConversationRef | null>;
214
+ /** Where the application registers what conversations may be tied to, and ties them. */
215
+ readonly links: ConversationLinks;
113
216
  /** The conversation a run works on, when it is one and the run acts for its owner; null otherwise. */
114
217
  ofRun(conn: DatabaseConnection, run: Pick<Run, 'subject' | 'actorUserId'>): Promise<ConversationRef | null>;
115
218
  /**
@@ -122,8 +225,9 @@ export interface ConversationService {
122
225
  /**
123
226
  * In the caller's transaction: writes `news.notice` to the conversation and hands `news.input` to its agent (a new
124
227
  * run, or the open one), as a message would. Answers the run, or null when the agent was not woken (no input, or
125
- * the agent can no longer be woken) or the conversation is gone. Native and Runner OnlineAgent bindings save
126
- * the notice but ignore input for wake-up and return null; null can therefore mean a notice was saved.
228
+ * the agent can no longer be woken) or the conversation is gone. Native bindings save the notice but ignore input
229
+ * for wake-up and return null, as Runner OnlineAgent bindings do unless `news.wake`; null can therefore mean a notice
230
+ * was saved.
127
231
  */
128
232
  deliver(outer: Tx, conversationId: string, news: ConversationNews): Promise<SendMessageResult['run']>;
129
233
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../../../server/core/conversations/ports.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../../../server/core/conversations/ports.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"claim.d.ts","sourceRoot":"","sources":["../../../../server/core/runs/claim.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claim.d.ts","sourceRoot":"","sources":["../../../../server/core/runs/claim.ts"],"names":[],"mappings":"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"}
@@ -240,7 +240,11 @@ function directoryKeyOf(runnerId, dirs) {
240
240
  async function settleClaimInputs(conn, pending, effective, now) {
241
241
  const ids = new Set(effective.map((input) => input.id));
242
242
  await dropInputs(conn, pending.filter((input) => !ids.has(input.id)).map((input) => input.id), now);
243
- await markDelivered(conn, pending.filter((input) => ids.has(input.id)), now);
243
+ const given = pending.filter((input) => ids.has(input.id));
244
+ const delivered = await markDelivered(conn, given, now);
245
+ // One was withdrawn while the claim assembled it: claim the run again, without it.
246
+ if (delivered.length !== given.length)
247
+ throw new NotForThisRunner();
244
248
  }
245
249
  export function createClaimService(deps) {
246
250
  const { tx, clock } = deps;
@@ -595,7 +599,7 @@ export function createClaimService(deps) {
595
599
  cli: deps.cli.name,
596
600
  appName: deps.app.name,
597
601
  };
598
- const assembly = await binding.context.assemble(conn, claim, prepared.get('subject'));
602
+ let assembly = await binding.context.assemble(conn, claim, prepared.get('subject'));
599
603
  // workspace.key is required for coordinating runs; old runners must not silently ignore it.
600
604
  if ((await assemblyCompatibility(conn, toRun(run), agent, runner, assembly, resources)) === 'incompatible')
601
605
  throw new NotForThisRunner();
@@ -662,13 +666,33 @@ export function createClaimService(deps) {
662
666
  filter: { runId: run.id },
663
667
  sort: (sort) => sort.field('seq').desc(),
664
668
  });
665
- const brief = briefOf(agent, await withSections(conn, deps.sections, effectiveClaim, assembly, prepared), skills, deps.cli.name, deps.app.name);
669
+ const render = async () => briefOf(agent, await withSections(conn, deps.sections, effectiveClaim, assembly, prepared), skills, deps.cli.name, deps.app.name);
670
+ let brief = await render();
666
671
  const briefFingerprint = fingerprint(agent, entry, brief.layers, skills);
667
672
  const resume = !run.freshSession &&
668
673
  !clean &&
669
674
  session &&
670
675
  !session.poisoned &&
671
676
  session.fingerprint === briefFingerprint;
677
+ // A kept session that cannot be resumed: the new one is told what came before, as a first one is. The history
678
+ // is outside the fingerprint, so it does not change.
679
+ let recoveryContext;
680
+ if (session) {
681
+ const fresh = await binding.context.assemble(conn, { ...claim, freshSession: true }, prepared.get('subject'));
682
+ if (resume) {
683
+ // Should the kept session be gone on the runner, the new one hears what came before from this.
684
+ const kept = assembly;
685
+ assembly = fresh;
686
+ const context = (await render()).layers.context;
687
+ assembly = kept;
688
+ if (context.trim() && context !== brief.layers.context)
689
+ recoveryContext = context;
690
+ }
691
+ else {
692
+ assembly = fresh;
693
+ brief = await render();
694
+ }
695
+ }
672
696
  // Mounts only for a runner that places them; their hashes stay out of the fingerprint, and a resumed session
673
697
  // hears what changed in them in its turn instead.
674
698
  const { mounts, resumeNotes } = runner.features.includes('mounts')
@@ -731,6 +755,7 @@ export function createClaimService(deps) {
731
755
  turn,
732
756
  session: resume ? 'resume' : 'fresh',
733
757
  ...(resume ? { resumeSessionId: session.sessionId } : {}),
758
+ ...(resume && recoveryContext ? { recoveryContext } : {}),
734
759
  },
735
760
  inputs,
736
761
  workspace: {
@@ -985,6 +1010,14 @@ export function createClaimService(deps) {
985
1010
  });
986
1011
  return false;
987
1012
  }
1013
+ /** Whether `runner` may take the run as its subject binds work to runners. */
1014
+ async function pinnedTo(conn, run, runner) {
1015
+ const pin = deps.subjects.get(run.subjectKind)?.runnerPin;
1016
+ if (!pin)
1017
+ return true;
1018
+ const pinned = await pin.runnerOf(conn, toRun(run));
1019
+ return pinned === null || pinned === runner.id;
1020
+ }
988
1021
  async function attempt(runner, agent, candidate, reported) {
989
1022
  const conn = tx.read();
990
1023
  // Rules that do not depend on who the run acts as come first, and settle the rest of the pass: an agent at its
@@ -1054,6 +1087,8 @@ export function createClaimService(deps) {
1054
1087
  const queuedRun = await findRunRecord(conn, candidate.id);
1055
1088
  if (!queuedRun || queuedRun.status !== 'queued')
1056
1089
  return null;
1090
+ if (!(await pinnedTo(conn, queuedRun, runner)))
1091
+ return null;
1057
1092
  const identity = await refreshQueuedIdentity(unit, deps, queuedRun);
1058
1093
  // Providers were prepared for the candidate's identity outside this transaction.
1059
1094
  if (!identity || identity.actorUserId !== candidate.actorUserId)
@@ -1132,6 +1167,9 @@ export function createClaimService(deps) {
1132
1167
  throw error;
1133
1168
  throw new AssemblyError(error instanceof Error ? error.message : String(error), error);
1134
1169
  }
1170
+ const pin = deps.subjects.get(run.subjectKind)?.runnerPin;
1171
+ if (pin && !(await pin.pin(unit, toRun(run), runner)))
1172
+ throw new NotForThisRunner();
1135
1173
  await settleClaimInputs(conn, pending, assembled.payload.inputs, nowText);
1136
1174
  await runsRepo(conn).updateMany({
1137
1175
  filter: { id: run.id },
@@ -1462,8 +1500,14 @@ export function createClaimService(deps) {
1462
1500
  const reserved = upgradeReservation(toExecutions(candidate.executionHistory), affinity.machines, clock.now().getTime());
1463
1501
  if (reserved && reserved !== runner.id)
1464
1502
  continue;
1503
+ // Work bound to another runner waits for it; work bound here takes no other preference.
1504
+ const pin = deps.subjects.get(candidate.subjectKind)?.runnerPin;
1505
+ const pinned = pin ? await pin.runnerOf(conn, toRun(candidate)) : null;
1506
+ if (pinned !== null && pinned !== runner.id)
1507
+ continue;
1465
1508
  const preferred = affinity.preferred.get(candidate.id);
1466
1509
  if (!reserved &&
1510
+ pinned === null &&
1467
1511
  preferred &&
1468
1512
  preferred.id !== runner.id &&
1469
1513
  (await readyPreference(candidate, agent, affinity, runner, metadata, inventory)))