@agentplugged/claw 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/dist/cli.d.ts +11 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +111 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/config.d.ts +29 -0
  6. package/dist/config.d.ts.map +1 -0
  7. package/dist/config.js +94 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/index.d.ts +17 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +54 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/memory/capture.d.ts +13 -0
  14. package/dist/memory/capture.d.ts.map +1 -0
  15. package/dist/memory/capture.js +102 -0
  16. package/dist/memory/capture.js.map +1 -0
  17. package/dist/memory/db.d.ts +56 -0
  18. package/dist/memory/db.d.ts.map +1 -0
  19. package/dist/memory/db.js +206 -0
  20. package/dist/memory/db.js.map +1 -0
  21. package/dist/memory/index.d.ts +8 -0
  22. package/dist/memory/index.d.ts.map +1 -0
  23. package/dist/memory/index.js +42 -0
  24. package/dist/memory/index.js.map +1 -0
  25. package/dist/memory/llm-extract.d.ts +13 -0
  26. package/dist/memory/llm-extract.d.ts.map +1 -0
  27. package/dist/memory/llm-extract.js +135 -0
  28. package/dist/memory/llm-extract.js.map +1 -0
  29. package/dist/memory/recall.d.ts +16 -0
  30. package/dist/memory/recall.d.ts.map +1 -0
  31. package/dist/memory/recall.js +131 -0
  32. package/dist/memory/recall.js.map +1 -0
  33. package/dist/observability/collector.d.ts +40 -0
  34. package/dist/observability/collector.d.ts.map +1 -0
  35. package/dist/observability/collector.js +119 -0
  36. package/dist/observability/collector.js.map +1 -0
  37. package/dist/observability/db.d.ts +60 -0
  38. package/dist/observability/db.d.ts.map +1 -0
  39. package/dist/observability/db.js +189 -0
  40. package/dist/observability/db.js.map +1 -0
  41. package/dist/observability/index.d.ts +7 -0
  42. package/dist/observability/index.d.ts.map +1 -0
  43. package/dist/observability/index.js +35 -0
  44. package/dist/observability/index.js.map +1 -0
  45. package/dist/observability/queries.d.ts +54 -0
  46. package/dist/observability/queries.d.ts.map +1 -0
  47. package/dist/observability/queries.js +181 -0
  48. package/dist/observability/queries.js.map +1 -0
  49. package/dist/router/classifier.d.ts +8 -0
  50. package/dist/router/classifier.d.ts.map +1 -0
  51. package/dist/router/classifier.js +90 -0
  52. package/dist/router/classifier.js.map +1 -0
  53. package/dist/router/fallback.d.ts +18 -0
  54. package/dist/router/fallback.d.ts.map +1 -0
  55. package/dist/router/fallback.js +102 -0
  56. package/dist/router/fallback.js.map +1 -0
  57. package/dist/router/index.d.ts +5 -0
  58. package/dist/router/index.d.ts.map +1 -0
  59. package/dist/router/index.js +214 -0
  60. package/dist/router/index.js.map +1 -0
  61. package/dist/router/leak-detector.d.ts +33 -0
  62. package/dist/router/leak-detector.d.ts.map +1 -0
  63. package/dist/router/leak-detector.js +320 -0
  64. package/dist/router/leak-detector.js.map +1 -0
  65. package/dist/router/logger.d.ts +18 -0
  66. package/dist/router/logger.d.ts.map +1 -0
  67. package/dist/router/logger.js +130 -0
  68. package/dist/router/logger.js.map +1 -0
  69. package/dist/router/models.d.ts +5 -0
  70. package/dist/router/models.d.ts.map +1 -0
  71. package/dist/router/models.js +96 -0
  72. package/dist/router/models.js.map +1 -0
  73. package/dist/router/providers.d.ts +4 -0
  74. package/dist/router/providers.d.ts.map +1 -0
  75. package/dist/router/providers.js +323 -0
  76. package/dist/router/providers.js.map +1 -0
  77. package/dist/router/strategy.d.ts +29 -0
  78. package/dist/router/strategy.d.ts.map +1 -0
  79. package/dist/router/strategy.js +169 -0
  80. package/dist/router/strategy.js.map +1 -0
  81. package/dist/router/types.d.ts +63 -0
  82. package/dist/router/types.d.ts.map +1 -0
  83. package/dist/router/types.js +3 -0
  84. package/dist/router/types.js.map +1 -0
  85. package/dist/sidecar/auth.d.ts +7 -0
  86. package/dist/sidecar/auth.d.ts.map +1 -0
  87. package/dist/sidecar/auth.js +36 -0
  88. package/dist/sidecar/auth.js.map +1 -0
  89. package/dist/sidecar/index.d.ts +2 -0
  90. package/dist/sidecar/index.d.ts.map +1 -0
  91. package/dist/sidecar/index.js +336 -0
  92. package/dist/sidecar/index.js.map +1 -0
  93. package/dist/sidecar/routes/addons.d.ts +6 -0
  94. package/dist/sidecar/routes/addons.d.ts.map +1 -0
  95. package/dist/sidecar/routes/addons.js +332 -0
  96. package/dist/sidecar/routes/addons.js.map +1 -0
  97. package/dist/sidecar/routes/backup.d.ts +7 -0
  98. package/dist/sidecar/routes/backup.d.ts.map +1 -0
  99. package/dist/sidecar/routes/backup.js +204 -0
  100. package/dist/sidecar/routes/backup.js.map +1 -0
  101. package/dist/sidecar/routes/channels.d.ts +4 -0
  102. package/dist/sidecar/routes/channels.d.ts.map +1 -0
  103. package/dist/sidecar/routes/channels.js +120 -0
  104. package/dist/sidecar/routes/channels.js.map +1 -0
  105. package/dist/sidecar/routes/health.d.ts +5 -0
  106. package/dist/sidecar/routes/health.d.ts.map +1 -0
  107. package/dist/sidecar/routes/health.js +28 -0
  108. package/dist/sidecar/routes/health.js.map +1 -0
  109. package/dist/sidecar/routes/memory.d.ts +7 -0
  110. package/dist/sidecar/routes/memory.d.ts.map +1 -0
  111. package/dist/sidecar/routes/memory.js +234 -0
  112. package/dist/sidecar/routes/memory.js.map +1 -0
  113. package/dist/sidecar/routes/metrics.d.ts +5 -0
  114. package/dist/sidecar/routes/metrics.d.ts.map +1 -0
  115. package/dist/sidecar/routes/metrics.js +273 -0
  116. package/dist/sidecar/routes/metrics.js.map +1 -0
  117. package/dist/sidecar/routes/restart.d.ts +4 -0
  118. package/dist/sidecar/routes/restart.d.ts.map +1 -0
  119. package/dist/sidecar/routes/restart.js +81 -0
  120. package/dist/sidecar/routes/restart.js.map +1 -0
  121. package/dist/sidecar/routes/router-config.d.ts +5 -0
  122. package/dist/sidecar/routes/router-config.d.ts.map +1 -0
  123. package/dist/sidecar/routes/router-config.js +150 -0
  124. package/dist/sidecar/routes/router-config.js.map +1 -0
  125. package/dist/sidecar/routes/security.d.ts +8 -0
  126. package/dist/sidecar/routes/security.d.ts.map +1 -0
  127. package/dist/sidecar/routes/security.js +308 -0
  128. package/dist/sidecar/routes/security.js.map +1 -0
  129. package/dist/sidecar/routes/skills.d.ts +5 -0
  130. package/dist/sidecar/routes/skills.d.ts.map +1 -0
  131. package/dist/sidecar/routes/skills.js +146 -0
  132. package/dist/sidecar/routes/skills.js.map +1 -0
  133. package/dist/sidecar/routes/soul.d.ts +4 -0
  134. package/dist/sidecar/routes/soul.d.ts.map +1 -0
  135. package/dist/sidecar/routes/soul.js +115 -0
  136. package/dist/sidecar/routes/soul.js.map +1 -0
  137. package/dist/sidecar/routes/team.d.ts +4 -0
  138. package/dist/sidecar/routes/team.d.ts.map +1 -0
  139. package/dist/sidecar/routes/team.js +139 -0
  140. package/dist/sidecar/routes/team.js.map +1 -0
  141. package/dist/sidecar/routes/update.d.ts +4 -0
  142. package/dist/sidecar/routes/update.d.ts.map +1 -0
  143. package/dist/sidecar/routes/update.js +96 -0
  144. package/dist/sidecar/routes/update.js.map +1 -0
  145. package/dist/sidecar/utils.d.ts +9 -0
  146. package/dist/sidecar/utils.d.ts.map +1 -0
  147. package/dist/sidecar/utils.js +57 -0
  148. package/dist/sidecar/utils.js.map +1 -0
  149. package/package.json +45 -0
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.requireAuth = requireAuth;
4
+ /**
5
+ * Validates the Authorization header against the management secret.
6
+ * Expected format: "Authorization: Bearer {secret}"
7
+ */
8
+ function requireAuth(req, secret) {
9
+ if (!secret || secret === "changeme") {
10
+ // If no secret is configured, deny all requests for safety
11
+ return false;
12
+ }
13
+ const authHeader = req.headers["authorization"] ?? "";
14
+ if (!authHeader.startsWith("Bearer ")) {
15
+ return false;
16
+ }
17
+ const token = authHeader.slice("Bearer ".length).trim();
18
+ // Constant-time comparison to prevent timing attacks
19
+ return timingSafeEqual(token, secret);
20
+ }
21
+ function timingSafeEqual(a, b) {
22
+ if (a.length !== b.length) {
23
+ // Still iterate to avoid timing difference
24
+ let diff = 0;
25
+ for (let i = 0; i < Math.max(a.length, b.length); i++) {
26
+ diff |= (a.charCodeAt(i) ?? 0) ^ (b.charCodeAt(i) ?? 0);
27
+ }
28
+ return false;
29
+ }
30
+ let diff = 0;
31
+ for (let i = 0; i < a.length; i++) {
32
+ diff |= a.charCodeAt(i) ^ b.charCodeAt(i);
33
+ }
34
+ return diff === 0;
35
+ }
36
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/sidecar/auth.ts"],"names":[],"mappings":";;AAMA,kCAgBC;AApBD;;;GAGG;AACH,SAAgB,WAAW,CAAC,GAAoB,EAAE,MAAc;IAC9D,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QACrC,2DAA2D;QAC3D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAEtD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAExD,qDAAqD;IACrD,OAAO,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,eAAe,CAAC,CAAS,EAAE,CAAS;IAC3C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,2CAA2C;QAC3C,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACtD,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,CAAC;AACpB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sidecar/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,336 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const http = __importStar(require("http"));
37
+ const config_1 = require("../config");
38
+ const auth_1 = require("./auth");
39
+ const utils_1 = require("./utils");
40
+ const health_1 = require("./routes/health");
41
+ const metrics_1 = require("./routes/metrics");
42
+ const skills_1 = require("./routes/skills");
43
+ const soul_1 = require("./routes/soul");
44
+ const channels_1 = require("./routes/channels");
45
+ const router_config_1 = require("./routes/router-config");
46
+ const team_1 = require("./routes/team");
47
+ const memory_1 = require("./routes/memory");
48
+ const restart_1 = require("./routes/restart");
49
+ const security_1 = require("./routes/security");
50
+ const addons_1 = require("./routes/addons");
51
+ const update_1 = require("./routes/update");
52
+ const backup_1 = require("./routes/backup");
53
+ // ---------------------------------------------------------------------------
54
+ // Router
55
+ // ---------------------------------------------------------------------------
56
+ function matchRoute(routes, method, pathname) {
57
+ for (const route of routes) {
58
+ if (route.method !== method && route.method !== "*")
59
+ continue;
60
+ if (typeof route.pattern === "string") {
61
+ if (route.pattern === pathname)
62
+ return route;
63
+ }
64
+ else {
65
+ if (route.pattern.test(pathname))
66
+ return route;
67
+ }
68
+ }
69
+ return null;
70
+ }
71
+ function buildRoutes(config) {
72
+ const routerDbPath = `${config.runtimeDir}/data/router.db`;
73
+ const metricsDbPath = `${config.runtimeDir}/data/metrics.db`;
74
+ return [
75
+ // -----------------------------------------------------------------------
76
+ // Public
77
+ // -----------------------------------------------------------------------
78
+ {
79
+ method: "GET",
80
+ pattern: "/health",
81
+ handler: (0, health_1.handleHealth)(config),
82
+ public: true,
83
+ },
84
+ // -----------------------------------------------------------------------
85
+ // Dashboard — read-only, auth required
86
+ // -----------------------------------------------------------------------
87
+ {
88
+ method: "GET",
89
+ pattern: "/metrics",
90
+ handler: (0, metrics_1.handleMetrics)(routerDbPath, metricsDbPath),
91
+ },
92
+ {
93
+ method: "GET",
94
+ pattern: "/metrics/router",
95
+ handler: (0, metrics_1.handleRouterMetrics)(routerDbPath),
96
+ },
97
+ {
98
+ method: "GET",
99
+ pattern: "/metrics/live",
100
+ handler: (0, metrics_1.handleLiveMetrics)(routerDbPath),
101
+ },
102
+ {
103
+ method: "GET",
104
+ pattern: "/memory",
105
+ handler: (0, memory_1.handleListMemory)(config),
106
+ },
107
+ {
108
+ method: "GET",
109
+ pattern: "/skills",
110
+ handler: (0, skills_1.handleListSkills)(config),
111
+ },
112
+ {
113
+ method: "GET",
114
+ pattern: "/sessions",
115
+ handler: (0, memory_1.handleListSessions)(config),
116
+ },
117
+ // -----------------------------------------------------------------------
118
+ // Configuration — write, auth required
119
+ // -----------------------------------------------------------------------
120
+ {
121
+ method: "POST",
122
+ pattern: "/memory",
123
+ handler: (0, memory_1.handleCreateMemory)(config),
124
+ },
125
+ {
126
+ method: "DELETE",
127
+ pattern: /^\/memory\/\d+$/,
128
+ handler: (0, memory_1.handleDeleteMemory)(config),
129
+ },
130
+ {
131
+ method: "PUT",
132
+ pattern: "/soul",
133
+ handler: (0, soul_1.handleUpdateSoul)(config),
134
+ },
135
+ {
136
+ method: "GET",
137
+ pattern: "/config/router",
138
+ handler: (0, router_config_1.handleGetRouterConfig)(config),
139
+ },
140
+ {
141
+ method: "PUT",
142
+ pattern: "/router/strategy",
143
+ handler: (0, router_config_1.handleUpdateStrategy)(config),
144
+ },
145
+ {
146
+ method: "POST",
147
+ pattern: "/skills",
148
+ handler: (0, skills_1.handlePushSkills)(config),
149
+ },
150
+ {
151
+ method: "POST",
152
+ pattern: "/channels",
153
+ handler: (0, channels_1.handleConfigureChannels)(config),
154
+ },
155
+ {
156
+ method: "POST",
157
+ pattern: "/team/deploy",
158
+ handler: (0, team_1.handleDeployTeam)(config),
159
+ },
160
+ {
161
+ method: "POST",
162
+ pattern: "/restart",
163
+ handler: (0, restart_1.handleRestart)(config),
164
+ },
165
+ // -----------------------------------------------------------------------
166
+ // Security (stubs in standard mode)
167
+ // -----------------------------------------------------------------------
168
+ {
169
+ method: "GET",
170
+ pattern: "/vault",
171
+ handler: (0, security_1.handleListVault)(config),
172
+ },
173
+ {
174
+ method: "POST",
175
+ pattern: "/vault",
176
+ handler: (0, security_1.handleAddVault)(config),
177
+ },
178
+ {
179
+ method: "GET",
180
+ pattern: "/allowlist",
181
+ handler: (0, security_1.handleListAllowlist)(config),
182
+ },
183
+ {
184
+ method: "POST",
185
+ pattern: "/allowlist",
186
+ handler: (0, security_1.handleAddAllowlist)(config),
187
+ },
188
+ {
189
+ method: "GET",
190
+ pattern: "/security/alerts",
191
+ handler: (0, security_1.handleSecurityAlerts)(config),
192
+ },
193
+ // -----------------------------------------------------------------------
194
+ // Update
195
+ // -----------------------------------------------------------------------
196
+ {
197
+ method: "POST",
198
+ pattern: "/update",
199
+ handler: (0, update_1.handleUpdate)(config),
200
+ },
201
+ // -----------------------------------------------------------------------
202
+ // Backups
203
+ // -----------------------------------------------------------------------
204
+ {
205
+ method: "GET",
206
+ pattern: "/backups",
207
+ handler: (0, backup_1.handleListBackups)(config),
208
+ },
209
+ {
210
+ method: "POST",
211
+ pattern: "/backups",
212
+ handler: (0, backup_1.handleCreateBackup)(config),
213
+ },
214
+ {
215
+ method: "POST",
216
+ pattern: "/backups/restore",
217
+ handler: (0, backup_1.handleRestoreBackup)(config),
218
+ },
219
+ {
220
+ method: "POST",
221
+ pattern: "/backups/cleanup",
222
+ handler: (0, backup_1.handleCleanupBackups)(config),
223
+ },
224
+ // -----------------------------------------------------------------------
225
+ // Addons (n8n, ...)
226
+ // -----------------------------------------------------------------------
227
+ {
228
+ method: "GET",
229
+ pattern: "/addons",
230
+ handler: (0, addons_1.handleListAddons)(config),
231
+ },
232
+ {
233
+ method: "POST",
234
+ pattern: "/addons/n8n/enable",
235
+ handler: (0, addons_1.handleEnableAddon)(config),
236
+ },
237
+ {
238
+ method: "POST",
239
+ pattern: "/addons/n8n/disable",
240
+ handler: (0, addons_1.handleDisableAddon)(config),
241
+ },
242
+ ];
243
+ }
244
+ // ---------------------------------------------------------------------------
245
+ // Request handler
246
+ // ---------------------------------------------------------------------------
247
+ function createRequestHandler(config, routes) {
248
+ return (req, res) => {
249
+ const method = req.method?.toUpperCase() ?? "GET";
250
+ // Strip query string from pathname
251
+ const rawUrl = req.url ?? "/";
252
+ const questionMark = rawUrl.indexOf("?");
253
+ const pathname = questionMark >= 0 ? rawUrl.slice(0, questionMark) : rawUrl;
254
+ // Add CORS headers
255
+ res.setHeader("Access-Control-Allow-Origin", "*");
256
+ res.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
257
+ res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
258
+ if (method === "OPTIONS") {
259
+ res.writeHead(204);
260
+ res.end();
261
+ return;
262
+ }
263
+ const route = matchRoute(routes, method, pathname);
264
+ if (!route) {
265
+ (0, utils_1.sendError)(res, 404, `Cannot ${method} ${pathname}`);
266
+ return;
267
+ }
268
+ // Auth check for protected routes
269
+ if (!route.public) {
270
+ const authorized = (0, auth_1.requireAuth)(req, config.managementSecret);
271
+ if (!authorized) {
272
+ (0, utils_1.sendError)(res, 401, "Unauthorized — valid Bearer token required");
273
+ return;
274
+ }
275
+ }
276
+ // Execute the route handler, catching unexpected errors
277
+ Promise.resolve()
278
+ .then(() => route.handler(req, res))
279
+ .catch((err) => {
280
+ const message = err instanceof Error ? err.message : "Internal server error";
281
+ console.error(`[sidecar] Unhandled error on ${method} ${pathname}:`, err);
282
+ if (!res.headersSent) {
283
+ (0, utils_1.sendError)(res, 500, message);
284
+ }
285
+ });
286
+ };
287
+ }
288
+ // ---------------------------------------------------------------------------
289
+ // Server bootstrap
290
+ // ---------------------------------------------------------------------------
291
+ function startSidecar() {
292
+ const config = (0, config_1.loadConfig)();
293
+ const port = config.sidecarPort;
294
+ const routes = buildRoutes(config);
295
+ const handler = createRequestHandler(config, routes);
296
+ const server = http.createServer(handler);
297
+ server.on("error", (err) => {
298
+ if (err.code === "EADDRINUSE") {
299
+ console.error(`[sidecar] Port ${port} is already in use. Is another sidecar running?`);
300
+ }
301
+ else {
302
+ console.error("[sidecar] Server error:", err);
303
+ }
304
+ process.exit(1);
305
+ });
306
+ server.listen(port, "0.0.0.0", () => {
307
+ console.log(`[sidecar] Running on http://0.0.0.0:${port}`);
308
+ console.log(`[sidecar] Mode: ${config.mode}`);
309
+ console.log(`[sidecar] Runtime dir: ${config.runtimeDir}`);
310
+ console.log(`[sidecar] Auth: ${config.managementSecret && config.managementSecret !== "changeme" ? "enabled" : "WARNING — no secret configured"}`);
311
+ // List active routes
312
+ const routeList = routes
313
+ .map((r) => {
314
+ const pattern = typeof r.pattern === "string" ? r.pattern : r.pattern.source;
315
+ return ` ${r.method.padEnd(6)} ${pattern}${r.public ? " (public)" : ""}`;
316
+ })
317
+ .join("\n");
318
+ console.log(`[sidecar] Routes:\n${routeList}`);
319
+ });
320
+ // Graceful shutdown
321
+ process.on("SIGTERM", () => {
322
+ console.log("[sidecar] SIGTERM received — shutting down");
323
+ server.close(() => {
324
+ console.log("[sidecar] Server closed");
325
+ process.exit(0);
326
+ });
327
+ });
328
+ process.on("SIGINT", () => {
329
+ console.log("[sidecar] SIGINT received — shutting down");
330
+ server.close(() => {
331
+ process.exit(0);
332
+ });
333
+ });
334
+ }
335
+ startSidecar();
336
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sidecar/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { ClawConfig } from "../../config";
2
+ import { RouteHandler } from "./health";
3
+ export declare function handleListAddons(config: ClawConfig): RouteHandler;
4
+ export declare function handleEnableAddon(config: ClawConfig): RouteHandler;
5
+ export declare function handleDisableAddon(config: ClawConfig): RouteHandler;
6
+ //# sourceMappingURL=addons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addons.d.ts","sourceRoot":"","sources":["../../../src/sidecar/routes/addons.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AA8JxC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY,CAuCjE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY,CAgFlE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY,CAuCnE"}