memeloop 0.0.1 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/README.md +63 -0
  2. package/dist/browser.cjs +1413 -0
  3. package/dist/browser.cjs.map +1 -0
  4. package/dist/browser.d.cts +3066 -0
  5. package/dist/browser.d.ts +3066 -0
  6. package/dist/browser.js +43 -0
  7. package/dist/chunk-2C6BJZI3.js +382 -0
  8. package/dist/chunk-2C6BJZI3.js.map +1 -0
  9. package/dist/chunk-426CJUZP.js +630 -0
  10. package/dist/chunk-426CJUZP.js.map +1 -0
  11. package/dist/chunk-7ZDTB4VZ.js +63 -0
  12. package/dist/chunk-7ZDTB4VZ.js.map +1 -0
  13. package/dist/chunk-AZFYDWIN.js +98 -0
  14. package/dist/chunk-AZFYDWIN.js.map +1 -0
  15. package/dist/chunk-BGPU4RR7.js +367 -0
  16. package/dist/chunk-BGPU4RR7.js.map +1 -0
  17. package/dist/chunk-CCEFAOSH.js +496 -0
  18. package/dist/chunk-CCEFAOSH.js.map +1 -0
  19. package/dist/chunk-FWSY5HOA.js +63 -0
  20. package/dist/chunk-FWSY5HOA.js.map +1 -0
  21. package/dist/chunk-GYIOMQMY.js +8726 -0
  22. package/dist/chunk-GYIOMQMY.js.map +1 -0
  23. package/dist/chunk-K6P63KD4.js +68 -0
  24. package/dist/chunk-K6P63KD4.js.map +1 -0
  25. package/dist/chunk-KFS2EJT6.js +42 -0
  26. package/dist/chunk-KFS2EJT6.js.map +1 -0
  27. package/dist/chunk-MAJWHAKR.js +3637 -0
  28. package/dist/chunk-MAJWHAKR.js.map +1 -0
  29. package/dist/chunk-MRKY4HGF.js +205 -0
  30. package/dist/chunk-MRKY4HGF.js.map +1 -0
  31. package/dist/chunk-T7FSXWFR.js +2744 -0
  32. package/dist/chunk-T7FSXWFR.js.map +1 -0
  33. package/dist/chunk-VZKQX5PP.js +1 -0
  34. package/dist/chunk-VZKQX5PP.js.map +1 -0
  35. package/dist/chunk-WAI6BODI.js +175 -0
  36. package/dist/chunk-WAI6BODI.js.map +1 -0
  37. package/dist/chunk-YMNXDNDW.js +798 -0
  38. package/dist/chunk-YMNXDNDW.js.map +1 -0
  39. package/dist/conversation.cjs +208 -0
  40. package/dist/conversation.cjs.map +1 -0
  41. package/dist/conversation.d.cts +100 -0
  42. package/dist/conversation.d.ts +100 -0
  43. package/dist/conversation.js +21 -0
  44. package/dist/conversation.js.map +1 -0
  45. package/dist/device-network-portable.cjs +702 -0
  46. package/dist/device-network-portable.cjs.map +1 -0
  47. package/dist/device-network-portable.d.cts +110 -0
  48. package/dist/device-network-portable.d.ts +110 -0
  49. package/dist/device-network-portable.js +53 -0
  50. package/dist/device-network-portable.js.map +1 -0
  51. package/dist/device-network.cjs +906 -0
  52. package/dist/device-network.cjs.map +1 -0
  53. package/dist/device-network.d.cts +6 -0
  54. package/dist/device-network.d.ts +6 -0
  55. package/dist/device-network.js +59 -0
  56. package/dist/device-network.js.map +1 -0
  57. package/dist/fetchProvider-WWnWnQFP.d.ts +91 -0
  58. package/dist/fetchProvider-toTHy5Nu.d.cts +91 -0
  59. package/dist/index.cjs +28051 -5459
  60. package/dist/index.cjs.map +1 -1
  61. package/dist/index.d.cts +94 -1320
  62. package/dist/index.d.ts +94 -1320
  63. package/dist/index.js +10616 -2420
  64. package/dist/index.js.map +1 -1
  65. package/dist/interface-IrKBFtL1.d.cts +493 -0
  66. package/dist/interface-IrKBFtL1.d.ts +493 -0
  67. package/dist/llm-providers.cjs +43 -8
  68. package/dist/llm-providers.cjs.map +1 -1
  69. package/dist/llm-providers.d.cts +2 -1
  70. package/dist/llm-providers.d.ts +2 -1
  71. package/dist/llm-providers.js +4 -2
  72. package/dist/llm-providers.js.map +1 -1
  73. package/dist/loop-api.cjs +5227 -2010
  74. package/dist/loop-api.cjs.map +1 -1
  75. package/dist/loop-api.d.cts +11 -5
  76. package/dist/loop-api.d.ts +11 -5
  77. package/dist/loop-api.js +86 -49
  78. package/dist/mobile.cjs +2711 -0
  79. package/dist/mobile.cjs.map +1 -0
  80. package/dist/mobile.d.cts +6 -0
  81. package/dist/mobile.d.ts +6 -0
  82. package/dist/mobile.js +22 -0
  83. package/dist/mobile.js.map +1 -0
  84. package/dist/orchestration-portable-BHB_YrNN.d.ts +2192 -0
  85. package/dist/orchestration-portable-mvYBvGBb.d.cts +2192 -0
  86. package/dist/orchestration-portable.cjs +9553 -0
  87. package/dist/orchestration-portable.cjs.map +1 -0
  88. package/dist/orchestration-portable.d.cts +5 -0
  89. package/dist/orchestration-portable.d.ts +5 -0
  90. package/dist/orchestration-portable.js +290 -0
  91. package/dist/orchestration-portable.js.map +1 -0
  92. package/dist/pairingInvite-BXPWY3aM.d.cts +149 -0
  93. package/dist/pairingInvite-Cuz0wuq9.d.ts +149 -0
  94. package/dist/promptConcat-0WNFTg4l.d.ts +516 -0
  95. package/dist/promptConcat-D6wr5V-V.d.cts +516 -0
  96. package/dist/providerRegistry-Bi6pAvSj.d.ts +86 -0
  97. package/dist/providerRegistry-CPsktuiX.d.cts +86 -0
  98. package/dist/registry-D0kbxksn.d.cts +393 -0
  99. package/dist/registry-DDbvhlhs.d.ts +393 -0
  100. package/dist/remoteClient-B_spK019.d.ts +87 -0
  101. package/dist/remoteClient-CBggnRy3.d.cts +87 -0
  102. package/dist/runtime-PGWR6FIV.js +18 -0
  103. package/dist/runtime-PGWR6FIV.js.map +1 -0
  104. package/dist/scriptDeploymentPipeline-CXJcC82H.d.ts +2464 -0
  105. package/dist/scriptDeploymentPipeline-yG1ZhVVI.d.cts +2464 -0
  106. package/dist/syncCloudDevices-BEqwgrhD.d.ts +49 -0
  107. package/dist/syncCloudDevices-Ds_Kcgrv.d.cts +49 -0
  108. package/dist/types-7pYti-k9.d.cts +255 -0
  109. package/dist/types-CdFVSntj.d.ts +255 -0
  110. package/package.json +110 -35
  111. package/dist/anthropic.cjs +0 -72
  112. package/dist/anthropic.cjs.map +0 -1
  113. package/dist/anthropic.d.cts +0 -21
  114. package/dist/anthropic.d.ts +0 -21
  115. package/dist/anthropic.js +0 -21
  116. package/dist/anthropic.js.map +0 -1
  117. package/dist/azure.cjs +0 -72
  118. package/dist/azure.cjs.map +0 -1
  119. package/dist/azure.d.cts +0 -21
  120. package/dist/azure.d.ts +0 -21
  121. package/dist/azure.js +0 -21
  122. package/dist/azure.js.map +0 -1
  123. package/dist/chunk-3CN7DFBL.js +0 -4894
  124. package/dist/chunk-3CN7DFBL.js.map +0 -1
  125. package/dist/chunk-4AZ4D7U5.js +0 -32
  126. package/dist/chunk-4AZ4D7U5.js.map +0 -1
  127. package/dist/chunk-6ON4XSOV.js +0 -63
  128. package/dist/chunk-6ON4XSOV.js.map +0 -1
  129. package/dist/chunk-DJQNGIXX.js +0 -4793
  130. package/dist/chunk-DJQNGIXX.js.map +0 -1
  131. package/dist/chunk-FKQP6AOQ.js +0 -32
  132. package/dist/chunk-FKQP6AOQ.js.map +0 -1
  133. package/dist/chunk-OVJ7JJBA.js +0 -35
  134. package/dist/chunk-OVJ7JJBA.js.map +0 -1
  135. package/dist/chunk-P4UZ7IXC.js +0 -42
  136. package/dist/chunk-YHJ2AEFR.js +0 -4933
  137. package/dist/chunk-YHJ2AEFR.js.map +0 -1
  138. package/dist/chunk-YVK7RYRO.js +0 -4973
  139. package/dist/chunk-YVK7RYRO.js.map +0 -1
  140. package/dist/code-assistant.json +0 -114
  141. package/dist/cohere.cjs +0 -72
  142. package/dist/cohere.cjs.map +0 -1
  143. package/dist/cohere.d.cts +0 -21
  144. package/dist/cohere.d.ts +0 -21
  145. package/dist/cohere.js +0 -21
  146. package/dist/cohere.js.map +0 -1
  147. package/dist/deepseek.cjs +0 -72
  148. package/dist/deepseek.cjs.map +0 -1
  149. package/dist/deepseek.d.cts +0 -21
  150. package/dist/deepseek.d.ts +0 -21
  151. package/dist/deepseek.js +0 -21
  152. package/dist/deepseek.js.map +0 -1
  153. package/dist/dist-65U7OYRG.js +0 -1257
  154. package/dist/dist-65U7OYRG.js.map +0 -1
  155. package/dist/fetchProvider-Cu4WkU5O.d.cts +0 -819
  156. package/dist/fetchProvider-Cu4WkU5O.d.ts +0 -819
  157. package/dist/frontend-ui-ux.json +0 -105
  158. package/dist/general-assistant.json +0 -95
  159. package/dist/git-master.json +0 -51
  160. package/dist/google-vertex.cjs +0 -72
  161. package/dist/google-vertex.cjs.map +0 -1
  162. package/dist/google-vertex.d.cts +0 -21
  163. package/dist/google-vertex.d.ts +0 -21
  164. package/dist/google-vertex.js +0 -21
  165. package/dist/google-vertex.js.map +0 -1
  166. package/dist/google.cjs +0 -72
  167. package/dist/google.cjs.map +0 -1
  168. package/dist/google.d.cts +0 -21
  169. package/dist/google.d.ts +0 -21
  170. package/dist/google.js +0 -21
  171. package/dist/google.js.map +0 -1
  172. package/dist/groq.cjs +0 -72
  173. package/dist/groq.cjs.map +0 -1
  174. package/dist/groq.d.cts +0 -21
  175. package/dist/groq.d.ts +0 -21
  176. package/dist/groq.js +0 -21
  177. package/dist/groq.js.map +0 -1
  178. package/dist/index.d.mts +0 -3203
  179. package/dist/index.mjs +0 -7064
  180. package/dist/index.mjs.map +0 -1
  181. package/dist/mistral.cjs +0 -72
  182. package/dist/mistral.cjs.map +0 -1
  183. package/dist/mistral.d.cts +0 -21
  184. package/dist/mistral.d.ts +0 -21
  185. package/dist/mistral.js +0 -21
  186. package/dist/mistral.js.map +0 -1
  187. package/dist/multipart-parser-EJCXIUHC.js +0 -372
  188. package/dist/multipart-parser-EJCXIUHC.js.map +0 -1
  189. package/dist/openai.cjs +0 -72
  190. package/dist/openai.cjs.map +0 -1
  191. package/dist/openai.d.cts +0 -21
  192. package/dist/openai.d.ts +0 -21
  193. package/dist/openai.js +0 -21
  194. package/dist/openai.js.map +0 -1
  195. package/dist/perplexity.cjs +0 -72
  196. package/dist/perplexity.cjs.map +0 -1
  197. package/dist/perplexity.d.cts +0 -21
  198. package/dist/perplexity.d.ts +0 -21
  199. package/dist/perplexity.js +0 -21
  200. package/dist/perplexity.js.map +0 -1
  201. package/dist/playwright.json +0 -52
  202. package/dist/promptConcat-BJdazTg5.d.cts +0 -1832
  203. package/dist/promptConcat-BJdazTg5.d.ts +0 -1832
  204. package/dist/promptConcat-CAkpni_8.d.cts +0 -1834
  205. package/dist/promptConcat-CAkpni_8.d.ts +0 -1834
  206. package/dist/promptConcat-CfH5-GAE.d.cts +0 -1036
  207. package/dist/promptConcat-ChcAZOOL.d.ts +0 -1036
  208. package/dist/promptConcat-G5TnJVRy.d.cts +0 -1800
  209. package/dist/promptConcat-G5TnJVRy.d.ts +0 -1800
  210. package/dist/promptConcat-L72eowzp.d.ts +0 -1090
  211. package/dist/promptConcat-eLHdN7K8.d.cts +0 -1090
  212. package/dist/src-VTSXKG72.js +0 -1409
  213. package/dist/src-VTSXKG72.js.map +0 -1
  214. package/dist/togetherai.cjs +0 -72
  215. package/dist/togetherai.cjs.map +0 -1
  216. package/dist/togetherai.d.cts +0 -21
  217. package/dist/togetherai.d.ts +0 -21
  218. package/dist/togetherai.js +0 -21
  219. package/dist/togetherai.js.map +0 -1
  220. package/dist/types-B0Jm2l38.d.cts +0 -767
  221. package/dist/types-B0Jm2l38.d.ts +0 -767
  222. package/dist/xai.cjs +0 -72
  223. package/dist/xai.cjs.map +0 -1
  224. package/dist/xai.d.cts +0 -21
  225. package/dist/xai.d.ts +0 -21
  226. package/dist/xai.js +0 -21
  227. package/dist/xai.js.map +0 -1
  228. /package/dist/{chunk-P4UZ7IXC.js.map → browser.js.map} +0 -0
