memeloop 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -0
- package/dist/browser.cjs +1413 -0
- package/dist/browser.cjs.map +1 -0
- package/dist/browser.d.cts +3066 -0
- package/dist/browser.d.ts +3066 -0
- package/dist/browser.js +43 -0
- package/dist/chunk-426CJUZP.js +630 -0
- package/dist/chunk-426CJUZP.js.map +1 -0
- package/dist/chunk-44YHBKDL.js +382 -0
- package/dist/chunk-44YHBKDL.js.map +1 -0
- package/dist/chunk-7ZDTB4VZ.js +63 -0
- package/dist/chunk-7ZDTB4VZ.js.map +1 -0
- package/dist/chunk-AZFYDWIN.js +98 -0
- package/dist/chunk-AZFYDWIN.js.map +1 -0
- package/dist/chunk-BGPU4RR7.js +367 -0
- package/dist/chunk-BGPU4RR7.js.map +1 -0
- package/dist/chunk-CCEFAOSH.js +496 -0
- package/dist/chunk-CCEFAOSH.js.map +1 -0
- package/dist/chunk-FWSY5HOA.js +63 -0
- package/dist/chunk-FWSY5HOA.js.map +1 -0
- package/dist/chunk-GYIOMQMY.js +8726 -0
- package/dist/chunk-GYIOMQMY.js.map +1 -0
- package/dist/chunk-HVB2BR3H.js +42 -0
- package/dist/chunk-HVB2BR3H.js.map +1 -0
- package/dist/chunk-K6P63KD4.js +68 -0
- package/dist/chunk-K6P63KD4.js.map +1 -0
- package/dist/chunk-MRKY4HGF.js +205 -0
- package/dist/chunk-MRKY4HGF.js.map +1 -0
- package/dist/chunk-QFHAAIIM.js +2657 -0
- package/dist/chunk-QFHAAIIM.js.map +1 -0
- package/dist/chunk-VZKQX5PP.js +1 -0
- package/dist/chunk-VZKQX5PP.js.map +1 -0
- package/dist/chunk-WAI6BODI.js +175 -0
- package/dist/chunk-WAI6BODI.js.map +1 -0
- package/dist/chunk-XHRBV6I3.js +3637 -0
- package/dist/chunk-XHRBV6I3.js.map +1 -0
- package/dist/chunk-YMNXDNDW.js +798 -0
- package/dist/chunk-YMNXDNDW.js.map +1 -0
- package/dist/conversation.cjs +208 -0
- package/dist/conversation.cjs.map +1 -0
- package/dist/conversation.d.cts +100 -0
- package/dist/conversation.d.ts +100 -0
- package/dist/conversation.js +21 -0
- package/dist/conversation.js.map +1 -0
- package/dist/device-network-portable.cjs +702 -0
- package/dist/device-network-portable.cjs.map +1 -0
- package/dist/device-network-portable.d.cts +110 -0
- package/dist/device-network-portable.d.ts +110 -0
- package/dist/device-network-portable.js +53 -0
- package/dist/device-network-portable.js.map +1 -0
- package/dist/device-network.cjs +906 -0
- package/dist/device-network.cjs.map +1 -0
- package/dist/device-network.d.cts +6 -0
- package/dist/device-network.d.ts +6 -0
- package/dist/device-network.js +59 -0
- package/dist/device-network.js.map +1 -0
- package/dist/fetchProvider-BpcGVSOG.d.cts +91 -0
- package/dist/fetchProvider-Cm0sO4Tl.d.ts +91 -0
- package/dist/index.cjs +27957 -5459
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +94 -1320
- package/dist/index.d.ts +94 -1320
- package/dist/index.js +10576 -2386
- package/dist/index.js.map +1 -1
- package/dist/interface-IrKBFtL1.d.cts +493 -0
- package/dist/interface-IrKBFtL1.d.ts +493 -0
- package/dist/llm-providers.cjs +43 -8
- package/dist/llm-providers.cjs.map +1 -1
- package/dist/llm-providers.d.cts +2 -1
- package/dist/llm-providers.d.ts +2 -1
- package/dist/llm-providers.js +4 -2
- package/dist/llm-providers.js.map +1 -1
- package/dist/loop-api.cjs +5177 -2050
- package/dist/loop-api.cjs.map +1 -1
- package/dist/loop-api.d.cts +11 -5
- package/dist/loop-api.d.ts +11 -5
- package/dist/loop-api.js +84 -49
- package/dist/mobile.cjs +2625 -0
- package/dist/mobile.cjs.map +1 -0
- package/dist/mobile.d.cts +6 -0
- package/dist/mobile.d.ts +6 -0
- package/dist/mobile.js +22 -0
- package/dist/mobile.js.map +1 -0
- package/dist/orchestration-portable-Bsf8YRfp.d.cts +2192 -0
- package/dist/orchestration-portable-Zw0g5tbj.d.ts +2192 -0
- package/dist/orchestration-portable.cjs +9553 -0
- package/dist/orchestration-portable.cjs.map +1 -0
- package/dist/orchestration-portable.d.cts +5 -0
- package/dist/orchestration-portable.d.ts +5 -0
- package/dist/orchestration-portable.js +290 -0
- package/dist/orchestration-portable.js.map +1 -0
- package/dist/pairingInvite-BXPWY3aM.d.cts +149 -0
- package/dist/pairingInvite-Cuz0wuq9.d.ts +149 -0
- package/dist/promptConcat-WTN-uHcz.d.cts +516 -0
- package/dist/promptConcat-deDSWZE3.d.ts +516 -0
- package/dist/providerRegistry-9trr5aoK.d.ts +86 -0
- package/dist/providerRegistry-xk_B1Ekv.d.cts +86 -0
- package/dist/registry-8eztoD_r.d.cts +393 -0
- package/dist/registry-DV24sI-3.d.ts +393 -0
- package/dist/remoteClient-B_spK019.d.ts +87 -0
- package/dist/remoteClient-CBggnRy3.d.cts +87 -0
- package/dist/runtime-SKSXVYIM.js +18 -0
- package/dist/runtime-SKSXVYIM.js.map +1 -0
- package/dist/scriptDeploymentPipeline-BAeo1dPb.d.cts +2463 -0
- package/dist/scriptDeploymentPipeline-DsnT0AG6.d.ts +2463 -0
- package/dist/syncCloudDevices-BEqwgrhD.d.ts +49 -0
- package/dist/syncCloudDevices-Ds_Kcgrv.d.cts +49 -0
- package/dist/types-7pYti-k9.d.cts +255 -0
- package/dist/types-CdFVSntj.d.ts +255 -0
- package/package.json +110 -35
- package/dist/anthropic.cjs +0 -72
- package/dist/anthropic.cjs.map +0 -1
- package/dist/anthropic.d.cts +0 -21
- package/dist/anthropic.d.ts +0 -21
- package/dist/anthropic.js +0 -21
- package/dist/anthropic.js.map +0 -1
- package/dist/azure.cjs +0 -72
- package/dist/azure.cjs.map +0 -1
- package/dist/azure.d.cts +0 -21
- package/dist/azure.d.ts +0 -21
- package/dist/azure.js +0 -21
- package/dist/azure.js.map +0 -1
- package/dist/chunk-3CN7DFBL.js +0 -4894
- package/dist/chunk-3CN7DFBL.js.map +0 -1
- package/dist/chunk-4AZ4D7U5.js +0 -32
- package/dist/chunk-4AZ4D7U5.js.map +0 -1
- package/dist/chunk-6ON4XSOV.js +0 -63
- package/dist/chunk-6ON4XSOV.js.map +0 -1
- package/dist/chunk-DJQNGIXX.js +0 -4793
- package/dist/chunk-DJQNGIXX.js.map +0 -1
- package/dist/chunk-FKQP6AOQ.js +0 -32
- package/dist/chunk-FKQP6AOQ.js.map +0 -1
- package/dist/chunk-OVJ7JJBA.js +0 -35
- package/dist/chunk-OVJ7JJBA.js.map +0 -1
- package/dist/chunk-P4UZ7IXC.js +0 -42
- package/dist/chunk-YHJ2AEFR.js +0 -4933
- package/dist/chunk-YHJ2AEFR.js.map +0 -1
- package/dist/chunk-YVK7RYRO.js +0 -4973
- package/dist/chunk-YVK7RYRO.js.map +0 -1
- package/dist/code-assistant.json +0 -114
- package/dist/cohere.cjs +0 -72
- package/dist/cohere.cjs.map +0 -1
- package/dist/cohere.d.cts +0 -21
- package/dist/cohere.d.ts +0 -21
- package/dist/cohere.js +0 -21
- package/dist/cohere.js.map +0 -1
- package/dist/deepseek.cjs +0 -72
- package/dist/deepseek.cjs.map +0 -1
- package/dist/deepseek.d.cts +0 -21
- package/dist/deepseek.d.ts +0 -21
- package/dist/deepseek.js +0 -21
- package/dist/deepseek.js.map +0 -1
- package/dist/dist-65U7OYRG.js +0 -1257
- package/dist/dist-65U7OYRG.js.map +0 -1
- package/dist/fetchProvider-Cu4WkU5O.d.cts +0 -819
- package/dist/fetchProvider-Cu4WkU5O.d.ts +0 -819
- package/dist/frontend-ui-ux.json +0 -105
- package/dist/general-assistant.json +0 -95
- package/dist/git-master.json +0 -51
- package/dist/google-vertex.cjs +0 -72
- package/dist/google-vertex.cjs.map +0 -1
- package/dist/google-vertex.d.cts +0 -21
- package/dist/google-vertex.d.ts +0 -21
- package/dist/google-vertex.js +0 -21
- package/dist/google-vertex.js.map +0 -1
- package/dist/google.cjs +0 -72
- package/dist/google.cjs.map +0 -1
- package/dist/google.d.cts +0 -21
- package/dist/google.d.ts +0 -21
- package/dist/google.js +0 -21
- package/dist/google.js.map +0 -1
- package/dist/groq.cjs +0 -72
- package/dist/groq.cjs.map +0 -1
- package/dist/groq.d.cts +0 -21
- package/dist/groq.d.ts +0 -21
- package/dist/groq.js +0 -21
- package/dist/groq.js.map +0 -1
- package/dist/index.d.mts +0 -3203
- package/dist/index.mjs +0 -7064
- package/dist/index.mjs.map +0 -1
- package/dist/mistral.cjs +0 -72
- package/dist/mistral.cjs.map +0 -1
- package/dist/mistral.d.cts +0 -21
- package/dist/mistral.d.ts +0 -21
- package/dist/mistral.js +0 -21
- package/dist/mistral.js.map +0 -1
- package/dist/multipart-parser-EJCXIUHC.js +0 -372
- package/dist/multipart-parser-EJCXIUHC.js.map +0 -1
- package/dist/openai.cjs +0 -72
- package/dist/openai.cjs.map +0 -1
- package/dist/openai.d.cts +0 -21
- package/dist/openai.d.ts +0 -21
- package/dist/openai.js +0 -21
- package/dist/openai.js.map +0 -1
- package/dist/perplexity.cjs +0 -72
- package/dist/perplexity.cjs.map +0 -1
- package/dist/perplexity.d.cts +0 -21
- package/dist/perplexity.d.ts +0 -21
- package/dist/perplexity.js +0 -21
- package/dist/perplexity.js.map +0 -1
- package/dist/playwright.json +0 -52
- package/dist/promptConcat-BJdazTg5.d.cts +0 -1832
- package/dist/promptConcat-BJdazTg5.d.ts +0 -1832
- package/dist/promptConcat-CAkpni_8.d.cts +0 -1834
- package/dist/promptConcat-CAkpni_8.d.ts +0 -1834
- package/dist/promptConcat-CfH5-GAE.d.cts +0 -1036
- package/dist/promptConcat-ChcAZOOL.d.ts +0 -1036
- package/dist/promptConcat-G5TnJVRy.d.cts +0 -1800
- package/dist/promptConcat-G5TnJVRy.d.ts +0 -1800
- package/dist/promptConcat-L72eowzp.d.ts +0 -1090
- package/dist/promptConcat-eLHdN7K8.d.cts +0 -1090
- package/dist/src-VTSXKG72.js +0 -1409
- package/dist/src-VTSXKG72.js.map +0 -1
- package/dist/togetherai.cjs +0 -72
- package/dist/togetherai.cjs.map +0 -1
- package/dist/togetherai.d.cts +0 -21
- package/dist/togetherai.d.ts +0 -21
- package/dist/togetherai.js +0 -21
- package/dist/togetherai.js.map +0 -1
- package/dist/types-B0Jm2l38.d.cts +0 -767
- package/dist/types-B0Jm2l38.d.ts +0 -767
- package/dist/xai.cjs +0 -72
- package/dist/xai.cjs.map +0 -1
- package/dist/xai.d.cts +0 -21
- package/dist/xai.d.ts +0 -21
- package/dist/xai.js +0 -21
- package/dist/xai.js.map +0 -1
- /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":[]}
|