@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
@@ -22,6 +22,8 @@ export interface AgentDraft {
22
22
  set: SetKortix;
23
23
  setOc: SetRuntime;
24
24
  isDirty: boolean;
25
+ /** The last saved block: the draft compares against it. */
26
+ baseline: AgentConfigBlock;
25
27
  /** Throw the draft away and return to the baseline. */
26
28
  discard: () => void;
27
29
  /** A save landed: the server's block is the new baseline AND the new draft. */
@@ -127,8 +129,9 @@ export type AgentConfigSectionGroup = (typeof AGENT_CONFIG_SECTION_GROUPS)[numbe
127
129
  /**
128
130
  * The page's topics, in rail order, each under a group heading.
129
131
  *
130
- * General is the agent itself and who runs it: overview, identity, people,
131
- * triggers. Access is one topic per grant set — skills, connectors, secrets,
132
+ * General is the agent itself and who runs it: the overview (the agent at a
133
+ * glance, every grant summarized), its instructions, people, triggers and the
134
+ * basic switches. Access is one topic per grant set — skills, connectors, secrets,
132
135
  * Apps, project actions — each its own page (Marko, 2026-09-03: "split up
133
136
  * ACCESS … into its own standalone menu items on the left & we can have nicer
134
137
  * UX/UI for each"). Runtime is what a session runs on: model, tools,
@@ -142,8 +145,8 @@ export declare const AGENT_CONFIG_SECTIONS: readonly [{
142
145
  readonly label: "Overview";
143
146
  readonly group: "General";
144
147
  }, {
145
- readonly key: "basics";
146
- readonly label: "Basics";
148
+ readonly key: "instructions";
149
+ readonly label: "Instructions";
147
150
  readonly group: "General";
148
151
  }, {
149
152
  readonly key: "people";
@@ -153,13 +156,21 @@ export declare const AGENT_CONFIG_SECTIONS: readonly [{
153
156
  readonly key: "triggers";
154
157
  readonly label: "Triggers";
155
158
  readonly group: "General";
159
+ }, {
160
+ readonly key: "basics";
161
+ readonly label: "Basics";
162
+ readonly group: "General";
156
163
  }, {
157
164
  readonly key: "skills";
158
165
  readonly label: "Skills";
159
166
  readonly group: "Access";
160
167
  }, {
161
168
  readonly key: "subagents";
162
- readonly label: "Subagents";
169
+ readonly label: "Agents";
170
+ readonly group: "Access";
171
+ }, {
172
+ readonly key: "tools";
173
+ readonly label: "Tools";
163
174
  readonly group: "Access";
164
175
  }, {
165
176
  readonly key: "commands";
@@ -193,10 +204,6 @@ export declare const AGENT_CONFIG_SECTIONS: readonly [{
193
204
  readonly key: "model";
194
205
  readonly label: "Model";
195
206
  readonly group: "Runtime";
196
- }, {
197
- readonly key: "tools";
198
- readonly label: "Tools";
199
- readonly group: "Runtime";
200
207
  }, {
201
208
  readonly key: "workspace";
202
209
  readonly label: "Workspace";
@@ -209,8 +216,8 @@ export declare function useLocalizedAgentConfigCatalog(): {
209
216
  readonly label: "Overview";
210
217
  readonly group: "General";
211
218
  }, {
212
- readonly key: "basics";
213
- readonly label: "Basics";
219
+ readonly key: "instructions";
220
+ readonly label: "Instructions";
214
221
  readonly group: "General";
215
222
  }, {
216
223
  readonly key: "people";
@@ -220,13 +227,21 @@ export declare function useLocalizedAgentConfigCatalog(): {
220
227
  readonly key: "triggers";
221
228
  readonly label: "Triggers";
222
229
  readonly group: "General";
230
+ }, {
231
+ readonly key: "basics";
232
+ readonly label: "Basics";
233
+ readonly group: "General";
223
234
  }, {
224
235
  readonly key: "skills";
225
236
  readonly label: "Skills";
226
237
  readonly group: "Access";
227
238
  }, {
228
239
  readonly key: "subagents";
229
- readonly label: "Subagents";
240
+ readonly label: "Agents";
241
+ readonly group: "Access";
242
+ }, {
243
+ readonly key: "tools";
244
+ readonly label: "Tools";
230
245
  readonly group: "Access";
231
246
  }, {
232
247
  readonly key: "commands";
@@ -260,10 +275,6 @@ export declare function useLocalizedAgentConfigCatalog(): {
260
275
  readonly key: "model";
261
276
  readonly label: "Model";
262
277
  readonly group: "Runtime";
263
- }, {
264
- readonly key: "tools";
265
- readonly label: "Tools";
266
- readonly group: "Runtime";
267
278
  }, {
268
279
  readonly key: "workspace";
269
280
  readonly label: "Workspace";
@@ -271,13 +282,11 @@ export declare function useLocalizedAgentConfigCatalog(): {
271
282
  }];
272
283
  };
273
284
  export type AgentConfigSectionKey = (typeof AGENT_CONFIG_SECTIONS)[number]['key'];
274
- /** The grants only a kortix_version 3 manifest has: each names registered entries. */
285
+ /** The grants that name registered entries of the manifest. */
275
286
  export declare const REGISTRY_GRANT_SECTIONS: readonly ["subagents", "commands", "extensions"];
276
287
  export type RegistryGrant = (typeof REGISTRY_GRANT_SECTIONS)[number];
277
- /** The editor's topics for a manifest version. The registry grants exist from v3 on. */
278
- export declare function agentConfigSectionKeys(schemaVersion: number): AgentConfigSectionKey[];
279
288
  /**
280
- * The pick lists behind the v3 grant pages. Subagents are the declared,
289
+ * The pick lists behind the registry grant pages. Subagents are the declared,
281
290
  * enabled agents with `mode` `subagent` or `all`, never the agent itself.
282
291
  * Commands and extensions are the root manifest's registries.
283
292
  * ponytail: names registered in an `imports:` file are not listed; a picked
@@ -299,15 +308,20 @@ export declare function isAgentConfigSectionKey(value: string | null): value is
299
308
  * grants and the access to what the agent has"): who may use the agent, and
300
309
  * what the agent — and therefore they — may reach.
301
310
  */
302
- export declare function AgentConfigSections({ section, editor, options, skillsOptions, registryOptions, overview, triggers, people, skills, connectors, secrets, apps, drives, authority, }: {
311
+ export declare function AgentConfigSections({ section, editor, options, skillsOptions, registryOptions, overview, instructions, triggers, people, skills, connectors, secrets, apps, drives, sectionStyle, }: {
303
312
  section: AgentConfigSectionKey;
313
+ /** `tab` under the agent page's view switcher: the lead title goes, the
314
+ * switcher names the view. */
315
+ sectionStyle?: 'panel' | 'tab';
304
316
  editor: AgentDraft;
305
317
  options: AgentEditorOptions;
306
318
  skillsOptions: GrantOption[];
307
- /** The v3 grant pick lists (`registryGrantOptions`). */
319
+ /** The registry grant pick lists (`registryGrantOptions`). */
308
320
  registryOptions?: Record<RegistryGrant, GrantOption[]>;
309
- /** Description + instructions — a page-owned section, the Overview tab. */
321
+ /** The agent at a glance — a page-owned section, the Overview tab. */
310
322
  overview?: React.ReactNode;
323
+ /** The system prompt editor — a page-owned section, the Instructions tab. */
324
+ instructions?: React.ReactNode;
311
325
  /** The agent's triggers — a page-owned section, the Triggers tab. */
312
326
  triggers?: React.ReactNode;
313
327
  /** Who may use the agent — a page-owned section, the People tab. */
@@ -323,8 +337,5 @@ export declare function AgentConfigSections({ section, editor, options, skillsOp
323
337
  apps?: React.ReactNode;
324
338
  /** Which shared drives the agent mounts. Page-owned, and only with Volumes on. */
325
339
  drives?: React.ReactNode;
326
- /** What the agent can do once its Kortix permissions meet its IAM ceiling —
327
- * a page-owned card under the Kortix permissions checklist. */
328
- authority?: React.ReactNode;
329
340
  }): import("react").JSX.Element;
330
341
  export { grantSummary } from './grant-mode-field.js';
@@ -1,10 +1,10 @@
1
1
  'use client';
2
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { useLocalizedUiCatalog } from '../../../i18n/ui-catalog/use-localized-ui-catalog.js';
4
4
  import { useTranslations as useI18nTranslations } from '../../../i18n/index.js';
5
5
  /**
6
- * The agent editor — every field of one `agents.<name>` block in a
7
- * kortix_version 2 or 3 manifest (agent-first spec §2.2), as three reusable parts
6
+ * The agent editor — every field of one `agents.<name>` block in
7
+ * `kortix.yaml` (agent-first spec §2.2), as three reusable parts
8
8
  * and no shell of its own.
9
9
  *
10
10
  * The shell is `/projects/[id]/agent/[name]`
@@ -128,7 +128,7 @@ export function useAgentDraft(initial) {
128
128
  setBaseline(block);
129
129
  setDraft(block);
130
130
  }, []);
131
- return { draft, oc: draft.behavior ?? {}, set, setOc, isDirty, discard, commit };
131
+ return { draft, oc: draft.behavior ?? {}, set, setOc, isDirty, baseline, discard, commit };
132
132
  }
133
133
  const CONNECTOR_STATUS_BADGE = {
134
134
  needs_auth: { label: 'Needs auth', variant: 'destructive' },
@@ -223,8 +223,9 @@ export const AGENT_CONFIG_SECTION_GROUPS = ['General', 'Access', 'Runtime'];
223
223
  /**
224
224
  * The page's topics, in rail order, each under a group heading.
225
225
  *
226
- * General is the agent itself and who runs it: overview, identity, people,
227
- * triggers. Access is one topic per grant set — skills, connectors, secrets,
226
+ * General is the agent itself and who runs it: the overview (the agent at a
227
+ * glance, every grant summarized), its instructions, people, triggers and the
228
+ * basic switches. Access is one topic per grant set — skills, connectors, secrets,
228
229
  * Apps, project actions — each its own page (Marko, 2026-09-03: "split up
229
230
  * ACCESS … into its own standalone menu items on the left & we can have nicer
230
231
  * UX/UI for each"). Runtime is what a session runs on: model, tools,
@@ -235,11 +236,13 @@ export const AGENT_CONFIG_SECTION_GROUPS = ['General', 'Access', 'Runtime'];
235
236
  */
236
237
  export const AGENT_CONFIG_SECTIONS = [
237
238
  { key: 'overview', label: 'Overview', group: 'General' },
238
- { key: 'basics', label: 'Basics', group: 'General' },
239
+ { key: 'instructions', label: 'Instructions', group: 'General' },
239
240
  { key: 'people', label: 'People', group: 'General' },
240
241
  { key: 'triggers', label: 'Triggers', group: 'General' },
242
+ { key: 'basics', label: 'Basics', group: 'General' },
241
243
  { key: 'skills', label: 'Skills', group: 'Access' },
242
- { key: 'subagents', label: 'Subagents', group: 'Access' },
244
+ { key: 'subagents', label: 'Agents', group: 'Access' },
245
+ { key: 'tools', label: 'Tools', group: 'Access' },
243
246
  { key: 'commands', label: 'Commands', group: 'Access' },
244
247
  { key: 'extensions', label: 'Extensions', group: 'Access' },
245
248
  { key: 'connectors', label: 'Connectors', group: 'Access' },
@@ -248,7 +251,6 @@ export const AGENT_CONFIG_SECTIONS = [
248
251
  { key: 'drives', label: 'Drives', group: 'Access' },
249
252
  { key: 'actions', label: 'Kortix permissions', group: 'Access' },
250
253
  { key: 'model', label: 'Model', group: 'Runtime' },
251
- { key: 'tools', label: 'Tools', group: 'Runtime' },
252
254
  { key: 'workspace', label: 'Workspace', group: 'Runtime' },
253
255
  ];
254
256
  export function useLocalizedAgentConfigCatalog() {
@@ -257,12 +259,8 @@ export function useLocalizedAgentConfigCatalog() {
257
259
  sections: AGENT_CONFIG_SECTIONS,
258
260
  });
259
261
  }
260
- /** The grants only a kortix_version 3 manifest has: each names registered entries. */
262
+ /** The grants that name registered entries of the manifest. */
261
263
  export const REGISTRY_GRANT_SECTIONS = ['subagents', 'commands', 'extensions'];
262
- /** The editor's topics for a manifest version. The registry grants exist from v3 on. */
263
- export function agentConfigSectionKeys(schemaVersion) {
264
- return AGENT_CONFIG_SECTIONS.map((s) => s.key).filter((key) => schemaVersion >= 3 || !REGISTRY_GRANT_SECTIONS.includes(key));
265
- }
266
264
  /** The names of one manifest registry (`commands:` or `extensions:`), with descriptions. */
267
265
  function registryEntries(manifest, key) {
268
266
  const registry = manifest[key];
@@ -276,7 +274,7 @@ function registryEntries(manifest, key) {
276
274
  .sort((a, b) => a.id.localeCompare(b.id));
277
275
  }
278
276
  /**
279
- * The pick lists behind the v3 grant pages. Subagents are the declared,
277
+ * The pick lists behind the registry grant pages. Subagents are the declared,
280
278
  * enabled agents with `mode` `subagent` or `all`, never the agent itself.
281
279
  * Commands and extensions are the root manifest's registries.
282
280
  * ponytail: names registered in an `imports:` file are not listed; a picked
@@ -286,7 +284,7 @@ function registryEntries(manifest, key) {
286
284
  export function registryGrantOptions(config, agentName) {
287
285
  let manifest = {};
288
286
  try {
289
- manifest = config.manifest_raw ? parseManifestText(config.manifest_raw, 'yaml') : {};
287
+ manifest = config.manifest_raw ? parseManifestText(config.manifest_raw) : {};
290
288
  }
291
289
  catch {
292
290
  // A manifest that does not parse lists nothing; the save path reports the error.
@@ -315,7 +313,7 @@ export function isAgentConfigSectionKey(value) {
315
313
  * grants and the access to what the agent has"): who may use the agent, and
316
314
  * what the agent — and therefore they — may reach.
317
315
  */
318
- export function AgentConfigSections({ section, editor, options, skillsOptions, registryOptions, overview, triggers, people, skills, connectors, secrets, apps, drives, authority, }) {
316
+ export function AgentConfigSections({ section, editor, options, skillsOptions, registryOptions, overview, instructions, triggers, people, skills, connectors, secrets, apps, drives, sectionStyle = 'panel', }) {
319
317
  const { draft, oc, set, setOc } = editor;
320
318
  // Every pane opens with a `lead` section (the pane title) and stacks its
321
319
  // later sections under Settings subsection headings.
@@ -323,6 +321,8 @@ export function AgentConfigSections({ section, editor, options, skillsOptions, r
323
321
  switch (section) {
324
322
  case 'overview':
325
323
  return _jsx(_Fragment, { children: overview });
324
+ case 'instructions':
325
+ return _jsx(_Fragment, { children: instructions });
326
326
  case 'people':
327
327
  return _jsx(_Fragment, { children: people });
328
328
  case 'skills':
@@ -340,7 +340,7 @@ export function AgentConfigSections({ section, editor, options, skillsOptions, r
340
340
  case 'drives':
341
341
  return _jsx(_Fragment, { children: drives });
342
342
  case 'actions':
343
- return (_jsxs(_Fragment, { children: [_jsx(ProjectActionsSection, { draft: draft, set: set }), authority] }));
343
+ return (_jsx(_Fragment, { children: _jsx(ProjectActionsSection, { draft: draft, set: set }) }));
344
344
  case 'triggers':
345
345
  return _jsx(_Fragment, { children: triggers });
346
346
  case 'model':
@@ -353,6 +353,6 @@ export function AgentConfigSections({ section, editor, options, skillsOptions, r
353
353
  return (_jsx(BasicsSection, { draft: draft, set: set, oc: oc, setOc: setOc, showDescription: false }));
354
354
  }
355
355
  })();
356
- return (_jsx(EditorSectionStyleProvider, { value: "panel", children: _jsx("div", { className: "space-y-8", children: body }) }));
356
+ return (_jsx(EditorSectionStyleProvider, { value: sectionStyle, children: _jsx("div", { className: "space-y-8", children: body }) }));
357
357
  }
358
358
  export { grantSummary } from './grant-mode-field.js';
@@ -1,26 +1,12 @@
1
1
  import type { UiTranslator } from '../../../i18n/index.js';
2
2
  import type { AgentGrantSetV2 } from '@kortix/sdk';
3
- import { type ReactNode } from 'react';
3
+ import type { ReactNode } from 'react';
4
4
  export type GrantMode = 'all' | 'pick' | 'none';
5
5
  /** Summarize a grant set — "All", "None", "3 picked" — for a card header. */
6
6
  export declare function grantSummary(v: AgentGrantSetV2 | undefined, tI18nComplete?: UiTranslator): {
7
7
  label: string;
8
8
  tone: 'muted' | 'outline';
9
9
  };
10
- export declare function GrantModeField({ value, onChange, alwaysRender, children, }: {
11
- value: AgentGrantSetV2 | undefined;
12
- onChange: (v: AgentGrantSetV2) => void;
13
- /** Render `children` in every mode, not only Pick — for a catalog that
14
- * stays on screen and shows each card as included / excluded. */
15
- alwaysRender?: boolean;
16
- children: (ctx: {
17
- selected: Set<string>;
18
- toggle: (id: string) => void;
19
- mode: GrantMode;
20
- }) => React.ReactNode;
21
- }): import("react").JSX.Element;
22
- /** All · Pick · None, with a checklist of the project's declared items when
23
- * in Pick mode. The one governance control reused for skills/connectors/secrets. */
24
10
  /** One pickable row: the id the grant stores, and what a person needs to
25
11
  * recognise it — a name, a second line, a status chip. */
26
12
  export interface GrantOption {
@@ -38,13 +24,15 @@ export declare function GrantSetField({ value, onChange, options, emptyLabel, ro
38
24
  options: GrantOption[];
39
25
  emptyLabel: string;
40
26
  /** Optional control rendered BESIDE each granted row (e.g. the connectors
41
- * field's "personal" toggle). The row itself is a `<button>`, so an
42
- * interactive accessory cannot be nested inside it — when this returns a
43
- * node the row is wrapped in a flex container and the accessory becomes a
44
- * sibling. Fields that pass nothing render exactly as before. */
27
+ * field's "personal" toggle). The row itself is a checkbox, so an
28
+ * interactive accessory is a sibling, never nested. */
45
29
  rowAccessory?: (id: string, isSelected: boolean) => ReactNode;
46
30
  }): import("react").JSX.Element;
47
- /** All · Pick · None over the grouped grantable Kortix permission catalog. */
31
+ /**
32
+ * The grant sentence over the grouped Kortix permission catalog, listed in
33
+ * every mode like every other Access view: All checks every box, None none,
34
+ * Specific the granted ones. A box turned off under All keeps the rest.
35
+ */
48
36
  export declare function KortixPermissionsField({ value, onChange, }: {
49
37
  value: AgentGrantSetV2 | undefined;
50
38
  onChange: (v: AgentGrantSetV2) => void;
@@ -2,18 +2,16 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useTranslations as useI18nTranslations } from '../../../i18n/index.js';
4
4
  /**
5
- * All · Pick · None — the one governance grant-mode machine, parameterized so
6
- * both a flat checklist (skills/connectors/secrets) and a grouped catalog
7
- * (kortix_permissions) share the same state transitions instead of re-implementing
8
- * them twice.
5
+ * The grant fields of the agent editor: the grant sentence (`GrantModeTabs`)
6
+ * over a list that is always shown, flat (skills, connectors, the registry
7
+ * grants) or grouped (kortix_permissions).
9
8
  */
10
- import { Tabs, TabsList, TabsTrigger } from '../../../primitives/tabs.js';
11
9
  import { Badge } from '../../../primitives/badge.js';
12
10
  import { Checkbox } from '../../../primitives/checkbox.js';
13
- import { useState } from 'react';
14
11
  import { KORTIX_PERMISSIONS_CATALOG } from './agent-editor-catalog.js';
15
12
  import { useUiParams } from '../../../providers/ui-provider.js';
16
13
  import { useProjectFeatureFlags } from '../../../internal/lib/use-project-feature-flags.js';
14
+ import { GrantModeTabs, plainGrantSwitch, useAgentGrant, withCatalog } from '../../shared/agent-resource-scope.js';
17
15
  /** Summarize a grant set — "All", "None", "3 picked" — for a card header. */
18
16
  export function grantSummary(v, tI18nComplete) {
19
17
  if (v === 'all')
@@ -26,64 +24,40 @@ export function grantSummary(v, tI18nComplete) {
26
24
  tone: 'outline',
27
25
  };
28
26
  }
29
- const GRANT_MODES = [
30
- { value: 'all', label: 'All' },
31
- { value: 'pick', label: 'Pick' },
32
- { value: 'none', label: 'None' },
33
- ];
34
- export function GrantModeField({ value, onChange, alwaysRender = false, children, }) {
35
- const tI18nComplete = useI18nTranslations('hardcodedUi.i18nComplete');
36
- const mode = value === 'all' ? 'all' : value === 'none' || value === undefined ? 'none' : 'pick';
37
- const [wantPick, setWantPick] = useState(() => Array.isArray(value) && value.length > 0);
38
- const effectiveMode = value === 'all'
39
- ? 'all'
40
- : Array.isArray(value) && (value.length > 0 || wantPick)
41
- ? 'pick'
42
- : mode;
43
- const selected = new Set(Array.isArray(value) ? value : []);
44
- const pick = (m) => {
45
- setWantPick(m === 'pick');
46
- if (m === 'all')
47
- return onChange('all');
48
- if (m === 'none')
49
- return onChange('none');
50
- onChange(Array.isArray(value) ? value : []);
51
- };
52
- const toggle = (id) => {
53
- const next = new Set(selected);
54
- if (next.has(id))
55
- next.delete(id);
56
- else
57
- next.add(id);
58
- onChange([...next]);
59
- };
60
- return (_jsxs("div", { className: "space-y-3", children: [_jsx(Tabs, { value: effectiveMode, onValueChange: (m) => pick(m), children: _jsx(TabsList, { "aria-label": tI18nComplete.raw('text74009e6664f5'), children: GRANT_MODES.map((m) => (_jsx(TabsTrigger, { value: m.value, children: m.label }, m.value))) }) }), effectiveMode === 'pick' || alwaysRender
61
- ? children({ selected, toggle, mode: effectiveMode })
62
- : null] }));
63
- }
64
27
  export function GrantSetField({ value, onChange, options, emptyLabel, rowAccessory, }) {
65
28
  const tI18nComplete = useI18nTranslations('hardcodedUi.i18nComplete');
66
- return (_jsx(GrantModeField, { value: value, onChange: onChange, children: ({ selected, toggle }) => {
67
- const optionIds = new Set(options.map((o) => o.id));
68
- const orphans = [];
69
- for (const id of selected) {
70
- if (!optionIds.has(id))
71
- orphans.push({ id, label: id });
72
- }
73
- const rows = [...options, ...orphans];
74
- return rows.length === 0 ? (_jsx("p", { className: "text-muted-foreground text-xs", children: emptyLabel })) : (_jsx("ul", { className: "bg-popover divide-border max-h-96 divide-y overflow-y-auto rounded-md border", children: rows.map((o) => {
75
- const isSel = selected.has(o.id);
29
+ // The same grant sentence and always-listed rows as every other Access view:
30
+ // All checks every row, None none, Specific the granted ones. A row turned
31
+ // off under All keeps the rest (`plainGrantSwitch`).
32
+ const grant = useAgentGrant(value, onChange);
33
+ const ids = options.map((o) => o.id);
34
+ const box = plainGrantSwitch(value, ids, onChange);
35
+ const optionIds = new Set(ids);
36
+ const orphans = (Array.isArray(value) ? value : [])
37
+ .filter((id) => !optionIds.has(id))
38
+ .map((id) => ({ id, label: id }));
39
+ const rows = [...options, ...orphans];
40
+ return (_jsxs("div", { className: "space-y-3", children: [_jsx(GrantModeTabs, { grant: withCatalog(grant, ids), label: tI18nComplete.raw('text74009e6664f5') }), rows.length === 0 ? (_jsx("p", { className: "text-muted-foreground text-xs", children: emptyLabel })) : (_jsx("ul", { className: "bg-popover divide-border max-h-96 divide-y overflow-y-auto rounded-md border", children: rows.map((o) => {
76
41
  const isOrphan = !optionIds.has(o.id);
77
- const accessory = rowAccessory?.(o.id, isSel);
78
- return (_jsxs("li", { className: "flex items-center gap-3 px-4 py-2.5", children: [_jsx(Checkbox, { variant: "black", checked: isSel, onCheckedChange: () => toggle(o.id), "aria-label": o.label }), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "text-foreground block truncate font-mono text-sm", children: o.label }), o.description ? (_jsx("span", { className: "text-muted-foreground block truncate text-xs", children: o.description })) : null] }), isOrphan ? (_jsx(Badge, { variant: "warning", size: "xs", children: tI18nComplete.raw('textffa63583dfa6') })) : null, o.trailing, accessory] }, o.id));
79
- }) }));
80
- } }));
42
+ const control = isOrphan
43
+ ? { checked: true, onCheckedChange: () => onChange(value.filter((id) => id !== o.id)) }
44
+ : box(o.id);
45
+ const accessory = rowAccessory?.(o.id, control.checked);
46
+ return (_jsxs("li", { className: "flex items-center gap-3 px-4 py-2.5", children: [_jsx(Checkbox, { variant: "black", ...control, "aria-label": o.label }), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "text-foreground block truncate font-mono text-sm", children: o.label }), o.description ? (_jsx("span", { className: "text-muted-foreground block truncate text-xs", children: o.description })) : null] }), isOrphan ? (_jsx(Badge, { variant: "warning", size: "xs", children: tI18nComplete.raw('textffa63583dfa6') })) : null, o.trailing, accessory] }, o.id));
47
+ }) }))] }));
81
48
  }
82
- /** All · Pick · None over the grouped grantable Kortix permission catalog. */
49
+ /**
50
+ * The grant sentence over the grouped Kortix permission catalog, listed in
51
+ * every mode like every other Access view: All checks every box, None none,
52
+ * Specific the granted ones. A box turned off under All keeps the rest.
53
+ */
83
54
  export function KortixPermissionsField({ value, onChange, }) {
84
55
  const tI18nComplete = useI18nTranslations('hardcodedUi.i18nComplete');
85
56
  const params = useUiParams();
86
57
  const { flags } = useProjectFeatureFlags(typeof params.id === 'string' ? params.id : null);
87
58
  const groups = KORTIX_PERMISSIONS_CATALOG.filter((grp) => !grp.featureFlag || flags[grp.featureFlag] === true);
88
- return (_jsx(GrantModeField, { value: value, onChange: onChange, children: ({ selected, toggle }) => (_jsx("div", { className: "bg-popover divide-border divide-y rounded-md border", children: groups.map((grp) => (_jsxs("div", { className: "space-y-2.5 px-4 py-3", children: [_jsx("p", { className: "text-muted-foreground text-xs font-medium", children: grp.group }), _jsx("div", { className: "-mx-3 grid gap-x-2 gap-y-0.5 sm:grid-cols-2", children: grp.actions.map((action) => (_jsx(Checkbox, { variant: "black", checked: selected.has(action), onCheckedChange: () => toggle(action), label: _jsx("span", { className: "font-mono text-xs", children: action.replace(/^project\./, '') }) }, action))) })] }, grp.group))) })) }));
59
+ const ids = groups.flatMap((grp) => grp.actions);
60
+ const grant = useAgentGrant(value, onChange);
61
+ const box = plainGrantSwitch(value, ids, onChange);
62
+ return (_jsxs("div", { className: "space-y-5", children: [_jsx(GrantModeTabs, { grant: withCatalog(grant, ids), label: tI18nComplete.raw('text74009e6664f5') }), _jsx("div", { className: "bg-popover divide-border divide-y rounded-md border", children: groups.map((grp) => (_jsxs("div", { className: "space-y-2.5 px-4 py-3", children: [_jsx("p", { className: "text-muted-foreground text-xs font-medium", children: grp.group }), _jsx("div", { className: "-mx-3 grid gap-x-2 gap-y-0.5 sm:grid-cols-2", children: grp.actions.map((action) => (_jsx(Checkbox, { variant: "black", ...box(action), label: _jsx("span", { className: "font-mono text-xs", children: action.replace(/^project\./, '') }) }, action))) })] }, grp.group))) })] }));
89
63
  }
@@ -7,7 +7,9 @@ import type { PermissionConfig } from '@kortix/sdk';
7
7
  * behind one summary row that reports how many tools are already customized,
8
8
  * so the count is visible without expanding it.
9
9
  */
10
- export declare function ToolsSection({ permission, onChange, }: {
10
+ export declare function ToolsSection({ permission, onChange, title, }: {
11
11
  permission: PermissionConfig | undefined;
12
12
  onChange: (next: PermissionConfig | undefined) => void;
13
+ /** Set when the section sits under another lead section (the tool switches): it becomes a subsection with this title. */
14
+ title?: string;
13
15
  }): import("react").JSX.Element;
@@ -48,28 +48,37 @@ function PermissionKeyName({ permKey }) {
48
48
  * pattern → action rules. */
49
49
  function PermissionRuleRow({ label, rule, onChange, }) {
50
50
  const tI18nComplete = useI18nTranslations('hardcodedUi.i18nComplete');
51
+ // One rule is a default plus patterns. Alone, the default is a bare action;
52
+ // with patterns it is the map's `*` entry, the form both harnesses read.
51
53
  const isMap = rule !== undefined && typeof rule === 'object';
52
- const bare = typeof rule === 'string' ? rule : undefined;
53
- const map = isMap ? rule : {};
54
+ const full = isMap ? rule : {};
55
+ const bare = typeof rule === 'string' ? rule : full['*'];
56
+ const map = Object.fromEntries(Object.entries(full).filter(([pattern]) => pattern !== '*'));
54
57
  const [showRules, setShowRules] = useState(isMap);
55
58
  const ruleCount = Object.keys(map).length;
56
- const setBare = (v) => onChange(v);
57
- const setRuleEntry = (pattern, action) => onChange({ ...map, [pattern]: action });
59
+ /** Write a default and patterns back in the smallest form. */
60
+ const write = (fallback, patterns) => {
61
+ if (Object.keys(patterns).length === 0)
62
+ return onChange(fallback);
63
+ onChange(fallback ? { ...patterns, '*': fallback } : patterns);
64
+ };
65
+ const setBare = (v) => write(v, map);
66
+ const setRuleEntry = (pattern, action) => write(bare, { ...map, [pattern]: action });
58
67
  const removeRuleEntry = (pattern) => {
59
68
  const next = { ...map };
60
69
  delete next[pattern];
61
- onChange(Object.keys(next).length ? next : undefined);
70
+ write(bare, next);
62
71
  };
63
- const addRule = () => onChange({ ...map, '': 'deny' });
72
+ const addRule = () => write(bare, { ...map, '': 'deny' });
64
73
  const renameRule = (from, to) => {
65
74
  if (from === to)
66
75
  return;
67
76
  const next = {};
68
77
  for (const [k, v] of Object.entries(map))
69
78
  next[k === from ? to : k] = v;
70
- onChange(next);
79
+ write(bare, next);
71
80
  };
72
- return (_jsxs("div", { className: "space-y-2 px-4 py-3", children: [_jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsx(PermissionKeyName, { permKey: label }), _jsxs("div", { className: "flex shrink-0 items-center gap-1.5", children: [_jsx(ActionSelect, { value: isMap ? undefined : bare, onChange: setBare, inheritLabel: tI18nComplete.raw('text3f72f0385768'), label: tI18nComplete('textfaaaefbff336', {
81
+ return (_jsxs("div", { className: "space-y-2 px-4 py-3", children: [_jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsx(PermissionKeyName, { permKey: label }), _jsxs("div", { className: "flex shrink-0 items-center gap-1.5", children: [_jsx(ActionSelect, { value: bare, onChange: setBare, inheritLabel: tI18nComplete.raw('text3f72f0385768'), label: tI18nComplete('textfaaaefbff336', {
73
82
  value0: PERMISSION_KEY_LABEL[label] ?? label,
74
83
  }) }), _jsxs(Button, { type: "button", variant: isMap || showRules ? 'secondary' : 'outline', size: "sm", className: "gap-1 px-2 text-xs", "aria-expanded": showRules, onClick: () => setShowRules((s) => !s), children: [tI18nComplete.raw('text4228aeb07c41'), ruleCount > 0 ? _jsx("span", { className: "tabular-nums", children: ruleCount }) : null] })] })] }), _jsx(AnimatePresence, { initial: false, children: showRules && (_jsx(m.div, { initial: { opacity: 0, height: 0 }, animate: { opacity: 1, height: 'auto' }, exit: { opacity: 0, height: 0 }, transition: { type: 'spring', duration: 0.3, bounce: 0 }, className: "overflow-hidden", children: _jsxs("div", { className: "bg-muted/40 space-y-1.5 rounded-md p-2", children: [ruleCount === 0 ? (_jsx("p", { className: "text-muted-foreground px-1 pt-0.5 text-xs text-pretty", children: tI18nComplete.raw('text8d1833ac5f65') })) : null, Object.entries(map).map(([pattern, action]) => (_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(Input, { value: pattern, "aria-label": tI18nComplete.raw('text4288ade73ff9'), placeholder: tI18nComplete.raw('textcf134a1de504'), variant: "popover", className: "h-8 flex-1 font-mono text-xs", onChange: (e) => renameRule(pattern, e.target.value) }), _jsx(ActionSelect, { value: action, label: tI18nComplete('text494cb0162c19', {
75
84
  value0: pattern || tI18nComplete.raw('textc6fbcde46fa9'),
@@ -83,7 +92,7 @@ function PermissionRuleRow({ label, rule, onChange, }) {
83
92
  * behind one summary row that reports how many tools are already customized,
84
93
  * so the count is visible without expanding it.
85
94
  */
86
- export function ToolsSection({ permission, onChange, }) {
95
+ export function ToolsSection({ permission, onChange, title, }) {
87
96
  const tI18nComplete = useI18nTranslations('hardcodedUi.i18nComplete');
88
97
  // A bare string is one action applied to EVERY tool, not one customized
89
98
  // tool — the old count printed "1" for it, which read as "one tool changed"
@@ -93,7 +102,7 @@ export function ToolsSection({ permission, onChange, }) {
93
102
  : permission && Object.keys(permission).length > 0
94
103
  ? `${Object.keys(permission).length} tool${Object.keys(permission).length === 1 ? '' : 's'} customized`
95
104
  : 'Every tool follows the runtime default';
96
- return (_jsx(EditorSection, { title: tI18nComplete.raw('textea93d6a262ec'), description: tI18nComplete.raw('text765f388e2ce6'), lead: true, bare: true, children: _jsx(PermissionEditor, { permission: permission, onChange: onChange, summary: summary }) }));
105
+ return (_jsx(EditorSection, { title: title ?? tI18nComplete.raw('textea93d6a262ec'), description: tI18nComplete.raw('text765f388e2ce6'), lead: title === undefined, bare: true, children: _jsx(PermissionEditor, { permission: permission, onChange: onChange, summary: summary }) }));
97
106
  }
98
107
  function PermissionEditor({ permission, onChange, summary, }) {
99
108
  const tI18nComplete = useI18nTranslations('hardcodedUi.i18nComplete');
@@ -6,3 +6,11 @@
6
6
  export declare function ReviewView({ projectId }: {
7
7
  projectId: string;
8
8
  }): import("react").JSX.Element;
9
+ /**
10
+ * /customize/review: the Review Center under the one Customize header
11
+ * (`CustomizeHeader`), so its title sits where the Agents index, an agent and
12
+ * My Kortix put theirs.
13
+ */
14
+ export declare function ReviewPage({ projectId }: {
15
+ projectId: string;
16
+ }): import("react").JSX.Element;
@@ -1,6 +1,8 @@
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 { ProjectFilesProvider } from '../../../files/project/index.js';
4
+ import { useTranslations } from '../../../i18n/index.js';
5
+ import { CustomizeHeader } from '../../agents/agent-page-chrome.js';
4
6
  import { ReviewCenterConnected } from './review-center-connected.js';
5
7
  import { useProjectName } from '@kortix/sdk/react';
6
8
  /**
@@ -17,3 +19,12 @@ export function ReviewView({ projectId }) {
17
19
  const projectName = useProjectName(projectId) ?? '';
18
20
  return (_jsx("div", { className: "bg-background flex h-full min-h-0 flex-col", children: _jsx(ProjectFilesProvider, { value: { projectId, ref: '', defaultBranch: '' }, children: _jsx(ReviewCenterConnected, { projectName: projectName }) }) }));
19
21
  }
22
+ /**
23
+ * /customize/review: the Review Center under the one Customize header
24
+ * (`CustomizeHeader`), so its title sits where the Agents index, an agent and
25
+ * My Kortix put theirs.
26
+ */
27
+ export function ReviewPage({ projectId }) {
28
+ const t = useTranslations('agentEditor.tabs');
29
+ return (_jsxs("div", { className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: [_jsx(CustomizeHeader, { title: t('review'), rule: true }), _jsx(ReviewView, { projectId: projectId })] }));
30
+ }
@@ -475,7 +475,7 @@ export function mergeAgentSecretGrant(current, identifier) {
475
475
  /** The kortix.yaml edit that grants the secret, for anyone editing the repo by hand. */
476
476
  export function agentGrantSnippet(identifier, agent, current) {
477
477
  const secrets = mergeAgentSecretGrant(current, identifier);
478
- return `kortix_version: 3\nagents:\n ${agent ?? 'my-agent'}:\n secrets: [${secrets.join(', ')}]`;
478
+ return `agents:\n ${agent ?? 'my-agent'}:\n secrets: [${secrets.join(', ')}]`;
479
479
  }
480
480
  /** One agent needs no picker, so the button carries the name instead. */
481
481
  export function agentGrantActionLabel(plan, selected) {
@@ -526,9 +526,6 @@ export function agentGrantOutcome(result, tI18nComplete) {
526
526
  /** Turn a grant failure into the next action the user can take. */
527
527
  export function agentGrantErrorMessage(error) {
528
528
  const fields = typeof error === 'object' && error !== null ? error : {};
529
- if (fields.code === 'manifest_v1_unsupported') {
530
- return 'This project uses a kortix_version 1 manifest. Edit kortix.toml directly, or upgrade the project to kortix_version 3.';
531
- }
532
529
  if (fields.code === 'secret_not_grantable') {
533
530
  return 'This secret is disabled. Change its delivery policy before granting it.';
534
531
  }
@@ -1,3 +1,4 @@
1
+ import { type AgentGrant, type ResourceScope } from '../../shared/agent-resource-scope.js';
1
2
  import { type ConnectionShare, type ProjectSecret, type ProjectSecretsResponse, type SecretConsumer, type SecretDeliveryStatus, type SecretDeliveryStrategy, type SecretEgressPolicy } from '@kortix/sdk';
2
3
  import { type SecretDeliveryBlockedReason } from './secret-delivery.js';
3
4
  type Requirement = 'required' | 'optional' | null;
@@ -37,8 +38,13 @@ export interface SecretRow {
37
38
  * decrypted (`mine.status: 'undecryptable'`). */
38
39
  mineUndecryptable: boolean;
39
40
  }
40
- export declare function SecretsView({ projectId }: {
41
+ export declare function SecretsView({ projectId, surface, grant, }: {
41
42
  projectId: string;
43
+ /** `global` (default) is the project's secrets; `agent` is the same screen
44
+ * for one agent, with a grant checkbox on every row. */
45
+ surface?: ResourceScope;
46
+ /** Required in `agent` scope: the agent's `secrets` grant, by identifier. */
47
+ grant?: AgentGrant;
42
48
  }): import("react").JSX.Element;
43
49
  export declare function buildRows(raw: ProjectSecretsResponse | ProjectSecret[] | null | undefined): SecretRow[];
44
50
  /**