@bradygaster/squad-sdk 0.6.2 → 0.8.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 (306) hide show
  1. package/README.md +296 -296
  2. package/dist/adapter/client.d.ts +225 -0
  3. package/dist/adapter/client.d.ts.map +1 -0
  4. package/dist/adapter/client.js +397 -0
  5. package/dist/adapter/client.js.map +1 -0
  6. package/dist/adapter/errors.d.ts +260 -0
  7. package/dist/adapter/errors.d.ts.map +1 -0
  8. package/dist/adapter/errors.js +362 -0
  9. package/dist/adapter/errors.js.map +1 -0
  10. package/dist/adapter/types.d.ts +779 -0
  11. package/dist/adapter/types.d.ts.map +1 -0
  12. package/dist/adapter/types.js +11 -0
  13. package/dist/adapter/types.js.map +1 -0
  14. package/dist/agents/charter-compiler.d.ts +102 -0
  15. package/dist/agents/charter-compiler.d.ts.map +1 -0
  16. package/dist/agents/charter-compiler.js +157 -0
  17. package/dist/agents/charter-compiler.js.map +1 -0
  18. package/dist/agents/history-shadow.d.ts +80 -0
  19. package/dist/agents/history-shadow.d.ts.map +1 -0
  20. package/dist/agents/history-shadow.js +239 -0
  21. package/dist/agents/history-shadow.js.map +1 -0
  22. package/dist/agents/index.d.ts +68 -0
  23. package/dist/agents/index.d.ts.map +1 -0
  24. package/dist/agents/index.js +74 -0
  25. package/dist/agents/index.js.map +1 -0
  26. package/dist/agents/lifecycle.d.ts +138 -0
  27. package/dist/agents/lifecycle.d.ts.map +1 -0
  28. package/dist/agents/lifecycle.js +258 -0
  29. package/dist/agents/lifecycle.js.map +1 -0
  30. package/dist/agents/model-selector.d.ts +80 -0
  31. package/dist/agents/model-selector.d.ts.map +1 -0
  32. package/dist/agents/model-selector.js +198 -0
  33. package/dist/agents/model-selector.js.map +1 -0
  34. package/dist/agents/onboarding.d.ts +65 -0
  35. package/dist/agents/onboarding.d.ts.map +1 -0
  36. package/dist/agents/onboarding.js +373 -0
  37. package/dist/agents/onboarding.js.map +1 -0
  38. package/dist/build/bundle.d.ts +32 -0
  39. package/dist/build/bundle.d.ts.map +1 -0
  40. package/dist/build/bundle.js +97 -0
  41. package/dist/build/bundle.js.map +1 -0
  42. package/dist/build/ci-pipeline.d.ts +51 -0
  43. package/dist/build/ci-pipeline.d.ts.map +1 -0
  44. package/dist/build/ci-pipeline.js +180 -0
  45. package/dist/build/ci-pipeline.js.map +1 -0
  46. package/dist/build/github-dist.d.ts +37 -0
  47. package/dist/build/github-dist.d.ts.map +1 -0
  48. package/dist/build/github-dist.js +117 -0
  49. package/dist/build/github-dist.js.map +1 -0
  50. package/dist/build/index.d.ts +11 -0
  51. package/dist/build/index.d.ts.map +1 -0
  52. package/dist/build/index.js +11 -0
  53. package/dist/build/index.js.map +1 -0
  54. package/dist/build/install-migration.d.ts +28 -0
  55. package/dist/build/install-migration.d.ts.map +1 -0
  56. package/dist/build/install-migration.js +103 -0
  57. package/dist/build/install-migration.js.map +1 -0
  58. package/dist/build/npm-package.d.ts +54 -0
  59. package/dist/build/npm-package.d.ts.map +1 -0
  60. package/dist/build/npm-package.js +128 -0
  61. package/dist/build/npm-package.js.map +1 -0
  62. package/dist/build/release.d.ts +108 -0
  63. package/dist/build/release.d.ts.map +1 -0
  64. package/dist/build/release.js +295 -0
  65. package/dist/build/release.js.map +1 -0
  66. package/dist/build/versioning.d.ts +38 -0
  67. package/dist/build/versioning.d.ts.map +1 -0
  68. package/dist/build/versioning.js +113 -0
  69. package/dist/build/versioning.js.map +1 -0
  70. package/dist/casting/casting-engine.d.ts +60 -0
  71. package/dist/casting/casting-engine.d.ts.map +1 -0
  72. package/dist/casting/casting-engine.js +223 -0
  73. package/dist/casting/casting-engine.js.map +1 -0
  74. package/dist/casting/casting-history.d.ts +54 -0
  75. package/dist/casting/casting-history.d.ts.map +1 -0
  76. package/dist/casting/casting-history.js +63 -0
  77. package/dist/casting/casting-history.js.map +1 -0
  78. package/dist/casting/index.d.ts +46 -0
  79. package/dist/casting/index.d.ts.map +1 -0
  80. package/dist/casting/index.js +37 -0
  81. package/dist/casting/index.js.map +1 -0
  82. package/dist/client/event-bus.d.ts +29 -0
  83. package/dist/client/event-bus.d.ts.map +1 -0
  84. package/dist/client/event-bus.js +53 -0
  85. package/dist/client/event-bus.js.map +1 -0
  86. package/dist/client/index.d.ts +100 -0
  87. package/dist/client/index.d.ts.map +1 -0
  88. package/dist/client/index.js +170 -0
  89. package/dist/client/index.js.map +1 -0
  90. package/dist/client/session-pool.d.ts +66 -0
  91. package/dist/client/session-pool.d.ts.map +1 -0
  92. package/dist/client/session-pool.js +145 -0
  93. package/dist/client/session-pool.js.map +1 -0
  94. package/dist/config/agent-doc.d.ts +43 -0
  95. package/dist/config/agent-doc.d.ts.map +1 -0
  96. package/dist/config/agent-doc.js +158 -0
  97. package/dist/config/agent-doc.js.map +1 -0
  98. package/dist/config/agent-source.d.ts +95 -0
  99. package/dist/config/agent-source.d.ts.map +1 -0
  100. package/dist/config/agent-source.js +274 -0
  101. package/dist/config/agent-source.js.map +1 -0
  102. package/dist/config/doc-sync.d.ts +66 -0
  103. package/dist/config/doc-sync.d.ts.map +1 -0
  104. package/dist/config/doc-sync.js +270 -0
  105. package/dist/config/doc-sync.js.map +1 -0
  106. package/dist/config/feature-audit.d.ts +49 -0
  107. package/dist/config/feature-audit.d.ts.map +1 -0
  108. package/dist/config/feature-audit.js +148 -0
  109. package/dist/config/feature-audit.js.map +1 -0
  110. package/dist/config/index.d.ts +15 -0
  111. package/dist/config/index.d.ts.map +1 -0
  112. package/dist/config/index.js +15 -0
  113. package/dist/config/index.js.map +1 -0
  114. package/dist/config/init.d.ts +61 -0
  115. package/dist/config/init.d.ts.map +1 -0
  116. package/dist/config/init.js +369 -0
  117. package/dist/config/init.js.map +1 -0
  118. package/dist/config/legacy-fallback.d.ts +83 -0
  119. package/dist/config/legacy-fallback.d.ts.map +1 -0
  120. package/dist/config/legacy-fallback.js +212 -0
  121. package/dist/config/legacy-fallback.js.map +1 -0
  122. package/dist/config/markdown-migration.d.ts +157 -0
  123. package/dist/config/markdown-migration.d.ts.map +1 -0
  124. package/dist/config/markdown-migration.js +434 -0
  125. package/dist/config/markdown-migration.js.map +1 -0
  126. package/dist/config/migration.d.ts +123 -0
  127. package/dist/config/migration.d.ts.map +1 -0
  128. package/dist/config/migration.js +273 -0
  129. package/dist/config/migration.js.map +1 -0
  130. package/dist/config/migrations/index.d.ts +36 -0
  131. package/dist/config/migrations/index.d.ts.map +1 -0
  132. package/dist/config/migrations/index.js +216 -0
  133. package/dist/config/migrations/index.js.map +1 -0
  134. package/dist/config/models.d.ts +134 -0
  135. package/dist/config/models.d.ts.map +1 -0
  136. package/dist/config/models.js +354 -0
  137. package/dist/config/models.js.map +1 -0
  138. package/dist/config/routing.d.ts +118 -0
  139. package/dist/config/routing.d.ts.map +1 -0
  140. package/dist/config/routing.js +247 -0
  141. package/dist/config/routing.js.map +1 -0
  142. package/dist/config/schema.d.ts +72 -0
  143. package/dist/config/schema.d.ts.map +1 -0
  144. package/dist/config/schema.js +63 -0
  145. package/dist/config/schema.js.map +1 -0
  146. package/dist/coordinator/coordinator.d.ts +82 -0
  147. package/dist/coordinator/coordinator.d.ts.map +1 -0
  148. package/dist/coordinator/coordinator.js +174 -0
  149. package/dist/coordinator/coordinator.js.map +1 -0
  150. package/dist/coordinator/direct-response.d.ts +83 -0
  151. package/dist/coordinator/direct-response.d.ts.map +1 -0
  152. package/dist/coordinator/direct-response.js +187 -0
  153. package/dist/coordinator/direct-response.js.map +1 -0
  154. package/dist/coordinator/fan-out.d.ts +83 -0
  155. package/dist/coordinator/fan-out.d.ts.map +1 -0
  156. package/dist/coordinator/fan-out.js +161 -0
  157. package/dist/coordinator/fan-out.js.map +1 -0
  158. package/dist/coordinator/index.d.ts +47 -0
  159. package/dist/coordinator/index.d.ts.map +1 -0
  160. package/dist/coordinator/index.js +54 -0
  161. package/dist/coordinator/index.js.map +1 -0
  162. package/dist/coordinator/response-tiers.d.ts +49 -0
  163. package/dist/coordinator/response-tiers.d.ts.map +1 -0
  164. package/dist/coordinator/response-tiers.js +149 -0
  165. package/dist/coordinator/response-tiers.js.map +1 -0
  166. package/dist/hooks/index.d.ts +103 -0
  167. package/dist/hooks/index.d.ts.map +1 -0
  168. package/dist/hooks/index.js +279 -0
  169. package/dist/hooks/index.js.map +1 -0
  170. package/dist/index.d.ts +24 -1
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +23 -3
  173. package/dist/index.js.map +1 -1
  174. package/dist/marketplace/backend.d.ts +35 -0
  175. package/dist/marketplace/backend.d.ts.map +1 -0
  176. package/dist/marketplace/backend.js +99 -0
  177. package/dist/marketplace/backend.js.map +1 -0
  178. package/dist/marketplace/browser.d.ts +33 -0
  179. package/dist/marketplace/browser.d.ts.map +1 -0
  180. package/dist/marketplace/browser.js +97 -0
  181. package/dist/marketplace/browser.js.map +1 -0
  182. package/dist/marketplace/extension-adapter.d.ts +51 -0
  183. package/dist/marketplace/extension-adapter.d.ts.map +1 -0
  184. package/dist/marketplace/extension-adapter.js +81 -0
  185. package/dist/marketplace/extension-adapter.js.map +1 -0
  186. package/dist/marketplace/index.d.ts +51 -0
  187. package/dist/marketplace/index.d.ts.map +1 -0
  188. package/dist/marketplace/index.js +108 -0
  189. package/dist/marketplace/index.js.map +1 -0
  190. package/dist/marketplace/packaging.d.ts +25 -0
  191. package/dist/marketplace/packaging.d.ts.map +1 -0
  192. package/dist/marketplace/packaging.js +117 -0
  193. package/dist/marketplace/packaging.js.map +1 -0
  194. package/dist/marketplace/schema.d.ts +50 -0
  195. package/dist/marketplace/schema.d.ts.map +1 -0
  196. package/dist/marketplace/schema.js +120 -0
  197. package/dist/marketplace/schema.js.map +1 -0
  198. package/dist/marketplace/security.d.ts +26 -0
  199. package/dist/marketplace/security.d.ts.map +1 -0
  200. package/dist/marketplace/security.js +199 -0
  201. package/dist/marketplace/security.js.map +1 -0
  202. package/dist/parsers.d.ts +15 -0
  203. package/dist/parsers.d.ts.map +1 -0
  204. package/dist/parsers.js +15 -0
  205. package/dist/parsers.js.map +1 -0
  206. package/dist/ralph/index.d.ts +56 -0
  207. package/dist/ralph/index.d.ts.map +1 -0
  208. package/dist/ralph/index.js +61 -0
  209. package/dist/ralph/index.js.map +1 -0
  210. package/dist/resolution.d.ts +47 -0
  211. package/dist/resolution.d.ts.map +1 -0
  212. package/dist/resolution.js +106 -0
  213. package/dist/resolution.js.map +1 -0
  214. package/dist/runtime/benchmarks.d.ts +121 -0
  215. package/dist/runtime/benchmarks.d.ts.map +1 -0
  216. package/dist/runtime/benchmarks.js +251 -0
  217. package/dist/runtime/benchmarks.js.map +1 -0
  218. package/dist/runtime/config.d.ts +313 -0
  219. package/dist/runtime/config.d.ts.map +1 -0
  220. package/dist/runtime/config.js +466 -0
  221. package/dist/runtime/config.js.map +1 -0
  222. package/dist/runtime/cost-tracker.d.ts +73 -0
  223. package/dist/runtime/cost-tracker.d.ts.map +1 -0
  224. package/dist/runtime/cost-tracker.js +157 -0
  225. package/dist/runtime/cost-tracker.js.map +1 -0
  226. package/dist/runtime/event-bus.d.ts +190 -0
  227. package/dist/runtime/event-bus.d.ts.map +1 -0
  228. package/dist/runtime/event-bus.js +218 -0
  229. package/dist/runtime/event-bus.js.map +1 -0
  230. package/dist/runtime/health.d.ts +66 -0
  231. package/dist/runtime/health.d.ts.map +1 -0
  232. package/dist/runtime/health.js +111 -0
  233. package/dist/runtime/health.js.map +1 -0
  234. package/dist/runtime/i18n.d.ts +54 -0
  235. package/dist/runtime/i18n.d.ts.map +1 -0
  236. package/dist/runtime/i18n.js +126 -0
  237. package/dist/runtime/i18n.js.map +1 -0
  238. package/dist/runtime/offline.d.ts +64 -0
  239. package/dist/runtime/offline.d.ts.map +1 -0
  240. package/dist/runtime/offline.js +108 -0
  241. package/dist/runtime/offline.js.map +1 -0
  242. package/dist/runtime/streaming.d.ts +97 -0
  243. package/dist/runtime/streaming.d.ts.map +1 -0
  244. package/dist/runtime/streaming.js +156 -0
  245. package/dist/runtime/streaming.js.map +1 -0
  246. package/dist/runtime/telemetry.d.ts +82 -0
  247. package/dist/runtime/telemetry.d.ts.map +1 -0
  248. package/dist/runtime/telemetry.js +120 -0
  249. package/dist/runtime/telemetry.js.map +1 -0
  250. package/dist/sharing/agent-repo.d.ts +33 -0
  251. package/dist/sharing/agent-repo.d.ts.map +1 -0
  252. package/dist/sharing/agent-repo.js +79 -0
  253. package/dist/sharing/agent-repo.js.map +1 -0
  254. package/dist/sharing/cache.d.ts +36 -0
  255. package/dist/sharing/cache.d.ts.map +1 -0
  256. package/dist/sharing/cache.js +85 -0
  257. package/dist/sharing/cache.js.map +1 -0
  258. package/dist/sharing/conflicts.d.ts +32 -0
  259. package/dist/sharing/conflicts.d.ts.map +1 -0
  260. package/dist/sharing/conflicts.js +121 -0
  261. package/dist/sharing/conflicts.js.map +1 -0
  262. package/dist/sharing/export.d.ts +50 -0
  263. package/dist/sharing/export.d.ts.map +1 -0
  264. package/dist/sharing/export.js +156 -0
  265. package/dist/sharing/export.js.map +1 -0
  266. package/dist/sharing/history-split.d.ts +34 -0
  267. package/dist/sharing/history-split.d.ts.map +1 -0
  268. package/dist/sharing/history-split.js +101 -0
  269. package/dist/sharing/history-split.js.map +1 -0
  270. package/dist/sharing/import.d.ts +37 -0
  271. package/dist/sharing/import.d.ts.map +1 -0
  272. package/dist/sharing/import.js +138 -0
  273. package/dist/sharing/import.js.map +1 -0
  274. package/dist/sharing/index.d.ts +11 -0
  275. package/dist/sharing/index.d.ts.map +1 -0
  276. package/dist/sharing/index.js +11 -0
  277. package/dist/sharing/index.js.map +1 -0
  278. package/dist/sharing/versioning.d.ts +32 -0
  279. package/dist/sharing/versioning.d.ts.map +1 -0
  280. package/dist/sharing/versioning.js +64 -0
  281. package/dist/sharing/versioning.js.map +1 -0
  282. package/dist/skills/index.d.ts +49 -0
  283. package/dist/skills/index.d.ts.map +1 -0
  284. package/dist/skills/index.js +85 -0
  285. package/dist/skills/index.js.map +1 -0
  286. package/dist/skills/skill-loader.d.ts +56 -0
  287. package/dist/skills/skill-loader.d.ts.map +1 -0
  288. package/dist/skills/skill-loader.js +106 -0
  289. package/dist/skills/skill-loader.js.map +1 -0
  290. package/dist/skills/skill-source.d.ts +63 -0
  291. package/dist/skills/skill-source.d.ts.map +1 -0
  292. package/dist/skills/skill-source.js +199 -0
  293. package/dist/skills/skill-source.js.map +1 -0
  294. package/dist/tools/index.d.ts +87 -0
  295. package/dist/tools/index.d.ts.map +1 -0
  296. package/dist/tools/index.js +419 -0
  297. package/dist/tools/index.js.map +1 -0
  298. package/dist/types.d.ts +43 -0
  299. package/dist/types.d.ts.map +1 -0
  300. package/dist/types.js +8 -0
  301. package/dist/types.js.map +1 -0
  302. package/dist/utils/normalize-eol.d.ts +6 -0
  303. package/dist/utils/normalize-eol.d.ts.map +1 -0
  304. package/dist/utils/normalize-eol.js +8 -0
  305. package/dist/utils/normalize-eol.js.map +1 -0
  306. package/package.json +115 -39
