@minimalcorp/tsunagi 0.1.18 → 0.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/.next/standalone/apps/web/.next/BUILD_ID +1 -1
  2. package/.next/standalone/apps/web/.next/build-manifest.json +3 -3
  3. package/.next/standalone/apps/web/.next/prerender-manifest.json +3 -3
  4. package/.next/standalone/apps/web/.next/server/app/_global-error.html +1 -1
  5. package/.next/standalone/apps/web/.next/server/app/_global-error.rsc +1 -1
  6. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  7. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  8. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  9. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  10. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/.next/standalone/apps/web/.next/server/app/_not-found.html +1 -1
  12. package/.next/standalone/apps/web/.next/server/app/_not-found.rsc +1 -1
  13. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  14. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  15. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  16. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  17. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  18. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  19. package/.next/standalone/apps/web/.next/server/app/index.html +1 -1
  20. package/.next/standalone/apps/web/.next/server/app/index.rsc +1 -1
  21. package/.next/standalone/apps/web/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  22. package/.next/standalone/apps/web/.next/server/app/index.segments/_full.segment.rsc +1 -1
  23. package/.next/standalone/apps/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
  24. package/.next/standalone/apps/web/.next/server/app/index.segments/_index.segment.rsc +1 -1
  25. package/.next/standalone/apps/web/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  26. package/.next/standalone/apps/web/.next/server/app/settings.html +1 -1
  27. package/.next/standalone/apps/web/.next/server/app/settings.rsc +1 -1
  28. package/.next/standalone/apps/web/.next/server/app/settings.segments/_full.segment.rsc +1 -1
  29. package/.next/standalone/apps/web/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  30. package/.next/standalone/apps/web/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  31. package/.next/standalone/apps/web/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  32. package/.next/standalone/apps/web/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
  33. package/.next/standalone/apps/web/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  34. package/.next/standalone/apps/web/.next/server/middleware-build-manifest.js +3 -3
  35. package/.next/standalone/apps/web/.next/server/pages/404.html +1 -1
  36. package/.next/standalone/apps/web/.next/server/pages/500.html +1 -1
  37. package/.next/standalone/apps/web/.next/server/server-reference-manifest.js +1 -1
  38. package/.next/standalone/apps/web/.next/server/server-reference-manifest.json +1 -1
  39. package/dist/server/routes/terminal.js +13 -11
  40. package/npm-shrinkwrap.json +12 -12
  41. package/package.json +1 -1
  42. /package/.next/standalone/apps/web/.next/static/{36-cU0G0900-sCM9SPr1i → UZBFC2azFDGUO9l2ed0nq}/_buildManifest.js +0 -0
  43. /package/.next/standalone/apps/web/.next/static/{36-cU0G0900-sCM9SPr1i → UZBFC2azFDGUO9l2ed0nq}/_clientMiddlewareManifest.js +0 -0
  44. /package/.next/standalone/apps/web/.next/static/{36-cU0G0900-sCM9SPr1i → UZBFC2azFDGUO9l2ed0nq}/_ssgManifest.js +0 -0
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "node": {},
3
3
  "edge": {},
4
- "encryptionKey": "CiPF0BLW1nTeCp390Muw9C90MmM+OqybJoNDZJEzT/A="
4
+ "encryptionKey": "hLX1i/xTvsAKPbjekhoepwWIqzLmTgdTPSmlhVAOxGs="
5
5
  }
@@ -3,6 +3,7 @@ import * as os from 'os';
3
3
  import * as path from 'path';
4
4
  import { ptyManager } from '../pty-manager.js';
5
5
  import { prisma } from '../lib/db.js';
6
+ import { getEnv } from '../lib/repositories/environment.js';
6
7
  // サーバーはプロジェクトルートから起動されるため process.cwd() でルートを取得
7
8
  const TSUNAGI_EDITOR_PATH = path.resolve(process.cwd(), 'scripts/monaco-editor.sh');
8
9
  // Fastify(API) の公開ポート。index.ts と同じ既定値。monaco-editor.sh など PTY 内の
@@ -199,21 +200,22 @@ export async function terminalRoutes(fastify) {
199
200
  return reply.status(200).send({ sessionId, reused: true });
200
201
  }
