eve 0.26.0 → 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.
Files changed (129) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/src/chunks/{use-eve-agent-CruinZmd.js → use-eve-agent-AeQLLhu9.js} +118 -92
  3. package/dist/src/chunks/{use-eve-agent-BkztZA0v.js → use-eve-agent-PMY2WkAt.js} +118 -92
  4. package/dist/src/cli/banner.d.ts +5 -0
  5. package/dist/src/cli/banner.js +1 -1
  6. package/dist/src/cli/commands/info.d.ts +2 -0
  7. package/dist/src/cli/commands/info.js +1 -1
  8. package/dist/src/cli/dev/tui/blocks.d.ts +56 -8
  9. package/dist/src/cli/dev/tui/blocks.js +7 -7
  10. package/dist/src/cli/dev/tui/diagnostic-presentation.d.ts +2 -0
  11. package/dist/src/cli/dev/tui/diagnostic-presentation.js +3 -2
  12. package/dist/src/cli/dev/tui/file-content-cache.d.ts +35 -0
  13. package/dist/src/cli/dev/tui/file-content-cache.js +3 -0
  14. package/dist/src/cli/dev/tui/line-diff.d.ts +24 -0
  15. package/dist/src/cli/dev/tui/line-diff.js +1 -0
  16. package/dist/src/cli/dev/tui/markdown.d.ts +2 -1
  17. package/dist/src/cli/dev/tui/markdown.js +7 -3
  18. package/dist/src/cli/dev/tui/prompt-placeholder.d.ts +12 -0
  19. package/dist/src/cli/dev/tui/prompt-placeholder.js +1 -0
  20. package/dist/src/cli/dev/tui/question-panel.d.ts +24 -0
  21. package/dist/src/cli/dev/tui/question-panel.js +1 -0
  22. package/dist/src/cli/dev/tui/rail.d.ts +15 -0
  23. package/dist/src/cli/dev/tui/rail.js +1 -0
  24. package/dist/src/cli/dev/tui/runner.d.ts +22 -65
  25. package/dist/src/cli/dev/tui/runner.js +1 -1
  26. package/dist/src/cli/dev/tui/setup-commands.js +1 -1
  27. package/dist/src/cli/dev/tui/setup-issues.js +1 -1
  28. package/dist/src/cli/dev/tui/status-line.js +1 -1
  29. package/dist/src/cli/dev/tui/stream-format.d.ts +16 -3
  30. package/dist/src/cli/dev/tui/stream-format.js +1 -1
  31. package/dist/src/cli/dev/tui/subagent-pump.d.ts +127 -0
  32. package/dist/src/cli/dev/tui/subagent-pump.js +1 -0
  33. package/dist/src/cli/dev/tui/terminal-renderer.d.ts +34 -1
  34. package/dist/src/cli/dev/tui/terminal-renderer.js +11 -10
  35. package/dist/src/cli/dev/tui/test/mock-terminal.d.ts +7 -0
  36. package/dist/src/cli/dev/tui/test/mock-terminal.js +1 -1
  37. package/dist/src/cli/dev/tui/theme.d.ts +16 -2
  38. package/dist/src/cli/dev/tui/theme.js +1 -1
  39. package/dist/src/cli/dev/tui/todo-panel.d.ts +44 -0
  40. package/dist/src/cli/dev/tui/todo-panel.js +1 -0
  41. package/dist/src/cli/dev/tui/tool-block-groups.d.ts +40 -0
  42. package/dist/src/cli/dev/tui/tool-block-groups.js +1 -0
  43. package/dist/src/cli/dev/tui/tool-presentation.d.ts +67 -0
  44. package/dist/src/cli/dev/tui/tool-presentation.js +1 -0
  45. package/dist/src/cli/dev/tui/tool-rows.d.ts +15 -0
  46. package/dist/src/cli/dev/tui/tool-rows.js +2 -0
  47. package/dist/src/cli/dev/tui/turn-clock.d.ts +36 -0
  48. package/dist/src/cli/dev/tui/turn-clock.js +1 -0
  49. package/dist/src/cli/dev/tui/types.d.ts +2 -2
  50. package/dist/src/cli/dev/ui-options.js +1 -1
  51. package/dist/src/client/index.js +1 -1
  52. package/dist/src/client/message-action-parts.d.ts +43 -0
  53. package/dist/src/client/message-action-parts.js +1 -0
  54. package/dist/src/client/message-reducer.js +1 -1
  55. package/dist/src/client/session.js +1 -1
  56. package/dist/src/compiled/.vendor-stamp.json +6 -5
  57. package/dist/src/compiled/@chat-adapter/slack/blocks.d.ts +47 -2
  58. package/dist/src/compiled/@chat-adapter/slack/blocks.js +10 -8
  59. package/dist/src/compiled/@chat-adapter/slack/index.d.ts +168 -8
  60. package/dist/src/compiled/@chat-adapter/slack/index.js +28 -28
  61. package/dist/src/compiled/@chat-adapter/slack/{types-AntsVifS.d.ts → types-CdGmMyOr.d.ts} +1 -1
  62. package/dist/src/compiled/@chat-adapter/slack/webhook.d.ts +2 -2
  63. package/dist/src/compiled/@chat-adapter/twilio/index.d.ts +1 -1
  64. package/dist/src/compiled/@chat-adapter/twilio/index.js +1 -1
  65. package/dist/src/compiled/@chat-adapter/twilio/webhook.d.ts +2 -2
  66. package/dist/src/compiled/@vercel/sandbox/index.js +12 -12
  67. package/dist/src/compiled/_chunks/node/{auth-Cuszvn7l.js → auth-BuQkq4Gr.js} +2 -2
  68. package/dist/src/compiled/_chunks/node/{dist-CdH_Yoxt.js → dist-BweCayKF.js} +42 -35
  69. package/dist/src/compiled/_chunks/node/{dist-Drt-_JVK.js → dist-DvkWiagq.js} +6 -4
  70. package/dist/src/compiled/chat/index.d.ts +17 -6
  71. package/dist/src/compiled/chat/index.js +1 -1
  72. package/dist/src/compiled/chat/{jsx-runtime-CzthIo1o.d.ts → jsx-runtime-_JEEAotp.d.ts} +125 -5
  73. package/dist/src/compiled/marked/LICENSE.md +44 -0
  74. package/dist/src/compiled/marked/index.d.ts +24 -0
  75. package/dist/src/compiled/marked/index.js +59 -0
  76. package/dist/src/compiler/model-catalog.js +1 -1
  77. package/dist/src/evals/autoevals-client.js +1 -1
  78. package/dist/src/evals/session.js +1 -1
  79. package/dist/src/execution/sandbox/bindings/vercel-credentials.js +1 -1
  80. package/dist/src/execution/sandbox/bindings/vercel-lookup.js +1 -1
  81. package/dist/src/execution/session.d.ts +0 -2
  82. package/dist/src/execution/session.js +1 -1
  83. package/dist/src/execution/skills/instructions.d.ts +3 -3
  84. package/dist/src/execution/skills/instructions.js +2 -2
  85. package/dist/src/execution/terminal-session-failure-step.js +1 -1
  86. package/dist/src/execution/workflow-steps.js +1 -1
  87. package/dist/src/harness/messages.d.ts +7 -0
  88. package/dist/src/harness/messages.js +1 -1
  89. package/dist/src/harness/stale-input-responses.js +2 -2
  90. package/dist/src/harness/tool-loop.js +2 -2
  91. package/dist/src/internal/application/compiled-artifacts.js +9 -3
  92. package/dist/src/internal/application/package.js +1 -1
  93. package/dist/src/internal/gateway.d.ts +19 -0
  94. package/dist/src/internal/gateway.js +1 -0
  95. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response-from-manifest.js +1 -1
  96. package/dist/src/internal/nitro/routes/info.js +1 -1
  97. package/dist/src/internal/resolve-model-endpoint-status.d.ts +46 -3
  98. package/dist/src/internal/resolve-model-endpoint-status.js +1 -1
  99. package/dist/src/internal/user-agent.d.ts +11 -0
  100. package/dist/src/internal/user-agent.js +1 -0
  101. package/dist/src/public/tools/defaults.d.ts +3 -3
  102. package/dist/src/runtime/framework-tools/index.d.ts +3 -2
  103. package/dist/src/runtime/framework-tools/index.js +1 -1
  104. package/dist/src/runtime/framework-tools/skill.d.ts +6 -1
  105. package/dist/src/runtime/framework-tools/skill.js +1 -1
  106. package/dist/src/runtime/resolve-agent-graph.js +1 -1
  107. package/dist/src/setup/boxes/select-model.js +1 -1
  108. package/dist/src/setup/flows/link.d.ts +13 -3
  109. package/dist/src/setup/flows/link.js +1 -1
  110. package/dist/src/setup/flows/model.d.ts +4 -3
  111. package/dist/src/setup/flows/model.js +1 -1
  112. package/dist/src/setup/flows/provider.d.ts +3 -1
  113. package/dist/src/setup/flows/provider.js +2 -2
  114. package/dist/src/setup/gateway-models.js +1 -1
  115. package/dist/src/setup/scaffold/create/project.js +1 -1
  116. package/dist/src/setup/validate-gateway-key.js +1 -1
  117. package/dist/src/svelte/index.js +1 -1
  118. package/dist/src/svelte/use-eve-agent.js +1 -1
  119. package/dist/src/vue/index.js +1 -1
  120. package/dist/src/vue/use-eve-agent.js +1 -1
  121. package/docs/concepts/sessions-runs-and-streaming.md +7 -7
  122. package/docs/reference/cli.md +1 -1
  123. package/docs/schedules.mdx +1 -1
  124. package/docs/skills.mdx +1 -1
  125. package/package.json +6 -5
  126. package/dist/src/execution/sandbox/bindings/vercel-user-agent.d.ts +0 -6
  127. package/dist/src/execution/sandbox/bindings/vercel-user-agent.js +0 -1
  128. package/dist/src/execution/workflow-skill-root.d.ts +0 -6
  129. package/dist/src/execution/workflow-skill-root.js +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
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
+
14
+ ## 0.26.1
15
+
16
+ ### Patch Changes
17
+
18
+ - 1f04ff7: The dev TUI renders Markdown through a real GFM parser (width-fitted tables, code blocks, task lists, links), presents every builtin tool with semantic activity copy (`Fetch <url>`, `Run <command>`, `Search <query>` — including `web_search` across provider input shapes, `todo`, `ask_question`, `agent`, and `connection_search`), and shows rejected tool approvals as denied instead of successful. Tool activity now accumulates in place: an in-flight batch renders as one counted header with its newest calls listed first behind a `│` rail and a `… (N more)` elision, then collapses to a single past-tense line (`▪ Fetched 30 URLs`) once every call settles — failures keep their itemized per-call error rail — and each `write_file` keeps its own block rendering a real line diff (`+`/`-` rows with context, computed from content the session has already seen — prior writes and full-file reads; new files show all additions). `ask_question` prompts open as a numbered overlay panel above the input (number keys select directly, the "Type your own answer" row focuses its inline editor on reach, Esc dismisses to plain text input), committing as `? question ⎿ answer` in the transcript. The `todo` tool no longer emits transcript blocks; it drives a pinned panel above the input showing per-task state, which commits as a completed block once every task settles. An empty prompt now shows a quiet `›` mark with a rotating placeholder of things to try, switching to the active `❯` once typing starts. Reasoning defaults to a fixed one-line thinking indicator that updates in place (persisting as `○ Thought for 12s` only for long thoughts; `--reasoning full` restores the streaming trace), the prompt stays anchored during a turn with Enter inert (the draft carries into the next prompt), and completed turns close with a `└ Done in <duration>` stats coda (per-turn token flow, context fill) when the turn was long or expensive. Subagent calls render as individual `※ subagent(<name>) #N` sections in the tool column whose child rows window to the three most recently active (failures stay itemized while settled work condenses to one counted row) and close on a corner that reports `Done` once the call's final message arrives; captured server output renders as one open-railed `○ stderr` / `○ stdout` stream section per source (streams are continuous — no closing corner, and interleaved activity never fragments them): the section sits at its newest write's position — everything that happened after the last error displays after it — and shows only that newest write, with earlier ones behind an `… (N more)` count (the stored-diagnostics pointer carries the history); the status bar names the model's actual routing and credential (`via ai-gateway(oidc:<project>)`, `via ai-gateway(api-key)`, or `via <provider>⌝` for a directly-authored endpoint); an empty prompt no longer submits; and a mid-conversation session replacement marks the context cut with a `┌── Session restarted, clear context.` boundary line.
19
+
3
20
  ## 0.26.0
