@minimalcorp/tsunagi 0.1.3 → 0.1.5

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 (104) hide show
  1. package/.next/standalone/apps/web/.next/BUILD_ID +1 -1
  2. package/.next/standalone/apps/web/.next/app-path-routes-manifest.json +1 -0
  3. package/.next/standalone/apps/web/.next/build-manifest.json +3 -3
  4. package/.next/standalone/apps/web/.next/prerender-manifest.json +3 -3
  5. package/.next/standalone/apps/web/.next/routes-manifest.json +6 -0
  6. package/.next/standalone/apps/web/.next/server/app/_global-error.html +1 -1
  7. package/.next/standalone/apps/web/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  9. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  11. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  12. package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/.next/standalone/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/apps/web/.next/server/app/_not-found.html +1 -1
  15. package/.next/standalone/apps/web/.next/server/app/_not-found.rsc +2 -2
  16. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  17. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  18. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  19. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  20. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  21. package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  22. package/.next/standalone/apps/web/.next/server/app/health/route/app-paths-manifest.json +3 -0
  23. package/.next/standalone/apps/web/.next/server/app/health/route/build-manifest.json +9 -0
  24. package/.next/standalone/apps/web/.next/server/app/health/route/server-reference-manifest.json +4 -0
  25. package/.next/standalone/apps/web/.next/server/app/health/route.js +6 -0
  26. package/.next/standalone/apps/web/.next/server/app/health/route.js.map +5 -0
  27. package/.next/standalone/apps/web/.next/server/app/health/route.js.nft.json +1 -0
  28. package/.next/standalone/apps/web/.next/server/app/health/route_client-reference-manifest.js +3 -0
  29. package/.next/standalone/apps/web/.next/server/app/icon.png/route.js +2 -1
  30. package/.next/standalone/apps/web/.next/server/app/icon.png/route.js.nft.json +1 -1
  31. package/.next/standalone/apps/web/.next/server/app/index.html +1 -1
  32. package/.next/standalone/apps/web/.next/server/app/index.rsc +3 -3
  33. package/.next/standalone/apps/web/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  34. package/.next/standalone/apps/web/.next/server/app/index.segments/_full.segment.rsc +3 -3
  35. package/.next/standalone/apps/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
  36. package/.next/standalone/apps/web/.next/server/app/index.segments/_index.segment.rsc +2 -2
  37. package/.next/standalone/apps/web/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  38. package/.next/standalone/apps/web/.next/server/app/page.js.nft.json +1 -1
  39. package/.next/standalone/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  41. package/.next/standalone/apps/web/.next/server/app/settings.html +1 -1
  42. package/.next/standalone/apps/web/.next/server/app/settings.rsc +2 -2
  43. package/.next/standalone/apps/web/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  44. package/.next/standalone/apps/web/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  45. package/.next/standalone/apps/web/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  46. package/.next/standalone/apps/web/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  47. package/.next/standalone/apps/web/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
  48. package/.next/standalone/apps/web/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  49. package/.next/standalone/apps/web/.next/server/app/tasks/[id]/page.js.nft.json +1 -1
  50. package/.next/standalone/apps/web/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  51. package/.next/standalone/apps/web/.next/server/app-paths-manifest.json +1 -0
  52. package/.next/standalone/apps/web/.next/server/chunks/[root-of-the-server]__03yk.z3._.js +3 -0
  53. package/.next/standalone/apps/web/.next/server/chunks/[root-of-the-server]__0op9af~._.js +3 -0
  54. package/.next/standalone/apps/web/.next/server/chunks/apps_web__next-internal_server_app_health_route_actions_08pjq78.js +3 -0
  55. package/.next/standalone/apps/web/.next/server/chunks/node_modules_next_06p.d_a._.js +13 -0
  56. package/.next/standalone/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__0dg0i1g._.js → [root-of-the-server]__092mq4r._.js} +2 -2
  57. package/.next/standalone/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__12yece_._.js → [root-of-the-server]__0_p.e.m._.js} +15 -15
  58. package/.next/standalone/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__0qw6wy3._.js → [root-of-the-server]__12vhk8e._.js} +15 -15
  59. package/.next/standalone/apps/web/.next/server/chunks/ssr/_0g.cd6a._.js +1 -1
  60. package/.next/standalone/apps/web/.next/server/chunks/ssr/apps_web_src_app_tasks_[id]_page_tsx_0jshsm2._.js +2 -2
  61. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_07.c491._.js → node_modules_0-31hvv._.js} +1 -1
  62. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0t3_1om._.js → node_modules_00je7te._.js} +1 -1
  63. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_02~gcwc._.js → node_modules_08zu-qy._.js} +1 -1
  64. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0gpuu-x._.js → node_modules_0f5l4h2._.js} +1 -1
  65. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_12qdm6m._.js → node_modules_0m9gy6q._.js} +1 -1
  66. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0cphr_r._.js → node_modules_0o0.qfb._.js} +1 -1
  67. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0-4t5u4._.js → node_modules_0yo5dp5._.js} +1 -1
  68. package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_055srxz._.js → node_modules_0zdgon0._.js} +1 -1
  69. package/.next/standalone/apps/web/.next/server/middleware-build-manifest.js +3 -3
  70. package/.next/standalone/apps/web/.next/server/pages/404.html +1 -1
  71. package/.next/standalone/apps/web/.next/server/pages/500.html +1 -1
  72. package/.next/standalone/apps/web/.next/server/server-reference-manifest.js +1 -1
  73. package/.next/standalone/apps/web/.next/server/server-reference-manifest.json +1 -1
  74. package/.next/standalone/apps/web/.next/static/chunks/{0l0s3fn6xga.t.js → 06h0.7cz1a2pw.js} +13 -13
  75. package/.next/standalone/apps/web/.next/static/chunks/0g.gfve6-xixo.css +4 -0
  76. package/.next/standalone/apps/web/.next/static/chunks/{0hx_sdyz0yyfb.js → 0u1x2j.2fd983.js} +7 -7
  77. package/.next/standalone/apps/web/.next/static/chunks/0wd663tqvi2ts.js +3 -0
  78. package/.next/standalone/apps/web/.next/static/chunks/{0ew.-lnxoet~x.js → 0zi97fcrx3u_8.js} +13 -13
  79. package/dist/auto-migrate.js +6 -7
  80. package/dist/cli.js +195 -10
  81. package/dist/plugin-lifecycle.d.ts +4 -1
  82. package/dist/plugin-lifecycle.js +11 -4
  83. package/dist/server/generated/prisma/commonInputTypes.d.ts +36 -36
  84. package/dist/server/generated/prisma/internal/class.js +2 -2
  85. package/dist/server/generated/prisma/models/Tab.d.ts +0 -7
  86. package/dist/server/generated/prisma/models/Task.d.ts +32 -25
  87. package/dist/server/index.js +6 -1
  88. package/dist/server/lib/repositories/task.d.ts +4 -2
  89. package/dist/server/lib/repositories/task.js +8 -6
  90. package/dist/server/lib/services/task-service.js +27 -17
  91. package/dist/server/routes/hooks.js +24 -12
  92. package/dist/server/routes/tasks.js +2 -2
  93. package/dist/server/routes/terminal.js +3 -2
  94. package/package.json +2 -1
  95. package/prisma/migrations/20260410000000_clear_stale_tab_todos/migration.sql +4 -0
  96. package/prisma/migrations/20260413000000_make_task_order_non_nullable/migration.sql +47 -0
  97. package/prisma/schema.prisma +1 -1
  98. package/tsunagi-marketplace/plugins/tsunagi-plugin/skills/tsunagi-task/SKILL.md +21 -0
  99. package/.next/standalone/apps/web/.next/server/chunks/[root-of-the-server]__0jam776._.js +0 -13
  100. package/.next/standalone/apps/web/.next/static/chunks/0b8.3al6nvw3d.css +0 -4
  101. package/.next/standalone/apps/web/.next/static/chunks/12r3ashx0krmo.js +0 -3
  102. /package/.next/standalone/apps/web/.next/static/{y1VVVedZfN-isLJKKaC_l → 3spyaOCz0ow4ijl7Dvjpb}/_buildManifest.js +0 -0
  103. /package/.next/standalone/apps/web/.next/static/{y1VVVedZfN-isLJKKaC_l → 3spyaOCz0ow4ijl7Dvjpb}/_clientMiddlewareManifest.js +0 -0
  104. /package/.next/standalone/apps/web/.next/static/{y1VVVedZfN-isLJKKaC_l → 3spyaOCz0ow4ijl7Dvjpb}/_ssgManifest.js +0 -0
@@ -12,15 +12,14 @@ function getStateDir() {
12
12
  }
