@0xmaxma/claude-gateway 1.6.4 → 1.6.6
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.
- package/config.template.json +14 -1
- package/dist/api/apps-router.d.ts.map +1 -1
- package/dist/api/apps-router.js +108 -0
- package/dist/api/apps-router.js.map +1 -1
- package/dist/apps/compose-generator.d.ts +15 -0
- package/dist/apps/compose-generator.d.ts.map +1 -1
- package/dist/apps/compose-generator.js +29 -0
- package/dist/apps/compose-generator.js.map +1 -1
- package/dist/apps/installer.d.ts +211 -1
- package/dist/apps/installer.d.ts.map +1 -1
- package/dist/apps/installer.js +768 -4
- package/dist/apps/installer.js.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +35 -0
- package/dist/types.d.ts.map +1 -1
- package/mcp/tools/apps/client.ts +16 -0
- package/mcp/tools/apps/module.ts +78 -1
- package/mcp/tools/apps/skills/create-app-yaml/SKILL.md +3 -0
- package/mcp/tools/apps/skills/install-app/SKILL.md +11 -2
- package/package.json +1 -1
package/dist/apps/installer.d.ts
CHANGED
|
@@ -35,6 +35,47 @@ export interface InstallResult {
|
|
|
35
35
|
name: string;
|
|
36
36
|
} | null;
|
|
37
37
|
}
|
|
38
|
+
/** Per-app backup policy (mirrors `gateway.appBackup` in the gateway config). */
|
|
39
|
+
export interface AppBackupConfig {
|
|
40
|
+
/** Keep the N most recent backups per app; older are pruned. Default 3. 0 = unbounded. */
|
|
41
|
+
retention?: number;
|
|
42
|
+
/** Prune backups older than N days. Default 30. 0 = disabled. */
|
|
43
|
+
maxAgeDays?: number;
|
|
44
|
+
/** Hour (0-23, in cleanupTimezone) the daily backup prune runs. Default 0. */
|
|
45
|
+
cleanupHour?: number;
|
|
46
|
+
/** IANA timezone for cleanupHour. Default "UTC". */
|
|
47
|
+
cleanupTimezone?: string;
|
|
48
|
+
/** Auto-snapshot before uninstall. Default true. */
|
|
49
|
+
autoBackupBeforeUninstall?: boolean;
|
|
50
|
+
/** Auto-snapshot before update. Default true. */
|
|
51
|
+
autoBackupBeforeUpdate?: boolean;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* On-disk manifest stored inside every backup archive. `volumes` are the
|
|
55
|
+
* compose-level (logical) volume names; the actual Docker volume for each is
|
|
56
|
+
* `<appName>_<logical>`.
|
|
57
|
+
*/
|
|
58
|
+
export interface BackupMetadata {
|
|
59
|
+
id: string;
|
|
60
|
+
appName: string;
|
|
61
|
+
appVersion: string;
|
|
62
|
+
createdAt: string;
|
|
63
|
+
volumes: string[];
|
|
64
|
+
/**
|
|
65
|
+
* App-dir-relative bind-mount source directories captured in this backup
|
|
66
|
+
* (e.g. `data/photos`, `postgres/pgdata`). Optional for backward
|
|
67
|
+
* compatibility with backups taken before bind-mount capture existed.
|
|
68
|
+
*/
|
|
69
|
+
bindMounts?: string[];
|
|
70
|
+
sizeBytes: number;
|
|
71
|
+
}
|
|
72
|
+
/** Summary of one backup, as surfaced by `listBackups` / `GET …/backups`. */
|
|
73
|
+
export interface BackupInfo {
|
|
74
|
+
id: string;
|
|
75
|
+
createdAt: string;
|
|
76
|
+
sizeBytes: number;
|
|
77
|
+
appVersion: string;
|
|
78
|
+
}
|
|
38
79
|
/**
|
|
39
80
|
* Read-only preview of an install source, computed by fetching and parsing the
|
|
40
81
|
* app.yaml BEFORE any install. Surfaces the secrets an operator must supply
|
|
@@ -49,6 +90,13 @@ export interface InspectResult {
|
|
|
49
90
|
commit: string;
|
|
50
91
|
secretKeys: string[];
|
|
51
92
|
generatedKeys: GeneratedKey[];
|
|
93
|
+
/**
|
|
94
|
+
* Default values for prompted secrets declared with `KEY=!default:<value>`.
|
|
95
|
+
* Surfaced so install UIs can pre-fill the editable field; keyed by env var
|
|
96
|
+
* name, only keys with a declared default appear. See
|
|
97
|
+
* {@link GeneratedCompose.secretDefaults}.
|
|
98
|
+
*/
|
|
99
|
+
secretDefaults: Record<string, string>;
|
|
52
100
|
ports: ComposePort[];
|
|
53
101
|
agentDeclaration: AgentDeclaration | null;
|
|
54
102
|
warnings: string[];
|
|
@@ -58,10 +106,42 @@ export interface JobState {
|
|
|
58
106
|
status: 'pending' | 'running' | 'completed' | 'failed';
|
|
59
107
|
logs: string[];
|
|
60
108
|
result?: InstallResult;
|
|
109
|
+
/** Populated by backup/restore jobs with the affected backup's summary. */
|
|
110
|
+
backup?: BackupInfo;
|
|
61
111
|
error?: string;
|
|
62
112
|
startedAt: number;
|
|
63
113
|
updatedAt: number;
|
|
64
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* Docker housekeeping toggles (issue #302). Mirrors
|
|
117
|
+
* `GatewayConfig['gateway']['appHousekeeping']`; all fields optional so an
|
|
118
|
+
* absent config resolves to the conservative defaults in
|
|
119
|
+
* {@link AppInstaller.resolveHousekeeping}.
|
|
120
|
+
*/
|
|
121
|
+
export interface AppHousekeepingConfig {
|
|
122
|
+
buildCachePrune?: boolean;
|
|
123
|
+
buildCacheMaxAgeHours?: number;
|
|
124
|
+
danglingImagePrune?: boolean;
|
|
125
|
+
}
|
|
126
|
+
/** Read-only reclaim report (issue #302). Volumes are reported, never deleted. */
|
|
127
|
+
export interface HousekeepingReport {
|
|
128
|
+
/** Human-readable reclaimable build cache from `docker system df` (e.g. "1.457GB"); '' if unknown. */
|
|
129
|
+
buildCacheReclaimable: string;
|
|
130
|
+
/** Count of dangling `<none>` images with no container. */
|
|
131
|
+
danglingImageCount: number;
|
|
132
|
+
/** Orphaned volume names (LINKS=0). Report-only — NEVER auto-deleted. */
|
|
133
|
+
orphanVolumes: string[];
|
|
134
|
+
}
|
|
135
|
+
/** Result of a manual housekeeping call. */
|
|
136
|
+
export interface HousekeepingResult {
|
|
137
|
+
mode: 'report' | 'prune';
|
|
138
|
+
/** Which safe reclaims actually ran (prune mode only). */
|
|
139
|
+
pruned: {
|
|
140
|
+
buildCache: boolean;
|
|
141
|
+
danglingImages: boolean;
|
|
142
|
+
};
|
|
143
|
+
report: HousekeepingReport;
|
|
144
|
+
}
|
|
65
145
|
export interface InstallerCallbacks {
|
|
66
146
|
registerRoutes(appName: string, ports: ComposePort[]): void;
|
|
67
147
|
deregisterRoutes(appName: string): void;
|
|
@@ -104,11 +184,14 @@ export declare class AppInstaller {
|
|
|
104
184
|
private readonly spawn;
|
|
105
185
|
private readonly agentManager?;
|
|
106
186
|
private readonly spawnAsync;
|
|
187
|
+
private readonly housekeepingConfig;
|
|
107
188
|
private readonly jobs;
|
|
108
189
|
private readonly appsDir;
|
|
190
|
+
private readonly backupsDir;
|
|
191
|
+
private readonly appBackupConfig;
|
|
109
192
|
/** Tracks app names currently being installed to prevent concurrent installs of the same name. */
|
|
110
193
|
private readonly installingNames;
|
|
111
|
-
constructor(registry: AppsRegistry, registryClient: RegistryClient, callbacks: InstallerCallbacks, spawn?: SpawnFn, appsDir?: string, agentManager?: AgentManager | undefined, spawnAsync?: AsyncSpawnFn);
|
|
194
|
+
constructor(registry: AppsRegistry, registryClient: RegistryClient, callbacks: InstallerCallbacks, spawn?: SpawnFn, appsDir?: string, agentManager?: AgentManager | undefined, spawnAsync?: AsyncSpawnFn, housekeepingConfig?: AppHousekeepingConfig, appBackupConfig?: AppBackupConfig, backupsDir?: string);
|
|
112
195
|
/** Start an async install job. Returns jobId immediately. */
|
|
113
196
|
install(options: InstallOptions): string;
|
|
114
197
|
getJob(jobId: string): JobState | undefined;
|
|
@@ -143,6 +226,86 @@ export declare class AppInstaller {
|
|
|
143
226
|
*/
|
|
144
227
|
reconfigure(appName: string, options: ReconfigureOptions): string;
|
|
145
228
|
uninstall(appName: string): Promise<void>;
|
|
229
|
+
/**
|
|
230
|
+
* Start an async backup job. Returns jobId immediately; poll {@link getJob}.
|
|
231
|
+
* A backup is a permission-safe snapshot of the app's Docker named volumes +
|
|
232
|
+
* config (`.env`/`app.yaml`/compose) into a single archive under
|
|
233
|
+
* `<backupsDir>/<app>/`. The app is stopped for the snapshot and restarted
|
|
234
|
+
* afterwards (see {@link performBackup}).
|
|
235
|
+
*/
|
|
236
|
+
backup(appName: string): string;
|
|
237
|
+
/**
|
|
238
|
+
* Start an async restore job. Returns jobId immediately; poll {@link getJob}.
|
|
239
|
+
* Restores the app's volumes + config from a prior backup, then starts it.
|
|
240
|
+
*/
|
|
241
|
+
restore(appName: string, backupId: string): string;
|
|
242
|
+
/** List an app's backups, newest first. Reads the sidecar manifests. */
|
|
243
|
+
listBackups(appName: string): BackupInfo[];
|
|
244
|
+
/** Delete one backup (archive + sidecar). Idempotent. */
|
|
245
|
+
deleteBackup(appName: string, backupId: string): void;
|
|
246
|
+
private runBackup;
|
|
247
|
+
private runRestore;
|
|
248
|
+
/**
|
|
249
|
+
* Core backup routine (shared by the job path and the auto-backup hooks).
|
|
250
|
+
*
|
|
251
|
+
* Consistency: a running app is stopped for the snapshot so no writes land
|
|
252
|
+
* mid-tar, then ALWAYS restarted in a `finally` — a backup that throws never
|
|
253
|
+
* leaves the app stuck stopped.
|
|
254
|
+
*
|
|
255
|
+
* Permission safety: each named volume is tarred inside a throwaway root
|
|
256
|
+
* container (`docker run … tar czf`), so uid/gid/mode are preserved in the
|
|
257
|
+
* archive and no host `cp`/`chown`/sudo ever touches the volume data.
|
|
258
|
+
*/
|
|
259
|
+
private performBackup;
|
|
260
|
+
/**
|
|
261
|
+
* Core restore routine. Extracts the archive, wipes+repopulates each volume
|
|
262
|
+
* via the root helper (preserving inner ownership), restores `.env`, and
|
|
263
|
+
* starts the app on the restored data. Restoring across a differing
|
|
264
|
+
* appVersion is allowed but warns (possible schema/migration mismatch).
|
|
265
|
+
*/
|
|
266
|
+
private performRestore;
|
|
267
|
+
/**
|
|
268
|
+
* List an app's compose-level named volumes (the top-level `volumes:` keys).
|
|
269
|
+
* Returns [] when the app declares none or the query fails — a config-only
|
|
270
|
+
* backup is still useful (it captures `.env`).
|
|
271
|
+
*/
|
|
272
|
+
private discoverVolumes;
|
|
273
|
+
/**
|
|
274
|
+
* Discover bind-mount source directories that live **under the app dir**
|
|
275
|
+
* (e.g. `./data/photos` → `data/photos`). These hold app-owned data that is
|
|
276
|
+
* not a Docker named volume, so {@link discoverVolumes} never reports them —
|
|
277
|
+
* yet they are deleted on uninstall and must be captured in a backup.
|
|
278
|
+
*
|
|
279
|
+
* Returns app-dir-relative POSIX paths, deduped and sorted. Bind mounts whose
|
|
280
|
+
* source resolves outside the app dir (shared host resources such as a
|
|
281
|
+
* read-only `~/.claude/projects`) are intentionally excluded. Best-effort:
|
|
282
|
+
* returns `[]` on any failure, mirroring {@link discoverVolumes}.
|
|
283
|
+
*/
|
|
284
|
+
private discoverBindMounts;
|
|
285
|
+
/**
|
|
286
|
+
* Prune an app's backups by the union policy (issue #310): a backup is
|
|
287
|
+
* deleted when it is beyond the retention count **OR** older than
|
|
288
|
+
* `maxAgeDays` — whichever matches. `retention === 0` disables the count cap;
|
|
289
|
+
* `maxAgeDays === 0` disables the age cap. Runs after each successful backup
|
|
290
|
+
* and from the daily scheduler.
|
|
291
|
+
*/
|
|
292
|
+
private pruneBackups;
|
|
293
|
+
/**
|
|
294
|
+
* Prune **every** app's backups by the union policy. Enumerates the backup
|
|
295
|
+
* subdirs under `.backups/` (skipping anything that is not a valid app name),
|
|
296
|
+
* so it also reaches apps that are no longer being backed up. Best-effort:
|
|
297
|
+
* a failure on one app never aborts the sweep.
|
|
298
|
+
*/
|
|
299
|
+
cleanupAllBackups(now?: number): void;
|
|
300
|
+
/**
|
|
301
|
+
* Start the daily backup-cleanup scheduler (issue #310). Fires once per day at
|
|
302
|
+
* `cleanupHour` in `cleanupTimezone`, pruning all apps by the union policy.
|
|
303
|
+
* Returns a cancel function. No-op (returns a noop canceller) when both caps
|
|
304
|
+
* are disabled. The timer is `unref`'d so it never holds the event loop open.
|
|
305
|
+
*/
|
|
306
|
+
startBackupCleanup(): () => void;
|
|
307
|
+
private appBackupDir;
|
|
308
|
+
private copyIfExists;
|
|
146
309
|
startStopRestart(appName: string, action: 'start' | 'stop' | 'restart'): Promise<void>;
|
|
147
310
|
/**
|
|
148
311
|
* Reconcile one app's stored status against the live Docker runtime and
|
|
@@ -298,6 +461,53 @@ export declare class AppInstaller {
|
|
|
298
461
|
* IDs, or `[]` on any error (nothing to reclaim / docker unavailable).
|
|
299
462
|
*/
|
|
300
463
|
private captureComposeImageIds;
|
|
464
|
+
/**
|
|
465
|
+
* Image references (repo:tag) an app's compose file declares, e.g.
|
|
466
|
+
* "ghcr.io/x/monitor:1.1". Used to reclaim a superseded *pulled* tag on
|
|
467
|
+
* update — a tag bump the image-ID reclaim misses, because a pulled image
|
|
468
|
+
* carrying more than one repo tag cannot be removed by ID (issue #302).
|
|
469
|
+
* Best-effort — returns [] on any error.
|
|
470
|
+
*/
|
|
471
|
+
private captureComposeImageRefs;
|
|
472
|
+
/** Resolve the housekeeping toggles against their conservative defaults. */
|
|
473
|
+
private resolveHousekeeping;
|
|
474
|
+
/**
|
|
475
|
+
* Best-effort Docker housekeeping after a successful build (install + update).
|
|
476
|
+
* Reclaims ONLY provably-unreferenced junk:
|
|
477
|
+
* - build cache older than the configured window — time-filtered on purpose
|
|
478
|
+
* so a concurrent build's fresh layers are never evicted;
|
|
479
|
+
* - dangling `<none>` images with no container (safe by definition).
|
|
480
|
+
* Gated by config (all toggles off ⇒ no prune calls). Every prune is wrapped
|
|
481
|
+
* so a failure NEVER fails the parent install/update. Enforces the safety
|
|
482
|
+
* floor: no `-a`, no `system prune`, no volume prune (issue #302).
|
|
483
|
+
*/
|
|
484
|
+
private pruneAfterBuild;
|
|
485
|
+
/**
|
|
486
|
+
* Reclaim this app's own superseded pulled tags after an update (issue #302).
|
|
487
|
+
* The image-ID reclaim misses a pulled-tag bump (e.g. monitor:1.1 → :1.2.0):
|
|
488
|
+
* a pulled image with more than one repo tag can't be removed by ID. Remove
|
|
489
|
+
* exactly the app's prior refs that the NEW stack no longer references.
|
|
490
|
+
* `image rm <ref>` fails safely (and is caught) when a container still uses
|
|
491
|
+
* the image, so an in-use image is never yanked. Only this app's own tags are
|
|
492
|
+
* ever touched — never a blanket prune.
|
|
493
|
+
*/
|
|
494
|
+
private reclaimSupersededTags;
|
|
495
|
+
/** Read-only reclaim report (issue #302). Best-effort; never mutates state. */
|
|
496
|
+
housekeepingReport(): HousekeepingReport;
|
|
497
|
+
/**
|
|
498
|
+
* Execute the SAFE reclaim (build cache + dangling images only) and return a
|
|
499
|
+
* fresh report. This is an explicit operator action, so it runs regardless of
|
|
500
|
+
* the auto-path config toggles — but it still honors the fixed safety floor:
|
|
501
|
+
* never `-a`, never `system prune`, never a volume/auto delete. The build-cache
|
|
502
|
+
* window uses the configured value (default 168h).
|
|
503
|
+
*/
|
|
504
|
+
housekeepingPrune(): HousekeepingResult;
|
|
505
|
+
private buildHousekeepingReport;
|
|
506
|
+
/** `docker` stdout, or '' on any error (report helpers must never throw). */
|
|
507
|
+
private safeRunStdout;
|
|
508
|
+
private splitLines;
|
|
509
|
+
/** Reclaimable build-cache size from the `docker system df` "Build Cache" row. */
|
|
510
|
+
private readBuildCacheReclaimable;
|
|
301
511
|
private run;
|
|
302
512
|
private log;
|
|
303
513
|
private failJob;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/apps/installer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kCAAkC,EAAoB,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAa,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAmB,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAIL,WAAW,EACX,aAAa,EACb,YAAY,EAEZ,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/apps/installer.ts"],"names":[],"mappings":"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"}
|