@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,103 @@
1
+ /**
2
+ * Hook Pipeline — Hooks & Policy Enforcement (PRD 3)
3
+ *
4
+ * Programmatic enforcement of governance policies via SDK hooks.
5
+ * Replaces prompt-level rules with deterministic, testable handlers.
6
+ *
7
+ * Hook types:
8
+ * - onPreToolUse: Intercept tool calls before execution (block/allow/modify)
9
+ * - onPostToolUse: Inspect tool results after execution (scrub PII, log)
10
+ * - onSessionStart: Inject context at session creation
11
+ * - onSessionEnd: Cleanup at session teardown
12
+ * - onErrorOccurred: Handle errors from SDK or tools
13
+ */
14
+ export type HookAction = 'allow' | 'block' | 'modify';
15
+ export interface PreToolUseContext {
16
+ /** Name of the tool being called */
17
+ toolName: string;
18
+ /** Arguments passed to the tool */
19
+ arguments: Record<string, unknown>;
20
+ /** Agent name that invoked the tool */
21
+ agentName: string;
22
+ /** Session ID */
23
+ sessionId: string;
24
+ }
25
+ export interface PreToolUseResult {
26
+ action: HookAction;
27
+ /** Modified arguments (only if action === 'modify') */
28
+ modifiedArguments?: Record<string, unknown>;
29
+ /** Reason for blocking (only if action === 'block') */
30
+ reason?: string;
31
+ }
32
+ export interface PostToolUseContext {
33
+ toolName: string;
34
+ arguments: Record<string, unknown>;
35
+ result: unknown;
36
+ agentName: string;
37
+ sessionId: string;
38
+ }
39
+ export interface PostToolUseResult {
40
+ /** Scrubbed or modified result */
41
+ result: unknown;
42
+ }
43
+ export type PreToolUseHook = (ctx: PreToolUseContext) => PreToolUseResult | Promise<PreToolUseResult>;
44
+ export type PostToolUseHook = (ctx: PostToolUseContext) => PostToolUseResult | Promise<PostToolUseResult>;
45
+ export interface PolicyConfig {
46
+ /** File paths agents are allowed to write to (glob patterns) */
47
+ allowedWritePaths?: string[];
48
+ /** Shell commands that are always blocked */
49
+ blockedCommands?: string[];
50
+ /** Maximum ask_user calls per session */
51
+ maxAskUserPerSession?: number;
52
+ /** Enable PII scrubbing on tool outputs */
53
+ scrubPii?: boolean;
54
+ /** Enable reviewer lockout protocol */
55
+ reviewerLockout?: boolean;
56
+ }
57
+ export declare const DEFAULT_BLOCKED_COMMANDS: string[];
58
+ export declare class HookPipeline {
59
+ private preToolHooks;
60
+ private postToolHooks;
61
+ private config;
62
+ private askUserCallCount;
63
+ private reviewerLockout;
64
+ constructor(config?: PolicyConfig);
65
+ /** Register a pre-tool-use hook */
66
+ addPreToolHook(hook: PreToolUseHook): void;
67
+ /** Register a post-tool-use hook */
68
+ addPostToolHook(hook: PostToolUseHook): void;
69
+ /** Run all pre-tool hooks in order. First 'block' wins. */
70
+ runPreToolHooks(ctx: PreToolUseContext): Promise<PreToolUseResult>;
71
+ /** Run all post-tool hooks in order */
72
+ runPostToolHooks(ctx: PostToolUseContext): Promise<PostToolUseResult>;
73
+ /** Create file-write guard hook */
74
+ private createFileWriteGuard;
75
+ /** Create shell command restriction hook */
76
+ private createShellCommandRestriction;
77
+ /** Create ask_user rate limiter hook */
78
+ private createAskUserRateLimiter;
79
+ /** Create PII scrubbing hook */
80
+ private createPiiScrubber;
81
+ /** Recursively scrub PII from object */
82
+ private scrubObjectRecursive;
83
+ /** Simple glob matcher (supports * and **) */
84
+ private matchGlob;
85
+ /** Get the reviewer lockout hook instance */
86
+ getReviewerLockout(): ReviewerLockoutHook;
87
+ }
88
+ export declare class ReviewerLockoutHook {
89
+ private lockoutRegistry;
90
+ /** Lock out an agent from an artifact */
91
+ lockout(artifactId: string, agentName: string): void;
92
+ /** Check if an agent is locked out of an artifact */
93
+ isLockedOut(artifactId: string, agentName: string): boolean;
94
+ /** Clear lockout for an artifact */
95
+ clearLockout(artifactId: string): void;
96
+ /** Get all lockouts for an artifact */
97
+ getLockedAgents(artifactId: string): string[];
98
+ /** Clear all lockouts */
99
+ clearAll(): void;
100
+ /** Create pre-tool-use hook for reviewer lockout */
101
+ createHook(): PreToolUseHook;
102
+ }
103
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,279 @@
1
+ /**
2
+ * Hook Pipeline — Hooks & Policy Enforcement (PRD 3)
3
+ *
4
+ * Programmatic enforcement of governance policies via SDK hooks.
5
+ * Replaces prompt-level rules with deterministic, testable handlers.
6
+ *
7
+ * Hook types:
8
+ * - onPreToolUse: Intercept tool calls before execution (block/allow/modify)
9
+ * - onPostToolUse: Inspect tool results after execution (scrub PII, log)
10
+ * - onSessionStart: Inject context at session creation
11
+ * - onSessionEnd: Cleanup at session teardown
12
+ * - onErrorOccurred: Handle errors from SDK or tools
13
+ */
14
+ export const DEFAULT_BLOCKED_COMMANDS = [
15
+ 'rm -rf',
16
+ 'git push --force',
17
+ 'git rebase',
18
+ 'git reset --hard',
19
+ ];
20
+ // --- Hook Pipeline ---
21
+ export class HookPipeline {
22
+ preToolHooks = [];
23
+ postToolHooks = [];
24
+ config;
25
+ askUserCallCount = new Map();
26
+ reviewerLockout;
27
+ constructor(config = {}) {
28
+ this.config = config;
29
+ this.reviewerLockout = new ReviewerLockoutHook();
30
+ // Register file-write guard hook
31
+ if (config.allowedWritePaths && config.allowedWritePaths.length > 0) {
32
+ this.addPreToolHook(this.createFileWriteGuard(config.allowedWritePaths));
33
+ }
34
+ // Register shell command restriction hook
35
+ const blockedCommands = config.blockedCommands || DEFAULT_BLOCKED_COMMANDS;
36
+ if (blockedCommands.length > 0) {
37
+ this.addPreToolHook(this.createShellCommandRestriction(blockedCommands));
38
+ }
39
+ // Register ask_user rate limiter
40
+ if (config.maxAskUserPerSession !== undefined && config.maxAskUserPerSession > 0) {
41
+ this.addPreToolHook(this.createAskUserRateLimiter(config.maxAskUserPerSession));
42
+ }
43
+ // Register reviewer lockout hook
44
+ if (config.reviewerLockout) {
45
+ this.addPreToolHook(this.reviewerLockout.createHook());
46
+ }
47
+ // Register PII scrubbing hook
48
+ if (config.scrubPii) {
49
+ this.addPostToolHook(this.createPiiScrubber());
50
+ }
51
+ }
52
+ /** Register a pre-tool-use hook */
53
+ addPreToolHook(hook) {
54
+ this.preToolHooks.push(hook);
55
+ }
56
+ /** Register a post-tool-use hook */
57
+ addPostToolHook(hook) {
58
+ this.postToolHooks.push(hook);
59
+ }
60
+ /** Run all pre-tool hooks in order. First 'block' wins. */
61
+ async runPreToolHooks(ctx) {
62
+ for (const hook of this.preToolHooks) {
63
+ const result = await hook(ctx);
64
+ if (result.action === 'block')
65
+ return result;
66
+ if (result.action === 'modify' && result.modifiedArguments) {
67
+ ctx = { ...ctx, arguments: result.modifiedArguments };
68
+ }
69
+ }
70
+ return { action: 'allow' };
71
+ }
72
+ /** Run all post-tool hooks in order */
73
+ async runPostToolHooks(ctx) {
74
+ let result = ctx.result;
75
+ for (const hook of this.postToolHooks) {
76
+ const hookResult = await hook({ ...ctx, result });
77
+ result = hookResult.result;
78
+ }
79
+ return { result };
80
+ }
81
+ /** Create file-write guard hook */
82
+ createFileWriteGuard(allowedPaths) {
83
+ return (ctx) => {
84
+ const writeTools = ['edit', 'create', 'write_file', 'create_file'];
85
+ if (!writeTools.includes(ctx.toolName)) {
86
+ return { action: 'allow' };
87
+ }
88
+ const filePath = ctx.arguments.path || ctx.arguments.file_path;
89
+ if (!filePath || typeof filePath !== 'string') {
90
+ return { action: 'allow' };
91
+ }
92
+ const isAllowed = allowedPaths.some(pattern => this.matchGlob(filePath, pattern));
93
+ if (!isAllowed) {
94
+ console.warn('[HookPipeline] File write blocked', {
95
+ agent: ctx.agentName,
96
+ tool: ctx.toolName,
97
+ path: filePath,
98
+ allowedPaths,
99
+ });
100
+ return {
101
+ action: 'block',
102
+ reason: `File write blocked: "${filePath}" does not match allowed paths. Allowed patterns: ${allowedPaths.join(', ')}`,
103
+ };
104
+ }
105
+ return { action: 'allow' };
106
+ };
107
+ }
108
+ /** Create shell command restriction hook */
109
+ createShellCommandRestriction(blockedCommands) {
110
+ return (ctx) => {
111
+ const shellTools = ['powershell', 'bash', 'shell', 'exec'];
112
+ if (!shellTools.includes(ctx.toolName)) {
113
+ return { action: 'allow' };
114
+ }
115
+ const command = ctx.arguments.command || ctx.arguments.cmd;
116
+ if (!command || typeof command !== 'string') {
117
+ return { action: 'allow' };
118
+ }
119
+ for (const blocked of blockedCommands) {
120
+ if (command.includes(blocked)) {
121
+ console.warn('[HookPipeline] Shell command blocked', {
122
+ agent: ctx.agentName,
123
+ tool: ctx.toolName,
124
+ command,
125
+ blockedPattern: blocked,
126
+ });
127
+ return {
128
+ action: 'block',
129
+ reason: `Shell command blocked: Command contains prohibited pattern "${blocked}". Blocked commands: ${blockedCommands.join(', ')}`,
130
+ };
131
+ }
132
+ }
133
+ return { action: 'allow' };
134
+ };
135
+ }
136
+ /** Create ask_user rate limiter hook */
137
+ createAskUserRateLimiter(maxCalls) {
138
+ return (ctx) => {
139
+ if (ctx.toolName !== 'ask_user') {
140
+ return { action: 'allow' };
141
+ }
142
+ const currentCount = this.askUserCallCount.get(ctx.sessionId) || 0;
143
+ if (currentCount >= maxCalls) {
144
+ console.warn('[HookPipeline] ask_user rate limit exceeded', {
145
+ agent: ctx.agentName,
146
+ sessionId: ctx.sessionId,
147
+ currentCount,
148
+ maxCalls,
149
+ });
150
+ return {
151
+ action: 'block',
152
+ reason: `ask_user rate limit exceeded: ${currentCount}/${maxCalls} calls used for this session. The agent should proceed without user input.`,
153
+ };
154
+ }
155
+ this.askUserCallCount.set(ctx.sessionId, currentCount + 1);
156
+ return { action: 'allow' };
157
+ };
158
+ }
159
+ /** Create PII scrubbing hook */
160
+ createPiiScrubber() {
161
+ const emailRegex = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g;
162
+ return (ctx) => {
163
+ let result = ctx.result;
164
+ if (typeof result === 'string') {
165
+ const scrubbed = result.replace(emailRegex, '[EMAIL_REDACTED]');
166
+ if (scrubbed !== result) {
167
+ console.warn('[HookPipeline] PII scrubbed from tool output', {
168
+ tool: ctx.toolName,
169
+ agent: ctx.agentName,
170
+ sessionId: ctx.sessionId,
171
+ });
172
+ result = scrubbed;
173
+ }
174
+ }
175
+ else if (result && typeof result === 'object') {
176
+ result = this.scrubObjectRecursive(result, emailRegex);
177
+ }
178
+ return { result };
179
+ };
180
+ }
181
+ /** Recursively scrub PII from object */
182
+ scrubObjectRecursive(obj, regex) {
183
+ if (typeof obj === 'string') {
184
+ return obj.replace(regex, '[EMAIL_REDACTED]');
185
+ }
186
+ if (Array.isArray(obj)) {
187
+ return obj.map(item => this.scrubObjectRecursive(item, regex));
188
+ }
189
+ if (obj && typeof obj === 'object') {
190
+ const scrubbed = {};
191
+ for (const [key, value] of Object.entries(obj)) {
192
+ scrubbed[key] = this.scrubObjectRecursive(value, regex);
193
+ }
194
+ return scrubbed;
195
+ }
196
+ return obj;
197
+ }
198
+ /** Simple glob matcher (supports * and **) */
199
+ matchGlob(path, pattern) {
200
+ // Normalize path separators
201
+ const normalizedPath = path.replace(/\\/g, '/');
202
+ const normalizedPattern = pattern.replace(/\\/g, '/');
203
+ // Convert glob pattern to regex (escape . first, then handle wildcards)
204
+ let regexPattern = normalizedPattern
205
+ .replace(/\./g, '\\.') // Escape literal dots first
206
+ .replace(/\*\*/g, '___DOUBLESTAR___') // Placeholder for **
207
+ .replace(/\*/g, '[^/]*') // Single * matches within path segment
208
+ .replace(/___DOUBLESTAR___/g, '.*') // ** matches across segments
209
+ .replace(/\?/g, '.'); // ? matches single char
210
+ const regex = new RegExp(`^${regexPattern}$`);
211
+ return regex.test(normalizedPath);
212
+ }
213
+ /** Get the reviewer lockout hook instance */
214
+ getReviewerLockout() {
215
+ return this.reviewerLockout;
216
+ }
217
+ }
218
+ // --- Reviewer Lockout Hook ---
219
+ export class ReviewerLockoutHook {
220
+ lockoutRegistry = new Map();
221
+ /** Lock out an agent from an artifact */
222
+ lockout(artifactId, agentName) {
223
+ if (!this.lockoutRegistry.has(artifactId)) {
224
+ this.lockoutRegistry.set(artifactId, new Set());
225
+ }
226
+ this.lockoutRegistry.get(artifactId).add(agentName);
227
+ }
228
+ /** Check if an agent is locked out of an artifact */
229
+ isLockedOut(artifactId, agentName) {
230
+ const lockedAgents = this.lockoutRegistry.get(artifactId);
231
+ return lockedAgents ? lockedAgents.has(agentName) : false;
232
+ }
233
+ /** Clear lockout for an artifact */
234
+ clearLockout(artifactId) {
235
+ this.lockoutRegistry.delete(artifactId);
236
+ }
237
+ /** Get all lockouts for an artifact */
238
+ getLockedAgents(artifactId) {
239
+ const lockedAgents = this.lockoutRegistry.get(artifactId);
240
+ return lockedAgents ? Array.from(lockedAgents) : [];
241
+ }
242
+ /** Clear all lockouts */
243
+ clearAll() {
244
+ this.lockoutRegistry.clear();
245
+ }
246
+ /** Create pre-tool-use hook for reviewer lockout */
247
+ createHook() {
248
+ return (ctx) => {
249
+ const writeTools = ['edit', 'create', 'write_file', 'create_file'];
250
+ if (!writeTools.includes(ctx.toolName)) {
251
+ return { action: 'allow' };
252
+ }
253
+ const filePath = ctx.arguments.path || ctx.arguments.file_path;
254
+ if (!filePath || typeof filePath !== 'string') {
255
+ return { action: 'allow' };
256
+ }
257
+ // Check all artifacts to see if this agent is locked out
258
+ for (const [artifactId, lockedAgents] of this.lockoutRegistry.entries()) {
259
+ if (lockedAgents.has(ctx.agentName)) {
260
+ // Agent is locked out of this artifact — check if file belongs to it
261
+ // Simple heuristic: artifact ID is typically a file path or pattern
262
+ if (filePath.includes(artifactId) || artifactId.includes(filePath)) {
263
+ console.warn('[HookPipeline] Reviewer lockout triggered', {
264
+ agent: ctx.agentName,
265
+ artifactId,
266
+ filePath,
267
+ });
268
+ return {
269
+ action: 'block',
270
+ reason: `Reviewer lockout: Agent "${ctx.agentName}" is locked out of artifact "${artifactId}". Another reviewer must handle this artifact.`,
271
+ };
272
+ }
273
+ }
274
+ }
275
+ return { action: 'allow' };
276
+ };
277
+ }
278
+ }
279
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,34 @@
1
- export declare const VERSION = "0.6.0-alpha.0";
1
+ /**
2
+ * Squad SDK — Public API barrel export.
3
+ * This module has ZERO side effects. Safe to import as a library.
4
+ * CLI entry point lives in src/cli-entry.ts.
5
+ */
6
+ export declare const VERSION: string;
7
+ export { resolveSquad, resolveGlobalSquadPath, ensureSquadPath } from './resolution.js';
8
+ export { MODELS, TIMEOUTS, AGENT_ROLES } from './runtime/constants.js';
9
+ export * from './config/index.js';
10
+ export * from './agents/onboarding.js';
11
+ export * from './casting/index.js';
12
+ export * from './skills/index.js';
13
+ export { selectResponseTier, getTier } from './coordinator/response-tiers.js';
14
+ export type { ResponseTier, TierName, TierContext, ModelTierSuggestion } from './coordinator/response-tiers.js';
15
+ export { loadConfig, loadConfigSync } from './runtime/config.js';
16
+ export type { ConfigLoadResult, ConfigValidationError } from './runtime/config.js';
17
+ export * from './runtime/streaming.js';
18
+ export * from './runtime/cost-tracker.js';
19
+ export * from './runtime/telemetry.js';
20
+ export * from './runtime/offline.js';
21
+ export * from './runtime/i18n.js';
22
+ export * from './runtime/benchmarks.js';
23
+ export * from './runtime/otel.js';
24
+ export { createOTelTransport, bridgeEventBusToOTel } from './runtime/otel-bridge.js';
25
+ export * from './runtime/otel-metrics.js';
26
+ export { initSquadTelemetry } from './runtime/otel-init.js';
27
+ export type { SquadTelemetryOptions, SquadTelemetryHandle } from './runtime/otel-init.js';
28
+ export { SquadObserver, classifyFile } from './runtime/squad-observer.js';
29
+ export type { SquadFileChange, SquadFileCategory, SquadObserverConfig } from './runtime/squad-observer.js';
30
+ export * from './marketplace/index.js';
31
+ export * from './build/index.js';
32
+ export * from './sharing/index.js';
33
+ export * from './upstream/index.js';
2
34
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,eAAO,MAAM,OAAO,EAAE,MAAoB,CAAC;AAG3C,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACvE,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC9E,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAChH,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACjE,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACnF,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrF,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC1E,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAE3G,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,34 @@
1
- // Full source migration from src/ comes in a later milestone.
2
- // This entry point allows the insider publish pipeline to produce a valid package.
3
- export const VERSION = '0.6.0-alpha.0';
1
+ /**
2
+ * Squad SDK Public API barrel export.
3
+ * This module has ZERO side effects. Safe to import as a library.
4
+ * CLI entry point lives in src/cli-entry.ts.
5
+ */
6
+ import { createRequire } from 'module';
7
+ const require = createRequire(import.meta.url);
8
+ const pkg = require('../package.json');
9
+ export const VERSION = pkg.version;
10
+ // Export public API
11
+ export { resolveSquad, resolveGlobalSquadPath, ensureSquadPath } from './resolution.js';
12
+ export { MODELS, TIMEOUTS, AGENT_ROLES } from './runtime/constants.js';
13
+ export * from './config/index.js';
14
+ export * from './agents/onboarding.js';
15
+ export * from './casting/index.js';
16
+ export * from './skills/index.js';
17
+ export { selectResponseTier, getTier } from './coordinator/response-tiers.js';
18
+ export { loadConfig, loadConfigSync } from './runtime/config.js';
19
+ export * from './runtime/streaming.js';
20
+ export * from './runtime/cost-tracker.js';
21
+ export * from './runtime/telemetry.js';
22
+ export * from './runtime/offline.js';
23
+ export * from './runtime/i18n.js';
24
+ export * from './runtime/benchmarks.js';
25
+ export * from './runtime/otel.js';
26
+ export { createOTelTransport, bridgeEventBusToOTel } from './runtime/otel-bridge.js';
27
+ export * from './runtime/otel-metrics.js';
28
+ export { initSquadTelemetry } from './runtime/otel-init.js';
29
+ export { SquadObserver, classifyFile } from './runtime/squad-observer.js';
30
+ export * from './marketplace/index.js';
31
+ export * from './build/index.js';
32
+ export * from './sharing/index.js';
33
+ export * from './upstream/index.js';
4
34
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,mFAAmF;AAEnF,MAAM,CAAC,MAAM,OAAO,GAAG,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AACvC,MAAM,CAAC,MAAM,OAAO,GAAW,GAAG,CAAC,OAAO,CAAC;AAE3C,oBAAoB;AACpB,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACvE,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAE9E,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEjE,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrF,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG1E,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Marketplace Backend — reference/mock implementation of marketplace API
3
+ * Issue #139 (M5-12)
4
+ */
5
+ import type { MarketplaceManifest } from './index.js';
6
+ import type { MarketplaceEntry, MarketplaceSearchQuery, MarketplaceSearchResult } from './schema.js';
7
+ export interface PublishResult {
8
+ success: boolean;
9
+ url?: string;
10
+ warnings: string[];
11
+ error?: string;
12
+ }
13
+ export interface OperationResult {
14
+ success: boolean;
15
+ error?: string;
16
+ }
17
+ export declare class MarketplaceBackend {
18
+ private entries;
19
+ private packages;
20
+ /** List entries with search/pagination */
21
+ listEntries(query: MarketplaceSearchQuery): MarketplaceSearchResult;
22
+ /** Get a single entry by ID */
23
+ getEntry(id: string): MarketplaceEntry | null;
24
+ /** Publish a new entry */
25
+ publishEntry(manifest: MarketplaceManifest, pkg: Buffer): PublishResult;
26
+ /** Unpublish an entry */
27
+ unpublishEntry(id: string): OperationResult;
28
+ /** Update an existing entry's manifest */
29
+ updateEntry(id: string, manifest: MarketplaceManifest): OperationResult;
30
+ /** Get package buffer */
31
+ getPackage(id: string): Buffer | null;
32
+ /** Build a MarketplaceIndex from current entries */
33
+ private buildIndex;
34
+ }
35
+ //# sourceMappingURL=backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/marketplace/backend.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EACV,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EAExB,MAAM,aAAa,CAAC;AAKrB,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,QAAQ,CAAkC;IAElD,0CAA0C;IAC1C,WAAW,CAAC,KAAK,EAAE,sBAAsB,GAAG,uBAAuB;IAKnE,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAI7C,0BAA0B;IAC1B,YAAY,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa;IA0CvE,yBAAyB;IACzB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe;IAU3C,0CAA0C;IAC1C,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,GAAG,eAAe;IAevE,yBAAyB;IACzB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIrC,oDAAoD;IACpD,OAAO,CAAC,UAAU;CAiBnB"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Marketplace Backend — reference/mock implementation of marketplace API
3
+ * Issue #139 (M5-12)
4
+ */
5
+ import { searchMarketplace, validateEntry } from './schema.js';
6
+ // --- MarketplaceBackend (reference/mock) ---
7
+ export class MarketplaceBackend {
8
+ entries = new Map();
9
+ packages = new Map();
10
+ /** List entries with search/pagination */
11
+ listEntries(query) {
12
+ const index = this.buildIndex();
13
+ return searchMarketplace(index, query);
14
+ }
15
+ /** Get a single entry by ID */
16
+ getEntry(id) {
17
+ return this.entries.get(id) ?? null;
18
+ }
19
+ /** Publish a new entry */
20
+ publishEntry(manifest, pkg) {
21
+ const warnings = [];
22
+ const id = manifest.name;
23
+ if (this.entries.has(id)) {
24
+ return { success: false, warnings: [], error: `Entry already exists: ${id}` };
25
+ }
26
+ if (!manifest.name || !manifest.version) {
27
+ return { success: false, warnings: [], error: 'name and version are required' };
28
+ }
29
+ if (pkg.length === 0) {
30
+ warnings.push('Package is empty — this may indicate a build issue');
31
+ }
32
+ const now = new Date().toISOString();
33
+ const entry = {
34
+ id,
35
+ manifest,
36
+ stats: { downloads: 0, rating: 0, reviews: 0 },
37
+ verified: false,
38
+ featured: false,
39
+ publishedAt: now,
40
+ updatedAt: now,
41
+ };
42
+ const validation = validateEntry(entry);
43
+ if (!validation.valid) {
44
+ return { success: false, warnings: [], error: validation.errors.join('; ') };
45
+ }
46
+ this.entries.set(id, entry);
47
+ this.packages.set(id, pkg);
48
+ return {
49
+ success: true,
50
+ url: `https://marketplace.squad.dev/extensions/${id}`,
51
+ warnings,
52
+ };
53
+ }
54
+ /** Unpublish an entry */
55
+ unpublishEntry(id) {
56
+ if (!this.entries.has(id)) {
57
+ return { success: false, error: `Entry not found: ${id}` };
58
+ }
59
+ this.entries.delete(id);
60
+ this.packages.delete(id);
61
+ return { success: true };
62
+ }
63
+ /** Update an existing entry's manifest */
64
+ updateEntry(id, manifest) {
65
+ const existing = this.entries.get(id);
66
+ if (!existing) {
67
+ return { success: false, error: `Entry not found: ${id}` };
68
+ }
69
+ this.entries.set(id, {
70
+ ...existing,
71
+ manifest,
72
+ updatedAt: new Date().toISOString(),
73
+ });
74
+ return { success: true };
75
+ }
76
+ /** Get package buffer */
77
+ getPackage(id) {
78
+ return this.packages.get(id) ?? null;
79
+ }
80
+ /** Build a MarketplaceIndex from current entries */
81
+ buildIndex() {
82
+ const allEntries = Array.from(this.entries.values());
83
+ const categories = new Set();
84
+ const tags = new Set();
85
+ for (const entry of allEntries) {
86
+ for (const cat of entry.manifest.categories)
87
+ categories.add(cat);
88
+ for (const tag of entry.manifest.tags)
89
+ tags.add(tag);
90
+ }
91
+ return {
92
+ entries: allEntries,
93
+ categories: [...categories],
94
+ tags: [...tags],
95
+ lastUpdated: new Date().toISOString(),
96
+ };
97
+ }
98
+ }
99
+ //# sourceMappingURL=backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/marketplace/backend.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAkB/D,8CAA8C;AAE9C,MAAM,OAAO,kBAAkB;IACrB,OAAO,GAAkC,IAAI,GAAG,EAAE,CAAC;IACnD,QAAQ,GAAwB,IAAI,GAAG,EAAE,CAAC;IAElD,0CAA0C;IAC1C,WAAW,CAAC,KAA6B;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,OAAO,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,+BAA+B;IAC/B,QAAQ,CAAC,EAAU;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACtC,CAAC;IAED,0BAA0B;IAC1B,YAAY,CAAC,QAA6B,EAAE,GAAW;QACrD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC;QAEzB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,EAAE,CAAC;QAChF,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACxC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC;QAClF,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,QAAQ,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,KAAK,GAAqB;YAC9B,EAAE;YACF,QAAQ;YACR,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;YAC9C,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,GAAG;YAChB,SAAS,EAAE,GAAG;SACf,CAAC;QAEF,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/E,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAE3B,OAAO;YACL,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,4CAA4C,EAAE,EAAE;YACrD,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,cAAc,CAAC,EAAU;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,EAAE,CAAC;QAC7D,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,0CAA0C;IAC1C,WAAW,CAAC,EAAU,EAAE,QAA6B;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,EAAE,CAAC;QAC7D,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE;YACnB,GAAG,QAAQ;YACX,QAAQ;YACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;QAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,yBAAyB;IACzB,UAAU,CAAC,EAAU;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACvC,CAAC;IAED,oDAAoD;IAC5C,UAAU;QAChB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC/B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU;gBAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjE,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI;gBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvD,CAAC;QAED,OAAO;YACL,OAAO,EAAE,UAAU;YACnB,UAAU,EAAE,CAAC,GAAG,UAAU,CAAC;YAC3B,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;YACf,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;IACJ,CAAC;CACF"}