@grackle-ai/server 0.72.0 → 0.72.2

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 (62) hide show
  1. package/dist/auto-reconnect.js +3 -3
  2. package/dist/auto-reconnect.js.map +1 -1
  3. package/dist/credential-bundle.d.ts +12 -0
  4. package/dist/credential-bundle.d.ts.map +1 -0
  5. package/dist/credential-bundle.js +183 -0
  6. package/dist/credential-bundle.js.map +1 -0
  7. package/dist/credential-providers.d.ts +0 -10
  8. package/dist/credential-providers.d.ts.map +1 -1
  9. package/dist/credential-providers.js +5 -177
  10. package/dist/credential-providers.js.map +1 -1
  11. package/dist/db-seed.d.ts +16 -0
  12. package/dist/db-seed.d.ts.map +1 -0
  13. package/dist/db-seed.js +176 -0
  14. package/dist/db-seed.js.map +1 -0
  15. package/dist/db.d.ts.map +1 -1
  16. package/dist/db.js +1 -165
  17. package/dist/db.js.map +1 -1
  18. package/dist/finding-store.d.ts +0 -2
  19. package/dist/finding-store.d.ts.map +1 -1
  20. package/dist/finding-store.js +0 -23
  21. package/dist/finding-store.js.map +1 -1
  22. package/dist/grpc-service.d.ts.map +1 -1
  23. package/dist/grpc-service.js +10 -7
  24. package/dist/grpc-service.js.map +1 -1
  25. package/dist/index.js +20 -12
  26. package/dist/index.js.map +1 -1
  27. package/dist/orchestrator-context.js +27 -1
  28. package/dist/orchestrator-context.js.map +1 -1
  29. package/dist/task-store.d.ts +24 -1
  30. package/dist/task-store.d.ts.map +1 -1
  31. package/dist/task-store.js +43 -20
  32. package/dist/task-store.js.map +1 -1
  33. package/dist/{token-broker.d.ts → token-push.d.ts} +3 -27
  34. package/dist/token-push.d.ts.map +1 -0
  35. package/dist/{token-broker.js → token-push.js} +25 -71
  36. package/dist/token-push.js.map +1 -0
  37. package/dist/token-store.d.ts +25 -0
  38. package/dist/token-store.d.ts.map +1 -0
  39. package/dist/token-store.js +58 -0
  40. package/dist/token-store.js.map +1 -0
  41. package/dist/ws-bridge.d.ts.map +1 -1
  42. package/dist/ws-bridge.js +10 -7
  43. package/dist/ws-bridge.js.map +1 -1
  44. package/package.json +11 -7
  45. package/dist/adapters/codespace.d.ts +0 -40
  46. package/dist/adapters/codespace.d.ts.map +0 -1
  47. package/dist/adapters/codespace.js +0 -212
  48. package/dist/adapters/codespace.js.map +0 -1
  49. package/dist/adapters/docker.d.ts +0 -39
  50. package/dist/adapters/docker.d.ts.map +0 -1
  51. package/dist/adapters/docker.js +0 -366
  52. package/dist/adapters/docker.js.map +0 -1
  53. package/dist/adapters/local.d.ts +0 -15
  54. package/dist/adapters/local.d.ts.map +0 -1
  55. package/dist/adapters/local.js +0 -57
  56. package/dist/adapters/local.js.map +0 -1
  57. package/dist/adapters/ssh.d.ts +0 -45
  58. package/dist/adapters/ssh.d.ts.map +0 -1
  59. package/dist/adapters/ssh.js +0 -214
  60. package/dist/adapters/ssh.js.map +0 -1
  61. package/dist/token-broker.d.ts.map +0 -1
  62. package/dist/token-broker.js.map +0 -1
