@locusai/sdk 0.8.1 → 0.9.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 (72) hide show
  1. package/dist/agent/__tests__/orchestrator.cleanup.test.d.ts +2 -0
  2. package/dist/agent/__tests__/orchestrator.cleanup.test.d.ts.map +1 -0
  3. package/dist/agent/__tests__/worker.no-changes.test.d.ts +2 -0
  4. package/dist/agent/__tests__/worker.no-changes.test.d.ts.map +1 -0
  5. package/dist/agent/document-fetcher.d.ts.map +1 -1
  6. package/dist/agent/index.d.ts +1 -0
  7. package/dist/agent/index.d.ts.map +1 -1
  8. package/dist/agent/review-service.d.ts.map +1 -1
  9. package/dist/agent/reviewer-worker.d.ts +42 -0
  10. package/dist/agent/reviewer-worker.d.ts.map +1 -0
  11. package/dist/agent/task-executor.d.ts +1 -1
  12. package/dist/agent/task-executor.d.ts.map +1 -1
  13. package/dist/agent/worker.d.ts +47 -4
  14. package/dist/agent/worker.d.ts.map +1 -1
  15. package/dist/agent/worker.js +1102 -506
  16. package/dist/ai/claude-runner.d.ts +5 -0
  17. package/dist/ai/claude-runner.d.ts.map +1 -1
  18. package/dist/ai/codex-runner.d.ts +5 -0
  19. package/dist/ai/codex-runner.d.ts.map +1 -1
  20. package/dist/ai/runner.d.ts +5 -0
  21. package/dist/ai/runner.d.ts.map +1 -1
  22. package/dist/core/config.d.ts +10 -2
  23. package/dist/core/config.d.ts.map +1 -1
  24. package/dist/core/index.d.ts +1 -1
  25. package/dist/core/index.d.ts.map +1 -1
  26. package/dist/core/prompt-builder.d.ts +3 -6
  27. package/dist/core/prompt-builder.d.ts.map +1 -1
  28. package/dist/git/git-utils.d.ts +31 -0
  29. package/dist/git/git-utils.d.ts.map +1 -0
  30. package/dist/git/index.d.ts +3 -0
  31. package/dist/git/index.d.ts.map +1 -0
  32. package/dist/git/pr-service.d.ts +66 -0
  33. package/dist/git/pr-service.d.ts.map +1 -0
  34. package/dist/index-node.d.ts +5 -1
  35. package/dist/index-node.d.ts.map +1 -1
  36. package/dist/index-node.js +2560 -729
  37. package/dist/index.d.ts +0 -3
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +17 -49
  40. package/dist/modules/auth.d.ts +3 -0
  41. package/dist/modules/auth.d.ts.map +1 -1
  42. package/dist/modules/tasks.d.ts +0 -5
  43. package/dist/modules/tasks.d.ts.map +1 -1
  44. package/dist/modules/workspaces.d.ts +10 -10
  45. package/dist/modules/workspaces.d.ts.map +1 -1
  46. package/dist/orchestrator.d.ts +38 -5
  47. package/dist/orchestrator.d.ts.map +1 -1
  48. package/dist/planning/agents/architect.d.ts +15 -0
  49. package/dist/planning/agents/architect.d.ts.map +1 -0
  50. package/dist/planning/agents/sprint-organizer.d.ts +14 -0
  51. package/dist/planning/agents/sprint-organizer.d.ts.map +1 -0
  52. package/dist/planning/agents/tech-lead.d.ts +15 -0
  53. package/dist/planning/agents/tech-lead.d.ts.map +1 -0
  54. package/dist/planning/index.d.ts +4 -0
  55. package/dist/planning/index.d.ts.map +1 -0
  56. package/dist/planning/plan-manager.d.ts +52 -0
  57. package/dist/planning/plan-manager.d.ts.map +1 -0
  58. package/dist/planning/planning-meeting.d.ts +36 -0
  59. package/dist/planning/planning-meeting.d.ts.map +1 -0
  60. package/dist/planning/sprint-plan.d.ts +47 -0
  61. package/dist/planning/sprint-plan.d.ts.map +1 -0
  62. package/dist/project/knowledge-base.d.ts +25 -0
  63. package/dist/project/knowledge-base.d.ts.map +1 -0
  64. package/dist/worktree/index.d.ts +3 -0
  65. package/dist/worktree/index.d.ts.map +1 -0
  66. package/dist/worktree/worktree-config.d.ts +58 -0
  67. package/dist/worktree/worktree-config.d.ts.map +1 -0
  68. package/dist/worktree/worktree-manager.d.ts +96 -0
  69. package/dist/worktree/worktree-manager.d.ts.map +1 -0
  70. package/package.json +2 -2
  71. package/dist/modules/ai.d.ts +0 -55
  72. package/dist/modules/ai.d.ts.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import { LocusConfig, LocusEmitter } from "./events.js";
