@opengoat/core 2026.2.9 → 2026.2.14

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 (199) hide show
  1. package/README.md +3 -3
  2. package/dist/core/acp/application/acp-agent.js +4 -8
  3. package/dist/core/acp/application/acp-agent.js.map +1 -1
  4. package/dist/core/agents/application/agent-manifest.service.d.ts +1 -4
  5. package/dist/core/agents/application/agent-manifest.service.js +39 -52
  6. package/dist/core/agents/application/agent-manifest.service.js.map +1 -1
  7. package/dist/core/agents/application/agent.service.d.ts +43 -4
  8. package/dist/core/agents/application/agent.service.js +476 -55
  9. package/dist/core/agents/application/agent.service.js.map +1 -1
  10. package/dist/core/agents/domain/agent-manifest.d.ts +10 -4
  11. package/dist/core/agents/domain/agent-manifest.js +118 -25
  12. package/dist/core/agents/domain/agent-manifest.js.map +1 -1
  13. package/dist/core/agents/index.d.ts +1 -3
  14. package/dist/core/agents/index.js +1 -3
  15. package/dist/core/agents/index.js.map +1 -1
  16. package/dist/core/boards/application/board.service.d.ts +64 -0
  17. package/dist/core/boards/application/board.service.js +590 -0
  18. package/dist/core/boards/application/board.service.js.map +1 -0
  19. package/dist/core/boards/domain/board.d.ts +30 -0
  20. package/dist/core/boards/domain/board.js +2 -0
  21. package/dist/core/boards/domain/board.js.map +1 -0
  22. package/dist/core/boards/index.d.ts +2 -0
  23. package/dist/core/boards/index.js +2 -0
  24. package/dist/core/boards/index.js.map +1 -0
  25. package/dist/core/bootstrap/application/bootstrap.service.d.ts +5 -2
  26. package/dist/core/bootstrap/application/bootstrap.service.js +32 -17
  27. package/dist/core/bootstrap/application/bootstrap.service.js.map +1 -1
  28. package/dist/core/domain/agent-id.d.ts +1 -1
  29. package/dist/core/domain/agent-id.js +1 -1
  30. package/dist/core/domain/agent-id.js.map +1 -1
  31. package/dist/core/domain/agent.d.ts +31 -8
  32. package/dist/core/domain/opengoat-paths.d.ts +1 -0
  33. package/dist/core/opengoat/application/opengoat.service.d.ts +111 -27
  34. package/dist/core/opengoat/application/opengoat.service.js +1048 -136
  35. package/dist/core/opengoat/application/opengoat.service.js.map +1 -1
  36. package/dist/core/opengoat/index.d.ts +1 -0
  37. package/dist/core/orchestration/application/orchestration.service.d.ts +8 -21
  38. package/dist/core/orchestration/application/orchestration.service.js +59 -871
  39. package/dist/core/orchestration/application/orchestration.service.js.map +1 -1
  40. package/dist/core/orchestration/application/routing.service.js +10 -8
  41. package/dist/core/orchestration/application/routing.service.js.map +1 -1
  42. package/dist/core/orchestration/domain/routing.d.ts +0 -17
  43. package/dist/core/orchestration/domain/run-events.d.ts +1 -1
  44. package/dist/core/orchestration/index.d.ts +0 -2
  45. package/dist/core/orchestration/index.js +0 -1
  46. package/dist/core/orchestration/index.js.map +1 -1
  47. package/dist/core/providers/application/provider.service.d.ts +16 -32
  48. package/dist/core/providers/application/provider.service.js +178 -202
  49. package/dist/core/providers/application/provider.service.js.map +1 -1
  50. package/dist/core/providers/cli-provider.d.ts +1 -0
  51. package/dist/core/providers/cli-provider.js +66 -1
  52. package/dist/core/providers/cli-provider.js.map +1 -1
  53. package/dist/core/providers/image-input.d.ts +16 -0
  54. package/dist/core/providers/image-input.js +158 -0
  55. package/dist/core/providers/image-input.js.map +1 -0
  56. package/dist/core/providers/index.d.ts +1 -7
  57. package/dist/core/providers/index.js +0 -13
  58. package/dist/core/providers/index.js.map +1 -1
  59. package/dist/core/providers/loader.js +1 -95
  60. package/dist/core/providers/loader.js.map +1 -1
  61. package/dist/core/providers/providers/openclaw/provider.js +213 -32
  62. package/dist/core/providers/providers/openclaw/provider.js.map +1 -1
  63. package/dist/core/providers/types.d.ts +8 -3
  64. package/dist/core/scenarios/application/scenario-runner.service.d.ts +0 -1
  65. package/dist/core/scenarios/application/scenario-runner.service.js +30 -87
  66. package/dist/core/scenarios/application/scenario-runner.service.js.map +1 -1
  67. package/dist/core/scenarios/domain/scenario.d.ts +0 -15
  68. package/dist/core/sessions/application/session.service.d.ts +10 -4
  69. package/dist/core/sessions/application/session.service.js +87 -89
  70. package/dist/core/sessions/application/session.service.js.map +1 -1
  71. package/dist/core/sessions/domain/session.d.ts +3 -3
  72. package/dist/core/sessions/domain/transcript.d.ts +1 -1
  73. package/dist/core/sessions/index.d.ts +1 -1
  74. package/dist/core/sessions/index.js.map +1 -1
  75. package/dist/core/skills/application/skill.service.d.ts +2 -3
  76. package/dist/core/skills/application/skill.service.js +153 -56
  77. package/dist/core/skills/application/skill.service.js.map +1 -1
  78. package/dist/core/skills/domain/skill.d.ts +2 -2
  79. package/dist/core/skills/domain/skill.js +4 -2
  80. package/dist/core/skills/domain/skill.js.map +1 -1
  81. package/dist/core/templates/assets/ceo/BOOTSTRAP.md +41 -0
  82. package/dist/core/templates/assets/ceo/ROLE.md +15 -0
  83. package/dist/core/templates/assets/organization/MISSION.md +73 -0
  84. package/dist/core/templates/assets/organization/STRATEGY.md +107 -0
  85. package/dist/core/templates/assets/organization/VISION.md +80 -0
  86. package/dist/core/templates/assets/organization/wiki/index.md +15 -0
  87. package/dist/core/templates/assets/skills/og-board-individual/SKILL.md +148 -0
  88. package/dist/core/templates/assets/skills/og-board-manager/SKILL.md +140 -0
  89. package/dist/core/templates/default-templates.d.ts +17 -14
  90. package/dist/core/templates/default-templates.js +115 -212
  91. package/dist/core/templates/default-templates.js.map +1 -1
  92. package/dist/index.d.ts +1 -4
  93. package/dist/index.js +1 -4
  94. package/dist/index.js.map +1 -1
  95. package/dist/platform/node/node-path.port.js +1 -0
  96. package/dist/platform/node/node-path.port.js.map +1 -1
  97. package/package.json +16 -13
  98. package/dist/core/agents/application/workspace-context.service.d.ts +0 -28
  99. package/dist/core/agents/application/workspace-context.service.js +0 -157
  100. package/dist/core/agents/application/workspace-context.service.js.map +0 -1
  101. package/dist/core/agents/domain/workspace-context.d.ts +0 -13
  102. package/dist/core/agents/domain/workspace-context.js +0 -14
  103. package/dist/core/agents/domain/workspace-context.js.map +0 -1
  104. package/dist/core/gateway/domain/protocol.d.ts +0 -113
  105. package/dist/core/gateway/domain/protocol.js +0 -394
  106. package/dist/core/gateway/domain/protocol.js.map +0 -1
  107. package/dist/core/gateway/index.d.ts +0 -2
  108. package/dist/core/gateway/index.js +0 -2
  109. package/dist/core/gateway/index.js.map +0 -1
  110. package/dist/core/llm/application/vercel-ai-text-runtime.d.ts +0 -26
  111. package/dist/core/llm/application/vercel-ai-text-runtime.js +0 -223
  112. package/dist/core/llm/application/vercel-ai-text-runtime.js.map +0 -1
  113. package/dist/core/llm/domain/text-runtime.d.ts +0 -22
  114. package/dist/core/llm/domain/text-runtime.js +0 -2
  115. package/dist/core/llm/domain/text-runtime.js.map +0 -1
  116. package/dist/core/llm/index.d.ts +0 -2
  117. package/dist/core/llm/index.js +0 -2
  118. package/dist/core/llm/index.js.map +0 -1
  119. package/dist/core/orchestration/application/orchestration-planner.service.d.ts +0 -28
  120. package/dist/core/orchestration/application/orchestration-planner.service.js +0 -279
  121. package/dist/core/orchestration/application/orchestration-planner.service.js.map +0 -1
  122. package/dist/core/orchestration/domain/loop.d.ts +0 -119
  123. package/dist/core/orchestration/domain/loop.js +0 -2
  124. package/dist/core/orchestration/domain/loop.js.map +0 -1
  125. package/dist/core/plugins/application/plugin.service.d.ts +0 -32
  126. package/dist/core/plugins/application/plugin.service.js +0 -236
  127. package/dist/core/plugins/application/plugin.service.js.map +0 -1
  128. package/dist/core/plugins/domain/openclaw-compat.d.ts +0 -60
  129. package/dist/core/plugins/domain/openclaw-compat.js +0 -9
  130. package/dist/core/plugins/domain/openclaw-compat.js.map +0 -1
  131. package/dist/core/plugins/index.d.ts +0 -3
  132. package/dist/core/plugins/index.js +0 -3
  133. package/dist/core/plugins/index.js.map +0 -1
  134. package/dist/core/providers/onboarding.d.ts +0 -13
  135. package/dist/core/providers/onboarding.js +0 -149
  136. package/dist/core/providers/onboarding.js.map +0 -1
  137. package/dist/core/providers/providers/claude/index.d.ts +0 -4
  138. package/dist/core/providers/providers/claude/index.js +0 -19
  139. package/dist/core/providers/providers/claude/index.js.map +0 -1
  140. package/dist/core/providers/providers/claude/provider.d.ts +0 -8
  141. package/dist/core/providers/providers/claude/provider.js +0 -106
  142. package/dist/core/providers/providers/claude/provider.js.map +0 -1
  143. package/dist/core/providers/providers/codex/index.d.ts +0 -4
  144. package/dist/core/providers/providers/codex/index.js +0 -19
  145. package/dist/core/providers/providers/codex/index.js.map +0 -1
  146. package/dist/core/providers/providers/codex/provider.d.ts +0 -7
  147. package/dist/core/providers/providers/codex/provider.js +0 -31
  148. package/dist/core/providers/providers/codex/provider.js.map +0 -1
  149. package/dist/core/providers/providers/cursor/index.d.ts +0 -4
  150. package/dist/core/providers/providers/cursor/index.js +0 -19
  151. package/dist/core/providers/providers/cursor/index.js.map +0 -1
  152. package/dist/core/providers/providers/cursor/provider.d.ts +0 -11
  153. package/dist/core/providers/providers/cursor/provider.js +0 -90
  154. package/dist/core/providers/providers/cursor/provider.js.map +0 -1
  155. package/dist/core/providers/providers/extended-http/catalog.d.ts +0 -40
  156. package/dist/core/providers/providers/extended-http/catalog.js +0 -728
  157. package/dist/core/providers/providers/extended-http/catalog.js.map +0 -1
  158. package/dist/core/providers/providers/extended-http/index.d.ts +0 -5
  159. package/dist/core/providers/providers/extended-http/index.js +0 -13
  160. package/dist/core/providers/providers/extended-http/index.js.map +0 -1
  161. package/dist/core/providers/providers/extended-http/provider.d.ts +0 -31
  162. package/dist/core/providers/providers/extended-http/provider.js +0 -580
  163. package/dist/core/providers/providers/extended-http/provider.js.map +0 -1
  164. package/dist/core/providers/providers/gemini/index.d.ts +0 -4
  165. package/dist/core/providers/providers/gemini/index.js +0 -37
  166. package/dist/core/providers/providers/gemini/index.js.map +0 -1
  167. package/dist/core/providers/providers/gemini/provider.d.ts +0 -7
  168. package/dist/core/providers/providers/gemini/provider.js +0 -59
  169. package/dist/core/providers/providers/gemini/provider.js.map +0 -1
  170. package/dist/core/providers/providers/grok/index.d.ts +0 -4
  171. package/dist/core/providers/providers/grok/index.js +0 -41
  172. package/dist/core/providers/providers/grok/index.js.map +0 -1
  173. package/dist/core/providers/providers/grok/provider.d.ts +0 -13
  174. package/dist/core/providers/providers/grok/provider.js +0 -95
  175. package/dist/core/providers/providers/grok/provider.js.map +0 -1
  176. package/dist/core/providers/providers/openai/index.d.ts +0 -4
  177. package/dist/core/providers/providers/openai/index.js +0 -45
  178. package/dist/core/providers/providers/openai/index.js.map +0 -1
  179. package/dist/core/providers/providers/openai/provider.d.ts +0 -14
  180. package/dist/core/providers/providers/openai/provider.js +0 -203
  181. package/dist/core/providers/providers/openai/provider.js.map +0 -1
  182. package/dist/core/providers/providers/opencode/index.d.ts +0 -4
  183. package/dist/core/providers/providers/opencode/index.js +0 -23
  184. package/dist/core/providers/providers/opencode/index.js.map +0 -1
  185. package/dist/core/providers/providers/opencode/provider.d.ts +0 -11
  186. package/dist/core/providers/providers/opencode/provider.js +0 -215
  187. package/dist/core/providers/providers/opencode/provider.js.map +0 -1
  188. package/dist/core/providers/providers/openrouter/index.d.ts +0 -4
  189. package/dist/core/providers/providers/openrouter/index.js +0 -37
  190. package/dist/core/providers/providers/openrouter/index.js.map +0 -1
  191. package/dist/core/providers/providers/openrouter/provider.d.ts +0 -13
  192. package/dist/core/providers/providers/openrouter/provider.js +0 -80
  193. package/dist/core/providers/providers/openrouter/provider.js.map +0 -1
  194. package/dist/platform/node/opengoat-gateway-client.d.ts +0 -19
  195. package/dist/platform/node/opengoat-gateway-client.js +0 -194
  196. package/dist/platform/node/opengoat-gateway-client.js.map +0 -1
  197. package/dist/platform/node/opengoat-gateway-server.d.ts +0 -53
  198. package/dist/platform/node/opengoat-gateway-server.js +0 -906
  199. package/dist/platform/node/opengoat-gateway-server.js.map +0 -1