@@ -0,0 +1,176 @@
1
+ import { SYSTEM_PERSONA_ID, ROOT_TASK_ID } from "@grackle-ai/common";
2
+ /**
3
+ * Seed the database with application-level defaults.
4
+ * Call once at startup after {@link initDatabase} has applied schema migrations.
5
+ *
6
+ * @param conn - The raw better-sqlite3 connection to seed.
7
+ */
8
+ export function seedDatabase(conn) {
9
+ // Capture persona count BEFORE any seed inserts so we can distinguish
10
+ // fresh installs from upgrades in the onboarding backfill below.
11
+ const personaCount = conn
12
+ .prepare("SELECT COUNT(*) as cnt FROM personas")
13
+ .get();
14
+ // Seed: create default "Claude Code" persona if no personas exist
15
+ if (personaCount.cnt === 0) {
16
+ conn.exec(`
17
+ INSERT INTO personas (id, name, description, system_prompt, runtime, model, max_turns)
18
+ VALUES (
19
+ 'claude-code',
20
+ 'Claude Code',
21
+ 'Default agent persona using Claude Code runtime',
22
+ '',
23
+ 'claude-code',
24
+ 'sonnet',
25
+ 0
26
+ )
27
+ `);
28
+ conn.exec(`
29
+ INSERT OR IGNORE INTO settings (key, value)
30
+ VALUES ('default_persona_id', 'claude-code')
31
+ `);
32
+ }
33
+ // Migration: update the seed persona with the completion checklist and clearer name.
34
+ // Guards: only run when the system_prompt is still empty and name is still "Claude Code"
35
+ // so we don't overwrite user customizations.
36
+ conn.exec(`
37
+ UPDATE personas SET system_prompt = 'When you have finished implementing the task, you MUST complete ALL steps below in order. Do NOT stop early or go to "waiting for input" until every step is done.
38
+
39
+ ### Phase 1: Implement & Test
40
+ 1. **Implement** the task requirements.
41
+ 2. **Write tests**: Write unit tests, integration tests, or E2E specs as appropriate. Every implementation MUST include tests unless the change is purely cosmetic or untestable (state why if skipping).
42
+ 3. **Build**: Run the repository''s build command and fix any errors.
43
+ 4. **Run tests**: Run relevant tests and ensure they pass.
44
+ 5. **Manual test**: If the change affects UI, visually verify. If it affects CLI or API, run the commands manually. State explicitly if skipping and why.
45
+
46
+ ### Phase 2: Create PR
47
+ 6. **Sync with main**: Fetch and merge the main branch. If merge conflicts arise, resolve them, stage, and commit the merge. NEVER rebase.
48
+ 7. **Rebuild after merge**: If the merge brought in new commits, rebuild to catch integration conflicts.
49
+ 8. **Commit**: Stage your changed files and create a descriptive git commit. Use a conventional commit message (e.g., fix: ..., feat: ...).
50
+ 9. **Push**: Push your branch to the remote.
51
+ 10. **Create PR**: Create a pull request that links back to the issue (e.g., "Closes #ISSUE").
52
+
53
+ ### Phase 3: PR Readiness (you MUST complete this — do NOT skip)
54
+ After creating the PR, you must ensure it is ready to merge.
55
+
56
+ 11. **Check for merge conflicts**: Verify the PR has no merge conflicts. If it does, fetch and merge the main branch, resolve conflicts, rebuild, commit, and push.
57
+ 12. **Wait for CI**: Wait for all CI checks to complete. If any check fails, read the logs, fix the issue, commit, push, and repeat.
58
+ 13. **Address code review comments**: Check for automated code review comments. For each unresolved comment: read the suggestion, fix the code or dismiss with an explanation, reply to the comment, and resolve the thread. After fixing, commit, push, and check again. Repeat until all review threads are resolved.
59
+ 14. **Post finding**: Use finding_post to summarize what you did and any key decisions.
60
+
61
+ IMPORTANT: The PR is the deliverable, but a PR with failing CI or unresolved review comments is NOT done. You MUST complete Phase 3. Do NOT go to "waiting for input" until CI is green AND all review threads are resolved.'
62
+ WHERE id = 'claude-code' AND system_prompt = '' AND name = 'Claude Code'
63
+ `);
64
+ conn.exec(`
65
+ UPDATE personas
66
+ SET name = 'Software Engineer',
67
+ description = 'Default agent persona for software engineering tasks'
68
+ WHERE id = 'claude-code'
69
+ AND name = 'Claude Code'
70
+ AND NOT EXISTS (
71
+ SELECT 1 FROM personas
72
+ WHERE name = 'Software Engineer'
73
+ AND id != 'claude-code'
74
+ )
75
+ `);
76
+ // Seed: ensure a System persona exists with the canonical SYSTEM_PERSONA_ID.
77
+ // Copies runtime + model from the seed persona so the FRE choice propagates.
78
+ // Handles name collisions: if a user-created persona named "System" already
79
+ // exists under a different id, reassign it to SYSTEM_PERSONA_ID.
80
+ {
81
+ const existingSystemById = conn
82
+ .prepare("SELECT id FROM personas WHERE id = ?")
83
+ .get(SYSTEM_PERSONA_ID);
84
+ if (!existingSystemById) {
85
+ const seedRow = conn
86
+ .prepare("SELECT runtime, model FROM personas WHERE id = 'claude-code'")
87
+ .get();
88
+ const systemRuntime = seedRow?.runtime || "claude-code";
89
+ const systemModel = seedRow?.model || "sonnet";
90
+ const existingSystemByName = conn
91
+ .prepare("SELECT id FROM personas WHERE name = 'System'")
92
+ .get();
93
+ if (existingSystemByName && existingSystemByName.id !== SYSTEM_PERSONA_ID) {
94
+ // Reassign existing "System" persona to the canonical id and update
95
+ // all stored references atomically so a crash can't leave dangling refs.
96
+ const reassignSystemPersona = conn.transaction((oldId) => {
97
+ conn.prepare("UPDATE personas SET id = ? WHERE id = ?").run(SYSTEM_PERSONA_ID, oldId);
98
+ conn.prepare("UPDATE settings SET value = ? WHERE key = 'default_persona_id' AND value = ?").run(SYSTEM_PERSONA_ID, oldId);
99
+ conn.prepare("UPDATE sessions SET persona_id = ? WHERE persona_id = ?").run(SYSTEM_PERSONA_ID, oldId);
100
+ conn.prepare("UPDATE tasks SET default_persona_id = ? WHERE default_persona_id = ?").run(SYSTEM_PERSONA_ID, oldId);
101
+ conn.prepare("UPDATE workspaces SET default_persona_id = ? WHERE default_persona_id = ?").run(SYSTEM_PERSONA_ID, oldId);
102
+ });
103
+ reassignSystemPersona(existingSystemByName.id);
104
+ }
105
+ else if (!existingSystemByName) {
106
+ conn
107
+ .prepare(`
108
+ INSERT INTO personas (id, name, description, system_prompt, runtime, model, max_turns, type)
109
+ VALUES (?, 'System', 'Central orchestrator persona', ?, ?, ?, 0, 'agent')
110
+ `)
111
+ .run(SYSTEM_PERSONA_ID, [
112
+ "You are the System — the central orchestrator for Grackle, an agent kernel that manages AI coding agents.",
113
+ "",
114
+ "You help the user coordinate work across their development environments. You can:",
115
+ "- Answer questions and have conversations",
116
+ "- Help plan and break down work into tasks",
117
+ "- Create and manage workspaces (project containers tied to environments)",
118
+ "- Create, assign, and monitor tasks executed by AI coding agents",
119
+ "- Share and query findings (knowledge shared between agents)",
120
+ "",
121
+ "When the user describes work to be done:",
122
+ "1. Help them think through the approach",
123
+ "2. Break complex work into discrete, well-scoped tasks",
124
+ "3. Create tasks with clear titles and descriptions that an AI agent can execute independently",
125
+ "4. Start tasks on appropriate environments",
126
+ "5. Monitor progress and report results",
127
+ "",
128
+ "You are always available for conversation. Think of yourself as the user's AI project manager — you coordinate the agents, track progress, and ensure work is organized effectively.",
129
+ "",
130
+ "Keep responses concise and action-oriented. When the user wants something done, bias toward creating and starting tasks rather than lengthy discussion.",
131
+ ].join("\n"), systemRuntime, systemModel);
132
+ }
133
+ }
134
+ }
135
+ // Seed: create root task (well-known "system" task) if it doesn't exist.
136
+ conn
137
+ .prepare(`
138
+ INSERT OR IGNORE INTO tasks (id, workspace_id, title, description, status, branch, parent_task_id, depth, can_decompose, default_persona_id)
139
+ VALUES (?, NULL, 'System', '', 'not_started', 'system', '', 0, 1, ?)
140
+ `)
141
+ .run(ROOT_TASK_ID, SYSTEM_PERSONA_ID);
142
+ // Backfill: ensure default_persona_id setting exists for upgrades.
143
+ // Existing installations may have personas but no default_persona_id setting,
144
+ // which would cause resolvePersona() to fail when no persona is explicitly specified.
145
+ const existingDefault = conn
146
+ .prepare("SELECT value FROM settings WHERE key = 'default_persona_id'")
147
+ .get();
148
+ if (!existingDefault) {
149
+ // Prefer the seed persona 'claude-code' if it exists; otherwise fall back
150
+ // to the first persona alphabetically.
151
+ const fallback = (conn.prepare("SELECT id FROM personas WHERE id = 'claude-code'").get() ??
152
+ conn.prepare("SELECT id FROM personas ORDER BY name LIMIT 1").get());
153
+ if (fallback) {
154
+ conn
155
+ .prepare("INSERT OR IGNORE INTO settings (key, value) VALUES ('default_persona_id', ?)")
156
+ .run(fallback.id);
157
+ }
158
+ }
159
+ // Backfill: ensure onboarding_completed setting exists.
160
+ // Fresh installs (no pre-existing environments or personas) get "false" to trigger
161
+ // the setup wizard. Upgrades (pre-existing data) get "true" to skip it.
162
+ // personaCount was captured before the seed insert, so it reflects user-created personas.
163
+ const existingOnboarding = conn
164
+ .prepare("SELECT value FROM settings WHERE key = 'onboarding_completed'")
165
+ .get();
166
+ if (!existingOnboarding) {
167
+ const environmentCount = conn
168
+ .prepare("SELECT COUNT(*) as cnt FROM environments")
169
+ .get();
170
+ const isFreshInstall = environmentCount.cnt === 0 && personaCount.cnt === 0;
171
+ conn
172
+ .prepare("INSERT OR IGNORE INTO settings (key, value) VALUES ('onboarding_completed', ?)")
173
+ .run(isFreshInstall ? "false" : "true");
174
+ }
175
+ }
176
+ //# sourceMappingURL=db-seed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-seed.js","sourceRoot":"","sources":["../src/db-seed.ts"],"names":[],"mappings":"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"}
package/dist/db.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAKxE,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,iFAAiF;AACjF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,+CAA+C;AAC/C,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,cAAc,EAAE,CAAC;CACnC;AAED,yFAAyF;AACzF,QAAA,IAAI,MAAM,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,GAAG,SAAS,CAAC;AAEtD;;;;;GAKG;AACH,QAAA,IAAI,EAAE,EAAG,qBAAqB,CAAC,OAAO,MAAM,CAAC,GAAG;IAC9C,OAAO,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,CAAC;CACxC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAsElD;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,cAAc,CAAC,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,GAAG,kBAAkB,CAqoB/F;AAED,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,OAAO,EAAE,EAAE,IAAI,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAKxE,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,iFAAiF;AACjF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,+CAA+C;AAC/C,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,cAAc,EAAE,CAAC;CACnC;AAED,yFAAyF;AACzF,QAAA,IAAI,MAAM,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,GAAG,SAAS,CAAC;AAEtD;;;;;GAKG;AACH,QAAA,IAAI,EAAE,EAAG,qBAAqB,CAAC,OAAO,MAAM,CAAC,GAAG;IAC9C,OAAO,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,CAAC;CACxC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAsElD;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,cAAc,CAAC,EAAE,YAAY,CAAC,OAAO,QAAQ,CAAC,GAAG,kBAAkB,CAkd/F;AAED,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,OAAO,EAAE,EAAE,IAAI,OAAO,EAAE,CAAC"}
package/dist/db.js CHANGED
@@ -2,7 +2,7 @@ import Database from "better-sqlite3";
2
2
  import { drizzle } from "drizzle-orm/better-sqlite3";
