nastechai-desktop 18.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. package/.prettierrc +11 -0
  2. package/DESIGN.md +167 -0
  3. package/README.md +141 -0
  4. package/assets/icon.icns +0 -0
  5. package/assets/icon.ico +0 -0
  6. package/assets/icon.png +0 -0
  7. package/components.json +21 -0
  8. package/electron/backend-env.cjs +112 -0
  9. package/electron/backend-env.test.cjs +111 -0
  10. package/electron/backend-probes.cjs +106 -0
  11. package/electron/backend-probes.test.cjs +82 -0
  12. package/electron/backend-ready.cjs +66 -0
  13. package/electron/bootstrap-platform.cjs +91 -0
  14. package/electron/bootstrap-platform.test.cjs +111 -0
  15. package/electron/bootstrap-runner.cjs +720 -0
  16. package/electron/bootstrap-runner.test.cjs +138 -0
  17. package/electron/connection-config.cjs +254 -0
  18. package/electron/connection-config.test.cjs +329 -0
  19. package/electron/dashboard-token.cjs +99 -0
  20. package/electron/dashboard-token.test.cjs +142 -0
  21. package/electron/desktop-uninstall.cjs +232 -0
  22. package/electron/desktop-uninstall.test.cjs +246 -0
  23. package/electron/entitlements.mac.inherit.plist +14 -0
  24. package/electron/entitlements.mac.plist +14 -0
  25. package/electron/fs-read-dir.cjs +109 -0
  26. package/electron/fs-read-dir.test.cjs +364 -0
  27. package/electron/gateway-ws-probe.cjs +188 -0
  28. package/electron/gateway-ws-probe.test.cjs +122 -0
  29. package/electron/git-root.cjs +54 -0
  30. package/electron/git-root.test.cjs +40 -0
  31. package/electron/git-worktrees.cjs +174 -0
  32. package/electron/hardening.cjs +184 -0
  33. package/electron/hardening.test.cjs +116 -0
  34. package/electron/main.cjs +5762 -0
  35. package/electron/oauth-net-request.cjs +20 -0
  36. package/electron/oauth-net-request.test.cjs +34 -0
  37. package/electron/preload.cjs +135 -0
  38. package/electron/session-windows.cjs +99 -0
  39. package/electron/session-windows.test.cjs +177 -0
  40. package/electron/update-remote.cjs +56 -0
  41. package/electron/update-remote.test.cjs +78 -0
  42. package/electron/vscode-marketplace.cjs +331 -0
  43. package/electron/vscode-marketplace.test.cjs +113 -0
  44. package/electron/windows-child-process.test.cjs +57 -0
  45. package/electron/windows-user-env.cjs +76 -0
  46. package/electron/windows-user-env.test.cjs +90 -0
  47. package/electron/workspace-cwd.cjs +38 -0
  48. package/electron/workspace-cwd.test.cjs +45 -0
  49. package/eslint.config.mjs +122 -0
  50. package/index.html +17 -0
  51. package/package.json +254 -0
  52. package/pr-assets/session-source-folders.png +0 -0
  53. package/preview-demo.html +65 -0
  54. package/public/apple-touch-icon.png +0 -0
  55. package/public/ds-assets/filler-bg0.jpg +0 -0
  56. package/public/nastech-frames/nastech-frame-0.png +0 -0
  57. package/public/nastech-frames/nastech-frame-1.png +0 -0
  58. package/public/nastech-frames/nastech-frame-2.png +0 -0
  59. package/public/nastech-frames/nastech-frame-3.png +0 -0
  60. package/public/nastech-frames/nastech-frame-4.png +0 -0
  61. package/public/nastech-frames/nastech-frame-5.png +0 -0
  62. package/public/nastech-frames/nastech-frame-6.png +0 -0
  63. package/public/nastech-frames/nastech-frame-7.png +0 -0
  64. package/public/nastech-girl.jpg +0 -0
  65. package/public/nastech-sprite.png +0 -0
  66. package/public/nastech.png +0 -0
  67. package/scripts/after-pack.cjs +41 -0
  68. package/scripts/assert-dist-built.cjs +70 -0
  69. package/scripts/assert-dist-built.test.cjs +84 -0
  70. package/scripts/assert-root-install.cjs +13 -0
  71. package/scripts/before-build.cjs +11 -0
  72. package/scripts/before-pack.cjs +78 -0
  73. package/scripts/before-pack.test.cjs +53 -0
  74. package/scripts/click-session.mjs +51 -0
  75. package/scripts/dev-no-hmr.mjs +22 -0
  76. package/scripts/diag-jump.mjs +115 -0
  77. package/scripts/diag-scroll-reset.mjs +229 -0
  78. package/scripts/eval.mjs +21 -0
  79. package/scripts/leak-typing.mjs +222 -0
  80. package/scripts/measure-jump.mjs +108 -0
  81. package/scripts/measure-latency.mjs +184 -0
  82. package/scripts/measure-real-stream.mjs +252 -0
  83. package/scripts/measure-submit.mjs +179 -0
  84. package/scripts/measure-synthetic-stream.mjs +322 -0
  85. package/scripts/notarize-artifact.cjs +77 -0
  86. package/scripts/notarize.cjs +100 -0
  87. package/scripts/patch-electron-builder-mac-binary.cjs +59 -0
  88. package/scripts/probe-renderer.mjs +38 -0
  89. package/scripts/probe-thread.mjs +40 -0
  90. package/scripts/profile-long-stream.mjs +191 -0
  91. package/scripts/profile-real-stream.mjs +137 -0
  92. package/scripts/profile-synth-stream.mjs +103 -0
  93. package/scripts/profile-typing-lag.md +381 -0
  94. package/scripts/profile-typing.mjs +260 -0
  95. package/scripts/reload-renderer.mjs +25 -0
  96. package/scripts/reload.mjs +36 -0
  97. package/scripts/set-exe-identity.cjs +94 -0
  98. package/scripts/stage-native-deps.cjs +159 -0
  99. package/scripts/test-desktop.mjs +425 -0
  100. package/scripts/write-build-stamp.cjs +126 -0
  101. package/src/app/agents/index.tsx +398 -0
  102. package/src/app/artifacts/index.test.ts +62 -0
  103. package/src/app/artifacts/index.tsx +906 -0
  104. package/src/app/chat/chat-drop-overlay.tsx +48 -0
  105. package/src/app/chat/chat-swap-overlay.tsx +47 -0
  106. package/src/app/chat/composer/attachments.tsx +114 -0
  107. package/src/app/chat/composer/completion-drawer.tsx +63 -0
  108. package/src/app/chat/composer/context-menu.tsx +172 -0
  109. package/src/app/chat/composer/controls.tsx +289 -0
  110. package/src/app/chat/composer/drop-affordance.ts +2 -0
  111. package/src/app/chat/composer/enter-submit-dom-race.test.tsx +218 -0
  112. package/src/app/chat/composer/focus.ts +134 -0
  113. package/src/app/chat/composer/help-hint.tsx +59 -0
  114. package/src/app/chat/composer/hooks/use-at-completions.ts +141 -0
  115. package/src/app/chat/composer/hooks/use-live-completion-adapter.ts +119 -0
  116. package/src/app/chat/composer/hooks/use-mic-recorder.ts +291 -0
  117. package/src/app/chat/composer/hooks/use-slash-completions.ts +114 -0
  118. package/src/app/chat/composer/hooks/use-voice-conversation.ts +390 -0
  119. package/src/app/chat/composer/hooks/use-voice-recorder.ts +116 -0
  120. package/src/app/chat/composer/ime-composition-dom-repro.test.tsx +108 -0
  121. package/src/app/chat/composer/index.tsx +1611 -0
  122. package/src/app/chat/composer/inline-refs.ts +138 -0
  123. package/src/app/chat/composer/model-pill.tsx +86 -0
  124. package/src/app/chat/composer/queue-panel.tsx +130 -0
  125. package/src/app/chat/composer/rich-editor.test.ts +18 -0
  126. package/src/app/chat/composer/rich-editor.ts +165 -0
  127. package/src/app/chat/composer/skin-slash-popover.tsx +61 -0
  128. package/src/app/chat/composer/slash-nav-dom-repro.test.tsx +186 -0
  129. package/src/app/chat/composer/status-stack/index.tsx +202 -0
  130. package/src/app/chat/composer/status-stack/status-row.tsx +155 -0
  131. package/src/app/chat/composer/text-utils.test.ts +77 -0
  132. package/src/app/chat/composer/text-utils.ts +107 -0
  133. package/src/app/chat/composer/trigger-popover.test.tsx +42 -0
  134. package/src/app/chat/composer/trigger-popover.tsx +116 -0
  135. package/src/app/chat/composer/types.ts +64 -0
  136. package/src/app/chat/composer/url-dialog.tsx +82 -0
  137. package/src/app/chat/composer/voice-activity.tsx +252 -0
  138. package/src/app/chat/hooks/use-composer-actions.test.ts +57 -0
  139. package/src/app/chat/hooks/use-composer-actions.ts +525 -0
  140. package/src/app/chat/hooks/use-file-drop-zone.ts +118 -0
  141. package/src/app/chat/index.tsx +390 -0
  142. package/src/app/chat/perf-probe.tsx +269 -0
  143. package/src/app/chat/right-rail/index.ts +1 -0
  144. package/src/app/chat/right-rail/preview-console-state.ts +82 -0
  145. package/src/app/chat/right-rail/preview-console.tsx +290 -0
  146. package/src/app/chat/right-rail/preview-file.tsx +559 -0
  147. package/src/app/chat/right-rail/preview-pane.test.tsx +43 -0
  148. package/src/app/chat/right-rail/preview-pane.tsx +657 -0
  149. package/src/app/chat/right-rail/preview.tsx +171 -0
  150. package/src/app/chat/scroll-to-bottom-button.test.tsx +67 -0
  151. package/src/app/chat/scroll-to-bottom-button.tsx +74 -0
  152. package/src/app/chat/sidebar/cron-jobs-section.tsx +325 -0
  153. package/src/app/chat/sidebar/index.tsx +1219 -0
  154. package/src/app/chat/sidebar/load-more-row.tsx +30 -0
  155. package/src/app/chat/sidebar/order.test.ts +21 -0
  156. package/src/app/chat/sidebar/order.ts +17 -0
  157. package/src/app/chat/sidebar/profile-switcher.tsx +516 -0
  158. package/src/app/chat/sidebar/session-actions-menu.tsx +264 -0
  159. package/src/app/chat/sidebar/session-row.tsx +257 -0
  160. package/src/app/chat/sidebar/virtual-session-list.tsx +154 -0
  161. package/src/app/chat/sidebar/workspace-groups.test.ts +149 -0
  162. package/src/app/chat/sidebar/workspace-groups.ts +326 -0
  163. package/src/app/chat/thread-loading.test.ts +34 -0
  164. package/src/app/chat/thread-loading.ts +26 -0
  165. package/src/app/command-center/index.tsx +654 -0
  166. package/src/app/command-palette/index.tsx +513 -0
  167. package/src/app/command-palette/marketplace-theme-page.tsx +157 -0
  168. package/src/app/cron/index.tsx +942 -0
  169. package/src/app/cron/job-state.ts +29 -0
  170. package/src/app/desktop-controller.tsx +938 -0
  171. package/src/app/floating-hud.ts +22 -0
  172. package/src/app/gateway/hooks/use-gateway-boot.test.tsx +265 -0
  173. package/src/app/gateway/hooks/use-gateway-boot.ts +387 -0
  174. package/src/app/gateway/hooks/use-gateway-request.ts +138 -0
  175. package/src/app/hooks/use-keybinds.ts +186 -0
  176. package/src/app/hooks/use-refresh-hotkey.ts +45 -0
  177. package/src/app/hooks/use-route-enum-param.ts +38 -0
  178. package/src/app/index.tsx +1 -0
  179. package/src/app/layout-constants.ts +13 -0
  180. package/src/app/messaging/index.tsx +648 -0
  181. package/src/app/messaging/platform-icon.tsx +93 -0
  182. package/src/app/model-picker-overlay.tsx +42 -0
  183. package/src/app/model-visibility-overlay.tsx +31 -0
  184. package/src/app/overlays/overlay-chrome.tsx +66 -0
  185. package/src/app/overlays/overlay-search-input.tsx +33 -0
  186. package/src/app/overlays/overlay-split-layout.tsx +130 -0
  187. package/src/app/overlays/overlay-view.tsx +91 -0
  188. package/src/app/page-search-shell.tsx +75 -0
  189. package/src/app/profiles/create-profile-dialog.tsx +154 -0
  190. package/src/app/profiles/delete-profile-dialog.tsx +65 -0
  191. package/src/app/profiles/index.tsx +671 -0
  192. package/src/app/profiles/rename-profile-dialog.tsx +125 -0
  193. package/src/app/right-sidebar/files/dnd-manager.ts +27 -0
  194. package/src/app/right-sidebar/files/ipc.test.ts +100 -0
  195. package/src/app/right-sidebar/files/ipc.ts +161 -0
  196. package/src/app/right-sidebar/files/remote-picker.tsx +177 -0
  197. package/src/app/right-sidebar/files/tree.tsx +224 -0
  198. package/src/app/right-sidebar/files/use-project-tree.test.ts +190 -0
  199. package/src/app/right-sidebar/files/use-project-tree.ts +268 -0
  200. package/src/app/right-sidebar/index.test.tsx +75 -0
  201. package/src/app/right-sidebar/index.tsx +395 -0
  202. package/src/app/right-sidebar/store.ts +15 -0
  203. package/src/app/right-sidebar/terminal/buffer.ts +65 -0
  204. package/src/app/right-sidebar/terminal/index.tsx +98 -0
  205. package/src/app/right-sidebar/terminal/persistent.tsx +122 -0
  206. package/src/app/right-sidebar/terminal/selection.ts +75 -0
  207. package/src/app/right-sidebar/terminal/use-terminal-session.ts +504 -0
  208. package/src/app/routes.ts +88 -0
  209. package/src/app/session/hooks/use-context-suggestions.ts +58 -0
  210. package/src/app/session/hooks/use-cwd-actions.ts +109 -0
  211. package/src/app/session/hooks/use-message-stream.ts +957 -0
  212. package/src/app/session/hooks/use-model-controls.test.tsx +198 -0
  213. package/src/app/session/hooks/use-model-controls.ts +106 -0
  214. package/src/app/session/hooks/use-nastech-config.ts +74 -0
  215. package/src/app/session/hooks/use-preview-routing.test.tsx +168 -0
  216. package/src/app/session/hooks/use-preview-routing.ts +223 -0
  217. package/src/app/session/hooks/use-prompt-actions.test.tsx +316 -0
  218. package/src/app/session/hooks/use-prompt-actions.ts +1030 -0
  219. package/src/app/session/hooks/use-route-resume.test.tsx +136 -0
  220. package/src/app/session/hooks/use-route-resume.ts +115 -0
  221. package/src/app/session/hooks/use-session-actions.test.tsx +119 -0
  222. package/src/app/session/hooks/use-session-actions.ts +885 -0
  223. package/src/app/session/hooks/use-session-state-cache.test.tsx +118 -0
  224. package/src/app/session/hooks/use-session-state-cache.ts +191 -0
  225. package/src/app/session-picker-overlay.tsx +32 -0
  226. package/src/app/session-switcher.tsx +107 -0
  227. package/src/app/settings/about-settings.tsx +173 -0
  228. package/src/app/settings/appearance-settings.tsx +162 -0
  229. package/src/app/settings/config-settings.tsx +384 -0
  230. package/src/app/settings/constants.ts +545 -0
  231. package/src/app/settings/credential-key-ui.tsx +373 -0
  232. package/src/app/settings/env-credentials.tsx +198 -0
  233. package/src/app/settings/env-var-actions-menu.tsx +136 -0
  234. package/src/app/settings/field-copy.ts +56 -0
  235. package/src/app/settings/gateway-settings.tsx +620 -0
  236. package/src/app/settings/helpers.test.ts +138 -0
  237. package/src/app/settings/helpers.ts +151 -0
  238. package/src/app/settings/index.tsx +237 -0
  239. package/src/app/settings/keys-settings.tsx +96 -0
  240. package/src/app/settings/mcp-settings.tsx +271 -0
  241. package/src/app/settings/model-settings.test.tsx +157 -0
  242. package/src/app/settings/model-settings.tsx +559 -0
  243. package/src/app/settings/notifications-settings.tsx +150 -0
  244. package/src/app/settings/primitives.tsx +115 -0
  245. package/src/app/settings/providers-settings.test.tsx +100 -0
  246. package/src/app/settings/providers-settings.tsx +258 -0
  247. package/src/app/settings/sessions-settings.tsx +276 -0
  248. package/src/app/settings/toolset-config-panel.test.tsx +289 -0
  249. package/src/app/settings/toolset-config-panel.tsx +449 -0
  250. package/src/app/settings/types.ts +42 -0
  251. package/src/app/settings/uninstall-section.tsx +185 -0
  252. package/src/app/settings/use-deep-link-highlight.ts +60 -0
  253. package/src/app/shell/app-shell.tsx +167 -0
  254. package/src/app/shell/gateway-menu-panel.tsx +150 -0
  255. package/src/app/shell/hooks/use-overlay-routing.ts +71 -0
  256. package/src/app/shell/hooks/use-status-snapshot.ts +57 -0
  257. package/src/app/shell/hooks/use-statusbar-items.tsx +403 -0
  258. package/src/app/shell/keybind-panel.tsx +220 -0
  259. package/src/app/shell/model-edit-submenu.test.tsx +84 -0
  260. package/src/app/shell/model-edit-submenu.tsx +245 -0
  261. package/src/app/shell/model-menu-panel.tsx +295 -0
  262. package/src/app/shell/sidebar-label.tsx +22 -0
  263. package/src/app/shell/statusbar-controls.tsx +185 -0
  264. package/src/app/shell/titlebar-controls.tsx +244 -0
  265. package/src/app/shell/titlebar.test.ts +26 -0
  266. package/src/app/shell/titlebar.ts +45 -0
  267. package/src/app/shell/use-group-registry.ts +39 -0
  268. package/src/app/skills/index.test.tsx +103 -0
  269. package/src/app/skills/index.tsx +371 -0
  270. package/src/app/types.ts +99 -0
  271. package/src/app/updates-overlay.tsx +369 -0
  272. package/src/components/Backdrop.tsx +114 -0
  273. package/src/components/assistant-ui/ansi-text.tsx +34 -0
  274. package/src/components/assistant-ui/clarify-tool.tsx +281 -0
  275. package/src/components/assistant-ui/directive-text.test.ts +39 -0
  276. package/src/components/assistant-ui/directive-text.tsx +389 -0
  277. package/src/components/assistant-ui/markdown-text.test.ts +204 -0
  278. package/src/components/assistant-ui/markdown-text.tsx +497 -0
  279. package/src/components/assistant-ui/message-render-boundary.test.tsx +80 -0
  280. package/src/components/assistant-ui/message-render-boundary.tsx +48 -0
  281. package/src/components/assistant-ui/streaming.test.tsx +739 -0
  282. package/src/components/assistant-ui/thread-list.tsx +307 -0
  283. package/src/components/assistant-ui/thread-virtualizer.tsx +512 -0
  284. package/src/components/assistant-ui/thread.tsx +1474 -0
  285. package/src/components/assistant-ui/todo-tool.tsx +109 -0
  286. package/src/components/assistant-ui/tool-approval-group.test.tsx +158 -0
  287. package/src/components/assistant-ui/tool-approval.test.tsx +81 -0
  288. package/src/components/assistant-ui/tool-approval.tsx +209 -0
  289. package/src/components/assistant-ui/tool-fallback-model.test.ts +66 -0
  290. package/src/components/assistant-ui/tool-fallback-model.ts +1368 -0
  291. package/src/components/assistant-ui/tool-fallback.tsx +466 -0
  292. package/src/components/assistant-ui/tooltip-icon-button.tsx +33 -0
  293. package/src/components/assistant-ui/user-message-edit.test.tsx +141 -0
  294. package/src/components/assistant-ui/user-message-text.tsx +150 -0
  295. package/src/components/boot-failure-overlay.tsx +246 -0
  296. package/src/components/boot-failure-reauth.test.ts +100 -0
  297. package/src/components/boot-failure-reauth.ts +81 -0
  298. package/src/components/brand-mark.tsx +19 -0
  299. package/src/components/chat/activity-timer-text.tsx +24 -0
  300. package/src/components/chat/activity-timer.test.tsx +43 -0
  301. package/src/components/chat/activity-timer.ts +64 -0
  302. package/src/components/chat/code-card.tsx +78 -0
  303. package/src/components/chat/compact-markdown.tsx +113 -0
  304. package/src/components/chat/composer-dock.ts +31 -0
  305. package/src/components/chat/diff-lines.tsx +54 -0
  306. package/src/components/chat/disclosure-row.tsx +63 -0
  307. package/src/components/chat/generated-image-context.tsx +19 -0
  308. package/src/components/chat/generated-image-result.tsx +174 -0
  309. package/src/components/chat/image-generation-placeholder.tsx +279 -0
  310. package/src/components/chat/intro-copy.jsonl +75 -0
  311. package/src/components/chat/intro.tsx +182 -0
  312. package/src/components/chat/preview-attachment.tsx +125 -0
  313. package/src/components/chat/shiki-highlighter.tsx +107 -0
  314. package/src/components/chat/status-row.tsx +70 -0
  315. package/src/components/chat/status-section.tsx +42 -0
  316. package/src/components/chat/terminal-output.tsx +50 -0
  317. package/src/components/chat/zoomable-image.tsx +177 -0
  318. package/src/components/desktop-install-overlay.tsx +595 -0
  319. package/src/components/desktop-onboarding-overlay.test.tsx +100 -0
  320. package/src/components/desktop-onboarding-overlay.tsx +1286 -0
  321. package/src/components/error-boundary.tsx +77 -0
  322. package/src/components/gateway-connecting-overlay.test.tsx +143 -0
  323. package/src/components/gateway-connecting-overlay.tsx +183 -0
  324. package/src/components/haptics-provider.tsx +19 -0
  325. package/src/components/language-switcher.test.tsx +53 -0
  326. package/src/components/language-switcher.tsx +175 -0
  327. package/src/components/model-picker.tsx +340 -0
  328. package/src/components/model-visibility-dialog.tsx +155 -0
  329. package/src/components/notifications.tsx +196 -0
  330. package/src/components/page-loader.tsx +34 -0
  331. package/src/components/pane-shell/context.ts +14 -0
  332. package/src/components/pane-shell/index.ts +4 -0
  333. package/src/components/pane-shell/pane-shell.test.tsx +333 -0
  334. package/src/components/pane-shell/pane-shell.tsx +330 -0
  335. package/src/components/prompt-overlays.tsx +234 -0
  336. package/src/components/session-picker.tsx +108 -0
  337. package/src/components/status-dot.tsx +26 -0
  338. package/src/components/ui/action-status.tsx +25 -0
  339. package/src/components/ui/alert.tsx +53 -0
  340. package/src/components/ui/badge.tsx +35 -0
  341. package/src/components/ui/braille-spinner.tsx +61 -0
  342. package/src/components/ui/button.tsx +81 -0
  343. package/src/components/ui/checkbox.tsx +27 -0
  344. package/src/components/ui/codicon.tsx +20 -0
  345. package/src/components/ui/command.tsx +111 -0
  346. package/src/components/ui/confirm-dialog.tsx +109 -0
  347. package/src/components/ui/context-menu.tsx +141 -0
  348. package/src/components/ui/control.ts +25 -0
  349. package/src/components/ui/copy-button.test.tsx +36 -0
  350. package/src/components/ui/copy-button.tsx +229 -0
  351. package/src/components/ui/dialog.tsx +152 -0
  352. package/src/components/ui/disclosure-caret.tsx +20 -0
  353. package/src/components/ui/dropdown-menu.tsx +291 -0
  354. package/src/components/ui/error-state.tsx +50 -0
  355. package/src/components/ui/fade-text.tsx +110 -0
  356. package/src/components/ui/glyph-spinner.tsx +63 -0
  357. package/src/components/ui/input.tsx +22 -0
  358. package/src/components/ui/kbd.tsx +37 -0
  359. package/src/components/ui/loader.tsx +558 -0
  360. package/src/components/ui/log-view.tsx +17 -0
  361. package/src/components/ui/pagination.tsx +114 -0
  362. package/src/components/ui/popover.tsx +44 -0
  363. package/src/components/ui/scroll-area.tsx +43 -0
  364. package/src/components/ui/search-field.tsx +80 -0
  365. package/src/components/ui/segmented-control.tsx +51 -0
  366. package/src/components/ui/select.tsx +92 -0
  367. package/src/components/ui/separator.tsx +26 -0
  368. package/src/components/ui/sheet.tsx +116 -0
  369. package/src/components/ui/sidebar.tsx +674 -0
  370. package/src/components/ui/skeleton.tsx +7 -0
  371. package/src/components/ui/switch.tsx +49 -0
  372. package/src/components/ui/tabs.tsx +36 -0
  373. package/src/components/ui/text-tab.tsx +43 -0
  374. package/src/components/ui/textarea.tsx +11 -0
  375. package/src/components/ui/tool-icon.tsx +65 -0
  376. package/src/components/ui/tooltip.tsx +69 -0
  377. package/src/fonts/JetBrainsMono-Bold.woff2 +0 -0
  378. package/src/fonts/JetBrainsMono-Italic.woff2 +0 -0
  379. package/src/fonts/JetBrainsMono-Regular.woff2 +0 -0
  380. package/src/global.d.ts +457 -0
  381. package/src/hooks/use-image-download.ts +85 -0
  382. package/src/hooks/use-media-query.ts +24 -0
  383. package/src/hooks/use-mobile.ts +3 -0
  384. package/src/hooks/use-resize-observer.ts +38 -0
  385. package/src/hooks/use-worktree-info.ts +68 -0
  386. package/src/i18n/catalog.ts +12 -0
  387. package/src/i18n/context.test.tsx +232 -0
  388. package/src/i18n/context.tsx +183 -0
  389. package/src/i18n/define-locale.ts +41 -0
  390. package/src/i18n/en.ts +1779 -0
  391. package/src/i18n/index.ts +20 -0
  392. package/src/i18n/ja.ts +1890 -0
  393. package/src/i18n/languages.test.ts +43 -0
  394. package/src/i18n/languages.ts +86 -0
  395. package/src/i18n/runtime.test.ts +75 -0
  396. package/src/i18n/runtime.ts +53 -0
  397. package/src/i18n/types.ts +1452 -0
  398. package/src/i18n/zh-hant.ts +1849 -0
  399. package/src/i18n/zh.ts +1923 -0
  400. package/src/lib/ansi.test.ts +123 -0
  401. package/src/lib/ansi.ts +175 -0
  402. package/src/lib/chat-messages.test.ts +708 -0
  403. package/src/lib/chat-messages.ts +885 -0
  404. package/src/lib/chat-runtime.test.ts +18 -0
  405. package/src/lib/chat-runtime.ts +335 -0
  406. package/src/lib/clipboard.ts +28 -0
  407. package/src/lib/commit-changelog.test.ts +114 -0
  408. package/src/lib/commit-changelog.ts +177 -0
  409. package/src/lib/completion-sound.ts +519 -0
  410. package/src/lib/desktop-fs.test.ts +116 -0
  411. package/src/lib/desktop-fs.ts +113 -0
  412. package/src/lib/desktop-slash-commands.test.ts +126 -0
  413. package/src/lib/desktop-slash-commands.ts +286 -0
  414. package/src/lib/embedded-images.test.ts +35 -0
  415. package/src/lib/embedded-images.ts +60 -0
  416. package/src/lib/external-link.test.tsx +168 -0
  417. package/src/lib/external-link.tsx +303 -0
  418. package/src/lib/gateway-events.test.ts +27 -0
  419. package/src/lib/gateway-events.ts +49 -0
  420. package/src/lib/gateway-ws-url.test.ts +78 -0
  421. package/src/lib/gateway-ws-url.ts +91 -0
  422. package/src/lib/generated-images.test.ts +97 -0
  423. package/src/lib/generated-images.ts +116 -0
  424. package/src/lib/haptics.ts +129 -0
  425. package/src/lib/icons.ts +203 -0
  426. package/src/lib/incremental-external-store-runtime.ts +188 -0
  427. package/src/lib/katex-memo.ts +260 -0
  428. package/src/lib/keybinds/actions.ts +125 -0
  429. package/src/lib/keybinds/combo.test.ts +86 -0
  430. package/src/lib/keybinds/combo.ts +169 -0
  431. package/src/lib/local-preview.ts +126 -0
  432. package/src/lib/markdown-code.test.ts +23 -0
  433. package/src/lib/markdown-code.ts +195 -0
  434. package/src/lib/markdown-preprocess.ts +386 -0
  435. package/src/lib/media.remote.test.ts +58 -0
  436. package/src/lib/media.ts +111 -0
  437. package/src/lib/model-status-label.test.ts +31 -0
  438. package/src/lib/model-status-label.ts +103 -0
  439. package/src/lib/mutable-ref.ts +6 -0
  440. package/src/lib/preview-targets.test.ts +27 -0
  441. package/src/lib/preview-targets.ts +63 -0
  442. package/src/lib/profile-color.ts +58 -0
  443. package/src/lib/provider-setup-errors.test.ts +26 -0
  444. package/src/lib/provider-setup-errors.ts +12 -0
  445. package/src/lib/query-client.ts +13 -0
  446. package/src/lib/remend-tail.test.ts +105 -0
  447. package/src/lib/remend-tail.ts +108 -0
  448. package/src/lib/runtime-readiness.test.ts +65 -0
  449. package/src/lib/runtime-readiness.ts +147 -0
  450. package/src/lib/session-export.ts +57 -0
  451. package/src/lib/session-search.test.ts +58 -0
  452. package/src/lib/session-search.ts +19 -0
  453. package/src/lib/session-source.ts +62 -0
  454. package/src/lib/speech-text.ts +35 -0
  455. package/src/lib/statusbar.ts +91 -0
  456. package/src/lib/storage.test.ts +25 -0
  457. package/src/lib/storage.ts +107 -0
  458. package/src/lib/todos.test.ts +35 -0
  459. package/src/lib/todos.ts +51 -0
  460. package/src/lib/tool-result-summary.test.ts +106 -0
  461. package/src/lib/tool-result-summary.ts +467 -0
  462. package/src/lib/update-copy.test.ts +38 -0
  463. package/src/lib/update-copy.ts +44 -0
  464. package/src/lib/use-enter-animation.ts +100 -0
  465. package/src/lib/utils.ts +6 -0
  466. package/src/lib/voice-playback.ts +128 -0
  467. package/src/lib/yolo-session.ts +26 -0
  468. package/src/main.tsx +43 -0
  469. package/src/nastech.test.ts +49 -0
  470. package/src/nastech.ts +718 -0
  471. package/src/store/activity.ts +100 -0
  472. package/src/store/boot.ts +91 -0
  473. package/src/store/clarify.test.ts +81 -0
  474. package/src/store/clarify.ts +69 -0
  475. package/src/store/command-palette.ts +20 -0
  476. package/src/store/compaction.test.ts +53 -0
  477. package/src/store/compaction.ts +38 -0
  478. package/src/store/completion-sound.ts +32 -0
  479. package/src/store/composer-input-history.test.ts +147 -0
  480. package/src/store/composer-input-history.ts +158 -0
  481. package/src/store/composer-queue.test.ts +148 -0
  482. package/src/store/composer-queue.ts +239 -0
  483. package/src/store/composer-status.test.ts +99 -0
  484. package/src/store/composer-status.ts +277 -0
  485. package/src/store/composer.test.ts +106 -0
  486. package/src/store/composer.ts +184 -0
  487. package/src/store/cron.ts +19 -0
  488. package/src/store/gateway.ts +290 -0
  489. package/src/store/haptics.ts +17 -0
  490. package/src/store/keybinds.ts +139 -0
  491. package/src/store/layout.ts +176 -0
  492. package/src/store/model-presets.test.ts +51 -0
  493. package/src/store/model-presets.ts +86 -0
  494. package/src/store/model-visibility.test.ts +37 -0
  495. package/src/store/model-visibility.ts +108 -0
  496. package/src/store/native-notifications.test.ts +192 -0
  497. package/src/store/native-notifications.ts +203 -0
  498. package/src/store/notifications.ts +165 -0
  499. package/src/store/onboarding.test.ts +372 -0
  500. package/src/store/onboarding.ts +866 -0
  501. package/src/store/panes.test.ts +146 -0
  502. package/src/store/panes.ts +145 -0
  503. package/src/store/preview.test.ts +135 -0
  504. package/src/store/preview.ts +466 -0
  505. package/src/store/profile.test.ts +89 -0
  506. package/src/store/profile.ts +365 -0
  507. package/src/store/prompts.test.ts +121 -0
  508. package/src/store/prompts.ts +115 -0
  509. package/src/store/session-switcher.test.ts +115 -0
  510. package/src/store/session-switcher.ts +128 -0
  511. package/src/store/session-sync.ts +25 -0
  512. package/src/store/session.test.ts +131 -0
  513. package/src/store/session.ts +255 -0
  514. package/src/store/subagents.test.ts +111 -0
  515. package/src/store/subagents.ts +260 -0
  516. package/src/store/thread-scroll.ts +46 -0
  517. package/src/store/todos.test.ts +47 -0
  518. package/src/store/todos.ts +64 -0
  519. package/src/store/tool-diffs.ts +23 -0
  520. package/src/store/tool-dismiss.ts +45 -0
  521. package/src/store/tool-view.ts +91 -0
  522. package/src/store/translucency.ts +38 -0
  523. package/src/store/updates.test.ts +77 -0
  524. package/src/store/updates.ts +315 -0
  525. package/src/store/voice-playback.ts +24 -0
  526. package/src/store/windows.test.ts +143 -0
  527. package/src/store/windows.ts +77 -0
  528. package/src/styles.css +1235 -0
  529. package/src/themes/color.ts +142 -0
  530. package/src/themes/context.tsx +339 -0
  531. package/src/themes/index.ts +3 -0
  532. package/src/themes/install.test.ts +119 -0
  533. package/src/themes/install.ts +95 -0
  534. package/src/themes/presets.test.ts +33 -0
  535. package/src/themes/presets.ts +293 -0
  536. package/src/themes/profile-theme.test.ts +41 -0
  537. package/src/themes/types.ts +66 -0
  538. package/src/themes/use-skin-command.ts +60 -0
  539. package/src/themes/user-themes.test.ts +63 -0
  540. package/src/themes/user-themes.ts +122 -0
  541. package/src/themes/vscode.test.ts +171 -0
  542. package/src/themes/vscode.ts +343 -0
  543. package/src/types/nastech.ts +646 -0
  544. package/src/vite-env.d.ts +1 -0
  545. package/tsconfig.json +25 -0
  546. package/vite.config.ts +56 -0