@@ -0,0 +1,295 @@
1
+ /**
2
+ * M6-13: Release candidate build & validation
3
+ * Handles release manifest creation, validation, and release notes generation.
4
+ *
5
+ * @module build/release
6
+ */
7
+ import { createHash } from 'node:crypto';
8
+ import { existsSync, readFileSync, statSync } from 'node:fs';
9
+ import { parseConventionalCommit } from './versioning.js';
10
+ // ============================================================================
11
+ // Release creation
12
+ // ============================================================================
13
+ /**
14
+ * Compute the SHA-256 hash of a buffer or string.
15
+ */
16
+ export function computeSha256(data) {
17
+ return createHash('sha256').update(data).digest('hex');
18
+ }
19
+ /**
20
+ * Build a ReleaseArtifact from a file path.
21
+ * Returns null if the file does not exist.
22
+ */
23
+ export function buildArtifact(name, filePath) {
24
+ if (!existsSync(filePath))
25
+ return null;
26
+ const content = readFileSync(filePath);
27
+ const stat = statSync(filePath);
28
+ return {
29
+ name,
30
+ path: filePath,
31
+ size: stat.size,
32
+ sha256: computeSha256(content),
33
+ };
34
+ }
35
+ /**
36
+ * Create a release manifest from a ReleaseConfig.
37
+ *
38
+ * @param config - Release configuration
39
+ * @param artifactPaths - Optional map of artifact name → file path
40
+ * @returns Release manifest
41
+ */
42
+ export function createRelease(config, artifactPaths) {
43
+ const artifacts = [];
44
+ if (artifactPaths) {
45
+ for (const [name, filePath] of Object.entries(artifactPaths)) {
46
+ const artifact = buildArtifact(name, filePath);
47
+ if (artifact) {
48
+ artifacts.push(artifact);
49
+ }
50
+ }
51
+ }
52
+ return {
53
+ version: config.version,
54
+ channel: config.channel,
55
+ artifacts,
56
+ timestamp: new Date().toISOString(),
57
+ changelog: '',
58
+ };
59
+ }
60
+ // ============================================================================
61
+ // Validation
62
+ // ============================================================================
63
+ const SEMVER_RE = /^\d+\.\d+\.\d+(?:-[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*)?$/;
64
+ /**
65
+ * Validate a release manifest for correctness.
66
+ *
67
+ * @param manifest - Release manifest to validate
68
+ * @returns Array of validation errors (empty if valid)
69
+ */
70
+ export function validateRelease(manifest) {
71
+ const errors = [];
72
+ // Version
73
+ if (!manifest.version) {
74
+ errors.push({ field: 'version', message: 'Version is required', severity: 'error' });
75
+ }
76
+ else if (!SEMVER_RE.test(manifest.version)) {
77
+ errors.push({ field: 'version', message: `Invalid semver version: ${manifest.version}`, severity: 'error' });
78
+ }
79
+ // Channel
80
+ const validChannels = ['stable', 'rc', 'beta', 'alpha'];
81
+ if (!manifest.channel) {
82
+ errors.push({ field: 'channel', message: 'Channel is required', severity: 'error' });
83
+ }
84
+ else if (!validChannels.includes(manifest.channel)) {
85
+ errors.push({ field: 'channel', message: `Invalid channel: ${manifest.channel}`, severity: 'error' });
86
+ }
87
+ // Channel / version consistency
88
+ if (manifest.channel === 'stable' && manifest.version.includes('-')) {
89
+ errors.push({
90
+ field: 'version',
91
+ message: 'Stable releases must not have prerelease suffixes',
92
+ severity: 'error',
93
+ });
94
+ }
95
+ if (manifest.channel !== 'stable' && !manifest.version.includes('-')) {
96
+ errors.push({
97
+ field: 'version',
98
+ message: `Non-stable channel "${manifest.channel}" should have a prerelease suffix`,
99
+ severity: 'warning',
100
+ });
101
+ }
102
+ // Timestamp
103
+ if (!manifest.timestamp) {
104
+ errors.push({ field: 'timestamp', message: 'Timestamp is required', severity: 'error' });
105
+ }
106
+ else if (isNaN(Date.parse(manifest.timestamp))) {
107
+ errors.push({ field: 'timestamp', message: 'Timestamp is not a valid ISO date', severity: 'error' });
108
+ }
109
+ // Artifacts
110
+ if (!Array.isArray(manifest.artifacts)) {
111
+ errors.push({ field: 'artifacts', message: 'Artifacts must be an array', severity: 'error' });
112
+ }
113
+ else {
114
+ for (let i = 0; i < manifest.artifacts.length; i++) {
115
+ const a = manifest.artifacts[i];
116
+ if (!a.name) {
117
+ errors.push({ field: `artifacts[${i}].name`, message: 'Artifact name is required', severity: 'error' });
118
+ }
119
+ if (!a.path) {
120
+ errors.push({ field: `artifacts[${i}].path`, message: 'Artifact path is required', severity: 'error' });
121
+ }
122
+ if (typeof a.size !== 'number' || a.size < 0) {
123
+ errors.push({ field: `artifacts[${i}].size`, message: 'Artifact size must be a non-negative number', severity: 'error' });
124
+ }
125
+ if (!a.sha256 || !/^[a-f0-9]{64}$/.test(a.sha256)) {
126
+ errors.push({ field: `artifacts[${i}].sha256`, message: 'Artifact sha256 must be a valid 64-char hex string', severity: 'error' });
127
+ }
128
+ }
129
+ // Duplicate names
130
+ const names = manifest.artifacts.map((a) => a.name);
131
+ const dupes = names.filter((n, i) => names.indexOf(n) !== i);
132
+ if (dupes.length > 0) {
133
+ errors.push({ field: 'artifacts', message: `Duplicate artifact names: ${[...new Set(dupes)].join(', ')}`, severity: 'warning' });
134
+ }
135
+ }
136
+ // Changelog (warning only)
137
+ if (!manifest.changelog) {
138
+ errors.push({ field: 'changelog', message: 'Changelog is empty', severity: 'warning' });
139
+ }
140
+ return errors;
141
+ }
142
+ // ============================================================================
143
+ // Release notes generation
144
+ // ============================================================================
145
+ /**
146
+ * Generate release notes markdown from a manifest and commit list.
147
+ */
148
+ export function generateReleaseNotes(manifest, commits) {
149
+ const lines = [];
150
+ const date = manifest.timestamp ? manifest.timestamp.slice(0, 10) : new Date().toISOString().slice(0, 10);
151
+ lines.push(`# ${manifest.version} (${date})`);
152
+ lines.push('');
153
+ if (manifest.channel !== 'stable') {
154
+ lines.push(`> **${manifest.channel.toUpperCase()}** release — not recommended for production use.`);
155
+ lines.push('');
156
+ }
157
+ // Group commits by type
158
+ const groups = {};
159
+ const breaking = [];
160
+ for (const commit of commits) {
161
+ const parsed = parseConventionalCommit(commit.message);
162
+ if (parsed.breaking) {
163
+ breaking.push(`- ${parsed.description} (${commit.sha.slice(0, 7)})`);
164
+ }
165
+ const key = parsed.type;
166
+ if (!groups[key])
167
+ groups[key] = [];
168
+ groups[key].push({ description: parsed.description, sha: commit.sha });
169
+ }
170
+ if (breaking.length > 0) {
171
+ lines.push('## ⚠ Breaking Changes');
172
+ lines.push('');
173
+ lines.push(...breaking);
174
+ lines.push('');
175
+ }
176
+ const headings = {
177
+ feat: '## Features',
178
+ fix: '## Bug Fixes',
179
+ perf: '## Performance',
180
+ refactor: '## Refactoring',
181
+ docs: '## Documentation',
182
+ chore: '## Chores',
183
+ test: '## Tests',
184
+ ci: '## CI',
185
+ };
186
+ for (const [type, heading] of Object.entries(headings)) {
187
+ const items = groups[type];
188
+ if (!items || items.length === 0)
189
+ continue;
190
+ lines.push(heading);
191
+ lines.push('');
192
+ for (const item of items) {
193
+ lines.push(`- ${item.description} (${item.sha.slice(0, 7)})`);
194
+ }
195
+ lines.push('');
196
+ }
197
+ // Artifacts section
198
+ if (manifest.artifacts.length > 0) {
199
+ lines.push('## Artifacts');
200
+ lines.push('');
201
+ lines.push('| Name | Size | SHA-256 |');
202
+ lines.push('|------|------|---------|');
203
+ for (const a of manifest.artifacts) {
204
+ const sizeKb = (a.size / 1024).toFixed(1);
205
+ lines.push(`| ${a.name} | ${sizeKb} KB | \`${a.sha256.slice(0, 12)}…\` |`);
206
+ }
207
+ lines.push('');
208
+ }
209
+ return lines.join('\n').trimEnd() + '\n';
210
+ }
211
+ // ============================================================================
212
+ // Release checklist
213
+ // ============================================================================
214
+ /**
215
+ * Get the release checklist with default items.
216
+ * Each item's check function can be evaluated to determine pass/fail.
217
+ */
218
+ export function getReleaseChecklist(manifest) {
219
+ const items = [
220
+ {
221
+ name: 'Version is valid semver',
222
+ check: () => manifest ? SEMVER_RE.test(manifest.version) : false,
223
+ required: true,
224
+ status: 'skip',
225
+ },
226
+ {
227
+ name: 'Channel is set',
228
+ check: () => manifest ? !!manifest.channel : false,
229
+ required: true,
230
+ status: 'skip',
231
+ },
232
+ {
233
+ name: 'Timestamp is present',
234
+ check: () => manifest ? !!manifest.timestamp && !isNaN(Date.parse(manifest.timestamp)) : false,
235
+ required: true,
236
+ status: 'skip',
237
+ },
238
+ {
239
+ name: 'At least one artifact',
240
+ check: () => manifest ? manifest.artifacts.length > 0 : false,
241
+ required: false,
242
+ status: 'skip',
243
+ },
244
+ {
245
+ name: 'Changelog is non-empty',
246
+ check: () => manifest ? !!manifest.changelog : false,
247
+ required: false,
248
+ status: 'skip',
249
+ },
250
+ {
251
+ name: 'All artifact hashes are valid',
252
+ check: () => {
253
+ if (!manifest)
254
+ return false;
255
+ return manifest.artifacts.every((a) => /^[a-f0-9]{64}$/.test(a.sha256));
256
+ },
257
+ required: true,
258
+ status: 'skip',
259
+ },
260
+ {
261
+ name: 'No duplicate artifact names',
262
+ check: () => {
263
+ if (!manifest)
264
+ return false;
265
+ const names = manifest.artifacts.map((a) => a.name);
266
+ return new Set(names).size === names.length;
267
+ },
268
+ required: true,
269
+ status: 'skip',
270
+ },
271
+ {
272
+ name: 'Version matches channel',
273
+ check: () => {
274
+ if (!manifest)
275
+ return false;
276
+ if (manifest.channel === 'stable')
277
+ return !manifest.version.includes('-');
278
+ return manifest.version.includes('-');
279
+ },
280
+ required: false,
281
+ status: 'skip',
282
+ },
283
+ ];
284
+ // Evaluate checks
285
+ for (const item of items) {
286
+ try {
287
+ item.status = item.check() ? 'pass' : 'fail';
288
+ }
289
+ catch {
290
+ item.status = 'fail';
291
+ }
292
+ }
293
+ return items;
294
+ }
295
+ //# sourceMappingURL=release.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/build/release.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * M4-10: Version stamping & CHANGELOG generation
3
+ * Conventional commits parsing, version bumping, and changelog output.
4
+ */
5
+ export interface CommitInfo {
6
+ sha: string;
7
+ message: string;
8
+ author: string;
9
+ date: string;
10
+ type: string;
11
+ }
12
+ export interface ConventionalCommit {
13
+ type: string;
14
+ scope: string | null;
15
+ description: string;
16
+ breaking: boolean;
17
+ }
18
+ /**
19
+ * Parse a conventional commit message into structured parts.
20
+ */
21
+ export declare function parseConventionalCommit(message: string): ConventionalCommit;
22
+ /**
23
+ * Bump a semver version string by the given increment type.
24
+ */
25
+ export declare function bumpVersion(current: string, type: 'major' | 'minor' | 'patch' | 'prerelease'): string;
26
+ /**
27
+ * Stamp a version string into the specified file contents.
28
+ * Returns an array of { file, content } with the version replaced.
29
+ */
30
+ export declare function stampVersion(version: string, files: string[]): {
31
+ file: string;
32
+ content: string;
33
+ }[];
34
+ /**
35
+ * Generate a CHANGELOG entry from a list of conventional commits.
36
+ */
37
+ export declare function generateChangelog(commits: CommitInfo[], currentVersion: string): string;
38
+ //# sourceMappingURL=versioning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../../src/build/versioning.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,CAkB3E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,GAAG,MAAM,CA4BrG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAKlG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAmDvF"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * M4-10: Version stamping & CHANGELOG generation
3
+ * Conventional commits parsing, version bumping, and changelog output.
4
+ */
5
+ /**
6
+ * Parse a conventional commit message into structured parts.
7
+ */
8
+ export function parseConventionalCommit(message) {
9
+ const line = message.split('\n')[0].trim();
10
+ // Match: type(scope)!: description or type!: description or type: description
11
+ const match = line.match(/^(\w+)(?:\(([^)]*)\))?(!)?\s*:\s*(.+)$/);
12
+ if (!match) {
13
+ return { type: 'other', scope: null, description: line, breaking: false };
14
+ }
15
+ const [, type, scope, bang, description] = match;
16
+ const breaking = bang === '!' || /^BREAKING[ -]CHANGE\b/i.test(message);
17
+ return {
18
+ type: type.toLowerCase(),
19
+ scope: scope ?? null,
20
+ description: description.trim(),
21
+ breaking,
22
+ };
23
+ }
24
+ /**
25
+ * Bump a semver version string by the given increment type.
26
+ */
27
+ export function bumpVersion(current, type) {
28
+ // Strip leading 'v' if present
29
+ const stripped = current.startsWith('v') ? current.slice(1) : current;
30
+ const prereleaseMatch = stripped.match(/^(\d+)\.(\d+)\.(\d+)(?:-([a-zA-Z]+)\.(\d+))?$/);
31
+ if (!prereleaseMatch) {
32
+ throw new Error(`Invalid semver version: ${current}`);
33
+ }
34
+ let [, majorStr, minorStr, patchStr, preTag, preNum] = prereleaseMatch;
35
+ let major = parseInt(majorStr, 10);
36
+ let minor = parseInt(minorStr, 10);
37
+ let patch = parseInt(patchStr, 10);
38
+ switch (type) {
39
+ case 'major':
40
+ return `${major + 1}.0.0`;
41
+ case 'minor':
42
+ return `${major}.${minor + 1}.0`;
43
+ case 'patch':
44
+ return `${major}.${minor}.${patch + 1}`;
45
+ case 'prerelease': {
46
+ if (preTag && preNum !== undefined) {
47
+ return `${major}.${minor}.${patch}-${preTag}.${parseInt(preNum, 10) + 1}`;
48
+ }
49
+ return `${major}.${minor}.${patch + 1}-alpha.0`;
50
+ }
51
+ }
52
+ }
53
+ /**
54
+ * Stamp a version string into the specified file contents.
55
+ * Returns an array of { file, content } with the version replaced.
56
+ */
57
+ export function stampVersion(version, files) {
58
+ return files.map(file => ({
59
+ file,
60
+ content: version,
61
+ }));
62
+ }
63
+ /**
64
+ * Generate a CHANGELOG entry from a list of conventional commits.
65
+ */
66
+ export function generateChangelog(commits, currentVersion) {
67
+ const date = new Date().toISOString().slice(0, 10);
68
+ const lines = [];
69
+ lines.push(`## ${currentVersion} (${date})`);
70
+ lines.push('');
71
+ const groups = {};
72
+ const breaking = [];
73
+ for (const commit of commits) {
74
+ const parsed = parseConventionalCommit(commit.message);
75
+ if (parsed.breaking) {
76
+ breaking.push(`- ${parsed.description} (${commit.sha.slice(0, 7)})`);
77
+ }
78
+ const key = parsed.type;
79
+ if (!groups[key])
80
+ groups[key] = [];
81
+ groups[key].push({ scope: parsed.scope, description: parsed.description, sha: commit.sha });
82
+ }
83
+ if (breaking.length > 0) {
84
+ lines.push('### ⚠ BREAKING CHANGES');
85
+ lines.push('');
86
+ lines.push(...breaking);
87
+ lines.push('');
88
+ }
89
+ const headings = {
90
+ feat: '### Features',
91
+ fix: '### Bug Fixes',
92
+ perf: '### Performance',
93
+ refactor: '### Refactoring',
94
+ docs: '### Documentation',
95
+ chore: '### Chores',
96
+ test: '### Tests',
97
+ ci: '### CI',
98
+ };
99
+ for (const [type, heading] of Object.entries(headings)) {
100
+ const items = groups[type];
101
+ if (!items || items.length === 0)
102
+ continue;
103
+ lines.push(heading);
104
+ lines.push('');
105
+ for (const item of items) {
106
+ const scopeStr = item.scope ? `**${item.scope}:** ` : '';
107
+ lines.push(`- ${scopeStr}${item.description} (${item.sha.slice(0, 7)})`);
108
+ }
109
+ lines.push('');
110
+ }
111
+ return lines.join('\n').trimEnd() + '\n';
112
+ }
113
+ //# sourceMappingURL=versioning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioning.js","sourceRoot":"","sources":["../../src/build/versioning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Casting Engine v1 (M3-2, Issue #138)
3
+ *
4
+ * Generates themed agent personas from a universe template.
5
+ * Each CastMember maps to an agent role with name, personality, and backstory.
6
+ */
7
+ export type AgentRole = 'lead' | 'developer' | 'tester' | 'prompt-engineer' | 'security' | 'devops' | 'designer' | 'scribe' | 'reviewer';
8
+ export type UniverseId = 'usual-suspects' | 'oceans-eleven' | 'custom';
9
+ export interface CastMember {
10
+ /** Character name from the universe */
11
+ name: string;
12
+ /** Agent role this character fills */
13
+ role: AgentRole;
14
+ /** One-line personality trait */
15
+ personality: string;
16
+ /** Short backstory for system-prompt injection */
17
+ backstory: string;
18
+ /** Display name: "Name — Role" */
19
+ displayName: string;
20
+ }
21
+ export interface CastingConfig {
22
+ /** Universe theme to draw characters from */
23
+ universe: UniverseId;
24
+ /** Desired team size (clamped to available characters) */
25
+ teamSize?: number;
26
+ /** Roles that must be filled */
27
+ requiredRoles?: AgentRole[];
28
+ /** Custom character names (only for universe = 'custom') */
29
+ customNames?: Record<AgentRole, string>;
30
+ }
31
+ interface UniverseCharacter {
32
+ name: string;
33
+ personality: string;
34
+ backstory: string;
35
+ preferredRoles: AgentRole[];
36
+ }
37
+ interface UniverseTemplate {
38
+ id: UniverseId;
39
+ label: string;
40
+ characters: UniverseCharacter[];
41
+ }
42
+ export declare class CastingEngine {
43
+ /** List available universe IDs. */
44
+ getUniverses(): UniverseId[];
45
+ /** Get a universe template by ID. */
46
+ getUniverse(id: UniverseId): UniverseTemplate | undefined;
47
+ /**
48
+ * Cast a team of agents from a universe.
49
+ *
50
+ * Roles are filled by best-fit characters (preferredRoles match).
51
+ * Required roles are guaranteed to be present.
52
+ * Team size is clamped to available characters.
53
+ */
54
+ castTeam(config: CastingConfig): CastMember[];
55
+ private castCustomTeam;
56
+ private findBestFit;
57
+ private toCastMember;
58
+ }
59
+ export {};
60
+ //# sourceMappingURL=casting-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"casting-engine.d.ts","sourceRoot":"","sources":["../../src/casting/casting-engine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,WAAW,GACX,QAAQ,GACR,iBAAiB,GACjB,UAAU,GACV,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,UAAU,CAAC;AAEf,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,eAAe,GAAG,QAAQ,CAAC;AAEvE,MAAM,WAAW,UAAU;IACzB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,IAAI,EAAE,SAAS,CAAC;IAChB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,QAAQ,EAAE,UAAU,CAAC;IACrB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;IAC5B,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;CACzC;AAID,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,SAAS,EAAE,CAAC;CAC7B;AAED,UAAU,gBAAgB;IACxB,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,iBAAiB,EAAE,CAAC;CACjC;AAmID,qBAAa,aAAa;IACxB,mCAAmC;IACnC,YAAY,IAAI,UAAU,EAAE;IAI5B,qCAAqC;IACrC,WAAW,CAAC,EAAE,EAAE,UAAU,GAAG,gBAAgB,GAAG,SAAS;IAIzD;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,EAAE;IA+C7C,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,YAAY;CASrB"}