201
202
  try {
202
- // DBからglobal環境変数を取得(有効なもののみ)
203
- const globalEnv = {};
203
+ // sessionId(=tab_id) から Task(owner/repo) を解決し、repo スコープまで階層マージした
204
+ // 環境変数を取得する(global owner → repo、後勝ちで上書き)。
205
+ // Plannerタブ等、Taskに紐づかないタブは Tab レコードが存在しないため global のみになる。
206
+ let dbEnv = {};
204
207
  try {
205
- const globalEnvVars = await prisma.environmentVariable.findMany({
206
- where: { scope: 'global', enabled: true },
207
- });
208
- globalEnvVars.forEach((e) => {
209
- globalEnv[e.key] = e.value;
208
+ const tab = await prisma.tab.findUnique({
209
+ where: { tabId: sessionId },
210
+ include: { task: true },
210
211
  });
211
- fastify.log.info({ count: globalEnvVars.length }, 'Loaded global env vars');
212
+ dbEnv = tab ? await getEnv('repo', tab.task.owner, tab.task.repo) : await getEnv('global');
213
+ fastify.log.info({ count: Object.keys(dbEnv).length, owner: tab?.task.owner, repo: tab?.task.repo }, 'Loaded env vars');
212
214
  }
213
215
  catch (err) {
214
- fastify.log.warn({ err }, 'Failed to load global env vars');
216
+ fastify.log.warn({ err }, 'Failed to load env vars');
215
217
  }
216
- // 優先順位: リクエストで渡されたenv > DBのglobal env > tsunagi独自のEDITOR設定
218
+ // 優先順位: リクエストで渡されたenv > DB env(global/owner/repo) > tsunagi独自のEDITOR設定
217
219
  // tsunagi-editor.sh をデフォルトにすることで Ctrl+G が Monaco Modal を開く。
218
220
  // DB / リクエストで EDITOR が明示設定されている場合はそちらが優先される。
219
221
  const tsunagiDefaultEnv = {
@@ -223,7 +225,7 @@ export async function terminalRoutes(fastify) {
223
225
  // ホストなので localhost。単一ポート化で API は SERVER_PORT(既定 2791)。
224
226
  TSUNAGI_API_BASE: `http://localhost:${SERVER_PORT}`,
225
227
  };
226
- const mergedEnv = { ...tsunagiDefaultEnv, ...globalEnv, ...env };
228
+ const mergedEnv = { ...tsunagiDefaultEnv, ...dbEnv, ...env };
227
229
  const session = ptyManager.createSession(sessionId, workingDir, mergedEnv);
228
230
  // コマンドが指定されていればPTY起動後にシェルへ書き込む
229
231
  if (command) {
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@minimalcorp/tsunagi",
3
- "version": "0.1.18",
3
+ "version": "0.1.19",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@minimalcorp/tsunagi",
9
- "version": "0.1.18",
9
+ "version": "0.1.19",
10
10
  "license": "SEE LICENSE IN LICENSE",
11
11
  "os": [
12
12
  "darwin",
@@ -1034,9 +1034,9 @@
1034
1034
  }
1035
1035
  },
1036
1036
  "node_modules/@types/node": {
1037
- "version": "26.0.1",
1038
- "resolved": "https://registry.npmjs.org/@types/node/-/node-26.0.1.tgz",
1039
- "integrity": "sha512-fc3KiUoBt6kie0N9bIW3E47vZsuaMf0PM2AaUpLCLT0s/LvX1nxAim6Fc049cNxODPpGm6qRAuUOB86SkRuPQw==",
1037
+ "version": "26.1.0",
1038
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.0.tgz",
1039
+ "integrity": "sha512-O0A1G3xPGy4w7AgQdAQYUlQ+BKk2Oovw8eRpofyp5KdBZULnbe+WqaOVNrm705SHphCiG4XHsACrSmPu1f+Kgw==",
1040
1040
  "license": "MIT",
1041
1041
  "dependencies": {
1042
1042
  "undici-types": "~8.3.0"
@@ -1826,9 +1826,9 @@
1826
1826
  }
1827
1827
  },
1828
1828
  "node_modules/fast-uri": {
1829
- "version": "3.1.2",
1830
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz",
1831
- "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==",
1829
+ "version": "3.1.3",
1830
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.3.tgz",
1831
+ "integrity": "sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==",
1832
1832
  "funding": [
1833
1833
  {
1834
1834
  "type": "github",
@@ -1842,9 +1842,9 @@
1842
1842
  "license": "BSD-3-Clause"
1843
1843
  },
1844
1844
  "node_modules/fastify": {
1845
- "version": "5.8.5",
1846
- "resolved": "https://registry.npmjs.org/fastify/-/fastify-5.8.5.tgz",
1847
- "integrity": "sha512-Yqptv59pQzPgQUSIm87hMqHJmdkb1+GPxdE6vW6FRyVE9G86mt7rOghitiU4JHRaTyDUk9pfeKmDeu70lAwM4Q==",
1845
+ "version": "5.9.0",
1846
+ "resolved": "https://registry.npmjs.org/fastify/-/fastify-5.9.0.tgz",
1847
+ "integrity": "sha512-VMS5lE0zj+MZlJpQa3Qv5iGjfun0H2N7VRgoBwpcTNQ2bdIQpv7fDpb+HGteGbicBsGkzGS+X+hdx9mmrfWuHQ==",
1848
1848
  "funding": [
1849
1849
  {
1850
1850
  "type": "github",
@@ -1864,7 +1864,7 @@
1864
1864
  "abstract-logging": "^2.0.1",
1865
1865
  "avvio": "^9.0.0",
1866
1866
  "fast-json-stringify": "^6.0.0",
1867
- "find-my-way": "^9.0.0",
1867
+ "find-my-way": "^9.6.0",
1868
1868
  "light-my-request": "^6.0.0",
1869
1869
  "pino": "^9.14.0 || ^10.1.0",
1870
1870
  "process-warning": "^5.0.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@minimalcorp/tsunagi",
3
- "version": "0.1.18",
3
+ "version": "0.1.19",
4
4
  "description": "Multi-repo GitHub project management with Claude AI integration, designed for visualizing and controlling AI-driven development locally.",
5
5
  "keywords": [
6
6
  "tsunagi",