@@ -0,0 +1,646 @@
1
+ export interface ConfigFieldSchema {
2
+ category?: string
3
+ description?: string
4
+ options?: unknown[]
5
+ type?: 'boolean' | 'list' | 'number' | 'select' | 'string' | 'text'
6
+ }
7
+
8
+ export interface ConfigSchemaResponse {
9
+ category_order?: string[]
10
+ fields: Record<string, ConfigFieldSchema>
11
+ }
12
+
13
+ export interface AudioTranscriptionResponse {
14
+ ok: boolean
15
+ provider?: string
16
+ transcript: string
17
+ }
18
+
19
+ export interface AudioSpeakResponse {
20
+ ok: boolean
21
+ data_url: string
22
+ mime_type: string
23
+ provider?: string
24
+ }
25
+
26
+ export interface ElevenLabsVoice {
27
+ label: string
28
+ name: string
29
+ voice_id: string
30
+ }
31
+
32
+ export interface ElevenLabsVoicesResponse {
33
+ available: boolean
34
+ voices: ElevenLabsVoice[]
35
+ }
36
+
37
+ export interface OAuthProviderStatus {
38
+ error?: string
39
+ expires_at?: null | string
40
+ has_refresh_token?: boolean
41
+ last_refresh?: null | string
42
+ logged_in: boolean
43
+ source?: null | string
44
+ source_label?: null | string
45
+ token_preview?: null | string
46
+ }
47
+
48
+ export interface OAuthProvider {
49
+ cli_command: string
50
+ docs_url: string
51
+ flow: 'device_code' | 'external' | 'loopback' | 'pkce'
52
+ id: string
53
+ name: string
54
+ status: OAuthProviderStatus
55
+ }
56
+
57
+ export interface OAuthProvidersResponse {
58
+ providers: OAuthProvider[]
59
+ }
60
+
61
+ export type OAuthStartResponse =
62
+ | {
63
+ auth_url: string
64
+ expires_in: number
65
+ flow: 'pkce'
66
+ session_id: string
67
+ }
68
+ | {
69
+ expires_in: number
70
+ flow: 'device_code'
71
+ poll_interval: number
72
+ session_id: string
73
+ user_code: string
74
+ verification_url: string
75
+ }
76
+ | {
77
+ auth_url: string
78
+ expires_in: number
79
+ flow: 'loopback'
80
+ session_id: string
81
+ }
82
+
83
+ export interface OAuthSubmitResponse {
84
+ message?: string
85
+ ok: boolean
86
+ status: 'approved' | 'error'
87
+ }
88
+
89
+ export interface OAuthPollResponse {
90
+ error_message?: null | string
91
+ expires_at?: null | number
92
+ session_id: string
93
+ status: 'approved' | 'denied' | 'error' | 'expired' | 'pending'
94
+ }
95
+
96
+ export interface EnvVarInfo {
97
+ advanced: boolean
98
+ category: string
99
+ // True when this var is a messaging-platform credential owned by a card on
100
+ // the dedicated Messaging page. The Keys page hides these to avoid
101
+ // duplicating the richer channel-configuration UI.
102
+ channel_managed?: boolean
103
+ description: string
104
+ is_password: boolean
105
+ is_set: boolean
106
+ redacted_value: null | string
107
+ tools: string[]
108
+ url: null | string
109
+ }
110
+
111
+ export interface MessagingEnvVarInfo {
112
+ advanced: boolean
113
+ description: string
114
+ is_password: boolean
115
+ is_set: boolean
116
+ key: string
117
+ prompt: string
118
+ redacted_value: null | string
119
+ required: boolean
120
+ url: null | string
121
+ }
122
+
123
+ export interface MessagingHomeChannel {
124
+ chat_id: string
125
+ name: string
126
+ platform: string
127
+ thread_id?: string
128
+ }
129
+
130
+ export interface MessagingPlatformInfo {
131
+ configured: boolean
132
+ description: string
133
+ docs_url: string
134
+ enabled: boolean
135
+ env_vars: MessagingEnvVarInfo[]
136
+ error_code?: null | string
137
+ error_message?: null | string
138
+ gateway_running: boolean
139
+ home_channel?: MessagingHomeChannel | null
140
+ id: string
141
+ name: string
142
+ state?: null | string
143
+ updated_at?: null | string
144
+ }
145
+
146
+ export interface MessagingPlatformsResponse {
147
+ platforms: MessagingPlatformInfo[]
148
+ }
149
+
150
+ export interface MessagingPlatformUpdate {
151
+ clear_env?: string[]
152
+ enabled?: boolean
153
+ env?: Record<string, string>
154
+ }
155
+
156
+ export interface MessagingPlatformTestResponse {
157
+ message: string
158
+ ok: boolean
159
+ state?: null | string
160
+ }
161
+
162
+ export interface GatewayReadyPayload {
163
+ skin?: unknown
164
+ }
165
+
166
+ export interface NasTechConfig {
167
+ agent?: {
168
+ reasoning_effort?: string
169
+ personalities?: Record<string, unknown>
170
+ service_tier?: string
171
+ }
172
+ display?: {
173
+ personality?: string
174
+ skin?: string
175
+ }
176
+ terminal?: {
177
+ cwd?: string
178
+ }
179
+ stt?: {
180
+ enabled?: boolean
181
+ }
182
+ voice?: {
183
+ max_recording_seconds?: number
184
+ }
185
+ }
186
+
187
+ export type NasTechConfigRecord = Record<string, unknown>
188
+
189
+ export interface ModelInfoResponse {
190
+ auto_context_length?: number
191
+ capabilities?: Record<string, unknown>
192
+ config_context_length?: number
193
+ effective_context_length?: number
194
+ model: string
195
+ provider: string
196
+ }
197
+
198
+ export interface ModelPricing {
199
+ /** Formatted $/Mtok input price, e.g. "$3.00", or "free", or "" if unknown. */
200
+ input: string
201
+ /** Formatted $/Mtok output price. */
202
+ output: string
203
+ /** Formatted $/Mtok cached-input price, or null when the model has none. */
204
+ cache: string | null
205
+ /** True when the model costs nothing (free tier eligible). */
206
+ free: boolean
207
+ }
208
+
209
+ export interface ModelOptionProvider {
210
+ is_current?: boolean
211
+ models?: string[]
212
+ name: string
213
+ slug: string
214
+ total_models?: number
215
+ warning?: string
216
+ /** True when the provider has usable credentials. False for canonical
217
+ * providers surfaced by `include_unconfigured` that the user hasn't set up
218
+ * yet — render these with a setup affordance instead of hiding them. */
219
+ authenticated?: boolean
220
+ /** Auth flow for an unconfigured provider: "api_key" can be activated inline
221
+ * by pasting `key_env`; anything else (oauth_*, external, aws_sdk, …) needs
222
+ * the `nastech model` CLI / onboarding OAuth flow. */
223
+ auth_type?: string
224
+ /** Env var to paste an API key into, for unconfigured `api_key` providers. */
225
+ key_env?: string
226
+ /** True for providers defined via the user's `providers:` config block. */
227
+ is_user_defined?: boolean
228
+ /** Per-model pricing keyed by model id (present when the picker requested
229
+ * pricing and the provider supports live pricing). */
230
+ pricing?: Record<string, ModelPricing>
231
+ /** NasTech Portal only: whether the current account is on the free tier. */
232
+ free_tier?: boolean
233
+ /** NasTech Portal only: paid models a free-tier user cannot select (shown disabled). */
234
+ unavailable_models?: string[]
235
+ /** Per-model option support, keyed by model id (present when the picker
236
+ * requested capabilities). Lets the UI gate fast/reasoning controls. */
237
+ capabilities?: Record<string, ModelCapabilities>
238
+ }
239
+
240
+ export interface ModelCapabilities {
241
+ fast: boolean
242
+ reasoning: boolean
243
+ }
244
+
245
+ export interface ModelOptionsResponse {
246
+ model?: string
247
+ provider?: string
248
+ providers?: ModelOptionProvider[]
249
+ }
250
+
251
+ export interface PaginatedSessions {
252
+ limit: number
253
+ offset: number
254
+ sessions: SessionInfo[]
255
+ total: number
256
+ /** Listable conversation count per profile (children excluded), keyed by
257
+ * profile name. Lets the sidebar scope its "Load more" footer to the active
258
+ * profile instead of the global total. Present only on
259
+ * `/api/profiles/sessions`. */
260
+ profile_totals?: Record<string, number>
261
+ /** Per-profile read failures from the cross-profile aggregator (e.g. a locked
262
+ * or corrupt state.db). Present only on `/api/profiles/sessions`. */
263
+ errors?: Array<{ profile: string; error: string }>
264
+ }
265
+
266
+ export interface RpcEvent<T = unknown> {
267
+ payload?: T
268
+ session_id?: string
269
+ type: string
270
+ }
271
+
272
+ export interface SessionCreateResponse {
273
+ info?: SessionRuntimeInfo
274
+ message_count?: number
275
+ messages?: SessionMessage[]
276
+ session_id: string
277
+ stored_session_id?: string
278
+ }
279
+
280
+ export interface SessionInfo {
281
+ archived?: boolean
282
+ cwd?: null | string
283
+ ended_at: null | number
284
+ id: string
285
+ /** Original root id of a compression chain, when this entry is a projected
286
+ * continuation tip. Stable across compressions — used as the durable id for
287
+ * pins so a pinned conversation survives auto-compression. */
288
+ _lineage_root_id?: null | string
289
+ input_tokens: number
290
+ is_active: boolean
291
+ last_active: number
292
+ message_count: number
293
+ model: null | string
294
+ output_tokens: number
295
+ preview: null | string
296
+ source: null | string
297
+ started_at: number
298
+ title: null | string
299
+ tool_call_count: number
300
+ /** Owning profile name, set by the cross-profile aggregator
301
+ * (`/api/profiles/sessions`). Absent on legacy single-profile responses,
302
+ * which the UI treats as the default profile. */
303
+ profile?: string
304
+ /** True when {@link profile} is the default profile. */
305
+ is_default_profile?: boolean
306
+ }
307
+
308
+ export interface SessionMessage {
309
+ codex_reasoning_items?: unknown
310
+ content: unknown
311
+ context?: unknown
312
+ name?: string
313
+ reasoning?: null | string
314
+ reasoning_content?: null | string
315
+ reasoning_details?: unknown
316
+ role: 'assistant' | 'system' | 'tool' | 'user'
317
+ text?: unknown
318
+ timestamp?: number
319
+ tool_call_id?: null | string
320
+ tool_calls?: unknown
321
+ tool_name?: string
322
+ }
323
+
324
+ export interface SessionMessagesResponse {
325
+ messages: SessionMessage[]
326
+ session_id: string
327
+ }
328
+
329
+ export interface SessionResumeResponse {
330
+ info?: SessionRuntimeInfo
331
+ message_count: number
332
+ messages: SessionMessage[]
333
+ resumed: string
334
+ session_id: string
335
+ }
336
+
337
+ export interface SessionRuntimeInfo {
338
+ branch?: string
339
+ config_warning?: string
340
+ credential_warning?: string
341
+ cwd?: string
342
+ desktop_contract?: number
343
+ fast?: boolean
344
+ model?: string
345
+ personality?: string
346
+ provider?: string
347
+ reasoning_effort?: string
348
+ running?: boolean
349
+ service_tier?: string
350
+ skills?: Record<string, string[]> | string[]
351
+ tools?: Record<string, string[]>
352
+ usage?: Partial<UsageStats>
353
+ version?: string
354
+ yolo?: boolean
355
+ }
356
+
357
+ export interface UsageStats {
358
+ calls: number
359
+ context_max?: number
360
+ context_percent?: number
361
+ context_used?: number
362
+ cost_usd?: number
363
+ input: number
364
+ output: number
365
+ total: number
366
+ }
367
+
368
+ export interface AnalyticsDailyEntry {
369
+ actual_cost: number
370
+ api_calls: number
371
+ cache_read_tokens: number
372
+ day: string
373
+ estimated_cost: number
374
+ input_tokens: number
375
+ output_tokens: number
376
+ reasoning_tokens: number
377
+ sessions: number
378
+ }
379
+
380
+ export interface AnalyticsModelEntry {
381
+ api_calls: number
382
+ estimated_cost: number
383
+ input_tokens: number
384
+ model: string
385
+ output_tokens: number
386
+ sessions: number
387
+ }
388
+
389
+ export interface AnalyticsResponse {
390
+ by_model: AnalyticsModelEntry[]
391
+ daily: AnalyticsDailyEntry[]
392
+ period_days: number
393
+ skills: {
394
+ summary: AnalyticsSkillsSummary
395
+ top_skills: AnalyticsSkillEntry[]
396
+ }
397
+ totals: AnalyticsTotals
398
+ }
399
+
400
+ export interface AnalyticsSkillEntry {
401
+ last_used_at: null | number
402
+ manage_count: number
403
+ percentage: number
404
+ skill: string
405
+ total_count: number
406
+ view_count: number
407
+ }
408
+
409
+ export interface AnalyticsSkillsSummary {
410
+ distinct_skills_used: number
411
+ total_skill_actions: number
412
+ total_skill_edits: number
413
+ total_skill_loads: number
414
+ }
415
+
416
+ export interface AnalyticsTotals {
417
+ total_actual_cost: number
418
+ total_api_calls: null | number
419
+ total_cache_read: null | number
420
+ total_estimated_cost: number
421
+ total_input: null | number
422
+ total_output: null | number
423
+ total_reasoning: null | number
424
+ total_sessions: number
425
+ }
426
+
427
+ export interface CronJob {
428
+ deliver?: null | string
429
+ enabled: boolean
430
+ id: string
431
+ last_error?: null | string
432
+ last_run_at?: null | string
433
+ name?: null | string
434
+ next_run_at?: null | string
435
+ prompt?: null | string
436
+ schedule?: CronJobSchedule
437
+ schedule_display?: null | string
438
+ script?: null | string
439
+ state?: null | string
440
+ }
441
+
442
+ export interface CronJobCreatePayload {
443
+ deliver?: string
444
+ name?: string
445
+ prompt: string
446
+ schedule: string
447
+ }
448
+
449
+ export interface CronJobSchedule {
450
+ display?: string
451
+ expr?: string
452
+ kind?: string
453
+ }
454
+
455
+ export interface CronJobUpdates {
456
+ deliver?: string
457
+ enabled?: boolean
458
+ name?: string
459
+ prompt?: string
460
+ schedule?: string
461
+ }
462
+
463
+ export interface ProfileCreatePayload {
464
+ clone_all?: boolean
465
+ clone_from?: string
466
+ clone_from_default?: boolean
467
+ name: string
468
+ no_skills?: boolean
469
+ }
470
+
471
+ export interface ProfileInfo {
472
+ has_env: boolean
473
+ is_default: boolean
474
+ model: null | string
475
+ name: string
476
+ path: string
477
+ provider: null | string
478
+ skill_count: number
479
+ }
480
+
481
+ export interface ProfileSetupCommand {
482
+ command: string
483
+ }
484
+
485
+ export interface ProfileSoul {
486
+ content: string
487
+ exists: boolean
488
+ }
489
+
490
+ export interface ProfilesResponse {
491
+ profiles: ProfileInfo[]
492
+ }
493
+
494
+ export interface SkillInfo {
495
+ category: string
496
+ description: string
497
+ enabled: boolean
498
+ name: string
499
+ }
500
+
501
+ export interface ToolsetInfo {
502
+ configured: boolean
503
+ description: string
504
+ enabled: boolean
505
+ label: string
506
+ name: string
507
+ tools: string[]
508
+ }
509
+
510
+ export interface ToolEnvVar {
511
+ key: string
512
+ prompt: string
513
+ url: string | null
514
+ default: string | null
515
+ is_set: boolean
516
+ }
517
+
518
+ export interface ToolProvider {
519
+ name: string
520
+ badge: string
521
+ tag: string
522
+ env_vars: ToolEnvVar[]
523
+ post_setup: string | null
524
+ requires_nastech_auth: boolean
525
+ /** True when this is the provider currently written to config (mirrors the
526
+ * CLI `nastech tools` active-provider detection). */
527
+ is_active: boolean
528
+ }
529
+
530
+ export interface ToolsetConfig {
531
+ name: string
532
+ has_category: boolean
533
+ providers: ToolProvider[]
534
+ /** Name of the currently active provider, or null if none is configured. */
535
+ active_provider: string | null
536
+ }
537
+
538
+ export interface SessionSearchResult {
539
+ /** Lineage root of the matched conversation. Stable across compression and
540
+ * used as the durable pin id; falls back to session_id when absent. */
541
+ lineage_root?: string | null
542
+ model: string | null
543
+ role: string | null
544
+ /** Live compression tip of the matched conversation — resume by this id. */
545
+ session_id: string
546
+ session_started: number | null
547
+ snippet: string
548
+ source: string | null
549
+ }
550
+
551
+ export interface SessionSearchResponse {
552
+ results: SessionSearchResult[]
553
+ }
554
+
555
+ export interface LogsResponse {
556
+ file: string
557
+ lines: string[]
558
+ }
559
+
560
+ export interface PlatformStatus {
561
+ error_code?: string
562
+ error_message?: string
563
+ state: string
564
+ updated_at: string
565
+ }
566
+
567
+ export interface StatusResponse {
568
+ active_sessions: number
569
+ config_path: string
570
+ config_version: number
571
+ env_path: string
572
+ gateway_exit_reason: string | null
573
+ gateway_health_url: string | null
574
+ gateway_pid: number | null
575
+ gateway_platforms: Record<string, PlatformStatus>
576
+ gateway_running: boolean
577
+ gateway_state: string | null
578
+ gateway_updated_at: string | null
579
+ nastech_home: string
580
+ latest_config_version: number
581
+ release_date: string
582
+ version: string
583
+ }
584
+
585
+ export interface ActionResponse {
586
+ name: string
587
+ ok: boolean
588
+ pid: number
589
+ }
590
+
591
+ export interface ActionStatusResponse {
592
+ exit_code: number | null
593
+ lines: string[]
594
+ name: string
595
+ pid: number | null
596
+ running: boolean
597
+ }
598
+
599
+ export interface AuxiliaryTaskAssignment {
600
+ base_url: string
601
+ model: string
602
+ provider: string
603
+ task: string
604
+ }
605
+
606
+ export interface AuxiliaryModelsResponse {
607
+ main: { model: string; provider: string }
608
+ tasks: AuxiliaryTaskAssignment[]
609
+ }
610
+
611
+ export interface ModelAssignmentRequest {
612
+ /** OpenAI-compatible endpoint URL. Only honored for custom/local providers
613
+ * on the main slot — wires a self-hosted endpoint into runtime resolution. */
614
+ base_url?: string
615
+ model: string
616
+ provider: string
617
+ scope: 'main' | 'auxiliary'
618
+ task?: string
619
+ }
620
+
621
+ /** An auxiliary task still pinned to a provider that differs from the
622
+ * newly-selected main provider after a main-model switch. */
623
+ export interface StaleAuxAssignment {
624
+ task: string
625
+ provider: string
626
+ model: string
627
+ }
628
+
629
+ export interface ModelAssignmentResponse {
630
+ /** Persisted endpoint URL for custom/local providers (echoed back). */
631
+ base_url?: string
632
+ /** Toolset keys auto-routed through the NasTech Tool Gateway as a result of
633
+ * switching the main provider to NasTech. Empty unless provider === 'nastech'
634
+ * and the user is a paid subscriber with unconfigured tools. */
635
+ gateway_tools?: string[]
636
+ model?: string
637
+ ok: boolean
638
+ provider?: string
639
+ reset?: boolean
640
+ scope?: string
641
+ /** Auxiliary slots still pinned to a different provider than the new main.
642
+ * Switching main never clears aux pins; this lets the UI warn the user
643
+ * their helper tasks aren't following the switch. Only set on scope:'main'. */
644
+ stale_aux?: StaleAuxAssignment[]
645
+ tasks?: string[]
646
+ }
@@ -0,0 +1 @@
1
+ /// <reference types="vite/client" />
package/tsconfig.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "useDefineForClassFields": true,
5
+ "lib": ["DOM", "DOM.Iterable", "ES2023"],
6
+ "allowJs": false,
7
+ "skipLibCheck": true,
8
+ "esModuleInterop": true,
9
+ "allowSyntheticDefaultImports": true,
10
+ "strict": true,
11
+ "forceConsistentCasingInFileNames": true,
12
+ "module": "ESNext",
13
+ "moduleResolution": "Bundler",
14
+ "resolveJsonModule": true,
15
+ "isolatedModules": true,
16
+ "noEmit": true,
17
+ "jsx": "react-jsx",
18
+ "paths": {
19
+ "@/*": ["./src/*"],
20
+ "@NASTECH/shared": ["../shared/src/index.ts"]
21
+ }
22
+ },
23
+ "include": ["src", "../shared/src"],
24
+ "references": []
25
+ }