3
3
  import { join } from "node:path";
4
4
  import { mkdirSync } from "node:fs";
5
- import { DB_FILENAME, SYSTEM_PERSONA_ID, ROOT_TASK_ID } from "@grackle-ai/common";
5
+ import { DB_FILENAME } from "@grackle-ai/common";
6
6
  import { grackleHome } from "./paths.js";
7
7
  import * as schema from "./schema.js";
8
8
  /** Raw better-sqlite3 instance. Available after {@link openDatabase} has been called. */
@@ -471,170 +471,6 @@ export function initDatabase(sqliteOverride) {
471
471
  }
472
472
  // Migration: add index on workspaces.environment_id for efficient lookup
473
473
  conn.exec("CREATE INDEX IF NOT EXISTS idx_workspaces_environment_id ON workspaces(environment_id)");
474
- // Seed: create default "Claude Code" persona if no personas exist
475
- const personaCount = conn
476
- .prepare("SELECT COUNT(*) as cnt FROM personas")
477
- .get();
478
- if (personaCount.cnt === 0) {
479
- conn.exec(`
480
- INSERT INTO personas (id, name, description, system_prompt, runtime, model, max_turns)
481
- VALUES (
482
- 'claude-code',
483
- 'Claude Code',
484
- 'Default agent persona using Claude Code runtime',
485
- '',
486
- 'claude-code',
487
- 'sonnet',
488
- 0
489
- )
490
- `);
491
- conn.exec(`
492
- INSERT OR IGNORE INTO settings (key, value)
493
- VALUES ('default_persona_id', 'claude-code')
494
- `);
495
- }
496
- // Migration: update the seed persona with the completion checklist and clearer name.
497
- // Guards: only run when the system_prompt is still empty and name is still "Claude Code"
498
- // so we don't overwrite user customizations.
499
- conn.exec(`
500
- UPDATE personas SET system_prompt = 'When you have finished implementing the task, you MUST complete ALL steps below in order. Do NOT stop early or go to "waiting for input" until every step is done.
501
-
502
- ### Phase 1: Implement & Test
503
- 1. **Implement** the task requirements.
504
- 2. **Write tests**: Write unit tests, integration tests, or E2E specs as appropriate. Every implementation MUST include tests unless the change is purely cosmetic or untestable (state why if skipping).
505
- 3. **Build**: Run the repository''s build command and fix any errors.
506
- 4. **Run tests**: Run relevant tests and ensure they pass.
507
- 5. **Manual test**: If the change affects UI, visually verify. If it affects CLI or API, run the commands manually. State explicitly if skipping and why.
508
-
509
- ### Phase 2: Create PR
510
- 6. **Sync with main**: Fetch and merge the main branch. If merge conflicts arise, resolve them, stage, and commit the merge. NEVER rebase.
511
- 7. **Rebuild after merge**: If the merge brought in new commits, rebuild to catch integration conflicts.
512
- 8. **Commit**: Stage your changed files and create a descriptive git commit. Use a conventional commit message (e.g., fix: ..., feat: ...).
513
- 9. **Push**: Push your branch to the remote.
514
- 10. **Create PR**: Create a pull request that links back to the issue (e.g., "Closes #ISSUE").
515
-
516
- ### Phase 3: PR Readiness (you MUST complete this — do NOT skip)
517
- After creating the PR, you must ensure it is ready to merge.
518
-
519
- 11. **Check for merge conflicts**: Verify the PR has no merge conflicts. If it does, fetch and merge the main branch, resolve conflicts, rebuild, commit, and push.
520
- 12. **Wait for CI**: Wait for all CI checks to complete. If any check fails, read the logs, fix the issue, commit, push, and repeat.
521
- 13. **Address code review comments**: Check for automated code review comments. For each unresolved comment: read the suggestion, fix the code or dismiss with an explanation, reply to the comment, and resolve the thread. After fixing, commit, push, and check again. Repeat until all review threads are resolved.
522
- 14. **Post finding**: Use finding_post to summarize what you did and any key decisions.
523
-
524
- IMPORTANT: The PR is the deliverable, but a PR with failing CI or unresolved review comments is NOT done. You MUST complete Phase 3. Do NOT go to "waiting for input" until CI is green AND all review threads are resolved.'
525
- WHERE id = 'claude-code' AND system_prompt = '' AND name = 'Claude Code'
526
- `);
527
- conn.exec(`
528
- UPDATE personas
529
- SET name = 'Software Engineer',
530
- description = 'Default agent persona for software engineering tasks'
531
- WHERE id = 'claude-code'
532
- AND name = 'Claude Code'
533
- AND NOT EXISTS (
534
- SELECT 1 FROM personas
535
- WHERE name = 'Software Engineer'
536
- AND id != 'claude-code'
537
- )
538
- `);
539
- // Seed: ensure a System persona exists with the canonical SYSTEM_PERSONA_ID.
540
- // Copies runtime + model from the seed persona so the FRE choice propagates.
541
- // Handles name collisions: if a user-created persona named "System" already
542
- // exists under a different id, reassign it to SYSTEM_PERSONA_ID.
543
- {
544
- const existingSystemById = conn
545
- .prepare("SELECT id FROM personas WHERE id = ?")
546
- .get(SYSTEM_PERSONA_ID);
547
- if (!existingSystemById) {
548
- const seedRow = conn
549
- .prepare("SELECT runtime, model FROM personas WHERE id = 'claude-code'")
550
- .get();
551
- const systemRuntime = seedRow?.runtime || "claude-code";
552
- const systemModel = seedRow?.model || "sonnet";
553
- const existingSystemByName = conn
554
- .prepare("SELECT id FROM personas WHERE name = 'System'")
555
- .get();
556
- if (existingSystemByName && existingSystemByName.id !== SYSTEM_PERSONA_ID) {
557
- // Reassign existing "System" persona to the canonical id and update
558
- // all stored references atomically so a crash can't leave dangling refs.
559
- const reassignSystemPersona = conn.transaction((oldId) => {
560
- conn.prepare("UPDATE personas SET id = ? WHERE id = ?").run(SYSTEM_PERSONA_ID, oldId);
561
- conn.prepare("UPDATE settings SET value = ? WHERE key = 'default_persona_id' AND value = ?").run(SYSTEM_PERSONA_ID, oldId);
562
- conn.prepare("UPDATE sessions SET persona_id = ? WHERE persona_id = ?").run(SYSTEM_PERSONA_ID, oldId);
563
- conn.prepare("UPDATE tasks SET default_persona_id = ? WHERE default_persona_id = ?").run(SYSTEM_PERSONA_ID, oldId);
564
- conn.prepare("UPDATE workspaces SET default_persona_id = ? WHERE default_persona_id = ?").run(SYSTEM_PERSONA_ID, oldId);
565
- });
566
- reassignSystemPersona(existingSystemByName.id);
567
- }
568
- else if (!existingSystemByName) {
569
- conn
570
- .prepare(`
571
- INSERT INTO personas (id, name, description, system_prompt, runtime, model, max_turns, type)
572
- VALUES (?, 'System', 'Central orchestrator persona', ?, ?, ?, 0, 'agent')
573
- `)
574
- .run(SYSTEM_PERSONA_ID, [
575
- "You are the System — the central orchestrator for Grackle, an agent kernel that manages AI coding agents.",
576
- "",
577
- "You help the user coordinate work across their development environments. You can:",
578
- "- Answer questions and have conversations",
579
- "- Help plan and break down work into tasks",
580
- "- Create and manage workspaces (project containers tied to environments)",
581
- "- Create, assign, and monitor tasks executed by AI coding agents",
582
- "- Share and query findings (knowledge shared between agents)",
583
- "",
584
- "When the user describes work to be done:",
585
- "1. Help them think through the approach",
586
- "2. Break complex work into discrete, well-scoped tasks",
587
- "3. Create tasks with clear titles and descriptions that an AI agent can execute independently",
588
- "4. Start tasks on appropriate environments",
589
- "5. Monitor progress and report results",
590
- "",
591
- "You are always available for conversation. Think of yourself as the user's AI project manager — you coordinate the agents, track progress, and ensure work is organized effectively.",
592
- "",
593
- "Keep responses concise and action-oriented. When the user wants something done, bias toward creating and starting tasks rather than lengthy discussion.",
594
- ].join("\n"), systemRuntime, systemModel);
595
- }
596
- }
597
- }
598
- // Seed: create root task (well-known "system" task) if it doesn't exist.
599
- conn
600
- .prepare(`
601
- INSERT OR IGNORE INTO tasks (id, workspace_id, title, description, status, branch, parent_task_id, depth, can_decompose, default_persona_id)
602
- VALUES (?, NULL, 'System', '', 'not_started', 'system', '', 0, 1, ?)
603
- `)
604
- .run(ROOT_TASK_ID, SYSTEM_PERSONA_ID);
605
- // Backfill: ensure default_persona_id setting exists for upgrades.
606
- // Existing installations may have personas but no default_persona_id setting,
607
- // which would cause resolvePersona() to fail when no persona is explicitly specified.
608
- const existingDefault = conn
609
- .prepare("SELECT value FROM settings WHERE key = 'default_persona_id'")
610
- .get();
611
- if (!existingDefault) {
612
- // Prefer the seed persona 'claude-code' if it exists; otherwise fall back
613
- // to the first persona alphabetically.
614
- const fallback = (conn.prepare("SELECT id FROM personas WHERE id = 'claude-code'").get() ??
615
- conn.prepare("SELECT id FROM personas ORDER BY name LIMIT 1").get());
616
- if (fallback) {
617
- conn
618
- .prepare("INSERT OR IGNORE INTO settings (key, value) VALUES ('default_persona_id', ?)")
619
- .run(fallback.id);
620
- }
621
- }
622
- // Backfill: ensure onboarding_completed setting exists.
623
- // Fresh installs (no pre-existing environments or personas) get "false" to trigger
624
- // the setup wizard. Upgrades (pre-existing data) get "true" to skip it.
625
- // personaCount was captured before the seed insert, so it reflects user-created personas.
626
- const existingOnboarding = conn
627
- .prepare("SELECT value FROM settings WHERE key = 'onboarding_completed'")
628
- .get();
629
- if (!existingOnboarding) {
630
- const environmentCount = conn
631
- .prepare("SELECT COUNT(*) as cnt FROM environments")
632
- .get();
633
- const isFreshInstall = environmentCount.cnt === 0 && personaCount.cnt === 0;
634
- conn
635
- .prepare("INSERT OR IGNORE INTO settings (key, value) VALUES ('onboarding_completed', ?)")
636
- .run(isFreshInstall ? "false" : "true");
637
- }
638
474
  return { migrationErrors };
