@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,120 @@
1
+ /**
2
+ * Telemetry & Update Notifications (M4-7, Issue #108)
3
+ *
4
+ * Privacy-first, opt-in telemetry collection for Squad.
5
+ * No PII, no code content — only aggregate usage metrics.
6
+ *
7
+ * @module runtime/telemetry
8
+ */
9
+ // ============================================================================
10
+ // Default (no-op) transport
11
+ // ============================================================================
12
+ let _transport = async () => {
13
+ // no-op until consumer provides a real transport
14
+ };
15
+ /** Register a custom transport for flushing events. */
16
+ export function setTelemetryTransport(fn) {
17
+ _transport = fn;
18
+ }
19
+ // ============================================================================
20
+ // TelemetryCollector
21
+ // ============================================================================
22
+ /**
23
+ * Opt-in, privacy-respecting telemetry collector.
24
+ *
25
+ * Events are queued in memory and only sent when `flush()` is called.
26
+ * The collector respects the consent flag and never transmits when disabled.
27
+ *
28
+ * ```ts
29
+ * const telemetry = new TelemetryCollector({ enabled: false });
30
+ * telemetry.setConsent(true);
31
+ * telemetry.collectEvent({ name: 'squad.init' });
32
+ * await telemetry.flush();
33
+ * ```
34
+ */
35
+ export class TelemetryCollector {
36
+ queue = [];
37
+ config;
38
+ constructor(config) {
39
+ this.config = {
40
+ enabled: false,
41
+ endpoint: '',
42
+ anonymize: false,
43
+ excludeEvents: [],
44
+ ...config,
45
+ };
46
+ }
47
+ // --------------------------------------------------------------------------
48
+ // Consent management
49
+ // --------------------------------------------------------------------------
50
+ /** Returns the current consent (enabled) status. */
51
+ getConsentStatus() {
52
+ return this.config.enabled;
53
+ }
54
+ /** Set consent status. When false, collectEvent becomes a no-op. */
55
+ setConsent(enabled) {
56
+ this.config.enabled = enabled;
57
+ }
58
+ // --------------------------------------------------------------------------
59
+ // Event collection
60
+ // --------------------------------------------------------------------------
61
+ /**
62
+ * Queue a telemetry event.
63
+ *
64
+ * Does nothing when consent is not given or the event name is excluded.
65
+ */
66
+ collectEvent(event) {
67
+ if (!this.config.enabled)
68
+ return;
69
+ if (this.config.excludeEvents?.includes(event.name))
70
+ return;
71
+ const stored = {
72
+ name: event.name,
73
+ properties: this.config.anonymize
74
+ ? undefined
75
+ : event.properties ? { ...event.properties } : undefined,
76
+ timestamp: event.timestamp ?? Date.now(),
77
+ };
78
+ this.queue.push(stored);
79
+ }
80
+ /**
81
+ * Send all queued events via the configured transport, then clear the queue.
82
+ * Returns the number of events flushed.
83
+ */
84
+ async flush() {
85
+ if (!this.config.enabled || this.queue.length === 0)
86
+ return 0;
87
+ const endpoint = this.config.endpoint ?? '';
88
+ const batch = [...this.queue];
89
+ this.queue = [];
90
+ await _transport(batch, endpoint);
91
+ return batch.length;
92
+ }
93
+ /** Return the number of queued (unflushed) events. */
94
+ get pendingCount() {
95
+ return this.queue.length;
96
+ }
97
+ /** Discard all queued events without sending. */
98
+ drain() {
99
+ this.queue = [];
100
+ }
101
+ /** Return a copy of the current config. */
102
+ getConfig() {
103
+ return { ...this.config };
104
+ }
105
+ }
106
+ // ============================================================================
107
+ // Update notification helpers
108
+ // ============================================================================
109
+ /**
110
+ * Decide whether the user should be notified about available updates.
111
+ *
112
+ * @param lastCheck - Timestamp of the last update check
113
+ * @param intervalMs - Minimum milliseconds between notifications
114
+ * @returns true if enough time has elapsed since the last check
115
+ */
116
+ export function shouldNotifyUpdate(lastCheck, intervalMs) {
117
+ const elapsed = Date.now() - lastCheck.getTime();
118
+ return elapsed >= intervalMs;
119
+ }
120
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/runtime/telemetry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Agent Repository Configuration (M5-7, Issue #131)
3
+ */
4
+ import type { AgentDefinition, AgentManifest, GitHubFetcher } from '../config/agent-source.js';
5
+ export interface AgentRepoConfig {
6
+ owner: string;
7
+ repo: string;
8
+ branch?: string;
9
+ path?: string;
10
+ authentication?: {
11
+ type: 'token' | 'app';
12
+ token?: string;
13
+ };
14
+ }
15
+ export interface PushResult {
16
+ success: boolean;
17
+ sha?: string;
18
+ errors: string[];
19
+ }
20
+ /**
21
+ * Abstracted GitHub operations for agent repo management.
22
+ */
23
+ export interface AgentRepoOperations extends GitHubFetcher {
24
+ /** Push a file to a repo (create or update). */
25
+ pushFile(owner: string, repo: string, path: string, content: string, message: string, branch?: string): Promise<{
26
+ sha: string;
27
+ }>;
28
+ }
29
+ export declare function configureAgentRepo(config: AgentRepoConfig): AgentRepoConfig;
30
+ export declare function listRepoAgents(config: AgentRepoConfig, ops: AgentRepoOperations): Promise<AgentManifest[]>;
31
+ export declare function pullAgent(config: AgentRepoConfig, agentId: string, ops: AgentRepoOperations): Promise<AgentDefinition | null>;
32
+ export declare function pushAgent(config: AgentRepoConfig, agent: AgentDefinition, ops: AgentRepoOperations): Promise<PushResult>;
33
+ //# sourceMappingURL=agent-repo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-repo.d.ts","sourceRoot":"","sources":["../../src/sharing/agent-repo.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAK/F,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE;QACf,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,gDAAgD;IAChD,QAAQ,CACN,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7B;AAID,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAc3E;AAID,wBAAsB,cAAc,CAClC,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,aAAa,EAAE,CAAC,CAmB1B;AAID,wBAAsB,SAAS,CAC7B,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAuBjC;AAID,wBAAsB,SAAS,CAC7B,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,UAAU,CAAC,CAmBrB"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Agent Repository Configuration (M5-7, Issue #131)
3
+ */
4
+ import { parseCharterMetadata } from '../config/agent-source.js';
5
+ // --- Validation ---
6
+ export function configureAgentRepo(config) {
7
+ if (!config.owner || typeof config.owner !== 'string') {
8
+ throw new Error('owner is required');
9
+ }
10
+ if (!config.repo || typeof config.repo !== 'string') {
11
+ throw new Error('repo is required');
12
+ }
13
+ return {
14
+ owner: config.owner,
15
+ repo: config.repo,
16
+ branch: config.branch ?? 'main',
17
+ path: config.path ?? '.squad/agents',
18
+ authentication: config.authentication,
19
+ };
20
+ }
21
+ // --- List agents ---
22
+ export async function listRepoAgents(config, ops) {
23
+ const agentPath = config.path ?? '.squad/agents';
24
+ const entries = await ops.listDirectory(config.owner, config.repo, agentPath, config.branch);
25
+ const dirs = entries.filter(e => e.type === 'dir');
26
+ const manifests = [];
27
+ for (const dir of dirs) {
28
+ const charterPath = `${agentPath}/${dir.name}/charter.md`;
29
+ const content = await ops.getFileContent(config.owner, config.repo, charterPath, config.branch);
30
+ if (!content)
31
+ continue;
32
+ const meta = parseCharterMetadata(content);
33
+ manifests.push({
34
+ name: meta.name || dir.name,
35
+ role: meta.role || 'agent',
36
+ source: `github:${config.owner}/${config.repo}`,
37
+ });
38
+ }
39
+ return manifests;
40
+ }
41
+ // --- Pull agent ---
42
+ export async function pullAgent(config, agentId, ops) {
43
+ const agentPath = config.path ?? '.squad/agents';
44
+ const charterPath = `${agentPath}/${agentId}/charter.md`;
45
+ const charter = await ops.getFileContent(config.owner, config.repo, charterPath, config.branch);
46
+ if (!charter)
47
+ return null;
48
+ const meta = parseCharterMetadata(charter);
49
+ let history;
50
+ const historyPath = `${agentPath}/${agentId}/history.md`;
51
+ const historyContent = await ops.getFileContent(config.owner, config.repo, historyPath, config.branch);
52
+ if (historyContent)
53
+ history = historyContent;
54
+ return {
55
+ name: meta.name || agentId,
56
+ role: meta.role || 'agent',
57
+ source: `github:${config.owner}/${config.repo}`,
58
+ charter,
59
+ model: meta.model,
60
+ tools: meta.tools,
61
+ skills: meta.skills,
62
+ history,
63
+ };
64
+ }
65
+ // --- Push agent ---
66
+ export async function pushAgent(config, agent, ops) {
67
+ const agentPath = config.path ?? '.squad/agents';
68
+ const charterPath = `${agentPath}/${agent.name}/charter.md`;
69
+ const errors = [];
70
+ try {
71
+ const result = await ops.pushFile(config.owner, config.repo, charterPath, agent.charter, `Update agent ${agent.name}`, config.branch);
72
+ return { success: true, sha: result.sha, errors };
73
+ }
74
+ catch (err) {
75
+ errors.push(err instanceof Error ? err.message : String(err));
76
+ return { success: false, errors };
77
+ }
78
+ }
79
+ //# sourceMappingURL=agent-repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-repo.js","sourceRoot":"","sources":["../../src/sharing/agent-repo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Caching Strategy for Remote Agents (M5-8, Issue #132)
3
+ */
4
+ import type { AgentDefinition } from '../config/agent-source.js';
5
+ export interface CacheEntry<T = AgentDefinition> {
6
+ value: T;
7
+ timestamp: number;
8
+ ttl: number;
9
+ source: string;
10
+ }
11
+ export interface CacheStats {
12
+ hits: number;
13
+ misses: number;
14
+ evictions: number;
15
+ size: number;
16
+ }
17
+ /** Default TTL: 1 hour for agent definitions. */
18
+ export declare const DEFAULT_AGENT_TTL: number;
19
+ /** Default TTL: 5 minutes for skill content. */
20
+ export declare const DEFAULT_SKILL_TTL: number;
21
+ export declare class AgentCache<T = AgentDefinition> {
22
+ private cache;
23
+ private stats;
24
+ private defaultTtl;
25
+ constructor(defaultTtl?: number);
26
+ get(key: string): T | null;
27
+ set(key: string, value: T, ttl?: number, source?: string): void;
28
+ invalidate(key: string): boolean;
29
+ clear(): void;
30
+ has(key: string): boolean;
31
+ getStats(): CacheStats;
32
+ /** Return all non-expired entries. */
33
+ entries(): Array<[string, CacheEntry<T>]>;
34
+ private isExpired;
35
+ }
36
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/sharing/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAIjE,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,eAAe;IAC7C,KAAK,EAAE,CAAC,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAID,iDAAiD;AACjD,eAAO,MAAM,iBAAiB,QAAiB,CAAC;AAEhD,gDAAgD;AAChD,eAAO,MAAM,iBAAiB,QAAgB,CAAC;AAI/C,qBAAa,UAAU,CAAC,CAAC,GAAG,eAAe;IACzC,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,KAAK,CAA6D;IAC1E,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,GAAE,MAA0B;IAIlD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAiB1B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,SAAY,GAAG,IAAI;IAUlE,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAShC,KAAK,IAAI,IAAI;IAOb,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAYzB,QAAQ,IAAI,UAAU;IAItB,sCAAsC;IACtC,OAAO,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAUzC,OAAO,CAAC,SAAS;CAGlB"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Caching Strategy for Remote Agents (M5-8, Issue #132)
3
+ */
4
+ // --- Constants ---
5
+ /** Default TTL: 1 hour for agent definitions. */
6
+ export const DEFAULT_AGENT_TTL = 60 * 60 * 1000;
7
+ /** Default TTL: 5 minutes for skill content. */
8
+ export const DEFAULT_SKILL_TTL = 5 * 60 * 1000;
9
+ // --- AgentCache class ---
10
+ export class AgentCache {
11
+ cache = new Map();
12
+ stats = { hits: 0, misses: 0, evictions: 0, size: 0 };
13
+ defaultTtl;
14
+ constructor(defaultTtl = DEFAULT_AGENT_TTL) {
15
+ this.defaultTtl = defaultTtl;
16
+ }
17
+ get(key) {
18
+ const entry = this.cache.get(key);
19
+ if (!entry) {
20
+ this.stats.misses++;
21
+ return null;
22
+ }
23
+ if (this.isExpired(entry)) {
24
+ this.cache.delete(key);
25
+ this.stats.evictions++;
26
+ this.stats.size = this.cache.size;
27
+ this.stats.misses++;
28
+ return null;
29
+ }
30
+ this.stats.hits++;
31
+ return entry.value;
32
+ }
33
+ set(key, value, ttl, source = 'unknown') {
34
+ this.cache.set(key, {
35
+ value,
36
+ timestamp: Date.now(),
37
+ ttl: ttl ?? this.defaultTtl,
38
+ source,
39
+ });
40
+ this.stats.size = this.cache.size;
41
+ }
42
+ invalidate(key) {
43
+ const deleted = this.cache.delete(key);
44
+ if (deleted) {
45
+ this.stats.evictions++;
46
+ this.stats.size = this.cache.size;
47
+ }
48
+ return deleted;
49
+ }
50
+ clear() {
51
+ const size = this.cache.size;
52
+ this.cache.clear();
53
+ this.stats.evictions += size;
54
+ this.stats.size = 0;
55
+ }
56
+ has(key) {
57
+ const entry = this.cache.get(key);
58
+ if (!entry)
59
+ return false;
60
+ if (this.isExpired(entry)) {
61
+ this.cache.delete(key);
62
+ this.stats.evictions++;
63
+ this.stats.size = this.cache.size;
64
+ return false;
65
+ }
66
+ return true;
67
+ }
68
+ getStats() {
69
+ return { ...this.stats };
70
+ }
71
+ /** Return all non-expired entries. */
72
+ entries() {
73
+ const result = [];
74
+ for (const [key, entry] of this.cache) {
75
+ if (!this.isExpired(entry)) {
76
+ result.push([key, entry]);
77
+ }
78
+ }
79
+ return result;
80
+ }
81
+ isExpired(entry) {
82
+ return Date.now() - entry.timestamp > entry.ttl;
83
+ }
84
+ }
85
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/sharing/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Conflict Resolution on Import (M5-9, Issue #133)
3
+ */
4
+ import type { SquadConfig } from '../config/schema.js';
5
+ /** Incoming config bundle for conflict detection. */
6
+ export interface IncomingBundle {
7
+ version: string;
8
+ config: Partial<SquadConfig>;
9
+ agents?: Array<{
10
+ name: string;
11
+ charter: string;
12
+ }>;
13
+ skills?: Array<{
14
+ id: string;
15
+ content: string;
16
+ }>;
17
+ }
18
+ export type ConflictType = 'added' | 'modified' | 'removed';
19
+ export interface Conflict {
20
+ path: string;
21
+ existingValue: unknown;
22
+ incomingValue: unknown;
23
+ type: ConflictType;
24
+ }
25
+ export type ConflictStrategy = 'keep-existing' | 'use-incoming' | 'merge' | 'manual';
26
+ /** Detect conflicts between an existing config and an incoming bundle. */
27
+ export declare function detectConflicts(existing: SquadConfig, incoming: IncomingBundle): Conflict[];
28
+ /** Resolve conflicts using the given strategy. Returns a merged SquadConfig. */
29
+ export declare function resolveConflicts(existing: SquadConfig, conflicts: Conflict[], strategy: ConflictStrategy): SquadConfig;
30
+ /** Generate a human-readable markdown conflict report. */
31
+ export declare function generateConflictReport(conflicts: Conflict[]): string;
32
+ //# sourceMappingURL=conflicts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflicts.d.ts","sourceRoot":"","sources":["../../src/sharing/conflicts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD,qDAAqD;AACrD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG,cAAc,GAAG,OAAO,GAAG,QAAQ,CAAC;AA2BrF,0EAA0E;AAC1E,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,WAAW,EACrB,QAAQ,EAAE,cAAc,GACvB,QAAQ,EAAE,CAuBZ;AAID,gFAAgF;AAChF,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,WAAW,EACrB,SAAS,EAAE,QAAQ,EAAE,EACrB,QAAQ,EAAE,gBAAgB,GACzB,WAAW,CA4Bb;AAID,0DAA0D;AAC1D,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CAqBpE"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Conflict Resolution on Import (M5-9, Issue #133)
3
+ */
4
+ // --- Detection ---
5
+ /** Flatten an object into dotted key paths. */
6
+ function flattenObject(obj, prefix = '') {
7
+ const result = new Map();
8
+ for (const [key, value] of Object.entries(obj)) {
9
+ const fullKey = prefix ? `${prefix}.${key}` : key;
10
+ if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
11
+ for (const [k, v] of flattenObject(value, fullKey)) {
12
+ result.set(k, v);
13
+ }
14
+ }
15
+ else {
16
+ result.set(fullKey, value);
17
+ }
18
+ }
19
+ return result;
20
+ }
21
+ function valuesEqual(a, b) {
22
+ return JSON.stringify(a) === JSON.stringify(b);
23
+ }
24
+ /** Detect conflicts between an existing config and an incoming bundle. */
25
+ export function detectConflicts(existing, incoming) {
26
+ const conflicts = [];
27
+ const existingFlat = flattenObject(existing);
28
+ const incomingFlat = flattenObject(incoming.config);
29
+ // Check incoming keys against existing
30
+ for (const [path, incomingValue] of incomingFlat) {
31
+ const existingValue = existingFlat.get(path);
32
+ if (existingValue === undefined) {
33
+ conflicts.push({ path, existingValue: undefined, incomingValue, type: 'added' });
34
+ }
35
+ else if (!valuesEqual(existingValue, incomingValue)) {
36
+ conflicts.push({ path, existingValue, incomingValue, type: 'modified' });
37
+ }
38
+ }
39
+ // Check for keys in existing that are missing from incoming (removed)
40
+ for (const [path, existingValue] of existingFlat) {
41
+ if (!incomingFlat.has(path)) {
42
+ conflicts.push({ path, existingValue, incomingValue: undefined, type: 'removed' });
43
+ }
44
+ }
45
+ return conflicts;
46
+ }
47
+ // --- Resolution ---
48
+ /** Resolve conflicts using the given strategy. Returns a merged SquadConfig. */
49
+ export function resolveConflicts(existing, conflicts, strategy) {
50
+ if (strategy === 'keep-existing') {
51
+ return { ...existing };
52
+ }
53
+ if (strategy === 'manual') {
54
+ return { ...existing };
55
+ }
56
+ // Clone via JSON round-trip
57
+ const result = JSON.parse(JSON.stringify(existing));
58
+ for (const conflict of conflicts) {
59
+ if (strategy === 'use-incoming') {
60
+ if (conflict.type === 'removed') {
61
+ deletePath(result, conflict.path);
62
+ }
63
+ else {
64
+ setPath(result, conflict.path, conflict.incomingValue);
65
+ }
66
+ }
67
+ else if (strategy === 'merge') {
68
+ if (conflict.type === 'added') {
69
+ setPath(result, conflict.path, conflict.incomingValue);
70
+ }
71
+ // 'modified' keeps existing, 'removed' keeps existing
72
+ }
73
+ }
74
+ return result;
75
+ }
76
+ // --- Report ---
77
+ /** Generate a human-readable markdown conflict report. */
78
+ export function generateConflictReport(conflicts) {
79
+ if (conflicts.length === 0)
80
+ return '# Conflict Report\n\nNo conflicts detected.\n';
81
+ const lines = [
82
+ '# Conflict Report',
83
+ '',
84
+ `**${conflicts.length}** conflict(s) detected.`,
85
+ '',
86
+ '| # | Path | Type | Existing | Incoming |',
87
+ '|---|------|------|----------|----------|',
88
+ ];
89
+ let i = 1;
90
+ for (const c of conflicts) {
91
+ const existing = c.existingValue === undefined ? '_(none)_' : `\`${JSON.stringify(c.existingValue)}\``;
92
+ const incoming = c.incomingValue === undefined ? '_(none)_' : `\`${JSON.stringify(c.incomingValue)}\``;
93
+ lines.push(`| ${i++} | \`${c.path}\` | ${c.type} | ${existing} | ${incoming} |`);
94
+ }
95
+ lines.push('');
96
+ return lines.join('\n');
97
+ }
98
+ // --- Helpers ---
99
+ function setPath(obj, dotPath, value) {
100
+ const parts = dotPath.split('.');
101
+ let current = obj;
102
+ for (let i = 0; i < parts.length - 1; i++) {
103
+ if (!(parts[i] in current) || typeof current[parts[i]] !== 'object') {
104
+ current[parts[i]] = {};
105
+ }
106
+ current = current[parts[i]];
107
+ }
108
+ current[parts[parts.length - 1]] = value;
109
+ }
110
+ function deletePath(obj, dotPath) {
111
+ const parts = dotPath.split('.');
112
+ let current = obj;
113
+ for (let i = 0; i < parts.length - 1; i++) {
114
+ if (!(parts[i] in current) || typeof current[parts[i]] !== 'object') {
115
+ return;
116
+ }
117
+ current = current[parts[i]];
118
+ }
119
+ delete current[parts[parts.length - 1]];
120
+ }
121
+ //# sourceMappingURL=conflicts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflicts.js","sourceRoot":"","sources":["../../src/sharing/conflicts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * M5-1: Export command (squad export)
3
+ * Exports Squad configuration as a portable bundle.
4
+ */
5
+ export interface ExportOptions {
6
+ includeHistory?: boolean;
7
+ includeSkills?: boolean;
8
+ format?: 'json' | 'yaml';
9
+ anonymize?: boolean;
10
+ }
11
+ export interface AgentCharter {
12
+ name: string;
13
+ role: string;
14
+ content: string;
15
+ }
16
+ export interface ExportRoutingRule {
17
+ pattern: string;
18
+ agent: string;
19
+ priority?: number;
20
+ }
21
+ export interface ExportMetadata {
22
+ version: string;
23
+ timestamp: string;
24
+ source: string;
25
+ }
26
+ export interface ExportBundle {
27
+ config: Record<string, unknown>;
28
+ agents: AgentCharter[];
29
+ skills: string[];
30
+ routingRules: ExportRoutingRule[];
31
+ metadata: ExportMetadata;
32
+ history?: Record<string, unknown>[];
33
+ }
34
+ /**
35
+ * Strip secrets and sensitive patterns from text content.
36
+ */
37
+ export declare function sanitizeContent(content: string): string;
38
+ /**
39
+ * Anonymize PII and local paths from content.
40
+ */
41
+ export declare function anonymizeContent(content: string): string;
42
+ /**
43
+ * Export a Squad project configuration as a bundle.
44
+ */
45
+ export declare function exportSquadConfig(projectDir: string, options?: ExportOptions): ExportBundle;
46
+ /**
47
+ * Serialize an export bundle to a string.
48
+ */
49
+ export declare function serializeBundle(bundle: ExportBundle, format?: 'json' | 'yaml'): string;
50
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/sharing/export.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CACrC;AAWD;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQxD;AAuCD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,YAAY,CA6C3F;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAKtF"}