@bradygaster/squad-sdk 0.7.0 → 0.8.2

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 (354) hide show
  1. package/README.md +296 -296
  2. package/dist/adapter/client.d.ts +243 -0
  3. package/dist/adapter/client.d.ts.map +1 -0
  4. package/dist/adapter/client.js +567 -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 +71 -0
  23. package/dist/agents/index.d.ts.map +1 -0
  24. package/dist/agents/index.js +183 -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 +284 -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 +171 -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 +45 -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 +52 -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 +376 -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 +192 -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 +62 -0
  159. package/dist/coordinator/index.d.ts.map +1 -0
  160. package/dist/coordinator/index.js +171 -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 +33 -1
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +33 -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 +58 -0
  207. package/dist/ralph/index.d.ts.map +1 -0
  208. package/dist/ralph/index.js +128 -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 +314 -0
  219. package/dist/runtime/config.d.ts.map +1 -0
  220. package/dist/runtime/config.js +467 -0
  221. package/dist/runtime/config.js.map +1 -0
  222. package/dist/runtime/constants.d.ts +35 -0
  223. package/dist/runtime/constants.d.ts.map +1 -0
  224. package/dist/runtime/constants.js +58 -0
  225. package/dist/runtime/constants.js.map +1 -0
  226. package/dist/runtime/cost-tracker.d.ts +73 -0
  227. package/dist/runtime/cost-tracker.d.ts.map +1 -0
  228. package/dist/runtime/cost-tracker.js +157 -0
  229. package/dist/runtime/cost-tracker.js.map +1 -0
  230. package/dist/runtime/event-bus-otel-bridge.d.ts +19 -0
  231. package/dist/runtime/event-bus-otel-bridge.d.ts.map +1 -0
  232. package/dist/runtime/event-bus-otel-bridge.js +61 -0
  233. package/dist/runtime/event-bus-otel-bridge.js.map +1 -0
  234. package/dist/runtime/event-bus-ws-bridge.d.ts +35 -0
  235. package/dist/runtime/event-bus-ws-bridge.d.ts.map +1 -0
  236. package/dist/runtime/event-bus-ws-bridge.js +55 -0
  237. package/dist/runtime/event-bus-ws-bridge.js.map +1 -0
  238. package/dist/runtime/event-bus.d.ts +190 -0
  239. package/dist/runtime/event-bus.d.ts.map +1 -0
  240. package/dist/runtime/event-bus.js +218 -0
  241. package/dist/runtime/event-bus.js.map +1 -0
  242. package/dist/runtime/event-payloads.d.ts +108 -0
  243. package/dist/runtime/event-payloads.d.ts.map +1 -0
  244. package/dist/runtime/event-payloads.js +28 -0
  245. package/dist/runtime/event-payloads.js.map +1 -0
  246. package/dist/runtime/health.d.ts +66 -0
  247. package/dist/runtime/health.d.ts.map +1 -0
  248. package/dist/runtime/health.js +112 -0
  249. package/dist/runtime/health.js.map +1 -0
  250. package/dist/runtime/i18n.d.ts +54 -0
  251. package/dist/runtime/i18n.d.ts.map +1 -0
  252. package/dist/runtime/i18n.js +126 -0
  253. package/dist/runtime/i18n.js.map +1 -0
  254. package/dist/runtime/offline.d.ts +64 -0
  255. package/dist/runtime/offline.d.ts.map +1 -0
  256. package/dist/runtime/offline.js +108 -0
  257. package/dist/runtime/offline.js.map +1 -0
  258. package/dist/runtime/otel-bridge.d.ts +52 -0
  259. package/dist/runtime/otel-bridge.d.ts.map +1 -0
  260. package/dist/runtime/otel-bridge.js +132 -0
  261. package/dist/runtime/otel-bridge.js.map +1 -0
  262. package/dist/runtime/otel-init.d.ts +72 -0
  263. package/dist/runtime/otel-init.d.ts.map +1 -0
  264. package/dist/runtime/otel-init.js +68 -0
  265. package/dist/runtime/otel-init.js.map +1 -0
  266. package/dist/runtime/otel-metrics.d.ts +42 -0
  267. package/dist/runtime/otel-metrics.d.ts.map +1 -0
  268. package/dist/runtime/otel-metrics.js +196 -0
  269. package/dist/runtime/otel-metrics.js.map +1 -0
  270. package/dist/runtime/otel.d.ts +53 -0
  271. package/dist/runtime/otel.d.ts.map +1 -0
  272. package/dist/runtime/otel.js +127 -0
  273. package/dist/runtime/otel.js.map +1 -0
  274. package/dist/runtime/squad-observer.d.ts +75 -0
  275. package/dist/runtime/squad-observer.d.ts.map +1 -0
  276. package/dist/runtime/squad-observer.js +190 -0
  277. package/dist/runtime/squad-observer.js.map +1 -0
  278. package/dist/runtime/streaming.d.ts +106 -0
  279. package/dist/runtime/streaming.d.ts.map +1 -0
  280. package/dist/runtime/streaming.js +192 -0
  281. package/dist/runtime/streaming.js.map +1 -0
  282. package/dist/runtime/telemetry.d.ts +82 -0
  283. package/dist/runtime/telemetry.d.ts.map +1 -0
  284. package/dist/runtime/telemetry.js +120 -0
  285. package/dist/runtime/telemetry.js.map +1 -0
  286. package/dist/sharing/agent-repo.d.ts +33 -0
  287. package/dist/sharing/agent-repo.d.ts.map +1 -0
  288. package/dist/sharing/agent-repo.js +79 -0
  289. package/dist/sharing/agent-repo.js.map +1 -0
  290. package/dist/sharing/cache.d.ts +36 -0
  291. package/dist/sharing/cache.d.ts.map +1 -0
  292. package/dist/sharing/cache.js +85 -0
  293. package/dist/sharing/cache.js.map +1 -0
  294. package/dist/sharing/conflicts.d.ts +32 -0
  295. package/dist/sharing/conflicts.d.ts.map +1 -0
  296. package/dist/sharing/conflicts.js +121 -0
  297. package/dist/sharing/conflicts.js.map +1 -0
  298. package/dist/sharing/export.d.ts +50 -0
  299. package/dist/sharing/export.d.ts.map +1 -0
  300. package/dist/sharing/export.js +156 -0
  301. package/dist/sharing/export.js.map +1 -0
  302. package/dist/sharing/history-split.d.ts +34 -0
  303. package/dist/sharing/history-split.d.ts.map +1 -0
  304. package/dist/sharing/history-split.js +101 -0
  305. package/dist/sharing/history-split.js.map +1 -0
  306. package/dist/sharing/import.d.ts +37 -0
  307. package/dist/sharing/import.d.ts.map +1 -0
  308. package/dist/sharing/import.js +138 -0
  309. package/dist/sharing/import.js.map +1 -0
  310. package/dist/sharing/index.d.ts +11 -0
  311. package/dist/sharing/index.d.ts.map +1 -0
  312. package/dist/sharing/index.js +11 -0
  313. package/dist/sharing/index.js.map +1 -0
  314. package/dist/sharing/versioning.d.ts +32 -0
  315. package/dist/sharing/versioning.d.ts.map +1 -0
  316. package/dist/sharing/versioning.js +64 -0
  317. package/dist/sharing/versioning.js.map +1 -0
  318. package/dist/skills/index.d.ts +49 -0
  319. package/dist/skills/index.d.ts.map +1 -0
  320. package/dist/skills/index.js +85 -0
  321. package/dist/skills/index.js.map +1 -0
  322. package/dist/skills/skill-loader.d.ts +56 -0
  323. package/dist/skills/skill-loader.d.ts.map +1 -0
  324. package/dist/skills/skill-loader.js +106 -0
  325. package/dist/skills/skill-loader.js.map +1 -0
  326. package/dist/skills/skill-source.d.ts +63 -0
  327. package/dist/skills/skill-source.d.ts.map +1 -0
  328. package/dist/skills/skill-source.js +199 -0
  329. package/dist/skills/skill-source.js.map +1 -0
  330. package/dist/tools/index.d.ts +95 -0
  331. package/dist/tools/index.d.ts.map +1 -0
  332. package/dist/tools/index.js +475 -0
  333. package/dist/tools/index.js.map +1 -0
  334. package/dist/types.d.ts +43 -0
  335. package/dist/types.d.ts.map +1 -0
  336. package/dist/types.js +8 -0
  337. package/dist/types.js.map +1 -0
  338. package/dist/upstream/index.d.ts +8 -0
  339. package/dist/upstream/index.d.ts.map +1 -0
  340. package/dist/upstream/index.js +7 -0
  341. package/dist/upstream/index.js.map +1 -0
  342. package/dist/upstream/resolver.d.ts +37 -0
  343. package/dist/upstream/resolver.d.ts.map +1 -0
  344. package/dist/upstream/resolver.js +234 -0
  345. package/dist/upstream/resolver.js.map +1 -0
  346. package/dist/upstream/types.d.ts +55 -0
  347. package/dist/upstream/types.d.ts.map +1 -0
  348. package/dist/upstream/types.js +11 -0
  349. package/dist/upstream/types.js.map +1 -0
  350. package/dist/utils/normalize-eol.d.ts +6 -0
  351. package/dist/utils/normalize-eol.d.ts.map +1 -0
  352. package/dist/utils/normalize-eol.js +8 -0
  353. package/dist/utils/normalize-eol.js.map +1 -0
  354. package/package.json +197 -63
