@cospacehq/server 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/.turbo/turbo-typecheck.log +4 -0
  3. package/dist/agent-runtime.d.ts +45 -0
  4. package/dist/agent-runtime.d.ts.map +1 -0
  5. package/dist/agent-runtime.js +374 -0
  6. package/dist/agent-runtime.js.map +1 -0
  7. package/dist/config.d.ts +8 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +14 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/db.d.ts +128 -0
  12. package/dist/db.d.ts.map +1 -0
  13. package/dist/db.js +854 -0
  14. package/dist/db.js.map +1 -0
  15. package/dist/index.d.ts +2 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +34 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/model-client.d.ts +43 -0
  20. package/dist/model-client.d.ts.map +1 -0
  21. package/dist/model-client.js +138 -0
  22. package/dist/model-client.js.map +1 -0
  23. package/dist/provider-crypto.d.ts +4 -0
  24. package/dist/provider-crypto.d.ts.map +1 -0
  25. package/dist/provider-crypto.js +30 -0
  26. package/dist/provider-crypto.js.map +1 -0
  27. package/dist/sandbox.d.ts +3 -0
  28. package/dist/sandbox.d.ts.map +1 -0
  29. package/dist/sandbox.js +22 -0
  30. package/dist/sandbox.js.map +1 -0
  31. package/dist/server.d.ts +15 -0
  32. package/dist/server.d.ts.map +1 -0
  33. package/dist/server.js +1296 -0
  34. package/dist/server.js.map +1 -0
  35. package/package.json +33 -0
  36. package/src/agent-runtime.ts +479 -0
  37. package/src/config.ts +21 -0
  38. package/src/db.ts +1197 -0
  39. package/src/index.ts +44 -0
  40. package/src/model-client.ts +187 -0
  41. package/src/provider-crypto.ts +39 -0
  42. package/src/sandbox.ts +26 -0
  43. package/src/server.ts +1548 -0
  44. package/tsconfig.json +8 -0
