airlock-bot 0.0.1 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +336 -0
  3. package/airlock.service +27 -0
  4. package/dist/allowlist/engine.d.ts +9 -0
  5. package/dist/allowlist/engine.d.ts.map +1 -0
  6. package/dist/allowlist/engine.js +24 -0
  7. package/dist/allowlist/engine.js.map +1 -0
  8. package/dist/allowlist/pattern.d.ts +13 -0
  9. package/dist/allowlist/pattern.d.ts.map +1 -0
  10. package/dist/allowlist/pattern.js +33 -0
  11. package/dist/allowlist/pattern.js.map +1 -0
  12. package/dist/audit/api.d.ts +7 -0
  13. package/dist/audit/api.d.ts.map +1 -0
  14. package/dist/audit/api.js +31 -0
  15. package/dist/audit/api.js.map +1 -0
  16. package/dist/audit/db.d.ts +44 -0
  17. package/dist/audit/db.d.ts.map +1 -0
  18. package/dist/audit/db.js +121 -0
  19. package/dist/audit/db.js.map +1 -0
  20. package/dist/audit/logger.d.ts +25 -0
  21. package/dist/audit/logger.d.ts.map +1 -0
  22. package/dist/audit/logger.js +58 -0
  23. package/dist/audit/logger.js.map +1 -0
  24. package/dist/audit/redactor.d.ts +5 -0
  25. package/dist/audit/redactor.d.ts.map +1 -0
  26. package/dist/audit/redactor.js +27 -0
  27. package/dist/audit/redactor.js.map +1 -0
  28. package/dist/backend/cli/adapter.d.ts +23 -0
  29. package/dist/backend/cli/adapter.d.ts.map +1 -0
  30. package/dist/backend/cli/adapter.js +176 -0
  31. package/dist/backend/cli/adapter.js.map +1 -0
  32. package/dist/backend/cli/builder.d.ts +3 -0
  33. package/dist/backend/cli/builder.d.ts.map +1 -0
  34. package/dist/backend/cli/builder.js +52 -0
  35. package/dist/backend/cli/builder.js.map +1 -0
  36. package/dist/backend/cli/escaper.d.ts +2 -0
  37. package/dist/backend/cli/escaper.d.ts.map +1 -0
  38. package/dist/backend/cli/escaper.js +8 -0
  39. package/dist/backend/cli/escaper.js.map +1 -0
  40. package/dist/backend/exec-adapter.d.ts +13 -0
  41. package/dist/backend/exec-adapter.d.ts.map +1 -0
  42. package/dist/backend/exec-adapter.js +39 -0
  43. package/dist/backend/exec-adapter.js.map +1 -0
  44. package/dist/backend/factory.d.ts +9 -0
  45. package/dist/backend/factory.d.ts.map +1 -0
  46. package/dist/backend/factory.js +35 -0
  47. package/dist/backend/factory.js.map +1 -0
  48. package/dist/backend/http-adapter.d.ts +15 -0
  49. package/dist/backend/http-adapter.d.ts.map +1 -0
  50. package/dist/backend/http-adapter.js +39 -0
  51. package/dist/backend/http-adapter.js.map +1 -0
  52. package/dist/backend/mcp-adapter.d.ts +14 -0
  53. package/dist/backend/mcp-adapter.d.ts.map +1 -0
  54. package/dist/backend/mcp-adapter.js +38 -0
  55. package/dist/backend/mcp-adapter.js.map +1 -0
  56. package/dist/backend/openapi/adapter.d.ts +17 -0
  57. package/dist/backend/openapi/adapter.d.ts.map +1 -0
  58. package/dist/backend/openapi/adapter.js +144 -0
  59. package/dist/backend/openapi/adapter.js.map +1 -0
  60. package/dist/backend/openapi/parser.d.ts +21 -0
  61. package/dist/backend/openapi/parser.d.ts.map +1 -0
  62. package/dist/backend/openapi/parser.js +145 -0
  63. package/dist/backend/openapi/parser.js.map +1 -0
  64. package/dist/backend/types.d.ts +9 -0
  65. package/dist/backend/types.d.ts.map +1 -0
  66. package/dist/backend/types.js +2 -0
  67. package/dist/backend/types.js.map +1 -0
  68. package/dist/config/loader.d.ts +12 -0
  69. package/dist/config/loader.d.ts.map +1 -0
  70. package/dist/config/loader.js +178 -0
  71. package/dist/config/loader.js.map +1 -0
  72. package/dist/config/profiles.d.ts +12 -0
  73. package/dist/config/profiles.d.ts.map +1 -0
  74. package/dist/config/profiles.js +34 -0
  75. package/dist/config/profiles.js.map +1 -0
  76. package/dist/config/schema.d.ts +2034 -0
  77. package/dist/config/schema.d.ts.map +1 -0
  78. package/dist/config/schema.js +257 -0
  79. package/dist/config/schema.js.map +1 -0
  80. package/dist/config/watcher.d.ts +11 -0
  81. package/dist/config/watcher.d.ts.map +1 -0
  82. package/dist/config/watcher.js +39 -0
  83. package/dist/config/watcher.js.map +1 -0
  84. package/dist/discover/cli.d.ts +2 -0
  85. package/dist/discover/cli.d.ts.map +1 -0
  86. package/dist/discover/cli.js +97 -0
  87. package/dist/discover/cli.js.map +1 -0
  88. package/dist/discover/index.d.ts +19 -0
  89. package/dist/discover/index.d.ts.map +1 -0
  90. package/dist/discover/index.js +70 -0
  91. package/dist/discover/index.js.map +1 -0
  92. package/dist/discover/openapi.d.ts +9 -0
  93. package/dist/discover/openapi.d.ts.map +1 -0
  94. package/dist/discover/openapi.js +47 -0
  95. package/dist/discover/openapi.js.map +1 -0
  96. package/dist/discover/strategies/fig.d.ts +29 -0
  97. package/dist/discover/strategies/fig.d.ts.map +1 -0
  98. package/dist/discover/strategies/fig.js +82 -0
  99. package/dist/discover/strategies/fig.js.map +1 -0
  100. package/dist/discover/strategies/help-parser.d.ts +21 -0
  101. package/dist/discover/strategies/help-parser.d.ts.map +1 -0
  102. package/dist/discover/strategies/help-parser.js +121 -0
  103. package/dist/discover/strategies/help-parser.js.map +1 -0
  104. package/dist/discover/writer.d.ts +5 -0
  105. package/dist/discover/writer.d.ts.map +1 -0
  106. package/dist/discover/writer.js +14 -0
  107. package/dist/discover/writer.js.map +1 -0
  108. package/dist/gateway.d.ts +20 -0
  109. package/dist/gateway.d.ts.map +1 -0
  110. package/dist/gateway.js +125 -0
  111. package/dist/gateway.js.map +1 -0
  112. package/dist/hitl/api.d.ts +7 -0
  113. package/dist/hitl/api.d.ts.map +1 -0
  114. package/dist/hitl/api.js +35 -0
  115. package/dist/hitl/api.js.map +1 -0
  116. package/dist/hitl/batcher.d.ts +11 -0
  117. package/dist/hitl/batcher.d.ts.map +1 -0
  118. package/dist/hitl/batcher.js +37 -0
  119. package/dist/hitl/batcher.js.map +1 -0
  120. package/dist/hitl/engine.d.ts +36 -0
  121. package/dist/hitl/engine.d.ts.map +1 -0
  122. package/dist/hitl/engine.js +150 -0
  123. package/dist/hitl/engine.js.map +1 -0
  124. package/dist/hitl/formatter.d.ts +4 -0
  125. package/dist/hitl/formatter.d.ts.map +1 -0
  126. package/dist/hitl/formatter.js +31 -0
  127. package/dist/hitl/formatter.js.map +1 -0
  128. package/dist/hitl/parser.d.ts +7 -0
  129. package/dist/hitl/parser.d.ts.map +1 -0
  130. package/dist/hitl/parser.js +17 -0
  131. package/dist/hitl/parser.js.map +1 -0
  132. package/dist/hitl/provider-factory.d.ts +4 -0
  133. package/dist/hitl/provider-factory.d.ts.map +1 -0
  134. package/dist/hitl/provider-factory.js +42 -0
  135. package/dist/hitl/provider-factory.js.map +1 -0
  136. package/dist/hitl/providers/composite.d.ts +9 -0
  137. package/dist/hitl/providers/composite.d.ts.map +1 -0
  138. package/dist/hitl/providers/composite.js +23 -0
  139. package/dist/hitl/providers/composite.js.map +1 -0
  140. package/dist/hitl/providers/dashboard.d.ts +17 -0
  141. package/dist/hitl/providers/dashboard.d.ts.map +1 -0
  142. package/dist/hitl/providers/dashboard.js +210 -0
  143. package/dist/hitl/providers/dashboard.js.map +1 -0
  144. package/dist/hitl/providers/macos.d.ts +10 -0
  145. package/dist/hitl/providers/macos.d.ts.map +1 -0
  146. package/dist/hitl/providers/macos.js +65 -0
  147. package/dist/hitl/providers/macos.js.map +1 -0
  148. package/dist/hitl/providers/openclaw.d.ts +21 -0
  149. package/dist/hitl/providers/openclaw.d.ts.map +1 -0
  150. package/dist/hitl/providers/openclaw.js +106 -0
  151. package/dist/hitl/providers/openclaw.js.map +1 -0
  152. package/dist/hitl/providers/slack.d.ts +12 -0
  153. package/dist/hitl/providers/slack.d.ts.map +1 -0
  154. package/dist/hitl/providers/slack.js +24 -0
  155. package/dist/hitl/providers/slack.js.map +1 -0
  156. package/dist/hitl/providers/stdio.d.ts +12 -0
  157. package/dist/hitl/providers/stdio.d.ts.map +1 -0
  158. package/dist/hitl/providers/stdio.js +41 -0
  159. package/dist/hitl/providers/stdio.js.map +1 -0
  160. package/dist/hitl/providers/telegram.d.ts +22 -0
  161. package/dist/hitl/providers/telegram.d.ts.map +1 -0
  162. package/dist/hitl/providers/telegram.js +87 -0
  163. package/dist/hitl/providers/telegram.js.map +1 -0
  164. package/dist/hitl/providers/tui.d.ts +16 -0
  165. package/dist/hitl/providers/tui.d.ts.map +1 -0
  166. package/dist/hitl/providers/tui.js +169 -0
  167. package/dist/hitl/providers/tui.js.map +1 -0
  168. package/dist/hitl/providers/types.d.ts +18 -0
  169. package/dist/hitl/providers/types.d.ts.map +1 -0
  170. package/dist/hitl/providers/types.js +2 -0
  171. package/dist/hitl/providers/types.js.map +1 -0
  172. package/dist/hitl/providers/webhook.d.ts +13 -0
  173. package/dist/hitl/providers/webhook.d.ts.map +1 -0
  174. package/dist/hitl/providers/webhook.js +27 -0
  175. package/dist/hitl/providers/webhook.js.map +1 -0
  176. package/dist/index.d.ts +3 -0
  177. package/dist/index.d.ts.map +1 -0
  178. package/dist/index.js +103 -0
  179. package/dist/index.js.map +1 -0
  180. package/dist/middleware/chain-builder.d.ts +16 -0
  181. package/dist/middleware/chain-builder.d.ts.map +1 -0
  182. package/dist/middleware/chain-builder.js +139 -0
  183. package/dist/middleware/chain-builder.js.map +1 -0
  184. package/dist/middleware/compose.d.ts +3 -0
  185. package/dist/middleware/compose.d.ts.map +1 -0
  186. package/dist/middleware/compose.js +15 -0
  187. package/dist/middleware/compose.js.map +1 -0
  188. package/dist/middleware/core/allowlist.d.ts +3 -0
  189. package/dist/middleware/core/allowlist.d.ts.map +1 -0
  190. package/dist/middleware/core/allowlist.js +23 -0
  191. package/dist/middleware/core/allowlist.js.map +1 -0
  192. package/dist/middleware/core/exec-policy.d.ts +3 -0
  193. package/dist/middleware/core/exec-policy.d.ts.map +1 -0
  194. package/dist/middleware/core/exec-policy.js +30 -0
  195. package/dist/middleware/core/exec-policy.js.map +1 -0
  196. package/dist/middleware/core/execute.d.ts +3 -0
  197. package/dist/middleware/core/execute.d.ts.map +1 -0
  198. package/dist/middleware/core/execute.js +35 -0
  199. package/dist/middleware/core/execute.js.map +1 -0
  200. package/dist/middleware/core/hitl-gate.d.ts +3 -0
  201. package/dist/middleware/core/hitl-gate.d.ts.map +1 -0
  202. package/dist/middleware/core/hitl-gate.js +38 -0
  203. package/dist/middleware/core/hitl-gate.js.map +1 -0
  204. package/dist/middleware/core/rate-limiter.d.ts +10 -0
  205. package/dist/middleware/core/rate-limiter.d.ts.map +1 -0
  206. package/dist/middleware/core/rate-limiter.js +32 -0
  207. package/dist/middleware/core/rate-limiter.js.map +1 -0
  208. package/dist/middleware/core/schema-validator.d.ts +3 -0
  209. package/dist/middleware/core/schema-validator.d.ts.map +1 -0
  210. package/dist/middleware/core/schema-validator.js +31 -0
  211. package/dist/middleware/core/schema-validator.js.map +1 -0
  212. package/dist/middleware/detectors/injection-detector.d.ts +12 -0
  213. package/dist/middleware/detectors/injection-detector.d.ts.map +1 -0
  214. package/dist/middleware/detectors/injection-detector.js +129 -0
  215. package/dist/middleware/detectors/injection-detector.js.map +1 -0
  216. package/dist/middleware/detectors/sensitivity-classifier.d.ts +12 -0
  217. package/dist/middleware/detectors/sensitivity-classifier.d.ts.map +1 -0
  218. package/dist/middleware/detectors/sensitivity-classifier.js +125 -0
  219. package/dist/middleware/detectors/sensitivity-classifier.js.map +1 -0
  220. package/dist/middleware/post/canary-token-injector.d.ts +10 -0
  221. package/dist/middleware/post/canary-token-injector.d.ts.map +1 -0
  222. package/dist/middleware/post/canary-token-injector.js +53 -0
  223. package/dist/middleware/post/canary-token-injector.js.map +1 -0
  224. package/dist/middleware/post/output-injection-detector.d.ts +7 -0
  225. package/dist/middleware/post/output-injection-detector.d.ts.map +1 -0
  226. package/dist/middleware/post/output-injection-detector.js +46 -0
  227. package/dist/middleware/post/output-injection-detector.js.map +1 -0
  228. package/dist/middleware/post/output-size-limiter.d.ts +7 -0
  229. package/dist/middleware/post/output-size-limiter.d.ts.map +1 -0
  230. package/dist/middleware/post/output-size-limiter.js +47 -0
  231. package/dist/middleware/post/output-size-limiter.js.map +1 -0
  232. package/dist/middleware/post/output-summarizer.d.ts +15 -0
  233. package/dist/middleware/post/output-summarizer.d.ts.map +1 -0
  234. package/dist/middleware/post/output-summarizer.js +38 -0
  235. package/dist/middleware/post/output-summarizer.js.map +1 -0
  236. package/dist/middleware/post/strip-query-params.d.ts +3 -0
  237. package/dist/middleware/post/strip-query-params.d.ts.map +1 -0
  238. package/dist/middleware/post/strip-query-params.js +22 -0
  239. package/dist/middleware/post/strip-query-params.js.map +1 -0
  240. package/dist/middleware/post/untrusted-envelope.d.ts +3 -0
  241. package/dist/middleware/post/untrusted-envelope.d.ts.map +1 -0
  242. package/dist/middleware/post/untrusted-envelope.js +10 -0
  243. package/dist/middleware/post/untrusted-envelope.js.map +1 -0
  244. package/dist/middleware/types.d.ts +32 -0
  245. package/dist/middleware/types.d.ts.map +1 -0
  246. package/dist/middleware/types.js +2 -0
  247. package/dist/middleware/types.js.map +1 -0
  248. package/dist/pool/http-client.d.ts +26 -0
  249. package/dist/pool/http-client.d.ts.map +1 -0
  250. package/dist/pool/http-client.js +108 -0
  251. package/dist/pool/http-client.js.map +1 -0
  252. package/dist/pool/oauth-provider.d.ts +34 -0
  253. package/dist/pool/oauth-provider.d.ts.map +1 -0
  254. package/dist/pool/oauth-provider.js +135 -0
  255. package/dist/pool/oauth-provider.js.map +1 -0
  256. package/dist/pool/pool.d.ts +30 -0
  257. package/dist/pool/pool.d.ts.map +1 -0
  258. package/dist/pool/pool.js +119 -0
  259. package/dist/pool/pool.js.map +1 -0
  260. package/dist/pool/required-mcps.d.ts +7 -0
  261. package/dist/pool/required-mcps.d.ts.map +1 -0
  262. package/dist/pool/required-mcps.js +18 -0
  263. package/dist/pool/required-mcps.js.map +1 -0
  264. package/dist/pool/sse-client.d.ts +22 -0
  265. package/dist/pool/sse-client.d.ts.map +1 -0
  266. package/dist/pool/sse-client.js +69 -0
  267. package/dist/pool/sse-client.js.map +1 -0
  268. package/dist/pool/stdio-client.d.ts +24 -0
  269. package/dist/pool/stdio-client.d.ts.map +1 -0
  270. package/dist/pool/stdio-client.js +76 -0
  271. package/dist/pool/stdio-client.js.map +1 -0
  272. package/dist/registry/registry.d.ts +19 -0
  273. package/dist/registry/registry.d.ts.map +1 -0
  274. package/dist/registry/registry.js +85 -0
  275. package/dist/registry/registry.js.map +1 -0
  276. package/dist/registry/sanitizer.d.ts +2 -0
  277. package/dist/registry/sanitizer.d.ts.map +1 -0
  278. package/dist/registry/sanitizer.js +31 -0
  279. package/dist/registry/sanitizer.js.map +1 -0
  280. package/dist/security/blocked-hosts.d.ts +6 -0
  281. package/dist/security/blocked-hosts.d.ts.map +1 -0
  282. package/dist/security/blocked-hosts.js +26 -0
  283. package/dist/security/blocked-hosts.js.map +1 -0
  284. package/dist/security/domain-allowlist.d.ts +7 -0
  285. package/dist/security/domain-allowlist.d.ts.map +1 -0
  286. package/dist/security/domain-allowlist.js +19 -0
  287. package/dist/security/domain-allowlist.js.map +1 -0
  288. package/dist/stdio-mode.d.ts +3 -0
  289. package/dist/stdio-mode.d.ts.map +1 -0
  290. package/dist/stdio-mode.js +130 -0
  291. package/dist/stdio-mode.js.map +1 -0
  292. package/dist/tools/exec.d.ts +20 -0
  293. package/dist/tools/exec.d.ts.map +1 -0
  294. package/dist/tools/exec.js +105 -0
  295. package/dist/tools/exec.js.map +1 -0
  296. package/dist/tools/http.d.ts +13 -0
  297. package/dist/tools/http.d.ts.map +1 -0
  298. package/dist/tools/http.js +99 -0
  299. package/dist/tools/http.js.map +1 -0
  300. package/dist/transport/agent-server.d.ts +26 -0
  301. package/dist/transport/agent-server.d.ts.map +1 -0
  302. package/dist/transport/agent-server.js +54 -0
  303. package/dist/transport/agent-server.js.map +1 -0
  304. package/dist/transport/mcp-normalizer.d.ts +9 -0
  305. package/dist/transport/mcp-normalizer.d.ts.map +1 -0
  306. package/dist/transport/mcp-normalizer.js +12 -0
  307. package/dist/transport/mcp-normalizer.js.map +1 -0
  308. package/dist/transport/sse-server.d.ts +7 -0
  309. package/dist/transport/sse-server.d.ts.map +1 -0
  310. package/dist/transport/sse-server.js +94 -0
  311. package/dist/transport/sse-server.js.map +1 -0
  312. package/dist/transport/stdio-server.d.ts +3 -0
  313. package/dist/transport/stdio-server.d.ts.map +1 -0
  314. package/dist/transport/stdio-server.js +12 -0
  315. package/dist/transport/stdio-server.js.map +1 -0
  316. package/dist/types.d.ts +15 -0
  317. package/dist/types.d.ts.map +1 -0
  318. package/dist/types.js +2 -0
  319. package/dist/types.js.map +1 -0
  320. package/dist/util/id.d.ts +5 -0
  321. package/dist/util/id.d.ts.map +1 -0
  322. package/dist/util/id.js +16 -0
  323. package/dist/util/id.js.map +1 -0
  324. package/dist/util/logger.d.ts +4 -0
  325. package/dist/util/logger.d.ts.map +1 -0
  326. package/dist/util/logger.js +24 -0
  327. package/dist/util/logger.js.map +1 -0
  328. package/examples/claude-code-setup.md +77 -0
  329. package/examples/gateway.yaml +118 -0
  330. package/examples/local-dev.yaml +41 -0
  331. package/examples/openclaw-setup.md +51 -0
  332. package/examples/profiles.yaml +103 -0
  333. package/package.json +80 -3
  334. package/schema.json +943 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,257 @@
