@kortix/ui 0.14.12 → 0.14.14

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 (438) hide show
  1. package/README.md +1 -1
  2. package/dist/_vendor/kortix-shared.js +521 -7045
  3. package/dist/_vendor/shared/app-config.d.ts +8 -0
  4. package/dist/_vendor/shared/artifact-annotations.d.ts +708 -0
  5. package/dist/_vendor/shared/artifact-comments.d.ts +327 -0
  6. package/dist/_vendor/shared/index.d.ts +3 -1
  7. package/dist/_vendor/shared/my-kortix-agent.d.ts +40 -0
  8. package/dist/_vendor/shared/peer-message-prompt.d.ts +35 -0
  9. package/dist/_vendor/shared/pixel-mark.d.ts +11 -0
  10. package/dist/_vendor/shared/prompt-attachments.d.ts +1 -0
  11. package/dist/_vendor/shared/reminder-prompt.d.ts +8 -2
  12. package/dist/_vendor/shared/runtime-versions.d.ts +8 -0
  13. package/dist/artifacts/artifact-frame.d.ts +1 -0
  14. package/dist/artifacts/artifact-frame.js +18 -5
  15. package/dist/artifacts/frame-policy.d.ts +1 -1
  16. package/dist/artifacts/frame-policy.js +10 -5
  17. package/dist/customize/agents/agent-access-text.d.ts +16 -0
  18. package/dist/customize/agents/agent-access-text.js +54 -0
  19. package/dist/customize/agents/agent-approval-rules.d.ts +8 -0
  20. package/dist/customize/agents/agent-approval-rules.js +26 -0
  21. package/dist/customize/agents/agent-authority-card.js +4 -1
  22. package/dist/customize/agents/agent-cover-card.d.ts +4 -1
  23. package/dist/customize/agents/agent-cover-card.js +2 -2
  24. package/dist/customize/agents/agent-detail-aside.d.ts +1 -2
  25. package/dist/customize/agents/agent-detail-aside.js +8 -11
  26. package/dist/customize/agents/agent-drives-section.d.ts +23 -7
  27. package/dist/customize/agents/agent-drives-section.js +107 -41
  28. package/dist/customize/agents/agent-instructions.d.ts +11 -0
  29. package/dist/customize/agents/agent-instructions.js +114 -0
  30. package/dist/customize/agents/agent-model-view.d.ts +17 -0
  31. package/dist/customize/agents/agent-model-view.js +67 -0
  32. package/dist/customize/agents/agent-overview.d.ts +53 -0
  33. package/dist/customize/agents/agent-overview.js +242 -0
  34. package/dist/customize/agents/agent-page-chrome.d.ts +128 -0
  35. package/dist/customize/agents/agent-page-chrome.js +145 -0
  36. package/dist/customize/agents/agent-page.d.ts +13 -1
  37. package/dist/customize/agents/agent-page.js +478 -367
  38. package/dist/customize/agents/agent-pin-button.d.ts +10 -0
  39. package/dist/customize/agents/agent-pin-button.js +20 -0
  40. package/dist/customize/agents/agent-policy-sets-section.d.ts +16 -0
  41. package/dist/customize/agents/agent-policy-sets-section.js +80 -0
  42. package/dist/customize/agents/agent-policy-sets.js +1 -1
  43. package/dist/customize/agents/agent-section-rail.d.ts +21 -0
  44. package/dist/customize/agents/agent-section-rail.js +23 -0
  45. package/dist/customize/agents/agent-share-control.d.ts +4 -3
  46. package/dist/customize/agents/agent-share-control.js +15 -16
  47. package/dist/customize/agents/{agent-people-section.d.ts → agent-share-dialog.d.ts} +3 -1
  48. package/dist/customize/agents/{agent-people-section.js → agent-share-dialog.js} +21 -21
  49. package/dist/customize/agents/agent-tabs.d.ts +95 -0
  50. package/dist/customize/agents/agent-tabs.js +199 -0
  51. package/dist/customize/agents/agents-page.d.ts +0 -21
  52. package/dist/customize/agents/agents-page.js +104 -118
  53. package/dist/customize/agents/connectors-required.d.ts +16 -0
  54. package/dist/customize/agents/connectors-required.js +19 -0
  55. package/dist/customize/agents/create-agent-modal.d.ts +19 -0
  56. package/dist/customize/agents/create-agent-modal.js +94 -0
  57. package/dist/customize/connectors/agent-access.d.ts +4 -4
  58. package/dist/customize/connectors/agent-access.js +7 -10
  59. package/dist/customize/connectors/connector-identity.d.ts +12 -0
  60. package/dist/customize/connectors/connector-identity.js +15 -2
  61. package/dist/customize/connectors/connector-routes.js +2 -2
  62. package/dist/customize/connectors/connectors-page.d.ts +14 -1
  63. package/dist/customize/connectors/connectors-page.js +101 -32
  64. package/dist/customize/connectors/detail/app-page.js +1 -1
  65. package/dist/customize/connectors/detail/connector-agents.js +0 -3
  66. package/dist/customize/connectors/detail/connector-page.d.ts +1 -1
  67. package/dist/customize/connectors/detail/connector-page.js +5 -2
  68. package/dist/customize/connectors/detail/connector-policy-sets.js +1 -1
  69. package/dist/customize/connectors/detail/connector-triggers.js +2 -2
  70. package/dist/customize/connectors/use-agent-access.d.ts +7 -5
  71. package/dist/customize/connectors/use-agent-access.js +2 -6
  72. package/dist/customize/models/models-page.d.ts +7 -1
  73. package/dist/customize/models/models-page.js +2 -2
  74. package/dist/customize/project-settings/project-admin-sections.d.ts +63 -0
  75. package/dist/customize/project-settings/project-admin-sections.js +80 -0
  76. package/dist/customize/project-settings/project-settings-page.d.ts +1 -1
  77. package/dist/customize/project-settings/project-settings-page.js +4 -13
  78. package/dist/customize/project-settings/project-settings-sections.d.ts +5 -5
  79. package/dist/customize/project-settings/project-settings-sections.js +6 -20
  80. package/dist/customize/providers/provider-accordion.js +29 -17
  81. package/dist/customize/providers/provider-connect.js +1 -1
  82. package/dist/customize/providers/provider-sheet.d.ts +4 -1
  83. package/dist/customize/providers/provider-sheet.js +15 -5
  84. package/dist/customize/secrets/secrets-page.d.ts +5 -1
  85. package/dist/customize/secrets/secrets-page.js +2 -2
  86. package/dist/customize/sections/gateway-view.d.ts +10 -2
  87. package/dist/customize/sections/gateway-view.js +16 -4
  88. package/dist/customize/sections/llm-provider/chatgpt-subscription-connect.d.ts +12 -5
  89. package/dist/customize/sections/llm-provider/chatgpt-subscription-connect.js +131 -8
  90. package/dist/customize/sections/llm-provider/claude-code-step.d.ts +10 -0
  91. package/dist/customize/sections/llm-provider/claude-code-step.js +32 -0
  92. package/dist/customize/sections/llm-provider/models-tab.js +5 -1
  93. package/dist/customize/sections/view/account-secret-resources-panel.d.ts +5 -3
  94. package/dist/customize/sections/view/account-secret-resources-panel.js +122 -19
  95. package/dist/customize/sections/view/agent-editor-access-fields.d.ts +1 -1
  96. package/dist/customize/sections/view/agent-editor-access-fields.js +8 -4
  97. package/dist/customize/sections/view/agent-editor-basics-fields.d.ts +4 -1
  98. package/dist/customize/sections/view/agent-editor-basics-fields.js +33 -4
  99. package/dist/customize/sections/view/agent-editor-catalog.d.ts +2 -2
  100. package/dist/customize/sections/view/agent-editor-catalog.js +10 -12
  101. package/dist/customize/sections/view/agent-editor-primitives.d.ts +1 -1
  102. package/dist/customize/sections/view/agent-editor-primitives.js +4 -4
  103. package/dist/customize/sections/view/agent-editor.d.ts +37 -26
  104. package/dist/customize/sections/view/agent-editor.js +19 -19
  105. package/dist/customize/sections/view/grant-mode-field.d.ts +8 -20
  106. package/dist/customize/sections/view/grant-mode-field.js +31 -57
  107. package/dist/customize/sections/view/permission-editor.d.ts +3 -1
  108. package/dist/customize/sections/view/permission-editor.js +19 -10
  109. package/dist/customize/sections/view/review-view.d.ts +8 -0
  110. package/dist/customize/sections/view/review-view.js +12 -1
  111. package/dist/customize/sections/view/secret-delivery.js +1 -4
  112. package/dist/customize/sections/view/secrets-view.d.ts +7 -1
  113. package/dist/customize/sections/view/secrets-view.js +42 -6
  114. package/dist/customize/settings/rail.js +2 -8
  115. package/dist/customize/settings/settings-tabs.d.ts +2 -2
  116. package/dist/customize/settings/settings-tabs.js +17 -19
  117. package/dist/customize/settings/tabs/experimental-tab.d.ts +3 -0
  118. package/dist/customize/settings/tabs/experimental-tab.js +6 -1
  119. package/dist/customize/settings/tabs/sandbox-tab.d.ts +4 -6
  120. package/dist/customize/settings/tabs/sandbox-tab.js +9 -9
  121. package/dist/customize/shared/access-list.d.ts +39 -0
  122. package/dist/customize/shared/access-list.js +62 -0
  123. package/dist/customize/shared/agent-resource-scope.d.ts +87 -0
  124. package/dist/customize/shared/agent-resource-scope.js +123 -0
  125. package/dist/customize/shared/capability-library.d.ts +41 -0
  126. package/dist/customize/shared/capability-library.js +271 -0
  127. package/dist/customize/shared/capability-page-shell.d.ts +18 -1
  128. package/dist/customize/shared/capability-page-shell.js +21 -1
  129. package/dist/customize/shared/catalog/catalog-space-tabs.d.ts +14 -0
  130. package/dist/customize/shared/catalog/catalog-space-tabs.js +20 -0
  131. package/dist/customize/shared/customize-tab-bar.d.ts +13 -0
  132. package/dist/customize/shared/customize-tab-bar.js +95 -0
  133. package/dist/customize/shared/entity/entity-modal.d.ts +17 -1
  134. package/dist/customize/shared/entity/entity-modal.js +10 -9
  135. package/dist/customize/shared/leave-guard.d.ts +23 -0
  136. package/dist/customize/shared/leave-guard.js +87 -0
  137. package/dist/customize/shared/standalone-settings-nav.js +4 -1
  138. package/dist/customize/shared/tool-rules.d.ts +11 -0
  139. package/dist/customize/shared/tool-rules.js +29 -0
  140. package/dist/customize/skills/builtin-skill-modal.d.ts +6 -0
  141. package/dist/customize/skills/builtin-skill-modal.js +41 -0
  142. package/dist/customize/skills/skills-page.d.ts +21 -18
  143. package/dist/customize/skills/skills-page.js +16 -110
  144. package/dist/customize/triggers/runtime-triggers.d.ts +17 -0
  145. package/dist/customize/triggers/runtime-triggers.js +57 -0
  146. package/dist/customize/triggers/schedule/event-trigger-copy.js +2 -2
  147. package/dist/customize/triggers/schedule/post-to-field.js +2 -2
  148. package/dist/customize/triggers/schedule/schedule-copy.d.ts +11 -6
  149. package/dist/customize/triggers/schedule/schedule-copy.js +29 -8
  150. package/dist/customize/triggers/schedule/schedule-detail-sheet.js +7 -3
  151. package/dist/customize/triggers/schedule/trigger-composer-logic.d.ts +26 -1
  152. package/dist/customize/triggers/schedule/trigger-composer-logic.js +64 -3
  153. package/dist/customize/triggers/schedule/trigger-composer.js +57 -20
  154. package/dist/customize/triggers/schedule/trigger-edit-logic.js +18 -5
  155. package/dist/customize/triggers/schedule/trigger-filter.d.ts +10 -0
  156. package/dist/customize/triggers/schedule/trigger-filter.js +16 -0
  157. package/dist/customize/triggers/schedule/trigger-runs-panel.js +1 -0
  158. package/dist/customize/triggers/schedule/trigger-toast.js +2 -1
  159. package/dist/customize/triggers/schedule/use-trigger-mutations.d.ts +1 -1
  160. package/dist/customize/triggers/schedule/use-trigger-mutations.js +1 -1
  161. package/dist/customize/triggers/schedule/when-app.d.ts +15 -0
  162. package/dist/customize/triggers/schedule/when-app.js +21 -0
  163. package/dist/customize/triggers/schedule/when-change-request.d.ts +10 -0
  164. package/dist/customize/triggers/schedule/when-change-request.js +15 -0
  165. package/dist/customize/triggers/schedule-view.d.ts +17 -3
  166. package/dist/customize/triggers/schedule-view.js +46 -16
  167. package/dist/customize/triggers/triggers-page.d.ts +3 -3
  168. package/dist/customize/triggers/triggers-page.js +2 -2
  169. package/dist/customize/use-configure-thread.d.ts +8 -2
  170. package/dist/customize/use-configure-thread.js +30 -18
  171. package/dist/files/project/components/change-request-detail-dialog.js +2 -3
  172. package/dist/files/project/components/drive-explorer.js +6 -5
  173. package/dist/files/project/explorer-source.d.ts +3 -0
  174. package/dist/files/project/upload-batch.d.ts +3 -3
  175. package/dist/files/project/upload-batch.js +7 -6
  176. package/dist/files/runtime/sandbox-explorer-source.js +3 -3
  177. package/dist/i18n/en.d.ts +1330 -53
  178. package/dist/i18n/en.js +1422 -145
  179. package/dist/i18n/ui-catalog/remaining-ui-translation-keys.generated.js +16 -7
  180. package/dist/internal/auth/auth-primitives.d.ts +1 -3
  181. package/dist/internal/auth/auth-primitives.js +2 -2
  182. package/dist/internal/billing/session-cost-format.d.ts +1 -0
  183. package/dist/internal/billing/session-cost-format.js +11 -0
  184. package/dist/internal/components/agent-mark.d.ts +12 -1
  185. package/dist/internal/components/agent-mark.js +34 -11
  186. package/dist/internal/components/nav-rail.d.ts +22 -0
  187. package/dist/internal/components/nav-rail.js +16 -0
  188. package/dist/internal/components/repository-disconnected.js +2 -2
  189. package/dist/internal/goals/goal-meta.d.ts +15 -1
  190. package/dist/internal/goals/goal-meta.js +42 -2
  191. package/dist/internal/hooks/projects/use-agent-config.d.ts +11 -7
  192. package/dist/internal/hooks/projects/use-agent-config.js +28 -11
  193. package/dist/internal/hooks/use-slash-focus.d.ts +7 -1
  194. package/dist/internal/hooks/use-slash-focus.js +9 -3
  195. package/dist/internal/layout/project-capability-nav.d.ts +24 -0
  196. package/dist/internal/layout/project-capability-nav.js +86 -0
  197. package/dist/internal/layout/project-page-header.d.ts +1 -1
  198. package/dist/internal/layout/project-page-header.js +1 -1
  199. package/dist/internal/layout/project-settings-nav.d.ts +3 -2
  200. package/dist/internal/layout/project-settings-nav.js +5 -3
  201. package/dist/internal/lib/browser-noise/rules/old-browsers.js +1 -1
  202. package/dist/internal/lib/capability-tab-routes.d.ts +34 -3
  203. package/dist/internal/lib/capability-tab-routes.js +76 -8
  204. package/dist/internal/lib/manifest-health.d.ts +10 -0
  205. package/dist/internal/lib/manifest-health.js +20 -0
  206. package/dist/internal/lib/pixel-mark.d.ts +4 -1
  207. package/dist/internal/lib/pixel-mark.js +33 -6
  208. package/dist/internal/lib/project-actions.d.ts +1 -1
  209. package/dist/internal/lib/project-actions.js +0 -4
  210. package/dist/internal/lib/provider-branding.js +2 -0
  211. package/dist/internal/lib/space-scope.d.ts +29 -0
  212. package/dist/internal/lib/space-scope.js +28 -0
  213. package/dist/internal/lib/use-project-feature-flags.js +3 -3
  214. package/dist/internal/lib/web-notifications.d.ts +74 -8
  215. package/dist/internal/lib/web-notifications.js +243 -117
  216. package/dist/internal/notifications/notification-rows.d.ts +14 -7
  217. package/dist/internal/notifications/notification-rows.js +21 -14
  218. package/dist/internal/notifications/session-toast-cards.d.ts +2 -2
  219. package/dist/internal/reminders/reminder-format.d.ts +6 -2
  220. package/dist/internal/reminders/reminder-format.js +7 -1
  221. package/dist/internal/stores/active-space-store.d.ts +35 -0
  222. package/dist/internal/stores/active-space-store.js +29 -0
  223. package/dist/internal/stores/kortix-computer-store.js +13 -4
  224. package/dist/internal/stores/pinned-agents-store.d.ts +26 -0
  225. package/dist/internal/stores/pinned-agents-store.js +20 -0
  226. package/dist/internal/stores/session-panel-memory-store.js +3 -0
  227. package/dist/internal/stores/turn-attention-store.d.ts +5 -4
  228. package/dist/lib/routes.d.ts +16 -1
  229. package/dist/lib/routes.js +15 -3
  230. package/dist/markdown/doc-editor/doc-embed.d.ts +31 -0
  231. package/dist/markdown/doc-editor/doc-embed.js +168 -0
  232. package/dist/markdown/doc-editor/doc-extensions.d.ts +26 -0
  233. package/dist/markdown/doc-editor/doc-extensions.js +149 -0
  234. package/dist/markdown/doc-editor/doc-menus.d.ts +9 -0
  235. package/dist/markdown/doc-editor/doc-menus.js +56 -0
  236. package/dist/markdown/doc-editor/markdown.d.ts +12 -0
  237. package/dist/markdown/doc-editor/markdown.js +140 -0
  238. package/dist/markdown/genui/components/inline.d.ts +1 -1
  239. package/dist/primitives/badge.d.ts +1 -1
  240. package/dist/primitives/button.d.ts +1 -1
  241. package/dist/primitives/pixel-kortix-mark.d.ts +5 -4
  242. package/dist/primitives/pixel-kortix-mark.js +5 -15
  243. package/dist/primitives/tag.d.ts +1 -1
  244. package/dist/primitives/textarea.js +14 -0
  245. package/dist/primitives/toast.d.ts +2 -0
  246. package/dist/primitives/toast.js +4 -2
  247. package/dist/providers/ui-provider.d.ts +16 -0
  248. package/dist/session/actions/session-label.d.ts +1 -1
  249. package/dist/session/actions/session-label.js +3 -3
  250. package/dist/session/agents/agent-model.d.ts +92 -0
  251. package/dist/session/agents/agent-model.js +123 -0
  252. package/dist/session/agents/agent-state-mark.d.ts +10 -0
  253. package/dist/session/agents/agent-state-mark.js +22 -0
  254. package/dist/session/agents/agent-strip.d.ts +58 -0
  255. package/dist/session/agents/agent-strip.js +259 -0
  256. package/dist/session/agents/held-messages.d.ts +33 -0
  257. package/dist/session/agents/held-messages.js +50 -0
  258. package/dist/session/agents/legacy-subagent-chat.d.ts +11 -0
  259. package/dist/session/agents/legacy-subagent-chat.js +19 -0
  260. package/dist/session/agents/session-peek.d.ts +20 -0
  261. package/dist/session/agents/session-peek.js +67 -0
  262. package/dist/session/agents/session-prompt.d.ts +13 -0
  263. package/dist/session/agents/session-prompt.js +18 -0
  264. package/dist/session/agents/steer-session.d.ts +13 -0
  265. package/dist/session/agents/steer-session.js +29 -0
  266. package/dist/session/agents/subagent-dialog-content.d.ts +11 -0
  267. package/dist/session/agents/subagent-dialog-content.js +115 -0
  268. package/dist/session/agents/subagent-view.d.ts +8 -0
  269. package/dist/session/agents/subagent-view.js +18 -0
  270. package/dist/session/agents/tasks-panel.d.ts +13 -0
  271. package/dist/session/agents/tasks-panel.js +41 -0
  272. package/dist/session/agents/workflow-run-controls.d.ts +43 -0
  273. package/dist/session/agents/workflow-run-controls.js +141 -0
  274. package/dist/session/composer/ComposerCard.d.ts +1 -1
  275. package/dist/session/composer/ComposerCard.js +3 -3
  276. package/dist/session/composer/agent-selector.js +13 -19
  277. package/dist/session/composer/composer-underbar.d.ts +3 -1
  278. package/dist/session/composer/composer-underbar.js +2 -2
  279. package/dist/session/composer/composer.d.ts +5 -0
  280. package/dist/session/composer/composer.js +16 -10
  281. package/dist/session/composer/editor/composer-editor.js +19 -8
  282. package/dist/session/composer/editor/ultracode.d.ts +34 -0
  283. package/dist/session/composer/editor/ultracode.js +127 -0
  284. package/dist/session/composer/send-blockers.d.ts +1 -11
  285. package/dist/session/composer/send-blockers.js +1 -11
  286. package/dist/session/composer/session-composer-readiness.d.ts +1 -28
  287. package/dist/session/composer/session-composer-readiness.js +5 -16
  288. package/dist/session/header/reminder-parts.d.ts +1 -1
  289. package/dist/session/header/session-site-header.js +6 -3
  290. package/dist/session/header/subagent-hover-card.d.ts +0 -2
  291. package/dist/session/header/subagent-hover-card.js +1 -4
  292. package/dist/session/models/claude-connection-slot.d.ts +11 -0
  293. package/dist/session/models/claude-connection-slot.js +30 -0
  294. package/dist/session/models/model-availability.d.ts +3 -1
  295. package/dist/session/models/model-availability.js +3 -0
  296. package/dist/session/models/model-selector.js +11 -12
  297. package/dist/session/models/model-tags.d.ts +9 -0
  298. package/dist/session/models/model-tags.js +8 -0
  299. package/dist/session/panel/easy/easy-panel.js +1 -1
  300. package/dist/session/panel/easy/step-icon.js +5 -1
  301. package/dist/session/panel/mobile-tool-drawer.js +1 -1
  302. package/dist/session/panel/session-action-panel-column.js +1 -1
  303. package/dist/session/panel/session-desktop.js +41 -14
  304. package/dist/session/panel/session-panel-provider.d.ts +1 -1
  305. package/dist/session/panel/session-panel-provider.js +7 -11
  306. package/dist/session/prompts/question-prompt.js +3 -1
  307. package/dist/session/status/session-error-banner.js +4 -1
  308. package/dist/session/thread/session-chat.js +286 -296
  309. package/dist/session/thread/session-context-modal.js +29 -10
  310. package/dist/session/thread/session-context-spawned-sessions.d.ts +13 -0
  311. package/dist/session/thread/session-context-spawned-sessions.js +44 -0
  312. package/dist/session/thread/session-context-sub-sessions.js +3 -8
  313. package/dist/session/thread/transcript.d.ts +3 -0
  314. package/dist/session/thread/transcript.js +32 -8
  315. package/dist/session/tool/shared/full-view-action.d.ts +29 -0
  316. package/dist/session/tool/shared/full-view-action.js +43 -0
  317. package/dist/session/tool/tool-part-renderer.js +10 -2
  318. package/dist/session/tool/tools/agent-message-tool.js +2 -2
  319. package/dist/session/tool/tools/agent-spawn-tool.js +2 -2
  320. package/dist/session/tool/tools/agent-status-tool.js +2 -2
  321. package/dist/session/tool/tools/kortix-action-tool.d.ts +2 -0
  322. package/dist/session/tool/tools/kortix-action-tool.js +148 -0
  323. package/dist/session/tool/tools/kortix-tool-card.d.ts +83 -0
  324. package/dist/session/tool/tools/kortix-tool-card.js +186 -0
  325. package/dist/session/tool/tools/multi-agent-tool-bodies.d.ts +11 -0
  326. package/dist/session/tool/tools/multi-agent-tool-bodies.js +141 -0
  327. package/dist/session/tool/tools/multi-agent-tool-data.d.ts +63 -0
  328. package/dist/session/tool/tools/multi-agent-tool-data.js +118 -0
  329. package/dist/session/tool/tools/multi-agent-tools.d.ts +9 -0
  330. package/dist/session/tool/tools/multi-agent-tools.js +38 -0
  331. package/dist/session/tool/tools/question-tool.js +1 -1
  332. package/dist/session/tool/tools/register.d.ts +3 -0
  333. package/dist/session/tool/tools/register.js +3 -0
  334. package/dist/session/tool/tools/session-spawn-tool.js +2 -2
  335. package/dist/session/tool/tools/task-tool.d.ts +1 -1
  336. package/dist/session/tool/tools/task-tool.js +29 -41
  337. package/dist/session/tool/tools/workflow-progress.d.ts +34 -0
  338. package/dist/session/tool/tools/workflow-progress.js +186 -0
  339. package/dist/session/tool/tools/workflow-run.d.ts +128 -0
  340. package/dist/session/tool/tools/workflow-run.js +251 -0
  341. package/dist/session/tool/tools/workflow-tool.d.ts +9 -0
  342. package/dist/session/tool/tools/workflow-tool.js +253 -0
  343. package/dist/session/turn/notice-batch-group.d.ts +12 -0
  344. package/dist/session/turn/notice-batch-group.js +17 -0
  345. package/dist/session/turn/peer-message-row.d.ts +14 -0
  346. package/dist/session/turn/peer-message-row.js +57 -0
  347. package/dist/session/turn/subagent-notice-row.d.ts +4 -0
  348. package/dist/session/turn/subagent-notice-row.js +50 -0
  349. package/dist/session/turn/subagent-notice.d.ts +58 -0
  350. package/dist/session/turn/subagent-notice.js +111 -0
  351. package/dist/session/turn/user-message.js +24 -5
  352. package/dist/styles/tokens.css +2 -0
  353. package/dist/styles.css +1 -1
  354. package/dist/terminal/session-terminal-connect-bar.js +1 -1
  355. package/dist/workspace/admin/project-admin-dashboard.d.ts +53 -0
  356. package/dist/workspace/admin/project-admin-dashboard.js +252 -0
  357. package/dist/workspace/admin/project-admin-nav.d.ts +20 -0
  358. package/dist/workspace/admin/project-admin-nav.js +41 -0
  359. package/dist/workspace/home/welcome-body.js +25 -3
  360. package/dist/workspace/index.d.ts +6 -2
  361. package/dist/workspace/index.js +12 -2
  362. package/dist/workspace/layout/new-session-create.js +3 -3
  363. package/dist/workspace/layout/project-home.js +3 -3
  364. package/dist/workspace/memory/memory-labels.js +5 -0
  365. package/dist/workspace/repository-disconnected.js +2 -2
  366. package/dist/workspace/sessions/board-dispatch.d.ts +52 -0
  367. package/dist/workspace/sessions/board-dispatch.js +110 -0
  368. package/dist/workspace/sessions/board-grouping.d.ts +63 -0
  369. package/dist/workspace/sessions/board-grouping.js +141 -0
  370. package/dist/workspace/sessions/board-peek.d.ts +15 -0
  371. package/dist/workspace/sessions/board-peek.js +54 -0
  372. package/dist/workspace/sessions/board-state-mark.d.ts +15 -0
  373. package/dist/workspace/sessions/board-state-mark.js +24 -0
  374. package/dist/workspace/sessions/project-sessions-view.js +42 -31
  375. package/dist/workspace/sessions/sessions-board.d.ts +12 -0
  376. package/dist/workspace/sessions/sessions-board.js +214 -0
  377. package/dist/workspace/sidebar/footer/project-manifest-issues-alert.d.ts +46 -0
  378. package/dist/workspace/sidebar/footer/project-manifest-issues-alert.js +85 -0
  379. package/dist/workspace/sidebar/footer/sidebar-alert.js +1 -1
  380. package/dist/workspace/sidebar/new-agent-modal-provider.d.ts +12 -0
  381. package/dist/workspace/sidebar/new-agent-modal-provider.js +19 -0
  382. package/dist/workspace/sidebar/project-nav-items.d.ts +3 -1
  383. package/dist/workspace/sidebar/project-nav-items.js +53 -5
  384. package/dist/workspace/sidebar/project-session-list.js +35 -12
  385. package/dist/workspace/sidebar/project-sidebar.js +6 -3
  386. package/dist/workspace/sidebar/session-filter-menu.js +2 -1
  387. package/dist/workspace/space/space-blocks.d.ts +25 -0
  388. package/dist/workspace/space/space-blocks.js +124 -0
  389. package/dist/workspace/space/space-filter-tabs.d.ts +17 -0
  390. package/dist/workspace/space/space-filter-tabs.js +31 -0
  391. package/dist/workspace/space/space-page.d.ts +24 -0
  392. package/dist/workspace/space/space-page.js +157 -0
  393. package/dist/workspace/space/space-room.d.ts +20 -0
  394. package/dist/workspace/space/space-room.js +27 -0
  395. package/dist/workspace/space/space-tab-menu.d.ts +14 -0
  396. package/dist/workspace/space/space-tab-menu.js +127 -0
  397. package/dist/workspace/space/space-tab-panels.d.ts +9 -0
  398. package/dist/workspace/space/space-tab-panels.js +203 -0
  399. package/dist/workspace/space/space-templates.d.ts +34 -0
  400. package/dist/workspace/space/space-templates.js +71 -0
  401. package/dist/workspace/space/use-space-filter.d.ts +10 -0
  402. package/dist/workspace/space/use-space-filter.js +40 -0
  403. package/dist/workspace/space/use-space-manifest.d.ts +8 -0
  404. package/dist/workspace/space/use-space-manifest.js +27 -0
  405. package/dist/workspace/spaces/space-timeline.js +2 -2
  406. package/package.json +56 -53
  407. package/skills/kortix-ui/SKILL.md +1 -1
  408. package/skills/kortix-ui/references/custom-dashboard.md +10 -4
  409. package/skills/kortix-ui/references/modules.md +10 -8
  410. package/dist/_vendor/shared/meta-agent.d.ts +0 -7
  411. package/dist/customize/agents/agent-grant-pages.d.ts +0 -37
  412. package/dist/customize/agents/agent-grant-pages.js +0 -226
  413. package/dist/customize/agents/agent-triggers-section.d.ts +0 -17
  414. package/dist/customize/agents/agent-triggers-section.js +0 -109
  415. package/dist/customize/migrate-to-v2/index.d.ts +0 -5
  416. package/dist/customize/migrate-to-v2/index.js +0 -5
  417. package/dist/customize/migrate-to-v2/migration-prompt.d.ts +0 -16
  418. package/dist/customize/migrate-to-v2/migration-prompt.js +0 -59
  419. package/dist/customize/migrate-to-v2/upgrade-defs.d.ts +0 -30
  420. package/dist/customize/migrate-to-v2/upgrade-defs.js +0 -43
  421. package/dist/customize/migrate-to-v2/upgrade-view.d.ts +0 -32
  422. package/dist/customize/migrate-to-v2/upgrade-view.js +0 -152
  423. package/dist/customize/migrate-to-v2/use-run-upgrade.d.ts +0 -18
  424. package/dist/customize/migrate-to-v2/use-run-upgrade.js +0 -16
  425. package/dist/customize/shared/capability-tabs.d.ts +0 -3
  426. package/dist/customize/shared/capability-tabs.js +0 -137
  427. package/dist/customize/skills/skill-scope.d.ts +0 -14
  428. package/dist/customize/skills/skill-scope.js +0 -18
  429. package/dist/internal/lib/manifest-version.d.ts +0 -21
  430. package/dist/internal/lib/manifest-version.js +0 -55
  431. package/dist/session/composer/hooks/use-composer-escape-stop.d.ts +0 -6
  432. package/dist/session/composer/hooks/use-composer-escape-stop.js +0 -28
  433. package/dist/session/thread/sub-session-modal-content.d.ts +0 -8
  434. package/dist/session/thread/sub-session-modal-content.js +0 -23
  435. package/dist/session/thread/sub-session-modal.d.ts +0 -2
  436. package/dist/session/thread/sub-session-modal.js +0 -14
  437. package/dist/workspace/sidebar/footer/project-manifest-upgrade-alert.d.ts +0 -13
  438. package/dist/workspace/sidebar/footer/project-manifest-upgrade-alert.js +0 -48
