@kb-labs/adapters-workspace-worktree 2.16.0 → 2.17.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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/adapters/workspace-worktree/src/manifest.ts","../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/adapters/workspace-worktree/src/index.ts"],"names":[],"mappings":";;;;;;;;AAEO,IAAM,QAAA,GAA4B;AAAA,EACvC,eAAA,EAAiB,OAAA;AAAA,EACjB,EAAA,EAAI,6BAAA;AAAA,EACJ,IAAA,EAAM,iCAAA;AAAA,EACN,OAAA,EAAS,OAAA;AAAA,EACT,WAAA,EAAa,uDAAA;AAAA,EACb,MAAA,EAAQ,cAAA;AAAA,EACR,OAAA,EAAS,UAAA;AAAA,EACT,IAAA,EAAM,MAAA;AAAA,EACN,UAAA,EAAY,oBAAA;AAAA,EACZ,QAAA,EAAU,CAAC,WAAW,CAAA;AAAA,EACtB,YAAA,EAAc;AAAA,IACZ,MAAA,EAAQ;AAAA,MACN,QAAA,EAAU,UAAA;AAAA,MACV,SAAA,EAAW,IAAA;AAAA,MACX,aAAA,EAAe;AAAA;AACjB,GACF;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,YAAA;AAAA,MACT,WAAA,EAAa;AAAA,KACf;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,MAAA;AAAA,MACT,WAAA,EAAa;AAAA,KACf;AAAA,IACA,cAAA,EAAgB;AAAA,MACd,IAAA,EAAM,SAAA;AAAA,MACN,OAAA,EAAS,IAAA;AAAA,MACT,WAAA,EAAa;AAAA;AACf;AAEJ;;;ACCA,IAAM,QAAA,GAAW;AAAA,EACf,QAAA,EAAU,GAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,OAAA,EAAS,GAAA;AAAA,EACT,OAAA,EAAS;AACX,CAAA;AAEO,IAAM,2BAAN,MAA6D;AAAA,EACjD,QAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA,uBAAc,GAAA,EAA4B;AAAA,EAE3D,WAAA,CAAY,MAAA,GAAyC,EAAC,EAAG;AACvD,IAAA,IAAA,CAAK,QAAA,GAAW,KAAK,OAAA,CAAQ,MAAA,CAAO,WAAW,GAAA,IAAO,OAAA,CAAQ,KAAK,CAAA;AACnE,IAAA,IAAA,CAAK,kBAAkB,IAAA,CAAK,OAAA,CAAQ,KAAK,QAAA,EAAU,MAAA,CAAO,eAAe,YAAY,CAAA;AACrF,IAAA,IAAA,CAAK,aAAA,GAAgB,OAAO,MAAA,IAAU,MAAA;AACtC,IAAA,IAAA,CAAK,cAAA,GAAiB,OAAO,cAAA,IAAkB,IAAA;AAC/C,IAAA,IAAA,CAAK,WAAA,GAAc,OAAO,WAAA,IAAe,IAAA;AAAA,EAC3C;AAAA,EAEA,MAAM,YAAY,OAAA,EAAoE;AACpF,IAAA,MAAM,WAAA,GAAc,QAAQ,WAAA,IAAe,CAAA,GAAA,EAAM,YAAW,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AACzE,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,aAAA;AACzC,IAAA,MAAM,KAAA,GAAS,QAAQ,QAAA,EAAsC,KAAA;AAC7D,IAAA,MAAM,aAAa,OAAA,CAAQ,UAAA;AAE3B,IAAA,IAAI,CAAC,UAAA,CAAW,IAAA,CAAK,eAAe,CAAA,EAAG;AACrC,MAAA,SAAA,CAAU,IAAA,CAAK,eAAA,EAAiB,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,IACrD;AAEA,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,iBAAiB,WAAW,CAAA;AAGhE,IAAA,IAAI,UAAA,CAAW,YAAY,CAAA,EAAG;AAC5B,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA;AAC7C,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAS,SAAS,2BAAA,EAA6B,QAAA,EAAU,KAAK,CAAA;AACpF,QAAA,OAAO;AAAA,UACL,WAAA;AAAA,UACA,QAAA,EAAU,UAAA;AAAA,UACV,MAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAU,YAAA;AAAA,UACV,WAAW,QAAA,CAAS,SAAA;AAAA,UACpB,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,UAClC,QAAA,EAAU,EAAE,MAAA,EAAQ,KAAA,EAAO,UAAU,IAAA,CAAK,QAAA,EAAU,QAAQ,IAAA;AAAK,SACnE;AAAA,MACF;AAEA,MAAA,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAS,SAAS,uCAAA,EAAyC,QAAA,EAAU,KAAK,CAAA;AAChG,MAAA,MAAM,GAAA,GAAA,iBAAM,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACnC,MAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,WAAA,EAAa,EAAE,WAAA,EAAa,YAAA,EAAc,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,SAAA,EAAW,GAAA,EAAK,KAAA,EAAO,CAAA;AAC3G,MAAA,OAAO;AAAA,QACL,WAAA;AAAA,QACA,QAAA,EAAU,UAAA;AAAA,QACV,MAAA,EAAQ,OAAA;AAAA,QACR,QAAA,EAAU,YAAA;AAAA,QACV,SAAA,EAAW,GAAA;AAAA,QACX,SAAA,EAAW,GAAA;AAAA,QACX,QAAA,EAAU,EAAE,MAAA,EAAQ,KAAA,EAAO,UAAU,IAAA,CAAK,QAAA,EAAU,QAAQ,IAAA;AAAK,OACnE;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,OAAA,CAAQ,oBAAA,EAAsB,EAAE,CAAA;AAC1D,IAAA,IAAI,CAAC,UAAA,IAAc,UAAA,KAAe,MAAA,EAAQ;AACxC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,MAAM,CAAA,CAAE,CAAA;AAAA,IAClD;AAEA,IAAA,MAAM,QAAA,GAAW,CAAC,KAAA,EAAe,OAAA,EAAiB,GAAA,KAAiB;AACjE,MAAA,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAS,QAAA,EAAU,KAAK,CAAA;AAAA,IAChD,CAAA;AAEA,IAAA,IAAI;AAEF,MAAA,QAAA,CAAS,UAAA,EAAY,CAAA,uBAAA,EAA0B,UAAU,CAAA,GAAA,CAAA,EAAO,EAAE,CAAA;AAClE,MAAA,IAAA,CAAK,IAAA;AAAA,QACH,CAAA,2BAAA,EAA8B,YAAY,CAAA,EAAA,EAAK,UAAU,CAAA,CAAA;AAAA,QACzD,IAAA,CAAK,QAAA;AAAA,QACL,QAAA,CAAS;AAAA,OACX;AACA,MAAA,QAAA,CAAS,UAAA,EAAY,oBAAoB,EAAE,CAAA;AAG3C,MAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,QAAA,QAAA,CAAS,YAAA,EAAc,8BAA8B,EAAE,CAAA;AACvD,QAAA,IAAA,CAAK,IAAA;AAAA,UACH,kCAAA;AAAA,UACA,YAAA;AAAA,UACA,QAAA,CAAS;AAAA,SACX;AACA,QAAA,QAAA,CAAS,YAAA,EAAc,oBAAoB,EAAE,CAAA;AAAA,MAC/C;AAGA,MAAA,IAAI,KAAK,WAAA,EAAa;AACpB,QAAA,QAAA,CAAS,cAAA,EAAgB,6CAA6C,EAAE,CAAA;AACxE,QAAA,IAAA,CAAK,IAAA;AAAA,UACH,gCAAA;AAAA,UACA,YAAA;AAAA,UACA,QAAA,CAAS;AAAA,SACX;AACA,QAAA,QAAA,CAAS,cAAA,EAAgB,0BAA0B,EAAE,CAAA;AAAA,MACvD;AAEA,MAAA,QAAA,CAAS,OAAA,EAAS,mBAAmB,GAAG,CAAA;AAExC,MAAA,MAAM,MAAA,GAAyB;AAAA,QAC7B,WAAA;AAAA,QACA,YAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA,EAAQ,OAAA;AAAA,QACR,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QAClC;AAAA,OACF;AACA,MAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,WAAA,EAAa,MAAM,CAAA;AAEpC,MAAA,OAAO;AAAA,QACL,WAAA;AAAA,QACA,QAAA,EAAU,UAAA;AAAA,QACV,MAAA,EAAQ,OAAA;AAAA,QACR,QAAA,EAAU,YAAA;AAAA,QACV,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,UAAU,EAAE,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,KAAK,QAAA;AAAS,OACrD;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,QAAA,CAAS,QAAA,EAAU,wBAAwB,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AAEnG,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,KAAK,CAAA,qBAAA,EAAwB,YAAY,aAAa,IAAA,CAAK,QAAA,EAAU,SAAS,OAAO,CAAA;AAAA,MAC5F,CAAA,CAAA,MAAQ;AAAA,MAA8B;AAEtC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,kCAAkC,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,OAC1F;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,QAAA,EAAgE;AAC3E,IAAA,OAAO;AAAA,MACL,aAAa,QAAA,CAAS,WAAA;AAAA,MACtB,eAAe,QAAA,CAAS,aAAA;AAAA,MACxB,WAAW,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,QAAA,CAAS,WAAW,CAAA,EAAG,YAAA;AAAA,MACnD,UAAA,EAAA,iBAAY,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,KACrC;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,WAAA,EAAoC;AAChD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA;AAC3C,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,IAAA,CAAK,wBAAwB,MAAA,CAAO,YAAY,aAAa,IAAA,CAAK,QAAA,EAAU,SAAS,OAAO,CAAA;AAAA,IACnG,CAAA,CAAA,MAAQ;AACN,MAAA,IAAI,UAAA,CAAW,MAAA,CAAO,YAAY,CAAA,EAAG;AACnC,QAAA,MAAA,CAAO,OAAO,YAAA,EAAc,EAAE,WAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAAA,MAC9D;AACA,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,IAAA,CAAK,oBAAA,EAAsB,IAAA,CAAK,QAAA,EAAU,SAAS,OAAO,CAAA;AAAA,MACjE,CAAA,CAAA,MAAQ;AAAA,MAAe;AAAA,IACzB;AAEA,IAAA,MAAA,CAAO,MAAA,GAAS,UAAA;AAChB,IAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,WAAW,CAAA;AAAA,EACjC;AAAA,EAEA,MAAM,UAAU,WAAA,EAAqD;AACnE,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA;AAC3C,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAO,EAAE,aAAa,MAAA,EAAQ,UAAA,EAAY,4BAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY,EAAE;AAAA,IAChF;AAEA,IAAA,MAAM,MAAA,GAAS,UAAA,CAAW,MAAA,CAAO,YAAY,CAAA;AAC7C,IAAA,OAAO;AAAA,MACL,WAAA;AAAA,MACA,MAAA,EAAQ,MAAA,GAAS,MAAA,CAAO,MAAA,GAAS,QAAA;AAAA,MACjC,WAAW,MAAA,CAAO;AAAA,KACpB;AAAA,EACF;AAAA,EAEA,eAAA,GAAiD;AAC/C,IAAA,OAAO;AAAA,MACL,cAAA,EAAgB,IAAA;AAAA,MAChB,eAAA,EAAiB;AAAA,KACnB;AAAA,EACF;AAAA,EAEQ,IAAA,CAAK,OAAA,EAAiB,GAAA,EAAa,OAAA,GAAU,GAAA,EAAgB;AACnE,IAAA,OAAO,SAAS,OAAA,EAAS;AAAA,MACvB,GAAA;AAAA,MACA,QAAA,EAAU,MAAA;AAAA,MACV,OAAA;AAAA,MACA,KAAA,EAAO,CAAC,MAAA,EAAQ,MAAA,EAAQ,MAAM;AAAA,KAC/B,CAAA;AAAA,EACH;AACF;AAKO,SAAS,aAAA,CAAc,MAAA,GAAyC,EAAC,EAA6B;AACnG,EAAA,OAAO,IAAI,yBAAyB,MAAM,CAAA;AAC5C","file":"index.js","sourcesContent":["import type { AdapterManifest } from '@kb-labs/core-platform';\n\nexport const manifest: AdapterManifest = {\n manifestVersion: '1.0.0',\n id: 'worktree-workspace-provider',\n name: 'Git Worktree Workspace Provider',\n version: '0.1.0',\n description: 'Creates isolated git worktrees for pipeline execution',\n author: 'KB Labs Team',\n license: 'KBPL-1.1',\n type: 'core',\n implements: 'IWorkspaceProvider',\n contexts: ['workspace'],\n capabilities: {\n custom: {\n provider: 'worktree',\n isolation: true,\n gitSubmodules: true,\n },\n },\n configSchema: {\n worktreeDir: {\n type: 'string',\n default: '.worktrees',\n description: 'Directory where worktrees are created (relative to repo root)',\n },\n branch: {\n type: 'string',\n default: 'main',\n description: 'Default branch to create worktrees from',\n },\n initSubmodules: {\n type: 'boolean',\n default: true,\n description: 'Initialize git submodules in worktree',\n },\n },\n};\n","import { execSync } from 'node:child_process';\nimport { existsSync, mkdirSync, rmSync } from 'node:fs';\nimport path from 'node:path';\nimport { randomUUID } from 'node:crypto';\nimport type {\n IWorkspaceProvider,\n MaterializeWorkspaceRequest,\n WorkspaceDescriptor,\n AttachWorkspaceRequest,\n WorkspaceAttachment,\n WorkspaceStatusResult,\n WorkspaceProviderCapabilities,\n WorkspaceStatus,\n} from '@kb-labs/core-platform';\n\nexport { manifest } from './manifest.js';\n\ninterface WorkspaceContext {\n cwd?: string;\n}\n\nexport interface WorktreeWorkspaceAdapterConfig {\n worktreeDir?: string;\n branch?: string;\n initSubmodules?: boolean;\n installDeps?: boolean;\n workspace?: WorkspaceContext;\n}\n\ninterface WorktreeRecord {\n workspaceId: string;\n worktreePath: string;\n branch: string;\n status: WorkspaceStatus;\n createdAt: string;\n runId?: string;\n}\n\nconst TIMEOUTS = {\n worktree: 30_000,\n submodules: 600_000,\n install: 300_000,\n cleanup: 30_000,\n} as const;\n\nexport class WorktreeWorkspaceAdapter implements IWorkspaceProvider {\n private readonly repoRoot: string;\n private readonly worktreeBaseDir: string;\n private readonly defaultBranch: string;\n private readonly initSubmodules: boolean;\n private readonly installDeps: boolean;\n private readonly records = new Map<string, WorktreeRecord>();\n\n constructor(config: WorktreeWorkspaceAdapterConfig = {}) {\n this.repoRoot = path.resolve(config.workspace?.cwd ?? process.cwd());\n this.worktreeBaseDir = path.resolve(this.repoRoot, config.worktreeDir ?? '.worktrees');\n this.defaultBranch = config.branch ?? 'main';\n this.initSubmodules = config.initSubmodules ?? true;\n this.installDeps = config.installDeps ?? true;\n }\n\n async materialize(request: MaterializeWorkspaceRequest): Promise<WorkspaceDescriptor> {\n const workspaceId = request.workspaceId ?? `wt_${randomUUID().slice(0, 8)}`;\n const branch = request.sourceRef ?? this.defaultBranch;\n const runId = (request.metadata as Record<string, unknown>)?.runId as string | undefined;\n const onProgress = request.onProgress;\n\n if (!existsSync(this.worktreeBaseDir)) {\n mkdirSync(this.worktreeBaseDir, { recursive: true });\n }\n\n const worktreePath = path.join(this.worktreeBaseDir, workspaceId);\n\n // Reuse existing worktree (retry scenario — same run, same workspace)\n if (existsSync(worktreePath)) {\n const existing = this.records.get(workspaceId);\n if (existing) {\n onProgress?.({ stage: 'reuse', message: 'Reusing existing worktree', progress: 100 });\n return {\n workspaceId,\n provider: 'worktree',\n status: 'ready',\n rootPath: worktreePath,\n createdAt: existing.createdAt,\n updatedAt: new Date().toISOString(),\n metadata: { branch, runId, repoRoot: this.repoRoot, reused: true },\n };\n }\n // Worktree exists on disk but not in records (stale) — reuse anyway\n onProgress?.({ stage: 'reuse', message: 'Reusing existing worktree (recovered)', progress: 100 });\n const now = new Date().toISOString();\n this.records.set(workspaceId, { workspaceId, worktreePath, branch, status: 'ready', createdAt: now, runId });\n return {\n workspaceId,\n provider: 'worktree',\n status: 'ready',\n rootPath: worktreePath,\n createdAt: now,\n updatedAt: now,\n metadata: { branch, runId, repoRoot: this.repoRoot, reused: true },\n };\n }\n\n const safeBranch = branch.replace(/[^a-zA-Z0-9_\\-./]/g, '');\n if (!safeBranch || safeBranch !== branch) {\n throw new Error(`Invalid branch name: ${branch}`);\n }\n\n const progress = (stage: string, message: string, pct?: number) => {\n onProgress?.({ stage, message, progress: pct });\n };\n\n try {\n // Stage 1: Create worktree\n progress('worktree', `Creating worktree from ${safeBranch}...`, 10);\n this.exec(\n `git worktree add --detach \"${worktreePath}\" ${safeBranch}`,\n this.repoRoot,\n TIMEOUTS.worktree,\n );\n progress('worktree', 'Worktree created', 25);\n\n // Stage 2: Initialize submodules\n if (this.initSubmodules) {\n progress('submodules', 'Initializing submodules...', 30);\n this.exec(\n 'git submodule update --recursive',\n worktreePath,\n TIMEOUTS.submodules,\n );\n progress('submodules', 'Submodules ready', 60);\n }\n\n // Stage 3: Install dependencies\n if (this.installDeps) {\n progress('dependencies', 'Installing dependencies (pnpm install)...', 65);\n this.exec(\n 'pnpm install --frozen-lockfile',\n worktreePath,\n TIMEOUTS.install,\n );\n progress('dependencies', 'Dependencies installed', 95);\n }\n\n progress('ready', 'Workspace ready', 100);\n\n const record: WorktreeRecord = {\n workspaceId,\n worktreePath,\n branch,\n status: 'ready',\n createdAt: new Date().toISOString(),\n runId,\n };\n this.records.set(workspaceId, record);\n\n return {\n workspaceId,\n provider: 'worktree',\n status: 'ready',\n rootPath: worktreePath,\n createdAt: record.createdAt,\n updatedAt: record.createdAt,\n metadata: { branch, runId, repoRoot: this.repoRoot },\n };\n } catch (error) {\n progress('failed', `Provisioning failed: ${error instanceof Error ? error.message : String(error)}`);\n\n try {\n this.exec(`git worktree remove \"${worktreePath}\" --force`, this.repoRoot, TIMEOUTS.cleanup);\n } catch { /* ignore cleanup errors */ }\n\n throw new Error(\n `Failed to provision workspace: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n async attach(_request: AttachWorkspaceRequest): Promise<WorkspaceAttachment> {\n return {\n workspaceId: _request.workspaceId,\n environmentId: _request.environmentId,\n mountPath: this.records.get(_request.workspaceId)?.worktreePath,\n attachedAt: new Date().toISOString(),\n };\n }\n\n async release(workspaceId: string): Promise<void> {\n const record = this.records.get(workspaceId);\n if (!record) {\n return;\n }\n\n try {\n this.exec(`git worktree remove \"${record.worktreePath}\" --force`, this.repoRoot, TIMEOUTS.cleanup);\n } catch {\n if (existsSync(record.worktreePath)) {\n rmSync(record.worktreePath, { recursive: true, force: true });\n }\n try {\n this.exec('git worktree prune', this.repoRoot, TIMEOUTS.cleanup);\n } catch { /* ignore */ }\n }\n\n record.status = 'released';\n this.records.delete(workspaceId);\n }\n\n async getStatus(workspaceId: string): Promise<WorkspaceStatusResult> {\n const record = this.records.get(workspaceId);\n if (!record) {\n return { workspaceId, status: 'released', updatedAt: new Date().toISOString() };\n }\n\n const exists = existsSync(record.worktreePath);\n return {\n workspaceId,\n status: exists ? record.status : 'failed',\n updatedAt: record.createdAt,\n };\n }\n\n getCapabilities(): WorkspaceProviderCapabilities {\n return {\n supportsAttach: true,\n supportsRelease: true,\n };\n }\n\n private exec(command: string, cwd: string, timeout = 60_000): string {\n return execSync(command, {\n cwd,\n encoding: 'utf8',\n timeout,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n }\n}\n\n/**\n * Adapter factory — called by platform adapter loader.\n */\nexport function createAdapter(config: WorktreeWorkspaceAdapterConfig = {}): WorktreeWorkspaceAdapter {\n return new WorktreeWorkspaceAdapter(config);\n}\n"]}
1
+ {"version":3,"sources":["../src/manifest.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { AdapterManifest } from '@kb-labs/core-platform';\n\nexport const manifest: AdapterManifest = {\n manifestVersion: '1.0.0',\n id: 'worktree-workspace-provider',\n name: 'Git Worktree Workspace Provider',\n version: '0.1.0',\n description: 'Creates isolated git worktrees for pipeline execution',\n author: 'KB Labs Team',\n license: 'KBPL-1.1',\n type: 'core',\n implements: 'IWorkspaceProvider',\n contexts: ['workspace'],\n capabilities: {\n custom: {\n provider: 'worktree',\n isolation: true,\n gitSubmodules: true,\n },\n },\n configSchema: {\n worktreeDir: {\n type: 'string',\n default: '.worktrees',\n description: 'Directory where worktrees are created (relative to repo root)',\n },\n branch: {\n type: 'string',\n default: 'main',\n description: 'Default branch to create worktrees from',\n },\n initSubmodules: {\n type: 'boolean',\n default: true,\n description: 'Initialize git submodules in worktree',\n },\n },\n};\n","import { execSync } from 'node:child_process';\nimport { existsSync, mkdirSync, rmSync } from 'node:fs';\nimport path from 'node:path';\nimport { randomUUID } from 'node:crypto';\nimport type {\n IWorkspaceProvider,\n MaterializeWorkspaceRequest,\n WorkspaceDescriptor,\n AttachWorkspaceRequest,\n WorkspaceAttachment,\n WorkspaceStatusResult,\n WorkspaceProviderCapabilities,\n WorkspaceStatus,\n} from '@kb-labs/core-platform';\n\nexport { manifest } from './manifest.js';\n\ninterface WorkspaceContext {\n cwd?: string;\n}\n\nexport interface WorktreeWorkspaceAdapterConfig {\n worktreeDir?: string;\n branch?: string;\n initSubmodules?: boolean;\n installDeps?: boolean;\n workspace?: WorkspaceContext;\n}\n\ninterface WorktreeRecord {\n workspaceId: string;\n worktreePath: string;\n branch: string;\n status: WorkspaceStatus;\n createdAt: string;\n runId?: string;\n}\n\nconst TIMEOUTS = {\n worktree: 30_000,\n submodules: 600_000,\n install: 300_000,\n cleanup: 30_000,\n} as const;\n\nexport class WorktreeWorkspaceAdapter implements IWorkspaceProvider {\n private readonly repoRoot: string;\n private readonly worktreeBaseDir: string;\n private readonly defaultBranch: string;\n private readonly initSubmodules: boolean;\n private readonly installDeps: boolean;\n private readonly records = new Map<string, WorktreeRecord>();\n\n constructor(config: WorktreeWorkspaceAdapterConfig = {}) {\n this.repoRoot = path.resolve(config.workspace?.cwd ?? process.cwd());\n this.worktreeBaseDir = path.resolve(this.repoRoot, config.worktreeDir ?? '.worktrees');\n this.defaultBranch = config.branch ?? 'main';\n this.initSubmodules = config.initSubmodules ?? true;\n this.installDeps = config.installDeps ?? true;\n }\n\n async materialize(request: MaterializeWorkspaceRequest): Promise<WorkspaceDescriptor> {\n const workspaceId = request.workspaceId ?? `wt_${randomUUID().slice(0, 8)}`;\n const branch = request.sourceRef ?? this.defaultBranch;\n const runId = (request.metadata as Record<string, unknown>)?.runId as string | undefined;\n const onProgress = request.onProgress;\n\n if (!existsSync(this.worktreeBaseDir)) {\n mkdirSync(this.worktreeBaseDir, { recursive: true });\n }\n\n const worktreePath = path.join(this.worktreeBaseDir, workspaceId);\n\n // Reuse existing worktree (retry scenario — same run, same workspace)\n if (existsSync(worktreePath)) {\n const existing = this.records.get(workspaceId);\n if (existing) {\n onProgress?.({ stage: 'reuse', message: 'Reusing existing worktree', progress: 100 });\n return {\n workspaceId,\n provider: 'worktree',\n status: 'ready',\n rootPath: worktreePath,\n createdAt: existing.createdAt,\n updatedAt: new Date().toISOString(),\n metadata: { branch, runId, repoRoot: this.repoRoot, reused: true },\n };\n }\n // Worktree exists on disk but not in records (stale) — reuse anyway\n onProgress?.({ stage: 'reuse', message: 'Reusing existing worktree (recovered)', progress: 100 });\n const now = new Date().toISOString();\n this.records.set(workspaceId, { workspaceId, worktreePath, branch, status: 'ready', createdAt: now, runId });\n return {\n workspaceId,\n provider: 'worktree',\n status: 'ready',\n rootPath: worktreePath,\n createdAt: now,\n updatedAt: now,\n metadata: { branch, runId, repoRoot: this.repoRoot, reused: true },\n };\n }\n\n const safeBranch = branch.replace(/[^a-zA-Z0-9_\\-./]/g, '');\n if (!safeBranch || safeBranch !== branch) {\n throw new Error(`Invalid branch name: ${branch}`);\n }\n\n const progress = (stage: string, message: string, pct?: number) => {\n onProgress?.({ stage, message, progress: pct });\n };\n\n try {\n // Stage 1: Create worktree\n progress('worktree', `Creating worktree from ${safeBranch}...`, 10);\n this.exec(\n `git worktree add --detach \"${worktreePath}\" ${safeBranch}`,\n this.repoRoot,\n TIMEOUTS.worktree,\n );\n progress('worktree', 'Worktree created', 25);\n\n // Stage 2: Initialize submodules\n if (this.initSubmodules) {\n progress('submodules', 'Initializing submodules...', 30);\n this.exec(\n 'git submodule update --recursive',\n worktreePath,\n TIMEOUTS.submodules,\n );\n progress('submodules', 'Submodules ready', 60);\n }\n\n // Stage 3: Install dependencies\n if (this.installDeps) {\n progress('dependencies', 'Installing dependencies (pnpm install)...', 65);\n this.exec(\n 'pnpm install --frozen-lockfile',\n worktreePath,\n TIMEOUTS.install,\n );\n progress('dependencies', 'Dependencies installed', 95);\n }\n\n progress('ready', 'Workspace ready', 100);\n\n const record: WorktreeRecord = {\n workspaceId,\n worktreePath,\n branch,\n status: 'ready',\n createdAt: new Date().toISOString(),\n runId,\n };\n this.records.set(workspaceId, record);\n\n return {\n workspaceId,\n provider: 'worktree',\n status: 'ready',\n rootPath: worktreePath,\n createdAt: record.createdAt,\n updatedAt: record.createdAt,\n metadata: { branch, runId, repoRoot: this.repoRoot },\n };\n } catch (error) {\n progress('failed', `Provisioning failed: ${error instanceof Error ? error.message : String(error)}`);\n\n try {\n this.exec(`git worktree remove \"${worktreePath}\" --force`, this.repoRoot, TIMEOUTS.cleanup);\n } catch { /* ignore cleanup errors */ }\n\n throw new Error(\n `Failed to provision workspace: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n async attach(_request: AttachWorkspaceRequest): Promise<WorkspaceAttachment> {\n return {\n workspaceId: _request.workspaceId,\n environmentId: _request.environmentId,\n mountPath: this.records.get(_request.workspaceId)?.worktreePath,\n attachedAt: new Date().toISOString(),\n };\n }\n\n async release(workspaceId: string): Promise<void> {\n const record = this.records.get(workspaceId);\n if (!record) {\n return;\n }\n\n try {\n this.exec(`git worktree remove \"${record.worktreePath}\" --force`, this.repoRoot, TIMEOUTS.cleanup);\n } catch {\n if (existsSync(record.worktreePath)) {\n rmSync(record.worktreePath, { recursive: true, force: true });\n }\n try {\n this.exec('git worktree prune', this.repoRoot, TIMEOUTS.cleanup);\n } catch { /* ignore */ }\n }\n\n record.status = 'released';\n this.records.delete(workspaceId);\n }\n\n async getStatus(workspaceId: string): Promise<WorkspaceStatusResult> {\n const record = this.records.get(workspaceId);\n if (!record) {\n return { workspaceId, status: 'released', updatedAt: new Date().toISOString() };\n }\n\n const exists = existsSync(record.worktreePath);\n return {\n workspaceId,\n status: exists ? record.status : 'failed',\n updatedAt: record.createdAt,\n };\n }\n\n getCapabilities(): WorkspaceProviderCapabilities {\n return {\n supportsAttach: true,\n supportsRelease: true,\n };\n }\n\n private exec(command: string, cwd: string, timeout = 60_000): string {\n return execSync(command, {\n cwd,\n encoding: 'utf8',\n timeout,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n }\n}\n\n/**\n * Adapter factory — called by platform adapter loader.\n */\nexport function createAdapter(config: WorktreeWorkspaceAdapterConfig = {}): WorktreeWorkspaceAdapter {\n return new WorktreeWorkspaceAdapter(config);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/adapters/workspace-worktree/src/manifest.ts"],"names":[],"mappings":";AAEO,IAAM,QAAA,GAA4B;AAAA,EACvC,eAAA,EAAiB,OAAA;AAAA,EACjB,EAAA,EAAI,6BAAA;AAAA,EACJ,IAAA,EAAM,iCAAA;AAAA,EACN,OAAA,EAAS,OAAA;AAAA,EACT,WAAA,EAAa,uDAAA;AAAA,EACb,MAAA,EAAQ,cAAA;AAAA,EACR,OAAA,EAAS,UAAA;AAAA,EACT,IAAA,EAAM,MAAA;AAAA,EACN,UAAA,EAAY,oBAAA;AAAA,EACZ,QAAA,EAAU,CAAC,WAAW,CAAA;AAAA,EACtB,YAAA,EAAc;AAAA,IACZ,MAAA,EAAQ;AAAA,MACN,QAAA,EAAU,UAAA;AAAA,MACV,SAAA,EAAW,IAAA;AAAA,MACX,aAAA,EAAe;AAAA;AACjB,GACF;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,YAAA;AAAA,MACT,WAAA,EAAa;AAAA,KACf;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,MAAA;AAAA,MACT,WAAA,EAAa;AAAA,KACf;AAAA,IACA,cAAA,EAAgB;AAAA,MACd,IAAA,EAAM,SAAA;AAAA,MACN,OAAA,EAAS,IAAA;AAAA,MACT,WAAA,EAAa;AAAA;AACf;AAEJ","file":"manifest.js","sourcesContent":["import type { AdapterManifest } from '@kb-labs/core-platform';\n\nexport const manifest: AdapterManifest = {\n manifestVersion: '1.0.0',\n id: 'worktree-workspace-provider',\n name: 'Git Worktree Workspace Provider',\n version: '0.1.0',\n description: 'Creates isolated git worktrees for pipeline execution',\n author: 'KB Labs Team',\n license: 'KBPL-1.1',\n type: 'core',\n implements: 'IWorkspaceProvider',\n contexts: ['workspace'],\n capabilities: {\n custom: {\n provider: 'worktree',\n isolation: true,\n gitSubmodules: true,\n },\n },\n configSchema: {\n worktreeDir: {\n type: 'string',\n default: '.worktrees',\n description: 'Directory where worktrees are created (relative to repo root)',\n },\n branch: {\n type: 'string',\n default: 'main',\n description: 'Default branch to create worktrees from',\n },\n initSubmodules: {\n type: 'boolean',\n default: true,\n description: 'Initialize git submodules in worktree',\n },\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/manifest.ts"],"names":[],"mappings":";AAEO,IAAM,QAAA,GAA4B;AAAA,EACvC,eAAA,EAAiB,OAAA;AAAA,EACjB,EAAA,EAAI,6BAAA;AAAA,EACJ,IAAA,EAAM,iCAAA;AAAA,EACN,OAAA,EAAS,OAAA;AAAA,EACT,WAAA,EAAa,uDAAA;AAAA,EACb,MAAA,EAAQ,cAAA;AAAA,EACR,OAAA,EAAS,UAAA;AAAA,EACT,IAAA,EAAM,MAAA;AAAA,EACN,UAAA,EAAY,oBAAA;AAAA,EACZ,QAAA,EAAU,CAAC,WAAW,CAAA;AAAA,EACtB,YAAA,EAAc;AAAA,IACZ,MAAA,EAAQ;AAAA,MACN,QAAA,EAAU,UAAA;AAAA,MACV,SAAA,EAAW,IAAA;AAAA,MACX,aAAA,EAAe;AAAA;AACjB,GACF;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,YAAA;AAAA,MACT,WAAA,EAAa;AAAA,KACf;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,MAAA;AAAA,MACT,WAAA,EAAa;AAAA,KACf;AAAA,IACA,cAAA,EAAgB;AAAA,MACd,IAAA,EAAM,SAAA;AAAA,MACN,OAAA,EAAS,IAAA;AAAA,MACT,WAAA,EAAa;AAAA;AACf;AAEJ","file":"manifest.js","sourcesContent":["import type { AdapterManifest } from '@kb-labs/core-platform';\n\nexport const manifest: AdapterManifest = {\n manifestVersion: '1.0.0',\n id: 'worktree-workspace-provider',\n name: 'Git Worktree Workspace Provider',\n version: '0.1.0',\n description: 'Creates isolated git worktrees for pipeline execution',\n author: 'KB Labs Team',\n license: 'KBPL-1.1',\n type: 'core',\n implements: 'IWorkspaceProvider',\n contexts: ['workspace'],\n capabilities: {\n custom: {\n provider: 'worktree',\n isolation: true,\n gitSubmodules: true,\n },\n },\n configSchema: {\n worktreeDir: {\n type: 'string',\n default: '.worktrees',\n description: 'Directory where worktrees are created (relative to repo root)',\n },\n branch: {\n type: 'string',\n default: 'main',\n description: 'Default branch to create worktrees from',\n },\n initSubmodules: {\n type: 'boolean',\n default: true,\n description: 'Initialize git submodules in worktree',\n },\n },\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kb-labs/adapters-workspace-worktree",
3
- "version": "2.16.0",
3
+ "version": "2.17.0",
4
4
  "description": "Git worktree adapter implementing IWorkspaceProvider for isolated execution",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -21,7 +21,7 @@
21
21
  ],
22
22
  "sideEffects": false,
23
23
  "peerDependencies": {
24
- "@kb-labs/core-platform": "2.16.0"
24
+ "@kb-labs/core-platform": "2.17.0"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "^24.3.3",
@@ -30,8 +30,8 @@
30
30
  "typescript": "^5.6.3",
31
31
  "vitest": "^3.2.4",
32
32
  "rimraf": "^6.0.1",
33
- "@kb-labs/core-platform": "2.16.0",
34
- "@kb-labs/devkit": "2.16.0"
33
+ "@kb-labs/devkit": "2.17.0",
34
+ "@kb-labs/core-platform": "2.17.0"
35
35
  },
36
36
  "engines": {
37
37
  "node": ">=20.0.0",