@kb-labs/infra-worker-core 2.107.0 → 2.110.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.
@@ -16,7 +16,7 @@ var capture_snapshot_default = defineCommand({
16
16
  const result = { snapshotId: snapshot.snapshotId };
17
17
  ctx.ui.success(`Snapshot captured: ${result.snapshotId}`);
18
18
  return {
19
- exitCode: 0,
19
+ ok: true,
20
20
  result
21
21
  };
22
22
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cli/commands/capture-snapshot.ts"],"names":[],"mappings":";;;AAkBA,IAAO,2BAAQ,aAAA,CAAoE;AAAA,EACjF,EAAA,EAAI,+BAAA;AAAA,EACJ,WAAA,EAAa,8CAAA;AAAA,EACb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EAC+C;AAC/C,MAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,MAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CAAI,GAAA,CAAI,SAAS,OAAA,CAAQ;AAAA,QAC9C,aAAa,KAAA,CAAM,WAAA;AAAA,QACnB,eAAe,KAAA,CAAM,aAAA;AAAA,QACrB,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,YAAY,KAAA,CAAM;AAAA,OACnB,CAAA;AAED,MAAA,MAAM,MAAA,GAAgC,EAAE,UAAA,EAAY,QAAA,CAAS,UAAA,EAAW;AACxE,MAAA,GAAA,CAAI,EAAA,CAAG,OAAA,CAAQ,CAAA,mBAAA,EAAsB,MAAA,CAAO,UAAU,CAAA,CAAE,CAAA;AAExD,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,CAAA;AAAA,QACV;AAAA,OACF;AAAA,IACF;AAAA;AAEJ,CAAC","file":"capture-snapshot.js","sourcesContent":["import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface CaptureSnapshotFlags {\n workspaceId?: string;\n environmentId?: string;\n namespace?: string;\n sourcePath?: string;\n}\n\ninterface CaptureSnapshotInput {\n argv: string[];\n flags: CaptureSnapshotFlags;\n}\n\ninterface CaptureSnapshotResult {\n snapshotId: string;\n}\n\nexport default defineCommand<unknown, CaptureSnapshotInput, CaptureSnapshotResult>({\n id: 'infra-worker:capture-snapshot',\n description: 'Capture snapshot from workspace/environment.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: CaptureSnapshotInput\n ): Promise<CommandResult<CaptureSnapshotResult>> {\n const flags = input.flags;\n const snapshot = await ctx.api.snapshot.capture({\n workspaceId: flags.workspaceId,\n environmentId: flags.environmentId,\n namespace: flags.namespace,\n sourcePath: flags.sourcePath,\n });\n\n const result: CaptureSnapshotResult = { snapshotId: snapshot.snapshotId };\n ctx.ui.success(`Snapshot captured: ${result.snapshotId}`);\n\n return {\n exitCode: 0,\n result,\n };\n },\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/cli/commands/capture-snapshot.ts"],"names":[],"mappings":";;;AAkBA,IAAO,2BAAQ,aAAA,CAAoE;AAAA,EACjF,EAAA,EAAI,+BAAA;AAAA,EACJ,WAAA,EAAa,8CAAA;AAAA,EACb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EAC+C;AAC/C,MAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,MAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CAAI,GAAA,CAAI,SAAS,OAAA,CAAQ;AAAA,QAC9C,aAAa,KAAA,CAAM,WAAA;AAAA,QACnB,eAAe,KAAA,CAAM,aAAA;AAAA,QACrB,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,YAAY,KAAA,CAAM;AAAA,OACnB,CAAA;AAED,MAAA,MAAM,MAAA,GAAgC,EAAE,UAAA,EAAY,QAAA,CAAS,UAAA,EAAW;AACxE,MAAA,GAAA,CAAI,EAAA,CAAG,OAAA,CAAQ,CAAA,mBAAA,EAAsB,MAAA,CAAO,UAAU,CAAA,CAAE,CAAA;AAExD,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,IAAA;AAAA,QACJ;AAAA,OACF;AAAA,IACF;AAAA;AAEJ,CAAC","file":"capture-snapshot.js","sourcesContent":["import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface CaptureSnapshotFlags {\n workspaceId?: string;\n environmentId?: string;\n namespace?: string;\n sourcePath?: string;\n}\n\ninterface CaptureSnapshotInput {\n argv: string[];\n flags: CaptureSnapshotFlags;\n}\n\ninterface CaptureSnapshotResult {\n snapshotId: string;\n}\n\nexport default defineCommand<unknown, CaptureSnapshotInput, CaptureSnapshotResult>({\n id: 'infra-worker:capture-snapshot',\n description: 'Capture snapshot from workspace/environment.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: CaptureSnapshotInput\n ): Promise<CommandResult<CaptureSnapshotResult>> {\n const flags = input.flags;\n const snapshot = await ctx.api.snapshot.capture({\n workspaceId: flags.workspaceId,\n environmentId: flags.environmentId,\n namespace: flags.namespace,\n sourcePath: flags.sourcePath,\n });\n\n const result: CaptureSnapshotResult = { snapshotId: snapshot.snapshotId };\n ctx.ui.success(`Snapshot captured: ${result.snapshotId}`);\n\n return {\n ok: true,\n result,\n };\n },\n },\n});\n"]}
@@ -81,7 +81,7 @@ var prepare_infra_default = defineCommand({
81
81
  ]
82
82
  });
83
83
  return {
84
- exitCode: 0,
84
+ ok: true,
85
85
  result
86
86
  };
87
87
  }
