@minimalcorp/tsunagi 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/apps/web/.next/BUILD_ID +1 -1
- package/.next/standalone/apps/web/.next/build-manifest.json +3 -3
- package/.next/standalone/apps/web/.next/prerender-manifest.json +3 -3
- package/.next/standalone/apps/web/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found.rsc +14 -14
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_full.segment.rsc +14 -14
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_index.segment.rsc +9 -9
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/index.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/index.rsc +16 -16
- package/.next/standalone/apps/web/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
- package/.next/standalone/apps/web/.next/server/app/index.segments/_full.segment.rsc +16 -16
- package/.next/standalone/apps/web/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/standalone/apps/web/.next/server/app/index.segments/_index.segment.rsc +9 -9
- package/.next/standalone/apps/web/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/app/settings.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/settings.rsc +17 -16
- package/.next/standalone/apps/web/.next/server/app/settings.segments/_full.segment.rsc +17 -16
- package/.next/standalone/apps/web/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/.next/standalone/apps/web/.next/server/app/settings.segments/_index.segment.rsc +9 -9
- package/.next/standalone/apps/web/.next/server/app/settings.segments/_tree.segment.rsc +3 -2
- package/.next/standalone/apps/web/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +5 -4
- package/.next/standalone/apps/web/.next/server/app/settings.segments/settings.segment.rsc +3 -3
- package/.next/standalone/apps/web/.next/server/app/tasks/[id]/page.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__00qk65u._.js +3 -0
- package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__02o_btn._.js +2 -2
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_03vftq7._.js +7 -0
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_0835zmv._.js +14 -0
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_0g.cd6a._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_0g79jqo._.js +20 -0
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_0kflgfj._.js +20 -0
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_0w2dm3r._.js +3 -0
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_10gk93.._.js +3 -0
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{_053072t._.js → _139_l.u._.js} +2 -2
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_13w5ytx._.js +7 -0
- package/.next/standalone/apps/web/.next/server/chunks/ssr/apps_web_src_app_settings_page_tsx_0i6itlb._.js +2 -2
- package/.next/standalone/apps/web/.next/server/chunks/ssr/apps_web_src_app_tasks_[id]_page_tsx_0jshsm2._.js +4 -21
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0bfjoue._.js → node_modules_09d2oqj._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/node_modules_0a57phw._.js +3 -0
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0a9pqes._.js → node_modules_0ak_3rk._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0mpkxmv._.js → node_modules_0cv326~._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0zstt1y._.js → node_modules_0h.vgyn._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0~2ubpz._.js → node_modules_0npujym._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0_1re~9._.js → node_modules_0q_5qo~._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0e.hm5q._.js → node_modules_0sn0lqb._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0-g_j5j._.js → node_modules_11-z65a._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/middleware-build-manifest.js +3 -3
- package/.next/standalone/apps/web/.next/server/pages/404.html +1 -1
- package/.next/standalone/apps/web/.next/server/pages/500.html +1 -1
- package/.next/standalone/apps/web/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/apps/web/.next/static/chunks/0.gcmzq82~36i.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/06gfh91..uydi.js +5 -0
- package/.next/standalone/apps/web/.next/static/chunks/08e.dbdz18nd2.js +18 -0
- package/.next/standalone/apps/web/.next/static/chunks/0b90ys7wq-p.4.css +4 -0
- package/.next/standalone/apps/web/.next/static/chunks/0crn03y2tj0lu.js +6 -0
- package/.next/standalone/apps/web/.next/static/chunks/{0s7g4uwmm49t..js → 0l83q95s~tih4.js} +2 -2
- package/.next/standalone/apps/web/.next/static/chunks/0lvl3ec93cab_.js +7 -0
- package/.next/standalone/apps/web/.next/static/chunks/0lxvbkhh7amha.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/0mqupo29wme26.js +7 -0
- package/.next/standalone/apps/web/.next/static/chunks/0rn1kcmsfzjmz.js +12 -0
- package/.next/standalone/apps/web/.next/static/chunks/0whl1y16cvn5q.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/0z60ewb40i2ce.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/0~qk-51yuw4mm.js +18 -0
- package/.next/standalone/apps/web/.next/static/chunks/{0v3hfoggxwsov.js → 149sia28cskw9.js} +1 -1
- package/.next/standalone/apps/web/.next/static/chunks/17~93fal1fw_d.js +5 -0
- package/dist/prisma/migrations/20261007000000_add_claude_profiles/migration.sql +10 -0
- package/dist/prisma/schema.prisma +9 -0
- package/dist/server/generated/prisma/browser.d.ts +5 -0
- package/dist/server/generated/prisma/client.d.ts +5 -0
- package/dist/server/generated/prisma/internal/class.d.ts +11 -0
- package/dist/server/generated/prisma/internal/class.js +4 -4
- package/dist/server/generated/prisma/internal/prismaNamespace.d.ts +83 -1
- package/dist/server/generated/prisma/internal/prismaNamespace.js +6 -0
- package/dist/server/generated/prisma/internal/prismaNamespaceBrowser.d.ts +7 -0
- package/dist/server/generated/prisma/internal/prismaNamespaceBrowser.js +6 -0
- package/dist/server/generated/prisma/models/ClaudeProfile.d.ts +939 -0
- package/dist/server/generated/prisma/models/ClaudeProfile.js +1 -0
- package/dist/server/generated/prisma/models.d.ts +1 -0
- package/dist/server/index.js +17 -0
- package/dist/server/lib/claude-config-guard.d.ts +7 -5
- package/dist/server/lib/claude-config-guard.js +31 -12
- package/dist/server/lib/claude-profiles.d.ts +49 -0
- package/dist/server/lib/claude-profiles.js +168 -0
- package/dist/server/lib/pty-env-sync.d.ts +12 -0
- package/dist/server/lib/pty-env-sync.js +139 -0
- package/dist/server/lib/pty-launch.d.ts +36 -0
- package/dist/server/lib/pty-launch.js +141 -0
- package/dist/server/lib/repositories/environment.js +8 -34
- package/dist/server/pty-manager.d.ts +23 -1
- package/dist/server/pty-manager.js +7 -1
- package/dist/server/routes/claude-profiles.d.ts +2 -0
- package/dist/server/routes/claude-profiles.js +138 -0
- package/dist/server/routes/env.js +25 -1
- package/dist/server/routes/onboarding.js +15 -6
- package/dist/server/routes/terminal.js +34 -120
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__03~.ax1._.js +0 -3
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_07i72iz._.js +0 -3
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_09eooml._.js +0 -7
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_0bru-z.._.js +0 -3
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_0i8ojdw._.js +0 -14
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_0mtw02l._.js +0 -3
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_109pmo2._.js +0 -3
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_12aa-fs._.js +0 -7
- package/.next/standalone/apps/web/.next/static/chunks/0.qz1zt1c.y.n.js +0 -5
- package/.next/standalone/apps/web/.next/static/chunks/01mfp5lo0gy.q.js +0 -23
- package/.next/standalone/apps/web/.next/static/chunks/0_by0zpp68~r7.js +0 -1
- package/.next/standalone/apps/web/.next/static/chunks/0ajw1mjy3owa4.js +0 -1
- package/.next/standalone/apps/web/.next/static/chunks/0fe4v5dh3whem.js +0 -5
- package/.next/standalone/apps/web/.next/static/chunks/0gzt~9euv6u2y.js +0 -12
- package/.next/standalone/apps/web/.next/static/chunks/0jcorj3-aambm.js +0 -1
- package/.next/standalone/apps/web/.next/static/chunks/0wnto9g4i0s3h.css +0 -4
- package/.next/standalone/apps/web/.next/static/chunks/0wzu~340lh7o~.js +0 -7
- package/.next/standalone/apps/web/.next/static/chunks/0xa_n_zp.qw-b.js +0 -1
- package/.next/standalone/apps/web/.next/static/chunks/0~_c.mwboavrv.js +0 -7
- /package/.next/standalone/apps/web/.next/static/{OXWK1FxsZh6lcEQawkL6h → Qv73X7lHL0PkQ5DtK6UEF}/_buildManifest.js +0 -0
- /package/.next/standalone/apps/web/.next/static/{OXWK1FxsZh6lcEQawkL6h → Qv73X7lHL0PkQ5DtK6UEF}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/apps/web/.next/static/{OXWK1FxsZh6lcEQawkL6h → Qv73X7lHL0PkQ5DtK6UEF}/_ssgManifest.js +0 -0
|
@@ -1,23 +1,9 @@
|
|
|
1
|
-
import * as fs from 'fs/promises';
|
|
2
|
-
import * as os from 'os';
|
|
3
|
-
import * as path from 'path';
|
|
4
|
-
import { fileURLToPath } from 'url';
|
|
5
1
|
import { ptyManager } from '../pty-manager.js';
|
|
6
2
|
import { prisma } from '../lib/db.js';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { ensureActiveLoaded, getLocalLlmSettings } from '../lib/local-llm.js';
|
|
12
|
-
import { LOCAL_LLM_PROXY_URL, buildClaudeCommand, isLocalLlmMode } from '../lib/claude-command.js';
|
|
13
|
-
// このファイル基準で解決する(cwd 非依存):
|
|
14
|
-
// dev: apps/server/src/routes → apps/server/scripts
|
|
15
|
-
// build: apps/server/dist/routes → apps/server/scripts
|
|
16
|
-
// npm bundle: <pkg>/dist/server/routes → <pkg>/dist/scripts
|
|
17
|
-
const TSUNAGI_EDITOR_PATH = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../scripts/monaco-editor.sh');
|
|
18
|
-
// Fastify(API) の公開ポート。index.ts と同じ既定値・同じ環境変数(TSUNAGI_SERVER_PORT)を見る。
|
|
19
|
-
// monaco-editor.sh など PTY 内のプロセスが API を叩く際の同一ホスト向けベース URL に使う。
|
|
20
|
-
const SERVER_PORT = Number(process.env.TSUNAGI_SERVER_PORT) || 2791;
|
|
3
|
+
import { ensureActiveLoaded } from '../lib/local-llm.js';
|
|
4
|
+
import { buildClaudeCommand, isLocalLlmMode } from '../lib/claude-command.js';
|
|
5
|
+
import { PtyLaunchError, prepareClaudeConfigForSession, resolvePtyLaunch, startPtySession, } from '../lib/pty-launch.js';
|
|
6
|
+
import { getEnvPending, initPtyEnvSync, respawnSessionNow } from '../lib/pty-env-sync.js';
|
|
21
7
|
/**
|
|
22
8
|
* 再接続時の画面復元用 scrollback から「端末への問い合わせ(クエリ)」シーケンスを除去する。
|
|
23
9
|
*
|
|
@@ -41,24 +27,9 @@ function stripTerminalQueries(s) {
|
|
|
41
27
|
.replace(/\x1b\[[?>]?[0-9;]*n/g, '') // DSR: ESC[?6n(主犯) / ESC[6n / ESC[5n など
|
|
42
28
|
.replace(/\x1b\[[?>=]?[0-9;]*c/g, ''); // DA: ESC[c / ESC[0c / ESC[>c / ESC[=c
|
|
43
29
|
}
|
|
44
|
-
/**
|
|
45
|
-
* ローカルLLMタブで注入する環境変数を返す。Claude Code は tsunagi の中継口に接続し、
|
|
46
|
-
* 中継口が使用中のモデルへ転送する。最初の発言を待たせないよう、読み込みはここで始めておく(完了は待たない)
|
|
47
|
-
*/
|
|
48
|
-
async function prepareLocalLlm() {
|
|
49
|
-
const { active, extraEnv } = await getLocalLlmSettings();
|
|
50
|
-
if (!active) {
|
|
51
|
-
throw new Error('ローカルLLMのモデルが未設定です。Settings で使用するモデルを選んでください');
|
|
52
|
-
}
|
|
53
|
-
ensureActiveLoaded().catch(() => undefined);
|
|
54
|
-
return buildLocalLlmEnv({
|
|
55
|
-
proxyUrl: LOCAL_LLM_PROXY_URL,
|
|
56
|
-
contextTokens: active.contextTokens,
|
|
57
|
-
extraEnv,
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
30
|
export async function terminalRoutes(fastify) {
|
|
61
31
|
const io = fastify.io;
|
|
32
|
+
initPtyEnvSync(io);
|
|
62
33
|
// socket.io イベントハンドラ
|
|
63
34
|
io.on('connection', (socket) => {
|
|
64
35
|
let boundSessionId = null;
|
|
@@ -97,6 +68,8 @@ export async function terminalRoutes(fastify) {
|
|
|
97
68
|
socket.removeAllListeners('resize');
|
|
98
69
|
socket.removeAllListeners('input');
|
|
99
70
|
socket.join(room);
|
|
71
|
+
// 環境変数の変更が未反映ならクライアントに伝える(反映待ちバッジ)
|
|
72
|
+
socket.emit('env-pending', { sessionId, pending: getEnvPending(sessionId) });
|
|
100
73
|
// 接続確立 → GCタイマーをキャンセル
|
|
101
74
|
ptyManager.cancelGc(sessionId);
|
|
102
75
|
// この socket を PTY の所有者(active socket)にする。input の書き込みは所有者の
|
|
@@ -133,6 +106,10 @@ export async function terminalRoutes(fastify) {
|
|
|
133
106
|
dataHandlerDispose = () => dataHandler.dispose();
|
|
134
107
|
// PTYプロセス終了 → room全体に通知(全接続クライアントに終了を伝える)+ セッション削除
|
|
135
108
|
const exitHandler = ptyProcess.onExit(({ exitCode }) => {
|
|
109
|
+
// 環境変数の反映のための作り直し(pty-env-sync)。新しい PTY が同じ sessionId で
|
|
110
|
+
// 既に動いているため、終了扱い・セッション削除はしない
|
|
111
|
+
if (session.respawning)
|
|
112
|
+
return;
|
|
136
113
|
io.to(room).emit('exit', { exitCode });
|
|
137
114
|
// Ctrl+C等でClaudeが強制終了した場合にclaudeStatusをidleにリセット
|
|
138
115
|
// todos は残す(Claude 側の Task はセッションに永続化され、--resume 後も続きから使われる)
|
|
@@ -171,6 +148,7 @@ export async function terminalRoutes(fastify) {
|
|
|
171
148
|
return;
|
|
172
149
|
if (ptyManager.getActiveSocket(sessionId) !== socket.id)
|
|
173
150
|
return;
|
|
151
|
+
session.lastInputAt = Date.now();
|
|
174
152
|
ptyProcess.write(data);
|
|
175
153
|
});
|
|
176
154
|
});
|
|
@@ -204,8 +182,7 @@ export async function terminalRoutes(fastify) {
|
|
|
204
182
|
});
|
|
205
183
|
// POST /terminal/sessions - セッション作成(または既存セッション再利用)
|
|
206
184
|
fastify.post('/terminal/sessions', async (request, reply) => {
|
|
207
|
-
const { cwd, env, sessionId: requestedSessionId, claude } = request.body ?? {};
|
|
208
|
-
let { command } = request.body ?? {};
|
|
185
|
+
const { cwd, env, sessionId: requestedSessionId, claude, command } = request.body ?? {};
|
|
209
186
|
const sessionId = requestedSessionId ?? crypto.randomUUID();
|
|
210
187
|
// 既存セッションが生きていれば再利用
|
|
211
188
|
const existing = ptyManager.getSession(sessionId);
|
|
@@ -213,95 +190,22 @@ export async function terminalRoutes(fastify) {
|
|
|
213
190
|
fastify.log.info({ sessionId }, 'Reusing existing PTY session');
|
|
214
191
|
return reply.status(200).send({ sessionId, reused: true });
|
|
215
192
|
}
|
|
216
|
-
|
|
217
|
-
// Taskに紐づかないタブは Tab レコードが存在しないため null になる。
|
|
218
|
-
const tab = await prisma.tab
|
|
219
|
-
.findUnique({ where: { tabId: sessionId }, include: { task: true } })
|
|
220
|
-
.catch((err) => {
|
|
221
|
-
fastify.log.warn({ err, sessionId }, 'Failed to load tab');
|
|
222
|
-
return null;
|
|
223
|
-
});
|
|
224
|
-
// cwd は Task があればサーバー側で worktree パスを導出する(クライアントの state に依存しない)。
|
|
225
|
-
// クライアント指定の cwd は Task に紐づかないタブのフォールバックとしてのみ使う。
|
|
226
|
-
const defaultDir = path.join(os.homedir(), '.tsunagi', 'workspaces');
|
|
227
|
-
let workingDir = tab
|
|
228
|
-
? getWorktreePath(tab.task.owner, tab.task.repo, tab.task.branch)
|
|
229
|
-
: (cwd ?? defaultDir);
|
|
230
|
-
// cwd が存在するか確認。Task のタブは worktree 必須(無ければ起動しない)、
|
|
231
|
-
// それ以外はデフォルトにフォールバック
|
|
193
|
+
const launchRequest = { cwd, env };
|
|
232
194
|
try {
|
|
233
|
-
await
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
}
|
|
240
|
-
fastify.log.warn({ sessionId, workingDir }, 'cwd does not exist, falling back to default');
|
|
241
|
-
workingDir = defaultDir;
|
|
242
|
-
}
|
|
243
|
-
// デフォルトディレクトリが存在しない場合も作成する
|
|
244
|
-
await fs.mkdir(workingDir, { recursive: true });
|
|
245
|
-
try {
|
|
246
|
-
// repo スコープまで階層マージした環境変数を取得する(global → owner → repo、後勝ちで上書き)。
|
|
247
|
-
// Taskに紐づかないタブは global のみになる。
|
|
248
|
-
let dbEnv = {};
|
|
249
|
-
const tabMode = tab?.mode;
|
|
250
|
-
try {
|
|
251
|
-
dbEnv = tab ? await getEnv('repo', tab.task.owner, tab.task.repo) : await getEnv('global');
|
|
252
|
-
fastify.log.info({ count: Object.keys(dbEnv).length, owner: tab?.task.owner, repo: tab?.task.repo }, 'Loaded env vars');
|
|
253
|
-
}
|
|
254
|
-
catch (err) {
|
|
255
|
-
fastify.log.warn({ err }, 'Failed to load env vars');
|
|
256
|
-
}
|
|
257
|
-
// ローカルLLMタブ: Anthropic の代わりに tsunagi の中継口(→ Ollama / LM Studio)で claude を動かす。
|
|
258
|
-
// DB の環境変数より後に適用し、Anthropic の認証トークンは環境変数ごと取り除く。
|
|
259
|
-
let providerEnv = {};
|
|
260
|
-
let unsetKeys = [];
|
|
261
|
-
if (isLocalLlmMode(tabMode)) {
|
|
262
|
-
try {
|
|
263
|
-
providerEnv = await prepareLocalLlm();
|
|
264
|
-
}
|
|
265
|
-
catch (err) {
|
|
266
|
-
return reply
|
|
267
|
-
.status(400)
|
|
268
|
-
.send({ error: err instanceof Error ? err.message : String(err) });
|
|
269
|
-
}
|
|
270
|
-
unsetKeys = LOCAL_LLM_UNSET_ENV_KEYS;
|
|
271
|
-
}
|
|
272
|
-
if (claude) {
|
|
273
|
-
command = await buildClaudeCommand(sessionId, (tabMode ?? 'claude'));
|
|
274
|
-
}
|
|
275
|
-
// 優先順位: リクエストで渡されたenv > ローカルLLMのprovider env > DB env(global/owner/repo) > tsunagi独自のEDITOR設定
|
|
276
|
-
// tsunagi-editor.sh をデフォルトにすることで Ctrl+G が Monaco Modal を開く。
|
|
277
|
-
// DB / リクエストで EDITOR が明示設定されている場合はそちらが優先される。
|
|
278
|
-
const tsunagiDefaultEnv = {
|
|
279
|
-
EDITOR: TSUNAGI_EDITOR_PATH,
|
|
280
|
-
TSUNAGI_SESSION_ID: sessionId,
|
|
281
|
-
// monaco-editor.sh が API(Fastify) を叩くためのベース URL。サーバーと同一
|
|
282
|
-
// ホストなので localhost。単一ポート化で API は SERVER_PORT(既定 2791)。
|
|
283
|
-
TSUNAGI_API_BASE: `http://localhost:${SERVER_PORT}`,
|
|
284
|
-
};
|
|
285
|
-
const mergedEnv = { ...tsunagiDefaultEnv, ...dbEnv, ...providerEnv, ...env };
|
|
286
|
-
const session = ptyManager.createSession(sessionId, workingDir, mergedEnv, unsetKeys);
|
|
287
|
-
// コマンドが指定されていればPTY起動後にシェルへ書き込む
|
|
288
|
-
if (command) {
|
|
289
|
-
const cmd = command.endsWith('\n') ? command : command + '\n';
|
|
290
|
-
// claude logout で ~/.claude.json の hasCompletedOnboarding がリセットされて
|
|
291
|
-
// いると、次回 claude 起動時にオンボーディングウィザードが表示され --resume/
|
|
292
|
-
// --session-id を前提にした自動起動フローが止まるため、起動前に補正する。
|
|
293
|
-
await ensureClaudeOnboardingCompleted();
|
|
294
|
-
// 監視の取りこぼしに備え、起動前にも中継口の名前が既定モデルに残っていないか補正する
|
|
295
|
-
await removeLocalModelFromUserSettings(LOCAL_MODEL_ALIAS);
|
|
296
|
-
// シェルの初期化(プロンプト表示)を待つため少し遅延させて書き込む
|
|
297
|
-
setTimeout(() => {
|
|
298
|
-
session.pty.write(cmd);
|
|
299
|
-
}, 300);
|
|
300
|
-
}
|
|
195
|
+
const launch = await resolvePtyLaunch(sessionId, launchRequest);
|
|
196
|
+
await startPtySession(sessionId, launch, {
|
|
197
|
+
request: launchRequest,
|
|
198
|
+
launchClaude: Boolean(claude),
|
|
199
|
+
command,
|
|
200
|
+
});
|
|
301
201
|
return reply.status(201).send({ sessionId, reused: false });
|
|
302
202
|
}
|
|
303
203
|
catch (err) {
|
|
304
204
|
const message = err instanceof Error ? err.message : String(err);
|
|
205
|
+
if (err instanceof PtyLaunchError) {
|
|
206
|
+
fastify.log.warn({ sessionId, err: message }, 'Failed to launch PTY');
|
|
207
|
+
return reply.status(err.statusCode).send({ error: message });
|
|
208
|
+
}
|
|
305
209
|
return reply.status(500).send({ error: message });
|
|
306
210
|
}
|
|
307
211
|
});
|
|
@@ -326,9 +230,19 @@ export async function terminalRoutes(fastify) {
|
|
|
326
230
|
catch (err) {
|
|
327
231
|
return reply.status(400).send({ error: err instanceof Error ? err.message : String(err) });
|
|
328
232
|
}
|
|
233
|
+
// 環境変数の反映で PTY を作り直したときも claude を起動し直す
|
|
234
|
+
session.options.launchClaude = true;
|
|
235
|
+
await prepareClaudeConfigForSession(session);
|
|
329
236
|
session.pty.write(`${command}\n`);
|
|
330
237
|
return reply.status(204).send();
|
|
331
238
|
});
|
|
239
|
+
// POST /terminal/sessions/:sessionId/respawn - 環境変数の変更を今すぐ反映する(PTY を作り直す)
|
|
240
|
+
fastify.post('/terminal/sessions/:sessionId/respawn', async (request, reply) => {
|
|
241
|
+
const ok = await respawnSessionNow(request.params.sessionId);
|
|
242
|
+
if (!ok)
|
|
243
|
+
return reply.status(404).send({ error: 'Session not found' });
|
|
244
|
+
return reply.status(204).send();
|
|
245
|
+
});
|
|
332
246
|
// DELETE /terminal/sessions/:sessionId - セッション明示削除(PTY kill)
|
|
333
247
|
fastify.delete('/terminal/sessions/:sessionId', async (request, reply) => {
|
|
334
248
|
const { sessionId } = request.params;
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@minimalcorp/tsunagi",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@minimalcorp/tsunagi",
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.3.1",
|
|
10
10
|
"license": "SEE LICENSE IN LICENSE",
|
|
11
11
|
"os": [
|
|
12
12
|
"darwin",
|
package/package.json
CHANGED
package/.next/standalone/apps/web/.next/server/chunks/ssr/[root-of-the-server]__03~.ax1._.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[24361,(a,b,c)=>{b.exports=a.x("util",()=>require("util"))},54799,(a,b,c)=>{b.exports=a.x("crypto",()=>require("crypto"))},46786,(a,b,c)=>{b.exports=a.x("os",()=>require("os"))},4446,(a,b,c)=>{b.exports=a.x("net",()=>require("net"))},18622,(a,b,c)=>{b.exports=a.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},20635,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/action-async-storage.external.js",()=>require("next/dist/server/app-render/action-async-storage.external.js"))},24725,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},43285,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/dynamic-access-async-storage.external.js",()=>require("next/dist/server/app-render/dynamic-access-async-storage.external.js"))},9270,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored.contexts.AppRouterContext},36313,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored.contexts.HooksClientContext},79861,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored.contexts.ServerInsertedHtml},42602,(a,b,c)=>{"use strict";b.exports=a.r(18622)},87924,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].ReactJsxRuntime},72131,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].React},35112,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].ReactDOM},83604,a=>{"use strict";let b=(0,a.i(60137).default)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);a.s(["default",0,b])},79553,a=>{"use strict";a.s(["ConnectionStatus",0,function(){return null}])},45043,a=>{"use strict";var b=a.i(87924),c=a.i(80087),d=a.i(23292),e=a.i(67511),e=e,f=a.i(60137);let g=(0,f.default)("info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);var h=a.i(83604),h=h;let i=(0,f.default)("octagon-x",[["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"M2.586 16.726A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2h6.624a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586z",key:"2d38gg"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);var j=a.i(4650),j=j;let k=({...a})=>{let{effectiveTheme:f}=(0,c.useTheme)();return(0,b.jsx)(d.Toaster,{theme:f,className:"toaster group",icons:{success:(0,b.jsx)(e.default,{className:"size-4"}),info:(0,b.jsx)(g,{className:"size-4"}),warning:(0,b.jsx)(h.default,{className:"size-4"}),error:(0,b.jsx)(i,{className:"size-4"}),loading:(0,b.jsx)(j.default,{className:"size-4 animate-spin"})},style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)","--border-radius":"var(--radius)"},toastOptions:{classNames:{toast:"cn-toast"}},...a})};a.s(["ToastProvider",0,function(){return(0,b.jsx)(k,{position:"bottom-right",richColors:!0,closeButton:!0})}],45043)},85341,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(53155),e=a.i(91399);a.s(["EditorSessionProvider",0,function(){let[a,f]=(0,c.useState)(null);(0,c.useEffect)(()=>{function a(a){let{sessionId:b,content:c}=a.detail;f({sessionId:b,content:c})}return window.addEventListener("editor-session-open-request",a),()=>{window.removeEventListener("editor-session-open-request",a)}},[]);let g=(0,c.useRef)(null);async function h(b){a&&(await fetch((0,e.apiUrl)(`/api/editor/session/${a.sessionId}/complete`),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:b})}),f(null))}async function i(){a&&(await fetch((0,e.apiUrl)(`/api/editor/session/${a.sessionId}/complete`),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:a.content})}),f(null))}return(0,c.useEffect)(()=>{let b=g.current;null===b&&null!==a&&window.dispatchEvent(new CustomEvent("editor-session-open")),null!==b&&null===a&&window.dispatchEvent(new CustomEvent("editor-session-done")),g.current=a},[a]),(0,b.jsx)(d.MonacoEditorModal,{open:null!==a,onOpenChange:a=>{a.open||i()},onSubmit:h,initialValue:a?.content??"",title:"Edit Prompt",submitLabel:"Submit"})}])}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__03~.ax1._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[84454,65486,80056,43715,a=>{"use strict";var b=a.i(30685),c=(0,a.i(17508).default)(Object.keys,Object),d=Object.prototype.hasOwnProperty;let e=function(a){if(!(0,b.default)(a))return c(a);var e=[];for(var f in Object(a))d.call(a,f)&&"constructor"!=f&&e.push(f);return e};a.s(["default",0,e],65486);var f=a.i(37991),g=a.i(11253),h=(0,f.default)(g.default,"DataView"),i=a.i(38141),j=(0,f.default)(g.default,"Promise"),k=(0,f.default)(g.default,"Set");a.s(["default",0,k],80056);var l=(0,f.default)(g.default,"WeakMap"),m=a.i(35102),n=a.i(12098),o="[object Map]",p="[object Promise]",q="[object Set]",r="[object WeakMap]",s="[object DataView]",t=(0,n.default)(h),u=(0,n.default)(i.default),v=(0,n.default)(j),w=(0,n.default)(k),x=(0,n.default)(l),y=m.default;(h&&y(new h(new ArrayBuffer(1)))!=s||i.default&&y(new i.default)!=o||j&&y(j.resolve())!=p||k&&y(new k)!=q||l&&y(new l)!=r)&&(y=function(a){var b=(0,m.default)(a),c="[object Object]"==b?a.constructor:void 0,d=c?(0,n.default)(c):"";if(d)switch(d){case t:return s;case u:return o;case v:return p;case w:return q;case x:return r}return b});let z=y;a.s(["default",0,z],43715);var A=a.i(62244),B=a.i(66723),C=a.i(68378),D=a.i(12999),E=a.i(56814),F=Object.prototype.hasOwnProperty;a.s(["default",0,function(a){if(null==a)return!0;if((0,C.default)(a)&&((0,B.default)(a)||"string"==typeof a||"function"==typeof a.splice||(0,D.default)(a)||(0,E.default)(a)||(0,A.default)(a)))return!a.length;var c=z(a);if("[object Map]"==c||"[object Set]"==c)return!a.size;if((0,b.default)(a))return!e(a).length;for(var d in a)if(F.call(a,d))return!1;return!0}],84454)},73160,a=>{"use strict";var b=a.i(14562),c=a.i(34603);a.i(75930);var d=a.i(71731),e=(0,c.__name)(a=>{let{securityLevel:c}=(0,b.getConfig2)(),e=(0,d.select)("body");if("sandbox"===c){let b=(0,d.select)(`#i${a}`),c=b.node()?.contentDocument??document;e=(0,d.select)(c.body)}return e.select(`#${a}`)},"selectSvgElement");a.s(["selectSvgElement",0,e])},50160,a=>{a.v("/_next/static/media/icon.0fkix7.hkmsz4.png"+(globalThis.NEXT_CLIENT_ASSET_SUFFIX||""))},33354,(a,b,c)=>{"use strict";c._=function(a){return a&&a.__esModule?a:{default:a}}},69520,a=>{"use strict";let b=(0,a.i(60137).default)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);a.s(["RefreshCw",0,b],69520)},15618,49594,a=>{"use strict";let b=(0,a.i(60137).default)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);a.s(["Plus",0,b],15618);let c=[{bg:"bg-blue-100 dark:bg-blue-900/30",text:"text-blue-700 dark:text-blue-300"},{bg:"bg-emerald-100 dark:bg-emerald-900/30",text:"text-emerald-700 dark:text-emerald-300"},{bg:"bg-violet-100 dark:bg-violet-900/30",text:"text-violet-700 dark:text-violet-300"},{bg:"bg-amber-100 dark:bg-amber-900/30",text:"text-amber-700 dark:text-amber-300"},{bg:"bg-rose-100 dark:bg-rose-900/30",text:"text-rose-700 dark:text-rose-300"},{bg:"bg-cyan-100 dark:bg-cyan-900/30",text:"text-cyan-700 dark:text-cyan-300"},{bg:"bg-orange-100 dark:bg-orange-900/30",text:"text-orange-700 dark:text-orange-300"},{bg:"bg-teal-100 dark:bg-teal-900/30",text:"text-teal-700 dark:text-teal-300"},{bg:"bg-indigo-100 dark:bg-indigo-900/30",text:"text-indigo-700 dark:text-indigo-300"},{bg:"bg-pink-100 dark:bg-pink-900/30",text:"text-pink-700 dark:text-pink-300"},{bg:"bg-lime-100 dark:bg-lime-900/30",text:"text-lime-700 dark:text-lime-300"},{bg:"bg-fuchsia-100 dark:bg-fuchsia-900/30",text:"text-fuchsia-700 dark:text-fuchsia-300"}];a.s(["getRepoColor",0,function(a,b){let d=function(a){let b=5381;for(let c=0;c<a.length;c++)b=33*b^a.charCodeAt(c);return b>>>0}(`${a}/${b}`)%c.length;return c[d]}],49594)},10948,a=>{"use strict";let b=(0,a.i(60137).default)("git-branch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);a.s(["GitBranch",0,b],10948)},63588,a=>{"use strict";let b=(0,a.i(60137).default)("message-square",[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]]);a.s(["MessageSquare",0,b],63588)},62722,a=>{"use strict";let b=(0,a.i(60137).default)("circle-x",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);a.s(["XCircle",0,b],62722)},88381,a=>{"use strict";var b=a.i(72131),c=a.i(83915),d=a.i(91399);a.s(["useTaskEvents",0,function(a){let e=(0,b.useRef)(null),f=(0,b.useRef)(a);(0,b.useLayoutEffect)(()=>{f.current=a}),(0,b.useEffect)(()=>{let a=(0,c.io)((0,d.getServerUrl)(),{transports:["polling","websocket"]});return e.current=a,a.on("task:created",({task:a,warnings:b})=>{f.current.onTaskCreated(a,b??[])}),a.on("task:updated",({task:a})=>{f.current.onTaskUpdated(a)}),a.on("task:deleted",({taskId:a})=>{f.current.onTaskDeleted(a)}),a.on("task:tabs-changed",({task:a})=>{f.current.onTaskTabsChanged?.(a)}),()=>{a.disconnect(),e.current=null}},[])}])},13425,a=>{"use strict";var b=a.i(72131),c=a.i(83915),d=a.i(91399);a.s(["useTabStatusEvents",0,function(a,e){let f=(0,b.useRef)(null),g=(0,b.useRef)(new Set),h=(0,b.useRef)(e);(0,b.useEffect)(()=>{h.current=e});let i=(0,b.useCallback)(()=>{if(!f.current){let a=(0,c.io)((0,d.getServerUrl)(),{transports:["polling","websocket"]});f.current=a,a.on("status-changed",({sessionId:a,status:b})=>{let c=function(a){switch(a){case"running":return"running";case"waiting":return"waiting";case"success":return"success";case"failure":case"error":return"error";case"idle":return"idle";default:return null}}(b);null!==c&&h.current(a,c)}),a.on("connect",()=>{for(let b of g.current)a.emit("join",{room:b,mode:"subscribe"})})}return f.current},[]);(0,b.useEffect)(()=>{if(0===a.length)return;let b=i();for(let c of a){let a=`tab:${c}`;g.current.has(a)||(b.emit("join",{room:a,mode:"subscribe"}),g.current.add(a))}let c=new Set(a);for(let a of g.current){let d=a.replace("tab:","");c.has(d)||(b.emit("leave",{room:a}),g.current.delete(a))}},[a,i]),(0,b.useEffect)(()=>{let a=g.current;return()=>{f.current?.disconnect(),f.current=null,a.clear()}},[])}])},11081,93886,a=>{"use strict";function b(a){return"success"===a||"error"===a||"running"!==a&&"idle"!==a&&void 0}function c(a){let b=a.tabs??[];if(0===b.length||b.some(a=>"running"===a.status))return null;if(b.some(a=>"waiting"===a.status))return"waiting";let c=b.filter(a=>a.unread);return c.some(a=>"error"===a.status)?"error":c.some(a=>"success"===a.status)?"success":null}a.s(["activityKind",0,function(a){return(a.tabs??[]).some(a=>"running"===a.status)?"running":c(a)},"hasUnreadResult",0,function(a){return null!==c(a)},"unreadForStatus",0,b,"unreadKind",0,c],11081);var d=a.i(72131),e=a.i(91399),f=a.i(88381),g=a.i(13425);a.s(["useLiveTasks",0,function(a={}){let[c,h]=(0,d.useState)([]),[i,j]=(0,d.useState)(!0),k=(0,d.useRef)(a),l=(0,d.useRef)(c);(0,d.useEffect)(()=>{k.current=a,l.current=c});let m=(0,d.useCallback)(async()=>{j(!0);try{let a=await fetch((0,e.apiUrl)("/api/tasks"));if(!a.ok)throw Error("Failed to fetch tasks");let b=await a.json();h(b.data.tasks)}catch(a){console.error("Failed to load tasks:",a)}finally{j(!1)}},[]);(0,d.useEffect)(()=>{m()},[m]);let n=(0,d.useMemo)(()=>c.flatMap(a=>(a.tabs??[]).map(a=>a.tab_id)),[c]);return(0,g.useTabStatusEvents)(n,(a,c)=>{let d=b(c);h(b=>b.map(b=>({...b,tabs:(b.tabs??[]).map(b=>b.tab_id===a?{...b,status:c,...void 0!==d&&{unread:d}}:b)})))}),(0,f.useTaskEvents)({onTaskCreated:(a,b)=>{h(b=>b.some(b=>b.id===a.id)?b:[...b,a]),k.current.onTaskCreated?.(a,b)},onTaskUpdated:a=>{h(b=>b.map(b=>b.id===a.id?a:b)),k.current.onTaskUpdated?.(a)},onTaskDeleted:a=>{let b=l.current.find(b=>b.id===a);h(b=>b.filter(b=>b.id!==a)),k.current.onTaskDeleted?.(a,b)},onTaskTabsChanged:a=>{h(b=>b.map(b=>b.id===a.id?a:b))}}),{tasks:c,setTasks:h,isLoading:i,reload:m}}],93886)},92025,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_katex_dist_katex_mjs_0zuygmo._.js"].map(b=>a.l(b))).then(()=>b(48986)))},69e3,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_lodash-es_0yap81y._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_dagre-KV5264BT_mjs_0aqvo3i._.js","server/chunks/ssr/node_modules_lodash-es_091xgk5._.js","server/chunks/ssr/node_modules_dagre-d3-es_src_dagre_index_097t5l0.js","server/chunks/ssr/node_modules_103v9xp._.js"].map(b=>a.l(b))).then(()=>b(55868)))},71331,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0hsalo_._.js","server/chunks/ssr/node_modules_cytoscape_dist_cytoscape_esm_mjs_0642y5z._.js"].map(b=>a.l(b))).then(()=>b(3671)))},99987,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-YZCP3GAM_mjs_04sswi2._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_c4Diagram-AHTNJAMY_mjs_0mw4ioe._.js"].map(b=>a.l(b))).then(()=>b(42357)))},48308,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_08av5m5._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_flowDiagram-DWJPFMVM_mjs_11yfm2v._.js"].map(b=>a.l(b))).then(()=>b(26594)))},74667,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_07xyphe._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_erDiagram-SMLLAGMA_mjs_0ti8x~s._.js"].map(b=>a.l(b))).then(()=>b(35543)))},15498,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0_huoqd._.js","server/chunks/ssr/[root-of-the-server]__0qtqq5d._.js","server/chunks/ssr/node_modules_0gvdioh._.js","server/chunks/ssr/node_modules_lodash-es_01jun1r._.js","server/chunks/ssr/0_lp_modules_mermaid_dist_chunks_mermaid_core_gitGraphDiagram-UUTBAWPF_mjs_0dvv8~.._.js"].map(b=>a.l(b))).then(()=>b(2421)))},24500,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0q8gl61._.js","server/chunks/ssr/node_modules_0t03q3z._.js"].map(b=>a.l(b))).then(()=>b(37521)))},78102,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0tod6y8._.js","server/chunks/ssr/[root-of-the-server]__0ff1foz._.js","server/chunks/ssr/node_modules_lodash-es_01jun1r._.js","server/chunks/ssr/node_modules_0gvdioh._.js"].map(b=>a.l(b))).then(()=>b(86618)))},94433,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0xp9nhx._.js","server/chunks/ssr/[root-of-the-server]__0n2qong._.js","server/chunks/ssr/node_modules_lodash-es_01jun1r._.js","server/chunks/ssr/node_modules_0gvdioh._.js"].map(b=>a.l(b))).then(()=>b(28018)))},65122,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0m8d9.a._.js","server/chunks/ssr/0_lp_modules_mermaid_dist_chunks_mermaid_core_quadrantDiagram-34T5L4WZ_mjs_05wge~v._.js"].map(b=>a.l(b))).then(()=>b(40628)))},6687,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0j1i92p._.js","server/chunks/ssr/0_lp_modules_mermaid_dist_chunks_mermaid_core_xychartDiagram-5P7HB3ND_mjs_0wwuvw2._.js"].map(b=>a.l(b))).then(()=>b(7451)))},18402,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_04x.vut._.js","server/chunks/ssr/0t6k_mermaid_dist_chunks_mermaid_core_requirementDiagram-MS252O5E_mjs_048lezu._.js"].map(b=>a.l(b))).then(()=>b(90431)))},92739,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_0w_54yy._.js","server/chunks/ssr/0_lp_modules_mermaid_dist_chunks_mermaid_core_sequenceDiagram-FGHM5R23_mjs_12c7k-5._.js"].map(b=>a.l(b))).then(()=>b(67397)))},32256,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_0o900rn._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-4TB4RGXK_mjs_0ie15wz._.js"].map(b=>a.l(b))).then(()=>b(55252)))},51050,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_03f~che._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-4TB4RGXK_mjs_0ie15wz._.js"].map(b=>a.l(b))).then(()=>b(12084)))},33430,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0mwl~df._.js","server/chunks/ssr/node_modules_lodash-es_091xgk5._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_stateDiagram-FHFEXIEX_mjs_0mg2~ri._.js","server/chunks/ssr/node_modules_dagre-d3-es_src_dagre_index_097t5l0.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-OYMX7WX6_mjs_087i3.l._.js","server/chunks/ssr/node_modules_103v9xp._.js"].map(b=>a.l(b))).then(()=>b(55905)))},43021,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_0cje6no._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-OYMX7WX6_mjs_087i3.l._.js"].map(b=>a.l(b))).then(()=>b(79891)))},21261,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0_09.d-._.js","server/chunks/ssr/0_lp_modules_mermaid_dist_chunks_mermaid_core_journeyDiagram-VCZTEJTY_mjs_0q7b_tk._.js"].map(b=>a.l(b))).then(()=>b(47598)))},50244,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_d3-shape_src_arc_135n374.js","server/chunks/ssr/0t6k_mermaid_dist_chunks_mermaid_core_timeline-definition-GMOUNBTQ_mjs_0y7flug._.js"].map(b=>a.l(b))).then(()=>b(98138)))},54532,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_04x.vut._.js","server/chunks/ssr/0t6k_mermaid_dist_chunks_mermaid_core_mindmap-definition-QFDTVHPH_mjs_0ie03qp._.js"].map(b=>a.l(b))).then(()=>b(73348)))},42598,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-FMBD7UC4_mjs_0dox0y0._.js","server/chunks/ssr/0_lp_modules_mermaid_dist_chunks_mermaid_core_kanban-definition-6JOO6SKY_mjs_0b8_92c._.js"].map(b=>a.l(b))).then(()=>b(78776)))},18652,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_d3-scale_src_0~kn3a6._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_sankeyDiagram-XADWPNL6_mjs_0akor_o._.js"].map(b=>a.l(b))).then(()=>b(88909)))},9099,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0l23gkf._.js","server/chunks/ssr/[root-of-the-server]__0hhfi7s._.js","server/chunks/ssr/node_modules_lodash-es_01jun1r._.js","server/chunks/ssr/node_modules_0gvdioh._.js"].map(b=>a.l(b))).then(()=>b(20145)))},35140,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_04pfam-._.js","server/chunks/ssr/[root-of-the-server]__0hhfi7s._.js","server/chunks/ssr/node_modules_lodash-es_01jun1r._.js","server/chunks/ssr/node_modules_0gvdioh._.js"].map(b=>a.l(b))).then(()=>b(42910)))},56125,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0omx0o-._.js","server/chunks/ssr/node_modules_0heie6p._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_blockDiagram-DXYQGD6D_mjs_13mbtfc._.js","server/chunks/ssr/node_modules_lodash-es_0egjqeu._.js"].map(b=>a.l(b))).then(()=>b(68669)))},54269,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0q_xfyl._.js","server/chunks/ssr/[root-of-the-server]__0cl-0al._.js","server/chunks/ssr/node_modules_lodash-es_01jun1r._.js","server/chunks/ssr/node_modules_0gvdioh._.js"].map(b=>a.l(b))).then(()=>b(58204)))},97375,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0krwgny._.js","server/chunks/ssr/node_modules_lodash-es_01jun1r._.js","server/chunks/ssr/[root-of-the-server]__0e2_bho._.js","server/chunks/ssr/node_modules_0gvdioh._.js","server/chunks/ssr/node_modules_0sqcrg2._.js","server/chunks/ssr/node_modules_cytoscape_dist_cytoscape_esm_mjs_0642y5z._.js"].map(b=>a.l(b))).then(()=>b(29821)))},70868,a=>{a.v(b=>Promise.all(["server/chunks/ssr/0_lp_modules_mermaid_dist_chunks_mermaid_core_ishikawaDiagram-UXIWVN3A_mjs_0gpauwj._.js"].map(b=>a.l(b))).then(()=>b(5822)))},5494,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_vennDiagram-DHZGUBPP_mjs_013wte~._.js"].map(b=>a.l(b))).then(()=>b(65580)))},41872,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0oip5a1._.js","server/chunks/ssr/[root-of-the-server]__0sha5xx._.js","server/chunks/ssr/node_modules_lodash-es_01jun1r._.js","server/chunks/ssr/node_modules_0gvdioh._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_diagram-G4DWMVQ6_mjs_108p.po._.js"].map(b=>a.l(b))).then(()=>b(52172)))},40744,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0krwgny._.js","server/chunks/ssr/[root-of-the-server]__0e2_bho._.js","server/chunks/ssr/node_modules_0gvdioh._.js","server/chunks/ssr/node_modules_lodash-es_01jun1r._.js","server/chunks/ssr/0_lp_modules_mermaid_dist_chunks_mermaid_core_wardleyDiagram-NUSXRM2D_mjs_0579rrr._.js"].map(b=>a.l(b))).then(()=>b(2410)))}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=_07i72iz._.js.map
|