night-orch 0.3.2 → 0.4.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 (221) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +47 -108
  3. package/dist/cli/commands/doctor.d.ts +1 -0
  4. package/dist/cli/commands/doctor.d.ts.map +1 -1
  5. package/dist/cli/commands/doctor.js +18 -0
  6. package/dist/cli/commands/doctor.js.map +1 -1
  7. package/dist/cli/commands/monitoring.d.ts.map +1 -1
  8. package/dist/cli/commands/monitoring.js +7 -3
  9. package/dist/cli/commands/monitoring.js.map +1 -1
  10. package/dist/cli/commands/settings.d.ts.map +1 -1
  11. package/dist/cli/commands/settings.js +40 -4
  12. package/dist/cli/commands/settings.js.map +1 -1
  13. package/dist/cli/commands/status.d.ts.map +1 -1
  14. package/dist/cli/commands/status.js +26 -3
  15. package/dist/cli/commands/status.js.map +1 -1
  16. package/dist/cli/index.js +3 -2
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/cli/tui/app.d.ts.map +1 -1
  19. package/dist/cli/tui/app.js +52 -3
  20. package/dist/cli/tui/app.js.map +1 -1
  21. package/dist/cli/tui/header.d.ts.map +1 -1
  22. package/dist/cli/tui/header.js +2 -1
  23. package/dist/cli/tui/header.js.map +1 -1
  24. package/dist/cli/tui/settings-view.d.ts.map +1 -1
  25. package/dist/cli/tui/settings-view.js +22 -5
  26. package/dist/cli/tui/settings-view.js.map +1 -1
  27. package/dist/cli/tui/stats-view.js +2 -2
  28. package/dist/cli/tui/stats-view.js.map +1 -1
  29. package/dist/config/loader.d.ts.map +1 -1
  30. package/dist/config/loader.js +141 -13
  31. package/dist/config/loader.js.map +1 -1
  32. package/dist/config/schema.d.ts +903 -21
  33. package/dist/config/schema.d.ts.map +1 -1
  34. package/dist/config/schema.js +77 -6
  35. package/dist/config/schema.js.map +1 -1
  36. package/dist/forge/types.d.ts +7 -0
  37. package/dist/forge/types.d.ts.map +1 -1
  38. package/dist/git/repo.d.ts +8 -0
  39. package/dist/git/repo.d.ts.map +1 -1
  40. package/dist/git/repo.js +19 -0
  41. package/dist/git/repo.js.map +1 -1
  42. package/dist/git/worktree.d.ts +3 -0
  43. package/dist/git/worktree.d.ts.map +1 -1
  44. package/dist/git/worktree.js +43 -21
  45. package/dist/git/worktree.js.map +1 -1
  46. package/dist/loop/cost.d.ts +33 -8
  47. package/dist/loop/cost.d.ts.map +1 -1
  48. package/dist/loop/cost.js +250 -46
  49. package/dist/loop/cost.js.map +1 -1
  50. package/dist/loop/decision.js +3 -3
  51. package/dist/loop/decision.js.map +1 -1
  52. package/dist/loop/engine.d.ts +1 -0
  53. package/dist/loop/engine.d.ts.map +1 -1
  54. package/dist/loop/engine.js +76 -13
  55. package/dist/loop/engine.js.map +1 -1
  56. package/dist/loop/parallel.d.ts.map +1 -1
  57. package/dist/loop/parallel.js +2 -0
  58. package/dist/loop/parallel.js.map +1 -1
  59. package/dist/loop/pricing.d.ts +11 -4
  60. package/dist/loop/pricing.d.ts.map +1 -1
  61. package/dist/loop/pricing.js +62 -20
  62. package/dist/loop/pricing.js.map +1 -1
  63. package/dist/loop/progress.d.ts +24 -0
  64. package/dist/loop/progress.d.ts.map +1 -0
  65. package/dist/loop/progress.js +52 -0
  66. package/dist/loop/progress.js.map +1 -0
  67. package/dist/loop/step-executor.d.ts +4 -5
  68. package/dist/loop/step-executor.d.ts.map +1 -1
  69. package/dist/loop/step-executor.js +1 -0
  70. package/dist/loop/step-executor.js.map +1 -1
  71. package/dist/loop/types.d.ts +17 -0
  72. package/dist/loop/types.d.ts.map +1 -1
  73. package/dist/mcp/tools/admin.d.ts +29 -0
  74. package/dist/mcp/tools/admin.d.ts.map +1 -0
  75. package/dist/mcp/tools/admin.js +89 -0
  76. package/dist/mcp/tools/admin.js.map +1 -0
  77. package/dist/mcp/tools/auth.d.ts +3 -0
  78. package/dist/mcp/tools/auth.d.ts.map +1 -0
  79. package/dist/mcp/tools/auth.js +19 -0
  80. package/dist/mcp/tools/auth.js.map +1 -0
  81. package/dist/mcp/tools/index.d.ts.map +1 -1
  82. package/dist/mcp/tools/index.js +5 -533
  83. package/dist/mcp/tools/index.js.map +1 -1
  84. package/dist/mcp/tools/operations.d.ts +32 -0
  85. package/dist/mcp/tools/operations.d.ts.map +1 -0
  86. package/dist/mcp/tools/operations.js +95 -0
  87. package/dist/mcp/tools/operations.js.map +1 -0
  88. package/dist/mcp/tools/settings.d.ts +12 -0
  89. package/dist/mcp/tools/settings.d.ts.map +1 -0
  90. package/dist/mcp/tools/settings.js +58 -0
  91. package/dist/mcp/tools/settings.js.map +1 -0
  92. package/dist/mcp/tools/status.d.ts +25 -0
  93. package/dist/mcp/tools/status.d.ts.map +1 -0
  94. package/dist/mcp/tools/status.js +307 -0
  95. package/dist/mcp/tools/status.js.map +1 -0
  96. package/dist/ops/continue.js +6 -1
  97. package/dist/ops/continue.js.map +1 -1
  98. package/dist/ops/project-check.d.ts +15 -0
  99. package/dist/ops/project-check.d.ts.map +1 -0
  100. package/dist/ops/project-check.js +136 -0
  101. package/dist/ops/project-check.js.map +1 -0
  102. package/dist/ops/rebase-and-check.d.ts +2 -1
  103. package/dist/ops/rebase-and-check.d.ts.map +1 -1
  104. package/dist/ops/rebase-and-check.js +2 -2
  105. package/dist/ops/rebase-and-check.js.map +1 -1
  106. package/dist/ops/rebase.d.ts +8 -5
  107. package/dist/ops/rebase.d.ts.map +1 -1
  108. package/dist/ops/rebase.js +43 -29
  109. package/dist/ops/rebase.js.map +1 -1
  110. package/dist/runner/comment-commands.d.ts +20 -0
  111. package/dist/runner/comment-commands.d.ts.map +1 -0
  112. package/dist/runner/comment-commands.js +221 -0
  113. package/dist/runner/comment-commands.js.map +1 -0
  114. package/dist/runner/helpers.d.ts +57 -0
  115. package/dist/runner/helpers.d.ts.map +1 -0
  116. package/dist/runner/helpers.js +259 -0
  117. package/dist/runner/helpers.js.map +1 -0
  118. package/dist/runner/poller.d.ts.map +1 -1
  119. package/dist/runner/poller.js +19 -781
  120. package/dist/runner/poller.js.map +1 -1
  121. package/dist/runner/reaction-scan.d.ts +17 -0
  122. package/dist/runner/reaction-scan.d.ts.map +1 -0
  123. package/dist/runner/reaction-scan.js +33 -0
  124. package/dist/runner/reaction-scan.js.map +1 -0
  125. package/dist/runner/run-finalizer.d.ts +30 -0
  126. package/dist/runner/run-finalizer.d.ts.map +1 -0
  127. package/dist/runner/run-finalizer.js +217 -0
  128. package/dist/runner/run-finalizer.js.map +1 -0
  129. package/dist/settings/definitions/github.d.ts +3 -0
  130. package/dist/settings/definitions/github.d.ts.map +1 -0
  131. package/dist/settings/definitions/github.js +267 -0
  132. package/dist/settings/definitions/github.js.map +1 -0
  133. package/dist/settings/definitions/loop.d.ts +3 -0
  134. package/dist/settings/definitions/loop.d.ts.map +1 -0
  135. package/dist/settings/definitions/loop.js +113 -0
  136. package/dist/settings/definitions/loop.js.map +1 -0
  137. package/dist/settings/definitions/observability.d.ts +3 -0
  138. package/dist/settings/definitions/observability.d.ts.map +1 -0
  139. package/dist/settings/definitions/observability.js +74 -0
  140. package/dist/settings/definitions/observability.js.map +1 -0
  141. package/dist/settings/definitions/security.d.ts +3 -0
  142. package/dist/settings/definitions/security.d.ts.map +1 -0
  143. package/dist/settings/definitions/security.js +121 -0
  144. package/dist/settings/definitions/security.js.map +1 -0
  145. package/dist/settings/registry.d.ts +82 -6
  146. package/dist/settings/registry.d.ts.map +1 -1
  147. package/dist/settings/registry.js +301 -194
  148. package/dist/settings/registry.js.map +1 -1
  149. package/dist/settings/runtime.d.ts +5 -1
  150. package/dist/settings/runtime.d.ts.map +1 -1
  151. package/dist/settings/runtime.js +46 -9
  152. package/dist/settings/runtime.js.map +1 -1
  153. package/dist/state/db.d.ts.map +1 -1
  154. package/dist/state/db.js +2 -0
  155. package/dist/state/db.js.map +1 -1
  156. package/dist/state/migrations/020-cost-ledger.d.ts +3 -0
  157. package/dist/state/migrations/020-cost-ledger.d.ts.map +1 -0
  158. package/dist/state/migrations/020-cost-ledger.js +37 -0
  159. package/dist/state/migrations/020-cost-ledger.js.map +1 -0
  160. package/dist/state/runs.d.ts +1 -0
  161. package/dist/state/runs.d.ts.map +1 -1
  162. package/dist/state/runs.js +3 -0
  163. package/dist/state/runs.js.map +1 -1
  164. package/dist/state/stats.d.ts +20 -0
  165. package/dist/state/stats.d.ts.map +1 -1
  166. package/dist/state/stats.js +68 -8
  167. package/dist/state/stats.js.map +1 -1
  168. package/dist/utils/logger.d.ts +9 -0
  169. package/dist/utils/logger.d.ts.map +1 -1
  170. package/dist/utils/logger.js +13 -0
  171. package/dist/utils/logger.js.map +1 -1
  172. package/dist/web/routes/api-events.d.ts +10 -0
  173. package/dist/web/routes/api-events.d.ts.map +1 -0
  174. package/dist/web/routes/api-events.js +251 -0
  175. package/dist/web/routes/api-events.js.map +1 -0
  176. package/dist/web/routes/api-operations.d.ts +3 -0
  177. package/dist/web/routes/api-operations.d.ts.map +1 -0
  178. package/dist/web/routes/api-operations.js +371 -0
  179. package/dist/web/routes/api-operations.js.map +1 -0
  180. package/dist/web/routes/api-runs.d.ts +3 -0
  181. package/dist/web/routes/api-runs.d.ts.map +1 -0
  182. package/dist/web/routes/api-runs.js +96 -0
  183. package/dist/web/routes/api-runs.js.map +1 -0
  184. package/dist/web/routes/api-settings.d.ts +3 -0
  185. package/dist/web/routes/api-settings.d.ts.map +1 -0
  186. package/dist/web/routes/api-settings.js +61 -0
  187. package/dist/web/routes/api-settings.js.map +1 -0
  188. package/dist/web/routes/context.d.ts +15 -0
  189. package/dist/web/routes/context.d.ts.map +1 -0
  190. package/dist/web/routes/context.js +2 -0
  191. package/dist/web/routes/context.js.map +1 -0
  192. package/dist/web/server.d.ts +58 -1
  193. package/dist/web/server.d.ts.map +1 -1
  194. package/dist/web/server.js +116 -847
  195. package/dist/web/server.js.map +1 -1
  196. package/dist/web/shell-session.d.ts +74 -0
  197. package/dist/web/shell-session.d.ts.map +1 -0
  198. package/dist/web/shell-session.js +279 -0
  199. package/dist/web/shell-session.js.map +1 -0
  200. package/dist/web/snapshots.d.ts +159 -0
  201. package/dist/web/snapshots.d.ts.map +1 -0
  202. package/dist/web/snapshots.js +231 -0
  203. package/dist/web/snapshots.js.map +1 -0
  204. package/dist/workers/acp.d.ts.map +1 -1
  205. package/dist/workers/acp.js +116 -0
  206. package/dist/workers/acp.js.map +1 -1
  207. package/dist/workers/claude.d.ts.map +1 -1
  208. package/dist/workers/claude.js +13 -3
  209. package/dist/workers/claude.js.map +1 -1
  210. package/dist/workers/codex.d.ts.map +1 -1
  211. package/dist/workers/codex.js +16 -4
  212. package/dist/workers/codex.js.map +1 -1
  213. package/dist/workers/types.d.ts +14 -4
  214. package/dist/workers/types.d.ts.map +1 -1
  215. package/examples/config.example.yaml +12 -3
  216. package/package.json +8 -2
  217. package/web/dist/assets/index-BIrXUwFe.css +1 -0
  218. package/web/dist/assets/index-COMzHPcP.js +26 -0
  219. package/web/dist/index.html +2 -2
  220. package/web/dist/assets/index-k6kgdnzy.js +0 -9
  221. package/web/dist/assets/index-xm9qPlYB.css +0 -1