@@ -102,7 +102,7 @@ var capture_snapshot_default = defineCommand({
102
102
  const result = { snapshotId: snapshot.snapshotId };
103
103
  ctx.ui.success(`Snapshot captured: ${result.snapshotId}`);
104
104
  return {
105
- exitCode: 0,
105
+ ok: true,
106
106
  result
107
107
  };
108
108
  }
@@ -130,7 +130,7 @@ var restore_snapshot_default = defineCommand({
130
130
  };
131
131
  ctx.ui.success(`Snapshot restored: ${result.snapshotId}`);
132
132
  return {
133
- exitCode: 0,
133
+ ok: true,
134
134
  result
135
135
  };
136
136
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cli/commands/prepare-infra.ts","../../../src/cli/commands/capture-snapshot.ts","../../../src/cli/commands/restore-snapshot.ts"],"names":["defineCommand"],"mappings":"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","file":"index.js","sourcesContent":["import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface PrepareInfraFlags {\n sourceRef?: string;\n basePath?: string;\n createEnvironment?: boolean;\n templateId?: string;\n ttlMs?: number;\n captureSnapshot?: boolean;\n namespace?: string;\n}\n\ninterface PrepareInfraInput {\n argv: string[];\n flags: PrepareInfraFlags;\n}\n\ninterface PrepareInfraResult {\n workspaceId: string;\n environmentId?: string;\n snapshotId?: string;\n}\n\nfunction toBoolean(value: unknown): boolean | undefined {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (normalized === 'true') {return true;}\n if (normalized === 'false') {return false;}\n }\n return undefined;\n}\n\nfunction toNumber(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'string' && value.trim().length > 0) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) {return parsed;}\n }\n return undefined;\n}\n\nexport default defineCommand<unknown, PrepareInfraInput, PrepareInfraResult>({\n id: 'infra-worker:prepare',\n description: 'Materialize workspace, optionally provision environment, optionally capture snapshot.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: PrepareInfraInput\n ): Promise<CommandResult<PrepareInfraResult>> {\n const flags = input.flags;\n const createEnvironment = toBoolean(flags.createEnvironment) ?? false;\n const captureSnapshot = toBoolean(flags.captureSnapshot) ?? false;\n const ttlMs = toNumber(flags.ttlMs);\n\n const workspace = await ctx.api.workspace.materialize({\n sourceRef: flags.sourceRef,\n basePath: flags.basePath,\n });\n\n let environmentId: string | undefined;\n if (createEnvironment) {\n const environment = await ctx.api.environment.create({\n templateId: flags.templateId,\n ttlMs,\n workspacePath: workspace.rootPath ?? flags.basePath,\n });\n environmentId = environment.environmentId;\n await ctx.api.workspace.attach({\n workspaceId: workspace.workspaceId,\n environmentId,\n });\n }\n\n let snapshotId: string | undefined;\n if (captureSnapshot) {\n const snapshot = await ctx.api.snapshot.capture({\n workspaceId: workspace.workspaceId,\n environmentId,\n namespace: flags.namespace,\n });\n snapshotId = snapshot.snapshotId;\n }\n\n const result: PrepareInfraResult = {\n workspaceId: workspace.workspaceId,\n environmentId,\n snapshotId,\n };\n\n ctx.ui.success('Infrastructure prepared', {\n sections: [\n {\n header: 'Identifiers',\n items: [\n `workspaceId: ${result.workspaceId}`,\n `environmentId: ${result.environmentId ?? '-'}`,\n `snapshotId: ${result.snapshotId ?? '-'}`,\n ],\n },\n ],\n });\n\n return {\n exitCode: 0,\n result,\n };\n },\n },\n});\n","import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface CaptureSnapshotFlags {\n workspaceId?: string;\n environmentId?: string;\n namespace?: string;\n sourcePath?: string;\n}\n\ninterface CaptureSnapshotInput {\n argv: string[];\n flags: CaptureSnapshotFlags;\n}\n\ninterface CaptureSnapshotResult {\n snapshotId: string;\n}\n\nexport default defineCommand<unknown, CaptureSnapshotInput, CaptureSnapshotResult>({\n id: 'infra-worker:capture-snapshot',\n description: 'Capture snapshot from workspace/environment.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: CaptureSnapshotInput\n ): Promise<CommandResult<CaptureSnapshotResult>> {\n const flags = input.flags;\n const snapshot = await ctx.api.snapshot.capture({\n workspaceId: flags.workspaceId,\n environmentId: flags.environmentId,\n namespace: flags.namespace,\n sourcePath: flags.sourcePath,\n });\n\n const result: CaptureSnapshotResult = { snapshotId: snapshot.snapshotId };\n ctx.ui.success(`Snapshot captured: ${result.snapshotId}`);\n\n return {\n exitCode: 0,\n result,\n };\n },\n },\n});\n","import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface RestoreSnapshotFlags {\n snapshotId?: string;\n workspaceId?: string;\n environmentId?: string;\n targetPath?: string;\n overwrite?: boolean;\n}\n\ninterface RestoreSnapshotInput {\n argv: string[];\n flags: RestoreSnapshotFlags;\n}\n\ninterface RestoreSnapshotResult {\n snapshotId: string;\n restoredAt: string;\n}\n\nexport default defineCommand<unknown, RestoreSnapshotInput, RestoreSnapshotResult>({\n id: 'infra-worker:restore-snapshot',\n description: 'Restore snapshot to workspace/environment.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: RestoreSnapshotInput\n ): Promise<CommandResult<RestoreSnapshotResult>> {\n const flags = input.flags;\n if (!flags.snapshotId) {\n throw new Error('Missing required flag: snapshotId');\n }\n\n const restored = await ctx.api.snapshot.restore({\n snapshotId: flags.snapshotId,\n workspaceId: flags.workspaceId,\n environmentId: flags.environmentId,\n targetPath: flags.targetPath,\n overwrite: flags.overwrite,\n });\n\n const result: RestoreSnapshotResult = {\n snapshotId: restored.snapshotId,\n restoredAt: restored.restoredAt,\n };\n ctx.ui.success(`Snapshot restored: ${result.snapshotId}`);\n\n return {\n exitCode: 0,\n result,\n };\n },\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/cli/commands/prepare-infra.ts","../../../src/cli/commands/capture-snapshot.ts","../../../src/cli/commands/restore-snapshot.ts"],"names":["defineCommand"],"mappings":"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","file":"index.js","sourcesContent":["import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface PrepareInfraFlags {\n sourceRef?: string;\n basePath?: string;\n createEnvironment?: boolean;\n templateId?: string;\n ttlMs?: number;\n captureSnapshot?: boolean;\n namespace?: string;\n}\n\ninterface PrepareInfraInput {\n argv: string[];\n flags: PrepareInfraFlags;\n}\n\ninterface PrepareInfraResult {\n workspaceId: string;\n environmentId?: string;\n snapshotId?: string;\n}\n\nfunction toBoolean(value: unknown): boolean | undefined {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (normalized === 'true') {return true;}\n if (normalized === 'false') {return false;}\n }\n return undefined;\n}\n\nfunction toNumber(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'string' && value.trim().length > 0) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) {return parsed;}\n }\n return undefined;\n}\n\nexport default defineCommand<unknown, PrepareInfraInput, PrepareInfraResult>({\n id: 'infra-worker:prepare',\n description: 'Materialize workspace, optionally provision environment, optionally capture snapshot.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: PrepareInfraInput\n ): Promise<CommandResult<PrepareInfraResult>> {\n const flags = input.flags;\n const createEnvironment = toBoolean(flags.createEnvironment) ?? false;\n const captureSnapshot = toBoolean(flags.captureSnapshot) ?? false;\n const ttlMs = toNumber(flags.ttlMs);\n\n const workspace = await ctx.api.workspace.materialize({\n sourceRef: flags.sourceRef,\n basePath: flags.basePath,\n });\n\n let environmentId: string | undefined;\n if (createEnvironment) {\n const environment = await ctx.api.environment.create({\n templateId: flags.templateId,\n ttlMs,\n workspacePath: workspace.rootPath ?? flags.basePath,\n });\n environmentId = environment.environmentId;\n await ctx.api.workspace.attach({\n workspaceId: workspace.workspaceId,\n environmentId,\n });\n }\n\n let snapshotId: string | undefined;\n if (captureSnapshot) {\n const snapshot = await ctx.api.snapshot.capture({\n workspaceId: workspace.workspaceId,\n environmentId,\n namespace: flags.namespace,\n });\n snapshotId = snapshot.snapshotId;\n }\n\n const result: PrepareInfraResult = {\n workspaceId: workspace.workspaceId,\n environmentId,\n snapshotId,\n };\n\n ctx.ui.success('Infrastructure prepared', {\n sections: [\n {\n header: 'Identifiers',\n items: [\n `workspaceId: ${result.workspaceId}`,\n `environmentId: ${result.environmentId ?? '-'}`,\n `snapshotId: ${result.snapshotId ?? '-'}`,\n ],\n },\n ],\n });\n\n return {\n ok: true,\n result,\n };\n },\n },\n});\n","import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface CaptureSnapshotFlags {\n workspaceId?: string;\n environmentId?: string;\n namespace?: string;\n sourcePath?: string;\n}\n\ninterface CaptureSnapshotInput {\n argv: string[];\n flags: CaptureSnapshotFlags;\n}\n\ninterface CaptureSnapshotResult {\n snapshotId: string;\n}\n\nexport default defineCommand<unknown, CaptureSnapshotInput, CaptureSnapshotResult>({\n id: 'infra-worker:capture-snapshot',\n description: 'Capture snapshot from workspace/environment.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: CaptureSnapshotInput\n ): Promise<CommandResult<CaptureSnapshotResult>> {\n const flags = input.flags;\n const snapshot = await ctx.api.snapshot.capture({\n workspaceId: flags.workspaceId,\n environmentId: flags.environmentId,\n namespace: flags.namespace,\n sourcePath: flags.sourcePath,\n });\n\n const result: CaptureSnapshotResult = { snapshotId: snapshot.snapshotId };\n ctx.ui.success(`Snapshot captured: ${result.snapshotId}`);\n\n return {\n ok: true,\n result,\n };\n },\n },\n});\n","import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface RestoreSnapshotFlags {\n snapshotId?: string;\n workspaceId?: string;\n environmentId?: string;\n targetPath?: string;\n overwrite?: boolean;\n}\n\ninterface RestoreSnapshotInput {\n argv: string[];\n flags: RestoreSnapshotFlags;\n}\n\ninterface RestoreSnapshotResult {\n snapshotId: string;\n restoredAt: string;\n}\n\nexport default defineCommand<unknown, RestoreSnapshotInput, RestoreSnapshotResult>({\n id: 'infra-worker:restore-snapshot',\n description: 'Restore snapshot to workspace/environment.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: RestoreSnapshotInput\n ): Promise<CommandResult<RestoreSnapshotResult>> {\n const flags = input.flags;\n if (!flags.snapshotId) {\n throw new Error('Missing required flag: snapshotId');\n }\n\n const restored = await ctx.api.snapshot.restore({\n snapshotId: flags.snapshotId,\n workspaceId: flags.workspaceId,\n environmentId: flags.environmentId,\n targetPath: flags.targetPath,\n overwrite: flags.overwrite,\n });\n\n const result: RestoreSnapshotResult = {\n snapshotId: restored.snapshotId,\n restoredAt: restored.restoredAt,\n };\n ctx.ui.success(`Snapshot restored: ${result.snapshotId}`);\n\n return {\n ok: true,\n result,\n };\n },\n },\n});\n"]}
@@ -81,7 +81,7 @@ var prepare_infra_default = defineCommand({
81
81
  ]
82
82
  });
