@locusai/sdk 0.11.5 → 0.11.7
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/worker-types.d.ts +2 -0
- package/dist/agent/worker-types.d.ts.map +1 -1
- package/dist/agent/worker.d.ts.map +1 -1
- package/dist/agent/worker.js +11 -4
- package/dist/ai/codex-runner.d.ts +2 -1
- package/dist/ai/codex-runner.d.ts.map +1 -1
- package/dist/ai/factory.d.ts +2 -0
- package/dist/ai/factory.d.ts.map +1 -1
- package/dist/index-node.js +78 -218
- package/dist/orchestrator/index.d.ts.map +1 -1
- package/dist/orchestrator/types.d.ts +2 -0
- package/dist/orchestrator/types.d.ts.map +1 -1
- package/dist/planning/agents/architect.d.ts +0 -14
- package/dist/planning/agents/architect.d.ts.map +1 -1
- package/dist/planning/agents/cross-task-reviewer.d.ts +3 -3
- package/dist/planning/agents/cross-task-reviewer.d.ts.map +1 -1
- package/dist/planning/agents/planner.d.ts +15 -0
- package/dist/planning/agents/planner.d.ts.map +1 -0
- package/dist/planning/agents/sprint-organizer.d.ts +0 -13
- package/dist/planning/agents/sprint-organizer.d.ts.map +1 -1
- package/dist/planning/agents/tech-lead.d.ts +0 -14
- package/dist/planning/agents/tech-lead.d.ts.map +1 -1
- package/dist/planning/planning-meeting.d.ts +5 -7
- package/dist/planning/planning-meeting.d.ts.map +1 -1
- package/dist/planning/sprint-plan.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -16,6 +16,8 @@ export interface WorkerConfig {
|
|
|
16
16
|
model?: string;
|
|
17
17
|
/** AI provider */
|
|
18
18
|
provider?: AiProvider;
|
|
19
|
+
/** Reasoning effort level for Codex models (e.g. "low", "medium", "high") */
|
|
20
|
+
reasoningEffort?: string;
|
|
19
21
|
}
|
|
20
22
|
export interface CommitPushResult {
|
|
21
23
|
branch: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-types.d.ts","sourceRoot":"","sources":["../../src/agent/worker-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,WAAW,YAAY;IAC3B,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;IACf,eAAe;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB;IAClB,QAAQ,CAAC,EAAE,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-types.d.ts","sourceRoot":"","sources":["../../src/agent/worker-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,WAAW,YAAY;IAC3B,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;IACf,eAAe;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB;IAClB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,6EAA6E;IAC7E,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/agent/worker.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGlE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;;;;;;;;;GAUG;AACH,qBAAa,WAAW;IAiBV,OAAO,CAAC,MAAM;IAhB1B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IAGjC,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,iBAAiB,CAA+C;IACxE,OAAO,CAAC,aAAa,CAAuB;IAG5C,OAAO,CAAC,iBAAiB,CAA4C;IACrE,OAAO,CAAC,aAAa,CAAgB;gBAEjB,MAAM,EAAE,YAAY;
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/agent/worker.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGlE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;;;;;;;;;GAUG;AACH,qBAAa,WAAW;IAiBV,OAAO,CAAC,MAAM;IAhB1B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IAGjC,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,iBAAiB,CAA+C;IACxE,OAAO,CAAC,aAAa,CAAuB;IAG5C,OAAO,CAAC,iBAAiB,CAA4C;IACrE,OAAO,CAAC,aAAa,CAAgB;gBAEjB,MAAM,EAAE,YAAY;IAwDxC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAgB;YAmB5D,eAAe;YAcf,WAAW;IAgDzB;;OAEG;YACW,WAAW;IAoCzB,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,aAAa;IAoBf,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgJ3B"}
|
package/dist/agent/worker.js
CHANGED
|
@@ -1209,14 +1209,16 @@ class CodexRunner {
|
|
|
1209
1209
|
projectPath;
|
|
1210
1210
|
model;
|
|
1211
1211
|
log;
|
|
1212
|
+
reasoningEffort;
|
|
1212
1213
|
activeProcess = null;
|
|
1213
1214
|
eventEmitter;
|
|
1214
1215
|
currentToolName;
|
|
1215
1216
|
timeoutMs;
|
|
1216
|
-
constructor(projectPath, model = DEFAULT_MODEL[PROVIDER.CODEX], log, timeoutMs) {
|
|
1217
|
+
constructor(projectPath, model = DEFAULT_MODEL[PROVIDER.CODEX], log, timeoutMs, reasoningEffort) {
|
|
1217
1218
|
this.projectPath = projectPath;
|
|
1218
1219
|
this.model = model;
|
|
1219
1220
|
this.log = log;
|
|
1221
|
+
this.reasoningEffort = reasoningEffort;
|
|
1220
1222
|
this.timeoutMs = timeoutMs ?? DEFAULT_TIMEOUT_MS2;
|
|
1221
1223
|
}
|
|
1222
1224
|
setEventEmitter(emitter) {
|
|
@@ -1481,6 +1483,9 @@ class CodexRunner {
|
|
|
1481
1483
|
if (this.model) {
|
|
1482
1484
|
args.push("--model", this.model);
|
|
1483
1485
|
}
|
|
1486
|
+
if (this.reasoningEffort) {
|
|
1487
|
+
args.push("-c", `model_reasoning_effort=${this.reasoningEffort}`);
|
|
1488
|
+
}
|
|
1484
1489
|
args.push("-");
|
|
1485
1490
|
return args;
|
|
1486
1491
|
}
|
|
@@ -1540,7 +1545,7 @@ function createAiRunner(provider, config) {
|
|
|
1540
1545
|
const model = config.model ?? DEFAULT_MODEL[resolvedProvider];
|
|
1541
1546
|
switch (resolvedProvider) {
|
|
1542
1547
|
case PROVIDER.CODEX:
|
|
1543
|
-
return new CodexRunner(config.projectPath, model, config.log, config.timeoutMs);
|
|
1548
|
+
return new CodexRunner(config.projectPath, model, config.log, config.timeoutMs, config.reasoningEffort ?? "high");
|
|
1544
1549
|
default:
|
|
1545
1550
|
return new ClaudeRunner(config.projectPath, model, config.log, config.timeoutMs);
|
|
1546
1551
|
}
|
|
@@ -2373,7 +2378,8 @@ function parseWorkerArgs(argv) {
|
|
|
2373
2378
|
if (value && !value.startsWith("--"))
|
|
2374
2379
|
i++;
|
|
2375
2380
|
config.provider = resolveProvider(value);
|
|
2376
|
-
}
|
|
2381
|
+
} else if (arg === "--reasoning-effort")
|
|
2382
|
+
config.reasoningEffort = args[++i];
|
|
2377
2383
|
}
|
|
2378
2384
|
if (!config.agentId || !config.workspaceId || !config.apiBase || !config.apiKey || !config.projectPath) {
|
|
2379
2385
|
console.error("Missing required arguments");
|
|
@@ -2441,7 +2447,8 @@ class AgentWorker {
|
|
|
2441
2447
|
this.aiRunner = createAiRunner(provider, {
|
|
2442
2448
|
projectPath,
|
|
2443
2449
|
model: config.model,
|
|
2444
|
-
log
|
|
2450
|
+
log,
|
|
2451
|
+
reasoningEffort: config.reasoningEffort
|
|
2445
2452
|
});
|
|
2446
2453
|
this.taskExecutor = new TaskExecutor({
|
|
2447
2454
|
aiRunner: this.aiRunner,
|
|
@@ -6,11 +6,12 @@ export declare class CodexRunner implements AiRunner {
|
|
|
6
6
|
private projectPath;
|
|
7
7
|
private model;
|
|
8
8
|
private log?;
|
|
9
|
+
private reasoningEffort?;
|
|
9
10
|
private activeProcess;
|
|
10
11
|
private eventEmitter?;
|
|
11
12
|
private currentToolName?;
|
|
12
13
|
timeoutMs: number;
|
|
13
|
-
constructor(projectPath: string, model?: string, log?: LogFn | undefined, timeoutMs?: number);
|
|
14
|
+
constructor(projectPath: string, model?: string, log?: LogFn | undefined, timeoutMs?: number, reasoningEffort?: string | undefined);
|
|
14
15
|
setEventEmitter(emitter: ExecEventEmitter): void;
|
|
15
16
|
/**
|
|
16
17
|
* Abort the currently running Codex CLI process, if any.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-runner.d.ts","sourceRoot":"","sources":["../../src/ai/codex-runner.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAK5C,qBAAa,WAAY,YAAW,QAAQ;IAOxC,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"codex-runner.d.ts","sourceRoot":"","sources":["../../src/ai/codex-runner.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAK5C,qBAAa,WAAY,YAAW,QAAQ;IAOxC,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,GAAG,CAAC;IAEZ,OAAO,CAAC,eAAe,CAAC;IAV1B,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,YAAY,CAAC,CAAmB;IACxC,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,SAAS,EAAE,MAAM,CAAC;gBAGR,WAAW,EAAE,MAAM,EACnB,KAAK,GAAE,MAAsC,EAC7C,GAAG,CAAC,EAAE,KAAK,YAAA,EACnB,SAAS,CAAC,EAAE,MAAM,EACV,eAAe,CAAC,EAAE,MAAM,YAAA;IAKlC,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAIhD;;OAEG;IACH,KAAK,IAAI,IAAI;IAOP,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA4B1C,OAAO,CAAC,WAAW;IA0BZ,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC;IA8J5E,OAAO,CAAC,iBAAiB;IA+BzB,OAAO,CAAC,UAAU;IAyDlB,OAAO,CAAC,SAAS;IAqBjB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,KAAK;CAGd"}
|
package/dist/ai/factory.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export interface AiRunnerConfig {
|
|
|
6
6
|
log?: LogFn;
|
|
7
7
|
/** Maximum execution time in milliseconds (default: 30 minutes) */
|
|
8
8
|
timeoutMs?: number;
|
|
9
|
+
/** Reasoning effort level for Codex models (e.g. "low", "medium", "high") */
|
|
10
|
+
reasoningEffort?: string;
|
|
9
11
|
}
|
|
10
12
|
export declare function createAiRunner(provider: AiProvider | undefined, config: AiRunnerConfig): AiRunner;
|
|
11
13
|
//# sourceMappingURL=factory.d.ts.map
|
package/dist/ai/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/ai/factory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,MAAM,KAAK,GAAG,CAClB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,KAC1C,IAAI,CAAC;AAEV,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/ai/factory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,MAAM,KAAK,GAAG,CAClB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,KAC1C,IAAI,CAAC;AAEV,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,UAAU,GAAG,SAAS,EAChC,MAAM,EAAE,cAAc,GACrB,QAAQ,CAqBV"}
|
package/dist/index-node.js
CHANGED
|
@@ -1209,14 +1209,16 @@ class CodexRunner {
|
|
|
1209
1209
|
projectPath;
|
|
1210
1210
|
model;
|
|
1211
1211
|
log;
|
|
1212
|
+
reasoningEffort;
|
|
1212
1213
|
activeProcess = null;
|
|
1213
1214
|
eventEmitter;
|
|
1214
1215
|
currentToolName;
|
|
1215
1216
|
timeoutMs;
|
|
1216
|
-
constructor(projectPath, model = DEFAULT_MODEL[PROVIDER.CODEX], log, timeoutMs) {
|
|
1217
|
+
constructor(projectPath, model = DEFAULT_MODEL[PROVIDER.CODEX], log, timeoutMs, reasoningEffort) {
|
|
1217
1218
|
this.projectPath = projectPath;
|
|
1218
1219
|
this.model = model;
|
|
1219
1220
|
this.log = log;
|
|
1221
|
+
this.reasoningEffort = reasoningEffort;
|
|
1220
1222
|
this.timeoutMs = timeoutMs ?? DEFAULT_TIMEOUT_MS2;
|
|
1221
1223
|
}
|
|
1222
1224
|
setEventEmitter(emitter) {
|
|
@@ -1481,6 +1483,9 @@ class CodexRunner {
|
|
|
1481
1483
|
if (this.model) {
|
|
1482
1484
|
args.push("--model", this.model);
|
|
1483
1485
|
}
|
|
1486
|
+
if (this.reasoningEffort) {
|
|
1487
|
+
args.push("-c", `model_reasoning_effort=${this.reasoningEffort}`);
|
|
1488
|
+
}
|
|
1484
1489
|
args.push("-");
|
|
1485
1490
|
return args;
|
|
1486
1491
|
}
|
|
@@ -1540,7 +1545,7 @@ function createAiRunner(provider, config) {
|
|
|
1540
1545
|
const model = config.model ?? DEFAULT_MODEL[resolvedProvider];
|
|
1541
1546
|
switch (resolvedProvider) {
|
|
1542
1547
|
case PROVIDER.CODEX:
|
|
1543
|
-
return new CodexRunner(config.projectPath, model, config.log, config.timeoutMs);
|
|
1548
|
+
return new CodexRunner(config.projectPath, model, config.log, config.timeoutMs, config.reasoningEffort ?? "high");
|
|
1544
1549
|
default:
|
|
1545
1550
|
return new ClaudeRunner(config.projectPath, model, config.log, config.timeoutMs);
|
|
1546
1551
|
}
|
|
@@ -2373,7 +2378,8 @@ function parseWorkerArgs(argv) {
|
|
|
2373
2378
|
if (value && !value.startsWith("--"))
|
|
2374
2379
|
i++;
|
|
2375
2380
|
config.provider = resolveProvider(value);
|
|
2376
|
-
}
|
|
2381
|
+
} else if (arg === "--reasoning-effort")
|
|
2382
|
+
config.reasoningEffort = args[++i];
|
|
2377
2383
|
}
|
|
2378
2384
|
if (!config.agentId || !config.workspaceId || !config.apiBase || !config.apiKey || !config.projectPath) {
|
|
2379
2385
|
console.error("Missing required arguments");
|
|
@@ -2441,7 +2447,8 @@ class AgentWorker {
|
|
|
2441
2447
|
this.aiRunner = createAiRunner(provider, {
|
|
2442
2448
|
projectPath,
|
|
2443
2449
|
model: config.model,
|
|
2444
|
-
log
|
|
2450
|
+
log,
|
|
2451
|
+
reasoningEffort: config.reasoningEffort
|
|
2445
2452
|
});
|
|
2446
2453
|
this.taskExecutor = new TaskExecutor({
|
|
2447
2454
|
aiRunner: this.aiRunner,
|
|
@@ -4665,6 +4672,9 @@ ${c.primary("\uD83E\uDD16 Locus Agent Orchestrator")}`);
|
|
|
4665
4672
|
if (this.config.provider) {
|
|
4666
4673
|
args.push("--provider", this.config.provider);
|
|
4667
4674
|
}
|
|
4675
|
+
if (this.config.reasoningEffort) {
|
|
4676
|
+
args.push("--reasoning-effort", this.config.reasoningEffort);
|
|
4677
|
+
}
|
|
4668
4678
|
if (this.resolvedSprintId) {
|
|
4669
4679
|
args.push("--sprint-id", this.resolvedSprintId);
|
|
4670
4680
|
}
|
|
@@ -5007,78 +5017,6 @@ init_config();
|
|
|
5007
5017
|
init_knowledge_base();
|
|
5008
5018
|
var import_node_fs10 = require("node:fs");
|
|
5009
5019
|
|
|
5010
|
-
// src/planning/agents/architect.ts
|
|
5011
|
-
function buildArchitectPrompt(input) {
|
|
5012
|
-
let prompt = `# Role: Software Architect
|
|
5013
|
-
|
|
5014
|
-
You are a Software Architect participating in an async sprint planning meeting. The Tech Lead has produced an initial task breakdown. Your job is to refine it.
|
|
5015
|
-
|
|
5016
|
-
## CEO Directive
|
|
5017
|
-
> ${input.directive}
|
|
5018
|
-
`;
|
|
5019
|
-
if (input.feedback) {
|
|
5020
|
-
prompt += `
|
|
5021
|
-
## CEO Feedback on Previous Plan
|
|
5022
|
-
> ${input.feedback}
|
|
5023
|
-
|
|
5024
|
-
IMPORTANT: Ensure the refined plan addresses this feedback.
|
|
5025
|
-
`;
|
|
5026
|
-
}
|
|
5027
|
-
prompt += `
|
|
5028
|
-
## Project Context
|
|
5029
|
-
${input.projectContext || "No project context available."}
|
|
5030
|
-
|
|
5031
|
-
## Tech Lead's Task Breakdown
|
|
5032
|
-
${input.techLeadOutput}
|
|
5033
|
-
|
|
5034
|
-
## Your Task
|
|
5035
|
-
|
|
5036
|
-
Review and refine the Tech Lead's breakdown:
|
|
5037
|
-
|
|
5038
|
-
1. **Ordering** — Order tasks so that foundational work comes first. Tasks that produce outputs consumed by later tasks must appear earlier in the list. Foundation tasks (schemas, config, shared code) must be listed before tasks that build on them. The array index IS the execution order.
|
|
5039
|
-
2. **Risk Assessment** — Flag tasks that are risky, underestimated, or have unknowns.
|
|
5040
|
-
3. **Task Merging** — If two tasks are trivially small and related, merge them.
|
|
5041
|
-
4. **Complexity Scoring** — Rate each task 1-5 (1=trivial, 5=very complex).
|
|
5042
|
-
5. **Missing Tasks** — Add any tasks the Tech Lead missed (database migrations, configuration, testing, etc.).
|
|
5043
|
-
6. **Description Quality** — Review and improve each task description to be a clear, actionable implementation guide. Each description must tell the executing agent exactly what to do, where to do it (specific files/modules), how to do it (patterns, utilities, data flow), and what is NOT in scope. Vague descriptions like "Add authentication" must be rewritten with specific file paths, implementation approach, and boundaries.
|
|
5044
|
-
|
|
5045
|
-
## CRITICAL: Task Ordering & Dependencies
|
|
5046
|
-
|
|
5047
|
-
Tasks are executed SEQUENTIALLY by a single agent on ONE branch. The agent works through tasks in array order. Each completed task's changes are available to subsequent tasks. You MUST enforce these rules:
|
|
5048
|
-
|
|
5049
|
-
1. **Order tasks by dependency.** Foundation tasks (schemas, config, shared code) must come first. Tasks that build on earlier work must appear later in the list.
|
|
5050
|
-
2. **Each task must be self-contained for its scope.** A task can depend on earlier tasks (they run sequentially), but must include all changes needed for its own goal.
|
|
5051
|
-
3. **Split tasks at logical boundaries.** Since tasks run sequentially on the same branch, splitting is safe — later tasks see earlier changes. Split when it improves clarity and reviewability.
|
|
5052
|
-
4. **Flag risks.** In your risk assessment, call out tasks that are complex or have unknowns.
|
|
5053
|
-
|
|
5054
|
-
## Output Format
|
|
5055
|
-
|
|
5056
|
-
Your entire response must be a single JSON object — no text before it, no text after it, no markdown code blocks, no explanation. Start your response with the "{" character:
|
|
5057
|
-
|
|
5058
|
-
{
|
|
5059
|
-
"tasks": [
|
|
5060
|
-
{
|
|
5061
|
-
"title": "string",
|
|
5062
|
-
"description": "string (detailed implementation guide: what to do, where to do it, how to do it, and boundaries)",
|
|
5063
|
-
"assigneeRole": "BACKEND | FRONTEND | QA | PM | DESIGN",
|
|
5064
|
-
"priority": "HIGH | MEDIUM | LOW | CRITICAL",
|
|
5065
|
-
"labels": ["string"],
|
|
5066
|
-
"acceptanceCriteria": ["string"],
|
|
5067
|
-
"complexity": 3
|
|
5068
|
-
}
|
|
5069
|
-
],
|
|
5070
|
-
"risks": [
|
|
5071
|
-
{
|
|
5072
|
-
"description": "string",
|
|
5073
|
-
"mitigation": "string",
|
|
5074
|
-
"severity": "low | medium | high"
|
|
5075
|
-
}
|
|
5076
|
-
],
|
|
5077
|
-
"architectureNotes": "string (notes for the Sprint Organizer about parallelism opportunities and constraints)"
|
|
5078
|
-
}`;
|
|
5079
|
-
return prompt;
|
|
5080
|
-
}
|
|
5081
|
-
|
|
5082
5020
|
// src/planning/agents/cross-task-reviewer.ts
|
|
5083
5021
|
function buildCrossTaskReviewerPrompt(input) {
|
|
5084
5022
|
let prompt = `# Role: Cross-Task Reviewer (Architect + Engineer + Planner)
|
|
@@ -5114,7 +5052,7 @@ IMPORTANT: Ensure the reviewed plan still addresses this feedback.
|
|
|
5114
5052
|
${input.projectContext || "No project context available."}
|
|
5115
5053
|
|
|
5116
5054
|
## Sprint Plan to Review
|
|
5117
|
-
${input.
|
|
5055
|
+
${input.plannerOutput}
|
|
5118
5056
|
|
|
5119
5057
|
## Your Review Checklist
|
|
5120
5058
|
|
|
@@ -5193,11 +5131,11 @@ IMPORTANT:
|
|
|
5193
5131
|
return prompt;
|
|
5194
5132
|
}
|
|
5195
5133
|
|
|
5196
|
-
// src/planning/agents/
|
|
5197
|
-
function
|
|
5198
|
-
let prompt = `# Role: Sprint
|
|
5134
|
+
// src/planning/agents/planner.ts
|
|
5135
|
+
function buildPlannerPrompt(input) {
|
|
5136
|
+
let prompt = `# Role: Sprint Planner
|
|
5199
5137
|
|
|
5200
|
-
You are a Sprint
|
|
5138
|
+
You are a Sprint Planner — an expert engineer, architect, and project organizer rolled into one. Your job is to take a CEO directive and produce a complete, ready-to-execute sprint plan in a single pass.
|
|
5201
5139
|
|
|
5202
5140
|
## CEO Directive
|
|
5203
5141
|
> ${input.directive}
|
|
@@ -5207,40 +5145,64 @@ You are a Sprint Organizer finalizing the sprint plan from a planning meeting. T
|
|
|
5207
5145
|
## CEO Feedback on Previous Plan
|
|
5208
5146
|
> ${input.feedback}
|
|
5209
5147
|
|
|
5210
|
-
IMPORTANT: The
|
|
5148
|
+
IMPORTANT: Incorporate this feedback into your plan. The CEO has reviewed a previous plan and wants changes.
|
|
5211
5149
|
`;
|
|
5212
5150
|
}
|
|
5213
5151
|
prompt += `
|
|
5214
|
-
##
|
|
5215
|
-
${input.
|
|
5152
|
+
## Project Context
|
|
5153
|
+
${input.projectContext || "No project context available."}
|
|
5154
|
+
|
|
5155
|
+
## Codebase Structure
|
|
5156
|
+
${input.codebaseIndex || "No codebase index available."}
|
|
5216
5157
|
|
|
5217
5158
|
## Your Task
|
|
5218
5159
|
|
|
5219
|
-
|
|
5160
|
+
Analyze the directive and produce a **complete sprint plan** with the following:
|
|
5220
5161
|
|
|
5221
|
-
1. **Sprint Name** — A concise, memorable name
|
|
5162
|
+
1. **Sprint Name** — A concise, memorable name (2-4 words)
|
|
5222
5163
|
2. **Sprint Goal** — One paragraph describing what this sprint delivers
|
|
5223
|
-
3. **
|
|
5224
|
-
4. **
|
|
5225
|
-
5. **
|
|
5226
|
-
|
|
5227
|
-
|
|
5228
|
-
|
|
5229
|
-
|
|
5230
|
-
-
|
|
5231
|
-
-
|
|
5232
|
-
-
|
|
5233
|
-
-
|
|
5234
|
-
-
|
|
5164
|
+
3. **Duration Estimate** — How many days this sprint will take with a single agent working sequentially
|
|
5165
|
+
4. **Task Breakdown** — An ordered list of tasks that fully implement the directive
|
|
5166
|
+
5. **Risk Assessment** — Potential risks with mitigations
|
|
5167
|
+
|
|
5168
|
+
### Task Requirements
|
|
5169
|
+
|
|
5170
|
+
For each task, provide:
|
|
5171
|
+
- **Title** — Clear, action-oriented (e.g., "Implement user registration API endpoint")
|
|
5172
|
+
- **Description** — A detailed, actionable implementation guide (see below)
|
|
5173
|
+
- **Assignee Role** — BACKEND, FRONTEND, QA, PM, or DESIGN
|
|
5174
|
+
- **Priority** — CRITICAL, HIGH, MEDIUM, or LOW
|
|
5175
|
+
- **Complexity** — 1 (trivial) to 5 (very complex)
|
|
5176
|
+
- **Labels** — Relevant tags (e.g., "api", "database", "ui", "auth")
|
|
5177
|
+
- **Acceptance Criteria** — Specific, testable conditions for completion
|
|
5178
|
+
|
|
5179
|
+
### CRITICAL: Task Description Requirements
|
|
5235
5180
|
|
|
5236
|
-
|
|
5181
|
+
Each task description will be handed to an INDEPENDENT agent as its primary instruction. The agent will have access to the codebase but NO context about the planning meeting. Each description MUST include:
|
|
5237
5182
|
|
|
5238
|
-
|
|
5183
|
+
1. **What to do** — Clearly state the goal and expected behavior/outcome
|
|
5184
|
+
2. **Where to do it** — List specific files, modules, or directories to modify or create. Reference existing code paths when extending functionality
|
|
5185
|
+
3. **How to do it** — Key implementation details: which patterns to follow, which existing utilities or services to use, what the data flow looks like
|
|
5186
|
+
4. **Boundaries** — What is NOT in scope for this task to prevent overlap with other tasks
|
|
5239
5187
|
|
|
5240
|
-
|
|
5241
|
-
|
|
5242
|
-
|
|
5243
|
-
|
|
5188
|
+
Bad example: "Add authentication to the API."
|
|
5189
|
+
Good example: "Implement JWT-based authentication middleware in src/middleware/auth.ts. Create a verifyToken middleware that extracts the Bearer token from the Authorization header, validates it using the existing JWT_SECRET from env config, and attaches the decoded user payload to req.user. Apply this middleware to all routes in src/routes/protected/. This task does NOT include user registration or password reset — those are handled separately."
|
|
5190
|
+
|
|
5191
|
+
### CRITICAL: Task Ordering Rules
|
|
5192
|
+
|
|
5193
|
+
Tasks are executed SEQUENTIALLY by a single agent on ONE branch. The agent works through tasks in array order. Therefore:
|
|
5194
|
+
|
|
5195
|
+
1. **Foundation first.** Place foundational tasks (schemas, config, shared code) at the beginning. Later tasks can build on earlier ones since they run in sequence.
|
|
5196
|
+
2. **No forward dependencies.** A task must NOT depend on a task that appears later in the list.
|
|
5197
|
+
3. **Each task is self-contained for its scope.** A task can depend on earlier tasks but must include all changes needed for its own goal.
|
|
5198
|
+
4. **Keep tasks focused.** Each task should do one logical unit of work. Avoid trivially small or overly large tasks.
|
|
5199
|
+
5. **Merge related trivial work.** If two pieces of work are trivially small and tightly related, combine them into one task.
|
|
5200
|
+
|
|
5201
|
+
### Sprint Scope Guidelines
|
|
5202
|
+
|
|
5203
|
+
- If the sprint would exceed 12 tasks, reduce scope or merge related tasks
|
|
5204
|
+
- Ensure acceptance criteria are specific and testable
|
|
5205
|
+
- Keep the sprint focused on the directive — avoid scope creep
|
|
5244
5206
|
|
|
5245
5207
|
## Output Format
|
|
5246
5208
|
|
|
@@ -5253,7 +5215,7 @@ Your entire response must be a single JSON object — no text before it, no text
|
|
|
5253
5215
|
"tasks": [
|
|
5254
5216
|
{
|
|
5255
5217
|
"title": "string",
|
|
5256
|
-
"description": "string (detailed implementation guide: what
|
|
5218
|
+
"description": "string (detailed implementation guide: what, where, how, boundaries)",
|
|
5257
5219
|
"assigneeRole": "BACKEND | FRONTEND | QA | PM | DESIGN",
|
|
5258
5220
|
"priority": "CRITICAL | HIGH | MEDIUM | LOW",
|
|
5259
5221
|
"labels": ["string"],
|
|
@@ -5274,89 +5236,6 @@ IMPORTANT: Tasks are executed sequentially by a single agent. The array order IS
|
|
|
5274
5236
|
return prompt;
|
|
5275
5237
|
}
|
|
5276
5238
|
|
|
5277
|
-
// src/planning/agents/tech-lead.ts
|
|
5278
|
-
function buildTechLeadPrompt(input) {
|
|
5279
|
-
let prompt = `# Role: Senior Tech Lead
|
|
5280
|
-
|
|
5281
|
-
You are a Senior Tech Lead participating in an async sprint planning meeting. Your job is to take the CEO's directive and produce an initial task breakdown.
|
|
5282
|
-
|
|
5283
|
-
## CEO Directive
|
|
5284
|
-
> ${input.directive}
|
|
5285
|
-
`;
|
|
5286
|
-
if (input.feedback) {
|
|
5287
|
-
prompt += `
|
|
5288
|
-
## CEO Feedback on Previous Plan
|
|
5289
|
-
> ${input.feedback}
|
|
5290
|
-
|
|
5291
|
-
IMPORTANT: Incorporate this feedback into your task breakdown. The CEO has reviewed a previous plan and wants changes.
|
|
5292
|
-
`;
|
|
5293
|
-
}
|
|
5294
|
-
prompt += `
|
|
5295
|
-
## Project Context
|
|
5296
|
-
${input.projectContext || "No project context available."}
|
|
5297
|
-
|
|
5298
|
-
## Codebase Structure
|
|
5299
|
-
${input.codebaseIndex || "No codebase index available."}
|
|
5300
|
-
|
|
5301
|
-
## Your Task
|
|
5302
|
-
|
|
5303
|
-
Analyze the CEO's directive and produce a detailed task breakdown. For each task:
|
|
5304
|
-
|
|
5305
|
-
1. **Title** — Clear, action-oriented (e.g., "Implement user registration API endpoint")
|
|
5306
|
-
2. **Description** — A detailed, actionable implementation guide (see description requirements below)
|
|
5307
|
-
3. **Assignee Role** — Who should work on this: BACKEND, FRONTEND, QA, PM, or DESIGN
|
|
5308
|
-
4. **Priority** — HIGH, MEDIUM, or LOW based on business impact
|
|
5309
|
-
5. **Labels** — Relevant tags (e.g., "api", "database", "ui", "auth")
|
|
5310
|
-
6. **Acceptance Criteria** — Specific, testable conditions for completion
|
|
5311
|
-
|
|
5312
|
-
Think about:
|
|
5313
|
-
- What existing code can be reused or extended
|
|
5314
|
-
- Which tasks are independent vs. dependent
|
|
5315
|
-
- What the right granularity is (not too big, not too small)
|
|
5316
|
-
- What risks or unknowns exist
|
|
5317
|
-
|
|
5318
|
-
## CRITICAL: Task Description Requirements
|
|
5319
|
-
|
|
5320
|
-
Each task description will be handed to an INDEPENDENT agent as its primary instruction. The agent will have access to the codebase but NO context about the planning meeting. Descriptions must be clear enough for the agent to execute the task without ambiguity.
|
|
5321
|
-
|
|
5322
|
-
Each description MUST include:
|
|
5323
|
-
1. **What to do** — Clearly state the goal and what needs to be implemented, changed, or created. Be specific about the expected behavior or outcome.
|
|
5324
|
-
2. **Where to do it** — List the specific files, modules, or directories that need to be modified or created. Reference existing code paths when extending functionality.
|
|
5325
|
-
3. **How to do it** — Provide key implementation details: which patterns to follow, which existing utilities or services to use, what the data flow looks like.
|
|
5326
|
-
4. **Boundaries** — Clarify what is NOT in scope for this task to prevent overlap with other tasks.
|
|
5327
|
-
|
|
5328
|
-
Bad example: "Add authentication to the API."
|
|
5329
|
-
Good example: "Implement JWT-based authentication middleware in src/middleware/auth.ts. Create a verifyToken middleware that extracts the Bearer token from the Authorization header, validates it using the existing JWT_SECRET from env config, and attaches the decoded user payload to req.user. Apply this middleware to all routes in src/routes/protected/. Add a POST /auth/login endpoint in src/routes/auth.ts that accepts {email, password}, validates credentials against the users table, and returns a signed JWT. This task does NOT include user registration or password reset — those are handled separately."
|
|
5330
|
-
|
|
5331
|
-
## CRITICAL: Task Ordering Rules
|
|
5332
|
-
|
|
5333
|
-
Tasks are executed SEQUENTIALLY by a single agent on ONE branch. The agent works through tasks in the order they appear in the array. Therefore:
|
|
5334
|
-
|
|
5335
|
-
1. **Foundation first.** Place foundational tasks (schemas, config, shared code) at the beginning of the list. Later tasks can build on earlier ones since they run in sequence on the same branch.
|
|
5336
|
-
2. **Each task must be self-contained.** A task must include ALL the code changes it needs to work — from config to implementation to tests. A task CAN depend on earlier tasks in the list since they will have already been completed.
|
|
5337
|
-
3. **Logical ordering matters.** Tasks are dispatched in the order they appear. Ensure dependent tasks come after their prerequisites.
|
|
5338
|
-
4. **Keep tasks focused.** Each task should do one logical unit of work. Since there are no parallel execution conflicts, tasks can be more granular — but avoid tasks that are too small or trivial.
|
|
5339
|
-
|
|
5340
|
-
## Output Format
|
|
5341
|
-
|
|
5342
|
-
Your entire response must be a single JSON object — no text before it, no text after it, no markdown code blocks, no explanation. Start your response with the "{" character:
|
|
5343
|
-
|
|
5344
|
-
{
|
|
5345
|
-
"tasks": [
|
|
5346
|
-
{
|
|
5347
|
-
"title": "string",
|
|
5348
|
-
"description": "string (detailed implementation guide: what to do, where to do it, how to do it, and boundaries — see description requirements above)",
|
|
5349
|
-
"assigneeRole": "BACKEND | FRONTEND | QA | PM | DESIGN",
|
|
5350
|
-
"priority": "HIGH | MEDIUM | LOW",
|
|
5351
|
-
"labels": ["string"],
|
|
5352
|
-
"acceptanceCriteria": ["string"]
|
|
5353
|
-
}
|
|
5354
|
-
],
|
|
5355
|
-
"technicalNotes": "string (brief notes on architecture decisions, risks, or considerations for the Architect phase)"
|
|
5356
|
-
}`;
|
|
5357
|
-
return prompt;
|
|
5358
|
-
}
|
|
5359
|
-
|
|
5360
5239
|
// src/planning/planning-meeting.ts
|
|
5361
5240
|
class PlanningMeeting {
|
|
5362
5241
|
projectPath;
|
|
@@ -5372,52 +5251,33 @@ class PlanningMeeting {
|
|
|
5372
5251
|
async run(directive, feedback) {
|
|
5373
5252
|
const projectContext = this.getProjectContext();
|
|
5374
5253
|
const codebaseIndex = this.getCodebaseIndex();
|
|
5375
|
-
this.log("Phase 1/
|
|
5376
|
-
const
|
|
5254
|
+
this.log("Phase 1/2: Planner building sprint plan...", "info");
|
|
5255
|
+
const plannerPrompt = buildPlannerPrompt({
|
|
5377
5256
|
directive,
|
|
5378
5257
|
projectContext,
|
|
5379
5258
|
codebaseIndex,
|
|
5380
5259
|
feedback
|
|
5381
5260
|
});
|
|
5382
|
-
const
|
|
5383
|
-
this.log("
|
|
5384
|
-
this.log("Phase 2/
|
|
5385
|
-
const architectPrompt = buildArchitectPrompt({
|
|
5386
|
-
directive,
|
|
5387
|
-
projectContext,
|
|
5388
|
-
techLeadOutput,
|
|
5389
|
-
feedback
|
|
5390
|
-
});
|
|
5391
|
-
const architectOutput = await this.aiRunner.run(architectPrompt);
|
|
5392
|
-
this.log("Architect phase complete.", "success");
|
|
5393
|
-
this.log("Phase 3/4: Sprint Organizer finalizing plan...", "info");
|
|
5394
|
-
const sprintOrganizerPrompt = buildSprintOrganizerPrompt({
|
|
5395
|
-
directive,
|
|
5396
|
-
architectOutput,
|
|
5397
|
-
feedback
|
|
5398
|
-
});
|
|
5399
|
-
const sprintOrganizerOutput = await this.aiRunner.run(sprintOrganizerPrompt);
|
|
5400
|
-
this.log("Sprint Organizer phase complete.", "success");
|
|
5401
|
-
this.log("Phase 4/4: Cross-Task Review checking for conflicts and overlaps...", "info");
|
|
5261
|
+
const plannerOutput = await this.aiRunner.run(plannerPrompt);
|
|
5262
|
+
this.log("Planner phase complete.", "success");
|
|
5263
|
+
this.log("Phase 2/2: Reviewer checking for conflicts and quality...", "info");
|
|
5402
5264
|
const crossTaskReviewerPrompt = buildCrossTaskReviewerPrompt({
|
|
5403
5265
|
directive,
|
|
5404
5266
|
projectContext,
|
|
5405
|
-
|
|
5267
|
+
plannerOutput,
|
|
5406
5268
|
feedback
|
|
5407
5269
|
});
|
|
5408
|
-
const
|
|
5409
|
-
this.log("
|
|
5410
|
-
const plan = parseSprintPlanFromAI(
|
|
5270
|
+
const reviewOutput = await this.aiRunner.run(crossTaskReviewerPrompt);
|
|
5271
|
+
this.log("Review phase complete.", "success");
|
|
5272
|
+
const plan = parseSprintPlanFromAI(reviewOutput, directive);
|
|
5411
5273
|
if (feedback) {
|
|
5412
5274
|
plan.feedback = feedback;
|
|
5413
5275
|
}
|
|
5414
5276
|
return {
|
|
5415
5277
|
plan,
|
|
5416
5278
|
phaseOutputs: {
|
|
5417
|
-
|
|
5418
|
-
|
|
5419
|
-
sprintOrganizer: sprintOrganizerOutput,
|
|
5420
|
-
crossTaskReview: crossTaskReviewOutput
|
|
5279
|
+
planner: plannerOutput,
|
|
5280
|
+
review: reviewOutput
|
|
5421
5281
|
}
|
|
5422
5282
|
};
|
|
5423
5283
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAKtC,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGjE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE9E;;;;;;GAMG;AACH,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,iBAAiB,CAA+C;gBAE5D,MAAM,EAAE,kBAAkB;IAStC;;OAEG;YACW,eAAe;IAuB7B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5B;;;;;OAKG;YACW,iBAAiB;IAkC/B,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,eAAe;IAmBvB;;OAEG;YACW,iBAAiB;IAa/B;;OAEG;YACW,UAAU;IAyCxB;;OAEG;YACW,YAAY;IAM1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAqB7B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQnC;;OAEG;YACW,OAAO;IAYrB;;OAEG;IACH,QAAQ;;;;;;IASR;;OAEG;IACH,cAAc,IAAI,UAAU,EAAE;IAI9B,OAAO,CAAC,eAAe;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAKtC,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGjE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE9E;;;;;;GAMG;AACH,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,iBAAiB,CAA+C;gBAE5D,MAAM,EAAE,kBAAkB;IAStC;;OAEG;YACW,eAAe;IAuB7B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5B;;;;;OAKG;YACW,iBAAiB;IAkC/B,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,eAAe;IAmBvB;;OAEG;YACW,iBAAiB;IAa/B;;OAEG;YACW,UAAU;IAyCxB;;OAEG;YACW,YAAY;IAM1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAqB7B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQnC;;OAEG;YACW,OAAO;IAYrB;;OAEG;IACH,QAAQ;;;;;;IASR;;OAEG;IACH,cAAc,IAAI,UAAU,EAAE;IAI9B,OAAO,CAAC,eAAe;IA8BvB,OAAO,CAAC,qBAAqB;IA8D7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAa1B"}
|
|
@@ -30,5 +30,7 @@ export interface OrchestratorConfig {
|
|
|
30
30
|
model?: string;
|
|
31
31
|
/** AI provider (e.g. codex, claude, etc.) */
|
|
32
32
|
provider?: AiProvider;
|
|
33
|
+
/** Reasoning effort level for Codex models (e.g. "low", "medium", "high") */
|
|
34
|
+
reasoningEffort?: string;
|
|
33
35
|
}
|
|
34
36
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/orchestrator/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,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,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,aAAa,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/orchestrator/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,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,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,aAAa,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,6EAA6E;IAC7E,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B"}
|
|
@@ -1,15 +1 @@
|
|
|
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
1
|
//# sourceMappingURL=architect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"architect.d.ts","sourceRoot":"","sources":["../../../src/planning/agents/architect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"architect.d.ts","sourceRoot":"","sources":["../../../src/planning/agents/architect.ts"],"names":[],"mappings":""}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Cross-Task Reviewer Agent Persona
|
|
3
3
|
*
|
|
4
|
-
* Phase
|
|
5
|
-
*
|
|
4
|
+
* Phase 2 (final) of the planning meeting. Reviews the Planner's
|
|
5
|
+
* sprint plan for task ordering issues, dependency correctness,
|
|
6
6
|
* description quality, and overall plan coherence.
|
|
7
7
|
*/
|
|
8
8
|
export interface CrossTaskReviewerInput {
|
|
9
9
|
directive: string;
|
|
10
10
|
projectContext: string;
|
|
11
|
-
|
|
11
|
+
plannerOutput: string;
|
|
12
12
|
feedback?: string;
|
|
13
13
|
}
|
|
14
14
|
export declare function buildCrossTaskReviewerPrompt(input: CrossTaskReviewerInput): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cross-task-reviewer.d.ts","sourceRoot":"","sources":["../../../src/planning/agents/cross-task-reviewer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,
|
|
1
|
+
{"version":3,"file":"cross-task-reviewer.d.ts","sourceRoot":"","sources":["../../../src/planning/agents/cross-task-reviewer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,sBAAsB,GAC5B,MAAM,CAkHR"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Planner Agent Persona
|
|
3
|
+
*
|
|
4
|
+
* Phase 1 of the simplified planning meeting. Combines the responsibilities
|
|
5
|
+
* of the former Tech Lead, Architect, and Sprint Organizer into a single
|
|
6
|
+
* pass that produces a complete, ordered sprint plan from the CEO directive.
|
|
7
|
+
*/
|
|
8
|
+
export interface PlannerInput {
|
|
9
|
+
directive: string;
|
|
10
|
+
projectContext: string;
|
|
11
|
+
codebaseIndex: string;
|
|
12
|
+
feedback?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function buildPlannerPrompt(input: PlannerInput): string;
|
|
15
|
+
//# sourceMappingURL=planner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../../src/planning/agents/planner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAyG9D"}
|
|
@@ -1,14 +1 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sprint Organizer Agent Persona
|
|
3
|
-
*
|
|
4
|
-
* Phase 3 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
1
|
//# sourceMappingURL=sprint-organizer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sprint-organizer.d.ts","sourceRoot":"","sources":["../../../src/planning/agents/sprint-organizer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sprint-organizer.d.ts","sourceRoot":"","sources":["../../../src/planning/agents/sprint-organizer.ts"],"names":[],"mappings":""}
|
|
@@ -1,15 +1 @@
|
|
|
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
1
|
//# sourceMappingURL=tech-lead.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tech-lead.d.ts","sourceRoot":"","sources":["../../../src/planning/agents/tech-lead.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tech-lead.d.ts","sourceRoot":"","sources":["../../../src/planning/agents/tech-lead.ts"],"names":[],"mappings":""}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { AiRunner } from "../ai/runner.js";
|
|
2
2
|
import { type SprintPlan } from "./sprint-plan.js";
|
|
3
|
-
export type PlanningPhase = "
|
|
3
|
+
export type PlanningPhase = "planner" | "review" | "complete";
|
|
4
4
|
export interface PlanningMeetingConfig {
|
|
5
5
|
projectPath: string;
|
|
6
6
|
aiRunner: AiRunner;
|
|
@@ -10,17 +10,15 @@ export interface PlanningMeetingResult {
|
|
|
10
10
|
plan: SprintPlan;
|
|
11
11
|
/** Raw outputs from each phase for debugging/transparency */
|
|
12
12
|
phaseOutputs: {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
sprintOrganizer: string;
|
|
16
|
-
crossTaskReview: string;
|
|
13
|
+
planner: string;
|
|
14
|
+
review: string;
|
|
17
15
|
};
|
|
18
16
|
}
|
|
19
17
|
/**
|
|
20
|
-
* Orchestrates a
|
|
18
|
+
* Orchestrates a two-phase planning meeting where AI agent personas
|
|
21
19
|
* collaborate to produce a sprint plan.
|
|
22
20
|
*
|
|
23
|
-
* Flow: CEO Directive →
|
|
21
|
+
* Flow: CEO Directive → Planner → Cross-Task Review → Sprint Plan
|
|
24
22
|
*/
|
|
25
23
|
export declare class PlanningMeeting {
|
|
26
24
|
private projectPath;
|
|
@@ -1 +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;
|
|
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;AAKhD,OAAO,EAAyB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE1E,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE9D,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,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,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;IA6CjC,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,gBAAgB;CA8BzB"}
|
|
@@ -1 +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;AAGzB,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,
|
|
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;AAGzB,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,CAiE7D;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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@locusai/sdk",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.7",
|
|
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.11.
|
|
33
|
+
"@locusai/shared": "^0.11.7",
|
|
34
34
|
"axios": "^1.13.2",
|
|
35
35
|
"events": "^3.3.0",
|
|
36
36
|
"globby": "^14.0.2"
|