@@ -0,0 +1,175 @@
1
+ // src/conversation/parts.ts
2
+ function tryParseJson(value) {
3
+ try {
4
+ return JSON.parse(value);
5
+ } catch {
6
+ return void 0;
7
+ }
8
+ }
9
+ function parseLegacyToolResultContent(content) {
10
+ const match = /(?:<functions_result>\s*)?Tool:\s*(.+?)\nParameters:\s*(.+?)\n(Error|Result):\s*([\s\S]*?)\s*(?:<\/functions_result>|$)/su.exec(content.trim());
11
+ if (!match) return null;
12
+ const [, rawToolName, rawParameters, kind, rawBody] = match;
13
+ const parsedParameters = tryParseJson(rawParameters.trim());
14
+ const result = rawBody.trim();
15
+ return {
16
+ type: "tool-result",
17
+ toolName: rawToolName.trim(),
18
+ parameters: parsedParameters,
19
+ result,
20
+ isError: kind === "Error",
21
+ payload: tryParseJson(result)
22
+ };
23
+ }
24
+ function isTextPart(part) {
25
+ return part.type === "text";
26
+ }
27
+ function isReasoningPart(part) {
28
+ return part.type === "reasoning";
29
+ }
30
+ function isToolCallPart(part) {
31
+ return part.type === "tool-call";
32
+ }
33
+ function isAttachmentPart(part) {
34
+ return part.type === "attachment";
35
+ }
36
+ function isToolResultPart(part) {
37
+ return part.type === "tool-result";
38
+ }
39
+ function buildToolResultSummary(part) {
40
+ const prefix = part.isError ? "Error" : "Result";
41
+ const suffix = part.result.trim();
42
+ if (suffix.length === 0) return `${prefix} from ${part.toolName}`;
43
+ return `${prefix} from ${part.toolName}: ${suffix}`;
44
+ }
45
+ function projectChatMessageParts(parts) {
46
+ const text = parts.filter(isTextPart).map((part) => part.text.trim()).filter(Boolean);
47
+ const reasoning = parts.filter(isReasoningPart).map((part) => part.text.trim()).filter(Boolean);
48
+ const toolCalls = parts.filter(isToolCallPart).map((part) => ({ id: part.toolCallId, toolName: part.toolName, arguments: part.arguments }));
49
+ const attachments = parts.filter(isAttachmentPart).map((part) => part.attachment);
50
+ const toolResults = parts.filter(isToolResultPart);
51
+ let content = text.join("\n\n");
52
+ if (content.length === 0 && toolResults.length > 0) {
53
+ content = toolResults.map(buildToolResultSummary).join("\n\n");
54
+ }
55
+ if (content.length === 0 && toolCalls.length > 0) {
56
+ content = toolCalls.map((part) => `Tool call: ${part.toolName}`).join("\n\n");
57
+ }
58
+ return {
59
+ content,
60
+ reasoning_content: reasoning.length > 0 ? reasoning.join("\n\n") : void 0,
61
+ toolCalls: toolCalls.length > 0 ? toolCalls : void 0,
62
+ attachments: attachments.length > 0 ? attachments : void 0
63
+ };
64
+ }
65
+ function buildLegacyChatMessageParts(input) {
66
+ const parts = [];
67
+ if (input.role !== "tool" && typeof input.content === "string" && input.content.trim().length > 0) {
68
+ parts.push({ type: "text", text: input.content });
69
+ }
70
+ if (typeof input.reasoning_content === "string" && input.reasoning_content.trim().length > 0) {
71
+ parts.push({ type: "reasoning", text: input.reasoning_content });
72
+ }
73
+ if (input.toolCalls) {
74
+ for (const toolCall of input.toolCalls) {
75
+ parts.push({
76
+ type: "tool-call",
77
+ toolCallId: toolCall.id,
78
+ toolName: toolCall.toolName,
79
+ arguments: toolCall.arguments
80
+ });
81
+ }
82
+ }
83
+ if (input.attachments) {
84
+ for (const attachment of input.attachments) {
85
+ parts.push({ type: "attachment", attachment });
86
+ }
87
+ }
88
+ if (input.role === "tool") {
89
+ const metadata = input.metadata ?? {};
90
+ const parsed = typeof input.content === "string" ? parseLegacyToolResultContent(input.content) : null;
91
+ const toolName = typeof metadata.toolId === "string" && metadata.toolId.length > 0 ? metadata.toolId : parsed?.toolName ?? "tool";
92
+ const result = parsed?.result ?? (typeof input.content === "string" ? input.content : "");
93
+ const payload = parsed?.payload ?? tryParseJson(result);
94
+ parts.push({
95
+ type: "tool-result",
96
+ toolName,
97
+ parameters: metadata.toolParameters ?? parsed?.parameters,
98
+ result,
99
+ isError: metadata.isError === true || parsed?.isError === true,
100
+ payload,
101
+ detailRef: input.detailRef
102
+ });
103
+ }
104
+ return parts;
105
+ }
106
+ function getChatMessageParts(message) {
107
+ return message.parts ?? buildLegacyChatMessageParts(message);
108
+ }
109
+
110
+ // src/conversation/factory.ts
111
+ function createChatMessage(input) {
112
+ const now = Date.now();
113
+ const parts = input.parts ?? buildLegacyChatMessageParts({
114
+ role: input.role,
115
+ content: input.content,
116
+ reasoning_content: input.reasoning_content,
117
+ toolCalls: input.toolCalls,
118
+ attachments: input.attachments,
119
+ detailRef: input.detailRef,
120
+ metadata: input.metadata
121
+ });
122
+ const projection = projectChatMessageParts(parts);
123
+ return {
124
+ messageId: input.messageId,
125
+ conversationId: input.conversationId,
126
+ originNodeId: input.originNodeId ?? "unknown",
127
+ timestamp: now,
128
+ lamportClock: input.lamportClock ?? now,
129
+ role: input.role,
130
+ parts: parts.length > 0 ? parts : void 0,
131
+ content: input.content ?? projection.content,
132
+ contentType: input.contentType ?? "text/plain",
133
+ metadata: input.metadata,
134
+ duration: input.duration,
135
+ toolCalls: input.toolCalls ?? projection.toolCalls,
136
+ reasoning_content: input.reasoning_content ?? projection.reasoning_content,
137
+ hidden: input.hidden,
138
+ attachments: input.attachments ?? projection.attachments,
139
+ detailRef: input.detailRef
140
+ };
141
+ }
142
+ var DEFAULT_INSTANCE_STATUS = {
143
+ state: "completed",
144
+ modified: /* @__PURE__ */ new Date()
145
+ };
146
+ function createAgentInstanceFromDefinition(definition, overrides) {
147
+ const now = /* @__PURE__ */ new Date();
148
+ return {
149
+ ...definition,
150
+ id: overrides.id,
151
+ agentDefId: definition.id,
152
+ name: overrides.name ?? definition.name,
153
+ status: overrides.status ?? DEFAULT_INSTANCE_STATUS,
154
+ messages: [],
155
+ created: now,
156
+ modified: now,
157
+ closed: overrides.closed ?? false,
158
+ volatile: overrides.volatile ?? false,
159
+ isDelegatedAgentRun: overrides.isDelegatedAgentRun,
160
+ parentAgentRunId: overrides.parentAgentRunId,
161
+ agentFrameworkConfig: overrides.agentFrameworkConfig
162
+ };
163
+ }
164
+
165
+ export {
166
+ parseLegacyToolResultContent,
167
+ isToolResultPart,
168
+ buildToolResultSummary,
169
+ projectChatMessageParts,
170
+ buildLegacyChatMessageParts,
171
+ getChatMessageParts,
172
+ createChatMessage,
173
+ createAgentInstanceFromDefinition
174
+ };
175
+ //# sourceMappingURL=chunk-WAI6BODI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/conversation/parts.ts","../src/conversation/factory.ts"],"sourcesContent":["import type { AttachmentReference, ChatAttachmentPart, ChatMessage, ChatMessagePart, ChatReasoningPart, ChatToolCallPart, ChatToolResultPart, ToolCall } from './types.js';\n\nexport interface ChatMessageProjection {\n content: string;\n reasoning_content?: string;\n toolCalls?: ToolCall[];\n attachments?: AttachmentReference[];\n}\n\nfunction tryParseJson(value: string): unknown {\n try {\n return JSON.parse(value);\n } catch {\n return undefined;\n }\n}\n\nexport function parseLegacyToolResultContent(content: string): ChatToolResultPart | null {\n const match = /(?:<functions_result>\\s*)?Tool:\\s*(.+?)\\nParameters:\\s*(.+?)\\n(Error|Result):\\s*([\\s\\S]*?)\\s*(?:<\\/functions_result>|$)/su.exec(content.trim());\n if (!match) return null;\n\n const [, rawToolName, rawParameters, kind, rawBody] = match;\n const parsedParameters = tryParseJson(rawParameters.trim());\n const result = rawBody.trim();\n return {\n type: 'tool-result',\n toolName: rawToolName.trim(),\n parameters: parsedParameters,\n result,\n isError: kind === 'Error',\n payload: tryParseJson(result),\n };\n}\n\nfunction isTextPart(part: ChatMessagePart): part is Extract<ChatMessagePart, { type: 'text' }> {\n return part.type === 'text';\n}\n\nfunction isReasoningPart(part: ChatMessagePart): part is ChatReasoningPart {\n return part.type === 'reasoning';\n}\n\nfunction isToolCallPart(part: ChatMessagePart): part is ChatToolCallPart {\n return part.type === 'tool-call';\n}\n\nfunction isAttachmentPart(part: ChatMessagePart): part is ChatAttachmentPart {\n return part.type === 'attachment';\n}\n\nexport function isToolResultPart(part: ChatMessagePart): part is ChatToolResultPart {\n return part.type === 'tool-result';\n}\n\nexport function buildToolResultSummary(part: ChatToolResultPart): string {\n const prefix = part.isError ? 'Error' : 'Result';\n const suffix = part.result.trim();\n if (suffix.length === 0) return `${prefix} from ${part.toolName}`;\n return `${prefix} from ${part.toolName}: ${suffix}`;\n}\n\nexport function projectChatMessageParts(parts: readonly ChatMessagePart[]): ChatMessageProjection {\n const text = parts.filter(isTextPart).map((part) => part.text.trim()).filter(Boolean);\n const reasoning = parts.filter(isReasoningPart).map((part) => part.text.trim()).filter(Boolean);\n const toolCalls = parts\n .filter(isToolCallPart)\n .map((part) => ({ id: part.toolCallId, toolName: part.toolName, arguments: part.arguments }));\n const attachments = parts.filter(isAttachmentPart).map((part) => part.attachment);\n const toolResults = parts.filter(isToolResultPart);\n\n let content = text.join('\\n\\n');\n if (content.length === 0 && toolResults.length > 0) {\n content = toolResults.map(buildToolResultSummary).join('\\n\\n');\n }\n if (content.length === 0 && toolCalls.length > 0) {\n content = toolCalls.map((part) => `Tool call: ${part.toolName}`).join('\\n\\n');\n }\n\n return {\n content,\n reasoning_content: reasoning.length > 0 ? reasoning.join('\\n\\n') : undefined,\n toolCalls: toolCalls.length > 0 ? toolCalls : undefined,\n attachments: attachments.length > 0 ? attachments : undefined,\n };\n}\n\nexport function buildLegacyChatMessageParts(input: {\n role: string;\n content?: string;\n reasoning_content?: string;\n toolCalls?: ToolCall[];\n attachments?: AttachmentReference[];\n detailRef?: ChatToolResultPart['detailRef'];\n metadata?: Record<string, unknown>;\n}): ChatMessagePart[] {\n const parts: ChatMessagePart[] = [];\n\n if (input.role !== 'tool' && typeof input.content === 'string' && input.content.trim().length > 0) {\n parts.push({ type: 'text', text: input.content });\n }\n\n if (typeof input.reasoning_content === 'string' && input.reasoning_content.trim().length > 0) {\n parts.push({ type: 'reasoning', text: input.reasoning_content });\n }\n\n if (input.toolCalls) {\n for (const toolCall of input.toolCalls) {\n parts.push({\n type: 'tool-call',\n toolCallId: toolCall.id,\n toolName: toolCall.toolName,\n arguments: toolCall.arguments,\n });\n }\n }\n\n if (input.attachments) {\n for (const attachment of input.attachments) {\n parts.push({ type: 'attachment', attachment });\n }\n }\n\n if (input.role === 'tool') {\n const metadata = input.metadata ?? {};\n const parsed = typeof input.content === 'string' ? parseLegacyToolResultContent(input.content) : null;\n const toolName = typeof metadata.toolId === 'string' && metadata.toolId.length > 0\n ? metadata.toolId\n : parsed?.toolName ?? 'tool';\n const result = parsed?.result ?? (typeof input.content === 'string' ? input.content : '');\n const payload = parsed?.payload ?? tryParseJson(result);\n parts.push({\n type: 'tool-result',\n toolName,\n parameters: metadata.toolParameters ?? parsed?.parameters,\n result,\n isError: metadata.isError === true || parsed?.isError === true,\n payload,\n detailRef: input.detailRef,\n });\n }\n\n return parts;\n}\n\nexport function getChatMessageParts(\n message: Pick<\n ChatMessage,\n 'role' | 'parts' | 'content' | 'reasoning_content' | 'toolCalls' | 'attachments' | 'detailRef' | 'metadata'\n >,\n): ChatMessagePart[] {\n return message.parts ?? buildLegacyChatMessageParts(message);\n}\n","/**\n * Domain factories for creating canonical ChatMessage and AgentInstance objects.\n *\n * These factories ensure that every host (Desktop, Mobile, CLI, Cloud)\n * constructs messages and instances with the same required fields,\n * default values, and clock behavior.\n *\n * Hosts that need a different originNodeId, message ID scheme, or lamport\n * clock source should pass those values explicitly rather than creating\n * their own factory.\n */\nimport type { AgentDefinition } from '../agent/types.js';\nimport type { AgentFrameworkConfig } from '../promptUtilities/types.js';\nimport type { AgentInstance, AgentInstanceLatestStatus } from '../types.js';\nimport { buildLegacyChatMessageParts, projectChatMessageParts } from './parts.js';\nimport type { ChatMessage, ChatRole } from './types.js';\n\n/**\n * Create a canonical ChatMessage with required defaults.\n *\n * @param input.messageId - Unique message identifier. Use nanoid or equivalent.\n * @param input.conversationId - The conversation/agent-instance this message belongs to.\n * @param input.role - Message role (user, assistant, tool, agent, error).\n * @param input.content - Message text content.\n * @param input.originNodeId - Node that originated this message. Core default is \"unknown\";\n * hosts should pass their own identifier (e.g. \"tidgi-desktop\", \"memeloop-cli\").\n * @param input.contentType - MIME type override (default \"text/plain\").\n * @param input.metadata - Optional metadata map.\n * @param input.duration - Processing duration in ms.\n * @param input.lamportClock - Lamport clock value. Defaults to `Date.now()`.\n * @param input.toolCalls - Tool calls associated with assistant messages.\n * @param input.reasoning_content - Reasoning/thinking content.\n * @param input.hidden - Whether the message is hidden from the UI.\n * @param input.detailRef - Reference to large tool output stored elsewhere.\n */\nexport function createChatMessage(input: {\n messageId: string;\n conversationId: string;\n role: ChatRole;\n content?: string;\n originNodeId?: string;\n contentType?: string;\n metadata?: Record<string, unknown>;\n duration?: number | null;\n lamportClock?: number;\n parts?: ChatMessage['parts'];\n toolCalls?: ChatMessage['toolCalls'];\n reasoning_content?: string;\n hidden?: boolean;\n attachments?: ChatMessage['attachments'];\n detailRef?: ChatMessage['detailRef'];\n}): ChatMessage {\n const now = Date.now();\n const parts = input.parts ?? buildLegacyChatMessageParts({\n role: input.role,\n content: input.content,\n reasoning_content: input.reasoning_content,\n toolCalls: input.toolCalls,\n attachments: input.attachments,\n detailRef: input.detailRef,\n metadata: input.metadata,\n });\n const projection = projectChatMessageParts(parts);\n return {\n messageId: input.messageId,\n conversationId: input.conversationId,\n originNodeId: input.originNodeId ?? 'unknown',\n timestamp: now,\n lamportClock: input.lamportClock ?? now,\n role: input.role,\n parts: parts.length > 0 ? parts : undefined,\n content: input.content ?? projection.content,\n contentType: input.contentType ?? 'text/plain',\n metadata: input.metadata,\n duration: input.duration,\n toolCalls: input.toolCalls ?? projection.toolCalls,\n reasoning_content: input.reasoning_content ?? projection.reasoning_content,\n hidden: input.hidden,\n attachments: input.attachments ?? projection.attachments,\n detailRef: input.detailRef,\n };\n}\n\n/**\n * Default status applied to newly created agent instances.\n */\nconst DEFAULT_INSTANCE_STATUS: AgentInstanceLatestStatus = {\n state: 'completed',\n modified: new Date(),\n};\n\n/**\n * Create an AgentInstance from an AgentDefinition.\n *\n * The returned instance has an empty message list, a default \"completed\"\n * status, and copies all definition-level fields as instance defaults.\n *\n * @param definition - The AgentDefinition to base the instance on.\n * @param overrides - Optional overrides for instance-specific fields:\n * - `id`: Instance ID (default: nanoid-equivalent, must be provided by host)\n * - `name`: Display name (default: definition.name)\n * - `status`: Initial status\n * - `volatile`: Whether the instance is ephemeral\n * - `closed`: Whether closed on creation\n * - `isDelegatedAgentRun`, `parentAgentRunId`: Delegated agent relationship\n * - `agentFrameworkConfig`: Per-instance framework config override\n */\nexport function createAgentInstanceFromDefinition(\n definition: AgentDefinition,\n overrides: {\n id: string;\n name?: string;\n status?: AgentInstanceLatestStatus;\n volatile?: boolean;\n closed?: boolean;\n isDelegatedAgentRun?: boolean;\n parentAgentRunId?: string;\n agentFrameworkConfig?: AgentFrameworkConfig;\n },\n): AgentInstance {\n const now = new Date();\n return {\n ...definition,\n id: overrides.id,\n agentDefId: definition.id,\n name: overrides.name ?? definition.name,\n status: overrides.status ?? DEFAULT_INSTANCE_STATUS,\n messages: [],\n created: now,\n modified: now,\n closed: overrides.closed ?? false,\n volatile: overrides.volatile ?? false,\n isDelegatedAgentRun: overrides.isDelegatedAgentRun,\n parentAgentRunId: overrides.parentAgentRunId,\n agentFrameworkConfig: overrides.agentFrameworkConfig,\n };\n}\n"],"mappings":"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","names":[]}