83
83
  return {
84
- exitCode: 0,
84
+ ok: true,
85
85
  result
86
86
  };
87
87
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cli/commands/prepare-infra.ts"],"names":[],"mappings":"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","file":"prepare-infra.js","sourcesContent":["import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface PrepareInfraFlags {\n sourceRef?: string;\n basePath?: string;\n createEnvironment?: boolean;\n templateId?: string;\n ttlMs?: number;\n captureSnapshot?: boolean;\n namespace?: string;\n}\n\ninterface PrepareInfraInput {\n argv: string[];\n flags: PrepareInfraFlags;\n}\n\ninterface PrepareInfraResult {\n workspaceId: string;\n environmentId?: string;\n snapshotId?: string;\n}\n\nfunction toBoolean(value: unknown): boolean | undefined {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (normalized === 'true') {return true;}\n if (normalized === 'false') {return false;}\n }\n return undefined;\n}\n\nfunction toNumber(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'string' && value.trim().length > 0) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) {return parsed;}\n }\n return undefined;\n}\n\nexport default defineCommand<unknown, PrepareInfraInput, PrepareInfraResult>({\n id: 'infra-worker:prepare',\n description: 'Materialize workspace, optionally provision environment, optionally capture snapshot.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: PrepareInfraInput\n ): Promise<CommandResult<PrepareInfraResult>> {\n const flags = input.flags;\n const createEnvironment = toBoolean(flags.createEnvironment) ?? false;\n const captureSnapshot = toBoolean(flags.captureSnapshot) ?? false;\n const ttlMs = toNumber(flags.ttlMs);\n\n const workspace = await ctx.api.workspace.materialize({\n sourceRef: flags.sourceRef,\n basePath: flags.basePath,\n });\n\n let environmentId: string | undefined;\n if (createEnvironment) {\n const environment = await ctx.api.environment.create({\n templateId: flags.templateId,\n ttlMs,\n workspacePath: workspace.rootPath ?? flags.basePath,\n });\n environmentId = environment.environmentId;\n await ctx.api.workspace.attach({\n workspaceId: workspace.workspaceId,\n environmentId,\n });\n }\n\n let snapshotId: string | undefined;\n if (captureSnapshot) {\n const snapshot = await ctx.api.snapshot.capture({\n workspaceId: workspace.workspaceId,\n environmentId,\n namespace: flags.namespace,\n });\n snapshotId = snapshot.snapshotId;\n }\n\n const result: PrepareInfraResult = {\n workspaceId: workspace.workspaceId,\n environmentId,\n snapshotId,\n };\n\n ctx.ui.success('Infrastructure prepared', {\n sections: [\n {\n header: 'Identifiers',\n items: [\n `workspaceId: ${result.workspaceId}`,\n `environmentId: ${result.environmentId ?? '-'}`,\n `snapshotId: ${result.snapshotId ?? '-'}`,\n ],\n },\n ],\n });\n\n return {\n exitCode: 0,\n result,\n };\n },\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/cli/commands/prepare-infra.ts"],"names":[],"mappings":"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","file":"prepare-infra.js","sourcesContent":["import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface PrepareInfraFlags {\n sourceRef?: string;\n basePath?: string;\n createEnvironment?: boolean;\n templateId?: string;\n ttlMs?: number;\n captureSnapshot?: boolean;\n namespace?: string;\n}\n\ninterface PrepareInfraInput {\n argv: string[];\n flags: PrepareInfraFlags;\n}\n\ninterface PrepareInfraResult {\n workspaceId: string;\n environmentId?: string;\n snapshotId?: string;\n}\n\nfunction toBoolean(value: unknown): boolean | undefined {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (normalized === 'true') {return true;}\n if (normalized === 'false') {return false;}\n }\n return undefined;\n}\n\nfunction toNumber(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'string' && value.trim().length > 0) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) {return parsed;}\n }\n return undefined;\n}\n\nexport default defineCommand<unknown, PrepareInfraInput, PrepareInfraResult>({\n id: 'infra-worker:prepare',\n description: 'Materialize workspace, optionally provision environment, optionally capture snapshot.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: PrepareInfraInput\n ): Promise<CommandResult<PrepareInfraResult>> {\n const flags = input.flags;\n const createEnvironment = toBoolean(flags.createEnvironment) ?? false;\n const captureSnapshot = toBoolean(flags.captureSnapshot) ?? false;\n const ttlMs = toNumber(flags.ttlMs);\n\n const workspace = await ctx.api.workspace.materialize({\n sourceRef: flags.sourceRef,\n basePath: flags.basePath,\n });\n\n let environmentId: string | undefined;\n if (createEnvironment) {\n const environment = await ctx.api.environment.create({\n templateId: flags.templateId,\n ttlMs,\n workspacePath: workspace.rootPath ?? flags.basePath,\n });\n environmentId = environment.environmentId;\n await ctx.api.workspace.attach({\n workspaceId: workspace.workspaceId,\n environmentId,\n });\n }\n\n let snapshotId: string | undefined;\n if (captureSnapshot) {\n const snapshot = await ctx.api.snapshot.capture({\n workspaceId: workspace.workspaceId,\n environmentId,\n namespace: flags.namespace,\n });\n snapshotId = snapshot.snapshotId;\n }\n\n const result: PrepareInfraResult = {\n workspaceId: workspace.workspaceId,\n environmentId,\n snapshotId,\n };\n\n ctx.ui.success('Infrastructure prepared', {\n sections: [\n {\n header: 'Identifiers',\n items: [\n `workspaceId: ${result.workspaceId}`,\n `environmentId: ${result.environmentId ?? '-'}`,\n `snapshotId: ${result.snapshotId ?? '-'}`,\n ],\n },\n ],\n });\n\n return {\n ok: true,\n result,\n };\n },\n },\n});\n"]}
@@ -23,7 +23,7 @@ var restore_snapshot_default = defineCommand({
23
23
  };
24
24
  ctx.ui.success(`Snapshot restored: ${result.snapshotId}`);
25
25
  return {
26
- exitCode: 0,
26
+ ok: true,
27
27
  result
28
28
  };
29
29
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cli/commands/restore-snapshot.ts"],"names":[],"mappings":";;;AAoBA,IAAO,2BAAQ,aAAA,CAAoE;AAAA,EACjF,EAAA,EAAI,+BAAA;AAAA,EACJ,WAAA,EAAa,4CAAA;AAAA,EACb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EAC+C;AAC/C,MAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,MAAA,IAAI,CAAC,MAAM,UAAA,EAAY;AACrB,QAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,MACrD;AAEA,MAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CAAI,GAAA,CAAI,SAAS,OAAA,CAAQ;AAAA,QAC9C,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,aAAa,KAAA,CAAM,WAAA;AAAA,QACnB,eAAe,KAAA,CAAM,aAAA;AAAA,QACrB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,WAAW,KAAA,CAAM;AAAA,OAClB,CAAA;AAED,MAAA,MAAM,MAAA,GAAgC;AAAA,QACpC,YAAY,QAAA,CAAS,UAAA;AAAA,QACrB,YAAY,QAAA,CAAS;AAAA,OACvB;AACA,MAAA,GAAA,CAAI,EAAA,CAAG,OAAA,CAAQ,CAAA,mBAAA,EAAsB,MAAA,CAAO,UAAU,CAAA,CAAE,CAAA;AAExD,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,CAAA;AAAA,QACV;AAAA,OACF;AAAA,IACF;AAAA;AAEJ,CAAC","file":"restore-snapshot.js","sourcesContent":["import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface RestoreSnapshotFlags {\n snapshotId?: string;\n workspaceId?: string;\n environmentId?: string;\n targetPath?: string;\n overwrite?: boolean;\n}\n\ninterface RestoreSnapshotInput {\n argv: string[];\n flags: RestoreSnapshotFlags;\n}\n\ninterface RestoreSnapshotResult {\n snapshotId: string;\n restoredAt: string;\n}\n\nexport default defineCommand<unknown, RestoreSnapshotInput, RestoreSnapshotResult>({\n id: 'infra-worker:restore-snapshot',\n description: 'Restore snapshot to workspace/environment.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: RestoreSnapshotInput\n ): Promise<CommandResult<RestoreSnapshotResult>> {\n const flags = input.flags;\n if (!flags.snapshotId) {\n throw new Error('Missing required flag: snapshotId');\n }\n\n const restored = await ctx.api.snapshot.restore({\n snapshotId: flags.snapshotId,\n workspaceId: flags.workspaceId,\n environmentId: flags.environmentId,\n targetPath: flags.targetPath,\n overwrite: flags.overwrite,\n });\n\n const result: RestoreSnapshotResult = {\n snapshotId: restored.snapshotId,\n restoredAt: restored.restoredAt,\n };\n ctx.ui.success(`Snapshot restored: ${result.snapshotId}`);\n\n return {\n exitCode: 0,\n result,\n };\n },\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/cli/commands/restore-snapshot.ts"],"names":[],"mappings":";;;AAoBA,IAAO,2BAAQ,aAAA,CAAoE;AAAA,EACjF,EAAA,EAAI,+BAAA;AAAA,EACJ,WAAA,EAAa,4CAAA;AAAA,EACb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EAC+C;AAC/C,MAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,MAAA,IAAI,CAAC,MAAM,UAAA,EAAY;AACrB,QAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,MACrD;AAEA,MAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CAAI,GAAA,CAAI,SAAS,OAAA,CAAQ;AAAA,QAC9C,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,aAAa,KAAA,CAAM,WAAA;AAAA,QACnB,eAAe,KAAA,CAAM,aAAA;AAAA,QACrB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,WAAW,KAAA,CAAM;AAAA,OAClB,CAAA;AAED,MAAA,MAAM,MAAA,GAAgC;AAAA,QACpC,YAAY,QAAA,CAAS,UAAA;AAAA,QACrB,YAAY,QAAA,CAAS;AAAA,OACvB;AACA,MAAA,GAAA,CAAI,EAAA,CAAG,OAAA,CAAQ,CAAA,mBAAA,EAAsB,MAAA,CAAO,UAAU,CAAA,CAAE,CAAA;AAExD,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,IAAA;AAAA,QACJ;AAAA,OACF;AAAA,IACF;AAAA;AAEJ,CAAC","file":"restore-snapshot.js","sourcesContent":["import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface RestoreSnapshotFlags {\n snapshotId?: string;\n workspaceId?: string;\n environmentId?: string;\n targetPath?: string;\n overwrite?: boolean;\n}\n\ninterface RestoreSnapshotInput {\n argv: string[];\n flags: RestoreSnapshotFlags;\n}\n\ninterface RestoreSnapshotResult {\n snapshotId: string;\n restoredAt: string;\n}\n\nexport default defineCommand<unknown, RestoreSnapshotInput, RestoreSnapshotResult>({\n id: 'infra-worker:restore-snapshot',\n description: 'Restore snapshot to workspace/environment.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: RestoreSnapshotInput\n ): Promise<CommandResult<RestoreSnapshotResult>> {\n const flags = input.flags;\n if (!flags.snapshotId) {\n throw new Error('Missing required flag: snapshotId');\n }\n\n const restored = await ctx.api.snapshot.restore({\n snapshotId: flags.snapshotId,\n workspaceId: flags.workspaceId,\n environmentId: flags.environmentId,\n targetPath: flags.targetPath,\n overwrite: flags.overwrite,\n });\n\n const result: RestoreSnapshotResult = {\n snapshotId: restored.snapshotId,\n restoredAt: restored.restoredAt,\n };\n ctx.ui.success(`Snapshot restored: ${result.snapshotId}`);\n\n return {\n ok: true,\n result,\n };\n },\n },\n});\n"]}
package/dist/cli/index.js CHANGED
@@ -81,7 +81,7 @@ var prepare_infra_default = defineCommand({
81
81
  ]
82
82
  });