@@ -0,0 +1,4 @@
1
+
2
+ > @cospacehq/server@0.1.0 build /home/lomonol/Documents/cospace/packages/server
3
+ > tsc -p tsconfig.json
4
+
@@ -0,0 +1,4 @@
1
+
2
+ > @cospacehq/server@0.1.0 typecheck /home/lomonol/Documents/cospace/packages/server
3
+ > tsc -p tsconfig.json --noEmit
4
+
@@ -0,0 +1,45 @@
1
+ import type { Agent, Message, Task, TaskEvent, TypingEvent } from "@cospacehq/shared";
2
+ import type { CoSpaceStore } from "./db.js";
3
+ export type ServerEvent = {
4
+ type: "typing.updated";
5
+ data: TypingEvent;
6
+ } | {
7
+ type: "message.created";
8
+ data: Message;
9
+ } | {
10
+ type: "task.updated";
11
+ data: Task;
12
+ } | {
13
+ type: "task.event";
14
+ data: TaskEvent;
15
+ } | {
16
+ type: "seen.updated";
17
+ data: {
18
+ messageId: string;
19
+ receipts: ReturnType<CoSpaceStore["listReceiptsForMessage"]>;
20
+ };
21
+ };
22
+ export type GeneratedAgentReply = {
23
+ body: string;
24
+ trace: string;
25
+ model: string;
26
+ };
27
+ export type AgentReplyGenerator = (input: {
28
+ agent: Agent;
29
+ incomingMessage: Message;
30
+ latestMessages: Array<{
31
+ senderName: string;
32
+ senderRole: "human" | "agent";
33
+ body: string;
34
+ }>;
35
+ }) => Promise<GeneratedAgentReply>;
36
+ export declare class AgentRuntime {
37
+ private readonly store;
38
+ private readonly emit;
39
+ private readonly generateAgentReply;
40
+ private readonly onDelegatedTask?;
41
+ constructor(store: CoSpaceStore, emit: (event: ServerEvent) => void, generateAgentReply?: AgentReplyGenerator, onDelegatedTask?: (task: Task) => Promise<void>);
42
+ reactToHumanMessage(message: Message): Promise<void>;
43
+ private setTypingState;
44
+ }
45
+ //# sourceMappingURL=agent-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runtime.d.ts","sourceRoot":"","sources":["../src/agent-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAqC,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACzH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GACvC;IACE,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE;QACJ,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,UAAU,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC,CAAC;KAC9D,CAAC;CACH,CAAC;AAEN,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE;IACxC,KAAK,EAAE,KAAK,CAAC;IACb,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5F,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAmOnC,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA+B;IACpD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAsB;IACzD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAgC;gBAG/D,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,EAClC,kBAAkB,CAAC,EAAE,mBAAmB,EACxC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC;IAiBpC,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YA0LnD,cAAc;CAY7B"}
@@ -0,0 +1,374 @@
1
+ function wait(ms) {
2
+ return new Promise((resolve) => setTimeout(resolve, ms));
3
+ }
4
+ function composeAgentReply(agent, incomingText) {
5
+ const lowered = incomingText.toLowerCase();
6
+ if (agent.title.includes("Project Manager")) {
7
+ return {
8
+ body: "I mapped this into execution blocks. UI and Backend can run in parallel after we lock the API schema. I will track checkpoints in this room.",
9
+ trace: "Intent: orchestrate team.\nStep 1: extract deliverables from user message.\nStep 2: split work by domain (UI, backend).\nStep 3: post sequencing guidance."
10
+ };
11
+ }
12
+ if (agent.title.includes("UI")) {
13
+ return {
14
+ body: "I can draft the messenger shell with typing indicators, seen receipts, and expandable traces. If approved, I will also style a mobile-first layout.",
15
+ trace: "Intent: produce UX artifacts.\nContext: user asked for collaborative messenger.\nAction plan: sidebar, timeline, composer, trace drawer, responsive behaviors."
16
+ };
17
+ }
18
+ if (lowered.includes("database") || lowered.includes("schema") || lowered.includes("api")) {
19
+ return {
20
+ body: "I recommend SQLite with normalized tables for projects, agents, messages, and receipts. I can ship migration-safe schema updates next.",
21
+ trace: "Intent: solve backend architecture request.\nSignals: mentions database/api.\nDecision: reinforce local-first persistence with SQLite tables."
22
+ };
23
+ }
24
+ return {
25
+ body: "I can implement this incrementally with explicit safety checks around file writes and model routing. Tell me which slice to execute first.",
26
+ trace: "Intent: acknowledge and move to execution.\nRisk check: file safety and provider abstraction are key.\nNext: ask for smallest actionable slice."
27
+ };
28
+ }
29
+ function parseTaskCommandIntent(rawBody) {
30
+ const trimmed = rawBody.trim();
31
+ if (!trimmed.toLowerCase().startsWith("/task ")) {
32
+ return null;
33
+ }
34
+ const commandBody = trimmed.slice("/task ".length).trim();
35
+ if (!commandBody) {
36
+ return null;
37
+ }
38
+ const [commandToken, ...restParts] = commandBody.split(/\s+/);
39
+ const command = commandToken.toLowerCase();
40
+ const remainder = restParts.join(" ").trim();
41
+ if (command === "write") {
42
+ const separatorIndex = remainder.indexOf(":::");
43
+ if (separatorIndex < 0) {
44
+ return null;
45
+ }
46
+ const filePath = remainder.slice(0, separatorIndex).trim();
47
+ const content = remainder.slice(separatorIndex + 3).trim();
48
+ if (!filePath) {
49
+ return null;
50
+ }
51
+ return {
52
+ actionType: "file_write",
53
+ actionPayload: {
54
+ path: filePath,
55
+ content
56
+ },
57
+ title: `Write ${filePath}`,
58
+ description: `Create or overwrite /${filePath} from delegated /task write command.`
59
+ };
60
+ }
61
+ if (command === "mkdir") {
62
+ if (!remainder) {
63
+ return null;
64
+ }
65
+ return {
66
+ actionType: "file_mkdir",
67
+ actionPayload: { path: remainder },
68
+ title: `Create folder ${remainder}`,
69
+ description: `Create directory /${remainder} from delegated /task mkdir command.`
70
+ };
71
+ }
72
+ if (command === "rename") {
73
+ const [fromPath, toPath] = remainder.split(/\s+/);
74
+ if (!fromPath || !toPath) {
75
+ return null;
76
+ }
77
+ return {
78
+ actionType: "file_rename",
79
+ actionPayload: { path: fromPath, nextPath: toPath },
80
+ title: `Rename ${fromPath} to ${toPath}`,
81
+ description: `Rename /${fromPath} to /${toPath} from delegated /task rename command.`
82
+ };
83
+ }
84
+ if (command === "delete") {
85
+ if (!remainder) {
86
+ return null;
87
+ }
88
+ return {
89
+ actionType: "file_delete",
90
+ actionPayload: { path: remainder },
91
+ title: `Delete ${remainder}`,
92
+ description: `Delete /${remainder} from delegated /task delete command.`
93
+ };
94
+ }
95
+ if (command === "note") {
96
+ if (!remainder) {
97
+ return null;
98
+ }
99
+ return {
100
+ actionType: "none",
101
+ actionPayload: null,
102
+ title: remainder,
103
+ description: "Manual task created from delegated /task note command."
104
+ };
105
+ }
106
+ return null;
107
+ }
108
+ function isFileActionType(value) {
109
+ return value !== "none";
110
+ }
111
+ function chooseTaskAssignee(agents, intent) {
112
+ if (isFileActionType(intent.actionType)) {
113
+ const backendAgent = agents.find((agent) => agent.title.toLowerCase().includes("backend"));
114
+ if (backendAgent) {
115
+ return backendAgent;
116
+ }
117
+ }
118
+ const projectManager = agents.find((agent) => agent.title.toLowerCase().includes("project manager"));
119
+ if (projectManager) {
120
+ return projectManager;
121
+ }
122
+ return agents[0];
123
+ }
124
+ function trimDelegationTitle(prefix, body) {
125
+ const normalized = body.replace(/\s+/g, " ").trim();
126
+ const raw = normalized.length > 96 ? `${normalized.slice(0, 93)}...` : normalized;
127
+ return `${prefix}: ${raw}`;
128
+ }
129
+ function inferNaturalDelegationIntents(rawBody, agents) {
130
+ const normalizedBody = rawBody.trim();
131
+ if (!normalizedBody) {
132
+ return [];
133
+ }
134
+ const lowered = normalizedBody.toLowerCase();
135
+ const explicitDelegationCue = /\b(delegate|delegation|assign|task|todo)\b/.test(lowered);
136
+ const actionCue = /\b(build|implement|create|design|draft|fix|refactor|wire|ship|plan)\b/.test(lowered);
137
+ if (!explicitDelegationCue && !actionCue) {
138
+ return [];
139
+ }
140
+ const uiCue = /\b(ui|frontend|design|layout|css|component|ux)\b/.test(lowered);
141
+ const backendCue = /\b(backend|api|server|database|db|endpoint|schema|auth)\b/.test(lowered);
142
+ const uiAgent = agents.find((agent) => /ui|frontend|designer/i.test(agent.title)) ?? agents.find((agent) => /design/i.test(agent.title));
143
+ const backendAgent = agents.find((agent) => /backend|api|server/i.test(agent.title)) ?? agents.find((agent) => /engineer/i.test(agent.title));
144
+ const projectManager = agents.find((agent) => /project manager/i.test(agent.title)) ?? agents[0] ?? null;
145
+ const intents = [];
146
+ if (uiCue && uiAgent) {
147
+ intents.push({
148
+ assignee: uiAgent,
149
+ title: trimDelegationTitle("UI Task", normalizedBody),
150
+ description: `Delegated from chat intent: ${normalizedBody}`
151
+ });
152
+ }
153
+ if (backendCue && backendAgent) {
154
+ if (!intents.some((intent) => intent.assignee.id === backendAgent.id)) {
155
+ intents.push({
156
+ assignee: backendAgent,
157
+ title: trimDelegationTitle("Backend Task", normalizedBody),
158
+ description: `Delegated from chat intent: ${normalizedBody}`
159
+ });
160
+ }
161
+ }
162
+ if (intents.length === 0 && explicitDelegationCue && projectManager) {
163
+ intents.push({
164
+ assignee: projectManager,
165
+ title: trimDelegationTitle("Planning Task", normalizedBody),
166
+ description: `Delegated from chat intent: ${normalizedBody}`
167
+ });
168
+ }
169
+ return intents;
170
+ }
171
+ export class AgentRuntime {
172
+ store;
173
+ emit;
174
+ generateAgentReply;
175
+ onDelegatedTask;
176
+ constructor(store, emit, generateAgentReply, onDelegatedTask) {
177
+ this.store = store;
178
+ this.emit = emit;
179
+ this.onDelegatedTask = onDelegatedTask;
180
+ this.generateAgentReply =
181
+ generateAgentReply ??
182
+ (async (input) => {
183
+ const fallback = composeAgentReply(input.agent, input.incomingMessage.body);
184
+ return {
185
+ ...fallback,
186
+ model: input.agent.model
187
+ };
188
+ });
189
+ }
190
+ async reactToHumanMessage(message) {
191
+ const agents = this.store.listAgentsForProject(message.projectId);
192
+ const taskIntent = parseTaskCommandIntent(message.body);
193
+ if (taskIntent && agents.length > 0) {
194
+ const delegator = agents.find((agent) => agent.title.toLowerCase().includes("project manager")) ?? agents[0];
195
+ const assignee = chooseTaskAssignee(agents, taskIntent);
196
+ const delegatedTask = this.store.createTask({
197
+ projectId: message.projectId,
198
+ title: taskIntent.title,
199
+ description: taskIntent.description,
200
+ status: "queued",
201
+ approvalStatus: isFileActionType(taskIntent.actionType) ? "pending" : "not_required",
202
+ actionType: taskIntent.actionType,
203
+ actionPayload: taskIntent.actionPayload,
204
+ assigneeAgentId: assignee.id,
205
+ delegatedByMessageId: message.id,
206
+ createdBy: "agent"
207
+ });
208
+ this.emit({ type: "task.updated", data: delegatedTask });
209
+ const createdEvent = this.store.recordTaskEvent({
210
+ taskId: delegatedTask.id,
211
+ projectId: delegatedTask.projectId,
212
+ eventType: "created",
213
+ actorId: delegator?.id ?? "agent-delegator",
214
+ detail: `Delegated via /task command by ${delegator?.name ?? "agent"}.`
215
+ });
216
+ this.emit({ type: "task.event", data: createdEvent });
217
+ const delegationMessage = this.store.createAgentMessage({
218
+ projectId: message.projectId,
219
+ senderId: delegator.id,
220
+ senderName: `${delegator.name} (${delegator.title})`,
221
+ body: isFileActionType(taskIntent.actionType)
222
+ ? `Delegated task to ${assignee.name}: ${delegatedTask.title}. Awaiting approval in the Tasks panel.`
223
+ : `Delegated task to ${assignee.name}: ${delegatedTask.title}.`,
224
+ internalTrace: delegator.traceEnabled
225
+ ? `Delegation intent detected from /task command.\nAssignee: ${assignee.name}\nAction: ${delegatedTask.actionType}`
226
+ : null
227
+ });
228
+ this.emit({ type: "message.created", data: delegationMessage });
229
+ if (delegator.seenEnabled) {
230
+ this.store.createSeenReceipt({
231
+ messageId: delegationMessage.id,
232
+ agentId: delegator.id,
233
+ agentName: delegator.name,
234
+ model: delegator.model
235
+ });
236
+ this.emit({
237
+ type: "seen.updated",
238
+ data: {
239
+ messageId: delegationMessage.id,
240
+ receipts: this.store.listReceiptsForMessage(delegationMessage.id)
241
+ }
242
+ });
243
+ }
244
+ if (this.onDelegatedTask) {
245
+ await this.onDelegatedTask(delegatedTask);
246
+ }
247
+ return;
248
+ }
249
+ const naturalDelegations = inferNaturalDelegationIntents(message.body, agents);
250
+ if (naturalDelegations.length > 0) {
251
+ const delegator = agents.find((agent) => agent.title.toLowerCase().includes("project manager")) ?? agents[0];
252
+ const delegatedTasks = [];
253
+ for (const naturalDelegation of naturalDelegations) {
254
+ const delegatedTask = this.store.createTask({
255
+ projectId: message.projectId,
256
+ title: naturalDelegation.title,
257
+ description: naturalDelegation.description,
258
+ status: "queued",
259
+ approvalStatus: "not_required",
260
+ actionType: "none",
261
+ actionPayload: null,
262
+ assigneeAgentId: naturalDelegation.assignee.id,
263
+ delegatedByMessageId: message.id,
264
+ createdBy: "agent"
265
+ });
266
+ this.emit({ type: "task.updated", data: delegatedTask });
267
+ const createdEvent = this.store.recordTaskEvent({
268
+ taskId: delegatedTask.id,
269
+ projectId: delegatedTask.projectId,
270
+ eventType: "created",
271
+ actorId: delegator?.id ?? "agent-delegator",
272
+ detail: `Delegated from natural chat intent by ${delegator?.name ?? "agent"}.`
273
+ });
274
+ this.emit({ type: "task.event", data: createdEvent });
275
+ delegatedTasks.push(delegatedTask);
276
+ if (this.onDelegatedTask) {
277
+ await this.onDelegatedTask(delegatedTask);
278
+ }
279
+ }
280
+ const delegationMessage = this.store.createAgentMessage({
281
+ projectId: message.projectId,
282
+ senderId: delegator.id,
283
+ senderName: `${delegator.name} (${delegator.title})`,
284
+ body: `Structured delegation created ${delegatedTasks.length} task(s): ${delegatedTasks
285
+ .map((task) => `${task.title} -> ${task.assigneeAgentName ?? "Unassigned"}`)
286
+ .join("; ")}`,
287
+ internalTrace: delegator.traceEnabled
288
+ ? `Delegation intent inferred from natural chat.\nTask count: ${delegatedTasks.length}\nSource: ${message.body}`
289
+ : null
290
+ });
291
+ this.emit({ type: "message.created", data: delegationMessage });
292
+ if (delegator.seenEnabled) {
293
+ this.store.createSeenReceipt({
294
+ messageId: delegationMessage.id,
295
+ agentId: delegator.id,
296
+ agentName: delegator.name,
297
+ model: delegator.model
298
+ });
299
+ this.emit({
300
+ type: "seen.updated",
301
+ data: {
302
+ messageId: delegationMessage.id,
303
+ receipts: this.store.listReceiptsForMessage(delegationMessage.id)
304
+ }
305
+ });
306
+ }
307
+ return;
308
+ }
309
+ for (const agent of agents) {
310
+ await this.setTypingState(message.projectId, agent, "thinking");
311
+ await wait(350 + Math.floor(Math.random() * 350));
312
+ await this.setTypingState(message.projectId, agent, "typing");
313
+ await wait(500 + Math.floor(Math.random() * 400));
314
+ const latestMessages = this.store
315
+ .listRecentMessages(message.projectId, 12)
316
+ .map((item) => ({ senderName: item.senderName, senderRole: item.senderRole, body: item.body }));
317
+ let generated;
318
+ try {
319
+ generated = await this.generateAgentReply({
320
+ agent,
321
+ incomingMessage: message,
322
+ latestMessages
323
+ });
324
+ }
325
+ catch (error) {
326
+ const details = error instanceof Error ? error.message : String(error);
327
+ generated = {
328
+ body: `I hit a provider error while generating a response: ${details}`,
329
+ trace: `Provider invocation failed\nError: ${details}`,
330
+ model: agent.model
331
+ };
332
+ }
333
+ const responseMessage = this.store.createAgentMessage({
334
+ projectId: message.projectId,
335
+ senderId: agent.id,
336
+ senderName: `${agent.name} (${agent.title})`,
337
+ body: generated.body,
338
+ internalTrace: agent.traceEnabled ? generated.trace : null
339
+ });
340
+ if (agent.seenEnabled) {
341
+ this.store.createSeenReceipt({
342
+ messageId: responseMessage.id,
343
+ agentId: agent.id,
344
+ agentName: agent.name,
345
+ model: generated.model
346
+ });
347
+ }
348
+ this.emit({ type: "message.created", data: responseMessage });
349
+ if (agent.seenEnabled) {
350
+ this.emit({
351
+ type: "seen.updated",
352
+ data: {
353
+ messageId: responseMessage.id,
354
+ receipts: this.store.listReceiptsForMessage(responseMessage.id)
355
+ }
356
+ });
357
+ }
358
+ await this.setTypingState(message.projectId, agent, "idle");
359
+ }
360
+ }
361
+ async setTypingState(projectId, agent, state) {
362
+ this.emit({
363
+ type: "typing.updated",
364
+ data: {
365
+ projectId,
366
+ agentId: agent.id,
367
+ agentName: agent.name,
368
+ model: agent.model,
369
+ state
370
+ }
371
+ });
372
+ }
373
+ }
374
+ //# sourceMappingURL=agent-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runtime.js","sourceRoot":"","sources":["../src/agent-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type CoSpaceConfig } from "@cospacehq/shared";
2
+ export type ResolvedConfig = Omit<CoSpaceConfig, "workspaceRoot" | "dataDir"> & {
3
+ workspaceRoot: string;
4
+ dataDir: string;
5
+ projectRoot: string;
6
+ };
7
+ export declare function resolveConfig(raw: unknown, configPath: string): ResolvedConfig;
8
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG5E,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,EAAE,eAAe,GAAG,SAAS,CAAC,GAAG;IAC9E,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,CAW9E"}
package/dist/config.js ADDED
@@ -0,0 +1,14 @@
1
+ import { CoSpaceConfigSchema } from "@cospacehq/shared";
2
+ import path from "node:path";
3
+ export function resolveConfig(raw, configPath) {
4
+ const parsed = CoSpaceConfigSchema.parse(raw);
5
+ const configDir = path.dirname(path.resolve(configPath));
6
+ const projectRoot = path.basename(configDir) === ".cospace" ? path.dirname(configDir) : configDir;
7
+ return {
8
+ ...parsed,
9
+ projectRoot,
10
+ workspaceRoot: path.resolve(projectRoot, parsed.workspaceRoot),
11
+ dataDir: path.resolve(projectRoot, parsed.dataDir)
12
+ };
13
+ }
14
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAsB,MAAM,mBAAmB,CAAC;AAC5E,OAAO,IAAI,MAAM,WAAW,CAAC;AAQ7B,MAAM,UAAU,aAAa,CAAC,GAAY,EAAE,UAAkB;IAC5D,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAElG,OAAO;QACL,GAAG,MAAM;QACT,WAAW;QACX,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC;QAC9D,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC;KACnD,CAAC;AACJ,CAAC"}
package/dist/db.d.ts ADDED
@@ -0,0 +1,128 @@
1
+ import type { Agent, Message, Project, ProjectThread, ProviderKind, SeenReceipt, Task, TaskEvent, TaskEventType, TaskActionPayload, TaskActionType, TaskApprovalStatus, TaskStatus } from "@cospacehq/shared";
2
+ type FileActionStatus = "ok" | "error";
3
+ export type ProviderRecord = {
4
+ id: string;
5
+ providerKey: string;
6
+ label: string;
7
+ kind: ProviderKind;
8
+ baseUrl: string;
9
+ defaultModel: string;
10
+ encryptedApiKey: string | null;
11
+ createdAt: string;
12
+ updatedAt: string;
13
+ };
14
+ export declare class CoSpaceStore {
15
+ private readonly db;
16
+ private readonly defaultProjectName;
17
+ constructor(dbPath: string, options?: {
18
+ projectName?: string;
19
+ });
20
+ close(): void;
21
+ getProject(): Project;
22
+ getProjectById(projectId: string): Project | null;
23
+ listProjectThreads(): ProjectThread[];
24
+ listProjectAgentIdsByProject(): Record<string, string[]>;
25
+ createProject(input: {
26
+ name: string;
27
+ }): Project;
28
+ listAgents(): Agent[];
29
+ getAgentById(agentId: string): Agent | null;
30
+ listProjectAgentIds(projectId: string): string[];
31
+ listAgentsForProject(projectId: string): Agent[];
32
+ createAgent(input: {
33
+ name: string;
34
+ title: string;
35
+ model: string;
36
+ providerKey: string | null;
37
+ systemPrompt: string | null;
38
+ seenEnabled: boolean;
39
+ traceEnabled: boolean;
40
+ projectId?: string;
41
+ }): Agent;
42
+ assignAgentToProject(projectId: string, agentId: string): void;
43
+ setProjectAgentIds(projectId: string, agentIds: string[]): string[];
44
+ listMessages(projectId: string): Message[];
45
+ listRecentMessages(projectId: string, limit: number): Message[];
46
+ listReceiptsByProject(projectId: string): Record<string, SeenReceipt[]>;
47
+ listReceiptsForMessage(messageId: string): SeenReceipt[];
48
+ createHumanMessage(input: {
49
+ projectId: string;
50
+ senderName: string;
51
+ body: string;
52
+ }): Message;
53
+ createAgentMessage(input: {
54
+ projectId: string;
55
+ senderId: string;
56
+ senderName: string;
57
+ body: string;
58
+ internalTrace: string | null;
59
+ }): Message;
60
+ createSeenReceipt(input: {
61
+ messageId: string;
62
+ agentId: string;
63
+ agentName: string;
64
+ model: string;
65
+ }): SeenReceipt;
66
+ updateAgentStatus(agentId: string, status: Agent["status"]): void;
67
+ listTasksByProject(projectId: string): Task[];
68
+ listTaskEventsByProject(projectId: string): Record<string, TaskEvent[]>;
69
+ getTaskById(taskId: string): Task | null;
70
+ createTask(input: {
71
+ projectId: string;
72
+ title: string;
73
+ description: string | null;
74
+ status: TaskStatus;
75
+ approvalStatus: TaskApprovalStatus;
76
+ actionType: TaskActionType;
77
+ actionPayload: TaskActionPayload | null;
78
+ assigneeAgentId: string | null;
79
+ delegatedByMessageId: string | null;
80
+ createdBy: string;
81
+ }): Task;
82
+ updateTaskState(input: {
83
+ taskId: string;
84
+ status?: TaskStatus;
85
+ approvalStatus?: TaskApprovalStatus;
86
+ errorMessage?: string | null;
87
+ completedAt?: string | null;
88
+ }): Task;
89
+ listProviderRecords(): ProviderRecord[];
90
+ getProviderRecord(providerKey: string): ProviderRecord | null;
91
+ upsertProviderRecord(input: {
92
+ providerKey: string;
93
+ label: string;
94
+ kind: ProviderKind;
95
+ baseUrl: string;
96
+ defaultModel: string;
97
+ encryptedApiKey?: string | null;
98
+ }): ProviderRecord;
99
+ setAgentBinding(input: {
100
+ agentId: string;
101
+ providerKey: string | null;
102
+ model: string | null;
103
+ }): void;
104
+ setAgentVisibility(input: {
105
+ agentId: string;
106
+ seenEnabled: boolean;
107
+ traceEnabled: boolean;
108
+ }): void;
109
+ recordTaskEvent(input: {
110
+ taskId: string;
111
+ projectId: string;
112
+ eventType: TaskEventType;
113
+ actorId: string;
114
+ detail: string | null;
115
+ }): TaskEvent;
116
+ recordFileAction(input: {
117
+ actorId: string;
118
+ action: string;
119
+ targetPath: string;
120
+ status: FileActionStatus;
121
+ errorMessage: string | null;
122
+ }): void;
123
+ private initSchema;
124
+ private applyMigrations;
125
+ private seedDefaults;
126
+ }
127
+ export {};
128
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}