@@ -1,5 +1,19 @@
1
1
  // Generated from the final user-visible i18n audit. Keys are SHA-256(message)[0:12].
2
2
  export const REMAINING_UI_TRANSLATION_KEYS = {
3
+ "trigger": 'text683259feabbf',
4
+ "New trigger": 'texta38f4ea67a30',
5
+ "Search triggers": 'textcf789cba73dc',
6
+ "No triggers yet": 'text362ec1f12075',
7
+ "Start agents or wake sessions on a schedule or an event.": 'text8fbb8c347fc0',
8
+ "Create a trigger and your agent runs on its own, no prompt needed.": 'texte9acea9f91da',
9
+ "Have an agent run when a change request merges.": 'text0e8f0fa67e67',
10
+ "change request trigger": 'text20c14db54300',
11
+ "New change request trigger": 'textb0d2b95916ce',
12
+ "Search change request triggers": 'textd025f8dc1334',
13
+ "No change request triggers yet": 'text1bc4d0bc8d03',
14
+ "Create one to have an agent run when a change request merges.": 'text3c11a07619e0',
15
+ "Change request merged": 'text5ffd973e20ed',
16
+ "Branch": 'text52656e8104ee',
3
17
  "Connector events": 'text0ba357fa63f8',
4
18
  "Connector event": 'textca395c4d19b2',
5
19
  "connector event": 'text6064256ee716',
@@ -11,7 +25,7 @@ export const REMAINING_UI_TRANSLATION_KEYS = {
11
25
  "New App event": 'text064694999e1f',
12
26
  "Search App events": 'text1934aa0740bb',
13
27
  "No App events yet": 'text25db7e5609e5',
14
- "An App starts agents by emitting events. Add a trigger with on: { event, app } in kortix.yaml.": 'text9f8f92588517',
28
+ "Create one to have an agent run when one of your Apps sends an event.": 'textd85b56df2c94',
15
29
  Drive: 'text6312b4b9baf1',
16
30
  Drives: 'text729fe0e7b138',
17
31
  '{label} has finished.': 'text27d628c8b427',
@@ -213,9 +227,7 @@ export const REMAINING_UI_TRANSLATION_KEYS = {
213
227
  'Every tool runs without asking. Only the rules below can stop one.': 'texta63fb2eebd02',
214
228
  'Everything an owner can do except deleting the account or transferring ownership. Also Manager on every project.': 'textc8ef36aed650',
215
229
  Expired: 'text424a2551d356',
216
- 'Moves kortix.toml or a version 2 kortix.yaml to version 3: the project registers skills, tools, commands and extensions, and each agent enables them by name. Refreshes platform-managed skills and opens a change request for review.': 'text7823a1f3af93',
217
230
  Extensions: 'textfe3436af86b4',
218
- 'Upgrade manifest to v3 (kortix.yaml)': 'text08edd5b6dcdc',
219
231
  Failed: 'text031a8f0f659d',
220
232
  Favicon: 'text4295528943df',
221
233
  'Fetching deals updated ≤ 7d': 'text5bae674104b6',
@@ -283,6 +295,7 @@ export const REMAINING_UI_TRANSLATION_KEYS = {
283
295
  'Loading your workspace': 'text22cd35468c29',
284
296
  Logo: 'textd707dc2f1936',
285
297
  Logs: 'textea2100dc89ae',
298
+ Loops: 'textc08f99e3947d',
286
299
  Machine: 'text8f1cc42d7c1c',
287
300
  macOS: 'textaed6b7aa2a05',
288
301
  Manager: 'text8b2085f74dfa',
@@ -387,7 +400,6 @@ export const REMAINING_UI_TRANSLATION_KEYS = {
387
400
  'Requests are checked against the saved secret .': 'textc6fbb4b00507',
388
401
  'research/': 'text2f80158a9d89',
389
402
  'Reserving your computer': 'texta7d795204fda',
390
- Reminders: 'text7971dd752669',
391
403
  Review: 'textaff0766a5290',
392
404
  Revoked: 'textf6f738d04392',
393
405
  Routing: 'textbcba696f3eb1',
@@ -515,7 +527,6 @@ export const REMAINING_UI_TRANSLATION_KEYS = {
515
527
  'your-company/': 'text7a9f6daee641',
516
528
  '. The session keeps its id; the sandbox is rebuilt.': 'text09a3bb2aced6',
517
529
  '· grant no longer matches an agent': 'textc795f93da2e5',
518
- "(kortix_version 2) to edit this agent's instructions, model, tool permissions and access here.": 'text479d92cbfaa1',
519
530
  ') stops running and is removed.': 'text3109205d1fc7',
520
531
  '@ already has access to this repo': 'texta9ab51e18b56',
521
532
  '⌘S': 'text8cd003e6301b',
@@ -559,7 +570,6 @@ export const REMAINING_UI_TRANSLATION_KEYS = {
559
570
  'Can edit': 'text5abe9e1fbc5b',
560
571
  'Can view': 'text151dc282a69e',
561
572
  'Change what can do in .': 'text8c4e24be27f2',
562
- 'Changes an agent makes to this workspace. Every run opens a change request for you to review — nothing merges on its own.': 'textc6414eb01d9a',
563
573
  'Clear notifications': 'texte6f312c6b6ef',
564
574
  'Clone address': 'textac830bd3c755',
565
575
  'Clone command': 'text6264f3bfdd91',
@@ -757,7 +767,6 @@ export const REMAINING_UI_TRANSLATION_KEYS = {
757
767
  'Try a different term.': 'textce18e358bf01',
758
768
  'Try adjusting the filters or clearing the search.': 'text0713dbee5126',
759
769
  'Unsaved changes.': 'textefa5855ff509',
760
- Upgrades: 'texte02a5941602a',
761
770
  'Use the agent's usual model': 'text6960ac83d152',
762
771
  'Use your own Git client': 'textd29222de0472',
763
772
  'Uses the selected agent, project, or platform default.': 'text4eb861e5d86e',
@@ -23,7 +23,7 @@ export declare function Rise({ delay, className, children, }: {
23
23
  * traffic lights and the frame's Back control.
24
24
  */
25
25
  export declare function AuthMobileLogo(): import("react").JSX.Element;
26
- export declare function StepHeader({ title, tagline, description, mark, markOnMobile, }: {
26
+ export declare function StepHeader({ title, description, mark, markOnMobile, }: {
27
27
  /** A string, or a string led by a status mark (a decided approval). */
28
28
  title: React.ReactNode;
29
29
  /**
@@ -35,8 +35,6 @@ export declare function StepHeader({ title, tagline, description, mark, markOnMo
35
35
  /** Show the mark below `md` too. For a header outside `AuthFrame` (a modal),
36
36
  * where no corner logo stands in for it on mobile. */
37
37
  markOnMobile?: boolean;
38
- /** Second line in the same size as the title, dimmed (entry step only). */
39
- tagline?: string;
40
38
  description?: React.ReactNode;
41
39
  }): import("react").JSX.Element;
42
40
  export declare function FieldLabel({ htmlFor, children }: {
@@ -41,8 +41,8 @@ export function AuthMobileLogo() {
41
41
  const tHardcodedUi = useTranslations('hardcodedUi');
42
42
  return (_jsx("div", { className: "kx-auth-mobile-logo absolute top-6 left-6 z-10 md:hidden", children: _jsx(Link, { href: "/", "aria-label": tHardcodedUi.raw('i18nComplete.text7ecec93ed268'), className: "hit-area-3 inline-flex", children: _jsx(KortixLogo, { variant: "icon", size: 22, className: "text-foreground" }) }) }));
43
43
  }
44
- export function StepHeader({ title, tagline, description, mark, markOnMobile = false, }) {
45
- return (_jsxs("div", { className: "mb-10", children: [mark ? (_jsx("div", { className: markOnMobile ? undefined : 'hidden md:block', children: mark })) : (_jsx(KortixLogo, { variant: "icon", size: 22, className: "text-foreground hidden md:block" })), _jsx("h1", { className: cn('text-foreground text-2xl font-medium tracking-tight md:mt-6', mark && markOnMobile && 'mt-6'), children: title }), tagline ? (_jsx("p", { className: "text-muted-foreground text-2xl font-medium tracking-tight text-balance", children: tagline })) : null, description ? (_jsx("p", { className: "text-muted-foreground mt-2 text-sm text-pretty", children: description })) : null] }));
44
+ export function StepHeader({ title, description, mark, markOnMobile = false, }) {
45
+ return (_jsxs("div", { className: "mb-10", children: [mark ? (_jsx("div", { className: markOnMobile ? undefined : 'hidden md:block', children: mark })) : (_jsx(KortixLogo, { variant: "icon", size: 22, className: "text-foreground hidden md:block" })), _jsx("h1", { className: cn('text-foreground text-2xl font-medium tracking-tight md:mt-6', mark && markOnMobile && 'mt-6'), children: title }), description ? (_jsx("p", { className: "text-muted-foreground mt-2 text-sm text-pretty", children: description })) : null] }));
46
46
  }
47
47
  export function FieldLabel({ htmlFor, children }) {
48
48
  return (_jsx("label", { htmlFor: htmlFor, className: "text-muted-foreground text-sm font-medium", children: children }));
@@ -1,4 +1,5 @@
1
1
  /** @internal Kortix apps only. No semver: it may change in any release. */
2
2
  export declare function formatSessionCostCredits(value: number, locale?: string): string;
3
3
  export declare function formatSessionCostExactCredits(value: number, locale?: string): string;
4
+ export declare function formatSessionCostUsd(value: number, locale?: string): string;
4
5
  export declare function formatSessionCostDuration(value: number): string;
@@ -15,6 +15,17 @@ export function formatSessionCostExactCredits(value, locale = 'en-US') {
15
15
  maximumFractionDigits: Math.abs(credits) < 10 ? 8 : 2,
16
16
  });
17
17
  }
18
+ // The session usage view reads model spend in US dollars, the unit the ledger
19
+ // stores. Two decimals from $1 up, up to four below, and `<$0.0001` for a
20
+ // non-zero amount under that, so a cheap model's session never reads $0.00.
21
+ const SMALLEST_USD = 0.0001;
22
+ export function formatSessionCostUsd(value, locale = 'en-US') {
23
+ const usd = Number.isFinite(value) ? value : 0;
24
+ const format = (amount, maximumFractionDigits) => new Intl.NumberFormat(locale, { style: 'currency', currency: 'USD', minimumFractionDigits: 2, maximumFractionDigits }).format(amount);
25
+ if (usd !== 0 && Math.abs(usd) < SMALLEST_USD)
26
+ return `<${format(SMALLEST_USD, 4)}`;
27
+ return format(usd, Math.abs(usd) < 1 ? 4 : 2);
28
+ }
18
29
  export function formatSessionCostDuration(value) {
19
30
  let remaining = Math.max(0, Math.floor(Number.isFinite(value) ? value : 0));
20
31
  const units = [
@@ -17,7 +17,11 @@ export type AgentMarkSize = keyof typeof TILE;
17
17
  * Set on the element that paints the tile; `AgentMarkGlyph` reads `--mark-ink`.
18
18
  */
19
19
  export declare function agentMarkVars(slug: string): CSSProperties;
20
- /** The bare pixel figure, painted with `--mark-ink` from an ancestor. */
20
+ /** The tile's boundary: a hairline on the Kortix tile, none on a tinted one. */
21
+ export declare function agentMarkTileClass(slug: string): string | undefined;
22
+ /** The bare pixel figure, painted with `--mark-ink` from an ancestor. A 7 × 7
23
+ * mark fills `size`; a wider reserved grid (My Kortix's 12 × 10 symbol) keeps
24
+ * whole-pixel cells, `floor(size / 12)` px each. */
21
25
  export declare function AgentMarkGlyph({ slug, size }: {
22
26
  slug: string;
23
27
  size: AgentMarkSize;
@@ -35,4 +39,11 @@ export declare function AgentMark({ slug, size, tile, label, className, }: {
35
39
  label?: string;
36
40
  className?: string;
37
41
  }): import("react").JSX.Element;
42
+ /**
43
+ * An agent's name as a person reads it: My Kortix for the built-in agent,
44
+ * otherwise the manifest key in sentence case with its separators as spaces
45
+ * (`session-reviewer` → "Session reviewer"). One helper, so the sidebar, the
46
+ * agent page, the index and the hover hint name an agent the same way.
47
+ */
48
+ export declare function agentDisplayName(slug: string): string;
38
49
  export {};
@@ -1,9 +1,9 @@
1
1
  'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { cn } from '../lib/utils.js';
4
4
  import { Hint } from '../../primitives/hint.js';
5
- import { capitalizeWords, isMetaAgentName, META_AGENT_DISPLAY_NAME } from '../../_vendor/kortix-shared.js';
6
- import { PIXEL_MARK_SIZE, pixelMark } from '../lib/pixel-mark.js';
5
+ import { isMyKortixAgentName, MY_KORTIX_DISPLAY_NAME } from '../../_vendor/kortix-shared.js';
6
+ import { pixelMark } from '../lib/pixel-mark.js';
7
7
  /** Mark size → tile size. The mark is a multiple of 7, so each pixel lands on
8
8
  * whole device pixels; any other size blurs the edges. Literal px because
9
9
  * this repo's spacing scale is 0.23rem (`size-14` is 51.5px, not 56px). */
@@ -15,17 +15,31 @@ const TILE = { 14: 20, 21: 28, 28: 40, 42: 56, 56: 80 };
15
15
  */
16
16
  export function agentMarkVars(slug) {
17
17
  const { tone } = pixelMark(slug);
18
+ // The Kortix tile (My Kortix, the starter `kortix` agent) follows the Kortix
19
+ // tile rule: the page surface with a hairline, never an inverted black tile
20
+ // (decisions.md #8421). `agentMarkTileClass` adds the hairline.
21
+ if (tone.name === 'brand') {
22
+ return { '--mark-tile': 'var(--background)', '--mark-ink': 'var(--foreground)' };
23
+ }
18
24
  return {
19
25
  '--mark-tile': `light-dark(${tone.tile}, ${tone.tileDark})`,
20
26
  '--mark-ink': `light-dark(${tone.ink}, ${tone.inkDark})`,
21
27
  };
22
28
  }
23
- /** The bare pixel figure, painted with `--mark-ink` from an ancestor. */
29
+ /** The tile's boundary: a hairline on the Kortix tile, none on a tinted one. */
30
+ export function agentMarkTileClass(slug) {
31
+ return pixelMark(slug).tone.name === 'brand' ? 'ring-1 ring-inset ring-border' : undefined;
32
+ }
33
+ /** The bare pixel figure, painted with `--mark-ink` from an ancestor. A 7 × 7
34
+ * mark fills `size`; a wider reserved grid (My Kortix's 12 × 10 symbol) keeps
35
+ * whole-pixel cells, `floor(size / 12)` px each. */
24
36
  export function AgentMarkGlyph({ slug, size }) {
25
- return (_jsx("svg", { "aria-hidden": true, width: size, height: size,
37
+ const mark = pixelMark(slug);
38
+ const cell = mark.width === 7 ? size / 7 : Math.max(1, Math.floor(size / 12));
39
+ return (_jsxs("svg", { "aria-hidden": true, width: mark.width * cell, height: mark.height * cell, viewBox: `0 0 ${mark.width} ${mark.height}`,
26
40
  // Inline, so a host's `[&_svg]:size-4` default (menu rows) cannot rescale
27
- // the 7-pixel grid off whole device pixels.
28
- style: { width: size, height: size }, viewBox: `0 0 ${PIXEL_MARK_SIZE} ${PIXEL_MARK_SIZE}`, shapeRendering: "crispEdges", className: "shrink-0", children: _jsx("path", { d: pixelMark(slug).path, className: "fill-(--mark-ink)" }) }));
41
+ // the pixel grid off whole device pixels.
42
+ style: { width: mark.width * cell, height: mark.height * cell }, shapeRendering: "crispEdges", className: "shrink-0", children: [_jsx("path", { d: mark.path, className: "fill-(--mark-ink)" }), mark.ditherPath ? (_jsx("path", { d: mark.ditherPath, className: "fill-(--mark-ink)", opacity: 0.5 })) : null] }));
29
43
  }
30
44
  /**
31
45
  * An agent's pixel mark on its tile — the agent's face wherever it appears:
@@ -33,9 +47,18 @@ export function AgentMarkGlyph({ slug, size }) {
33
47
  */
34
48
  export function AgentMark({ slug, size = 14, tile = TILE[size], label, className, }) {
35
49
  // A mark is a face, not a name: the hover hint says whose face it is.
36
- const mark = (_jsx("span", { "aria-hidden": true, "data-slot": "agent-mark", style: { ...agentMarkVars(slug), width: tile, height: tile }, className: cn('inline-flex shrink-0 items-center justify-center bg-(--mark-tile)', size >= 28 ? 'rounded-md' : 'rounded-sm', className), children: _jsx(AgentMarkGlyph, { slug: slug, size: size }) }));
37
- return (_jsx(Hint, { side: "top", sideOffset: 6, alignOffset: 0, label: label ?? agentLabel(slug), children: mark }));
50
+ const mark = (_jsx("span", { "aria-hidden": true, "data-slot": "agent-mark", style: { ...agentMarkVars(slug), width: tile, height: tile }, className: cn('inline-flex shrink-0 items-center justify-center bg-(--mark-tile)', size >= 28 ? 'rounded-md' : 'rounded-sm', agentMarkTileClass(slug), className), children: _jsx(AgentMarkGlyph, { slug: slug, size: size }) }));
51
+ return (_jsx(Hint, { side: "top", sideOffset: 6, alignOffset: 0, label: label ?? agentDisplayName(slug), children: mark }));
38
52
  }
39
- function agentLabel(slug) {
40
- return isMetaAgentName(slug) ? META_AGENT_DISPLAY_NAME : capitalizeWords(slug);
53
+ /**
54
+ * An agent's name as a person reads it: My Kortix for the built-in agent,
55
+ * otherwise the manifest key in sentence case with its separators as spaces
56
+ * (`session-reviewer` → "Session reviewer"). One helper, so the sidebar, the
57
+ * agent page, the index and the hover hint name an agent the same way.
58
+ */
59
+ export function agentDisplayName(slug) {
60
+ if (isMyKortixAgentName(slug))
61
+ return MY_KORTIX_DISPLAY_NAME;
62
+ const words = slug.replace(/[-_]+/g, ' ').trim();
63
+ return words.charAt(0).toUpperCase() + words.slice(1);
41
64
  }
@@ -0,0 +1,22 @@
1
+ /** @internal Kortix apps only. No semver: it may change in any release. */
2
+ /**
3
+ * The one left-rail recipe: Project admin and the agent page. A rail is
4
+ * vertical `Tabs` whose rows are real links (the section is URL state),
5
+ * grouped under muted labels in the account hub's dialect
6
+ * (`account-settings-sidebar.tsx`).
7
+ */
8
+ import type { ReactNode } from 'react';
9
+ /**
10
+ * Each group is its own labelled tablist: arrow keys move inside a group, Tab
11
+ * moves to the next one. `after` sits below the list, outside it: a link that
12
+ * is not a tab. A group without `label` draws no heading.
13
+ */
14
+ export declare function RailGroup({ label, children, after }: {
15
+ label?: string;
16
+ children: ReactNode;
17
+ after?: ReactNode;
18
+ }): import("react").JSX.Element;
19
+ /** A rail row: pass to `TabsTrigger` with `size="md"`. */
20
+ export declare const RAIL_ROW_CLASS: string;
21
+ /** The same row on the narrow-screen horizontal strip. */
22
+ export declare const RAIL_HORIZONTAL_ROW_CLASS = "w-auto shrink-0 gap-2.5 px-3 py-0.75 whitespace-nowrap";
@@ -0,0 +1,16 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cn } from '../lib/utils.js';
4
+ import { TabsList } from '../../primitives/tabs.js';
5
+ /**
6
+ * Each group is its own labelled tablist: arrow keys move inside a group, Tab
7
+ * moves to the next one. `after` sits below the list, outside it: a link that
8
+ * is not a tab. A group without `label` draws no heading.
9
+ */
10
+ export function RailGroup({ label, children, after }) {
11
+ return (_jsxs("div", { children: [label ? _jsx("p", { className: "text-muted-foreground flex h-8 items-center px-2.5 text-xs font-medium", children: label }) : null, _jsx(TabsList, { orientation: "vertical", "aria-label": label, className: "w-full", children: children }), after] }));
12
+ }
13
+ /** A rail row: pass to `TabsTrigger` with `size="md"`. */
14
+ export const RAIL_ROW_CLASS = cn('gap-2 px-2.5 py-1 font-normal transition-none has-[>svg]:px-2.5', 'text-foreground data-[state=inactive]:text-foreground hover:bg-hover hover:text-foreground', 'data-[state=active]:bg-active data-[state=active]:font-medium', '[&_svg]:text-muted-foreground data-[state=active]:[&_svg]:text-foreground');
15
+ /** The same row on the narrow-screen horizontal strip. */
16
+ export const RAIL_HORIZONTAL_ROW_CLASS = 'w-auto shrink-0 gap-2.5 px-3 py-0.75 whitespace-nowrap';
@@ -19,7 +19,7 @@ import { PlugsIcon } from '@phosphor-icons/react';
19
19
  import { useQuery } from '@tanstack/react-query';
20
20
  import { useState } from 'react';
21
21
  import { useTranslations } from '../../i18n/index.js';
22
- import { customizePath } from '../../lib/routes.js';
22
+ import { adminPath } from '../../lib/routes.js';
23
23
  import { Button } from '../../primitives/button.js';
24
24
  import { InfoBanner } from '../../primitives/info-banner.js';
25
25
  import Loading from '../../primitives/loading.js';
@@ -62,7 +62,7 @@ export function ReconnectGitHubButton({ projectId, className }) {
62
62
  if (state.install_url)
63
63
  window.open(state.install_url, '_blank', 'noopener,noreferrer');
64
64
  else
65
- window.location.assign(customizePath(projectId, 'settings?section=git'));
65
+ window.location.assign(adminPath(projectId, 'git'));
66
66
  }
67
67
  catch {
68
68
  errorToast(t('reconnectError'));
@@ -21,8 +21,22 @@ export declare function goalProgress(goal: ProjectGoalDocument | null): {
21
21
  };
22
22
  /** Open asks for a person (not the agent): what the goal waits on someone for. */
23
23
  export declare function goalOpenAsks(goal: ProjectGoalDocument | null): ProjectGoalItem[];
24
- /** The goal needs a person: an open ask, or a health issue. */
24
+ /** The goal waits on a person: its state is `waiting_on_user`, or it has an open ask. */
25
25
  export declare function goalNeedsYou(goal: ProjectGoal): boolean;
26
+ /** The goal runs into a problem no person was asked about: a health issue (no heartbeat, a failed wake, …). */
27
+ export declare function goalNeedsAttention(goal: ProjectGoal): boolean;
28
+ /** When the goal last woke: the heartbeat's last run, else the wake GOAL.md records. */
29
+ export declare function goalLastWake(goal: Pick<ProjectGoal, 'goal' | 'heartbeat'>): string | null;
30
+ /** Who a goal is for, by name: "You", the member's email, else "A teammate". */
31
+ export declare function useGoalPerson(projectId: string): (userId: string | null | undefined) => string | null;
32
+ /**
33
+ * Start a goal from its outcome: a new session whose first message is the
34
+ * outcome plus `MAKE_GOAL_PROMPT`, so the agent writes GOAL.md and its done
35
+ * criteria.
36
+ */
37
+ export declare function useStartGoal(projectId: string): (outcome: string) => void;
38
+ /** The goal is for this person (GOAL.md `assigned_user`). */
39
+ export declare function goalAssignedTo(goal: Pick<ProjectGoal, 'goal'>, userId: string | null | undefined): boolean;
26
40
  /** "in 33 min", "2 hr ago", "Tue 09:00": the reminders time format. */
27
41
  export declare function formatGoalTime(iso: string | null | undefined, locale: string, now: number): string;
28
42
  export declare function goalHref(projectId: string, goal: Pick<ProjectGoal, 'scope' | 'slug'>): string | null;
@@ -4,6 +4,12 @@ import { formatFireTime } from '../reminders/reminder-format.js';
4
4
  import { useTranslations } from '../../i18n/index.js';
5
5
  import { StatusBadge, StatusDot } from '../../primitives/status.js';
6
6
  import { uiRoutes } from '../../lib/routes.js';
7
+ import { useUiViewerId } from '../../providers/ui-provider.js';
8
+ import { useAccountMembers } from '../account-hub/use-account-members.js';
9
+ import { useNewProjectSession } from '../hooks/projects/use-new-project-session.js';
10
+ import { MAKE_GOAL_PROMPT } from '@kortix/sdk';
11
+ import { useProjectAccountId } from '@kortix/sdk/react';
12
+ import { useCallback, useMemo } from 'react';
7
13
  const STATUS_TONE = {
8
14
  draft: 'neutral',
9
15
  active: 'info',
@@ -11,6 +17,7 @@ const STATUS_TONE = {
11
17
  waiting_external: 'neutral',
12
18
  verifying: 'info',
13
19
  done: 'success',
20
+ stopped: 'neutral',
14
21
  abandoned: 'neutral',
15
22
  };
16
23
  export function GoalStatusBadge({ status }) {
@@ -39,9 +46,42 @@ export function goalProgress(goal) {
39
46
  export function goalOpenAsks(goal) {
40
47
  return (goal?.items ?? []).filter((i) => i.kind === 'ask' && i.status === 'open' && i.owner !== 'agent');
41
48
  }
42
- /** The goal needs a person: an open ask, or a health issue. */
49
+ /** The goal waits on a person: its state is `waiting_on_user`, or it has an open ask. */
43
50
  export function goalNeedsYou(goal) {
44
- return goal.health.state === 'attention' || (goal.health.state !== 'closed' && goalOpenAsks(goal.goal).length > 0);
51
+ if (goal.health.state === 'closed')
52
+ return false;
53
+ return goal.goal?.status === 'waiting_on_user' || goalOpenAsks(goal.goal).length > 0;
54
+ }
55
+ /** The goal runs into a problem no person was asked about: a health issue (no heartbeat, a failed wake, …). */
56
+ export function goalNeedsAttention(goal) {
57
+ return goal.health.state === 'attention' && !goalNeedsYou(goal);
58
+ }
59
+ /** When the goal last woke: the heartbeat's last run, else the wake GOAL.md records. */
60
+ export function goalLastWake(goal) {
61
+ return goal.heartbeat?.last_fired_at ?? goal.goal?.last_wake_at ?? null;
62
+ }
63
+ /** Who a goal is for, by name: "You", the member's email, else "A teammate". */
64
+ export function useGoalPerson(projectId) {
65
+ const t = useTranslations('goals');
66
+ const viewerId = useUiViewerId();
67
+ const members = useAccountMembers(useProjectAccountId(projectId) ?? undefined);
68
+ const emails = useMemo(() => new Map((members.data ?? []).map((m) => [m.user_id, m.email])), [members.data]);
69
+ return useCallback((userId) => !userId ? null : userId === viewerId ? t('you') : (emails.get(userId) ?? t('anotherMember')), [emails, viewerId, t]);
70
+ }
71
+ /**
72
+ * Start a goal from its outcome: a new session whose first message is the
73
+ * outcome plus `MAKE_GOAL_PROMPT`, so the agent writes GOAL.md and its done
74
+ * criteria.
75
+ */
76
+ export function useStartGoal(projectId) {
77
+ const newSession = useNewProjectSession(projectId);
78
+ return useCallback((outcome) => newSession({
79
+ create: { pending_prompt: { text: `${outcome.trim()}\n\n${MAKE_GOAL_PROMPT}`, agent: null, model: null, variant: null } },
80
+ }), [newSession]);
81
+ }
82
+ /** The goal is for this person (GOAL.md `assigned_user`). */
83
+ export function goalAssignedTo(goal, userId) {
84
+ return !!userId && goal.goal?.assigned_user === userId;
45
85
  }
46
86
  /** "in 33 min", "2 hr ago", "Tue 09:00": the reminders time format. */
47
87
  export function formatGoalTime(iso, locale, now) {
@@ -8,7 +8,7 @@
8
8
  * reflects the fresh manifest.
9
9
  */
10
10
  import { type QueryClient } from '@tanstack/react-query';
11
- import { type AgentConfigBlock, type AgentConfigResponse, updateAgentConfig } from '@kortix/sdk';
11
+ import { type AgentConfigBlock, updateAgentConfig } from '@kortix/sdk';
12
12
  export declare function agentConfigQueryKey(projectId: string, agentName: string): readonly ["agent-config", string, string];
13
13
  /**
14
14
  * Keyed on the route's agent name, not on project-detail having listed it, so
@@ -25,6 +25,7 @@ export declare function useAgentConfig(projectId: string | undefined, agentName:
25
25
  default_agent: string | null;
26
26
  harness?: string;
27
27
  ignored_settings?: string[];
28
+ builtin?: "my_kortix";
28
29
  }, Error>;
29
30
  /**
30
31
  * Start the agent page's config read before the navigation, on card intent.
@@ -32,12 +33,6 @@ export declare function useAgentConfig(projectId: string | undefined, agentName:
32
33
  * it; a fresh entry is not read again.
33
34
  */
34
35
  export declare function prefetchAgentConfig(queryClient: QueryClient, projectId: string, agentName: string): void;
35
- /**
36
- * The agent page offers the manifest upgrade only on a v1 project, where the
37
- * full editor does not exist. A v2 or v3 manifest is editable (the server
38
- * answers `editable`); a read-only v3 answer never reads as "upgrade to v2".
39
- */
40
- export declare function agentConfigNeedsUpgrade(response: AgentConfigResponse | undefined): boolean;
41
36
  type AgentConfigSaveResponse = Awaited<ReturnType<typeof updateAgentConfig>>;
42
37
  export declare function applyAgentConfigSaveResponse(queryClient: QueryClient, projectId: string, agentName: string, response: AgentConfigSaveResponse): void;
43
38
  export declare function useUpdateAgentConfig(projectId: string, agentName: string): import("@tanstack/react-query").UseMutationResult<{
@@ -46,4 +41,13 @@ export declare function useUpdateAgentConfig(projectId: string, agentName: strin
46
41
  agent: string;
47
42
  schema_version: number;
48
43
  }, Error, AgentConfigBlock, unknown>;
44
+ export declare function agentCapabilitiesQueryKey(projectId: string, agentName: string): readonly ["agent-capabilities", string, string];
45
+ /**
46
+ * The project's catalog: every tool, skill and extension any agent can be
47
+ * given (`getProjectCapabilities`). Under the project's key, so adding or
48
+ * removing a skill refreshes it. An agent's grants stay in its draft.
49
+ */
50
+ export declare function useProjectCapabilities(projectId: string, enabled?: boolean): import("@tanstack/react-query").UseQueryResult<import("@kortix/sdk").ProjectCapabilities, Error>;
51
+ /** Every tool, skill and extension the agent can have (`getAgentCapabilities`). The grants stay in the draft. */
52
+ export declare function useAgentCapabilities(projectId: string, agentName: string, enabled?: boolean): import("@tanstack/react-query").UseQueryResult<import("@kortix/sdk").AgentCapabilities, Error>;
49
53
  export {};
@@ -8,8 +8,8 @@
8
8
  * reflects the fresh manifest.
9
9
  */
10
10
  import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
11
- import { getAgentConfig, updateAgentConfig, } from '@kortix/sdk';
12
- import { contract, invalidateProject } from '@kortix/sdk/react';
11
+ import { getAgentCapabilities, getAgentConfig, getProjectCapabilities, updateAgentConfig, } from '@kortix/sdk';
12
+ import { contract, invalidateProject, qk } from '@kortix/sdk/react';
13
13
  export function agentConfigQueryKey(projectId, agentName) {
14
14
  return ['agent-config', projectId, agentName];
15
15
  }
@@ -40,19 +40,11 @@ export function prefetchAgentConfig(queryClient, projectId, agentName) {
40
40
  ...contract('config'),
41
41
  });
42
42
  }
43
- /**
44
- * The agent page offers the manifest upgrade only on a v1 project, where the
45
- * full editor does not exist. A v2 or v3 manifest is editable (the server
46
- * answers `editable`); a read-only v3 answer never reads as "upgrade to v2".
47
- */
48
- export function agentConfigNeedsUpgrade(response) {
49
- return response !== undefined && response.editable !== true && response.schema_version === 1;
50
- }
51
43
  export function applyAgentConfigSaveResponse(queryClient, projectId, agentName, response) {
52
44
  queryClient.setQueryData(agentConfigQueryKey(projectId, agentName), (current) => ({
53
45
  agent: response.agent,
54
46
  schema_version: response.schema_version,
55
- // A save succeeds only on an editable manifest (v2 or v3); the server decides.
47
+ // A save succeeds only on an editable manifest; the server decides.
56
48
  editable: current?.editable ?? true,
57
49
  default_agent: current?.default_agent ?? null,
58
50
  block: response.block,
@@ -71,3 +63,28 @@ export function useUpdateAgentConfig(projectId, agentName) {
71
63
  },
72
64
  });
73
65
  }
66
+ export function agentCapabilitiesQueryKey(projectId, agentName) {
67
+ return ['agent-capabilities', projectId, agentName];
68
+ }
69
+ /**
70
+ * The project's catalog: every tool, skill and extension any agent can be
71
+ * given (`getProjectCapabilities`). Under the project's key, so adding or
72
+ * removing a skill refreshes it. An agent's grants stay in its draft.
73
+ */
74
+ export function useProjectCapabilities(projectId, enabled = true) {
75
+ return useQuery({
76
+ queryKey: [...qk.project.scope(projectId), 'capabilities'],
77
+ queryFn: () => getProjectCapabilities(projectId),
78
+ enabled: enabled && !!projectId,
79
+ ...contract('config'),
80
+ });
81
+ }
82
+ /** Every tool, skill and extension the agent can have (`getAgentCapabilities`). The grants stay in the draft. */
83
+ export function useAgentCapabilities(projectId, agentName, enabled = true) {
84
+ return useQuery({
85
+ queryKey: agentCapabilitiesQueryKey(projectId, agentName),
86
+ queryFn: () => getAgentCapabilities(projectId, agentName),
87
+ enabled: enabled && !!projectId && !!agentName,
88
+ ...contract('config'),
89
+ });
90
+ }
@@ -11,5 +11,11 @@ export declare function isSlashFocusKey(event: Pick<KeyboardEvent, 'key' | 'meta
11
11
  * A page whose search field is its main control: the field is focused on
12
12
  * arrival, and "/" jumps back to it from anywhere on the page except another
13
13
  * text field. `enabled` turns both off while the field is not on screen.
14
+ * `focusOnArrival: false` keeps only the "/" key, for a page whose search is
15
+ * not its main control (the Agents index). A field inside an embedded resource
16
+ * screen (`[data-capability-embed]`, the agent page) is never focused on
17
+ * arrival either: there the screen is one view among the agent's tabs.
14
18
  */
15
- export declare function useSlashFocus(ref: RefObject<HTMLInputElement | null>, enabled?: boolean): void;
19
+ export declare function useSlashFocus(ref: RefObject<HTMLInputElement | null>, enabled?: boolean, { focusOnArrival }?: {
20
+ focusOnArrival?: boolean;
21
+ }): void;
@@ -18,13 +18,19 @@ export function isSlashFocusKey(event, openLayer) {
18
18
  * A page whose search field is its main control: the field is focused on
19
19
  * arrival, and "/" jumps back to it from anywhere on the page except another
20
20
  * text field. `enabled` turns both off while the field is not on screen.
21
+ * `focusOnArrival: false` keeps only the "/" key, for a page whose search is
22
+ * not its main control (the Agents index). A field inside an embedded resource
23
+ * screen (`[data-capability-embed]`, the agent page) is never focused on
24
+ * arrival either: there the screen is one view among the agent's tabs.
21
25
  */
22
- export function useSlashFocus(ref, enabled = true) {
26
+ export function useSlashFocus(ref, enabled = true, { focusOnArrival = true } = {}) {
23
27
  useEffect(() => {
24
28
  if (!enabled || typeof window === 'undefined')
25
29
  return;
26
30
  // No autofocus on touch: it would open the on-screen keyboard on arrival.
27
- if (window.matchMedia?.('(pointer: fine)').matches) {
31
+ if (focusOnArrival &&
32
+ !ref.current?.closest('[data-capability-embed]') &&
33
+ window.matchMedia?.('(pointer: fine)').matches) {
28
34
  ref.current?.focus({ preventScroll: true });
29
35
  }
30
36
  const onKeyDown = (event) => {
@@ -40,5 +46,5 @@ export function useSlashFocus(ref, enabled = true) {
40
46
  };
41
47
  window.addEventListener('keydown', onKeyDown);
42
48
  return () => window.removeEventListener('keydown', onKeyDown);
43
- }, [ref, enabled]);
49
+ }, [ref, enabled, focusOnArrival]);
44
50
  }
@@ -0,0 +1,24 @@
1
+ /** @internal Kortix apps only. No semver: it may change in any release. */
2
+ import { useProjectConfig } from '@kortix/sdk/react';
3
+ type Agent = NonNullable<ReturnType<typeof useProjectConfig>>['agents'][number];
4
+ export declare const NewAgentContext: import("react").Context<(() => void) | null>;
5
+ /** Opens the New agent modal mounted beside the sidebar; null outside `NewAgentModalProvider`. */
6
+ export declare function useOpenNewAgent(): (() => void) | null;
7
+ /** Every agent by display name, hidden agents last. */
8
+ export declare function sortCustomizeAgents<T extends Pick<Agent, 'name'> & {
9
+ hidden?: boolean | null;
10
+ }>(agents: readonly T[]): T[];
11
+ /** Whether the pathname is a Project admin (Settings) page. The locale prefix
12
+ * the host may not strip is tolerated. */
13
+ export declare function isProjectAdminPath(pathname: string | null | undefined): boolean;
14
+ /**
15
+ * What Customize opens to, kept short on purpose: most configuration happens
16
+ * by asking an agent in a session, so the sidebar lists only the agents you
17
+ * pinned (none pinned: the first five) and All agents when more exist, then Review (with its "needs you" count), Models, and Settings
18
+ * (Project admin, whose top bar holds every library and Members).
19
+ * The header's + and All agents buttons sit on the Customize row itself.
20
+ */
21
+ export declare function ProjectCapabilityNav({ projectId }: {
22
+ projectId: string;
23
+ }): import("react").JSX.Element | null;
24
+ export {};