@locusai/sdk 0.6.0 → 0.7.1

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.
@@ -4,7 +4,6 @@ import type { AiRunner } from "../ai/runner.js";
4
4
  export interface TaskExecutorDeps {
5
5
  aiRunner: AiRunner;
6
6
  projectPath: string;
7
- skipPlanning?: boolean;
8
7
  log: LogFn;
9
8
  }
10
9
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"task-executor.d.ts","sourceRoot":"","sources":["../../src/agent/task-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,GAAG,EAAE,KAAK,CAAC;CACZ;AAED;;GAEG;AACH,qBAAa,YAAY;IAGX,OAAO,CAAC,IAAI;IAFxB,OAAO,CAAC,aAAa,CAAgB;gBAEjB,IAAI,EAAE,gBAAgB;IAIpC,OAAO,CACX,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CA+ClD"}
1
+ {"version":3,"file":"task-executor.d.ts","sourceRoot":"","sources":["../../src/agent/task-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,KAAK,CAAC;CACZ;AAED;;GAEG;AACH,qBAAa,YAAY;IAGX,OAAO,CAAC,IAAI;IAFxB,OAAO,CAAC,aAAa,CAAgB;gBAEjB,IAAI,EAAE,gBAAgB;IAIpC,OAAO,CACX,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CA2ClD"}
@@ -8,7 +8,6 @@ export interface WorkerConfig {
8
8
  apiKey: string;
9
9
  model?: string;
10
10
  provider?: AiProvider;
11
- skipPlanning?: boolean;
12
11
  }
13
12
  /**
14
13
  * Main agent worker that orchestrates task execution
@@ -1 +1 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/agent/worker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,iBAAiB,CAAC;AAsB5D,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,qBAAa,WAAW;IAgBV,OAAO,CAAC,MAAM;IAf1B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,QAAQ,CAAW;IAG3B,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAe;IAGnC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,YAAY,CAAU;gBAEV,MAAM,EAAE,YAAY;IAkDxC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAgB;YAe5D,eAAe;YAcf,WAAW;YAiBX,WAAW;IA6BnB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAqF3B"}
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/agent/worker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,iBAAiB,CAAC;AAsB5D,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,UAAU,CAAC;CACvB;AAED;;;GAGG;AACH,qBAAa,WAAW;IAgBV,OAAO,CAAC,MAAM;IAf1B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,QAAQ,CAAW;IAG3B,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAe;IAGnC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,YAAY,CAAU;gBAEV,MAAM,EAAE,YAAY;IAiDxC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAgB;YAe5D,eAAe;YAcf,WAAW;YAiBX,WAAW;IA6BnB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAqF3B"}
@@ -89,7 +89,15 @@ class BaseModule {
89
89
  // src/modules/ai.ts
90
90
  class AIModule extends BaseModule {
91
91
  async chat(workspaceId, body) {
92
- const { data } = await this.api.post(`/ai/${workspaceId}/chat`, 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 });
93
101
  return data;
94
102
  }
95
103
  async listSessions(workspaceId) {
@@ -106,14 +114,25 @@ class AIModule extends BaseModule {
106
114
  async deleteSession(workspaceId, sessionId) {
107
115
  await this.api.delete(`/ai/${workspaceId}/session/${sessionId}`);
108
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
+ }
109
124
  }
110
125
 
111
126
  // src/modules/auth.ts
112
127
  class AuthModule extends BaseModule {
113
- async getMe() {
128
+ async getProfile() {
114
129
  const { data } = await this.api.get("/auth/me");
115
130
  return data;
116
131
  }
132
+ async getApiKeyInfo() {
133
+ const { data } = await this.api.get("/auth/api-key");
134
+ return data;
135
+ }
117
136
  async requestRegisterOtp(email) {
118
137
  const { data } = await this.api.post("/auth/register-otp", { email });
119
138
  return data;
@@ -377,6 +396,17 @@ class WorkspacesModule extends BaseModule {
377
396
  const { data } = await this.api.post(`/workspaces/${id}/dispatch`, { workerId, sprintId });
378
397
  return data.task;
379
398
  }
399
+ async listApiKeys(workspaceId) {
400
+ const { data } = await this.api.get(`/workspaces/${workspaceId}/api-keys`);
401
+ return data.apiKeys;
402
+ }
403
+ async createApiKey(workspaceId, name) {
404
+ const { data } = await this.api.post(`/workspaces/${workspaceId}/api-keys`, { name });
405
+ return data.apiKey;
406
+ }
407
+ async deleteApiKey(workspaceId, keyId) {
408
+ await this.api.delete(`/workspaces/${workspaceId}/api-keys/${keyId}`);
409
+ }
380
410
  }
381
411
 
382
412
  // src/index.ts
@@ -533,7 +563,15 @@ var colors = {
533
563
  brightBlue: `${ESC}94m`,
534
564
  brightMagenta: `${ESC}95m`,
535
565
  brightCyan: `${ESC}96m`,
536
- brightWhite: `${ESC}97m`
566
+ brightWhite: `${ESC}97m`,
567
+ bgBlack: `${ESC}40m`,
568
+ bgRed: `${ESC}41m`,
569
+ bgGreen: `${ESC}42m`,
570
+ bgYellow: `${ESC}43m`,
571
+ bgBlue: `${ESC}44m`,
572
+ bgMagenta: `${ESC}45m`,
573
+ bgCyan: `${ESC}46m`,
574
+ bgWhite: `${ESC}47m`
537
575
  };
538
576
  var c = {
539
577
  text: (text, ...colorNames) => {
@@ -549,11 +587,17 @@ var c = {
549
587
  magenta: (t) => c.text(t, "magenta"),
550
588
  cyan: (t) => c.text(t, "cyan"),
551
589
  gray: (t) => c.text(t, "gray"),
590
+ white: (t) => c.text(t, "white"),
591
+ brightBlue: (t) => c.text(t, "brightBlue"),
592
+ bgBlue: (t) => c.text(t, "bgBlue", "white", "bold"),
552
593
  success: (t) => c.text(t, "green", "bold"),
553
594
  error: (t) => c.text(t, "red", "bold"),
554
595
  warning: (t) => c.text(t, "yellow", "bold"),
555
596
  info: (t) => c.text(t, "cyan", "bold"),
556
597
  primary: (t) => c.text(t, "blue", "bold"),
598
+ secondary: (t) => c.text(t, "magenta", "bold"),
599
+ header: (t) => c.text(` ${t} `, "bgBlue", "white", "bold"),
600
+ step: (t) => c.text(` ${t} `, "bgCyan", "black", "bold"),
557
601
  underline: (t) => c.text(t, "underline")
558
602
  };
559
603
 
@@ -611,6 +655,7 @@ class ClaudeRunner {
611
655
  let finalResult = "";
612
656
  let errorOutput = "";
613
657
  let buffer = "";
658
+ let stderrBuffer = "";
614
659
  claude.stdout.on("data", (data) => {
615
660
  buffer += data.toString();
616
661
  const lines = buffer.split(`
@@ -623,14 +668,27 @@ class ClaudeRunner {
623
668
  }
624
669
  });
625
670
  claude.stderr.on("data", (data) => {
626
- const msg = data.toString();
627
- errorOutput += msg;
628
- process.stderr.write(msg);
671
+ const chunk = data.toString();
672
+ errorOutput += chunk;
673
+ stderrBuffer += chunk;
674
+ const lines = stderrBuffer.split(`
675
+ `);
676
+ stderrBuffer = lines.pop() || "";
677
+ for (const line of lines) {
678
+ if (!this.shouldSuppressLine(line)) {
679
+ process.stderr.write(`${line}
680
+ `);
681
+ }
682
+ }
629
683
  });
630
684
  claude.on("error", (err) => {
631
685
  reject(new Error(`Failed to start Claude CLI: ${err.message}. Please ensure the 'claude' command is available in your PATH.`));
632
686
  });
633
687
  claude.on("close", (code) => {
688
+ if (stderrBuffer && !this.shouldSuppressLine(stderrBuffer)) {
689
+ process.stderr.write(`${stderrBuffer}
690
+ `);
691
+ }
634
692
  process.stdout.write(`
635
693
  `);
636
694
  if (code === 0) {
@@ -673,6 +731,10 @@ ${c.primary("[Claude]")} ${c.bold(`Running ${content_block.name}...`)}
673
731
  }
674
732
  }
675
733
  }
734
+ shouldSuppressLine(line) {
735
+ const infoLogRegex = /^\[\d{2}:\d{2}:\d{2}\]\s\[.*?\]\sℹ\s*$/;
736
+ return infoLogRegex.test(line.trim());
737
+ }
676
738
  createExecutionError(code, detail) {
677
739
  const errorMsg = detail.trim();
678
740
  const message = errorMsg ? `Claude CLI error (exit code ${code}): ${errorMsg}` : `Claude CLI exited with code ${code}. Please ensure the Claude CLI is installed and you are logged in.`;
@@ -939,13 +1001,10 @@ class CodebaseIndexer {
939
1001
  `);
940
1002
  const newTreeHash = this.hashTree(treeString);
941
1003
  const existingIndex = this.loadIndex();
942
- if (!force && existingIndex?.treeHash === newTreeHash) {
943
- onProgress?.("No file changes detected, skipping reindex");
944
- return null;
945
- }
946
1004
  const currentHashes = this.computeFileHashes(currentFiles);
947
1005
  const existingHashes = existingIndex?.fileHashes;
948
- const canIncremental = !force && existingIndex && existingHashes;
1006
+ const hasExistingContent = existingIndex && (Object.keys(existingIndex.symbols).length > 0 || Object.keys(existingIndex.responsibilities).length > 0);
1007
+ const canIncremental = !force && existingIndex && existingHashes && hasExistingContent;
949
1008
  if (canIncremental) {
950
1009
  onProgress?.("Performing incremental update");
951
1010
  const { added, deleted, modified } = this.diffFiles(currentHashes, existingHashes);
@@ -978,8 +1037,12 @@ class CodebaseIndexer {
978
1037
  }
979
1038
  }
980
1039
  onProgress?.("AI is analyzing codebase structure...");
981
- const index = await treeSummarizer(treeString);
982
- return this.applyIndexMetadata(index, currentHashes, newTreeHash);
1040
+ try {
1041
+ const index = await treeSummarizer(treeString);
1042
+ return this.applyIndexMetadata(index, currentHashes, newTreeHash);
1043
+ } catch (error) {
1044
+ throw new Error(`AI analysis failed: ${error instanceof Error ? error.message : String(error)}`);
1045
+ }
983
1046
  }
984
1047
  async getFileTree() {
985
1048
  const gitmodulesPath = import_node_path5.join(this.projectPath, ".gitmodules");
@@ -1472,16 +1535,12 @@ class TaskExecutor {
1472
1535
  });
1473
1536
  try {
1474
1537
  let plan = null;
1475
- if (this.deps.skipPlanning) {
1476
- this.deps.log("Skipping Phase 1: Planning (CLI)...", "info");
1477
- } else {
1478
- this.deps.log("Phase 1: Planning (CLI)...", "info");
1479
- const planningPrompt = `${basePrompt}
1538
+ this.deps.log("Phase 1: Planning (CLI)...", "info");
1539
+ const planningPrompt = `${basePrompt}
1480
1540
 
1481
1541
  ## Phase 1: Planning
1482
1542
  Analyze and create a detailed plan for THIS SPECIFIC TASK. Do NOT execute changes yet.`;
1483
- plan = await this.deps.aiRunner.run(planningPrompt, true);
1484
- }
1543
+ plan = await this.deps.aiRunner.run(planningPrompt, true);
1485
1544
  this.deps.log("Starting Execution...", "info");
1486
1545
  let executionPrompt = basePrompt;
1487
1546
  if (plan != null) {
@@ -1570,7 +1629,6 @@ class AgentWorker {
1570
1629
  this.taskExecutor = new TaskExecutor({
1571
1630
  aiRunner: this.aiRunner,
1572
1631
  projectPath,
1573
- skipPlanning: config.skipPlanning,
1574
1632
  log
1575
1633
  });
1576
1634
  const providerLabel = provider === "codex" ? "Codex" : "Claude";
@@ -1701,8 +1759,7 @@ if (process.argv[1]?.includes("agent-worker") || process.argv[1]?.includes("work
1701
1759
  if (value && !value.startsWith("--"))
1702
1760
  i++;
1703
1761
  config.provider = resolveProvider(value);
1704
- } else if (arg === "--skip-planning")
1705
- config.skipPlanning = true;
1762
+ }
1706
1763
  }
1707
1764
  if (!config.agentId || !config.workspaceId || !config.apiBase || !config.apiKey || !config.projectPath) {
1708
1765
  console.error("Missing required arguments");
@@ -10,6 +10,7 @@ export declare class ClaudeRunner implements AiRunner {
10
10
  private handleStreamLine;
11
11
  private processStreamItem;
12
12
  private handleEvent;
13
+ private shouldSuppressLine;
13
14
  private createExecutionError;
14
15
  }
15
16
  //# sourceMappingURL=claude-runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-runner.d.ts","sourceRoot":"","sources":["../../src/ai/claude-runner.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAmB5C,qBAAa,YAAa,YAAW,QAAQ;IAKzC,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,GAAG,CAAC;IALd,OAAO,CAAC,WAAW,CAAS;gBAG1B,WAAW,EAAE,MAAM,EACX,KAAK,GAAE,MAAuC,EAC9C,GAAG,CAAC,EAAE,KAAK,YAAA;IAKf,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,UAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAyB/D,OAAO,CAAC,UAAU;IAoElB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,oBAAoB;CAO7B"}
1
+ {"version":3,"file":"claude-runner.d.ts","sourceRoot":"","sources":["../../src/ai/claude-runner.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAmB5C,qBAAa,YAAa,YAAW,QAAQ;IAKzC,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,GAAG,CAAC;IALd,OAAO,CAAC,WAAW,CAAS;gBAG1B,WAAW,EAAE,MAAM,EACX,KAAK,GAAE,MAAuC,EAC9C,GAAG,CAAC,EAAE,KAAK,YAAA;IAKf,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,UAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAyB/D,OAAO,CAAC,UAAU;IAkFlB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,oBAAoB;CAO7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../../src/core/indexer.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,yBAAyB,CAAe;gBAEpC,WAAW,EAAE,MAAM;IAK/B;;;;OAIG;IACG,KAAK,CACT,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EACtC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,EACzD,KAAK,UAAQ,GACZ,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;YAyGlB,WAAW;IAgEzB,SAAS,IAAI,aAAa,GAAG,IAAI;IAWjC,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAQrC,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,SAAS;IAkBjB,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,UAAU;CA8BnB"}
1
+ {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../../src/core/indexer.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,yBAAyB,CAAe;gBAEpC,WAAW,EAAE,MAAM;IAK/B;;;;OAIG;IACG,KAAK,CACT,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EACtC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,EACzD,KAAK,UAAQ,GACZ,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;YAoHlB,WAAW;IAgEzB,SAAS,IAAI,aAAa,GAAG,IAAI;IAWjC,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAQrC,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,SAAS;IAkBjB,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,UAAU;CA8BnB"}
@@ -89,7 +89,15 @@ class BaseModule {
89
89
  // src/modules/ai.ts
90
90
  class AIModule extends BaseModule {
91
91
  async chat(workspaceId, body) {
92
- const { data } = await this.api.post(`/ai/${workspaceId}/chat`, 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 });
93
101
  return data;
94
102
  }
95
103
  async listSessions(workspaceId) {
@@ -106,14 +114,25 @@ class AIModule extends BaseModule {
106
114
  async deleteSession(workspaceId, sessionId) {
107
115
  await this.api.delete(`/ai/${workspaceId}/session/${sessionId}`);
108
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
+ }
109
124
  }
110
125
 
111
126
  // src/modules/auth.ts
112
127
  class AuthModule extends BaseModule {
113
- async getMe() {
128
+ async getProfile() {
114
129
  const { data } = await this.api.get("/auth/me");
115
130
  return data;
116
131
  }
132
+ async getApiKeyInfo() {
133
+ const { data } = await this.api.get("/auth/api-key");
134
+ return data;
135
+ }
117
136
  async requestRegisterOtp(email) {
118
137
  const { data } = await this.api.post("/auth/register-otp", { email });
119
138
  return data;
@@ -377,6 +396,17 @@ class WorkspacesModule extends BaseModule {
377
396
  const { data } = await this.api.post(`/workspaces/${id}/dispatch`, { workerId, sprintId });
378
397
  return data.task;
379
398
  }
399
+ async listApiKeys(workspaceId) {
400
+ const { data } = await this.api.get(`/workspaces/${workspaceId}/api-keys`);
401
+ return data.apiKeys;
402
+ }
403
+ async createApiKey(workspaceId, name) {
404
+ const { data } = await this.api.post(`/workspaces/${workspaceId}/api-keys`, { name });
405
+ return data.apiKey;
406
+ }
407
+ async deleteApiKey(workspaceId, keyId) {
408
+ await this.api.delete(`/workspaces/${workspaceId}/api-keys/${keyId}`);
409
+ }
380
410
  }
381
411
 
382
412
  // src/index.ts
@@ -533,7 +563,15 @@ var colors = {
533
563
  brightBlue: `${ESC}94m`,
534
564
  brightMagenta: `${ESC}95m`,
535
565
  brightCyan: `${ESC}96m`,
536
- brightWhite: `${ESC}97m`
566
+ brightWhite: `${ESC}97m`,
567
+ bgBlack: `${ESC}40m`,
568
+ bgRed: `${ESC}41m`,
569
+ bgGreen: `${ESC}42m`,
570
+ bgYellow: `${ESC}43m`,
571
+ bgBlue: `${ESC}44m`,
572
+ bgMagenta: `${ESC}45m`,
573
+ bgCyan: `${ESC}46m`,
574
+ bgWhite: `${ESC}47m`
537
575
  };
538
576
  var c = {
539
577
  text: (text, ...colorNames) => {
@@ -549,11 +587,17 @@ var c = {
549
587
  magenta: (t) => c.text(t, "magenta"),
550
588
  cyan: (t) => c.text(t, "cyan"),
551
589
  gray: (t) => c.text(t, "gray"),
590
+ white: (t) => c.text(t, "white"),
591
+ brightBlue: (t) => c.text(t, "brightBlue"),
592
+ bgBlue: (t) => c.text(t, "bgBlue", "white", "bold"),
552
593
  success: (t) => c.text(t, "green", "bold"),
553
594
  error: (t) => c.text(t, "red", "bold"),
554
595
  warning: (t) => c.text(t, "yellow", "bold"),
555
596
  info: (t) => c.text(t, "cyan", "bold"),
556
597
  primary: (t) => c.text(t, "blue", "bold"),
598
+ secondary: (t) => c.text(t, "magenta", "bold"),
599
+ header: (t) => c.text(` ${t} `, "bgBlue", "white", "bold"),
600
+ step: (t) => c.text(` ${t} `, "bgCyan", "black", "bold"),
557
601
  underline: (t) => c.text(t, "underline")
558
602
  };
559
603
 
@@ -611,6 +655,7 @@ class ClaudeRunner {
611
655
  let finalResult = "";
612
656
  let errorOutput = "";
613
657
  let buffer = "";
658
+ let stderrBuffer = "";
614
659
  claude.stdout.on("data", (data) => {
615
660
  buffer += data.toString();
616
661
  const lines = buffer.split(`
@@ -623,14 +668,27 @@ class ClaudeRunner {
623
668
  }
624
669
  });
625
670
  claude.stderr.on("data", (data) => {
626
- const msg = data.toString();
627
- errorOutput += msg;
628
- process.stderr.write(msg);
671
+ const chunk = data.toString();
672
+ errorOutput += chunk;
673
+ stderrBuffer += chunk;
674
+ const lines = stderrBuffer.split(`
675
+ `);
676
+ stderrBuffer = lines.pop() || "";
677
+ for (const line of lines) {
678
+ if (!this.shouldSuppressLine(line)) {
679
+ process.stderr.write(`${line}
680
+ `);
681
+ }
682
+ }
629
683
  });
630
684
  claude.on("error", (err) => {
631
685
  reject(new Error(`Failed to start Claude CLI: ${err.message}. Please ensure the 'claude' command is available in your PATH.`));
632
686
  });
633
687
  claude.on("close", (code) => {
688
+ if (stderrBuffer && !this.shouldSuppressLine(stderrBuffer)) {
689
+ process.stderr.write(`${stderrBuffer}
690
+ `);
691
+ }
634
692
  process.stdout.write(`
635
693
  `);
636
694
  if (code === 0) {
@@ -673,6 +731,10 @@ ${c.primary("[Claude]")} ${c.bold(`Running ${content_block.name}...`)}
673
731
  }
674
732
  }
675
733
  }
734
+ shouldSuppressLine(line) {
735
+ const infoLogRegex = /^\[\d{2}:\d{2}:\d{2}\]\s\[.*?\]\sℹ\s*$/;
736
+ return infoLogRegex.test(line.trim());
737
+ }
676
738
  createExecutionError(code, detail) {
677
739
  const errorMsg = detail.trim();
678
740
  const message = errorMsg ? `Claude CLI error (exit code ${code}): ${errorMsg}` : `Claude CLI exited with code ${code}. Please ensure the Claude CLI is installed and you are logged in.`;
@@ -939,13 +1001,10 @@ class CodebaseIndexer {
939
1001
  `);
940
1002
  const newTreeHash = this.hashTree(treeString);
941
1003
  const existingIndex = this.loadIndex();
942
- if (!force && existingIndex?.treeHash === newTreeHash) {
943
- onProgress?.("No file changes detected, skipping reindex");
944
- return null;
945
- }
946
1004
  const currentHashes = this.computeFileHashes(currentFiles);
947
1005
  const existingHashes = existingIndex?.fileHashes;
948
- const canIncremental = !force && existingIndex && existingHashes;
1006
+ const hasExistingContent = existingIndex && (Object.keys(existingIndex.symbols).length > 0 || Object.keys(existingIndex.responsibilities).length > 0);
1007
+ const canIncremental = !force && existingIndex && existingHashes && hasExistingContent;
949
1008
  if (canIncremental) {
950
1009
  onProgress?.("Performing incremental update");
951
1010
  const { added, deleted, modified } = this.diffFiles(currentHashes, existingHashes);
@@ -978,8 +1037,12 @@ class CodebaseIndexer {
978
1037
  }
979
1038
  }
980
1039
  onProgress?.("AI is analyzing codebase structure...");
981
- const index = await treeSummarizer(treeString);
982
- return this.applyIndexMetadata(index, currentHashes, newTreeHash);
1040
+ try {
1041
+ const index = await treeSummarizer(treeString);
1042
+ return this.applyIndexMetadata(index, currentHashes, newTreeHash);
1043
+ } catch (error) {
1044
+ throw new Error(`AI analysis failed: ${error instanceof Error ? error.message : String(error)}`);
1045
+ }
983
1046
  }
984
1047
  async getFileTree() {
985
1048
  const gitmodulesPath = import_node_path5.join(this.projectPath, ".gitmodules");
@@ -1472,16 +1535,12 @@ class TaskExecutor {
1472
1535
  });
1473
1536
  try {
1474
1537
  let plan = null;
1475
- if (this.deps.skipPlanning) {
1476
- this.deps.log("Skipping Phase 1: Planning (CLI)...", "info");
1477
- } else {
1478
- this.deps.log("Phase 1: Planning (CLI)...", "info");
1479
- const planningPrompt = `${basePrompt}
1538
+ this.deps.log("Phase 1: Planning (CLI)...", "info");
1539
+ const planningPrompt = `${basePrompt}
1480
1540
 
1481
1541
  ## Phase 1: Planning
1482
1542
  Analyze and create a detailed plan for THIS SPECIFIC TASK. Do NOT execute changes yet.`;
1483
- plan = await this.deps.aiRunner.run(planningPrompt, true);
1484
- }
1543
+ plan = await this.deps.aiRunner.run(planningPrompt, true);
1485
1544
  this.deps.log("Starting Execution...", "info");
1486
1545
  let executionPrompt = basePrompt;
1487
1546
  if (plan != null) {
@@ -1570,7 +1629,6 @@ class AgentWorker {
1570
1629
  this.taskExecutor = new TaskExecutor({
1571
1630
  aiRunner: this.aiRunner,
1572
1631
  projectPath,
1573
- skipPlanning: config.skipPlanning,
1574
1632
  log
1575
1633
  });
1576
1634
  const providerLabel = provider === "codex" ? "Codex" : "Claude";
@@ -1701,8 +1759,7 @@ if (process.argv[1]?.includes("agent-worker") || process.argv[1]?.includes("work
1701
1759
  if (value && !value.startsWith("--"))
1702
1760
  i++;
1703
1761
  config.provider = resolveProvider(value);
1704
- } else if (arg === "--skip-planning")
1705
- config.skipPlanning = true;
1762
+ }
1706
1763
  }
1707
1764
  if (!config.agentId || !config.workspaceId || !config.apiBase || !config.apiKey || !config.projectPath) {
1708
1765
  console.error("Missing required arguments");
@@ -1870,9 +1927,6 @@ ${c.success("✅ Orchestrator finished")}`);
1870
1927
  if (this.config.provider) {
1871
1928
  workerArgs.push("--provider", this.config.provider);
1872
1929
  }
1873
- if (this.config.skipPlanning) {
1874
- workerArgs.push("--skip-planning");
1875
- }
1876
1930
  if (this.resolvedSprintId) {
1877
1931
  workerArgs.push("--sprint-id", this.resolvedSprintId);
1878
1932
  }
package/dist/index.js CHANGED
@@ -89,7 +89,15 @@ class BaseModule {
89
89
  // src/modules/ai.ts
90
90
  class AIModule extends BaseModule {
91
91
  async chat(workspaceId, body) {
92
- const { data } = await this.api.post(`/ai/${workspaceId}/chat`, 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 });
93
101
  return data;
94
102
  }
95
103
  async listSessions(workspaceId) {
@@ -106,14 +114,25 @@ class AIModule extends BaseModule {
106
114
  async deleteSession(workspaceId, sessionId) {
107
115
  await this.api.delete(`/ai/${workspaceId}/session/${sessionId}`);
108
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
+ }
109
124
  }
110
125
 
111
126
  // src/modules/auth.ts
112
127
  class AuthModule extends BaseModule {
113
- async getMe() {
128
+ async getProfile() {
114
129
  const { data } = await this.api.get("/auth/me");
115
130
  return data;
116
131
  }
132
+ async getApiKeyInfo() {
133
+ const { data } = await this.api.get("/auth/api-key");
134
+ return data;
135
+ }
117
136
  async requestRegisterOtp(email) {
118
137
  const { data } = await this.api.post("/auth/register-otp", { email });
119
138
  return data;
@@ -377,6 +396,17 @@ class WorkspacesModule extends BaseModule {
377
396
  const { data } = await this.api.post(`/workspaces/${id}/dispatch`, { workerId, sprintId });
378
397
  return data.task;
379
398
  }
399
+ async listApiKeys(workspaceId) {
400
+ const { data } = await this.api.get(`/workspaces/${workspaceId}/api-keys`);
401
+ return data.apiKeys;
402
+ }
403
+ async createApiKey(workspaceId, name) {
404
+ const { data } = await this.api.post(`/workspaces/${workspaceId}/api-keys`, { name });
405
+ return data.apiKey;
406
+ }
407
+ async deleteApiKey(workspaceId, keyId) {
408
+ await this.api.delete(`/workspaces/${workspaceId}/api-keys/${keyId}`);
409
+ }
380
410
  }
381
411
 
382
412
  // src/index.ts
@@ -1,10 +1,25 @@
1
- import { ChatRequest, ChatResponse } from "@locusai/shared";
1
+ import { ChatRequest, ChatResponse, ShareChatRequest } from "@locusai/shared";
2
2
  import { BaseModule } from "./base.js";
3
3
  export declare class AIModule extends BaseModule {
4
4
  /**
5
5
  * Send a message to the Locus AI Agent and get a response.
6
6
  */
7
7
  chat(workspaceId: string, body: ChatRequest): Promise<ChatResponse>;
8
+ /**
9
+ * Detect intent of the message.
10
+ */
11
+ detectIntent(workspaceId: string, body: ChatRequest): Promise<{
12
+ intent: string;
13
+ executionId: string;
14
+ sessionId: string;
15
+ }>;
16
+ /**
17
+ * Execute a pending intent.
18
+ */
19
+ executeIntent(workspaceId: string, body: {
20
+ sessionId: string;
21
+ executionId: string;
22
+ }): Promise<ChatResponse>;
8
23
  /**
9
24
  * List all chat sessions for the current user in a workspace.
10
25
  */
@@ -28,5 +43,13 @@ export declare class AIModule extends BaseModule {
28
43
  * Delete a chat session.
29
44
  */
30
45
  deleteSession(workspaceId: string, sessionId: string): Promise<void>;
46
+ /**
47
+ * Toggle chat session sharing.
48
+ */
49
+ shareSession(workspaceId: string, sessionId: string, body: ShareChatRequest): Promise<void>;
50
+ /**
51
+ * Get a shared chat session (public).
52
+ */
53
+ getSharedSession(sessionId: string): Promise<ChatResponse>;
31
54
  }
32
55
  //# sourceMappingURL=ai.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/modules/ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,qBAAa,QAAS,SAAQ,UAAU;IACtC;;OAEG;IACG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAQzE;;OAEG;IACG,YAAY,CAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,QAAQ,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC;IAO5E;;OAEG;IACG,UAAU,CACd,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC;IAOxB;;;OAGG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAGhE;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG3E"}
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/modules/ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,qBAAa,QAAS,SAAQ,UAAU;IACtC;;OAEG;IACG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IASzE;;OAEG;IACG,YAAY,CAChB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAStE;;OAEG;IACG,aAAa,CACjB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAC/C,OAAO,CAAC,YAAY,CAAC;IASxB;;OAEG;IACG,YAAY,CAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,QAAQ,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC;IAO5E;;OAEG;IACG,UAAU,CACd,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC;IAOxB;;;OAGG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAGhE;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1E;;OAEG;IACG,YAAY,CAChB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,IAAI,CAAC;IAIhB;;OAEG;IACG,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAMjE"}
@@ -1,7 +1,13 @@
1
1
  import { CompleteRegistration, LoginResponse, User, VerifyOtp } from "@locusai/shared";
2
2
  import { BaseModule } from "./base.js";
3
3
  export declare class AuthModule extends BaseModule {
4
- getMe(): Promise<User>;
4
+ getProfile(): Promise<User>;
5
+ getApiKeyInfo(): Promise<{
6
+ authType: string;
7
+ workspaceId?: string;
8
+ orgId?: string;
9
+ apiKeyName: string;
10
+ }>;
5
11
  requestRegisterOtp(email: string): Promise<{
6
12
  success: boolean;
7
13
  }>;
@@ -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,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,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;CAO1B"}
@@ -1,6 +1,6 @@
1
1
  import { AddMember, MembershipWithUser, Organization } from "@locusai/shared";
2
2
  import { BaseModule } from "./base.js";
3
- export interface ApiKey {
3
+ export interface OrganizationApiKey {
4
4
  id: string;
5
5
  organizationId: string;
6
6
  name: string;
@@ -17,8 +17,8 @@ export declare class OrganizationsModule extends BaseModule {
17
17
  addMember(id: string, body: AddMember): Promise<MembershipWithUser>;
18
18
  removeMember(orgId: string, userId: string): Promise<void>;
19
19
  delete(orgId: string): Promise<void>;
20
- listApiKeys(orgId: string): Promise<ApiKey[]>;
21
- createApiKey(orgId: string, name: string): Promise<ApiKey>;
20
+ listApiKeys(orgId: string): Promise<OrganizationApiKey[]>;
21
+ createApiKey(orgId: string, name: string): Promise<OrganizationApiKey>;
22
22
  deleteApiKey(orgId: string, keyId: string): Promise<void>;
23
23
  }
24
24
  //# sourceMappingURL=organizations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"organizations.d.ts","sourceRoot":"","sources":["../../src/modules/organizations.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAET,kBAAkB,EAElB,YAAY,EAGb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,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;AAUD,qBAAa,mBAAoB,SAAQ,UAAU;IAC3C,IAAI,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAM/B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAO1C,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAOtD,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQnE,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAO7C,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ1D,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGhE"}
1
+ {"version":3,"file":"organizations.d.ts","sourceRoot":"","sources":["../../src/modules/organizations.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAET,kBAAkB,EAElB,YAAY,EAGb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,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;AAUD,qBAAa,mBAAoB,SAAQ,UAAU;IAC3C,IAAI,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAM/B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAO1C,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAOtD,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQnE,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAOzD,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQtE,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGhE"}
@@ -12,10 +12,28 @@ export declare class WorkspacesModule extends BaseModule {
12
12
  delete(id: string): Promise<void>;
13
13
  getStats(id: string): Promise<WorkspaceStats>;
14
14
  getActivity(id: string, limit?: number): Promise<Event[]>;
15
+ /**
16
+ * Dispatch a task from the workspace backlog to an agent.
17
+ * Atomically moves a task from BACKLOG to IN_PROGRESS and assigns it.
18
+ */
15
19
  /**
16
20
  * Dispatch a task from the workspace backlog to an agent.
17
21
  * Atomically moves a task from BACKLOG to IN_PROGRESS and assigns it.
18
22
  */
19
23
  dispatch(id: string, workerId: string, sprintId?: string): Promise<Task>;
24
+ listApiKeys(workspaceId: string): Promise<WorkspaceApiKey[]>;
25
+ createApiKey(workspaceId: string, name: string): Promise<WorkspaceApiKey>;
26
+ deleteApiKey(workspaceId: string, keyId: string): Promise<void>;
27
+ }
28
+ export interface WorkspaceApiKey {
29
+ id: string;
30
+ organizationId?: string | null;
31
+ workspaceId?: string | null;
32
+ name: string;
33
+ key: string;
34
+ active: boolean;
35
+ lastUsedAt: string | null;
36
+ createdAt: string;
37
+ updatedAt: string;
20
38
  }
21
39
  //# sourceMappingURL=workspaces.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../src/modules/workspaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,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;CAOjB"}
1
+ {"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../src/modules/workspaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,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;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"}
@@ -24,7 +24,6 @@ export interface OrchestratorConfig {
24
24
  apiKey: string;
25
25
  model?: string;
26
26
  provider?: AiProvider;
27
- skipPlanning?: boolean;
28
27
  }
29
28
  export declare class AgentOrchestrator extends EventEmitter {
30
29
  private client;
@@ -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;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;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":"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;IAyHxB;;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"}
@@ -24,6 +24,14 @@ declare const colors: {
24
24
  brightMagenta: string;
25
25
  brightCyan: string;
26
26
  brightWhite: string;
27
+ bgBlack: string;
28
+ bgRed: string;
29
+ bgGreen: string;
30
+ bgYellow: string;
31
+ bgBlue: string;
32
+ bgMagenta: string;
33
+ bgCyan: string;
34
+ bgWhite: string;
27
35
  };
28
36
  type ColorName = keyof typeof colors;
29
37
  export declare const c: {
@@ -37,11 +45,17 @@ export declare const c: {
37
45
  magenta: (t: string) => string;
38
46
  cyan: (t: string) => string;
39
47
  gray: (t: string) => string;
48
+ white: (t: string) => string;
49
+ brightBlue: (t: string) => string;
50
+ bgBlue: (t: string) => string;
40
51
  success: (t: string) => string;
41
52
  error: (t: string) => string;
42
53
  warning: (t: string) => string;
43
54
  info: (t: string) => string;
44
55
  primary: (t: string) => string;
56
+ secondary: (t: string) => string;
57
+ header: (t: string) => string;
58
+ step: (t: string) => string;
45
59
  underline: (t: string) => string;
46
60
  };
47
61
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/utils/colors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;CA0BX,CAAC;AAEF,KAAK,SAAS,GAAG,MAAM,OAAO,MAAM,CAAC;AAErC,eAAO,MAAM,CAAC;iBACC,MAAM,iBAAiB,SAAS,EAAE;cAMrC,MAAM;aACP,MAAM;aACN,MAAM;eACJ,MAAM;gBACL,MAAM;cACR,MAAM;iBACH,MAAM;cACT,MAAM;cACN,MAAM;iBAGH,MAAM;eACR,MAAM;iBACJ,MAAM;cACT,MAAM;iBACH,MAAM;mBACJ,MAAM;CACtB,CAAC"}
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/utils/colors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCX,CAAC;AAEF,KAAK,SAAS,GAAG,MAAM,OAAO,MAAM,CAAC;AAErC,eAAO,MAAM,CAAC;iBACC,MAAM,iBAAiB,SAAS,EAAE;cAMrC,MAAM;aACP,MAAM;aACN,MAAM;eACJ,MAAM;gBACL,MAAM;cACR,MAAM;iBACH,MAAM;cACT,MAAM;cACN,MAAM;eAEL,MAAM;oBACD,MAAM;gBACV,MAAM;iBAGL,MAAM;eACR,MAAM;iBACJ,MAAM;cACT,MAAM;iBACH,MAAM;mBACJ,MAAM;gBACT,MAAM;cACR,MAAM;mBACD,MAAM;CACtB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@locusai/sdk",
3
- "version": "0.6.0",
3
+ "version": "0.7.1",
4
4
  "type": "module",
5
5
  "main": "./src/index.ts",
6
6
  "types": "./src/index.ts",
@@ -30,7 +30,7 @@
30
30
  "clean": "rm -rf node_modules"
31
31
  },
32
32
  "dependencies": {
33
- "@locusai/shared": "^0.6.0",
33
+ "@locusai/shared": "^0.7.1",
34
34
  "axios": "^1.13.2",
35
35
  "events": "^3.3.0",
36
36
  "globby": "^14.0.2"