2
- import { AIModule } from "./modules/ai.js";
3
2
  import { AuthModule } from "./modules/auth.js";
4
3
  import { CiModule } from "./modules/ci.js";
5
4
  import { DocsModule } from "./modules/docs.js";
@@ -9,7 +8,6 @@ import { SprintsModule } from "./modules/sprints.js";
9
8
  import { TasksModule } from "./modules/tasks.js";
10
9
  import { WorkspacesModule } from "./modules/workspaces.js";
11
10
  export * from "./events.js";
12
- export * from "./modules/ai.js";
13
11
  export * from "./modules/auth.js";
14
12
  export * from "./modules/ci.js";
15
13
  export * from "./modules/docs.js";
@@ -22,7 +20,6 @@ export declare class LocusClient {
22
20
  private readonly api;
23
21
  readonly emitter: LocusEmitter;
24
22
  readonly auth: AuthModule;
25
- readonly ai: AIModule;
26
23
  readonly tasks: TasksModule;
27
24
  readonly sprints: SprintsModule;
28
25
  readonly workspaces: WorkspacesModule;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAc,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAI3D,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AAExC,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;IACpC,SAAgB,OAAO,EAAE,YAAY,CAAC;IAEtC,SAAgB,IAAI,EAAE,UAAU,CAAC;IACjC,SAAgB,EAAE,EAAE,QAAQ,CAAC;IAC7B,SAAgB,KAAK,EAAE,WAAW,CAAC;IACnC,SAAgB,OAAO,EAAE,aAAa,CAAC;IACvC,SAAgB,UAAU,EAAE,gBAAgB,CAAC;IAC7C,SAAgB,aAAa,EAAE,mBAAmB,CAAC;IACnD,SAAgB,WAAW,EAAE,iBAAiB,CAAC;IAC/C,SAAgB,IAAI,EAAE,UAAU,CAAC;IACjC,SAAgB,EAAE,EAAE,QAAQ,CAAC;gBAEjB,MAAM,EAAE,WAAW;IA8B/B,OAAO,CAAC,qBAAqB;IAmC7B,OAAO,CAAC,iBAAiB;IAmDlB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAOrC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAc,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAI3D,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AAExC,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;IACpC,SAAgB,OAAO,EAAE,YAAY,CAAC;IAEtC,SAAgB,IAAI,EAAE,UAAU,CAAC;IACjC,SAAgB,KAAK,EAAE,WAAW,CAAC;IACnC,SAAgB,OAAO,EAAE,aAAa,CAAC;IACvC,SAAgB,UAAU,EAAE,gBAAgB,CAAC;IAC7C,SAAgB,aAAa,EAAE,mBAAmB,CAAC;IACnD,SAAgB,WAAW,EAAE,iBAAiB,CAAC;IAC/C,SAAgB,IAAI,EAAE,UAAU,CAAC;IACjC,SAAgB,EAAE,EAAE,QAAQ,CAAC;gBAEjB,MAAM,EAAE,WAAW;IA6B/B,OAAO,CAAC,qBAAqB;IAmC7B,OAAO,CAAC,iBAAiB;IAmDlB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAOrC"}
package/dist/index.js CHANGED
@@ -52,8 +52,7 @@ __export(exports_src, {
52
52
  InvitationsModule: () => InvitationsModule,
53
53
  DocsModule: () => DocsModule,
54
54
  CiModule: () => CiModule,
55
- AuthModule: () => AuthModule,
56
- AIModule: () => AIModule
55
+ AuthModule: () => AuthModule
57
56
  });
58
57
  module.exports = __toCommonJS(exports_src);
59
58
  var import_axios = __toESM(require("axios"));
@@ -86,43 +85,6 @@ class BaseModule {
86
85
  }
87
86
  }
88
87
 