639
475
  }
640
476
  export { sqlite };
package/dist/db.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,4 @@ export type { FindingRow };
4
4
  export declare function postFinding(id: string, workspaceId: string, taskId: string, sessionId: string, category: string, title: string, content: string, tags: string[]): void;
5
5
  /** Query findings for a workspace, optionally filtering by categories and tags. */
6
6
  export declare function queryFindings(workspaceId: string, categories?: string[], tags?: string[], limit?: number): FindingRow[];
7
- /** Build a summarized text context of recent findings for a workspace. */
8
- export declare function buildFindingsContext(workspaceId: string): string;
9
7
  //# sourceMappingURL=finding-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"finding-store.d.ts","sourceRoot":"","sources":["../src/finding-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAIxD,YAAY,EAAE,UAAU,EAAE,CAAC;AAE3B,mCAAmC;AACnC,wBAAgB,WAAW,CACzB,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,GACb,IAAI,CAWN;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,EAAE,EACrB,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,KAAK,CAAC,EAAE,MAAM,GACb,UAAU,EAAE,CA8Bd;AAED,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAwBhE"}
1
+ {"version":3,"file":"finding-store.d.ts","sourceRoot":"","sources":["../src/finding-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAIxD,YAAY,EAAE,UAAU,EAAE,CAAC;AAE3B,mCAAmC;AACnC,wBAAgB,WAAW,CACzB,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,GACb,IAAI,CAWN;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,EAAE,EACrB,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,KAAK,CAAC,EAAE,MAAM,GACb,UAAU,EAAE,CA8Bd"}
@@ -42,27 +42,4 @@ export function queryFindings(workspaceId, categories, tags, limit) {
42
42
  }
43
43
  return results;
44
44
  }
