openryoko 2026.5.7 → 2026.5.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 (152) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/src/cli/migrate.d.ts.map +1 -1
  3. package/dist/src/cli/migrate.js +42 -14
  4. package/dist/src/cli/migrate.js.map +1 -1
  5. package/dist/src/cli/setup.d.ts.map +1 -1
  6. package/dist/src/cli/setup.js +4 -27
  7. package/dist/src/cli/setup.js.map +1 -1
  8. package/dist/src/connectors/slack/__tests__/agents-canvas.test.d.ts +2 -0
  9. package/dist/src/connectors/slack/__tests__/agents-canvas.test.d.ts.map +1 -0
  10. package/dist/src/connectors/slack/__tests__/agents-canvas.test.js +191 -0
  11. package/dist/src/connectors/slack/__tests__/agents-canvas.test.js.map +1 -0
  12. package/dist/src/connectors/slack/__tests__/goal-extractor.test.d.ts +2 -0
  13. package/dist/src/connectors/slack/__tests__/goal-extractor.test.d.ts.map +1 -0
  14. package/dist/src/connectors/slack/__tests__/goal-extractor.test.js +129 -0
  15. package/dist/src/connectors/slack/__tests__/goal-extractor.test.js.map +1 -0
  16. package/dist/src/connectors/slack/agents-canvas.d.ts +59 -0
  17. package/dist/src/connectors/slack/agents-canvas.d.ts.map +1 -0
  18. package/dist/src/connectors/slack/agents-canvas.js +372 -0
  19. package/dist/src/connectors/slack/agents-canvas.js.map +1 -0
  20. package/dist/src/connectors/slack/goal-extractor.d.ts +67 -0
  21. package/dist/src/connectors/slack/goal-extractor.d.ts.map +1 -0
  22. package/dist/src/connectors/slack/goal-extractor.js +302 -0
  23. package/dist/src/connectors/slack/goal-extractor.js.map +1 -0
  24. package/dist/src/connectors/slack/index.d.ts +15 -0
  25. package/dist/src/connectors/slack/index.d.ts.map +1 -1
  26. package/dist/src/connectors/slack/index.js +78 -0
  27. package/dist/src/connectors/slack/index.js.map +1 -1
  28. package/dist/src/engines/claude.d.ts +11 -0
  29. package/dist/src/engines/claude.d.ts.map +1 -1
  30. package/dist/src/engines/claude.js +75 -13
  31. package/dist/src/engines/claude.js.map +1 -1
  32. package/dist/src/gateway/api.d.ts.map +1 -1
  33. package/dist/src/gateway/api.js +20 -0
  34. package/dist/src/gateway/api.js.map +1 -1
  35. package/dist/src/gateway/server.d.ts.map +1 -1
  36. package/dist/src/gateway/server.js +61 -2
  37. package/dist/src/gateway/server.js.map +1 -1
  38. package/dist/src/sessions/context.js +20 -2
  39. package/dist/src/sessions/context.js.map +1 -1
  40. package/dist/src/sessions/manager.d.ts.map +1 -1
  41. package/dist/src/sessions/manager.js +15 -1
  42. package/dist/src/sessions/manager.js.map +1 -1
  43. package/dist/src/shared/templateReplacements.d.ts +22 -0
  44. package/dist/src/shared/templateReplacements.d.ts.map +1 -0
  45. package/dist/src/shared/templateReplacements.js +57 -0
  46. package/dist/src/shared/templateReplacements.js.map +1 -0
  47. package/dist/src/shared/types.d.ts +21 -0
  48. package/dist/src/shared/types.d.ts.map +1 -1
  49. package/dist/web/404.html +1 -1
  50. package/dist/web/__next.__PAGE__.txt +2 -2
  51. package/dist/web/__next._full.txt +3 -3
  52. package/dist/web/__next._head.txt +1 -1
  53. package/dist/web/__next._index.txt +2 -2
  54. package/dist/web/__next._tree.txt +2 -2
  55. package/dist/web/_next/static/chunks/{0y3uv64m1qh.k.js → 012aakl34ff5a.js} +2 -2
  56. package/dist/web/_next/static/chunks/{0j4uz-g9x1_~s.js → 0a2uy1kw.~j~c.js} +1 -1
  57. package/dist/web/_next/static/chunks/{0v51a3blij~j6.js → 0agxgztb0b~.7.js} +2 -2
  58. package/dist/web/_next/static/chunks/{1645~4k0qcst0.js → 0g6xt.91k~0bc.js} +2 -2
  59. package/dist/web/_next/static/chunks/{16zc7-yv7supr.js → 0jzw1gpuag8bc.js} +2 -2
  60. package/dist/web/_next/static/chunks/0kceasmxfr3s1.js +1 -0
  61. package/dist/web/_next/static/chunks/{0wv0qjh9tuqx~.js → 0lkp92-ovteta.js} +2 -2
  62. package/dist/web/_next/static/chunks/{1621s_jgljr1_.js → 0msmlzd_~uk0y.js} +2 -2
  63. package/dist/web/_next/static/chunks/{00yn.jp4tr9l6.js → 0z5lzlvft9.4o.js} +2 -2
  64. package/dist/web/_next/static/chunks/103zsy0q9psfj.css +1 -0
  65. package/dist/web/_next/static/chunks/{0ma0h4_2c8y9y.js → 12m97bwrg1tuu.js} +2 -2
  66. package/dist/web/_not-found/__next._full.txt +2 -2
  67. package/dist/web/_not-found/__next._head.txt +1 -1
  68. package/dist/web/_not-found/__next._index.txt +2 -2
  69. package/dist/web/_not-found/__next._not-found.__PAGE__.txt +1 -1
  70. package/dist/web/_not-found/__next._not-found.txt +1 -1
  71. package/dist/web/_not-found/__next._tree.txt +2 -2
  72. package/dist/web/_not-found.html +1 -1
  73. package/dist/web/_not-found.txt +2 -2
  74. package/dist/web/chat/__next._full.txt +3 -3
  75. package/dist/web/chat/__next._head.txt +1 -1
  76. package/dist/web/chat/__next._index.txt +2 -2
  77. package/dist/web/chat/__next._tree.txt +2 -2
  78. package/dist/web/chat/__next.chat.__PAGE__.txt +2 -2
  79. package/dist/web/chat/__next.chat.txt +1 -1
  80. package/dist/web/chat.html +1 -1
  81. package/dist/web/chat.txt +3 -3
  82. package/dist/web/cron/__next._full.txt +3 -3
  83. package/dist/web/cron/__next._head.txt +1 -1
  84. package/dist/web/cron/__next._index.txt +2 -2
  85. package/dist/web/cron/__next._tree.txt +2 -2
  86. package/dist/web/cron/__next.cron.__PAGE__.txt +2 -2
  87. package/dist/web/cron/__next.cron.txt +1 -1
  88. package/dist/web/cron.html +1 -1
  89. package/dist/web/cron.txt +3 -3
  90. package/dist/web/index.html +1 -1
  91. package/dist/web/index.txt +3 -3
  92. package/dist/web/kanban/__next._full.txt +3 -3
  93. package/dist/web/kanban/__next._head.txt +1 -1
  94. package/dist/web/kanban/__next._index.txt +2 -2
  95. package/dist/web/kanban/__next._tree.txt +2 -2
  96. package/dist/web/kanban/__next.kanban.__PAGE__.txt +2 -2
  97. package/dist/web/kanban/__next.kanban.txt +1 -1
  98. package/dist/web/kanban.html +1 -1
  99. package/dist/web/kanban.txt +3 -3
  100. package/dist/web/logs/__next._full.txt +3 -3
  101. package/dist/web/logs/__next._head.txt +1 -1
  102. package/dist/web/logs/__next._index.txt +2 -2
  103. package/dist/web/logs/__next._tree.txt +2 -2
  104. package/dist/web/logs/__next.logs.__PAGE__.txt +2 -2
  105. package/dist/web/logs/__next.logs.txt +1 -1
  106. package/dist/web/logs.html +2 -2
  107. package/dist/web/logs.txt +3 -3
  108. package/dist/web/org/__next._full.txt +3 -3
  109. package/dist/web/org/__next._head.txt +1 -1
  110. package/dist/web/org/__next._index.txt +2 -2
  111. package/dist/web/org/__next._tree.txt +2 -2
  112. package/dist/web/org/__next.org.__PAGE__.txt +2 -2
  113. package/dist/web/org/__next.org.txt +1 -1
  114. package/dist/web/org.html +1 -1
  115. package/dist/web/org.txt +3 -3
  116. package/dist/web/sessions/__next._full.txt +2 -2
  117. package/dist/web/sessions/__next._head.txt +1 -1
  118. package/dist/web/sessions/__next._index.txt +2 -2
  119. package/dist/web/sessions/__next._tree.txt +2 -2
  120. package/dist/web/sessions/__next.sessions.__PAGE__.txt +1 -1
  121. package/dist/web/sessions/__next.sessions.txt +1 -1
  122. package/dist/web/sessions.html +1 -1
  123. package/dist/web/sessions.txt +2 -2
  124. package/dist/web/settings/__next._full.txt +3 -3
  125. package/dist/web/settings/__next._head.txt +1 -1
  126. package/dist/web/settings/__next._index.txt +2 -2
  127. package/dist/web/settings/__next._tree.txt +2 -2
  128. package/dist/web/settings/__next.settings.__PAGE__.txt +2 -2
  129. package/dist/web/settings/__next.settings.txt +1 -1
  130. package/dist/web/settings.html +1 -1
  131. package/dist/web/settings.txt +3 -3
  132. package/dist/web/skills/__next._full.txt +3 -3
  133. package/dist/web/skills/__next._head.txt +1 -1
  134. package/dist/web/skills/__next._index.txt +2 -2
  135. package/dist/web/skills/__next._tree.txt +2 -2
  136. package/dist/web/skills/__next.skills.__PAGE__.txt +2 -2
  137. package/dist/web/skills/__next.skills.txt +1 -1
  138. package/dist/web/skills.html +1 -1
  139. package/dist/web/skills.txt +3 -3
  140. package/package.json +1 -1
  141. package/template/migrations/2026.5.7/files/BOOTSTRAP.md +52 -0
  142. package/template/migrations/2026.5.7/files/IDENTITY.md +25 -0
  143. package/template/migrations/2026.5.7/files/MEMORY.md +33 -0
  144. package/template/migrations/2026.5.7/files/SOUL.md +36 -0
  145. package/template/migrations/2026.5.7/files/TOOLS.md +23 -0
  146. package/template/migrations/2026.5.7/files/memory/.gitkeep +0 -0
  147. package/dist/web/_next/static/chunks/05uy~i7wsbsn3.js +0 -1
  148. package/dist/web/_next/static/chunks/0bj62gv2pext..css +0 -1
  149. package/dist/web/dev/logs/next-development.log +0 -5
  150. /package/dist/web/_next/static/{VBjMXtz9-pIo9izqNT-iu → 2gkySyM5UoStZGUIrVpRy}/_buildManifest.js +0 -0
  151. /package/dist/web/_next/static/{VBjMXtz9-pIo9izqNT-iu → 2gkySyM5UoStZGUIrVpRy}/_clientMiddlewareManifest.js +0 -0
  152. /package/dist/web/_next/static/{VBjMXtz9-pIo9izqNT-iu → 2gkySyM5UoStZGUIrVpRy}/_ssgManifest.js +0 -0
