@bradygaster/squad-sdk 0.8.25 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/README.md +296 -296
  2. package/dist/adapter/client.d.ts +17 -0
  3. package/dist/adapter/client.d.ts.map +1 -1
  4. package/dist/adapter/client.js +101 -1
  5. package/dist/adapter/client.js.map +1 -1
  6. package/dist/agents/history-shadow.d.ts.map +1 -1
  7. package/dist/agents/history-shadow.js +129 -62
  8. package/dist/agents/history-shadow.js.map +1 -1
  9. package/dist/agents/index.d.ts +1 -0
  10. package/dist/agents/index.d.ts.map +1 -1
  11. package/dist/agents/index.js +2 -0
  12. package/dist/agents/index.js.map +1 -1
  13. package/dist/agents/model-selector.d.ts +2 -0
  14. package/dist/agents/model-selector.d.ts.map +1 -1
  15. package/dist/agents/model-selector.js +41 -35
  16. package/dist/agents/model-selector.js.map +1 -1
  17. package/dist/agents/personal.d.ts +35 -0
  18. package/dist/agents/personal.d.ts.map +1 -0
  19. package/dist/agents/personal.js +67 -0
  20. package/dist/agents/personal.js.map +1 -0
  21. package/dist/build/github-dist.js +42 -42
  22. package/dist/builders/index.d.ts +3 -2
  23. package/dist/builders/index.d.ts.map +1 -1
  24. package/dist/builders/index.js +28 -0
  25. package/dist/builders/index.js.map +1 -1
  26. package/dist/builders/types.d.ts +13 -0
  27. package/dist/builders/types.d.ts.map +1 -1
  28. package/dist/config/init.d.ts +8 -0
  29. package/dist/config/init.d.ts.map +1 -1
  30. package/dist/config/init.js +304 -193
  31. package/dist/config/init.js.map +1 -1
  32. package/dist/config/models.d.ts +112 -0
  33. package/dist/config/models.d.ts.map +1 -1
  34. package/dist/config/models.js +329 -18
  35. package/dist/config/models.js.map +1 -1
  36. package/dist/coordinator/index.js +2 -2
  37. package/dist/coordinator/index.js.map +1 -1
  38. package/dist/index.d.ts +8 -3
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +7 -2
  41. package/dist/index.js.map +1 -1
  42. package/dist/platform/azure-devops.d.ts +42 -0
  43. package/dist/platform/azure-devops.d.ts.map +1 -1
  44. package/dist/platform/azure-devops.js +75 -0
  45. package/dist/platform/azure-devops.js.map +1 -1
  46. package/dist/platform/comms-file-log.d.ts.map +1 -1
  47. package/dist/platform/comms-file-log.js +2 -1
  48. package/dist/platform/comms-file-log.js.map +1 -1
  49. package/dist/platform/index.d.ts +2 -1
  50. package/dist/platform/index.d.ts.map +1 -1
  51. package/dist/platform/index.js +1 -0
  52. package/dist/platform/index.js.map +1 -1
  53. package/dist/ralph/capabilities.d.ts +67 -0
  54. package/dist/ralph/capabilities.d.ts.map +1 -0
  55. package/dist/ralph/capabilities.js +111 -0
  56. package/dist/ralph/capabilities.js.map +1 -0
  57. package/dist/ralph/index.d.ts +2 -0
  58. package/dist/ralph/index.d.ts.map +1 -1
  59. package/dist/ralph/index.js +6 -5
  60. package/dist/ralph/index.js.map +1 -1
  61. package/dist/ralph/rate-limiting.d.ts +99 -0
  62. package/dist/ralph/rate-limiting.d.ts.map +1 -0
  63. package/dist/ralph/rate-limiting.js +170 -0
  64. package/dist/ralph/rate-limiting.js.map +1 -0
  65. package/dist/resolution.d.ts +24 -2
  66. package/dist/resolution.d.ts.map +1 -1
  67. package/dist/resolution.js +106 -6
  68. package/dist/resolution.js.map +1 -1
  69. package/dist/roles/catalog-categories.d.ts +146 -0
  70. package/dist/roles/catalog-categories.d.ts.map +1 -0
  71. package/dist/roles/catalog-categories.js +374 -0
  72. package/dist/roles/catalog-categories.js.map +1 -0
  73. package/dist/roles/catalog-engineering.d.ts +212 -0
  74. package/dist/roles/catalog-engineering.d.ts.map +1 -0
  75. package/dist/roles/catalog-engineering.js +549 -0
  76. package/dist/roles/catalog-engineering.js.map +1 -0
  77. package/dist/roles/catalog.d.ts +24 -0
  78. package/dist/roles/catalog.d.ts.map +1 -0
  79. package/dist/roles/catalog.js +28 -0
  80. package/dist/roles/catalog.js.map +1 -0
  81. package/dist/roles/index.d.ts +69 -0
  82. package/dist/roles/index.d.ts.map +1 -0
  83. package/dist/roles/index.js +197 -0
  84. package/dist/roles/index.js.map +1 -0
  85. package/dist/roles/types.d.ts +87 -0
  86. package/dist/roles/types.d.ts.map +1 -0
  87. package/dist/roles/types.js +14 -0
  88. package/dist/roles/types.js.map +1 -0
  89. package/dist/runtime/benchmarks.js +5 -5
  90. package/dist/runtime/benchmarks.js.map +1 -1
  91. package/dist/runtime/constants.d.ts +2 -2
  92. package/dist/runtime/constants.d.ts.map +1 -1
  93. package/dist/runtime/constants.js +5 -3
  94. package/dist/runtime/constants.js.map +1 -1
  95. package/dist/runtime/cross-squad.d.ts +118 -0
  96. package/dist/runtime/cross-squad.d.ts.map +1 -0
  97. package/dist/runtime/cross-squad.js +234 -0
  98. package/dist/runtime/cross-squad.js.map +1 -0
  99. package/dist/runtime/otel-init.d.ts +24 -17
  100. package/dist/runtime/otel-init.d.ts.map +1 -1
  101. package/dist/runtime/otel-init.js +29 -20
  102. package/dist/runtime/otel-init.js.map +1 -1
  103. package/dist/runtime/otel-metrics.d.ts +5 -0
  104. package/dist/runtime/otel-metrics.d.ts.map +1 -1
  105. package/dist/runtime/otel-metrics.js +54 -0
  106. package/dist/runtime/otel-metrics.js.map +1 -1
  107. package/dist/runtime/rework.d.ts +71 -0
  108. package/dist/runtime/rework.d.ts.map +1 -0
  109. package/dist/runtime/rework.js +107 -0
  110. package/dist/runtime/rework.js.map +1 -0
  111. package/dist/runtime/scheduler.d.ts +128 -0
  112. package/dist/runtime/scheduler.d.ts.map +1 -0
  113. package/dist/runtime/scheduler.js +427 -0
  114. package/dist/runtime/scheduler.js.map +1 -0
  115. package/dist/runtime/squad-observer.d.ts.map +1 -1
  116. package/dist/runtime/squad-observer.js +4 -0
  117. package/dist/runtime/squad-observer.js.map +1 -1
  118. package/dist/runtime/streaming.d.ts +2 -0
  119. package/dist/runtime/streaming.d.ts.map +1 -1
  120. package/dist/runtime/streaming.js +6 -0
  121. package/dist/runtime/streaming.js.map +1 -1
  122. package/dist/runtime/telemetry.d.ts +2 -0
  123. package/dist/runtime/telemetry.d.ts.map +1 -1
  124. package/dist/runtime/telemetry.js +6 -0
  125. package/dist/runtime/telemetry.js.map +1 -1
  126. package/dist/sharing/consult.d.ts +2 -2
  127. package/dist/sharing/consult.js +83 -83
  128. package/dist/sharing/consult.js.map +1 -1
  129. package/dist/sharing/export.d.ts.map +1 -1
  130. package/dist/sharing/export.js +17 -4
  131. package/dist/sharing/export.js.map +1 -1
  132. package/dist/skills/handler-types.d.ts +271 -0
  133. package/dist/skills/handler-types.d.ts.map +1 -0
  134. package/dist/skills/handler-types.js +31 -0
  135. package/dist/skills/handler-types.js.map +1 -0
  136. package/dist/skills/index.d.ts +3 -0
  137. package/dist/skills/index.d.ts.map +1 -1
  138. package/dist/skills/index.js +3 -0
  139. package/dist/skills/index.js.map +1 -1
  140. package/dist/skills/skill-script-loader.d.ts +65 -0
  141. package/dist/skills/skill-script-loader.d.ts.map +1 -0
  142. package/dist/skills/skill-script-loader.js +227 -0
  143. package/dist/skills/skill-script-loader.js.map +1 -0
  144. package/dist/skills/skill-source.d.ts.map +1 -1
  145. package/dist/skills/skill-source.js +5 -1
  146. package/dist/skills/skill-source.js.map +1 -1
  147. package/dist/tools/index.d.ts +10 -1
  148. package/dist/tools/index.d.ts.map +1 -1
  149. package/dist/tools/index.js +49 -8
  150. package/dist/tools/index.js.map +1 -1
  151. package/dist/upstream/resolver.d.ts.map +1 -1
  152. package/dist/upstream/resolver.js +14 -5
  153. package/dist/upstream/resolver.js.map +1 -1
  154. package/package.json +34 -3
  155. package/templates/casting/Futurama.json +10 -0
  156. package/templates/casting-history.json +4 -4
  157. package/templates/casting-policy.json +37 -35
  158. package/templates/casting-reference.md +104 -0
  159. package/templates/casting-registry.json +3 -3
  160. package/templates/ceremonies.md +41 -41
  161. package/templates/charter.md +53 -53
  162. package/templates/constraint-tracking.md +38 -38
  163. package/templates/cooperative-rate-limiting.md +229 -0
  164. package/templates/copilot-instructions.md +46 -46
  165. package/templates/history.md +10 -10
  166. package/templates/identity/now.md +9 -9
  167. package/templates/identity/wisdom.md +15 -15
  168. package/templates/issue-lifecycle.md +412 -0
  169. package/templates/keda-scaler.md +164 -0
  170. package/templates/machine-capabilities.md +75 -0
  171. package/templates/mcp-config.md +90 -98
  172. package/templates/multi-agent-format.md +28 -28
  173. package/templates/orchestration-log.md +27 -27
  174. package/templates/package.json +3 -0
  175. package/templates/plugin-marketplace.md +49 -49
  176. package/templates/ralph-circuit-breaker.md +313 -0
  177. package/templates/ralph-triage.js +543 -0
  178. package/templates/raw-agent-output.md +37 -37
  179. package/templates/roster.md +60 -60
  180. package/templates/routing.md +39 -54
  181. package/templates/run-output.md +50 -50
  182. package/templates/schedule.json +19 -0
  183. package/templates/scribe-charter.md +119 -119
  184. package/templates/skill.md +24 -24
  185. package/templates/skills/agent-collaboration/SKILL.md +42 -0
  186. package/templates/skills/agent-conduct/SKILL.md +24 -0
  187. package/templates/skills/architectural-proposals/SKILL.md +151 -0
  188. package/templates/skills/ci-validation-gates/SKILL.md +84 -0
  189. package/templates/skills/cli-wiring/SKILL.md +47 -0
  190. package/templates/skills/client-compatibility/SKILL.md +89 -0
  191. package/templates/skills/cross-squad/SKILL.md +114 -0
  192. package/templates/skills/distributed-mesh/SKILL.md +287 -0
  193. package/templates/skills/distributed-mesh/mesh.json.example +30 -0
  194. package/templates/skills/distributed-mesh/sync-mesh.ps1 +111 -0
  195. package/templates/skills/distributed-mesh/sync-mesh.sh +104 -0
  196. package/templates/skills/docs-standards/SKILL.md +71 -0
  197. package/templates/skills/economy-mode/SKILL.md +114 -0
  198. package/templates/skills/external-comms/SKILL.md +329 -0
  199. package/templates/skills/gh-auth-isolation/SKILL.md +183 -0
  200. package/templates/skills/git-workflow/SKILL.md +204 -0
  201. package/templates/skills/github-multi-account/SKILL.md +95 -0
  202. package/templates/skills/history-hygiene/SKILL.md +36 -0
  203. package/templates/skills/humanizer/SKILL.md +105 -0
  204. package/templates/skills/init-mode/SKILL.md +102 -0
  205. package/templates/skills/model-selection/SKILL.md +117 -0
  206. package/templates/skills/nap/SKILL.md +24 -0
  207. package/templates/skills/personal-squad/SKILL.md +57 -0
  208. package/templates/skills/project-conventions/SKILL.md +56 -56
  209. package/templates/skills/release-process/SKILL.md +423 -0
  210. package/templates/skills/reskill/SKILL.md +92 -0
  211. package/templates/skills/reviewer-protocol/SKILL.md +79 -0
  212. package/templates/skills/secret-handling/SKILL.md +200 -0
  213. package/templates/skills/session-recovery/SKILL.md +155 -0
  214. package/templates/skills/squad-conventions/SKILL.md +69 -0
  215. package/templates/skills/test-discipline/SKILL.md +37 -0
  216. package/templates/skills/windows-compatibility/SKILL.md +74 -0
  217. package/templates/squad.agent.md +1287 -1146
  218. package/templates/workflows/squad-ci.yml +24 -24
  219. package/templates/workflows/squad-docs.yml +54 -50
  220. package/templates/workflows/squad-heartbeat.yml +171 -316
  221. package/templates/workflows/squad-insider-release.yml +61 -61
  222. package/templates/workflows/squad-issue-assign.yml +161 -161
  223. package/templates/workflows/squad-label-enforce.yml +181 -181
  224. package/templates/workflows/squad-preview.yml +55 -55
  225. package/templates/workflows/squad-promote.yml +120 -120
  226. package/templates/workflows/squad-release.yml +77 -77
  227. package/templates/workflows/squad-triage.yml +260 -260
  228. package/templates/workflows/sync-squad-labels.yml +169 -169
