@giselles-ai/sandkit 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.
- package/LICENSE +21 -0
- package/README.md +163 -0
- package/dist/adapters/drizzle.d.ts +83 -0
- package/dist/adapters/drizzle.js +9 -0
- package/dist/adapters/drizzle.js.map +1 -0
- package/dist/adapters/memory.d.ts +6 -0
- package/dist/adapters/memory.js +8 -0
- package/dist/adapters/memory.js.map +1 -0
- package/dist/adapters/sqlite-bun.d.ts +7 -0
- package/dist/adapters/sqlite-bun.js +8 -0
- package/dist/adapters/sqlite-bun.js.map +1 -0
- package/dist/bin.js +697 -0
- package/dist/bin.js.map +1 -0
- package/dist/chunk-7DLK7LOM.js +44 -0
- package/dist/chunk-7DLK7LOM.js.map +1 -0
- package/dist/chunk-BDPTYR6V.js +407 -0
- package/dist/chunk-BDPTYR6V.js.map +1 -0
- package/dist/chunk-CSOBTLWV.js +202 -0
- package/dist/chunk-CSOBTLWV.js.map +1 -0
- package/dist/chunk-DLGUA3H7.js +9 -0
- package/dist/chunk-DLGUA3H7.js.map +1 -0
- package/dist/chunk-FSDVHEEX.js +45 -0
- package/dist/chunk-FSDVHEEX.js.map +1 -0
- package/dist/chunk-HVYCAAZQ.js +25 -0
- package/dist/chunk-HVYCAAZQ.js.map +1 -0
- package/dist/chunk-LC3IYBAL.js +100 -0
- package/dist/chunk-LC3IYBAL.js.map +1 -0
- package/dist/chunk-REGOUXVI.js +58 -0
- package/dist/chunk-REGOUXVI.js.map +1 -0
- package/dist/chunk-RMMOQD5Y.js +211 -0
- package/dist/chunk-RMMOQD5Y.js.map +1 -0
- package/dist/chunk-UDFWES6J.js +486 -0
- package/dist/chunk-UDFWES6J.js.map +1 -0
- package/dist/chunk-VISDS5T7.js +202 -0
- package/dist/chunk-VISDS5T7.js.map +1 -0
- package/dist/chunk-XM4HGRXW.js +37 -0
- package/dist/chunk-XM4HGRXW.js.map +1 -0
- package/dist/cli/index.d.ts +19 -0
- package/dist/cli/index.js +397 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +78 -0
- package/dist/index.js +1102 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/mock.d.ts +19 -0
- package/dist/integrations/mock.js +207 -0
- package/dist/integrations/mock.js.map +1 -0
- package/dist/integrations/vercel.d.ts +7 -0
- package/dist/integrations/vercel.js +400 -0
- package/dist/integrations/vercel.js.map +1 -0
- package/dist/policies/ai-gateway.d.ts +15 -0
- package/dist/policies/ai-gateway.js +12 -0
- package/dist/policies/ai-gateway.js.map +1 -0
- package/dist/policies/codex.d.ts +10 -0
- package/dist/policies/codex.js +12 -0
- package/dist/policies/codex.js.map +1 -0
- package/dist/policies/gemini.d.ts +10 -0
- package/dist/policies/gemini.js +12 -0
- package/dist/policies/gemini.js.map +1 -0
- package/dist/schema/index.d.ts +60 -0
- package/dist/schema/index.js +31 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/types-BCgprbo8.d.ts +47 -0
- package/dist/types-BEKQnjeb.d.ts +139 -0
- package/dist/types-Cy36bS1j.d.ts +138 -0
- package/package.json +126 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/generate.ts","../../src/cli/discovery.ts","../../src/cli/index.ts"],"sourcesContent":["import { mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\n\nimport { createGeneratePayload } from \"../schema/generate\";\nimport { createModelSnapshot } from \"../schema/model\";\nimport { resolveProviderWithDiscovery } from \"./discovery\";\nimport type {\n SandkitGenerateArgs,\n SandkitGenerateResolvedArgs,\n SandkitGenerateResult,\n} from \"./types\";\n\nfunction usage() {\n return [\n \"Usage: sandkit generate [--adapter drizzle] [--dialect <sqlite|postgresql|pg>] [--out <file>] [--stdout]\",\n \"Example: npx @giselles-ai/sandkit generate --dialect sqlite --stdout\",\n \"Example: npx @giselles-ai/sandkit generate --adapter drizzle --dialect postgresql --stdout\",\n \"If --stdout is omitted, output is shown to console by default.\",\n \"Default output file: db/schema/sandkit.ts\",\n ].join(\"\\n\");\n}\n\nexport function parseGenerateArgs(argv: string[]): SandkitGenerateArgs {\n let provider: SandkitGenerateArgs[\"provider\"];\n let dialect: SandkitGenerateArgs[\"dialect\"];\n let adapter: SandkitGenerateArgs[\"adapter\"];\n let out: string | undefined;\n let stdout = false;\n\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i];\n if (arg === \"--adapter\") {\n const next = argv[i + 1];\n if (next === \"drizzle\") {\n adapter = next;\n i++;\n continue;\n }\n throw new Error(\"Unsupported --adapter value. Use --adapter drizzle.\");\n }\n if (arg === \"--provider\") {\n const next = argv[i + 1];\n if (next === \"sqlite\" || next === \"postgresql\" || next === \"mysql\") {\n provider = next;\n i++;\n continue;\n }\n throw new Error(`Invalid provider: ${next}`);\n }\n if (arg === \"--dialect\") {\n const next = argv[i + 1];\n if (next === \"sqlite\" || next === \"postgresql\" || next === \"pg\") {\n dialect = next === \"pg\" ? \"postgresql\" : next;\n i++;\n continue;\n }\n throw new Error(`Invalid dialect: ${next}`);\n }\n if (arg === \"--out\") {\n const next = argv[i + 1];\n if (!next) {\n throw new Error(\"Missing --out path\");\n }\n out = next;\n i++;\n continue;\n }\n if (arg === \"--stdout\") {\n stdout = true;\n continue;\n }\n if (arg === \"--help\" || arg === \"-h\") {\n throw new Error(usage());\n }\n if (arg === \"generate\") {\n continue;\n }\n throw new Error(`Unknown option: ${arg}`);\n }\n\n return {\n provider,\n dialect,\n adapter,\n out,\n stdout,\n };\n}\n\nexport function runGenerateCommand(options: SandkitGenerateResolvedArgs): SandkitGenerateResult {\n const snapshot = createModelSnapshot(options.provider);\n const payload = createGeneratePayload(options.provider, snapshot.model);\n const defaultOutputFile =\n options.adapter === \"drizzle\" || options.adapter === undefined\n ? \"db/schema/sandkit.ts\"\n : `sandkit-schema.${options.provider}.ts`;\n const outputFile = options.out ?? defaultOutputFile;\n\n const result: SandkitGenerateResult = {\n command: \"generate\",\n provider: options.provider,\n outputTarget: options.stdout ? \"stdout\" : \"file\",\n outputFile: options.stdout ? null : outputFile,\n payload: {\n generatedAt: payload.generatedAt,\n summary: payload.summary,\n schemaText: payload.schemaText,\n },\n };\n\n if (!options.stdout) {\n mkdirSync(dirname(outputFile), { recursive: true });\n writeFileSync(outputFile, payload.schemaText, \"utf8\");\n }\n\n return result;\n}\n\nexport async function runCliGenerate(argv: string[]): Promise<SandkitGenerateResult> {\n const options = parseGenerateArgs(argv);\n const discovered = await resolveProviderWithDiscovery({\n provider: options.provider,\n adapter: options.adapter,\n dialect: options.dialect,\n stdout: false,\n out: options.out,\n });\n\n return runGenerateCommand({\n provider: discovered.provider,\n adapter: discovered.adapter,\n dialect: options.dialect,\n out: options.out,\n stdout: options.stdout,\n });\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { createInterface } from \"node:readline\";\n\nimport type { SandkitDialect } from \"../schema/model\";\nimport type { SandkitGenerateArgs } from \"./types\";\n\ntype SupportedAdapter = \"drizzle\";\n\nconst drizzleConfigFiles = [\n \"drizzle.config.ts\",\n \"drizzle.config.js\",\n \"drizzle.config.mjs\",\n \"drizzle.config.cjs\",\n \"drizzle.config.mts\",\n \"drizzle.config.cts\",\n \"drizzle.config.json\",\n \"drizzle.config.yaml\",\n \"drizzle.config.yml\",\n] as const;\n\nconst drizzleDependency = \"drizzle-orm\";\n\ninterface ProviderEvidenceScore {\n provider: SandkitDialect;\n weight: number;\n}\n\nexport interface DiscoveryEvidence {\n source: string;\n signal: string;\n provider?: SandkitDialect;\n score: number;\n}\n\nexport interface DiscoveryHint {\n adapter: SupportedAdapter;\n provider: SandkitDialect;\n confidence: number;\n evidence: DiscoveryEvidence[];\n prompted: boolean;\n}\n\nfunction parsePackageJsonDependencies(\n packagePath: string,\n evidence: DiscoveryEvidence[],\n): ProviderEvidenceScore[] {\n if (!existsSync(packagePath)) {\n return [];\n }\n\n let packageData: {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n } = {};\n try {\n packageData = JSON.parse(readFileSync(packagePath, \"utf8\"));\n } catch {\n return [];\n }\n\n const dependencies = { ...packageData.dependencies, ...packageData.devDependencies };\n const depNames = Object.keys(dependencies);\n\n if (!depNames.includes(drizzleDependency)) {\n return [];\n }\n\n evidence.push({\n source: \"package.json\",\n signal: \"Dependency `drizzle-orm` found.\",\n score: 1.1,\n });\n\n const sqliteSignals = (\n [\n [\"better-sqlite3\", \"sqlite\"],\n [\"libsql\", \"sqlite\"],\n [\"@libsql/client\", \"sqlite\"],\n [\"@turso\", \"sqlite\"],\n ] as const\n ).flatMap<ProviderEvidenceScore>(([name, provider]) =>\n depNames.some((dep) => dep.includes(name)) ? [{ provider, weight: 1.6 }] : [],\n );\n\n const postgresSignals = (\n [\n [\"pg\", \"postgresql\"],\n [\"postgres\", \"postgresql\"],\n [\"@vercel/postgres\", \"postgresql\"],\n [\"@neondatabase/serverless\", \"postgresql\"],\n ] as const\n ).flatMap<ProviderEvidenceScore>(([name, provider]) =>\n depNames.some((dep) => dep.includes(name)) ? [{ provider, weight: 1.6 }] : [],\n );\n\n const addSignals = (signals: ProviderEvidenceScore[]) =>\n signals.forEach((entry) =>\n evidence.push({\n source: \"package.json\",\n signal: `Dependency implies ${entry.provider} driver usage (${entry.provider} signal).`,\n provider: entry.provider,\n score: entry.weight,\n }),\n );\n\n addSignals(sqliteSignals);\n addSignals(postgresSignals);\n\n return [...sqliteSignals, ...postgresSignals];\n}\n\nfunction inspectDrizzleConfig(cwd: string, evidence: DiscoveryEvidence[]): ProviderEvidenceScore[] {\n const results: ProviderEvidenceScore[] = [];\n\n for (const filename of drizzleConfigFiles) {\n const configPath = join(cwd, filename);\n if (!existsSync(configPath)) {\n continue;\n }\n\n let text = \"\";\n try {\n text = readFileSync(configPath, \"utf8\");\n } catch {\n continue;\n }\n\n evidence.push({\n source: filename,\n signal: `Found drizzle config file: ${filename}.`,\n score: 0.6,\n });\n\n if (/dialect\\s*:\\s*[\"']sqlite[\"']/i.test(text)) {\n evidence.push({\n source: filename,\n signal: \"Drizzle config sets dialect to sqlite.\",\n provider: \"sqlite\",\n score: 3,\n });\n return [{ provider: \"sqlite\", weight: 3 }];\n }\n\n if (/dialect\\s*:\\s*[\"']postgresql[\"']/i.test(text)) {\n evidence.push({\n source: filename,\n signal: \"Drizzle config sets dialect to postgresql.\",\n provider: \"postgresql\",\n score: 3,\n });\n return [{ provider: \"postgresql\", weight: 3 }];\n }\n\n if (/dialect\\s*:\\s*[\"']mysql[\"']/i.test(text)) {\n evidence.push({\n source: filename,\n signal: \"Drizzle config sets dialect to mysql.\",\n provider: \"mysql\",\n score: 3,\n });\n return [{ provider: \"mysql\", weight: 3 }];\n }\n\n const dbUrlMatch = text.match(/url\\s*:\\s*[\"'`](.*?)[\"'`]/i);\n if (dbUrlMatch?.[1]) {\n const url = dbUrlMatch[1].toLowerCase();\n if (url.includes(\"turso\") || url.includes(\"libsql\") || url.includes(\"sqlite\")) {\n evidence.push({\n source: filename,\n signal: \"Drizzle config DB URL contains sqlite/libsql/turso hints.\",\n provider: \"sqlite\",\n score: 2,\n });\n results.push({ provider: \"sqlite\", weight: 2 });\n }\n\n if (url.includes(\"postgres\")) {\n evidence.push({\n source: filename,\n signal: \"Drizzle config DB URL contains postgres hints.\",\n provider: \"postgresql\",\n score: 2,\n });\n results.push({ provider: \"postgresql\", weight: 2 });\n }\n }\n }\n\n return results;\n}\n\nfunction collectEvidence(cwd: string): {\n evidence: DiscoveryEvidence[];\n isDrizzleProject: boolean;\n} {\n const evidence: DiscoveryEvidence[] = [];\n const packageSignals = parsePackageJsonDependencies(join(cwd, \"package.json\"), evidence);\n const drizzleSignals = inspectDrizzleConfig(cwd, evidence);\n return {\n evidence,\n isDrizzleProject: packageSignals.length > 0 || drizzleSignals.length > 0,\n };\n}\n\nfunction rankProviderSignals(evidence: DiscoveryEvidence[]): {\n provider?: SandkitDialect;\n confidence: number;\n} {\n const totals: Record<SandkitDialect, number> = { sqlite: 0, postgresql: 0, mysql: 0 };\n\n for (const item of evidence) {\n if (!item.provider) continue;\n totals[item.provider] += item.score;\n }\n\n const ranked = (Object.entries(totals) as [SandkitDialect, number][])\n .sort((a, b) => b[1] - a[1])\n .filter((entry) => entry[1] > 0);\n\n if (ranked.length === 0) {\n return { provider: undefined, confidence: 0 };\n }\n\n const [winner, winnerScore] = ranked[0]!;\n const secondScore = ranked[1]?.[1] ?? 0;\n const confidence = winnerScore === 0 ? 0 : winnerScore / (winnerScore + secondScore);\n return { provider: winner, confidence };\n}\n\nfunction promptWithChoices(question: string, options: string[], fallback: string): Promise<string> {\n return new Promise((resolve) => {\n const rl = createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n rl.question(question, (answer) => {\n rl.close();\n const normalized = answer.trim().toLowerCase();\n if (options.includes(normalized)) {\n resolve(normalized);\n return;\n }\n resolve(fallback);\n });\n });\n}\n\nexport async function resolveProviderWithDiscovery(\n options: SandkitGenerateArgs,\n cwd = process.cwd(),\n): Promise<DiscoveryHint> {\n const requestedProvider = options.provider ?? options.dialect;\n const normalizedProvider = requestedProvider === \"pg\" ? \"postgresql\" : requestedProvider;\n\n if (normalizedProvider) {\n if (\n normalizedProvider !== \"sqlite\" &&\n normalizedProvider !== \"postgresql\" &&\n normalizedProvider !== \"mysql\"\n ) {\n throw new Error(\"Invalid provider. Use one of: sqlite, postgresql, mysql.\");\n }\n return {\n adapter: \"drizzle\",\n provider: normalizedProvider,\n confidence: 1,\n evidence: [\n {\n source: \"cli\",\n signal: `Provider explicitly set as ${normalizedProvider}.`,\n provider: normalizedProvider,\n score: 100,\n },\n ],\n prompted: false,\n };\n }\n\n if (options.adapter && options.adapter !== \"drizzle\") {\n throw new Error(\"Unsupported adapter. This release supports --adapter drizzle only.\");\n }\n\n const { evidence, isDrizzleProject } = collectEvidence(cwd);\n const inference = rankProviderSignals(evidence);\n const adapter: SupportedAdapter = isDrizzleProject ? \"drizzle\" : \"drizzle\";\n\n if (!isDrizzleProject) {\n throw new Error(\n \"Could not detect a drizzle project from this directory. \" +\n \"Run inside a Drizzle project and pass --dialect/--adapter explicitly if needed.\",\n );\n }\n\n if (inference.provider && inference.confidence >= 0.75) {\n return {\n adapter,\n provider: inference.provider,\n confidence: inference.confidence,\n evidence,\n prompted: false,\n };\n }\n\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n throw new Error(\n \"Could not infer database provider confidently. \" +\n \"Re-run with --dialect <sqlite|postgresql|pg>.\",\n );\n }\n\n const prompt = await promptWithChoices(\n `Could not infer the database provider from repo signals.\\n` +\n `Select provider [sqlite|postgresql|mysql] (default sqlite): `,\n [\"sqlite\", \"postgresql\", \"mysql\"],\n \"sqlite\",\n );\n return {\n adapter,\n provider: prompt as SandkitDialect,\n confidence: inference.confidence,\n evidence,\n prompted: true,\n };\n}\n","import { parseGenerateArgs, runCliGenerate } from \"./generate\";\nimport type { SandkitCliCommand, SandkitGenerateArgs, SandkitGenerateResult } from \"./types\";\n\nfunction buildHelp() {\n return [\n \"Sandkit CLI\",\n \"Commands: generate\",\n \"\",\n \" sandkit generate [--adapter drizzle] [--dialect <sqlite|postgresql|pg>] [--stdout] [--out file]\",\n \"\",\n \"When --stdout is set, output is returned in memory and printed by caller.\",\n ].join(\"\\n\");\n}\n\nfunction parseArgs(\n argv: string[],\n): { command: SandkitCliCommand; rest: string[] } & SandkitGenerateArgs {\n if (argv.length === 0 || argv.includes(\"--help\") || argv.includes(\"-h\")) {\n throw new Error(buildHelp());\n }\n\n const command = argv[0] as SandkitCliCommand;\n if (command !== \"generate\") {\n throw new Error(`Unknown command: ${command}`);\n }\n\n const rest = argv.slice(1);\n const commandOptions = parseGenerateArgs(rest);\n return { command, ...commandOptions, rest };\n}\n\nexport type SandkitRunResult = SandkitGenerateResult;\n\nexport async function runCli(argv = process.argv.slice(2)): Promise<SandkitRunResult> {\n const parsed = parseArgs(argv);\n if (parsed.command === \"generate\") {\n const { rest } = parsed;\n return runCliGenerate(rest);\n }\n\n throw new Error(`Unhandled command: ${parsed.command}`);\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { S as SandkitOptions, a as SandboxDriverFactory, C as CommandResult, b as SandboxRunCommandOptions, W as WorkspaceSessionProcess, c as WorkspaceSessionProcessStartInput, d as WorkspaceSandboxLease, e as WorkspaceCreateOptions } from './types-BEKQnjeb.js';
|
|
2
|
+
import { W as WorkspacePolicy, P as PolicyServiceDescriptor } from './types-BCgprbo8.js';
|
|
3
|
+
export { a as PolicyServiceCredentialSource } from './types-BCgprbo8.js';
|
|
4
|
+
export { aiGateway } from './policies/ai-gateway.js';
|
|
5
|
+
export { codex } from './policies/codex.js';
|
|
6
|
+
export { gemini } from './policies/gemini.js';
|
|
7
|
+
export { S as SharedSetup } from './types-Cy36bS1j.js';
|
|
8
|
+
|
|
9
|
+
interface SandkitContext {
|
|
10
|
+
readonly adapter: NonNullable<SandkitOptions["database"]>;
|
|
11
|
+
readonly driverFactory: SandboxDriverFactory;
|
|
12
|
+
readonly options: SandkitOptions;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
interface WorkspaceSandboxHandle {
|
|
16
|
+
runCommand(command: string, args: string[]): Promise<CommandResult>;
|
|
17
|
+
runCommand(input: SandboxRunCommandOptions): Promise<CommandResult>;
|
|
18
|
+
/**
|
|
19
|
+
* Opens a live sandbox lease. timeoutMs overrides the provider's default
|
|
20
|
+
* lease timeout for this session start; it does not change runCommand()
|
|
21
|
+
* semantics or command-level timeouts.
|
|
22
|
+
*/
|
|
23
|
+
openSession(input?: {
|
|
24
|
+
timeoutMs?: number;
|
|
25
|
+
}): Promise<WorkspaceSessionHandle>;
|
|
26
|
+
attachSession(): Promise<WorkspaceSessionHandle>;
|
|
27
|
+
getActiveLease(): Promise<WorkspaceSandboxLease | null>;
|
|
28
|
+
}
|
|
29
|
+
interface WorkspaceSessionHandle {
|
|
30
|
+
exec(command: string, args: string[]): Promise<CommandResult>;
|
|
31
|
+
exec(input: SandboxRunCommandOptions): Promise<CommandResult>;
|
|
32
|
+
commit(): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Sets a non-durable, session-scoped policy override for subsequent session
|
|
35
|
+
* commands and process launches.
|
|
36
|
+
*/
|
|
37
|
+
setPolicy(policy: WorkspacePolicy): Promise<void>;
|
|
38
|
+
startProcess(command: string, args: string[]): Promise<WorkspaceSessionProcess>;
|
|
39
|
+
startProcess(input: WorkspaceSessionProcessStartInput): Promise<WorkspaceSessionProcess>;
|
|
40
|
+
url(port: number): Promise<string>;
|
|
41
|
+
extendTimeout(durationMs: number): Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
interface PublicWorkspaceHandle {
|
|
45
|
+
readonly id: string;
|
|
46
|
+
readonly descriptor: WorkspaceDescriptor;
|
|
47
|
+
readonly sandbox: WorkspaceSandboxHandle;
|
|
48
|
+
setPolicy(policy: WorkspacePolicy): Promise<void>;
|
|
49
|
+
}
|
|
50
|
+
type WorkspaceStatus = "active" | "inactive" | "archived";
|
|
51
|
+
interface WorkspaceDescriptor {
|
|
52
|
+
readonly id: string;
|
|
53
|
+
readonly name?: string;
|
|
54
|
+
readonly status: WorkspaceStatus;
|
|
55
|
+
readonly createdAt: string;
|
|
56
|
+
readonly updatedAt: string;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
declare class Sandkit {
|
|
60
|
+
#private;
|
|
61
|
+
constructor(options: SandkitOptions);
|
|
62
|
+
get context(): SandkitContext;
|
|
63
|
+
createWorkspace(input?: WorkspaceCreateOptions): Promise<PublicWorkspaceHandle>;
|
|
64
|
+
getWorkspace(id: string): Promise<PublicWorkspaceHandle>;
|
|
65
|
+
}
|
|
66
|
+
declare function createSandkit(options: SandkitOptions): Sandkit;
|
|
67
|
+
|
|
68
|
+
declare function allowAll(): WorkspacePolicy;
|
|
69
|
+
declare function denyAll(): WorkspacePolicy;
|
|
70
|
+
declare function allowService(service: PolicyServiceDescriptor): WorkspacePolicy;
|
|
71
|
+
declare function allowServices(services: readonly PolicyServiceDescriptor[]): WorkspacePolicy;
|
|
72
|
+
|
|
73
|
+
interface GithubOptions {
|
|
74
|
+
readonly apiKey?: string;
|
|
75
|
+
}
|
|
76
|
+
declare function github(options?: GithubOptions): PolicyServiceDescriptor;
|
|
77
|
+
|
|
78
|
+
export { PolicyServiceDescriptor, type PublicWorkspaceHandle, Sandkit, SandkitOptions, WorkspaceCreateOptions, type WorkspaceDescriptor, WorkspacePolicy, type WorkspaceSandboxHandle, type WorkspaceSessionHandle, type WorkspaceStatus, allowAll, allowService, allowServices, createSandkit, denyAll, github };
|