83
83
  return {
84
- exitCode: 0,
84
+ ok: true,
85
85
  result
86
86
  };
87
87
  }
@@ -102,7 +102,7 @@ var capture_snapshot_default = defineCommand({
102
102
  const result = { snapshotId: snapshot.snapshotId };
103
103
  ctx.ui.success(`Snapshot captured: ${result.snapshotId}`);
104
104
  return {
105
- exitCode: 0,
105
+ ok: true,
106
106
  result
107
107
  };
108
108
  }
@@ -130,7 +130,7 @@ var restore_snapshot_default = defineCommand({
130
130
  };
131
131
  ctx.ui.success(`Snapshot restored: ${result.snapshotId}`);
132
132
  return {
133
- exitCode: 0,
133
+ ok: true,
134
134
  result
135
135
  };
136
136
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/commands/prepare-infra.ts","../../src/cli/commands/capture-snapshot.ts","../../src/cli/commands/restore-snapshot.ts"],"names":["defineCommand"],"mappings":"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","file":"index.js","sourcesContent":["import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface PrepareInfraFlags {\n sourceRef?: string;\n basePath?: string;\n createEnvironment?: boolean;\n templateId?: string;\n ttlMs?: number;\n captureSnapshot?: boolean;\n namespace?: string;\n}\n\ninterface PrepareInfraInput {\n argv: string[];\n flags: PrepareInfraFlags;\n}\n\ninterface PrepareInfraResult {\n workspaceId: string;\n environmentId?: string;\n snapshotId?: string;\n}\n\nfunction toBoolean(value: unknown): boolean | undefined {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (normalized === 'true') {return true;}\n if (normalized === 'false') {return false;}\n }\n return undefined;\n}\n\nfunction toNumber(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'string' && value.trim().length > 0) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) {return parsed;}\n }\n return undefined;\n}\n\nexport default defineCommand<unknown, PrepareInfraInput, PrepareInfraResult>({\n id: 'infra-worker:prepare',\n description: 'Materialize workspace, optionally provision environment, optionally capture snapshot.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: PrepareInfraInput\n ): Promise<CommandResult<PrepareInfraResult>> {\n const flags = input.flags;\n const createEnvironment = toBoolean(flags.createEnvironment) ?? false;\n const captureSnapshot = toBoolean(flags.captureSnapshot) ?? false;\n const ttlMs = toNumber(flags.ttlMs);\n\n const workspace = await ctx.api.workspace.materialize({\n sourceRef: flags.sourceRef,\n basePath: flags.basePath,\n });\n\n let environmentId: string | undefined;\n if (createEnvironment) {\n const environment = await ctx.api.environment.create({\n templateId: flags.templateId,\n ttlMs,\n workspacePath: workspace.rootPath ?? flags.basePath,\n });\n environmentId = environment.environmentId;\n await ctx.api.workspace.attach({\n workspaceId: workspace.workspaceId,\n environmentId,\n });\n }\n\n let snapshotId: string | undefined;\n if (captureSnapshot) {\n const snapshot = await ctx.api.snapshot.capture({\n workspaceId: workspace.workspaceId,\n environmentId,\n namespace: flags.namespace,\n });\n snapshotId = snapshot.snapshotId;\n }\n\n const result: PrepareInfraResult = {\n workspaceId: workspace.workspaceId,\n environmentId,\n snapshotId,\n };\n\n ctx.ui.success('Infrastructure prepared', {\n sections: [\n {\n header: 'Identifiers',\n items: [\n `workspaceId: ${result.workspaceId}`,\n `environmentId: ${result.environmentId ?? '-'}`,\n `snapshotId: ${result.snapshotId ?? '-'}`,\n ],\n },\n ],\n });\n\n return {\n exitCode: 0,\n result,\n };\n },\n },\n});\n","import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface CaptureSnapshotFlags {\n workspaceId?: string;\n environmentId?: string;\n namespace?: string;\n sourcePath?: string;\n}\n\ninterface CaptureSnapshotInput {\n argv: string[];\n flags: CaptureSnapshotFlags;\n}\n\ninterface CaptureSnapshotResult {\n snapshotId: string;\n}\n\nexport default defineCommand<unknown, CaptureSnapshotInput, CaptureSnapshotResult>({\n id: 'infra-worker:capture-snapshot',\n description: 'Capture snapshot from workspace/environment.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: CaptureSnapshotInput\n ): Promise<CommandResult<CaptureSnapshotResult>> {\n const flags = input.flags;\n const snapshot = await ctx.api.snapshot.capture({\n workspaceId: flags.workspaceId,\n environmentId: flags.environmentId,\n namespace: flags.namespace,\n sourcePath: flags.sourcePath,\n });\n\n const result: CaptureSnapshotResult = { snapshotId: snapshot.snapshotId };\n ctx.ui.success(`Snapshot captured: ${result.snapshotId}`);\n\n return {\n exitCode: 0,\n result,\n };\n },\n },\n});\n","import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface RestoreSnapshotFlags {\n snapshotId?: string;\n workspaceId?: string;\n environmentId?: string;\n targetPath?: string;\n overwrite?: boolean;\n}\n\ninterface RestoreSnapshotInput {\n argv: string[];\n flags: RestoreSnapshotFlags;\n}\n\ninterface RestoreSnapshotResult {\n snapshotId: string;\n restoredAt: string;\n}\n\nexport default defineCommand<unknown, RestoreSnapshotInput, RestoreSnapshotResult>({\n id: 'infra-worker:restore-snapshot',\n description: 'Restore snapshot to workspace/environment.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: RestoreSnapshotInput\n ): Promise<CommandResult<RestoreSnapshotResult>> {\n const flags = input.flags;\n if (!flags.snapshotId) {\n throw new Error('Missing required flag: snapshotId');\n }\n\n const restored = await ctx.api.snapshot.restore({\n snapshotId: flags.snapshotId,\n workspaceId: flags.workspaceId,\n environmentId: flags.environmentId,\n targetPath: flags.targetPath,\n overwrite: flags.overwrite,\n });\n\n const result: RestoreSnapshotResult = {\n snapshotId: restored.snapshotId,\n restoredAt: restored.restoredAt,\n };\n ctx.ui.success(`Snapshot restored: ${result.snapshotId}`);\n\n return {\n exitCode: 0,\n result,\n };\n },\n },\n});\n"]}
1
+ {"version":3,"sources":["../../src/cli/commands/prepare-infra.ts","../../src/cli/commands/capture-snapshot.ts","../../src/cli/commands/restore-snapshot.ts"],"names":["defineCommand"],"mappings":"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","file":"index.js","sourcesContent":["import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface PrepareInfraFlags {\n sourceRef?: string;\n basePath?: string;\n createEnvironment?: boolean;\n templateId?: string;\n ttlMs?: number;\n captureSnapshot?: boolean;\n namespace?: string;\n}\n\ninterface PrepareInfraInput {\n argv: string[];\n flags: PrepareInfraFlags;\n}\n\ninterface PrepareInfraResult {\n workspaceId: string;\n environmentId?: string;\n snapshotId?: string;\n}\n\nfunction toBoolean(value: unknown): boolean | undefined {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (normalized === 'true') {return true;}\n if (normalized === 'false') {return false;}\n }\n return undefined;\n}\n\nfunction toNumber(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'string' && value.trim().length > 0) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) {return parsed;}\n }\n return undefined;\n}\n\nexport default defineCommand<unknown, PrepareInfraInput, PrepareInfraResult>({\n id: 'infra-worker:prepare',\n description: 'Materialize workspace, optionally provision environment, optionally capture snapshot.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: PrepareInfraInput\n ): Promise<CommandResult<PrepareInfraResult>> {\n const flags = input.flags;\n const createEnvironment = toBoolean(flags.createEnvironment) ?? false;\n const captureSnapshot = toBoolean(flags.captureSnapshot) ?? false;\n const ttlMs = toNumber(flags.ttlMs);\n\n const workspace = await ctx.api.workspace.materialize({\n sourceRef: flags.sourceRef,\n basePath: flags.basePath,\n });\n\n let environmentId: string | undefined;\n if (createEnvironment) {\n const environment = await ctx.api.environment.create({\n templateId: flags.templateId,\n ttlMs,\n workspacePath: workspace.rootPath ?? flags.basePath,\n });\n environmentId = environment.environmentId;\n await ctx.api.workspace.attach({\n workspaceId: workspace.workspaceId,\n environmentId,\n });\n }\n\n let snapshotId: string | undefined;\n if (captureSnapshot) {\n const snapshot = await ctx.api.snapshot.capture({\n workspaceId: workspace.workspaceId,\n environmentId,\n namespace: flags.namespace,\n });\n snapshotId = snapshot.snapshotId;\n }\n\n const result: PrepareInfraResult = {\n workspaceId: workspace.workspaceId,\n environmentId,\n snapshotId,\n };\n\n ctx.ui.success('Infrastructure prepared', {\n sections: [\n {\n header: 'Identifiers',\n items: [\n `workspaceId: ${result.workspaceId}`,\n `environmentId: ${result.environmentId ?? '-'}`,\n `snapshotId: ${result.snapshotId ?? '-'}`,\n ],\n },\n ],\n });\n\n return {\n ok: true,\n result,\n };\n },\n },\n});\n","import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface CaptureSnapshotFlags {\n workspaceId?: string;\n environmentId?: string;\n namespace?: string;\n sourcePath?: string;\n}\n\ninterface CaptureSnapshotInput {\n argv: string[];\n flags: CaptureSnapshotFlags;\n}\n\ninterface CaptureSnapshotResult {\n snapshotId: string;\n}\n\nexport default defineCommand<unknown, CaptureSnapshotInput, CaptureSnapshotResult>({\n id: 'infra-worker:capture-snapshot',\n description: 'Capture snapshot from workspace/environment.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: CaptureSnapshotInput\n ): Promise<CommandResult<CaptureSnapshotResult>> {\n const flags = input.flags;\n const snapshot = await ctx.api.snapshot.capture({\n workspaceId: flags.workspaceId,\n environmentId: flags.environmentId,\n namespace: flags.namespace,\n sourcePath: flags.sourcePath,\n });\n\n const result: CaptureSnapshotResult = { snapshotId: snapshot.snapshotId };\n ctx.ui.success(`Snapshot captured: ${result.snapshotId}`);\n\n return {\n ok: true,\n result,\n };\n },\n },\n});\n","import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface RestoreSnapshotFlags {\n snapshotId?: string;\n workspaceId?: string;\n environmentId?: string;\n targetPath?: string;\n overwrite?: boolean;\n}\n\ninterface RestoreSnapshotInput {\n argv: string[];\n flags: RestoreSnapshotFlags;\n}\n\ninterface RestoreSnapshotResult {\n snapshotId: string;\n restoredAt: string;\n}\n\nexport default defineCommand<unknown, RestoreSnapshotInput, RestoreSnapshotResult>({\n id: 'infra-worker:restore-snapshot',\n description: 'Restore snapshot to workspace/environment.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: RestoreSnapshotInput\n ): Promise<CommandResult<RestoreSnapshotResult>> {\n const flags = input.flags;\n if (!flags.snapshotId) {\n throw new Error('Missing required flag: snapshotId');\n }\n\n const restored = await ctx.api.snapshot.restore({\n snapshotId: flags.snapshotId,\n workspaceId: flags.workspaceId,\n environmentId: flags.environmentId,\n targetPath: flags.targetPath,\n overwrite: flags.overwrite,\n });\n\n const result: RestoreSnapshotResult = {\n snapshotId: restored.snapshotId,\n restoredAt: restored.restoredAt,\n };\n ctx.ui.success(`Snapshot restored: ${result.snapshotId}`);\n\n return {\n ok: true,\n result,\n };\n },\n },\n});\n"]}
package/dist/index.js CHANGED
@@ -81,7 +81,7 @@ var prepare_infra_default = defineCommand({
81
81
  ]
82
82
  });
83
83
  return {
84
- exitCode: 0,
84
+ ok: true,
85
85
  result
86
86
  };
87
87
  }
