aipanel-cli 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/README.md +77 -43
  2. package/dist/src/app/AipanelApp.d.ts +6 -3
  3. package/dist/src/app/AipanelApp.js +22 -14
  4. package/dist/src/app/AipanelApp.js.map +1 -1
  5. package/dist/src/app/CommandRouter.js +27 -6
  6. package/dist/src/app/CommandRouter.js.map +1 -1
  7. package/dist/src/app/ProfileLoader.d.ts +3 -2
  8. package/dist/src/app/ProfileLoader.js +6 -5
  9. package/dist/src/app/ProfileLoader.js.map +1 -1
  10. package/dist/src/artifact/ArtifactRepository.d.ts +4 -9
  11. package/dist/src/artifact/ArtifactRepository.js +24 -60
  12. package/dist/src/artifact/ArtifactRepository.js.map +1 -1
  13. package/dist/src/cli/aipanel.js +2 -1
  14. package/dist/src/cli/aipanel.js.map +1 -1
  15. package/dist/src/compare/ComparisonEngine.d.ts +10 -1
  16. package/dist/src/compare/ComparisonEngine.js.map +1 -1
  17. package/dist/src/compare/ResponseNormalizer.d.ts +3 -2
  18. package/dist/src/compare/ResponseNormalizer.js +4 -2
  19. package/dist/src/compare/ResponseNormalizer.js.map +1 -1
  20. package/dist/src/context/ContextCollector.d.ts +5 -4
  21. package/dist/src/context/ContextCollector.js +4 -2
  22. package/dist/src/context/ContextCollector.js.map +1 -1
  23. package/dist/src/domain/artifact.d.ts +3 -2
  24. package/dist/src/domain/artifact.js +7 -7
  25. package/dist/src/domain/base.d.ts +0 -1
  26. package/dist/src/domain/base.js +1 -7
  27. package/dist/src/domain/base.js.map +1 -1
  28. package/dist/src/domain/run.d.ts +11 -23
  29. package/dist/src/domain/run.js +59 -51
  30. package/dist/src/domain/run.js.map +1 -1
  31. package/dist/src/domain/session.d.ts +6 -5
  32. package/dist/src/domain/session.js +9 -7
  33. package/dist/src/domain/session.js.map +1 -1
  34. package/dist/src/domain/value-objects.js +3 -1
  35. package/dist/src/domain/value-objects.js.map +1 -1
  36. package/dist/src/output/ResultRenderer.d.ts +3 -2
  37. package/dist/src/output/ResultRenderer.js +3 -0
  38. package/dist/src/output/ResultRenderer.js.map +1 -1
  39. package/dist/src/providers/ClaudeCodeAdapter.d.ts +1 -0
  40. package/dist/src/providers/ClaudeCodeAdapter.js +3 -0
  41. package/dist/src/providers/ClaudeCodeAdapter.js.map +1 -1
  42. package/dist/src/providers/CodexExecAdapter.d.ts +5 -0
  43. package/dist/src/providers/CodexExecAdapter.js +128 -0
  44. package/dist/src/providers/CodexExecAdapter.js.map +1 -0
  45. package/dist/src/providers/ProviderAdapter.d.ts +2 -0
  46. package/dist/src/providers/ProviderRegistry.d.ts +3 -2
  47. package/dist/src/providers/ProviderRegistry.js +3 -3
  48. package/dist/src/providers/ProviderRegistry.js.map +1 -1
  49. package/dist/src/run/RunCoordinator.d.ts +10 -16
  50. package/dist/src/run/RunCoordinator.js +5 -20
  51. package/dist/src/run/RunCoordinator.js.map +1 -1
  52. package/dist/src/run/RunRepository.d.ts +3 -7
  53. package/dist/src/run/RunRepository.js +9 -45
  54. package/dist/src/run/RunRepository.js.map +1 -1
  55. package/dist/src/session/SessionManager.d.ts +5 -3
  56. package/dist/src/session/SessionManager.js +5 -6
  57. package/dist/src/session/SessionManager.js.map +1 -1
  58. package/dist/src/session/SessionRepository.d.ts +3 -5
  59. package/dist/src/session/SessionRepository.js +14 -28
  60. package/dist/src/session/SessionRepository.js.map +1 -1
  61. package/dist/src/shared/clock.d.ts +0 -1
  62. package/dist/src/shared/clock.js +0 -3
  63. package/dist/src/shared/clock.js.map +1 -1
  64. package/dist/src/shared/file-system.d.ts +0 -6
  65. package/dist/src/shared/file-system.js +1 -23
  66. package/dist/src/shared/file-system.js.map +1 -1
  67. package/dist/src/usecases/ConsultUseCase.d.ts +4 -1
  68. package/dist/src/usecases/ConsultUseCase.js +10 -6
  69. package/dist/src/usecases/ConsultUseCase.js.map +1 -1
  70. package/dist/src/usecases/DebugUseCase.d.ts +4 -1
  71. package/dist/src/usecases/DebugUseCase.js +25 -6
  72. package/dist/src/usecases/DebugUseCase.js.map +1 -1
  73. package/dist/src/usecases/FollowupUseCase.js.map +1 -1
  74. package/package.json +19 -63
  75. package/dist/src/app/WorkflowSelector.d.ts +0 -4
  76. package/dist/src/app/WorkflowSelector.js +0 -6
  77. package/dist/src/app/WorkflowSelector.js.map +0 -1
  78. package/dist/src/app/index.d.ts +0 -4
  79. package/dist/src/app/index.js +0 -5
  80. package/dist/src/app/index.js.map +0 -1
  81. package/dist/src/app/types.d.ts +0 -36
  82. package/dist/src/app/types.js +0 -2
  83. package/dist/src/app/types.js.map +0 -1
  84. package/dist/src/artifact/index.d.ts +0 -1
  85. package/dist/src/artifact/index.js +0 -2
  86. package/dist/src/artifact/index.js.map +0 -1
  87. package/dist/src/compare/index.d.ts +0 -3
  88. package/dist/src/compare/index.js +0 -3
  89. package/dist/src/compare/index.js.map +0 -1
  90. package/dist/src/context/index.d.ts +0 -2
  91. package/dist/src/context/index.js +0 -2
  92. package/dist/src/context/index.js.map +0 -1
  93. package/dist/src/domain/index.d.ts +0 -5
  94. package/dist/src/domain/index.js +0 -6
  95. package/dist/src/domain/index.js.map +0 -1
  96. package/dist/src/index.d.ts +0 -16
  97. package/dist/src/index.js +0 -16
  98. package/dist/src/index.js.map +0 -1
  99. package/dist/src/orchestrator/PlanBuilder.d.ts +0 -6
  100. package/dist/src/orchestrator/PlanBuilder.js +0 -59
  101. package/dist/src/orchestrator/PlanBuilder.js.map +0 -1
  102. package/dist/src/orchestrator/ResultMerger.d.ts +0 -10
  103. package/dist/src/orchestrator/ResultMerger.js +0 -19
  104. package/dist/src/orchestrator/ResultMerger.js.map +0 -1
  105. package/dist/src/orchestrator/TaskExecutor.d.ts +0 -20
  106. package/dist/src/orchestrator/TaskExecutor.js +0 -81
  107. package/dist/src/orchestrator/TaskExecutor.js.map +0 -1
  108. package/dist/src/orchestrator/TaskScheduler.d.ts +0 -4
  109. package/dist/src/orchestrator/TaskScheduler.js +0 -19
  110. package/dist/src/orchestrator/TaskScheduler.js.map +0 -1
  111. package/dist/src/orchestrator/ValidationRunner.d.ts +0 -4
  112. package/dist/src/orchestrator/ValidationRunner.js +0 -22
  113. package/dist/src/orchestrator/ValidationRunner.js.map +0 -1
  114. package/dist/src/orchestrator/index.d.ts +0 -5
  115. package/dist/src/orchestrator/index.js +0 -6
  116. package/dist/src/orchestrator/index.js.map +0 -1
  117. package/dist/src/output/index.d.ts +0 -1
  118. package/dist/src/output/index.js +0 -2
  119. package/dist/src/output/index.js.map +0 -1
  120. package/dist/src/providers/index.d.ts +0 -3
  121. package/dist/src/providers/index.js +0 -4
  122. package/dist/src/providers/index.js.map +0 -1
  123. package/dist/src/run/index.d.ts +0 -2
  124. package/dist/src/run/index.js +0 -3
  125. package/dist/src/run/index.js.map +0 -1
  126. package/dist/src/session/index.d.ts +0 -2
  127. package/dist/src/session/index.js +0 -3
  128. package/dist/src/session/index.js.map +0 -1
  129. package/dist/src/shared/contracts.d.ts +0 -254
  130. package/dist/src/shared/contracts.js +0 -2
  131. package/dist/src/shared/contracts.js.map +0 -1
  132. package/dist/src/shared/errors.d.ts +0 -9
  133. package/dist/src/shared/errors.js +0 -11
  134. package/dist/src/shared/errors.js.map +0 -1
  135. package/dist/src/shared/index.d.ts +0 -4
  136. package/dist/src/shared/index.js +0 -5
  137. package/dist/src/shared/index.js.map +0 -1
  138. package/dist/src/usecases/CompareUseCase.d.ts +0 -6
  139. package/dist/src/usecases/CompareUseCase.js +0 -9
  140. package/dist/src/usecases/CompareUseCase.js.map +0 -1
  141. package/dist/src/usecases/helpers.d.ts +0 -9
  142. package/dist/src/usecases/helpers.js +0 -31
  143. package/dist/src/usecases/helpers.js.map +0 -1
  144. package/dist/src/usecases/index.d.ts +0 -5
  145. package/dist/src/usecases/index.js +0 -6
  146. package/dist/src/usecases/index.js.map +0 -1
