@songsid/agend 2.3.5-alpha.4 → 2.3.5-beta.1

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 (670) hide show
  1. package/README.md +0 -2
  2. package/README.zh-TW.md +0 -2
  3. package/THIRD_PARTY_NOTICES.md +12 -28
  4. package/dist/agent-cli-instructions.md +1 -1
  5. package/dist/agent-credentials.d.ts +24 -0
  6. package/dist/agent-credentials.js +66 -0
  7. package/dist/agent-credentials.js.map +1 -0
  8. package/dist/agent-endpoint.d.ts +4 -6
  9. package/dist/agent-endpoint.js +15 -12
  10. package/dist/agent-endpoint.js.map +1 -1
  11. package/dist/auth-api.d.ts +0 -21
  12. package/dist/auth-api.js +8 -93
  13. package/dist/auth-api.js.map +1 -1
  14. package/dist/authority/session-authorizations.d.ts +30 -4
  15. package/dist/authority/session-authorizations.js +69 -17
  16. package/dist/authority/session-authorizations.js.map +1 -1
  17. package/dist/authority/web-authority.d.ts +2 -12
  18. package/dist/authority/web-authority.js +4 -25
  19. package/dist/authority/web-authority.js.map +1 -1
  20. package/dist/backend/antigravity.js +3 -1
  21. package/dist/backend/antigravity.js.map +1 -1
  22. package/dist/backend/claude-code.d.ts +12 -15
  23. package/dist/backend/claude-code.js +133 -152
  24. package/dist/backend/claude-code.js.map +1 -1
  25. package/dist/backend/codex-metadata.d.ts +14 -0
  26. package/dist/backend/codex-metadata.js +45 -0
  27. package/dist/backend/codex-metadata.js.map +1 -1
  28. package/dist/backend/codex-package.d.ts +2 -5
  29. package/dist/backend/codex-package.js +5 -1
  30. package/dist/backend/codex-package.js.map +1 -1
  31. package/dist/backend/codex-quota-history.d.ts +7 -0
  32. package/dist/backend/codex-quota-history.js +72 -0
  33. package/dist/backend/codex-quota-history.js.map +1 -0
  34. package/dist/backend/codex-session-lookup.d.ts +6 -0
  35. package/dist/backend/codex-session-lookup.js +1 -1
  36. package/dist/backend/codex-session-lookup.js.map +1 -1
  37. package/dist/backend/codex-speed.d.ts +14 -0
  38. package/dist/backend/codex-speed.js +35 -0
  39. package/dist/backend/codex-speed.js.map +1 -0
  40. package/dist/backend/codex.d.ts +116 -136
  41. package/dist/backend/codex.js +912 -942
  42. package/dist/backend/codex.js.map +1 -1
  43. package/dist/backend/grok-weekly-reset.d.ts +24 -0
  44. package/dist/backend/grok-weekly-reset.js +95 -0
  45. package/dist/backend/grok-weekly-reset.js.map +1 -0
  46. package/dist/backend/grok.d.ts +30 -3
  47. package/dist/backend/grok.js +301 -76
  48. package/dist/backend/grok.js.map +1 -1
  49. package/dist/backend/kiro.d.ts +3 -0
  50. package/dist/backend/kiro.js +50 -2
  51. package/dist/backend/kiro.js.map +1 -1
  52. package/dist/backend/muse.js +5 -3
  53. package/dist/backend/muse.js.map +1 -1
  54. package/dist/backend/types.d.ts +15 -8
  55. package/dist/backend/types.js +3 -0
  56. package/dist/backend/types.js.map +1 -1
  57. package/dist/bundled-tmux-guard.d.ts +21 -0
  58. package/dist/bundled-tmux-guard.js +96 -0
  59. package/dist/bundled-tmux-guard.js.map +1 -0
  60. package/dist/cache-ledger.d.ts +95 -0
  61. package/dist/cache-ledger.js +276 -4
  62. package/dist/cache-ledger.js.map +1 -1
  63. package/dist/cache-service.d.ts +5 -0
  64. package/dist/cache-service.js +16 -4
  65. package/dist/cache-service.js.map +1 -1
  66. package/dist/channel/adapters/discord.js +11 -3
  67. package/dist/channel/adapters/discord.js.map +1 -1
  68. package/dist/channel/adapters/telegram.d.ts +51 -0
  69. package/dist/channel/adapters/telegram.js +235 -17
  70. package/dist/channel/adapters/telegram.js.map +1 -1
  71. package/dist/channel/ipc-bridge.d.ts +0 -2
  72. package/dist/channel/mcp-tools.js +3 -3
  73. package/dist/channel/mcp-tools.js.map +1 -1
  74. package/dist/channel/types.d.ts +2 -0
  75. package/dist/classic-channel-manager.d.ts +2 -0
  76. package/dist/classic-channel-manager.js +5 -1
  77. package/dist/classic-channel-manager.js.map +1 -1
  78. package/dist/cli.js +14 -10
  79. package/dist/cli.js.map +1 -1
  80. package/dist/config-validator.js +30 -71
  81. package/dist/config-validator.js.map +1 -1
  82. package/dist/config.js +3 -17
  83. package/dist/config.js.map +1 -1
  84. package/dist/cross-instance-notice.d.ts +10 -0
  85. package/dist/cross-instance-notice.js +67 -5
  86. package/dist/cross-instance-notice.js.map +1 -1
  87. package/dist/daemon.d.ts +70 -68
  88. package/dist/daemon.js +774 -846
  89. package/dist/daemon.js.map +1 -1
  90. package/dist/dashboard-permissions.d.ts +8 -0
  91. package/dist/dashboard-permissions.js +16 -0
  92. package/dist/dashboard-permissions.js.map +1 -1
  93. package/dist/delivery-consumed-watch.d.ts +26 -16
  94. package/dist/delivery-consumed-watch.js +31 -26
  95. package/dist/delivery-consumed-watch.js.map +1 -1
  96. package/dist/delivery-outbox.d.ts +0 -5
  97. package/dist/delivery-outbox.js +4 -32
  98. package/dist/delivery-outbox.js.map +1 -1
  99. package/dist/delivery-reconciliation.d.ts +42 -2
  100. package/dist/delivery-reconciliation.js +164 -2
  101. package/dist/delivery-reconciliation.js.map +1 -1
  102. package/dist/export-import.d.ts +7 -0
  103. package/dist/export-import.js +44 -10
  104. package/dist/export-import.js.map +1 -1
  105. package/dist/fleet-context.d.ts +4 -2
  106. package/dist/fleet-level-config.d.ts +1 -1
  107. package/dist/fleet-level-config.js +0 -2
  108. package/dist/fleet-level-config.js.map +1 -1
  109. package/dist/fleet-manager.d.ts +108 -245
  110. package/dist/fleet-manager.js +656 -2028
  111. package/dist/fleet-manager.js.map +1 -1
  112. package/dist/general-instance.d.ts +0 -7
  113. package/dist/general-instance.js +3 -20
  114. package/dist/general-instance.js.map +1 -1
  115. package/dist/general-knowledge/skills/concepts/SKILL.md +393 -0
  116. package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +1 -0
  117. package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +3 -1
  118. package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +41 -4
  119. package/dist/general-knowledge/skills/web-dashboard/SKILL.md +9 -3
  120. package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +1 -1
  121. package/dist/instance-config-impact.js +6 -7
  122. package/dist/instance-config-impact.js.map +1 -1
  123. package/dist/instance-lifecycle.d.ts +19 -23
  124. package/dist/instance-lifecycle.js +216 -383
  125. package/dist/instance-lifecycle.js.map +1 -1
  126. package/dist/instance-topic-delete.d.ts +77 -0
  127. package/dist/instance-topic-delete.js +123 -0
  128. package/dist/instance-topic-delete.js.map +1 -0
  129. package/dist/instructions.d.ts +1 -3
  130. package/dist/instructions.js +1 -7
  131. package/dist/instructions.js.map +1 -1
  132. package/dist/kiro-engine-status.d.ts +11 -0
  133. package/dist/kiro-engine-status.js +6 -0
  134. package/dist/kiro-engine-status.js.map +1 -1
  135. package/dist/locale.js +63 -86
  136. package/dist/locale.js.map +1 -1
  137. package/dist/log-service.d.ts +28 -0
  138. package/dist/log-service.js +29 -0
  139. package/dist/log-service.js.map +1 -1
  140. package/dist/log-steps.d.ts +4 -3
  141. package/dist/log-steps.js +32 -7
  142. package/dist/log-steps.js.map +1 -1
  143. package/dist/logger.d.ts +16 -2
  144. package/dist/logger.js +346 -66
  145. package/dist/logger.js.map +1 -1
  146. package/dist/login-flows.d.ts +7 -0
  147. package/dist/login-flows.js +5 -2
  148. package/dist/login-flows.js.map +1 -1
  149. package/dist/login-manager.js +25 -4
  150. package/dist/login-manager.js.map +1 -1
  151. package/dist/missed-offline.d.ts +25 -0
  152. package/dist/missed-offline.js +79 -0
  153. package/dist/missed-offline.js.map +1 -0
  154. package/dist/muse-usage-relay.d.ts +2 -0
  155. package/dist/muse-usage-relay.js +5 -3
  156. package/dist/muse-usage-relay.js.map +1 -1
  157. package/dist/needs-you-hub.d.ts +6 -3
  158. package/dist/needs-you-hub.js +31 -9
  159. package/dist/needs-you-hub.js.map +1 -1
  160. package/dist/needs-you.d.ts +20 -18
  161. package/dist/needs-you.js +18 -14
  162. package/dist/needs-you.js.map +1 -1
  163. package/dist/office-share-page.js +1 -1
  164. package/dist/office-share-page.js.map +1 -1
  165. package/dist/outbound-handlers.d.ts +2 -16
  166. package/dist/outbound-handlers.js +10 -72
  167. package/dist/outbound-handlers.js.map +1 -1
  168. package/dist/outbound-schemas.d.ts +0 -38
  169. package/dist/outbound-schemas.js +5 -14
  170. package/dist/outbound-schemas.js.map +1 -1
  171. package/dist/pane-quota-history.d.ts +7 -0
  172. package/dist/pane-quota-history.js +47 -0
  173. package/dist/pane-quota-history.js.map +1 -0
  174. package/dist/platform-general.d.ts +46 -0
  175. package/dist/platform-general.js +91 -0
  176. package/dist/platform-general.js.map +1 -0
  177. package/dist/public-web-gateway.js +0 -9
  178. package/dist/public-web-gateway.js.map +1 -1
  179. package/dist/public-web-link.d.ts +0 -11
  180. package/dist/public-web-link.js +0 -13
  181. package/dist/public-web-link.js.map +1 -1
  182. package/dist/queued-handoffs.d.ts +33 -0
  183. package/dist/queued-handoffs.js +75 -0
  184. package/dist/queued-handoffs.js.map +1 -0
  185. package/dist/quickstart-api.js +5 -9
  186. package/dist/quickstart-api.js.map +1 -1
  187. package/dist/quickstart.d.ts +8 -1
  188. package/dist/quickstart.js +42 -4
  189. package/dist/quickstart.js.map +1 -1
  190. package/dist/quota-notice-config.d.ts +22 -0
  191. package/dist/quota-notice-config.js +41 -0
  192. package/dist/quota-notice-config.js.map +1 -0
  193. package/dist/quota-notice.d.ts +7 -0
  194. package/dist/quota-notice.js +40 -0
  195. package/dist/quota-notice.js.map +1 -1
  196. package/dist/reply-buttons-controller.js +10 -6
  197. package/dist/reply-buttons-controller.js.map +1 -1
  198. package/dist/reply-polls.d.ts +2 -2
  199. package/dist/reply-polls.js +3 -3
  200. package/dist/reply-polls.js.map +1 -1
  201. package/dist/scheduler/db.d.ts +2 -1
  202. package/dist/scheduler/db.js +23 -9
  203. package/dist/scheduler/db.js.map +1 -1
  204. package/dist/scheduler/task-board.d.ts +9 -0
  205. package/dist/scheduler/task-board.js +19 -0
  206. package/dist/scheduler/task-board.js.map +1 -1
  207. package/dist/settings-api.d.ts +13 -5
  208. package/dist/settings-api.js +26 -96
  209. package/dist/settings-api.js.map +1 -1
  210. package/dist/settings-baseline.d.ts +0 -1
  211. package/dist/settings-baseline.js +1 -1
  212. package/dist/settings-baseline.js.map +1 -1
  213. package/dist/settings-change.js +23 -28
  214. package/dist/settings-change.js.map +1 -1
  215. package/dist/settings-confirmation.d.ts +1 -16
  216. package/dist/settings-confirmation.js +9 -47
  217. package/dist/settings-confirmation.js.map +1 -1
  218. package/dist/settings-effect.d.ts +0 -4
  219. package/dist/settings-effect.js +1 -58
  220. package/dist/settings-effect.js.map +1 -1
  221. package/dist/settings-http-confirmation.d.ts +0 -4
  222. package/dist/settings-http-confirmation.js +3 -31
  223. package/dist/settings-http-confirmation.js.map +1 -1
  224. package/dist/settings-instance-patch.js +28 -1
  225. package/dist/settings-instance-patch.js.map +1 -1
  226. package/dist/settings-request-capability.d.ts +0 -2
  227. package/dist/settings-request-capability.js +0 -4
  228. package/dist/settings-request-capability.js.map +1 -1
  229. package/dist/settings-transaction.d.ts +0 -4
  230. package/dist/settings-transaction.js +0 -9
  231. package/dist/settings-transaction.js.map +1 -1
  232. package/dist/setup-form.js +3 -6
  233. package/dist/setup-form.js.map +1 -1
  234. package/dist/setup-i18n.js +0 -3
  235. package/dist/setup-i18n.js.map +1 -1
  236. package/dist/task-board-tool.d.ts +11 -0
  237. package/dist/task-board-tool.js +44 -0
  238. package/dist/task-board-tool.js.map +1 -1
  239. package/dist/task-board-waker.d.ts +6 -0
  240. package/dist/task-board-waker.js +4 -0
  241. package/dist/task-board-waker.js.map +1 -1
  242. package/dist/tmux-control.d.ts +1 -2
  243. package/dist/tmux-control.js.map +1 -1
  244. package/dist/tmux-manager.d.ts +1 -2
  245. package/dist/tmux-manager.js.map +1 -1
  246. package/dist/tool-permissions.d.ts +5 -2
  247. package/dist/tool-permissions.js +7 -7
  248. package/dist/tool-permissions.js.map +1 -1
  249. package/dist/tool-progress.d.ts +2 -0
  250. package/dist/tool-progress.js +19 -3
  251. package/dist/tool-progress.js.map +1 -1
  252. package/dist/topic-commands.js +4 -3
  253. package/dist/topic-commands.js.map +1 -1
  254. package/dist/transcript-delta-reader.d.ts +1 -1
  255. package/dist/transcript-delta-reader.js +1 -1
  256. package/dist/transcript-delta-reader.js.map +1 -1
  257. package/dist/transcript-monitor.d.ts +20 -3
  258. package/dist/transcript-monitor.js +92 -24
  259. package/dist/transcript-monitor.js.map +1 -1
  260. package/dist/transcript-sources.d.ts +0 -5
  261. package/dist/transcript-sources.js +79 -8
  262. package/dist/transcript-sources.js.map +1 -1
  263. package/dist/types.d.ts +3 -23
  264. package/dist/ui/app.html +8 -1
  265. package/dist/ui/backend-signin.js +21 -36
  266. package/dist/ui/chat-md-strings.js +9 -0
  267. package/dist/ui/chat-store.js +2 -13
  268. package/dist/ui/chat-strings.js +2 -50
  269. package/dist/ui/chat-thread.js +53 -3
  270. package/dist/ui/fleet-task-card.js +3 -3
  271. package/dist/ui/fleet-task-common.js +10 -0
  272. package/dist/ui/fleet-tasks.js +7 -5
  273. package/dist/ui/fleet-usage.js +90 -27
  274. package/dist/ui/panel-chat.js +37 -66
  275. package/dist/ui/panel-details.js +1 -2
  276. package/dist/ui/panel-fleet.js +88 -107
  277. package/dist/ui/panel-needs.js +21 -163
  278. package/dist/ui/panel-notices.js +4 -3
  279. package/dist/ui/panel-settings.js +149 -239
  280. package/dist/ui/preview-panel.js +84 -6
  281. package/dist/ui/search-dialog.js +3 -2
  282. package/dist/ui/settings-appearance.js +23 -122
  283. package/dist/ui/settings-catalog.js +10 -37
  284. package/dist/ui/settings-codex-copy.js +19 -0
  285. package/dist/ui/settings-confirm.js +1 -3
  286. package/dist/ui/settings-dialogs.js +20 -27
  287. package/dist/ui/settings-guests.js +14 -27
  288. package/dist/ui/settings-model.js +17 -12
  289. package/dist/ui/settings-quota-notice.js +100 -0
  290. package/dist/ui/settings-registry.js +4 -11
  291. package/dist/ui/settings-strings.js +4 -113
  292. package/dist/ui/settings-web-authority.js +13 -15
  293. package/dist/ui/shared/app-i18n.js +2 -2
  294. package/dist/ui/shared/app-needs.js +1 -1
  295. package/dist/ui/shared/app-route.js +2 -6
  296. package/dist/ui/shared/app-shell.js +18 -23
  297. package/dist/ui/shared/app-store.js +2 -3
  298. package/dist/ui/shared/app-stream.js +1 -3
  299. package/dist/ui/shared/app.css +40 -1312
  300. package/dist/ui/shared/app.js +2 -5
  301. package/dist/ui/shared/header-tools.js +4 -6
  302. package/dist/ui/shared/instance-nav.js +7 -34
  303. package/dist/ui/shared/instance-switch.js +3 -4
  304. package/dist/ui/shared/loading.css +37 -0
  305. package/dist/ui/shared/panel-view.js +77 -4
  306. package/dist/ui/shared/signin.js +6 -39
  307. package/dist/ui/shared/tokens.css +0 -1
  308. package/dist/ui/shared/ui-dialog.js +2 -2
  309. package/dist/ui/shared/ui-menu.js +10 -30
  310. package/dist/ui/shared/ui-states.js +14 -3
  311. package/dist/ui/shared/usage-dialog.js +18 -1
  312. package/dist/ui/shared/vendor/vendor.json +2 -19
  313. package/dist/ui/shared/view-history.css +17 -0
  314. package/dist/ui/shared/view-history.js +438 -0
  315. package/dist/ui/shared/view-strings.js +16 -8
  316. package/dist/ui/signin.html +5 -2
  317. package/dist/unattended-install.d.ts +11 -2
  318. package/dist/unattended-install.js +39 -5
  319. package/dist/unattended-install.js.map +1 -1
  320. package/dist/usage/capacity.d.ts +69 -0
  321. package/dist/usage/capacity.js +119 -0
  322. package/dist/usage/capacity.js.map +1 -0
  323. package/dist/usage/i18n-keys.d.ts +1 -1
  324. package/dist/usage/i18n-keys.js +3 -0
  325. package/dist/usage/i18n-keys.js.map +1 -1
  326. package/dist/usage/profile-timeline.d.ts +16 -0
  327. package/dist/usage/profile-timeline.js +58 -0
  328. package/dist/usage/profile-timeline.js.map +1 -0
  329. package/dist/usage/providers.d.ts +5 -0
  330. package/dist/usage/providers.js +5 -0
  331. package/dist/usage/providers.js.map +1 -1
  332. package/dist/usage/quota-history.d.ts +43 -0
  333. package/dist/usage/quota-history.js +168 -0
  334. package/dist/usage/quota-history.js.map +1 -0
  335. package/dist/usage/quota-notices.d.ts +38 -0
  336. package/dist/usage/quota-notices.js +160 -0
  337. package/dist/usage/quota-notices.js.map +1 -0
  338. package/dist/usage/usage-api.d.ts +32 -0
  339. package/dist/usage/usage-api.js +96 -1
  340. package/dist/usage/usage-api.js.map +1 -1
  341. package/dist/usage-report.d.ts +25 -1
  342. package/dist/usage-report.js +55 -4
  343. package/dist/usage-report.js.map +1 -1
  344. package/dist/usage-rollup.d.ts +6 -1
  345. package/dist/usage-rollup.js +16 -4
  346. package/dist/usage-rollup.js.map +1 -1
  347. package/dist/view-api.d.ts +16 -0
  348. package/dist/view-api.js +100 -16
  349. package/dist/view-api.js.map +1 -1
  350. package/dist/view-history.d.ts +84 -0
  351. package/dist/view-history.js +116 -0
  352. package/dist/view-history.js.map +1 -0
  353. package/dist/web-api.d.ts +6 -38
  354. package/dist/web-api.js +20 -255
  355. package/dist/web-api.js.map +1 -1
  356. package/dist/web-chat-history.d.ts +2 -19
  357. package/dist/web-chat-history.js +3 -72
  358. package/dist/web-chat-history.js.map +1 -1
  359. package/dist/web-only-fleet.d.ts +0 -20
  360. package/dist/web-only-fleet.js +0 -21
  361. package/dist/web-only-fleet.js.map +1 -1
  362. package/dist/web-session-authorization.d.ts +13 -2
  363. package/dist/web-session-authorization.js +10 -3
  364. package/dist/web-session-authorization.js.map +1 -1
  365. package/dist/web-session.d.ts +0 -7
  366. package/dist/web-session.js +0 -2
  367. package/dist/web-session.js.map +1 -1
  368. package/dist/web-shell-routes.d.ts +1 -4
  369. package/dist/web-shell-routes.js +2 -7
  370. package/dist/web-shell-routes.js.map +1 -1
  371. package/launcher/private-home.cjs +1 -1
  372. package/package.json +3 -9
  373. package/dist/agent-runtime-api.d.ts +0 -4
  374. package/dist/agent-runtime-api.js +0 -59
  375. package/dist/agent-runtime-api.js.map +0 -1
  376. package/dist/agent-runtime-change.d.ts +0 -74
  377. package/dist/agent-runtime-change.js +0 -102
  378. package/dist/agent-runtime-change.js.map +0 -1
  379. package/dist/backend/grok-model-cache.d.ts +0 -7
  380. package/dist/backend/grok-model-cache.js +0 -65
  381. package/dist/backend/grok-model-cache.js.map +0 -1
  382. package/dist/backend/native-pane.d.ts +0 -9
  383. package/dist/backend/native-pane.js +0 -59
  384. package/dist/backend/native-pane.js.map +0 -1
  385. package/dist/fleet-windows-runtime.d.ts +0 -97
  386. package/dist/fleet-windows-runtime.js +0 -449
  387. package/dist/fleet-windows-runtime.js.map +0 -1
  388. package/dist/general-binding.d.ts +0 -85
  389. package/dist/general-binding.js +0 -298
  390. package/dist/general-binding.js.map +0 -1
  391. package/dist/general-host-owner.d.ts +0 -8
  392. package/dist/general-host-owner.js +0 -26
  393. package/dist/general-host-owner.js.map +0 -1
  394. package/dist/general-role.d.ts +0 -5
  395. package/dist/general-role.js +0 -26
  396. package/dist/general-role.js.map +0 -1
  397. package/dist/local-pane-endpoint.d.ts +0 -46
  398. package/dist/local-pane-endpoint.js +0 -189
  399. package/dist/local-pane-endpoint.js.map +0 -1
  400. package/dist/local-pane-launcher.d.ts +0 -2
  401. package/dist/local-pane-launcher.js +0 -38
  402. package/dist/local-pane-launcher.js.map +0 -1
  403. package/dist/local-pane-stage.ps1 +0 -101
  404. package/dist/model-catalog-defaults.d.ts +0 -14
  405. package/dist/model-catalog-defaults.js +0 -20
  406. package/dist/model-catalog-defaults.js.map +0 -1
  407. package/dist/native-agent-admission.d.ts +0 -7
  408. package/dist/native-agent-admission.js +0 -26
  409. package/dist/native-agent-admission.js.map +0 -1
  410. package/dist/native-daemon-client.d.ts +0 -13
  411. package/dist/native-daemon-client.js +0 -28
  412. package/dist/native-daemon-client.js.map +0 -1
  413. package/dist/native-instance-api.d.ts +0 -14
  414. package/dist/native-instance-api.js +0 -205
  415. package/dist/native-instance-api.js.map +0 -1
  416. package/dist/native-instance-input.d.ts +0 -84
  417. package/dist/native-instance-input.js +0 -54
  418. package/dist/native-instance-input.js.map +0 -1
  419. package/dist/native-instance-registry.d.ts +0 -32
  420. package/dist/native-instance-registry.js +0 -105
  421. package/dist/native-instance-registry.js.map +0 -1
  422. package/dist/native-mcp.d.ts +0 -40
  423. package/dist/native-mcp.js +0 -278
  424. package/dist/native-mcp.js.map +0 -1
  425. package/dist/native-model-catalog.d.ts +0 -5
  426. package/dist/native-model-catalog.js +0 -76
  427. package/dist/native-model-catalog.js.map +0 -1
  428. package/dist/native-pane-crash-budget.d.ts +0 -20
  429. package/dist/native-pane-crash-budget.js +0 -60
  430. package/dist/native-pane-crash-budget.js.map +0 -1
  431. package/dist/native-pane-create.d.ts +0 -26
  432. package/dist/native-pane-create.js +0 -53
  433. package/dist/native-pane-create.js.map +0 -1
  434. package/dist/native-pane-lifecycle.d.ts +0 -65
  435. package/dist/native-pane-lifecycle.js +0 -230
  436. package/dist/native-pane-lifecycle.js.map +0 -1
  437. package/dist/native-pane-manager.d.ts +0 -59
  438. package/dist/native-pane-manager.js +0 -584
  439. package/dist/native-pane-manager.js.map +0 -1
  440. package/dist/native-pane-output-log.d.ts +0 -15
  441. package/dist/native-pane-output-log.js +0 -108
  442. package/dist/native-pane-output-log.js.map +0 -1
  443. package/dist/native-pane-reconciliation.d.ts +0 -4
  444. package/dist/native-pane-reconciliation.js +0 -40
  445. package/dist/native-pane-reconciliation.js.map +0 -1
  446. package/dist/native-pane-recovery.d.ts +0 -12
  447. package/dist/native-pane-recovery.js +0 -10
  448. package/dist/native-pane-recovery.js.map +0 -1
  449. package/dist/native-pane-tools.d.ts +0 -2
  450. package/dist/native-pane-tools.js +0 -14
  451. package/dist/native-pane-tools.js.map +0 -1
  452. package/dist/pane-port.d.ts +0 -118
  453. package/dist/pane-port.js +0 -2
  454. package/dist/pane-port.js.map +0 -1
  455. package/dist/runtime-api.d.ts +0 -8
  456. package/dist/runtime-api.js +0 -171
  457. package/dist/runtime-api.js.map +0 -1
  458. package/dist/runtime-assets/@xterm/addon-serialize/LICENSE +0 -21
  459. package/dist/runtime-assets/@xterm/addon-serialize/lib/addon-serialize.js +0 -2
  460. package/dist/runtime-assets/@xterm/addon-serialize/lib/addon-serialize.mjs +0 -19
  461. package/dist/runtime-assets/@xterm/addon-serialize/package.json +0 -29
  462. package/dist/runtime-assets/@xterm/headless/LICENSE +0 -21
  463. package/dist/runtime-assets/@xterm/headless/lib-headless/xterm-headless.js +0 -2
  464. package/dist/runtime-assets/@xterm/headless/lib-headless/xterm-headless.mjs +0 -46
  465. package/dist/runtime-assets/@xterm/headless/package.json +0 -29
  466. package/dist/runtime-assets/node-pty/CONPTY-LICENSE +0 -21
  467. package/dist/runtime-assets/node-pty/CONPTY-NOTICE.md +0 -503
  468. package/dist/runtime-assets/node-pty/LICENSE +0 -69
  469. package/dist/runtime-assets/node-pty/lib/conpty_console_list_agent.js +0 -16
  470. package/dist/runtime-assets/node-pty/lib/eventEmitter2.js +0 -47
  471. package/dist/runtime-assets/node-pty/lib/index.js +0 -52
  472. package/dist/runtime-assets/node-pty/lib/interfaces.js +0 -7
  473. package/dist/runtime-assets/node-pty/lib/shared/conout.js +0 -11
  474. package/dist/runtime-assets/node-pty/lib/terminal.js +0 -190
  475. package/dist/runtime-assets/node-pty/lib/types.js +0 -7
  476. package/dist/runtime-assets/node-pty/lib/unixTerminal.js +0 -346
  477. package/dist/runtime-assets/node-pty/lib/utils.js +0 -39
  478. package/dist/runtime-assets/node-pty/lib/windowsConoutConnection.js +0 -125
  479. package/dist/runtime-assets/node-pty/lib/windowsPtyAgent.js +0 -320
  480. package/dist/runtime-assets/node-pty/lib/windowsTerminal.js +0 -199
  481. package/dist/runtime-assets/node-pty/lib/worker/conoutSocketWorker.js +0 -22
  482. package/dist/runtime-assets/node-pty/package.json +0 -64
  483. package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  484. package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  485. package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  486. package/dist/runtime-assets/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  487. package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  488. package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  489. package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  490. package/dist/runtime-assets/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  491. package/dist/runtime-build-info.d.ts +0 -9
  492. package/dist/runtime-build-info.js +0 -57
  493. package/dist/runtime-build-info.js.map +0 -1
  494. package/dist/runtime-bundle.d.ts +0 -19
  495. package/dist/runtime-bundle.js +0 -156
  496. package/dist/runtime-bundle.js.map +0 -1
  497. package/dist/runtime-cli.d.ts +0 -7
  498. package/dist/runtime-cli.js +0 -152
  499. package/dist/runtime-cli.js.map +0 -1
  500. package/dist/runtime-client-store.d.ts +0 -68
  501. package/dist/runtime-client-store.js +0 -344
  502. package/dist/runtime-client-store.js.map +0 -1
  503. package/dist/runtime-client.d.ts +0 -112
  504. package/dist/runtime-client.js +0 -736
  505. package/dist/runtime-client.js.map +0 -1
  506. package/dist/runtime-connection.d.ts +0 -22
  507. package/dist/runtime-connection.js +0 -93
  508. package/dist/runtime-connection.js.map +0 -1
  509. package/dist/runtime-coordinator.d.ts +0 -91
  510. package/dist/runtime-coordinator.js +0 -911
  511. package/dist/runtime-coordinator.js.map +0 -1
  512. package/dist/runtime-general-protocol.d.ts +0 -22
  513. package/dist/runtime-general-protocol.js +0 -57
  514. package/dist/runtime-general-protocol.js.map +0 -1
  515. package/dist/runtime-general-workspace.d.ts +0 -17
  516. package/dist/runtime-general-workspace.js +0 -213
  517. package/dist/runtime-general-workspace.js.map +0 -1
  518. package/dist/runtime-pane-assets.d.ts +0 -17
  519. package/dist/runtime-pane-assets.js +0 -23
  520. package/dist/runtime-pane-assets.js.map +0 -1
  521. package/dist/runtime-pane-boot.d.ts +0 -9
  522. package/dist/runtime-pane-boot.js +0 -47
  523. package/dist/runtime-pane-boot.js.map +0 -1
  524. package/dist/runtime-pane-codex-index.d.ts +0 -1
  525. package/dist/runtime-pane-codex-index.js +0 -47
  526. package/dist/runtime-pane-codex-index.js.map +0 -1
  527. package/dist/runtime-pane-config.d.ts +0 -16
  528. package/dist/runtime-pane-config.js +0 -54
  529. package/dist/runtime-pane-config.js.map +0 -1
  530. package/dist/runtime-pane-host.d.ts +0 -44
  531. package/dist/runtime-pane-host.js +0 -424
  532. package/dist/runtime-pane-host.js.map +0 -1
  533. package/dist/runtime-pane-job-owner.d.ts +0 -1
  534. package/dist/runtime-pane-job-owner.js +0 -29
  535. package/dist/runtime-pane-job-owner.js.map +0 -1
  536. package/dist/runtime-pane-job.ps1 +0 -116
  537. package/dist/runtime-pane-link.d.ts +0 -40
  538. package/dist/runtime-pane-link.js +0 -246
  539. package/dist/runtime-pane-link.js.map +0 -1
  540. package/dist/runtime-pane-mcp-protocol.d.ts +0 -32
  541. package/dist/runtime-pane-mcp-protocol.js +0 -39
  542. package/dist/runtime-pane-mcp-protocol.js.map +0 -1
  543. package/dist/runtime-pane-mcp-relay.d.ts +0 -17
  544. package/dist/runtime-pane-mcp-relay.js +0 -70
  545. package/dist/runtime-pane-mcp-relay.js.map +0 -1
  546. package/dist/runtime-pane-mcp.d.ts +0 -51
  547. package/dist/runtime-pane-mcp.js +0 -150
  548. package/dist/runtime-pane-mcp.js.map +0 -1
  549. package/dist/runtime-pane-native.d.ts +0 -45
  550. package/dist/runtime-pane-native.js +0 -65
  551. package/dist/runtime-pane-native.js.map +0 -1
  552. package/dist/runtime-pane-output.d.ts +0 -19
  553. package/dist/runtime-pane-output.js +0 -53
  554. package/dist/runtime-pane-output.js.map +0 -1
  555. package/dist/runtime-pane-port.d.ts +0 -139
  556. package/dist/runtime-pane-port.js +0 -558
  557. package/dist/runtime-pane-port.js.map +0 -1
  558. package/dist/runtime-pane-private.d.ts +0 -14
  559. package/dist/runtime-pane-private.js +0 -51
  560. package/dist/runtime-pane-private.js.map +0 -1
  561. package/dist/runtime-pane-private.ps1 +0 -14
  562. package/dist/runtime-pane-process.d.ts +0 -4
  563. package/dist/runtime-pane-process.js +0 -108
  564. package/dist/runtime-pane-process.js.map +0 -1
  565. package/dist/runtime-pane-protocol.d.ts +0 -172
  566. package/dist/runtime-pane-protocol.js +0 -195
  567. package/dist/runtime-pane-protocol.js.map +0 -1
  568. package/dist/runtime-pane-screen.d.ts +0 -19
  569. package/dist/runtime-pane-screen.js +0 -76
  570. package/dist/runtime-pane-screen.js.map +0 -1
  571. package/dist/runtime-pane-service.d.ts +0 -11
  572. package/dist/runtime-pane-service.js +0 -221
  573. package/dist/runtime-pane-service.js.map +0 -1
  574. package/dist/runtime-pane-stdio-protocol.d.ts +0 -54
  575. package/dist/runtime-pane-stdio-protocol.js +0 -94
  576. package/dist/runtime-pane-stdio-protocol.js.map +0 -1
  577. package/dist/runtime-pane-stdio.d.ts +0 -3
  578. package/dist/runtime-pane-stdio.js +0 -123
  579. package/dist/runtime-pane-stdio.js.map +0 -1
  580. package/dist/runtime-pane-store.d.ts +0 -33
  581. package/dist/runtime-pane-store.js +0 -164
  582. package/dist/runtime-pane-store.js.map +0 -1
  583. package/dist/runtime-pane-transcript-protocol.d.ts +0 -43
  584. package/dist/runtime-pane-transcript-protocol.js +0 -58
  585. package/dist/runtime-pane-transcript-protocol.js.map +0 -1
  586. package/dist/runtime-pane-transcript.d.ts +0 -45
  587. package/dist/runtime-pane-transcript.js +0 -605
  588. package/dist/runtime-pane-transcript.js.map +0 -1
  589. package/dist/runtime-pane-worker.d.ts +0 -1
  590. package/dist/runtime-pane-worker.js +0 -154
  591. package/dist/runtime-pane-worker.js.map +0 -1
  592. package/dist/runtime-protocol.d.ts +0 -162
  593. package/dist/runtime-protocol.js +0 -37
  594. package/dist/runtime-protocol.js.map +0 -1
  595. package/dist/runtime-switches.d.ts +0 -79
  596. package/dist/runtime-switches.js +0 -90
  597. package/dist/runtime-switches.js.map +0 -1
  598. package/dist/runtime-transcript-delta-reader.d.ts +0 -23
  599. package/dist/runtime-transcript-delta-reader.js +0 -74
  600. package/dist/runtime-transcript-delta-reader.js.map +0 -1
  601. package/dist/runtime-transcript-source.d.ts +0 -36
  602. package/dist/runtime-transcript-source.js +0 -189
  603. package/dist/runtime-transcript-source.js.map +0 -1
  604. package/dist/runtime-windows-bridge.d.ts +0 -41
  605. package/dist/runtime-windows-bridge.js +0 -157
  606. package/dist/runtime-windows-bridge.js.map +0 -1
  607. package/dist/settings-route-lifetime.d.ts +0 -14
  608. package/dist/settings-route-lifetime.js +0 -48
  609. package/dist/settings-route-lifetime.js.map +0 -1
  610. package/dist/tmux-pane-host.d.ts +0 -26
  611. package/dist/tmux-pane-host.js +0 -25
  612. package/dist/tmux-pane-host.js.map +0 -1
  613. package/dist/transcript-needles.d.ts +0 -35
  614. package/dist/transcript-needles.js +0 -158
  615. package/dist/transcript-needles.js.map +0 -1
  616. package/dist/transcript-records.d.ts +0 -21
  617. package/dist/transcript-records.js +0 -140
  618. package/dist/transcript-records.js.map +0 -1
  619. package/dist/ui/agent-proposals.js +0 -90
  620. package/dist/ui/agent-runtime-settings.js +0 -67
  621. package/dist/ui/agent-runtime.js +0 -124
  622. package/dist/ui/cli-picker.js +0 -42
  623. package/dist/ui/general-location.js +0 -71
  624. package/dist/ui/native-instance-settings.js +0 -44
  625. package/dist/ui/native-pane-recovery.js +0 -45
  626. package/dist/ui/panel-runtimes.js +0 -334
  627. package/dist/ui/panel-windows-agent.js +0 -86
  628. package/dist/ui/panel-windows-cli.js +0 -179
  629. package/dist/ui/provider-marks.js +0 -83
  630. package/dist/ui/runtime-catalog.js +0 -55
  631. package/dist/ui/settings-agent-filters.js +0 -94
  632. package/dist/ui/settings-layout.js +0 -245
  633. package/dist/ui/settings-outside.js +0 -176
  634. package/dist/ui/settings-shortcuts.js +0 -65
  635. package/dist/ui/shared/machine-name.js +0 -13
  636. package/dist/ui/shared/qrcode.module.js +0 -2237
  637. package/dist/ui/shared/settings-width.js +0 -31
  638. package/dist/ui/shared/vendor/qrcode-generator.LICENSE +0 -27
  639. package/dist/ui/windows-agents-nav.js +0 -2
  640. package/dist/ui/windows-cli-catalog.js +0 -108
  641. package/dist/web-remote-access.d.ts +0 -152
  642. package/dist/web-remote-access.js +0 -368
  643. package/dist/web-remote-access.js.map +0 -1
  644. package/dist/windows-agents.d.ts +0 -126
  645. package/dist/windows-agents.js +0 -490
  646. package/dist/windows-agents.js.map +0 -1
  647. package/dist/windows-cli-api.d.ts +0 -23
  648. package/dist/windows-cli-api.js +0 -159
  649. package/dist/windows-cli-api.js.map +0 -1
  650. package/dist/windows-cli-providers.d.ts +0 -115
  651. package/dist/windows-cli-providers.js +0 -429
  652. package/dist/windows-cli-providers.js.map +0 -1
  653. package/dist/windows-cli-worker.d.ts +0 -59
  654. package/dist/windows-cli-worker.js +0 -479
  655. package/dist/windows-cli-worker.js.map +0 -1
  656. package/dist/windows-cli.d.ts +0 -116
  657. package/dist/windows-cli.js +0 -407
  658. package/dist/windows-cli.js.map +0 -1
  659. package/dist/windows-native-mcp.d.ts +0 -19
  660. package/dist/windows-native-mcp.js +0 -143
  661. package/dist/windows-native-mcp.js.map +0 -1
  662. package/dist/windows-pane-mcp.d.ts +0 -26
  663. package/dist/windows-pane-mcp.js +0 -187
  664. package/dist/windows-pane-mcp.js.map +0 -1
  665. package/templates/runtime-assets/conpty-LICENSE +0 -21
  666. package/templates/runtime-assets/conpty-NOTICE.md +0 -503
  667. package/templates/runtime-assets/local-pane-stage.ps1 +0 -101
  668. package/templates/runtime-assets/runtime-pane-job.ps1 +0 -116
  669. package/templates/runtime-assets/runtime-pane-private.ps1 +0 -14
  670. package/templates/runtime-assets/xterm-LICENSE +0 -21