@@ -0,0 +1,234 @@
1
+ /**
2
+ * Cross-Squad Orchestration — discovery, delegation, and manifest support.
3
+ *
4
+ * Enables squads to discover each other via manifests, delegate work
5
+ * across repository boundaries, and track cross-squad issue completion.
6
+ *
7
+ * @module runtime/cross-squad
8
+ */
9
+ import { readFileSync, existsSync } from 'fs';
10
+ import { join } from 'path';
11
+ // ============================================================================
12
+ // Manifest Operations
13
+ // ============================================================================
14
+ /** Validate a manifest object has all required fields. */
15
+ export function validateManifest(data) {
16
+ if (typeof data !== 'object' || data === null)
17
+ return false;
18
+ const obj = data;
19
+ if (typeof obj['name'] !== 'string' || obj['name'].length === 0)
20
+ return false;
21
+ if (!Array.isArray(obj['capabilities']))
22
+ return false;
23
+ if (!Array.isArray(obj['accepts']))
24
+ return false;
25
+ if (typeof obj['contact'] !== 'object' || obj['contact'] === null)
26
+ return false;
27
+ const contact = obj['contact'];
28
+ if (typeof contact['repo'] !== 'string' || contact['repo'].length === 0)
29
+ return false;
30
+ // Validate accepts values
31
+ const validAccepts = new Set(['issues', 'prs']);
32
+ for (const a of obj['accepts']) {
33
+ if (typeof a !== 'string' || !validAccepts.has(a))
34
+ return false;
35
+ }
36
+ return true;
37
+ }
38
+ /**
39
+ * Read and parse a squad manifest from a directory path.
40
+ * Looks for `.squad/manifest.json` relative to the given root.
41
+ */
42
+ export function readManifest(repoPath) {
43
+ const manifestPath = join(repoPath, '.squad', 'manifest.json');
44
+ if (!existsSync(manifestPath))
45
+ return null;
46
+ try {
47
+ const raw = readFileSync(manifestPath, 'utf8');
48
+ const parsed = JSON.parse(raw);
49
+ if (!validateManifest(parsed))
50
+ return null;
51
+ return parsed;
52
+ }
53
+ catch {
54
+ return null;
55
+ }
56
+ }
57
+ /**
58
+ * Discover squads from upstream sources.
59
+ * Reads `.squad/upstream.json` and checks each upstream for a manifest.
60
+ */
61
+ export function discoverFromUpstreams(squadDir) {
62
+ const upstreamPath = join(squadDir, 'upstream.json');
63
+ if (!existsSync(upstreamPath))
64
+ return [];
65
+ let config;
66
+ try {
67
+ config = JSON.parse(readFileSync(upstreamPath, 'utf8'));
68
+ }
69
+ catch {
70
+ return [];
71
+ }
72
+ if (!Array.isArray(config.upstreams))
73
+ return [];
74
+ const discovered = [];
75
+ for (const upstream of config.upstreams) {
76
+ if (upstream.type === 'local' && upstream.source) {
77
+ const manifest = readManifest(upstream.source);
78
+ if (manifest) {
79
+ discovered.push({
80
+ manifest,
81
+ source: 'upstream',
82
+ sourceRef: upstream.name,
83
+ });
84
+ }
85
+ }
86
+ else if (upstream.type === 'git') {
87
+ // For git upstreams, check the cached clone directory
88
+ const cloneDir = join(squadDir, '_upstream_repos', upstream.name);
89
+ const manifest = readManifest(cloneDir);
90
+ if (manifest) {
91
+ discovered.push({
92
+ manifest,
93
+ source: 'upstream',
94
+ sourceRef: upstream.name,
95
+ });
96
+ }
97
+ }
98
+ }
99
+ return discovered;
100
+ }
101
+ /**
102
+ * Discover squads from a registry file.
103
+ * A registry is a JSON file listing repo paths to check for manifests.
104
+ */
105
+ export function discoverFromRegistry(registryPath) {
106
+ if (!existsSync(registryPath))
107
+ return [];
108
+ let entries;
109
+ try {
110
+ const raw = readFileSync(registryPath, 'utf8');
111
+ const parsed = JSON.parse(raw);
112
+ if (!Array.isArray(parsed))
113
+ return [];
114
+ entries = parsed;
115
+ }
116
+ catch {
117
+ return [];
118
+ }
119
+ const discovered = [];
120
+ for (const entry of entries) {
121
+ if (typeof entry.path === 'string') {
122
+ const manifest = readManifest(entry.path);
123
+ if (manifest) {
124
+ discovered.push({
125
+ manifest,
126
+ source: 'registry',
127
+ sourceRef: entry.name || entry.path,
128
+ });
129
+ }
130
+ }
131
+ }
132
+ return discovered;
133
+ }
134
+ /**
135
+ * Discover all squads from all available sources.
136
+ * Checks upstreams first, then a registry file if present.
137
+ */
138
+ export function discoverSquads(squadDir) {
139
+ const fromUpstreams = discoverFromUpstreams(squadDir);
140
+ const registryPath = join(squadDir, 'squad-registry.json');
141
+ const fromRegistry = discoverFromRegistry(registryPath);
142
+ // Deduplicate by manifest name (upstreams take priority)
143
+ const seen = new Set(fromUpstreams.map(d => d.manifest.name));
144
+ const merged = [...fromUpstreams];
145
+ for (const d of fromRegistry) {
146
+ if (!seen.has(d.manifest.name)) {
147
+ seen.add(d.manifest.name);
148
+ merged.push(d);
149
+ }
150
+ }
151
+ return merged;
152
+ }
153
+ // ============================================================================
154
+ // Delegation
155
+ // ============================================================================
156
+ /**
157
+ * Build the CLI args for creating a cross-squad issue via `gh issue create`.
158
+ * Returns the argument array (does not execute — callers run the command).
159
+ */
160
+ export function buildDelegationArgs(options) {
161
+ const title = options.title.startsWith('[cross-squad]')
162
+ ? options.title
163
+ : `[cross-squad] ${options.title}`;
164
+ const args = [
165
+ 'issue', 'create',
166
+ '--repo', options.targetRepo,
167
+ '--title', title,
168
+ '--body', options.body,
169
+ ];
170
+ const labels = [...(options.labels || [])];
171
+ if (!labels.includes('squad:cross-squad')) {
172
+ labels.push('squad:cross-squad');
173
+ }
174
+ for (const label of labels) {
175
+ args.push('--label', label);
176
+ }
177
+ return args;
178
+ }
179
+ /**
180
+ * Build the CLI args for checking a cross-squad issue status via `gh`.
181
+ * Parses an issue URL into --repo and issue number.
182
+ */
183
+ export function buildStatusCheckArgs(issueUrl) {
184
+ // Parse GitHub issue URL: https://github.com/owner/repo/issues/123
185
+ const match = /github\.com\/([^/]+\/[^/]+)\/issues\/(\d+)/.exec(issueUrl);
186
+ if (!match)
187
+ return null;
188
+ const repo = match[1];
189
+ const number = match[2];
190
+ return ['issue', 'view', '--repo', repo, number, '--json', 'state,title'];
191
+ }
192
+ /**
193
+ * Parse the JSON output from `gh issue view --json state,title`.
194
+ */
195
+ export function parseIssueStatus(jsonOutput, issueUrl) {
196
+ try {
197
+ const data = JSON.parse(jsonOutput);
198
+ return {
199
+ url: issueUrl,
200
+ state: data.state === 'CLOSED' ? 'closed' : data.state === 'OPEN' ? 'open' : 'unknown',
201
+ title: data.title,
202
+ };
203
+ }
204
+ catch {
205
+ return { url: issueUrl, state: 'unknown', error: 'Failed to parse issue status' };
206
+ }
207
+ }
208
+ // ============================================================================
209
+ // Display Helpers
210
+ // ============================================================================
211
+ /** Format discovered squads for terminal display. */
212
+ export function formatDiscoveryTable(squads) {
213
+ if (squads.length === 0) {
214
+ return 'No squads discovered. Add upstreams with "squad upstream add" or create a squad-registry.json.';
215
+ }
216
+ const lines = ['\nDiscovered squads:\n'];
217
+ for (const s of squads) {
218
+ const caps = s.manifest.capabilities.slice(0, 5).join(', ');
219
+ const capsSuffix = s.manifest.capabilities.length > 5 ? `, +${s.manifest.capabilities.length - 5} more` : '';
220
+ const accepts = s.manifest.accepts.join(', ');
221
+ lines.push(` ${s.manifest.name} → ${s.manifest.contact.repo} (${caps}${capsSuffix})`);
222
+ lines.push(` Accepts: ${accepts} | Source: ${s.source} (${s.sourceRef})`);
223
+ if (s.manifest.description) {
224
+ lines.push(` ${s.manifest.description}`);
225
+ }
226
+ }
227
+ lines.push('');
228
+ return lines.join('\n');
229
+ }
230
+ /** Find a squad by name from a list of discovered squads. */
231
+ export function findSquadByName(squads, name) {
232
+ return squads.find(s => s.manifest.name === name);
233
+ }
234
+ //# sourceMappingURL=cross-squad.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cross-squad.js","sourceRoot":"","sources":["../../src/runtime/cross-squad.ts"],"names":[],"mappings":"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"}
@@ -6,15 +6,20 @@
6
6
  * who don't use OTel pay nothing — if no provider is registered all