@@ -3,14 +3,14 @@
3
3
  3:I[87979,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js"],"default"]
4
4
  4:I[35855,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js"],"default"]
5
5
  5:I[63667,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js"],"ClientPageRoot"]
6
- 6:I[84134,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js","/_next/static/chunks/11rbefjn.e-3-.js","/_next/static/chunks/0v51a3blij~j6.js"],"default"]
6
+ 6:I[84134,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js","/_next/static/chunks/11rbefjn.e-3-.js","/_next/static/chunks/0agxgztb0b~.7.js"],"default"]
7
7
  9:I[84459,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js"],"OutletBoundary"]
8
8
  a:"$Sreact.suspense"
9
9
  d:I[84459,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js"],"ViewportBoundary"]
10
10
  f:I[84459,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js"],"MetadataBoundary"]
11
11
  11:I[2565,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js"],"default",1]
12
- :HL["/_next/static/chunks/0bj62gv2pext..css","style"]
13
- 0:{"P":null,"c":["","skills"],"q":"","i":false,"f":[[["",{"children":["skills",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0bj62gv2pext..css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0y3dnnq~kxyz_.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/14ge_q22f0n.f.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/0~6m1p5hnsx2f.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"ja","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"(function(){try{var t=localStorage.getItem('openryoko-theme')||localStorage.getItem('jinn-theme')||'ryoko';if(t==='system'){t=window.matchMedia('(prefers-color-scheme:dark)').matches?'dark':'ryoko'}document.documentElement.setAttribute('data-theme',t)}catch(e){}})()"}}]}],["$","body",null,{"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@7","$@8"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/11rbefjn.e-3-.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/0v51a3blij~j6.js","async":true,"nonce":"$undefined"}]],["$","$L9",null,{"children":["$","$a",null,{"name":"Next.MetadataOutlet","children":"$@b"}]}]]}],{},null,false,null]},null,false,"$@c"]},null,false,null],["$","$1","h",{"children":[null,["$","$Ld",null,{"children":"$Le"}],["$","div",null,{"hidden":true,"children":["$","$Lf",null,{"children":["$","$a",null,{"name":"Next.Metadata","children":"$L10"}]}]}],null]}],false]],"m":"$undefined","G":["$11",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0bj62gv2pext..css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"VBjMXtz9-pIo9izqNT-iu"}
12
+ :HL["/_next/static/chunks/103zsy0q9psfj.css","style"]
13
+ 0:{"P":null,"c":["","skills"],"q":"","i":false,"f":[[["",{"children":["skills",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/103zsy0q9psfj.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0y3dnnq~kxyz_.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/14ge_q22f0n.f.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/0~6m1p5hnsx2f.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"ja","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"(function(){try{var t=localStorage.getItem('openryoko-theme')||localStorage.getItem('jinn-theme')||'ryoko';if(t==='system'){t=window.matchMedia('(prefers-color-scheme:dark)').matches?'dark':'ryoko'}document.documentElement.setAttribute('data-theme',t)}catch(e){}})()"}}]}],["$","body",null,{"children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@7","$@8"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/11rbefjn.e-3-.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/0agxgztb0b~.7.js","async":true,"nonce":"$undefined"}]],["$","$L9",null,{"children":["$","$a",null,{"name":"Next.MetadataOutlet","children":"$@b"}]}]]}],{},null,false,null]},null,false,"$@c"]},null,false,null],["$","$1","h",{"children":[null,["$","$Ld",null,{"children":"$Le"}],["$","div",null,{"hidden":true,"children":["$","$Lf",null,{"children":["$","$a",null,{"name":"Next.Metadata","children":"$L10"}]}]}],null]}],false]],"m":"$undefined","G":["$11",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/103zsy0q9psfj.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"2gkySyM5UoStZGUIrVpRy"}
14
14
  12:[]