@@ -102,7 +102,7 @@ var capture_snapshot_default = defineCommand({
102
102
  const result = { snapshotId: snapshot.snapshotId };
103
103
  ctx.ui.success(`Snapshot captured: ${result.snapshotId}`);
104
104
  return {
105
- exitCode: 0,
105
+ ok: true,
106
106
  result
107
107
  };
108
108
  }
@@ -130,7 +130,7 @@ var restore_snapshot_default = defineCommand({
130
130
  };
131
131
  ctx.ui.success(`Snapshot restored: ${result.snapshotId}`);
132
132
  return {
133
- exitCode: 0,
133
+ ok: true,
134
134
  result
135
135
  };
136
136
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/commands/prepare-infra.ts","../src/cli/commands/capture-snapshot.ts","../src/cli/commands/restore-snapshot.ts","../src/manifest.v3.ts"],"names":["defineCommand"],"mappings":"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","file":"index.js","sourcesContent":["import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface PrepareInfraFlags {\n sourceRef?: string;\n basePath?: string;\n createEnvironment?: boolean;\n templateId?: string;\n ttlMs?: number;\n captureSnapshot?: boolean;\n namespace?: string;\n}\n\ninterface PrepareInfraInput {\n argv: string[];\n flags: PrepareInfraFlags;\n}\n\ninterface PrepareInfraResult {\n workspaceId: string;\n environmentId?: string;\n snapshotId?: string;\n}\n\nfunction toBoolean(value: unknown): boolean | undefined {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (normalized === 'true') {return true;}\n if (normalized === 'false') {return false;}\n }\n return undefined;\n}\n\nfunction toNumber(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'string' && value.trim().length > 0) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) {return parsed;}\n }\n return undefined;\n}\n\nexport default defineCommand<unknown, PrepareInfraInput, PrepareInfraResult>({\n id: 'infra-worker:prepare',\n description: 'Materialize workspace, optionally provision environment, optionally capture snapshot.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: PrepareInfraInput\n ): Promise<CommandResult<PrepareInfraResult>> {\n const flags = input.flags;\n const createEnvironment = toBoolean(flags.createEnvironment) ?? false;\n const captureSnapshot = toBoolean(flags.captureSnapshot) ?? false;\n const ttlMs = toNumber(flags.ttlMs);\n\n const workspace = await ctx.api.workspace.materialize({\n sourceRef: flags.sourceRef,\n basePath: flags.basePath,\n });\n\n let environmentId: string | undefined;\n if (createEnvironment) {\n const environment = await ctx.api.environment.create({\n templateId: flags.templateId,\n ttlMs,\n workspacePath: workspace.rootPath ?? flags.basePath,\n });\n environmentId = environment.environmentId;\n await ctx.api.workspace.attach({\n workspaceId: workspace.workspaceId,\n environmentId,\n });\n }\n\n let snapshotId: string | undefined;\n if (captureSnapshot) {\n const snapshot = await ctx.api.snapshot.capture({\n workspaceId: workspace.workspaceId,\n environmentId,\n namespace: flags.namespace,\n });\n snapshotId = snapshot.snapshotId;\n }\n\n const result: PrepareInfraResult = {\n workspaceId: workspace.workspaceId,\n environmentId,\n snapshotId,\n };\n\n ctx.ui.success('Infrastructure prepared', {\n sections: [\n {\n header: 'Identifiers',\n items: [\n `workspaceId: ${result.workspaceId}`,\n `environmentId: ${result.environmentId ?? '-'}`,\n `snapshotId: ${result.snapshotId ?? '-'}`,\n ],\n },\n ],\n });\n\n return {\n exitCode: 0,\n result,\n };\n },\n },\n});\n","import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface CaptureSnapshotFlags {\n workspaceId?: string;\n environmentId?: string;\n namespace?: string;\n sourcePath?: string;\n}\n\ninterface CaptureSnapshotInput {\n argv: string[];\n flags: CaptureSnapshotFlags;\n}\n\ninterface CaptureSnapshotResult {\n snapshotId: string;\n}\n\nexport default defineCommand<unknown, CaptureSnapshotInput, CaptureSnapshotResult>({\n id: 'infra-worker:capture-snapshot',\n description: 'Capture snapshot from workspace/environment.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: CaptureSnapshotInput\n ): Promise<CommandResult<CaptureSnapshotResult>> {\n const flags = input.flags;\n const snapshot = await ctx.api.snapshot.capture({\n workspaceId: flags.workspaceId,\n environmentId: flags.environmentId,\n namespace: flags.namespace,\n sourcePath: flags.sourcePath,\n });\n\n const result: CaptureSnapshotResult = { snapshotId: snapshot.snapshotId };\n ctx.ui.success(`Snapshot captured: ${result.snapshotId}`);\n\n return {\n exitCode: 0,\n result,\n };\n },\n },\n});\n","import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface RestoreSnapshotFlags {\n snapshotId?: string;\n workspaceId?: string;\n environmentId?: string;\n targetPath?: string;\n overwrite?: boolean;\n}\n\ninterface RestoreSnapshotInput {\n argv: string[];\n flags: RestoreSnapshotFlags;\n}\n\ninterface RestoreSnapshotResult {\n snapshotId: string;\n restoredAt: string;\n}\n\nexport default defineCommand<unknown, RestoreSnapshotInput, RestoreSnapshotResult>({\n id: 'infra-worker:restore-snapshot',\n description: 'Restore snapshot to workspace/environment.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: RestoreSnapshotInput\n ): Promise<CommandResult<RestoreSnapshotResult>> {\n const flags = input.flags;\n if (!flags.snapshotId) {\n throw new Error('Missing required flag: snapshotId');\n }\n\n const restored = await ctx.api.snapshot.restore({\n snapshotId: flags.snapshotId,\n workspaceId: flags.workspaceId,\n environmentId: flags.environmentId,\n targetPath: flags.targetPath,\n overwrite: flags.overwrite,\n });\n\n const result: RestoreSnapshotResult = {\n snapshotId: restored.snapshotId,\n restoredAt: restored.restoredAt,\n };\n ctx.ui.success(`Snapshot restored: ${result.snapshotId}`);\n\n return {\n exitCode: 0,\n result,\n };\n },\n },\n});\n","import type { ManifestV3 } from '@kb-labs/plugin-contracts';\nimport { defineCommandFlags } from '@kb-labs/sdk';\n\nexport const manifest: ManifestV3 = {\n schema: 'kb.plugin/3',\n id: '@kb-labs/infra-worker',\n version: '0.1.0',\n display: {\n name: 'Infra Worker',\n description: 'Provision infra capabilities for orchestrators',\n tags: ['infra', 'workspace', 'environment', 'snapshot'],\n },\n permissions: {\n platform: {\n environment: {\n create: true,\n read: true,\n destroy: true,\n renewLease: true,\n templates: ['*'],\n },\n workspace: {\n materialize: true,\n attach: true,\n release: true,\n read: true,\n sources: ['*'],\n paths: ['*'],\n },\n snapshot: {\n capture: true,\n restore: true,\n delete: true,\n read: true,\n garbageCollect: true,\n namespaces: ['*'],\n },\n },\n },\n cli: {\n groupMeta: [\n { path: 'infra', describe: 'Infrastructure provisioning commands' },\n { path: 'infra snapshot', describe: 'Workspace and environment snapshot management' },\n ],\n commands: [\n {\n path: 'infra prepare',\n operationType: 'execute' as const,\n describe: 'Materialize workspace, optional environment, and optional snapshot.',\n handler: './cli/commands/prepare-infra.js#default',\n flags: defineCommandFlags({\n sourceRef: { type: 'string', description: 'Workspace source reference (repo/branch/etc)' },\n basePath: { type: 'string', description: 'Workspace base path' },\n createEnvironment: { type: 'boolean', default: false, description: 'Provision environment after workspace materialize' },\n templateId: { type: 'string', description: 'Environment template ID' },\n ttlMs: { type: 'number', description: 'Environment lease TTL in milliseconds' },\n captureSnapshot: { type: 'boolean', default: false, description: 'Capture snapshot after prepare' },\n namespace: { type: 'string', description: 'Snapshot namespace' },\n }),\n },\n {\n path: 'infra snapshot capture',\n operationType: 'execute' as const,\n describe: 'Capture snapshot for workspace/environment.',\n handler: './cli/commands/capture-snapshot.js#default',\n flags: defineCommandFlags({\n workspaceId: { type: 'string', description: 'Workspace ID' },\n environmentId: { type: 'string', description: 'Environment ID' },\n namespace: { type: 'string', description: 'Snapshot namespace' },\n sourcePath: { type: 'string', description: 'Source path for snapshot' },\n }),\n },\n {\n path: 'infra snapshot restore',\n operationType: 'execute' as const,\n describe: 'Restore snapshot to workspace/environment target.',\n handler: './cli/commands/restore-snapshot.js#default',\n flags: defineCommandFlags({\n snapshotId: { type: 'string', required: true, description: 'Snapshot ID to restore' },\n workspaceId: { type: 'string', description: 'Workspace ID target' },\n environmentId: { type: 'string', description: 'Environment ID target' },\n targetPath: { type: 'string', description: 'Restore target path' },\n overwrite: { type: 'boolean', default: false, description: 'Overwrite existing files' },\n }),\n },\n ],\n },\n};\n\nexport default manifest;\n"]}
1
+ {"version":3,"sources":["../src/cli/commands/prepare-infra.ts","../src/cli/commands/capture-snapshot.ts","../src/cli/commands/restore-snapshot.ts","../src/manifest.v3.ts"],"names":["defineCommand"],"mappings":"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","file":"index.js","sourcesContent":["import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface PrepareInfraFlags {\n sourceRef?: string;\n basePath?: string;\n createEnvironment?: boolean;\n templateId?: string;\n ttlMs?: number;\n captureSnapshot?: boolean;\n namespace?: string;\n}\n\ninterface PrepareInfraInput {\n argv: string[];\n flags: PrepareInfraFlags;\n}\n\ninterface PrepareInfraResult {\n workspaceId: string;\n environmentId?: string;\n snapshotId?: string;\n}\n\nfunction toBoolean(value: unknown): boolean | undefined {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (normalized === 'true') {return true;}\n if (normalized === 'false') {return false;}\n }\n return undefined;\n}\n\nfunction toNumber(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'string' && value.trim().length > 0) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) {return parsed;}\n }\n return undefined;\n}\n\nexport default defineCommand<unknown, PrepareInfraInput, PrepareInfraResult>({\n id: 'infra-worker:prepare',\n description: 'Materialize workspace, optionally provision environment, optionally capture snapshot.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: PrepareInfraInput\n ): Promise<CommandResult<PrepareInfraResult>> {\n const flags = input.flags;\n const createEnvironment = toBoolean(flags.createEnvironment) ?? false;\n const captureSnapshot = toBoolean(flags.captureSnapshot) ?? false;\n const ttlMs = toNumber(flags.ttlMs);\n\n const workspace = await ctx.api.workspace.materialize({\n sourceRef: flags.sourceRef,\n basePath: flags.basePath,\n });\n\n let environmentId: string | undefined;\n if (createEnvironment) {\n const environment = await ctx.api.environment.create({\n templateId: flags.templateId,\n ttlMs,\n workspacePath: workspace.rootPath ?? flags.basePath,\n });\n environmentId = environment.environmentId;\n await ctx.api.workspace.attach({\n workspaceId: workspace.workspaceId,\n environmentId,\n });\n }\n\n let snapshotId: string | undefined;\n if (captureSnapshot) {\n const snapshot = await ctx.api.snapshot.capture({\n workspaceId: workspace.workspaceId,\n environmentId,\n namespace: flags.namespace,\n });\n snapshotId = snapshot.snapshotId;\n }\n\n const result: PrepareInfraResult = {\n workspaceId: workspace.workspaceId,\n environmentId,\n snapshotId,\n };\n\n ctx.ui.success('Infrastructure prepared', {\n sections: [\n {\n header: 'Identifiers',\n items: [\n `workspaceId: ${result.workspaceId}`,\n `environmentId: ${result.environmentId ?? '-'}`,\n `snapshotId: ${result.snapshotId ?? '-'}`,\n ],\n },\n ],\n });\n\n return {\n ok: true,\n result,\n };\n },\n },\n});\n","import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface CaptureSnapshotFlags {\n workspaceId?: string;\n environmentId?: string;\n namespace?: string;\n sourcePath?: string;\n}\n\ninterface CaptureSnapshotInput {\n argv: string[];\n flags: CaptureSnapshotFlags;\n}\n\ninterface CaptureSnapshotResult {\n snapshotId: string;\n}\n\nexport default defineCommand<unknown, CaptureSnapshotInput, CaptureSnapshotResult>({\n id: 'infra-worker:capture-snapshot',\n description: 'Capture snapshot from workspace/environment.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: CaptureSnapshotInput\n ): Promise<CommandResult<CaptureSnapshotResult>> {\n const flags = input.flags;\n const snapshot = await ctx.api.snapshot.capture({\n workspaceId: flags.workspaceId,\n environmentId: flags.environmentId,\n namespace: flags.namespace,\n sourcePath: flags.sourcePath,\n });\n\n const result: CaptureSnapshotResult = { snapshotId: snapshot.snapshotId };\n ctx.ui.success(`Snapshot captured: ${result.snapshotId}`);\n\n return {\n ok: true,\n result,\n };\n },\n },\n});\n","import { defineCommand, type CommandResult, type PluginContextV3 } from '@kb-labs/sdk';\n\ninterface RestoreSnapshotFlags {\n snapshotId?: string;\n workspaceId?: string;\n environmentId?: string;\n targetPath?: string;\n overwrite?: boolean;\n}\n\ninterface RestoreSnapshotInput {\n argv: string[];\n flags: RestoreSnapshotFlags;\n}\n\ninterface RestoreSnapshotResult {\n snapshotId: string;\n restoredAt: string;\n}\n\nexport default defineCommand<unknown, RestoreSnapshotInput, RestoreSnapshotResult>({\n id: 'infra-worker:restore-snapshot',\n description: 'Restore snapshot to workspace/environment.',\n handler: {\n async execute(\n ctx: PluginContextV3<unknown>,\n input: RestoreSnapshotInput\n ): Promise<CommandResult<RestoreSnapshotResult>> {\n const flags = input.flags;\n if (!flags.snapshotId) {\n throw new Error('Missing required flag: snapshotId');\n }\n\n const restored = await ctx.api.snapshot.restore({\n snapshotId: flags.snapshotId,\n workspaceId: flags.workspaceId,\n environmentId: flags.environmentId,\n targetPath: flags.targetPath,\n overwrite: flags.overwrite,\n });\n\n const result: RestoreSnapshotResult = {\n snapshotId: restored.snapshotId,\n restoredAt: restored.restoredAt,\n };\n ctx.ui.success(`Snapshot restored: ${result.snapshotId}`);\n\n return {\n ok: true,\n result,\n };\n },\n },\n});\n","import type { ManifestV3 } from '@kb-labs/plugin-contracts';\nimport { defineCommandFlags } from '@kb-labs/sdk';\n\nexport const manifest: ManifestV3 = {\n schema: 'kb.plugin/3',\n id: '@kb-labs/infra-worker',\n version: '0.1.0',\n display: {\n name: 'Infra Worker',\n description: 'Provision infra capabilities for orchestrators',\n tags: ['infra', 'workspace', 'environment', 'snapshot'],\n },\n permissions: {\n platform: {\n environment: {\n create: true,\n read: true,\n destroy: true,\n renewLease: true,\n templates: ['*'],\n },\n workspace: {\n materialize: true,\n attach: true,\n release: true,\n read: true,\n sources: ['*'],\n paths: ['*'],\n },\n snapshot: {\n capture: true,\n restore: true,\n delete: true,\n read: true,\n garbageCollect: true,\n namespaces: ['*'],\n },\n },\n },\n cli: {\n groupMeta: [\n { path: 'infra', describe: 'Infrastructure provisioning commands' },\n { path: 'infra snapshot', describe: 'Workspace and environment snapshot management' },\n ],\n commands: [\n {\n path: 'infra prepare',\n operationType: 'execute' as const,\n describe: 'Materialize workspace, optional environment, and optional snapshot.',\n handler: './cli/commands/prepare-infra.js#default',\n flags: defineCommandFlags({\n sourceRef: { type: 'string', description: 'Workspace source reference (repo/branch/etc)' },\n basePath: { type: 'string', description: 'Workspace base path' },\n createEnvironment: { type: 'boolean', default: false, description: 'Provision environment after workspace materialize' },\n templateId: { type: 'string', description: 'Environment template ID' },\n ttlMs: { type: 'number', description: 'Environment lease TTL in milliseconds' },\n captureSnapshot: { type: 'boolean', default: false, description: 'Capture snapshot after prepare' },\n namespace: { type: 'string', description: 'Snapshot namespace' },\n }),\n },\n {\n path: 'infra snapshot capture',\n operationType: 'execute' as const,\n describe: 'Capture snapshot for workspace/environment.',\n handler: './cli/commands/capture-snapshot.js#default',\n flags: defineCommandFlags({\n workspaceId: { type: 'string', description: 'Workspace ID' },\n environmentId: { type: 'string', description: 'Environment ID' },\n namespace: { type: 'string', description: 'Snapshot namespace' },\n sourcePath: { type: 'string', description: 'Source path for snapshot' },\n }),\n },\n {\n path: 'infra snapshot restore',\n operationType: 'execute' as const,\n describe: 'Restore snapshot to workspace/environment target.',\n handler: './cli/commands/restore-snapshot.js#default',\n flags: defineCommandFlags({\n snapshotId: { type: 'string', required: true, description: 'Snapshot ID to restore' },\n workspaceId: { type: 'string', description: 'Workspace ID target' },\n environmentId: { type: 'string', description: 'Environment ID target' },\n targetPath: { type: 'string', description: 'Restore target path' },\n overwrite: { type: 'boolean', default: false, description: 'Overwrite existing files' },\n }),\n },\n ],\n },\n};\n\nexport default manifest;\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kb-labs/infra-worker-core",
3
3
  "description": "Infra worker plugin core for workspace/environment/snapshot lifecycle operations.",
4
- "version": "2.107.0",
4
+ "version": "2.110.0",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -34,8 +34,8 @@
34
34
  "type-check": "tsc --noEmit"
35
35
  },
36
36
  "dependencies": {
37
- "@kb-labs/infra-worker-contracts": "^2.107.0",
38
- "@kb-labs/plugin-contracts": "^2.107.0",
37
+ "@kb-labs/infra-worker-contracts": "^2.110.0",
38
+ "@kb-labs/plugin-contracts": "^2.110.0",
39
39
  "@kb-labs/sdk": "workspace:*",
40
40
  "react": "^19.0.0",
41
41
  "zod": "^3.25.76"