1
+ import { z } from 'zod';
2
+ // Env var substitution helper
3
+ function substituteEnvVars(value) {
4
+ return value.replace(/\$\{([^}]+)\}/g, (_, varName) => {
5
+ const val = process.env[varName];
6
+ if (val === undefined) {
7
+ throw new Error(`Required environment variable ${varName} is not set`);
8
+ }
9
+ return val;
10
+ });
11
+ }
12
+ const EnvString = z.string().transform(substituteEnvVars);
13
+ export const McpServerConfig = z.discriminatedUnion('type', [
14
+ z.object({
15
+ type: z.literal('stdio'),
16
+ command: z.string(),
17
+ args: z.array(z.string()).default([]),
18
+ env: z.record(EnvString).optional(),
19
+ }),
20
+ z.object({
21
+ type: z.literal('sse'),
22
+ url: z.string().url(),
23
+ headers: z.record(z.string()).optional(),
24
+ }),
25
+ z.object({
26
+ type: z.literal('http'),
27
+ url: z.string().url(),
28
+ headers: z.record(z.string()).optional(),
29
+ oauth: z.boolean().default(false),
30
+ oauth_callback_port: z.number().int().min(1).max(65535).default(18432),
31
+ }),
32
+ ]);
33
+ export const ProviderConfig = z.union([z.literal('builtin'), McpServerConfig]);
34
+ /** Extract only MCP server configs from the providers map */
35
+ export function getMcpConfigs(providers) {
36
+ const result = {};
37
+ for (const [id, cfg] of Object.entries(providers)) {
38
+ if (cfg !== 'builtin') {
39
+ result[id] = cfg;
40
+ }
41
+ }
42
+ return result;
43
+ }
44
+ /** Extract the set of builtin provider names (e.g. "exec", "http") */
45
+ export function getBuiltinProviders(providers) {
46
+ const result = new Set();
47
+ for (const [id, cfg] of Object.entries(providers)) {
48
+ if (cfg === 'builtin') {
49
+ result.add(id);
50
+ }
51
+ }
52
+ return result;
53
+ }
54
+ export const ToolOverride = z.object({
55
+ description: z.string().optional(),
56
+ });
57
+ export const AgentExecConfig = z.object({
58
+ allow: z.array(z.string()).default([]),
59
+ ask: z.array(z.string()).default([]),
60
+ deny: z.array(z.string()).default([]),
61
+ env: z.record(z.string()).default({}),
62
+ default_timeout_ms: z.number().default(30000),
63
+ });
64
+ export const AgentHttpConfig = z.object({
65
+ domain_allowlist: z.array(z.string()).default([]),
66
+ max_response_bytes: z.number().default(1048576), // 1MB
67
+ timeout_ms: z.number().default(30000),
68
+ });
69
+ export const MiddlewareItemConfig = z
70
+ .object({
71
+ name: z.enum([
72
+ 'schema-validator',
73
+ 'rate-limiter',
74
+ 'untrusted-envelope',
75
+ 'strip-query-params',
76
+ 'output-injection-detector',
77
+ 'canary-token-injector',
78
+ 'output-size-limiter',
79
+ 'output-summarizer',
80
+ 'injection-detector',
81
+ 'sensitivity-classifier',
82
+ ]),
83
+ enabled: z.boolean().default(true),
84
+ // tool filtering — glob patterns (e.g. "github/*", "http/get")
85
+ tools: z.array(z.string()).optional(),
86
+ exclude: z.array(z.string()).optional(),
87
+ // rate-limiter
88
+ max_requests: z.number().optional(),
89
+ window_ms: z.number().optional(),
90
+ per: z.enum(['agent', 'tool']).optional(),
91
+ // output-injection-detector
92
+ mode: z.enum(['detect', 'mangle', 'escalate']).optional(),
93
+ // injection-detector
94
+ backend: z.enum(['regex', 'deberta', 'heuristic', 'llm']).optional(),
95
+ inference_url: z.string().optional(),
96
+ threshold: z.number().optional(),
97
+ // output-size-limiter
98
+ max_lines: z.number().optional(),
99
+ max_chars: z.number().optional(),
100
+ // output-summarizer / sensitivity-classifier
101
+ model: z.string().optional(),
102
+ threshold_chars: z.number().optional(),
103
+ })
104
+ .strict();
105
+ export const AgentConfig = z.object({
106
+ token: EnvString.optional(),
107
+ extends: z.array(z.string()).default([]),
108
+ allow: z.array(z.string()).default([]),
109
+ ask: z.array(z.string()).default([]),
110
+ deny: z.array(z.string()).default([]),
111
+ tool_overrides: z.record(ToolOverride).default({}),
112
+ exec: AgentExecConfig.default({}),
113
+ http: AgentHttpConfig.default({}),
114
+ middleware: z.array(MiddlewareItemConfig).optional(),
115
+ });
116
+ export const ProfileConfig = z.object({
117
+ allow: z.array(z.string()).default([]),
118
+ ask: z.array(z.string()).default([]),
119
+ });
120
+ export const ApprovalProviderConfig = z.discriminatedUnion('type', [
121
+ z.object({
122
+ type: z.literal('telegram'),
123
+ bot_token: EnvString,
124
+ chat_id: EnvString,
125
+ }),
126
+ z.object({
127
+ type: z.literal('openclaw'),
128
+ gateway_url: z.string().default('ws://localhost:18789'),
129
+ token: EnvString,
130
+ session_key: z.string().default('main'),
131
+ }),
132
+ z.object({
133
+ type: z.literal('slack'),
134
+ webhook_url: EnvString,
135
+ }),
136
+ z.object({
137
+ type: z.literal('webhook'),
138
+ url: EnvString,
139
+ headers: z.record(z.string()).default({}),
140
+ }),
141
+ z.object({
142
+ type: z.literal('tui'),
143
+ }),
144
+ z.object({
145
+ type: z.literal('macos'),
146
+ }),
147
+ z.object({
148
+ type: z.literal('dashboard'),
149
+ port: z.number().int().min(1).max(65535).default(4112),
150
+ }),
151
+ z.object({
152
+ type: z.literal('stdio'),
153
+ }),
154
+ ]);
155
+ export const ApprovalsConfig = z.object({
156
+ provider: z
157
+ .union([ApprovalProviderConfig, z.array(ApprovalProviderConfig).min(1)])
158
+ .default({ type: 'stdio' }),
159
+ timeout_ms: z.number().int().min(1000).default(300000), // 5 minutes
160
+ batch_window_ms: z.number().int().min(0).default(10000),
161
+ });
162
+ export const SecurityConfig = z.object({
163
+ blocked_hosts: z
164
+ .array(z.string())
165
+ .default([
166
+ 'localhost',
167
+ '127.0.0.1',
168
+ '0.0.0.0',
169
+ '::1',
170
+ '::ffff:127.0.0.1',
171
+ '*.local',
172
+ '10.*',
173
+ '172.16.*',
174
+ '172.17.*',
175
+ '172.18.*',
176
+ '172.19.*',
177
+ '172.20.*',
178
+ '172.21.*',
179
+ '172.22.*',
180
+ '172.23.*',
181
+ '172.24.*',
182
+ '172.25.*',
183
+ '172.26.*',
184
+ '172.27.*',
185
+ '172.28.*',
186
+ '172.29.*',
187
+ '172.30.*',
188
+ '172.31.*',
189
+ '192.168.*',
190
+ '169.254.*',
191
+ 'fc00:*',
192
+ 'fd00:*',
193
+ 'fe80:*',
194
+ ]),
195
+ allowed_local: z.array(z.string()).default([]),
196
+ });
197
+ export const AuditConfig = z.object({
198
+ db_path: z.string().default('./audit.db'),
199
+ retention_days: z.number().default(90),
200
+ redact_fields: z
201
+ .array(z.string())
202
+ .default(['password', 'token', 'secret', 'key', 'authorization']),
203
+ });
204
+ export const ServerConfig = z.object({
205
+ port: z.number().int().min(1).max(65535).default(4111),
206
+ host: z.string().default('127.0.0.1'),
207
+ api_secret: EnvString.optional(),
208
+ });
209
+ // --- CLI backend config ---
210
+ export const CliParamConfig = z.object({
211
+ type: z.enum(['string', 'number', 'boolean']),
212
+ flag: z.string().regex(/^-/, 'Flag must start with a dash (e.g. -n, --verbose)').optional(),
213
+ positional: z.boolean().default(false),
214
+ required: z.boolean().default(false),
215
+ default: z.union([z.string(), z.number(), z.boolean()]).optional(),
216
+ description: z.string().optional(),
217
+ });
218
+ export const CliCommandConfig = z.object({
219
+ exec: z.string(),
220
+ description: z.string().optional(),
221
+ params: z.record(CliParamConfig).default({}),
222
+ cwd: z.string().optional(),
223
+ timeout: z.number().default(30),
224
+ });
225
+ export const CliConfig = z.object({
226
+ discovered: z.string().optional(),
227
+ shell: z.string().optional(),
228
+ cwd: z.string().optional(),
229
+ max_output_bytes: z.number().default(30_000),
230
+ commands: z.record(CliCommandConfig).default({}),
231
+ });
232
+ // --- OpenAPI backend config ---
233
+ export const ApiAuthConfig = z.discriminatedUnion('type', [
234
+ z.object({ type: z.literal('bearer'), token: EnvString }),
235
+ z.object({ type: z.literal('header'), name: z.string(), value: EnvString }),
236
+ ]);
237
+ export const ApiConfig = z.object({
238
+ spec: z.string(),
239
+ base_url: z.string().optional(),
240
+ auth: ApiAuthConfig.optional(),
241
+ include: z.array(z.string()).optional(),
242
+ exclude: z.array(z.string()).optional(),
243
+ timeout_ms: z.number().default(30000),
244
+ max_response_bytes: z.number().default(1048576),
245
+ });
246
+ export const GatewayConfig = z.object({
247
+ providers: z.record(ProviderConfig).default({}),
248
+ profiles: z.record(ProfileConfig).default({}),
249
+ clis: z.record(CliConfig).default({}),
250
+ apis: z.record(ApiConfig).default({}),
251
+ agents: z.record(AgentConfig).default({}),
252
+ approvals: ApprovalsConfig.default({}),
253
+ security: SecurityConfig.default({}),
254
+ audit: AuditConfig.default({}),
255
+ server: ServerConfig.default({}),
256
+ });
257
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { EventEmitter } from 'events';
2
+ import type { Config } from './loader.js';
3
+ export declare class ConfigWatcher extends EventEmitter {
4
+ private configPath;
5
+ private watcher?;
6
+ constructor(configPath: string);
7
+ start(): void;
8
+ stop(): void;
9
+ on(event: 'reload', listener: (config: Config) => void): this;
10
+ }
11
+ //# sourceMappingURL=watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/config/watcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAK1C,qBAAa,aAAc,SAAQ,YAAY;IAGjC,OAAO,CAAC,UAAU;IAF9B,OAAO,CAAC,OAAO,CAAC,CAAoC;gBAEhC,UAAU,EAAE,MAAM;IAItC,KAAK,IAAI,IAAI;IAmBb,IAAI,IAAI,IAAI;IAIZ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;CAK9D"}
@@ -0,0 +1,39 @@
1
+ import chokidar from 'chokidar';
2
+ import { EventEmitter } from 'events';
3
+ import { loadConfig } from './loader.js';
4
+ import { childLogger } from '../util/logger.js';
5
+ const log = childLogger('config-watcher');
6
+ export class ConfigWatcher extends EventEmitter {
7
+ configPath;
8
+ watcher;
9
+ constructor(configPath) {
10
+ super();
11
+ this.configPath = configPath;
12
+ }
13
+ start() {
14
+ this.watcher = chokidar.watch(this.configPath, {
15
+ persistent: true,
16
+ ignoreInitial: true,
17
+ awaitWriteFinish: { stabilityThreshold: 300, pollInterval: 100 },
18
+ });
19
+ this.watcher.on('change', () => {
20
+ log.info({ path: this.configPath }, 'Config file changed, reloading');
21
+ try {
22
+ const newConfig = loadConfig(this.configPath);
23
+ this.emit('reload', newConfig);
24
+ log.info('Config reloaded successfully');
25
+ }
26
+ catch (err) {
27
+ log.error({ err }, 'Failed to reload config, keeping old config');
28
+ }
29
+ });
30
+ }
31
+ stop() {
32
+ void this.watcher?.close();
33
+ }
34
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
35
+ on(event, listener) {
36
+ return super.on(event, listener);
37
+ }
38
+ }
39
+ //# sourceMappingURL=watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/config/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,GAAG,GAAG,WAAW,CAAC,gBAAgB,CAAC,CAAC;AAE1C,MAAM,OAAO,aAAc,SAAQ,YAAY;IAGzB;IAFZ,OAAO,CAAqC;IAEpD,YAAoB,UAAkB;QACpC,KAAK,EAAE,CAAC;QADU,eAAU,GAAV,UAAU,CAAQ;IAEtC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE;YAC7C,UAAU,EAAE,IAAI;YAChB,aAAa,EAAE,IAAI;YACnB,gBAAgB,EAAE,EAAE,kBAAkB,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE;SACjE,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC7B,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,gCAAgC,CAAC,CAAC;YACtE,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC9C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBAC/B,GAAG,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,6CAA6C,CAAC,CAAC;YACpE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI;QACF,KAAK,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC;IAGD,8DAA8D;IAC9D,EAAE,CAAC,KAAa,EAAE,QAAkC;QAClD,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export declare function runDiscover(argv: string[]): Promise<void>;
2
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/discover/cli.ts"],"names":[],"mappings":"AA8BA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB/D"}
@@ -0,0 +1,97 @@
1
+ import { parseArgs } from 'util';
2
+ import { handleDiscoverCli, handleDiscoverApi } from './index.js';
3
+ const HELP = `
4
+ airlock discover — auto-generate config from CLI tools or API specs
5
+
6
+ Usage:
7
+ airlock discover cli <tool> [options]
8
+ airlock discover api <spec> [options]
9
+
10
+ CLI options:
11
+ --output, -o <path> Write YAML to file (default: stdout)
12
+ --fig Try Fig autocomplete specs first, fall back to --help
13
+ --max-depth <n> Max subcommand recursion depth (default: 2)
14
+ --include <cmd,...> Only include these commands
15
+ --exclude <cmd,...> Exclude these commands
16
+
17
+ API options:
18
+ --output, -o <path> Write YAML to file (default: stdout)
19
+ --base-url <url> Override the spec's base URL
20
+ --include <filter,...> Only include matching operations (e.g. "GET /pets")
21
+ --exclude <filter,...> Exclude matching operations (e.g. "DELETE *")
22
+
23
+ Examples:
24
+ airlock discover cli git
25
+ airlock discover cli docker --fig --output docker-commands.yaml
26
+ airlock discover api ./petstore.json --output petstore-api.yaml
27
+ airlock discover api https://api.example.com/openapi.json --base-url https://api.example.com
28
+ `;
29
+ export async function runDiscover(argv) {
30
+ const mode = argv[0];
31
+ if (!mode || mode === '--help' || mode === '-h') {
32
+ console.log(HELP);
33
+ process.exit(0);
34
+ }
35
+ if (mode === 'cli') {
36
+ return runDiscoverCli(argv.slice(1));
37
+ }
38
+ if (mode === 'api') {
39
+ return runDiscoverApi(argv.slice(1));
40
+ }
41
+ console.error(`Unknown discover mode: "${mode}". Use "cli" or "api".`);
42
+ console.log(HELP);
43
+ process.exit(1);
44
+ }
45
+ async function runDiscoverCli(argv) {
46
+ const { values, positionals } = parseArgs({
47
+ args: argv,
48
+ options: {
49
+ output: { type: 'string', short: 'o' },
50
+ fig: { type: 'boolean', default: false },
51
+ 'max-depth': { type: 'string' },
52
+ include: { type: 'string' },
53
+ exclude: { type: 'string' },
54
+ help: { type: 'boolean', short: 'h', default: false },
55
+ },
56
+ allowPositionals: true,
57
+ });
58
+ if (values.help || positionals.length === 0) {
59
+ console.log(HELP);
60
+ process.exit(positionals.length === 0 ? 1 : 0);
61
+ }
62
+ const tool = positionals[0];
63
+ await handleDiscoverCli({
64
+ tool,
65
+ output: values.output,
66
+ fromFig: values.fig,
67
+ maxDepth: values['max-depth'] ? parseInt(values['max-depth'], 10) : undefined,
68
+ include: values.include?.split(','),
69
+ exclude: values.exclude?.split(','),
70
+ });
71
+ }
72
+ async function runDiscoverApi(argv) {
73
+ const { values, positionals } = parseArgs({
74
+ args: argv,
75
+ options: {
76
+ output: { type: 'string', short: 'o' },
77
+ 'base-url': { type: 'string' },
78
+ include: { type: 'string' },
79
+ exclude: { type: 'string' },
80
+ help: { type: 'boolean', short: 'h', default: false },
81
+ },
82
+ allowPositionals: true,
83
+ });
84
+ if (values.help || positionals.length === 0) {
85
+ console.log(HELP);
86
+ process.exit(positionals.length === 0 ? 1 : 0);
87
+ }
88
+ const spec = positionals[0];
89
+ await handleDiscoverApi({
90
+ spec,
91
+ output: values.output,
92
+ baseUrl: values['base-url'],
93
+ include: values.include?.split(','),
94
+ exclude: values.exclude?.split(','),
95
+ });
96
+ }
97
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/discover/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ interface DiscoverCliOptions {
2
+ tool: string;
3
+ output?: string;
4
+ fromFig?: boolean;
5
+ maxDepth?: number;
6
+ include?: string[];
7
+ exclude?: string[];
8
+ }
9
+ interface DiscoverApiOptions {
10
+ spec: string;
11
+ output?: string;
12
+ baseUrl?: string;
13
+ include?: string[];
14
+ exclude?: string[];
15
+ }
16
+ export declare function handleDiscoverCli(options: DiscoverCliOptions): Promise<void>;
17
+ export declare function handleDiscoverApi(options: DiscoverApiOptions): Promise<void>;
18
+ export {};
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/discover/index.ts"],"names":[],"mappings":"AAMA,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8ClF;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBlF"}
@@ -0,0 +1,70 @@
1
+ import { writeFileSync } from 'fs';
2
+ import { discoverCli } from './strategies/help-parser.js';
3
+ import { fetchFigSpec, figSpecToCommands } from './strategies/fig.js';
4
+ import { discoverOpenApi } from './openapi.js';
5
+ import { serializeDiscovery } from './writer.js';
6
+ export async function handleDiscoverCli(options) {
7
+ let commands;
8
+ let strategy;
9
+ if (options.fromFig) {
10
+ strategy = 'fig';
11
+ const spec = await fetchFigSpec(options.tool);
12
+ if (!spec) {
13
+ console.error(`No Fig spec found for "${options.tool}". Falling back to --help parsing.`);
14
+ strategy = 'help-text';
15
+ commands = discoverCli(options.tool, {
16
+ maxDepth: options.maxDepth,
17
+ include: options.include,
18
+ exclude: options.exclude,
19
+ });
20
+ }
21
+ else {
22
+ commands = figSpecToCommands(spec);
23
+ }
24
+ }
25
+ else {
26
+ strategy = 'help-text';
27
+ commands = discoverCli(options.tool, {
28
+ maxDepth: options.maxDepth,
29
+ include: options.include,
30
+ exclude: options.exclude,
31
+ });
32
+ }
33
+ const data = {
34
+ clis: {
35
+ [options.tool]: {
36
+ commands,
37
+ },
38
+ },
39
+ };
40
+ const yaml = serializeDiscovery(data, {
41
+ command: `airlock discover cli ${options.tool}`,
42
+ strategy,
43
+ });
44
+ if (options.output) {
45
+ writeFileSync(options.output, yaml);
46
+ console.log(`Discovery written to ${options.output}`);
47
+ }
48
+ else {
49
+ process.stdout.write(yaml);
50
+ }
51
+ }
52
+ export async function handleDiscoverApi(options) {
53
+ const result = await discoverOpenApi(options.spec, {
54
+ baseUrl: options.baseUrl,
55
+ include: options.include,
56
+ exclude: options.exclude,
57
+ });
58
+ const yaml = serializeDiscovery(result, {
59
+ command: `airlock discover api ${options.spec}`,
60
+ strategy: 'openapi',
61
+ });
62
+ if (options.output) {
63
+ writeFileSync(options.output, yaml);
64
+ console.log(`Discovery written to ${options.output}`);
65
+ }
66
+ else {
67
+ process.stdout.write(yaml);
68
+ }
69
+ }
70
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/discover/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ApiConfig } from '../config/schema.js';
2
+ export declare function discoverOpenApi(specPath: string, options?: {
3
+ baseUrl?: string;
4
+ include?: string[];
5
+ exclude?: string[];
6
+ }): Promise<{
7
+ apis: Record<string, ApiConfig>;
8
+ }>;
9
+ //# sourceMappingURL=openapi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../src/discover/openapi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AA4BrD,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACrE,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;CAAE,CAAC,CAmB9C"}
@@ -0,0 +1,47 @@
1
+ import { parseOpenApiSpec } from '../backend/openapi/parser.js';
2
+ function deriveKeyFromPath(specPath) {
3
+ // Handle URLs: extract last meaningful path segment
4
+ let filename;
5
+ try {
6
+ const url = new URL(specPath);
7
+ // Use the last non-empty path segment before the filename
8
+ const segments = url.pathname.split('/').filter(Boolean);
9
+ // Skip generic filenames like "openapi.json", "swagger.json"
10
+ const last = segments[segments.length - 1] ?? '';
11
+ const stripped = last.replace(/\.(json|yaml|yml)$/i, '');
12
+ if (/^(openapi|swagger|spec|api)$/i.test(stripped) && segments.length > 1) {
13
+ filename = segments[segments.length - 2];
14
+ }
15
+ else {
16
+ filename = stripped;
17
+ }
18
+ }
19
+ catch {
20
+ // Local file path
21
+ filename =
22
+ specPath
23
+ .split('/')
24
+ .pop()
25
+ ?.replace(/\.(json|yaml|yml)$/i, '') ?? 'api';
26
+ }
27
+ return filename.replace(/[^a-zA-Z0-9]/g, '_') || 'api';
28
+ }
29
+ export async function discoverOpenApi(specPath, options) {
30
+ const parsed = await parseOpenApiSpec(specPath, {
31
+ baseUrlOverride: options?.baseUrl,
32
+ include: options?.include,
33
+ exclude: options?.exclude,
34
+ });
35
+ const key = deriveKeyFromPath(specPath);
36
+ return {
37
+ apis: {
38
+ [key]: {
39
+ spec: specPath,
40
+ base_url: parsed.baseUrl || undefined,
41
+ timeout_ms: 30000,
42
+ max_response_bytes: 1048576,
43
+ },
44
+ },
45
+ };
46
+ }
47
+ //# sourceMappingURL=openapi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../src/discover/openapi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAGhE,SAAS,iBAAiB,CAAC,QAAgB;IACzC,oDAAoD;IACpD,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,0DAA0D;QAC1D,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzD,6DAA6D;QAC7D,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QACzD,IAAI,+BAA+B,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1E,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,QAAQ,CAAC;QACtB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,kBAAkB;QAClB,QAAQ;YACN,QAAQ;iBACL,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,EAAE;gBACN,EAAE,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC;IACpD,CAAC;IACD,OAAO,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAgB,EAChB,OAAsE;IAEtE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE;QAC9C,eAAe,EAAE,OAAO,EAAE,OAAO;QACjC,OAAO,EAAE,OAAO,EAAE,OAAO;QACzB,OAAO,EAAE,OAAO,EAAE,OAAO;KAC1B,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAExC,OAAO;QACL,IAAI,EAAE;YACJ,CAAC,GAAG,CAAC,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,MAAM,CAAC,OAAO,IAAI,SAAS;gBACrC,UAAU,EAAE,KAAK;gBACjB,kBAAkB,EAAE,OAAO;aAC5B;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { CliCommandConfig } from '../../config/schema.js';
2
+ interface FigOption {
3
+ name: string | string[];
4
+ description?: string;
5
+ args?: {
6
+ name?: string;
7
+ isOptional?: boolean;
8
+ } | {
9
+ name?: string;
10
+ isOptional?: boolean;
11
+ }[];
12
+ }
13
+ interface FigSubcommand {
14
+ name: string | string[];
15
+ description?: string;
16
+ options?: FigOption[];
17
+ subcommands?: FigSubcommand[];
18
+ args?: unknown;
19
+ }
20
+ interface FigSpec {
21
+ name: string;
22
+ description?: string;
23
+ options?: FigOption[];
24
+ subcommands?: FigSubcommand[];
25
+ }
26
+ export declare function fetchFigSpec(tool: string): Promise<FigSpec | null>;
27
+ export declare function figSpecToCommands(spec: FigSpec): Record<string, CliCommandConfig>;
28
+ export {};
29
+ //# sourceMappingURL=fig.d.ts.map