@@ -0,0 +1,159 @@
1
+ import type { MCPDependencies } from '../mcp/server.js';
2
+ import { loadTuiStats } from '../state/stats.js';
3
+ import { type RuntimeSettingSnapshot } from '../settings/runtime.js';
4
+ import { type SettingValue } from '../settings/registry.js';
5
+ interface DashboardSnapshot {
6
+ generatedAt: string;
7
+ status: unknown;
8
+ runs: unknown;
9
+ cost: unknown;
10
+ build: {
11
+ version: string;
12
+ gitSha: string | null;
13
+ };
14
+ config: {
15
+ repos: string[];
16
+ pollIntervalSeconds: number;
17
+ };
18
+ stats: ReturnType<typeof loadTuiStats>;
19
+ }
20
+ interface SettingsSnapshot {
21
+ generatedAt: string;
22
+ settings: SettingsSnapshotEntry[];
23
+ }
24
+ interface SettingsSnapshotEntry extends RuntimeSettingSnapshot {
25
+ hasYamlValue: boolean;
26
+ yamlValue: SettingValue | null;
27
+ }
28
+ type CommandSpec = string | string[];
29
+ type CommandWhen = 'always' | 'dedicated' | 'shared';
30
+ interface ProjectsSnapshot {
31
+ generatedAt: string;
32
+ githubDefaults: {
33
+ tokenEnv: string;
34
+ apiBaseUrl: string;
35
+ };
36
+ workerProfiles: Record<string, ProjectWorkerProfileSummary>;
37
+ repos: ProjectRepoSummary[];
38
+ }
39
+ interface ProjectWorkerProfileSummary {
40
+ type: string;
41
+ command: string;
42
+ args: string[];
43
+ workerTimeoutSeconds: number;
44
+ minimalEnv: boolean;
45
+ runtimeWrapper: string | null;
46
+ envKeys: string[];
47
+ }
48
+ interface ProjectLabels {
49
+ ready: string[];
50
+ running: string;
51
+ blocked: string;
52
+ needsHuman: string;
53
+ reviewReady: string;
54
+ error: string;
55
+ retry: string;
56
+ planning: string;
57
+ mergeQueued: string;
58
+ merging: string;
59
+ mergeFailed: string;
60
+ }
61
+ interface ProjectRepoSummary {
62
+ repo: string;
63
+ forge: 'github' | 'forgejo';
64
+ linkedProjects: string[];
65
+ apiBaseUrl?: string;
66
+ tokenEnv?: string;
67
+ maxConcurrentRuns: number;
68
+ localPath: string;
69
+ baseBranch: string;
70
+ branchPrefix: string;
71
+ labels: ProjectLabels;
72
+ kanban?: {
73
+ triggerLabel: string;
74
+ labels: ProjectLabels;
75
+ };
76
+ labelConfig: Record<string, {
77
+ color?: string;
78
+ description?: string;
79
+ }>;
80
+ defaults: {
81
+ planner: 'claude' | 'codex' | 'opencode';
82
+ coder: 'claude' | 'codex' | 'opencode';
83
+ reviewer: 'claude' | 'codex' | 'opencode';
84
+ doneMode: 'pr-ready' | 'manual-only';
85
+ notifyPriority: 'normal' | 'high';
86
+ prMentions: string[];
87
+ };
88
+ environment?: {
89
+ defaultMode: 'shared' | 'dedicated';
90
+ dedicated?: {
91
+ compose: {
92
+ file: string;
93
+ services: string[];
94
+ projectName: string;
95
+ };
96
+ env: {
97
+ copyFrom: string;
98
+ overrideKeys: string[];
99
+ overrideFiles: string[];
100
+ };
101
+ healthcheck?: CommandSpec;
102
+ teardownOnComplete: boolean;
103
+ };
104
+ shared?: {
105
+ requireRunning: boolean;
106
+ healthcheck?: CommandSpec;
107
+ };
108
+ bootstrap: Array<{
109
+ command: CommandSpec;
110
+ when: CommandWhen;
111
+ failureHints?: Array<{
112
+ contains: string;
113
+ message: string;
114
+ output: 'combined' | 'stdout' | 'stderr';
115
+ }>;
116
+ }>;
117
+ cleanup: Array<{
118
+ command: CommandSpec;
119
+ when: CommandWhen;
120
+ failureHints?: Array<{
121
+ contains: string;
122
+ message: string;
123
+ output: 'combined' | 'stdout' | 'stderr';
124
+ }>;
125
+ }>;
126
+ };
127
+ verify: CommandSpec[];
128
+ prompts: {
129
+ plannerSystem: boolean;
130
+ coderSystem: boolean;
131
+ reviewerSystem: boolean;
132
+ };
133
+ planning: {
134
+ prdDirectory: string;
135
+ };
136
+ selectors: {
137
+ includeLabelsAny: string[];
138
+ excludeLabelsAny: string[];
139
+ };
140
+ agents: Record<string, string>;
141
+ workflow?: string;
142
+ workflowByTriage?: {
143
+ trivial?: string;
144
+ standard?: string;
145
+ };
146
+ mergeQueue: {
147
+ enabled: boolean;
148
+ batchSize: number;
149
+ mergeMethod: 'merge' | 'squash' | 'rebase';
150
+ retryFlakyOnce: boolean;
151
+ requireApproval: boolean;
152
+ stagingBranchPrefix: string;
153
+ };
154
+ }
155
+ export declare function buildDashboardSnapshot(deps: MCPDependencies): Promise<DashboardSnapshot>;
156
+ export declare function buildProjectsSnapshot(deps: MCPDependencies): ProjectsSnapshot;
157
+ export declare function buildSettingsSnapshot(deps: MCPDependencies, rawConfig: unknown): SettingsSnapshot;
158
+ export {};
159
+ //# sourceMappingURL=snapshots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshots.d.ts","sourceRoot":"","sources":["../../src/web/snapshots.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,231 @@
1
+ import { handleToolCall } from '../mcp/tools/index.js';
2
+ import { loadTuiStats } from '../state/stats.js';
3
+ import { getBuildInfo } from '../utils/build-info.js';
4
+ import { nowUtcIso } from '../utils/time.js';
5
+ import { listRuntimeSettings, resolveConfigWithRuntimeSettings, } from '../settings/runtime.js';
6
+ import { getSettingDefinition, resolveSettingYamlValue, sanitizeSettingValueForDisplay, } from '../settings/registry.js';
7
+ const BUILD_INFO = getBuildInfo();
8
+ export async function buildDashboardSnapshot(deps) {
9
+ const runtimeConfig = resolveConfigWithRuntimeSettings(deps.config, deps.db);
10
+ const runtimeDeps = {
11
+ ...deps,
12
+ config: runtimeConfig,
13
+ };
14
+ const [status, runs, cost] = await Promise.all([
15
+ handleToolCall('night-orch-status', {}, runtimeDeps),
16
+ handleToolCall('night-orch-list-runs', { limit: 100 }, runtimeDeps),
17
+ handleToolCall('night-orch-cost-report', { days: 7 }, runtimeDeps),
18
+ ]);
19
+ return {
20
+ generatedAt: nowUtcIso(),
21
+ status,
22
+ runs,
23
+ cost,
24
+ build: BUILD_INFO,
25
+ config: {
26
+ repos: runtimeConfig.repos.map((repo) => repo.repo),
27
+ pollIntervalSeconds: runtimeConfig.github.pollIntervalSeconds,
28
+ },
29
+ stats: loadTuiStats(runtimeDeps.db, { costModel: runtimeConfig.cost.model }),
30
+ };
31
+ }
32
+ export function buildProjectsSnapshot(deps) {
33
+ return {
34
+ generatedAt: nowUtcIso(),
35
+ githubDefaults: {
36
+ tokenEnv: deps.config.github.tokenEnv,
37
+ apiBaseUrl: deps.config.github.apiBaseUrl,
38
+ },
39
+ workerProfiles: Object.fromEntries(Object.entries(deps.config.workerProfiles).map(([name, profile]) => [
40
+ name,
41
+ sanitizeWorkerProfile(profile),
42
+ ])),
43
+ repos: deps.config.repos.map((repo) => sanitizeProjectRepo(repo)),
44
+ };
45
+ }
46
+ export function buildSettingsSnapshot(deps, rawConfig) {
47
+ const runtimeSettings = listRuntimeSettings(deps.config, deps.db);
48
+ return {
49
+ generatedAt: nowUtcIso(),
50
+ settings: runtimeSettings.map((setting) => {
51
+ const definition = getSettingDefinition(setting.key);
52
+ if (!definition) {
53
+ return {
54
+ ...setting,
55
+ hasYamlValue: false,
56
+ yamlValue: null,
57
+ };
58
+ }
59
+ const { hasYamlValue, yamlValue } = resolveSettingYamlValue(definition, rawConfig, deps.config);
60
+ return {
61
+ ...setting,
62
+ hasYamlValue,
63
+ yamlValue: sanitizeSettingValueForDisplay(definition, yamlValue),
64
+ };
65
+ }),
66
+ };
67
+ }
68
+ function sanitizeWorkerProfile(profile) {
69
+ return {
70
+ type: profile.type,
71
+ command: profile.command,
72
+ args: [...profile.args],
73
+ workerTimeoutSeconds: profile.workerTimeoutSeconds,
74
+ minimalEnv: profile.minimalEnv,
75
+ runtimeWrapper: profile.runtimeWrapper,
76
+ envKeys: Object.keys(profile.env),
77
+ };
78
+ }
79
+ function sanitizeProjectRepo(repo) {
80
+ return {
81
+ repo: repo.repo,
82
+ forge: repo.forge,
83
+ linkedProjects: [...repo.linkedProjects],
84
+ apiBaseUrl: repo.apiBaseUrl,
85
+ tokenEnv: repo.tokenEnv,
86
+ maxConcurrentRuns: repo.maxConcurrentRuns,
87
+ localPath: repo.localPath,
88
+ baseBranch: repo.baseBranch,
89
+ branchPrefix: repo.branchPrefix,
90
+ labels: sanitizeLabels(repo.labels),
91
+ ...(repo.kanban
92
+ ? {
93
+ kanban: {
94
+ triggerLabel: repo.kanban.triggerLabel,
95
+ labels: sanitizeLabels(repo.kanban.labels),
96
+ },
97
+ }
98
+ : {}),
99
+ labelConfig: Object.fromEntries(Object.entries(repo.labelConfig).map(([label, config]) => [
100
+ label,
101
+ {
102
+ ...(config.color ? { color: config.color } : {}),
103
+ ...(config.description ? { description: config.description } : {}),
104
+ },
105
+ ])),
106
+ defaults: {
107
+ planner: repo.defaults.planner,
108
+ coder: repo.defaults.coder,
109
+ reviewer: repo.defaults.reviewer,
110
+ doneMode: repo.defaults.doneMode,
111
+ notifyPriority: repo.defaults.notifyPriority,
112
+ prMentions: [...repo.defaults.prMentions],
113
+ },
114
+ ...(repo.environment ? { environment: sanitizeEnvironment(repo.environment) } : {}),
115
+ verify: repo.verify.map((command) => copyCommandSpec(command)),
116
+ prompts: {
117
+ plannerSystem: Boolean(repo.prompts?.plannerSystem),
118
+ coderSystem: Boolean(repo.prompts?.coderSystem),
119
+ reviewerSystem: Boolean(repo.prompts?.reviewerSystem),
120
+ },
121
+ planning: {
122
+ prdDirectory: repo.planning.prdDirectory,
123
+ },
124
+ selectors: {
125
+ includeLabelsAny: [...repo.selectors.includeLabelsAny],
126
+ excludeLabelsAny: [...repo.selectors.excludeLabelsAny],
127
+ },
128
+ agents: { ...repo.agents },
129
+ ...(repo.workflow ? { workflow: repo.workflow } : {}),
130
+ ...(repo.workflowByTriage ? { workflowByTriage: { ...repo.workflowByTriage } } : {}),
131
+ mergeQueue: {
132
+ enabled: repo.mergeQueue.enabled,
133
+ batchSize: repo.mergeQueue.batchSize,
134
+ mergeMethod: repo.mergeQueue.mergeMethod,
135
+ retryFlakyOnce: repo.mergeQueue.retryFlakyOnce,
136
+ requireApproval: repo.mergeQueue.requireApproval,
137
+ stagingBranchPrefix: repo.mergeQueue.stagingBranchPrefix,
138
+ },
139
+ };
140
+ }
141
+ function sanitizeEnvironment(environment) {
142
+ return {
143
+ defaultMode: environment.defaultMode,
144
+ ...(environment.dedicated
145
+ ? {
146
+ dedicated: {
147
+ compose: {
148
+ file: environment.dedicated.compose.file,
149
+ services: [...environment.dedicated.compose.services],
150
+ projectName: environment.dedicated.compose.projectName,
151
+ },
152
+ env: {
153
+ copyFrom: environment.dedicated.env.copyFrom,
154
+ overrideKeys: Object.keys(environment.dedicated.env.overrides),
155
+ overrideFiles: [...environment.dedicated.env.overrideFiles],
156
+ },
157
+ ...(environment.dedicated.healthcheck
158
+ ? { healthcheck: copyCommandSpec(environment.dedicated.healthcheck) }
159
+ : {}),
160
+ teardownOnComplete: environment.dedicated.teardownOnComplete,
161
+ },
162
+ }
163
+ : {}),
164
+ ...(environment.shared
165
+ ? {
166
+ shared: {
167
+ requireRunning: environment.shared.requireRunning,
168
+ ...(environment.shared.healthcheck
169
+ ? { healthcheck: copyCommandSpec(environment.shared.healthcheck) }
170
+ : {}),
171
+ },
172
+ }
173
+ : {}),
174
+ bootstrap: environment.bootstrap.map((step) => ({
175
+ when: step.when,
176
+ command: copyCommandSpec(step.command),
177
+ ...(step.failureHints && step.failureHints.length > 0
178
+ ? {
179
+ failureHints: step.failureHints.map((hint) => ({
180
+ contains: hint.contains,
181
+ message: hint.message,
182
+ output: hint.output,
183
+ })),
184
+ }
185
+ : {}),
186
+ })),
187
+ cleanup: environment.cleanup.map((step) => ({
188
+ when: step.when,
189
+ command: copyCommandSpec(step.command),
190
+ ...(step.failureHints && step.failureHints.length > 0
191
+ ? {
192
+ failureHints: step.failureHints.map((hint) => ({
193
+ contains: hint.contains,
194
+ message: hint.message,
195
+ output: hint.output,
196
+ })),
197
+ }
198
+ : {}),
199
+ })),
200
+ };
201
+ }
202
+ function sanitizeLabels(labels) {
203
+ return {
204
+ ready: [...labels.ready],
205
+ running: labels.running,
206
+ blocked: normalizeLabelValue(labels.blocked),
207
+ needsHuman: labels.needsHuman,
208
+ reviewReady: labels.reviewReady,
209
+ error: labels.error,
210
+ retry: labels.retry,
211
+ planning: labels.planning,
212
+ mergeQueued: labels.mergeQueued,
213
+ merging: labels.merging,
214
+ mergeFailed: labels.mergeFailed,
215
+ };
216
+ }
217
+ function normalizeLabelValue(value) {
218
+ if (typeof value === 'string')
219
+ return value;
220
+ if (Array.isArray(value)) {
221
+ return value.find((entry) => typeof entry === 'string') ?? '';
222
+ }
223
+ return '';
224
+ }
225
+ function copyCommandSpec(command) {
226
+ if (Array.isArray(command)) {
227
+ return [...command];
228
+ }
229
+ return command;
230
+ }
231
+ //# sourceMappingURL=snapshots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshots.js","sourceRoot":"","sources":["../../src/web/snapshots.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"acp.d.ts","sourceRoot":"","sources":["../../src/workers/acp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAQlF,qBAAa,gBAAiB,YAAW,aAAa;IAC9C,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAyH1D,iBAAiB,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CAQnF"}
1
+ {"version":3,"file":"acp.d.ts","sourceRoot":"","sources":["../../src/workers/acp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAQlF,qBAAa,gBAAiB,YAAW,aAAa;IAC9C,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA2I1D,iBAAiB,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CAQnF"}
@@ -19,6 +19,11 @@ export class AcpWorkerAdapter {
19
19
  });