13
13
  async function autoMigrate() {
14
14
  try {
15
- console.log('DB migration started');
16
15
  await fs.mkdir(getStateDir(), { recursive: true });
17
16
  const { stdout } = await execAsync('npx prisma migrate deploy');
18
- const lines = stdout
19
- .split('\n')
20
- .map((l) => l.trim())
21
- .filter((l) => l && !l.startsWith('Prisma schema loaded'));
22
- if (lines.length > 0)
23
- console.log(lines.join('\n'));
17
+ // Extract "N migration(s) applied." line from prisma output
18
+ const match = stdout.match(/(\d+)\s+migrations?\s+applied/i);
19
+ if (match) {
20
+ const count = parseInt(match[1], 10);
21
+ console.log(`${count} migration${count === 1 ? '' : 's'} applied.`);
22
+ }
24
23
  }
25
24
  catch (error) {
26
25
  console.error('DB migration failed:', error instanceof Error ? error.message : error);
package/dist/cli.js CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { spawn, spawnSync } from 'node:child_process';
3
3
  import * as fs from 'node:fs';
4
+ import * as http from 'node:http';
4
5
  import * as path from 'node:path';
5
6
  import { fileURLToPath } from 'node:url';
6
7
  import { cleanupPluginState, ensureCleanPluginState } from './plugin-lifecycle.js';
@@ -35,22 +36,139 @@ const PACKAGE_ROOT = path.resolve(DIST_DIR, '..');
35
36
  const AUTO_MIGRATE_JS = path.join(DIST_DIR, 'auto-migrate.js');
36
37
  const FASTIFY_ENTRY_JS = path.join(DIST_DIR, 'server', 'index.js');
37
38
  const NEXT_STANDALONE_ENTRY = path.join(PACKAGE_ROOT, '.next', 'standalone', 'apps', 'web', 'server.js');
39
+ const DOCS_DIR = path.join(PACKAGE_ROOT, 'docs');
40
+ const DOCS_PORT = 2793;
41
+ const isDebug = !!process.env.TSUNAGI_DEBUG;
42
+ const isDocker = fs.existsSync('/.dockerenv');
43
+ // ---------------------------------------------------------------------------
44
+ // Braille-dots spinner
45
+ // ---------------------------------------------------------------------------
46
+ const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
47
+ function createSpinner(message) {
48
+ let i = 0;
49
+ const timer = setInterval(() => {
50
+ process.stdout.write(`\r${SPINNER_FRAMES[i % SPINNER_FRAMES.length]} ${message}`);
51
+ i++;
52
+ }, 80);
53
+ return {
54
+ stop() {
55
+ clearInterval(timer);
56
+ // Clear the spinner line
57
+ process.stdout.write('\r' + ' '.repeat(message.length + 4) + '\r');
58
+ },
59
+ };
60
+ }
61
+ // ---------------------------------------------------------------------------
62
+ // ASCII art
63
+ // ---------------------------------------------------------------------------
64
+ const TSUNAGI_AA = `
65
+ __ _
66
+ / /____ __ _____ ___ ____ _(_)
67
+ / __(_-</ // / _ \\/ _ \`/ _ \`/ /
68
+ \\__/___/\\_,_/_//_/\\_,_/\\_, /_/
69
+ /___/
70
+ `;
71
+ // ---------------------------------------------------------------------------
72
+ // Phase 1: Auto-migrate (synchronous child process)
73
+ // ---------------------------------------------------------------------------
38
74
  function runAutoMigrate() {
39
75
  if (!fs.existsSync(AUTO_MIGRATE_JS)) {
40
76
  console.error(`[tsunagi] Missing build artifact: ${AUTO_MIGRATE_JS}`);
41
77
  process.exit(1);
42
78
  }
43
79
  const result = spawnSync(process.execPath, [AUTO_MIGRATE_JS], {
44
- stdio: 'inherit',
80
+ stdio: isDebug ? 'inherit' : ['inherit', 'pipe', 'pipe'],
45
81
  cwd: PACKAGE_ROOT,
46
82
  });
47
83
  if (result.status !== 0) {
84
+ const stderr = result.stderr?.toString().trim();
85
+ if (stderr)
86
+ console.error(stderr);
48
87
  console.error('[tsunagi] Database migration failed.');
49
88
  process.exit(result.status ?? 1);
50
89
  }
90
+ // Display migration result (e.g. "1 migration applied.")
91
+ const stdout = result.stdout?.toString().trim();
92
+ if (stdout)
93
+ console.log(stdout);
51
94
  }
52
95
  runAutoMigrate();
53
- ensureCleanPluginState();
96
+ // ---------------------------------------------------------------------------
97
+ // Phase 2: Plugin lifecycle
98
+ // ---------------------------------------------------------------------------
99
+ const pluginResult = ensureCleanPluginState();
100
+ console.log(pluginResult === 'clean' ? 'clean installed tsunagi plugin' : 'installed tsunagi plugin');
101
+ // ---------------------------------------------------------------------------
102
+ // Docs static file server
103
+ // ---------------------------------------------------------------------------
104
+ const MIME_TYPES = {
105
+ '.html': 'text/html; charset=utf-8',
106
+ '.css': 'text/css',
107
+ '.js': 'application/javascript',
108
+ '.json': 'application/json',
109
+ '.png': 'image/png',
110
+ '.jpg': 'image/jpeg',
111
+ '.svg': 'image/svg+xml',
112
+ '.ico': 'image/x-icon',
113
+ '.wasm': 'application/wasm',
114
+ '.woff': 'font/woff',
115
+ '.woff2': 'font/woff2',
116
+ '.ttf': 'font/ttf',
117
+ '.txt': 'text/plain',
118
+ '.xml': 'application/xml',
119
+ };
120
+ function startDocsServer() {
121
+ if (!fs.existsSync(DOCS_DIR))
122
+ return null;
123
+ const serveFile = (filePath, res) => {
124
+ const ext = path.extname(filePath);
125
+ const contentType = MIME_TYPES[ext] || 'application/octet-stream';
126
+ fs.readFile(filePath, (err, data) => {
127
+ if (err) {
128
+ res.writeHead(404).end();
129
+ return;
130
+ }
131
+ res.writeHead(200, { 'Content-Type': contentType });
132
+ res.end(data);
133
+ });
134
+ };
135
+ const server = http.createServer((req, res) => {
136
+ let urlPath;
137
+ try {
138
+ urlPath = decodeURIComponent(new URL(req.url ?? '/', 'http://localhost').pathname);
139
+ }
140
+ catch {
141
+ res.writeHead(400).end();
142
+ return;
143
+ }
144
+ const filePath = path.resolve(DOCS_DIR, '.' + urlPath);
145
+ if (!filePath.startsWith(DOCS_DIR)) {
146
+ res.writeHead(403).end();
147
+ return;
148
+ }
149
+ fs.stat(filePath, (err, stat) => {
150
+ if (err) {
151
+ res.writeHead(404).end();
152
+ return;
153
+ }
154
+ if (stat.isDirectory()) {
155
+ if (!urlPath.endsWith('/')) {
156
+ res.writeHead(301, { Location: urlPath + '/' }).end();
157
+ return;
158
+ }
159
+ serveFile(path.join(filePath, 'index.html'), res);
160
+ }
161
+ else {
162
+ serveFile(filePath, res);
163
+ }
164
+ });
165
+ });
166
+ server.listen(DOCS_PORT, '0.0.0.0');
167
+ return server;
168
+ }
169
+ // ---------------------------------------------------------------------------
170
+ // Phase 3: Verify build artifacts & spawn servers
171
+ // ---------------------------------------------------------------------------
54
172
  function verifyArtifact(p, label) {
55
173
  if (!fs.existsSync(p)) {
56
174
  console.error(`[tsunagi] Missing ${label}: ${p}`);
@@ -60,21 +178,83 @@ function verifyArtifact(p, label) {
60
178
  }
61
179
  verifyArtifact(FASTIFY_ENTRY_JS, 'Fastify server artifact');
62
180
  verifyArtifact(NEXT_STANDALONE_ENTRY, 'Next.js standalone artifact');
181
+ const PORT = process.env.PORT ?? '2791';
182
+ const spinner = createSpinner('Initializing...');
63
183
  const fastifyChild = spawn(process.execPath, [FASTIFY_ENTRY_JS], {
64
- stdio: 'inherit',
184
+ stdio: ['inherit', 'pipe', 'pipe'],
65
185
  cwd: PACKAGE_ROOT,
66
- env: process.env,
186
+ env: { ...process.env, NODE_ENV: 'production' },
67
187
  });
68
188
  const nextChild = spawn(process.execPath, [NEXT_STANDALONE_ENTRY], {
69
- stdio: 'inherit',
189
+ stdio: ['inherit', 'pipe', 'pipe'],
70
190
  cwd: path.dirname(NEXT_STANDALONE_ENTRY),
71
- env: { ...process.env, PORT: process.env.PORT ?? '2791' },
191
+ env: { ...process.env, PORT, NODE_ENV: 'production', HOSTNAME: '0.0.0.0' },
192
+ });
193
+ const docsServer = startDocsServer();
194
+ // ---------------------------------------------------------------------------
195
+ // Child process output forwarding
196
+ // ---------------------------------------------------------------------------
197
+ fastifyChild.stdout?.on('data', (data) => {
198
+ if (isDebug)
199
+ process.stdout.write(data);
72
200
  });
201
+ fastifyChild.stderr?.on('data', (data) => {
202
+ process.stderr.write(data);
203
+ });
204
+ nextChild.stdout?.on('data', (data) => {
205
+ if (isDebug)
206
+ process.stdout.write(data);
207
+ });
208
+ nextChild.stderr?.on('data', (data) => {
209
+ process.stderr.write(data);
210
+ });
211
+ // ---------------------------------------------------------------------------
212
+ // Ready detection via /health polling
213
+ // ---------------------------------------------------------------------------
214
+ const SERVER_PORT = 2792;
215
+ const POLL_INTERVAL_MS = 300;
216
+ function pollHealth(port) {
217
+ return new Promise((resolve) => {
218
+ const poll = () => {
219
+ const req = http.get(`http://localhost:${port}/health`, (res) => {
220
+ if (res.statusCode === 200) {
221
+ res.resume();
222
+ resolve();
223
+ }
224
+ else {
225
+ res.resume();
226
+ setTimeout(poll, POLL_INTERVAL_MS);
227
+ }
228
+ });
229
+ req.on('error', () => {
230
+ setTimeout(poll, POLL_INTERVAL_MS);
231
+ });
232
+ };
233
+ poll();
234
+ });
235
+ }
236
+ Promise.all([pollHealth(SERVER_PORT), pollHealth(Number(PORT))]).then(() => {
237
+ spinner.stop();
238
+ console.log(TSUNAGI_AA);
239
+ const url = `http://localhost:${PORT}`;
240
+ if (!isDocker) {
241
+ const cmd = process.platform === 'darwin' ? 'open' : 'xdg-open';
242
+ spawn(cmd, [url], { stdio: 'ignore', detached: true }).unref();
243
+ }
244
+ console.log(`Open ${url}`);
245
+ if (docsServer) {
246
+ console.log(`Docs http://localhost:${DOCS_PORT}`);
247
+ }
248
+ });
249
+ // ---------------------------------------------------------------------------
250
+ // Shutdown
251
+ // ---------------------------------------------------------------------------
73
252
  let shuttingDown = false;
74
253
  function shutdown(code) {
75
254
  if (shuttingDown)
76
255
  return;
77
256
  shuttingDown = true;
257
+ spinner.stop();
78
258
  for (const child of [fastifyChild, nextChild]) {
79
259
  if (child && !child.killed && child.exitCode === null) {
80
260
  try {
@@ -85,6 +265,7 @@ function shutdown(code) {
85
265
  }
86
266
  }
87
267
  }
268
+ docsServer?.close();
88
269
  cleanupPluginState();
89
270
  process.exit(code);
90
271
  }
@@ -95,10 +276,14 @@ process.on('exit', () => {
95
276
  cleanupPluginState();
96
277
  });
97
278
  fastifyChild.on('exit', (code) => {
98
- console.error(`[tsunagi] Fastify server exited with code ${code}`);
99
- shutdown(code ?? 1);
279
+ if (!shuttingDown) {
280
+ console.error(`[tsunagi] Fastify server exited unexpectedly (code ${code})`);
281
+ shutdown(code ?? 1);
282
+ }
100
283
  });
101
284
  nextChild.on('exit', (code) => {
102
- console.error(`[tsunagi] Next.js server exited with code ${code}`);
103
- shutdown(code ?? 1);
285
+ if (!shuttingDown) {
286
+ console.error(`[tsunagi] Next.js server exited unexpectedly (code ${code})`);
287
+ shutdown(code ?? 1);
288
+ }
104
289
  });
@@ -3,8 +3,11 @@
3
3
  * marketplace registrations and then installing fresh copies.
4
4
  *
5
5
  * Exits the process with code 1 on install failure.
6
+ *
7
+ * @returns `'clean'` if orphaned state was cleaned up before install,
8
+ * `'fresh'` if no prior state existed.
6
9
  */
7
- export declare function ensureCleanPluginState(): void;
10
+ export declare function ensureCleanPluginState(): 'clean' | 'fresh';
8
11
  /**
9
12
  * Best-effort cleanup. Called on process shutdown. Never throws.
10
13
  */
@@ -31,8 +31,10 @@ function getMarketplaceDir() {
31
31
  // Fallback for unexpected layouts
32
32
  return candidate;
33
33
  }
34
- function log(msg) {
35
- console.log(`[tsunagi:plugin] ${msg}`);
34
+ function debugLog(msg) {
35
+ if (process.env.TSUNAGI_DEBUG) {
36
+ console.log(`[tsunagi:plugin] ${msg}`);
37
+ }
36
38
  }
37
39
  /** プラグインがインストール済みか確認する */
38
40
  function isPluginInstalled() {
@@ -76,10 +78,14 @@ function runClaude(args) {
76
78
  * marketplace registrations and then installing fresh copies.
77
79
  *
78
80
  * Exits the process with code 1 on install failure.
81
+ *
82
+ * @returns `'clean'` if orphaned state was cleaned up before install,
83
+ * `'fresh'` if no prior state existed.
79
84
  */
80
85
  export function ensureCleanPluginState() {
81
86
  // Phase 1: best-effort cleanup of any orphaned state from a previous run.
82
87
  // Check existence first to avoid error output when plugin is not installed (normal first-boot case).
88
+ const hadOrphan = isPluginInstalled() || isMarketplaceAdded();
83
89
  if (isPluginInstalled()) {
84
90
  runClaude(`plugin uninstall ${PLUGIN_REF}`);
85
91
  }
@@ -94,13 +100,14 @@ export function ensureCleanPluginState() {
94
100
  console.error(`[tsunagi:plugin] Marketplace path: ${marketplaceDir}`);
95
101
  process.exit(1);
96
102
  }
97
- log('Marketplace added');
103
+ debugLog('Marketplace added');
98
104
  if (!runClaude(`plugin install ${PLUGIN_REF} --scope user`)) {
99
105
  console.error('[tsunagi:plugin] Failed to install Claude Code plugin.');
100
106
  runClaude(`plugin marketplace remove ${MARKETPLACE_NAME}`);
101
107
  process.exit(1);
102
108
  }
103
- log('Plugin installed');
109
+ debugLog('Plugin installed');
110
+ return hadOrphan ? 'clean' : 'fresh';
104
111
  }
105
112
  /**
106
113
  * Best-effort cleanup. Called on process shutdown. Never throws.
@@ -74,6 +74,16 @@ export type IntNullableFilter<$PrismaModel = never> = {
74
74
  gte?: number | Prisma.IntFieldRefInput<$PrismaModel>;
75
75
  not?: Prisma.NestedIntNullableFilter<$PrismaModel> | number | null;
76
76
  };
77
+ export type IntFilter<$PrismaModel = never> = {
78
+ equals?: number | Prisma.IntFieldRefInput<$PrismaModel>;
79
+ in?: number[];
80
+ notIn?: number[];
81
+ lt?: number | Prisma.IntFieldRefInput<$PrismaModel>;
82
+ lte?: number | Prisma.IntFieldRefInput<$PrismaModel>;
83
+ gt?: number | Prisma.IntFieldRefInput<$PrismaModel>;
84
+ gte?: number | Prisma.IntFieldRefInput<$PrismaModel>;
85
+ not?: Prisma.NestedIntFilter<$PrismaModel> | number;
86
+ };
77
87
  export type DateTimeNullableFilter<$PrismaModel = never> = {
78
88
  equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null;
79
89
  in?: Date[] | string[] | null;
@@ -119,29 +129,6 @@ export type IntNullableWithAggregatesFilter<$PrismaModel = never> = {
119
129
  _min?: Prisma.NestedIntNullableFilter<$PrismaModel>;
120
130
  _max?: Prisma.NestedIntNullableFilter<$PrismaModel>;
121
131
  };
122
- export type DateTimeNullableWithAggregatesFilter<$PrismaModel = never> = {
123
- equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null;
124
- in?: Date[] | string[] | null;
125
- notIn?: Date[] | string[] | null;
126
- lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>;
127
- lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>;
128
- gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>;
129
- gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>;
130
- not?: Prisma.NestedDateTimeNullableWithAggregatesFilter<$PrismaModel> | Date | string | null;
131
- _count?: Prisma.NestedIntNullableFilter<$PrismaModel>;
132
- _min?: Prisma.NestedDateTimeNullableFilter<$PrismaModel>;
133
- _max?: Prisma.NestedDateTimeNullableFilter<$PrismaModel>;
134
- };
135
- export type IntFilter<$PrismaModel = never> = {
136
- equals?: number | Prisma.IntFieldRefInput<$PrismaModel>;
137
- in?: number[];
138
- notIn?: number[];
139
- lt?: number | Prisma.IntFieldRefInput<$PrismaModel>;
140
- lte?: number | Prisma.IntFieldRefInput<$PrismaModel>;
141
- gt?: number | Prisma.IntFieldRefInput<$PrismaModel>;
142
- gte?: number | Prisma.IntFieldRefInput<$PrismaModel>;
143
- not?: Prisma.NestedIntFilter<$PrismaModel> | number;
144
- };
145
132
  export type IntWithAggregatesFilter<$PrismaModel = never> = {
146
133
  equals?: number | Prisma.IntFieldRefInput<$PrismaModel>;
147
134
  in?: number[];
@@ -157,6 +144,19 @@ export type IntWithAggregatesFilter<$PrismaModel = never> = {
157
144
  _min?: Prisma.NestedIntFilter<$PrismaModel>;
158
145
  _max?: Prisma.NestedIntFilter<$PrismaModel>;
159
146
  };
147
+ export type DateTimeNullableWithAggregatesFilter<$PrismaModel = never> = {
148
+ equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null;
149
+ in?: Date[] | string[] | null;
150
+ notIn?: Date[] | string[] | null;
151
+ lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>;
152
+ lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>;
153
+ gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>;
154
+ gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>;
155
+ not?: Prisma.NestedDateTimeNullableWithAggregatesFilter<$PrismaModel> | Date | string | null;
156
+ _count?: Prisma.NestedIntNullableFilter<$PrismaModel>;
157
+ _min?: Prisma.NestedDateTimeNullableFilter<$PrismaModel>;
158
+ _max?: Prisma.NestedDateTimeNullableFilter<$PrismaModel>;
159
+ };
160
160
  export type BoolFilter<$PrismaModel = never> = {
161
161
  equals?: boolean | Prisma.BooleanFieldRefInput<$PrismaModel>;
162
162
  not?: Prisma.NestedBoolFilter<$PrismaModel> | boolean;
@@ -304,19 +304,6 @@ export type NestedFloatNullableFilter<$PrismaModel = never> = {
304
304
  gte?: number | Prisma.FloatFieldRefInput<$PrismaModel>;
305
305
  not?: Prisma.NestedFloatNullableFilter<$PrismaModel> | number | null;
306
306
  };
307
- export type NestedDateTimeNullableWithAggregatesFilter<$PrismaModel = never> = {
308
- equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null;
309
- in?: Date[] | string[] | null;
310
- notIn?: Date[] | string[] | null;
311
- lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>;
312
- lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>;
313
- gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>;
314
- gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>;
315
- not?: Prisma.NestedDateTimeNullableWithAggregatesFilter<$PrismaModel> | Date | string | null;
316
- _count?: Prisma.NestedIntNullableFilter<$PrismaModel>;
317
- _min?: Prisma.NestedDateTimeNullableFilter<$PrismaModel>;
318
- _max?: Prisma.NestedDateTimeNullableFilter<$PrismaModel>;
319
- };
320
307
  export type NestedIntWithAggregatesFilter<$PrismaModel = never> = {
321
308
  equals?: number | Prisma.IntFieldRefInput<$PrismaModel>;
322
309
  in?: number[];
@@ -342,6 +329,19 @@ export type NestedFloatFilter<$PrismaModel = never> = {
342
329
  gte?: number | Prisma.FloatFieldRefInput<$PrismaModel>;
343
330
  not?: Prisma.NestedFloatFilter<$PrismaModel> | number;
344
331
  };
332
+ export type NestedDateTimeNullableWithAggregatesFilter<$PrismaModel = never> = {
333
+ equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null;
334
+ in?: Date[] | string[] | null;
335
+ notIn?: Date[] | string[] | null;
336
+ lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>;
337
+ lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>;
338
+ gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>;
339
+ gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>;
340
+ not?: Prisma.NestedDateTimeNullableWithAggregatesFilter<$PrismaModel> | Date | string | null;
341
+ _count?: Prisma.NestedIntNullableFilter<$PrismaModel>;
342
+ _min?: Prisma.NestedDateTimeNullableFilter<$PrismaModel>;
343
+ _max?: Prisma.NestedDateTimeNullableFilter<$PrismaModel>;
344
+ };
345
345
  export type NestedBoolFilter<$PrismaModel = never> = {
346
346
  equals?: boolean | Prisma.BooleanFieldRefInput<$PrismaModel>;
347
347
  not?: Prisma.NestedBoolFilter<$PrismaModel> | boolean;
@@ -15,7 +15,7 @@ const config = {
15
15
  "clientVersion": "7.6.0",
16
16
  "engineVersion": "75cbdc1eb7150937890ad5465d861175c6624711",
17
17
  "activeProvider": "sqlite",
18
- "inlineSchema": "generator client {\n provider = \"prisma-client\"\n output = \"../src/generated/prisma\"\n}\n\ndatasource db {\n provider = \"sqlite\"\n}\n\n// Repository\nmodel Repository {\n id String @id @default(uuid())\n owner String\n repo String\n cloneUrl String @map(\"clone_url\")\n createdAt DateTime @default(now()) @map(\"created_at\")\n\n tasks Task[]\n environmentVars EnvironmentVariable[]\n\n @@unique([owner, repo])\n @@map(\"repositories\")\n}\n\n// Task\nmodel Task {\n id String @id @default(uuid())\n title String\n description String\n status String // 'backlog' | 'planning' | 'coding' | 'reviewing' | 'done'\n owner String\n repo String\n branch String\n baseBranch String @map(\"base_branch\") // rebase/merge判定用のベースブランチ\n repoId String @map(\"repo_id\")\n worktreeStatus String @map(\"worktree_status\") // 'pending' | 'created' | 'error'\n\n // Pull Request情報\n pullRequestUrl String? @map(\"pull_request_url\")\n\n effort Int?\n order Int?\n deletedAt DateTime? @map(\"deleted_at\")\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n repository Repository @relation(fields: [repoId], references: [id], onDelete: Cascade)\n tabs Tab[]\n\n @@index([owner, repo])\n @@index([status])\n @@index([deletedAt])\n @@map(\"tasks\")\n}\n\n// Tab\nmodel Tab {\n tabId String @id @map(\"tab_id\")\n taskId String @map(\"task_id\")\n order Int // タブ表示用の連番\n status String // 'idle' | 'running' | 'success' | 'error'\n createdAt DateTime @default(now()) @map(\"created_at\")\n startedAt DateTime @map(\"started_at\")\n completedAt DateTime? @map(\"completed_at\")\n todos String? @default(\"[]\") // JSON: Todo[]\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n task Task @relation(fields: [taskId], references: [id], onDelete: Cascade)\n\n @@index([taskId])\n @@map(\"tabs\")\n}\n\n// PlannerTab - プランナーClaude用のタブ(タスクに紐づかない)\nmodel PlannerTab {\n tabId String @id @map(\"tab_id\")\n order Int\n status String // 'idle' | 'running' | 'success' | 'error'\n createdAt DateTime @default(now()) @map(\"created_at\")\n startedAt DateTime @map(\"started_at\")\n completedAt DateTime? @map(\"completed_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n @@map(\"planner_tabs\")\n}\n\n// EnvironmentVariable\nmodel EnvironmentVariable {\n id String @id @default(uuid())\n key String\n value String\n scope String // 'global' | 'owner' | 'repo' - 階層構造の優先順位制御\n owner String?\n repo String?\n enabled Boolean @default(true)\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n repository Repository? @relation(fields: [owner, repo], references: [owner, repo], onDelete: Cascade)\n\n @@unique([key, scope, owner, repo])\n @@index([scope, owner, repo])\n @@map(\"environment_variables\")\n}\n",
18
+ "inlineSchema": "generator client {\n provider = \"prisma-client\"\n output = \"../src/generated/prisma\"\n}\n\ndatasource db {\n provider = \"sqlite\"\n}\n\n// Repository\nmodel Repository {\n id String @id @default(uuid())\n owner String\n repo String\n cloneUrl String @map(\"clone_url\")\n createdAt DateTime @default(now()) @map(\"created_at\")\n\n tasks Task[]\n environmentVars EnvironmentVariable[]\n\n @@unique([owner, repo])\n @@map(\"repositories\")\n}\n\n// Task\nmodel Task {\n id String @id @default(uuid())\n title String\n description String\n status String // 'backlog' | 'planning' | 'coding' | 'reviewing' | 'done'\n owner String\n repo String\n branch String\n baseBranch String @map(\"base_branch\") // rebase/merge判定用のベースブランチ\n repoId String @map(\"repo_id\")\n worktreeStatus String @map(\"worktree_status\") // 'pending' | 'created' | 'error'\n\n // Pull Request情報\n pullRequestUrl String? @map(\"pull_request_url\")\n\n effort Int?\n order Int @default(0)\n deletedAt DateTime? @map(\"deleted_at\")\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n repository Repository @relation(fields: [repoId], references: [id], onDelete: Cascade)\n tabs Tab[]\n\n @@index([owner, repo])\n @@index([status])\n @@index([deletedAt])\n @@map(\"tasks\")\n}\n\n// Tab\nmodel Tab {\n tabId String @id @map(\"tab_id\")\n taskId String @map(\"task_id\")\n order Int // タブ表示用の連番\n status String // 'idle' | 'running' | 'success' | 'error'\n createdAt DateTime @default(now()) @map(\"created_at\")\n startedAt DateTime @map(\"started_at\")\n completedAt DateTime? @map(\"completed_at\")\n todos String? @default(\"[]\") // JSON: Todo[]\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n task Task @relation(fields: [taskId], references: [id], onDelete: Cascade)\n\n @@index([taskId])\n @@map(\"tabs\")\n}\n\n// PlannerTab - プランナーClaude用のタブ(タスクに紐づかない)\nmodel PlannerTab {\n tabId String @id @map(\"tab_id\")\n order Int\n status String // 'idle' | 'running' | 'success' | 'error'\n createdAt DateTime @default(now()) @map(\"created_at\")\n startedAt DateTime @map(\"started_at\")\n completedAt DateTime? @map(\"completed_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n @@map(\"planner_tabs\")\n}\n\n// EnvironmentVariable\nmodel EnvironmentVariable {\n id String @id @default(uuid())\n key String\n value String\n scope String // 'global' | 'owner' | 'repo' - 階層構造の優先順位制御\n owner String?\n repo String?\n enabled Boolean @default(true)\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n repository Repository? @relation(fields: [owner, repo], references: [owner, repo], onDelete: Cascade)\n\n @@unique([key, scope, owner, repo])\n @@index([scope, owner, repo])\n @@map(\"environment_variables\")\n}\n",
19
19
  "runtimeDataModel": {
20
20
  "models": {},
21
21
  "enums": {},
@@ -29,7 +29,7 @@ const config = {
29
29
  config.runtimeDataModel = JSON.parse("{\"models\":{\"Repository\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"owner\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"repo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"cloneUrl\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"clone_url\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"tasks\",\"kind\":\"object\",\"type\":\"Task\",\"relationName\":\"RepositoryToTask\"},{\"name\":\"environmentVars\",\"kind\":\"object\",\"type\":\"EnvironmentVariable\",\"relationName\":\"EnvironmentVariableToRepository\"}],\"dbName\":\"repositories\"},\"Task\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"owner\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"repo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"branch\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"baseBranch\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"base_branch\"},{\"name\":\"repoId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"repo_id\"},{\"name\":\"worktreeStatus\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"worktree_status\"},{\"name\":\"pullRequestUrl\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"pull_request_url\"},{\"name\":\"effort\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"order\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"deletedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"deleted_at\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"repository\",\"kind\":\"object\",\"type\":\"Repository\",\"relationName\":\"RepositoryToTask\"},{\"name\":\"tabs\",\"kind\":\"object\",\"type\":\"Tab\",\"relationName\":\"TabToTask\"}],\"dbName\":\"tasks\"},\"Tab\":{\"fields\":[{\"name\":\"tabId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"tab_id\"},{\"name\":\"taskId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"task_id\"},{\"name\":\"order\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"startedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"started_at\"},{\"name\":\"completedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"completed_at\"},{\"name\":\"todos\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"task\",\"kind\":\"object\",\"type\":\"Task\",\"relationName\":\"TabToTask\"}],\"dbName\":\"tabs\"},\"PlannerTab\":{\"fields\":[{\"name\":\"tabId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"tab_id\"},{\"name\":\"order\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"startedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"started_at\"},{\"name\":\"completedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"completed_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"}],\"dbName\":\"planner_tabs\"},\"EnvironmentVariable\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"key\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"value\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"scope\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"owner\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"repo\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"enabled\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"repository\",\"kind\":\"object\",\"type\":\"Repository\",\"relationName\":\"EnvironmentVariableToRepository\"}],\"dbName\":\"environment_variables\"}},\"enums\":{},\"types\":{}}");
30
30
  config.parameterizationSchema = {
31
31
  strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"repository\",\"task\",\"tabs\",\"_count\",\"tasks\",\"environmentVars\",\"Repository.findUnique\",\"Repository.findUniqueOrThrow\",\"Repository.findFirst\",\"Repository.findFirstOrThrow\",\"Repository.findMany\",\"data\",\"Repository.createOne\",\"Repository.createMany\",\"Repository.createManyAndReturn\",\"Repository.updateOne\",\"Repository.updateMany\",\"Repository.updateManyAndReturn\",\"create\",\"update\",\"Repository.upsertOne\",\"Repository.deleteOne\",\"Repository.deleteMany\",\"having\",\"_min\",\"_max\",\"Repository.groupBy\",\"Repository.aggregate\",\"Task.findUnique\",\"Task.findUniqueOrThrow\",\"Task.findFirst\",\"Task.findFirstOrThrow\",\"Task.findMany\",\"Task.createOne\",\"Task.createMany\",\"Task.createManyAndReturn\",\"Task.updateOne\",\"Task.updateMany\",\"Task.updateManyAndReturn\",\"Task.upsertOne\",\"Task.deleteOne\",\"Task.deleteMany\",\"_avg\",\"_sum\",\"Task.groupBy\",\"Task.aggregate\",\"Tab.findUnique\",\"Tab.findUniqueOrThrow\",\"Tab.findFirst\",\"Tab.findFirstOrThrow\",\"Tab.findMany\",\"Tab.createOne\",\"Tab.createMany\",\"Tab.createManyAndReturn\",\"Tab.updateOne\",\"Tab.updateMany\",\"Tab.updateManyAndReturn\",\"Tab.upsertOne\",\"Tab.deleteOne\",\"Tab.deleteMany\",\"Tab.groupBy\",\"Tab.aggregate\",\"PlannerTab.findUnique\",\"PlannerTab.findUniqueOrThrow\",\"PlannerTab.findFirst\",\"PlannerTab.findFirstOrThrow\",\"PlannerTab.findMany\",\"PlannerTab.createOne\",\"PlannerTab.createMany\",\"PlannerTab.createManyAndReturn\",\"PlannerTab.updateOne\",\"PlannerTab.updateMany\",\"PlannerTab.updateManyAndReturn\",\"PlannerTab.upsertOne\",\"PlannerTab.deleteOne\",\"PlannerTab.deleteMany\",\"PlannerTab.groupBy\",\"PlannerTab.aggregate\",\"EnvironmentVariable.findUnique\",\"EnvironmentVariable.findUniqueOrThrow\",\"EnvironmentVariable.findFirst\",\"EnvironmentVariable.findFirstOrThrow\",\"EnvironmentVariable.findMany\",\"EnvironmentVariable.createOne\",\"EnvironmentVariable.createMany\",\"EnvironmentVariable.createManyAndReturn\",\"EnvironmentVariable.updateOne\",\"EnvironmentVariable.updateMany\",\"EnvironmentVariable.updateManyAndReturn\",\"EnvironmentVariable.upsertOne\",\"EnvironmentVariable.deleteOne\",\"EnvironmentVariable.deleteMany\",\"EnvironmentVariable.groupBy\",\"EnvironmentVariable.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"key\",\"value\",\"scope\",\"owner\",\"repo\",\"enabled\",\"createdAt\",\"updatedAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"contains\",\"startsWith\",\"endsWith\",\"tabId\",\"order\",\"status\",\"startedAt\",\"completedAt\",\"taskId\",\"todos\",\"title\",\"description\",\"branch\",\"baseBranch\",\"repoId\",\"worktreeStatus\",\"pullRequestUrl\",\"effort\",\"deletedAt\",\"cloneUrl\",\"every\",\"some\",\"none\",\"key_scope_owner_repo\",\"owner_repo\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"),
32
- graph: "mgIxUAsHAACpAQAgCAAAqgEAIGEAAKgBADBiAAAQABBjAACoAQAwZAEAAAABaAEAngEAIWkBAJ4BACFrQACgAQAhiAEBAJ4BACGNAQAAtgEAIAEAAAABACAVAwAAtAEAIAUAALUBACBhAACyAQAwYgAAAwAQYwAAsgEAMGQBAJ4BACFoAQCeAQAhaQEAngEAIWtAAKABACFsQACgAQAheQIAswEAIXoBAJ4BACF_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_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_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-AEAMJIBAAD5AQAgkwEAAPoBADCUAQAA-gEAMJUBAAD6AQAwlgEAAPoBADCXAQAA_AEAMJgBAAD9AQAwCxUAAOoBADAWAADvAQAwkAEAAOsBADCRAQAA7AEAMJIBAADtAQAgkwEAAO4BADCUAQAA7gEAMJUBAADuAQAwlgEAAO4BADCXAQAA8AEAMJgBAADxAQAwB2QBAAAAAWUBAAAAAWYBAAAAAWcBAAAAAWogAAAAAWtAAAAAAWxAAAAAAQIAAAAOACAVAAD1AQAgAwAAAA4AIBUAAPUBACAWAAD0AQAgAQ4AAIoCADAOAwAArwEAIGEAAKwBADBiAAAMABBjAACsAQAwZAEAAAABZQEAngEAIWYBAJ4BACFnAQCeAQAhaAEArQEAIWkBAK0BACFqIACuAQAha0AAoAEAIWxAAKABACGMAQAAqwEAIAIAAAAOACAOAAD0AQAgAgAAAPIBACAOAADzAQAgDGEAAPEBADBiAADyAQAQYwAA8QEAMGQBAJ4BACFlAQCeAQAhZgEAngEAIWcBAJ4BACFoAQCtAQAhaQEArQEAIWogAK4BACFrQACgAQAhbEAAoAEAIQxhAADxAQAwYgAA8gEAEGMAAPEBADBkAQCeAQAhZQEAngEAIWYBAJ4BACFnAQCeAQAhaAEArQEAIWkBAK0BACFqIACuAQAha0AAoAEAIWxAAKABACEHZAEAuwEAIWUBALsBACFmAQC7AQAhZwEAuwEAIWogALwBACFrQAC9AQAhbEAAvQEAIQdkAQC7AQAhZQEAuwEAIWYBALsBACFnAQC7AQAhaiAAvAEAIWtAAL0BACFsQAC9AQAhB2QBAAAAAWUBAAAAAWYBAAAAAWcBAAAAAWogAAAAAWtAAAAAAWxAAAAAARAFAADkAQAgZAEAAAABaAEAAAABaQEAAAABa0AAAAABbEAAAAABeQIAAAABegEAAAABfwEAAAABgAEBAAAAAYEBAQAAAAGCAQEAAAABhAEBAAAAAYUBAQAAAAGGAQIAAAABhwFAAAAAAQIAAAAFACAVAACBAgAgAwAAAAUAIBUAAIECACAWAACAAgAgAQ4AAIkCADAVAwAAtAEAIAUAALUBACBhAACyAQAwYgAAAwAQYwAAsgEAMGQBAAAAAWgBAJ4BACFpAQCeAQAha0AAoAEAIWxAAKABACF5AgCzAQAhegEAngEAIX8BAJ4BACGAAQEAngEAIYEBAQCeAQAhggEBAJ4BACGDAQEAngEAIYQBAQCeAQAhhQEBAK0BACGGAQIAswEAIYcBQAChAQAhAgAAAAUAIA4AAIACACACAAAA_gEAIA4AAP8BACATYQAA_QEAMGIAAP4BABBjAAD9AQAwZAEAngEAIWgBAJ4BACFpAQCeAQAha0AAoAEAIWxAAKABACF5AgCzAQAhegEAngEAIX8BAJ4BACGAAQEAngEAIYEBAQCeAQAhggEBAJ4BACGDAQEAngEAIYQBAQCeAQAhhQEBAK0BACGGAQIAswEAIYcBQAChAQAhE2EAAP0BADBiAAD-AQAQYwAA_QEAMGQBAJ4BACFoAQCeAQAhaQEAngEAIWtAAKABACFsQACgAQAheQIAswEAIXoBAJ4BACF_AQCeAQAhgAEBAJ4BACGBAQEAngEAIYIBAQCeAQAhgwEBAJ4BACGEAQEAngEAIYUBAQCtAQAhhgECALMBACGHAUAAoQEAIQ9kAQC7AQAhaAEAuwEAIWkBALsBACFrQAC9AQAhbEAAvQEAIXkCANQBACF6AQC7AQAhfwEAuwEAIYABAQC7AQAhgQEBALsBACGCAQEAuwEAIYQBAQC7AQAhhQEBAL4BACGGAQIA1AEAIYcBQADHAQAhEAUAANYBACBkAQC7AQAhaAEAuwEAIWkBALsBACFrQAC9AQAhbEAAvQEAIXkCANQBACF6AQC7AQAhfwEAuwEAIYABAQC7AQAhgQEBALsBACGCAQEAuwEAIYQBAQC7AQAhhQEBAL4BACGGAQIA1AEAIYcBQADHAQAhEAUAAOQBACBkAQAAAAFoAQAAAAFpAQAAAAFrQAAAAAFsQAAAAAF5AgAAAAF6AQAAAAF_AQAAAAGAAQEAAAABgQEBAAAAAYIBAQAAAAGEAQEAAAABhQEBAAAAAYYBAgAAAAGHAUAAAAABBBUAAPYBADCQAQAA9wEAMJIBAAD5AQAglgEAAPoBADAEFQAA6gEAMJABAADrAQAwkgEAAO0BACCWAQAA7gEAMAAAAgcAAIQCACAIAACFAgAgBgMAAIYCACAFAACIAgAgeQAAtwEAIIUBAAC3AQAghgEAALcBACCHAQAAtwEAIAAPZAEAAAABaAEAAAABaQEAAAABa0AAAAABbEAAAAABeQIAAAABegEAAAABfwEAAAABgAEBAAAAAYEBAQAAAAGCAQEAAAABhAEBAAAAAYUBAQAAAAGGAQIAAAABhwFAAAAAAQdkAQAAAAFlAQAAAAFmAQAAAAFnAQAAAAFqIAAAAAFrQAAAAAFsQAAAAAEGCAAAgwIAIGQBAAAAAWgBAAAAAWkBAAAAAWtAAAAAAYgBAQAAAAECAAAAAQAgFQAAiwIAIAhrQAAAAAFsQAAAAAF4AQAAAAF5AgAAAAF6AQAAAAF7QAAAAAF8QAAAAAF-AQAAAAEDAAAAEAAgFQAAiwIAIBYAAJACACAIAAAAEAAgCAAA6QEAIA4AAJACACBkAQC7AQAhaAEAuwEAIWkBALsBACFrQAC9AQAhiAEBALsBACEGCAAA6QEAIGQBALsBACFoAQC7AQAhaQEAuwEAIWtAAL0BACGIAQEAuwEAIREDAADjAQAgZAEAAAABaAEAAAABaQEAAAABa0AAAAABbEAAAAABeQIAAAABegEAAAABfwEAAAABgAEBAAAAAYEBAQAAAAGCAQEAAAABgwEBAAAAAYQBAQAAAAGFAQEAAAABhgECAAAAAYcBQAAAAAECAAAABQAgFQAAkQIAIAMAAAADACAVAACRAgAgFgAAlQIAIBMAAAADACADAADVAQAgDgAAlQIAIGQBALsBACFoAQC7AQAhaQEAuwEAIWtAAL0BACFsQAC9AQAheQIA1AEAIXoBALsBACF_AQC7AQAhgAEBALsBACGBAQEAuwEAIYIBAQC7AQAhgwEBALsBACGEAQEAuwEAIYUBAQC-AQAhhgECANQBACGHAUAAxwEAIREDAADVAQAgZAEAuwEAIWgBALsBACFpAQC7AQAha0AAvQEAIWxAAL0BACF5AgDUAQAhegEAuwEAIX8BALsBACGAAQEAuwEAIYEBAQC7AQAhggEBALsBACGDAQEAuwEAIYQBAQC7AQAhhQEBAL4BACGGAQIA1AEAIYcBQADHAQAhBgcAAIICACBkAQAAAAFoAQAAAAFpAQAAAAFrQAAAAAGIAQEAAAABAgAAAAEAIBUAAJYCACADAAAAEAAgFQAAlgIAIBYAAJoCACAIAAAAEAAgBwAA6AEAIA4AAJoCACBkAQC7AQAhaAEAuwEAIWkBALsBACFrQAC9AQAhiAEBALsBACEGBwAA6AEAIGQBALsBACFoAQC7AQAhaQEAuwEAIWtAAL0BACGIAQEAuwEAIQMGAAYHBgIIDwUDAwABBQoDBgAEAQQAAgEFCwABAxEBAgcSAAgTAAAAAAMGAAsbAAwcAA0AAAADBgALGwAMHAANAQMAAQEDAAEFBgASGwAVHAAWLQATLgAUAAAAAAAFBgASGwAVHAAWLQATLgAUAQQAAgEEAAIFBgAbGwAeHAAfLQAcLgAdAAAAAAAFBgAbGwAeHAAfLQAcLgAdAAAABQYAJRsAKBwAKS0AJi4AJwAAAAAABQYAJRsAKBwAKS0AJi4AJwEDeQEBA38BAwYALhsALxwAMAAAAAMGAC4bAC8cADAJAgEKFAELFgEMFwENGAEPGgEQHAcRHQgSHwETIQcUIgkXIwEYJAEZJQcdKAoeKQ4fKgIgKwIhLAIiLQIjLgIkMAIlMgcmMw8nNQIoNwcpOBAqOQIrOgIsOwcvPhEwPxcxQAMyQQMzQgM0QwM1RAM2RgM3SAc4SRg5SwM6TQc7Thk8TwM9UAM-UQc_VBpAVSBBVyFCWCFDWyFEXCFFXSFGXyFHYQdIYiJJZCFKZgdLZyNMaCFNaSFOagdPbSRQbipRbwVScAVTcQVUcgVVcwVWdQVXdwdYeCtZewVafQdbfixcgAEFXYEBBV6CAQdfhQEtYIYBMQ"
32
+ graph: "mgIxUAsHAACpAQAgCAAAqgEAIGEAAKgBADBiAAAQABBjAACoAQAwZAEAAAABaAEAngEAIWkBAJ4BACFrQACgAQAhiAEBAJ4BACGNAQAAtgEAIAEAAAABACAVAwAAtAEAIAUAALUBACBhAACyAQAwYgAAAwAQYwAAsgEAMGQBAJ4BACFoAQCeAQAhaQEAngEAIWtAAKABACFsQACgAQAheQIAnwEAIXoBAJ4BACF_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_AQC7AQAhgAEBALsBACGBAQEAuwEAIYIBAQC7AQAhgwEBALsBACGEAQEAuwEAIYUBAQC-AQAhhgECANQBACGHAUAAxwEAIQIAAAADACAOAAA2ACACAAAAAwAgDgAANgAgAwAAAAUAIBUAAC8AIBYAADQAIAEAAAAFACABAAAAAwAgCAYAAM8BACAbAADSAQAgHAAA0QEAIC0AANABACAuAADTAQAghQEAALcBACCGAQAAtwEAIIcBAAC3AQAgE2EAAKMBADBiAAA9ABBjAACjAQAwZAEAiAEAIWgBAIgBACFpAQCIAQAha0AAiwEAIWxAAIsBACF5AgCXAQAhegEAiAEAIX8BAIgBACGAAQEAiAEAIYEBAQCIAQAhggEBAIgBACGDAQEAiAEAIYQBAQCIAQAhhQEBAIkBACGGAQIApAEAIYcBQACYAQAhAwAAAAMAIAEAADwAMBoAAD0AIAMAAAADACABAAAEADACAAAFACABAAAACQAgAQAAAAkAIAMAAAAHACABAAAIADACAAAJACADAAAABwAgAQAACAAwAgAACQAgAwAAAAcAIAEAAAgAMAIAAAkAIAoEAADOAQAga0AAAAABbEAAAAABeAEAAAABeQIAAAABegEAAAABe0AAAAABfEAAAAABfQEAAAABfgEAAAABAQ4AAEUAIAlrQAAAAAFsQAAAAAF4AQAAAAF5AgAAAAF6AQAAAAF7QAAAAAF8QAAAAAF9AQAAAAF-AQAAAAEBDgAARwAwAQ4AAEcAMAoEAADNAQAga0AAvQEAIWxAAL0BACF4AQC7AQAheQIAxgEAIXoBALsBACF7QAC9AQAhfEAAxwEAIX0BALsBACF-AQC-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_AQCeAQAhgAEBAJ4BACGBAQEAngEAIYIBAQCeAQAhgwEBAJ4BACGEAQEAngEAIYUBAQCtAQAhhgECALMBACGHAUAAoQEAIQhtAgAAAAFuAgAAAAVvAgAAAAVwAgAAAAFxAgAAAAFyAgAAAAFzAgAAAAF0AgCSAQAhDAcAAKkBACAIAACqAQAgYQAAqAEAMGIAABAAEGMAAKgBADBkAQCeAQAhaAEAngEAIWkBAJ4BACFrQACgAQAhiAEBAJ4BACGOAQAAEAAgjwEAABAAIAOJAQAABwAgigEAAAcAIIsBAAAHACACaAEAAAABaQEAAAABAAAAAAGTAQEAAAABAZMBIAAAAAEBkwFAAAAAAQGTAQEAAAABBxUAAJYCACAWAACZAgAgkAEAAJcCACCRAQAAmAIAIJQBAAAQACCVAQAAEAAglgEAAAEAIAMVAACWAgAgkAEAAJcCACCWAQAAAQAgAAAAAAAFkwECAAAAAZkBAgAAAAGaAQIAAAABmwECAAAAAZwBAgAAAAEBkwFAAAAAAQAAAAAABRUAAJECACAWAACUAgAgkAEAAJICACCRAQAAkwIAIJYBAAAFACADFQAAkQIAIJABAACSAgAglgEAAAUAIAAAAAAABZMBAgAAAAGZAQIAAAABmgECAAAAAZsBAgAAAAGcAQIAAAABBRUAAIsCACAWAACPAgAgkAEAAIwCACCRAQAAjgIAIJYBAAABACALFQAA1wEAMBYAANwBADCQAQAA2AEAMJEBAADZAQAwkgEAANoBACCTAQAA2wEAMJQBAADbAQAwlQEAANsBADCWAQAA2wEAMJcBAADdAQAwmAEAAN4BADAIa0AAAAABbEAAAAABeAEAAAABeQIAAAABegEAAAABe0AAAAABfEAAAAABfgEAAAABAgAAAAkAIBUAAOIBACADAAAACQAgFQAA4gEAIBYAAOEBACABDgAAjQIAMA0EAACxAQAgYQAAsAEAMGIAAAcAEGMAALABADBrQACgAQAhbEAAoAEAIXgBAAAAAXkCAJ8BACF6AQCeAQAhe0AAoAEAIXxAAKEBACF9AQCeAQAhfgEArQEAIQIAAAAJACAOAADhAQAgAgAAAN8BACAOAADgAQAgDGEAAN4BADBiAADfAQAQYwAA3gEAMGtAAKABACFsQACgAQAheAEAngEAIXkCAJ8BACF6AQCeAQAhe0AAoAEAIXxAAKEBACF9AQCeAQAhfgEArQEAIQxhAADeAQAwYgAA3wEAEGMAAN4BADBrQACgAQAhbEAAoAEAIXgBAJ4BACF5AgCfAQAhegEAngEAIXtAAKABACF8QAChAQAhfQEAngEAIX4BAK0BACEIa0AAvQEAIWxAAL0BACF4AQC7AQAheQIAxgEAIXoBALsBACF7QAC9AQAhfEAAxwEAIX4BAL4BACEIa0AAvQEAIWxAAL0BACF4AQC7AQAheQIAxgEAIXoBALsBACF7QAC9AQAhfEAAxwEAIX4BAL4BACEIa0AAAAABbEAAAAABeAEAAAABeQIAAAABegEAAAABe0AAAAABfEAAAAABfgEAAAABAxUAAIsCACCQAQAAjAIAIJYBAAABACAEFQAA1wEAMJABAADYAQAwkgEAANoBACCWAQAA2wEAMAAAAAsVAAD2AQAwFgAA-wEAMJABAAD3AQAwkQEAAPgBADCSAQAA-QEAIJMBAAD6AQAwlAEAAPoBADCVAQAA-gEAMJYBAAD6AQAwlwEAAPwBADCYAQAA_QEAMAsVAADqAQAwFgAA7wEAMJABAADrAQAwkQEAAOwBADCSAQAA7QEAIJMBAADuAQAwlAEAAO4BADCVAQAA7gEAMJYBAADuAQAwlwEAAPABADCYAQAA8QEAMAdkAQAAAAFlAQAAAAFmAQAAAAFnAQAAAAFqIAAAAAFrQAAAAAFsQAAAAAECAAAADgAgFQAA9QEAIAMAAAAOACAVAAD1AQAgFgAA9AEAIAEOAACKAgAwDgMAAK8BACBhAACsAQAwYgAADAAQYwAArAEAMGQBAAAAAWUBAJ4BACFmAQCeAQAhZwEAngEAIWgBAK0BACFpAQCtAQAhaiAArgEAIWtAAKABACFsQACgAQAhjAEAAKsBACACAAAADgAgDgAA9AEAIAIAAADyAQAgDgAA8wEAIAxhAADxAQAwYgAA8gEAEGMAAPEBADBkAQCeAQAhZQEAngEAIWYBAJ4BACFnAQCeAQAhaAEArQEAIWkBAK0BACFqIACuAQAha0AAoAEAIWxAAKABACEMYQAA8QEAMGIAAPIBABBjAADxAQAwZAEAngEAIWUBAJ4BACFmAQCeAQAhZwEAngEAIWgBAK0BACFpAQCtAQAhaiAArgEAIWtAAKABACFsQACgAQAhB2QBALsBACFlAQC7AQAhZgEAuwEAIWcBALsBACFqIAC8AQAha0AAvQEAIWxAAL0BACEHZAEAuwEAIWUBALsBACFmAQC7AQAhZwEAuwEAIWogALwBACFrQAC9AQAhbEAAvQEAIQdkAQAAAAFlAQAAAAFmAQAAAAFnAQAAAAFqIAAAAAFrQAAAAAFsQAAAAAEQBQAA5AEAIGQBAAAAAWgBAAAAAWkBAAAAAWtAAAAAAWxAAAAAAXkCAAAAAXoBAAAAAX8BAAAAAYABAQAAAAGBAQEAAAABggEBAAAAAYQBAQAAAAGFAQEAAAABhgECAAAAAYcBQAAAAAECAAAABQAgFQAAgQIAIAMAAAAFACAVAACBAgAgFgAAgAIAIAEOAACJAgAwFQMAALQBACAFAAC1AQAgYQAAsgEAMGIAAAMAEGMAALIBADBkAQAAAAFoAQCeAQAhaQEAngEAIWtAAKABACFsQACgAQAheQIAnwEAIXoBAJ4BACF_AQCeAQAhgAEBAJ4BACGBAQEAngEAIYIBAQCeAQAhgwEBAJ4BACGEAQEAngEAIYUBAQCtAQAhhgECALMBACGHAUAAoQEAIQIAAAAFACAOAACAAgAgAgAAAP4BACAOAAD_AQAgE2EAAP0BADBiAAD-AQAQYwAA_QEAMGQBAJ4BACFoAQCeAQAhaQEAngEAIWtAAKABACFsQACgAQAheQIAnwEAIXoBAJ4BACF_AQCeAQAhgAEBAJ4BACGBAQEAngEAIYIBAQCeAQAhgwEBAJ4BACGEAQEAngEAIYUBAQCtAQAhhgECALMBACGHAUAAoQEAIRNhAAD9AQAwYgAA_gEAEGMAAP0BADBkAQCeAQAhaAEAngEAIWkBAJ4BACFrQACgAQAhbEAAoAEAIXkCAJ8BACF6AQCeAQAhfwEAngEAIYABAQCeAQAhgQEBAJ4BACGCAQEAngEAIYMBAQCeAQAhhAEBAJ4BACGFAQEArQEAIYYBAgCzAQAhhwFAAKEBACEPZAEAuwEAIWgBALsBACFpAQC7AQAha0AAvQEAIWxAAL0BACF5AgDGAQAhegEAuwEAIX8BALsBACGAAQEAuwEAIYEBAQC7AQAhggEBALsBACGEAQEAuwEAIYUBAQC-AQAhhgECANQBACGHAUAAxwEAIRAFAADWAQAgZAEAuwEAIWgBALsBACFpAQC7AQAha0AAvQEAIWxAAL0BACF5AgDGAQAhegEAuwEAIX8BALsBACGAAQEAuwEAIYEBAQC7AQAhggEBALsBACGEAQEAuwEAIYUBAQC-AQAhhgECANQBACGHAUAAxwEAIRAFAADkAQAgZAEAAAABaAEAAAABaQEAAAABa0AAAAABbEAAAAABeQIAAAABegEAAAABfwEAAAABgAEBAAAAAYEBAQAAAAGCAQEAAAABhAEBAAAAAYUBAQAAAAGGAQIAAAABhwFAAAAAAQQVAAD2AQAwkAEAAPcBADCSAQAA-QEAIJYBAAD6AQAwBBUAAOoBADCQAQAA6wEAMJIBAADtAQAglgEAAO4BADAAAAIHAACEAgAgCAAAhQIAIAUDAACGAgAgBQAAiAIAIIUBAAC3AQAghgEAALcBACCHAQAAtwEAIAAPZAEAAAABaAEAAAABaQEAAAABa0AAAAABbEAAAAABeQIAAAABegEAAAABfwEAAAABgAEBAAAAAYEBAQAAAAGCAQEAAAABhAEBAAAAAYUBAQAAAAGGAQIAAAABhwFAAAAAAQdkAQAAAAFlAQAAAAFmAQAAAAFnAQAAAAFqIAAAAAFrQAAAAAFsQAAAAAEGCAAAgwIAIGQBAAAAAWgBAAAAAWkBAAAAAWtAAAAAAYgBAQAAAAECAAAAAQAgFQAAiwIAIAhrQAAAAAFsQAAAAAF4AQAAAAF5AgAAAAF6AQAAAAF7QAAAAAF8QAAAAAF-AQAAAAEDAAAAEAAgFQAAiwIAIBYAAJACACAIAAAAEAAgCAAA6QEAIA4AAJACACBkAQC7AQAhaAEAuwEAIWkBALsBACFrQAC9AQAhiAEBALsBACEGCAAA6QEAIGQBALsBACFoAQC7AQAhaQEAuwEAIWtAAL0BACGIAQEAuwEAIREDAADjAQAgZAEAAAABaAEAAAABaQEAAAABa0AAAAABbEAAAAABeQIAAAABegEAAAABfwEAAAABgAEBAAAAAYEBAQAAAAGCAQEAAAABgwEBAAAAAYQBAQAAAAGFAQEAAAABhgECAAAAAYcBQAAAAAECAAAABQAgFQAAkQIAIAMAAAADACAVAACRAgAgFgAAlQIAIBMAAAADACADAADVAQAgDgAAlQIAIGQBALsBACFoAQC7AQAhaQEAuwEAIWtAAL0BACFsQAC9AQAheQIAxgEAIXoBALsBACF_AQC7AQAhgAEBALsBACGBAQEAuwEAIYIBAQC7AQAhgwEBALsBACGEAQEAuwEAIYUBAQC-AQAhhgECANQBACGHAUAAxwEAIREDAADVAQAgZAEAuwEAIWgBALsBACFpAQC7AQAha0AAvQEAIWxAAL0BACF5AgDGAQAhegEAuwEAIX8BALsBACGAAQEAuwEAIYEBAQC7AQAhggEBALsBACGDAQEAuwEAIYQBAQC7AQAhhQEBAL4BACGGAQIA1AEAIYcBQADHAQAhBgcAAIICACBkAQAAAAFoAQAAAAFpAQAAAAFrQAAAAAGIAQEAAAABAgAAAAEAIBUAAJYCACADAAAAEAAgFQAAlgIAIBYAAJoCACAIAAAAEAAgBwAA6AEAIA4AAJoCACBkAQC7AQAhaAEAuwEAIWkBALsBACFrQAC9AQAhiAEBALsBACEGBwAA6AEAIGQBALsBACFoAQC7AQAhaQEAuwEAIWtAAL0BACGIAQEAuwEAIQMGAAYHBgIIDwUDAwABBQoDBgAEAQQAAgEFCwABAxEBAgcSAAgTAAAAAAMGAAsbAAwcAA0AAAADBgALGwAMHAANAQMAAQEDAAEFBgASGwAVHAAWLQATLgAUAAAAAAAFBgASGwAVHAAWLQATLgAUAQQAAgEEAAIFBgAbGwAeHAAfLQAcLgAdAAAAAAAFBgAbGwAeHAAfLQAcLgAdAAAABQYAJRsAKBwAKS0AJi4AJwAAAAAABQYAJRsAKBwAKS0AJi4AJwEDeQEBA38BAwYALhsALxwAMAAAAAMGAC4bAC8cADAJAgEKFAELFgEMFwENGAEPGgEQHAcRHQgSHwETIQcUIgkXIwEYJAEZJQcdKAoeKQ4fKgIgKwIhLAIiLQIjLgIkMAIlMgcmMw8nNQIoNwcpOBAqOQIrOgIsOwcvPhEwPxcxQAMyQQMzQgM0QwM1RAM2RgM3SAc4SRg5SwM6TQc7Thk8TwM9UAM-UQc_VBpAVSBBVyFCWCFDWyFEXCFFXSFGXyFHYQdIYiJJZCFKZgdLZyNMaCFNaSFOagdPbSRQbipRbwVScAVTcQVUcgVVcwVWdQVXdwdYeCtZewVafQdbfixcgAEFXYEBBV6CAQdfhQEtYIYBMQ"
33
33
  };
34
34
  async function decodeBase64AsWasm(wasmBase64) {
35
35
  const { Buffer } = await import('node:buffer');
@@ -420,13 +420,6 @@ export type TabUncheckedUpdateManyWithoutTaskNestedInput = {
420
420
  updateMany?: Prisma.TabUpdateManyWithWhereWithoutTaskInput | Prisma.TabUpdateManyWithWhereWithoutTaskInput[];
421
421
  deleteMany?: Prisma.TabScalarWhereInput | Prisma.TabScalarWhereInput[];
422
422
  };
423
- export type IntFieldUpdateOperationsInput = {
424
- set?: number;
425
- increment?: number;
426
- decrement?: number;
427
- multiply?: number;
428
- divide?: number;
429
- };
430
423
  export type TabCreateWithoutTaskInput = {
431
424
  tabId: string;
432
425
  order: number;