@sandbank.dev/core 0.1.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.
- package/dist/capabilities.d.ts +3 -1
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +13 -1
- package/dist/file-helpers.d.ts.map +1 -1
- package/dist/file-helpers.js +2 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +37 -16
- package/dist/types.d.ts +42 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/capabilities.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Capability, PortExposeSandbox, Sandbox, SandboxProvider, SleepableSandbox, SnapshotSandbox, StreamableSandbox, TerminalSandbox, VolumeProvider } from './types.js';
|
|
1
|
+
import type { Capability, PortExposeSandbox, Sandbox, SandboxProvider, ServiceProvider, SleepableSandbox, SnapshotSandbox, StreamableSandbox, TerminalSandbox, VolumeProvider } from './types.js';
|
|
2
2
|
/** 检查 provider 是否支持某个能力 */
|
|
3
3
|
export declare function hasCapability(provider: SandboxProvider, capability: Capability): boolean;
|
|
4
4
|
/** 向下转型为支持流式执行的 Sandbox,不支持则返回 null */
|
|
@@ -13,4 +13,6 @@ export declare function withPortExpose(sandbox: Sandbox): PortExposeSandbox | nu
|
|
|
13
13
|
export declare function withSnapshot(sandbox: Sandbox): SnapshotSandbox | null;
|
|
14
14
|
/** 向下转型为支持卷管理的 Provider,不支持则返回 null */
|
|
15
15
|
export declare function withVolumes(provider: SandboxProvider): VolumeProvider | null;
|
|
16
|
+
/** 向下转型为支持服务管理的 Provider,不支持则返回 null */
|
|
17
|
+
export declare function withServices(provider: SandboxProvider): ServiceProvider | null;
|
|
16
18
|
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EACjB,OAAO,EACP,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,cAAc,EACf,MAAM,YAAY,CAAA;AAEnB,2BAA2B;AAC3B,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,UAAU,GACrB,OAAO,CAET;AAED,uCAAuC;AACvC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAKxE;AAED,qCAAqC;AACrC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAKrE;AAED,qCAAqC;AACrC,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAKnE;AAED,uCAAuC;AACvC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAKzE;AAED,qCAAqC;AACrC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAKrE;AAED,uCAAuC;AACvC,wBAAgB,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,cAAc,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EACjB,OAAO,EACP,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,cAAc,EACf,MAAM,YAAY,CAAA;AAEnB,2BAA2B;AAC3B,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,UAAU,GACrB,OAAO,CAET;AAED,uCAAuC;AACvC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAKxE;AAED,qCAAqC;AACrC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAKrE;AAED,qCAAqC;AACrC,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAKnE;AAED,uCAAuC;AACvC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAKzE;AAED,qCAAqC;AACrC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAKrE;AAED,uCAAuC;AACvC,wBAAgB,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,cAAc,GAAG,IAAI,CAS5E;AAED,wCAAwC;AACxC,wBAAgB,YAAY,CAAC,QAAQ,EAAE,eAAe,GAAG,eAAe,GAAG,IAAI,CAU9E"}
|
package/dist/capabilities.js
CHANGED
|
@@ -39,7 +39,19 @@ export function withSnapshot(sandbox) {
|
|
|
39
39
|
}
|
|
40
40
|
/** 向下转型为支持卷管理的 Provider,不支持则返回 null */
|
|
41
41
|
export function withVolumes(provider) {
|
|
42
|
-
if ('createVolume' in provider && typeof provider.createVolume === 'function'
|
|
42
|
+
if ('createVolume' in provider && typeof provider.createVolume === 'function' &&
|
|
43
|
+
'deleteVolume' in provider && typeof provider.deleteVolume === 'function' &&
|
|
44
|
+
'listVolumes' in provider && typeof provider.listVolumes === 'function') {
|
|
45
|
+
return provider;
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
/** 向下转型为支持服务管理的 Provider,不支持则返回 null */
|
|
50
|
+
export function withServices(provider) {
|
|
51
|
+
if ('createService' in provider && typeof provider.createService === 'function' &&
|
|
52
|
+
'getService' in provider && typeof provider.getService === 'function' &&
|
|
53
|
+
'listServices' in provider && typeof provider.listServices === 'function' &&
|
|
54
|
+
'destroyService' in provider && typeof provider.destroyService === 'function') {
|
|
43
55
|
return provider;
|
|
44
56
|
}
|
|
45
57
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-helpers.d.ts","sourceRoot":"","sources":["../src/file-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAMhD;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,UAAU,GAC3B,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,UAAU,CAAC,CAarB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,UAAU,GAAG,cAAc,EACpC,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"file-helpers.d.ts","sourceRoot":"","sources":["../src/file-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAMhD;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,UAAU,GAC3B,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,UAAU,CAAC,CAarB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,UAAU,GAAG,cAAc,EACpC,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAmDf;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,cAAc,EACvB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,cAAc,CAAC,CAsCzB"}
|
package/dist/file-helpers.js
CHANGED
|
@@ -83,6 +83,8 @@ export async function uploadArchiveViaExec(sandbox, archive, destDir) {
|
|
|
83
83
|
if (writeResult.exitCode !== 0) {
|
|
84
84
|
throw new Error(`uploadArchive: write failed: ${writeResult.stderr}`);
|
|
85
85
|
}
|
|
86
|
+
// 确保目标目录存在
|
|
87
|
+
await sandbox.exec(`mkdir -p ${shellEscape(target)}`);
|
|
86
88
|
// 解压
|
|
87
89
|
const extractResult = await sandbox.exec(`tar xzf ${tmp} -C ${shellEscape(target)}`);
|
|
88
90
|
if (extractResult.exitCode !== 0) {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export type { SandboxProvider, Sandbox, CreateConfig, ExecOptions, ExecResult, SandboxState, SandboxInfo, ListFilter, Capability, StreamableSandbox, TerminalSandbox, TerminalOptions, TerminalInfo, TerminalSession, Disposable, SleepableSandbox, PortExposeSandbox, SnapshotSandbox, VolumeProvider, VolumeConfig, VolumeInfo, SandboxAdapter, AdapterSandbox, SkillDefinition, } from './types.js';
|
|
1
|
+
export type { SandboxProvider, Sandbox, CreateConfig, ExecOptions, ExecResult, SandboxState, SandboxInfo, ListFilter, Capability, StreamableSandbox, TerminalSandbox, TerminalOptions, TerminalInfo, TerminalSession, Disposable, SleepableSandbox, PortExposeSandbox, SnapshotSandbox, VolumeProvider, VolumeConfig, VolumeInfo, ServiceType, ServiceConfig, ServiceCredentials, ServiceInfo, ServiceProvider, ServiceBinding, SandboxAdapter, AdapterSandbox, SkillDefinition, } from './types.js';
|
|
2
2
|
export { createProvider } from './provider.js';
|
|
3
|
-
export { hasCapability, withStreaming, withTerminal, withSleep, withPortExpose, withSnapshot, withVolumes, } from './capabilities.js';
|
|
3
|
+
export { hasCapability, withStreaming, withTerminal, withSleep, withPortExpose, withSnapshot, withVolumes, withServices, } from './capabilities.js';
|
|
4
4
|
export { SandboxError, SandboxNotFoundError, SandboxStateError, ExecTimeoutError, RateLimitError, ProviderError, CapabilityNotSupportedError, } from './errors.js';
|
|
5
5
|
export { connectTerminal } from './terminal.js';
|
|
6
6
|
export { injectSkills } from './skill-inject.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAEV,eAAe,EACf,OAAO,EACP,YAAY,EACZ,WAAW,EACX,UAAU,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EAEV,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,UAAU,EAEV,cAAc,EACd,cAAc,EAEd,eAAe,GAChB,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAG9C,OAAO,EACL,aAAa,EACb,aAAa,EACb,YAAY,EACZ,SAAS,EACT,cAAc,EACd,YAAY,EACZ,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAEV,eAAe,EACf,OAAO,EACP,YAAY,EACZ,WAAW,EACX,UAAU,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EAEV,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,UAAU,EAEV,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,cAAc,EAEd,cAAc,EACd,cAAc,EAEd,eAAe,GAChB,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAG9C,OAAO,EACL,aAAa,EACb,aAAa,EACb,YAAY,EACZ,SAAS,EACT,cAAc,EACd,YAAY,EACZ,WAAW,EACX,YAAY,GACb,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,2BAA2B,GAC5B,MAAM,aAAa,CAAA;AAGpB,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAG/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAGnH,YAAY,EACV,eAAe,EACf,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,OAAO,EACP,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,SAAS,GACV,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Provider factory
|
|
2
2
|
export { createProvider } from './provider.js';
|
|
3
3
|
// Capability detection
|
|
4
|
-
export { hasCapability, withStreaming, withTerminal, withSleep, withPortExpose, withSnapshot, withVolumes, } from './capabilities.js';
|
|
4
|
+
export { hasCapability, withStreaming, withTerminal, withSleep, withPortExpose, withSnapshot, withVolumes, withServices, } from './capabilities.js';
|
|
5
5
|
// Errors
|
|
6
6
|
export { SandboxError, SandboxNotFoundError, SandboxStateError, ExecTimeoutError, RateLimitError, ProviderError, CapabilityNotSupportedError, } from './errors.js';
|
|
7
7
|
// Terminal session
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAQV,cAAc,EAEd,eAAe,
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAQV,cAAc,EAEd,eAAe,EAShB,MAAM,YAAY,CAAA;AAqGnB,2BAA2B;AAC3B,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,eAAe,CA0EvE"}
|
package/dist/provider.js
CHANGED
|
@@ -58,15 +58,6 @@ function wrapSandbox(raw, providerName) {
|
|
|
58
58
|
}
|
|
59
59
|
return sandbox;
|
|
60
60
|
}
|
|
61
|
-
/** 能力到 AdapterSandbox 方法的映射 */
|
|
62
|
-
const CAPABILITY_METHOD_MAP = {
|
|
63
|
-
'exec.stream': 'execStream',
|
|
64
|
-
'terminal': 'startTerminal',
|
|
65
|
-
'sleep': 'sleep',
|
|
66
|
-
'volumes': '', // checked at adapter level, not sandbox level
|
|
67
|
-
'snapshot': 'createSnapshot',
|
|
68
|
-
'port.expose': 'exposePort',
|
|
69
|
-
};
|
|
70
61
|
/**
|
|
71
62
|
* 交叉验证 adapter 声明的能力。
|
|
72
63
|
*
|
|
@@ -84,6 +75,12 @@ function detectCapabilities(adapter) {
|
|
|
84
75
|
validated.add(cap);
|
|
85
76
|
}
|
|
86
77
|
}
|
|
78
|
+
else if (cap === 'services') {
|
|
79
|
+
// services 是 provider 级别能力,可以直接验证
|
|
80
|
+
if (adapter.createService && adapter.getService && adapter.listServices && adapter.destroyService) {
|
|
81
|
+
validated.add(cap);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
87
84
|
else {
|
|
88
85
|
// sandbox 级别能力,信任 adapter 声明
|
|
89
86
|
validated.add(cap);
|
|
@@ -98,6 +95,25 @@ export function createProvider(adapter) {
|
|
|
98
95
|
get name() { return adapter.name; },
|
|
99
96
|
get capabilities() { return capabilities; },
|
|
100
97
|
async create(config) {
|
|
98
|
+
// 如果绑定了 services,解析凭证注入 env
|
|
99
|
+
if (config.services?.length) {
|
|
100
|
+
if (!capabilities.has('services') || !adapter.getService) {
|
|
101
|
+
throw new CapabilityNotSupportedError(adapter.name, 'services');
|
|
102
|
+
}
|
|
103
|
+
const getService = adapter.getService.bind(adapter);
|
|
104
|
+
const mergedEnv = { ...config.env };
|
|
105
|
+
for (const binding of config.services) {
|
|
106
|
+
const svc = await getService(binding.id);
|
|
107
|
+
if (svc.state !== 'ready') {
|
|
108
|
+
throw new ProviderError(adapter.name, new Error(`Service ${binding.id} is not ready (state: ${svc.state})`));
|
|
109
|
+
}
|
|
110
|
+
for (const [key, value] of Object.entries(svc.credentials.env)) {
|
|
111
|
+
const envKey = binding.envPrefix ? `${binding.envPrefix}_${key}` : key;
|
|
112
|
+
mergedEnv[envKey] = value;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
config = { ...config, env: mergedEnv };
|
|
116
|
+
}
|
|
101
117
|
const raw = await adapter.createSandbox(config);
|
|
102
118
|
const sandbox = wrapSandbox(raw, adapter.name);
|
|
103
119
|
if (config.skills?.length) {
|
|
@@ -122,13 +138,18 @@ export function createProvider(adapter) {
|
|
|
122
138
|
return adapter.destroySandbox(id);
|
|
123
139
|
},
|
|
124
140
|
};
|
|
125
|
-
//
|
|
141
|
+
// 累积式挂载可选能力方法(volumes 和 services 可以共存)
|
|
142
|
+
const extended = provider;
|
|
126
143
|
if (capabilities.has('volumes') && adapter.createVolume && adapter.deleteVolume && adapter.listVolumes) {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
144
|
+
extended.createVolume = (config) => adapter.createVolume(config);
|
|
145
|
+
extended.deleteVolume = (id) => adapter.deleteVolume(id);
|
|
146
|
+
extended.listVolumes = () => adapter.listVolumes();
|
|
147
|
+
}
|
|
148
|
+
if (capabilities.has('services') && adapter.createService && adapter.getService && adapter.listServices && adapter.destroyService) {
|
|
149
|
+
extended.createService = (config) => adapter.createService(config);
|
|
150
|
+
extended.getService = (id) => adapter.getService(id);
|
|
151
|
+
extended.listServices = () => adapter.listServices();
|
|
152
|
+
extended.destroyService = (id) => adapter.destroyService(id);
|
|
132
153
|
}
|
|
133
|
-
return
|
|
154
|
+
return extended;
|
|
134
155
|
}
|
package/dist/types.d.ts
CHANGED
|
@@ -45,6 +45,8 @@ export interface CreateConfig {
|
|
|
45
45
|
* 每个 skill 会被写入沙箱的 `~/.claude/skills/` 目录。
|
|
46
46
|
*/
|
|
47
47
|
skills?: SkillDefinition[];
|
|
48
|
+
/** 绑定的服务。凭证自动注入为环境变量(需 provider 支持 'services' 能力) */
|
|
49
|
+
services?: ServiceBinding[];
|
|
48
50
|
}
|
|
49
51
|
export interface ListFilter {
|
|
50
52
|
state?: SandboxState | SandboxState[];
|
|
@@ -87,7 +89,7 @@ export interface SandboxInfo {
|
|
|
87
89
|
image: string;
|
|
88
90
|
region?: string;
|
|
89
91
|
}
|
|
90
|
-
export type Capability = 'exec.stream' | 'terminal' | 'sleep' | 'volumes' | 'snapshot' | 'port.expose';
|
|
92
|
+
export type Capability = 'exec.stream' | 'terminal' | 'sleep' | 'volumes' | 'snapshot' | 'port.expose' | 'services';
|
|
91
93
|
export interface StreamableSandbox extends Sandbox {
|
|
92
94
|
execStream(command: string, options?: ExecOptions): Promise<ReadableStream<Uint8Array>>;
|
|
93
95
|
}
|
|
@@ -152,6 +154,41 @@ export interface VolumeInfo {
|
|
|
152
154
|
sizeGB: number;
|
|
153
155
|
attachedTo: string | null;
|
|
154
156
|
}
|
|
157
|
+
export type ServiceType = 'postgres';
|
|
158
|
+
export interface ServiceConfig {
|
|
159
|
+
/** 服务类型 */
|
|
160
|
+
type: ServiceType;
|
|
161
|
+
/** 服务名称 */
|
|
162
|
+
name: string;
|
|
163
|
+
/** 区域偏好(provider 可忽略) */
|
|
164
|
+
region?: string;
|
|
165
|
+
}
|
|
166
|
+
export interface ServiceCredentials {
|
|
167
|
+
/** 主连接 URL(如 postgres://...) */
|
|
168
|
+
url: string;
|
|
169
|
+
/** 注入到 sandbox 的环境变量映射 */
|
|
170
|
+
env: Record<string, string>;
|
|
171
|
+
}
|
|
172
|
+
export interface ServiceInfo {
|
|
173
|
+
id: string;
|
|
174
|
+
type: ServiceType;
|
|
175
|
+
name: string;
|
|
176
|
+
state: 'creating' | 'ready' | 'error' | 'terminated';
|
|
177
|
+
credentials: ServiceCredentials;
|
|
178
|
+
}
|
|
179
|
+
export interface ServiceProvider extends SandboxProvider {
|
|
180
|
+
createService(config: ServiceConfig): Promise<ServiceInfo>;
|
|
181
|
+
getService(id: string): Promise<ServiceInfo>;
|
|
182
|
+
listServices(): Promise<ServiceInfo[]>;
|
|
183
|
+
destroyService(id: string): Promise<void>;
|
|
184
|
+
}
|
|
185
|
+
export interface ServiceBinding {
|
|
186
|
+
/** Service ID */
|
|
187
|
+
id: string;
|
|
188
|
+
/** 环境变量前缀。默认无前缀(直接用 DATABASE_URL 等)。
|
|
189
|
+
* 设为 'BRAIN' 则注入 BRAIN_DATABASE_URL 等 */
|
|
190
|
+
envPrefix?: string;
|
|
191
|
+
}
|
|
155
192
|
export interface SandboxAdapter {
|
|
156
193
|
readonly name: string;
|
|
157
194
|
readonly capabilities: ReadonlySet<Capability>;
|
|
@@ -162,6 +199,10 @@ export interface SandboxAdapter {
|
|
|
162
199
|
createVolume?(config: VolumeConfig): Promise<VolumeInfo>;
|
|
163
200
|
deleteVolume?(id: string): Promise<void>;
|
|
164
201
|
listVolumes?(): Promise<VolumeInfo[]>;
|
|
202
|
+
createService?(config: ServiceConfig): Promise<ServiceInfo>;
|
|
203
|
+
getService?(id: string): Promise<ServiceInfo>;
|
|
204
|
+
listServices?(): Promise<ServiceInfo[]>;
|
|
205
|
+
destroyService?(id: string): Promise<void>;
|
|
165
206
|
}
|
|
166
207
|
export interface AdapterSandbox {
|
|
167
208
|
id: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB,wBAAwB;IACxB,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,CAAA;IAE9C,eAAe;IACf,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAE9C,2CAA2C;IAC3C,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAEjC,eAAe;IACf,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;IAEjD,uBAAuB;IACvB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAA;IAEb,aAAa;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAE5B,gCAAgC;IAChC,SAAS,CAAC,EAAE;QACV,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;IAED,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,+BAA+B;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAE3B,yCAAyC;IACzC,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,MAAM,CAAA;QACV,SAAS,EAAE,MAAM,CAAA;KAClB,CAAC,CAAA;IAEF,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;;OAGG;IACH,MAAM,CAAC,EAAE,eAAe,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|