7
7
  * instrumentation is a no-op.
8
8
  *
9
+ * Issue #281 additions: auto-creates EventBus and CostTracker so users
10
+ * just call `initSquadTelemetry()` and everything lights up.
11
+ *
9
12
  * @module runtime/otel-init
10
13
  */
11
14
  import type { OTelConfig } from './otel.js';
12
- import type { EventBus } from './event-bus.js';
15
+ import { EventBus } from './event-bus.js';
16
+ import { CostTracker } from './cost-tracker.js';
13
17
  /** Options for the high-level {@link initSquadTelemetry} helper. */
14
18
  export interface SquadTelemetryOptions extends OTelConfig {
15
19
  /**
16
- * When provided, all EventBus events are automatically forwarded
17
- * as OTel spans via {@link bridgeEventBusToOTel}.
20
+ * When provided, this EventBus is used instead of auto-creating one.
21
+ * All EventBus events are automatically forwarded as OTel spans
22
+ * via {@link bridgeEventBusToOTel}.
18
23
  */
19
24
  eventBus?: EventBus;
20
25
  /**
@@ -30,6 +35,10 @@ export interface SquadTelemetryHandle {
30
35
  tracing: boolean;
31
36
  /** Whether metrics were activated. */
32
37
  metrics: boolean;
38
+ /** The EventBus instance (auto-created or user-supplied). */
39
+ eventBus: EventBus;
40
+ /** The CostTracker wired to the EventBus. */
41
+ costTracker: CostTracker;
33
42
  /**
34
43
  * Flush pending telemetry, detach the EventBus bridge (if any),
35
44
  * and shut down OTel providers. Safe to call multiple times.
@@ -40,31 +49,29 @@ export interface SquadTelemetryHandle {
40
49
  * One-call OTel setup for Squad SDK consumers.
41
50
  *
42
51
  * This is the **high-level** entry point. It:
43
- * 1. Initializes tracing and metrics via `initializeOTel()`.
44
- * 2. Optionally bridges an {@link EventBus} so every Squad event
45
- * becomes an OTel span.
46
- * 3. Optionally installs an OTel-backed `TelemetryTransport` so
52
+ * 1. Auto-creates an {@link EventBus} (or uses one you supply).
53
+ * 2. Auto-creates a {@link CostTracker} wired to the EventBus.
54
+ * 3. Initializes tracing and metrics via `initializeOTel()`.
55
+ * 4. Bridges the EventBus so every Squad event becomes an OTel span.
56
+ * 5. Optionally installs an OTel-backed `TelemetryTransport` so
47
57
  * the existing `TelemetryCollector` pipeline emits spans too.
48
58
  *
49
59
  * If no `OTEL_EXPORTER_OTLP_ENDPOINT` env var is set **and** no
50
60
  * `endpoint` is provided in `options`, everything remains a no-op.
51
61
  *
52
62
  * @param options - Configuration and optional EventBus.
53
- * @returns A handle with `tracing`, `metrics` status booleans and a
54
- * `shutdown()` method for graceful cleanup.
63
+ * @returns A handle with `eventBus`, `costTracker`, status booleans,
64
+ * and a `shutdown()` method for graceful cleanup.
55
65
  *
56
66
  * @example
57
67
  * ```ts
58
- * import { initSquadTelemetry, EventBus } from 'squad-sdk';
59
- *
60
- * const bus = new EventBus();
61
- * const telemetry = initSquadTelemetry({
62
- * endpoint: 'http://localhost:4318',
63
- * eventBus: bus,
64
- * });
68
+ * import { initSquadTelemetry } from 'squad-sdk';
65
69
  *
66
- * // run your squad …
70
+ * const telemetry = initSquadTelemetry();
71
+ * // That's it. Everything lights up.
67
72
  *
73
+ * // Later:
74
+ * console.log(telemetry.costTracker.formatSummary());
68
75
  * await telemetry.shutdown();
69
76
  * ```
70
77
  */
@@ -1 +1 @@
1
- {"version":3,"file":"otel-init.d.ts","sourceRoot":"","sources":["../../src/runtime/otel-init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAU/C,oEAAoE;AACpE,MAAM,WAAW,qBAAsB,SAAQ,UAAU;IACvD;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,2EAA2E;AAC3E,MAAM,WAAW,oBAAoB;IACnC,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,qBAA0B,GAAG,oBAAoB,CAsB5F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,IAAI,CAAC,qBAAqB,EAAE,aAAa,GAAG,MAAM,CAAM,GAAG,oBAAoB,CAM9H"}
1
+ {"version":3,"file":"otel-init.d.ts","sourceRoot":"","sources":["../../src/runtime/otel-init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAShD,oEAAoE;AACpE,MAAM,WAAW,qBAAsB,SAAQ,UAAU;IACvD;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,2EAA2E;AAC3E,MAAM,WAAW,oBAAoB;IACnC,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,QAAQ,EAAE,QAAQ,CAAC;IACnB,6CAA6C;IAC7C,WAAW,EAAE,WAAW,CAAC;IACzB;;;OAGG;IACH,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,qBAA0B,GAAG,oBAAoB,CA8B5F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,IAAI,CAAC,qBAAqB,EAAE,aAAa,GAAG,MAAM,CAAM,GAAG,oBAAoB,CAM9H"}
@@ -6,8 +6,13 @@
6
6
  * who don't use OTel pay nothing — if no provider is registered all
7
7
  * instrumentation is a no-op.
8
8
  *
9
+ * Issue #281 additions: auto-creates EventBus and CostTracker so users
10
+ * just call `initSquadTelemetry()` and everything lights up.
11
+ *
9
12
  * @module runtime/otel-init
10
13
  */
14
+ import { EventBus } from './event-bus.js';
15
+ import { CostTracker } from './cost-tracker.js';
11
16
  import { initializeOTel, shutdownOTel } from './otel.js';
12
17
  import { bridgeEventBusToOTel, createOTelTransport } from './otel-bridge.js';
13
18
  import { setTelemetryTransport } from './telemetry.js';
@@ -18,49 +23,53 @@ import { setTelemetryTransport } from './telemetry.js';
18
23
  * One-call OTel setup for Squad SDK consumers.
19
24
  *
20
25
  * This is the **high-level** entry point. It:
21
- * 1. Initializes tracing and metrics via `initializeOTel()`.
22
- * 2. Optionally bridges an {@link EventBus} so every Squad event
23
- * becomes an OTel span.
24
- * 3. Optionally installs an OTel-backed `TelemetryTransport` so
26
+ * 1. Auto-creates an {@link EventBus} (or uses one you supply).
27
+ * 2. Auto-creates a {@link CostTracker} wired to the EventBus.
28
+ * 3. Initializes tracing and metrics via `initializeOTel()`.
29
+ * 4. Bridges the EventBus so every Squad event becomes an OTel span.
30
+ * 5. Optionally installs an OTel-backed `TelemetryTransport` so
25
31
  * the existing `TelemetryCollector` pipeline emits spans too.
26
32
  *
27
33
  * If no `OTEL_EXPORTER_OTLP_ENDPOINT` env var is set **and** no
28
34
  * `endpoint` is provided in `options`, everything remains a no-op.
29
35
  *
30
36
  * @param options - Configuration and optional EventBus.
31
- * @returns A handle with `tracing`, `metrics` status booleans and a
32
- * `shutdown()` method for graceful cleanup.
37
+ * @returns A handle with `eventBus`, `costTracker`, status booleans,
38
+ * and a `shutdown()` method for graceful cleanup.
33
39
  *
34
40
  * @example
35
41
  * ```ts
36
- * import { initSquadTelemetry, EventBus } from 'squad-sdk';
37
- *
38
- * const bus = new EventBus();
39
- * const telemetry = initSquadTelemetry({
40
- * endpoint: 'http://localhost:4318',
41
- * eventBus: bus,
42
- * });
42
+ * import { initSquadTelemetry } from 'squad-sdk';
43
43
  *
44
- * // run your squad …
44
+ * const telemetry = initSquadTelemetry();
45
+ * // That's it. Everything lights up.
45
46
  *
47
+ * // Later:
48
+ * console.log(telemetry.costTracker.formatSummary());
46
49
  * await telemetry.shutdown();
47
50
  * ```
48
51
  */
49
52
  export function initSquadTelemetry(options = {}) {
50
- const { eventBus, installTransport = true, ...otelConfig } = options;
53
+ const { eventBus: userBus, installTransport = true, ...otelConfig } = options;
54
+ // Auto-create EventBus if caller didn't supply one
55
+ const eventBus = userBus ?? new EventBus();
56
+ // Auto-create and wire CostTracker to the EventBus
57
+ const costTracker = new CostTracker();
58
+ const unwireCostTracker = costTracker.wireToEventBus(eventBus);
51
59
  const result = initializeOTel(otelConfig);
52
- let unsubscribeBridge;
53
- if (eventBus) {
54
- unsubscribeBridge = bridgeEventBusToOTel(eventBus);
55
- }
60
+ // Bridge EventBus → OTel spans
61
+ const unsubscribeBridge = bridgeEventBusToOTel(eventBus);
56
62
  if (installTransport) {
57
63
  setTelemetryTransport(createOTelTransport());
58
64
  }
59
65
  return {
60
66
  tracing: result.tracing,
61
67
  metrics: result.metrics,
68
+ eventBus,
69
+ costTracker,
62
70
  shutdown: async () => {
63
- unsubscribeBridge?.();
71
+ unwireCostTracker();
72
+ unsubscribeBridge();
64
73
  await shutdownOTel();
65
74
  },
66
75
  };
@@ -1 +1 @@
1
- {"version":3,"file":"otel-init.js","sourceRoot":"","sources":["../../src/runtime/otel-init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAmCvD,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAiC,EAAE;IACpE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,IAAI,EAAE,GAAG,UAAU,EAAE,GAAG,OAAO,CAAC;IAErE,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAE1C,IAAI,iBAA4C,CAAC;IACjD,IAAI,QAAQ,EAAE,CAAC;QACb,iBAAiB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,gBAAgB,EAAE,CAAC;QACrB,qBAAqB,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,KAAK,IAAI,EAAE;YACnB,iBAAiB,EAAE,EAAE,CAAC;YACtB,MAAM,YAAY,EAAE,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAA+D,EAAE;IACtG,OAAO,kBAAkB,CAAC;QACxB,GAAG,OAAO;QACV,WAAW,EAAE,qBAAqB;QAClC,IAAI,EAAE,eAAe;KACtB,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"otel-init.js","sourceRoot":"","sources":["../../src/runtime/otel-init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAwCvD,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAiC,EAAE;IACpE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI,EAAE,GAAG,UAAU,EAAE,GAAG,OAAO,CAAC;IAE9E,mDAAmD;IACnD,MAAM,QAAQ,GAAG,OAAO,IAAI,IAAI,QAAQ,EAAE,CAAC;IAE3C,mDAAmD;IACnD,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IACtC,MAAM,iBAAiB,GAAG,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE/D,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAE1C,+BAA+B;IAC/B,MAAM,iBAAiB,GAAkB,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAExE,IAAI,gBAAgB,EAAE,CAAC;QACrB,qBAAqB,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ;QACR,WAAW;QACX,QAAQ,EAAE,KAAK,IAAI,EAAE;YACnB,iBAAiB,EAAE,CAAC;YACpB,iBAAiB,EAAE,CAAC;YACpB,MAAM,YAAY,EAAE,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAA+D,EAAE;IACtG,OAAO,kBAAkB,CAAC;QACxB,GAAG,OAAO;QACV,WAAW,EAAE,qBAAqB;QAClC,IAAI,EAAE,eAAe;KACtB,CAAC,CAAC;AACL,CAAC"}
@@ -8,6 +8,7 @@
8
8
  * @module runtime/otel-metrics
9
9
  */
10
10
  import type { UsageEvent } from './streaming.js';
11
+ import type { PrReworkResult, ReworkSummary } from './rework.js';
11
12
  /**
12
13
  * Record token usage from a UsageEvent.
13
14
  * Safe to call when OTel is not configured — metrics are no-ops.
@@ -37,6 +38,10 @@ export declare function recordTimeToFirstToken(ttftMs: number): void;
37
38
  export declare function recordResponseDuration(durationMs: number): void;
38
39
  /** Record streaming throughput. */
39
40
  export declare function recordTokensPerSecond(tokensPerSec: number): void;
41
+ /** Record rework metrics for a single PR analysis result. */
42
+ export declare function recordReworkMetrics(result: PrReworkResult): void;
43
+ /** Record aggregate rework summary metrics across multiple PRs. */
44
+ export declare function recordReworkSummary(summary: ReworkSummary): void;
40
45
  /** Reset all cached metric instances. Used in tests only. */
41
46
  export declare function _resetMetrics(): void;
42
47
  //# sourceMappingURL=otel-metrics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"otel-metrics.d.ts","sourceRoot":"","sources":["../../src/runtime/otel-metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAwCjD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAUxD;AAqCD,mCAAmC;AACnC,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,MAAe,GAAG,IAAI,CAI/E;AAED,kDAAkD;AAClD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,SAAS,GAAG,OAAmB,GAAG,IAAI,CAMxH;AAED,6BAA6B;AAC7B,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAG3E;AAED,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAG1D;AAwCD,0CAA0C;AAC1C,wBAAgB,oBAAoB,IAAI,IAAI,CAI3C;AAED,sCAAsC;AACtC,wBAAgB,iBAAiB,IAAI,IAAI,CAIxC;AAED,oDAAoD;AACpD,wBAAgB,wBAAwB,IAAI,IAAI,CAI/C;AAED,qCAAqC;AACrC,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C;AAED,8BAA8B;AAC9B,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC;AAmCD,kCAAkC;AAClC,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAG3D;AAED,sCAAsC;AACtC,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAG/D;AAED,mCAAmC;AACnC,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAGhE;AAMD,6DAA6D;AAC7D,wBAAgB,aAAa,IAAI,IAAI,CAKpC"}
1
+ {"version":3,"file":"otel-metrics.d.ts","sourceRoot":"","sources":["../../src/runtime/otel-metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAwCjE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAUxD;AAqCD,mCAAmC;AACnC,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,MAAe,GAAG,IAAI,CAI/E;AAED,kDAAkD;AAClD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,SAAS,GAAG,OAAmB,GAAG,IAAI,CAMxH;AAED,6BAA6B;AAC7B,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAG3E;AAED,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAG1D;AAwCD,0CAA0C;AAC1C,wBAAgB,oBAAoB,IAAI,IAAI,CAI3C;AAED,sCAAsC;AACtC,wBAAgB,iBAAiB,IAAI,IAAI,CAIxC;AAED,oDAAoD;AACpD,wBAAgB,wBAAwB,IAAI,IAAI,CAI/C;AAED,qCAAqC;AACrC,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C;AAED,8BAA8B;AAC9B,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC;AAmCD,kCAAkC;AAClC,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAG3D;AAED,sCAAsC;AACtC,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAG/D;AAED,mCAAmC;AACnC,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAGhE;AAuCD,6DAA6D;AAC7D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAWhE;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAchE;AAMD,6DAA6D;AAC7D,wBAAgB,aAAa,IAAI,IAAI,CAMpC"}
@@ -183,6 +183,59 @@ export function recordTokensPerSecond(tokensPerSec) {
183
183
  const m = ensureLatencyMetrics();
184
184
  m.tokensPerSecGauge.record(tokensPerSec);
185
185
  }
186
+ let _reworkMetrics;
187
+ function ensureReworkMetrics() {
188
+ if (!_reworkMetrics) {
189
+ const meter = getMeter('squad-sdk');
190
+ _reworkMetrics = {
191
+ rateGauge: meter.createGauge('squad.rework.rate', {
192
+ description: 'Current rework rate percentage',
193
+ unit: '%',
194
+ }),
195
+ cyclesHistogram: meter.createHistogram('squad.rework.cycles', {
196
+ description: 'Review cycles per PR',
197
+ }),
198
+ rejectionRateGauge: meter.createGauge('squad.rework.rejection_rate', {
199
+ description: 'Percentage of PRs with changes requested',
200
+ unit: '%',
201
+ }),
202
+ timeHistogram: meter.createHistogram('squad.rework.time_ms', {
203
+ description: 'Time spent in rework in milliseconds',
204
+ unit: 'ms',
205
+ }),
206
+ };
207
+ }
208
+ return _reworkMetrics;
209
+ }
210
+ /** Record rework metrics for a single PR analysis result. */
211
+ export function recordReworkMetrics(result) {
212
+ const m = ensureReworkMetrics();
213
+ const attrs = {
214
+ 'pr.number': result.number,
215
+ 'pr.author': result.author,
216
+ };
217
+ m.rateGauge.record(result.reworkRate, attrs);
218
+ m.cyclesHistogram.record(result.reviewCycles, attrs);
219
+ if (result.reworkTimeMs !== null) {
220
+ m.timeHistogram.record(result.reworkTimeMs, attrs);
221
+ }
222
+ }
223
+ /** Record aggregate rework summary metrics across multiple PRs. */
224
+ export function recordReworkSummary(summary) {
225
+ const m = ensureReworkMetrics();
226
+ if (summary.avgReworkRate != null) {
227
+ m.rateGauge.record(summary.avgReworkRate, { scope: 'summary' });
228
+ }
229
+ if (summary.rejectionRate != null) {
230
+ m.rejectionRateGauge.record(summary.rejectionRate, { scope: 'summary' });
231
+ }
232
+ if (summary.avgReviewCycles != null) {
233
+ m.cyclesHistogram.record(summary.avgReviewCycles, { scope: 'summary' });
234
+ }
235
+ if (summary.avgReworkTimeHours != null) {
236
+ m.timeHistogram.record(summary.avgReworkTimeHours * 3_600_000, { scope: 'summary' });
237
+ }
238
+ }
186
239
  // ============================================================================
187
240
  // Reset (for testing)
188
241
  // ============================================================================
@@ -192,5 +245,6 @@ export function _resetMetrics() {
192
245
  _agentMetrics = undefined;
193
246
  _sessionPoolMetrics = undefined;
194
247
  _latencyMetrics = undefined;
248
+ _reworkMetrics = undefined;
195
249
  }
196
250
  //# sourceMappingURL=otel-metrics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"otel-metrics.js","sourceRoot":"","sources":["../../src/runtime/otel-metrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"otel-metrics.js","sourceRoot":"","sources":["../../src/runtime/otel-metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Rework Rate — Pure calculation helpers.
3
+ *
4
+ * Computes PR rework metrics from review and commit data.
5
+ * No I/O, no side effects — safe to import in tests.
6
+ *
7
+ * @module runtime/rework
8
+ */
9
+ /** Minimal PR shape from `gh pr list --json ...` */
10
+ export interface PrInfo {
11
+ number: number;
12
+ title: string;
13
+ author?: {
14
+ login: string;
15
+ };
16
+ mergedAt?: string;
17
+ additions?: number;
18
+ deletions?: number;
19
+ changedFiles?: number;
20
+ }
21
+ /** Review data from `gh pr view --json reviews` */
22
+ export interface PrReview {
23
+ submittedAt?: string;
24
+ state?: string;
25
+ }
26
+ /** Commit data from `gh pr view --json commits` */
27
+ export interface PrCommit {
28
+ committedDate?: string;
29
+ commit?: {
30
+ committedDate?: string;
31
+ };
32
+ oid?: string;
33
+ }
34
+ /** Per-PR rework analysis result */
35
+ export interface PrReworkResult {
36
+ number: number;
37
+ title: string;
38
+ author: string;
39
+ mergedAt: string | undefined;
40
+ totalCommits: number;
41
+ reworkCommits: number;
42
+ reworkRate: number;
43
+ reviewCycles: number;
44
+ hadChangesRequested: boolean;
45
+ reworkTimeMs: number | null;
46
+ totalReviews: number;
47
+ additions: number;
48
+ deletions: number;
49
+ }
50
+ /** Aggregate summary across analyzed PRs */
51
+ export interface ReworkSummary {
52
+ totalPrs: number;
53
+ avgReworkRate?: number;
54
+ prsWithRework?: number;
55
+ prsWithChangesRequested?: number;
56
+ avgReviewCycles?: number;
57
+ totalReworkCommits?: number;
58
+ totalCommits?: number;
59
+ avgReworkTimeHours?: number | null;
60
+ rejectionRate?: number;
61
+ }
62
+ /**
63
+ * Calculate rework metrics for a single PR.
64
+ * Rework = commits pushed after the first review.
65
+ */
66
+ export declare function calculatePrRework(pr: PrInfo, reviews: PrReview[], commits: PrCommit[]): PrReworkResult;
67
+ /**
68
+ * Calculate aggregate rework summary across all analyzed PRs.
69
+ */
70
+ export declare function calculateReworkSummary(results: PrReworkResult[]): ReworkSummary;
71
+ //# sourceMappingURL=rework.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rework.d.ts","sourceRoot":"","sources":["../../src/runtime/rework.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,oDAAoD;AACpD,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,mDAAmD;AACnD,MAAM,WAAW,QAAQ;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,mDAAmD;AACnD,MAAM,WAAW,QAAQ;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,oCAAoC;AACpC,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,4CAA4C;AAC5C,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,QAAQ,EAAE,EACnB,OAAO,EAAE,QAAQ,EAAE,GAClB,cAAc,CAgEhB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,aAAa,CAmC/E"}