@agent-native/core 0.97.0 → 0.98.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.
Files changed (844) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +32 -0
  3. package/corpus/core/docs/content/authentication.mdx +3 -3
  4. package/corpus/core/docs/content/doctor.mdx +170 -0
  5. package/corpus/core/docs/content/external-agents.mdx +8 -7
  6. package/corpus/core/docs/content/locales/ar-SA/authentication.mdx +2 -2
  7. package/corpus/core/docs/content/locales/ar-SA/external-agents.mdx +8 -7
  8. package/corpus/core/docs/content/locales/ar-SA/mcp-protocol.mdx +1 -1
  9. package/corpus/core/docs/content/locales/ar-SA/security.mdx +2 -0
  10. package/corpus/core/docs/content/locales/de-DE/authentication.mdx +1 -1
  11. package/corpus/core/docs/content/locales/de-DE/external-agents.mdx +8 -7
  12. package/corpus/core/docs/content/locales/de-DE/mcp-protocol.mdx +1 -1
  13. package/corpus/core/docs/content/locales/de-DE/security.mdx +2 -0
  14. package/corpus/core/docs/content/locales/es-ES/authentication.mdx +2 -2
  15. package/corpus/core/docs/content/locales/es-ES/external-agents.mdx +8 -7
  16. package/corpus/core/docs/content/locales/es-ES/mcp-protocol.mdx +1 -1
  17. package/corpus/core/docs/content/locales/es-ES/security.mdx +2 -0
  18. package/corpus/core/docs/content/locales/fr-FR/authentication.mdx +1 -1
  19. package/corpus/core/docs/content/locales/fr-FR/external-agents.mdx +8 -7
  20. package/corpus/core/docs/content/locales/fr-FR/mcp-protocol.mdx +1 -1
  21. package/corpus/core/docs/content/locales/fr-FR/security.mdx +2 -0
  22. package/corpus/core/docs/content/locales/hi-IN/authentication.mdx +2 -2
  23. package/corpus/core/docs/content/locales/hi-IN/external-agents.mdx +8 -7
  24. package/corpus/core/docs/content/locales/hi-IN/mcp-protocol.mdx +1 -1
  25. package/corpus/core/docs/content/locales/hi-IN/security.mdx +2 -0
  26. package/corpus/core/docs/content/locales/ja-JP/authentication.mdx +2 -2
  27. package/corpus/core/docs/content/locales/ja-JP/external-agents.mdx +8 -7
  28. package/corpus/core/docs/content/locales/ja-JP/mcp-protocol.mdx +1 -1
  29. package/corpus/core/docs/content/locales/ja-JP/security.mdx +2 -0
  30. package/corpus/core/docs/content/locales/ko-KR/authentication.mdx +2 -2
  31. package/corpus/core/docs/content/locales/ko-KR/external-agents.mdx +8 -7
  32. package/corpus/core/docs/content/locales/ko-KR/mcp-protocol.mdx +1 -1
  33. package/corpus/core/docs/content/locales/ko-KR/security.mdx +2 -0
  34. package/corpus/core/docs/content/locales/pt-BR/authentication.mdx +2 -2
  35. package/corpus/core/docs/content/locales/pt-BR/external-agents.mdx +8 -7
  36. package/corpus/core/docs/content/locales/pt-BR/mcp-protocol.mdx +1 -1
  37. package/corpus/core/docs/content/locales/pt-BR/security.mdx +2 -0
  38. package/corpus/core/docs/content/locales/zh-CN/authentication.mdx +2 -2
  39. package/corpus/core/docs/content/locales/zh-CN/external-agents.mdx +8 -7
  40. package/corpus/core/docs/content/locales/zh-CN/mcp-protocol.mdx +1 -1
  41. package/corpus/core/docs/content/locales/zh-CN/security.mdx +2 -0
  42. package/corpus/core/docs/content/locales/zh-TW/authentication.mdx +2 -2
  43. package/corpus/core/docs/content/locales/zh-TW/external-agents.mdx +8 -7
  44. package/corpus/core/docs/content/locales/zh-TW/mcp-protocol.mdx +1 -1
  45. package/corpus/core/docs/content/locales/zh-TW/security.mdx +2 -0
  46. package/corpus/core/docs/content/mcp-protocol.mdx +1 -1
  47. package/corpus/core/docs/content/security.mdx +2 -0
  48. package/corpus/core/package.json +5 -1
  49. package/corpus/core/scripts/finalize-build.mjs +63 -3
  50. package/corpus/core/scripts/materialize-source-corpus.mjs +101 -15
  51. package/corpus/core/src/action.ts +42 -0
  52. package/corpus/core/src/agent/engine/builder-engine.ts +3 -0
  53. package/corpus/core/src/agent/engine/context-directives-transform.ts +69 -0
  54. package/corpus/core/src/agent/engine/continuation-dispatch-retry.ts +168 -0
  55. package/corpus/core/src/agent/engine/tool-call-journal-seed.ts +85 -0
  56. package/corpus/core/src/agent/production-agent.ts +129 -244
  57. package/corpus/core/src/cli/doctor.ts +9 -3
  58. package/corpus/core/src/cli/plan-local.ts +10 -2
  59. package/corpus/core/src/cli/skills-content/assets-skill.ts +83 -0
  60. package/corpus/core/src/cli/skills-content/canvas.ts +153 -0
  61. package/corpus/core/src/cli/skills-content/connection.ts +52 -0
  62. package/corpus/core/src/cli/skills-content/content-skill.ts +109 -0
  63. package/corpus/core/src/cli/skills-content/design-exploration-skill.ts +118 -0
  64. package/corpus/core/src/cli/skills-content/design-visual-edit-skill.ts +228 -0
  65. package/corpus/core/src/cli/skills-content/document-quality.ts +196 -0
  66. package/corpus/core/src/cli/skills-content/exemplar.ts +69 -0
  67. package/corpus/core/src/cli/skills-content/help.ts +77 -0
  68. package/corpus/core/src/cli/skills-content/index.ts +22 -0
  69. package/corpus/core/src/cli/skills-content/local-files.ts +95 -0
  70. package/corpus/core/src/cli/skills-content/plan-setup-auth.ts +80 -0
  71. package/corpus/core/src/cli/skills-content/visual-plan-skill.ts +470 -0
  72. package/corpus/core/src/cli/skills-content/visual-recap-skill.ts +547 -0
  73. package/corpus/core/src/cli/skills-content/visualize-repo-skill.ts +93 -0
  74. package/corpus/core/src/cli/skills-content/wireframe.ts +349 -0
  75. package/corpus/core/src/cli/skills.ts +27 -2733
  76. package/corpus/core/src/client/AgentPanel.tsx +6 -5
  77. package/corpus/core/src/client/CommandMenu.tsx +16 -5
  78. package/corpus/core/src/client/FeedbackButton.tsx +2 -2
  79. package/corpus/core/src/client/app-providers.tsx +18 -5
  80. package/corpus/core/src/client/chat/tool-call-display.tsx +3 -3
  81. package/corpus/core/src/client/composer/PastedTextChip.tsx +1 -1
  82. package/corpus/core/src/client/composer/RealtimeVoiceMode.tsx +143 -45
  83. package/corpus/core/src/client/composer/TiptapComposer.tsx +1 -1
  84. package/corpus/core/src/client/composer/VoiceButton.tsx +21 -5
  85. package/corpus/core/src/client/composer/useRealtimeVoiceMode.tsx +107 -10
  86. package/corpus/core/src/client/context-xray/ContextXRayPanel.tsx +5 -2
  87. package/corpus/core/src/client/extensions/ExtensionEditor.tsx +37 -4
  88. package/corpus/core/src/client/extensions/ExtensionQueryErrorState.tsx +47 -0
  89. package/corpus/core/src/client/extensions/ExtensionSlot.tsx +39 -10
  90. package/corpus/core/src/client/extensions/ExtensionViewer.tsx +44 -6
  91. package/corpus/core/src/client/extensions/ExtensionsListPage.tsx +12 -3
  92. package/corpus/core/src/client/extensions/ExtensionsSidebarSection.tsx +49 -11
  93. package/corpus/core/src/client/index.ts +0 -13
  94. package/corpus/core/src/client/progress/RunsTray.tsx +10 -3
  95. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +7 -0
  96. package/corpus/core/src/client/settings/useBuilderStatus.ts +6 -0
  97. package/corpus/core/src/client/tool-cells/EditCell.tsx +19 -16
  98. package/corpus/core/src/client/tool-cells/FilesChangedSummary.tsx +26 -23
  99. package/corpus/core/src/client/tool-cells/WriteCell.tsx +19 -16
  100. package/corpus/core/src/client/visual-style-controls.tsx +1 -1
  101. package/corpus/core/src/deploy/build.ts +36 -14
  102. package/corpus/core/src/integrations/google-docs-poller.ts +23 -2
  103. package/corpus/core/src/integrations/plugin.ts +10 -0
  104. package/corpus/core/src/integrations/webhook-handler.ts +27 -2
  105. package/corpus/core/src/jobs/scheduler.ts +28 -2
  106. package/corpus/core/src/localization/default-messages.ts +8 -1
  107. package/corpus/core/src/mcp/oauth-token.ts +6 -1
  108. package/corpus/core/src/observability/routes.ts +36 -0
  109. package/corpus/core/src/observability/sentiment.ts +261 -0
  110. package/corpus/core/src/observability/store.ts +23 -0
  111. package/corpus/core/src/observability/traces.ts +49 -63
  112. package/corpus/core/src/observability/tracking-identity.ts +55 -0
  113. package/corpus/core/src/observability/types.ts +13 -0
  114. package/corpus/core/src/secrets/storage.ts +67 -3
  115. package/corpus/core/src/server/agent-chat/action-filters-a2a.ts +199 -0
  116. package/corpus/core/src/server/agent-chat/browser-team-tools.ts +510 -0
  117. package/corpus/core/src/server/agent-chat/context-tools.ts +595 -0
  118. package/corpus/core/src/server/agent-chat/framework-prompts.ts +470 -0
  119. package/corpus/core/src/server/agent-chat/lazy-fs.ts +11 -0
  120. package/corpus/core/src/server/agent-chat/mcp-glue.ts +91 -0
  121. package/corpus/core/src/server/agent-chat/plugin-options.ts +350 -0
  122. package/corpus/core/src/server/agent-chat/process-run-failure.ts +62 -0
  123. package/corpus/core/src/server/agent-chat/prompt-resources.ts +688 -0
  124. package/corpus/core/src/server/agent-chat/recurring-jobs-runtime.ts +80 -0
  125. package/corpus/core/src/server/agent-chat/request-surface.ts +71 -0
  126. package/corpus/core/src/server/agent-chat/run-code-tools.ts +67 -0
  127. package/corpus/core/src/server/agent-chat/script-entries.ts +779 -0
  128. package/corpus/core/src/server/agent-chat/shared-thread.ts +301 -0
  129. package/corpus/core/src/server/agent-chat/skill-frontmatter.ts +41 -0
  130. package/corpus/core/src/server/agent-chat-plugin.ts +364 -4182
  131. package/corpus/core/src/server/agent-teams.ts +26 -3
  132. package/corpus/core/src/server/auth.ts +55 -57
  133. package/corpus/core/src/server/credential-provider.ts +22 -25
  134. package/corpus/core/src/server/edge.ts +1 -0
  135. package/corpus/core/src/server/onboarding-html.ts +1 -16
  136. package/corpus/core/src/server/realtime-voice.ts +40 -5
  137. package/corpus/core/src/server/request-origin.ts +6 -2
  138. package/corpus/core/src/server/ssr-handler.ts +55 -2
  139. package/corpus/core/src/sharing/access.ts +155 -11
  140. package/corpus/core/src/sharing/registry.ts +7 -0
  141. package/corpus/core/src/styles/agent-native.css +15 -14
  142. package/corpus/core/src/templates/default/.agents/skills/frontend-design/SKILL.md +1 -1
  143. package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +6 -0
  144. package/corpus/core/src/templates/default/app/i18n/de-DE.ts +6 -0
  145. package/corpus/core/src/templates/default/app/i18n/en-US.ts +6 -0
  146. package/corpus/core/src/templates/default/app/i18n/es-ES.ts +6 -0
  147. package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +6 -0
  148. package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +6 -0
  149. package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +6 -0
  150. package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +6 -0
  151. package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +6 -0
  152. package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +6 -0
  153. package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +6 -0
  154. package/corpus/core/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +27 -29
  155. package/corpus/core/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +2 -1
  156. package/corpus/core/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +1 -1
  157. package/corpus/core/src/templates/workspace-core/.agents/skills/observability/SKILL.md +32 -0
  158. package/corpus/core/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +25 -0
  159. package/corpus/core/src/templates/workspace-core/src/server/index.ts +4 -2
  160. package/corpus/core/src/testing.ts +26 -0
  161. package/corpus/core/src/triggers/dispatcher.ts +23 -2
  162. package/corpus/core/src/vite/client.ts +126 -2
  163. package/corpus/core/tsconfig.cli.json +1 -1
  164. package/corpus/core/tsconfig.json +5 -1
  165. package/corpus/templates/analytics/.agents/skills/bigquery/SKILL.md +2 -2
  166. package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +1 -1
  167. package/corpus/templates/analytics/AGENTS.md +19 -6
  168. package/corpus/templates/analytics/actions/install-dashboard-template.ts +79 -43
  169. package/corpus/templates/analytics/actions/list-explorer-dashboards.ts +3 -3
  170. package/corpus/templates/analytics/actions/list-sql-dashboards.ts +8 -3
  171. package/corpus/templates/analytics/actions/rename-analysis.ts +8 -2
  172. package/corpus/templates/analytics/actions/rename-dashboard.ts +8 -7
  173. package/corpus/templates/analytics/actions/view-screen.ts +4 -23
  174. package/corpus/templates/analytics/app/components/ResourceLoadError.tsx +42 -0
  175. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +85 -70
  176. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +107 -89
  177. package/corpus/templates/analytics/app/components/layout/SidebarLoadError.tsx +24 -0
  178. package/corpus/templates/analytics/app/hooks/use-dashboard-views.ts +15 -5
  179. package/corpus/templates/analytics/app/i18n/zh-TW.ts +4 -0
  180. package/corpus/templates/analytics/app/i18n-data.ts +40 -0
  181. package/corpus/templates/analytics/app/pages/Settings.tsx +6 -2
  182. package/corpus/templates/analytics/app/pages/adhoc/explorer/components/SqlPreview.tsx +36 -20
  183. package/corpus/templates/analytics/app/pages/adhoc/explorer/index.tsx +34 -20
  184. package/corpus/templates/analytics/app/pages/adhoc/explorer/use-explorer-config.ts +42 -41
  185. package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +43 -36
  186. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/ViewsMenu.tsx +11 -2
  187. package/corpus/templates/analytics/app/root.tsx +13 -1
  188. package/corpus/templates/analytics/app/routes/_index.tsx +14 -2
  189. package/corpus/templates/analytics/changelog/2026-07-03-agent-llm-observability-dashboard.md +1 -1
  190. package/corpus/templates/analytics/changelog/2026-07-11-agent-feedback-sentiment-dashboard.md +6 -0
  191. package/corpus/templates/analytics/changelog/2026-07-11-analytics-chats-now-start-faster-by-loading-metric-definitio.md +6 -0
  192. package/corpus/templates/analytics/changelog/2026-07-11-command-and-sql-previews-now-respond-without-lag.md +6 -0
  193. package/corpus/templates/analytics/changelog/2026-07-11-command-search-now-reports-loading-failures-and-lets-you-ret.md +6 -0
  194. package/corpus/templates/analytics/changelog/2026-07-11-dashboard-navigation-now-loads-faster-and-reports-request-fa.md +6 -0
  195. package/corpus/templates/analytics/changelog/2026-07-11-inferred-message-sentiment-dashboard.md +6 -0
  196. package/corpus/templates/analytics/changelog/2026-07-11-microphone-settings-from-realtime-voice-mode-now-open-the-vo.md +6 -0
  197. package/corpus/templates/analytics/changelog/2026-07-11-more-dashboard-edit-paths-are-now-safe-against-simultaneous-.md +6 -0
  198. package/corpus/templates/analytics/changelog/2026-07-11-renaming-a-dashboard-is-now-safe-against-simultaneous-agent-.md +6 -0
  199. package/corpus/templates/analytics/changelog/2026-07-11-renaming-an-analysis-is-now-safe-against-simultaneous-edits.md +6 -0
  200. package/corpus/templates/analytics/changelog/2026-07-11-workspace-mounted-analytics-now-opens-ask-reliably-and-route.md +6 -0
  201. package/corpus/templates/analytics/docs/schemas/first-party-analytics.md +37 -3
  202. package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +339 -1
  203. package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +1 -24
  204. package/corpus/templates/analytics/server/lib/dashboard-seeds.ts +0 -5
  205. package/corpus/templates/analytics/server/lib/dashboards-store.ts +289 -20
  206. package/corpus/templates/analytics/server/lib/data-dictionary-context.ts +106 -34
  207. package/corpus/templates/analytics/server/lib/demo-dashboards.ts +4 -1
  208. package/corpus/templates/analytics/server/plugins/agent-chat.ts +11 -39
  209. package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +1 -1
  210. package/corpus/templates/assets/app/components/create/RecentDraftsSection.tsx +30 -4
  211. package/corpus/templates/assets/app/routes/library.tsx +49 -5
  212. package/corpus/templates/assets/changelog/2026-07-11-library-load-failures-now-show-a-retry-action.md +6 -0
  213. package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +1 -1
  214. package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +1 -1
  215. package/corpus/templates/calendar/.env.example +5 -0
  216. package/corpus/templates/calendar/app/components/calendar/EventCard.tsx +2 -2
  217. package/corpus/templates/calendar/app/i18n/zh-TW.ts +2 -0
  218. package/corpus/templates/calendar/app/i18n-data.ts +20 -0
  219. package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +37 -1
  220. package/corpus/templates/calendar/app/pages/BookingsList.tsx +20 -3
  221. package/corpus/templates/calendar/changelog/2026-07-11-booking-load-failures-now-show-a-retry-action.md +6 -0
  222. package/corpus/templates/calendar/changelog/2026-07-11-event-cards-give-subtle-press-feedback-and-smoother-hover.md +6 -0
  223. package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +1 -1
  224. package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +1 -1
  225. package/corpus/templates/clips/actions/decline-invite.ts +8 -0
  226. package/corpus/templates/clips/app/components/library/folder-tree.tsx +209 -187
  227. package/corpus/templates/clips/app/components/meetings/meeting-card.tsx +2 -2
  228. package/corpus/templates/clips/app/components/player/reactions-tray.tsx +17 -5
  229. package/corpus/templates/clips/app/components/player/scrubber.tsx +5 -3
  230. package/corpus/templates/clips/app/components/recorder/pre-record-panel.tsx +2 -2
  231. package/corpus/templates/clips/app/components/workspace/insights-hub.tsx +119 -95
  232. package/corpus/templates/clips/app/global.css +45 -0
  233. package/corpus/templates/clips/app/root.tsx +4 -0
  234. package/corpus/templates/clips/app/routes/_app.notifications.tsx +23 -2
  235. package/corpus/templates/clips/app/routes/_app.trash.tsx +24 -2
  236. package/corpus/templates/clips/changelog/2026-07-11-controls-and-folders-now-move-more-smoothly.md +6 -0
  237. package/corpus/templates/clips/changelog/2026-07-11-declining-an-invitation-now-requires-being-its-recipient.md +6 -0
  238. package/corpus/templates/clips/changelog/2026-07-11-recording-overlays-are-lighter-weight-and-no-longer-cause-pa.md +6 -0
  239. package/corpus/templates/clips/changelog/2026-07-11-workspace-load-failures-now-show-a-retry-action.md +6 -0
  240. package/corpus/templates/clips/chrome-extension/src/overlay.css +34 -5
  241. package/corpus/templates/clips/chrome-extension/src/styles.css +2 -2
  242. package/corpus/templates/clips/desktop/src/styles.css +71 -26
  243. package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +1 -1
  244. package/corpus/templates/content/actions/move-document.ts +34 -18
  245. package/corpus/templates/content/app/components/QueryErrorState.tsx +39 -0
  246. package/corpus/templates/content/app/components/editor/LinkHoverPreview.tsx +1 -1
  247. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +225 -1435
  248. package/corpus/templates/content/app/components/editor/database/GalleryView.tsx +368 -0
  249. package/corpus/templates/content/app/components/editor/database/ListView.tsx +353 -0
  250. package/corpus/templates/content/app/components/editor/database/TimelineView.tsx +580 -0
  251. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +11 -2
  252. package/corpus/templates/content/app/global.css +19 -19
  253. package/corpus/templates/content/app/root.tsx +2 -2
  254. package/corpus/templates/content/app/routes/_app._index.tsx +11 -1
  255. package/corpus/templates/content/changelog/2026-07-11-document-load-failures-now-show-a-retry-action.md +6 -0
  256. package/corpus/templates/content/changelog/2026-07-11-editor-toggle-feedback-now-feels-more-responsive.md +6 -0
  257. package/corpus/templates/content/changelog/2026-07-11-moving-documents-at-the-same-time-no-longer-scrambles-their-.md +6 -0
  258. package/corpus/templates/content/changelog/2026-07-11-public-document-chats-now-start-faster-while-keeping-full-do.md +6 -0
  259. package/corpus/templates/content/changelog/2026-07-11-reopening-a-comment-now-uses-consistent-permissions-everywhe.md +6 -0
  260. package/corpus/templates/content/changelog/2026-07-11-sidebar-resizing-now-tracks-your-cursor-instantly-instead-of.md +6 -0
  261. package/corpus/templates/content/server/lib/public-documents.ts +47 -10
  262. package/corpus/templates/content/server/routes/api/comments/[id].patch.ts +24 -24
  263. package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +1 -1
  264. package/corpus/templates/design/app/components/QueryErrorState.tsx +24 -0
  265. package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +1 -1
  266. package/corpus/templates/design/app/components/design/DesignImportPanel.tsx +5 -2
  267. package/corpus/templates/design/app/components/design/EditPanel.tsx +326 -319
  268. package/corpus/templates/design/app/components/design/LayersPanel.tsx +198 -193
  269. package/corpus/templates/design/app/components/design/edit-panel/panel-primitives.tsx +11 -4
  270. package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +1 -1
  271. package/corpus/templates/design/app/components/layout/Layout.tsx +1 -1
  272. package/corpus/templates/design/app/pages/DesignSystems.tsx +7 -1
  273. package/corpus/templates/design/app/pages/Index.tsx +14 -2
  274. package/corpus/templates/design/app/pages/Present.tsx +16 -3
  275. package/corpus/templates/design/app/pages/Templates.tsx +10 -4
  276. package/corpus/templates/design/app/pages/design-editor/canvas-primitive-insert.ts +484 -0
  277. package/corpus/templates/design/app/pages/design-editor/clone-and-pen-edit.ts +378 -0
  278. package/corpus/templates/design/app/pages/design-editor/design-data-geometry-utils.ts +138 -0
  279. package/corpus/templates/design/app/pages/design-editor/dom-utils.ts +15 -0
  280. package/corpus/templates/design/app/pages/design-editor/generation-prompt-directives.ts +180 -0
  281. package/corpus/templates/design/app/pages/design-editor/html-layer-positioning.ts +226 -0
  282. package/corpus/templates/design/app/pages/design-editor/png-export-render.ts +348 -0
  283. package/corpus/templates/design/app/pages/design-editor/screen-command-utils.ts +160 -0
  284. package/corpus/templates/design/app/pages/design-editor/text-edit-utils.ts +238 -0
  285. package/corpus/templates/design/app/pages/design-editor/tool-state.ts +23 -1
  286. package/corpus/templates/design/app/pages/design-editor/types.ts +25 -0
  287. package/corpus/templates/design/app/root.tsx +10 -1
  288. package/corpus/templates/design/changelog/2026-07-11-canvas-context-menus-now-open-without-motion-jitter.md +6 -0
  289. package/corpus/templates/design/changelog/2026-07-11-design-load-failures-now-show-a-retry-action.md +6 -0
  290. package/corpus/templates/design/changelog/2026-07-11-inspector-tooltips-appear-instantly-as-you-sweep-across-icon.md +6 -0
  291. package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +1 -1
  292. package/corpus/templates/dispatch/app/i18n/zh-TW.ts +10 -0
  293. package/corpus/templates/dispatch/app/i18n-data.ts +123 -0
  294. package/corpus/templates/dispatch/app/routes/integrations.tsx +163 -144
  295. package/corpus/templates/dispatch/changelog/2026-07-11-dispatch-mcp-connections-now-start-with-safer-app-access-and.md +6 -0
  296. package/corpus/templates/dispatch/changelog/2026-07-11-overview-and-chat-now-share-a-cleaner-more-stable-flow.md +6 -0
  297. package/corpus/templates/dispatch/changelog/2026-07-11-query-errors-now-show-a-retry-option.md +6 -0
  298. package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +1 -1
  299. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +3 -3
  300. package/corpus/templates/forms/app/root.tsx +34 -8
  301. package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +1 -1
  302. package/corpus/templates/macros/app/components/DailyProgress.tsx +25 -5
  303. package/corpus/templates/macros/app/components/QueryErrorState.tsx +31 -0
  304. package/corpus/templates/macros/app/components/WeightTracker.tsx +5 -1
  305. package/corpus/templates/macros/app/components/ui/button.tsx +1 -1
  306. package/corpus/templates/macros/app/components/ui/progress.tsx +1 -1
  307. package/corpus/templates/macros/app/components/ui/tabs.tsx +1 -1
  308. package/corpus/templates/macros/app/i18n/ar-SA.ts +2 -0
  309. package/corpus/templates/macros/app/i18n/de-DE.ts +2 -0
  310. package/corpus/templates/macros/app/i18n/en-US.ts +2 -0
  311. package/corpus/templates/macros/app/i18n/es-ES.ts +2 -0
  312. package/corpus/templates/macros/app/i18n/fr-FR.ts +2 -0
  313. package/corpus/templates/macros/app/i18n/hi-IN.ts +2 -0
  314. package/corpus/templates/macros/app/i18n/ja-JP.ts +2 -0
  315. package/corpus/templates/macros/app/i18n/ko-KR.ts +2 -0
  316. package/corpus/templates/macros/app/i18n/pt-BR.ts +2 -0
  317. package/corpus/templates/macros/app/i18n/zh-CN.ts +2 -0
  318. package/corpus/templates/macros/app/i18n/zh-TW.ts +2 -0
  319. package/corpus/templates/macros/app/routes/_index.tsx +22 -12
  320. package/corpus/templates/macros/app/routes/analytics.tsx +31 -10
  321. package/corpus/templates/macros/changelog/2026-07-11-daily-tracking-now-loads-and-updates-more-quickly.md +6 -0
  322. package/corpus/templates/macros/changelog/2026-07-11-data-load-failures-now-show-a-clear-error-with-a-retry-actio.md +6 -0
  323. package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +1 -1
  324. package/corpus/templates/mail/.env.example +16 -11
  325. package/corpus/templates/mail/actions/list-emails.ts +39 -35
  326. package/corpus/templates/mail/app/components/email/ComposeModal.tsx +58 -6
  327. package/corpus/templates/mail/app/components/email/EmailListItem.tsx +35 -2
  328. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +113 -104
  329. package/corpus/templates/mail/app/root.tsx +8 -10
  330. package/corpus/templates/mail/changelog/2026-07-11-compose-and-navigation-motion-now-feel-faster-and-smoother.md +6 -0
  331. package/corpus/templates/mail/changelog/2026-07-11-swipe-to-archive-or-snooze-now-responds-to-quick-flicks-not-.md +6 -0
  332. package/corpus/templates/mail/changelog/2026-07-11-the-assistant-now-sees-the-same-inbox-you-do-snoozed-mail-st.md +6 -0
  333. package/corpus/templates/mail/server/handlers/emails.ts +25 -69
  334. package/corpus/templates/mail/server/lib/list-inbox-emails.ts +169 -0
  335. package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +1 -1
  336. package/corpus/templates/plan/.env.example +4 -0
  337. package/corpus/templates/plan/actions/create-plan-design.ts +89 -81
  338. package/corpus/templates/plan/actions/create-prototype-plan.ts +72 -59
  339. package/corpus/templates/plan/actions/create-ui-plan.ts +70 -55
  340. package/corpus/templates/plan/actions/create-visual-plan.ts +65 -51
  341. package/corpus/templates/plan/actions/update-local-plan-folder.ts +43 -30
  342. package/corpus/templates/plan/actions/update-visual-plan.ts +81 -64
  343. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +17 -0
  344. package/corpus/templates/plan/app/components/ui/tabs.tsx +1 -1
  345. package/corpus/templates/plan/app/i18n/ar-SA.ts +10 -0
  346. package/corpus/templates/plan/app/i18n/de-DE.ts +10 -0
  347. package/corpus/templates/plan/app/i18n/en-US.ts +10 -0
  348. package/corpus/templates/plan/app/i18n/es-ES.ts +10 -0
  349. package/corpus/templates/plan/app/i18n/fr-FR.ts +10 -0
  350. package/corpus/templates/plan/app/i18n/hi-IN.ts +10 -0
  351. package/corpus/templates/plan/app/i18n/ja-JP.ts +10 -0
  352. package/corpus/templates/plan/app/i18n/ko-KR.ts +10 -0
  353. package/corpus/templates/plan/app/i18n/pt-BR.ts +10 -0
  354. package/corpus/templates/plan/app/i18n/zh-CN.ts +10 -0
  355. package/corpus/templates/plan/app/i18n/zh-TW.ts +10 -0
  356. package/corpus/templates/plan/app/lib/plan-local-bridge.ts +80 -1
  357. package/corpus/templates/plan/app/pages/PlansPage.tsx +152 -4
  358. package/corpus/templates/plan/app/root.tsx +11 -0
  359. package/corpus/templates/plan/changelog/2026-07-11-local-plans-now-explain-and-recover-from-browser-permission-.md +6 -0
  360. package/corpus/templates/plan/changelog/2026-07-11-plan-edits-now-save-atomically-and-can-no-longer-partially-a.md +6 -0
  361. package/corpus/templates/plan/changelog/2026-07-11-plan-lists-now-show-a-clear-error-with-a-retry-action-when-t.md +6 -0
  362. package/corpus/templates/plan/shared/plan-content.ts +546 -260
  363. package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +1 -1
  364. package/corpus/templates/slides/actions/delete-slide-comment.ts +49 -0
  365. package/corpus/templates/slides/actions/update-slide-comment.ts +93 -0
  366. package/corpus/templates/slides/actions/view-screen.ts +14 -6
  367. package/corpus/templates/slides/app/components/comments/SlideCommentsPanel.tsx +33 -10
  368. package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +1 -1
  369. package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +1 -1
  370. package/corpus/templates/slides/app/components/editor/GenerateSlidesDialog.tsx +2 -2
  371. package/corpus/templates/slides/app/components/presentation/PresentationView.tsx +4 -2
  372. package/corpus/templates/slides/app/components/visual-editor/CanvasCommentPins.tsx +4 -3
  373. package/corpus/templates/slides/app/context/DeckContext.tsx +9 -0
  374. package/corpus/templates/slides/app/i18n/ar-SA.ts +6 -0
  375. package/corpus/templates/slides/app/i18n/de-DE.ts +6 -0
  376. package/corpus/templates/slides/app/i18n/en-US.ts +6 -0
  377. package/corpus/templates/slides/app/i18n/es-ES.ts +6 -0
  378. package/corpus/templates/slides/app/i18n/fr-FR.ts +6 -0
  379. package/corpus/templates/slides/app/i18n/hi-IN.ts +6 -0
  380. package/corpus/templates/slides/app/i18n/ja-JP.ts +6 -0
  381. package/corpus/templates/slides/app/i18n/ko-KR.ts +6 -0
  382. package/corpus/templates/slides/app/i18n/pt-BR.ts +6 -0
  383. package/corpus/templates/slides/app/i18n/zh-CN.ts +5 -0
  384. package/corpus/templates/slides/app/i18n/zh-TW.ts +5 -0
  385. package/corpus/templates/slides/app/pages/DesignSystems.tsx +23 -2
  386. package/corpus/templates/slides/app/pages/Index.tsx +29 -1
  387. package/corpus/templates/slides/changelog/2026-07-11-comment-load-failures-now-show-a-retry-action-instead-of-say.md +6 -0
  388. package/corpus/templates/slides/changelog/2026-07-11-comment-pins-now-clear-with-a-faster-smoother-confirmation.md +6 -0
  389. package/corpus/templates/slides/changelog/2026-07-11-deck-and-design-system-load-failures-now-show-a-retry-action.md +6 -0
  390. package/corpus/templates/slides/changelog/2026-07-11-editor-toggles-and-toolbar-menus-now-animate-smoothly.md +6 -0
  391. package/corpus/templates/slides/changelog/2026-07-11-the-assistant-can-now-resolve-reopen-and-delete-slide-commen.md +6 -0
  392. package/corpus/templates/slides/changelog/2026-07-11-viewing-slides-no-longer-loads-every-deck-s-full-contents-in.md +6 -0
  393. package/corpus/templates/slides/server/routes/api/comments/[id].delete.ts +29 -48
  394. package/corpus/templates/slides/server/routes/api/comments/[id].patch.ts +29 -65
  395. package/dist/action.d.ts +23 -0
  396. package/dist/action.d.ts.map +1 -1
  397. package/dist/action.js +13 -0
  398. package/dist/action.js.map +1 -1
  399. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  400. package/dist/agent/engine/builder-engine.js +3 -0
  401. package/dist/agent/engine/builder-engine.js.map +1 -1
  402. package/dist/agent/engine/context-directives-transform.d.ts +25 -0
  403. package/dist/agent/engine/context-directives-transform.d.ts.map +1 -0
  404. package/dist/agent/engine/context-directives-transform.js +53 -0
  405. package/dist/agent/engine/context-directives-transform.js.map +1 -0
  406. package/dist/agent/engine/continuation-dispatch-retry.d.ts +40 -0
  407. package/dist/agent/engine/continuation-dispatch-retry.d.ts.map +1 -0
  408. package/dist/agent/engine/continuation-dispatch-retry.js +109 -0
  409. package/dist/agent/engine/continuation-dispatch-retry.js.map +1 -0
  410. package/dist/agent/engine/tool-call-journal-seed.d.ts +46 -0
  411. package/dist/agent/engine/tool-call-journal-seed.d.ts.map +1 -0
  412. package/dist/agent/engine/tool-call-journal-seed.js +60 -0
  413. package/dist/agent/engine/tool-call-journal-seed.js.map +1 -0
  414. package/dist/agent/production-agent.d.ts +7 -0
  415. package/dist/agent/production-agent.d.ts.map +1 -1
  416. package/dist/agent/production-agent.js +102 -222
  417. package/dist/agent/production-agent.js.map +1 -1
  418. package/dist/cli/doctor.d.ts.map +1 -1
  419. package/dist/cli/doctor.js +7 -3
  420. package/dist/cli/doctor.js.map +1 -1
  421. package/dist/cli/plan-local.d.ts.map +1 -1
  422. package/dist/cli/plan-local.js +8 -2
  423. package/dist/cli/plan-local.js.map +1 -1
  424. package/dist/cli/skills-content/assets-skill.d.ts +2 -0
  425. package/dist/cli/skills-content/assets-skill.d.ts.map +1 -0
  426. package/dist/cli/skills-content/assets-skill.js +84 -0
  427. package/dist/cli/skills-content/assets-skill.js.map +1 -0
  428. package/dist/cli/skills-content/canvas.d.ts +4 -0
  429. package/dist/cli/skills-content/canvas.d.ts.map +1 -0
  430. package/dist/cli/skills-content/canvas.js +152 -0
  431. package/dist/cli/skills-content/canvas.js.map +1 -0
  432. package/dist/cli/skills-content/connection.d.ts +2 -0
  433. package/dist/cli/skills-content/connection.d.ts.map +1 -0
  434. package/dist/cli/skills-content/connection.js +53 -0
  435. package/dist/cli/skills-content/connection.js.map +1 -0
  436. package/dist/cli/skills-content/content-skill.d.ts +2 -0
  437. package/dist/cli/skills-content/content-skill.d.ts.map +1 -0
  438. package/dist/cli/skills-content/content-skill.js +110 -0
  439. package/dist/cli/skills-content/content-skill.js.map +1 -0
  440. package/dist/cli/skills-content/design-exploration-skill.d.ts +2 -0
  441. package/dist/cli/skills-content/design-exploration-skill.d.ts.map +1 -0
  442. package/dist/cli/skills-content/design-exploration-skill.js +119 -0
  443. package/dist/cli/skills-content/design-exploration-skill.js.map +1 -0
  444. package/dist/cli/skills-content/design-visual-edit-skill.d.ts +2 -0
  445. package/dist/cli/skills-content/design-visual-edit-skill.d.ts.map +1 -0
  446. package/dist/cli/skills-content/design-visual-edit-skill.js +229 -0
  447. package/dist/cli/skills-content/design-visual-edit-skill.js.map +1 -0
  448. package/dist/cli/skills-content/document-quality.d.ts +4 -0
  449. package/dist/cli/skills-content/document-quality.d.ts.map +1 -0
  450. package/dist/cli/skills-content/document-quality.js +195 -0
  451. package/dist/cli/skills-content/document-quality.js.map +1 -0
  452. package/dist/cli/skills-content/exemplar.d.ts +4 -0
  453. package/dist/cli/skills-content/exemplar.d.ts.map +1 -0
  454. package/dist/cli/skills-content/exemplar.js +68 -0
  455. package/dist/cli/skills-content/exemplar.js.map +1 -0
  456. package/dist/cli/skills-content/help.d.ts +2 -0
  457. package/dist/cli/skills-content/help.d.ts.map +1 -0
  458. package/dist/cli/skills-content/help.js +78 -0
  459. package/dist/cli/skills-content/help.js.map +1 -0
  460. package/dist/cli/skills-content/index.d.ts +23 -0
  461. package/dist/cli/skills-content/index.d.ts.map +1 -0
  462. package/dist/cli/skills-content/index.js +23 -0
  463. package/dist/cli/skills-content/index.js.map +1 -0
  464. package/dist/cli/skills-content/local-files.d.ts +2 -0
  465. package/dist/cli/skills-content/local-files.d.ts.map +1 -0
  466. package/dist/cli/skills-content/local-files.js +96 -0
  467. package/dist/cli/skills-content/local-files.js.map +1 -0
  468. package/dist/cli/skills-content/plan-setup-auth.d.ts +9 -0
  469. package/dist/cli/skills-content/plan-setup-auth.d.ts.map +1 -0
  470. package/dist/cli/skills-content/plan-setup-auth.js +81 -0
  471. package/dist/cli/skills-content/plan-setup-auth.js.map +1 -0
  472. package/dist/cli/skills-content/visual-plan-skill.d.ts +2 -0
  473. package/dist/cli/skills-content/visual-plan-skill.d.ts.map +1 -0
  474. package/dist/cli/skills-content/visual-plan-skill.js +471 -0
  475. package/dist/cli/skills-content/visual-plan-skill.js.map +1 -0
  476. package/dist/cli/skills-content/visual-recap-skill.d.ts +2 -0
  477. package/dist/cli/skills-content/visual-recap-skill.d.ts.map +1 -0
  478. package/dist/cli/skills-content/visual-recap-skill.js +548 -0
  479. package/dist/cli/skills-content/visual-recap-skill.js.map +1 -0
  480. package/dist/cli/skills-content/visualize-repo-skill.d.ts +2 -0
  481. package/dist/cli/skills-content/visualize-repo-skill.d.ts.map +1 -0
  482. package/dist/cli/skills-content/visualize-repo-skill.js +94 -0
  483. package/dist/cli/skills-content/visualize-repo-skill.js.map +1 -0
  484. package/dist/cli/skills-content/wireframe.d.ts +4 -0
  485. package/dist/cli/skills-content/wireframe.d.ts.map +1 -0
  486. package/dist/cli/skills-content/wireframe.js +347 -0
  487. package/dist/cli/skills-content/wireframe.js.map +1 -0
  488. package/dist/cli/skills.d.ts +2 -10
  489. package/dist/cli/skills.d.ts.map +1 -1
  490. package/dist/cli/skills.js +2 -2710
  491. package/dist/cli/skills.js.map +1 -1
  492. package/dist/client/AgentPanel.d.ts.map +1 -1
  493. package/dist/client/AgentPanel.js +4 -2
  494. package/dist/client/AgentPanel.js.map +1 -1
  495. package/dist/client/CommandMenu.d.ts.map +1 -1
  496. package/dist/client/CommandMenu.js +15 -3
  497. package/dist/client/CommandMenu.js.map +1 -1
  498. package/dist/client/FeedbackButton.js +2 -2
  499. package/dist/client/FeedbackButton.js.map +1 -1
  500. package/dist/client/app-providers.d.ts +13 -5
  501. package/dist/client/app-providers.d.ts.map +1 -1
  502. package/dist/client/app-providers.js +9 -6
  503. package/dist/client/app-providers.js.map +1 -1
  504. package/dist/client/chat/tool-call-display.d.ts +4 -0
  505. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  506. package/dist/client/chat/tool-call-display.js +3 -3
  507. package/dist/client/chat/tool-call-display.js.map +1 -1
  508. package/dist/client/composer/PastedTextChip.js +1 -1
  509. package/dist/client/composer/PastedTextChip.js.map +1 -1
  510. package/dist/client/composer/RealtimeVoiceMode.d.ts +3 -1
  511. package/dist/client/composer/RealtimeVoiceMode.d.ts.map +1 -1
  512. package/dist/client/composer/RealtimeVoiceMode.js +35 -14
  513. package/dist/client/composer/RealtimeVoiceMode.js.map +1 -1
  514. package/dist/client/composer/TiptapComposer.js +1 -1
  515. package/dist/client/composer/TiptapComposer.js.map +1 -1
  516. package/dist/client/composer/VoiceButton.d.ts +2 -0
  517. package/dist/client/composer/VoiceButton.d.ts.map +1 -1
  518. package/dist/client/composer/VoiceButton.js +9 -3
  519. package/dist/client/composer/VoiceButton.js.map +1 -1
  520. package/dist/client/composer/useRealtimeVoiceMode.d.ts +5 -0
  521. package/dist/client/composer/useRealtimeVoiceMode.d.ts.map +1 -1
  522. package/dist/client/composer/useRealtimeVoiceMode.js +91 -12
  523. package/dist/client/composer/useRealtimeVoiceMode.js.map +1 -1
  524. package/dist/client/context-xray/ContextXRayPanel.d.ts.map +1 -1
  525. package/dist/client/context-xray/ContextXRayPanel.js +4 -1
  526. package/dist/client/context-xray/ContextXRayPanel.js.map +1 -1
  527. package/dist/client/extensions/ExtensionEditor.d.ts.map +1 -1
  528. package/dist/client/extensions/ExtensionEditor.js +15 -5
  529. package/dist/client/extensions/ExtensionEditor.js.map +1 -1
  530. package/dist/client/extensions/ExtensionQueryErrorState.d.ts +8 -0
  531. package/dist/client/extensions/ExtensionQueryErrorState.d.ts.map +1 -0
  532. package/dist/client/extensions/ExtensionQueryErrorState.js +11 -0
  533. package/dist/client/extensions/ExtensionQueryErrorState.js.map +1 -0
  534. package/dist/client/extensions/ExtensionSlot.d.ts.map +1 -1
  535. package/dist/client/extensions/ExtensionSlot.js +17 -7
  536. package/dist/client/extensions/ExtensionSlot.js.map +1 -1
  537. package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
  538. package/dist/client/extensions/ExtensionViewer.js +17 -7
  539. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  540. package/dist/client/extensions/ExtensionsListPage.d.ts.map +1 -1
  541. package/dist/client/extensions/ExtensionsListPage.js +5 -3
  542. package/dist/client/extensions/ExtensionsListPage.js.map +1 -1
  543. package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -1
  544. package/dist/client/extensions/ExtensionsSidebarSection.js +21 -8
  545. package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
  546. package/dist/client/index.d.ts +0 -2
  547. package/dist/client/index.d.ts.map +1 -1
  548. package/dist/client/index.js +0 -5
  549. package/dist/client/index.js.map +1 -1
  550. package/dist/client/progress/RunsTray.d.ts.map +1 -1
  551. package/dist/client/progress/RunsTray.js +7 -3
  552. package/dist/client/progress/RunsTray.js.map +1 -1
  553. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  554. package/dist/client/settings/SettingsTabsPage.js +4 -0
  555. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  556. package/dist/client/settings/useBuilderStatus.d.ts +2 -0
  557. package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
  558. package/dist/client/settings/useBuilderStatus.js +4 -0
  559. package/dist/client/settings/useBuilderStatus.js.map +1 -1
  560. package/dist/client/tool-cells/EditCell.d.ts.map +1 -1
  561. package/dist/client/tool-cells/EditCell.js +2 -1
  562. package/dist/client/tool-cells/EditCell.js.map +1 -1
  563. package/dist/client/tool-cells/FilesChangedSummary.d.ts.map +1 -1
  564. package/dist/client/tool-cells/FilesChangedSummary.js +2 -1
  565. package/dist/client/tool-cells/FilesChangedSummary.js.map +1 -1
  566. package/dist/client/tool-cells/WriteCell.d.ts.map +1 -1
  567. package/dist/client/tool-cells/WriteCell.js +2 -1
  568. package/dist/client/tool-cells/WriteCell.js.map +1 -1
  569. package/dist/client/visual-style-controls.js +1 -1
  570. package/dist/client/visual-style-controls.js.map +1 -1
  571. package/dist/collab/routes.d.ts +1 -1
  572. package/dist/deploy/build.d.ts.map +1 -1
  573. package/dist/deploy/build.js +36 -14
  574. package/dist/deploy/build.js.map +1 -1
  575. package/dist/integrations/google-docs-poller.d.ts +7 -0
  576. package/dist/integrations/google-docs-poller.d.ts.map +1 -1
  577. package/dist/integrations/google-docs-poller.js +13 -3
  578. package/dist/integrations/google-docs-poller.js.map +1 -1
  579. package/dist/integrations/plugin.d.ts.map +1 -1
  580. package/dist/integrations/plugin.js +10 -0
  581. package/dist/integrations/plugin.js.map +1 -1
  582. package/dist/integrations/webhook-handler.d.ts +11 -0
  583. package/dist/integrations/webhook-handler.d.ts.map +1 -1
  584. package/dist/integrations/webhook-handler.js +16 -4
  585. package/dist/integrations/webhook-handler.js.map +1 -1
  586. package/dist/jobs/scheduler.d.ts +12 -0
  587. package/dist/jobs/scheduler.d.ts.map +1 -1
  588. package/dist/jobs/scheduler.js +13 -3
  589. package/dist/jobs/scheduler.js.map +1 -1
  590. package/dist/localization/default-messages.d.ts +7 -0
  591. package/dist/localization/default-messages.d.ts.map +1 -1
  592. package/dist/localization/default-messages.js +8 -1
  593. package/dist/localization/default-messages.js.map +1 -1
  594. package/dist/mcp/oauth-token.d.ts +1 -1
  595. package/dist/mcp/oauth-token.d.ts.map +1 -1
  596. package/dist/mcp/oauth-token.js +6 -1
  597. package/dist/mcp/oauth-token.js.map +1 -1
  598. package/dist/notifications/routes.d.ts +2 -2
  599. package/dist/observability/routes.d.ts.map +1 -1
  600. package/dist/observability/routes.js +32 -0
  601. package/dist/observability/routes.js.map +1 -1
  602. package/dist/observability/sentiment.d.ts +42 -0
  603. package/dist/observability/sentiment.d.ts.map +1 -0
  604. package/dist/observability/sentiment.js +196 -0
  605. package/dist/observability/sentiment.js.map +1 -0
  606. package/dist/observability/store.d.ts +5 -0
  607. package/dist/observability/store.d.ts.map +1 -1
  608. package/dist/observability/store.js +17 -0
  609. package/dist/observability/store.js.map +1 -1
  610. package/dist/observability/traces.d.ts +2 -0
  611. package/dist/observability/traces.d.ts.map +1 -1
  612. package/dist/observability/traces.js +42 -57
  613. package/dist/observability/traces.js.map +1 -1
  614. package/dist/observability/tracking-identity.d.ts +3 -0
  615. package/dist/observability/tracking-identity.d.ts.map +1 -0
  616. package/dist/observability/tracking-identity.js +51 -0
  617. package/dist/observability/tracking-identity.js.map +1 -0
  618. package/dist/observability/types.d.ts +10 -0
  619. package/dist/observability/types.d.ts.map +1 -1
  620. package/dist/observability/types.js +3 -0
  621. package/dist/observability/types.js.map +1 -1
  622. package/dist/progress/routes.d.ts +1 -1
  623. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  624. package/dist/resources/handlers.d.ts +1 -1
  625. package/dist/secrets/storage.d.ts +6 -0
  626. package/dist/secrets/storage.d.ts.map +1 -1
  627. package/dist/secrets/storage.js +61 -3
  628. package/dist/secrets/storage.js.map +1 -1
  629. package/dist/server/agent-chat/action-filters-a2a.d.ts +50 -0
  630. package/dist/server/agent-chat/action-filters-a2a.d.ts.map +1 -0
  631. package/dist/server/agent-chat/action-filters-a2a.js +127 -0
  632. package/dist/server/agent-chat/action-filters-a2a.js.map +1 -0
  633. package/dist/server/agent-chat/browser-team-tools.d.ts +21 -0
  634. package/dist/server/agent-chat/browser-team-tools.d.ts.map +1 -0
  635. package/dist/server/agent-chat/browser-team-tools.js +417 -0
  636. package/dist/server/agent-chat/browser-team-tools.js.map +1 -0
  637. package/dist/server/agent-chat/context-tools.d.ts +33 -0
  638. package/dist/server/agent-chat/context-tools.d.ts.map +1 -0
  639. package/dist/server/agent-chat/context-tools.js +520 -0
  640. package/dist/server/agent-chat/context-tools.js.map +1 -0
  641. package/dist/server/agent-chat/framework-prompts.d.ts +65 -0
  642. package/dist/server/agent-chat/framework-prompts.d.ts.map +1 -0
  643. package/dist/server/agent-chat/framework-prompts.js +403 -0
  644. package/dist/server/agent-chat/framework-prompts.js.map +1 -0
  645. package/dist/server/agent-chat/lazy-fs.d.ts +2 -0
  646. package/dist/server/agent-chat/lazy-fs.d.ts.map +1 -0
  647. package/dist/server/agent-chat/lazy-fs.js +11 -0
  648. package/dist/server/agent-chat/lazy-fs.js.map +1 -0
  649. package/dist/server/agent-chat/mcp-glue.d.ts +9 -0
  650. package/dist/server/agent-chat/mcp-glue.d.ts.map +1 -0
  651. package/dist/server/agent-chat/mcp-glue.js +63 -0
  652. package/dist/server/agent-chat/mcp-glue.js.map +1 -0
  653. package/dist/server/agent-chat/plugin-options.d.ts +322 -0
  654. package/dist/server/agent-chat/plugin-options.d.ts.map +1 -0
  655. package/dist/server/agent-chat/plugin-options.js +2 -0
  656. package/dist/server/agent-chat/plugin-options.js.map +1 -0
  657. package/dist/server/agent-chat/process-run-failure.d.ts +12 -0
  658. package/dist/server/agent-chat/process-run-failure.d.ts.map +1 -0
  659. package/dist/server/agent-chat/process-run-failure.js +24 -0
  660. package/dist/server/agent-chat/process-run-failure.js.map +1 -0
  661. package/dist/server/agent-chat/prompt-resources.d.ts +28 -0
  662. package/dist/server/agent-chat/prompt-resources.d.ts.map +1 -0
  663. package/dist/server/agent-chat/prompt-resources.js +514 -0
  664. package/dist/server/agent-chat/prompt-resources.js.map +1 -0
  665. package/dist/server/agent-chat/recurring-jobs-runtime.d.ts +5 -0
  666. package/dist/server/agent-chat/recurring-jobs-runtime.d.ts.map +1 -0
  667. package/dist/server/agent-chat/recurring-jobs-runtime.js +53 -0
  668. package/dist/server/agent-chat/recurring-jobs-runtime.js.map +1 -0
  669. package/dist/server/agent-chat/request-surface.d.ts +8 -0
  670. package/dist/server/agent-chat/request-surface.d.ts.map +1 -0
  671. package/dist/server/agent-chat/request-surface.js +56 -0
  672. package/dist/server/agent-chat/request-surface.js.map +1 -0
  673. package/dist/server/agent-chat/run-code-tools.d.ts +17 -0
  674. package/dist/server/agent-chat/run-code-tools.d.ts.map +1 -0
  675. package/dist/server/agent-chat/run-code-tools.js +55 -0
  676. package/dist/server/agent-chat/run-code-tools.js.map +1 -0
  677. package/dist/server/agent-chat/script-entries.d.ts +47 -0
  678. package/dist/server/agent-chat/script-entries.d.ts.map +1 -0
  679. package/dist/server/agent-chat/script-entries.js +633 -0
  680. package/dist/server/agent-chat/script-entries.js.map +1 -0
  681. package/dist/server/agent-chat/shared-thread.d.ts +33 -0
  682. package/dist/server/agent-chat/shared-thread.d.ts.map +1 -0
  683. package/dist/server/agent-chat/shared-thread.js +242 -0
  684. package/dist/server/agent-chat/shared-thread.js.map +1 -0
  685. package/dist/server/agent-chat/skill-frontmatter.d.ts +7 -0
  686. package/dist/server/agent-chat/skill-frontmatter.d.ts.map +1 -0
  687. package/dist/server/agent-chat/skill-frontmatter.js +26 -0
  688. package/dist/server/agent-chat/skill-frontmatter.js.map +1 -0
  689. package/dist/server/agent-chat-plugin.d.ts +45 -486
  690. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  691. package/dist/server/agent-chat-plugin.js +173 -3005
  692. package/dist/server/agent-chat-plugin.js.map +1 -1
  693. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  694. package/dist/server/agent-teams.d.ts +10 -0
  695. package/dist/server/agent-teams.d.ts.map +1 -1
  696. package/dist/server/agent-teams.js +13 -3
  697. package/dist/server/agent-teams.js.map +1 -1
  698. package/dist/server/auth.d.ts.map +1 -1
  699. package/dist/server/auth.js +50 -52
  700. package/dist/server/auth.js.map +1 -1
  701. package/dist/server/credential-provider.d.ts.map +1 -1
  702. package/dist/server/credential-provider.js +22 -21
  703. package/dist/server/credential-provider.js.map +1 -1
  704. package/dist/server/edge.d.ts +1 -0
  705. package/dist/server/edge.d.ts.map +1 -1
  706. package/dist/server/edge.js +1 -0
  707. package/dist/server/edge.js.map +1 -1
  708. package/dist/server/onboarding-html.d.ts.map +1 -1
  709. package/dist/server/onboarding-html.js +1 -16
  710. package/dist/server/onboarding-html.js.map +1 -1
  711. package/dist/server/realtime-voice.d.ts +3 -0
  712. package/dist/server/realtime-voice.d.ts.map +1 -1
  713. package/dist/server/realtime-voice.js +29 -5
  714. package/dist/server/realtime-voice.js.map +1 -1
  715. package/dist/server/request-origin.d.ts.map +1 -1
  716. package/dist/server/request-origin.js +6 -3
  717. package/dist/server/request-origin.js.map +1 -1
  718. package/dist/server/ssr-handler.d.ts.map +1 -1
  719. package/dist/server/ssr-handler.js +47 -2
  720. package/dist/server/ssr-handler.js.map +1 -1
  721. package/dist/sharing/access.d.ts +63 -3
  722. package/dist/sharing/access.d.ts.map +1 -1
  723. package/dist/sharing/access.js +53 -15
  724. package/dist/sharing/access.js.map +1 -1
  725. package/dist/sharing/registry.d.ts +7 -0
  726. package/dist/sharing/registry.d.ts.map +1 -1
  727. package/dist/sharing/registry.js.map +1 -1
  728. package/dist/styles/agent-native.css +15 -14
  729. package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +1 -1
  730. package/dist/templates/default/app/i18n/ar-SA.ts +6 -0
  731. package/dist/templates/default/app/i18n/de-DE.ts +6 -0
  732. package/dist/templates/default/app/i18n/en-US.ts +6 -0
  733. package/dist/templates/default/app/i18n/es-ES.ts +6 -0
  734. package/dist/templates/default/app/i18n/fr-FR.ts +6 -0
  735. package/dist/templates/default/app/i18n/hi-IN.ts +6 -0
  736. package/dist/templates/default/app/i18n/ja-JP.ts +6 -0
  737. package/dist/templates/default/app/i18n/ko-KR.ts +6 -0
  738. package/dist/templates/default/app/i18n/pt-BR.ts +6 -0
  739. package/dist/templates/default/app/i18n/zh-CN.ts +6 -0
  740. package/dist/templates/default/app/i18n/zh-TW.ts +6 -0
  741. package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +27 -29
  742. package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +2 -1
  743. package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +1 -1
  744. package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +32 -0
  745. package/dist/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +25 -0
  746. package/dist/templates/workspace-core/src/server/index.ts +4 -2
  747. package/dist/testing.d.ts +16 -0
  748. package/dist/testing.d.ts.map +1 -0
  749. package/dist/testing.js +16 -0
  750. package/dist/testing.js.map +1 -0
  751. package/dist/triggers/dispatcher.d.ts +7 -0
  752. package/dist/triggers/dispatcher.d.ts.map +1 -1
  753. package/dist/triggers/dispatcher.js +13 -3
  754. package/dist/triggers/dispatcher.js.map +1 -1
  755. package/dist/vite/client.d.ts +16 -1
  756. package/dist/vite/client.d.ts.map +1 -1
  757. package/dist/vite/client.js +105 -2
  758. package/dist/vite/client.js.map +1 -1
  759. package/docs/content/authentication.mdx +3 -3
  760. package/docs/content/doctor.mdx +170 -0
  761. package/docs/content/external-agents.mdx +8 -7
  762. package/docs/content/locales/ar-SA/authentication.mdx +2 -2
  763. package/docs/content/locales/ar-SA/external-agents.mdx +8 -7
  764. package/docs/content/locales/ar-SA/mcp-protocol.mdx +1 -1
  765. package/docs/content/locales/ar-SA/security.mdx +2 -0
  766. package/docs/content/locales/de-DE/authentication.mdx +1 -1
  767. package/docs/content/locales/de-DE/external-agents.mdx +8 -7
  768. package/docs/content/locales/de-DE/mcp-protocol.mdx +1 -1
  769. package/docs/content/locales/de-DE/security.mdx +2 -0
  770. package/docs/content/locales/es-ES/authentication.mdx +2 -2
  771. package/docs/content/locales/es-ES/external-agents.mdx +8 -7
  772. package/docs/content/locales/es-ES/mcp-protocol.mdx +1 -1
  773. package/docs/content/locales/es-ES/security.mdx +2 -0
  774. package/docs/content/locales/fr-FR/authentication.mdx +1 -1
  775. package/docs/content/locales/fr-FR/external-agents.mdx +8 -7
  776. package/docs/content/locales/fr-FR/mcp-protocol.mdx +1 -1
  777. package/docs/content/locales/fr-FR/security.mdx +2 -0
  778. package/docs/content/locales/hi-IN/authentication.mdx +2 -2
  779. package/docs/content/locales/hi-IN/external-agents.mdx +8 -7
  780. package/docs/content/locales/hi-IN/mcp-protocol.mdx +1 -1
  781. package/docs/content/locales/hi-IN/security.mdx +2 -0
  782. package/docs/content/locales/ja-JP/authentication.mdx +2 -2
  783. package/docs/content/locales/ja-JP/external-agents.mdx +8 -7
  784. package/docs/content/locales/ja-JP/mcp-protocol.mdx +1 -1
  785. package/docs/content/locales/ja-JP/security.mdx +2 -0
  786. package/docs/content/locales/ko-KR/authentication.mdx +2 -2
  787. package/docs/content/locales/ko-KR/external-agents.mdx +8 -7
  788. package/docs/content/locales/ko-KR/mcp-protocol.mdx +1 -1
  789. package/docs/content/locales/ko-KR/security.mdx +2 -0
  790. package/docs/content/locales/pt-BR/authentication.mdx +2 -2
  791. package/docs/content/locales/pt-BR/external-agents.mdx +8 -7
  792. package/docs/content/locales/pt-BR/mcp-protocol.mdx +1 -1
  793. package/docs/content/locales/pt-BR/security.mdx +2 -0
  794. package/docs/content/locales/zh-CN/authentication.mdx +2 -2
  795. package/docs/content/locales/zh-CN/external-agents.mdx +8 -7
  796. package/docs/content/locales/zh-CN/mcp-protocol.mdx +1 -1
  797. package/docs/content/locales/zh-CN/security.mdx +2 -0
  798. package/docs/content/locales/zh-TW/authentication.mdx +2 -2
  799. package/docs/content/locales/zh-TW/external-agents.mdx +8 -7
  800. package/docs/content/locales/zh-TW/mcp-protocol.mdx +1 -1
  801. package/docs/content/locales/zh-TW/security.mdx +2 -0
  802. package/docs/content/mcp-protocol.mdx +1 -1
  803. package/docs/content/security.mdx +2 -0
  804. package/package.json +6 -2
  805. package/src/templates/default/.agents/skills/frontend-design/SKILL.md +1 -1
  806. package/src/templates/default/app/i18n/ar-SA.ts +6 -0
  807. package/src/templates/default/app/i18n/de-DE.ts +6 -0
  808. package/src/templates/default/app/i18n/en-US.ts +6 -0
  809. package/src/templates/default/app/i18n/es-ES.ts +6 -0
  810. package/src/templates/default/app/i18n/fr-FR.ts +6 -0
  811. package/src/templates/default/app/i18n/hi-IN.ts +6 -0
  812. package/src/templates/default/app/i18n/ja-JP.ts +6 -0
  813. package/src/templates/default/app/i18n/ko-KR.ts +6 -0
  814. package/src/templates/default/app/i18n/pt-BR.ts +6 -0
  815. package/src/templates/default/app/i18n/zh-CN.ts +6 -0
  816. package/src/templates/default/app/i18n/zh-TW.ts +6 -0
  817. package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +27 -29
  818. package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +2 -1
  819. package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +1 -1
  820. package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +32 -0
  821. package/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +25 -0
  822. package/src/templates/workspace-core/src/server/index.ts +4 -2
  823. package/corpus/core/src/client/ProductionAgentPanel.tsx +0 -9
  824. package/corpus/core/src/client/auth-redirect-url.ts +0 -23
  825. package/corpus/core/src/client/useProductionAgent.ts +0 -253
  826. package/corpus/core/src/shared/auth-redirect-url.ts +0 -1
  827. package/corpus/templates/analytics/app/pages/Index.tsx +0 -16
  828. package/corpus/templates/analytics/seeds/dashboards/agent-observability-llm.json +0 -173
  829. package/dist/client/ProductionAgentPanel.d.ts +0 -6
  830. package/dist/client/ProductionAgentPanel.d.ts.map +0 -1
  831. package/dist/client/ProductionAgentPanel.js +0 -6
  832. package/dist/client/ProductionAgentPanel.js.map +0 -1
  833. package/dist/client/auth-redirect-url.d.ts +0 -2
  834. package/dist/client/auth-redirect-url.d.ts.map +0 -1
  835. package/dist/client/auth-redirect-url.js +0 -19
  836. package/dist/client/auth-redirect-url.js.map +0 -1
  837. package/dist/client/useProductionAgent.d.ts +0 -24
  838. package/dist/client/useProductionAgent.d.ts.map +0 -1
  839. package/dist/client/useProductionAgent.js +0 -179
  840. package/dist/client/useProductionAgent.js.map +0 -1
  841. package/dist/shared/auth-redirect-url.d.ts +0 -2
  842. package/dist/shared/auth-redirect-url.d.ts.map +0 -1
  843. package/dist/shared/auth-redirect-url.js +0 -2
  844. package/dist/shared/auth-redirect-url.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-entries.js","sourceRoot":"","sources":["../../../src/server/agent-chat/script-entries.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ActionEntry } from \"../../agent/production-agent.js\";\nimport type { ActionTool } from \"../../agent/types.js\";\nimport {\n renameThread,\n resolveThreadAccess,\n setThreadArchived,\n setThreadPinned,\n} from \"../../chat-threads/store.js\";\nimport type { DatabaseToolsMode } from \"../../scripts/db/tool-mode.js\";\nimport { dbExecToolParameters } from \"../../scripts/db/tool-schemas.js\";\nimport { captureCliOutput } from \"../cli-capture.js\";\nimport {\n getRequestOrgId,\n getRequestRunContext,\n getRequestUserEmail,\n} from \"../request-context.js\";\n\n// ---------------------------------------------------------------------------\n// CLI-script-backed action entries: db-*, docs-search/source-search,\n// resources/save-memory/delete-memory, chat-history, manage-agent-engine,\n// manage-agent-loop-settings, and call-agent. Each wraps a core CLI script\n// (that writes to console.log) as an ActionEntry via `wrapCliScript`.\n// ---------------------------------------------------------------------------\n\n/**\n * Wraps a core CLI script (that writes to console.log) as a ActionEntry\n * by capturing stdout. Uses an AsyncLocalStorage-backed capture so\n * concurrent tool calls do not corrupt the global console/stdout pointers\n * (see `cli-capture.ts`).\n */\nfunction wrapCliScript(\n tool: ActionTool,\n cliDefault: (args: string[]) => Promise<void>,\n opts?: { readOnly?: boolean },\n): ActionEntry {\n return {\n tool,\n ...(opts?.readOnly ? { readOnly: true as const } : {}),\n run: async (args: Record<string, string>): Promise<string> => {\n const cliArgs: string[] = [];\n for (const [k, v] of Object.entries(args)) {\n const raw = v as unknown;\n const value =\n raw != null && typeof raw === \"object\"\n ? JSON.stringify(raw)\n : String(raw);\n cliArgs.push(`--${k}`, value);\n }\n return captureCliOutput(() => cliDefault(cliArgs));\n },\n };\n}\n\n/**\n * Creates db-* tools (db-query, db-exec, db-patch, db-schema) as native tools.\n * By default these let the agent inspect the app's own SQL database; raw SQL\n * writes are only exposed when the app explicitly opts into write mode.\n * Scoping to the current user/org is enforced automatically in production via\n * temp views.\n *\n * In dev mode template actions are invoked via bash and the agent can call\n * `pnpm action db-query ...` — but in production there is no bash, so these\n * must be registered as native tools for the agent to reach the app DB at all.\n */\nexport async function createDbScriptEntries(\n mode: DatabaseToolsMode = \"read\",\n options: { extensionTools?: boolean } = {},\n): Promise<Record<string, ActionEntry>> {\n try {\n if (mode === \"off\") return {};\n const extensionQueryGuidance =\n options.extensionTools === false\n ? \"Extension management tools are disabled for this app; do not query or mutate the legacy tools table as a workaround.\"\n : \"For extension management, use list-extensions, update-extension, hide-extension, or delete-extension instead of querying the legacy tools table.\";\n const [schemaMod, queryMod] = await Promise.all([\n import(\"../../scripts/db/schema.js\"),\n import(\"../../scripts/db/query.js\"),\n ]);\n const [execMod, patchMod] =\n mode === \"write\"\n ? await Promise.all([\n import(\"../../scripts/db/exec.js\"),\n import(\"../../scripts/db/patch.js\"),\n ])\n : [null, null];\n\n const entries: Record<string, ActionEntry> = {\n \"db-schema\": wrapCliScript(\n {\n description:\n \"Show the app's SQL schema — all tables, columns, types, indexes, and foreign keys. Use this to understand the data model before querying.\",\n parameters: {\n type: \"object\",\n properties: {\n format: {\n type: \"string\",\n description: 'Output format: \"json\" or \"text\" (default: text)',\n enum: [\"json\", \"text\"],\n },\n },\n },\n },\n schemaMod.default,\n { readOnly: true },\n ),\n \"db-query\": wrapCliScript(\n {\n description: `Read from the app's own SQL database ONLY. Runs a SELECT against the app's internal tables (settings, application_state, template tables). Results are auto-scoped to the current user/org. IMPORTANT: This tool CANNOT access external data sources like data warehouses, CRMs, issue trackers, analytics platforms, calendars, mail, docs, or other third-party services. For those, use the relevant template/provider action, MCP connector, or provider-api-catalog/provider-api-docs/provider-api-request when available. If the user names a provider, that named provider wins; do not substitute a warehouse or app database copy unless they explicitly ask for it. If a table isn't in the app schema, don't try db-query — use the data-source-specific action. ${extensionQueryGuidance}`,\n parameters: {\n type: \"object\",\n properties: {\n sql: {\n type: \"string\",\n description:\n \"SELECT query to run, e.g. \\\"SELECT key, value FROM settings WHERE key LIKE 'sql-dashboard-%'\\\"\",\n },\n args: {\n type: \"string\",\n description:\n 'Optional JSON array of positional bind args for parameterized placeholders. Example: \\'[\"draft\",\"form-123\"]\\'',\n },\n format: {\n type: \"string\",\n description: 'Output format: \"json\" or \"text\" (default: text)',\n enum: [\"json\", \"text\"],\n },\n limit: {\n type: \"string\",\n description:\n \"Append LIMIT N if the query doesn't already have one\",\n },\n },\n required: [\"sql\"],\n },\n },\n queryMod.default,\n { readOnly: true },\n ),\n };\n\n if (execMod && patchMod) {\n entries[\"db-exec\"] = wrapCliScript(\n {\n description:\n \"Write to the app's own SQL database ONLY. Runs INSERT / UPDATE / DELETE / REPLACE against the app's internal tables. For multiple related writes, pass `statements` so they run sequentially in one transaction instead of issuing several db-exec calls. Writes are auto-scoped to the current user/org, and `owner_email` / `org_id` are auto-injected on INSERT. Schema changes (CREATE/ALTER/DROP) are blocked. Never use this to backfill missing data for a read/analysis request or to create/modify users, members, roles, permissions, admin flags, or ownership; use a dedicated app action or reviewed code. IMPORTANT: This tool CANNOT write to external data sources like BigQuery, HubSpot, etc. For external services, use the appropriate template action.\",\n parameters: dbExecToolParameters(),\n },\n execMod.default,\n );\n entries[\"db-patch\"] = wrapCliScript(\n {\n description:\n \"Surgical patch on a large text/JSON column in the app's SQL database. Two modes: (1) text find/replace via `find`/`replace`/`edits` — best for small edits to documents, slide HTML, etc. (2) structural JSON ops via `json-ops` — STRONGLY PREFERRED when the column is JSON (dashboard configs, form schemas, slide decks) because it avoids all the brace/quote/comma surgery that text find/replace requires. Use `json-ops` to set/remove values at a JSON Pointer path, or to move/insert array items — e.g. reorder dashboard panels, add a filter, rename a field. Targets exactly one row (narrow `where` by primary key). Same per-user/org scoping as db-exec.\",\n parameters: {\n type: \"object\",\n properties: {\n table: {\n type: \"string\",\n description: \"Table name (e.g. 'settings')\",\n },\n column: {\n type: \"string\",\n description:\n \"Text/JSON column to patch (e.g. 'value' for settings)\",\n },\n where: {\n type: \"string\",\n description:\n \"WHERE clause that matches exactly one row (e.g. \\\"key = 'o:org1:sql-dashboard-foo'\\\")\",\n },\n find: {\n type: \"string\",\n description:\n \"Text mode: substring to find. Must match EXACTLY ONE occurrence by default (like Claude Code's Edit tool). If 0 matches, you get 'NOT FOUND'. If >1 matches, you get surrounding context for each match — widen `find` with unique context and retry. Use `all: \\\"true\\\"` to replace every occurrence.\",\n },\n replace: {\n type: \"string\",\n description: \"Text mode: replacement substring\",\n },\n edits: {\n type: \"string\",\n description:\n 'Text mode batch: JSON array of {find, replace} pairs. Same uniqueness rule applies to each `find`. Example: \\'[{\"find\":\"a\",\"replace\":\"b\"}]\\'',\n },\n \"json-ops\": {\n type: \"string\",\n description:\n 'JSON mode: JSON array of structural ops. Each op is {op, path, value?, from?}. `op` is one of \"set\", \"remove\", \"insert\", \"move\", \"move-before\". `path` / `from` use JSON Pointer (\"/panels/3/title\"). Examples — reorder: \\'[{\"op\":\"move\",\"from\":\"/panels/7\",\"path\":\"/panels/1\"}]\\'; edit field: \\'[{\"op\":\"set\",\"path\":\"/panels/0/title\",\"value\":\"New\"}]\\'; delete filter: \\'[{\"op\":\"remove\",\"path\":\"/filters/2\"}]\\'; add panel: \\'[{\"op\":\"insert\",\"path\":\"/panels/0\",\"value\":{\"id\":\"p\",\"title\":\"...\"}}]\\'. Much safer than text find/replace for JSON columns.',\n },\n all: {\n type: \"string\",\n description:\n 'Text mode: set to \"true\" to replace every occurrence of each `find` (default requires exactly one match)',\n enum: [\"true\"],\n },\n },\n required: [\"table\", \"column\", \"where\"],\n },\n },\n patchMod.default,\n );\n }\n\n return entries;\n } catch {\n return {};\n }\n}\n\n/**\n * Creates read-only package lookup tools so agents can inspect version-matched\n * framework docs and source bundled in @agent-native/core at runtime.\n */\nexport async function createDocsScriptEntries(): Promise<\n Record<string, ActionEntry>\n> {\n const entries: Record<string, ActionEntry> = {};\n\n try {\n const mod = await import(\"../../scripts/docs/search.js\");\n entries[\"docs-search\"] = wrapCliScript(\n {\n description:\n \"Search and read agent-native framework documentation, bundled AGENTS.md, and codebase skills. Use --list to see all pages, --query to search, --slug to read a specific page. Codebase skill pages use slugs like skill-<name>.\",\n parameters: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description:\n \"Search term to find relevant docs (e.g. 'actions', 'authentication', 'database')\",\n },\n slug: {\n type: \"string\",\n description:\n \"Read a specific doc page by slug (e.g. 'actions', 'authentication', 'database')\",\n },\n list: {\n type: \"string\",\n description: 'Set to \"true\" to list all available doc pages',\n enum: [\"true\"],\n },\n },\n },\n },\n mod.default,\n { readOnly: true },\n );\n } catch {\n // Keep source-search available if docs-search fails during a partial build.\n }\n\n try {\n const mod = await import(\"../../scripts/docs/source-search.js\");\n entries[\"source-search\"] = wrapCliScript(\n {\n description:\n \"Search and read the packaged Agent Native source corpus under node_modules/@agent-native/core/corpus. Use --list for sections, --query to search core/template source, and --path to read a file.\",\n parameters: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description:\n \"Search term to find relevant core or template source (e.g. 'defineAction', 'useActionQuery', 'view-screen').\",\n },\n path: {\n type: \"string\",\n description:\n \"Read a specific corpus file or list a directory (e.g. 'templates/plan/AGENTS.md' or 'core/src/action.ts').\",\n },\n list: {\n type: \"string\",\n description: 'Set to \"true\" to list corpus sections',\n enum: [\"true\"],\n },\n },\n },\n },\n mod.default,\n { readOnly: true },\n );\n } catch {\n // Older package installs may not have the corpus/search script yet.\n }\n\n return entries;\n}\n\n/**\n * Creates resource ScriptEntries available in both prod and dev modes.\n */\nexport function shouldDefaultResourceWriteToWorkspace(path: string): boolean {\n const normalized = path.replace(/^\\/+/, \"\");\n return (\n normalized === \"AGENTS.md\" ||\n normalized === \"LEARNINGS.md\" ||\n normalized.startsWith(\"memory/\") ||\n normalized.startsWith(\"skills/\") ||\n normalized.startsWith(\"jobs/\") ||\n normalized.startsWith(\"agents/\") ||\n normalized.startsWith(\"remote-agents/\")\n );\n}\n\nexport async function createResourceScriptEntries(): Promise<\n Record<string, ActionEntry>\n> {\n try {\n const [list, read, effective, write, del, saveMem, delMem, store] =\n await Promise.all([\n import(\"../../scripts/resources/list.js\"),\n import(\"../../scripts/resources/read.js\"),\n import(\"../../scripts/resources/effective.js\"),\n import(\"../../scripts/resources/write.js\"),\n import(\"../../scripts/resources/delete.js\"),\n import(\"../../scripts/resources/save-memory.js\"),\n import(\"../../scripts/resources/delete-memory.js\"),\n import(\"../../resources/store.js\"),\n ]);\n\n // Wrap each CLI runner so it captures stdout and converts args properly\n const listEntry = wrapCliScript(\n {\n description: \"\",\n parameters: { type: \"object\" as const, properties: {} },\n },\n list.default,\n { readOnly: true },\n );\n const readEntry = wrapCliScript(\n {\n description: \"\",\n parameters: { type: \"object\" as const, properties: {} },\n },\n read.default,\n { readOnly: true },\n );\n const writeEntry = wrapCliScript(\n {\n description: \"\",\n parameters: { type: \"object\" as const, properties: {} },\n },\n write.default,\n );\n const effectiveEntry = wrapCliScript(\n {\n description: \"\",\n parameters: { type: \"object\" as const, properties: {} },\n },\n effective.default,\n { readOnly: true },\n );\n const deleteEntry = wrapCliScript(\n {\n description: \"\",\n parameters: { type: \"object\" as const, properties: {} },\n },\n del.default,\n );\n\n return {\n resources: {\n tool: {\n description:\n 'Manage workspace resources. Actions: \"list\" (browse visible files), \"read\" (get contents), \"effective\" (show workspace -> organization/app -> personal inheritance for a path), \"write\" (create/update personal or shared; workspace only for local file mode control files), \"promote\" (make agent scratch visible), \"delete\" (remove personal or shared; workspace only for local file mode control files). Agent scratch writes are hidden from the Workspace view by default; use visibility=\"workspace\" only for files the user explicitly wants to keep/manage.',\n parameters: {\n type: \"object\",\n properties: {\n action: {\n type: \"string\",\n description: \"The operation to perform\",\n enum: [\n \"list\",\n \"read\",\n \"effective\",\n \"write\",\n \"promote\",\n \"delete\",\n ],\n },\n path: {\n type: \"string\",\n description:\n \"Resource path (e.g. 'LEARNINGS.md', 'notes/ideas.md'). Required for read/write/delete.\",\n },\n content: {\n type: \"string\",\n description: \"Content to write. Required for write.\",\n },\n scope: {\n type: \"string\",\n description:\n \"personal, shared, workspace, or all (default varies by action). Workspace is read-only when inherited from Dispatch; in local file mode AGENTS.md, agent-native.json, mcp.config.json, .mcp.json, and skills/ are writable.\",\n enum: [\"personal\", \"shared\", \"workspace\", \"all\"],\n },\n prefix: {\n type: \"string\",\n description:\n \"Filter by path prefix when listing (e.g. 'notes/')\",\n },\n mime: {\n type: \"string\",\n description:\n \"MIME type for write (default: inferred from extension)\",\n },\n format: {\n type: \"string\",\n description:\n 'Output format for list: \"json\" or \"text\" (default: text)',\n enum: [\"json\", \"text\"],\n },\n visibility: {\n type: \"string\",\n description:\n 'Visibility for write: \"agent_scratch\" for internal working files, \"workspace\" for user-requested files. Defaults to agent_scratch except durable instruction/skill/job/memory paths.',\n enum: [\"workspace\", \"agent_scratch\"],\n },\n includeAgentScratch: {\n type: \"boolean\",\n description: \"Include hidden agent scratch files when listing.\",\n },\n },\n required: [\"action\"],\n },\n },\n run: async (args: Record<string, string>) => {\n const { action: a, ...rest } = args;\n if (a === \"list\") return listEntry.run(rest);\n if (a === \"read\") {\n if (!rest.path) return \"Error: path is required for read\";\n return readEntry.run(rest);\n }\n if (a === \"effective\") {\n if (!rest.path) return \"Error: path is required for effective\";\n return effectiveEntry.run(rest);\n }\n if (a === \"write\") {\n if (\n !rest.path ||\n rest.content === undefined ||\n rest.content === null\n )\n return \"Error: path and content are required for write\";\n rest.createdBy = \"agent\";\n rest.visibility =\n rest.visibility ??\n (shouldDefaultResourceWriteToWorkspace(String(rest.path))\n ? \"workspace\"\n : \"agent_scratch\");\n const runCtx = getRequestRunContext();\n if (runCtx?.threadId) rest.threadId = runCtx.threadId;\n return writeEntry.run(rest);\n }\n if (a === \"promote\") {\n if (!rest.path) return \"Error: path is required for promote\";\n const scope = rest.scope ?? \"personal\";\n if (scope === \"workspace\" || scope === \"all\") {\n return \"Error: promote supports personal or shared scope only\";\n }\n const owner =\n scope === \"shared\"\n ? store.sharedResourceOwner(getRequestOrgId())\n : (getRequestRunContext()?.owner ??\n getRequestUserEmail() ??\n process.env.AGENT_USER_EMAIL);\n if (!owner) {\n return \"Error: promote requires an authenticated user\";\n }\n const resource = await store.resourceGetByPath(\n owner,\n String(rest.path),\n );\n if (!resource) {\n return `Resource not found: ${rest.path}`;\n }\n const promoted = await store.resourcePut(\n owner,\n resource.path,\n resource.content,\n resource.mimeType,\n {\n createdBy: resource.createdBy,\n visibility: \"workspace\",\n threadId: resource.threadId,\n runId: resource.runId,\n expiresAt: null,\n metadata: resource.metadata,\n },\n );\n return `Promoted resource: ${promoted.path}`;\n }\n if (a === \"delete\") {\n if (!rest.path) return \"Error: path is required for delete\";\n return deleteEntry.run(rest);\n }\n return `Error: unknown action \"${a}\". Use: list, read, write, promote, delete`;\n },\n },\n \"save-memory\": wrapCliScript(\n {\n description:\n \"Save a memory for future conversations. Creates or updates a memory file and its index entry. Use proactively when you learn preferences, corrections, project context, or references.\",\n parameters: {\n type: \"object\",\n properties: {\n name: {\n type: \"string\",\n description:\n \"Short kebab-case identifier (e.g. 'coding-style', 'deploy-process'). Used as the filename.\",\n },\n type: {\n type: \"string\",\n description: \"Memory category\",\n enum: [\"user\", \"feedback\", \"project\", \"reference\"],\n },\n description: {\n type: \"string\",\n description:\n \"One-line summary shown in the memory index (keep under 80 chars)\",\n },\n content: {\n type: \"string\",\n description:\n \"The memory content in markdown. For updates, read first and provide full updated content.\",\n },\n },\n required: [\"name\", \"type\", \"description\", \"content\"],\n },\n },\n saveMem.default,\n ),\n \"delete-memory\": wrapCliScript(\n {\n description:\n \"Delete a memory entry and remove it from the memory index.\",\n parameters: {\n type: \"object\",\n properties: {\n name: {\n type: \"string\",\n description: \"The memory name to delete (e.g. 'coding-style')\",\n },\n },\n required: [\"name\"],\n },\n },\n delMem.default,\n ),\n };\n } catch {\n // Resources not available — skip silently\n return {};\n }\n}\n\n/**\n * Creates a unified chat-history ActionEntry that dispatches to search, open,\n * rename, or lightweight organization actions.\n */\nexport async function createChatScriptEntries(): Promise<\n Record<string, ActionEntry>\n> {\n try {\n const [searchMod, openMod] = await Promise.all([\n import(\"../../scripts/chat/search-chats.js\"),\n import(\"../../scripts/chat/open-chat.js\"),\n ]);\n\n const searchEntry = wrapCliScript(\n {\n description: \"Search or list past agent chat threads.\",\n parameters: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description:\n \"Search term to find chats by title, preview, or content\",\n },\n limit: {\n type: \"string\",\n description: \"Max number of results (default: 20)\",\n },\n format: {\n type: \"string\",\n description: \"Output format\",\n enum: [\"json\", \"text\"],\n },\n includeArchived: {\n type: \"boolean\",\n description:\n \"Also include archived chats in the results. Archived chats are excluded by default.\",\n },\n },\n },\n },\n searchMod.default,\n );\n\n const openEntry = wrapCliScript(\n {\n description: \"Open a chat thread in the UI.\",\n parameters: {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n description: \"The chat thread ID to open\",\n },\n },\n required: [\"id\"],\n },\n },\n openMod.default,\n );\n\n return {\n \"chat-history\": {\n tool: {\n description:\n \"Manage past agent chat threads. Use action 'search' to find previous conversations by keyword, 'open' to open a thread in the UI, or 'rename'/'pin'/'unpin'/'archive' to organize history.\",\n parameters: {\n type: \"object\",\n properties: {\n action: {\n type: \"string\",\n description: \"The operation to perform\",\n enum: [\"search\", \"open\", \"rename\", \"pin\", \"unpin\", \"archive\"],\n },\n query: {\n type: \"string\",\n description:\n \"(search) Search term to find chats by title, preview, or content\",\n },\n limit: {\n type: \"string\",\n description: \"(search) Max number of results (default: 20)\",\n },\n format: {\n type: \"string\",\n description: \"(search) Output format\",\n enum: [\"json\", \"text\"],\n },\n includeArchived: {\n type: \"boolean\",\n description:\n \"(search) Also include archived chats in the results. Archived chats are excluded by default, matching the 'archive' action's effect on the chat list.\",\n },\n id: {\n type: \"string\",\n description:\n \"(open, rename, pin, unpin, archive) The chat thread ID to manage\",\n },\n title: {\n type: \"string\",\n description: \"(rename) New chat title\",\n },\n },\n required: [\"action\"],\n },\n },\n run: async (args) => {\n if (args?.action === \"open\") {\n return openEntry.run(args);\n }\n if (\n args?.action === \"rename\" ||\n args?.action === \"pin\" ||\n args?.action === \"unpin\" ||\n args?.action === \"archive\"\n ) {\n const id = typeof args?.id === \"string\" ? args.id : \"\";\n if (!id) return \"Missing required id.\";\n const owner =\n getRequestRunContext()?.owner ?? getRequestUserEmail() ?? \"\";\n if (!owner) return \"No authenticated user is available.\";\n const thread = await resolveThreadAccess(owner, id, \"editor\", {\n orgId: getRequestOrgId(),\n });\n if (!thread) {\n return `Chat thread \"${id}\" not found.`;\n }\n const title = thread.title || thread.preview || \"(untitled)\";\n if (args.action === \"rename\") {\n const nextTitle =\n typeof args?.title === \"string\"\n ? args.title.replace(/\\s+/g, \" \").trim().slice(0, 160)\n : \"\";\n if (!nextTitle) return \"Missing required title.\";\n const renamed = await renameThread(id, nextTitle);\n if (!renamed) return `Chat thread \"${id}\" could not be renamed.`;\n return `Renamed chat \"${title}\" to \"${nextTitle}\".`;\n }\n if (args.action === \"archive\") {\n const archived = await setThreadArchived(id, true);\n if (!archived)\n return `Chat thread \"${id}\" could not be archived.`;\n return `Archived chat: ${title}`;\n }\n const pinned = await setThreadPinned(id, args.action === \"pin\");\n if (!pinned) return `Chat thread \"${id}\" could not be updated.`;\n return `${args.action === \"pin\" ? \"Pinned\" : \"Unpinned\"} chat: ${title}`;\n }\n return searchEntry.run(args);\n },\n },\n };\n } catch {\n return {};\n }\n}\n\n/**\n * Creates the consolidated manage-agent-engine tool (list / set / test).\n * Let the agent inspect and configure the active LLM engine.\n */\nexport async function createAgentEngineScriptEntries(\n appId?: string,\n): Promise<Record<string, ActionEntry>> {\n try {\n const mod =\n await import(\"../../scripts/agent-engines/manage-agent-engine.js\");\n\n return {\n \"manage-agent-engine\": {\n tool: mod.tool,\n run: (args) =>\n mod.run({\n ...args,\n appId:\n typeof args.appId === \"string\" && args.appId.trim()\n ? args.appId\n : (appId ?? \"\"),\n }),\n },\n };\n } catch {\n return {};\n }\n}\n\n/**\n * Creates the manage-agent-loop-settings tool. Lets the agent inspect and\n * configure the loop step limit it may hit on long-running work.\n */\nexport async function createAgentLoopSettingsScriptEntries(): Promise<\n Record<string, ActionEntry>\n> {\n try {\n const mod = await import(\"../../scripts/manage-agent-loop-settings.js\");\n\n return {\n \"manage-agent-loop-settings\": { tool: mod.tool, run: mod.run },\n };\n } catch {\n return {};\n }\n}\n\n/**\n * Creates the call-agent ActionEntry for cross-agent A2A communication.\n * Binds selfAppId so the agent cannot call itself via call-agent.\n */\nexport async function createCallAgentScriptEntry(\n selfAppId?: string,\n): Promise<Record<string, ActionEntry>> {\n try {\n const mod = await import(\"../../scripts/call-agent.js\");\n return {\n \"call-agent\": {\n tool: mod.tool,\n run: (args, context) => mod.run(args, context, selfAppId),\n },\n };\n } catch {\n return {};\n }\n}\n"]}
