@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.
- package/dist/agent/task-executor.d.ts +0 -1
- package/dist/agent/task-executor.d.ts.map +1 -1
- package/dist/agent/worker.d.ts +0 -1
- package/dist/agent/worker.d.ts.map +1 -1
- package/dist/agent/worker.js +80 -23
- package/dist/ai/claude-runner.d.ts +1 -0
- package/dist/ai/claude-runner.d.ts.map +1 -1
- package/dist/core/indexer.d.ts.map +1 -1
- package/dist/index-node.js +80 -26
- package/dist/index.js +32 -2
- package/dist/modules/ai.d.ts +24 -1
- package/dist/modules/ai.d.ts.map +1 -1
- package/dist/modules/auth.d.ts +7 -1
- package/dist/modules/auth.d.ts.map +1 -1
- package/dist/modules/organizations.d.ts +3 -3
- package/dist/modules/organizations.d.ts.map +1 -1
- package/dist/modules/workspaces.d.ts +18 -0
- package/dist/modules/workspaces.d.ts.map +1 -1
- package/dist/orchestrator.d.ts +0 -1
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/utils/colors.d.ts +14 -0
- package/dist/utils/colors.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -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,
|
|
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"}
|
package/dist/agent/worker.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/agent/worker.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
|
|
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
|
|
627
|
-
errorOutput +=
|
|
628
|
-
|
|
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
|
|
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
|
-
|
|
982
|
-
|
|
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
|
-
|
|
1476
|
-
|
|
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
|
-
|
|
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
|
-
}
|
|
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");
|
|
@@ -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;
|
|
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;
|
|
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"}
|
package/dist/index-node.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
|
|
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
|
|
627
|
-
errorOutput +=
|
|
628
|
-
|
|
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
|
|
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
|
-
|
|
982
|
-
|
|
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
|
-
|
|
1476
|
-
|
|
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
|
-
|
|
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
|
-
}
|
|
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
|
|
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
|
package/dist/modules/ai.d.ts
CHANGED
|
@@ -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
|
package/dist/modules/ai.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/modules/auth.d.ts
CHANGED
|
@@ -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
|
-
|
|
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,
|
|
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
|
|
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<
|
|
21
|
-
createApiKey(orgId: string, name: string): Promise<
|
|
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,
|
|
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;
|
|
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"}
|
package/dist/orchestrator.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/utils/colors.d.ts
CHANGED
|
@@ -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
|
|
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.
|
|
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.
|
|
33
|
+
"@locusai/shared": "^0.7.1",
|
|
34
34
|
"axios": "^1.13.2",
|
|
35
35
|
"events": "^3.3.0",
|
|
36
36
|
"globby": "^14.0.2"
|