15
15
  c:"$W12"
16
16
  7:{}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openryoko",
3
- "version": "2026.5.7",
3
+ "version": "2026.5.13",
4
4
  "description": "OpenRyoko — Slackで空気を読んで働くAIアシスタント・ゲートウェイ(Jinnベース、Claude Code/Codex/Gemini CLI対応)",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -0,0 +1,52 @@
1
+ # BOOTSTRAP — 初回起動の儀式
2
+
3
+ **このファイルが存在する場合、{{portalName}} は他の何よりも先にこの手順を実行してください。**
4
+ 完了後、{{portalName}} 自身がこのファイルを `rm` で削除します(次回以降は実行されない)。
5
+
6
+ ---
7
+
8
+ ## なぜ必要か
9
+
10
+ `~/.ryoko/` のセットアップ直後、または旧バージョンからのアップグレード直後、{{portalName}} はまだユーザーのことを知りません(または知識が `MEMORY.md` にまだ反映されていません)。IDENTITY.md / SOUL.md / MEMORY.md は雛形のままです。
11
+
12
+ このファイルは「最初の対話で何を聞き、どこに書き込むか」を定めた一回限りのチェックリストです。
13
+
14
+ > **アップグレードユーザーへの注記**: 旧バージョンの OpenRyoko を使っていた場合、`knowledge/user-profile.md` `preferences.md` `projects.md` 等に既に情報がある可能性があります。オンボーディングの最初に、これらを確認して既知の情報は再質問せず、未確認部分だけをユーザーに聞くようにしてください。
15
+
16
+ ---
17
+
18
+ ## 手順
19
+
20
+ ### 0. 既存知識の取り込み(アップグレードのみ)
21
+
22
+ 旧バージョンからのアップグレードの場合のみ:
23
+
24
+ 1. `~/.ryoko/knowledge/` 配下のファイルを ls で確認
25
+ 2. `user-profile.md` `preferences.md` `projects.md` 等が存在すれば Read
26
+ 3. 内容を要約してユーザーに「これらを引き継ぎますか?」と確認
27
+ 4. 承認されたら、短い事実は `MEMORY.md` に転記、長文は `knowledge/` に残す
28
+
29
+ 新規セットアップの場合はこのステップをスキップ。
30
+
31
+ ### 1. onboarding スキルを起動
32
+
33
+ `~/.ryoko/skills/onboarding/SKILL.md` を読み、書かれた手順を最後まで実行してください。
34
+ このスキルが IDENTITY.md / SOUL.md / MEMORY.md / TOOLS.md を対話で埋めます。
35
+
36
+ ステップ 0 で既知の情報がある場合、onboarding 内のヒアリング質問はその部分をスキップして残りだけ聞いてください。
37
+
38
+ ### 2. 完了確認
39
+
40
+ 以下が埋まっていることを確認:
41
+ - [ ] `IDENTITY.md` の Name / Vibe / Emoji / Pronouns
42
+ - [ ] `SOUL.md` の Tone / Humor
43
+ - [ ] `MEMORY.md` の Facts / Preferences の最初の数項目
44
+ - [ ] `org/` に最低1つの部門と1人の従業員(任意)
45
+
46
+ ### 3. このファイルを削除
47
+
48
+ ```bash
49
+ rm ~/.ryoko/BOOTSTRAP.md
50
+ ```
51
+
52
+ 削除後、ユーザーに「セットアップ完了。これから {{portalName}} として動きます」と短く宣言してください。
@@ -0,0 +1,25 @@
1
+ # IDENTITY — {{portalName}}
2
+
3
+ あなた({{portalName}})の核となる自己定義です。
4
+ オンボーディングで埋め、以後はユーザーから「名前を変えて」「絵文字を変えて」等の指示があったときだけ書き換えてください。
5
+
6
+ ---
7
+
8
+ ## Name
9
+ {{portalName}}
10
+
11
+ ## Vibe
12
+ <!-- どんな雰囲気で振る舞うか。例: 落ち着いた / 軽快 / 真面目 / 茶目っ気あり -->
13
+ (オンボーディングで設定)
14
+
15
+ ## Emoji
16
+ <!-- 自己紹介・通知などで使う絵文字(1〜2個)。例: 🦊 / 🤖 / ✨ -->
17
+ (オンボーディングで設定)
18
+
19
+ ## Pronouns / 一人称
20
+ <!-- 例: 「わたし」「俺」「私」 -->
21
+ (オンボーディングで設定)
22
+
23
+ ## Origin / 由来
24
+ <!-- 名前の由来、設立経緯、ユーザーとの関係性などの背景。短くてよい。 -->
25
+ (オンボーディングで設定)
@@ -0,0 +1,33 @@
1
+ # MEMORY — 長期記憶
2
+
3
+ 毎セッションで必ず読まれる、短くて重要な「事実・好み・決定」のリスト。
4
+ **長文の調査結果や組織情報は `knowledge/<topic>.md` に書き、ここには書かない**こと(このファイルが肥大化すると毎回トークンを浪費する)。
5
+
6
+ 書き方:
7
+ - 1項目1〜3行で簡潔に
8
+ - 古くなった項目は更新または削除
9
+ - 肥大化したら(200行超)トピックごとに `knowledge/` へ切り出す
10
+
11
+ ---
12
+
13
+ ## Facts(事実)
14
+ <!-- ユーザー・事業・環境に関する変わりにくい事実 -->
15
+ - (例: ユーザーは Tekion 社の開発者)
16
+ - (例: 主要言語は TypeScript / Python)
17
+
18
+ ## Preferences(好み)
19
+ <!-- コミュニケーション・出力フォーマット・ツール選好 -->
20
+ - (例: 結論ファースト、簡潔に)
21
+ - (例: 絵文字は使わない)
22
+
23
+ ## Decisions(決定)
24
+ <!-- 過去に下した方針・選択。理由を1行付ける -->
25
+ - (例: パッケージマネージャは pnpm 統一 — モノレポ管理が容易だから)
26
+
27
+ ## Don'ts(やらないと決めたこと)
28
+ <!-- ユーザーが明示的に拒否したこと -->
29
+ - (例: 自動コミットしない — 必ず差分確認後に手動)
30
+
31
+ ## Open Questions(未決事項)
32
+ <!-- まだ判断保留の項目。決まったら Decisions に移す -->
33
+ - (なし)
@@ -0,0 +1,36 @@
1
+ # SOUL — {{portalName}} の人格・トーン・境界
2
+
3
+ あなたが「どう振る舞うか」を定義するファイルです。IDENTITY.md が「誰であるか」、SOUL.md が「どう話すか・どう判断するか」。
4
+ ユーザーからのフィードバック(「もっと簡潔に」「敬語やめて」等)はここに反映してください。
5
+
6
+ ---
7
+
8
+ ## Tone(口調)
9
+ <!-- 敬語/タメ口、フォーマル/カジュアル、絵文字の使用頻度など -->
10
+ (オンボーディングで設定)
11
+
12
+ ## Brevity(冗長さ)
13
+ <!-- 簡潔派 / 詳細派。デフォルトは簡潔(結論ファースト、理由は後)。 -->
14
+ - デフォルト: 結論ファースト、簡潔
15
+ - 例外: ユーザーが「詳しく」と指示したとき、設計判断の説明が必要なとき
16
+
17
+ ## Opinions(意見の出し方)
18
+ <!-- ユーザーに合わせるだけでなく、自分の見解を持つこと。ただし押し付けない。 -->
19
+ - 主体的に提案を出す
20
+ - 反対意見も率直に伝える(ただし1回伝えたら、ユーザーの最終判断を尊重)
21
+ - 「分からない」は素直に「分からない」と言う
22
+
23
+ ## Humor(ユーモア)
24
+ <!-- 真面目一辺倒 / 軽口OK / 皮肉OK など -->
25
+ (オンボーディングで設定)
26
+
27
+ ## Boundaries(境界線)
28
+ <!-- やらないこと、踏み込まないこと。 -->
29
+ - ユーザー以外への印象操作・誇張は行わない
30
+ - 機密情報を勝手に外部に出さない
31
+ - 不確かなことを断定的に言わない
32
+ - ユーザーが「やめて」と言ったことは記録して二度とやらない
33
+
34
+ ## Quirks(クセ・個性)
35
+ <!-- 細かいこだわり。例: 「ですます調を使い分ける」「絵文字は文末に1つだけ」など -->
36
+ (必要に応じて追加)
@@ -0,0 +1,23 @@
1
+ # TOOLS — ツール覚書
2
+
3
+ ユーザーがよく使うツール・コマンド・サービスのメモ。
4
+ **このファイルはツールを「定義」するものではない**(実際のツールは MCP サーバや skills で構成される)。
5
+ ここに書くのは「どう使い分けるか」「ハマりポイント」「ショートカット」など、運用ノウハウだけ。
6
+
7
+ ---
8
+
9
+ ## CLI / Local
10
+ <!-- 例: pnpm, gh, docker, ripgrep など -->
11
+ - (オンボーディングで埋める or 使ううちに追記)
12
+
13
+ ## MCP Servers
14
+ <!-- 接続済み MCP サーバの覚書。`claude mcp list` で確認 -->
15
+ - (オンボーディングで埋める)
16
+
17
+ ## External Services
18
+ <!-- Slack, GitHub, Notion, など。アカウント・ワークスペースの覚書 -->
19
+ - (オンボーディングで埋める)
20
+
21
+ ## Gotchas(ハマりポイント)
22
+ <!-- このツールはこういう罠があるからこう使え、という覚書 -->
23
+ - (随時追記)
@@ -1 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,15857,e=>{"use strict";var a=e.i(98181),t=e.i(25007),r=e.i(90922);let s=(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 n=e.i(38524),l=e.i(40765);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"}]]),i=(0,r.default)("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);var c=e.i(58843),d=e.i(36668),p=e.i(11322),x=e.i(13765),v=e.i(65390),h=e.i(93716),u=e.i(52053);let m=[{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"}],g=JSON.stringify({display_information:{name:"Ryoko"},features:{app_home:{messages_tab_enabled:!0,messages_tab_read_only_enabled:!1},bot_user:{display_name:"Ryoko",always_online:!0}},oauth_config:{scopes:{bot:["app_mentions:read","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","message.channels","message.groups","message.im","message.mpim"]},socket_mode_enabled:!0}},null,2);function b({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 j({label:e,children:t}){return(0,a.jsxs)("div",{className:"flex items-center justify-between py-[var(--space-2)] gap-[var(--space-4)]",children:[(0,a.jsx)("label",{className:"text-[length:var(--text-subheadline)] text-[var(--text-secondary)] shrink-0",children:e}),(0,a.jsx)("div",{className:"w-[240px] shrink-0",children:t})]})}function f({value:e,onChange:t,type:r="text",placeholder:s}){return(0,a.jsx)("input",{type:r,value:e,onChange:e=>t(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 y({value:e,onChange:t,options:r}){return(0,a.jsx)("select",{value:e,onChange:e=>t(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:r.map(e=>(0,a.jsx)("option",{value:e.value,children:e.label},e.value))})}function w({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 N={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 C(){let[e,r]=(0,t.useState)(null),[s,n]=(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(N).filter(([a])=>!e.languages.includes(a)).sort((e,a)=>e[1].localeCompare(a[1]));return(0,a.jsxs)(b,{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:"Downloading model…"}),(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:"Transcription Languages"}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption2)] text-[var(--text-tertiary)] mb-[var(--space-3)]",children:"First language is the default. Add multiple to show a language picker in chat."}),(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}),N[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);n(!0),h.api.sttUpdateConfig(t).then(()=>r(e=>e?{...e,languages:t}:e)).catch(()=>{}).finally(()=>n(!1))})(t),disabled:s,"aria-label":`Remove ${N[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:"Add a language…"}),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];n(!0),o(""),h.api.sttUpdateConfig(a).then(()=>r(e=>e?{...e,languages:a}:e)).catch(()=>{}).finally(()=>n(!1))},disabled:!l||s,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 k(){let[e,r]=(0,t.useState)(!1),[s,n]=(0,t.useState)(!0);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:()=>n(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:s?"閉じる":"開く"})]}),s&&(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:"relative",children:[(0,a.jsx)("button",{type:"button",onClick:function(){navigator.clipboard.writeText(g).then(()=>{r(!0),setTimeout(()=>r(!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:e?"Copied!":"Copy"}),(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:g})})]})]})]})}e.s(["default",0,function(){(0,p.useBreadcrumbs)([{label:"Settings"}]);let{settings:e,setAccentColor:r,setPortalName:g,setPortalSubtitle:N,setOperatorName:S,setPortalEmoji:A,setLanguage:F,resetAll:T}=(0,d.useSettings)(),{theme:D,setTheme:I}=(0,x.useTheme)(),[B,E]=(0,t.useState)(e.portalName??""),[O,L]=(0,t.useState)(e.portalSubtitle??""),[M,P]=(0,t.useState)(e.operatorName??""),[R,_]=(0,t.useState)(e.portalEmoji??""),[W,G]=(0,t.useState)(e.language??"English"),[U,z]=(0,t.useState)(e.accentColor??""),[$,H]=(0,t.useState)(!1),[q,J]=(0,t.useState)({}),[K,V]=(0,t.useState)(!0),[Y,Q]=(0,t.useState)(null),[X,Z]=(0,t.useState)(!1),[ee,ea]=(0,t.useState)(null),[et,er]=(0,t.useState)(null),[es,en]=(0,t.useState)("unknown"),[el,eo]=(0,t.useState)([]);function ei(){V(!0),h.api.getConfig().then(e=>{J(e),Q(null)}).catch(e=>Q(e.message)).finally(()=>V(!1))}function ec(e,a){J(t=>{let r=structuredClone(t),s=r;for(let a=0;a<e.length-1;a++)s[e[a]]&&"object"==typeof s[e[a]]||(s[e[a]]={}),s=s[e[a]];return s[e[e.length-1]]=a,r})}return(0,t.useEffect)(()=>{h.api.getOrg().then(e=>{e?.employees&&eo(e.employees.map(e=>"string"==typeof e?{name:e,displayName:e}:{name:e.name,displayName:e.displayName||e.name}))}).catch(()=>{})},[]),(0,t.useEffect)(()=>{E(e.portalName??""),L(e.portalSubtitle??""),P(e.operatorName??""),_(e.portalEmoji??""),G(e.language??"English"),z(e.accentColor??"")},[e.portalName,e.portalSubtitle,e.operatorName,e.portalEmoji,e.language,e.accentColor]),(0,t.useEffect)(()=>{ei()},[]),(0,t.useEffect)(()=>{if(!q.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||en(r??"unknown"),"qr_pending"===r){let a=await fetch("/api/connectors/whatsapp/qr"),t=await a.json();e||er(t.qr)}else e||er(null)}catch{}}a();let t=setInterval(()=>{a()},1e4);return()=>{e=!0,clearInterval(t)}},[q.connectors?.whatsapp]),(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)(b,{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=D===e.id;return(0,a.jsxs)("button",{onClick:()=>I(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:m.map(t=>{let s=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:s?"2px solid var(--text-primary)":"2px solid transparent",outline:s?`2px solid ${t.value}`:"none",outlineOffset:2},children:s&&(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:U,onChange:e=>{z(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)(s,{size:12}),"Reset"]})]})]}),(0,a.jsx)(b,{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:"Choose an emoji for the COO shown in the sidebar."}),(0,a.jsxs)("div",{className:"relative flex items-center gap-[var(--space-4)]",children:[(0,a.jsx)("button",{onClick:()=>H(!$),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:"Click emoji to change"})]}),$&&(0,a.jsx)(u.EmojiPicker,{current:e.portalEmoji??"🧞",onSelect:e=>{A(e),H(!1)},onClose:()=>H(!1)})]})]})}),(0,a.jsx)(b,{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:B,onChange:e=>E(e.target.value),onBlur:()=>{g(B||null),h.api.completeOnboarding({portalName:B||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:O,onChange:e=>L(e.target.value),onBlur:()=>N(O||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:M,onChange:e=>P(e.target.value),onBlur:()=>{S(M||null),h.api.completeOnboarding({operatorName:M||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:R,onChange:e=>_(e.target.value),onBlur:()=>A(R||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:()=>{F(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"})]})]})]})}),ee&&(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"===ee.type?"rgba(34,197,94,0.1)":"rgba(239,68,68,0.1)",border:`1px solid ${"success"===ee.type?"rgba(34,197,94,0.3)":"rgba(239,68,68,0.3)"}`,color:"success"===ee.type?"var(--system-green)":"var(--system-red)"},children:ee.message}),K?(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,{size:20,className:"mx-auto mb-[var(--space-2)] animate-spin"}),"Loading gateway config..."]}):Y?(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: ",Y]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(b,{title:"ゲートウェイ設定",children:[(0,a.jsx)(j,{label:"Port",children:(0,a.jsx)(f,{type:"number",value:String(q.gateway?.port??""),onChange:e=>ec(["gateway","port"],Number(e)||0),placeholder:"7777"})}),(0,a.jsx)(j,{label:"Host",children:(0,a.jsx)(f,{value:q.gateway?.host??"",onChange:e=>ec(["gateway","host"],e),placeholder:"127.0.0.1"})}),(0,a.jsx)(j,{label:"Default Engine",children:(0,a.jsx)(y,{value:q.engines?.default??"claude",onChange:e=>ec(["engines","default"],e),options:[{value:"claude",label:"Claude"},{value:"codex",label:"Codex"}]})})]}),(0,a.jsxs)(b,{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)(j,{label:"Binary Path",children:(0,a.jsx)(f,{value:q.engines?.claude?.bin??"",onChange:e=>ec(["engines","claude","bin"],e),placeholder:"claude"})}),(0,a.jsx)(j,{label:"Model",children:(0,a.jsx)(y,{value:q.engines?.claude?.model??"opus",onChange:e=>ec(["engines","claude","model"],e),options:[{value:"opus",label:"Opus (claude-opus-4-6)"},{value:"sonnet",label:"Sonnet (claude-sonnet-4-6)"},{value:"haiku",label:"Haiku (claude-haiku-4-5)"}]})}),(0,a.jsx)(j,{label:"Effort Level",children:(0,a.jsx)(y,{value:q.engines?.claude?.effortLevel??"default",onChange:e=>ec(["engines","claude","effortLevel"],e),options:[{value:"default",label:"Default"},{value:"low",label:"Low"},{value:"medium",label:"Medium"},{value:"high",label:"High"}]})}),(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)(j,{label:"Binary Path",children:(0,a.jsx)(f,{value:q.engines?.codex?.bin??"",onChange:e=>ec(["engines","codex","bin"],e),placeholder:"codex"})}),(0,a.jsx)(j,{label:"Model",children:(0,a.jsx)(y,{value:q.engines?.codex?.model??"gpt-5.5",onChange:e=>ec(["engines","codex","model"],e),options:[{value:"gpt-5.5",label:"GPT-5.5"},{value:"gpt-5.4",label:"GPT-5.4"},{value:"gpt-5.3-codex",label:"GPT-5.3 Codex"},{value:"gpt-5.2-codex",label:"GPT-5.2 Codex"},{value:"gpt-5.2",label:"GPT-5.2"},{value:"gpt-5.1-codex-max",label:"GPT-5.1 Codex Max"},{value:"gpt-5.1-codex-mini",label:"GPT-5.1 Codex Mini"}]})}),(0,a.jsx)(j,{label:"Effort Level",children:(0,a.jsx)(y,{value:q.engines?.codex?.effortLevel??"default",onChange:e=>ec(["engines","codex","effortLevel"],e),options:[{value:"default",label:"Default"},{value:"low",label:"Low"},{value:"medium",label:"Medium"},{value:"high",label:"High"},{value:"xhigh",label:"Extra High"}]})})]}),(0,a.jsxs)(b,{title:"セッション",children:[(0,a.jsx)(j,{label:"Interrupt on New Message",children:(0,a.jsx)(w,{checked:q.sessions?.interruptOnNewMessage??!0,onChange:e=>ec(["sessions","interruptOnNewMessage"],e)})}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] text-[var(--label-secondary)] mt-[4px]",children:"When enabled, sending a new message to a running session will stop the current agent and start processing your new message immediately. When disabled, messages are queued."}),(0,a.jsx)("div",{className:"border-t border-[var(--separator)] mt-[var(--space-3)] pt-[var(--space-3)]"}),(0,a.jsx)(j,{label:"When Claude Hits Usage Limit",children:(0,a.jsx)(y,{value:q.sessions?.rateLimitStrategy??"fallback",onChange:e=>ec(["sessions","rateLimitStrategy"],e),options:[{value:"wait",label:"Wait & Auto-Resume"},{value:"fallback",label:"Switch to GPT (Codex)"}]})}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] text-[var(--label-secondary)] mt-[4px]",children:'"Wait" pauses the session and continues automatically when Claude resets. "Switch" answers immediately using GPT, then returns to Claude once the reset window passes.'})]}),(0,a.jsxs)(b,{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)(k,{}),(0,a.jsx)(j,{label:"App Token",children:(0,a.jsx)(f,{type:"password",value:q.connectors?.slack?.appToken??"",onChange:e=>ec(["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)(j,{label:"Bot Token",children:(0,a.jsx)(f,{type:"password",value:q.connectors?.slack?.botToken??"",onChange:e=>ec(["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)(j,{label:"チャンネルでセッションを共有",children:(0,a.jsx)(w,{checked:q.connectors?.slack?.shareSessionInChannel??!1,onChange:e=>ec(["connectors","slack","shareSessionInChannel"],e)})}),(0,a.jsx)(j,{label:"許可ユーザー",children:(0,a.jsx)(f,{value:Array.isArray(q.connectors?.slack?.allowFrom)?q.connectors?.slack?.allowFrom?.join(", "):q.connectors?.slack?.allowFrom??"",onChange:e=>ec(["connectors","slack","allowFrom"],e.trim()?e.split(",").map(e=>e.trim()).filter(Boolean):void 0),placeholder:"U123, U456"})}),(0,a.jsx)(j,{label:"起動時に古いメッセージを無視",children:(0,a.jsx)(w,{checked:q.connectors?.slack?.ignoreOldMessagesOnBoot??!0,onChange:e=>ec(["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:"空気読みトリアージ"}),(0,a.jsx)(j,{label:"有効化",children:(0,a.jsx)(w,{checked:q.connectors?.slack?.triage?.enabled??!1,onChange:e=>ec(["connectors","slack","triage","enabled"],e)})}),(0,a.jsx)(j,{label:"Model",children:(0,a.jsx)(f,{value:q.connectors?.slack?.triage?.model??"",onChange:e=>ec(["connectors","slack","triage","model"],e.trim()||void 0),placeholder:"claude-haiku-4-5"})}),(0,a.jsx)(j,{label:"タイムアウト (ms)",children:(0,a.jsx)(f,{type:"number",value:q.connectors?.slack?.triage?.timeoutMs!==void 0?String(q.connectors.slack.triage.timeoutMs):"",onChange:e=>ec(["connectors","slack","triage","timeoutMs"],e.trim()?Number(e):void 0),placeholder:"20000"})}),(0,a.jsx)(j,{label:"スレッド文脈の取得件数",children:(0,a.jsx)(f,{type:"number",value:q.connectors?.slack?.triage?.threadContextLimit!==void 0?String(q.connectors.slack.triage.threadContextLimit):"",onChange:e=>ec(["connectors","slack","triage","threadContextLimit"],e.trim()?Number(e):void 0),placeholder:"10"})}),(0,a.jsx)(j,{label:"ペルソナ(任意)",children:(0,a.jsx)(f,{value:q.connectors?.slack?.triage?.persona??"",onChange:e=>ec(["connectors","slack","triage","persona"],e.trim()||void 0),placeholder:"Short description of what this bot is good at"})}),(0,a.jsx)(j,{label:"バイナリパス上書き(任意)",children:(0,a.jsx)(f,{value:q.connectors?.slack?.triage?.bin??"",onChange:e=>ec(["connectors","slack","triage","bin"],e.trim()||void 0),placeholder:"claude"})}),(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)(j,{label:"Bot Token",children:(0,a.jsx)(f,{type:"password",value:q.connectors?.discord?.botToken??"",onChange:e=>ec(["connectors","discord","botToken"],e),placeholder:"Bot token..."})}),(0,a.jsx)(j,{label:"Allow From",children:(0,a.jsx)(f,{value:Array.isArray(q.connectors?.discord?.allowFrom)?q.connectors?.discord?.allowFrom?.join(", "):q.connectors?.discord?.allowFrom??"",onChange:e=>ec(["connectors","discord","allowFrom"],e.trim()?e.split(",").map(e=>e.trim()).filter(Boolean):void 0),placeholder:"User IDs, comma-separated (optional)"})}),(0,a.jsx)(j,{label:"Guild ID",children:(0,a.jsx)(f,{value:q.connectors?.discord?.guildId??"",onChange:e=>ec(["connectors","discord","guildId"],e.trim()||void 0),placeholder:"Server/Guild ID (optional)"})}),(0,a.jsx)(j,{label:"Channel ID",children:(0,a.jsx)(f,{value:q.connectors?.discord?.channelId??"",onChange:e=>ec(["connectors","discord","channelId"],e.trim()||void 0),placeholder:"Restrict to this channel (right-click → Copy Channel ID)"})}),(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)(j,{label:"Bot Token",children:(0,a.jsx)(f,{type:"password",value:q.connectors?.telegram?.botToken??"",onChange:e=>ec(["connectors","telegram","botToken"],e),placeholder:"123456:ABC-DEF..."})}),(0,a.jsx)(j,{label:"Allow From (User IDs)",children:(0,a.jsx)(f,{value:Array.isArray(q.connectors?.telegram?.allowFrom)?q.connectors?.telegram?.allowFrom?.join(", "):"",onChange:e=>ec(["connectors","telegram","allowFrom"],e.trim()?e.split(",").map(e=>Number(e.trim())).filter(e=>!isNaN(e)):void 0),placeholder:"Telegram user IDs, comma-separated (optional)"})}),(0,a.jsx)(j,{label:"起動時に古いメッセージを無視",children:(0,a.jsx)(w,{checked:q.connectors?.telegram?.ignoreOldMessagesOnBoot??!0,onChange:e=>ec(["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:"On first start, scan the QR code below with your WhatsApp app to connect. Credentials are cached for subsequent runs."}),(0,a.jsx)(j,{label:"Auth Directory",children:(0,a.jsx)(f,{value:q.connectors?.whatsapp?.authDir??"",onChange:e=>ec(["connectors","whatsapp","authDir"],e.trim()||void 0),placeholder:"Default: ~/.jinn/.whatsapp-auth"})}),(0,a.jsx)(j,{label:"Allow From",children:(0,a.jsx)(f,{value:Array.isArray(q.connectors?.whatsapp?.allowFrom)?q.connectors?.whatsapp?.allowFrom?.join(", "):"",onChange:e=>ec(["connectors","whatsapp","allowFrom"],e.trim()?e.split(",").map(e=>e.trim()).filter(Boolean):void 0),placeholder:"447700900000@s.whatsapp.net, ... (optional)"})}),et&&(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:"Scan with WhatsApp to connect"}),(0,a.jsx)("img",{src:et,alt:"WhatsApp QR Code",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:"Open WhatsApp → Linked Devices → Link a Device"})]}),q.connectors?.whatsapp&&"ok"===es&&(0,a.jsx)("div",{className:"mt-[var(--space-2)] text-[length:var(--text-caption1)] text-[var(--system-green)] font-semibold",children:"✓ Connected"}),(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:"Connector Instances"}),(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)(s,{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=[...q.connectors?.instances||[]],a=`discord-${e.length+1}`;e.push({id:a,type:"discord"}),ec(["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."}),(q.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=[...q.connectors?.instances||[]];e.splice(t,1),ec(["connectors","instances"],e.length>0?e:void 0)},children:(0,a.jsx)(n.Trash2,{size:14})})]}),(0,a.jsx)(j,{label:"Instance ID",children:(0,a.jsx)(f,{value:e.id??"",onChange:e=>{let a=[...q.connectors?.instances||[]];a[t]={...a[t],id:e},ec(["connectors","instances"],a)},placeholder:"e.g. discord-vox"})}),(0,a.jsx)(j,{label:"Type",children:(0,a.jsx)(y,{value:e.type??"discord",onChange:e=>{let a=[...q.connectors?.instances||[]];a[t]={...a[t],type:e},ec(["connectors","instances"],a)},options:[{value:"discord",label:"Discord"},{value:"slack",label:"Slack"},{value:"whatsapp",label:"WhatsApp"}]})}),(0,a.jsx)(j,{label:"Employee",children:(0,a.jsx)(y,{value:e.employee??"",onChange:e=>{let a=[...q.connectors?.instances||[]];a[t]={...a[t],employee:e||void 0},ec(["connectors","instances"],a)},options:[{value:"",label:"Default (COO)"},...el.map(e=>({value:e.name,label:e.displayName}))]})}),("discord"===e.type||!e.type)&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(j,{label:"Bot Token",children:(0,a.jsx)(f,{type:"password",value:e.botToken??"",onChange:e=>{let a=[...q.connectors?.instances||[]];a[t]={...a[t],botToken:e},ec(["connectors","instances"],a)},placeholder:"Bot token..."})}),(0,a.jsx)(j,{label:"Guild ID",children:(0,a.jsx)(f,{value:e.guildId??"",onChange:e=>{let a=[...q.connectors?.instances||[]];a[t]={...a[t],guildId:e.trim()||void 0},ec(["connectors","instances"],a)},placeholder:"Server/Guild ID"})}),(0,a.jsx)(j,{label:"Channel ID",children:(0,a.jsx)(f,{value:e.channelId??"",onChange:e=>{let a=[...q.connectors?.instances||[]];a[t]={...a[t],channelId:e.trim()||void 0},ec(["connectors","instances"],a)},placeholder:"Restrict to channel (optional)"})}),(0,a.jsx)(j,{label:"Allow From",children:(0,a.jsx)(f,{value:Array.isArray(e.allowFrom)?e.allowFrom.join(", "):e.allowFrom??"",onChange:e=>{let a=[...q.connectors?.instances||[]];a[t]={...a[t],allowFrom:e.trim()?e.split(",").map(e=>e.trim()).filter(Boolean):void 0},ec(["connectors","instances"],a)},placeholder:"User IDs, comma-separated (optional)"})})]}),"slack"===e.type&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(j,{label:"App Token",children:(0,a.jsx)(f,{type:"password",value:e.appToken??"",onChange:e=>{let a=[...q.connectors?.instances||[]];a[t]={...a[t],appToken:e},ec(["connectors","instances"],a)},placeholder:"xapp-..."})}),(0,a.jsx)(j,{label:"Bot Token",children:(0,a.jsx)(f,{type:"password",value:e.botToken??"",onChange:e=>{let a=[...q.connectors?.instances||[]];a[t]={...a[t],botToken:e},ec(["connectors","instances"],a)},placeholder:"xoxb-..."})})]}),"whatsapp"===e.type&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(j,{label:"Auth Directory",children:(0,a.jsx)(f,{value:e.authDir??"",onChange:e=>{let a=[...q.connectors?.instances||[]];a[t]={...a[t],authDir:e.trim()||void 0},ec(["connectors","instances"],a)},placeholder:"Default: ~/.jinn/.whatsapp-auth"})}),(0,a.jsx)(j,{label:"Allow From",children:(0,a.jsx)(f,{value:Array.isArray(e.allowFrom)?e.allowFrom.join(", "):"",onChange:e=>{let a=[...q.connectors?.instances||[]];a[t]={...a[t],allowFrom:e.trim()?e.split(",").map(e=>e.trim()).filter(Boolean):void 0},ec(["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)(b,{title:"Cron",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)(j,{label:"Connector",children:(0,a.jsx)(y,{value:q.cron?.defaultDelivery?.connector??"",onChange:e=>ec(["cron","defaultDelivery","connector"],e||void 0),options:[{value:"",label:"None (fire & forget)"},{value:"web",label:"Web"},{value:"slack",label:"Slack"}]})}),q.cron?.defaultDelivery?.connector&&(0,a.jsx)(j,{label:"Channel",children:(0,a.jsx)(f,{value:q.cron?.defaultDelivery?.channel??"",onChange:e=>ec(["cron","defaultDelivery","channel"],e),placeholder:"#general"})})]}),(0,a.jsxs)(b,{title:"Logging",children:[(0,a.jsx)(j,{label:"Level",children:(0,a.jsx)(y,{value:q.logging?.level??"info",onChange:e=>ec(["logging","level"],e),options:[{value:"debug",label:"Debug"},{value:"info",label:"Info"},{value:"warn",label:"Warn"},{value:"error",label:"Error"}]})}),(0,a.jsx)(j,{label:"Stdout",children:(0,a.jsx)(w,{checked:q.logging?.stdout??!0,onChange:e=>ec(["logging","stdout"],e)})}),(0,a.jsx)(j,{label:"File Logging",children:(0,a.jsx)(w,{checked:q.logging?.file??!1,onChange:e=>ec(["logging","file"],e)})})]}),(0,a.jsx)(C,{}),(0,a.jsxs)("div",{className:"flex justify-end gap-[var(--space-3)] mb-[var(--space-6)]",children:[(0,a.jsxs)("button",{onClick:()=>ei(),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)(s,{size:14}),"Reload"]}),(0,a.jsxs)("button",{onClick:function(){Z(!0),ea(null),h.api.updateConfig(q).then(e=>{if(e?.connectorsReloadError)return void ea({type:"error",message:`Settings saved but connector reload failed: ${e.connectorsReloadError}`});let a=e?.connectorsReload?.errors??[];e?.status==="partial"||a.length>0?ea({type:"error",message:`Settings saved but ${a.length} connector(s) failed: ${a.join("; ")}`}):ea({type:"success",message:"Settings saved successfully"})}).catch(e=>ea({type:"error",message:`Failed to save: ${e.message}`})).finally(()=>Z(!1))},disabled:X,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:X?"wait":"pointer",opacity:X?.7:1},children:[(0,a.jsx)(o,{size:14}),X?"Saving...":"Save Config"]})]})]}),(0,a.jsx)(b,{title:"Reset",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)(s,{size:14}),"Re-run Onboarding Wizard"]}),(0,a.jsxs)("button",{onClick:()=>{window.confirm("Reset all settings to defaults?")&&(localStorage.removeItem("jinn-settings"),localStorage.removeItem("jinn-theme"),T(),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)(n.Trash2,{size:14}),"Reset All Settings"]})]})})]})})})}],15857)}]);