openryoko 2026.8.19 → 2026.8.21
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/bin/jimmy.js +9 -0
- package/dist/bin/jimmy.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/src/cli/api.d.ts +24 -0
- package/dist/src/cli/api.d.ts.map +1 -0
- package/dist/src/cli/api.js +66 -0
- package/dist/src/cli/api.js.map +1 -0
- package/dist/src/cli/gateway-audit.d.ts +14 -0
- package/dist/src/cli/gateway-audit.d.ts.map +1 -0
- package/dist/src/cli/gateway-audit.js +120 -0
- package/dist/src/cli/gateway-audit.js.map +1 -0
- package/dist/src/cli/migrate.d.ts +1 -0
- package/dist/src/cli/migrate.d.ts.map +1 -1
- package/dist/src/cli/migrate.js +22 -0
- package/dist/src/cli/migrate.js.map +1 -1
- package/dist/src/cli/pair.d.ts.map +1 -1
- package/dist/src/cli/pair.js +1 -8
- package/dist/src/cli/pair.js.map +1 -1
- package/dist/src/cli/status.d.ts.map +1 -1
- package/dist/src/cli/status.js +16 -4
- package/dist/src/cli/status.js.map +1 -1
- package/dist/src/gateway/host-guard.d.ts.map +1 -1
- package/dist/src/gateway/host-guard.js +1 -1
- package/dist/src/gateway/host-guard.js.map +1 -1
- package/dist/src/gateway/server.d.ts.map +1 -1
- package/dist/src/gateway/server.js +45 -6
- package/dist/src/gateway/server.js.map +1 -1
- package/dist/src/jobs/notify.d.ts +2 -0
- package/dist/src/jobs/notify.d.ts.map +1 -1
- package/dist/src/jobs/notify.js +8 -1
- package/dist/src/jobs/notify.js.map +1 -1
- package/dist/src/sessions/context.d.ts.map +1 -1
- package/dist/src/sessions/context.js +27 -20
- package/dist/src/sessions/context.js.map +1 -1
- package/dist/src/shared/gateway-url.d.ts +26 -0
- package/dist/src/shared/gateway-url.d.ts.map +1 -0
- package/dist/src/shared/gateway-url.js +41 -0
- package/dist/src/shared/gateway-url.js.map +1 -0
- package/dist/web/__next._head.txt +6 -0
- package/dist/web/__next._index.txt +6 -0
- package/dist/web/_next/static/UDwWEfKiZ-eIOpfOIPKQr/_buildManifest.js +11 -0
- package/dist/web/_next/static/UDwWEfKiZ-eIOpfOIPKQr/_clientMiddlewareManifest.js +1 -0
- package/dist/web/_next/static/UDwWEfKiZ-eIOpfOIPKQr/_ssgManifest.js +1 -0
- package/dist/web/_next/static/chunks/012aakl34ff5a.js +5 -0
- package/dist/web/_next/static/chunks/03~yq9q893hmn.js +1 -0
- package/dist/web/_next/static/chunks/0a2uy1kw.~j~c.js +1 -0
- package/dist/web/_next/static/chunks/0agxgztb0b~.7.js +5 -0
- package/dist/web/_next/static/chunks/0dtbl8648b3u9.js +7 -0
- package/dist/web/_next/static/chunks/0e3pdjkorr5zl.js +2 -0
- package/dist/web/_next/static/chunks/0ewpxy-mzj3j3.js +1 -0
- package/dist/web/_next/static/chunks/0g6xt.91k~0bc.js +5 -0
- package/dist/web/_next/static/chunks/0jm3e~uc~qd~p.js +79 -0
- package/dist/web/_next/static/chunks/0jzw1gpuag8bc.js +5 -0
- package/dist/web/_next/static/chunks/0lkp92-ovteta.js +5 -0
- package/dist/web/_next/static/chunks/0lt7kv1k1jla0.js +1 -0
- package/dist/web/_next/static/chunks/0msmlzd_~uk0y.js +5 -0
- package/dist/web/_next/static/chunks/0ru56x83x4rkk.js +1 -0
- package/dist/web/_next/static/chunks/0tcvgwr3rcw29.js +1 -0
- package/dist/web/_next/static/chunks/0tf9kpygstdls.js +1 -0
- package/dist/web/_next/static/chunks/0y3dnnq~kxyz_.js +1 -0
- package/dist/web/_next/static/chunks/0~6m1p5hnsx2f.js +1 -0
- package/dist/web/_next/static/chunks/10-liamt-ipcu.js +1 -0
- package/dist/web/_next/static/chunks/103zsy0q9psfj.css +1 -0
- package/dist/web/_next/static/chunks/10l08hq.acixl.js +5 -0
- package/dist/web/_next/static/chunks/11rbefjn.e-3-.js +1 -0
- package/dist/web/_next/static/chunks/11rodb4s1x4of.js +1 -0
- package/dist/web/_next/static/chunks/12_uxtnrqhoo1.js +1 -0
- package/dist/web/_next/static/chunks/12m97bwrg1tuu.js +5 -0
- package/dist/web/_next/static/chunks/13juizw904g.e.js +1 -0
- package/dist/web/_next/static/chunks/14ge_q22f0n.f.js +1 -0
- package/dist/web/_next/static/chunks/17-u9c_weg12-.js +31 -0
- package/dist/web/_next/static/chunks/17oc2l.ekcs8b.css +1 -0
- package/dist/web/_next/static/chunks/turbopack-0dt987bw_1nyf.js +1 -0
- package/dist/web/_next/static/media/apple-icon.0.wpl4.d-5bkf.jpg +0 -0
- package/dist/web/_next/static/media/icon.0.wpl4.d-5bkf.jpg +0 -0
- package/dist/web/_not-found/__next._head.txt +6 -0
- package/dist/web/_not-found/__next._index.txt +6 -0
- package/dist/web/_not-found/__next._not-found.txt +5 -0
- package/dist/web/chat/__next._head.txt +6 -0
- package/dist/web/chat/__next._index.txt +6 -0
- package/dist/web/chat/__next.chat.txt +5 -0
- package/dist/web/cron/__next._head.txt +6 -0
- package/dist/web/cron/__next._index.txt +6 -0
- package/dist/web/cron/__next.cron.txt +5 -0
- package/dist/web/kanban/__next._head.txt +6 -0
- package/dist/web/kanban/__next._index.txt +6 -0
- package/dist/web/kanban/__next.kanban.txt +5 -0
- package/dist/web/logs/__next._head.txt +6 -0
- package/dist/web/logs/__next._index.txt +6 -0
- package/dist/web/logs/__next.logs.txt +5 -0
- package/dist/web/org/__next._head.txt +6 -0
- package/dist/web/org/__next._index.txt +6 -0
- package/dist/web/org/__next.org.txt +5 -0
- package/dist/web/sessions/__next._head.txt +6 -0
- package/dist/web/sessions/__next._index.txt +6 -0
- package/dist/web/sessions/__next.sessions.txt +5 -0
- package/dist/web/settings/__next._head.txt +6 -0
- package/dist/web/settings/__next._index.txt +6 -0
- package/dist/web/settings/__next.settings.txt +5 -0
- package/dist/web/skills/__next._head.txt +6 -0
- package/dist/web/skills/__next._index.txt +6 -0
- package/dist/web/skills/__next.skills.txt +5 -0
- package/package.json +1 -1
- package/template/config.default.yaml +4 -1
- package/template/migrations/2026.8.20/MIGRATION.md +46 -0
- package/template/skills/sync/SKILL.md +5 -5
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
1:"$Sreact.fragment"
|
|
2
|
+
2:I[87979,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js"],"default"]
|
|
3
|
+
3:I[35855,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js"],"default"]
|
|
4
|
+
4:[]
|
|
5
|
+
0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"UDwWEfKiZ-eIOpfOIPKQr"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
1:"$Sreact.fragment"
|
|
2
|
+
2:I[84459,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js"],"ViewportBoundary"]
|
|
3
|
+
3:I[84459,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js"],"MetadataBoundary"]
|
|
4
|
+
4:"$Sreact.suspense"
|
|
5
|
+
5:I[93236,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js"],"IconMark"]
|
|
6
|
+
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"OpenRyoko"}],["$","meta","1",{"name":"description","content":"OpenRyoko — Slackで空気を読んで働くAIゲートウェイ"}],["$","link","2",{"rel":"icon","href":"/icon.jpg?icon.0.wpl4.d-5bkf.jpg","sizes":"800x800","type":"image/jpeg"}],["$","link","3",{"rel":"apple-touch-icon","href":"/apple-icon.jpg?apple-icon.0.wpl4.d-5bkf.jpg","sizes":"800x800","type":"image/jpeg"}],["$","$L5","4",{}]]}]}]}],null]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"UDwWEfKiZ-eIOpfOIPKQr"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
1:"$Sreact.fragment"
|
|
2
|
+
2:I[3971,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js"],"ClientProviders"]
|
|
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:I[35855,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js"],"default"]
|
|
5
|
+
:HL["/_next/static/chunks/103zsy0q9psfj.css","style"]
|
|
6
|
+
0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/103zsy0q9psfj.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/0y3dnnq~kxyz_.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/14ge_q22f0n.f.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/0~6m1p5hnsx2f.js","async":true}]],["$","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","template":["$","$L4",null,{}],"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."}]}]]}]}]],[]]}]}]}]]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"UDwWEfKiZ-eIOpfOIPKQr"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
1:"$Sreact.fragment"
|
|
2
|
+
2:I[87979,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js"],"default"]
|
|
3
|
+
3:I[35855,["/_next/static/chunks/0y3dnnq~kxyz_.js","/_next/static/chunks/14ge_q22f0n.f.js","/_next/static/chunks/0~6m1p5hnsx2f.js"],"default"]
|
|
4
|
+
4:[]
|
|
5
|
+
0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"UDwWEfKiZ-eIOpfOIPKQr"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,10 @@ jinn:
|
|
|
4
4
|
gateway:
|
|
5
5
|
port: 7777
|
|
6
6
|
host: "127.0.0.1"
|
|
7
|
-
#
|
|
7
|
+
# host は「どこで待ち受けるか」であって「どこへ接続するか」ではない。
|
|
8
|
+
# 0.0.0.0 / :: で公開しても、ローカルからの接続先は http://127.0.0.1:7777 を使う
|
|
9
|
+
# (接続可能なURLは $RYOKO_GATEWAY_URL として全プロセスに渡される)。
|
|
10
|
+
# リバースプロキシ等で実NICのIP以外のHost名を使う場合は明示許可する
|
|
8
11
|
# allowedHosts: ["ryoko.example.com"]
|
|
9
12
|
# 信頼できるHTTPSリバースプロキシの直後でのみ有効化する
|
|
10
13
|
# trustProxyHeaders: false
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Migration: 2026.8.20(Gateway bind / connect URL分離)
|
|
2
|
+
|
|
3
|
+
## 概要
|
|
4
|
+
|
|
5
|
+
`gateway.host` はGatewayが待ち受けるアドレスであり、AI、Cron、CLI、スクリプトが
|
|
6
|
+
接続するURLではありません。`0.0.0.0` / `::` を接続先に使うとHostガードに拒否され、
|
|
7
|
+
2026.8.19では `421 host_not_allowed` による無言の失敗が発生する場合がありました。
|
|
8
|
+
|
|
9
|
+
本バージョンでは内部の接続先をloopbackへ統一し、認証付きの `ryoko api` コマンドを
|
|
10
|
+
追加します。
|
|
11
|
+
|
|
12
|
+
## 自動マイグレーション
|
|
13
|
+
|
|
14
|
+
`ryoko update` / `ryoko migrate --auto` は、インスタンスホーム内のテキストファイルから
|
|
15
|
+
以下を探し、変更前のバックアップを作成して置換します。
|
|
16
|
+
|
|
17
|
+
- `http://0.0.0.0:<port>` → `http://127.0.0.1:<port>`
|
|
18
|
+
- `http://[::]:<port>` → `http://[::1]:<port>`
|
|
19
|
+
|
|
20
|
+
対象は `~/.ryoko` 内の設定、Cron定義、スキル、ドキュメント、スクリプトです。
|
|
21
|
+
symlink、ログ、DB、モデル、source checkout、2 MiBを超えるファイルは変更しません。
|
|
22
|
+
バックアップは `~/.ryoko/backups/gateway-url-<timestamp>/` に保存します。
|
|
23
|
+
|
|
24
|
+
また、保護された `/api/` を直接curlしているのにBearer認証処理が見当たらないファイルは
|
|
25
|
+
警告します。認証処理は自動推測で書き換えず、次のCLIへ移行してください。
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
ryoko api GET /api/status
|
|
29
|
+
ryoko api POST /api/sessions --data '{"prompt":"..."}'
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## 手動確認・再実行
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
ryoko migrate --check
|
|
36
|
+
ryoko migrate --fix
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
`~/.ryoko` 外の独自スクリプトは自動変更されません。直接HTTPが必要な場合は、子プロセスへ
|
|
40
|
+
渡される `$RYOKO_GATEWAY_URL` を接続先にし、`gateway-auth.json` のtokenをBearerとして
|
|
41
|
+
付与してください。通常はtokenを手書きしない `ryoko api` を推奨します。
|
|
42
|
+
|
|
43
|
+
## セキュリティ
|
|
44
|
+
|
|
45
|
+
Hostガードは緩和しません。`gateway.allowedHosts` に `0.0.0.0` / `::` を追加しても無視されます。
|
|
46
|
+
応急処置で追加していた場合は設定から削除できます。
|
|
@@ -22,21 +22,21 @@ You fetch the conversation yourself using the gateway API. No magic injection
|
|
|
22
22
|
2. **List all sessions** to find the employee's most recent one:
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
|
-
|
|
25
|
+
ryoko api GET /api/sessions | jq '[.[] | select(.employee == "EMPLOYEE_NAME")] | sort_by(.lastActivity) | reverse | .[0]'
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
Replace `EMPLOYEE_NAME` with the target
|
|
28
|
+
Replace `EMPLOYEE_NAME` with the target. `ryoko api` selects the safe local URL and adds gateway authentication automatically. This gives you the most recent session for that employee.
|
|
29
29
|
|
|
30
30
|
**Tip**: Your own session ID is in the "Current session" section of your system prompt. If you want to exclude child sessions of the current session (to avoid circular references), filter with:
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
|
-
|
|
33
|
+
ryoko api GET /api/sessions | jq '[.[] | select(.employee == "EMPLOYEE_NAME" and .parentSessionId != "YOUR_SESSION_ID")] | sort_by(.lastActivity) | reverse | .[0]'
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
3. **Fetch the full conversation** using the session ID from step 2:
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
|
-
|
|
39
|
+
ryoko api GET /api/sessions/SESSION_ID | jq '.messages'
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
This returns all messages with `role` and `content` fields. Read through them to understand what was discussed.
|
|
@@ -55,7 +55,7 @@ After fetching and reading the conversation:
|
|
|
55
55
|
|
|
56
56
|
- **No sessions found**: If no sessions exist for that employee, tell the user: "I don't see any recent conversations with @employee-name."
|
|
57
57
|
- **Empty messages**: If the session exists but has no messages, note that the session was created but no conversation happened yet.
|
|
58
|
-
- **Employee not found**: If the name doesn't match any sessions, suggest the user check the org with `
|
|
58
|
+
- **Employee not found**: If the name doesn't match any sessions, suggest the user check the org with `ryoko api GET /api/org` to see available employees.
|
|
59
59
|
- **Very long conversations**: You decide how much to read. You can fetch the full conversation and focus on the most recent messages, or read everything if it's short. No artificial limits.
|
|
60
60
|
|
|
61
61
|
## Examples
|