@@ -1,124 +0,0 @@
1
- import { html, useEffect, useRef, useState } from "/assets/app-html.js";
2
- import { register, t } from "/assets/app-i18n.js";
3
- import { useLease } from "/assets/app-ctx.js";
4
- import { Icon } from "/assets/ui-icons.js";
5
- import { runtimeCliChoices } from "./runtime-catalog.js";
6
-
7
- register("runtime", {
8
- "zh-TW": { title:"新增 Agent", choose:"1. 選擇 Runtime", wsl:"WSL / Linux", windows:"Windows 本機", wslHint:"使用 Linux CLI 與工作目錄", windowsHint:"使用 Windows 工具與本機登入", disabled:"需要先啟用 Windows CLI", configure:"2. 設定 Agent", backend:"CLI", directory:"工作目錄(選填)", nativeHint:"建立 Windows Codex Agent,保留獨立對話。Claude Code 目前僅支援偵測。", model:"使用 Windows Codex 的預設模型", access:"檔案存取", read:"唯讀", write:"工作目錄可寫入", required:"請填入 Agent 名稱,工作目錄可以留空。", created:"Windows Agent 已建立", assist:"讓 AI 幫我填寫", assistHint:"由已登入的 Windows Codex 產生草稿,填回下方後可編輯,再按「建立」。", noAi:"需要先有可用的 AI:請在設定 → Windows CLI 確認 Codex 已登入。", goal:"描述想建立的 Agent", placeholder:"例如:建立一個協助整理資料、回答問題的助手", generate:"產生設定草稿", generating:"AI 正在產生草稿…", cancel:"取消產生", draftError:"AI 沒有回傳有效的設定草稿,請調整描述後再試。", nativeBackend:"Codex — Windows", nativeClaude:"Claude Code — Windows(僅偵測)" },
9
- en: { title:"New agent", choose:"1. Choose a runtime", wsl:"WSL / Linux", windows:"Native Windows", wslHint:"Linux CLIs and working directories", windowsHint:"Windows tools and local sign-ins", disabled:"Enable Windows CLI first", configure:"2. Configure the agent", backend:"CLI", directory:"Working directory (optional)", nativeHint:"Creates a Windows Codex agent with its own conversation. Claude Code is detection-only.", model:"Use Windows Codex's default model", access:"File access", read:"Read only", write:"Workspace write", required:"Enter an agent name. The working directory is optional.", created:"Windows agent created", assist:"Let AI fill this in", assistHint:"Uses signed-in Windows Codex to draft these settings. Review or edit them, then press Create.", noAi:"A working AI is needed first: check the Codex sign-in under Settings → Windows CLI.", goal:"Describe the agent you want", placeholder:"For example: an assistant that organizes information and answers questions", generate:"Generate settings", generating:"AI is drafting settings…", cancel:"Cancel generation", draftError:"The AI did not return a valid settings draft. Adjust the description and try again.", nativeBackend:"Codex — Windows", nativeClaude:"Claude Code — Windows (detection only)" },
10
- });
11
- export const tr = key => t(`runtime.${key}`);
12
- register("runtime", {
13
- "zh-TW": { nativeHint:"使用所選 Windows CLI 的本機登入,保留獨立對話。只顯示已安裝且支援派工的 CLI。", model:"使用 CLI 預設模型", write:"使用本機 CLI 權限", noReadOnly:"這個 CLI 無法保證唯讀。請選擇本機 CLI 權限後再建立。", nativePolicy:"依照此 CLI 的本機存取與核准設定執行。", nativePolicyClaude:"Claude Code 可以修改這個 Agent 工作目錄內的檔案;工作目錄外的寫入會被封鎖。會修改檔案的 Shell 指令與網路存取需要核准:每則訊息執行的 Agent 沒有核准提示,會被拒絕;常駐終端的 Agent 會在「等你處理」詢問你。唯讀的 Shell 指令(例如列出檔案)會直接執行。", noCli:"沒有可派工的 CLI,請先到 Windows CLI 設定檢查。" },
14
- en: { nativeHint:"Uses the selected Windows CLI's sign-in and keeps its own conversation. Only installed CLIs with task support are listed.", model:"Use the CLI default model", write:"Use native CLI permissions", noReadOnly:"This CLI cannot guarantee read-only access. Choose native CLI permissions to continue.", nativePolicy:"Uses this CLI's local access and approval settings.", nativePolicyClaude:"Claude Code may edit files inside this agent's working directory; writes outside it are blocked. Shell commands that change files and network access need an approval: a once-per-message agent has no prompt, so they are denied; a persistent agent asks you in Needs you. Read-only shell commands (such as listing files) run without asking.", noCli:"No task-capable CLI found. Check Windows CLI settings first." },
15
- });
16
- register("runtime", {
17
- "zh-TW": { progress:"建立 Agent 的進度", runtimeStep:"選擇 Runtime", configureStep:"設定 Agent", doneStep:"完成", where:"這個 Agent 要在哪裡執行?", runtimeLead:"先選擇執行環境與 CLI,下一步再設定 Agent。", environment:"執行環境", configureLead:"填入 Agent 名稱與指示,工作目錄可留空,也可以讓 AI 協助填寫。", changeRuntime:"更換 Runtime", back:"上一步", next:"下一步", finish:"完成", openChat:"開啟對話", viewAgents:"查看 Agent", success:"Agent 已建立", successLead:"設定已儲存,可以開始使用這個 Agent。", autoWorkspace:"由 AgEnD 自動建立工作區" },
18
- en: { progress:"Agent creation progress", runtimeStep:"Choose runtime", configureStep:"Configure agent", doneStep:"Done", where:"Where should this agent run?", runtimeLead:"Choose an environment and CLI. Configure the agent in the next step.", environment:"Environment", configureLead:"Set a name and instructions, or let AI help fill them in. The working directory is optional.", changeRuntime:"Change runtime", back:"Back", next:"Next", finish:"Done", openChat:"Open chat", viewAgents:"View agents", success:"Agent created", successLead:"Your settings are saved. This agent is ready to use.", autoWorkspace:"AgEnD creates a managed workspace" },
19
- });
20
-
21
- register("runtime", {
22
- "zh-TW": { panePolicy:"依照這個 Windows CLI 的權限執行。需要核准的要求會顯示在「需要你」;工作目錄外的存取仍受 CLI 自己的權限限制。",adapter:"執行方式",adapterExec:"每則訊息各自執行(預設)",adapterPane:"持續執行的終端工作階段(Alpha)",paneTopic:"建立後會啟動獨立工作階段;有聊天連線時,也會在第一個已設定連線建立專屬話題。",execTopic:"保留獨立對話,以每則訊息啟動一次 CLI;不建立聊天話題。",loadingClis:"正在載入可用的 CLI…", directoryHint:"留空時,AgEnD 會自動建立獨立工作區", nameHint:"例如:通用助手" },
23
- en: { panePolicy:"Uses this Windows CLI’s permissions. Requests that need approval appear in Needs you; access outside the workspace still follows the CLI’s own policy.",adapter:"Execution",adapterExec:"Run once per message (default)",adapterPane:"Persistent terminal session (alpha)",paneTopic:"Starts a separate resident session and, when chat is configured, creates its own topic on the first configured connection.",execTopic:"Keeps a separate conversation and starts the CLI for each message; no chat topic is created.",loadingClis:"Loading available CLIs…", directoryHint:"Leave empty for a separate workspace created by AgEnD", nameHint:"For example: General assistant" },
24
- });
25
- register("runtime", {
26
- en: { computers:"Connected computers", online:"Online", offline:"Offline", pending:"Awaiting approval", revoked:"Revoked", machineLoading:"Loading connected computers…", machineFailed:"Could not update connected computers. Local choices are still available.", machineRetry:"Refresh computers", noRemoteCli:"This computer has not reported a task-capable CLI.", remoteDirectory:"Working directory on {0} (optional)", remoteDraft:"AI-assisted setup is currently available for the local runtime. You can enter this remote agent's settings below.", machine:"Computer", inventoryAt:"CLI inventory updated: {0}", remotePolicy:"Files and CLI permissions belong to the selected computer. Sign-ins remain on that computer.", manage:"Connect or manage computers in Settings → Runtime", noAvailableMachine:"Connect and approve a computer in Settings → Runtime to use its CLIs." },
27
- "zh-TW": { computers:"已連接的電腦", online:"在線", offline:"離線", pending:"等待核准", revoked:"已撤銷", machineLoading:"正在載入已連接的電腦…", machineFailed:"無法更新已連接的電腦,仍可使用本機選項。", machineRetry:"更新機器清單", noRemoteCli:"這台電腦尚未回報可派工的 CLI。", remoteDirectory:"{0} 上的工作目錄(選填)", remoteDraft:"AI 協助設定目前適用於本機 Runtime,你可以直接填寫下方遠端 Agent 設定。", machine:"電腦", inventoryAt:"CLI 清單更新:{0}", remotePolicy:"檔案與 CLI 權限屬於所選電腦,登入也保留在該電腦上。", manage:"前往設定 → Runtime 連接或管理電腦", noAvailableMachine:"在設定 → Runtime 連接並核准電腦後,即可使用它的 CLI。" },
28
- });
29
- register("runtime", {
30
- en: { machineOffline:"Offline: run connect-agend.bat on that computer.", machinePending:"Awaiting approval: choose Approve computer in Settings → Runtime.", machineNoInventory:"CLIs not detected yet: choose Refresh CLI inventory for it in Settings → Runtime.", machineNoCli:"No task-capable CLI reported: install one, then choose Refresh CLI inventory in Settings → Runtime.", machineNotReady:"No CLI is signed in and ready: sign in on that computer, then choose Refresh CLI inventory in Settings → Runtime." },
31
- "zh-TW": { machineOffline:"離線:請在那台電腦執行 connect-agend.bat。", machinePending:"等待核准:請到設定 → Runtime 按「核准電腦」。", machineNoInventory:"尚未偵測 CLI:到設定 → Runtime 按該電腦的「更新 CLI 清單」。", machineNoCli:"沒有可派工的 CLI:請先安裝,再到設定 → Runtime 按「更新 CLI 清單」。", machineNotReady:"CLI 尚未登入或只能偵測:請在那台電腦登入,再到設定 → Runtime 按「更新 CLI 清單」。" },
32
- });
33
- register("runtime", {
34
- "zh-TW": {
35
- agendQueries:"AgEnD 工具:唯讀模式可查詢 Agent、任務與派送狀態。",
36
- agendActions:"AgEnD 工具:可用的查詢、訊息、派工與任務操作,依 Agent 的工具權限決定。",
37
- agendUnavailable:"此 CLI 尚未支援呼叫 AgEnD 工具,仍可接收 Fleet 派工。",
38
- },
39
- en: {
40
- agendQueries:"AgEnD tools: read-only mode can query agents, tasks and delivery status.",
41
- agendActions:"AgEnD tools: queries, messaging, delegation and task actions depend on this agent's tool permissions.",
42
- agendUnavailable:"This CLI cannot call AgEnD tools yet. It can still receive Fleet tasks.",
43
- },
44
- });
45
- /** Only advertise the capability confirmed by the installed CLI, not its product name. */
46
- export function NativeAgendToolsHint({ cli, sandbox }) {
47
- const supported = cli?.supports?.mcp;
48
- if (supported !== true && supported !== false) return null;
49
- return html`<p class="note native-agend-tools">${tr(!supported ? "agendUnavailable" : sandbox === "read-only" ? "agendQueries" : "agendActions")}</p>`;
50
- }
51
- /** #2953 story 3 (S-35): with this PC's Windows CLIs switched off, "Native Windows" is not offered at all (paired PCs still are). */
52
- /** Why a connected computer cannot take a new agent yet ("" when it can). Offline, awaiting approval and no usable CLI are deliberate blocks; the picker says which. */
53
- export function machineBlockReason(machine) {
54
- if (machine.status === "pending") return "machinePending";
55
- if (machine.status !== "online") return "machineOffline";
56
- if (!machine.inventory) return "machineNoInventory";
57
- const choices = runtimeCliChoices(machine);
58
- // Same bar as the dialogs' "Next": a computer is usable once one of its task-capable CLIs is runnable.
59
- return !choices.length ? "machineNoCli" : choices.some(cli => cli.runnable === true) ? "" : "machineNotReady";
60
- }
61
- export function RuntimePicker({ value, onChange, windowsEnabled, disabled, machineId = "", machines = [], onMachineChange, onRefresh, loaded = false, legend = tr("choose") }) {
62
- const [refreshing, setRefreshing] = useState(false);
63
- // Only a click on the button disables it, never the 5 s background poll (that would drop keyboard focus).
64
- const refresh = async () => { setRefreshing(true); try { await onRefresh(); } finally { setRefreshing(false); } };
65
- const listed = machines.filter(machine => machine.status !== "revoked");
66
- return html`<fieldset class="agent-runtime-picker" disabled=${disabled}><legend>${legend}</legend><div>${(windowsEnabled ? ["wsl","windows"] : ["wsl"]).map(runtime => html`<label key=${runtime} class=${`agent-runtime-choice${!machineId && value === runtime ? " selected" : ""}`}><input type="radio" name="agent-runtime" value=${runtime} checked=${!machineId && value === runtime} disabled=${runtime === "windows" && !windowsEnabled} onChange=${() => onChange(runtime)} /><${Icon} name=${runtime === "windows" ? "view" : "code"} size=${22} /><span><strong>${tr(runtime)}</strong><small>${tr(runtime === "windows" && !windowsEnabled ? "disabled" : `${runtime}Hint`)}</small></span></label>`)}</div>
67
- ${listed.length || onRefresh ? html`<section class="runtime-remote-targets" aria-label=${tr("computers")}><div class="runtime-remote-heading"><h4>${tr("computers")}</h4>${onRefresh ? html`<button type="button" class="btn btn-ghost btn-sm" disabled=${refreshing} onClick=${refresh}>${tr("machineRetry")}</button>` : null}</div>${listed.map(machine => { const reason = machineBlockReason(machine), status = ["online","offline","pending"].includes(machine.status) ? machine.status : "offline"; return html`<label key=${machine.id} class=${`agent-runtime-choice${machineId === machine.id ? " selected" : ""}${reason ? " blocked" : ""}`}><input type="radio" name="agent-runtime" value=${`machine:${machine.id}`} checked=${machineId === machine.id} disabled=${!!reason} aria-describedby=${reason ? `machine-reason-${machine.id}` : undefined} onChange=${() => onMachineChange?.(machine.id)} /><${Icon} name="view" size=${22} /><span><strong>${machine.name}</strong><small><span class="runtime-machine-platform">${machine.platform || "Windows"} · </span><span class=${`runtime-machine-status is-${status}`}>${tr(status)}</span></small>${reason ? html`<small class="runtime-machine-reason" id=${`machine-reason-${machine.id}`}>${tr(reason)}</small>` : null}</span></label>`; })}${loaded && !listed.length ? html`<p class="note">${tr("noAvailableMachine")}</p>` : null}</section>` : null}
68
- </fieldset>`;
69
- }
70
- export function parseAgentDraft(text, runtime) {
71
- const fenced = [...text.matchAll(/```(?:json)?\s*([\s\S]*?)```/g)].at(-1)?.[1];
72
- const raw = fenced || text.slice(text.indexOf("{"),text.lastIndexOf("}")+1);
73
- const value = JSON.parse(raw);
74
- if (!value || typeof value !== "object" || Array.isArray(value) || !["name","cwd","description","instructions"].every(key => typeof value[key] === "string")
75
- || value.name.length > 64 || value.instructions.length > 8000 || value.description.length > 512 || !value.name.trim()
76
- || !(value.cwd === "" || (runtime === "windows" ? /^[a-z]:[\\/]/i.test(value.cwd) : /^\//.test(value.cwd)))) throw new Error(tr("draftError"));
77
- return value;
78
- }
79
- export function AgentDraftAssistant({ runtime, probe, onDraft, onBusy, initialGoal = "", onGoalChange }) {
80
- const lease = useLease(`agent-draft:${runtime}`);
81
- const [goal,setGoal] = useState(initialGoal), [id,setId] = useState(null), [error,setError] = useState("");
82
- const claimed = useRef(false), taskId = useRef(null), polling = useRef(false);
83
- const ready = probe?.clis?.some(cli => cli.id === "codex" && cli.runnable);
84
- const api = async (path,body) => {
85
- const r = await lease.fetch(path,{credentials:"same-origin",...(body === undefined ? {} : {method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)})});
86
- const value = await r.json();
87
- if (!r.ok) { const e = new Error(value.error || `HTTP ${r.status}`); e.rejected = true; throw e; }
88
- return value;
89
- };
90
- const done = () => { taskId.current = null; claimed.current = false; setId(null); onBusy(false); };
91
- const refresh = async () => {
92
- if (polling.current || !taskId.current) return;
93
- polling.current = true;
94
- try {
95
- const task = await api(`/ui/windows-cli/tasks/${taskId.current}`);
96
- if (!lease.current()) return;
97
- if (["completed","failed","cancelled"].includes(task.status)) {
98
- done();
99
- if (task.status === "completed") { try { onDraft(parseAgentDraft(task.output,runtime)); } catch { setError(tr("draftError")); } }
100
- else if (task.error) setError(task.error);
101
- }
102
- } catch(e) { if (lease.current()) setError(e.message); }
103
- finally { polling.current = false; }
104
- };
105
- useEffect(() => {
106
- if (!id) return;
107
- void refresh();
108
- const timer = lease.interval(refresh,1000);
109
- return () => lease.clear(timer);
110
- },[lease,id]);
111
- useEffect(() => () => {
112
- if (taskId.current) void fetch(`/ui/windows-cli/tasks/${taskId.current}/cancel`,{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json"},body:"{}"}).catch(() => {});
113
- },[lease]);
114
- const generate = async () => {
115
- if (claimed.current || !ready || !goal.trim()) return;
116
- claimed.current = true; onBusy(true); setError("");
117
- const requestId = taskId.current = crypto.randomUUID();
118
- const prompt = `Draft configuration for a new AgEnD agent. Runtime: ${runtime}. This is configuration drafting only. Do not use tools, run commands, read files or create the agent. Return only a JSON object with string keys name, cwd, description, instructions. Use an absolute ${runtime === "windows" ? "Windows drive" : "Linux"} path provided by the user; do not invent a project path. If no path was given use an empty string for cwd (AgEnD will create a managed workspace). Name at most 64 characters, description at most 512, instructions at most 8000. Use the user's language. User request:\n${goal}`;
119
- try { await api("/ui/windows-cli/tasks",{requestId,cli:"codex",cwd:probe.home,prompt,sandbox:"read-only"}); if (lease.current()) setId(requestId); }
120
- catch(e) { if (lease.current()) { setError(e.message); if (e.rejected) done(); else setId(requestId); } }
121
- };
122
- const cancel = async () => { try { await api(`/ui/windows-cli/tasks/${taskId.current}/cancel`,{}); if (lease.current()) await refresh(); } catch(e) { if (lease.current()) setError(e.message); } };
123
- return html`<details class="agent-draft-assistant"><summary><${Icon} name="wand" size=${16} />${tr("assist")}</summary><p class="note">${tr(ready ? "assistHint" : "noAi")}</p><label class="field"><span>${tr("goal")}</span><textarea rows="2" maxLength=${2000} value=${goal} disabled=${!!id || claimed.current} placeholder=${tr("placeholder")} onInput=${e => { setGoal(e.target.value); onGoalChange?.(e.target.value); }} /></label>${error ? html`<p class="error" role="alert">${error}</p>` : null}<button type="button" class="btn btn-sm" disabled=${!ready || !goal.trim() || claimed.current} onClick=${generate}><${Icon} name="wand" size=${14} />${tr(id ? "generating" : "generate")}</button>${id ? html`<button type="button" class="btn btn-ghost btn-sm" onClick=${cancel}>${tr("cancel")}</button>` : null}</details>`;
124
- }
@@ -1,42 +0,0 @@
1
- // Product identity for CLI selectors. Callers own availability filtering and display labels.
2
- import { html } from "/assets/app-html.js";
3
- import { Icon } from "/assets/ui-icons.js";
4
- import { Menu } from "/assets/ui-menu.js";
5
- import { ProviderMark } from "./provider-marks.js";
6
-
7
- const PRODUCTS = {
8
- "claude-code": { label: "Claude Code", mark: "claude" },
9
- claude: { label: "Claude Code", mark: "claude" },
10
- codex: { label: "Codex", mark: "openai" },
11
- antigravity: { label: "Antigravity", mark: "antigravity" },
12
- grok: { label: "Grok", mark: "grok" },
13
- "kiro-cli": { label: "Kiro", mark: "kiro" },
14
- kiro: { label: "Kiro", mark: "kiro" },
15
- opencode: { label: "OpenCode", mark: "opencode" },
16
- muse: { label: "Muse", mark: "muse" },
17
- };
18
-
19
- export function cliLabel(id) { return PRODUCTS[id]?.label || id || ""; }
20
-
21
- export function CliProductMark({ id, size = 20 }) {
22
- const mark = PRODUCTS[id]?.mark;
23
- return html`<span class="cli-product-mark" data-cli=${id || "default"} aria-hidden="true">${mark
24
- ? html`<${ProviderMark} provider=${mark} size=${size} />`
25
- : html`<${Icon} name="code" size=${size} />`}</span>`;
26
- }
27
-
28
- /** choices: [{ value, label, disabled?, description? }]; value is a controlled CLI id or the empty fleet default. */
29
- export function CliPicker({ value = "", onChange, choices = [], label, disabled = false }) {
30
- const selected = choices.find(choice => choice.value === value);
31
- const selectedLabel = selected?.label ?? cliLabel(value);
32
- const accessibleLabel = label ? `${label}: ${selectedLabel}` : selectedLabel;
33
- const trigger = html`<${CliProductMark} id=${value} /><span class="cli-picker-value">${selectedLabel}</span><span class="cli-picker-chevron"><${Icon} name="chevron" size=${16} /></span>`;
34
- const items = choices.map(choice => ({
35
- key: choice.value,
36
- checked: choice.value === value,
37
- disabled: !!choice.disabled,
38
- label: html`<span class="cli-picker-option"><${CliProductMark} id=${choice.value} /><span class="cli-picker-copy"><span class="cli-picker-name">${choice.label}</span>${choice.description ? html`<small class="cli-picker-description">${choice.description}</small>` : null}</span></span>`,
39
- onSelect: () => onChange?.(choice.value),
40
- }));
41
- return html`<${Menu} items=${items} label=${accessibleLabel} trigger=${trigger} triggerClass="cli-picker-trigger" cls="cli-picker" disabled=${disabled} fit=${true} />`;
42
- }
@@ -1,71 +0,0 @@
1
- // The location is a separate revision-bound Settings operation, never an agent-config patch.
2
- import { html, useEffect, useRef, useState } from "/assets/app-html.js";
3
- import { t, register } from "/assets/app-i18n.js";
4
- import { appStore, useStore, guestPage } from "/assets/app-store.js";
5
- import { useLease } from "/assets/app-ctx.js";
6
- import { toast } from "/assets/ui-toast.js";
7
- import { confirmedWrite, newKey } from "./settings-confirm.js";
8
- import { ModelSelect } from "./settings-dialogs.js";
9
- register("generalLocation", {
10
- en: {
11
- label: "Run General on", host: "This AgEnD host", windows: "Paired Windows PC",
12
- offline: "General’s Windows PC is offline. AgEnD is still running here. Reconnect that PC, or switch General back to this host in Settings. Pending or uncertain requests will not be sent again automatically.",
13
- exit: "General was not switched: the previous process has not been confirmed stopped. Reconnect its PC or use the existing stopped-process recovery, then try again. No replacement was started.",
14
- start: "General’s location was saved, but it could not start. Check Needs you and choose Start or switch back. Its previous conversation is kept; no input was replayed.",
15
- history: "Host and Windows conversations stay separate. Switching does not copy or merge their history.",
16
- },
17
- "zh-TW": {
18
- label: "General 執行位置", host: "這台 AgEnD 主機", windows: "已配對的 Windows 電腦",
19
- offline: "General 所在的 Windows 電腦已離線。AgEnD 仍在這台主機運作。請重新連線那台電腦,或到設定把 General 切回這台主機。待處理或結果不明的請求不會自動重送。",
20
- exit: "General 尚未切換:還無法確認前一個程序已停止。請重新連線那台電腦,或完成現有的程序停止復原,再重試。沒有啟動替代程序。",
21
- start: "General 的執行位置已儲存,但未能啟動。請查看「等你處理」,選擇啟動或切回原位置。先前的對話已保留,沒有重送輸入。",
22
- history: "主機與 Windows 各自保留對話,切換時不會複製或合併對話紀錄。",
23
- },
24
- });
25
- const tr = key => t(`generalLocation.${key}`);
26
- export function GeneralLocation({ name, attentionOnly = false }) {
27
- const app = useStore(appStore);
28
- const attentionKey = JSON.stringify((app.needs || []).filter(item => item.generalLocation && (!name || item.instance === name)).map(item => item.id));
29
- const lease = useLease("general-location"), [data, setData] = useState(null), [error, setError] = useState(null);
30
- const read = async () => {
31
- try { const response = await lease.fetch("/api/settings/general-location"); const result = await response.json();
32
- if (lease.current()) { if (response.ok) { setData(result); setError(null); } else setError(result.error); }
33
- } catch (err) { if (lease.current()) setError(err.message); }
34
- };
35
- useEffect(() => { if (!guestPage()) void read(); }, [name, attentionKey]);
36
- if (guestPage()) return null;
37
- return html`<section id="general-location" class="card general-location"><h2>${tr("label")}</h2>
38
- ${error ? html`<p role="alert">${error}</p>` : null}
39
- ${(data?.generals || []).filter(row => !name || row.name === name).map(row => html`<${LocationRow} key=${row.name + row.revision} row=${row} machines=${data.machines || []} attentionOnly=${attentionOnly} refresh=${read} />`)}
40
- ${!attentionOnly ? html`<button type="button" class="btn btn-sm" onClick=${read}>${t("settings.refresh")}</button>` : null}
41
- </section>`;
42
- }
43
- function LocationRow({ row, machines, attentionOnly, refresh }) {
44
- const [target, setTarget] = useState("host"), [cli, setCli] = useState("claude-code"), [model, setModel] = useState("");
45
- const [busy, setBusy] = useState(false), flight = useRef(false);
46
- const lease = useLease("general-location-row");
47
- const machine = machines.find(item => item.id === target);
48
- // The rendered revision stays with this click. Never re-read and silently retry a stale proposal.
49
- const propose = async next => {
50
- if (flight.current || !lease.current()) return; flight.current = true; setBusy(true);
51
- try { const result = await confirmedWrite("/api/settings/general-location", { body: { name: row.name, revision: row.revision, target: next }, key: newKey("general"), label: tr("label") });
52
- if (lease.current()) { toast(result.body?.message || result.body?.error || t(result.ok ? "app.saved" : "app.failed"), result.ok); await refresh(); }
53
- } catch (err) { if (lease.current()) toast(err.message, false); }
54
- finally { flight.current = false; if (lease.current()) setBusy(false); }
55
- };
56
- if (attentionOnly && !row.offline && !row.hold) return null;
57
- return html`<div class="general-location-row" data-general=${row.name}>
58
- <strong>${row.displayName}</strong><p>${row.location === "host" ? tr("host") : `${machines.find(item => item.id === row.machineId)?.name || tr("windows")} · ${row.cli}`}</p>
59
- ${row.offline || row.hold ? html`<p role="alert">${tr(row.hold || "offline")}</p>` : null}
60
- <p class="note">${tr("history")}</p>
61
- ${row.canSwitchBack ? html`<button type="button" class="btn" disabled=${busy || row.switching} onClick=${() => propose({ location: "host" })}>${tr("host")}</button>` : null}
62
- ${row.hold === "start" ? html`<button type="button" class="btn" disabled=${busy || row.switching} onClick=${() => propose(row.retryTarget || (row.location === "host" ? { location: "host" } : { location: "windows", machineId: row.machineId, cli: row.cli, model: row.model }))}>${t("chat.start")}</button>` : null}
63
- ${!attentionOnly ? html`<label>${tr("label")}<select value=${target} disabled=${busy || row.switching} onChange=${e => { setTarget(e.target.value); setModel(""); }}>
64
- <option value="host">${tr("host")}</option>${machines.map(item => html`<option value=${item.id} disabled=${!item.online}>${item.name}</option>`)}
65
- </select></label>
66
- ${target !== "host" ? html`<label>${t("settings.backend")}<select value=${cli} onChange=${e => { setCli(e.target.value); setModel(""); }}>
67
- ${["claude-code", "codex"].map(id => html`<option value=${id} disabled=${!machine?.clis.some(item => item.id === id)}>${id}</option>`)}
68
- </select></label><${ModelSelect} value=${model} onChange=${setModel} backend=${cli} runtime="windows" machineId=${target} instance=${row.name} />` : null}
69
- <button type="button" class="btn btn-primary" disabled=${busy || row.switching || target === "host" && !row.canSwitchBack || target !== "host" && (!machine?.online || !machine.clis.some(item => item.id === cli))} onClick=${() => propose(target === "host" ? { location: "host" } : { location: "windows", machineId: target, cli, model })}>${t("settings.save")}</button>` : null}
70
- </div>`;
71
- }
@@ -1,44 +0,0 @@
1
- // Windows uses the same staged instance settings flow, with its runtime's supported fields.
2
- import { html, useState } from "/assets/app-html.js";
3
- import { t } from "/assets/app-i18n.js";
4
- import { Dialog } from "/assets/ui-dialog.js";
5
- import { ChipList, ModelSelect } from "./settings-dialogs.js";
6
- import { useWindowsCliCatalog } from "./windows-cli-catalog.js";
7
- import { useRuntimeCatalog, instanceMachineId } from "./runtime-catalog.js";
8
- import { NativeAgendToolsHint, tr } from "./agent-runtime.js";
9
- import {AgentRuntimeSettings} from "./agent-runtime-settings.js";
10
- const tn = key => t(`settings.${key}`);
11
- export function NativeInstanceSettings({ name, inst, ctx, onClose }) {
12
- const machineId = instanceMachineId(inst);
13
- const catalog = useWindowsCliCatalog(!machineId), machines = useRuntimeCatalog(!!machineId);
14
- const machine = machines.data?.machines?.find(item => item.id === machineId);
15
- const native = (machineId ? machine?.inventory : catalog.data)?.clis?.find(cli => cli.id === inst.backend);
16
- const [form,setForm] = useState(() => ({display_name:inst.display_name || name,description:inst.description || "",model:inst.model || "",systemPrompt:inst.systemPrompt || "",native_sandbox:inst.native_sandbox || "read-only",tags:Array.isArray(inst.tags) ? [...inst.tags] : []}));
17
- const set = key => value => setForm(current => ({...current,[key]:value}));
18
- const dirty=Object.entries(form).some(([key,value])=>JSON.stringify(typeof value==="string"?value.trim():value)!==JSON.stringify(key==="display_name"?inst.display_name||name:key==="native_sandbox"?inst.native_sandbox||"read-only":key==="tags"?inst.tags||[]:inst[key]||""));
19
- const ready = !!form.display_name.trim() && !(form.native_sandbox === "read-only" && native?.readOnlySupport === false);
20
- const stage = () => {
21
- if (!ready) return;
22
- const patch = {};
23
- for (const [key,value] of Object.entries(form)) {
24
- const before = key === "display_name" ? inst.display_name || name : key === "native_sandbox" ? inst.native_sandbox || "read-only" : key === "tags" ? inst.tags || [] : inst[key] || "";
25
- const next = typeof value === "string" ? value.trim() : value;
26
- if (JSON.stringify(next) !== JSON.stringify(before)) patch[key] = next;
27
- }
28
- if (Object.keys(patch).length) ctx.stageAgent(name,inst,patch);
29
- onClose();
30
- };
31
- return html`<${Dialog} title=${ctx.shortName(name,inst)} onClose=${onClose} wide=${true} drawer=${true} actions=${html`<button type="button" class="btn" onClick=${onClose}>${tn("cancel")}</button><button type="button" class="btn btn-primary" disabled=${!ready} onClick=${stage}>${tn("modalDone")}</button>`}>
32
- <div class="form native-instance-settings"><${AgentRuntimeSettings} name=${name} inst=${{...inst,machine_name:machine?.name||inst.machine_name,machine_status:machine?.status||inst.machine_status,machine_missing:!!machineId&&!!machines.data&&machines.data.enabled!==false&&!machine}} disabled=${dirty||ctx.staged?.size>0} onChanged=${()=>{ctx.reload();onClose();}}/>
33
- <label class="field"><span>${tn("displayName")}</span><input value=${form.display_name} maxLength=${64} onInput=${event => set("display_name")(event.target.value)} /></label>
34
- <label class="field"><span>${tn("description")}</span><input value=${form.description} maxLength=${512} onInput=${event => set("description")(event.target.value)} /></label>
35
- <div class="field"><label for="native-instance-model">${tn("model")}</label><${ModelSelect} id="native-instance-model" value=${form.model} onChange=${set("model")} backend=${inst.backend} instance=${name} runtime="windows" machineId=${machineId} inherit=${tr("model")} /></div>
36
- <label class="field"><span>${tn("workingDir")}</span><input value=${inst.working_directory || ""} readOnly=${true} aria-readonly="true" /><small>${t("nativeInstance.workspace")}</small></label>
37
- <label class="field"><span>${tr("access")}</span><select value=${form.native_sandbox} onChange=${event => set("native_sandbox")(event.target.value)}><option value="read-only" disabled=${native?.readOnlySupport === false}>${tr("read")}</option><option value="workspace-write">${tr("write")}</option></select></label>
38
- <${NativeAgendToolsHint} cli=${native} sandbox=${form.native_sandbox} />
39
- ${!ready && form.native_sandbox === "read-only" && native?.readOnlySupport === false ? html`<p class="note">${tr("noReadOnly")}</p>` : null}
40
- <label class="field"><span>${tn("systemPrompt")}</span><textarea rows="5" maxLength=${8000} value=${form.systemPrompt} onInput=${event => set("systemPrompt")(event.target.value)} /></label>
41
- <div class="field"><span>${tn("tags")}</span><${ChipList} items=${form.tags} onChange=${set("tags")} placeholder=${tn("tagPlaceholder")} label=${tn("tags")} /></div>
42
- </div>
43
- </${Dialog}>`;
44
- }
@@ -1,45 +0,0 @@
1
- /** Retained-pane recovery uses an explicit admin attestation; it never resubmits a chat message. */
2
- import { html, useEffect, useRef, useState } from "/assets/app-html.js";
3
- import { t } from "/assets/app-i18n.js";
4
- import { guestPage } from "/assets/app-store.js";
5
- import { Dialog } from "/assets/ui-dialog.js";
6
- import { toast } from "/assets/ui-toast.js";
7
- import "./chat-strings.js";
8
- export function NativePaneRecovery({ name, inst, lease }) {
9
- const [dialog, setDialog] = useState(false), [checked, setChecked] = useState(false), [busy, setBusy] = useState(false);
10
- const confirmation = useRef(null), inFlight = useRef(false), recovery = inst.native_recovery;
11
- const latest = useRef(null); latest.current = {name,recovery};
12
- useEffect(() => { confirmation.current=null; setDialog(false); setChecked(false); }, [recovery?.launchId, recovery?.sessionId, recovery?.kind]);
13
- const act = async (path, body) => {
14
- if (inFlight.current || !lease.current()) return;
15
- inFlight.current = true; setBusy(true);
16
- try {
17
- const response = await lease.fetch(path, { method: "POST", headers: { "Content-Type": "application/json" }, ...(body ? { body: JSON.stringify(body) } : {}) });
18
- const result = await response.json();
19
- if (!lease.current()) return;
20
- if (!response.ok || result.error) toast(result.error || t("chat.disconnected"), false);
21
- else { setDialog(false); setChecked(false); }
22
- } catch (error) { if (lease.current()) toast(error.message || t("chat.disconnected"), false); }
23
- finally { inFlight.current = false; if (lease.current()) setBusy(false); }
24
- };
25
- if (guestPage() || inst.native_adapter !== "pane") return null;
26
- if (!recovery) return !inst.general_topic && ["stopped", "crashed"].includes(inst.status)
27
- ? html`<div class="windows-agent-blocked"><button type="button" class="btn" disabled=${busy} onClick=${() => act(`/ui/start/${encodeURIComponent(name)}`)}>${t("chat.start")}</button></div>` : null;
28
- if (recovery.kind === "session-unconfirmed") return html`<div class="windows-agent-blocked" role="alert">
29
- <p>${t(recovery.provider === "codex" ? "chat.paneCodexSessionUnconfirmed" : "chat.paneSessionUnconfirmed")}</p>
30
- <button type="button" class="btn" disabled=${busy || !recovery.launchId} onClick=${() => { confirmation.current = {name,launchId:recovery.launchId,sessionId:recovery.sessionId??null}; setDialog(true); }}>${t("chat.paneNewConversation")}</button>
31
- ${dialog ? html`<${Dialog} title=${t("chat.paneNewConversation")} onClose=${() => { if (!busy) setDialog(false); }}>
32
- <p>${t("chat.paneNewConversationConfirm",inst.display_name || name)}</p>
33
- <button type="button" class="btn" disabled=${busy || confirmation.current?.name !== name || confirmation.current?.launchId !== recovery.launchId || confirmation.current?.sessionId !== (recovery.sessionId??null)} onClick=${() => { const target=confirmation.current, now=latest.current; if(target?.name===now.name && target.launchId===now.recovery?.launchId && target.sessionId===(now.recovery?.sessionId??null)) act(`/ui/instances/${encodeURIComponent(name)}/new-conversation`,{confirmedNewConversation:true,launchId:target.launchId,sessionId:target.sessionId}); }}>${t("chat.paneNewConversation")}</button>
34
- </${Dialog}>` : null}
35
- </div>`;
36
- return html`<div class="windows-agent-blocked" role="alert"><p>${t(recovery.kind === "host-upgrade" ? "chat.paneHostUpgrade" : "chat.paneRecoveryNeeded")}</p>
37
- ${recovery.kind === "host-upgrade" ? html`<button type="button" class="btn" disabled=${busy} onClick=${() => act(`/ui/stop/${encodeURIComponent(name)}`)}>${t("chat.stopInstance")}</button>` : recovery.launchId ? html`<button type="button" class="btn" disabled=${busy} onClick=${() => { confirmation.current = {name,launchId:recovery.launchId}; setChecked(false); setDialog(true); }}>${t("chat.paneRecover")}</button>` : null}
38
- <button type="button" class="btn" disabled=${busy} onClick=${() => act(`/ui/start/${encodeURIComponent(name)}`)}>${t("chat.start")}</button>
39
- ${dialog ? html`<${Dialog} title=${t("chat.paneRecover")} onClose=${() => { if (!busy) setDialog(false); }}>
40
- <p>${t("chat.paneRecoverConfirm", inst.display_name || name)}</p>
41
- <label><input type="checkbox" checked=${checked} disabled=${busy} onChange=${event => setChecked(event.target.checked)} />${t("chat.paneProcessesStopped")}</label>
42
- <button type="button" class="btn" disabled=${!checked || busy || confirmation.current?.name !== name || confirmation.current?.launchId !== recovery.launchId} onClick=${() => { if (checked && confirmation.current?.name === name && confirmation.current?.launchId === recovery.launchId) act(`/ui/instances/${encodeURIComponent(name)}/recover-pane`, { confirmedStopped: true, launchId: confirmation.current.launchId }); }}>${t("chat.paneRecoverConfirmed")}</button>
43
- </${Dialog}>` : null}
44
- </div>`;
45
- }