@@ -0,0 +1,33 @@
1
+ import { type H3Event } from "h3";
2
+ import type { AgentRunSummary } from "../../agent/run-store.js";
3
+ import type { ChatThread } from "../../chat-threads/store.js";
4
+ export interface SharedThreadRouteDependencies {
5
+ getThreadByShareToken: (token: string) => Promise<ChatThread | null>;
6
+ listRunsForThread: (threadId: string, options?: {
7
+ limit?: number;
8
+ }) => Promise<AgentRunSummary[]>;
9
+ }
10
+ export declare function handleSharedThreadRequest(event: H3Event, deps: SharedThreadRouteDependencies): Promise<string | {
11
+ error: string;
12
+ } | {
13
+ thread: {
14
+ id: string;
15
+ title: string;
16
+ preview: string;
17
+ messageCount: number;
18
+ createdAt: number;
19
+ updatedAt: number;
20
+ scope: {
21
+ type: string;
22
+ label?: string;
23
+ } | null;
24
+ messages: Array<{
25
+ id?: string;
26
+ role: "user" | "assistant" | "system";
27
+ text: string;
28
+ createdAt?: string | number;
29
+ }>;
30
+ };
31
+ runs: AgentRunSummary[];
32
+ }>;
33
+ //# sourceMappingURL=shared-thread.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-thread.d.ts","sourceRoot":"","sources":["../../../src/server/agent-chat/shared-thread.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,OAAO,EACb,MAAM,IAAI,CAAC;AAEZ,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAyD9D,MAAM,WAAW,6BAA6B;IAC5C,qBAAqB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACrE,iBAAiB,EAAE,CACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,KACzB,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;CACjC;AAsID,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,6BAA6B;;;;YA/L/B,MAAM;eACH,MAAM;iBACJ,MAAM;sBACD,MAAM;mBACT,MAAM;mBACN,MAAM;eACV;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI;kBACpC,KAAK,CAAC;YACd,EAAE,CAAC,EAAE,MAAM,CAAC;YACZ,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;YACtC,IAAI,EAAE,MAAM,CAAC;YACb,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;SAC7B,CAAC;;;GAiNH"}
@@ -0,0 +1,242 @@
1
+ import { getHeader, getMethod, setResponseHeader, setResponseStatus, } from "h3";
2
+ import { normalizeThreadRepository } from "../../agent/thread-data-builder.js";
3
+ // ---------------------------------------------------------------------------
4
+ // Read-only shared-thread route: renders a public HTML/JSON view of a chat
5
+ // thread reachable via its share token (see `handleSharedThreadRequest`).
6
+ // ---------------------------------------------------------------------------
7
+ function sanitizeSharedThread(thread) {
8
+ let repo = {};
9
+ try {
10
+ repo = normalizeThreadRepository(JSON.parse(thread.threadData));
11
+ }
12
+ catch {
13
+ repo = {};
14
+ }
15
+ const messages = Array.isArray(repo.messages)
16
+ ? repo.messages
17
+ .map((entry) => sanitizeSharedMessage(entry))
18
+ .filter((entry) => entry != null)
19
+ : [];
20
+ return {
21
+ id: thread.id,
22
+ title: thread.title,
23
+ preview: thread.preview,
24
+ messageCount: thread.messageCount,
25
+ createdAt: thread.createdAt,
26
+ updatedAt: thread.updatedAt,
27
+ scope: thread.scope
28
+ ? {
29
+ type: thread.scope.type,
30
+ ...(thread.scope.label ? { label: thread.scope.label } : {}),
31
+ }
32
+ : null,
33
+ messages,
34
+ };
35
+ }
36
+ function escapeSharedThreadHtml(value) {
37
+ return String(value ?? "")
38
+ .replace(/&/g, "&amp;")
39
+ .replace(/</g, "&lt;")
40
+ .replace(/>/g, "&gt;")
41
+ .replace(/"/g, "&quot;")
42
+ .replace(/'/g, "&#39;");
43
+ }
44
+ function wantsSharedThreadHtml(event) {
45
+ const accept = getHeader(event, "accept")?.toLowerCase() ?? "";
46
+ return accept.includes("text/html") && !accept.includes("application/json");
47
+ }
48
+ function formatSharedThreadTime(value) {
49
+ if (value == null)
50
+ return "";
51
+ const date = typeof value === "number"
52
+ ? new Date(value)
53
+ : Number.isFinite(Number(value))
54
+ ? new Date(Number(value))
55
+ : new Date(value);
56
+ return Number.isNaN(date.getTime()) ? String(value) : date.toLocaleString();
57
+ }
58
+ function renderSharedThreadHtml(thread, runs) {
59
+ const title = thread.title || "Shared agent session";
60
+ const messages = thread.messages
61
+ .map((message) => {
62
+ const time = formatSharedThreadTime(message.createdAt);
63
+ return `<article class="message ${escapeSharedThreadHtml(message.role)}">
64
+ <div class="meta">
65
+ <span>${escapeSharedThreadHtml(message.role)}</span>
66
+ ${time ? `<time>${escapeSharedThreadHtml(time)}</time>` : ""}
67
+ </div>
68
+ <pre>${escapeSharedThreadHtml(message.text)}</pre>
69
+ </article>`;
70
+ })
71
+ .join("");
72
+ const runsHtml = runs.length
73
+ ? `<section class="runs" aria-label="Recent runs">
74
+ <h2>Recent runs</h2>
75
+ <ol>${runs
76
+ .map((run) => {
77
+ const started = formatSharedThreadTime(run.startedAt);
78
+ const completed = formatSharedThreadTime(run.completedAt);
79
+ const detail = [
80
+ started ? `started ${started}` : "",
81
+ completed ? `completed ${completed}` : "",
82
+ run.errorCode ? `error ${run.errorCode}` : "",
83
+ run.abortReason ? `aborted ${run.abortReason}` : "",
84
+ ]
85
+ .filter(Boolean)
86
+ .join(" · ");
87
+ return `<li><strong>${escapeSharedThreadHtml(run.status)}</strong>${detail ? `<span>${escapeSharedThreadHtml(detail)}</span>` : ""}</li>`;
88
+ })
89
+ .join("")}</ol>
90
+ </section>`
91
+ : "";
92
+ return `<!doctype html>
93
+ <html lang="en">
94
+ <head>
95
+ <meta charset="utf-8" />
96
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
97
+ <meta name="robots" content="noindex, nofollow" />
98
+ <meta name="referrer" content="no-referrer" />
99
+ <title>${escapeSharedThreadHtml(title)}</title>
100
+ <style>
101
+ :root { color-scheme: light dark; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; background: #f7f7f5; color: #1d1d1b; }
102
+ * { box-sizing: border-box; }
103
+ body { margin: 0; }
104
+ main { width: min(920px, calc(100vw - 32px)); margin: 0 auto; padding: 44px 0 64px; }
105
+ header { border-bottom: 1px solid rgba(0,0,0,.12); padding-bottom: 24px; margin-bottom: 28px; }
106
+ .eyebrow { margin: 0 0 10px; font-size: 12px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: #676760; }
107
+ h1 { margin: 0; font-size: 42px; line-height: 1.08; letter-spacing: 0; }
108
+ .summary { margin: 14px 0 0; color: #5c5c55; line-height: 1.6; max-width: 760px; }
109
+ .message { border: 1px solid rgba(0,0,0,.12); border-radius: 8px; background: rgba(255,255,255,.72); margin: 14px 0; padding: 16px; }
110
+ .message.assistant { border-left: 4px solid #2563eb; }
111
+ .message.user { border-left: 4px solid #0f766e; }
112
+ .message.system { border-left: 4px solid #737373; }
113
+ .meta { display: flex; gap: 12px; justify-content: space-between; color: #676760; font-size: 12px; font-weight: 700; text-transform: uppercase; }
114
+ pre { margin: 12px 0 0; white-space: pre-wrap; overflow-wrap: anywhere; font: inherit; line-height: 1.6; }
115
+ .empty, .runs { margin-top: 28px; color: #676760; }
116
+ .runs h2 { font-size: 16px; margin: 0 0 12px; }
117
+ .runs ol { margin: 0; padding-left: 20px; }
118
+ .runs li { margin: 8px 0; }
119
+ .runs span { color: #676760; margin-left: 8px; }
120
+ @media (prefers-color-scheme: dark) {
121
+ :root { background: #11110f; color: #f5f5ef; }
122
+ header, .message { border-color: rgba(255,255,255,.15); }
123
+ .message { background: rgba(255,255,255,.06); }
124
+ .summary, .eyebrow, .meta, .empty, .runs, .runs span { color: #b9b9ad; }
125
+ }
126
+ @media (max-width: 640px) {
127
+ h1 { font-size: 32px; }
128
+ main { width: min(100vw - 24px, 920px); padding-top: 32px; }
129
+ }
130
+ </style>
131
+ </head>
132
+ <body>
133
+ <main>
134
+ <header>
135
+ <p class="eyebrow">Read-only shared agent session</p>
136
+ <h1>${escapeSharedThreadHtml(title)}</h1>
137
+ <p class="summary">${escapeSharedThreadHtml(thread.preview || `${thread.messageCount} message${thread.messageCount === 1 ? "" : "s"}`)}</p>
138
+ </header>
139
+ ${messages || '<p class="empty">No transcript messages were shared.</p>'}
140
+ ${runsHtml}
141
+ </main>
142
+ </body>
143
+ </html>`;
144
+ }
145
+ function renderSharedThreadErrorHtml(status, message) {
146
+ return `<!doctype html><html lang="en"><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" /><meta name="robots" content="noindex, nofollow" /><title>${status} ${escapeSharedThreadHtml(message)}</title><style>body{margin:0;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;background:#f7f7f5;color:#1d1d1b}main{max-width:720px;margin:0 auto;padding:64px 24px}p{color:#676760;line-height:1.6}@media(prefers-color-scheme:dark){body{background:#11110f;color:#f5f5ef}p{color:#b9b9ad}}</style></head><body><main><h1>${status}</h1><p>${escapeSharedThreadHtml(message)}</p></main></body></html>`;
147
+ }
148
+ function sharedThreadError(event, status, message) {
149
+ setResponseStatus(event, status);
150
+ setResponseHeader(event, "Cache-Control", "private, no-store");
151
+ setResponseHeader(event, "X-Robots-Tag", "noindex, nofollow");
152
+ if (wantsSharedThreadHtml(event)) {
153
+ setResponseHeader(event, "Content-Type", "text/html; charset=utf-8");
154
+ return renderSharedThreadErrorHtml(status, message);
155
+ }
156
+ return { error: message };
157
+ }
158
+ export async function handleSharedThreadRequest(event, deps) {
159
+ const method = getMethod(event);
160
+ if (method !== "GET") {
161
+ return sharedThreadError(event, 405, "Method not allowed");
162
+ }
163
+ const token = parseSharedThreadToken(event);
164
+ if (!token) {
165
+ return sharedThreadError(event, 400, "Share token is required");
166
+ }
167
+ const thread = await deps.getThreadByShareToken(token);
168
+ if (!thread) {
169
+ return sharedThreadError(event, 404, "Shared thread not found");
170
+ }
171
+ const runs = await deps.listRunsForThread(thread.id, { limit: 10 });
172
+ const payload = {
173
+ thread: sanitizeSharedThread(thread),
174
+ runs,
175
+ };
176
+ setResponseHeader(event, "Cache-Control", "private, no-store");
177
+ setResponseHeader(event, "X-Robots-Tag", "noindex, nofollow");
178
+ if (wantsSharedThreadHtml(event)) {
179
+ setResponseHeader(event, "Content-Type", "text/html; charset=utf-8");
180
+ return renderSharedThreadHtml(payload.thread, runs);
181
+ }
182
+ setResponseHeader(event, "Content-Type", "application/json");
183
+ return payload;
184
+ }
185
+ function sanitizeSharedMessage(entry) {
186
+ if (!entry || typeof entry !== "object")
187
+ return null;
188
+ const raw = entry;
189
+ const message = raw.message && typeof raw.message === "object"
190
+ ? raw.message
191
+ : raw;
192
+ const role = message.role;
193
+ if (role !== "user" && role !== "assistant" && role !== "system") {
194
+ return null;
195
+ }
196
+ const text = sharedTextFromContent(message.content).trim();
197
+ if (!text)
198
+ return null;
199
+ const id = typeof message.id === "string" ? message.id : undefined;
200
+ const createdAt = typeof message.createdAt === "string" ||
201
+ typeof message.createdAt === "number"
202
+ ? message.createdAt
203
+ : undefined;
204
+ return {
205
+ ...(id ? { id } : {}),
206
+ role,
207
+ text,
208
+ ...(createdAt !== undefined ? { createdAt } : {}),
209
+ };
210
+ }
211
+ function sharedTextFromContent(content) {
212
+ if (typeof content === "string")
213
+ return content;
214
+ if (!Array.isArray(content))
215
+ return "";
216
+ const parts = [];
217
+ for (const part of content) {
218
+ if (!part || typeof part !== "object")
219
+ continue;
220
+ const r = part;
221
+ if (r.type !== "text")
222
+ continue;
223
+ if (typeof r.text === "string")
224
+ parts.push(r.text);
225
+ }
226
+ return parts.join("");
227
+ }
228
+ function parseSharedThreadToken(event) {
229
+ const candidates = [event.path, event.node?.req?.url].filter((value) => typeof value === "string" && value.length > 0);
230
+ for (const candidate of candidates) {
231
+ const path = candidate.split("?")[0];
232
+ const parts = path.replace(/^\/+/, "").split("/").filter(Boolean);
233
+ const sharedIndex = parts.lastIndexOf("shared");
234
+ if (sharedIndex >= 0 && parts[sharedIndex + 1]) {
235
+ return decodeURIComponent(parts[sharedIndex + 1]);
236
+ }
237
+ if (parts[0])
238
+ return decodeURIComponent(parts[0]);
239
+ }
240
+ return null;
241
+ }
242
+ //# sourceMappingURL=shared-thread.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-thread.js","sourceRoot":"","sources":["../../../src/server/agent-chat/shared-thread.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getHeader,\n getMethod,\n setResponseHeader,\n setResponseStatus,\n type H3Event,\n} from \"h3\";\n\nimport type { AgentRunSummary } from \"../../agent/run-store.js\";\nimport { normalizeThreadRepository } from \"../../agent/thread-data-builder.js\";\nimport type { ChatThread } from \"../../chat-threads/store.js\";\n\n// ---------------------------------------------------------------------------\n// Read-only shared-thread route: renders a public HTML/JSON view of a chat\n// thread reachable via its share token (see `handleSharedThreadRequest`).\n// ---------------------------------------------------------------------------\n\nfunction sanitizeSharedThread(thread: ChatThread): {\n id: string;\n title: string;\n preview: string;\n messageCount: number;\n createdAt: number;\n updatedAt: number;\n scope: { type: string; label?: string } | null;\n messages: Array<{\n id?: string;\n role: \"user\" | \"assistant\" | \"system\";\n text: string;\n createdAt?: string | number;\n }>;\n} {\n let repo: any = {};\n try {\n repo = normalizeThreadRepository(JSON.parse(thread.threadData));\n } catch {\n repo = {};\n }\n const messages = Array.isArray(repo.messages)\n ? repo.messages\n .map((entry: unknown) => sanitizeSharedMessage(entry))\n .filter(\n (\n entry: unknown,\n ): entry is NonNullable<ReturnType<typeof sanitizeSharedMessage>> =>\n entry != null,\n )\n : [];\n return {\n id: thread.id,\n title: thread.title,\n preview: thread.preview,\n messageCount: thread.messageCount,\n createdAt: thread.createdAt,\n updatedAt: thread.updatedAt,\n scope: thread.scope\n ? {\n type: thread.scope.type,\n ...(thread.scope.label ? { label: thread.scope.label } : {}),\n }\n : null,\n messages,\n };\n}\n\ntype SanitizedSharedThread = ReturnType<typeof sanitizeSharedThread>;\n\nexport interface SharedThreadRouteDependencies {\n getThreadByShareToken: (token: string) => Promise<ChatThread | null>;\n listRunsForThread: (\n threadId: string,\n options?: { limit?: number },\n ) => Promise<AgentRunSummary[]>;\n}\n\nfunction escapeSharedThreadHtml(value: unknown): string {\n return String(value ?? \"\")\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#39;\");\n}\n\nfunction wantsSharedThreadHtml(event: H3Event): boolean {\n const accept = getHeader(event, \"accept\")?.toLowerCase() ?? \"\";\n return accept.includes(\"text/html\") && !accept.includes(\"application/json\");\n}\n\nfunction formatSharedThreadTime(value: string | number | null | undefined) {\n if (value == null) return \"\";\n const date =\n typeof value === \"number\"\n ? new Date(value)\n : Number.isFinite(Number(value))\n ? new Date(Number(value))\n : new Date(value);\n return Number.isNaN(date.getTime()) ? String(value) : date.toLocaleString();\n}\n\nfunction renderSharedThreadHtml(\n thread: SanitizedSharedThread,\n runs: AgentRunSummary[],\n): string {\n const title = thread.title || \"Shared agent session\";\n const messages = thread.messages\n .map((message) => {\n const time = formatSharedThreadTime(message.createdAt);\n return `<article class=\"message ${escapeSharedThreadHtml(message.role)}\">\n <div class=\"meta\">\n <span>${escapeSharedThreadHtml(message.role)}</span>\n ${time ? `<time>${escapeSharedThreadHtml(time)}</time>` : \"\"}\n </div>\n <pre>${escapeSharedThreadHtml(message.text)}</pre>\n </article>`;\n })\n .join(\"\");\n const runsHtml = runs.length\n ? `<section class=\"runs\" aria-label=\"Recent runs\">\n <h2>Recent runs</h2>\n <ol>${runs\n .map((run) => {\n const started = formatSharedThreadTime(run.startedAt);\n const completed = formatSharedThreadTime(run.completedAt);\n const detail = [\n started ? `started ${started}` : \"\",\n completed ? `completed ${completed}` : \"\",\n run.errorCode ? `error ${run.errorCode}` : \"\",\n run.abortReason ? `aborted ${run.abortReason}` : \"\",\n ]\n .filter(Boolean)\n .join(\" · \");\n return `<li><strong>${escapeSharedThreadHtml(run.status)}</strong>${detail ? `<span>${escapeSharedThreadHtml(detail)}</span>` : \"\"}</li>`;\n })\n .join(\"\")}</ol>\n </section>`\n : \"\";\n\n return `<!doctype html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta name=\"robots\" content=\"noindex, nofollow\" />\n <meta name=\"referrer\" content=\"no-referrer\" />\n <title>${escapeSharedThreadHtml(title)}</title>\n <style>\n :root { color-scheme: light dark; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif; background: #f7f7f5; color: #1d1d1b; }\n * { box-sizing: border-box; }\n body { margin: 0; }\n main { width: min(920px, calc(100vw - 32px)); margin: 0 auto; padding: 44px 0 64px; }\n header { border-bottom: 1px solid rgba(0,0,0,.12); padding-bottom: 24px; margin-bottom: 28px; }\n .eyebrow { margin: 0 0 10px; font-size: 12px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: #676760; }\n h1 { margin: 0; font-size: 42px; line-height: 1.08; letter-spacing: 0; }\n .summary { margin: 14px 0 0; color: #5c5c55; line-height: 1.6; max-width: 760px; }\n .message { border: 1px solid rgba(0,0,0,.12); border-radius: 8px; background: rgba(255,255,255,.72); margin: 14px 0; padding: 16px; }\n .message.assistant { border-left: 4px solid #2563eb; }\n .message.user { border-left: 4px solid #0f766e; }\n .message.system { border-left: 4px solid #737373; }\n .meta { display: flex; gap: 12px; justify-content: space-between; color: #676760; font-size: 12px; font-weight: 700; text-transform: uppercase; }\n pre { margin: 12px 0 0; white-space: pre-wrap; overflow-wrap: anywhere; font: inherit; line-height: 1.6; }\n .empty, .runs { margin-top: 28px; color: #676760; }\n .runs h2 { font-size: 16px; margin: 0 0 12px; }\n .runs ol { margin: 0; padding-left: 20px; }\n .runs li { margin: 8px 0; }\n .runs span { color: #676760; margin-left: 8px; }\n @media (prefers-color-scheme: dark) {\n :root { background: #11110f; color: #f5f5ef; }\n header, .message { border-color: rgba(255,255,255,.15); }\n .message { background: rgba(255,255,255,.06); }\n .summary, .eyebrow, .meta, .empty, .runs, .runs span { color: #b9b9ad; }\n }\n @media (max-width: 640px) {\n h1 { font-size: 32px; }\n main { width: min(100vw - 24px, 920px); padding-top: 32px; }\n }\n </style>\n</head>\n<body>\n <main>\n <header>\n <p class=\"eyebrow\">Read-only shared agent session</p>\n <h1>${escapeSharedThreadHtml(title)}</h1>\n <p class=\"summary\">${escapeSharedThreadHtml(thread.preview || `${thread.messageCount} message${thread.messageCount === 1 ? \"\" : \"s\"}`)}</p>\n </header>\n ${messages || '<p class=\"empty\">No transcript messages were shared.</p>'}\n ${runsHtml}\n </main>\n</body>\n</html>`;\n}\n\nfunction renderSharedThreadErrorHtml(status: number, message: string): string {\n return `<!doctype html><html lang=\"en\"><head><meta charset=\"utf-8\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" /><meta name=\"robots\" content=\"noindex, nofollow\" /><title>${status} ${escapeSharedThreadHtml(message)}</title><style>body{margin:0;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif;background:#f7f7f5;color:#1d1d1b}main{max-width:720px;margin:0 auto;padding:64px 24px}p{color:#676760;line-height:1.6}@media(prefers-color-scheme:dark){body{background:#11110f;color:#f5f5ef}p{color:#b9b9ad}}</style></head><body><main><h1>${status}</h1><p>${escapeSharedThreadHtml(message)}</p></main></body></html>`;\n}\n\nfunction sharedThreadError(event: H3Event, status: number, message: string) {\n setResponseStatus(event, status);\n setResponseHeader(event, \"Cache-Control\", \"private, no-store\");\n setResponseHeader(event, \"X-Robots-Tag\", \"noindex, nofollow\");\n if (wantsSharedThreadHtml(event)) {\n setResponseHeader(event, \"Content-Type\", \"text/html; charset=utf-8\");\n return renderSharedThreadErrorHtml(status, message);\n }\n return { error: message };\n}\n\nexport async function handleSharedThreadRequest(\n event: H3Event,\n deps: SharedThreadRouteDependencies,\n) {\n const method = getMethod(event);\n if (method !== \"GET\") {\n return sharedThreadError(event, 405, \"Method not allowed\");\n }\n\n const token = parseSharedThreadToken(event);\n if (!token) {\n return sharedThreadError(event, 400, \"Share token is required\");\n }\n\n const thread = await deps.getThreadByShareToken(token);\n if (!thread) {\n return sharedThreadError(event, 404, \"Shared thread not found\");\n }\n\n const runs = await deps.listRunsForThread(thread.id, { limit: 10 });\n const payload = {\n thread: sanitizeSharedThread(thread),\n runs,\n };\n setResponseHeader(event, \"Cache-Control\", \"private, no-store\");\n setResponseHeader(event, \"X-Robots-Tag\", \"noindex, nofollow\");\n if (wantsSharedThreadHtml(event)) {\n setResponseHeader(event, \"Content-Type\", \"text/html; charset=utf-8\");\n return renderSharedThreadHtml(payload.thread, runs);\n }\n setResponseHeader(event, \"Content-Type\", \"application/json\");\n return payload;\n}\n\nfunction sanitizeSharedMessage(entry: unknown): {\n id?: string;\n role: \"user\" | \"assistant\" | \"system\";\n text: string;\n createdAt?: string | number;\n} | null {\n if (!entry || typeof entry !== \"object\") return null;\n const raw = entry as Record<string, unknown>;\n const message =\n raw.message && typeof raw.message === \"object\"\n ? (raw.message as Record<string, unknown>)\n : raw;\n const role = message.role;\n if (role !== \"user\" && role !== \"assistant\" && role !== \"system\") {\n return null;\n }\n const text = sharedTextFromContent(message.content).trim();\n if (!text) return null;\n const id = typeof message.id === \"string\" ? message.id : undefined;\n const createdAt =\n typeof message.createdAt === \"string\" ||\n typeof message.createdAt === \"number\"\n ? message.createdAt\n : undefined;\n return {\n ...(id ? { id } : {}),\n role,\n text,\n ...(createdAt !== undefined ? { createdAt } : {}),\n };\n}\n\nfunction sharedTextFromContent(content: unknown): string {\n if (typeof content === \"string\") return content;\n if (!Array.isArray(content)) return \"\";\n const parts: string[] = [];\n for (const part of content) {\n if (!part || typeof part !== \"object\") continue;\n const r = part as Record<string, unknown>;\n if (r.type !== \"text\") continue;\n if (typeof r.text === \"string\") parts.push(r.text);\n }\n return parts.join(\"\");\n}\n\nfunction parseSharedThreadToken(event: H3Event): string | null {\n const candidates = [event.path, event.node?.req?.url].filter(\n (value): value is string => typeof value === \"string\" && value.length > 0,\n );\n for (const candidate of candidates) {\n const path = candidate.split(\"?\")[0];\n const parts = path.replace(/^\\/+/, \"\").split(\"/\").filter(Boolean);\n const sharedIndex = parts.lastIndexOf(\"shared\");\n if (sharedIndex >= 0 && parts[sharedIndex + 1]) {\n return decodeURIComponent(parts[sharedIndex + 1]);\n }\n if (parts[0]) return decodeURIComponent(parts[0]);\n }\n return null;\n}\n"]}
@@ -0,0 +1,7 @@
1
+ export declare function parseSkillFrontmatter(content: string): {
2
+ name?: string;
3
+ description?: string;
4
+ userInvocable?: boolean;
5
+ scope?: "runtime" | "dev" | "both";
6
+ };
7
+ //# sourceMappingURL=skill-frontmatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-frontmatter.d.ts","sourceRoot":"","sources":["../../../src/server/agent-chat/skill-frontmatter.ts"],"names":[],"mappings":"AAKA,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;CACpC,CAeA"}
@@ -0,0 +1,26 @@
1
+ import { getFrontmatterValue, parseFrontmatter, } from "../../resources/metadata.js";
2
+ export function parseSkillFrontmatter(content) {
3
+ const frontmatter = parseFrontmatter(content);
4
+ const userInvocable = getFrontmatterValue(frontmatter, "user-invocable");
5
+ const scope = normalizeSkillFrontmatterScope(getFrontmatterValue(frontmatter, "scope"));
6
+ return {
7
+ name: getFrontmatterValue(frontmatter, "name"),
8
+ description: getFrontmatterValue(frontmatter, "description"),
9
+ scope,
10
+ userInvocable: userInvocable === undefined
11
+ ? undefined
12
+ : userInvocable.toLowerCase() === "true",
13
+ };
14
+ }
15
+ function normalizeSkillFrontmatterScope(value) {
16
+ if (!value)
17
+ return undefined;
18
+ const normalized = value.trim().toLowerCase();
19
+ if (normalized === "runtime" ||
20
+ normalized === "dev" ||
21
+ normalized === "both") {
22
+ return normalized;
23
+ }
24
+ return "both";
25
+ }
26
+ //# sourceMappingURL=skill-frontmatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-frontmatter.js","sourceRoot":"","sources":["../../../src/server/agent-chat/skill-frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AAErC,MAAM,UAAU,qBAAqB,CAAC,OAAe;IAMnD,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,mBAAmB,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,8BAA8B,CAC1C,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAC1C,CAAC;IACF,OAAO;QACL,IAAI,EAAE,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC;QAC9C,WAAW,EAAE,mBAAmB,CAAC,WAAW,EAAE,aAAa,CAAC;QAC5D,KAAK;QACL,aAAa,EACX,aAAa,KAAK,SAAS;YACzB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,MAAM;KAC7C,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CACrC,KAAyB;IAEzB,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IACE,UAAU,KAAK,SAAS;QACxB,UAAU,KAAK,KAAK;QACpB,UAAU,KAAK,MAAM,EACrB,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import {\n getFrontmatterValue,\n parseFrontmatter,\n} from \"../../resources/metadata.js\";\n\nexport function parseSkillFrontmatter(content: string): {\n name?: string;\n description?: string;\n userInvocable?: boolean;\n scope?: \"runtime\" | \"dev\" | \"both\";\n} {\n const frontmatter = parseFrontmatter(content);\n const userInvocable = getFrontmatterValue(frontmatter, \"user-invocable\");\n const scope = normalizeSkillFrontmatterScope(\n getFrontmatterValue(frontmatter, \"scope\"),\n );\n return {\n name: getFrontmatterValue(frontmatter, \"name\"),\n description: getFrontmatterValue(frontmatter, \"description\"),\n scope,\n userInvocable:\n userInvocable === undefined\n ? undefined\n : userInvocable.toLowerCase() === \"true\",\n };\n}\n\nfunction normalizeSkillFrontmatterScope(\n value: string | undefined,\n): \"runtime\" | \"dev\" | \"both\" | undefined {\n if (!value) return undefined;\n const normalized = value.trim().toLowerCase();\n if (\n normalized === \"runtime\" ||\n normalized === \"dev\" ||\n normalized === \"both\"\n ) {\n return normalized;\n }\n return \"both\";\n}\n"]}