@@ -0,0 +1,590 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { readFile as readFileBuffer, stat as statFile, writeFile as writeFileBuffer, } from "node:fs/promises";
3
+ import { createRequire } from "node:module";
4
+ import initSqlJs from "sql.js";
5
+ import { DEFAULT_AGENT_ID, normalizeAgentId } from "../../domain/agent-id.js";
6
+ const TASK_STATUSES = ["todo", "doing", "pending", "blocked", "done"];
7
+ const DEFAULT_TASK_PROJECT = "~";
8
+ const MAX_TASK_LIST_LIMIT = 100;
9
+ const INTERNAL_TASK_BUCKET_ID = "tasks";
10
+ const INTERNAL_TASK_BUCKET_TITLE = "Tasks";
11
+ const require = createRequire(import.meta.url);
12
+ export class BoardService {
13
+ fileSystem;
14
+ pathPort;
15
+ nowIso;
16
+ agentManifestService;
17
+ sqlPromise;
18
+ dbPromise;
19
+ dbPath;
20
+ dbFileFingerprint;
21
+ constructor(deps) {
22
+ this.fileSystem = deps.fileSystem;
23
+ this.pathPort = deps.pathPort;
24
+ this.nowIso = deps.nowIso;
25
+ this.agentManifestService = deps.agentManifestService;
26
+ }
27
+ async createTask(paths, actorId, options) {
28
+ const db = await this.getDatabase(paths);
29
+ const normalizedActorId = normalizeAgentId(actorId) || DEFAULT_AGENT_ID;
30
+ const title = options.title.trim();
31
+ if (!title) {
32
+ throw new Error("Task title cannot be empty.");
33
+ }
34
+ const description = options.description.trim();
35
+ if (!description) {
36
+ throw new Error("Task description cannot be empty.");
37
+ }
38
+ const assignedTo = normalizeAgentId(options.assignedTo ?? normalizedActorId) ||
39
+ normalizedActorId;
40
+ const manifests = await this.agentManifestService.listManifests(paths);
41
+ const manifestsById = new Map(manifests.map((manifest) => [manifest.agentId, manifest]));
42
+ if (!manifestsById.has(normalizedActorId)) {
43
+ throw new Error(`Agent \"${normalizedActorId}\" does not exist.`);
44
+ }
45
+ if (!manifestsById.has(assignedTo)) {
46
+ throw new Error(`Agent \"${assignedTo}\" does not exist.`);
47
+ }
48
+ const allowedAssignees = collectAssignableAgents(manifests, normalizedActorId);
49
+ if (!allowedAssignees.has(assignedTo)) {
50
+ throw new Error("Agents can only assign tasks to themselves or their reportees (direct or indirect).");
51
+ }
52
+ const status = normalizeTaskStatus(options.status);
53
+ const project = normalizeTaskProject(options.project);
54
+ const taskId = createEntityId(`task-${title}`);
55
+ const createdAt = this.nowIso();
56
+ this.execute(db, `INSERT INTO tasks (
57
+ task_id,
58
+ board_id,
59
+ created_at,
60
+ project,
61
+ owner_agent_id,
62
+ assigned_to_agent_id,
63
+ title,
64
+ description,
65
+ status,
66
+ status_reason
67
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
68
+ taskId,
69
+ INTERNAL_TASK_BUCKET_ID,
70
+ createdAt,
71
+ project,
72
+ normalizedActorId,
73
+ assignedTo,
74
+ title,
75
+ description,
76
+ status,
77
+ null,
78
+ ]);
79
+ await this.persistDatabase(paths, db);
80
+ return this.requireTask(db, taskId);
81
+ }
82
+ async listTasks(paths, options = {}) {
83
+ const db = await this.getDatabase(paths);
84
+ const limit = resolveTaskListLimit(options.limit);
85
+ const assignee = normalizeOptionalAssignee(options.assignee);
86
+ const rows = assignee
87
+ ? this.queryAll(db, `SELECT task_id, board_id, created_at, project, owner_agent_id, assigned_to_agent_id, title, description, status, status_reason
88
+ FROM tasks
89
+ WHERE assigned_to_agent_id = ?
90
+ ORDER BY created_at DESC, task_id DESC
91
+ LIMIT ?`, [assignee, limit])
92
+ : this.queryAll(db, `SELECT task_id, board_id, created_at, project, owner_agent_id, assigned_to_agent_id, title, description, status, status_reason
93
+ FROM tasks
94
+ ORDER BY created_at DESC, task_id DESC
95
+ LIMIT ?`, [limit]);
96
+ return this.hydrateTaskRows(db, rows);
97
+ }
98
+ async listLatestTasks(paths, options = {}) {
99
+ return this.listTasks(paths, options);
100
+ }
101
+ async listLatestTasksPage(paths, options = {}) {
102
+ const db = await this.getDatabase(paths);
103
+ const limit = resolveTaskListLimit(options.limit);
104
+ const offset = Math.max(0, options.offset ?? 0);
105
+ const assignee = normalizeOptionalAssignee(options.assignee);
106
+ const owner = options.owner
107
+ ? normalizeEntityId(options.owner, "owner")
108
+ : undefined;
109
+ const status = options.status?.trim() || undefined;
110
+ const conditions = [];
111
+ const params = [];
112
+ if (assignee) {
113
+ conditions.push("assigned_to_agent_id = ?");
114
+ params.push(assignee);
115
+ }
116
+ if (owner) {
117
+ conditions.push("owner_agent_id = ?");
118
+ params.push(owner);
119
+ }
120
+ if (status) {
121
+ conditions.push("status = ?");
122
+ params.push(status);
123
+ }
124
+ const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
125
+ const countRow = this.queryOne(db, `SELECT COUNT(*) as count FROM tasks ${whereClause}`, params);
126
+ const total = countRow?.count ?? 0;
127
+ const rows = this.queryAll(db, `SELECT task_id, board_id, created_at, project, owner_agent_id, assigned_to_agent_id, title, description, status, status_reason
128
+ FROM tasks
129
+ ${whereClause}
130
+ ORDER BY created_at DESC, task_id DESC
131
+ LIMIT ? OFFSET ?`, [...params, limit, offset]);
132
+ const tasks = this.hydrateTaskRows(db, rows);
133
+ return {
134
+ tasks,
135
+ total,
136
+ limit,
137
+ offset,
138
+ };
139
+ }
140
+ async getTask(paths, taskId) {
141
+ const db = await this.getDatabase(paths);
142
+ const resolvedTaskId = this.resolveTaskId(db, taskId);
143
+ return this.requireTask(db, resolvedTaskId);
144
+ }
145
+ async deleteTasks(paths, actorId, taskIds) {
146
+ const db = await this.getDatabase(paths);
147
+ const normalizedActorId = normalizeAgentId(actorId) || DEFAULT_AGENT_ID;
148
+ const manifests = await this.agentManifestService.listManifests(paths);
149
+ const seenTaskIds = new Set();
150
+ const resolvedTaskIds = [];
151
+ for (const taskId of taskIds) {
152
+ const normalizedTaskId = taskId.trim();
153
+ if (!normalizedTaskId) {
154
+ continue;
155
+ }
156
+ const resolvedTaskId = this.resolveTaskId(db, normalizedTaskId);
157
+ if (seenTaskIds.has(resolvedTaskId)) {
158
+ continue;
159
+ }
160
+ const task = this.requireTask(db, resolvedTaskId);
161
+ this.assertTaskUpdatePermission(task, normalizedActorId, manifests);
162
+ seenTaskIds.add(resolvedTaskId);
163
+ resolvedTaskIds.push(resolvedTaskId);
164
+ }
165
+ if (resolvedTaskIds.length === 0) {
166
+ return {
167
+ deletedTaskIds: [],
168
+ deletedCount: 0,
169
+ };
170
+ }
171
+ const placeholders = resolvedTaskIds.map(() => "?").join(", ");
172
+ this.execute(db, `DELETE FROM tasks WHERE task_id IN (${placeholders})`, resolvedTaskIds);
173
+ await this.persistDatabase(paths, db);
174
+ return {
175
+ deletedTaskIds: resolvedTaskIds,
176
+ deletedCount: resolvedTaskIds.length,
177
+ };
178
+ }
179
+ async updateTaskStatus(paths, actorId, taskId, status, reason) {
180
+ const db = await this.getDatabase(paths);
181
+ const normalizedActorId = normalizeAgentId(actorId) || DEFAULT_AGENT_ID;
182
+ const resolvedTaskId = this.resolveTaskId(db, taskId);
183
+ const task = this.requireTask(db, resolvedTaskId);
184
+ const manifests = await this.agentManifestService.listManifests(paths);
185
+ this.assertTaskUpdatePermission(task, normalizedActorId, manifests);
186
+ const nextStatus = normalizeTaskStatus(status, true);
187
+ const nextStatusReason = normalizeTaskStatusReason(nextStatus, reason);
188
+ this.execute(db, `UPDATE tasks SET status = ?, status_reason = ? WHERE task_id = ?`, [nextStatus, nextStatusReason, resolvedTaskId]);
189
+ await this.persistDatabase(paths, db);
190
+ return this.requireTask(db, resolvedTaskId);
191
+ }
192
+ async addTaskBlocker(paths, actorId, taskId, blocker) {
193
+ const db = await this.getDatabase(paths);
194
+ const normalizedActorId = normalizeAgentId(actorId) || DEFAULT_AGENT_ID;
195
+ const resolvedTaskId = this.resolveTaskId(db, taskId);
196
+ const content = blocker.trim();
197
+ if (!content) {
198
+ throw new Error("Blocker content cannot be empty.");
199
+ }
200
+ const task = this.requireTask(db, resolvedTaskId);
201
+ const manifests = await this.agentManifestService.listManifests(paths);
202
+ this.assertTaskUpdatePermission(task, normalizedActorId, manifests);
203
+ this.execute(db, `INSERT INTO task_blockers (task_id, created_at, created_by_agent_id, content)
204
+ VALUES (?, ?, ?, ?)`, [resolvedTaskId, this.nowIso(), normalizedActorId, content]);
205
+ await this.persistDatabase(paths, db);
206
+ return this.requireTask(db, resolvedTaskId);
207
+ }
208
+ async addTaskArtifact(paths, actorId, taskId, content) {
209
+ const db = await this.getDatabase(paths);
210
+ const normalizedActorId = normalizeAgentId(actorId) || DEFAULT_AGENT_ID;
211
+ const resolvedTaskId = this.resolveTaskId(db, taskId);
212
+ const cleaned = content.trim();
213
+ if (!cleaned) {
214
+ throw new Error("Artifact content cannot be empty.");
215
+ }
216
+ const task = this.requireTask(db, resolvedTaskId);
217
+ const manifests = await this.agentManifestService.listManifests(paths);
218
+ this.assertTaskUpdatePermission(task, normalizedActorId, manifests);
219
+ this.execute(db, `INSERT INTO task_artifacts (task_id, created_at, created_by_agent_id, content)
220
+ VALUES (?, ?, ?, ?)`, [resolvedTaskId, this.nowIso(), normalizedActorId, cleaned]);
221
+ await this.persistDatabase(paths, db);
222
+ return this.requireTask(db, resolvedTaskId);
223
+ }
224
+ async addTaskWorklog(paths, actorId, taskId, content) {
225
+ const db = await this.getDatabase(paths);
226
+ const normalizedActorId = normalizeAgentId(actorId) || DEFAULT_AGENT_ID;
227
+ const resolvedTaskId = this.resolveTaskId(db, taskId);
228
+ const cleaned = content.trim();
229
+ if (!cleaned) {
230
+ throw new Error("Worklog content cannot be empty.");
231
+ }
232
+ const task = this.requireTask(db, resolvedTaskId);
233
+ const manifests = await this.agentManifestService.listManifests(paths);
234
+ this.assertTaskUpdatePermission(task, normalizedActorId, manifests);
235
+ this.execute(db, `INSERT INTO task_worklog (task_id, created_at, created_by_agent_id, content)
236
+ VALUES (?, ?, ?, ?)`, [resolvedTaskId, this.nowIso(), normalizedActorId, cleaned]);
237
+ await this.persistDatabase(paths, db);
238
+ return this.requireTask(db, resolvedTaskId);
239
+ }
240
+ assertTaskUpdatePermission(task, actorId, manifests) {
241
+ if (task.owner === actorId || task.assignedTo === actorId) {
242
+ return;
243
+ }
244
+ const reportees = collectAssignableAgents(manifests, actorId);
245
+ if (reportees.has(task.owner) || reportees.has(task.assignedTo)) {
246
+ return;
247
+ }
248
+ throw new Error("Agents can only update their own tasks or tasks owned/assigned to their reportees (direct or indirect).");
249
+ }
250
+ hydrateTaskRows(db, rows) {
251
+ const tasks = [];
252
+ for (const row of rows) {
253
+ tasks.push(this.hydrateTaskRow(db, row));
254
+ }
255
+ return tasks;
256
+ }
257
+ requireTask(db, taskId) {
258
+ const row = this.queryOne(db, `SELECT task_id, board_id, created_at, project, owner_agent_id, assigned_to_agent_id, title, description, status, status_reason
259
+ FROM tasks
260
+ WHERE task_id = ?`, [taskId]);
261
+ if (!row) {
262
+ throw new Error(`Task \"${taskId}\" does not exist.`);
263
+ }
264
+ return this.hydrateTaskRow(db, row);
265
+ }
266
+ resolveTaskId(db, taskId) {
267
+ const normalizedTaskId = normalizeEntityId(taskId, "task id");
268
+ const exactMatch = this.queryOne(db, `SELECT task_id
269
+ FROM tasks
270
+ WHERE task_id = ?`, [normalizedTaskId]);
271
+ if (exactMatch?.task_id) {
272
+ return exactMatch.task_id;
273
+ }
274
+ const caseInsensitiveMatches = this.queryAll(db, `SELECT task_id
275
+ FROM tasks
276
+ WHERE task_id = ? COLLATE NOCASE
277
+ ORDER BY task_id ASC`, [normalizedTaskId]);
278
+ if (caseInsensitiveMatches.length === 0) {
279
+ throw new Error(`Task \"${normalizedTaskId}\" does not exist.`);
280
+ }
281
+ if (caseInsensitiveMatches.length > 1) {
282
+ throw new Error(`Task id \"${normalizedTaskId}\" is ambiguous by case. Use exact task id.`);
283
+ }
284
+ return caseInsensitiveMatches[0].task_id;
285
+ }
286
+ hydrateTaskRow(db, row) {
287
+ const blockersRows = this.queryAll(db, `SELECT created_at, created_by_agent_id, content
288
+ FROM task_blockers
289
+ WHERE task_id = ?
290
+ ORDER BY id ASC`, [row.task_id]);
291
+ const artifactsRows = this.queryAll(db, `SELECT created_at, created_by_agent_id, content
292
+ FROM task_artifacts
293
+ WHERE task_id = ?
294
+ ORDER BY id ASC`, [row.task_id]);
295
+ const worklogRows = this.queryAll(db, `SELECT created_at, created_by_agent_id, content
296
+ FROM task_worklog
297
+ WHERE task_id = ?
298
+ ORDER BY id ASC`, [row.task_id]);
299
+ return {
300
+ taskId: row.task_id,
301
+ createdAt: row.created_at,
302
+ project: row.project || DEFAULT_TASK_PROJECT,
303
+ owner: row.owner_agent_id,
304
+ assignedTo: row.assigned_to_agent_id,
305
+ title: row.title,
306
+ description: row.description,
307
+ status: row.status,
308
+ statusReason: row.status_reason?.trim() || undefined,
309
+ blockers: blockersRows.map((entry) => entry.content),
310
+ artifacts: artifactsRows.map((entry) => toTaskEntry(entry)),
311
+ worklog: worklogRows.map((entry) => toTaskEntry(entry)),
312
+ };
313
+ }
314
+ async getDatabase(paths) {
315
+ const dbPath = this.pathPort.join(paths.homeDir, "boards.sqlite");
316
+ const pathChanged = this.dbPath !== dbPath;
317
+ const diskFingerprint = await this.readDbFileFingerprint(dbPath);
318
+ const fileChangedExternally = !pathChanged &&
319
+ Boolean(this.dbPromise) &&
320
+ this.dbFileFingerprint !== undefined &&
321
+ this.dbFileFingerprint !== diskFingerprint;
322
+ if (!this.dbPromise || pathChanged || fileChangedExternally) {
323
+ this.dbPath = dbPath;
324
+ this.dbFileFingerprint = diskFingerprint;
325
+ this.dbPromise = this.openAndMigrate(dbPath, paths);
326
+ }
327
+ return this.dbPromise;
328
+ }
329
+ async openAndMigrate(dbPath, paths) {
330
+ await this.fileSystem.ensureDir(paths.homeDir);
331
+ const SQL = await this.getSqlJs();
332
+ const exists = await this.fileSystem.exists(dbPath);
333
+ const db = exists
334
+ ? new SQL.Database(new Uint8Array(await readFileBuffer(dbPath)))
335
+ : new SQL.Database();
336
+ this.execute(db, "PRAGMA foreign_keys = ON;");
337
+ this.execute(db, `CREATE TABLE IF NOT EXISTS boards (
338
+ board_id TEXT PRIMARY KEY,
339
+ title TEXT NOT NULL,
340
+ created_at TEXT NOT NULL,
341
+ owner_agent_id TEXT NOT NULL,
342
+ is_default INTEGER NOT NULL DEFAULT 0
343
+ );`);
344
+ this.ensureBoardDefaultColumn(db);
345
+ this.ensureInternalTaskBucket(db);
346
+ this.execute(db, `CREATE TABLE IF NOT EXISTS tasks (
347
+ task_id TEXT PRIMARY KEY,
348
+ board_id TEXT NOT NULL,
349
+ created_at TEXT NOT NULL,
350
+ project TEXT NOT NULL DEFAULT '${DEFAULT_TASK_PROJECT}',
351
+ owner_agent_id TEXT NOT NULL,
352
+ assigned_to_agent_id TEXT NOT NULL,
353
+ title TEXT NOT NULL,
354
+ description TEXT NOT NULL,
355
+ status TEXT NOT NULL,
356
+ status_reason TEXT,
357
+ FOREIGN KEY(board_id) REFERENCES boards(board_id) ON DELETE CASCADE
358
+ );`);
359
+ this.ensureTaskProjectColumn(db);
360
+ this.ensureTaskStatusReasonColumn(db);
361
+ this.execute(db, `CREATE TABLE IF NOT EXISTS task_blockers (
362
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
363
+ task_id TEXT NOT NULL,
364
+ created_at TEXT NOT NULL,
365
+ created_by_agent_id TEXT NOT NULL,
366
+ content TEXT NOT NULL,
367
+ FOREIGN KEY(task_id) REFERENCES tasks(task_id) ON DELETE CASCADE
368
+ );`);
369
+ this.execute(db, `CREATE TABLE IF NOT EXISTS task_artifacts (
370
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
371
+ task_id TEXT NOT NULL,
372
+ created_at TEXT NOT NULL,
373
+ created_by_agent_id TEXT NOT NULL,
374
+ content TEXT NOT NULL,
375
+ FOREIGN KEY(task_id) REFERENCES tasks(task_id) ON DELETE CASCADE
376
+ );`);
377
+ this.execute(db, `CREATE TABLE IF NOT EXISTS task_worklog (
378
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
379
+ task_id TEXT NOT NULL,
380
+ created_at TEXT NOT NULL,
381
+ created_by_agent_id TEXT NOT NULL,
382
+ content TEXT NOT NULL,
383
+ FOREIGN KEY(task_id) REFERENCES tasks(task_id) ON DELETE CASCADE
384
+ );`);
385
+ this.execute(db, "CREATE INDEX IF NOT EXISTS idx_tasks_board_id ON tasks(board_id);");
386
+ this.execute(db, "CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);");
387
+ this.execute(db, "CREATE INDEX IF NOT EXISTS idx_tasks_created_at ON tasks(created_at, task_id);");
388
+ this.execute(db, "CREATE INDEX IF NOT EXISTS idx_tasks_assignee_created_at ON tasks(assigned_to_agent_id, created_at, task_id);");
389
+ this.execute(db, "CREATE INDEX IF NOT EXISTS idx_task_blockers_task_id ON task_blockers(task_id);");
390
+ this.execute(db, "CREATE INDEX IF NOT EXISTS idx_task_artifacts_task_id ON task_artifacts(task_id);");
391
+ this.execute(db, "CREATE INDEX IF NOT EXISTS idx_task_worklog_task_id ON task_worklog(task_id);");
392
+ await this.persistDatabase(paths, db);
393
+ return db;
394
+ }
395
+ ensureInternalTaskBucket(db) {
396
+ const existing = this.queryOne(db, `SELECT board_id, title, created_at, owner_agent_id, is_default
397
+ FROM boards
398
+ WHERE board_id = ?`, [INTERNAL_TASK_BUCKET_ID]);
399
+ if (existing) {
400
+ return;
401
+ }
402
+ this.execute(db, `INSERT INTO boards (board_id, title, created_at, owner_agent_id, is_default)
403
+ VALUES (?, ?, ?, ?, 0)`, [
404
+ INTERNAL_TASK_BUCKET_ID,
405
+ INTERNAL_TASK_BUCKET_TITLE,
406
+ this.nowIso(),
407
+ DEFAULT_AGENT_ID,
408
+ ]);
409
+ }
410
+ async getSqlJs() {
411
+ if (!this.sqlPromise) {
412
+ const wasmPath = require.resolve("sql.js/dist/sql-wasm.wasm");
413
+ this.sqlPromise = initSqlJs({
414
+ locateFile: () => wasmPath,
415
+ });
416
+ }
417
+ return this.sqlPromise;
418
+ }
419
+ async persistDatabase(paths, db) {
420
+ const dbPath = this.pathPort.join(paths.homeDir, "boards.sqlite");
421
+ const data = db.export();
422
+ await writeFileBuffer(dbPath, data);
423
+ if (this.dbPath === dbPath) {
424
+ this.dbFileFingerprint = await this.readDbFileFingerprint(dbPath);
425
+ }
426
+ }
427
+ async readDbFileFingerprint(dbPath) {
428
+ try {
429
+ const fileStats = await statFile(dbPath);
430
+ return `${fileStats.size}:${fileStats.mtimeMs}`;
431
+ }
432
+ catch (error) {
433
+ if (isNotFound(error)) {
434
+ return null;
435
+ }
436
+ throw error;
437
+ }
438
+ }
439
+ execute(db, sql, params = []) {
440
+ const statement = db.prepare(sql);
441
+ statement.bind(params);
442
+ while (statement.step()) {
443
+ // no-op
444
+ }
445
+ statement.free();
446
+ }
447
+ queryAll(db, sql, params = []) {
448
+ const statement = db.prepare(sql);
449
+ statement.bind(params);
450
+ const rows = [];
451
+ while (statement.step()) {
452
+ rows.push(statement.getAsObject());
453
+ }
454
+ statement.free();
455
+ return rows;
456
+ }
457
+ queryOne(db, sql, params = []) {
458
+ const all = this.queryAll(db, sql, params);
459
+ return all[0];
460
+ }
461
+ ensureTaskProjectColumn(db) {
462
+ const columns = this.queryAll(db, "PRAGMA table_info(tasks);");
463
+ const hasProject = columns.some((column) => column.name === "project");
464
+ if (hasProject) {
465
+ return;
466
+ }
467
+ this.execute(db, `ALTER TABLE tasks ADD COLUMN project TEXT NOT NULL DEFAULT '${DEFAULT_TASK_PROJECT}';`);
468
+ const hasWorkspace = columns.some((column) => column.name === "workspace");
469
+ if (hasWorkspace) {
470
+ this.execute(db, `UPDATE tasks
471
+ SET project = workspace
472
+ WHERE workspace IS NOT NULL
473
+ AND TRIM(workspace) <> '';`);
474
+ }
475
+ }
476
+ ensureTaskStatusReasonColumn(db) {
477
+ const columns = this.queryAll(db, "PRAGMA table_info(tasks);");
478
+ const hasStatusReason = columns.some((column) => column.name === "status_reason");
479
+ if (hasStatusReason) {
480
+ return;
481
+ }
482
+ this.execute(db, "ALTER TABLE tasks ADD COLUMN status_reason TEXT;");
483
+ }
484
+ ensureBoardDefaultColumn(db) {
485
+ const columns = this.queryAll(db, "PRAGMA table_info(boards);");
486
+ const hasDefaultColumn = columns.some((column) => column.name === "is_default");
487
+ if (hasDefaultColumn) {
488
+ return;
489
+ }
490
+ this.execute(db, "ALTER TABLE boards ADD COLUMN is_default INTEGER NOT NULL DEFAULT 0;");
491
+ }
492
+ }
493
+ function normalizeEntityId(value, label) {
494
+ const normalized = normalizeAgentId(value);
495
+ if (!normalized) {
496
+ throw new Error(`${label} cannot be empty.`);
497
+ }
498
+ return normalized;
499
+ }
500
+ function normalizeTaskStatus(rawStatus, allowEmpty = false) {
501
+ const normalized = (rawStatus?.trim().toLowerCase() || (allowEmpty ? "" : TASK_STATUSES[0])).trim();
502
+ if (!normalized) {
503
+ throw new Error("Task status cannot be empty.");
504
+ }
505
+ if (!TASK_STATUSES.includes(normalized)) {
506
+ throw new Error(`Task status must be one of: ${TASK_STATUSES.join(", ")}.`);
507
+ }
508
+ return normalized;
509
+ }
510
+ function normalizeTaskStatusReason(status, rawReason) {
511
+ const reason = rawReason?.trim();
512
+ if ((status === "pending" || status === "blocked") && !reason) {
513
+ throw new Error(`Reason is required when task status is \"${status}\".`);
514
+ }
515
+ return reason || null;
516
+ }
517
+ function normalizeTaskProject(rawProject) {
518
+ const normalized = rawProject?.trim();
519
+ if (!normalized) {
520
+ return DEFAULT_TASK_PROJECT;
521
+ }
522
+ return normalized;
523
+ }
524
+ function toTaskEntry(row) {
525
+ return {
526
+ createdAt: row.created_at,
527
+ createdBy: row.created_by_agent_id,
528
+ content: row.content,
529
+ };
530
+ }
531
+ function createEntityId(prefixSource) {
532
+ const prefix = normalizeAgentId(prefixSource) || "item";
533
+ return `${prefix}-${randomUUID().slice(0, 8)}`;
534
+ }
535
+ function resolveTaskListLimit(rawLimit) {
536
+ if (!Number.isFinite(rawLimit)) {
537
+ return MAX_TASK_LIST_LIMIT;
538
+ }
539
+ const parsedLimit = Math.trunc(rawLimit ?? MAX_TASK_LIST_LIMIT);
540
+ if (parsedLimit <= 0) {
541
+ return 1;
542
+ }
543
+ return Math.min(parsedLimit, MAX_TASK_LIST_LIMIT);
544
+ }
545
+ function normalizeOptionalAssignee(rawAssignee) {
546
+ if (rawAssignee === undefined) {
547
+ return undefined;
548
+ }
549
+ const normalized = normalizeAgentId(rawAssignee);
550
+ if (!normalized) {
551
+ throw new Error("assignee cannot be empty.");
552
+ }
553
+ return normalized;
554
+ }
555
+ function collectAssignableAgents(manifests, actorId) {
556
+ const normalizedActorId = normalizeAgentId(actorId) || DEFAULT_AGENT_ID;
557
+ const directReporteesByManager = new Map();
558
+ for (const manifest of manifests) {
559
+ const managerId = normalizeAgentId(manifest.metadata.reportsTo ?? "");
560
+ if (!managerId) {
561
+ continue;
562
+ }
563
+ const reportees = directReporteesByManager.get(managerId) ?? [];
564
+ reportees.push(manifest.agentId);
565
+ directReporteesByManager.set(managerId, reportees);
566
+ }
567
+ const allowed = new Set([normalizedActorId]);
568
+ const queue = [...(directReporteesByManager.get(normalizedActorId) ?? [])];
569
+ while (queue.length > 0) {
570
+ const current = queue.shift();
571
+ if (!current || allowed.has(current)) {
572
+ continue;
573
+ }
574
+ allowed.add(current);
575
+ const nested = directReporteesByManager.get(current) ?? [];
576
+ for (const reporteeId of nested) {
577
+ if (!allowed.has(reporteeId)) {
578
+ queue.push(reporteeId);
579
+ }
580
+ }
581
+ }
582
+ return allowed;
583
+ }
584
+ function isNotFound(error) {
585
+ if (typeof error !== "object" || error === null) {
586
+ return false;
587
+ }
588
+ return error.code === "ENOENT";
589
+ }
590
+ //# sourceMappingURL=board.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board.service.js","sourceRoot":"","sources":["../../../../src/core/boards/application/board.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export interface TaskEntry {
2
+ createdAt: string;
3
+ createdBy: string;
4
+ content: string;
5
+ }
6
+ export interface TaskRecord {
7
+ taskId: string;
8
+ createdAt: string;
9
+ project: string;
10
+ owner: string;
11
+ assignedTo: string;
12
+ title: string;
13
+ description: string;
14
+ status: string;
15
+ statusReason?: string;
16
+ blockers: string[];
17
+ artifacts: TaskEntry[];
18
+ worklog: TaskEntry[];
19
+ }
20
+ export interface CreateTaskOptions {
21
+ title: string;
22
+ description: string;
23
+ project?: string;
24
+ assignedTo?: string;
25
+ status?: string;
26
+ }
27
+ export interface ListTasksOptions {
28
+ assignee?: string;
29
+ limit?: number;
30
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=board.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board.js","sourceRoot":"","sources":["../../../../src/core/boards/domain/board.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export { BoardService } from "./application/board.service.js";
2
+ export type { CreateTaskOptions, ListTasksOptions, TaskEntry, TaskRecord } from "./domain/board.js";
@@ -0,0 +1,2 @@
1
+ export { BoardService } from "./application/board.service.js";
2
+ //# sourceMappingURL=index.js.map