20
20
  const onSessionUpdate = (notification) => {
21
21
  emitAcpUpdateEvent(notification, input);
22
+ const usageFromUpdate = extractAcpTokenUsageFromNotification(notification);
23
+ if (usageFromUpdate) {
24
+ const isTurnComplete = notification['type'] === 'turn_complete';
25
+ tokenUsage = mergeTokenUsage(tokenUsage, usageFromUpdate, isTurnComplete ? 'sum-completion' : 'max');
26
+ }
22
27
  if (notification['type'] === 'text' && typeof notification['text'] === 'string') {
23
28
  textParts.push(notification['text']);
24
29
  }
@@ -36,6 +41,7 @@ export class AcpWorkerAdapter {
36
41
  timeoutMs: input.timeoutSeconds * 1000,
37
42
  });
38
43
  sessionId = typeof result['sessionId'] === 'string' ? result['sessionId'] : null;
44
+ tokenUsage = mergeTokenUsage(tokenUsage, extractAcpTokenUsageFromResult(result), 'max');
39
45
  assistantText = textParts.join('');
40
46
  }
41
47
  catch (resumeErr) {
@@ -53,6 +59,7 @@ export class AcpWorkerAdapter {
53
59
  sessionOptions: { maxTurns: 50 },
54
60
  });