89
- // src/modules/ai.ts
90
- class AIModule extends BaseModule {
91
- async chat(workspaceId, body) {
92
- const { data } = await this.api.post(`/ai/${workspaceId}/chat`, body, { timeout: 300000 });
93
- return data;
94
- }
95
- async detectIntent(workspaceId, body) {
96
- const { data } = await this.api.post(`/ai/${workspaceId}/chat/intent`, body, { timeout: 300000 });
97
- return data;
98
- }
99
- async executeIntent(workspaceId, body) {
100
- const { data } = await this.api.post(`/ai/${workspaceId}/chat/execute`, body, { timeout: 300000 });
101
- return data;
102
- }
103
- async listSessions(workspaceId) {
104
- const { data } = await this.api.get(`/ai/${workspaceId}/sessions`);
105
- return data;
106
- }
107
- async getSession(workspaceId, sessionId) {
108
- const { data } = await this.api.get(`/ai/${workspaceId}/session/${sessionId}`);
109
- return data;
110
- }
111
- getChatStreamUrl(workspaceId, sessionId) {
112
- return `${this.api.defaults.baseURL}/ai/${workspaceId}/chat/stream?sessionId=${sessionId}`;
113
- }
114
- async deleteSession(workspaceId, sessionId) {
115
- await this.api.delete(`/ai/${workspaceId}/session/${sessionId}`);
116
- }
117
- async shareSession(workspaceId, sessionId, body) {
118
- await this.api.post(`/ai/${workspaceId}/session/${sessionId}/share`, body);
119
- }
120
- async getSharedSession(sessionId) {
121
- const { data } = await this.api.get(`/ai/shared/${sessionId}`);
122
- return data;
123
- }
124
- }
125
-
126
88
  // src/modules/auth.ts
127
89
  class AuthModule extends BaseModule {
128
90
  async getProfile() {
@@ -149,6 +111,10 @@ class AuthModule extends BaseModule {
149
111
  const { data } = await this.api.post("/auth/complete-registration", body);
150
112
  return data;
151
113
  }
114
+ async deleteAccount() {
115
+ const { data } = await this.api.delete("/auth/account");
116
+ return data;
117
+ }
152
118
  }
153
119
 
154
120
  // src/modules/ci.ts
@@ -346,10 +312,6 @@ class TasksModule extends BaseModule {
346
312
  updates
347
313
  });
348
314
  }
349
- async getContext(id, workspaceId) {
350
- const { data } = await this.api.get(`/workspaces/${workspaceId}/tasks/${id}/context`);
351
- return data;
352
- }
353
315
  }
354
316
 
355
317
  // src/modules/workspaces.ts
@@ -386,10 +348,6 @@ class WorkspacesModule extends BaseModule {
386
348
  const { data } = await this.api.get(`/workspaces/${id}/stats`);
387
349
  return data;
388
350
  }
