openryoko 2026.10.8 → 2026.10.13

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 (691) hide show
  1. package/dist/bin/jimmy.js +51 -1
  2. package/dist/bin/jimmy.js.map +1 -1
  3. package/dist/package.json +2 -1
  4. package/dist/src/backup/archive.d.ts +65 -0
  5. package/dist/src/backup/archive.d.ts.map +1 -0
  6. package/dist/src/backup/archive.js +214 -0
  7. package/dist/src/backup/archive.js.map +1 -0
  8. package/dist/src/backup/catalog.d.ts +64 -0
  9. package/dist/src/backup/catalog.d.ts.map +1 -0
  10. package/dist/src/backup/catalog.js +252 -0
  11. package/dist/src/backup/catalog.js.map +1 -0
  12. package/dist/src/backup/database-restore.d.ts +63 -0
  13. package/dist/src/backup/database-restore.d.ts.map +1 -0
  14. package/dist/src/backup/database-restore.js +236 -0
  15. package/dist/src/backup/database-restore.js.map +1 -0
  16. package/dist/src/backup/database-source.d.ts +70 -0
  17. package/dist/src/backup/database-source.d.ts.map +1 -0
  18. package/dist/src/backup/database-source.js +70 -0
  19. package/dist/src/backup/database-source.js.map +1 -0
  20. package/dist/src/backup/format.d.ts +4 -0
  21. package/dist/src/backup/format.d.ts.map +1 -0
  22. package/dist/src/backup/format.js +15 -0
  23. package/dist/src/backup/format.js.map +1 -0
  24. package/dist/src/backup/gateway-liveness.d.ts +44 -0
  25. package/dist/src/backup/gateway-liveness.d.ts.map +1 -0
  26. package/dist/src/backup/gateway-liveness.js +120 -0
  27. package/dist/src/backup/gateway-liveness.js.map +1 -0
  28. package/dist/src/backup/inspect.d.ts +45 -0
  29. package/dist/src/backup/inspect.d.ts.map +1 -0
  30. package/dist/src/backup/inspect.js +291 -0
  31. package/dist/src/backup/inspect.js.map +1 -0
  32. package/dist/src/backup/layout.d.ts +11 -0
  33. package/dist/src/backup/layout.d.ts.map +1 -0
  34. package/dist/src/backup/layout.js +16 -0
  35. package/dist/src/backup/layout.js.map +1 -0
  36. package/dist/src/backup/limits.d.ts +54 -0
  37. package/dist/src/backup/limits.d.ts.map +1 -0
  38. package/dist/src/backup/limits.js +59 -0
  39. package/dist/src/backup/limits.js.map +1 -0
  40. package/dist/src/backup/manifest.d.ts +45 -0
  41. package/dist/src/backup/manifest.d.ts.map +1 -0
  42. package/dist/src/backup/manifest.js +77 -0
  43. package/dist/src/backup/manifest.js.map +1 -0
  44. package/dist/src/backup/restore.d.ts +73 -0
  45. package/dist/src/backup/restore.d.ts.map +1 -0
  46. package/dist/src/backup/restore.js +685 -0
  47. package/dist/src/backup/restore.js.map +1 -0
  48. package/dist/src/backup/run.d.ts +76 -0
  49. package/dist/src/backup/run.d.ts.map +1 -0
  50. package/dist/src/backup/run.js +181 -0
  51. package/dist/src/backup/run.js.map +1 -0
  52. package/dist/src/backup/scheduler.d.ts +51 -0
  53. package/dist/src/backup/scheduler.d.ts.map +1 -0
  54. package/dist/src/backup/scheduler.js +198 -0
  55. package/dist/src/backup/scheduler.js.map +1 -0
  56. package/dist/src/backup/settings.d.ts +44 -0
  57. package/dist/src/backup/settings.d.ts.map +1 -0
  58. package/dist/src/backup/settings.js +91 -0
  59. package/dist/src/backup/settings.js.map +1 -0
  60. package/dist/src/backup/space.d.ts +22 -0
  61. package/dist/src/backup/space.d.ts.map +1 -0
  62. package/dist/src/backup/space.js +47 -0
  63. package/dist/src/backup/space.js.map +1 -0
  64. package/dist/src/backup/state.d.ts +46 -0
  65. package/dist/src/backup/state.d.ts.map +1 -0
  66. package/dist/src/backup/state.js +137 -0
  67. package/dist/src/backup/state.js.map +1 -0
  68. package/dist/src/backup/tar.d.ts +64 -0
  69. package/dist/src/backup/tar.d.ts.map +1 -0
  70. package/dist/src/backup/tar.js +274 -0
  71. package/dist/src/backup/tar.js.map +1 -0
  72. package/dist/src/backup/targets.d.ts +85 -0
  73. package/dist/src/backup/targets.d.ts.map +1 -0
  74. package/dist/src/backup/targets.js +104 -0
  75. package/dist/src/backup/targets.js.map +1 -0
  76. package/dist/src/backup/walk.d.ts +42 -0
  77. package/dist/src/backup/walk.d.ts.map +1 -0
  78. package/dist/src/backup/walk.js +324 -0
  79. package/dist/src/backup/walk.js.map +1 -0
  80. package/dist/src/cli/backup.d.ts +45 -0
  81. package/dist/src/cli/backup.d.ts.map +1 -0
  82. package/dist/src/cli/backup.js +344 -0
  83. package/dist/src/cli/backup.js.map +1 -0
  84. package/dist/src/cli/bundled-skills.d.ts +7 -1
  85. package/dist/src/cli/bundled-skills.d.ts.map +1 -1
  86. package/dist/src/cli/bundled-skills.js +12 -2
  87. package/dist/src/cli/bundled-skills.js.map +1 -1
  88. package/dist/src/cli/config-failure.d.ts +18 -0
  89. package/dist/src/cli/config-failure.d.ts.map +1 -0
  90. package/dist/src/cli/config-failure.js +39 -0
  91. package/dist/src/cli/config-failure.js.map +1 -0
  92. package/dist/src/cli/gateway-audit.d.ts +3 -0
  93. package/dist/src/cli/gateway-audit.d.ts.map +1 -1
  94. package/dist/src/cli/gateway-audit.js +61 -14
  95. package/dist/src/cli/gateway-audit.js.map +1 -1
  96. package/dist/src/cli/gateway-url-backup.d.ts +21 -0
  97. package/dist/src/cli/gateway-url-backup.d.ts.map +1 -0
  98. package/dist/src/cli/gateway-url-backup.js +87 -0
  99. package/dist/src/cli/gateway-url-backup.js.map +1 -0
  100. package/dist/src/cli/home-copy.d.ts +37 -0
  101. package/dist/src/cli/home-copy.d.ts.map +1 -0
  102. package/dist/src/cli/home-copy.js +155 -0
  103. package/dist/src/cli/home-copy.js.map +1 -0
  104. package/dist/src/cli/interactive-config.d.ts +5 -0
  105. package/dist/src/cli/interactive-config.d.ts.map +1 -1
  106. package/dist/src/cli/interactive-config.js +16 -7
  107. package/dist/src/cli/interactive-config.js.map +1 -1
  108. package/dist/src/cli/migrate.d.ts +20 -0
  109. package/dist/src/cli/migrate.d.ts.map +1 -1
  110. package/dist/src/cli/migrate.js +365 -68
  111. package/dist/src/cli/migrate.js.map +1 -1
  112. package/dist/src/cli/migration-declarations.d.ts +24 -0
  113. package/dist/src/cli/migration-declarations.d.ts.map +1 -0
  114. package/dist/src/cli/migration-declarations.js +54 -0
  115. package/dist/src/cli/migration-declarations.js.map +1 -0
  116. package/dist/src/cli/start.d.ts.map +1 -1
  117. package/dist/src/cli/start.js +40 -1
  118. package/dist/src/cli/start.js.map +1 -1
  119. package/dist/src/connectors/chunked-send.d.ts +27 -0
  120. package/dist/src/connectors/chunked-send.d.ts.map +1 -0
  121. package/dist/src/connectors/chunked-send.js +40 -0
  122. package/dist/src/connectors/chunked-send.js.map +1 -0
  123. package/dist/src/connectors/cron/index.d.ts +10 -0
  124. package/dist/src/connectors/cron/index.d.ts.map +1 -1
  125. package/dist/src/connectors/cron/index.js +26 -3
  126. package/dist/src/connectors/cron/index.js.map +1 -1
  127. package/dist/src/connectors/discord/attachments.d.ts +25 -0
  128. package/dist/src/connectors/discord/attachments.d.ts.map +1 -0
  129. package/dist/src/connectors/discord/attachments.js +33 -0
  130. package/dist/src/connectors/discord/attachments.js.map +1 -0
  131. package/dist/src/connectors/discord/format.d.ts +17 -1
  132. package/dist/src/connectors/discord/format.d.ts.map +1 -1
  133. package/dist/src/connectors/discord/format.js +36 -6
  134. package/dist/src/connectors/discord/format.js.map +1 -1
  135. package/dist/src/connectors/discord/index.d.ts +12 -0
  136. package/dist/src/connectors/discord/index.d.ts.map +1 -1
  137. package/dist/src/connectors/discord/index.js +47 -40
  138. package/dist/src/connectors/discord/index.js.map +1 -1
  139. package/dist/src/connectors/discord/remote.d.ts +45 -1
  140. package/dist/src/connectors/discord/remote.d.ts.map +1 -1
  141. package/dist/src/connectors/discord/remote.js +147 -22
  142. package/dist/src/connectors/discord/remote.js.map +1 -1
  143. package/dist/src/connectors/slack/attachments.d.ts +25 -0
  144. package/dist/src/connectors/slack/attachments.d.ts.map +1 -0
  145. package/dist/src/connectors/slack/attachments.js +32 -0
  146. package/dist/src/connectors/slack/attachments.js.map +1 -0
  147. package/dist/src/connectors/slack/auth-test-cache.d.ts +22 -0
  148. package/dist/src/connectors/slack/auth-test-cache.d.ts.map +1 -0
  149. package/dist/src/connectors/slack/auth-test-cache.js +34 -0
  150. package/dist/src/connectors/slack/auth-test-cache.js.map +1 -0
  151. package/dist/src/connectors/slack/format.d.ts +6 -1
  152. package/dist/src/connectors/slack/format.d.ts.map +1 -1
  153. package/dist/src/connectors/slack/format.js +65 -13
  154. package/dist/src/connectors/slack/format.js.map +1 -1
  155. package/dist/src/connectors/slack/index.d.ts +4 -0
  156. package/dist/src/connectors/slack/index.d.ts.map +1 -1
  157. package/dist/src/connectors/slack/index.js +64 -52
  158. package/dist/src/connectors/slack/index.js.map +1 -1
  159. package/dist/src/connectors/slack/provider-auth-blocks.d.ts +62 -0
  160. package/dist/src/connectors/slack/provider-auth-blocks.d.ts.map +1 -0
  161. package/dist/src/connectors/slack/provider-auth-blocks.js +204 -0
  162. package/dist/src/connectors/slack/provider-auth-blocks.js.map +1 -0
  163. package/dist/src/connectors/slack/provider-auth.d.ts +126 -0
  164. package/dist/src/connectors/slack/provider-auth.d.ts.map +1 -0
  165. package/dist/src/connectors/slack/provider-auth.js +357 -0
  166. package/dist/src/connectors/slack/provider-auth.js.map +1 -0
  167. package/dist/src/connectors/telegram/index.d.ts +5 -0
  168. package/dist/src/connectors/telegram/index.d.ts.map +1 -1
  169. package/dist/src/connectors/telegram/index.js +14 -22
  170. package/dist/src/connectors/telegram/index.js.map +1 -1
  171. package/dist/src/connectors/whatsapp/index.d.ts +3 -0
  172. package/dist/src/connectors/whatsapp/index.d.ts.map +1 -1
  173. package/dist/src/connectors/whatsapp/index.js +33 -14
  174. package/dist/src/connectors/whatsapp/index.js.map +1 -1
  175. package/dist/src/cron/alert-throttle.d.ts +28 -0
  176. package/dist/src/cron/alert-throttle.d.ts.map +1 -0
  177. package/dist/src/cron/alert-throttle.js +106 -0
  178. package/dist/src/cron/alert-throttle.js.map +1 -0
  179. package/dist/src/cron/jobs.d.ts +8 -0
  180. package/dist/src/cron/jobs.d.ts.map +1 -1
  181. package/dist/src/cron/jobs.js +27 -1
  182. package/dist/src/cron/jobs.js.map +1 -1
  183. package/dist/src/cron/run-outcome.d.ts +28 -0
  184. package/dist/src/cron/run-outcome.d.ts.map +1 -0
  185. package/dist/src/cron/run-outcome.js +66 -0
  186. package/dist/src/cron/run-outcome.js.map +1 -0
  187. package/dist/src/cron/runner.d.ts.map +1 -1
  188. package/dist/src/cron/runner.js +68 -5
  189. package/dist/src/cron/runner.js.map +1 -1
  190. package/dist/src/cron/scheduler.d.ts +8 -1
  191. package/dist/src/cron/scheduler.d.ts.map +1 -1
  192. package/dist/src/cron/scheduler.js +11 -4
  193. package/dist/src/cron/scheduler.js.map +1 -1
  194. package/dist/src/cron/waiting-fires.d.ts +18 -0
  195. package/dist/src/cron/waiting-fires.d.ts.map +1 -0
  196. package/dist/src/cron/waiting-fires.js +49 -0
  197. package/dist/src/cron/waiting-fires.js.map +1 -0
  198. package/dist/src/engines/claude-interactive.d.ts +19 -3
  199. package/dist/src/engines/claude-interactive.d.ts.map +1 -1
  200. package/dist/src/engines/claude-interactive.js +42 -17
  201. package/dist/src/engines/claude-interactive.js.map +1 -1
  202. package/dist/src/engines/claude.d.ts.map +1 -1
  203. package/dist/src/engines/claude.js +38 -5
  204. package/dist/src/engines/claude.js.map +1 -1
  205. package/dist/src/engines/codex.d.ts.map +1 -1
  206. package/dist/src/engines/codex.js +1 -0
  207. package/dist/src/engines/codex.js.map +1 -1
  208. package/dist/src/engines/gemini.d.ts.map +1 -1
  209. package/dist/src/engines/gemini.js +1 -0
  210. package/dist/src/engines/gemini.js.map +1 -1
  211. package/dist/src/gateway/api.d.ts.map +1 -1
  212. package/dist/src/gateway/api.js +184 -160
  213. package/dist/src/gateway/api.js.map +1 -1
  214. package/dist/src/gateway/config-redaction.d.ts +32 -0
  215. package/dist/src/gateway/config-redaction.d.ts.map +1 -0
  216. package/dist/src/gateway/config-redaction.js +139 -0
  217. package/dist/src/gateway/config-redaction.js.map +1 -0
  218. package/dist/src/gateway/config-revision.d.ts +46 -0
  219. package/dist/src/gateway/config-revision.d.ts.map +1 -0
  220. package/dist/src/gateway/config-revision.js +63 -0
  221. package/dist/src/gateway/config-revision.js.map +1 -0
  222. package/dist/src/gateway/connector-config.d.ts +21 -0
  223. package/dist/src/gateway/connector-config.d.ts.map +1 -0
  224. package/dist/src/gateway/connector-config.js +24 -0
  225. package/dist/src/gateway/connector-config.js.map +1 -0
  226. package/dist/src/gateway/daemon-entry.js +5 -0
  227. package/dist/src/gateway/daemon-entry.js.map +1 -1
  228. package/dist/src/gateway/engine-health-monitor.d.ts +67 -0
  229. package/dist/src/gateway/engine-health-monitor.d.ts.map +1 -0
  230. package/dist/src/gateway/engine-health-monitor.js +221 -0
  231. package/dist/src/gateway/engine-health-monitor.js.map +1 -0
  232. package/dist/src/gateway/files.d.ts +7 -1
  233. package/dist/src/gateway/files.d.ts.map +1 -1
  234. package/dist/src/gateway/files.js +110 -217
  235. package/dist/src/gateway/files.js.map +1 -1
  236. package/dist/src/gateway/onboarding-personalize.d.ts +2 -0
  237. package/dist/src/gateway/onboarding-personalize.d.ts.map +1 -1
  238. package/dist/src/gateway/onboarding-personalize.js +17 -1
  239. package/dist/src/gateway/onboarding-personalize.js.map +1 -1
  240. package/dist/src/gateway/portal-config.d.ts +17 -3
  241. package/dist/src/gateway/portal-config.d.ts.map +1 -1
  242. package/dist/src/gateway/portal-config.js +52 -3
  243. package/dist/src/gateway/portal-config.js.map +1 -1
  244. package/dist/src/gateway/request-origin.d.ts +9 -0
  245. package/dist/src/gateway/request-origin.d.ts.map +1 -1
  246. package/dist/src/gateway/request-origin.js +10 -0
  247. package/dist/src/gateway/request-origin.js.map +1 -1
  248. package/dist/src/gateway/server.d.ts.map +1 -1
  249. package/dist/src/gateway/server.js +82 -59
  250. package/dist/src/gateway/server.js.map +1 -1
  251. package/dist/src/gateway/slack-connect-rollback.d.ts +23 -0
  252. package/dist/src/gateway/slack-connect-rollback.d.ts.map +1 -0
  253. package/dist/src/gateway/slack-connect-rollback.js +53 -0
  254. package/dist/src/gateway/slack-connect-rollback.js.map +1 -0
  255. package/dist/src/gateway/status-reconciler.d.ts +25 -7
  256. package/dist/src/gateway/status-reconciler.d.ts.map +1 -1
  257. package/dist/src/gateway/status-reconciler.js +86 -43
  258. package/dist/src/gateway/status-reconciler.js.map +1 -1
  259. package/dist/src/gateway/watcher.d.ts.map +1 -1
  260. package/dist/src/gateway/watcher.js +44 -3
  261. package/dist/src/gateway/watcher.js.map +1 -1
  262. package/dist/src/mcp/gateway-server.js +21 -3
  263. package/dist/src/mcp/gateway-server.js.map +1 -1
  264. package/dist/src/mcp/resolver.d.ts.map +1 -1
  265. package/dist/src/mcp/resolver.js +51 -1
  266. package/dist/src/mcp/resolver.js.map +1 -1
  267. package/dist/src/models/service.d.ts.map +1 -1
  268. package/dist/src/models/service.js +14 -8
  269. package/dist/src/models/service.js.map +1 -1
  270. package/dist/src/provider-auth/discovery.d.ts +16 -0
  271. package/dist/src/provider-auth/discovery.d.ts.map +1 -0
  272. package/dist/src/provider-auth/discovery.js +66 -0
  273. package/dist/src/provider-auth/discovery.js.map +1 -0
  274. package/dist/src/provider-auth/failure-notices.d.ts +29 -0
  275. package/dist/src/provider-auth/failure-notices.d.ts.map +1 -0
  276. package/dist/src/provider-auth/failure-notices.js +48 -0
  277. package/dist/src/provider-auth/failure-notices.js.map +1 -0
  278. package/dist/src/provider-auth/failure-signal.d.ts +22 -0
  279. package/dist/src/provider-auth/failure-signal.d.ts.map +1 -0
  280. package/dist/src/provider-auth/failure-signal.js +79 -0
  281. package/dist/src/provider-auth/failure-signal.js.map +1 -0
  282. package/dist/src/provider-auth/index.d.ts +26 -0
  283. package/dist/src/provider-auth/index.d.ts.map +1 -0
  284. package/dist/src/provider-auth/index.js +51 -0
  285. package/dist/src/provider-auth/index.js.map +1 -0
  286. package/dist/src/provider-auth/input.d.ts +44 -0
  287. package/dist/src/provider-auth/input.d.ts.map +1 -0
  288. package/dist/src/provider-auth/input.js +86 -0
  289. package/dist/src/provider-auth/input.js.map +1 -0
  290. package/dist/src/provider-auth/providers.d.ts +26 -0
  291. package/dist/src/provider-auth/providers.d.ts.map +1 -0
  292. package/dist/src/provider-auth/providers.js +86 -0
  293. package/dist/src/provider-auth/providers.js.map +1 -0
  294. package/dist/src/provider-auth/runtime.d.ts +21 -0
  295. package/dist/src/provider-auth/runtime.d.ts.map +1 -0
  296. package/dist/src/provider-auth/runtime.js +104 -0
  297. package/dist/src/provider-auth/runtime.js.map +1 -0
  298. package/dist/src/provider-auth/service.d.ts +70 -0
  299. package/dist/src/provider-auth/service.d.ts.map +1 -0
  300. package/dist/src/provider-auth/service.js +349 -0
  301. package/dist/src/provider-auth/service.js.map +1 -0
  302. package/dist/src/provider-auth/terminal.d.ts +21 -0
  303. package/dist/src/provider-auth/terminal.d.ts.map +1 -0
  304. package/dist/src/provider-auth/terminal.js +46 -0
  305. package/dist/src/provider-auth/terminal.js.map +1 -0
  306. package/dist/src/provider-auth/types.d.ts +123 -0
  307. package/dist/src/provider-auth/types.d.ts.map +1 -0
  308. package/dist/src/provider-auth/types.js +10 -0
  309. package/dist/src/provider-auth/types.js.map +1 -0
  310. package/dist/src/sessions/accounting.d.ts +3 -0
  311. package/dist/src/sessions/accounting.d.ts.map +1 -1
  312. package/dist/src/sessions/accounting.js +5 -0
  313. package/dist/src/sessions/accounting.js.map +1 -1
  314. package/dist/src/sessions/backup-integrity.d.ts +45 -0
  315. package/dist/src/sessions/backup-integrity.d.ts.map +1 -0
  316. package/dist/src/sessions/backup-integrity.js +122 -0
  317. package/dist/src/sessions/backup-integrity.js.map +1 -0
  318. package/dist/src/sessions/backup.d.ts +40 -2
  319. package/dist/src/sessions/backup.d.ts.map +1 -1
  320. package/dist/src/sessions/backup.js +88 -12
  321. package/dist/src/sessions/backup.js.map +1 -1
  322. package/dist/src/sessions/callbacks.d.ts +9 -0
  323. package/dist/src/sessions/callbacks.d.ts.map +1 -1
  324. package/dist/src/sessions/callbacks.js +55 -10
  325. package/dist/src/sessions/callbacks.js.map +1 -1
  326. package/dist/src/sessions/completion-batching.d.ts +82 -0
  327. package/dist/src/sessions/completion-batching.d.ts.map +1 -0
  328. package/dist/src/sessions/completion-batching.js +126 -0
  329. package/dist/src/sessions/completion-batching.js.map +1 -0
  330. package/dist/src/sessions/connector-command-guard.d.ts +66 -0
  331. package/dist/src/sessions/connector-command-guard.d.ts.map +1 -0
  332. package/dist/src/sessions/connector-command-guard.js +145 -0
  333. package/dist/src/sessions/connector-command-guard.js.map +1 -0
  334. package/dist/src/sessions/context.d.ts.map +1 -1
  335. package/dist/src/sessions/context.js +3 -4
  336. package/dist/src/sessions/context.js.map +1 -1
  337. package/dist/src/sessions/engine-fallback.d.ts +43 -1
  338. package/dist/src/sessions/engine-fallback.d.ts.map +1 -1
  339. package/dist/src/sessions/engine-fallback.js +266 -15
  340. package/dist/src/sessions/engine-fallback.js.map +1 -1
  341. package/dist/src/sessions/engine-health-gate.d.ts +83 -0
  342. package/dist/src/sessions/engine-health-gate.d.ts.map +1 -0
  343. package/dist/src/sessions/engine-health-gate.js +186 -0
  344. package/dist/src/sessions/engine-health-gate.js.map +1 -0
  345. package/dist/src/sessions/engine-login.d.ts +58 -0
  346. package/dist/src/sessions/engine-login.d.ts.map +1 -0
  347. package/dist/src/sessions/engine-login.js +107 -0
  348. package/dist/src/sessions/engine-login.js.map +1 -0
  349. package/dist/src/sessions/fork.d.ts.map +1 -1
  350. package/dist/src/sessions/fork.js +3 -1
  351. package/dist/src/sessions/fork.js.map +1 -1
  352. package/dist/src/sessions/goal-execution.d.ts.map +1 -1
  353. package/dist/src/sessions/goal-execution.js +8 -1
  354. package/dist/src/sessions/goal-execution.js.map +1 -1
  355. package/dist/src/sessions/limit-failure-notice.d.ts +41 -0
  356. package/dist/src/sessions/limit-failure-notice.d.ts.map +1 -0
  357. package/dist/src/sessions/limit-failure-notice.js +87 -0
  358. package/dist/src/sessions/limit-failure-notice.js.map +1 -0
  359. package/dist/src/sessions/lost-turn.d.ts +39 -0
  360. package/dist/src/sessions/lost-turn.d.ts.map +1 -0
  361. package/dist/src/sessions/lost-turn.js +32 -0
  362. package/dist/src/sessions/lost-turn.js.map +1 -0
  363. package/dist/src/sessions/manager.d.ts.map +1 -1
  364. package/dist/src/sessions/manager.js +104 -47
  365. package/dist/src/sessions/manager.js.map +1 -1
  366. package/dist/src/sessions/new-session-engine.d.ts +42 -0
  367. package/dist/src/sessions/new-session-engine.d.ts.map +1 -0
  368. package/dist/src/sessions/new-session-engine.js +100 -0
  369. package/dist/src/sessions/new-session-engine.js.map +1 -0
  370. package/dist/src/sessions/origin-delivery.d.ts +50 -4
  371. package/dist/src/sessions/origin-delivery.d.ts.map +1 -1
  372. package/dist/src/sessions/origin-delivery.js +108 -9
  373. package/dist/src/sessions/origin-delivery.js.map +1 -1
  374. package/dist/src/sessions/queue.d.ts +14 -0
  375. package/dist/src/sessions/queue.d.ts.map +1 -1
  376. package/dist/src/sessions/queue.js +38 -2
  377. package/dist/src/sessions/queue.js.map +1 -1
  378. package/dist/src/sessions/registry.d.ts +4 -2
  379. package/dist/src/sessions/registry.d.ts.map +1 -1
  380. package/dist/src/sessions/registry.js +21 -4
  381. package/dist/src/sessions/registry.js.map +1 -1
  382. package/dist/src/sessions/reply-disposition.d.ts +8 -0
  383. package/dist/src/sessions/reply-disposition.d.ts.map +1 -1
  384. package/dist/src/sessions/reply-disposition.js +8 -0
  385. package/dist/src/sessions/reply-disposition.js.map +1 -1
  386. package/dist/src/sessions/restart-resume.d.ts +234 -0
  387. package/dist/src/sessions/restart-resume.d.ts.map +1 -0
  388. package/dist/src/sessions/restart-resume.js +596 -0
  389. package/dist/src/sessions/restart-resume.js.map +1 -0
  390. package/dist/src/sessions/speaker-prefix.d.ts.map +1 -1
  391. package/dist/src/sessions/speaker-prefix.js +3 -1
  392. package/dist/src/sessions/speaker-prefix.js.map +1 -1
  393. package/dist/src/sessions/turn-delivery.d.ts +26 -0
  394. package/dist/src/sessions/turn-delivery.d.ts.map +1 -0
  395. package/dist/src/sessions/turn-delivery.js +34 -0
  396. package/dist/src/sessions/turn-delivery.js.map +1 -0
  397. package/dist/src/sessions/unrequested-stop.d.ts +26 -0
  398. package/dist/src/sessions/unrequested-stop.d.ts.map +1 -0
  399. package/dist/src/sessions/unrequested-stop.js +19 -0
  400. package/dist/src/sessions/unrequested-stop.js.map +1 -0
  401. package/dist/src/sessions/usage-limit-wait.d.ts +14 -0
  402. package/dist/src/sessions/usage-limit-wait.d.ts.map +1 -0
  403. package/dist/src/sessions/usage-limit-wait.js +9 -0
  404. package/dist/src/sessions/usage-limit-wait.js.map +1 -0
  405. package/dist/src/shared/attachment-download.d.ts +41 -0
  406. package/dist/src/shared/attachment-download.d.ts.map +1 -0
  407. package/dist/src/shared/attachment-download.js +110 -0
  408. package/dist/src/shared/attachment-download.js.map +1 -0
  409. package/dist/src/shared/attachment-notice.d.ts +24 -0
  410. package/dist/src/shared/attachment-notice.d.ts.map +1 -0
  411. package/dist/src/shared/attachment-notice.js +37 -0
  412. package/dist/src/shared/attachment-notice.js.map +1 -0
  413. package/dist/src/shared/attachments.d.ts +65 -0
  414. package/dist/src/shared/attachments.d.ts.map +1 -0
  415. package/dist/src/shared/attachments.js +153 -0
  416. package/dist/src/shared/attachments.js.map +1 -0
  417. package/dist/src/shared/childEnv.d.ts +15 -0
  418. package/dist/src/shared/childEnv.d.ts.map +1 -1
  419. package/dist/src/shared/childEnv.js +15 -0
  420. package/dist/src/shared/childEnv.js.map +1 -1
  421. package/dist/src/shared/claude-auto-memory.d.ts +33 -0
  422. package/dist/src/shared/claude-auto-memory.d.ts.map +1 -0
  423. package/dist/src/shared/claude-auto-memory.js +156 -0
  424. package/dist/src/shared/claude-auto-memory.js.map +1 -0
  425. package/dist/src/shared/claude-limit-reset.d.ts +54 -0
  426. package/dist/src/shared/claude-limit-reset.d.ts.map +1 -0
  427. package/dist/src/shared/claude-limit-reset.js +99 -0
  428. package/dist/src/shared/claude-limit-reset.js.map +1 -0
  429. package/dist/src/shared/config-error.d.ts +21 -0
  430. package/dist/src/shared/config-error.d.ts.map +1 -0
  431. package/dist/src/shared/config-error.js +37 -0
  432. package/dist/src/shared/config-error.js.map +1 -0
  433. package/dist/src/shared/config-file.d.ts +57 -0
  434. package/dist/src/shared/config-file.d.ts.map +1 -0
  435. package/dist/src/shared/config-file.js +217 -0
  436. package/dist/src/shared/config-file.js.map +1 -0
  437. package/dist/src/shared/config-yaml-edit.d.ts +20 -0
  438. package/dist/src/shared/config-yaml-edit.d.ts.map +1 -0
  439. package/dist/src/shared/config-yaml-edit.js +468 -0
  440. package/dist/src/shared/config-yaml-edit.js.map +1 -0
  441. package/dist/src/shared/config.d.ts.map +1 -1
  442. package/dist/src/shared/config.js +12 -4
  443. package/dist/src/shared/config.js.map +1 -1
  444. package/dist/src/shared/engine-fallback.d.ts +22 -0
  445. package/dist/src/shared/engine-fallback.d.ts.map +1 -1
  446. package/dist/src/shared/engine-fallback.js +55 -4
  447. package/dist/src/shared/engine-fallback.js.map +1 -1
  448. package/dist/src/shared/engine-health.d.ts +16 -0
  449. package/dist/src/shared/engine-health.d.ts.map +1 -1
  450. package/dist/src/shared/engine-health.js +42 -0
  451. package/dist/src/shared/engine-health.js.map +1 -1
  452. package/dist/src/shared/list-alignment.d.ts +23 -0
  453. package/dist/src/shared/list-alignment.d.ts.map +1 -0
  454. package/dist/src/shared/list-alignment.js +61 -0
  455. package/dist/src/shared/list-alignment.js.map +1 -0
  456. package/dist/src/shared/logger.d.ts.map +1 -1
  457. package/dist/src/shared/logger.js +104 -33
  458. package/dist/src/shared/logger.js.map +1 -1
  459. package/dist/src/shared/map-limited.d.ts +11 -0
  460. package/dist/src/shared/map-limited.d.ts.map +1 -0
  461. package/dist/src/shared/map-limited.js +30 -0
  462. package/dist/src/shared/map-limited.js.map +1 -0
  463. package/dist/src/shared/oneShotCli.d.ts.map +1 -1
  464. package/dist/src/shared/oneShotCli.js +4 -2
  465. package/dist/src/shared/oneShotCli.js.map +1 -1
  466. package/dist/src/shared/partial-delivery.d.ts +24 -0
  467. package/dist/src/shared/partial-delivery.d.ts.map +1 -0
  468. package/dist/src/shared/partial-delivery.js +46 -0
  469. package/dist/src/shared/partial-delivery.js.map +1 -0
  470. package/dist/src/shared/process-safety-net.d.ts +44 -0
  471. package/dist/src/shared/process-safety-net.d.ts.map +1 -0
  472. package/dist/src/shared/process-safety-net.js +88 -0
  473. package/dist/src/shared/process-safety-net.js.map +1 -0
  474. package/dist/src/shared/rateLimit.d.ts +45 -2
  475. package/dist/src/shared/rateLimit.d.ts.map +1 -1
  476. package/dist/src/shared/rateLimit.js +64 -2
  477. package/dist/src/shared/rateLimit.js.map +1 -1
  478. package/dist/src/shared/redact.d.ts.map +1 -1
  479. package/dist/src/shared/redact.js +11 -1
  480. package/dist/src/shared/redact.js.map +1 -1
  481. package/dist/src/shared/safe-file-name.d.ts +9 -0
  482. package/dist/src/shared/safe-file-name.d.ts.map +1 -0
  483. package/dist/src/shared/safe-file-name.js +16 -0
  484. package/dist/src/shared/safe-file-name.js.map +1 -0
  485. package/dist/src/shared/terminal-safe-text.d.ts +2 -0
  486. package/dist/src/shared/terminal-safe-text.d.ts.map +1 -0
  487. package/dist/src/shared/terminal-safe-text.js +21 -0
  488. package/dist/src/shared/terminal-safe-text.js.map +1 -0
  489. package/dist/src/shared/types.d.ts +75 -4
  490. package/dist/src/shared/types.d.ts.map +1 -1
  491. package/dist/src/skills-sync/apply.d.ts +21 -0
  492. package/dist/src/skills-sync/apply.d.ts.map +1 -0
  493. package/dist/src/skills-sync/apply.js +209 -0
  494. package/dist/src/skills-sync/apply.js.map +1 -0
  495. package/dist/src/skills-sync/backup-run.d.ts +47 -0
  496. package/dist/src/skills-sync/backup-run.d.ts.map +1 -0
  497. package/dist/src/skills-sync/backup-run.js +150 -0
  498. package/dist/src/skills-sync/backup-run.js.map +1 -0
  499. package/dist/src/skills-sync/bounded-read.d.ts +32 -0
  500. package/dist/src/skills-sync/bounded-read.d.ts.map +1 -0
  501. package/dist/src/skills-sync/bounded-read.js +104 -0
  502. package/dist/src/skills-sync/bounded-read.js.map +1 -0
  503. package/dist/src/skills-sync/bundled.d.ts +28 -0
  504. package/dist/src/skills-sync/bundled.d.ts.map +1 -0
  505. package/dist/src/skills-sync/bundled.js +84 -0
  506. package/dist/src/skills-sync/bundled.js.map +1 -0
  507. package/dist/src/skills-sync/fingerprint.d.ts +32 -0
  508. package/dist/src/skills-sync/fingerprint.d.ts.map +1 -0
  509. package/dist/src/skills-sync/fingerprint.js +58 -0
  510. package/dist/src/skills-sync/fingerprint.js.map +1 -0
  511. package/dist/src/skills-sync/history.d.ts +44 -0
  512. package/dist/src/skills-sync/history.d.ts.map +1 -0
  513. package/dist/src/skills-sync/history.js +115 -0
  514. package/dist/src/skills-sync/history.js.map +1 -0
  515. package/dist/src/skills-sync/home-skill.d.ts +28 -0
  516. package/dist/src/skills-sync/home-skill.d.ts.map +1 -0
  517. package/dist/src/skills-sync/home-skill.js +67 -0
  518. package/dist/src/skills-sync/home-skill.js.map +1 -0
  519. package/dist/src/skills-sync/instance.d.ts +26 -0
  520. package/dist/src/skills-sync/instance.d.ts.map +1 -0
  521. package/dist/src/skills-sync/instance.js +128 -0
  522. package/dist/src/skills-sync/instance.js.map +1 -0
  523. package/dist/src/skills-sync/names.d.ts +25 -0
  524. package/dist/src/skills-sync/names.d.ts.map +1 -0
  525. package/dist/src/skills-sync/names.js +56 -0
  526. package/dist/src/skills-sync/names.js.map +1 -0
  527. package/dist/src/skills-sync/plan.d.ts +58 -0
  528. package/dist/src/skills-sync/plan.d.ts.map +1 -0
  529. package/dist/src/skills-sync/plan.js +132 -0
  530. package/dist/src/skills-sync/plan.js.map +1 -0
  531. package/dist/src/skills-sync/receipt.d.ts +61 -0
  532. package/dist/src/skills-sync/receipt.d.ts.map +1 -0
  533. package/dist/src/skills-sync/receipt.js +149 -0
  534. package/dist/src/skills-sync/receipt.js.map +1 -0
  535. package/dist/src/skills-sync/staging.d.ts +21 -0
  536. package/dist/src/skills-sync/staging.d.ts.map +1 -0
  537. package/dist/src/skills-sync/staging.js +81 -0
  538. package/dist/src/skills-sync/staging.js.map +1 -0
  539. package/dist/src/skills-sync/sync.d.ts +37 -0
  540. package/dist/src/skills-sync/sync.d.ts.map +1 -0
  541. package/dist/src/skills-sync/sync.js +201 -0
  542. package/dist/src/skills-sync/sync.js.map +1 -0
  543. package/dist/src/skills-sync/types.d.ts +66 -0
  544. package/dist/src/skills-sync/types.d.ts.map +1 -0
  545. package/dist/src/skills-sync/types.js +2 -0
  546. package/dist/src/skills-sync/types.js.map +1 -0
  547. package/dist/src/stt/config.d.ts +5 -0
  548. package/dist/src/stt/config.d.ts.map +1 -0
  549. package/dist/src/stt/config.js +18 -0
  550. package/dist/src/stt/config.js.map +1 -0
  551. package/dist/src/updates/maintenance.d.ts.map +1 -1
  552. package/dist/src/updates/maintenance.js +24 -4
  553. package/dist/src/updates/maintenance.js.map +1 -1
  554. package/dist/src/workflows/repository-mutex.d.ts +1 -1
  555. package/dist/web/404.html +1 -1
  556. package/dist/web/__next.__PAGE__.txt +11 -11
  557. package/dist/web/__next._full.txt +12 -12
  558. package/dist/web/__next._tree.txt +2 -2
  559. package/dist/web/_next/static/chunks/{0g5c5ppr8zmup.js → 20v6mri7epga5.js} +1 -1
  560. package/dist/web/_next/static/chunks/2u0328ngpt-ek.js +1 -0
  561. package/dist/web/_next/static/chunks/3f9i3f9q6v6_j.css +1 -0
  562. package/dist/web/_next/static/chunks/{08i7uo3uz6_fn.js → 3yy053rafgrzy.js} +1 -1
  563. package/dist/web/_not-found/__next._full.txt +10 -10
  564. package/dist/web/_not-found/__next._not-found.__PAGE__.txt +9 -9
  565. package/dist/web/_not-found/__next._tree.txt +2 -2
  566. package/dist/web/_not-found.html +1 -1
  567. package/dist/web/_not-found.txt +10 -10
  568. package/dist/web/chat/__next._full.txt +12 -12
  569. package/dist/web/chat/__next._tree.txt +2 -2
  570. package/dist/web/chat/__next.chat.__PAGE__.txt +11 -11
  571. package/dist/web/chat.html +1 -1
  572. package/dist/web/chat.txt +12 -12
  573. package/dist/web/cron/__next._full.txt +12 -12
  574. package/dist/web/cron/__next._tree.txt +2 -2
  575. package/dist/web/cron/__next.cron.__PAGE__.txt +11 -11
  576. package/dist/web/cron.html +1 -1
  577. package/dist/web/cron.txt +12 -12
  578. package/dist/web/index.html +1 -1
  579. package/dist/web/index.txt +12 -12
  580. package/dist/web/kanban/__next._full.txt +12 -12
  581. package/dist/web/kanban/__next._tree.txt +2 -2
  582. package/dist/web/kanban/__next.kanban.__PAGE__.txt +11 -11
  583. package/dist/web/kanban.html +1 -1
  584. package/dist/web/kanban.txt +12 -12
  585. package/dist/web/logs/__next._full.txt +12 -12
  586. package/dist/web/logs/__next._tree.txt +2 -2
  587. package/dist/web/logs/__next.logs.__PAGE__.txt +11 -11
  588. package/dist/web/logs.html +1 -1
  589. package/dist/web/logs.txt +12 -12
  590. package/dist/web/models/__next._full.txt +12 -12
  591. package/dist/web/models/__next._tree.txt +2 -2
  592. package/dist/web/models/__next.models.__PAGE__.txt +11 -11
  593. package/dist/web/models.html +1 -1
  594. package/dist/web/models.txt +12 -12
  595. package/dist/web/org/__next._full.txt +12 -12
  596. package/dist/web/org/__next._tree.txt +2 -2
  597. package/dist/web/org/__next.org.__PAGE__.txt +11 -11
  598. package/dist/web/org.html +1 -1
  599. package/dist/web/org.txt +12 -12
  600. package/dist/web/sessions/__next._full.txt +10 -10
  601. package/dist/web/sessions/__next._tree.txt +2 -2
  602. package/dist/web/sessions/__next.sessions.__PAGE__.txt +9 -9
  603. package/dist/web/sessions.html +1 -1
  604. package/dist/web/sessions.txt +10 -10
  605. package/dist/web/settings/__next._full.txt +12 -12
  606. package/dist/web/settings/__next._tree.txt +2 -2
  607. package/dist/web/settings/__next.settings.__PAGE__.txt +11 -11
  608. package/dist/web/settings.html +1 -1
  609. package/dist/web/settings.txt +12 -12
  610. package/dist/web/skills/__next._full.txt +12 -12
  611. package/dist/web/skills/__next._tree.txt +2 -2
  612. package/dist/web/skills/__next.skills.__PAGE__.txt +11 -11
  613. package/dist/web/skills.html +1 -1
  614. package/dist/web/skills.txt +12 -12
  615. package/package.json +2 -1
  616. package/template/AGENTS.md +48 -308
  617. package/template/CLAUDE.md +4 -349
  618. package/template/bundled-skill-history.json +377 -0
  619. package/template/config.default.yaml +52 -3
  620. package/template/docs/architecture.md +41 -3
  621. package/template/docs/backup.md +142 -0
  622. package/template/docs/connectors.md +192 -16
  623. package/template/docs/cron.md +30 -11
  624. package/template/docs/memory.md +47 -0
  625. package/template/docs/overview.md +6 -2
  626. package/template/docs/self-modification.md +11 -10
  627. package/template/docs/skills.md +77 -4
  628. package/template/migrations/0.3.0/MIGRATION.md +6 -0
  629. package/template/migrations/0.7.3/MIGRATION.md +6 -0
  630. package/template/migrations/0.7.5/MIGRATION.md +1 -1
  631. package/template/migrations/0.9.0/MIGRATION.md +6 -0
  632. package/template/migrations/2026.10.13/MIGRATION.md +76 -0
  633. package/template/migrations/2026.10.13/files/docs/architecture.md +112 -0
  634. package/template/migrations/2026.10.13/files/docs/automations.md +110 -0
  635. package/template/migrations/2026.10.13/files/docs/backup.md +142 -0
  636. package/template/migrations/2026.10.13/files/docs/connectors.md +370 -0
  637. package/template/migrations/2026.10.13/files/docs/cron-commands.md +52 -0
  638. package/template/migrations/2026.10.13/files/docs/cron.md +178 -0
  639. package/template/migrations/2026.10.13/files/docs/mcp.md +108 -0
  640. package/template/migrations/2026.10.13/files/docs/memory.md +47 -0
  641. package/template/migrations/2026.10.13/files/docs/org.md +111 -0
  642. package/template/migrations/2026.10.13/files/docs/overview.md +44 -0
  643. package/template/migrations/2026.10.13/files/docs/self-modification.md +71 -0
  644. package/template/migrations/2026.10.13/files/docs/skills.md +140 -0
  645. package/template/migrations/2026.10.13/files/skills/cron-manager/SKILL.md +107 -0
  646. package/template/migrations/2026.10.13/files/skills/management/SKILL.md +227 -0
  647. package/template/migrations/2026.10.13/files/skills/migrate/SKILL.md +194 -0
  648. package/template/migrations/2026.10.13/files/skills/onboarding/SKILL.md +153 -0
  649. package/template/migrations/2026.10.13/files/skills/openryoko-config/SKILL.md +35 -0
  650. package/template/migrations/2026.10.13/files/skills/openryoko-config/references/engine-fallback.md +98 -0
  651. package/template/migrations/2026.10.13/files/skills/openryoko-config/references/jev.md +89 -0
  652. package/template/migrations/2026.10.13/files/skills/openryoko-config/references/maintenance.md +49 -0
  653. package/template/migrations/2026.10.13/files/skills/openryoko-config/references/platform.md +100 -0
  654. package/template/migrations/2026.10.13/files/skills/self-heal/SKILL.md +187 -0
  655. package/template/migrations/2026.10.9/MIGRATION.md +44 -0
  656. package/template/migrations/2026.10.9/files/docs/memory.md +47 -0
  657. package/template/migrations/2026.10.9/files/skills/migrate/SKILL.md +194 -0
  658. package/template/migrations/2026.5.7/MIGRATION.md +6 -0
  659. package/template/migrations/2026.8.28/MIGRATION.md +6 -0
  660. package/template/migrations/2026.9.11/MIGRATION.md +6 -0
  661. package/template/skills/cron-manager/SKILL.md +10 -0
  662. package/template/skills/management/SKILL.md +5 -4
  663. package/template/skills/migrate/SKILL.md +47 -14
  664. package/template/skills/onboarding/SKILL.md +3 -3
  665. package/template/skills/openryoko-config/SKILL.md +1 -1
  666. package/template/skills/openryoko-config/references/engine-fallback.md +16 -5
  667. package/template/skills/openryoko-config/references/platform.md +23 -4
  668. package/template/skills/self-heal/SKILL.md +117 -44
  669. package/dist/src/engines/mock.d.ts +0 -16
  670. package/dist/src/engines/mock.d.ts.map +0 -1
  671. package/dist/src/engines/mock.js +0 -47
  672. package/dist/src/engines/mock.js.map +0 -1
  673. package/dist/src/shared/test-support/posix-mode.d.ts +0 -17
  674. package/dist/src/shared/test-support/posix-mode.d.ts.map +0 -1
  675. package/dist/src/shared/test-support/posix-mode.js +0 -23
  676. package/dist/src/shared/test-support/posix-mode.js.map +0 -1
  677. package/dist/web/_next/static/Oux0UBcCkbX5eOp9-vC4k/_buildManifest.js +0 -11
  678. package/dist/web/_next/static/Oux0UBcCkbX5eOp9-vC4k/_clientMiddlewareManifest.js +0 -1
  679. package/dist/web/_next/static/Oux0UBcCkbX5eOp9-vC4k/_ssgManifest.js +0 -1
  680. package/dist/web/_next/static/chunks/02h65sho8c14h.js +0 -1
  681. package/dist/web/_next/static/chunks/0ic18n-m7ixyw.css +0 -1
  682. package/dist/web/_next/static/chunks/19s8vn2kgy7q1.js +0 -1
  683. package/dist/web/_next/static/chunks/1_jm0szyu2the.js +0 -1
  684. package/dist/web/_next/static/chunks/1omdg4m5w9lgx.js +0 -1
  685. package/dist/web/_next/static/chunks/25nob1new8t4s.js +0 -79
  686. package/dist/web/_next/static/chunks/2iqxlc9wtxzm2.js +0 -1
  687. package/dist/web/_next/static/chunks/3_6klkygi417n.js +0 -1
  688. package/dist/web/_next/static/chunks/3alc-b00c58_3.css +0 -1
  689. /package/dist/web/_next/static/{70PNIyOj8-2kywAG6J41- → ov0mWzyHx0B5oEnTHE_pa}/_buildManifest.js +0 -0
  690. /package/dist/web/_next/static/{70PNIyOj8-2kywAG6J41- → ov0mWzyHx0B5oEnTHE_pa}/_clientMiddlewareManifest.js +0 -0
  691. /package/dist/web/_next/static/{70PNIyOj8-2kywAG6J41- → ov0mWzyHx0B5oEnTHE_pa}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,82074,e=>{"use strict";var a=e.i(47565),t=e.i(28225),r=e.i(20750);let n=(0,r.default)("rotate-ccw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);var s=e.i(77053),l=e.i(42095);let o=(0,r.default)("save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);var i=e.i(92470),c=e.i(62671),d=e.i(58963),p=e.i(45994),x=e.i(64374),v=e.i(51397),h=e.i(47721),m=e.i(43701),u=e.i(76230);let g="w-full bg-[var(--bg-secondary)] border border-[var(--separator)] rounded-[var(--radius-sm)] px-[10px] py-[6px] text-[length:var(--text-footnote)] text-[var(--text-primary)]";function b({id:e,engine:r,model:n,onChange:s,allowAutomatic:l=!1}){let[o,i]=(0,t.useState)(null),c=o?.engine===r?o.models:[];(0,t.useEffect)(()=>{let e=!0;return h.api.getModels().then(a=>{e&&i({engine:r,models:a.engines.find(e=>e.engine===r)?.models.map(e=>({value:e.id,label:e.label}))??[]})}).catch(()=>{}),()=>{e=!1}},[r]);let d=[...new Map([...(0,u.modelsForEngine)(r),...c].map(e=>[e.value,e])).values()],p=d.some(e=>e.value===n),[x,v]=(0,t.useState)(!!(n&&!p)),[m,j]=(0,t.useState)(n&&!p?n:""),y=(0,t.useRef)(null),f=(0,t.useRef)(!1),w=`${e}-help`,N=`${e}-custom`,k="claude"===r?"例: claude-sonnet-5-20260801":"gemini"===r?"例: gemini-3.1-pro-preview":"例: gpt-private-preview";(0,t.useEffect)(()=>{let e=!!(n&&!(0,u.isCatalogModel)(r,n)&&!c.some(e=>e.value===n));v(e),j(e?n??"":"")},[r,n]),(0,t.useEffect)(()=>{x&&y.current?.focus()},[x]);let C=x&&(!p||m!==n),S=C?u.CUSTOM_MODEL_VALUE:n&&p?n:"";return(0,a.jsxs)("div",{className:"space-y-[var(--space-2)]",children:[(0,a.jsxs)("select",{id:e,value:S,"aria-describedby":w,onChange:e=>{let a=e.target.value;if(a===u.CUSTOM_MODEL_VALUE){j(n&&!p?n:""),v(!0);return}v(!1),s(a||void 0)},className:`${g} cursor-pointer`,children:[l&&(0,a.jsx)("option",{value:"",children:"自動(ベンダー既定)"}),!l&&!n&&(0,a.jsx)("option",{value:"",children:"モデルを選択"}),d.map(e=>(0,a.jsx)("option",{value:e.value,children:e.label},e.value)),(0,a.jsx)("option",{value:u.CUSTOM_MODEL_VALUE,children:"カスタムモデルIDを入力…"})]}),C&&(0,a.jsx)("input",{ref:y,id:N,type:"text",value:m,onChange:e=>j(e.target.value),onBlur:function(){if(f.current){f.current=!1;return}let e=m.trim();if(!e){let e=!!(n&&!p);j(e?n??"":""),v(e);return}s(e)},onKeyDown:e=>{"Enter"===e.key&&e.currentTarget.blur(),"Escape"===e.key&&(e.preventDefault(),f.current=!0,j(n&&!p?n:""),v(!!(n&&!p)),e.currentTarget.blur(),queueMicrotask(()=>{f.current=!1}))},placeholder:k,"aria-label":"カスタムモデルID","aria-describedby":w,autoComplete:"off",className:g}),(0,a.jsxs)("p",{id:w,className:"text-[length:var(--text-caption2)] text-[var(--text-tertiary)]",children:["一覧にないモデルは「カスタムモデルID」を選び、入力後に確定できます。","codex"===r&&["gpt-6-astra","gpt-6-sol","gpt-6-luna"].includes(n??"")&&(0,a.jsx)(a.Fragment,{children:" GPT-6 の利用には、対応する Codex CLI とアカウントのアクセス権が必要です。"}),"claude"===r&&"claude-fable-5-1"===n&&(0,a.jsx)(a.Fragment,{children:" Fable 5.1 の利用には、Claude Code 2.1.255 以降とアカウントのアクセス権が必要です。"})]})]})}let j="typesafe-key-status-changed",y="w-full bg-[var(--bg-secondary)] border border-[var(--separator)] rounded-[var(--radius-sm)] px-[10px] py-[6px] text-[length:var(--text-footnote)] text-[var(--text-primary)]",f="px-[10px] py-[6px] border border-[var(--separator)] rounded-[var(--radius-sm)] text-[length:var(--text-footnote)] text-[var(--text-primary)] cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed",w="text-[length:var(--text-caption2)] text-[var(--text-tertiary)]",N={cli:"既存の CLI モデルで反応を判定します。",jev:"Jev で判定します。判断が難しい場合や API 障害時も判定用の CLI は起動しません。","jev-fallback":"Jev で判断が難しい場合や API 障害時は、下の CLI モデルで再判定します。","jev-shadow":"Jev と CLI の判定を比較します。実際の反応は CLI が決めます。"},k={missing_key:"API キーが未設定です。",unauthorized:"API キーを認証できませんでした。",rate_limited:"利用制限に達しました。時間をおいて再試行してください。",timeout:"接続がタイムアウトしました。",busy:"別の接続テストが実行中です。少し待って再試行してください。",provider_error:"TypeSafe 側でエラーが発生しました。",network_error:"TypeSafe に接続できませんでした。",invalid_response:"TypeSafe の応答を確認できませんでした。"};function C({label:e,id:t,children:r}){return(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-[var(--space-2)] py-[var(--space-2)]",children:[(0,a.jsx)("label",{htmlFor:t,className:"text-[length:var(--text-subheadline)] text-[var(--text-secondary)]",children:e}),(0,a.jsx)("div",{className:"w-[240px] max-w-full",children:r})]})}function S({config:e={},onChange:r,showCredentials:n=!0}){let s=(0,t.useId)(),l="jev-shadow"===e.backend?"jev-shadow":"jev"===e.backend?e.jev?.fallback==="cli"?"jev-fallback":"jev":"cli",o="cli"!==l,i=e.jev?.useCapabilities!==!1,[c,d]=(0,t.useState)(null),[p,x]=(0,t.useState)(""),[v,m]=(0,t.useState)(null),[g,E]=(0,t.useState)(null),[I,T]=(0,t.useState)(!1);async function A(){let e=p.trim();if(e&&!v){x(""),m("save"),E(null);try{let a=await h.api.saveTypeSafeKey(e);d(a),T(!1),E({error:!1,text:"API キーを保存しました。"}),window.dispatchEvent(new Event(j))}catch{E({error:!0,text:"API キーを保存できませんでした。入力内容と接続を確認してください。"})}finally{m(null)}}}async function F(){if(!v){x(""),m("delete"),E(null);try{let e=await h.api.deleteTypeSafeKey();d(e),T(!1),E({error:!1,text:e.configured?"保存したキーを削除しました。環境変数のキーを使用します。":"保存した API キーを削除しました。"}),window.dispatchEvent(new Event(j))}catch{E({error:!0,text:"API キーを削除できませんでした。"})}finally{m(null)}}}async function M(){if(!v&&c?.configured){m("test"),E(null);try{let e=await h.api.testTypeSafeKey(),a="number"==typeof e.latencyMs&&Number.isFinite(e.latencyMs)&&e.latencyMs>=0?`(${Math.round(e.latencyMs)} ms)`:"";E(e.ok?{error:!1,text:`接続を確認しました${a}。`}:{error:!0,text:k[e.error??""]??"接続を確認できませんでした。"})}catch{E({error:!0,text:"接続を確認できませんでした。"})}finally{m(null)}}}return(0,t.useEffect)(()=>{let e=!0,a=()=>{h.api.getTypeSafeKeyStatus().then(a=>{e&&(d(a),T(!1))},()=>{e&&(d(null),T(!0))})};return a(),window.addEventListener(j,a),()=>{e=!1,window.removeEventListener(j,a)}},[]),(0,a.jsxs)("div",{className:"space-y-[var(--space-2)]",children:[(0,a.jsx)(C,{label:"空気読みを有効化",id:`${s}-enabled`,children:(0,a.jsx)("button",{type:"button",id:`${s}-enabled`,role:"switch","aria-checked":e.enabled??!1,disabled:!e.enabled&&o&&!c?.configured,onClick:()=>r({...e,enabled:!e.enabled}),className:"relative block ml-auto w-[44px] h-[24px] rounded-[12px] border-none cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed",style:{background:e.enabled?"var(--system-green)":"var(--fill-primary)"},children:(0,a.jsx)("span",{className:"absolute top-[2px] w-[20px] h-[20px] rounded-full bg-white",style:{left:e.enabled?22:2}})})}),(0,a.jsx)(C,{label:"判定方式",id:`${s}-mode`,children:(0,a.jsxs)("select",{id:`${s}-mode`,value:l,"aria-describedby":`${s}-mode-help`,onChange:a=>{var t;return r("cli"===(t=a.target.value)||"jev-shadow"===t?{...e,backend:t}:{...e,backend:"jev",jev:{...e.jev,fallback:"jev-fallback"===t?"cli":"none"}})},className:y,children:[(0,a.jsx)("option",{value:"cli",children:"CLI(従来方式)"}),(0,a.jsx)("option",{value:"jev",disabled:!c?.configured,children:"Jev のみ"}),(0,a.jsx)("option",{value:"jev-fallback",disabled:!c?.configured,children:"Jev + CLI 再判定"}),(0,a.jsx)("option",{value:"jev-shadow",disabled:!c?.configured,children:"比較(実際の判定は CLI)"})]})}),(0,a.jsxs)("p",{id:`${s}-mode-help`,className:w,children:[N[l],"方式の変更は、ページ下部の「設定を保存」で反映されます。"]}),n?(0,a.jsxs)("div",{className:"space-y-[var(--space-2)] border-t border-[var(--separator)] pt-[var(--space-3)]",children:[(0,a.jsxs)("p",{className:"text-[length:var(--text-footnote)] text-[var(--text-secondary)]",children:["TypeSafe API キー:",I?"状態を取得できません":c?"stored"===c.source?"保存済み":"environment"===c.source?"環境変数で設定済み":"未設定":"確認中…"]}),(0,a.jsx)("p",{className:w,children:"Jev の利用には API キーが必要です。キーはこの画面から保存でき、保存後は表示されません。すべての Slack インスタンスで共有します。"}),(0,a.jsx)("label",{htmlFor:`${s}-key`,className:"block text-[length:var(--text-footnote)] text-[var(--text-secondary)]",children:c?.configured?"新しい API キー":"API キー"}),(0,a.jsx)("input",{id:`${s}-key`,type:"password",autoComplete:"new-password",spellCheck:!1,value:p,onChange:e=>x(e.target.value),disabled:null!==v,placeholder:c?.configured?"変更する場合だけ入力":"TypeSafe の API キーを入力",className:y}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-[var(--space-2)]",children:[(0,a.jsx)("button",{type:"button",onClick:()=>void A(),disabled:null!==v||!p.trim(),className:f,children:"save"===v?"保存中…":"API キーを保存"}),(0,a.jsx)("button",{type:"button",onClick:()=>void M(),disabled:null!==v||!c?.configured||!!p.trim(),className:f,children:"test"===v?"接続テスト中…":"保存済みキーで接続テスト"}),c?.source==="stored"&&(0,a.jsx)("button",{type:"button",onClick:()=>void F(),disabled:null!==v,className:f,children:"保存したキーを削除"})]}),(0,a.jsx)("p",{className:w,children:"キーの保存・削除はすぐに反映されます。接続テストには固定のサンプル文を使います。"}),g&&(0,a.jsx)("p",{role:g.error?"alert":"status",className:"text-[length:var(--text-footnote)]",style:{color:g.error?"var(--system-red)":"var(--system-green)"},children:g.text})]}):(0,a.jsxs)("p",{className:w,children:["TypeSafe API キーは上の Slack 設定で管理します。",c?.configured?"設定済みです。":"キーを保存すると Jev を選択できます。"]}),o&&c?.configured===!1&&(0,a.jsx)("p",{role:"alert",className:"text-[length:var(--text-footnote)] text-[var(--system-red)]",children:"Jev を使うには、先に API キーを保存してください。"}),o&&(0,a.jsx)(C,{label:"Jev タイムアウト (ms)",id:`${s}-jev-timeout`,children:(0,a.jsx)("input",{id:`${s}-jev-timeout`,type:"number",min:1,max:1e4,value:e.jev?.timeoutMs??"",placeholder:"3000",onChange:a=>r({...e,jev:{...e.jev,timeoutMs:a.target.value?Number(a.target.value):void 0}}),className:y})}),o&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(C,{label:"スキル・担当領域を考慮",id:`${s}-capabilities`,children:(0,a.jsx)("button",{type:"button",id:`${s}-capabilities`,role:"switch","aria-checked":i,"aria-describedby":`${s}-capabilities-help`,onClick:()=>r({...e,jev:{...e.jev,useCapabilities:!i}}),className:"relative block ml-auto w-[44px] h-[24px] rounded-[12px] border-none cursor-pointer",style:{background:i?"var(--system-green)":"var(--fill-primary)"},children:(0,a.jsx)("span",{className:"absolute top-[2px] w-[20px] h-[20px] rounded-full bg-white",style:{left:i?22:2}})})}),(0,a.jsx)("p",{id:`${s}-capabilities-help`,className:w,children:"担当社員の役割と利用可能なスキルから、具体的に手伝える依頼かを判断します。人宛ての会話や雑談には割り込みません。"}),(0,a.jsx)(C,{label:"呼ばれていない時の参加率 (%)",id:`${s}-proactive-percent`,children:(0,a.jsx)("input",{id:`${s}-proactive-percent`,type:"number",min:0,max:100,step:1,disabled:!i,"aria-describedby":`${s}-proactive-help`,value:e.jev?.proactiveParticipationPercent??0,onChange:a=>{let t=Number(a.target.value);Number.isInteger(t)&&t>=0&&t<=100&&r({...e,jev:{...e.jev,proactiveParticipationPercent:t}})},className:y})}),(0,a.jsx)("p",{id:`${s}-proactive-help`,className:w,children:"未解決の困りごとに具体的に役立てる時、呼ばれていなくても提案します。0%で停止、100%で対象の機会すべてに参加。判定の確信度とは別の割合で、名前で呼ばれた時や依頼への応答は減らしません。スキル・担当領域の考慮が必要です。メンション限定のチャンネル設定は優先されます。"})]}),"jev"!==l&&(0,a.jsxs)("div",{className:"border-t border-[var(--separator)] pt-[var(--space-3)]",children:[(0,a.jsx)("p",{className:"text-[length:var(--text-footnote)] text-[var(--text-secondary)]",children:"jev-shadow"===l?"比較に使う CLI モデル":"jev-fallback"===l?"再判定に使う CLI モデル":"CLI モデル"}),(0,a.jsx)(C,{label:"モデルのベンダー",id:`${s}-vendor`,children:(0,a.jsx)("select",{id:`${s}-vendor`,value:e.engine??"codex",className:y,onChange:a=>{let t=a.target.value;r({...e,engine:t,model:(0,u.defaultTriageModelForEngine)(t)})},children:u.TRIAGE_MODEL_VENDORS.map(e=>(0,a.jsx)("option",{value:e.value,children:e.label},e.value))})}),(0,a.jsx)(C,{label:"モデル",id:`${s}-model`,children:(0,a.jsx)(b,{id:`${s}-model`,engine:e.engine??"codex",model:e.model??void 0,allowAutomatic:!0,onChange:a=>r({...e,model:a??null})})}),(0,a.jsx)(C,{label:"CLI タイムアウト (ms)",id:`${s}-cli-timeout`,children:(0,a.jsx)("input",{id:`${s}-cli-timeout`,type:"number",min:1,value:e.timeoutMs??"",placeholder:"30000",className:y,onChange:a=>r({...e,timeoutMs:a.target.value?Number(a.target.value):void 0})})}),(0,a.jsx)(C,{label:"CLI パス(任意)",id:`${s}-bin`,children:(0,a.jsx)("input",{id:`${s}-bin`,value:e.bin??"",placeholder:e.engine??"codex",className:y,onChange:a=>r({...e,bin:a.target.value.trim()||void 0})})})]}),(0,a.jsx)(C,{label:"スレッド文脈の取得件数",id:`${s}-context`,children:(0,a.jsx)("input",{id:`${s}-context`,type:"number",min:1,max:10,value:e.threadContextLimit??"",placeholder:"10",className:y,onChange:a=>r({...e,threadContextLimit:a.target.value?Number(a.target.value):void 0})})}),(0,a.jsx)(C,{label:"ペルソナ(任意)",id:`${s}-persona`,children:(0,a.jsx)("input",{id:`${s}-persona`,value:e.persona??"",placeholder:"このボットの得意分野",className:y,onChange:a=>r({...e,persona:a.target.value||void 0})})})]})}var E=e.i(23414),I=e.i(39331);let T="openryoko-update-notification";function A({connectorOptions:e,defaultConnector:r,defaultChannel:n}){let[s,l]=(0,t.useState)(null),[c,d]=(0,t.useState)({enabled:!1,schedule:"0 9 * * *",timezone:"",connector:r??"",channel:n??"",maintenanceMode:"review"}),[p,x]=(0,t.useState)(!0),[v,m]=(0,t.useState)(!1),[u,g]=(0,t.useState)(!1),[b,j]=(0,t.useState)(null),y=(0,t.useCallback)(()=>{x(!0),h.api.getCronJobs().then(e=>{let a=e.find(e=>e.id===T||"update-notification"===e.kind);a?(l(a),d({enabled:a.enabled,schedule:a.schedule||"0 9 * * *",timezone:a.timezone||Intl.DateTimeFormat().resolvedOptions().timeZone,connector:a.delivery?.connector||r||"",channel:a.delivery?.channel||n||"",maintenanceMode:a.maintenance?.mode??"review"})):d(e=>({...e,timezone:e.timezone||Intl.DateTimeFormat().resolvedOptions().timeZone,connector:e.connector||r||"",channel:e.channel||n||""}))}).catch(e=>{j({type:"error",message:e instanceof Error?e.message:"通知設定を取得できませんでした"})}).finally(()=>x(!1))},[n,r]);(0,t.useEffect)(()=>{y()},[y]);let f=Array.from(new Set([...e,...c.connector?[c.connector]:[]]));async function w(){if(j(null),5!==c.schedule.trim().split(/\s+/).length)return void j({type:"error",message:"Cron式は「分 時 日 月 曜日」の5項目で入力してください"});if(c.enabled&&(!c.connector.trim()||!c.channel.trim()))return void j({type:"error",message:"通知を有効にするにはコネクタと送信先が必要です"});m(!0);let e={id:s?.id||T,name:"OpenRyoko Update Notification",kind:"update-notification",enabled:c.enabled,schedule:c.schedule.trim(),timezone:c.timezone.trim()||void 0,prompt:"",maintenance:{mode:c.maintenanceMode},delivery:c.connector.trim()&&c.channel.trim()?{connector:c.connector.trim(),channel:c.channel.trim()}:void 0};try{let a=s?await h.api.updateCronJob(s.id,e):await h.api.createCronJob(e);l(a),j({type:"success",message:c.enabled?"更新通知と運用点検を保存しました。新しいリリースや未点検の改善候補がある時に結果を知らせます。":"更新通知を無効で保存しました。"})}catch(e){j({type:"error",message:e instanceof Error?e.message:"保存に失敗しました"})}finally{m(!1)}}async function N(){if(s){g(!0),j(null);try{await h.api.triggerCronJob(s.id),j({type:"success",message:"更新確認を開始しました。新しいリリースや未点検の改善候補がある場合にチャットへ届きます。"})}catch(e){j({type:"error",message:e instanceof Error?e.message:"更新確認を開始できませんでした"})}finally{g(!1)}}}async function k(){if(s){g(!0),j(null);try{await h.api.runMaintenance(s.id,"review"),j({type:"success",message:"点検を開始しました。設定を変更せず、改善案を通知先へ送ります。"})}catch(e){j({type:"error",message:e instanceof Error?e.message:"点検を開始できませんでした"})}finally{g(!1)}}}return p?(0,a.jsxs)("div",{className:"flex items-center gap-2 py-3 text-[length:var(--text-caption1)] text-[var(--text-tertiary)]",children:[(0,a.jsx)(i.Loader2,{size:14,className:"animate-spin"}),"更新通知設定を読み込み中…"]}):(0,a.jsxs)("div",{className:"mt-[var(--space-4)] border-t border-[var(--separator)] pt-[var(--space-4)]",children:[(0,a.jsxs)("div",{className:"mb-[var(--space-3)] flex items-start gap-[var(--space-3)]",children:[(0,a.jsx)(E.BellRing,{size:18,className:"mt-0.5 shrink-0 text-[var(--system-blue)]","aria-hidden":"true"}),(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"text-[length:var(--text-footnote)] font-[var(--weight-semibold)] text-[var(--text-primary)]",children:"アップデート通知と運用点検"}),(0,a.jsx)("p",{className:"mt-1 text-[length:var(--text-caption2)] leading-relaxed text-[var(--text-tertiary)]",children:"定期確認はコードで行い、新しいリリースや未点検の改善候補がある時だけAIを起動します。導入済み機能に合わせてCronやJevの利用を点検し、同じ内容の通知は繰り返しません。"})]})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between gap-4 py-2",children:[(0,a.jsx)("label",{htmlFor:"update-notification-enabled",className:"text-[length:var(--text-subheadline)] text-[var(--text-secondary)]",children:"チャット通知"}),(0,a.jsx)("button",{id:"update-notification-enabled",type:"button",role:"switch","aria-checked":c.enabled,onClick:()=>d(e=>({...e,enabled:!e.enabled})),className:"relative h-6 w-11 shrink-0 rounded-full border-none transition-colors",style:{background:c.enabled?"var(--system-green)":"var(--fill-primary)"},children:(0,a.jsx)("span",{className:"absolute top-0.5 h-5 w-5 rounded-full bg-white shadow-sm transition-[left]",style:{left:c.enabled?22:2}})})]}),(0,a.jsxs)("div",{className:"grid gap-[var(--space-3)] pt-2 sm:grid-cols-2",children:[(0,a.jsxs)("label",{className:"text-[length:var(--text-caption1)] text-[var(--text-tertiary)]",children:["Cron式",(0,a.jsx)("input",{value:c.schedule,onChange:e=>d(a=>({...a,schedule:e.target.value})),placeholder:"0 9 * * *",className:"apple-input mt-1 w-full rounded-[var(--radius-sm)] border border-[var(--separator)] bg-[var(--bg-secondary)] px-[10px] py-[6px] font-mono text-[length:var(--text-footnote)] text-[var(--text-primary)]"})]}),(0,a.jsxs)("label",{className:"text-[length:var(--text-caption1)] text-[var(--text-tertiary)]",children:["タイムゾーン",(0,a.jsx)("input",{value:c.timezone,onChange:e=>d(a=>({...a,timezone:e.target.value})),placeholder:"Asia/Tokyo",className:"apple-input mt-1 w-full rounded-[var(--radius-sm)] border border-[var(--separator)] bg-[var(--bg-secondary)] px-[10px] py-[6px] text-[length:var(--text-footnote)] text-[var(--text-primary)]"})]}),(0,a.jsxs)("label",{className:"text-[length:var(--text-caption1)] text-[var(--text-tertiary)]",children:["コネクタ",(0,a.jsxs)("select",{value:c.connector,onChange:e=>d(a=>({...a,connector:e.target.value})),className:"mt-1 w-full rounded-[var(--radius-sm)] border border-[var(--separator)] bg-[var(--bg-secondary)] px-[10px] py-[6px] text-[length:var(--text-footnote)] text-[var(--text-primary)]",children:[(0,a.jsx)("option",{value:"",children:"選択してください"}),f.map(e=>(0,a.jsx)("option",{value:e,children:e},e))]})]}),(0,a.jsxs)("label",{className:"text-[length:var(--text-caption1)] text-[var(--text-tertiary)]",children:["送信先",(0,a.jsx)("input",{value:c.channel,onChange:e=>d(a=>({...a,channel:e.target.value})),placeholder:"#general またはチャンネルID",className:"apple-input mt-1 w-full rounded-[var(--radius-sm)] border border-[var(--separator)] bg-[var(--bg-secondary)] px-[10px] py-[6px] text-[length:var(--text-footnote)] text-[var(--text-primary)]"})]})]}),(0,a.jsxs)("label",{className:"mt-3 block text-[length:var(--text-caption1)] text-[var(--text-tertiary)]",children:["導入済み機能に合わせた運用点検",(0,a.jsxs)("select",{value:c.maintenanceMode,onChange:e=>d(a=>({...a,maintenanceMode:e.target.value})),className:"mt-1 w-full rounded-[var(--radius-sm)] border border-[var(--separator)] bg-[var(--bg-secondary)] px-[10px] py-[6px] text-[length:var(--text-footnote)] text-[var(--text-primary)]",children:[(0,a.jsx)("option",{value:"review",children:"点検・改善案を通知(既定)"}),(0,a.jsx)("option",{value:"apply",children:"検証できるローカル修正も実施"}),(0,a.jsx)("option",{value:"off",children:"運用点検は行わない"})]})]}),(0,a.jsx)("p",{className:"mt-1 text-[length:var(--text-caption2)] leading-relaxed text-[var(--text-tertiary)]",children:"更新確認と同じスケジュール・通知先を使います。自動修正でも、通知先・実行時刻の変更やJevなど外部サービスの新規有効化は提案に留めます。"}),b&&(0,a.jsx)("p",{className:`mt-3 text-[length:var(--text-caption1)] ${"success"===b.type?"text-[var(--system-green)]":"text-[var(--system-red)]"}`,role:"error"===b.type?"alert":"status",children:b.message}),(0,a.jsxs)("div",{className:"mt-[var(--space-3)] flex flex-wrap justify-end gap-[var(--space-2)]",children:[s&&(0,a.jsx)("button",{type:"button",onClick:k,disabled:u||v,className:"rounded-[var(--radius-sm)] border border-[var(--separator)] bg-[var(--fill-tertiary)] px-3 py-1.5 text-[length:var(--text-caption1)] text-[var(--text-secondary)] disabled:opacity-60",children:"点検を実行"}),s&&(0,a.jsxs)("button",{type:"button",onClick:N,disabled:u||v,className:"inline-flex items-center gap-1.5 rounded-[var(--radius-sm)] border border-[var(--separator)] bg-[var(--fill-tertiary)] px-3 py-1.5 text-[length:var(--text-caption1)] font-[var(--weight-medium)] text-[var(--text-secondary)] disabled:opacity-60",children:[u?(0,a.jsx)(i.Loader2,{size:13,className:"animate-spin"}):(0,a.jsx)(I.Play,{size:13}),"今すぐ確認"]}),(0,a.jsxs)("button",{type:"button",onClick:w,disabled:v||u,className:"inline-flex items-center gap-1.5 rounded-[var(--radius-sm)] border-none bg-[var(--accent)] px-3 py-1.5 text-[length:var(--text-caption1)] font-[var(--weight-semibold)] text-[var(--accent-contrast)] disabled:opacity-60",children:[v?(0,a.jsx)(i.Loader2,{size:13,className:"animate-spin"}):(0,a.jsx)(o,{size:13}),"通知設定を保存"]})]})]})}let F=[{label:"Red",value:"#EF4444"},{label:"Orange",value:"#F97316"},{label:"Amber",value:"#F59E0B"},{label:"Yellow",value:"#EAB308"},{label:"Lime",value:"#84CC16"},{label:"Green",value:"#22C55E"},{label:"Emerald",value:"#10B981"},{label:"Cyan",value:"#06B6D4"},{label:"Blue",value:"#3B82F6"},{label:"Indigo",value:"#6366F1"},{label:"Violet",value:"#8B5CF6"},{label:"Pink",value:"#EC4899"}];function M({title:e,children:t}){return(0,a.jsxs)("section",{className:"mb-[var(--space-6)]",children:[(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] font-[var(--weight-semibold)] tracking-[var(--tracking-wide)] uppercase text-[var(--text-tertiary)] px-[var(--space-2)] pb-[var(--space-2)]",children:e}),(0,a.jsx)("div",{className:"bg-[var(--material-regular)] rounded-[var(--radius-md)] border border-[var(--separator)] p-[var(--space-4)]",children:t})]})}function D({label:e,htmlFor:t,children:r}){return(0,a.jsxs)("div",{className:"flex items-center justify-between py-[var(--space-2)] gap-[var(--space-4)]",children:[(0,a.jsx)("label",{htmlFor:t,className:"text-[length:var(--text-subheadline)] text-[var(--text-secondary)] shrink-0",children:e}),(0,a.jsx)("div",{className:"w-[240px] shrink-0",children:r})]})}function O({id:e,value:t,onChange:r,type:n="text",placeholder:s}){return(0,a.jsx)("input",{id:e,type:n,value:t,onChange:e=>r(e.target.value),placeholder:s,className:"apple-input w-full bg-[var(--bg-secondary)] border border-[var(--separator)] rounded-[var(--radius-sm)] px-[10px] py-[6px] text-[length:var(--text-footnote)] text-[var(--text-primary)]"})}function B({id:e,value:t,onChange:r,options:n}){return(0,a.jsx)("select",{id:e,value:t,onChange:e=>r(e.target.value),className:"w-full bg-[var(--bg-secondary)] border border-[var(--separator)] rounded-[var(--radius-sm)] px-[10px] py-[6px] text-[length:var(--text-footnote)] text-[var(--text-primary)] cursor-pointer",children:n.map(e=>(0,a.jsx)("option",{value:e.value,children:e.label},e.value))})}function _({checked:e,onChange:t}){return(0,a.jsx)("button",{role:"switch","aria-checked":e,onClick:()=>t(!e),className:"w-[44px] h-[24px] rounded-[12px] border-none cursor-pointer relative shrink-0 transition-[background] duration-200 ease-[var(--ease-smooth)]",style:{background:e?"var(--system-green)":"var(--fill-primary)"},children:(0,a.jsx)("span",{className:"absolute top-[2px] w-[20px] h-[20px] rounded-full bg-white shadow-[0_1px_3px_rgba(0,0,0,0.2)] transition-[left] duration-200 ease-[var(--ease-spring)]",style:{left:e?22:2}})})}let L={en:"English",bg:"Bulgarian",de:"German",fr:"French",es:"Spanish",it:"Italian",pt:"Portuguese",ru:"Russian",zh:"Chinese",ja:"Japanese",ko:"Korean",ar:"Arabic",hi:"Hindi",tr:"Turkish",pl:"Polish",nl:"Dutch",sv:"Swedish",cs:"Czech",el:"Greek",ro:"Romanian",uk:"Ukrainian",he:"Hebrew",da:"Danish",fi:"Finnish",hu:"Hungarian",no:"Norwegian",sk:"Slovak",hr:"Croatian",ca:"Catalan",th:"Thai",vi:"Vietnamese",id:"Indonesian",ms:"Malay",tl:"Filipino",sr:"Serbian",lt:"Lithuanian",lv:"Latvian",sl:"Slovenian",et:"Estonian"};function $(){let[e,r]=(0,t.useState)(null),[n,s]=(0,t.useState)(!1),[l,o]=(0,t.useState)("");if((0,t.useEffect)(()=>{h.api.sttStatus().then(r).catch(()=>{})},[]),(0,t.useEffect)(()=>{if(!e?.downloading)return;let a=setInterval(()=>{h.api.sttStatus().then(r).catch(()=>{})},1500);return()=>clearInterval(a)},[e?.downloading]),!e)return null;let i=Object.entries(L).filter(([a])=>!e.languages.includes(a)).sort((e,a)=>e[1].localeCompare(a[1]));return(0,a.jsxs)(M,{title:"音声入力",children:[(0,a.jsxs)("div",{className:"flex items-center gap-[var(--space-3)] mb-[var(--space-4)]",children:[(0,a.jsx)("div",{className:"w-[8px] h-[8px] rounded-full shrink-0",style:{background:e.available?"var(--system-green)":"var(--system-red)"}}),(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsx)("div",{className:"text-[length:var(--text-subheadline)] font-[var(--weight-medium)] text-[var(--text-primary)]",children:e.available?`Whisper ${(e.model||"small").charAt(0).toUpperCase()+(e.model||"small").slice(1)}`:"No model installed"}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] text-[var(--text-tertiary)]",children:e.available?"Offline speech recognition ready":"Download a model to enable voice input"})]})]}),!e.available&&!e.downloading&&(0,a.jsx)("button",{onClick:function(){h.api.sttDownload().then(()=>r(e=>e?{...e,downloading:!0,progress:0}:e)).catch(()=>{})},className:"w-full p-[var(--space-3)] rounded-[var(--radius-md)] bg-[var(--accent)] text-[var(--accent-contrast)] border-none cursor-pointer text-[length:var(--text-footnote)] font-[var(--weight-semibold)] mb-[var(--space-4)]",children:"Download Whisper Small (~500MB)"}),e.downloading&&(0,a.jsxs)("div",{className:"mb-[var(--space-4)]",children:[(0,a.jsxs)("div",{className:"flex justify-between mb-[var(--space-2)] text-[length:var(--text-caption1)] text-[var(--text-tertiary)]",children:[(0,a.jsx)("span",{children:"モデルをダウンロード中…"}),(0,a.jsxs)("span",{children:[e.progress,"%"]})]}),(0,a.jsx)("div",{className:"h-[6px] rounded-[3px] bg-[var(--fill-tertiary)] overflow-hidden",children:(0,a.jsx)("div",{className:"h-full rounded-[3px] bg-[var(--accent)] transition-[width] duration-300 ease-out",style:{width:`${e.progress}%`}})})]}),e.available&&(0,a.jsx)(a.Fragment,{children:(0,a.jsxs)("div",{className:"border-t border-[var(--separator)] mt-[var(--space-2)] pt-[var(--space-3)]",children:[(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] font-[var(--weight-semibold)] text-[var(--text-tertiary)] mb-[var(--space-2)]",children:"文字起こし言語"}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption2)] text-[var(--text-tertiary)] mb-[var(--space-3)]",children:"最初の言語がデフォルトになります。複数追加するとチャットで言語ピッカーが表示されます。"}),(0,a.jsx)("div",{className:"flex flex-wrap gap-[var(--space-2)] mb-[var(--space-3)]",children:e.languages.map(t=>(0,a.jsxs)("div",{className:"inline-flex items-center gap-[var(--space-1)] px-[8px] py-[3px] rounded-[var(--radius-sm)] bg-[var(--fill-secondary)] text-[length:var(--text-caption1)] font-[var(--weight-medium)] text-[var(--text-primary)]",children:[(0,a.jsx)("span",{className:"font-[family-name:var(--font-mono)] uppercase text-[length:var(--text-caption2)] font-[var(--weight-semibold)] text-[var(--accent)] mr-[2px]",children:t}),L[t]||t,e.languages.length>1&&(0,a.jsx)("button",{onClick:()=>(function(a){if(!e||e.languages.length<=1)return;let t=e.languages.filter(e=>e!==a);s(!0),h.api.sttUpdateConfig(t).then(()=>r(e=>e?{...e,languages:t}:e)).catch(()=>{}).finally(()=>s(!1))})(t),disabled:n,"aria-label":`Remove ${L[t]||t}`,className:"bg-none border-none cursor-pointer p-0 ml-[2px] text-[var(--text-quaternary)] text-[14px] leading-none flex items-center",children:"×"})]},t))}),(0,a.jsxs)("div",{className:"flex gap-[var(--space-2)]",children:[(0,a.jsxs)("select",{value:l,onChange:e=>o(e.target.value),className:"flex-1 bg-[var(--bg-secondary)] border border-[var(--separator)] rounded-[var(--radius-sm)] px-[10px] py-[6px] text-[length:var(--text-footnote)] cursor-pointer",style:{color:l?"var(--text-primary)":"var(--text-tertiary)"},children:[(0,a.jsx)("option",{value:"",children:"言語を追加…"}),i.map(([e,t])=>(0,a.jsxs)("option",{value:e,children:[e.toUpperCase()," — ",t]},e))]}),(0,a.jsx)("button",{onClick:function(){if(!l||!e||e.languages.includes(l))return;let a=[...e.languages,l];s(!0),o(""),h.api.sttUpdateConfig(a).then(()=>r(e=>e?{...e,languages:a}:e)).catch(()=>{}).finally(()=>s(!1))},disabled:!l||n,className:"px-[14px] py-[6px] rounded-[var(--radius-sm)] border-none text-[length:var(--text-footnote)] font-[var(--weight-semibold)] shrink-0",style:{background:l?"var(--accent)":"var(--fill-tertiary)",color:l?"var(--accent-contrast)":"var(--text-quaternary)",cursor:l?"pointer":"default"},children:"Add"})]})]})})]})}function P(){let e,{settings:r}=(0,d.useSettings)(),[n,s]=(0,t.useState)(!1),[l,o]=(0,t.useState)(!0),i=JSON.stringify({display_information:{name:e=(r.portalName??"").trim()||"Ryoko"},features:{app_home:{messages_tab_enabled:!0,messages_tab_read_only_enabled:!1},bot_user:{display_name:e,always_online:!0},assistant_view:{assistant_description:`${e} — your AI assistant`,suggested_prompts:[{title:"What can you do?",message:"What can you help me with?"}]}},oauth_config:{scopes:{bot:["app_mentions:read","assistant:write","canvases:read","canvases:write","channels:history","channels:read","chat:write","chat:write.customize","files:read","files:write","groups:history","groups:read","im:history","im:read","im:write","mpim:history","mpim:read","mpim:write","reactions:read","reactions:write","users:read","users:read.email"],user:["channels:history","channels:read","files:read","groups:history","groups:read","im:history","im:read","mpim:history","mpim:read","search:read","users:read","bookmarks:read"]}},settings:{event_subscriptions:{bot_events:["app_mention","assistant_thread_context_changed","assistant_thread_started","message.channels","message.groups","message.im","message.mpim","reaction_added"]},interactivity:{is_enabled:!0},socket_mode_enabled:!0}},null,2);return(0,a.jsxs)("div",{className:"border border-[var(--separator)] rounded-[var(--radius-md)] bg-[var(--fill-quaternary)] p-[var(--space-3)] mb-[var(--space-3)]",children:[(0,a.jsxs)("button",{type:"button",onClick:()=>o(e=>!e),className:"flex items-center justify-between w-full text-left cursor-pointer",children:[(0,a.jsx)("span",{className:"text-[length:var(--text-body)] font-[var(--weight-semibold)] text-[var(--text-primary)]",children:"Slack App セットアップガイド"}),(0,a.jsx)("span",{className:"text-[length:var(--text-caption1)] text-[var(--text-tertiary)]",children:l?"閉じる":"開く"})]}),l&&(0,a.jsxs)("div",{className:"mt-[var(--space-3)]",children:[(0,a.jsxs)("ol",{className:"list-decimal pl-[20px] text-[length:var(--text-caption1)] text-[var(--label-secondary)] leading-relaxed mb-[var(--space-3)] space-y-[2px]",children:[(0,a.jsxs)("li",{children:[(0,a.jsx)("a",{href:"https://api.slack.com/apps",target:"_blank",rel:"noopener noreferrer",className:"text-[var(--accent)] underline",children:"Slack API の Your Apps ページ"}),"を開き、「Create New App」を選択。"]}),(0,a.jsx)("li",{children:"「From a manifest」を選び、対象ワークスペースを指定。"}),(0,a.jsx)("li",{children:"下のJSONをコピーして貼り付け、「Create」で作成。"}),(0,a.jsxs)("li",{children:["「Install to Workspace」を実行し、OAuth & Permissions の「Bot User OAuth Token」(",(0,a.jsx)("code",{children:"xoxb-…"}),")を下の Bot Token に貼り付け。"]}),(0,a.jsxs)("li",{children:["「Basic Information」→「App-Level Tokens」で ",(0,a.jsx)("code",{children:"connections:write"})," ","スコープ付きトークンを発行し(",(0,a.jsx)("code",{children:"xapp-…"}),")、下の App Token に貼り付け。"]})]}),(0,a.jsxs)("div",{className:"text-[length:var(--text-caption1)] text-[var(--label-secondary)] leading-relaxed mb-[var(--space-3)]",children:[(0,a.jsx)("p",{className:"font-[var(--weight-semibold)] text-[var(--text-primary)]",children:"既存アプリで Canvas を使う場合"}),(0,a.jsx)("p",{children:"対象アプリの「App Manifest」に下のJSONを貼り付けて保存し、 「OAuth & Permissions」から「Reinstall to Workspace」を実行してください。 Manifest の保存だけでは、発行済みトークンの権限は増えません。 Bot Token が変わった場合は、この画面でも更新して保存してください。"}),(0,a.jsx)("p",{className:"mt-[var(--space-1)]",children:"このJSONには Canvas の読み書き権限が含まれています。 表示先の専用チャンネルにBotを招待し、下の「Agents View Canvas」を有効化してください。 既存 Canvas を使う場合は、Bot が編集できることも確認してください。"})]}),(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsx)("button",{type:"button",onClick:function(){navigator.clipboard.writeText(i).then(()=>{s(!0),setTimeout(()=>s(!1),1500)})},"aria-label":"Copy manifest JSON",className:"absolute top-2 right-2 py-0.5 px-2 text-[11px] rounded-[var(--radius-sm)] bg-[var(--fill-secondary)] text-[var(--text-secondary)] border border-[var(--separator)] cursor-pointer",children:n?"コピー済み":"コピー"}),(0,a.jsx)("pre",{className:"bg-[var(--fill-tertiary)] border border-[var(--separator)] rounded-[var(--radius-md)] py-[var(--space-3)] px-[var(--space-4)] overflow-x-auto text-[12px] leading-normal font-['SF_Mono',Menlo,monospace] text-[var(--text-primary)] max-h-[280px]",children:(0,a.jsx)("code",{children:i})})]})]})]})}e.s(["default",0,function(){(0,p.useBreadcrumbs)([{label:"Settings"}]);let{settings:e,setAccentColor:r,setPortalName:g,setPortalSubtitle:j,setOperatorName:y,setPortalEmoji:f,setLanguage:w,resetAll:N}=(0,d.useSettings)(),{theme:k,setTheme:C}=(0,x.useTheme)(),[E,I]=(0,t.useState)(e.portalName??""),[T,L]=(0,t.useState)(e.portalSubtitle??""),[z,R]=(0,t.useState)(e.operatorName??""),[J,U]=(0,t.useState)(e.portalEmoji??""),[W,G]=(0,t.useState)(e.language??"English"),[V,H]=(0,t.useState)(e.accentColor??""),[q,K]=(0,t.useState)(!1),[Y,Q]=(0,t.useState)({}),[Z,X]=(0,t.useState)(!0),[ee,ea]=(0,t.useState)(null),[et,er]=(0,t.useState)(!1),[en,es]=(0,t.useState)(null),[el,eo]=(0,t.useState)(null),[ei,ec]=(0,t.useState)("unknown"),[ed,ep]=(0,t.useState)([]),[ex,ev]=(0,t.useState)(null),[eh,em]=(0,t.useState)(!1),[eu,eg]=(0,t.useState)(null);(0,t.useEffect)(()=>{h.api.getOrg().then(e=>{e?.employees&&ep(e.employees.map(e=>"string"==typeof e?{name:e,displayName:e}:{name:e.name,displayName:e.displayName||e.name}))}).catch(()=>{})},[]);let eb=async()=>{em(!0),eg(null);try{let e=await fetch("/api/connectors/slack/channels"),a=await e.json();if(a?.ok)ev(a.channels??[]);else{let t=a?.error||`HTTP ${e.status}`;"missing_scope"===t?eg("Bot にチャンネル一覧の権限(channels:read / groups:read)が足りません。上のSlack App Manifestを貼り直して再インストールしてください。"):"slack_not_configured"===t?eg("Slack コネクタが未起動です。先に Bot Token / App Token を保存して再起動してください。"):eg(`チャンネル取得失敗: ${t}`),ev(null)}}catch(e){eg(e instanceof Error?e.message:String(e)),ev(null)}finally{em(!1)}};function ej(){X(!0),h.api.getConfig().then(e=>{Q(e),ea(null)}).catch(e=>ea(e.message)).finally(()=>X(!1))}function ey(e,a){Q(t=>{let r=structuredClone(t),n=r;for(let a=0;a<e.length-1;a++)n[e[a]]&&"object"==typeof n[e[a]]||(n[e[a]]={}),n=n[e[a]];return n[e[e.length-1]]=a,"max"!==n.effortLevel||("engines.codex.model"!==e.join(".")||(0,u.codexEffortOptionsForModel)(String(a)).some(e=>"max"===e.value))&&("engines.claude.model"!==e.join(".")||(0,u.claudeEffortOptionsForModel)(String(a)).some(e=>"max"===e.value))||(n.effortLevel="default"),r})}(0,t.useEffect)(()=>{I(e.portalName??""),L(e.portalSubtitle??""),R(e.operatorName??""),U(e.portalEmoji??""),G(e.language??"English"),H(e.accentColor??"")},[e.portalName,e.portalSubtitle,e.operatorName,e.portalEmoji,e.language,e.accentColor]),(0,t.useEffect)(()=>{ej()},[]),(0,t.useEffect)(()=>{if(!Y.connectors?.whatsapp)return;let e=!1;async function a(){try{let a=await fetch("/api/status"),t=await a.json(),r=t?.connectors?.whatsapp?.status;if(e||ec(r??"unknown"),"qr_pending"===r){let a=await fetch("/api/connectors/whatsapp/qr"),t=await a.json();e||eo(t.qr)}else e||eo(null)}catch{}}a();let t=setInterval(()=>{a()},1e4);return()=>{e=!0,clearInterval(t)}},[Y.connectors?.whatsapp]);let ef=Y.engines?.default==="codex"?"codex":Y.engines?.default==="gemini"?"gemini":"claude";return(0,a.jsx)(c.PageLayout,{children:(0,a.jsx)("div",{className:"h-full overflow-y-auto bg-[var(--bg)]",children:(0,a.jsxs)("div",{className:"max-w-[640px] mx-auto px-[var(--space-4)] py-[var(--space-6)] pb-[var(--space-12)]",children:[(0,a.jsx)("h1",{className:"text-[length:var(--text-title1)] font-[var(--weight-bold)] tracking-[var(--tracking-tight)] text-[var(--text-primary)] mb-[var(--space-6)]",children:"Settings"}),(0,a.jsxs)(M,{title:"外観",children:[(0,a.jsx)("div",{className:"text-[length:var(--text-footnote)] font-[var(--weight-medium)] text-[var(--text-secondary)] mb-[var(--space-2)]",children:"Theme"}),(0,a.jsx)("div",{className:"grid grid-cols-5 gap-[var(--space-2)] mb-[var(--space-4)]",children:v.THEMES.map(e=>{let t=k===e.id;return(0,a.jsxs)("button",{onClick:()=>C(e.id),className:"flex flex-col items-center gap-[var(--space-1)] px-[var(--space-2)] py-[var(--space-3)] rounded-[var(--radius-md)] bg-[var(--fill-quaternary)] cursor-pointer transition-all duration-150 ease-[var(--ease-smooth)]",style:{border:t?"2px solid var(--accent)":"2px solid var(--separator)"},children:[(0,a.jsx)("span",{className:"text-[24px]",children:e.emoji}),(0,a.jsx)("span",{className:"text-[length:var(--text-caption2)]",style:{fontWeight:t?"var(--weight-semibold)":"var(--weight-medium)",color:t?"var(--accent)":"var(--text-secondary)"},children:e.label})]},e.id)})}),(0,a.jsx)("div",{className:"text-[length:var(--text-footnote)] font-[var(--weight-medium)] text-[var(--text-secondary)] mb-[var(--space-2)]",children:"Accent Color"}),(0,a.jsx)("div",{className:"flex flex-wrap gap-[var(--space-2)] mb-[var(--space-3)]",children:F.map(t=>{let n=e.accentColor===t.value;return(0,a.jsx)("button",{onClick:()=>r(t.value),"aria-label":t.label,title:t.label,className:"w-[32px] h-[32px] rounded-full cursor-pointer transition-all duration-100 ease-[var(--ease-smooth)] flex items-center justify-center",style:{background:t.value,border:n?"2px solid var(--text-primary)":"2px solid transparent",outline:n?`2px solid ${t.value}`:"none",outlineOffset:2},children:n&&(0,a.jsx)(l.Check,{size:14,color:"#fff",strokeWidth:3})},t.value)})}),(0,a.jsxs)("div",{className:"flex items-center gap-[var(--space-3)]",children:[(0,a.jsxs)("label",{className:"flex items-center gap-[var(--space-2)] text-[length:var(--text-footnote)] text-[var(--text-secondary)] cursor-pointer",children:["Custom:",(0,a.jsx)("input",{type:"color",value:e.accentColor??"#3B82F6",onChange:e=>r(e.target.value),className:"w-[28px] h-[28px] border-none rounded-full cursor-pointer bg-transparent p-0"})]}),(0,a.jsx)("input",{type:"text",placeholder:"#3B82F6",value:V,onChange:e=>{H(e.target.value),/^#[0-9a-fA-F]{6}$/.test(e.target.value)&&r(e.target.value)},className:"apple-input w-[90px] px-[8px] py-[4px] text-[length:var(--text-caption1)] bg-[var(--bg-secondary)] border border-[var(--separator)] rounded-[var(--radius-sm)] text-[var(--text-primary)] font-mono"}),e.accentColor&&(0,a.jsxs)("button",{onClick:()=>r(null),className:"text-[length:var(--text-footnote)] text-[var(--system-blue)] bg-none border-none cursor-pointer p-0 inline-flex items-center gap-[4px]",children:[(0,a.jsx)(n,{size:12}),"リセット"]})]})]}),(0,a.jsx)(M,{title:"COO絵文字",children:(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] text-[var(--text-tertiary)] mb-[var(--space-3)]",children:"サイドバーに表示される COO の絵文字を選択してください。"}),(0,a.jsxs)("div",{className:"relative flex items-center gap-[var(--space-4)]",children:[(0,a.jsx)("button",{onClick:()=>K(!q),className:"text-4xl cursor-pointer bg-transparent border-none p-0",children:e.portalEmoji??"🧞"}),(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"text-[length:var(--text-body)] font-[var(--weight-semibold)] text-[var(--text-primary)]",children:e.operatorName||"Jimbo"}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] text-[var(--text-tertiary)]",children:"絵文字をクリックして変更"})]}),q&&(0,a.jsx)(m.EmojiPicker,{current:e.portalEmoji??"🧞",onSelect:e=>{f(e),K(!1)},onClose:()=>K(!1)})]})]})}),(0,a.jsx)(M,{title:"ブランディング",children:(0,a.jsxs)("div",{className:"flex flex-col gap-[var(--space-3)]",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"block text-[length:var(--text-caption1)] text-[var(--text-tertiary)] mb-[var(--space-1)]",children:"Portal Name"}),(0,a.jsx)("input",{type:"text",className:"apple-input w-full bg-[var(--bg-secondary)] border border-[var(--separator)] rounded-[var(--radius-sm)] px-[10px] py-[6px] text-[length:var(--text-footnote)] text-[var(--text-primary)]",placeholder:"Jinn",value:E,onChange:e=>I(e.target.value),onBlur:()=>{g(E||null),h.api.completeOnboarding({portalName:E||void 0}).catch(()=>{})}})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"block text-[length:var(--text-caption1)] text-[var(--text-tertiary)] mb-[var(--space-1)]",children:"Portal Subtitle"}),(0,a.jsx)("input",{type:"text",className:"apple-input w-full bg-[var(--bg-secondary)] border border-[var(--separator)] rounded-[var(--radius-sm)] px-[10px] py-[6px] text-[length:var(--text-footnote)] text-[var(--text-primary)]",placeholder:"Command Centre",value:T,onChange:e=>L(e.target.value),onBlur:()=>j(T||null)})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"block text-[length:var(--text-caption1)] text-[var(--text-tertiary)] mb-[var(--space-1)]",children:"Operator Name"}),(0,a.jsx)("input",{type:"text",className:"apple-input w-full bg-[var(--bg-secondary)] border border-[var(--separator)] rounded-[var(--radius-sm)] px-[10px] py-[6px] text-[length:var(--text-footnote)] text-[var(--text-primary)]",placeholder:"Your Name",value:z,onChange:e=>R(e.target.value),onBlur:()=>{y(z||null),h.api.completeOnboarding({operatorName:z||void 0}).catch(()=>{})}})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"block text-[length:var(--text-caption1)] text-[var(--text-tertiary)] mb-[var(--space-1)]",children:"Portal Emoji"}),(0,a.jsx)("input",{type:"text",className:"apple-input w-[80px] text-center text-[length:var(--text-title2)] px-[8px] py-[6px] bg-[var(--bg-secondary)] border border-[var(--separator)] rounded-[var(--radius-sm)]",placeholder:"\\ud83e\\uddde",value:J,onChange:e=>U(e.target.value),onBlur:()=>f(J||null)})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"block text-[length:var(--text-caption1)] text-[var(--text-tertiary)] mb-[var(--space-1)]",children:"Language"}),(0,a.jsxs)("select",{value:W,onChange:e=>G(e.target.value),onBlur:()=>{w(W||"English"),h.api.completeOnboarding({language:W||void 0}).catch(()=>{})},className:"w-full bg-[var(--bg-secondary)] border border-[var(--separator)] rounded-[var(--radius-sm)] px-[10px] py-[6px] text-[length:var(--text-footnote)] text-[var(--text-primary)] cursor-pointer",children:[(0,a.jsx)("option",{value:"English",children:"English"}),(0,a.jsx)("option",{value:"Spanish",children:"Spanish"}),(0,a.jsx)("option",{value:"French",children:"French"}),(0,a.jsx)("option",{value:"German",children:"German"}),(0,a.jsx)("option",{value:"Portuguese",children:"Portuguese"}),(0,a.jsx)("option",{value:"Italian",children:"Italian"}),(0,a.jsx)("option",{value:"Dutch",children:"Dutch"}),(0,a.jsx)("option",{value:"Russian",children:"Russian"}),(0,a.jsx)("option",{value:"Chinese",children:"Chinese"}),(0,a.jsx)("option",{value:"Japanese",children:"Japanese"}),(0,a.jsx)("option",{value:"Korean",children:"Korean"}),(0,a.jsx)("option",{value:"Arabic",children:"Arabic"}),(0,a.jsx)("option",{value:"Hindi",children:"Hindi"}),(0,a.jsx)("option",{value:"Bulgarian",children:"Bulgarian"})]})]})]})}),en&&(0,a.jsx)("div",{className:"mb-[var(--space-4)] px-[var(--space-4)] py-[var(--space-3)] rounded-[var(--radius-md)] text-[length:var(--text-footnote)]",style:{background:"success"===en.type?"rgba(34,197,94,0.1)":"rgba(239,68,68,0.1)",border:`1px solid ${"success"===en.type?"rgba(34,197,94,0.3)":"rgba(239,68,68,0.3)"}`,color:"success"===en.type?"var(--system-green)":"var(--system-red)"},children:en.message}),Z?(0,a.jsxs)("div",{className:"text-center p-[var(--space-8)] text-[var(--text-tertiary)] text-[length:var(--text-footnote)]",children:[(0,a.jsx)(i.Loader2,{size:20,className:"mx-auto mb-[var(--space-2)] animate-spin"}),"Loading gateway config..."]}):ee?(0,a.jsxs)("div",{className:"mb-[var(--space-6)] px-[var(--space-4)] py-[var(--space-3)] rounded-[var(--radius-md)] text-[length:var(--text-footnote)] text-[var(--system-red)]",style:{background:"rgba(239,68,68,0.1)",border:"1px solid rgba(239,68,68,0.3)"},children:["Failed to load config: ",ee]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(M,{title:"ゲートウェイ設定",children:[(0,a.jsx)(D,{label:"Port",children:(0,a.jsx)(O,{type:"number",value:String(Y.gateway?.port??""),onChange:e=>ey(["gateway","port"],Number(e)||0),placeholder:"7777"})}),(0,a.jsx)(D,{label:"Host",children:(0,a.jsx)(O,{value:Y.gateway?.host??"",onChange:e=>ey(["gateway","host"],e),placeholder:"127.0.0.1"})}),(0,a.jsx)(D,{label:"既定モデルのベンダー",htmlFor:"default-model-vendor",children:(0,a.jsx)(B,{id:"default-model-vendor",value:ef,onChange:e=>{ey(["engines","default"],e),Y.engines?.[e]?.model||ey(["engines",e,"model"],(0,u.defaultModelForEngine)(e)),"gemini"!==e||Y.engines?.gemini?.bin||ey(["engines","gemini","bin"],"gemini")},options:u.MODEL_VENDORS})}),(0,a.jsx)(D,{label:"既定モデル",htmlFor:"default-model",children:(0,a.jsx)(b,{id:"default-model",engine:ef,model:Y.engines?.[ef]?.model??(0,u.defaultModelForEngine)(ef),onChange:e=>ey(["engines",ef,"model"],e??(0,u.defaultModelForEngine)(ef))})})]}),(0,a.jsxs)(M,{title:"モデルの自動追従",children:[(0,a.jsx)("a",{href:"/models",className:"text-sm underline",children:"モデル一覧・更新方針・社員と定期実行の固定設定を管理する"}),(0,a.jsx)(D,{label:"管理者Slack ID",htmlFor:"operator-slack-id",children:(0,a.jsx)(O,{id:"operator-slack-id",value:Y.portal?.operatorSlackId??"",onChange:e=>ey(["portal","operatorSlackId"],e),placeholder:"U0123456789"})})]}),(0,a.jsxs)(M,{title:"エンジン設定",children:[(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] font-[var(--weight-semibold)] text-[var(--text-tertiary)] mb-[var(--space-2)]",children:"Claude"}),(0,a.jsx)(D,{label:"Binary Path",children:(0,a.jsx)(O,{value:Y.engines?.claude?.bin??"",onChange:e=>ey(["engines","claude","bin"],e),placeholder:"claude"})}),(0,a.jsx)(D,{label:"Model",htmlFor:"claude-engine-model",children:(0,a.jsx)(b,{id:"claude-engine-model",engine:"claude",model:Y.engines?.claude?.model??(0,u.defaultModelForEngine)("claude"),onChange:e=>ey(["engines","claude","model"],e??(0,u.defaultModelForEngine)("claude"))})}),(0,a.jsx)(D,{label:"Effort Level",children:(0,a.jsx)(B,{value:Y.engines?.claude?.effortLevel??"default",onChange:e=>ey(["engines","claude","effortLevel"],e),options:(0,u.claudeEffortOptionsForModel)(Y.engines?.claude?.model)})}),(0,a.jsx)(D,{label:"インタラクティブPTY",children:(0,a.jsx)(_,{checked:Y.engines?.claude?.interactive??!1,onChange:e=>ey(["engines","claude","interactive"],e)})}),(0,a.jsxs)("div",{className:"text-[length:var(--text-caption1)] text-[var(--label-secondary)] mt-[4px]",children:["有効にすると Claude の作業ターンを PTY(cc_entrypoint=cli)で実行します。 認証方法・課金・利用上限は、CLI にログインしたアカウントとプロバイダーの条件に従います。 SSH リモート実行の従業員は headless ",(0,a.jsx)("code",{children:"claude -p"})," にフォールバックします。",(0,a.jsx)("strong",{children:"変更の反映にはゲートウェイの再起動が必要です"}),"(保存後に ",(0,a.jsx)("code",{children:"ryoko stop && ryoko start"})," など)。"]}),(0,a.jsx)("div",{className:"border-t border-[var(--separator)] mt-[var(--space-3)] pt-[var(--space-3)]"}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] font-[var(--weight-semibold)] text-[var(--text-tertiary)] mb-[var(--space-2)]",children:"Codex"}),(0,a.jsx)(D,{label:"Binary Path",children:(0,a.jsx)(O,{value:Y.engines?.codex?.bin??"",onChange:e=>ey(["engines","codex","bin"],e),placeholder:"codex"})}),(0,a.jsx)(D,{label:"Model",htmlFor:"codex-engine-model",children:(0,a.jsx)(b,{id:"codex-engine-model",engine:"codex",model:Y.engines?.codex?.model??(0,u.defaultModelForEngine)("codex"),onChange:e=>ey(["engines","codex","model"],e??(0,u.defaultModelForEngine)("codex"))})}),(0,a.jsx)(D,{label:"Effort Level",children:(0,a.jsx)(B,{value:Y.engines?.codex?.effortLevel??"default",onChange:e=>ey(["engines","codex","effortLevel"],e),options:(0,u.codexEffortOptionsForModel)(Y.engines?.codex?.model)})}),(0,a.jsx)("div",{className:"border-t border-[var(--separator)] mt-[var(--space-3)] pt-[var(--space-3)]"}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] font-[var(--weight-semibold)] text-[var(--text-tertiary)] mb-[var(--space-2)]",children:"Gemini"}),(0,a.jsx)(D,{label:"Binary Path",children:(0,a.jsx)(O,{value:Y.engines?.gemini?.bin??"",onChange:e=>ey(["engines","gemini","bin"],e),placeholder:"gemini"})}),(0,a.jsx)(D,{label:"Model",htmlFor:"gemini-engine-model",children:(0,a.jsx)(b,{id:"gemini-engine-model",engine:"gemini",model:Y.engines?.gemini?.model??(0,u.defaultModelForEngine)("gemini"),onChange:e=>{ey(["engines","gemini","model"],e??(0,u.defaultModelForEngine)("gemini")),Y.engines?.gemini?.bin||ey(["engines","gemini","bin"],"gemini")}})})]}),(0,a.jsxs)(M,{title:"セッション",children:[(0,a.jsx)(D,{label:"新規メッセージで中断",children:(0,a.jsx)(_,{checked:Y.sessions?.interruptOnNewMessage??!0,onChange:e=>ey(["sessions","interruptOnNewMessage"],e)})}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] text-[var(--label-secondary)] mt-[4px]",children:"有効にすると、実行中のセッションに新しいメッセージを送ると現在のエージェントを停止し、 すぐに新しいメッセージの処理を開始します。無効時はメッセージはキューに入ります。"}),(0,a.jsx)("div",{className:"border-t border-[var(--separator)] mt-[var(--space-3)] pt-[var(--space-3)]"}),(0,a.jsx)(D,{label:"利用上限・無応答時の動作",children:(0,a.jsx)(B,{value:Y.sessions?.rateLimitStrategy??"fallback",onChange:e=>ey(["sessions","rateLimitStrategy"],e),options:[{value:"wait",label:"切り替えず、利用上限の解除を待つ"},{value:"fallback",label:"もう一方のエンジンに切り替え"}]})}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] text-[var(--label-secondary)] mt-[4px]",children:"「切り替え」は Claude または Codex が利用上限に達したり応答しなくなった時に、 もう一方で処理を続けます。「待機」は利用上限の解除を待って自動再開し、 無応答時はエラーとして終了します。"})]}),(0,a.jsxs)(M,{title:"コネクタ",children:[(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] font-[var(--weight-semibold)] text-[var(--text-tertiary)] mb-[var(--space-2)]",children:"Slack"}),(0,a.jsx)(P,{}),(0,a.jsx)(D,{label:"App Token",children:(0,a.jsx)(O,{type:"password",value:Y.connectors?.slack?.appToken??"",onChange:e=>ey(["connectors","slack","appToken"],e),placeholder:"xapp-..."})}),(0,a.jsxs)("div",{className:"text-[length:var(--text-caption2)] text-[var(--text-tertiary)] mt-[-4px] mb-[var(--space-2)] pl-[var(--space-1)]",children:["Basic Information → App-Level Tokens で発行したトークン(",(0,a.jsx)("code",{children:"xapp-…"}),")。"]}),(0,a.jsx)(D,{label:"Bot Token",children:(0,a.jsx)(O,{type:"password",value:Y.connectors?.slack?.botToken??"",onChange:e=>ey(["connectors","slack","botToken"],e),placeholder:"xoxb-..."})}),(0,a.jsxs)("div",{className:"text-[length:var(--text-caption2)] text-[var(--text-tertiary)] mt-[-4px] mb-[var(--space-2)] pl-[var(--space-1)]",children:["ワークスペースにインストール後の OAuth & Permissions → Bot User OAuth Token(",(0,a.jsx)("code",{children:"xoxb-…"}),")。"]}),(0,a.jsx)(D,{label:"チャンネルでセッションを共有",children:(0,a.jsx)(_,{checked:Y.connectors?.slack?.shareSessionInChannel??!1,onChange:e=>ey(["connectors","slack","shareSessionInChannel"],e)})}),(0,a.jsx)(D,{label:"許可ユーザー",children:(0,a.jsx)(O,{value:Array.isArray(Y.connectors?.slack?.allowFrom)?Y.connectors?.slack?.allowFrom?.join(", "):Y.connectors?.slack?.allowFrom??"",onChange:e=>ey(["connectors","slack","allowFrom"],e.trim()?e.split(",").map(e=>e.trim()).filter(Boolean):void 0),placeholder:"U123, U456"})}),(0,a.jsx)(D,{label:"起動時に古いメッセージを無視",children:(0,a.jsx)(_,{checked:Y.connectors?.slack?.ignoreOldMessagesOnBoot??!0,onChange:e=>ey(["connectors","slack","ignoreOldMessagesOnBoot"],e)})}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] font-[var(--weight-semibold)] text-[var(--text-tertiary)] mt-[var(--space-3)] mb-[var(--space-2)]",children:"応答ゲート(respondTo)"}),["im","mpim","channel"].map(e=>(0,a.jsx)(D,{label:"im"===e?"DM(1対1)":"mpim"===e?"グループDM":"チャンネル",children:(0,a.jsx)(B,{value:Y.connectors?.slack?.respondTo?.[e]??"always",onChange:a=>ey(["connectors","slack","respondTo",e],a),options:[{value:"always",label:"常に応答"},{value:"mention",label:"@メンション時のみ"},{value:"never",label:"応答しない"}]})},e)),(0,a.jsx)(D,{label:"参加済みスレッドは再メンション不要",children:(0,a.jsx)(_,{checked:Y.connectors?.slack?.respondTo?.engagedThreads??!0,onChange:e=>ey(["connectors","slack","respondTo","engagedThreads"],e)})}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] font-[var(--weight-semibold)] text-[var(--text-tertiary)] mt-[var(--space-3)] mb-[var(--space-2)]",children:"空気読みトリアージ"}),(0,a.jsx)(S,{config:Y.connectors?.slack?.triage,onChange:e=>ey(["connectors","slack","triage"],e)}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] font-[var(--weight-semibold)] text-[var(--text-tertiary)] mt-[var(--space-3)] mb-[var(--space-2)]",children:"Goal 判定"}),(0,a.jsx)(D,{label:"有効化",children:(0,a.jsx)(_,{checked:Y.connectors?.slack?.goalExtraction?.enabled??!0,onChange:e=>{ey(["connectors","slack","goalExtraction","enabled"],e),e&&!Y.connectors?.slack?.goalExtraction?.engine&&ey(["connectors","slack","goalExtraction","engine"],"codex")}})}),(0,a.jsx)(D,{label:"モデルのベンダー",htmlFor:"goal-model-vendor",children:(0,a.jsx)(B,{id:"goal-model-vendor",value:Y.connectors?.slack?.goalExtraction?.engine??"codex",onChange:e=>{ey(["connectors","slack","goalExtraction","engine"],e),ey(["connectors","slack","goalExtraction","model"],null)},options:u.TRIAGE_MODEL_VENDORS})}),(0,a.jsx)(D,{label:"モデル",htmlFor:"goal-model",children:(0,a.jsx)(b,{id:"goal-model",engine:Y.connectors?.slack?.goalExtraction?.engine??"codex",model:Y.connectors?.slack?.goalExtraction?.model,allowAutomatic:!0,onChange:e=>ey(["connectors","slack","goalExtraction","model"],e??null)})}),(0,a.jsx)(D,{label:"タイムアウト (ms)",children:(0,a.jsx)(O,{type:"number",value:Y.connectors?.slack?.goalExtraction?.timeoutMs!==void 0?String(Y.connectors.slack.goalExtraction.timeoutMs):"",onChange:e=>ey(["connectors","slack","goalExtraction","timeoutMs"],e.trim()?Number(e):void 0),placeholder:"30000"})}),(0,a.jsx)(D,{label:"バイナリパス上書き(任意)",children:(0,a.jsx)(O,{value:Y.connectors?.slack?.goalExtraction?.bin??"",onChange:e=>ey(["connectors","slack","goalExtraction","bin"],e.trim()||void 0),placeholder:"codex"})}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] font-[var(--weight-semibold)] text-[var(--text-tertiary)] mt-[var(--space-3)] mb-[var(--space-2)]",children:"Agents View Canvas"}),Y.connectors?.slack?.appToken&&Y.connectors?.slack?.botToken&&!Y.connectors?.slack?.agentsCanvas?.enabled&&(0,a.jsxs)("div",{className:"mx-[var(--space-2)] mb-[var(--space-3)] p-[var(--space-3)] rounded-[var(--radius-md)] border border-[var(--accent-fill)] bg-[color-mix(in_srgb,var(--accent-fill)_30%,transparent)]",children:[(0,a.jsx)("div",{className:"text-[length:var(--text-subheadline)] font-[var(--weight-semibold)] text-[var(--text-primary)] mb-[var(--space-1)]",children:"💡 Slack 連携済みです — Canvas も有効化してみませんか?"}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] text-[var(--text-secondary)]",children:"いま動いている全 Ryoko セッションが Slack の Canvas タブにライブ表示されます。 上のセットアップガイドでアプリの権限を更新し、Botを招待した専用チャンネルを選んで保存してください。"})]}),(0,a.jsxs)("p",{className:"text-[length:var(--text-caption1)] text-[var(--text-secondary)] mb-[var(--space-2)] px-[var(--space-2)]",children:["今動いている Ryoko のセッション一覧(running / waiting / errored / idle) を Slack の Canvas に自動同期します。上のコピー用 Manifest は、Bot の",(0,a.jsx)("code",{className:"mx-1 text-[var(--accent)]",children:"canvases:write"}),"と",(0,a.jsx)("code",{className:"mx-1 text-[var(--accent)]",children:"canvases:read"}),"を含みます。既存アプリは Manifest の更新後に再インストールしてください。 対象 Canvas の編集権限も必要です。"]}),(0,a.jsx)("p",{className:"text-[length:var(--text-caption1)] text-[var(--text-secondary)] mb-[var(--space-2)] px-[var(--space-2)]",children:"既存のチャンネル Canvas は内容全体がセッション一覧に置き換わります。専用チャンネルを選んでください。 チャンネル未指定時は独立した Canvas を作成しますが、Slack のプランによっては作成・編集できません。"}),(0,a.jsx)(D,{label:"有効化",children:(0,a.jsx)(_,{checked:Y.connectors?.slack?.agentsCanvas?.enabled??!1,onChange:e=>ey(["connectors","slack","agentsCanvas","enabled"],e)})}),(0,a.jsx)(D,{label:"表示先チャンネル",children:(0,a.jsxs)("div",{className:"flex w-full gap-[var(--space-2)] items-center",children:[ex&&ex.length>0?(0,a.jsxs)("select",{className:"flex-1 bg-[var(--surface-secondary)] border border-[var(--separator)] rounded-[var(--radius-control)] px-[var(--space-3)] py-[var(--space-2)] text-[length:var(--text-body)]",value:Y.connectors?.slack?.agentsCanvas?.channelId??"",onChange:e=>ey(["connectors","slack","agentsCanvas","channelId"],e.target.value||void 0),children:[(0,a.jsx)("option",{value:"",children:"— 選択してください —"}),ex.map(e=>(0,a.jsxs)("option",{value:e.id,children:[e.isPrivate?"🔒 ":"#",e.name]},e.id))]}):(0,a.jsx)(O,{value:Y.connectors?.slack?.agentsCanvas?.channelId??"",onChange:e=>ey(["connectors","slack","agentsCanvas","channelId"],e.trim()||void 0),placeholder:"C01234ABCDE — bot が member のチャンネル"}),(0,a.jsx)("button",{type:"button",onClick:eb,disabled:eh,className:"px-[var(--space-3)] py-[var(--space-2)] text-[length:var(--text-caption1)] bg-[var(--surface-secondary)] border border-[var(--separator)] rounded-[var(--radius-control)] hover:bg-[var(--surface-tertiary)] disabled:opacity-50",children:eh?(0,a.jsx)(i.Loader2,{className:"h-4 w-4 animate-spin"}):ex?"更新":"読み込み"})]})}),eu?(0,a.jsx)("p",{className:"text-[length:var(--text-caption1)] text-[var(--accent-red,#ef4444)] px-[var(--space-2)] -mt-[var(--space-1)] mb-[var(--space-2)]",children:eu}):null,(0,a.jsx)(D,{label:"Canvas タイトル",children:(0,a.jsx)(O,{value:Y.connectors?.slack?.agentsCanvas?.title??"",onChange:e=>ey(["connectors","slack","agentsCanvas","title"],e.trim()||void 0),placeholder:"Ryoko Agents View"})}),(0,a.jsx)(D,{label:"更新間隔 (ms)",children:(0,a.jsx)(O,{type:"number",value:Y.connectors?.slack?.agentsCanvas?.pollIntervalMs!==void 0?String(Y.connectors.slack.agentsCanvas.pollIntervalMs):"",onChange:e=>ey(["connectors","slack","agentsCanvas","pollIntervalMs"],e.trim()?Number(e):void 0),placeholder:"30000(30秒, 最小 5000)"})}),(0,a.jsx)(D,{label:"グループ毎の最大表示件数",children:(0,a.jsx)(O,{type:"number",value:Y.connectors?.slack?.agentsCanvas?.maxPerGroup!==void 0?String(Y.connectors.slack.agentsCanvas.maxPerGroup):"",onChange:e=>ey(["connectors","slack","agentsCanvas","maxPerGroup"],e.trim()?Number(e):void 0),placeholder:"10"})}),(0,a.jsx)("div",{className:"border-t border-[var(--separator)] mt-[var(--space-3)] pt-[var(--space-3)]"}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] font-[var(--weight-semibold)] text-[var(--text-tertiary)] mb-[var(--space-2)]",children:"Discord"}),(0,a.jsx)(D,{label:"Bot Token",children:(0,a.jsx)(O,{type:"password",value:Y.connectors?.discord?.botToken??"",onChange:e=>ey(["connectors","discord","botToken"],e),placeholder:"Bot token..."})}),(0,a.jsx)(D,{label:"Allow From",children:(0,a.jsx)(O,{value:Array.isArray(Y.connectors?.discord?.allowFrom)?Y.connectors?.discord?.allowFrom?.join(", "):Y.connectors?.discord?.allowFrom??"",onChange:e=>ey(["connectors","discord","allowFrom"],e.trim()?e.split(",").map(e=>e.trim()).filter(Boolean):void 0),placeholder:"User IDs, comma-separated (optional)"})}),(0,a.jsx)(D,{label:"Guild ID",children:(0,a.jsx)(O,{value:Y.connectors?.discord?.guildId??"",onChange:e=>ey(["connectors","discord","guildId"],e.trim()||void 0),placeholder:"サーバー/Guild ID(任意)"})}),(0,a.jsx)(D,{label:"Channel ID",children:(0,a.jsx)(O,{value:Y.connectors?.discord?.channelId??"",onChange:e=>ey(["connectors","discord","channelId"],e.trim()||void 0),placeholder:"このチャンネルに限定(右クリック → Copy Channel ID)"})}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] font-[var(--weight-semibold)] text-[var(--text-tertiary)] mt-[var(--space-3)] mb-[var(--space-2)]",children:"応答ゲート(respondTo)"}),["dm","channel"].map(e=>(0,a.jsx)(D,{label:"dm"===e?"DM(1対1・グループ)":"チャンネル/スレッド",children:(0,a.jsx)(B,{value:Y.connectors?.discord?.respondTo?.[e]??"always",onChange:a=>ey(["connectors","discord","respondTo",e],a),options:[{value:"always",label:"常に応答"},{value:"mention",label:"@メンション/リプライ時のみ"},{value:"never",label:"応答しない"}]})},e)),(0,a.jsx)(D,{label:"参加済みスレッドは再メンション不要",children:(0,a.jsx)(_,{checked:Y.connectors?.discord?.respondTo?.engagedThreads??!0,onChange:e=>ey(["connectors","discord","respondTo","engagedThreads"],e)})}),(0,a.jsx)(D,{label:"返信スタイル(平場チャンネル)",children:(0,a.jsx)(B,{value:Y.connectors?.discord?.replyStyle??"channel",onChange:e=>ey(["connectors","discord","replyStyle"],e),options:[{value:"channel",label:"そのままチャンネルへ"},{value:"reply",label:"元メッセージにリプライ"},{value:"thread",label:"スレッドを作成して返信"}]})}),(0,a.jsx)("div",{className:"border-t border-[var(--separator)] mt-[var(--space-3)] pt-[var(--space-3)]"}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] font-[var(--weight-semibold)] text-[var(--text-tertiary)] mb-[var(--space-2)]",children:"Telegram"}),(0,a.jsx)(D,{label:"Bot Token",children:(0,a.jsx)(O,{type:"password",value:Y.connectors?.telegram?.botToken??"",onChange:e=>ey(["connectors","telegram","botToken"],e),placeholder:"123456:ABC-DEF..."})}),(0,a.jsx)(D,{label:"許可ユーザー (User ID)",children:(0,a.jsx)(O,{value:Array.isArray(Y.connectors?.telegram?.allowFrom)?Y.connectors?.telegram?.allowFrom?.join(", "):"",onChange:e=>ey(["connectors","telegram","allowFrom"],e.trim()?e.split(",").map(e=>Number(e.trim())).filter(e=>!isNaN(e)):void 0),placeholder:"Telegram の User ID をカンマ区切り(任意)"})}),(0,a.jsx)(D,{label:"起動時に古いメッセージを無視",children:(0,a.jsx)(_,{checked:Y.connectors?.telegram?.ignoreOldMessagesOnBoot??!0,onChange:e=>ey(["connectors","telegram","ignoreOldMessagesOnBoot"],e)})}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] font-[var(--weight-semibold)] text-[var(--text-tertiary)] mt-[var(--space-4)] mb-[var(--space-2)]",children:"WhatsApp"}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption2)] text-[var(--text-tertiary)] mb-[var(--space-3)]",children:"初回起動時、下のQRコードを WhatsApp アプリでスキャンして接続してください。認証情報は次回以降キャッシュされます。"}),(0,a.jsx)(D,{label:"認証ディレクトリ",children:(0,a.jsx)(O,{value:Y.connectors?.whatsapp?.authDir??"",onChange:e=>ey(["connectors","whatsapp","authDir"],e.trim()||void 0),placeholder:"デフォルト: ~/.ryoko/.whatsapp-auth"})}),(0,a.jsx)(D,{label:"許可送信元",children:(0,a.jsx)(O,{value:Array.isArray(Y.connectors?.whatsapp?.allowFrom)?Y.connectors?.whatsapp?.allowFrom?.join(", "):"",onChange:e=>ey(["connectors","whatsapp","allowFrom"],e.trim()?e.split(",").map(e=>e.trim()).filter(Boolean):void 0),placeholder:"447700900000@s.whatsapp.net, ...(任意)"})}),el&&(0,a.jsxs)("div",{className:"mt-[var(--space-3)] flex flex-col items-center gap-[var(--space-2)]",children:[(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] font-semibold text-[var(--text-secondary)]",children:"WhatsApp でスキャンして接続"}),(0,a.jsx)("img",{src:el,alt:"WhatsApp QRコード",className:"w-[200px] h-[200px] rounded-[var(--radius-md)] border border-[var(--separator)] bg-white p-[8px]"}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption2)] text-[var(--text-tertiary)]",children:"WhatsApp → リンク済み端末 → 端末をリンク"})]}),Y.connectors?.whatsapp&&"ok"===ei&&(0,a.jsx)("div",{className:"mt-[var(--space-2)] text-[length:var(--text-caption1)] text-[var(--system-green)] font-semibold",children:"✓ 接続済み"}),(0,a.jsx)("div",{className:"border-t border-[var(--separator)] mt-[var(--space-3)] pt-[var(--space-3)]"}),(0,a.jsxs)("div",{className:"flex items-center justify-between mb-[var(--space-2)]",children:[(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] font-[var(--weight-semibold)] text-[var(--text-tertiary)]",children:"コネクタインスタンス"}),(0,a.jsxs)("div",{className:"flex items-center gap-[var(--space-2)]",children:[(0,a.jsxs)("button",{className:"text-[length:var(--text-caption1)] font-[var(--weight-semibold)] text-[var(--text-secondary)] hover:text-[var(--accent)] transition-colors flex items-center gap-1",onClick:async()=>{try{let e=await h.api.reloadConnectors(),a=[];e.stopped.length&&a.push(`Stopped: ${e.stopped.join(", ")}`),e.started.length&&a.push(`Started: ${e.started.join(", ")}`),e.errors.length&&a.push(`Errors: ${e.errors.join(", ")}`),alert(a.length?a.join("\n"):"No connector instances to reload")}catch{alert("Failed to reload connectors")}},children:[(0,a.jsx)(n,{size:12}),"Reload"]}),(0,a.jsx)("button",{className:"text-[length:var(--text-caption1)] font-[var(--weight-semibold)] text-[var(--accent)] hover:opacity-80 transition-opacity",onClick:()=>{let e=[...Y.connectors?.instances||[]],a=`discord-${e.length+1}`;e.push({id:a,type:"discord"}),ey(["connectors","instances"],e)},children:"+ Add Instance"})]})]}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption2)] text-[var(--text-tertiary)] mb-[var(--space-3)]",children:"Add multiple connector instances of the same type, each bound to a specific employee."}),(Y.connectors?.instances||[]).map((e,t)=>(0,a.jsxs)("div",{className:"mb-[var(--space-4)] p-[var(--space-3)] rounded-[var(--radius-md)] border border-[var(--separator)] bg-[var(--bg-secondary)]",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-[var(--space-2)]",children:[(0,a.jsx)("div",{className:"text-[length:var(--text-subheadline)] font-[var(--weight-semibold)] text-[var(--text-primary)]",children:e.id||`Instance ${t+1}`}),(0,a.jsx)("button",{className:"text-[var(--system-red)] hover:opacity-80 transition-opacity p-[var(--space-1)]",onClick:()=>{let e=[...Y.connectors?.instances||[]];e.splice(t,1),ey(["connectors","instances"],e.length>0?e:void 0)},children:(0,a.jsx)(s.Trash2,{size:14})})]}),(0,a.jsx)(D,{label:"Instance ID",children:(0,a.jsx)(O,{value:e.id??"",onChange:e=>{let a=[...Y.connectors?.instances||[]];a[t]={...a[t],id:e},ey(["connectors","instances"],a)},placeholder:"e.g. discord-vox"})}),(0,a.jsx)(D,{label:"Type",children:(0,a.jsx)(B,{value:e.type??"discord",onChange:e=>{let a=[...Y.connectors?.instances||[]];a[t]={...a[t],type:e},ey(["connectors","instances"],a)},options:[{value:"discord",label:"Discord"},{value:"slack",label:"Slack"},{value:"whatsapp",label:"WhatsApp"}]})}),(0,a.jsx)(D,{label:"Employee",children:(0,a.jsx)(B,{value:e.employee??"",onChange:e=>{let a=[...Y.connectors?.instances||[]];a[t]={...a[t],employee:e||void 0},ey(["connectors","instances"],a)},options:[{value:"",label:"Default (COO)"},...ed.map(e=>({value:e.name,label:e.displayName}))]})}),("discord"===e.type||!e.type)&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(D,{label:"Bot Token",children:(0,a.jsx)(O,{type:"password",value:e.botToken??"",onChange:e=>{let a=[...Y.connectors?.instances||[]];a[t]={...a[t],botToken:e},ey(["connectors","instances"],a)},placeholder:"Bot token..."})}),(0,a.jsx)(D,{label:"Guild ID",children:(0,a.jsx)(O,{value:e.guildId??"",onChange:e=>{let a=[...Y.connectors?.instances||[]];a[t]={...a[t],guildId:e.trim()||void 0},ey(["connectors","instances"],a)},placeholder:"Server/Guild ID"})}),(0,a.jsx)(D,{label:"Channel ID",children:(0,a.jsx)(O,{value:e.channelId??"",onChange:e=>{let a=[...Y.connectors?.instances||[]];a[t]={...a[t],channelId:e.trim()||void 0},ey(["connectors","instances"],a)},placeholder:"Restrict to channel (optional)"})}),(0,a.jsx)(D,{label:"Allow From",children:(0,a.jsx)(O,{value:Array.isArray(e.allowFrom)?e.allowFrom.join(", "):e.allowFrom??"",onChange:e=>{let a=[...Y.connectors?.instances||[]];a[t]={...a[t],allowFrom:e.trim()?e.split(",").map(e=>e.trim()).filter(Boolean):void 0},ey(["connectors","instances"],a)},placeholder:"User IDs, comma-separated (optional)"})})]}),"slack"===e.type&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(D,{label:"App Token",children:(0,a.jsx)(O,{type:"password",value:e.appToken??"",onChange:e=>{let a=[...Y.connectors?.instances||[]];a[t]={...a[t],appToken:e},ey(["connectors","instances"],a)},placeholder:"xapp-..."})}),(0,a.jsx)(D,{label:"Bot Token",children:(0,a.jsx)(O,{type:"password",value:e.botToken??"",onChange:e=>{let a=[...Y.connectors?.instances||[]];a[t]={...a[t],botToken:e},ey(["connectors","instances"],a)},placeholder:"xoxb-..."})})]}),"slack"===e.type&&(0,a.jsxs)("div",{className:"border-t border-[var(--separator)] mt-[var(--space-3)] pt-[var(--space-3)]",children:[(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] font-[var(--weight-semibold)] text-[var(--text-tertiary)] mb-[var(--space-2)]",children:"空気読みトリアージ"}),(0,a.jsx)(S,{config:e.triage,showCredentials:!1,onChange:e=>{let a=[...Y.connectors?.instances||[]];a[t]={...a[t],triage:e},ey(["connectors","instances"],a)}})]}),"whatsapp"===e.type&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(D,{label:"Auth Directory",children:(0,a.jsx)(O,{value:e.authDir??"",onChange:e=>{let a=[...Y.connectors?.instances||[]];a[t]={...a[t],authDir:e.trim()||void 0},ey(["connectors","instances"],a)},placeholder:"Default: ~/.jinn/.whatsapp-auth"})}),(0,a.jsx)(D,{label:"Allow From",children:(0,a.jsx)(O,{value:Array.isArray(e.allowFrom)?e.allowFrom.join(", "):"",onChange:e=>{let a=[...Y.connectors?.instances||[]];a[t]={...a[t],allowFrom:e.trim()?e.split(",").map(e=>e.trim()).filter(Boolean):void 0},ey(["connectors","instances"],a)},placeholder:"Phone JIDs, comma-separated"})})]})]},e.id||t)),(0,a.jsx)("div",{className:"border-t border-[var(--separator)] mt-[var(--space-3)] pt-[var(--space-3)]"}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] font-[var(--weight-semibold)] text-[var(--text-tertiary)] mb-[var(--space-2)]",children:"Web UI"}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption2)] text-[var(--text-tertiary)]",children:"Web conversations use queued one-shot resume flow for both engines."})]}),(0,a.jsxs)(M,{title:"自動化の通知",children:[(0,a.jsxs)("div",{className:"text-[length:var(--text-caption2)] text-[var(--text-tertiary)] mb-[var(--space-3)]",children:["ジョブの作成・有効化・実行は",(0,a.jsx)("a",{href:"/cron",className:"text-[var(--accent)] underline",children:"自動化ページ"}),"で行います。ここは通知の既定値だけを設定します。"]}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] font-[var(--weight-semibold)] text-[var(--text-tertiary)] mb-[var(--space-2)]",children:"Default Delivery"}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption2)] text-[var(--text-tertiary)] mb-[var(--space-3)]",children:"When a cron job has no delivery configured, results will be sent here."}),(0,a.jsx)(D,{label:"Connector",children:(0,a.jsx)(B,{value:Y.cron?.defaultDelivery?.connector??"",onChange:e=>ey(["cron","defaultDelivery","connector"],e||void 0),options:[{value:"",label:"None (fire & forget)"},{value:"web",label:"Web"},{value:"slack",label:"Slack"}]})}),Y.cron?.defaultDelivery?.connector&&(0,a.jsx)(D,{label:"Channel",children:(0,a.jsx)(O,{value:Y.cron?.defaultDelivery?.channel??"",onChange:e=>ey(["cron","defaultDelivery","channel"],e),placeholder:"#general"})}),(0,a.jsx)(A,{connectorOptions:function(e){let a=new Set;for(let[t,r]of Object.entries(e.connectors??{}))"instances"!==t&&"web"!==t&&r&&"object"==typeof r&&a.add(t);for(let t of e.connectors?.instances??[])t.id&&a.add(t.id);return e.cron?.defaultDelivery?.connector&&"web"!==e.cron.defaultDelivery.connector&&a.add(e.cron.defaultDelivery.connector),Array.from(a).sort()}(Y),defaultConnector:Y.cron?.defaultDelivery?.connector,defaultChannel:Y.cron?.defaultDelivery?.channel})]}),(0,a.jsxs)(M,{title:"Logging",children:[(0,a.jsx)(D,{label:"Level",children:(0,a.jsx)(B,{value:Y.logging?.level??"info",onChange:e=>ey(["logging","level"],e),options:[{value:"debug",label:"Debug"},{value:"info",label:"Info"},{value:"warn",label:"Warn"},{value:"error",label:"Error"}]})}),(0,a.jsx)(D,{label:"Stdout",children:(0,a.jsx)(_,{checked:Y.logging?.stdout??!0,onChange:e=>ey(["logging","stdout"],e)})}),(0,a.jsx)(D,{label:"File Logging",children:(0,a.jsx)(_,{checked:Y.logging?.file??!1,onChange:e=>ey(["logging","file"],e)})})]}),(0,a.jsx)($,{}),(0,a.jsxs)("div",{className:"flex justify-end gap-[var(--space-3)] mb-[var(--space-6)]",children:[(0,a.jsxs)("button",{onClick:()=>ej(),className:"px-[var(--space-4)] py-[var(--space-2)] rounded-[var(--radius-md)] bg-[var(--fill-tertiary)] text-[var(--text-secondary)] border-none cursor-pointer text-[length:var(--text-footnote)] font-[var(--weight-medium)] inline-flex items-center gap-[6px]",children:[(0,a.jsx)(n,{size:14}),"再読み込み"]}),(0,a.jsxs)("button",{onClick:function(){er(!0),es(null),h.api.updateConfig(Y).then(e=>{if(e?.connectorsReloadError)return void es({type:"error",message:`Settings saved but connector reload failed: ${e.connectorsReloadError}`});let a=e?.connectorsReload?.errors??[];e?.status==="partial"||a.length>0?es({type:"error",message:`Settings saved but ${a.length} connector(s) failed: ${a.join("; ")}`}):es({type:"success",message:"Settings saved successfully"})}).catch(e=>es({type:"error",message:`Failed to save: ${e.message}`})).finally(()=>er(!1))},disabled:et,className:"px-[var(--space-5)] py-[var(--space-2)] rounded-[var(--radius-md)] bg-[var(--accent)] text-[var(--accent-contrast)] border-none text-[length:var(--text-footnote)] font-[var(--weight-semibold)] inline-flex items-center gap-[6px] transition-all duration-150 ease-[var(--ease-smooth)]",style:{cursor:et?"wait":"pointer",opacity:et?.7:1},children:[(0,a.jsx)(o,{size:14}),et?"保存中…":"設定を保存"]})]})]}),(0,a.jsx)(M,{title:"リセット",children:(0,a.jsxs)("div",{className:"flex items-center justify-center gap-[var(--space-3)] flex-wrap",children:[(0,a.jsxs)("button",{onClick:()=>{localStorage.removeItem("jinn-onboarded"),window.location.reload()},className:"px-[var(--space-5)] py-[var(--space-2)] rounded-[var(--radius-md)] bg-[var(--accent)] text-[var(--accent-contrast)] border-none cursor-pointer text-[length:var(--text-footnote)] font-[var(--weight-semibold)] transition-all duration-150 ease-[var(--ease-spring)] inline-flex items-center gap-[var(--space-2)]",children:[(0,a.jsx)(n,{size:14}),"オンボーディングを再実行"]}),(0,a.jsxs)("button",{onClick:()=>{window.confirm("すべての設定を初期値に戻しますか?")&&(localStorage.removeItem("jinn-settings"),localStorage.removeItem("jinn-theme"),N(),window.location.reload())},className:"px-[var(--space-5)] py-[var(--space-2)] rounded-[var(--radius-md)] bg-[var(--system-red)] text-white border-none cursor-pointer text-[length:var(--text-footnote)] font-[var(--weight-semibold)] transition-all duration-150 ease-[var(--ease-spring)] inline-flex items-center gap-[var(--space-2)]",children:[(0,a.jsx)(s.Trash2,{size:14}),"すべての設定をリセット"]})]})})]})})})}],82074)}]);