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.
- package/dist/package.json +1 -1
- package/dist/src/cli/migrate.d.ts.map +1 -1
- package/dist/src/cli/migrate.js +42 -14
- package/dist/src/cli/migrate.js.map +1 -1
- package/dist/src/cli/setup.d.ts.map +1 -1
- package/dist/src/cli/setup.js +4 -27
- package/dist/src/cli/setup.js.map +1 -1
- package/dist/src/connectors/slack/__tests__/agents-canvas.test.d.ts +2 -0
- package/dist/src/connectors/slack/__tests__/agents-canvas.test.d.ts.map +1 -0
- package/dist/src/connectors/slack/__tests__/agents-canvas.test.js +191 -0
- package/dist/src/connectors/slack/__tests__/agents-canvas.test.js.map +1 -0
- package/dist/src/connectors/slack/__tests__/goal-extractor.test.d.ts +2 -0
- package/dist/src/connectors/slack/__tests__/goal-extractor.test.d.ts.map +1 -0
- package/dist/src/connectors/slack/__tests__/goal-extractor.test.js +129 -0
- package/dist/src/connectors/slack/__tests__/goal-extractor.test.js.map +1 -0
- package/dist/src/connectors/slack/agents-canvas.d.ts +59 -0
- package/dist/src/connectors/slack/agents-canvas.d.ts.map +1 -0
- package/dist/src/connectors/slack/agents-canvas.js +372 -0
- package/dist/src/connectors/slack/agents-canvas.js.map +1 -0
- package/dist/src/connectors/slack/goal-extractor.d.ts +67 -0
- package/dist/src/connectors/slack/goal-extractor.d.ts.map +1 -0
- package/dist/src/connectors/slack/goal-extractor.js +302 -0
- package/dist/src/connectors/slack/goal-extractor.js.map +1 -0
- package/dist/src/connectors/slack/index.d.ts +15 -0
- package/dist/src/connectors/slack/index.d.ts.map +1 -1
- package/dist/src/connectors/slack/index.js +78 -0
- package/dist/src/connectors/slack/index.js.map +1 -1
- package/dist/src/engines/claude.d.ts +11 -0
- package/dist/src/engines/claude.d.ts.map +1 -1
- package/dist/src/engines/claude.js +75 -13
- package/dist/src/engines/claude.js.map +1 -1
- package/dist/src/gateway/api.d.ts.map +1 -1
- package/dist/src/gateway/api.js +20 -0
- package/dist/src/gateway/api.js.map +1 -1
- package/dist/src/gateway/server.d.ts.map +1 -1
- package/dist/src/gateway/server.js +61 -2
- package/dist/src/gateway/server.js.map +1 -1
- package/dist/src/sessions/context.js +20 -2
- package/dist/src/sessions/context.js.map +1 -1
- package/dist/src/sessions/manager.d.ts.map +1 -1
- package/dist/src/sessions/manager.js +15 -1
- package/dist/src/sessions/manager.js.map +1 -1
- package/dist/src/shared/templateReplacements.d.ts +22 -0
- package/dist/src/shared/templateReplacements.d.ts.map +1 -0
- package/dist/src/shared/templateReplacements.js +57 -0
- package/dist/src/shared/templateReplacements.js.map +1 -0
- package/dist/src/shared/types.d.ts +21 -0
- package/dist/src/shared/types.d.ts.map +1 -1
- package/dist/web/404.html +1 -1
- package/dist/web/__next.__PAGE__.txt +2 -2
- package/dist/web/__next._full.txt +3 -3
- package/dist/web/__next._head.txt +1 -1
- package/dist/web/__next._index.txt +2 -2
- package/dist/web/__next._tree.txt +2 -2
- package/dist/web/_next/static/chunks/{0y3uv64m1qh.k.js → 012aakl34ff5a.js} +2 -2
- package/dist/web/_next/static/chunks/{0j4uz-g9x1_~s.js → 0a2uy1kw.~j~c.js} +1 -1
- package/dist/web/_next/static/chunks/{0v51a3blij~j6.js → 0agxgztb0b~.7.js} +2 -2
- package/dist/web/_next/static/chunks/{1645~4k0qcst0.js → 0g6xt.91k~0bc.js} +2 -2
- package/dist/web/_next/static/chunks/{16zc7-yv7supr.js → 0jzw1gpuag8bc.js} +2 -2
- package/dist/web/_next/static/chunks/0kceasmxfr3s1.js +1 -0
- package/dist/web/_next/static/chunks/{0wv0qjh9tuqx~.js → 0lkp92-ovteta.js} +2 -2
- package/dist/web/_next/static/chunks/{1621s_jgljr1_.js → 0msmlzd_~uk0y.js} +2 -2
- package/dist/web/_next/static/chunks/{00yn.jp4tr9l6.js → 0z5lzlvft9.4o.js} +2 -2
- package/dist/web/_next/static/chunks/103zsy0q9psfj.css +1 -0
- package/dist/web/_next/static/chunks/{0ma0h4_2c8y9y.js → 12m97bwrg1tuu.js} +2 -2
- package/dist/web/_not-found/__next._full.txt +2 -2
- package/dist/web/_not-found/__next._head.txt +1 -1
- package/dist/web/_not-found/__next._index.txt +2 -2
- package/dist/web/_not-found/__next._not-found.__PAGE__.txt +1 -1
- package/dist/web/_not-found/__next._not-found.txt +1 -1
- package/dist/web/_not-found/__next._tree.txt +2 -2
- package/dist/web/_not-found.html +1 -1
- package/dist/web/_not-found.txt +2 -2
- package/dist/web/chat/__next._full.txt +3 -3
- package/dist/web/chat/__next._head.txt +1 -1
- package/dist/web/chat/__next._index.txt +2 -2
- package/dist/web/chat/__next._tree.txt +2 -2
- package/dist/web/chat/__next.chat.__PAGE__.txt +2 -2
- package/dist/web/chat/__next.chat.txt +1 -1
- package/dist/web/chat.html +1 -1
- package/dist/web/chat.txt +3 -3
- package/dist/web/cron/__next._full.txt +3 -3
- package/dist/web/cron/__next._head.txt +1 -1
- package/dist/web/cron/__next._index.txt +2 -2
- package/dist/web/cron/__next._tree.txt +2 -2
- package/dist/web/cron/__next.cron.__PAGE__.txt +2 -2
- package/dist/web/cron/__next.cron.txt +1 -1
- package/dist/web/cron.html +1 -1
- package/dist/web/cron.txt +3 -3
- package/dist/web/index.html +1 -1
- package/dist/web/index.txt +3 -3
- package/dist/web/kanban/__next._full.txt +3 -3
- package/dist/web/kanban/__next._head.txt +1 -1
- package/dist/web/kanban/__next._index.txt +2 -2
- package/dist/web/kanban/__next._tree.txt +2 -2
- package/dist/web/kanban/__next.kanban.__PAGE__.txt +2 -2
- package/dist/web/kanban/__next.kanban.txt +1 -1
- package/dist/web/kanban.html +1 -1
- package/dist/web/kanban.txt +3 -3
- package/dist/web/logs/__next._full.txt +3 -3
- package/dist/web/logs/__next._head.txt +1 -1
- package/dist/web/logs/__next._index.txt +2 -2
- package/dist/web/logs/__next._tree.txt +2 -2
- package/dist/web/logs/__next.logs.__PAGE__.txt +2 -2
- package/dist/web/logs/__next.logs.txt +1 -1
- package/dist/web/logs.html +2 -2
- package/dist/web/logs.txt +3 -3
- package/dist/web/org/__next._full.txt +3 -3
- package/dist/web/org/__next._head.txt +1 -1
- package/dist/web/org/__next._index.txt +2 -2
- package/dist/web/org/__next._tree.txt +2 -2
- package/dist/web/org/__next.org.__PAGE__.txt +2 -2
- package/dist/web/org/__next.org.txt +1 -1
- package/dist/web/org.html +1 -1
- package/dist/web/org.txt +3 -3
- package/dist/web/sessions/__next._full.txt +2 -2
- package/dist/web/sessions/__next._head.txt +1 -1
- package/dist/web/sessions/__next._index.txt +2 -2
- package/dist/web/sessions/__next._tree.txt +2 -2
- package/dist/web/sessions/__next.sessions.__PAGE__.txt +1 -1
- package/dist/web/sessions/__next.sessions.txt +1 -1
- package/dist/web/sessions.html +1 -1
- package/dist/web/sessions.txt +2 -2
- package/dist/web/settings/__next._full.txt +3 -3
- package/dist/web/settings/__next._head.txt +1 -1
- package/dist/web/settings/__next._index.txt +2 -2
- package/dist/web/settings/__next._tree.txt +2 -2
- package/dist/web/settings/__next.settings.__PAGE__.txt +2 -2
- package/dist/web/settings/__next.settings.txt +1 -1
- package/dist/web/settings.html +1 -1
- package/dist/web/settings.txt +3 -3
- package/dist/web/skills/__next._full.txt +3 -3
- package/dist/web/skills/__next._head.txt +1 -1
- package/dist/web/skills/__next._index.txt +2 -2
- package/dist/web/skills/__next._tree.txt +2 -2
- package/dist/web/skills/__next.skills.__PAGE__.txt +2 -2
- package/dist/web/skills/__next.skills.txt +1 -1
- package/dist/web/skills.html +1 -1
- package/dist/web/skills.txt +3 -3
- package/package.json +1 -1
- package/template/migrations/2026.5.7/files/BOOTSTRAP.md +52 -0
- package/template/migrations/2026.5.7/files/IDENTITY.md +25 -0
- package/template/migrations/2026.5.7/files/MEMORY.md +33 -0
- package/template/migrations/2026.5.7/files/SOUL.md +36 -0
- package/template/migrations/2026.5.7/files/TOOLS.md +23 -0
- package/template/migrations/2026.5.7/files/memory/.gitkeep +0 -0
- package/dist/web/_next/static/chunks/05uy~i7wsbsn3.js +0 -1
- package/dist/web/_next/static/chunks/0bj62gv2pext..css +0 -1
- package/dist/web/dev/logs/next-development.log +0 -5
- /package/dist/web/_next/static/{VBjMXtz9-pIo9izqNT-iu → 2gkySyM5UoStZGUIrVpRy}/_buildManifest.js +0 -0
- /package/dist/web/_next/static/{VBjMXtz9-pIo9izqNT-iu → 2gkySyM5UoStZGUIrVpRy}/_clientMiddlewareManifest.js +0 -0
- /package/dist/web/_next/static/{VBjMXtz9-pIo9izqNT-iu → 2gkySyM5UoStZGUIrVpRy}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
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","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","message.channels","message.groups","message.im","message.mpim","reaction_added"]},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 k={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(k).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:"モデルをダウンロード中…"}),(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}),k[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 ${k[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];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 N(){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?"コピー済み":"コピー"}),(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:k,setOperatorName:S,setPortalEmoji:T,setLanguage:A,resetAll:I}=(0,d.useSettings)(),{theme:F,setTheme:B}=(0,x.useTheme)(),[D,E]=(0,t.useState)(e.portalName??""),[O,P]=(0,t.useState)(e.portalSubtitle??""),[M,_]=(0,t.useState)(e.operatorName??""),[L,G]=(0,t.useState)(e.portalEmoji??""),[R,$]=(0,t.useState)(e.language??"English"),[U,W]=(0,t.useState)(e.accentColor??""),[z,H]=(0,t.useState)(!1),[q,J]=(0,t.useState)({}),[V,K]=(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)([]),[ei,ec]=(0,t.useState)(null),[ed,ep]=(0,t.useState)(!1),[ex,ev]=(0,t.useState)(null);(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(()=>{})},[]);let eh=async()=>{ep(!0),ev(null);try{let e=await fetch("/api/connectors/slack/channels"),a=await e.json();if(a?.ok)ec(a.channels??[]);else{let t=a?.error||`HTTP ${e.status}`;"missing_scope"===t?ev("Bot に canvases / channels scope が足りません。上のSlack App Manifestを貼り直して再インストールしてください。"):"slack_not_configured"===t?ev("Slack コネクタが未起動です。先に Bot Token / App Token を保存して再起動してください。"):ev(`チャンネル取得失敗: ${t}`),ec(null)}}catch(e){ev(e instanceof Error?e.message:String(e)),ec(null)}finally{ep(!1)}};function eu(){K(!0),h.api.getConfig().then(e=>{J(e),Q(null)}).catch(e=>Q(e.message)).finally(()=>K(!1))}function em(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)(()=>{E(e.portalName??""),P(e.portalSubtitle??""),_(e.operatorName??""),G(e.portalEmoji??""),$(e.language??"English"),W(e.accentColor??"")},[e.portalName,e.portalSubtitle,e.operatorName,e.portalEmoji,e.language,e.accentColor]),(0,t.useEffect)(()=>{eu()},[]),(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=F===e.id;return(0,a.jsxs)("button",{onClick:()=>B(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=>{W(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}),"リセット"]})]})]}),(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:"サイドバーに表示される COO の絵文字を選択してください。"}),(0,a.jsxs)("div",{className:"relative flex items-center gap-[var(--space-4)]",children:[(0,a.jsx)("button",{onClick:()=>H(!z),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:"絵文字をクリックして変更"})]}),z&&(0,a.jsx)(u.EmojiPicker,{current:e.portalEmoji??"🧞",onSelect:e=>{T(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:D,onChange:e=>E(e.target.value),onBlur:()=>{g(D||null),h.api.completeOnboarding({portalName:D||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=>P(e.target.value),onBlur:()=>k(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=>_(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:L,onChange:e=>G(e.target.value),onBlur:()=>T(L||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:R,onChange:e=>$(e.target.value),onBlur:()=>{A(R||"English"),h.api.completeOnboarding({language:R||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}),V?(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=>em(["gateway","port"],Number(e)||0),placeholder:"7777"})}),(0,a.jsx)(j,{label:"Host",children:(0,a.jsx)(f,{value:q.gateway?.host??"",onChange:e=>em(["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=>em(["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=>em(["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=>em(["engines","claude","model"],e),options:[{value:"opus",label:"Opus (claude-opus-4-7)"},{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=>em(["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=>em(["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=>em(["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=>em(["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:"新規メッセージで中断",children:(0,a.jsx)(w,{checked:q.sessions?.interruptOnNewMessage??!0,onChange:e=>em(["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)(j,{label:"Claude が利用上限に達した時",children:(0,a.jsx)(y,{value:q.sessions?.rateLimitStrategy??"fallback",onChange:e=>em(["sessions","rateLimitStrategy"],e),options:[{value:"wait",label:"待機して自動再開"},{value:"fallback",label:"GPT (Codex) に切り替え"}]})}),(0,a.jsx)("div",{className:"text-[length:var(--text-caption1)] text-[var(--label-secondary)] mt-[4px]",children:"「待機」は Claude のリセットを待ってからセッションを自動再開します。 「切り替え」は即座に GPT で応答し、リセット後に Claude へ戻します。"})]}),(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)(N,{}),(0,a.jsx)(j,{label:"App Token",children:(0,a.jsx)(f,{type:"password",value:q.connectors?.slack?.appToken??"",onChange:e=>em(["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=>em(["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=>em(["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=>em(["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=>em(["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=>em(["connectors","slack","triage","enabled"],e)})}),(0,a.jsx)(j,{label:"Model",children:(0,a.jsx)(f,{value:q.connectors?.slack?.triage?.model??"",onChange:e=>em(["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=>em(["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=>em(["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=>em(["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=>em(["connectors","slack","triage","bin"],e.trim()||void 0),placeholder:"claude"})}),(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"}),q.connectors?.slack?.appToken&&q.connectors?.slack?.botToken&&!q.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.jsxs)("div",{className:"text-[length:var(--text-caption1)] text-[var(--text-secondary)]",children:["いま動いている全 Ryoko セッションが Slack の Canvas タブにライブ表示されます。 下の「有効化」を ON にしてチャンネルを選ぶだけで30秒以内に作成されます。 必要 scope は ",(0,a.jsx)("code",{className:"text-[var(--accent)]",children:"canvases:write"})," と",(0,a.jsx)("code",{className:"text-[var(--accent)] ml-1",children:"canvases:read"}),"(manifest を貼り直して reinstall すれば自動)。"]})]}),(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 に自動同期します。指定したチャンネル直下のタブとして 常に最新状態が見えるようになります。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"}),"scope が必要です(上の Slack App Manifest を貼り直して reinstall すれば 自動で揃います)。"]}),(0,a.jsx)(j,{label:"有効化",children:(0,a.jsx)(w,{checked:q.connectors?.slack?.agentsCanvas?.enabled??!1,onChange:e=>em(["connectors","slack","agentsCanvas","enabled"],e)})}),(0,a.jsx)(j,{label:"表示先チャンネル",children:(0,a.jsxs)("div",{className:"flex w-full gap-[var(--space-2)] items-center",children:[ei&&ei.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:q.connectors?.slack?.agentsCanvas?.channelId??"",onChange:e=>em(["connectors","slack","agentsCanvas","channelId"],e.target.value||void 0),children:[(0,a.jsx)("option",{value:"",children:"— 選択してください —"}),ei.map(e=>(0,a.jsxs)("option",{value:e.id,children:[e.isPrivate?"🔒 ":"#",e.name]},e.id))]}):(0,a.jsx)(f,{value:q.connectors?.slack?.agentsCanvas?.channelId??"",onChange:e=>em(["connectors","slack","agentsCanvas","channelId"],e.trim()||void 0),placeholder:"C01234ABCDE — bot が member のチャンネル"}),(0,a.jsx)("button",{type:"button",onClick:eh,disabled:ed,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:ed?(0,a.jsx)(i,{className:"h-4 w-4 animate-spin"}):ei?"更新":"読み込み"})]})}),ex?(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:ex}):null,(0,a.jsx)(j,{label:"Canvas タイトル",children:(0,a.jsx)(f,{value:q.connectors?.slack?.agentsCanvas?.title??"",onChange:e=>em(["connectors","slack","agentsCanvas","title"],e.trim()||void 0),placeholder:"Ryoko Agents View"})}),(0,a.jsx)(j,{label:"更新間隔 (ms)",children:(0,a.jsx)(f,{type:"number",value:q.connectors?.slack?.agentsCanvas?.pollIntervalMs!==void 0?String(q.connectors.slack.agentsCanvas.pollIntervalMs):"",onChange:e=>em(["connectors","slack","agentsCanvas","pollIntervalMs"],e.trim()?Number(e):void 0),placeholder:"30000(30秒, 最小 5000)"})}),(0,a.jsx)(j,{label:"グループ毎の最大表示件数",children:(0,a.jsx)(f,{type:"number",value:q.connectors?.slack?.agentsCanvas?.maxPerGroup!==void 0?String(q.connectors.slack.agentsCanvas.maxPerGroup):"",onChange:e=>em(["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)(j,{label:"Bot Token",children:(0,a.jsx)(f,{type:"password",value:q.connectors?.discord?.botToken??"",onChange:e=>em(["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=>em(["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=>em(["connectors","discord","guildId"],e.trim()||void 0),placeholder:"サーバー/Guild ID(任意)"})}),(0,a.jsx)(j,{label:"Channel ID",children:(0,a.jsx)(f,{value:q.connectors?.discord?.channelId??"",onChange:e=>em(["connectors","discord","channelId"],e.trim()||void 0),placeholder:"このチャンネルに限定(右クリック → 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=>em(["connectors","telegram","botToken"],e),placeholder:"123456:ABC-DEF..."})}),(0,a.jsx)(j,{label:"許可ユーザー (User ID)",children:(0,a.jsx)(f,{value:Array.isArray(q.connectors?.telegram?.allowFrom)?q.connectors?.telegram?.allowFrom?.join(", "):"",onChange:e=>em(["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)(j,{label:"起動時に古いメッセージを無視",children:(0,a.jsx)(w,{checked:q.connectors?.telegram?.ignoreOldMessagesOnBoot??!0,onChange:e=>em(["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)(j,{label:"認証ディレクトリ",children:(0,a.jsx)(f,{value:q.connectors?.whatsapp?.authDir??"",onChange:e=>em(["connectors","whatsapp","authDir"],e.trim()||void 0),placeholder:"デフォルト: ~/.ryoko/.whatsapp-auth"})}),(0,a.jsx)(j,{label:"許可送信元",children:(0,a.jsx)(f,{value:Array.isArray(q.connectors?.whatsapp?.allowFrom)?q.connectors?.whatsapp?.allowFrom?.join(", "):"",onChange:e=>em(["connectors","whatsapp","allowFrom"],e.trim()?e.split(",").map(e=>e.trim()).filter(Boolean):void 0),placeholder:"447700900000@s.whatsapp.net, ...(任意)"})}),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:"WhatsApp でスキャンして接続"}),(0,a.jsx)("img",{src:et,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 → リンク済み端末 → 端末をリンク"})]}),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:"✓ 接続済み"}),(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)(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"}),em(["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),em(["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},em(["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},em(["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},em(["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},em(["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},em(["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},em(["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},em(["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},em(["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},em(["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},em(["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},em(["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=>em(["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=>em(["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=>em(["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=>em(["logging","stdout"],e)})}),(0,a.jsx)(j,{label:"File Logging",children:(0,a.jsx)(w,{checked:q.logging?.file??!1,onChange:e=>em(["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:()=>eu(),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}),"再読み込み"]}),(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?"保存中…":"設定を保存"]})]})]}),(0,a.jsx)(b,{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)(s,{size:14}),"オンボーディングを再実行"]}),(0,a.jsxs)("button",{onClick:()=>{window.confirm("すべての設定を初期値に戻しますか?")&&(localStorage.removeItem("jinn-settings"),localStorage.removeItem("jinn-theme"),I(),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}),"すべての設定をリセット"]})]})})]})})})}],15857)}]);
|