55
61
  sessionId = typeof result['sessionId'] === 'string' ? result['sessionId'] : null;
62
+ tokenUsage = mergeTokenUsage(tokenUsage, extractAcpTokenUsageFromResult(result), 'max');
56
63
  assistantText = textParts.join('');
57
64
  }
58
65
  }
@@ -69,6 +76,7 @@ export class AcpWorkerAdapter {
69
76
  sessionOptions: { maxTurns: 50 },
70
77
  });
71
78
  sessionId = typeof result['sessionId'] === 'string' ? result['sessionId'] : null;
79
+ tokenUsage = mergeTokenUsage(tokenUsage, extractAcpTokenUsageFromResult(result), 'max');
72
80
  assistantText = textParts.join('');
73
81
  }
74
82
  }
@@ -99,6 +107,13 @@ export class AcpWorkerAdapter {
99
107
  const durationMs = Date.now() - start;
100
108
  if (!assistantText)
101
109
  assistantText = textParts.join('');
110
+ if (!tokenUsage && assistantText.trim().length > 0) {
111
+ logger.warn({
112
+ runId: input.runId ?? null,
113
+ role: input.role,
114
+ phase: input.phase ?? null,
115
+ }, 'ACP token extraction unavailable; falling back to duration-based cost estimate');
116
+ }
102
117
  logger.info({ role: input.role, textLength: assistantText.length, sessionId, durationMs }, 'ACP worker completed');
103
118
  const { parsed, parseError } = parseOutput(input.role, assistantText);
104
119
  emitWorkerEvent(input, 'session_end', {
@@ -187,4 +202,105 @@ function parseOutput(role, raw) {
187
202
  return { parsed: null, parseError: `Unknown role: ${role}` };
188
203
  }
189
204
  }
205
+ function extractAcpTokenUsageFromNotification(notification) {
206
+ const directUsage = tokenUsageFromCandidate(notification['usage']);
207
+ if (directUsage)
208
+ return directUsage;
209
+ const eventUsage = tokenUsageFromCandidate(notification['event']);
210
+ if (eventUsage)
211
+ return eventUsage;
212
+ if (notification['sessionUpdate'] === 'usage_update') {
213
+ const usageUpdate = tokenUsageFromCandidate(notification);
214
+ if (usageUpdate)
215
+ return usageUpdate;
216
+ }
217
+ if (notification['type'] === 'turn_complete') {
218
+ const tokenCount = parseTokenCount(notification['tokenCount']);
219
+ if (tokenCount > 0) {
220
+ return {
221
+ promptTokens: 0,
222
+ completionTokens: tokenCount,
223
+ };
224
+ }
225
+ }
226
+ return undefined;
227
+ }
228
+ function extractAcpTokenUsageFromResult(result) {
229
+ const directUsage = tokenUsageFromCandidate(result['usage']);
230
+ if (directUsage)
231
+ return directUsage;
232
+ const record = result['record'];
233
+ if (isRecord(record)) {
234
+ const cumulative = tokenUsageFromCandidate(record['cumulative_token_usage']);
235
+ if (cumulative)
236
+ return cumulative;
237
+ const requestUsage = record['request_token_usage'];
238
+ if (isRecord(requestUsage)) {
239
+ let merged;
240
+ for (const value of Object.values(requestUsage)) {
241
+ merged = mergeTokenUsage(merged, tokenUsageFromCandidate(value), 'max');
242
+ }
243
+ if (merged)
244
+ return merged;
245
+ }
246
+ }
247
+ return undefined;
248
+ }
249
+ function tokenUsageFromCandidate(candidate) {
250
+ if (!isRecord(candidate))
251
+ return undefined;
252
+ const usageMeta = candidate['_meta'];
253
+ const source = isRecord(usageMeta) && isRecord(usageMeta['usage'])
254
+ ? usageMeta['usage']
255
+ : candidate;
256
+ const promptTokens = parseTokenCount(source['input_tokens']
257
+ ?? source['inputTokens']
258
+ ?? source['cache_creation_input_tokens']
259
+ ?? source['cacheCreationInputTokens']);
260
+ const completionTokens = parseTokenCount(source['output_tokens'] ?? source['outputTokens']);
261
+ const cacheReadTokens = parseTokenCount(source['cache_read_input_tokens']
262
+ ?? source['cacheReadInputTokens']
263
+ ?? source['cachedReadTokens']);
264
+ const promptFromSource = parseTokenCount(source['input_tokens'] ?? source['inputTokens'])
265
+ + parseTokenCount(source['cache_creation_input_tokens'] ?? source['cacheCreationInputTokens']);
266
+ const normalizedPromptTokens = promptFromSource > 0 ? promptFromSource : promptTokens;
267
+ if (normalizedPromptTokens <= 0 && completionTokens <= 0 && cacheReadTokens <= 0)
268
+ return undefined;
269
+ return {
270
+ promptTokens: normalizedPromptTokens,
271
+ completionTokens,
272
+ ...(cacheReadTokens > 0 ? { cacheReadTokens } : {}),
273
+ };
274
+ }
275
+ function mergeTokenUsage(existing, incoming, strategy) {
276
+ if (!incoming)
277
+ return existing;
278
+ if (!existing)
279
+ return incoming;
280
+ const existingCache = existing.cacheReadTokens ?? 0;
281
+ const incomingCache = incoming.cacheReadTokens ?? 0;
282
+ if (strategy === 'sum-completion') {
283
+ const completionTokens = existing.completionTokens + incoming.completionTokens;
284
+ const promptTokens = Math.max(existing.promptTokens, incoming.promptTokens);
285
+ const cacheReadTokens = Math.max(existingCache, incomingCache);
286
+ return {
287
+ promptTokens,
288
+ completionTokens,
289
+ ...(cacheReadTokens > 0 ? { cacheReadTokens } : {}),
290
+ };
291
+ }
292
+ const promptTokens = Math.max(existing.promptTokens, incoming.promptTokens);
293
+ const completionTokens = Math.max(existing.completionTokens, incoming.completionTokens);
294
+ const cacheReadTokens = Math.max(existingCache, incomingCache);
295
+ return {
296
+ promptTokens,
297
+ completionTokens,
298
+ ...(cacheReadTokens > 0 ? { cacheReadTokens } : {}),
299
+ };
300
+ }
301
+ function parseTokenCount(value) {
302
+ if (typeof value !== 'number' || !Number.isFinite(value))
303
+ return 0;
304
+ return Math.max(0, Math.floor(value));
305
+ }
190
306
  //# sourceMappingURL=acp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"acp.js","sourceRoot":"","sources":["../../src/workers/acp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acp.js","sourceRoot":"","sources":["../../src/workers/acp.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/workers/claude.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAYlF,qBAAa,mBAAoB,YAAW,aAAa;IACjD,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA8F1D,iBAAiB,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CAenF"}
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/workers/claude.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAYlF,qBAAa,mBAAoB,YAAW,aAAa;IACjD,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwG1D,iBAAiB,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CAenF"}
@@ -52,6 +52,13 @@ export class ClaudeWorkerAdapter {
52
52
  // Fall back to raw text if not parseable as JSON.
53
53
  const { assistantText, sessionId } = extractFromJsonOutput(result.stdout);
54
54
  const tokenUsage = extractClaudeTokenUsage(result.stdout);
55
+ if (!tokenUsage && result.stdout.trim().length > 0) {
56
+ logger.warn({
57
+ runId: input.runId ?? null,
58
+ role: input.role,
59
+ phase: input.phase ?? null,
60
+ }, 'Claude token extraction unavailable; falling back to duration-based cost estimate');
61
+ }
55
62
  logger.info({ role: input.role, rawLength: result.stdout.length, textLength: assistantText.length, sessionId }, 'Claude output received');
56
63
  if (result.stdout.length === 0 && result.stderr.length > 0) {
57
64
  logger.warn({ role: input.role, stderrTail: result.stderr.slice(-1000) }, 'Claude produced no stdout — stderr may contain error details');
@@ -283,14 +290,16 @@ function extractClaudeTokenUsage(raw) {
283
290
  return undefined;
284
291
  let promptTokens = 0;
285
292
  let completionTokens = 0;
293
+ let cacheReadTokens = 0;
286
294
  const addUsage = (usageCandidate) => {
287
295
  if (!isRecord(usageCandidate))
288
296
  return;
289
297
  const inputTokens = parseTokenCount(usageCandidate['input_tokens'])
290
- + parseTokenCount(usageCandidate['cache_creation_input_tokens'])
291
- + parseTokenCount(usageCandidate['cache_read_input_tokens']);
298
+ + parseTokenCount(usageCandidate['cache_creation_input_tokens']);
299
+ const cacheRead = parseTokenCount(usageCandidate['cache_read_input_tokens']);
292
300
  const outputTokens = parseTokenCount(usageCandidate['output_tokens']);
293
301
  promptTokens += inputTokens;
302
+ cacheReadTokens += cacheRead;
294
303
  completionTokens += outputTokens;
295
304
  };
296
305
  if (Array.isArray(parsed)) {
@@ -307,11 +316,12 @@ function extractClaudeTokenUsage(raw) {
307
316
  addUsage(parsed['usage']);
308
317
  }
309
318
  }
310
- if (promptTokens <= 0 && completionTokens <= 0)
319
+ if (promptTokens <= 0 && completionTokens <= 0 && cacheReadTokens <= 0)
311
320
  return undefined;
312
321
  return {
313
322
  promptTokens,
314
323
  completionTokens,
324
+ ...(cacheReadTokens > 0 ? { cacheReadTokens } : {}),
315
325
  };
316
326
  }
317
327
  function parseTokenCount(value) {