@@ -0,0 +1,128 @@
1
+ import { spawn } from "node:child_process";
2
+ function parseJsonLines(stdout) {
3
+ return stdout
4
+ .split("\n")
5
+ .map((line) => line.trim())
6
+ .filter(Boolean)
7
+ .map((line) => JSON.parse(line));
8
+ }
9
+ function pickLastAgentMessage(events) {
10
+ const messages = events
11
+ .filter((event) => event.type === "item.completed")
12
+ .map((event) => event.item)
13
+ .filter((item) => Boolean(item))
14
+ .filter((item) => item.type === "agent_message")
15
+ .map((item) => item.text?.trim())
16
+ .filter((text) => Boolean(text));
17
+ return messages.at(-1) ?? "";
18
+ }
19
+ function pickThreadId(events) {
20
+ return (events.find((event) => event.type === "thread.started")?.thread_id ?? null);
21
+ }
22
+ function pickUsage(events) {
23
+ return events.find((event) => event.type === "turn.completed")?.usage ?? null;
24
+ }
25
+ function pickErrorMessage(events) {
26
+ const eventError = events.find((event) => event.type === "turn.failed")?.error?.message ??
27
+ events.find((event) => event.type === "error")?.message;
28
+ return eventError?.trim() ? eventError.trim() : null;
29
+ }
30
+ async function runCodex(plan) {
31
+ return new Promise((resolve, reject) => {
32
+ const args = [
33
+ "exec",
34
+ "--json",
35
+ "--skip-git-repo-check",
36
+ "-C",
37
+ plan.cwd,
38
+ "-s",
39
+ "read-only",
40
+ "-c",
41
+ 'approval_policy="never"',
42
+ ];
43
+ if (plan.model) {
44
+ args.push("-m", plan.model);
45
+ }
46
+ args.push(plan.prompt);
47
+ const child = spawn("codex", args, {
48
+ cwd: plan.cwd,
49
+ env: process.env,
50
+ stdio: ["ignore", "pipe", "pipe"],
51
+ });
52
+ let stdout = "";
53
+ let stderr = "";
54
+ let didTimeout = false;
55
+ const timeoutHandle = setTimeout(() => {
56
+ didTimeout = true;
57
+ child.kill("SIGTERM");
58
+ }, plan.timeoutMs);
59
+ child.stdout.on("data", (chunk) => {
60
+ stdout += chunk.toString();
61
+ });
62
+ child.stderr.on("data", (chunk) => {
63
+ stderr += chunk.toString();
64
+ });
65
+ child.on("error", (error) => {
66
+ clearTimeout(timeoutHandle);
67
+ reject(error);
68
+ });
69
+ child.on("close", (code, signal) => {
70
+ clearTimeout(timeoutHandle);
71
+ if (didTimeout) {
72
+ reject(new Error(`Codex exec timed out after ${plan.timeoutMs}ms.`));
73
+ return;
74
+ }
75
+ if (code !== 0) {
76
+ const details = [
77
+ `Codex exec exited with code ${code}${signal ? ` (signal: ${signal})` : ""}.`,
78
+ ];
79
+ if (stderr.trim()) {
80
+ details.push(stderr.trim());
81
+ }
82
+ if (stdout.trim()) {
83
+ details.push(stdout.trim());
84
+ }
85
+ reject(new Error(details.join("\n\n")));
86
+ return;
87
+ }
88
+ resolve(stdout);
89
+ });
90
+ });
91
+ }
92
+ export class CodexExecAdapter {
93
+ name = "codex";
94
+ async call(plan) {
95
+ const stdout = await runCodex(plan);
96
+ const events = parseJsonLines(stdout);
97
+ const rawText = pickLastAgentMessage(events);
98
+ const errorMessage = pickErrorMessage(events);
99
+ const usage = pickUsage(events);
100
+ const threadId = pickThreadId(events);
101
+ const isError = Boolean(errorMessage);
102
+ return {
103
+ provider: this.name,
104
+ model: plan.model ?? "configured-default",
105
+ rawText: rawText || errorMessage || "",
106
+ rawJson: events,
107
+ usage: {
108
+ inputTokens: usage?.input_tokens ?? null,
109
+ outputTokens: usage?.output_tokens ?? null,
110
+ costUsd: null,
111
+ latencyMs: null,
112
+ },
113
+ externalRefs: threadId
114
+ ? [
115
+ {
116
+ system: "codex",
117
+ id: threadId,
118
+ scope: "session",
119
+ },
120
+ ]
121
+ : [],
122
+ citations: [],
123
+ isError,
124
+ subtype: isError ? "failed" : "success",
125
+ };
126
+ }
127
+ }
128
+ //# sourceMappingURL=CodexExecAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodexExecAdapter.js","sourceRoot":"","sources":["../../../src/providers/CodexExecAdapter.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ export interface ProviderCallPlan {
7
7
  }
