eve 0.26.1 → 0.26.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/dist/src/chunks/{use-eve-agent-CruinZmd.js → use-eve-agent-AeQLLhu9.js} +118 -92
- package/dist/src/chunks/{use-eve-agent-BkztZA0v.js → use-eve-agent-PMY2WkAt.js} +118 -92
- package/dist/src/cli/commands/info.d.ts +2 -0
- package/dist/src/cli/commands/info.js +1 -1
- package/dist/src/client/message-action-parts.d.ts +43 -0
- package/dist/src/client/message-action-parts.js +1 -0
- package/dist/src/client/message-reducer.js +1 -1
- package/dist/src/compiled/.vendor-stamp.json +4 -4
- package/dist/src/compiled/@chat-adapter/slack/blocks.d.ts +47 -2
- package/dist/src/compiled/@chat-adapter/slack/blocks.js +10 -8
- package/dist/src/compiled/@chat-adapter/slack/index.d.ts +168 -8
- package/dist/src/compiled/@chat-adapter/slack/index.js +28 -28
- package/dist/src/compiled/@chat-adapter/slack/{types-AntsVifS.d.ts → types-CdGmMyOr.d.ts} +1 -1
- package/dist/src/compiled/@chat-adapter/slack/webhook.d.ts +2 -2
- package/dist/src/compiled/@chat-adapter/twilio/index.d.ts +1 -1
- package/dist/src/compiled/@chat-adapter/twilio/index.js +1 -1
- package/dist/src/compiled/@chat-adapter/twilio/webhook.d.ts +2 -2
- package/dist/src/compiled/@vercel/sandbox/index.js +12 -12
- package/dist/src/compiled/_chunks/node/{auth-Cuszvn7l.js → auth-BuQkq4Gr.js} +2 -2
- package/dist/src/compiled/_chunks/node/{dist-CdH_Yoxt.js → dist-BweCayKF.js} +42 -35
- package/dist/src/compiled/_chunks/node/{dist-Drt-_JVK.js → dist-DvkWiagq.js} +6 -4
- package/dist/src/compiled/chat/index.d.ts +17 -6
- package/dist/src/compiled/chat/index.js +1 -1
- package/dist/src/compiled/chat/{jsx-runtime-CzthIo1o.d.ts → jsx-runtime-_JEEAotp.d.ts} +125 -5
- package/dist/src/compiler/model-catalog.js +1 -1
- package/dist/src/evals/autoevals-client.js +1 -1
- package/dist/src/execution/sandbox/bindings/vercel-credentials.js +1 -1
- package/dist/src/execution/sandbox/bindings/vercel-lookup.js +1 -1
- package/dist/src/execution/session.d.ts +0 -2
- package/dist/src/execution/session.js +1 -1
- package/dist/src/execution/skills/instructions.d.ts +3 -3
- package/dist/src/execution/skills/instructions.js +2 -2
- package/dist/src/execution/workflow-steps.js +1 -1
- package/dist/src/harness/messages.d.ts +7 -0
- package/dist/src/harness/messages.js +1 -1
- package/dist/src/harness/stale-input-responses.js +2 -2
- package/dist/src/harness/tool-loop.js +2 -2
- package/dist/src/internal/application/compiled-artifacts.js +9 -3
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/gateway.d.ts +19 -0
- package/dist/src/internal/gateway.js +1 -0
- package/dist/src/internal/user-agent.d.ts +11 -0
- package/dist/src/internal/user-agent.js +1 -0
- package/dist/src/public/tools/defaults.d.ts +3 -3
- package/dist/src/runtime/framework-tools/index.d.ts +3 -2
- package/dist/src/runtime/framework-tools/index.js +1 -1
- package/dist/src/runtime/framework-tools/skill.d.ts +6 -1
- package/dist/src/runtime/framework-tools/skill.js +1 -1
- package/dist/src/runtime/resolve-agent-graph.js +1 -1
- package/dist/src/setup/boxes/select-model.js +1 -1
- package/dist/src/setup/gateway-models.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +1 -1
- package/dist/src/setup/validate-gateway-key.js +1 -1
- package/dist/src/svelte/index.js +1 -1
- package/dist/src/svelte/use-eve-agent.js +1 -1
- package/dist/src/vue/index.js +1 -1
- package/dist/src/vue/use-eve-agent.js +1 -1
- package/docs/concepts/sessions-runs-and-streaming.md +7 -7
- package/docs/reference/cli.md +1 -1
- package/docs/schedules.mdx +1 -1
- package/docs/skills.mdx +1 -1
- package/package.json +5 -5
- package/dist/src/execution/sandbox/bindings/vercel-user-agent.d.ts +0 -6
- package/dist/src/execution/sandbox/bindings/vercel-user-agent.js +0 -1
- package/dist/src/execution/workflow-skill-root.d.ts +0 -6
- package/dist/src/execution/workflow-skill-root.js +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# eve
|
|
2
2
|
|
|
3
|
+
## 0.26.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- dbca15c: Bump the vendored chat SDK (`chat`, `@chat-adapter/*`) from 4.31.0 to 4.34.0. Slack card tables now render as native data table blocks — paginated and sortable — instead of plain table blocks, and `Table()` supports optional `caption` and `pageSize` fields.
|
|
8
|
+
- 938ef92: Identify Eve and its version on AI Gateway, Sandbox, and Workflow service requests.
|
|
9
|
+
- d034e01: Fixed the default chat message reducer dropping assistant text when a single turn produced more than one message — for example, text shown before an OAuth authorization prompt was overwritten by the text that followed it once authorization completed. Each message now renders in the order it arrived.
|
|
10
|
+
- dad9472: `eve info` now reports discovered subagents and schedules in both the human table and the `--json` output, matching what the CLI reference already documented. Previously both surfaces silently omitted them even though discovery resolved them correctly.
|
|
11
|
+
- f1253c5: Listing or loading static skills no longer requires opening a sandbox. Dynamic skills and access to supporting skill package files, such as references, assets, and scripts, remain sandbox-backed.
|
|
12
|
+
- de917a6: Fix a crash when an agent is triggered by a bare mention with no text (e.g. sending just `@bot` in a Microsoft Teams channel). The agent now responds normally instead of failing.
|
|
13
|
+
|
|
3
14
|
## 0.26.1
|
|
4
15
|
|
|
5
16
|
### Patch Changes
|
|
@@ -1268,6 +1268,97 @@ function formatAuthorizationDisplayName(name) {
|
|
|
1268
1268
|
return `${name.charAt(0).toUpperCase()}${name.slice(1)}`;
|
|
1269
1269
|
}
|
|
1270
1270
|
|
|
1271
|
+
//#endregion
|
|
1272
|
+
//#region src/client/message-action-parts.ts
|
|
1273
|
+
function toMessageInputRequest(request) {
|
|
1274
|
+
return {
|
|
1275
|
+
allowFreeform: request.allowFreeform,
|
|
1276
|
+
display: request.display,
|
|
1277
|
+
options: request.options,
|
|
1278
|
+
prompt: request.prompt,
|
|
1279
|
+
requestId: request.requestId
|
|
1280
|
+
};
|
|
1281
|
+
}
|
|
1282
|
+
function createToolMetadata(descriptor, extra) {
|
|
1283
|
+
return { eve: {
|
|
1284
|
+
inputRequest: extra?.inputRequest,
|
|
1285
|
+
kind: descriptor.kind,
|
|
1286
|
+
name: descriptor.name
|
|
1287
|
+
} };
|
|
1288
|
+
}
|
|
1289
|
+
function mergeToolMetadata(current, next) {
|
|
1290
|
+
const kind = next.eve?.kind ?? current?.eve?.kind ?? "unknown";
|
|
1291
|
+
const name = next.eve?.name ?? current?.eve?.name ?? "unknown";
|
|
1292
|
+
return { eve: {
|
|
1293
|
+
...current?.eve,
|
|
1294
|
+
...next.eve,
|
|
1295
|
+
inputRequest: next.eve?.inputRequest ?? current?.eve?.inputRequest,
|
|
1296
|
+
inputResponse: next.eve?.inputResponse ?? current?.eve?.inputResponse,
|
|
1297
|
+
kind,
|
|
1298
|
+
name
|
|
1299
|
+
} };
|
|
1300
|
+
}
|
|
1301
|
+
function approvedApproval(part) {
|
|
1302
|
+
if (!part?.approval?.id) return;
|
|
1303
|
+
return {
|
|
1304
|
+
approved: true,
|
|
1305
|
+
id: part.approval.id,
|
|
1306
|
+
isAutomatic: part.approval.isAutomatic,
|
|
1307
|
+
reason: part.approval.reason
|
|
1308
|
+
};
|
|
1309
|
+
}
|
|
1310
|
+
function normalizeActionRequest(action) {
|
|
1311
|
+
switch (action.kind) {
|
|
1312
|
+
case "load-skill": return {
|
|
1313
|
+
kind: "load-skill",
|
|
1314
|
+
name: "load_skill",
|
|
1315
|
+
toolName: "eve:load-skill"
|
|
1316
|
+
};
|
|
1317
|
+
case "tool-call": return {
|
|
1318
|
+
kind: "tool-call",
|
|
1319
|
+
name: action.toolName,
|
|
1320
|
+
toolName: action.toolName
|
|
1321
|
+
};
|
|
1322
|
+
case "subagent-call": return {
|
|
1323
|
+
kind: "subagent-call",
|
|
1324
|
+
name: action.subagentName,
|
|
1325
|
+
toolName: `eve:subagent:${action.subagentName}`
|
|
1326
|
+
};
|
|
1327
|
+
case "remote-agent-call": return {
|
|
1328
|
+
kind: "subagent-call",
|
|
1329
|
+
name: action.remoteAgentName,
|
|
1330
|
+
toolName: `eve:subagent:${action.remoteAgentName}`
|
|
1331
|
+
};
|
|
1332
|
+
}
|
|
1333
|
+
}
|
|
1334
|
+
function normalizeActionResult(result) {
|
|
1335
|
+
switch (result.kind) {
|
|
1336
|
+
case "load-skill-result": return {
|
|
1337
|
+
kind: "load-skill",
|
|
1338
|
+
name: result.name ?? "load_skill",
|
|
1339
|
+
toolName: "eve:load-skill"
|
|
1340
|
+
};
|
|
1341
|
+
case "tool-result": return {
|
|
1342
|
+
kind: "tool-call",
|
|
1343
|
+
name: result.toolName,
|
|
1344
|
+
toolName: result.toolName
|
|
1345
|
+
};
|
|
1346
|
+
case "subagent-result": return {
|
|
1347
|
+
kind: "subagent-call",
|
|
1348
|
+
name: result.subagentName,
|
|
1349
|
+
toolName: `eve:subagent:${result.subagentName}`
|
|
1350
|
+
};
|
|
1351
|
+
}
|
|
1352
|
+
}
|
|
1353
|
+
function stringifyUnknown(value) {
|
|
1354
|
+
if (typeof value === "string") return value;
|
|
1355
|
+
try {
|
|
1356
|
+
return JSON.stringify(value);
|
|
1357
|
+
} catch {
|
|
1358
|
+
return "Action failed.";
|
|
1359
|
+
}
|
|
1360
|
+
}
|
|
1361
|
+
|
|
1271
1362
|
//#endregion
|
|
1272
1363
|
//#region src/client/message-reducer.ts
|
|
1273
1364
|
function defaultMessageReducer() {
|
|
@@ -1321,13 +1412,13 @@ function reduceMessageData(data, event) {
|
|
|
1321
1412
|
role: "user"
|
|
1322
1413
|
});
|
|
1323
1414
|
case "step.started": return updateAssistantMessage(data, event.data.turnId, (message) => ensureStepStartPart(message, event.data.stepIndex));
|
|
1324
|
-
case "reasoning.appended": return updateAssistantMessage(data, event.data.turnId, (message) =>
|
|
1415
|
+
case "reasoning.appended": return updateAssistantMessage(data, event.data.turnId, (message) => upsertRun(ensureStepStartPart(message, event.data.stepIndex), {
|
|
1325
1416
|
state: "streaming",
|
|
1326
1417
|
stepIndex: event.data.stepIndex,
|
|
1327
1418
|
text: event.data.reasoningSoFar,
|
|
1328
1419
|
type: "reasoning"
|
|
1329
1420
|
}));
|
|
1330
|
-
case "reasoning.completed": return updateAssistantMessage(data, event.data.turnId, (message) =>
|
|
1421
|
+
case "reasoning.completed": return updateAssistantMessage(data, event.data.turnId, (message) => upsertRun(ensureStepStartPart(message, event.data.stepIndex), {
|
|
1331
1422
|
state: "done",
|
|
1332
1423
|
stepIndex: event.data.stepIndex,
|
|
1333
1424
|
text: event.data.reasoning,
|
|
@@ -1408,7 +1499,7 @@ function reduceMessageData(data, event) {
|
|
|
1408
1499
|
}
|
|
1409
1500
|
case "authorization.required": return updateAssistantMessage(data, event.data.turnId, (message) => upsertPart(ensureStepStartPart(message, event.data.stepIndex), createAuthorizationRequiredPart(event)));
|
|
1410
1501
|
case "authorization.completed": return completeAuthorization(data, event);
|
|
1411
|
-
case "message.appended": return updateAssistantMessage(data, event.data.turnId, (message) =>
|
|
1502
|
+
case "message.appended": return updateAssistantMessage(data, event.data.turnId, (message) => upsertRun(ensureStepStartPart(message, event.data.stepIndex), {
|
|
1412
1503
|
state: "streaming",
|
|
1413
1504
|
stepIndex: event.data.stepIndex,
|
|
1414
1505
|
text: event.data.messageSoFar,
|
|
@@ -1416,7 +1507,7 @@ function reduceMessageData(data, event) {
|
|
|
1416
1507
|
}));
|
|
1417
1508
|
case "message.completed": return updateAssistantMessage(data, event.data.turnId, (message) => {
|
|
1418
1509
|
if (event.data.message === null) return removeTextPart(message, event.data.stepIndex);
|
|
1419
|
-
return
|
|
1510
|
+
return upsertRun(ensureStepStartPart(message, event.data.stepIndex), {
|
|
1420
1511
|
state: "done",
|
|
1421
1512
|
stepIndex: event.data.stepIndex,
|
|
1422
1513
|
text: event.data.message,
|
|
@@ -1509,6 +1600,29 @@ function upsertPart(message, next) {
|
|
|
1509
1600
|
parts
|
|
1510
1601
|
};
|
|
1511
1602
|
}
|
|
1603
|
+
function upsertRun(message, next) {
|
|
1604
|
+
let lastIndex = -1;
|
|
1605
|
+
for (let index = message.parts.length - 1; index >= 0; index -= 1) {
|
|
1606
|
+
const part = message.parts[index];
|
|
1607
|
+
if (part?.type === next.type && part.stepIndex === next.stepIndex) {
|
|
1608
|
+
lastIndex = index;
|
|
1609
|
+
break;
|
|
1610
|
+
}
|
|
1611
|
+
}
|
|
1612
|
+
const parts = lastIndex !== -1 && message.parts[lastIndex].state === "streaming" ? [
|
|
1613
|
+
...message.parts.slice(0, lastIndex),
|
|
1614
|
+
next,
|
|
1615
|
+
...message.parts.slice(lastIndex + 1)
|
|
1616
|
+
] : [...message.parts, next];
|
|
1617
|
+
return {
|
|
1618
|
+
...message,
|
|
1619
|
+
metadata: {
|
|
1620
|
+
...message.metadata,
|
|
1621
|
+
status: next.type === "text" && next.state === "done" ? "complete" : "streaming"
|
|
1622
|
+
},
|
|
1623
|
+
parts
|
|
1624
|
+
};
|
|
1625
|
+
}
|
|
1512
1626
|
function removeTextPart(message, stepIndex) {
|
|
1513
1627
|
const parts = message.parts.filter((part) => part.type !== "text" || part.stepIndex !== stepIndex);
|
|
1514
1628
|
if (parts.length === message.parts.length) return message;
|
|
@@ -1589,97 +1703,9 @@ function upsertMessage(data, next) {
|
|
|
1589
1703
|
...data.messages.slice(index + 1)
|
|
1590
1704
|
] };
|
|
1591
1705
|
}
|
|
1592
|
-
function toMessageInputRequest(request) {
|
|
1593
|
-
return {
|
|
1594
|
-
allowFreeform: request.allowFreeform,
|
|
1595
|
-
display: request.display,
|
|
1596
|
-
options: request.options,
|
|
1597
|
-
prompt: request.prompt,
|
|
1598
|
-
requestId: request.requestId
|
|
1599
|
-
};
|
|
1600
|
-
}
|
|
1601
|
-
function createToolMetadata(descriptor, extra) {
|
|
1602
|
-
return { eve: {
|
|
1603
|
-
inputRequest: extra?.inputRequest,
|
|
1604
|
-
kind: descriptor.kind,
|
|
1605
|
-
name: descriptor.name
|
|
1606
|
-
} };
|
|
1607
|
-
}
|
|
1608
|
-
function mergeToolMetadata(current, next) {
|
|
1609
|
-
const kind = next.eve?.kind ?? current?.eve?.kind ?? "unknown";
|
|
1610
|
-
const name = next.eve?.name ?? current?.eve?.name ?? "unknown";
|
|
1611
|
-
return { eve: {
|
|
1612
|
-
...current?.eve,
|
|
1613
|
-
...next.eve,
|
|
1614
|
-
inputRequest: next.eve?.inputRequest ?? current?.eve?.inputRequest,
|
|
1615
|
-
inputResponse: next.eve?.inputResponse ?? current?.eve?.inputResponse,
|
|
1616
|
-
kind,
|
|
1617
|
-
name
|
|
1618
|
-
} };
|
|
1619
|
-
}
|
|
1620
|
-
function approvedApproval(part) {
|
|
1621
|
-
if (!part?.approval?.id) return;
|
|
1622
|
-
return {
|
|
1623
|
-
approved: true,
|
|
1624
|
-
id: part.approval.id,
|
|
1625
|
-
isAutomatic: part.approval.isAutomatic,
|
|
1626
|
-
reason: part.approval.reason
|
|
1627
|
-
};
|
|
1628
|
-
}
|
|
1629
|
-
function normalizeActionRequest(action) {
|
|
1630
|
-
switch (action.kind) {
|
|
1631
|
-
case "load-skill": return {
|
|
1632
|
-
kind: "load-skill",
|
|
1633
|
-
name: "load_skill",
|
|
1634
|
-
toolName: "eve:load-skill"
|
|
1635
|
-
};
|
|
1636
|
-
case "tool-call": return {
|
|
1637
|
-
kind: "tool-call",
|
|
1638
|
-
name: action.toolName,
|
|
1639
|
-
toolName: action.toolName
|
|
1640
|
-
};
|
|
1641
|
-
case "subagent-call": return {
|
|
1642
|
-
kind: "subagent-call",
|
|
1643
|
-
name: action.subagentName,
|
|
1644
|
-
toolName: `eve:subagent:${action.subagentName}`
|
|
1645
|
-
};
|
|
1646
|
-
case "remote-agent-call": return {
|
|
1647
|
-
kind: "subagent-call",
|
|
1648
|
-
name: action.remoteAgentName,
|
|
1649
|
-
toolName: `eve:subagent:${action.remoteAgentName}`
|
|
1650
|
-
};
|
|
1651
|
-
}
|
|
1652
|
-
}
|
|
1653
|
-
function normalizeActionResult(result) {
|
|
1654
|
-
switch (result.kind) {
|
|
1655
|
-
case "load-skill-result": return {
|
|
1656
|
-
kind: "load-skill",
|
|
1657
|
-
name: result.name ?? "load_skill",
|
|
1658
|
-
toolName: "eve:load-skill"
|
|
1659
|
-
};
|
|
1660
|
-
case "tool-result": return {
|
|
1661
|
-
kind: "tool-call",
|
|
1662
|
-
name: result.toolName,
|
|
1663
|
-
toolName: result.toolName
|
|
1664
|
-
};
|
|
1665
|
-
case "subagent-result": return {
|
|
1666
|
-
kind: "subagent-call",
|
|
1667
|
-
name: result.subagentName,
|
|
1668
|
-
toolName: `eve:subagent:${result.subagentName}`
|
|
1669
|
-
};
|
|
1670
|
-
}
|
|
1671
|
-
}
|
|
1672
1706
|
function optimisticUserMessageId(submissionId) {
|
|
1673
1707
|
return `optimistic:${submissionId}:user`;
|
|
1674
1708
|
}
|
|
1675
|
-
function stringifyUnknown(value) {
|
|
1676
|
-
if (typeof value === "string") return value;
|
|
1677
|
-
try {
|
|
1678
|
-
return JSON.stringify(value);
|
|
1679
|
-
} catch {
|
|
1680
|
-
return "Action failed.";
|
|
1681
|
-
}
|
|
1682
|
-
}
|
|
1683
1709
|
|
|
1684
1710
|
//#endregion
|
|
1685
1711
|
//#region src/svelte/use-eve-agent.ts
|
|
@@ -1268,6 +1268,97 @@ function formatAuthorizationDisplayName(name) {
|
|
|
1268
1268
|
return `${name.charAt(0).toUpperCase()}${name.slice(1)}`;
|
|
1269
1269
|
}
|
|
1270
1270
|
|
|
1271
|
+
//#endregion
|
|
1272
|
+
//#region src/client/message-action-parts.ts
|
|
1273
|
+
function toMessageInputRequest(request) {
|
|
1274
|
+
return {
|
|
1275
|
+
allowFreeform: request.allowFreeform,
|
|
1276
|
+
display: request.display,
|
|
1277
|
+
options: request.options,
|
|
1278
|
+
prompt: request.prompt,
|
|
1279
|
+
requestId: request.requestId
|
|
1280
|
+
};
|
|
1281
|
+
}
|
|
1282
|
+
function createToolMetadata(descriptor, extra) {
|
|
1283
|
+
return { eve: {
|
|
1284
|
+
inputRequest: extra?.inputRequest,
|
|
1285
|
+
kind: descriptor.kind,
|
|
1286
|
+
name: descriptor.name
|
|
1287
|
+
} };
|
|
1288
|
+
}
|
|
1289
|
+
function mergeToolMetadata(current, next) {
|
|
1290
|
+
const kind = next.eve?.kind ?? current?.eve?.kind ?? "unknown";
|
|
1291
|
+
const name = next.eve?.name ?? current?.eve?.name ?? "unknown";
|
|
1292
|
+
return { eve: {
|
|
1293
|
+
...current?.eve,
|
|
1294
|
+
...next.eve,
|
|
1295
|
+
inputRequest: next.eve?.inputRequest ?? current?.eve?.inputRequest,
|
|
1296
|
+
inputResponse: next.eve?.inputResponse ?? current?.eve?.inputResponse,
|
|
1297
|
+
kind,
|
|
1298
|
+
name
|
|
1299
|
+
} };
|
|
1300
|
+
}
|
|
1301
|
+
function approvedApproval(part) {
|
|
1302
|
+
if (!part?.approval?.id) return;
|
|
1303
|
+
return {
|
|
1304
|
+
approved: true,
|
|
1305
|
+
id: part.approval.id,
|
|
1306
|
+
isAutomatic: part.approval.isAutomatic,
|
|
1307
|
+
reason: part.approval.reason
|
|
1308
|
+
};
|
|
1309
|
+
}
|
|
1310
|
+
function normalizeActionRequest(action) {
|
|
1311
|
+
switch (action.kind) {
|
|
1312
|
+
case "load-skill": return {
|
|
1313
|
+
kind: "load-skill",
|
|
1314
|
+
name: "load_skill",
|
|
1315
|
+
toolName: "eve:load-skill"
|
|
1316
|
+
};
|
|
1317
|
+
case "tool-call": return {
|
|
1318
|
+
kind: "tool-call",
|
|
1319
|
+
name: action.toolName,
|
|
1320
|
+
toolName: action.toolName
|
|
1321
|
+
};
|
|
1322
|
+
case "subagent-call": return {
|
|
1323
|
+
kind: "subagent-call",
|
|
1324
|
+
name: action.subagentName,
|
|
1325
|
+
toolName: `eve:subagent:${action.subagentName}`
|
|
1326
|
+
};
|
|
1327
|
+
case "remote-agent-call": return {
|
|
1328
|
+
kind: "subagent-call",
|
|
1329
|
+
name: action.remoteAgentName,
|
|
1330
|
+
toolName: `eve:subagent:${action.remoteAgentName}`
|
|
1331
|
+
};
|
|
1332
|
+
}
|
|
1333
|
+
}
|
|
1334
|
+
function normalizeActionResult(result) {
|
|
1335
|
+
switch (result.kind) {
|
|
1336
|
+
case "load-skill-result": return {
|
|
1337
|
+
kind: "load-skill",
|
|
1338
|
+
name: result.name ?? "load_skill",
|
|
1339
|
+
toolName: "eve:load-skill"
|
|
1340
|
+
};
|
|
1341
|
+
case "tool-result": return {
|
|
1342
|
+
kind: "tool-call",
|
|
1343
|
+
name: result.toolName,
|
|
1344
|
+
toolName: result.toolName
|
|
1345
|
+
};
|
|
1346
|
+
case "subagent-result": return {
|
|
1347
|
+
kind: "subagent-call",
|
|
1348
|
+
name: result.subagentName,
|
|
1349
|
+
toolName: `eve:subagent:${result.subagentName}`
|
|
1350
|
+
};
|
|
1351
|
+
}
|
|
1352
|
+
}
|
|
1353
|
+
function stringifyUnknown(value) {
|
|
1354
|
+
if (typeof value === "string") return value;
|
|
1355
|
+
try {
|
|
1356
|
+
return JSON.stringify(value);
|
|
1357
|
+
} catch {
|
|
1358
|
+
return "Action failed.";
|
|
1359
|
+
}
|
|
1360
|
+
}
|
|
1361
|
+
|
|
1271
1362
|
//#endregion
|
|
1272
1363
|
//#region src/client/message-reducer.ts
|
|
1273
1364
|
function defaultMessageReducer() {
|
|
@@ -1321,13 +1412,13 @@ function reduceMessageData(data, event) {
|
|
|
1321
1412
|
role: "user"
|
|
1322
1413
|
});
|
|
1323
1414
|
case "step.started": return updateAssistantMessage(data, event.data.turnId, (message) => ensureStepStartPart(message, event.data.stepIndex));
|
|
1324
|
-
case "reasoning.appended": return updateAssistantMessage(data, event.data.turnId, (message) =>
|
|
1415
|
+
case "reasoning.appended": return updateAssistantMessage(data, event.data.turnId, (message) => upsertRun(ensureStepStartPart(message, event.data.stepIndex), {
|
|
1325
1416
|
state: "streaming",
|
|
1326
1417
|
stepIndex: event.data.stepIndex,
|
|
1327
1418
|
text: event.data.reasoningSoFar,
|
|
1328
1419
|
type: "reasoning"
|
|
1329
1420
|
}));
|
|
1330
|
-
case "reasoning.completed": return updateAssistantMessage(data, event.data.turnId, (message) =>
|
|
1421
|
+
case "reasoning.completed": return updateAssistantMessage(data, event.data.turnId, (message) => upsertRun(ensureStepStartPart(message, event.data.stepIndex), {
|
|
1331
1422
|
state: "done",
|
|
1332
1423
|
stepIndex: event.data.stepIndex,
|
|
1333
1424
|
text: event.data.reasoning,
|
|
@@ -1408,7 +1499,7 @@ function reduceMessageData(data, event) {
|
|
|
1408
1499
|
}
|
|
1409
1500
|
case "authorization.required": return updateAssistantMessage(data, event.data.turnId, (message) => upsertPart(ensureStepStartPart(message, event.data.stepIndex), createAuthorizationRequiredPart(event)));
|
|
1410
1501
|
case "authorization.completed": return completeAuthorization(data, event);
|
|
1411
|
-
case "message.appended": return updateAssistantMessage(data, event.data.turnId, (message) =>
|
|
1502
|
+
case "message.appended": return updateAssistantMessage(data, event.data.turnId, (message) => upsertRun(ensureStepStartPart(message, event.data.stepIndex), {
|
|
1412
1503
|
state: "streaming",
|
|
1413
1504
|
stepIndex: event.data.stepIndex,
|
|
1414
1505
|
text: event.data.messageSoFar,
|
|
@@ -1416,7 +1507,7 @@ function reduceMessageData(data, event) {
|
|
|
1416
1507
|
}));
|
|
1417
1508
|
case "message.completed": return updateAssistantMessage(data, event.data.turnId, (message) => {
|
|
1418
1509
|
if (event.data.message === null) return removeTextPart(message, event.data.stepIndex);
|
|
1419
|
-
return
|
|
1510
|
+
return upsertRun(ensureStepStartPart(message, event.data.stepIndex), {
|
|
1420
1511
|
state: "done",
|
|
1421
1512
|
stepIndex: event.data.stepIndex,
|
|
1422
1513
|
text: event.data.message,
|
|
@@ -1509,6 +1600,29 @@ function upsertPart(message, next) {
|
|
|
1509
1600
|
parts
|
|
1510
1601
|
};
|
|
1511
1602
|
}
|
|
1603
|
+
function upsertRun(message, next) {
|
|
1604
|
+
let lastIndex = -1;
|
|
1605
|
+
for (let index = message.parts.length - 1; index >= 0; index -= 1) {
|
|
1606
|
+
const part = message.parts[index];
|
|
1607
|
+
if (part?.type === next.type && part.stepIndex === next.stepIndex) {
|
|
1608
|
+
lastIndex = index;
|
|
1609
|
+
break;
|
|
1610
|
+
}
|
|
1611
|
+
}
|
|
1612
|
+
const parts = lastIndex !== -1 && message.parts[lastIndex].state === "streaming" ? [
|
|
1613
|
+
...message.parts.slice(0, lastIndex),
|
|
1614
|
+
next,
|
|
1615
|
+
...message.parts.slice(lastIndex + 1)
|
|
1616
|
+
] : [...message.parts, next];
|
|
1617
|
+
return {
|
|
1618
|
+
...message,
|
|
1619
|
+
metadata: {
|
|
1620
|
+
...message.metadata,
|
|
1621
|
+
status: next.type === "text" && next.state === "done" ? "complete" : "streaming"
|
|
1622
|
+
},
|
|
1623
|
+
parts
|
|
1624
|
+
};
|
|
1625
|
+
}
|
|
1512
1626
|
function removeTextPart(message, stepIndex) {
|
|
1513
1627
|
const parts = message.parts.filter((part) => part.type !== "text" || part.stepIndex !== stepIndex);
|
|
1514
1628
|
if (parts.length === message.parts.length) return message;
|
|
@@ -1589,97 +1703,9 @@ function upsertMessage(data, next) {
|
|
|
1589
1703
|
...data.messages.slice(index + 1)
|
|
1590
1704
|
] };
|
|
1591
1705
|
}
|
|
1592
|
-
function toMessageInputRequest(request) {
|
|
1593
|
-
return {
|
|
1594
|
-
allowFreeform: request.allowFreeform,
|
|
1595
|
-
display: request.display,
|
|
1596
|
-
options: request.options,
|
|
1597
|
-
prompt: request.prompt,
|
|
1598
|
-
requestId: request.requestId
|
|
1599
|
-
};
|
|
1600
|
-
}
|
|
1601
|
-
function createToolMetadata(descriptor, extra) {
|
|
1602
|
-
return { eve: {
|
|
1603
|
-
inputRequest: extra?.inputRequest,
|
|
1604
|
-
kind: descriptor.kind,
|
|
1605
|
-
name: descriptor.name
|
|
1606
|
-
} };
|
|
1607
|
-
}
|
|
1608
|
-
function mergeToolMetadata(current, next) {
|
|
1609
|
-
const kind = next.eve?.kind ?? current?.eve?.kind ?? "unknown";
|
|
1610
|
-
const name = next.eve?.name ?? current?.eve?.name ?? "unknown";
|
|
1611
|
-
return { eve: {
|
|
1612
|
-
...current?.eve,
|
|
1613
|
-
...next.eve,
|
|
1614
|
-
inputRequest: next.eve?.inputRequest ?? current?.eve?.inputRequest,
|
|
1615
|
-
inputResponse: next.eve?.inputResponse ?? current?.eve?.inputResponse,
|
|
1616
|
-
kind,
|
|
1617
|
-
name
|
|
1618
|
-
} };
|
|
1619
|
-
}
|
|
1620
|
-
function approvedApproval(part) {
|
|
1621
|
-
if (!part?.approval?.id) return;
|
|
1622
|
-
return {
|
|
1623
|
-
approved: true,
|
|
1624
|
-
id: part.approval.id,
|
|
1625
|
-
isAutomatic: part.approval.isAutomatic,
|
|
1626
|
-
reason: part.approval.reason
|
|
1627
|
-
};
|
|
1628
|
-
}
|
|
1629
|
-
function normalizeActionRequest(action) {
|
|
1630
|
-
switch (action.kind) {
|
|
1631
|
-
case "load-skill": return {
|
|
1632
|
-
kind: "load-skill",
|
|
1633
|
-
name: "load_skill",
|
|
1634
|
-
toolName: "eve:load-skill"
|
|
1635
|
-
};
|
|
1636
|
-
case "tool-call": return {
|
|
1637
|
-
kind: "tool-call",
|
|
1638
|
-
name: action.toolName,
|
|
1639
|
-
toolName: action.toolName
|
|
1640
|
-
};
|
|
1641
|
-
case "subagent-call": return {
|
|
1642
|
-
kind: "subagent-call",
|
|
1643
|
-
name: action.subagentName,
|
|
1644
|
-
toolName: `eve:subagent:${action.subagentName}`
|
|
1645
|
-
};
|
|
1646
|
-
case "remote-agent-call": return {
|
|
1647
|
-
kind: "subagent-call",
|
|
1648
|
-
name: action.remoteAgentName,
|
|
1649
|
-
toolName: `eve:subagent:${action.remoteAgentName}`
|
|
1650
|
-
};
|
|
1651
|
-
}
|
|
1652
|
-
}
|
|
1653
|
-
function normalizeActionResult(result) {
|
|
1654
|
-
switch (result.kind) {
|
|
1655
|
-
case "load-skill-result": return {
|
|
1656
|
-
kind: "load-skill",
|
|
1657
|
-
name: result.name ?? "load_skill",
|
|
1658
|
-
toolName: "eve:load-skill"
|
|
1659
|
-
};
|
|
1660
|
-
case "tool-result": return {
|
|
1661
|
-
kind: "tool-call",
|
|
1662
|
-
name: result.toolName,
|
|
1663
|
-
toolName: result.toolName
|
|
1664
|
-
};
|
|
1665
|
-
case "subagent-result": return {
|
|
1666
|
-
kind: "subagent-call",
|
|
1667
|
-
name: result.subagentName,
|
|
1668
|
-
toolName: `eve:subagent:${result.subagentName}`
|
|
1669
|
-
};
|
|
1670
|
-
}
|
|
1671
|
-
}
|
|
1672
1706
|
function optimisticUserMessageId(submissionId) {
|
|
1673
1707
|
return `optimistic:${submissionId}:user`;
|
|
1674
1708
|
}
|
|
1675
|
-
function stringifyUnknown(value) {
|
|
1676
|
-
if (typeof value === "string") return value;
|
|
1677
|
-
try {
|
|
1678
|
-
return JSON.stringify(value);
|
|
1679
|
-
} catch {
|
|
1680
|
-
return "Action failed.";
|
|
1681
|
-
}
|
|
1682
|
-
}
|
|
1683
1709
|
|
|
1684
1710
|
//#endregion
|
|
1685
1711
|
//#region src/vue/use-eve-agent.ts
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createCliTheme,renderCliBanner,renderCliSection}from"#cli/ui/output.js";import{inspectApplication}from"#services/inspect-application.js";function buildApplicationInfoJson(e){let{application:t,compiledState:n,messaging:r}=e;return{appRoot:t.appRoot,agentRoot:n?.project.agentRoot??null,layout:n?.project.layout??null,status:n?.metadata.status??`unavailable`,diagnostics:n?{errors:n.metadata.discovery.summary.errors,warnings:n.metadata.discovery.summary.warnings}:null,model:n?.manifest.config.model.id??null,instructions:n?.manifest.instructions?.logicalPath??null,skills:(n?.manifest.skills??[]).map(e=>e.name),tools:(n?.manifest.tools??[]).map(e=>e.name),channels:(n?.manifest.channels??[]).map(e=>e.kind===`channel`?{name:e.name,kind:e.adapterKind??null,method:e.method,urlPath:e.urlPath}:{name:e.name,kind:`disabled`,method:null,urlPath:null}),messaging:{create:r.createSessionRoutePath,continue:r.continueSessionRoutePattern,stream:r.streamRoutePattern},artifacts:n?{compiledManifest:n.paths.compiledManifestPath,discoveryManifest:n.paths.discoveryManifestPath,diagnostics:n.paths.diagnosticsPath,moduleMap:n.paths.moduleMapPath,metadata:n.paths.compileMetadataPath}:null}}function pluralize(e,t){return`${e} ${t}${e===1?``:`s`}`}function formatDiscoverySummary(e,t){return`${pluralize(e,`error`)}, ${pluralize(t,`warning`)}`}function resolveCompileTone(e){switch(e){case`ready`:return`success`;case`failed`:return`danger`;default:return`warning`}}async function printApplicationInfo(i,a,o={}){let s=await inspectApplication(a);if(o.json){i.log(JSON.stringify(buildApplicationInfoJson(s),null,2));return}let c=s.compiledState,l=s.application,u=createCliTheme(),d=[{label:`App Root`,value:l.appRoot}],f=[{label:`Workflow Build`,value:l.workflowBuildDir},{label:`Output`,value:l.outputDir}],p=[];c===null?d.push({label:`Compile`,tone:`warning`,value:`unavailable`}):(d.push({label:`Agent Root`,value:c.project.agentRoot},{label:`Layout`,value:c.project.layout},{label:`Compile`,tone:resolveCompileTone(c.metadata.status),value:c.metadata.status},{label:`Diagnostics`,tone:c.metadata.discovery.summary.errors>0?`danger`:c.metadata.discovery.summary.warnings>0?`warning`:`success`,value:formatDiscoverySummary(c.metadata.discovery.summary.errors,c.metadata.discovery.summary.warnings)},{label:`Instructions`,value:c.manifest.instructions?.logicalPath??`none`},{label:`Skills`,value:pluralize(c.manifest.skills.length,`skill`)}),f.unshift({label:`Compiled Manifest`,value:c.paths.compiledManifestPath},{label:`Discovery Manifest`,value:c.paths.discoveryManifestPath},{label:`Diagnostics`,value:c.paths.diagnosticsPath},{label:`Module Map`,value:c.paths.moduleMapPath},{label:`Metadata`,value:c.paths.compileMetadataPath}),p.push(c.manifest.instructions===void 0?{label:`Instructions`,value:`No instructions prompt discovered.`}:{label:`Instructions`,value:c.manifest.instructions.logicalPath})),i.log([renderCliBanner(u,{subtitle:`Resolved application paths and the active message contract.`,title:`eve Info`}),``,renderCliSection(u,{rows:d,title:`Application`}),``,renderCliSection(u,{rows:f,title:`Artifacts`}),...c===null?[]:[``,renderCliSection(u,{rows:p,title:`Instructions`})],``,renderCliSection(u,{rows:[{label:`Workflow ID`,value:l.workflowId},{label:`Source Dir`,value:l.workflowSourceDir},{label:`Create`,tone:`info`,value:`POST ${s.messaging.createSessionRoutePath}`},{label:`Continue`,tone:`info`,value:`POST ${s.messaging.continueSessionRoutePattern}`},{label:`Stream`,tone:`info`,value:`GET ${s.messaging.streamRoutePattern}`}],title:`Messaging`})].join(`
|
|
1
|
+
import{createCliTheme,renderCliBanner,renderCliSection}from"#cli/ui/output.js";import{inspectApplication}from"#services/inspect-application.js";function buildApplicationInfoJson(e){let{application:t,compiledState:n,messaging:r}=e;return{appRoot:t.appRoot,agentRoot:n?.project.agentRoot??null,layout:n?.project.layout??null,status:n?.metadata.status??`unavailable`,diagnostics:n?{errors:n.metadata.discovery.summary.errors,warnings:n.metadata.discovery.summary.warnings}:null,model:n?.manifest.config.model.id??null,instructions:n?.manifest.instructions?.logicalPath??null,skills:(n?.manifest.skills??[]).map(e=>e.name),tools:(n?.manifest.tools??[]).map(e=>e.name),subagents:(n?.manifest.subagents??[]).map(e=>e.name),schedules:(n?.manifest.schedules??[]).map(e=>e.name),channels:(n?.manifest.channels??[]).map(e=>e.kind===`channel`?{name:e.name,kind:e.adapterKind??null,method:e.method,urlPath:e.urlPath}:{name:e.name,kind:`disabled`,method:null,urlPath:null}),messaging:{create:r.createSessionRoutePath,continue:r.continueSessionRoutePattern,stream:r.streamRoutePattern},artifacts:n?{compiledManifest:n.paths.compiledManifestPath,discoveryManifest:n.paths.discoveryManifestPath,diagnostics:n.paths.diagnosticsPath,moduleMap:n.paths.moduleMapPath,metadata:n.paths.compileMetadataPath}:null}}function pluralize(e,t){return`${e} ${t}${e===1?``:`s`}`}function formatDiscoverySummary(e,t){return`${pluralize(e,`error`)}, ${pluralize(t,`warning`)}`}function resolveCompileTone(e){switch(e){case`ready`:return`success`;case`failed`:return`danger`;default:return`warning`}}async function printApplicationInfo(i,a,o={}){let s=await inspectApplication(a);if(o.json){i.log(JSON.stringify(buildApplicationInfoJson(s),null,2));return}let c=s.compiledState,l=s.application,u=createCliTheme(),d=[{label:`App Root`,value:l.appRoot}],f=[{label:`Workflow Build`,value:l.workflowBuildDir},{label:`Output`,value:l.outputDir}],p=[];c===null?d.push({label:`Compile`,tone:`warning`,value:`unavailable`}):(d.push({label:`Agent Root`,value:c.project.agentRoot},{label:`Layout`,value:c.project.layout},{label:`Compile`,tone:resolveCompileTone(c.metadata.status),value:c.metadata.status},{label:`Diagnostics`,tone:c.metadata.discovery.summary.errors>0?`danger`:c.metadata.discovery.summary.warnings>0?`warning`:`success`,value:formatDiscoverySummary(c.metadata.discovery.summary.errors,c.metadata.discovery.summary.warnings)},{label:`Instructions`,value:c.manifest.instructions?.logicalPath??`none`},{label:`Skills`,value:pluralize(c.manifest.skills.length,`skill`)},{label:`Subagents`,value:pluralize(c.manifest.subagents.length,`subagent`)},{label:`Schedules`,value:pluralize(c.manifest.schedules.length,`schedule`)}),f.unshift({label:`Compiled Manifest`,value:c.paths.compiledManifestPath},{label:`Discovery Manifest`,value:c.paths.discoveryManifestPath},{label:`Diagnostics`,value:c.paths.diagnosticsPath},{label:`Module Map`,value:c.paths.moduleMapPath},{label:`Metadata`,value:c.paths.compileMetadataPath}),p.push(c.manifest.instructions===void 0?{label:`Instructions`,value:`No instructions prompt discovered.`}:{label:`Instructions`,value:c.manifest.instructions.logicalPath})),i.log([renderCliBanner(u,{subtitle:`Resolved application paths and the active message contract.`,title:`eve Info`}),``,renderCliSection(u,{rows:d,title:`Application`}),``,renderCliSection(u,{rows:f,title:`Artifacts`}),...c===null?[]:[``,renderCliSection(u,{rows:p,title:`Instructions`})],``,renderCliSection(u,{rows:[{label:`Workflow ID`,value:l.workflowId},{label:`Source Dir`,value:l.workflowSourceDir},{label:`Create`,tone:`info`,value:`POST ${s.messaging.createSessionRoutePath}`},{label:`Continue`,tone:`info`,value:`POST ${s.messaging.continueSessionRoutePattern}`},{label:`Stream`,tone:`info`,value:`GET ${s.messaging.streamRoutePattern}`}],title:`Messaging`})].join(`
|
|
2
2
|
`))}export{buildApplicationInfoJson,printApplicationInfo};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { RuntimeActionRequest, RuntimeActionResult } from "#runtime/actions/types.js";
|
|
2
|
+
import type { InputRequest } from "#runtime/input/types.js";
|
|
3
|
+
import type { EveDynamicToolPart, EveMessageInputRequest, EveMessageToolMetadata } from "#client/message-reducer-types.js";
|
|
4
|
+
/**
|
|
5
|
+
* Normalized tool descriptor derived from a runtime action request or result.
|
|
6
|
+
*
|
|
7
|
+
* The default message reducer projects load-skill, subagent, remote-agent, and
|
|
8
|
+
* plain tool calls onto a single `dynamic-tool` UI part; this descriptor is the
|
|
9
|
+
* shared shape those variants collapse to before rendering.
|
|
10
|
+
*/
|
|
11
|
+
export interface ActionDescriptor {
|
|
12
|
+
readonly kind: "load-skill" | "subagent-call" | "tool-call";
|
|
13
|
+
readonly name: string;
|
|
14
|
+
readonly toolName: string;
|
|
15
|
+
}
|
|
16
|
+
/** Projects a runtime input request onto its UI-facing subset. */
|
|
17
|
+
export declare function toMessageInputRequest(request: InputRequest): EveMessageInputRequest;
|
|
18
|
+
/** Builds tool metadata for a freshly projected tool part. */
|
|
19
|
+
export declare function createToolMetadata(descriptor: ActionDescriptor, extra?: {
|
|
20
|
+
readonly inputRequest?: EveMessageInputRequest;
|
|
21
|
+
}): EveMessageToolMetadata;
|
|
22
|
+
/**
|
|
23
|
+
* Merges freshly derived tool metadata over any metadata already attached to a
|
|
24
|
+
* tool part, preferring the new values while preserving earlier request and
|
|
25
|
+
* response context.
|
|
26
|
+
*/
|
|
27
|
+
export declare function mergeToolMetadata(current: EveMessageToolMetadata | undefined, next: EveMessageToolMetadata): EveMessageToolMetadata;
|
|
28
|
+
/**
|
|
29
|
+
* Derives the approved-approval descriptor a resolved tool result carries
|
|
30
|
+
* forward, or `undefined` when the tool part never had an approval.
|
|
31
|
+
*/
|
|
32
|
+
export declare function approvedApproval(part: EveDynamicToolPart | undefined): {
|
|
33
|
+
readonly id: string;
|
|
34
|
+
readonly approved: true;
|
|
35
|
+
readonly reason?: string;
|
|
36
|
+
readonly isAutomatic?: boolean;
|
|
37
|
+
} | undefined;
|
|
38
|
+
/** Maps a runtime action request onto its normalized tool descriptor. */
|
|
39
|
+
export declare function normalizeActionRequest(action: RuntimeActionRequest): ActionDescriptor;
|
|
40
|
+
/** Maps a runtime action result onto its normalized tool descriptor. */
|
|
41
|
+
export declare function normalizeActionResult(result: RuntimeActionResult): ActionDescriptor;
|
|
42
|
+
/** Best-effort string rendering of an unknown tool output for error display. */
|
|
43
|
+
export declare function stringifyUnknown(value: unknown): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function toMessageInputRequest(e){return{allowFreeform:e.allowFreeform,display:e.display,options:e.options,prompt:e.prompt,requestId:e.requestId}}function createToolMetadata(e,t){return{eve:{inputRequest:t?.inputRequest,kind:e.kind,name:e.name}}}function mergeToolMetadata(e,t){let n=t.eve?.kind??e?.eve?.kind??`unknown`,r=t.eve?.name??e?.eve?.name??`unknown`;return{eve:{...e?.eve,...t.eve,inputRequest:t.eve?.inputRequest??e?.eve?.inputRequest,inputResponse:t.eve?.inputResponse??e?.eve?.inputResponse,kind:n,name:r}}}function approvedApproval(e){if(e?.approval?.id)return{approved:!0,id:e.approval.id,isAutomatic:e.approval.isAutomatic,reason:e.approval.reason}}function normalizeActionRequest(e){switch(e.kind){case`load-skill`:return{kind:`load-skill`,name:`load_skill`,toolName:`eve:load-skill`};case`tool-call`:return{kind:`tool-call`,name:e.toolName,toolName:e.toolName};case`subagent-call`:return{kind:`subagent-call`,name:e.subagentName,toolName:`eve:subagent:${e.subagentName}`};case`remote-agent-call`:return{kind:`subagent-call`,name:e.remoteAgentName,toolName:`eve:subagent:${e.remoteAgentName}`}}}function normalizeActionResult(e){switch(e.kind){case`load-skill-result`:return{kind:`load-skill`,name:e.name??`load_skill`,toolName:`eve:load-skill`};case`tool-result`:return{kind:`tool-call`,name:e.toolName,toolName:e.toolName};case`subagent-result`:return{kind:`subagent-call`,name:e.subagentName,toolName:`eve:subagent:${e.subagentName}`}}}function stringifyUnknown(e){if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return`Action failed.`}}export{approvedApproval,createToolMetadata,mergeToolMetadata,normalizeActionRequest,normalizeActionResult,stringifyUnknown,toMessageInputRequest};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createAuthorizationCompletedPart,createAuthorizationRequiredPart}from"#client/authorization-message-parts.js";function defaultMessageReducer(){return{initial(){return{messages:[]}},reduce(e,t){return reduceMessageData(e,t)}}}function reduceMessageData(e,
|
|
1
|
+
import{createAuthorizationCompletedPart,createAuthorizationRequiredPart}from"#client/authorization-message-parts.js";import{approvedApproval,createToolMetadata,mergeToolMetadata,normalizeActionRequest,normalizeActionResult,stringifyUnknown,toMessageInputRequest}from"#client/message-action-parts.js";function defaultMessageReducer(){return{initial(){return{messages:[]}},reduce(e,t){return reduceMessageData(e,t)}}}function reduceMessageData(e,s){switch(s.type){case`client.message.submitted`:return upsertMessage(e,{id:optimisticUserMessageId(s.data.submissionId),metadata:{optimistic:!0,status:`submitted`},parts:[{type:`text`,text:s.data.message}],role:`user`});case`client.message.failed`:return upsertMessage(e,{id:optimisticUserMessageId(s.data.submissionId),metadata:{optimistic:!0,status:`failed`},parts:[{type:`text`,text:s.data.message}],role:`user`});case`client.input.responded`:{let t=e;for(let e of s.data.responses)t=respondToInputRequest(t,e);return t}case`message.received`:return upsertMessage(e,{id:`${s.data.turnId}:user`,metadata:{status:`complete`,turnId:s.data.turnId},parts:projectReceivedParts(s.data.parts,s.data.message),role:`user`});case`step.started`:return updateAssistantMessage(e,s.data.turnId,e=>ensureStepStartPart(e,s.data.stepIndex));case`reasoning.appended`:return updateAssistantMessage(e,s.data.turnId,e=>upsertRun(ensureStepStartPart(e,s.data.stepIndex),{state:`streaming`,stepIndex:s.data.stepIndex,text:s.data.reasoningSoFar,type:`reasoning`}));case`reasoning.completed`:return updateAssistantMessage(e,s.data.turnId,e=>upsertRun(ensureStepStartPart(e,s.data.stepIndex),{state:`done`,stepIndex:s.data.stepIndex,text:s.data.reasoning,type:`reasoning`}));case`actions.requested`:{let t=e;for(let e of s.data.actions){let n=normalizeActionRequest(e);t=updateAssistantMessage(t,s.data.turnId,t=>upsertPart(ensureStepStartPart(t,s.data.stepIndex),{input:`input`in e?e.input:void 0,state:`input-available`,stepIndex:s.data.stepIndex,toolCallId:e.callId,toolMetadata:createToolMetadata(n),toolName:n.toolName,type:`dynamic-tool`}))}return t}case`input.requested`:{let t=e;for(let e of s.data.requests){let n=normalizeActionRequest(e.action);t=updateAssistantMessage(t,s.data.turnId,t=>upsertPart(ensureStepStartPart(t,s.data.stepIndex),{approval:{id:e.requestId},input:e.action.input,state:`approval-requested`,stepIndex:s.data.stepIndex,toolCallId:e.action.callId,toolMetadata:createToolMetadata(n,{inputRequest:toMessageInputRequest(e)}),toolName:n.toolName,type:`dynamic-tool`}))}return t}case`action.result`:{let t=normalizeActionResult(s.data.result),a=findToolPart(e,s.data.result.callId),o=s.data.error?.code===`TOOL_EXECUTION_DENIED`,c=s.data.status===`failed`&&!o,l=a?.approval?.id??s.data.result.callId,u=mergeToolMetadata(a?.toolMetadata,createToolMetadata(t)),d={input:a?.input,stepIndex:s.data.stepIndex,toolCallId:s.data.result.callId,toolMetadata:u,toolName:a?.toolName??t.toolName,type:`dynamic-tool`},f;return f=o?{...d,approval:{approved:!1,id:l,reason:s.data.error?.message},state:`output-denied`}:c?{...d,approval:approvedApproval(a),errorText:s.data.error?.message??stringifyUnknown(s.data.result.output),state:`output-error`}:{...d,approval:approvedApproval(a),output:s.data.result.output,state:`output-available`},a===void 0?updateAssistantMessage(e,s.data.turnId,e=>upsertPart(ensureStepStartPart(e,s.data.stepIndex),f)):updateToolPart(e,s.data.result.callId,f)}case`authorization.required`:return updateAssistantMessage(e,s.data.turnId,e=>upsertPart(ensureStepStartPart(e,s.data.stepIndex),createAuthorizationRequiredPart(s)));case`authorization.completed`:return completeAuthorization(e,s);case`message.appended`:return updateAssistantMessage(e,s.data.turnId,e=>upsertRun(ensureStepStartPart(e,s.data.stepIndex),{state:`streaming`,stepIndex:s.data.stepIndex,text:s.data.messageSoFar,type:`text`}));case`message.completed`:return updateAssistantMessage(e,s.data.turnId,e=>s.data.message===null?removeTextPart(e,s.data.stepIndex):upsertRun(ensureStepStartPart(e,s.data.stepIndex),{state:`done`,stepIndex:s.data.stepIndex,text:s.data.message,type:`text`}));case`result.completed`:return updateAssistantMetadata(e,s.data.turnId,{result:s.data.result});case`turn.completed`:return updateAssistantMetadata(e,s.data.turnId,{status:`complete`});case`turn.cancelled`:return updateAssistantMessage(e,s.data.turnId,e=>({...e,metadata:{...e.metadata,status:`complete`},parts:e.parts.map(e=>(e.type===`text`||e.type===`reasoning`)&&e.state===`streaming`?{...e,state:`done`}:e)}));case`turn.failed`:case`session.failed`:return e;default:return e}}function respondToInputRequest(e,t){let n=findToolPartByApprovalId(e,t.requestId);if(!n)return e;let r={id:t.requestId};return t.text!==void 0&&(r.reason=t.text),updateToolPart(e,n.toolCallId,{approval:r,input:n.input,state:`approval-responded`,stepIndex:n.stepIndex,toolCallId:n.toolCallId,toolMetadata:mergeToolMetadata(n.toolMetadata,{eve:{inputResponse:t,kind:n.toolMetadata?.eve?.kind??`unknown`,name:n.toolMetadata?.eve?.name??n.toolName}}),toolName:n.toolName,type:`dynamic-tool`})}function updateAssistantMessage(e,t,n){return upsertMessage(e,n(e.messages.find(e=>e.role===`assistant`&&e.metadata?.turnId===t)??createAssistantMessage(t)))}function updateAssistantMetadata(e,t,n){return updateAssistantMessage(e,t,e=>({...e,metadata:{...e.metadata,...n}}))}function createAssistantMessage(e){return{id:`${e}:assistant`,metadata:{status:`streaming`,turnId:e},parts:[],role:`assistant`}}function ensureStepStartPart(e,t){let n=e.parts.filter(e=>e.type===`step-start`).length;if(n>t)return e;let r=t-n+1;return{...e,parts:[...e.parts,...Array.from({length:r},()=>({type:`step-start`}))]}}function upsertPart(e,t){let n=e.parts.findIndex(e=>partKey(e)===partKey(t)),r=n===-1?[...e.parts,t]:[...e.parts.slice(0,n),t,...e.parts.slice(n+1)];return{...e,metadata:{...e.metadata,status:t.type===`text`&&t.state===`done`?`complete`:`streaming`},parts:r}}function upsertRun(e,t){let n=-1;for(let r=e.parts.length-1;r>=0;--r){let i=e.parts[r];if(i?.type===t.type&&i.stepIndex===t.stepIndex){n=r;break}}let r=n!==-1&&e.parts[n].state===`streaming`?[...e.parts.slice(0,n),t,...e.parts.slice(n+1)]:[...e.parts,t];return{...e,metadata:{...e.metadata,status:t.type===`text`&&t.state===`done`?`complete`:`streaming`},parts:r}}function removeTextPart(e,t){let n=e.parts.filter(e=>e.type!==`text`||e.stepIndex!==t);return n.length===e.parts.length?e:{...e,metadata:{...e.metadata,status:`complete`},parts:n}}function updateToolPart(e,t,n){let r=e.messages.find(e=>e.role===`assistant`&&e.parts.some(e=>e.type===`dynamic-tool`&&e.toolCallId===t));return r?upsertMessage(e,upsertPart(r,n)):e}function completeAuthorization(t,n){let r=findLatestPendingAuthorizationPart(t,n.data.name),i=createAuthorizationCompletedPart(n,r);return r===void 0?updateAssistantMessage(t,n.data.turnId,e=>upsertPart(ensureStepStartPart(e,n.data.stepIndex),i)):updateAuthorizationPart(t,r,i)}function updateAuthorizationPart(e,t,n){let r=e.messages.find(e=>e.role===`assistant`&&e.parts.some(e=>e===t));return r?upsertMessage(e,upsertPart(r,n)):e}function findToolPart(e,t){for(let n of e.messages)for(let e of n.parts)if(e.type===`dynamic-tool`&&e.toolCallId===t)return e}function findLatestPendingAuthorizationPart(e,t){for(let n=e.messages.length-1;n>=0;--n){let r=e.messages[n];if(r?.role===`assistant`)for(let e=r.parts.length-1;e>=0;--e){let n=r.parts[e];if(n?.type===`authorization`&&n.state===`required`&&n.name===t)return n}}}function findToolPartByApprovalId(e,t){for(let n of e.messages)for(let e of n.parts)if(e.type===`dynamic-tool`&&e.approval?.id===t)return e}function projectReceivedParts(e,t){return e?.map(e=>e.type===`text`?{state:`done`,text:e.text,type:`text`}:{filename:e.filename,mediaType:e.mediaType,size:e.size,type:`file`,url:e.url})??[{state:`done`,text:t,type:`text`}]}function partKey(e){switch(e.type){case`text`:return`text:${e.stepIndex??0}`;case`reasoning`:return`reasoning:${e.stepIndex??0}`;case`file`:return`file:${e.stepIndex??0}:${e.filename??e.url??e.mediaType}`;case`step-start`:return`step-start`;case`authorization`:return`authorization:${e.turnId}:${e.stepIndex}:${e.name}`;case`dynamic-tool`:return`dynamic-tool:${e.toolCallId}`}}function upsertMessage(e,t){let n=e.messages.findIndex(e=>e.id===t.id);return n===-1?{messages:[...e.messages,t]}:{messages:[...e.messages.slice(0,n),t,...e.messages.slice(n+1)]}}function optimisticUserMessageId(e){return`optimistic:${e}:user`}export{defaultMessageReducer};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"moduleVersions": {
|
|
3
3
|
"@ai-sdk/anthropic": "4.0.14",
|
|
4
|
-
"chat": "4.
|
|
5
|
-
"@chat-adapter/slack": "4.
|
|
6
|
-
"@chat-adapter/state-memory": "4.
|
|
7
|
-
"@chat-adapter/twilio": "4.
|
|
4
|
+
"chat": "4.34.0",
|
|
5
|
+
"@chat-adapter/slack": "4.34.0",
|
|
6
|
+
"@chat-adapter/state-memory": "4.34.0",
|
|
7
|
+
"@chat-adapter/twilio": "4.34.0",
|
|
8
8
|
"chokidar": "5.0.0",
|
|
9
9
|
"commander": "14.0.3",
|
|
10
10
|
"experimental-ai-sdk-code-mode": "1.0.16",
|