@@ -0,0 +1,156 @@
1
+ /**
2
+ * M5-1: Export command (squad export)
3
+ * Exports Squad configuration as a portable bundle.
4
+ */
5
+ import { existsSync, readFileSync, readdirSync } from 'node:fs';
6
+ import { join, basename } from 'node:path';
7
+ const SECRET_PATTERNS = [
8
+ /token[=:]\s*['"]?[A-Za-z0-9_\-]{20,}/gi,
9
+ /secret[=:]\s*['"]?[A-Za-z0-9_\-]{20,}/gi,
10
+ /password[=:]\s*['"]?[^\s'"]{8,}/gi,
11
+ /ghp_[A-Za-z0-9]{36}/g,
12
+ /gho_[A-Za-z0-9]{36}/g,
13
+ /github_pat_[A-Za-z0-9_]{82}/g,
14
+ ];
15
+ /**
16
+ * Strip secrets and sensitive patterns from text content.
17
+ */
18
+ export function sanitizeContent(content) {
19
+ let sanitized = content;
20
+ for (const pattern of SECRET_PATTERNS) {
21
+ sanitized = sanitized.replace(pattern, '[REDACTED]');
22
+ }
23
+ return sanitized;
24
+ }
25
+ /**
26
+ * Anonymize PII and local paths from content.
27
+ */
28
+ export function anonymizeContent(content) {
29
+ let result = sanitizeContent(content);
30
+ // Strip absolute paths (Unix and Windows)
31
+ result = result.replace(/(?:\/[\w.-]+){3,}/g, '/[path]');
32
+ result = result.replace(/[A-Z]:\\(?:[\w.-]+\\){2,}/gi, '[path]\\');
33
+ // Strip email-like patterns
34
+ result = result.replace(/[\w.+-]+@[\w.-]+\.\w{2,}/g, '[email]');
35
+ return result;
36
+ }
37
+ function readTeamConfig(projectDir) {
38
+ const teamFile = join(projectDir, '.ai-team', 'team.md');
39
+ if (existsSync(teamFile)) {
40
+ return { teamFile: readFileSync(teamFile, 'utf-8') };
41
+ }
42
+ return {};
43
+ }
44
+ function readAgents(projectDir) {
45
+ const agentsDir = join(projectDir, '.github', 'agents');
46
+ if (!existsSync(agentsDir))
47
+ return [];
48
+ return readdirSync(agentsDir)
49
+ .filter(f => f.endsWith('.md'))
50
+ .map(f => {
51
+ const content = readFileSync(join(agentsDir, f), 'utf-8');
52
+ const name = basename(f, '.md').replace('.agent', '');
53
+ return { name, role: name, content };
54
+ });
55
+ }
56
+ function readRoutingRules(projectDir) {
57
+ const routingFile = join(projectDir, '.ai-team', 'routing.md');
58
+ if (!existsSync(routingFile))
59
+ return [];
60
+ const content = readFileSync(routingFile, 'utf-8');
61
+ const rules = [];
62
+ const lines = content.split('\n');
63
+ for (const line of lines) {
64
+ const match = line.match(/^\s*[-*]\s+`?([^`]+)`?\s*→\s*(\w+)/);
65
+ if (match) {
66
+ rules.push({ pattern: match[1].trim(), agent: match[2].trim() });
67
+ }
68
+ }
69
+ return rules;
70
+ }
71
+ /**
72
+ * Export a Squad project configuration as a bundle.
73
+ */
74
+ export function exportSquadConfig(projectDir, options) {
75
+ const opts = {
76
+ includeHistory: options?.includeHistory ?? false,
77
+ includeSkills: options?.includeSkills ?? true,
78
+ format: options?.format ?? 'json',
79
+ anonymize: options?.anonymize ?? false,
80
+ };
81
+ const config = readTeamConfig(projectDir);
82
+ let agents = readAgents(projectDir);
83
+ let routingRules = readRoutingRules(projectDir);
84
+ const skills = [];
85
+ if (opts.includeSkills) {
86
+ const skillsDir = join(projectDir, '.ai-team', 'skills');
87
+ if (existsSync(skillsDir)) {
88
+ const skillFiles = readdirSync(skillsDir).filter(f => f.endsWith('.md'));
89
+ skills.push(...skillFiles.map(f => basename(f, '.md')));
90
+ }
91
+ }
92
+ if (opts.anonymize) {
93
+ agents = agents.map(a => ({
94
+ ...a,
95
+ content: anonymizeContent(a.content),
96
+ }));
97
+ }
98
+ const bundle = {
99
+ config: opts.anonymize ? {} : config,
100
+ agents,
101
+ skills,
102
+ routingRules,
103
+ metadata: {
104
+ version: '1.0.0',
105
+ timestamp: new Date().toISOString(),
106
+ source: opts.anonymize ? '[anonymized]' : projectDir,
107
+ },
108
+ };
109
+ if (opts.includeHistory) {
110
+ bundle.history = [];
111
+ }
112
+ return bundle;
113
+ }
114
+ /**
115
+ * Serialize an export bundle to a string.
116
+ */
117
+ export function serializeBundle(bundle, format) {
118
+ if (format === 'yaml') {
119
+ return toSimpleYaml(bundle);
120
+ }
121
+ return JSON.stringify(bundle, null, 2);
122
+ }
123
+ /** Minimal YAML serializer for flat/nested objects */
124
+ function toSimpleYaml(obj, indent = 0) {
125
+ const pad = ' '.repeat(indent);
126
+ if (obj === null || obj === undefined)
127
+ return `${pad}null\n`;
128
+ if (typeof obj === 'string')
129
+ return obj.includes('\n') ? `|\n${obj.split('\n').map(l => pad + ' ' + l).join('\n')}\n` : `${obj}\n`;
130
+ if (typeof obj === 'number' || typeof obj === 'boolean')
131
+ return `${obj}\n`;
132
+ if (Array.isArray(obj)) {
133
+ if (obj.length === 0)
134
+ return `[]\n`;
135
+ return obj.map(item => {
136
+ if (typeof item === 'object' && item !== null) {
137
+ const inner = toSimpleYaml(item, indent + 2).trimStart();
138
+ return `${pad}- ${inner}`;
139
+ }
140
+ return `${pad}- ${item}\n`;
141
+ }).join('');
142
+ }
143
+ if (typeof obj === 'object') {
144
+ const entries = Object.entries(obj);
145
+ if (entries.length === 0)
146
+ return `{}\n`;
147
+ return entries.map(([k, v]) => {
148
+ if (typeof v === 'object' && v !== null) {
149
+ return `${pad}${k}:\n${toSimpleYaml(v, indent + 2)}`;
150
+ }
151
+ return `${pad}${k}: ${toSimpleYaml(v)}`;
152
+ }).join('');
153
+ }
154
+ return `${obj}\n`;
155
+ }
156
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/sharing/export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * M5-3: History splitting logic
3
+ * Separates shareable history from private data for safe export.
4
+ */
5
+ export interface HistoryEntry {
6
+ id: string;
7
+ timestamp: string;
8
+ type: 'decision' | 'pattern' | 'interaction' | 'error';
9
+ content: string;
10
+ agent?: string;
11
+ metadata?: Record<string, unknown>;
12
+ }
13
+ export interface AgentHistory {
14
+ entries: HistoryEntry[];
15
+ source?: string;
16
+ }
17
+ export interface SplitOptions {
18
+ maxAge?: number;
19
+ excludePatterns?: string[];
20
+ anonymize?: boolean;
21
+ }
22
+ export interface SplitResult {
23
+ exportable: AgentHistory;
24
+ private: AgentHistory;
25
+ }
26
+ /**
27
+ * Split history into exportable (shareable) and private portions.
28
+ */
29
+ export declare function splitHistory(history: AgentHistory, options?: SplitOptions): SplitResult;
30
+ /**
31
+ * Merge imported history with existing history, deduplicating by id.
32
+ */
33
+ export declare function mergeHistory(existing: AgentHistory, imported: AgentHistory): AgentHistory;
34
+ //# sourceMappingURL=history-split.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-split.d.ts","sourceRoot":"","sources":["../../src/sharing/history-split.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,CAAC;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,YAAY,CAAC;IACzB,OAAO,EAAE,YAAY,CAAC;CACvB;AA0CD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,WAAW,CAsCvF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,GAAG,YAAY,CAwBzF"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * M5-3: History splitting logic
3
+ * Separates shareable history from private data for safe export.
4
+ */
5
+ const PRIVATE_PATTERNS = [
6
+ /[\w.+-]+@[\w.-]+\.\w{2,}/g, // emails
7
+ /https?:\/\/[^\s)]+/g, // URLs
8
+ /ghp_[A-Za-z0-9]{36}/g, // GitHub PATs
9
+ /gho_[A-Za-z0-9]{36}/g,
10
+ /github_pat_[A-Za-z0-9_]{82}/g,
11
+ /[A-Z]:\\(?:[\w.-]+\\){2,}[\w.-]*/gi, // Windows paths
12
+ /(?:\/[\w.-]+){3,}/g, // Unix paths
13
+ ];
14
+ /**
15
+ * Anonymize a single history entry's content.
16
+ */
17
+ function anonymizeEntry(entry) {
18
+ let content = entry.content;
19
+ for (const pattern of PRIVATE_PATTERNS) {
20
+ content = content.replace(pattern, '[REDACTED]');
21
+ }
22
+ return {
23
+ ...entry,
24
+ content,
25
+ agent: entry.agent,
26
+ metadata: undefined, // strip metadata which may contain PII
27
+ };
28
+ }
29
+ function isExpired(entry, maxAgeDays) {
30
+ const entryDate = new Date(entry.timestamp);
31
+ const cutoff = new Date();
32
+ cutoff.setDate(cutoff.getDate() - maxAgeDays);
33
+ return entryDate < cutoff;
34
+ }
35
+ function matchesExclude(entry, patterns) {
36
+ return patterns.some(p => {
37
+ const re = new RegExp(p, 'i');
38
+ return re.test(entry.content) || (entry.agent && re.test(entry.agent));
39
+ });
40
+ }
41
+ /**
42
+ * Split history into exportable (shareable) and private portions.
43
+ */
44
+ export function splitHistory(history, options) {
45
+ const opts = {
46
+ maxAge: options?.maxAge ?? 365,
47
+ excludePatterns: options?.excludePatterns ?? [],
48
+ anonymize: options?.anonymize ?? false,
49
+ };
50
+ const exportable = [];
51
+ const privateEntries = [];
52
+ for (const entry of history.entries) {
53
+ // Expired entries go to private
54
+ if (isExpired(entry, opts.maxAge)) {
55
+ privateEntries.push(entry);
56
+ continue;
57
+ }
58
+ // Excluded entries go to private
59
+ if (matchesExclude(entry, opts.excludePatterns)) {
60
+ privateEntries.push(entry);
61
+ continue;
62
+ }
63
+ // Interaction and error types are private by default
64
+ if (entry.type === 'interaction' || entry.type === 'error') {
65
+ privateEntries.push(entry);
66
+ continue;
67
+ }
68
+ // Decision and pattern types are exportable
69
+ const processed = opts.anonymize ? anonymizeEntry(entry) : entry;
70
+ exportable.push(processed);
71
+ }
72
+ return {
73
+ exportable: { entries: exportable },
74
+ private: { entries: privateEntries },
75
+ };
76
+ }
77
+ /**
78
+ * Merge imported history with existing history, deduplicating by id.
79
+ */
80
+ export function mergeHistory(existing, imported) {
81
+ const seen = new Set();
82
+ const merged = [];
83
+ // Existing entries take precedence
84
+ for (const entry of existing.entries) {
85
+ if (!seen.has(entry.id)) {
86
+ seen.add(entry.id);
87
+ merged.push(entry);
88
+ }
89
+ }
90
+ // Add imported entries that don't already exist
91
+ for (const entry of imported.entries) {
92
+ if (!seen.has(entry.id)) {
93
+ seen.add(entry.id);
94
+ merged.push(entry);
95
+ }
96
+ }
97
+ // Sort by timestamp
98
+ merged.sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());
99
+ return { entries: merged, source: existing.source ?? imported.source };
100
+ }
101
+ //# sourceMappingURL=history-split.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-split.js","sourceRoot":"","sources":["../../src/sharing/history-split.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * M5-2: Import command (squad import)
3
+ * Imports a Squad configuration bundle into a target project.
4
+ */
5
+ import type { ExportBundle } from './export.js';
6
+ export interface ImportOptions {
7
+ merge?: boolean;
8
+ dryRun?: boolean;
9
+ skipValidation?: boolean;
10
+ }
11
+ export interface ImportChange {
12
+ type: 'added' | 'modified' | 'skipped';
13
+ path: string;
14
+ reason?: string;
15
+ }
16
+ export interface ImportResult {
17
+ success: boolean;
18
+ changes: ImportChange[];
19
+ warnings: string[];
20
+ }
21
+ export interface BundleValidationError {
22
+ field: string;
23
+ message: string;
24
+ }
25
+ /**
26
+ * Deserialize a bundle string (JSON or YAML-like) into an ExportBundle.
27
+ */
28
+ export declare function deserializeBundle(content: string): ExportBundle;
29
+ /**
30
+ * Validate an ExportBundle for structural correctness.
31
+ */
32
+ export declare function validateBundle(bundle: ExportBundle): BundleValidationError[];
33
+ /**
34
+ * Import a Squad configuration bundle into a target directory.
35
+ */
36
+ export declare function importSquadConfig(bundlePath: string, targetDir: string, options?: ImportOptions): ImportResult;
37
+ //# sourceMappingURL=import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/sharing/import.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAqB,MAAM,aAAa,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAQ/D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,qBAAqB,EAAE,CAiC5E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,aAAa,GACtB,YAAY,CA8Ed"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * M5-2: Import command (squad import)
3
+ * Imports a Squad configuration bundle into a target project.
4
+ */
5
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
6
+ import { join, dirname } from 'node:path';
7
+ /**
8
+ * Deserialize a bundle string (JSON or YAML-like) into an ExportBundle.
9
+ */
10
+ export function deserializeBundle(content) {
11
+ const trimmed = content.trim();
12
+ // Try JSON first
13
+ if (trimmed.startsWith('{')) {
14
+ return JSON.parse(trimmed);
15
+ }
16
+ // Minimal: only JSON is fully supported for import
17
+ throw new Error('Only JSON format is supported for import');
18
+ }
19
+ /**
20
+ * Validate an ExportBundle for structural correctness.
21
+ */
22
+ export function validateBundle(bundle) {
23
+ const errors = [];
24
+ if (!bundle.metadata) {
25
+ errors.push({ field: 'metadata', message: 'Missing metadata' });
26
+ }
27
+ else {
28
+ if (!bundle.metadata.version) {
29
+ errors.push({ field: 'metadata.version', message: 'Missing version in metadata' });
30
+ }
31
+ if (!bundle.metadata.timestamp) {
32
+ errors.push({ field: 'metadata.timestamp', message: 'Missing timestamp in metadata' });
33
+ }
34
+ }
35
+ if (!bundle.agents || !Array.isArray(bundle.agents)) {
36
+ errors.push({ field: 'agents', message: 'Missing or invalid agents array' });
37
+ }
38
+ else {
39
+ for (let i = 0; i < bundle.agents.length; i++) {
40
+ const agent = bundle.agents[i];
41
+ if (!agent.name)
42
+ errors.push({ field: `agents[${i}].name`, message: 'Agent missing name' });
43
+ if (!agent.content)
44
+ errors.push({ field: `agents[${i}].content`, message: 'Agent missing content' });
45
+ }
46
+ }
47
+ if (!bundle.routingRules || !Array.isArray(bundle.routingRules)) {
48
+ errors.push({ field: 'routingRules', message: 'Missing or invalid routingRules array' });
49
+ }
50
+ if (bundle.config === undefined || bundle.config === null) {
51
+ errors.push({ field: 'config', message: 'Missing config' });
52
+ }
53
+ return errors;
54
+ }
55
+ /**
56
+ * Import a Squad configuration bundle into a target directory.
57
+ */
58
+ export function importSquadConfig(bundlePath, targetDir, options) {
59
+ const opts = {
60
+ merge: options?.merge ?? true,
61
+ dryRun: options?.dryRun ?? false,
62
+ skipValidation: options?.skipValidation ?? false,
63
+ };
64
+ const warnings = [];
65
+ const changes = [];
66
+ // Read and parse bundle
67
+ if (!existsSync(bundlePath)) {
68
+ return { success: false, changes: [], warnings: [`Bundle file not found: ${bundlePath}`] };
69
+ }
70
+ let bundle;
71
+ try {
72
+ const content = readFileSync(bundlePath, 'utf-8');
73
+ bundle = deserializeBundle(content);
74
+ }
75
+ catch (err) {
76
+ return { success: false, changes: [], warnings: [`Failed to parse bundle: ${err.message}`] };
77
+ }
78
+ // Validate
79
+ if (!opts.skipValidation) {
80
+ const validationErrors = validateBundle(bundle);
81
+ if (validationErrors.length > 0) {
82
+ return {
83
+ success: false,
84
+ changes: [],
85
+ warnings: validationErrors.map(e => `${e.field}: ${e.message}`),
86
+ };
87
+ }
88
+ }
89
+ // Import agents
90
+ const agentsDir = join(targetDir, '.github', 'agents');
91
+ for (const agent of bundle.agents) {
92
+ const agentPath = join(agentsDir, `${agent.name}.agent.md`);
93
+ const relativePath = `.github/agents/${agent.name}.agent.md`;
94
+ if (existsSync(agentPath) && !opts.merge) {
95
+ changes.push({ type: 'skipped', path: relativePath, reason: 'File exists and merge is disabled' });
96
+ continue;
97
+ }
98
+ if (existsSync(agentPath) && opts.merge) {
99
+ if (!opts.dryRun) {
100
+ writeFileSync(agentPath, agent.content, 'utf-8');
101
+ }
102
+ changes.push({ type: 'modified', path: relativePath });
103
+ }
104
+ else {
105
+ if (!opts.dryRun) {
106
+ mkdirSync(dirname(agentPath), { recursive: true });
107
+ writeFileSync(agentPath, agent.content, 'utf-8');
108
+ }
109
+ changes.push({ type: 'added', path: relativePath });
110
+ }
111
+ }
112
+ // Import routing rules
113
+ if (bundle.routingRules.length > 0) {
114
+ const routingPath = join(targetDir, '.ai-team', 'routing.md');
115
+ const relativePath = '.ai-team/routing.md';
116
+ const routingContent = formatRoutingRules(bundle.routingRules);
117
+ if (existsSync(routingPath) && !opts.merge) {
118
+ changes.push({ type: 'skipped', path: relativePath, reason: 'File exists and merge is disabled' });
119
+ }
120
+ else {
121
+ if (!opts.dryRun) {
122
+ mkdirSync(dirname(routingPath), { recursive: true });
123
+ writeFileSync(routingPath, routingContent, 'utf-8');
124
+ }
125
+ changes.push({ type: existsSync(routingPath) ? 'modified' : 'added', path: relativePath });
126
+ }
127
+ }
128
+ return { success: true, changes, warnings };
129
+ }
130
+ function formatRoutingRules(rules) {
131
+ const lines = ['# Routing Rules', ''];
132
+ for (const rule of rules) {
133
+ lines.push(`- \`${rule.pattern}\` → ${rule.agent}`);
134
+ }
135
+ lines.push('');
136
+ return lines.join('\n');
137
+ }
138
+ //# sourceMappingURL=import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/sharing/import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Sharing module exports — export, import, history splitting, versioning, caching, conflicts
3
+ */
4
+ export * from './export.js';
5
+ export * from './import.js';
6
+ export * from './history-split.js';
7
+ export * from './versioning.js';
8
+ export * from './agent-repo.js';
9
+ export * from './cache.js';
10
+ export * from './conflicts.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sharing/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Sharing module exports — export, import, history splitting, versioning, caching, conflicts
3
+ */
4
+ export * from './export.js';
5
+ export * from './import.js';
6
+ export * from './history-split.js';
7
+ export * from './versioning.js';
8
+ export * from './agent-repo.js';
9
+ export * from './cache.js';
10
+ export * from './conflicts.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sharing/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Agent Versioning — commit SHA pinning (M5-6, Issue #129)
3
+ */
4
+ import type { AgentDefinition } from '../config/agent-source.js';
5
+ export interface VersionPin {
6
+ agentId: string;
7
+ sha: string;
8
+ timestamp: number;
9
+ source: 'local' | 'github';
10
+ }
11
+ export interface VersionDiff {
12
+ agentId: string;
13
+ from: VersionPin;
14
+ to: VersionPin;
15
+ fields: string[];
16
+ }
17
+ /** Resolver callback: given agentId + SHA, return the agent at that version. */
18
+ export type AgentVersionResolver = (agentId: string, sha: string) => Promise<AgentDefinition | null>;
19
+ /** Pin an agent to a specific commit SHA. */
20
+ export declare function pinAgentVersion(agentId: string, sha: string, source?: 'local' | 'github'): VersionPin;
21
+ /**
22
+ * Resolve a version pin to an agent definition.
23
+ * "latest" SHA resolves via the headResolver callback.
24
+ */
25
+ export declare function resolveVersion(pin: VersionPin, resolver: AgentVersionResolver, headResolver?: (agentId: string) => Promise<string>): Promise<AgentDefinition | null>;
26
+ /** Compare two version pins and return a diff summary. */
27
+ export declare function compareAgentVersions(a: VersionPin, b: VersionPin, resolver: AgentVersionResolver): Promise<VersionDiff>;
28
+ /** Get the full version history for an agent. */
29
+ export declare function getVersionHistory(agentId: string): VersionPin[];
30
+ /** Clear all stored version pins (useful in tests). */
31
+ export declare function clearVersionStore(): void;
32
+ //# sourceMappingURL=versioning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../../src/sharing/versioning.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAIjE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,UAAU,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,gFAAgF;AAChF,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;AAQrG,6CAA6C;AAC7C,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,OAAO,GAAG,QAAkB,GACnC,UAAU,CAWZ;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,oBAAoB,EAC9B,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAClD,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAOjC;AAED,0DAA0D;AAC1D,wBAAsB,oBAAoB,CACxC,CAAC,EAAE,UAAU,EACb,CAAC,EAAE,UAAU,EACb,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,WAAW,CAAC,CAkBtB;AAED,iDAAiD;AACjD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CAE/D;AAED,uDAAuD;AACvD,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Agent Versioning — commit SHA pinning (M5-6, Issue #129)
3
+ */
4
+ // --- In-memory version store ---
5
+ const versionStore = new Map();
6
+ // --- Public API ---
7
+ /** Pin an agent to a specific commit SHA. */
8
+ export function pinAgentVersion(agentId, sha, source = 'local') {
9
+ const pin = {
10
+ agentId,
11
+ sha,
12
+ timestamp: Date.now(),
13
+ source,
14
+ };
15
+ const existing = versionStore.get(agentId) ?? [];
16
+ existing.push(pin);
17
+ versionStore.set(agentId, existing);
18
+ return pin;
19
+ }
20
+ /**
21
+ * Resolve a version pin to an agent definition.
22
+ * "latest" SHA resolves via the headResolver callback.
23
+ */
24
+ export async function resolveVersion(pin, resolver, headResolver) {
25
+ let sha = pin.sha;
26
+ if (sha === 'latest') {
27
+ if (!headResolver)
28
+ return null;
29
+ sha = await headResolver(pin.agentId);
30
+ }
31
+ return resolver(pin.agentId, sha);
32
+ }
33
+ /** Compare two version pins and return a diff summary. */
34
+ export async function compareAgentVersions(a, b, resolver) {
35
+ const agentA = await resolver(a.agentId, a.sha);
36
+ const agentB = await resolver(b.agentId, b.sha);
37
+ const fields = [];
38
+ if (agentA && agentB) {
39
+ const keys = ['name', 'role', 'charter', 'model', 'source'];
40
+ for (const key of keys) {
41
+ if (agentA[key] !== agentB[key])
42
+ fields.push(key);
43
+ }
44
+ if (JSON.stringify(agentA.tools) !== JSON.stringify(agentB.tools))
45
+ fields.push('tools');
46
+ if (JSON.stringify(agentA.skills) !== JSON.stringify(agentB.skills))
47
+ fields.push('skills');
48
+ if (agentA.history !== agentB.history)
49
+ fields.push('history');
50
+ }
51
+ else {
52
+ fields.push('__unresolvable__');
53
+ }
54
+ return { agentId: a.agentId, from: a, to: b, fields };
55
+ }
56
+ /** Get the full version history for an agent. */
57
+ export function getVersionHistory(agentId) {
58
+ return [...(versionStore.get(agentId) ?? [])];
59
+ }
60
+ /** Clear all stored version pins (useful in tests). */
61
+ export function clearVersionStore() {
62
+ versionStore.clear();
63
+ }
64
+ //# sourceMappingURL=versioning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioning.js","sourceRoot":"","sources":["../../src/sharing/versioning.ts"],"names":[],"mappings":"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"}