389
- async getManifestStatus(workspaceId) {
390
- const { data } = await this.api.get(`/workspaces/${workspaceId}/manifest-status`);
391
- return data;
392
- }
393
351
  async getActivity(id, limit) {
394
352
  const { data } = await this.api.get(`/workspaces/${id}/activity`, {
395
353
  params: { limit }
@@ -400,6 +358,18 @@ class WorkspacesModule extends BaseModule {
400
358
  const { data } = await this.api.post(`/workspaces/${id}/dispatch`, { workerId, sprintId });
401
359
  return data.task;
402
360
  }
361
+ async heartbeat(workspaceId, agentId, currentTaskId, status) {
362
+ const { data } = await this.api.post(`/workspaces/${workspaceId}/agents/heartbeat`, {
363
+ agentId,
364
+ currentTaskId: currentTaskId ?? null,
365
+ status: status ?? "WORKING"
366
+ });
367
+ return data.agent;
368
+ }
369
+ async getAgents(workspaceId) {
370
+ const { data } = await this.api.get(`/workspaces/${workspaceId}/agents`);
371
+ return data.agents;
372
+ }
403
373
  async listApiKeys(workspaceId) {
404
374
  const { data } = await this.api.get(`/workspaces/${workspaceId}/api-keys`);
405
375
  return data.apiKeys;
@@ -418,7 +388,6 @@ class LocusClient {
418
388
  api;
419
389
  emitter;
420
390
  auth;
421
- ai;
422
391
  tasks;
423
392
  sprints;
424
393
  workspaces;
@@ -438,7 +407,6 @@ class LocusClient {
438
407
  });
439
408
  this.setupInterceptors();
440
409
  this.auth = new AuthModule(this.api, this.emitter);
441
- this.ai = new AIModule(this.api, this.emitter);
442
410
  this.tasks = new TasksModule(this.api, this.emitter);
443
411
  this.sprints = new SprintsModule(this.api, this.emitter);
444
412
  this.workspaces = new WorkspacesModule(this.api, this.emitter);
@@ -16,5 +16,8 @@ export declare class AuthModule extends BaseModule {
16
16
  }>;
17
17
  verifyLogin(body: VerifyOtp): Promise<LoginResponse>;
18
18
  completeRegistration(body: CompleteRegistration): Promise<LoginResponse>;
19
+ deleteAccount(): Promise<{
20
+ success: boolean;
21
+ }>;
19
22
  }
20
23
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/modules/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,IAAI,EACJ,SAAS,EACV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,qBAAa,UAAW,SAAQ,UAAU;IAClC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,aAAa,IAAI,OAAO,CAAC;QAC7B,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IAKI,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAQhE,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAQ7D,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;IAQpD,oBAAoB,CACxB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,aAAa,CAAC;CAO1B"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/modules/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,IAAI,EACJ,SAAS,EACV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,qBAAa,UAAW,SAAQ,UAAU;IAClC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,aAAa,IAAI,OAAO,CAAC;QAC7B,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IAKI,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAQhE,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAQ7D,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;IAQpD,oBAAoB,CACxB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,aAAa,CAAC;IAQnB,aAAa,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CAMrD"}
@@ -21,10 +21,5 @@ export declare class TasksModule extends BaseModule {
21
21
  getBacklog(workspaceId: string): Promise<Task[]>;
22
22
  addComment(id: string, workspaceId: string, body: AddComment): Promise<Comment>;
23
23
  batchUpdate(ids: string[], workspaceId: string, updates: UpdateTask): Promise<void>;
24
- /**
25
- * Fetch the formatted context for a task (Project Manifest + Task Details).
26
- * This is used by the local AI agent to align with the project.
27
- */
28
- getContext(id: string, workspaceId: string): Promise<string>;
29
24
  }
30
25
  //# sourceMappingURL=tasks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/modules/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,OAAO,EAEP,UAAU,EACV,IAAI,EAEJ,UAAU,EAEV,UAAU,EACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;CACpC;AAED,qBAAa,WAAY,SAAQ,UAAU;IACzC;;OAEG;IACG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAsB3E;;;OAGG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAYrE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvD,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5D,MAAM,CACV,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,IAAI,CAAC;IAQV,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAOhD,UAAU,CACd,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,OAAO,CAAC;IAQb,WAAW,CACf,GAAG,EAAE,MAAM,EAAE,EACb,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,IAAI,CAAC;IAOhB;;;OAGG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAMnE"}
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/modules/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,OAAO,EAEP,UAAU,EACV,IAAI,EAEJ,UAAU,EAEV,UAAU,EACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;CACpC;AAED,qBAAa,WAAY,SAAQ,UAAU;IACzC;;OAEG;IACG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAsB3E;;;OAGG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAYrE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvD,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5D,MAAM,CACV,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,IAAI,CAAC;IAQV,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAOhD,UAAU,CACd,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,OAAO,CAAC;IAQb,WAAW,CACf,GAAG,EAAE,MAAM,EAAE,EACb,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,IAAI,CAAC;CAMjB"}
@@ -1,4 +1,4 @@
1
- import { CreateWorkspace, Event, ManifestStatusResponse, Task, UpdateWorkspace, Workspace, WorkspaceStats } from "@locusai/shared";
1
+ import { AgentRegistrationInfo, CreateWorkspace, Event, Task, UpdateWorkspace, Workspace, WorkspaceStats } from "@locusai/shared";
2
2
  import { BaseModule } from "./base.js";
3
3
  export declare class WorkspacesModule extends BaseModule {
4
4
  listAll(): Promise<Workspace[]>;
@@ -11,21 +11,21 @@ export declare class WorkspacesModule extends BaseModule {
11
11
  update(id: string, body: UpdateWorkspace): Promise<Workspace>;
12
12
  delete(id: string): Promise<void>;
13
13
  getStats(id: string): Promise<WorkspaceStats>;
14
- /**
15
- * Get detailed manifest completion status for a workspace.
16
- * Returns completion percentage and missing fields.
17
- */
18
- getManifestStatus(workspaceId: string): Promise<ManifestStatusResponse>;
19
14
  getActivity(id: string, limit?: number): Promise<Event[]>;
20
15
  /**
21
16
  * Dispatch a task from the workspace backlog to an agent.
22
- * Atomically moves a task from BACKLOG to IN_PROGRESS and assigns it.
17
+ * Uses server-side locking to prevent double-assignment.
23
18
  */
19
+ dispatch(id: string, workerId: string, sprintId?: string): Promise<Task>;
24
20
  /**
25
- * Dispatch a task from the workspace backlog to an agent.
26
- * Atomically moves a task from BACKLOG to IN_PROGRESS and assigns it.
21
+ * Send an agent heartbeat to the API.
22
+ * Creates or updates the agent registration with current status.
27
23
  */
28
- dispatch(id: string, workerId: string, sprintId?: string): Promise<Task>;
24
+ heartbeat(workspaceId: string, agentId: string, currentTaskId?: string | null, status?: "IDLE" | "WORKING" | "COMPLETED" | "FAILED"): Promise<AgentRegistrationInfo>;
25
+ /**
26
+ * Get active agents for a workspace.
27
+ */
28
+ getAgents(workspaceId: string): Promise<AgentRegistrationInfo[]>;
29
29
  listApiKeys(workspaceId: string): Promise<WorkspaceApiKey[]>;
30
30
  createApiKey(workspaceId: string, name: string): Promise<WorkspaceApiKey>;
31
31
  deleteApiKey(workspaceId: string, keyId: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../src/modules/workspaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EACf,KAAK,EACL,sBAAsB,EACtB,IAAI,EAEJ,eAAe,EACf,SAAS,EAET,cAAc,EAEf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,qBAAa,gBAAiB,SAAQ,UAAU;IACxC,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAK/B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAO9C,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IASrE,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC;IAQ5D,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAKvC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC;IAQ7D,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAOnD;;;OAGG;IACG,iBAAiB,CACrB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,sBAAsB,CAAC;IAO5B,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAU/D;;;OAGG;IACH;;;OAGG;IACG,QAAQ,CACZ,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IAYV,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAO5D,YAAY,CAChB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,eAAe,CAAC;IAQrB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGtE;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../src/modules/workspaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,qBAAqB,EAErB,eAAe,EACf,KAAK,EACL,IAAI,EAEJ,eAAe,EACf,SAAS,EAET,cAAc,EAEf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,qBAAa,gBAAiB,SAAQ,UAAU;IACxC,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAK/B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAO9C,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IASrE,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC;IAQ5D,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAKvC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC;IAQ7D,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAO7C,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAU/D;;;OAGG;IACG,QAAQ,CACZ,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IAYhB;;;OAGG;IACG,SAAS,CACb,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,EAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GACnD,OAAO,CAAC,qBAAqB,CAAC;IAYjC;;OAEG;IACG,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAWhE,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAO5D,YAAY,CAChB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,eAAe,CAAC;IAQrB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGtE;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB"}
@@ -2,6 +2,7 @@ import { ChildProcess } from "node:child_process";
2
2
  import { Task } from "@locusai/shared";
3
3
  import { EventEmitter } from "events";
4
4
  import type { AiProvider } from "./ai/runner.js";
5
+ import type { WorktreeCleanupPolicy } from "./worktree/worktree-config.js";
5
6
  export interface AgentConfig {
6
7
  id: string;
7
8
  maxConcurrentTasks: number;
@@ -14,6 +15,8 @@ export interface AgentState {
14
15
  tasksFailed: number;
15
16
  lastHeartbeat: Date;
16
17
  process?: ChildProcess;
18
+ worktreePath?: string;
19
+ worktreeBranch?: string;
17
20
  }
18
21
  export interface OrchestratorConfig {
19
22
  workspaceId: string;
@@ -24,6 +27,11 @@ export interface OrchestratorConfig {
24
27
  apiKey: string;
25
28
  model?: string;
26
29
  provider?: AiProvider;
30
+ agentCount?: number;
31
+ useWorktrees?: boolean;
32
+ worktreeCleanupPolicy?: WorktreeCleanupPolicy;
33
+ /** Whether to push agent branches to remote after committing */
34
+ autoPush?: boolean;
27
35
  }
28
36
  export declare class AgentOrchestrator extends EventEmitter {
29
37
  private client;
@@ -32,7 +40,12 @@ export declare class AgentOrchestrator extends EventEmitter {
32
40
  private isRunning;
33
41
  private processedTasks;
34
42
  private resolvedSprintId;
43
+ private worktreeManager;
44
+ private heartbeatInterval;
35
45
  constructor(config: OrchestratorConfig);
46
+ private get agentCount();
47
+ private get useWorktrees();
48
+ private get worktreeCleanupPolicy();
36
49
  /**
37
50
  * Resolve the sprint ID - use provided or find active sprint
38
51
  */
@@ -42,17 +55,21 @@ export declare class AgentOrchestrator extends EventEmitter {
42
55
  */
43
56
  start(): Promise<void>;
44
57
  /**
45
- * Main orchestration loop - runs 1 agent continuously
58
+ * Main orchestration loop - spawns N agents and monitors them
46
59
  */
47
60
  private orchestrationLoop;
48
61
  /**
49
- * Spawn a single agent process
62
+ * Spawn a single agent process. Each agent manages its own per-task worktrees.
50
63
  */
51
64
  private spawnAgent;
52
65
  /**
53
- * Reap completed agents
66
+ * Resolve the worker script path from the SDK module location
54
67
  */
55
- private reapAgents;
68
+ private resolveWorkerPath;
69
+ /**
70
+ * Start monitoring agent heartbeats for stale detection
71
+ */
72
+ private startHeartbeatMonitor;
56
73
  /**
57
74
  * Get available tasks in sprint
58
75
  */
@@ -74,7 +91,17 @@ export declare class AgentOrchestrator extends EventEmitter {
74
91
  */
75
92
  stop(): Promise<void>;
76
93
  /**
77
- * Cleanup - kill all agent processes
94
+ * Stop a specific agent by ID
95
+ */
96
+ stopAgent(agentId: string): boolean;
97
+ /**
98
+ * Kill a process and all its descendants.
99
+ * Sends SIGTERM first to allow graceful shutdown, which triggers the worker's
100
+ * signal handler to abort the active Claude/Codex CLI process.
101
+ */
102
+ private killProcessTree;
103
+ /**
104
+ * Cleanup - kill all agent processes and worktrees
78
105
  */
79
106
  private cleanup;
80
107
  /**
@@ -82,10 +109,16 @@ export declare class AgentOrchestrator extends EventEmitter {
82
109
  */
83
110
  getStats(): {
84
111
  activeAgents: number;
112
+ agentCount: number;
113
+ useWorktrees: boolean;
85
114
  processedTasks: number;
86
115
  totalTasksCompleted: number;
87
116
  totalTasksFailed: number;
88
117
  };
118
+ /**
119
+ * Get all agent states for status display
120
+ */
121
+ getAgentStates(): AgentState[];
89
122
  private sleep;
90
123
  }
91
124
  //# sourceMappingURL=orchestrator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAS,MAAM,oBAAoB,CAAC;AAIzD,OAAO,EAAE,IAAI,EAA4B,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAIjD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACpD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,UAAU,CAAC;CACvB;AAED,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,MAAM,CAAsC;IACpD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,gBAAgB,CAAuB;gBAEnC,MAAM,EAAE,kBAAkB;IAStC;;OAEG;YACW,eAAe;IAwB7B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5B;;OAEG;YACW,iBAAiB;IA4C/B;;OAEG;YACW,UAAU;IA6HxB;;OAEG;YACW,UAAU;IAKxB;;OAEG;YACW,iBAAiB;IAc/B;;OAEG;IACG,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IA2C9D;;OAEG;IACG,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IA4BhB;;OAEG;IACG,QAAQ,CACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;IAyBhB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B;;OAEG;YACW,OAAO;IAWrB;;OAEG;IACH,QAAQ;;;;;;IAeR,OAAO,CAAC,KAAK;CAGd"}
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Architect Agent Persona
3
+ *
4
+ * Phase 2 of the planning meeting. Reviews the Tech Lead's task
5
+ * breakdown and refines it with dependency analysis, risk assessment,
6
+ * and task splitting/merging recommendations.
7
+ */
8
+ export interface ArchitectInput {
9
+ directive: string;
10
+ projectContext: string;
11
+ techLeadOutput: string;
12
+ feedback?: string;
13
+ }
14
+ export declare function buildArchitectPrompt(input: ArchitectInput): string;
15
+ //# sourceMappingURL=architect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"architect.d.ts","sourceRoot":"","sources":["../../../src/planning/agents/architect.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CA+DlE"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Sprint Organizer Agent Persona
3
+ *
4
+ * Phase 3 (final) of the planning meeting. Takes the Architect's
5
+ * refined task list and produces the final sprint plan with
6
+ * name, goal, estimated duration, and organized task assignments.
7
+ */
8
+ export interface SprintOrganizerInput {
9
+ directive: string;
10
+ architectOutput: string;
11
+ feedback?: string;
12
+ }
13
+ export declare function buildSprintOrganizerPrompt(input: SprintOrganizerInput): string;
14
+ //# sourceMappingURL=sprint-organizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sprint-organizer.d.ts","sourceRoot":"","sources":["../../../src/planning/agents/sprint-organizer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,oBAAoB,GAC1B,MAAM,CAoER"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Tech Lead Agent Persona
3
+ *
4
+ * Phase 1 of the planning meeting. Reads the CEO directive,
5
+ * project context, and codebase structure to produce an initial
6
+ * task breakdown with technical approach for each task.
7
+ */
8
+ export interface TechLeadInput {
9
+ directive: string;
10
+ projectContext: string;
11
+ codebaseIndex: string;
12
+ feedback?: string;
13
+ }
14
+ export declare function buildTechLeadPrompt(input: TechLeadInput): string;
15
+ //# sourceMappingURL=tech-lead.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tech-lead.d.ts","sourceRoot":"","sources":["../../../src/planning/agents/tech-lead.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CA6DhE"}
@@ -0,0 +1,4 @@
1
+ export { PlanManager } from "./plan-manager.js";
2
+ export { PlanningMeeting, type PlanningMeetingConfig, type PlanningMeetingResult, type PlanningPhase, } from "./planning-meeting.js";
3
+ export { type PlannedTask, parseSprintPlanFromAI, plannedTasksToCreatePayloads, type SprintPlan, type SprintPlanRisk, sprintPlanToMarkdown, } from "./sprint-plan.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/planning/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,aAAa,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,WAAW,EAChB,qBAAqB,EACrB,4BAA4B,EAC5B,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,52 @@
1
+ import type { Sprint, Task } from "@locusai/shared";
2
+ import type { LocusClient } from "../index.js";
3
+ import { type SprintPlan } from "./sprint-plan.js";
4
+ /**
5
+ * Manages the lifecycle of sprint plans:
6
+ * save, load, list, approve, reject, cancel.
7
+ */
8
+ export declare class PlanManager {
9
+ private projectPath;
10
+ private plansDir;
11
+ constructor(projectPath: string);
12
+ /**
13
+ * Save a sprint plan to disk as both JSON (for machine) and Markdown (for human).
14
+ */
15
+ save(plan: SprintPlan): string;
16
+ /**
17
+ * Load a plan by ID or slug.
18
+ */
19
+ load(idOrSlug: string): SprintPlan | null;
20
+ /**
21
+ * List all plans, optionally filtered by status.
22
+ */
23
+ list(status?: SprintPlan["status"]): SprintPlan[];
24
+ /**
25
+ * Approve a plan: create a sprint and tasks via the API.
26
+ * Returns the created sprint and tasks.
27
+ */
28
+ approve(idOrSlug: string, client: LocusClient, workspaceId: string): Promise<{
29
+ sprint: Sprint;
30
+ tasks: Task[];
31
+ }>;
32
+ /**
33
+ * Reject a plan with feedback. The plan is marked as rejected
34
+ * and the feedback is stored for re-planning.
35
+ */
36
+ reject(idOrSlug: string, feedback: string): SprintPlan;
37
+ /**
38
+ * Cancel a plan. Removes it from the pending list.
39
+ */
40
+ cancel(idOrSlug: string): void;
41
+ /**
42
+ * Delete a plan's files entirely.
43
+ */
44
+ delete(idOrSlug: string): void;
45
+ /**
46
+ * Get the markdown content of a plan for display.
47
+ */
48
+ getMarkdown(idOrSlug: string): string | null;
49
+ private ensurePlansDir;
50
+ private slugify;
51
+ }
52
+ //# sourceMappingURL=plan-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-manager.d.ts","sourceRoot":"","sources":["../../src/planning/plan-manager.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAEL,KAAK,UAAU,EAEhB,MAAM,kBAAkB,CAAC;AAE1B;;;GAGG;AACH,qBAAa,WAAW;IAGV,OAAO,CAAC,WAAW;IAF/B,OAAO,CAAC,QAAQ,CAAS;gBAEL,WAAW,EAAE,MAAM;IAIvC;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IAa9B;;OAEG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAoBzC;;OAEG;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,UAAU,EAAE;IA4BjD;;;OAGG;IACG,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,IAAI,EAAE,CAAA;KAAE,CAAC;IA4C7C;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU;IAmBtD;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAW9B;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IA6B9B;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAM5C,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,OAAO;CAMhB"}
@@ -0,0 +1,36 @@
1
+ import type { AiRunner } from "../ai/runner.js";
2
+ import { type SprintPlan } from "./sprint-plan.js";
3
+ export type PlanningPhase = "tech-lead" | "architect" | "sprint-organizer" | "complete";
4
+ export interface PlanningMeetingConfig {
5
+ projectPath: string;
6
+ aiRunner: AiRunner;
7
+ log?: (message: string, level?: "info" | "success" | "warn" | "error") => void;
8
+ }
9
+ export interface PlanningMeetingResult {
10
+ plan: SprintPlan;
11
+ /** Raw outputs from each phase for debugging/transparency */
12
+ phaseOutputs: {
13
+ techLead: string;
14
+ architect: string;
15
+ sprintOrganizer: string;
16
+ };
17
+ }
18
+ /**
19
+ * Orchestrates a multi-phase planning meeting where AI agent personas
20
+ * collaborate to produce a sprint plan.
21
+ *
22
+ * Flow: CEO Directive → Tech Lead → Architect → Sprint Organizer → Sprint Plan
23
+ */
24
+ export declare class PlanningMeeting {
25
+ private projectPath;
26
+ private aiRunner;
27
+ private log;
28
+ constructor(config: PlanningMeetingConfig);
29
+ /**
30
+ * Run the full planning meeting pipeline.
31
+ */
32
+ run(directive: string, feedback?: string): Promise<PlanningMeetingResult>;
33
+ private getProjectContext;
34
+ private getCodebaseIndex;
35
+ }
36
+ //# sourceMappingURL=planning-meeting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planning-meeting.d.ts","sourceRoot":"","sources":["../../src/planning/planning-meeting.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAMhD,OAAO,EAAyB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE1E,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,WAAW,GACX,kBAAkB,GAClB,UAAU,CAAC;AAEf,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,CAAC,EAAE,CACJ,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,KAC1C,IAAI,CAAC;CACX;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,UAAU,CAAC;IACjB,6DAA6D;IAC7D,YAAY,EAAE;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,GAAG,CAGD;gBAEE,MAAM,EAAE,qBAAqB;IAMzC;;OAEG;IACG,GAAG,CACP,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,qBAAqB,CAAC;IAuDjC,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,gBAAgB;CA8BzB"}
@@ -0,0 +1,47 @@
1
+ import { type AssigneeRole, type CreateTask, type TaskPriority } from "@locusai/shared";
2
+ export interface PlannedTask {
3
+ /** Sequential index within the plan (1-based) */
4
+ index: number;
5
+ title: string;
6
+ description: string;
7
+ assigneeRole: AssigneeRole;
8
+ priority: TaskPriority;
9
+ /** Relative complexity: 1 (trivial) to 5 (very complex) */
10
+ complexity: number;
11
+ acceptanceCriteria: string[];
12
+ labels: string[];
13
+ }
14
+ export interface SprintPlanRisk {
15
+ description: string;
16
+ mitigation: string;
17
+ severity: "low" | "medium" | "high";
18
+ }
19
+ export interface SprintPlan {
20
+ id: string;
21
+ name: string;
22
+ goal: string;
23
+ directive: string;
24
+ tasks: PlannedTask[];
25
+ risks: SprintPlanRisk[];
26
+ estimatedDays: number;
27
+ status: "pending" | "approved" | "rejected" | "cancelled";
28
+ feedback?: string;
29
+ createdAt: string;
30
+ updatedAt: string;
31
+ }
32
+ /**
33
+ * Render a sprint plan as readable markdown for CEO review.
34
+ */
35
+ export declare function sprintPlanToMarkdown(plan: SprintPlan): string;
36
+ /**
37
+ * Convert planned tasks to API-ready CreateTask payloads.
38
+ * Sets the `order` field based on plan index so dispatch respects the planned ordering.
39
+ */
40
+ export declare function plannedTasksToCreatePayloads(plan: SprintPlan, sprintId: string): CreateTask[];
41
+ /**
42
+ * Parse a sprint plan from a JSON string (as returned by AI).
43
+ * Validates required fields, assigns defaults, and ensures tasks
44
+ * are topologically sorted by their dependencies.
45
+ */
46
+ export declare function parseSprintPlanFromAI(raw: string, directive: string): SprintPlan;
47
+ //# sourceMappingURL=sprint-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sprint-plan.d.ts","sourceRoot":"","sources":["../../src/planning/sprint-plan.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,YAAY,EAElB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,WAAW;IAC1B,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,YAAY,CAAC;IACvB,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CA+D7D;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,GACf,UAAU,EAAE,CAgBd;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAChB,UAAU,CA0CZ"}
@@ -0,0 +1,25 @@
1
+ export interface ProjectInfo {
2
+ name: string;
3
+ mission: string;
4
+ techStack: string[];
5
+ }
6
+ export interface ProgressEvent {
7
+ type: "task_completed" | "sprint_started" | "sprint_completed" | "blocker" | "pr_opened" | "pr_reviewed" | "pr_merged" | "exec_completed";
8
+ title: string;
9
+ details?: string;
10
+ timestamp?: Date;
11
+ }
12
+ export declare class KnowledgeBase {
13
+ private contextPath;
14
+ private progressPath;
15
+ constructor(projectPath: string);
16
+ readContext(): string;
17
+ readProgress(): string;
18
+ updateContext(content: string): void;
19
+ updateProgress(event: ProgressEvent): void;
20
+ getFullContext(): string;
21
+ initialize(info: ProjectInfo): void;
22
+ get exists(): boolean;
23
+ private ensureDir;
24
+ }
25
+ //# sourceMappingURL=knowledge-base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-base.d.ts","sourceRoot":"","sources":["../../src/project/knowledge-base.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EACA,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,SAAS,GACT,WAAW,GACX,aAAa,GACb,WAAW,GACX,gBAAgB,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAS;gBAEjB,WAAW,EAAE,MAAM;IAK/B,WAAW,IAAI,MAAM;IAOrB,YAAY,IAAI,MAAM;IAOtB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKpC,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IA2C1C,cAAc,IAAI,MAAM;IAiBxB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAiCnC,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,OAAO,CAAC,SAAS;CAMlB"}
@@ -0,0 +1,3 @@
1
+ export { type CreateWorktreeOptions, type CreateWorktreeResult, DEFAULT_WORKTREE_CONFIG, WORKTREE_BRANCH_PREFIX, WORKTREE_ROOT_DIR, type WorktreeCleanupPolicy, type WorktreeConfig, type WorktreeInfo, } from "./worktree-config.js";
2
+ export { WorktreeManager } from "./worktree-manager.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/worktree/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}