8
8
  export interface ProviderCallResult {
9
9
  provider: string;
10
+ model: string;
10
11
  rawText: string;
11
12
  rawJson: unknown;
12
13
  usage: {
@@ -31,5 +32,6 @@ export interface ProviderCallResult {
31
32
  }
32
33
  export interface ProviderAdapter {
33
34
  readonly name: string;
35
+ readonly defaultModel?: string;
34
36
  call(plan: ProviderCallPlan): Promise<ProviderCallResult>;
35
37
  }
@@ -1,5 +1,5 @@
1
1
  import type { ProviderAdapter } from "./ProviderAdapter.js";
2
- export interface ProviderRegistryOptions {
2
+ interface ProviderRegistryOptions {
3
3
  adapters: ProviderAdapter[];
4
4
  defaultProvider: string;
5
5
  }
@@ -7,6 +7,7 @@ export declare class ProviderRegistry {
7
7
  #private;
8
8
  constructor(options: ProviderRegistryOptions);
9
9
  list(): string[];
10
+ getDefaultModel(name?: string): string | undefined;
10
11
  get(name?: string): ProviderAdapter;
11
- get defaultProvider(): string;
12
12
  }
13
+ export {};
@@ -8,6 +8,9 @@ export class ProviderRegistry {
8
8
  list() {
9
9
  return [...this.#adapters.keys()].sort();
10
10
  }
11
+ getDefaultModel(name) {
12
+ return this.get(name).defaultModel;
13
+ }
11
14
  get(name) {
12
15
  const providerName = name ?? this.#defaultProvider;
13
16
  const adapter = this.#adapters.get(providerName);
@@ -16,8 +19,5 @@ export class ProviderRegistry {
16
19
  }
17
20
  return adapter;
18
21
  }
19
- get defaultProvider() {
20
- return this.#defaultProvider;
21
- }
22
22
  }
23
23
  //# sourceMappingURL=ProviderRegistry.js.map
@@ -1 +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"}
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,CACtB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAC3D,CAAC;QACF,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,eAAe,CAAC,IAAa;QAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC;IACrC,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;CACF"}
@@ -1,6 +1,7 @@
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";
1
+ import { ComparisonReport, ContextBundle, NormalizedResponse, ProviderResponse, Run, RunTask, TaskResult, type ComparisonReportProps, type ContextBundleProps, type NormalizedResponseProps, type ProviderResponseProps, type RunTaskProps, type TaskResultProps } from "../domain/run.js";
2
+ import { type Clock, type IdGenerator } from "../domain/base.js";
2
3
  import { RunRepository } from "./RunRepository.js";
3
- export interface RunCoordinatorOptions {
4
+ interface RunCoordinatorOptions {
4
5
  repository: RunRepository;
5
6
  clock?: Clock;
6
7
  idGenerator?: IdGenerator;
@@ -14,20 +15,13 @@ export declare class RunCoordinator {
14
15
  sessionId?: string | null;
15
16
  command: string;
16
17
  mode?: string;
17
- planVersion?: string;
18
- plan?: Record<string, unknown> | null;
19
18
  }): 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;
19
+ createTask(run: Run, params: Omit<RunTaskProps, "taskId" | "runId" | "createdAt" | "updatedAt">): RunTask;
20
+ createContextBundle(run: Run, params: Omit<ContextBundleProps, "contextId" | "runId" | "createdAt">): ContextBundle;
21
+ createProviderResponse(run: Run, params: Omit<ProviderResponseProps, "responseId" | "createdAt">): ProviderResponse;
22
+ createNormalizedResponse(run: Run, params: Omit<NormalizedResponseProps, "normalizedResponseId" | "createdAt">): NormalizedResponse;
23
+ createTaskResult(run: Run, params: Omit<TaskResultProps, "resultId" | "createdAt">): TaskResult;
24
+ createComparisonReport(run: Run, params: Omit<ComparisonReportProps, "reportId" | "runId" | "createdAt">): ComparisonReport;
32
25
  save(run: Run): Promise<Run>;
33
26
  }
27
+ export {};
@@ -1,4 +1,5 @@
1
- import { ComparisonReport, ContextBundle, NormalizedResponse, ProviderResponse, Run, RunTask, TaskResult, defaultClock, defaultIdGenerator, } from "../domain/index.js";
1
+ import { ComparisonReport, ContextBundle, NormalizedResponse, ProviderResponse, Run, RunTask, TaskResult, } from "../domain/run.js";
2
+ import { defaultClock, defaultIdGenerator, } from "../domain/base.js";
2
3
  import { RunRepository } from "./RunRepository.js";
3
4
  export class RunCoordinator {
4
5
  repository;
@@ -14,10 +15,10 @@ export class RunCoordinator {
14
15
  command: params.command,
15
16
  clock: this.clock,
16
17
  idGenerator: this.idGenerator,
17
- ...(params.sessionId !== undefined ? { sessionId: params.sessionId } : {}),
18
+ ...(params.sessionId !== undefined
19
+ ? { sessionId: params.sessionId }
20
+ : {}),
18
21
  ...(params.mode ? { mode: params.mode } : {}),
19
- ...(params.planVersion ? { planVersion: params.planVersion } : {}),
20
- ...(params.plan !== undefined ? { plan: params.plan } : {}),
21
22
  });
22
23
  return this.repository.save(run);
23
24
  }
@@ -78,22 +79,6 @@ export class RunCoordinator {
78
79
  run.addComparisonReport(comparisonReport, this.clock());
79
80
  return comparisonReport;
80
81
  }
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
82
  async save(run) {
98
83
  return this.repository.save(run);
99
84
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RunCoordinator.js","sourceRoot":"","sources":["../../../src/run/RunCoordinator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RunCoordinator.js","sourceRoot":"","sources":["../../../src/run/RunCoordinator.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,10 @@
1
- import { Run } from "../domain/index.js";
2
- export interface RunRepositoryOptions {
1
+ import { Run } from "../domain/run.js";
2
+ interface RunRepositoryOptions {
3
3
  storageRoot?: string;
4
4
  }
5
5
  export declare class RunRepository {
6
6
  private readonly storageRoot;
7
7
  constructor(options?: RunRepositoryOptions);
8
- get runsDirectory(): string;
9
- filePathFor(runId: string): string;
10
8
  save(run: Run): Promise<Run>;
11
- get(runId: string): Promise<Run | null>;
12
- require(runId: string): Promise<Run>;
13
- list(): Promise<Run[]>;
14
9
  }
10
+ export {};
@@ -1,55 +1,19 @@
1
- import { mkdir, readdir, readFile, writeFile } from 'node:fs/promises';
2
- import path from 'node:path';
3
- import { Run } from "../domain/index.js";
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { Run } from "../domain/run.js";
4
4
  export class RunRepository {
5
5
  storageRoot;
6
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`);
7
+ this.storageRoot =
8
+ options.storageRoot ?? path.join(process.cwd(), ".aipanel");
14
9
  }
15
10
  async save(run) {
16
- await mkdir(this.runsDirectory, { recursive: true });
11
+ const runsDirectory = path.join(this.storageRoot, "runs");
12
+ const filePath = path.join(runsDirectory, `${run.runId}.json`);
13
+ await mkdir(runsDirectory, { recursive: true });
17
14
  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
- }
15
+ await writeFile(filePath, JSON.stringify(document, null, 2), "utf8");
39
16
  return run;
40
17
  }
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
18
  }
55
19
  //# sourceMappingURL=RunRepository.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RunRepository.js","sourceRoot":"","sources":["../../../src/run/RunRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RunRepository.js","sourceRoot":"","sources":["../../../src/run/RunRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAiB,MAAM,kBAAkB,CAAC;AAUtD,MAAM,OAAO,aAAa;IACP,WAAW,CAAS;IAErC,YAAY,UAAgC,EAAE;QAC5C,IAAI,CAAC,WAAW;YACd,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAQ;QACjB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC;QAC/D,MAAM,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAgB,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;QACpD,MAAM,SAAS,CACb,QAAQ,EACR,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EACjC,MAAM,CACP,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
@@ -1,6 +1,8 @@
1
- import { Session, SessionTurn, ProviderRef, type Clock, type IdGenerator, type ProviderRefProps, type SessionTurnRole } from "../domain/index.js";
1
+ import { Session, SessionTurn, type SessionTurnRole } from "../domain/session.js";
2
+ import { type Clock, type IdGenerator } from "../domain/base.js";
3
+ import { ProviderRef, type ProviderRefProps } from "../domain/value-objects.js";
2
4
  import { SessionRepository } from "./SessionRepository.js";
3
- export interface SessionManagerOptions {
5
+ interface SessionManagerOptions {
4
6
  repository: SessionRepository;
5
7
  clock?: Clock;
6
8
  idGenerator?: IdGenerator;
@@ -22,5 +24,5 @@ export declare class SessionManager {
22
24
  appendUserTurn(session: Session, content: string, artifactIds?: string[]): Promise<SessionTurn>;
23
25
  appendAssistantTurn(session: Session, content: string, artifactIds?: string[]): Promise<SessionTurn>;
24
26
  updateProviderRef(session: Session, providerRef: ProviderRef | ProviderRefProps): Promise<Session>;
25
- save(session: Session): Promise<Session>;
26
27
  }
28
+ export {};
@@ -1,4 +1,6 @@
1
- import { Session, SessionTurn, ProviderRef, defaultClock, defaultIdGenerator, } from "../domain/index.js";
1
+ import { Session, SessionTurn, } from "../domain/session.js";
2
+ import { defaultClock, defaultIdGenerator, } from "../domain/base.js";
3
+ import { ProviderRef } from "../domain/value-objects.js";
2
4
  import { SessionRepository } from "./SessionRepository.js";
3
5
  export class SessionManager {
4
6
  repository;
@@ -33,14 +35,14 @@ export class SessionManager {
33
35
  }
34
36
  async appendUserTurn(session, content, artifactIds = []) {
35
37
  return this.appendTurn(session, {
36
- role: 'user',
38
+ role: "user",
37
39
  content,
38
40
  artifactIds,
39
41
  });
40
42
  }
41
43
  async appendAssistantTurn(session, content, artifactIds = []) {
42
44
  return this.appendTurn(session, {
43
- role: 'assistant',
45
+ role: "assistant",
44
46
  content,
45
47
  artifactIds,
46
48
  });
@@ -53,8 +55,5 @@ export class SessionManager {
53
55
  }), this.clock());
54
56
  return this.repository.save(session);
55
57
  }
56
- async save(session) {
57
- return this.repository.save(session);
58
- }
59
58
  }
60
59
  //# sourceMappingURL=SessionManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../../src/session/SessionManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../../src/session/SessionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,WAAW,GAEZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,YAAY,EACZ,kBAAkB,GAGnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAyB,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAQ3D,MAAM,OAAO,cAAc;IACR,UAAU,CAAoB;IAC9B,KAAK,CAAQ;IACb,WAAW,CAAc;IAE1C,YAAY,OAA8B;QACxC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,YAAY,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,kBAAkB,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,SAAiD,EAAE;QAEnD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjD,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,UAAU,CACd,OAAgB,EAChB,MAIC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC;YAC9B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnE,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,OAAgB,EAChB,OAAe,EACf,cAAwB,EAAE;QAE1B,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;YAC9B,IAAI,EAAE,MAAM;YACZ,OAAO;YACP,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,OAAgB,EAChB,OAAe,EACf,cAAwB,EAAE;QAE1B,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;YAC9B,IAAI,EAAE,WAAW;YACjB,OAAO;YACP,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,OAAgB,EAChB,WAA2C;QAE3C,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/C,OAAO,CAAC,iBAAiB,CACvB,IAAI,WAAW,CAAC;YACd,GAAG,QAAQ,CAAC,MAAM,EAAE;YACpB,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE;SAChD,CAAC,EACF,IAAI,CAAC,KAAK,EAAE,CACb,CAAC;QAEF,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;CACF"}
@@ -1,14 +1,12 @@
1
- import { Session } from "../domain/index.js";
2
- export interface SessionRepositoryOptions {
1
+ import { Session } from "../domain/session.js";
2
+ interface SessionRepositoryOptions {
3
3
  storageRoot?: string;
4
4
  }
5
5
  export declare class SessionRepository {
6
6
  private readonly storageRoot;
7
7
  constructor(options?: SessionRepositoryOptions);
8
- get sessionsDirectory(): string;
9
- filePathFor(sessionId: string): string;
10
8
  save(session: Session): Promise<Session>;
11
9
  get(sessionId: string): Promise<Session | null>;
12
10
  require(sessionId: string): Promise<Session>;
13
- list(): Promise<Session[]>;
14
11
  }
12
+ export {};
@@ -1,31 +1,30 @@
1
- import { mkdir, readdir, readFile, writeFile } from 'node:fs/promises';
2
- import path from 'node:path';
3
- import { Session } from "../domain/index.js";
1
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { Session } from "../domain/session.js";
4
4
  export class SessionRepository {
5
5
  storageRoot;
6
6
  constructor(options = {}) {
7
- this.storageRoot = options.storageRoot ?? path.join(process.cwd(), '.aipanel');
8
- }
9
- get sessionsDirectory() {
10
- return path.join(this.storageRoot, 'sessions');
11
- }
12
- filePathFor(sessionId) {
13
- return path.join(this.sessionsDirectory, `${sessionId}.json`);
7
+ this.storageRoot =
8
+ options.storageRoot ?? path.join(process.cwd(), ".aipanel");
14
9
  }
15
10
  async save(session) {
16
- await mkdir(this.sessionsDirectory, { recursive: true });
11
+ const sessionsDirectory = path.join(this.storageRoot, "sessions");
12
+ const filePath = path.join(sessionsDirectory, `${session.sessionId}.json`);
13
+ await mkdir(sessionsDirectory, { recursive: true });
17
14
  const document = { session: session.toJSON() };
18
- await writeFile(this.filePathFor(session.sessionId), JSON.stringify(document, null, 2), 'utf8');
15
+ await writeFile(filePath, JSON.stringify(document, null, 2), "utf8");
19
16
  return session;
20
17
  }
21
18
  async get(sessionId) {
19
+ const sessionsDirectory = path.join(this.storageRoot, "sessions");
20
+ const filePath = path.join(sessionsDirectory, `${sessionId}.json`);
22
21
  try {
23
- const raw = await readFile(this.filePathFor(sessionId), 'utf8');
22
+ const raw = await readFile(filePath, "utf8");
24
23
  const parsed = JSON.parse(raw);
25
- return Session.fromJSON('session' in parsed ? parsed.session : parsed);
24
+ return Session.fromJSON("session" in parsed ? parsed.session : parsed);
26
25
  }
27
26
  catch (error) {
28
- if (error.code === 'ENOENT') {
27
+ if (error.code === "ENOENT") {
29
28
  return null;
30
29
  }
31
30
  throw error;
@@ -38,18 +37,5 @@ export class SessionRepository {
38
37
  }
39
38
  return session;
40
39
  }
41
- async list() {
42
- await mkdir(this.sessionsDirectory, { recursive: true });
43
- const entries = await readdir(this.sessionsDirectory, { withFileTypes: true });
44
- const sessions = await Promise.all(entries
45
- .filter((entry) => entry.isFile() && entry.name.endsWith('.json'))
46
- .map(async (entry) => {
47
- const sessionId = entry.name.replace(/\.json$/u, '');
48
- return this.get(sessionId);
49
- }));
50
- return sessions
51
- .filter((session) => Boolean(session))
52
- .sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));
53
- }
54
40
  }
55
41
  //# sourceMappingURL=SessionRepository.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionRepository.js","sourceRoot":"","sources":["../../../src/session/SessionRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionRepository.js","sourceRoot":"","sources":["../../../src/session/SessionRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAqB,MAAM,sBAAsB,CAAC;AAUlE,MAAM,OAAO,iBAAiB;IACX,WAAW,CAAS;IAErC,YAAY,UAAoC,EAAE;QAChD,IAAI,CAAC,WAAW;YACd,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAgB;QACzB,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,OAAO,CAAC,SAAS,OAAO,CAAC,CAAC;QAC3E,MAAM,KAAK,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAoB,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QAChE,MAAM,SAAS,CACb,QAAQ,EACR,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EACjC,MAAM,CACP,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,SAAiB;QACzB,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC;QACnE,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmC,CAAC;YACjE,OAAO,OAAO,CAAC,QAAQ,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,SAAiB;QAC7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE1C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -1,4 +1,3 @@
1
1
  export declare const systemClock: {
2
- now(): Date;
3
2
  nowIso(): string;
4
3
  };
@@ -1,7 +1,4 @@
1
1
  export const systemClock = {
2
- now() {
3
- return new Date();
4
- },
5
2
  nowIso() {
6
3
  return new Date().toISOString();
7
4
  },
@@ -1 +1 @@
1
- {"version":3,"file":"clock.js","sourceRoot":"","sources":["../../../src/shared/clock.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,GAAG;QACD,OAAO,IAAI,IAAI,EAAE,CAAC;IACpB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClC,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"clock.js","sourceRoot":"","sources":["../../../src/shared/clock.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM;QACJ,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClC,CAAC;CACF,CAAC"}
@@ -1,8 +1,2 @@
1
- export declare function ensureDirectory(path: string): Promise<void>;
2
- export declare function ensureParentDirectory(path: string): Promise<void>;
3
1
  export declare function readText(path: string, encoding?: BufferEncoding): Promise<string>;
4
- export declare function writeText(path: string, contents: string, encoding?: BufferEncoding): Promise<void>;
5
- export declare function readJson<T>(path: string): Promise<T>;
6
- export declare function writeJson(path: string, value: unknown): Promise<void>;
7
2
  export declare function pathExists(path: string): Promise<boolean>;
8
- export declare function listDirectory(path: string): Promise<string[]>;
@@ -1,26 +1,7 @@
1
- import { access, mkdir, readdir, readFile, writeFile } from "node:fs/promises";
2
- import { dirname } from "node:path";
3
- export async function ensureDirectory(path) {
4
- await mkdir(path, { recursive: true });
5
- }
6
- export async function ensureParentDirectory(path) {
7
- await ensureDirectory(dirname(path));
8
- }
1
+ import { access, readFile } from "node:fs/promises";
9
2
  export async function readText(path, encoding = "utf8") {
10
3
  return readFile(path, encoding);
11
4
  }
12
- export async function writeText(path, contents, encoding = "utf8") {
13
- await ensureParentDirectory(path);
14
- await writeFile(path, contents, encoding);
15
- }
16
- export async function readJson(path) {
17
- const text = await readText(path, "utf8");
18
- return JSON.parse(text);
19
- }
20
- export async function writeJson(path, value) {
21
- const text = `${JSON.stringify(value, null, 2)}\n`;
22
- await writeText(path, text, "utf8");
23
- }
24
5
  export async function pathExists(path) {
25
6
  try {
26
7
  await access(path);
@@ -30,7 +11,4 @@ export async function pathExists(path) {
30
11
  return false;
31
12
  }
32
13
  }
33
- export async function listDirectory(path) {
34
- return readdir(path);
35
- }
36
14
  //# sourceMappingURL=file-system.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-system.js","sourceRoot":"","sources":["../../../src/shared/file-system.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAY;IACtD,MAAM,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAY,EAAE,WAA2B,MAAM;IAC5E,OAAO,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,QAAgB,EAAE,WAA2B,MAAM;IAC/F,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAI,IAAY;IAC5C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,KAAc;IAC1D,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IACnD,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY;IAC9C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"file-system.js","sourceRoot":"","sources":["../../../src/shared/file-system.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAY,EACZ,WAA2B,MAAM;IAEjC,OAAO,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}