45
- /** Build a summarized text context of recent findings for a workspace. */
46
- export function buildFindingsContext(workspaceId) {
47
- const allFindings = queryFindings(workspaceId, undefined, undefined, 20);
48
- if (allFindings.length === 0) {
49
- return "";
50
- }
51
- const lines = ["## Workspace Findings (shared knowledge from other agents)\n"];
52
- let totalChars = lines[0].length;
53
- const MAX_CHARS = 8000;
54
- const MAX_PER_FINDING = 500;
55
- for (const f of allFindings) {
56
- const content = f.content.length > MAX_PER_FINDING
57
- ? f.content.slice(0, MAX_PER_FINDING) + "..."
58
- : f.content;
59
- const entry = `### [${f.category}] ${f.title}\n${content}\n`;
60
- if (totalChars + entry.length > MAX_CHARS) {
61
- break;
62
- }
63
- lines.push(entry);
64
- totalChars += entry.length;
65
- }
66
- return lines.join("\n");
67
- }
68
45
  //# sourceMappingURL=finding-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"finding-store.js","sourceRoot":"","sources":["../src/finding-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"finding-store.js","sourceRoot":"","sources":["../src/finding-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAmB,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAIvD,mCAAmC;AACnC,MAAM,UAAU,WAAW,CACzB,EAAU,EACV,WAAmB,EACnB,MAAc,EACd,SAAiB,EACjB,QAAgB,EAChB,KAAa,EACb,OAAe,EACf,IAAc;IAEd,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;QACzB,EAAE;QACF,WAAW;QACX,MAAM;QACN,SAAS;QACT,QAAQ;QACR,KAAK;QACL,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC,GAAG,EAAE,CAAC;AACX,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,aAAa,CAC3B,WAAmB,EACnB,UAAqB,EACrB,IAAe,EACf,KAAc;IAEd,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;IAE9C,IAAI,OAAqB,CAAC;IAC1B,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,OAAO,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;aACjC,KAAK,CAAC,GAAG,CACR,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,EACrC,GAAG,CAAA,GAAG,QAAQ,CAAC,QAAQ,oCAAoC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAC1F,CAAC;aACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;aACjC,KAAK,CAAC,UAAU,CAAC;aACjB,GAAG,EAAE,CAAC;IACX,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;aACjC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;aAC5C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;aACjC,KAAK,CAAC,UAAU,CAAC;aACjB,GAAG,EAAE,CAAC;IACX,CAAC;IAED,8CAA8C;IAC9C,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YAC7B,MAAM,OAAO,GAAG,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"grpc-service.d.ts","sourceRoot":"","sources":["../src/grpc-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAiG7E;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAYvD;AAsLD,gFAAgF;AAChF,wBAAgB,mBAAmB,CACjC,UAAU,EAAE;IACV,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB,EAAE,GACF,MAAM,CAUR;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAczE;AAED,iFAAiF;AACjF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAkhDjE"}