4
21
 
5
22
  ### Minor 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) => upsertPart(ensureStepStartPart(message, event.data.stepIndex), {
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) => upsertPart(ensureStepStartPart(message, event.data.stepIndex), {
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) => upsertPart(ensureStepStartPart(message, event.data.stepIndex), {
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 upsertPart(ensureStepStartPart(message, event.data.stepIndex), {
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) => upsertPart(ensureStepStartPart(message, event.data.stepIndex), {
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) => upsertPart(ensureStepStartPart(message, event.data.stepIndex), {
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) => upsertPart(ensureStepStartPart(message, event.data.stepIndex), {
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 upsertPart(ensureStepStartPart(message, event.data.stepIndex), {
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
@@ -5,3 +5,8 @@ export declare const EVE_WORDMARK = "eve";
5
5
  * pre-action hook so commands never compose their own variant.
6
6
  */
7
7
  export declare function eveCliBanner(): string;
8
+ /**
9
+ * The unstyled wordmark-and-version tag (`☰eve v0.24.5`) — the boot banner's
10
+ * plain-text form. The dev TUI dims it as its parting line on teardown.
11
+ */
12
+ export declare function eveVersionTag(): string;
@@ -1 +1 @@
1
- import{__toESM}from"../_virtual/_rolldown/runtime.js";import{require_picocolors}from"../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";var import_picocolors=__toESM(require_picocolors(),1);const EVE_WORDMARK=`eve`;function eveCliBanner(){let{version:e}=resolveInstalledPackageInfo();return`${import_picocolors.default.bgBlack(import_picocolors.default.white(`☰eve `))} ${import_picocolors.default.dim(`v${e}`)}`}export{EVE_WORDMARK,eveCliBanner};
1
+ import{__toESM}from"../_virtual/_rolldown/runtime.js";import{require_picocolors}from"../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";var import_picocolors=__toESM(require_picocolors(),1);const EVE_WORDMARK=`eve`;function eveCliBanner(){let{version:e}=resolveInstalledPackageInfo();return`${import_picocolors.default.bgBlack(import_picocolors.default.white(`☰eve `))} ${import_picocolors.default.dim(`v${e}`)}`}function eveVersionTag(){let{version:e}=resolveInstalledPackageInfo();return`☰eve v${e}`}export{EVE_WORDMARK,eveCliBanner,eveVersionTag};
@@ -21,6 +21,8 @@ export interface ApplicationInfoJson {
21
21
  instructions: string | null;
22
22
  skills: string[];
23
23
  tools: string[];
24
+ subagents: string[];
25
+ schedules: string[];
24
26
  channels: {
25
27
  name: string;
26
28
  kind: string | null;
@@ -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};