aipanel-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +166 -0
- package/dist/bin/aipanel.d.ts +2 -0
- package/dist/bin/aipanel.js +5 -0
- package/dist/bin/aipanel.js.map +1 -0
- package/dist/src/app/AipanelApp.d.ts +17 -0
- package/dist/src/app/AipanelApp.js +53 -0
- package/dist/src/app/AipanelApp.js.map +1 -0
- package/dist/src/app/CommandRouter.d.ts +9 -0
- package/dist/src/app/CommandRouter.js +154 -0
- package/dist/src/app/CommandRouter.js.map +1 -0
- package/dist/src/app/ProfileLoader.d.ts +10 -0
- package/dist/src/app/ProfileLoader.js +51 -0
- package/dist/src/app/ProfileLoader.js.map +1 -0
- package/dist/src/app/WorkflowSelector.d.ts +4 -0
- package/dist/src/app/WorkflowSelector.js +6 -0
- package/dist/src/app/WorkflowSelector.js.map +1 -0
- package/dist/src/app/index.d.ts +4 -0
- package/dist/src/app/index.js +5 -0
- package/dist/src/app/index.js.map +1 -0
- package/dist/src/app/types.d.ts +36 -0
- package/dist/src/app/types.js +2 -0
- package/dist/src/app/types.js.map +1 -0
- package/dist/src/artifact/ArtifactRepository.d.ts +33 -0
- package/dist/src/artifact/ArtifactRepository.js +91 -0
- package/dist/src/artifact/ArtifactRepository.js.map +1 -0
- package/dist/src/artifact/index.d.ts +1 -0
- package/dist/src/artifact/index.js +2 -0
- package/dist/src/artifact/index.js.map +1 -0
- package/dist/src/cli/aipanel.d.ts +2 -0
- package/dist/src/cli/aipanel.js +32 -0
- package/dist/src/cli/aipanel.js.map +1 -0
- package/dist/src/compare/ComparisonEngine.d.ts +5 -0
- package/dist/src/compare/ComparisonEngine.js +19 -0
- package/dist/src/compare/ComparisonEngine.js.map +1 -0
- package/dist/src/compare/ResponseNormalizer.d.ts +36 -0
- package/dist/src/compare/ResponseNormalizer.js +43 -0
- package/dist/src/compare/ResponseNormalizer.js.map +1 -0
- package/dist/src/compare/index.d.ts +3 -0
- package/dist/src/compare/index.js +3 -0
- package/dist/src/compare/index.js.map +1 -0
- package/dist/src/context/ContextCollector.d.ts +43 -0
- package/dist/src/context/ContextCollector.js +81 -0
- package/dist/src/context/ContextCollector.js.map +1 -0
- package/dist/src/context/index.d.ts +2 -0
- package/dist/src/context/index.js +2 -0
- package/dist/src/context/index.js.map +1 -0
- package/dist/src/domain/artifact.d.ts +36 -0
- package/dist/src/domain/artifact.js +62 -0
- package/dist/src/domain/artifact.js.map +1 -0
- package/dist/src/domain/base.d.ts +10 -0
- package/dist/src/domain/base.js +23 -0
- package/dist/src/domain/base.js.map +1 -0
- package/dist/src/domain/index.d.ts +5 -0
- package/dist/src/domain/index.js +6 -0
- package/dist/src/domain/index.js.map +1 -0
- package/dist/src/domain/run.d.ts +260 -0
- package/dist/src/domain/run.js +456 -0
- package/dist/src/domain/run.js.map +1 -0
- package/dist/src/domain/session.d.ts +72 -0
- package/dist/src/domain/session.js +131 -0
- package/dist/src/domain/session.js.map +1 -0
- package/dist/src/domain/value-objects.d.ts +120 -0
- package/dist/src/domain/value-objects.js +191 -0
- package/dist/src/domain/value-objects.js.map +1 -0
- package/dist/src/orchestrator/PlanBuilder.d.ts +6 -0
- package/dist/src/orchestrator/PlanBuilder.js +59 -0
- package/dist/src/orchestrator/PlanBuilder.js.map +1 -0
- package/dist/src/orchestrator/ResultMerger.d.ts +10 -0
- package/dist/src/orchestrator/ResultMerger.js +19 -0
- package/dist/src/orchestrator/ResultMerger.js.map +1 -0
- package/dist/src/orchestrator/TaskExecutor.d.ts +20 -0
- package/dist/src/orchestrator/TaskExecutor.js +81 -0
- package/dist/src/orchestrator/TaskExecutor.js.map +1 -0
- package/dist/src/orchestrator/TaskScheduler.d.ts +4 -0
- package/dist/src/orchestrator/TaskScheduler.js +19 -0
- package/dist/src/orchestrator/TaskScheduler.js.map +1 -0
- package/dist/src/orchestrator/ValidationRunner.d.ts +4 -0
- package/dist/src/orchestrator/ValidationRunner.js +22 -0
- package/dist/src/orchestrator/ValidationRunner.js.map +1 -0
- package/dist/src/orchestrator/index.d.ts +5 -0
- package/dist/src/orchestrator/index.js +6 -0
- package/dist/src/orchestrator/index.js.map +1 -0
- package/dist/src/output/ResultRenderer.d.ts +13 -0
- package/dist/src/output/ResultRenderer.js +49 -0
- package/dist/src/output/ResultRenderer.js.map +1 -0
- package/dist/src/output/index.d.ts +1 -0
- package/dist/src/output/index.js +2 -0
- package/dist/src/output/index.js.map +1 -0
- package/dist/src/providers/ClaudeCodeAdapter.d.ts +5 -0
- package/dist/src/providers/ClaudeCodeAdapter.js +95 -0
- package/dist/src/providers/ClaudeCodeAdapter.js.map +1 -0
- package/dist/src/providers/ProviderAdapter.d.ts +35 -0
- package/dist/src/providers/ProviderAdapter.js +2 -0
- package/dist/src/providers/ProviderAdapter.js.map +1 -0
- package/dist/src/providers/ProviderRegistry.d.ts +12 -0
- package/dist/src/providers/ProviderRegistry.js +23 -0
- package/dist/src/providers/ProviderRegistry.js.map +1 -0
- package/dist/src/providers/index.d.ts +3 -0
- package/dist/src/providers/index.js +4 -0
- package/dist/src/providers/index.js.map +1 -0
- package/dist/src/run/RunCoordinator.d.ts +33 -0
- package/dist/src/run/RunCoordinator.js +101 -0
- package/dist/src/run/RunCoordinator.js.map +1 -0
- package/dist/src/run/RunRepository.d.ts +14 -0
- package/dist/src/run/RunRepository.js +55 -0
- package/dist/src/run/RunRepository.js.map +1 -0
- package/dist/src/run/index.d.ts +2 -0
- package/dist/src/run/index.js +3 -0
- package/dist/src/run/index.js.map +1 -0
- package/dist/src/session/SessionManager.d.ts +26 -0
- package/dist/src/session/SessionManager.js +60 -0
- package/dist/src/session/SessionManager.js.map +1 -0
- package/dist/src/session/SessionRepository.d.ts +14 -0
- package/dist/src/session/SessionRepository.js +55 -0
- package/dist/src/session/SessionRepository.js.map +1 -0
- package/dist/src/session/index.d.ts +2 -0
- package/dist/src/session/index.js +3 -0
- package/dist/src/session/index.js.map +1 -0
- package/dist/src/shared/clock.d.ts +4 -0
- package/dist/src/shared/clock.js +9 -0
- package/dist/src/shared/clock.js.map +1 -0
- package/dist/src/shared/contracts.d.ts +254 -0
- package/dist/src/shared/contracts.js +2 -0
- package/dist/src/shared/contracts.js.map +1 -0
- package/dist/src/shared/errors.d.ts +9 -0
- package/dist/src/shared/errors.js +11 -0
- package/dist/src/shared/errors.js.map +1 -0
- package/dist/src/shared/file-system.d.ts +8 -0
- package/dist/src/shared/file-system.js +36 -0
- package/dist/src/shared/file-system.js.map +1 -0
- package/dist/src/shared/ids.d.ts +1 -0
- package/dist/src/shared/ids.js +6 -0
- package/dist/src/shared/ids.js.map +1 -0
- package/dist/src/usecases/CompareUseCase.d.ts +6 -0
- package/dist/src/usecases/CompareUseCase.js +9 -0
- package/dist/src/usecases/CompareUseCase.js.map +1 -0
- package/dist/src/usecases/ConsultUseCase.d.ts +48 -0
- package/dist/src/usecases/ConsultUseCase.js +187 -0
- package/dist/src/usecases/ConsultUseCase.js.map +1 -0
- package/dist/src/usecases/DebugUseCase.d.ts +48 -0
- package/dist/src/usecases/DebugUseCase.js +191 -0
- package/dist/src/usecases/DebugUseCase.js.map +1 -0
- package/dist/src/usecases/FollowupUseCase.d.ts +6 -0
- package/dist/src/usecases/FollowupUseCase.js +14 -0
- package/dist/src/usecases/FollowupUseCase.js.map +1 -0
- package/dist/src/usecases/ListProvidersUseCase.d.ts +9 -0
- package/dist/src/usecases/ListProvidersUseCase.js +13 -0
- package/dist/src/usecases/ListProvidersUseCase.js.map +1 -0
- package/dist/src/usecases/helpers.d.ts +9 -0
- package/dist/src/usecases/helpers.js +31 -0
- package/dist/src/usecases/helpers.js.map +1 -0
- package/dist/src/usecases/index.d.ts +5 -0
- package/dist/src/usecases/index.js +6 -0
- package/dist/src/usecases/index.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskExecutor.js","sourceRoot":"","sources":["../../../src/orchestrator/TaskExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export class TaskScheduler {
|
|
2
|
+
order(tasks) {
|
|
3
|
+
const remaining = [...tasks];
|
|
4
|
+
const ordered = [];
|
|
5
|
+
const seen = new Set();
|
|
6
|
+
while (remaining.length > 0) {
|
|
7
|
+
const nextIndex = remaining.findIndex((task) => (task.dependsOn ?? []).every((dependency) => seen.has(dependency)));
|
|
8
|
+
const indexToUse = nextIndex >= 0 ? nextIndex : 0;
|
|
9
|
+
const [task] = remaining.splice(indexToUse, 1);
|
|
10
|
+
if (!task) {
|
|
11
|
+
break;
|
|
12
|
+
}
|
|
13
|
+
ordered.push(task);
|
|
14
|
+
seen.add(task.taskKind);
|
|
15
|
+
}
|
|
16
|
+
return ordered;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=TaskScheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskScheduler.js","sourceRoot":"","sources":["../../../src/orchestrator/TaskScheduler.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IACxB,KAAK,CAAC,KAAqB;QACzB,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAC7C,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CACnE,CAAC;YAEF,MAAM,UAAU,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM;YACR,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export class ValidationRunner {
|
|
2
|
+
validate(normalizedResponses) {
|
|
3
|
+
if (normalizedResponses.length === 0) {
|
|
4
|
+
return {
|
|
5
|
+
status: "failed",
|
|
6
|
+
notes: ["No normalized responses were produced."],
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
const lowConfidence = normalizedResponses.filter((response) => response.confidence.level === "low");
|
|
10
|
+
if (lowConfidence.length > 0) {
|
|
11
|
+
return {
|
|
12
|
+
status: "partial",
|
|
13
|
+
notes: lowConfidence.map((response) => `Low confidence response from ${response.provider}/${response.taskId}: ${response.confidence.reason}`),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
status: "validated",
|
|
18
|
+
notes: ["All task responses reached the minimum validation threshold for phase 1."],
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=ValidationRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValidationRunner.js","sourceRoot":"","sources":["../../../src/orchestrator/ValidationRunner.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,gBAAgB;IAC3B,QAAQ,CAAC,mBAA6C;QACpD,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO;gBACL,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,CAAC,wCAAwC,CAAC;aAClD,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,mBAAmB,CAAC,MAAM,CAC9C,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,KAAK,KAAK,CAClD,CAAC;QAEF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,aAAa,CAAC,GAAG,CACtB,CAAC,QAAQ,EAAE,EAAE,CACX,gCAAgC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,CACxG;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,MAAM,EAAE,WAAW;YACnB,KAAK,EAAE,CAAC,0EAA0E,CAAC;SACpF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { PlanBuilder } from "./PlanBuilder.js";
|
|
2
|
+
export { TaskScheduler } from "./TaskScheduler.js";
|
|
3
|
+
export { TaskExecutor } from "./TaskExecutor.js";
|
|
4
|
+
export { ResultMerger } from "./ResultMerger.js";
|
|
5
|
+
export { ValidationRunner } from "./ValidationRunner.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/orchestrator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ConsultationResult } from "../usecases/ConsultUseCase.js";
|
|
2
|
+
import type { DebugResult } from "../usecases/DebugUseCase.js";
|
|
3
|
+
export type RenderedOutput = {
|
|
4
|
+
text: string;
|
|
5
|
+
json: Record<string, unknown>;
|
|
6
|
+
};
|
|
7
|
+
export type RenderableResult = {
|
|
8
|
+
kind: "providers";
|
|
9
|
+
providers: string[];
|
|
10
|
+
} | ConsultationResult | DebugResult;
|
|
11
|
+
export declare class ResultRenderer {
|
|
12
|
+
render(result: RenderableResult, outputFormat?: "text" | "json"): RenderedOutput;
|
|
13
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export class ResultRenderer {
|
|
2
|
+
render(result, outputFormat = "text") {
|
|
3
|
+
const rendered = (() => {
|
|
4
|
+
switch (result.kind) {
|
|
5
|
+
case "providers":
|
|
6
|
+
return {
|
|
7
|
+
text: result.providers.join("\n"),
|
|
8
|
+
json: {
|
|
9
|
+
kind: result.kind,
|
|
10
|
+
providers: result.providers,
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
case "consultation":
|
|
14
|
+
return {
|
|
15
|
+
text: [
|
|
16
|
+
`session: ${result.sessionId}`,
|
|
17
|
+
`run: ${result.runId}`,
|
|
18
|
+
`provider: ${result.provider}`,
|
|
19
|
+
`status: ${result.status}`,
|
|
20
|
+
"",
|
|
21
|
+
result.answer,
|
|
22
|
+
].join("\n"),
|
|
23
|
+
json: { ...result },
|
|
24
|
+
};
|
|
25
|
+
case "debug":
|
|
26
|
+
return {
|
|
27
|
+
text: [
|
|
28
|
+
`session: ${result.sessionId}`,
|
|
29
|
+
`run: ${result.runId}`,
|
|
30
|
+
`status: ${result.status}`,
|
|
31
|
+
"",
|
|
32
|
+
`summary: ${result.summary}`,
|
|
33
|
+
"",
|
|
34
|
+
result.details.join("\n\n"),
|
|
35
|
+
].join("\n"),
|
|
36
|
+
json: { ...result },
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
})();
|
|
40
|
+
if (outputFormat === "json") {
|
|
41
|
+
return {
|
|
42
|
+
text: `${JSON.stringify(rendered.json, null, 2)}\n`,
|
|
43
|
+
json: rendered.json,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
return rendered;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=ResultRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResultRenderer.js","sourceRoot":"","sources":["../../../src/output/ResultRenderer.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,cAAc;IACzB,MAAM,CAAC,MAAwB,EAAE,eAAgC,MAAM;QACrE,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE;YACrB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;gBACpB,KAAK,WAAW;oBACd,OAAO;wBACL,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;wBACjC,IAAI,EAAE;4BACJ,IAAI,EAAE,MAAM,CAAC,IAAI;4BACjB,SAAS,EAAE,MAAM,CAAC,SAAS;yBAC5B;qBACF,CAAC;gBACJ,KAAK,cAAc;oBACjB,OAAO;wBACL,IAAI,EAAE;4BACJ,YAAY,MAAM,CAAC,SAAS,EAAE;4BAC9B,QAAQ,MAAM,CAAC,KAAK,EAAE;4BACtB,aAAa,MAAM,CAAC,QAAQ,EAAE;4BAC9B,WAAW,MAAM,CAAC,MAAM,EAAE;4BAC1B,EAAE;4BACF,MAAM,CAAC,MAAM;yBACd,CAAC,IAAI,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE;qBACpB,CAAC;gBACJ,KAAK,OAAO;oBACV,OAAO;wBACL,IAAI,EAAE;4BACJ,YAAY,MAAM,CAAC,SAAS,EAAE;4BAC9B,QAAQ,MAAM,CAAC,KAAK,EAAE;4BACtB,WAAW,MAAM,CAAC,MAAM,EAAE;4BAC1B,EAAE;4BACF,YAAY,MAAM,CAAC,OAAO,EAAE;4BAC5B,EAAE;4BACF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;yBAC5B,CAAC,IAAI,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE;qBACpB,CAAC;YACN,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;YAC5B,OAAO;gBACL,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;gBACnD,IAAI,EAAE,QAAQ,CAAC,IAAI;aACpB,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./ResultRenderer.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/output/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
function isSuccessSubtype(subtype) {
|
|
3
|
+
return subtype === "success";
|
|
4
|
+
}
|
|
5
|
+
async function runClaude(plan) {
|
|
6
|
+
return new Promise((resolve, reject) => {
|
|
7
|
+
const args = [
|
|
8
|
+
"-p",
|
|
9
|
+
"--tools",
|
|
10
|
+
"",
|
|
11
|
+
"--model",
|
|
12
|
+
plan.model ?? "sonnet",
|
|
13
|
+
"--output-format",
|
|
14
|
+
"json",
|
|
15
|
+
plan.prompt,
|
|
16
|
+
];
|
|
17
|
+
const child = spawn("claude", args, {
|
|
18
|
+
cwd: plan.cwd,
|
|
19
|
+
env: process.env,
|
|
20
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
21
|
+
});
|
|
22
|
+
let stdout = "";
|
|
23
|
+
let stderr = "";
|
|
24
|
+
let didTimeout = false;
|
|
25
|
+
const timeoutHandle = setTimeout(() => {
|
|
26
|
+
didTimeout = true;
|
|
27
|
+
child.kill("SIGTERM");
|
|
28
|
+
}, plan.timeoutMs);
|
|
29
|
+
child.stdout.on("data", (chunk) => {
|
|
30
|
+
stdout += chunk.toString();
|
|
31
|
+
});
|
|
32
|
+
child.stderr.on("data", (chunk) => {
|
|
33
|
+
stderr += chunk.toString();
|
|
34
|
+
});
|
|
35
|
+
child.on("error", (error) => {
|
|
36
|
+
clearTimeout(timeoutHandle);
|
|
37
|
+
reject(error);
|
|
38
|
+
});
|
|
39
|
+
child.on("close", (code, signal) => {
|
|
40
|
+
clearTimeout(timeoutHandle);
|
|
41
|
+
if (didTimeout) {
|
|
42
|
+
reject(new Error(`Claude Code timed out after ${plan.timeoutMs}ms.`));
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (code !== 0) {
|
|
46
|
+
const details = [
|
|
47
|
+
`Claude Code exited with code ${code}${signal ? ` (signal: ${signal})` : ""}.`,
|
|
48
|
+
];
|
|
49
|
+
if (stderr.trim()) {
|
|
50
|
+
details.push(stderr.trim());
|
|
51
|
+
}
|
|
52
|
+
if (stdout.trim()) {
|
|
53
|
+
details.push(stdout.trim());
|
|
54
|
+
}
|
|
55
|
+
reject(new Error(details.join("\n\n")));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
resolve(stdout);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
export class ClaudeCodeAdapter {
|
|
63
|
+
name = "claude-code";
|
|
64
|
+
async call(input) {
|
|
65
|
+
const stdout = await runClaude(input);
|
|
66
|
+
const parsed = JSON.parse(stdout);
|
|
67
|
+
const subtype = parsed.subtype ?? null;
|
|
68
|
+
const isError = parsed.is_error === true || !isSuccessSubtype(parsed.subtype);
|
|
69
|
+
const externalRefs = parsed.session_id
|
|
70
|
+
? [
|
|
71
|
+
{
|
|
72
|
+
system: "claude-code",
|
|
73
|
+
id: parsed.session_id,
|
|
74
|
+
scope: "session",
|
|
75
|
+
},
|
|
76
|
+
]
|
|
77
|
+
: [];
|
|
78
|
+
return {
|
|
79
|
+
provider: this.name,
|
|
80
|
+
rawText: parsed.result ?? "",
|
|
81
|
+
rawJson: parsed,
|
|
82
|
+
usage: {
|
|
83
|
+
inputTokens: parsed.usage?.input_tokens ?? null,
|
|
84
|
+
outputTokens: parsed.usage?.output_tokens ?? null,
|
|
85
|
+
costUsd: parsed.total_cost_usd ?? null,
|
|
86
|
+
latencyMs: parsed.duration_ms ?? null,
|
|
87
|
+
},
|
|
88
|
+
externalRefs,
|
|
89
|
+
citations: [],
|
|
90
|
+
isError,
|
|
91
|
+
subtype,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=ClaudeCodeAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaudeCodeAdapter.js","sourceRoot":"","sources":["../../../src/providers/ClaudeCodeAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface ProviderCallPlan {
|
|
2
|
+
provider: string;
|
|
3
|
+
prompt: string;
|
|
4
|
+
cwd: string;
|
|
5
|
+
timeoutMs: number;
|
|
6
|
+
model?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ProviderCallResult {
|
|
9
|
+
provider: string;
|
|
10
|
+
rawText: string;
|
|
11
|
+
rawJson: unknown;
|
|
12
|
+
usage: {
|
|
13
|
+
inputTokens?: number | null;
|
|
14
|
+
outputTokens?: number | null;
|
|
15
|
+
costUsd?: number | null;
|
|
16
|
+
latencyMs?: number | null;
|
|
17
|
+
};
|
|
18
|
+
externalRefs: Array<{
|
|
19
|
+
system: string;
|
|
20
|
+
id: string;
|
|
21
|
+
scope: string;
|
|
22
|
+
}>;
|
|
23
|
+
citations: Array<{
|
|
24
|
+
kind: string;
|
|
25
|
+
label?: string | null;
|
|
26
|
+
pathOrUrl?: string | null;
|
|
27
|
+
line?: number | null;
|
|
28
|
+
}>;
|
|
29
|
+
isError: boolean;
|
|
30
|
+
subtype: string | null;
|
|
31
|
+
}
|
|
32
|
+
export interface ProviderAdapter {
|
|
33
|
+
readonly name: string;
|
|
34
|
+
call(plan: ProviderCallPlan): Promise<ProviderCallResult>;
|
|
35
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProviderAdapter.js","sourceRoot":"","sources":["../../../src/providers/ProviderAdapter.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ProviderAdapter } from "./ProviderAdapter.js";
|
|
2
|
+
export interface ProviderRegistryOptions {
|
|
3
|
+
adapters: ProviderAdapter[];
|
|
4
|
+
defaultProvider: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class ProviderRegistry {
|
|
7
|
+
#private;
|
|
8
|
+
constructor(options: ProviderRegistryOptions);
|
|
9
|
+
list(): string[];
|
|
10
|
+
get(name?: string): ProviderAdapter;
|
|
11
|
+
get defaultProvider(): string;
|
|
12
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export class ProviderRegistry {
|
|
2
|
+
#adapters;
|
|
3
|
+
#defaultProvider;
|
|
4
|
+
constructor(options) {
|
|
5
|
+
this.#adapters = new Map(options.adapters.map((adapter) => [adapter.name, adapter]));
|
|
6
|
+
this.#defaultProvider = options.defaultProvider;
|
|
7
|
+
}
|
|
8
|
+
list() {
|
|
9
|
+
return [...this.#adapters.keys()].sort();
|
|
10
|
+
}
|
|
11
|
+
get(name) {
|
|
12
|
+
const providerName = name ?? this.#defaultProvider;
|
|
13
|
+
const adapter = this.#adapters.get(providerName);
|
|
14
|
+
if (!adapter) {
|
|
15
|
+
throw new Error(`Unknown provider: ${providerName}`);
|
|
16
|
+
}
|
|
17
|
+
return adapter;
|
|
18
|
+
}
|
|
19
|
+
get defaultProvider() {
|
|
20
|
+
return this.#defaultProvider;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=ProviderRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProviderRegistry.js","sourceRoot":"","sources":["../../../src/providers/ProviderRegistry.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,gBAAgB;IAClB,SAAS,CAA+B;IACxC,gBAAgB,CAAS;IAElC,YAAY,OAAgC;QAC1C,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAClD,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,GAAG,CAAC,IAAa;QACf,MAAM,YAAY,GAAG,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,qBAAqB,YAAY,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ComparisonReport, ContextBundle, NormalizedResponse, ProviderResponse, Run, RunTask, TaskResult, type Clock, type ComparisonReportProps, type ContextBundleProps, type IdGenerator, type NormalizedResponseProps, type ProviderResponseProps, type RunStatus, type RunTaskProps, type TaskResultProps } from "../domain/index.js";
|
|
2
|
+
import { RunRepository } from "./RunRepository.js";
|
|
3
|
+
export interface RunCoordinatorOptions {
|
|
4
|
+
repository: RunRepository;
|
|
5
|
+
clock?: Clock;
|
|
6
|
+
idGenerator?: IdGenerator;
|
|
7
|
+
}
|
|
8
|
+
export declare class RunCoordinator {
|
|
9
|
+
private readonly repository;
|
|
10
|
+
private readonly clock;
|
|
11
|
+
private readonly idGenerator;
|
|
12
|
+
constructor(options: RunCoordinatorOptions);
|
|
13
|
+
createRun(params: {
|
|
14
|
+
sessionId?: string | null;
|
|
15
|
+
command: string;
|
|
16
|
+
mode?: string;
|
|
17
|
+
planVersion?: string;
|
|
18
|
+
plan?: Record<string, unknown> | null;
|
|
19
|
+
}): Promise<Run>;
|
|
20
|
+
createTask(run: Run, params: Omit<RunTaskProps, 'taskId' | 'runId' | 'createdAt' | 'updatedAt'>): RunTask;
|
|
21
|
+
createContextBundle(run: Run, params: Omit<ContextBundleProps, 'contextId' | 'runId' | 'createdAt'>): ContextBundle;
|
|
22
|
+
createProviderResponse(run: Run, params: Omit<ProviderResponseProps, 'responseId' | 'createdAt'>): ProviderResponse;
|
|
23
|
+
createNormalizedResponse(run: Run, params: Omit<NormalizedResponseProps, 'normalizedResponseId' | 'createdAt'>): NormalizedResponse;
|
|
24
|
+
createTaskResult(run: Run, params: Omit<TaskResultProps, 'resultId' | 'createdAt'>): TaskResult;
|
|
25
|
+
createComparisonReport(run: Run, params: Omit<ComparisonReportProps, 'reportId' | 'runId' | 'createdAt'>): ComparisonReport;
|
|
26
|
+
transition(run: Run, status: RunStatus): Run;
|
|
27
|
+
complete(run: Run, params?: {
|
|
28
|
+
finalSummary?: string | null;
|
|
29
|
+
validationStatus?: string | null;
|
|
30
|
+
}): Run;
|
|
31
|
+
fail(run: Run, message: string, status?: RunStatus): Run;
|
|
32
|
+
save(run: Run): Promise<Run>;
|
|
33
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { ComparisonReport, ContextBundle, NormalizedResponse, ProviderResponse, Run, RunTask, TaskResult, defaultClock, defaultIdGenerator, } from "../domain/index.js";
|
|
2
|
+
import { RunRepository } from "./RunRepository.js";
|
|
3
|
+
export class RunCoordinator {
|
|
4
|
+
repository;
|
|
5
|
+
clock;
|
|
6
|
+
idGenerator;
|
|
7
|
+
constructor(options) {
|
|
8
|
+
this.repository = options.repository;
|
|
9
|
+
this.clock = options.clock ?? defaultClock;
|
|
10
|
+
this.idGenerator = options.idGenerator ?? defaultIdGenerator;
|
|
11
|
+
}
|
|
12
|
+
async createRun(params) {
|
|
13
|
+
const run = Run.create({
|
|
14
|
+
command: params.command,
|
|
15
|
+
clock: this.clock,
|
|
16
|
+
idGenerator: this.idGenerator,
|
|
17
|
+
...(params.sessionId !== undefined ? { sessionId: params.sessionId } : {}),
|
|
18
|
+
...(params.mode ? { mode: params.mode } : {}),
|
|
19
|
+
...(params.planVersion ? { planVersion: params.planVersion } : {}),
|
|
20
|
+
...(params.plan !== undefined ? { plan: params.plan } : {}),
|
|
21
|
+
});
|
|
22
|
+
return this.repository.save(run);
|
|
23
|
+
}
|
|
24
|
+
createTask(run, params) {
|
|
25
|
+
const task = RunTask.create({
|
|
26
|
+
...params,
|
|
27
|
+
runId: run.runId,
|
|
28
|
+
clock: this.clock,
|
|
29
|
+
idGenerator: this.idGenerator,
|
|
30
|
+
});
|
|
31
|
+
run.addTask(task, this.clock());
|
|
32
|
+
return task;
|
|
33
|
+
}
|
|
34
|
+
createContextBundle(run, params) {
|
|
35
|
+
const contextBundle = ContextBundle.create({
|
|
36
|
+
...params,
|
|
37
|
+
runId: run.runId,
|
|
38
|
+
clock: this.clock,
|
|
39
|
+
idGenerator: this.idGenerator,
|
|
40
|
+
});
|
|
41
|
+
run.addContextBundle(contextBundle, this.clock());
|
|
42
|
+
return contextBundle;
|
|
43
|
+
}
|
|
44
|
+
createProviderResponse(run, params) {
|
|
45
|
+
const providerResponse = ProviderResponse.create({
|
|
46
|
+
...params,
|
|
47
|
+
clock: this.clock,
|
|
48
|
+
idGenerator: this.idGenerator,
|
|
49
|
+
});
|
|
50
|
+
run.addProviderResponse(providerResponse, this.clock());
|
|
51
|
+
return providerResponse;
|
|
52
|
+
}
|
|
53
|
+
createNormalizedResponse(run, params) {
|
|
54
|
+
const normalizedResponse = NormalizedResponse.create({
|
|
55
|
+
...params,
|
|
56
|
+
clock: this.clock,
|
|
57
|
+
idGenerator: this.idGenerator,
|
|
58
|
+
});
|
|
59
|
+
run.addNormalizedResponse(normalizedResponse, this.clock());
|
|
60
|
+
return normalizedResponse;
|
|
61
|
+
}
|
|
62
|
+
createTaskResult(run, params) {
|
|
63
|
+
const taskResult = TaskResult.create({
|
|
64
|
+
...params,
|
|
65
|
+
clock: this.clock,
|
|
66
|
+
idGenerator: this.idGenerator,
|
|
67
|
+
});
|
|
68
|
+
run.addTaskResult(taskResult, this.clock());
|
|
69
|
+
return taskResult;
|
|
70
|
+
}
|
|
71
|
+
createComparisonReport(run, params) {
|
|
72
|
+
const comparisonReport = ComparisonReport.create({
|
|
73
|
+
...params,
|
|
74
|
+
runId: run.runId,
|
|
75
|
+
clock: this.clock,
|
|
76
|
+
idGenerator: this.idGenerator,
|
|
77
|
+
});
|
|
78
|
+
run.addComparisonReport(comparisonReport, this.clock());
|
|
79
|
+
return comparisonReport;
|
|
80
|
+
}
|
|
81
|
+
transition(run, status) {
|
|
82
|
+
run.transition(status, this.clock());
|
|
83
|
+
return run;
|
|
84
|
+
}
|
|
85
|
+
complete(run, params = {}) {
|
|
86
|
+
run.complete({
|
|
87
|
+
updatedAt: this.clock(),
|
|
88
|
+
...(params.finalSummary !== undefined ? { finalSummary: params.finalSummary } : {}),
|
|
89
|
+
...(params.validationStatus !== undefined ? { validationStatus: params.validationStatus } : {}),
|
|
90
|
+
});
|
|
91
|
+
return run;
|
|
92
|
+
}
|
|
93
|
+
fail(run, message, status = 'failed') {
|
|
94
|
+
run.fail(message, status, this.clock());
|
|
95
|
+
return run;
|
|
96
|
+
}
|
|
97
|
+
async save(run) {
|
|
98
|
+
return this.repository.save(run);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=RunCoordinator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunCoordinator.js","sourceRoot":"","sources":["../../../src/run/RunCoordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Run } from "../domain/index.js";
|
|
2
|
+
export interface RunRepositoryOptions {
|
|
3
|
+
storageRoot?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare class RunRepository {
|
|
6
|
+
private readonly storageRoot;
|
|
7
|
+
constructor(options?: RunRepositoryOptions);
|
|
8
|
+
get runsDirectory(): string;
|
|
9
|
+
filePathFor(runId: string): string;
|
|
10
|
+
save(run: Run): Promise<Run>;
|
|
11
|
+
get(runId: string): Promise<Run | null>;
|
|
12
|
+
require(runId: string): Promise<Run>;
|
|
13
|
+
list(): Promise<Run[]>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { mkdir, readdir, readFile, writeFile } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { Run } from "../domain/index.js";
|
|
4
|
+
export class RunRepository {
|
|
5
|
+
storageRoot;
|
|
6
|
+
constructor(options = {}) {
|
|
7
|
+
this.storageRoot = options.storageRoot ?? path.join(process.cwd(), '.aipanel');
|
|
8
|
+
}
|
|
9
|
+
get runsDirectory() {
|
|
10
|
+
return path.join(this.storageRoot, 'runs');
|
|
11
|
+
}
|
|
12
|
+
filePathFor(runId) {
|
|
13
|
+
return path.join(this.runsDirectory, `${runId}.json`);
|
|
14
|
+
}
|
|
15
|
+
async save(run) {
|
|
16
|
+
await mkdir(this.runsDirectory, { recursive: true });
|
|
17
|
+
const document = { run: run.toJSON() };
|
|
18
|
+
await writeFile(this.filePathFor(run.runId), JSON.stringify(document, null, 2), 'utf8');
|
|
19
|
+
return run;
|
|
20
|
+
}
|
|
21
|
+
async get(runId) {
|
|
22
|
+
try {
|
|
23
|
+
const raw = await readFile(this.filePathFor(runId), 'utf8');
|
|
24
|
+
const parsed = JSON.parse(raw);
|
|
25
|
+
return Run.fromJSON('run' in parsed ? parsed.run : parsed);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
if (error.code === 'ENOENT') {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
throw error;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async require(runId) {
|
|
35
|
+
const run = await this.get(runId);
|
|
36
|
+
if (!run) {
|
|
37
|
+
throw new Error(`Run not found: ${runId}`);
|
|
38
|
+
}
|
|
39
|
+
return run;
|
|
40
|
+
}
|
|
41
|
+
async list() {
|
|
42
|
+
await mkdir(this.runsDirectory, { recursive: true });
|
|
43
|
+
const entries = await readdir(this.runsDirectory, { withFileTypes: true });
|
|
44
|
+
const runs = await Promise.all(entries
|
|
45
|
+
.filter((entry) => entry.isFile() && entry.name.endsWith('.json'))
|
|
46
|
+
.map(async (entry) => {
|
|
47
|
+
const runId = entry.name.replace(/\.json$/u, '');
|
|
48
|
+
return this.get(runId);
|
|
49
|
+
}));
|
|
50
|
+
return runs
|
|
51
|
+
.filter((run) => Boolean(run))
|
|
52
|
+
.sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=RunRepository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunRepository.js","sourceRoot":"","sources":["../../../src/run/RunRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/run/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC"}
|