1
+ {"version":3,"file":"grpc-service.d.ts","sourceRoot":"","sources":["../src/grpc-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAkG7E;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAYvD;AAsLD,gFAAgF;AAChF,wBAAgB,mBAAmB,CACjC,UAAU,EAAE;IACV,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB,EAAE,GACF,MAAM,CAUR;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAczE;AAED,iFAAiF;AACjF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAohDjE"}
@@ -7,7 +7,8 @@ import * as sessionStore from "./session-store.js";
7
7
  import * as adapterManager from "./adapter-manager.js";
8
8
  import { reconnectOrProvision } from "@grackle-ai/adapter-sdk";
9
9
  import * as streamHub from "./stream-hub.js";
10
- import * as tokenBroker from "./token-broker.js";
10
+ import * as tokenStore from "./token-store.js";
11
+ import * as tokenPush from "./token-push.js";
11
12
  import * as workspaceStore from "./workspace-store.js";
12
13
  import * as taskStore from "./task-store.js";
13
14
  import * as findingStore from "./finding-store.js";
@@ -347,7 +348,7 @@ export function registerGrackleRoutes(router) {
347
348
  const conn = await adapter.connect(req.id, config, powerlineToken);
348
349
  adapterManager.setConnection(req.id, conn);
349
350
  // Push stored tokens to newly connected environment
350
- await tokenBroker.pushToEnv(req.id);
351
+ await tokenPush.pushToEnv(req.id);
351
352
  envRegistry.updateEnvironmentStatus(req.id, "connected");
352
353
  envRegistry.markBootstrapped(req.id);
353
354
  emit("environment.changed", {});
@@ -475,7 +476,7 @@ export function registerGrackleRoutes(router) {
475
476
  }
476
477
  // Push fresh credentials before spawning (best-effort).
477
478
  // For local envs, skip file tokens — the PowerLine is on the same machine.
478
- await tokenBroker.refreshTokensForTask(req.environmentId, runtime, env.adapterType === "local" ? { excludeFileTokens: true } : undefined);
479
+ await tokenPush.refreshTokensForTask(req.environmentId, runtime, env.adapterType === "local" ? { excludeFileTokens: true } : undefined);
479
480
  processEventStream(conn.client.spawn(powerlineReq), {
480
481
  sessionId,
481
482
  logPath,
@@ -740,7 +741,7 @@ export function registerGrackleRoutes(router) {
740
741
  }
741
742
  },
742
743
  async setToken(req) {
743
- await tokenBroker.setToken({
744
+ tokenStore.setToken({
744
745
  name: req.name,
745
746
  type: req.type,
746
747
  envVar: req.envVar,
@@ -748,10 +749,11 @@ export function registerGrackleRoutes(router) {
748
749
  value: req.value,
749
750
  expiresAt: req.expiresAt,
750
751
  });
752
+ await tokenPush.pushToAll();
751
753
  return create(grackle.EmptySchema, {});
752
754
  },
753
755
  async listTokens() {
754
- const items = tokenBroker.listTokens();
756
+ const items = tokenStore.listTokens();
755
757
  return create(grackle.TokenListSchema, {
756
758
  tokens: items.map((t) => create(grackle.TokenInfoSchema, {
757
759
  name: t.name,
@@ -763,7 +765,8 @@ export function registerGrackleRoutes(router) {
763
765
  });
764
766
  },
765
767
  async deleteToken(req) {
766
- await tokenBroker.deleteToken(req.name);
768
+ tokenStore.deleteToken(req.name);
769
+ await tokenPush.pushToAll();
767
770
  return create(grackle.EmptySchema, {});
768
771
  },
769
772
  // ─── Credential Providers ─────────────────────────────────
@@ -1038,7 +1041,7 @@ export function registerGrackleRoutes(router) {
1038
1041
  emit("task.started", { taskId: task.id, sessionId, workspaceId: task.workspaceId || "" });
1039
1042
  // Re-push stored tokens + provider credentials (scoped to runtime) so they're fresh for this session.
1040
1043
  // For local envs, skip file tokens — the PowerLine is on the same machine.
1041
- await tokenBroker.refreshTokensForTask(environmentId, runtime, env?.adapterType === "local" ? { excludeFileTokens: true } : undefined);
1044
+ await tokenPush.refreshTokensForTask(environmentId, runtime, env?.adapterType === "local" ? { excludeFileTokens: true } : undefined);
1042
1045
  const mcpServersJson = personaMcpServersToJson(persona);
1043
1046
  const useWorktrees = workspace?.useWorktrees ?? false;
1044
1047
  if (!useWorktrees) {