@verentis/cli 0.2.6 → 0.2.7
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 +67 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config.ts","../src/jwt.ts","../src/auth/deviceFlow.ts","../src/http.ts","../src/api/scopes.ts","../src/api/catalog.ts","../src/api/client.ts","../src/context.ts","../src/output.ts","../src/commands/account.ts","../src/commands/api.ts","../src/commands/apikey.ts","../src/dev/context.ts","../src/vpkg/manifest.ts","../src/dev/manifest.ts","../src/commands/dev.ts","../src/commands/exec.ts","../src/commands/files.ts","../src/commands/init.ts","../src/crypto/keys.ts","../src/registry.ts","../src/commands/keygen.ts","../src/commands/login.ts","../src/crypto/dsse.ts","../src/crypto/seal.ts","../src/vpkg/catalog.ts","../src/vpkg/overlay.ts","../src/vpkg/pack.ts","../src/vpkg/read.ts","../src/commands/pack.ts","../src/commands/package.ts","../src/publisher/logo.ts","../src/commands/publisher.ts","../src/commands/registry.ts","../src/commands/settings.ts","../src/version.ts","../src/update/registry.ts","../src/update/semver.ts","../src/update/state.ts","../src/update/notifier.ts","../src/commands/update.ts","../src/commands/use.ts","../src/commands/user.ts","../src/commands/validate.ts","../src/commands/workspace.ts","../src/index.ts"],"names":["resolve","cached","program","text","readFile","marketplace","join","parse","mkdir","writeFile","dirname","stat","readdir","cryptoSign","cryptoVerify","pageItems","Readable","createReadStream","pkg","generateKeyPairSync","createPublicKey","files","createHash","isAbsolute","toEntryPath","glob","relative","sep","mkdtemp","tmpdir","tar2","rm","MAX_LOGO_BYTES","pipeline","createWriteStream","spawn","fileURLToPath"],"mappings":"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","file":"index.js","sourcesContent":["import { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { Agent } from 'node:https'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\nexport interface CliConfig {\n /** Base API URL (the gateway), e.g. https://api.localtest.me:8443 */\n apiUrl?: string\n /** Verentis API key (vrt_ prefix) — sent directly as a bearer credential. */\n apiKey?: string\n /** Identity token — exchanged for audience-scoped access tokens per request. */\n identityToken?: string\n /** Refresh token for renewing the identity token (device-code login). */\n refreshToken?: string\n /** Default workspace for workspace-scoped commands (files, exec, install, dev). */\n defaultWorkspaceId?: string\n /** Default account for admin commands (users, api-keys, invitations). */\n defaultAccountId?: string\n /** Name of the default signing key (file under ~/.verentis/keys). */\n defaultKey?: string\n /** Base64 X25519 public key of the platform sealing recipient (for `pack --encrypt`). */\n sealingPublicKey?: string\n /** Skip TLS certificate verification (for local dev with self-signed certs). */\n insecure?: boolean\n}\n\n/** HTTPS agent that skips certificate verification (for local dev with self-signed certs). */\nconst insecureAgent = new Agent({ rejectUnauthorized: false })\n\n/** Returns fetch options that skip TLS verification when insecure mode is enabled. */\nexport function insecureFetchOptions(insecure: boolean | undefined): { dispatcher?: import('undici-types').Dispatcher } {\n // Node 18.2+ fetch() accepts undici's dispatcher for custom TLS settings.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return insecure ? { dispatcher: insecureAgent as any } : {}\n}\n\nexport const configDir = () => process.env.VERENTIS_CONFIG_DIR ?? join(homedir(), '.verentis')\nexport const configPath = () => join(configDir(), 'config.json')\nexport const keysDir = () => join(configDir(), 'keys')\n\nexport async function loadConfig(): Promise<CliConfig> {\n try {\n return JSON.parse(await readFile(configPath(), 'utf8')) as CliConfig\n } catch {\n return {}\n }\n}\n\nexport async function saveConfig(config: CliConfig): Promise<void> {\n await mkdir(configDir(), { recursive: true, mode: 0o700 })\n await writeFile(configPath(), JSON.stringify(config, null, 2) + '\\n', { mode: 0o600 })\n}\n\nexport function requireApiUrl(config: CliConfig): string {\n const url = process.env.VERENTIS_API_URL ?? config.apiUrl\n if (!url) {\n throw new Error('No API URL configured. Run `verentis login --api-url <url>` first (or set VERENTIS_API_URL).')\n }\n return url.replace(/\\/+$/, '')\n}\n","/** Minimal JWT payload inspection (no signature verification — client-side hints only). */\n\nexport interface JwtPayload {\n sub?: string\n account_id?: string\n workspace_id?: string\n scope?: string\n exp?: number\n name?: string\n email?: string\n [claim: string]: unknown\n}\n\nexport function decodeJwtPayload(token: string): JwtPayload | null {\n const parts = token.split('.')\n if (parts.length !== 3) return null\n try {\n const json = Buffer.from(parts[1].replace(/-/g, '+').replace(/_/g, '/'), 'base64').toString('utf8')\n return JSON.parse(json) as JwtPayload\n } catch {\n return null\n }\n}\n\n/** True when the token has an `exp` within `skewSeconds` of now (or already past). */\nexport function isExpired(token: string, skewSeconds = 60): boolean {\n const payload = decodeJwtPayload(token)\n if (!payload?.exp) return false\n return payload.exp * 1000 <= Date.now() + skewSeconds * 1000\n}\n","/** RFC 8628 device-code flow against the Verentis Security OIDC endpoints. */\n\nimport { insecureFetchOptions } from '../config.js'\n\nexport const CLI_CLIENT_ID = 'Verentis.Cli'\n\nexport interface DeviceAuthorization {\n device_code: string\n user_code: string\n verification_uri: string\n verification_uri_complete?: string\n expires_in: number\n interval: number\n}\n\ninterface TokenResponse {\n id_token?: string\n access_token?: string\n refresh_token?: string\n expires_in?: number\n error?: string | null\n}\n\nexport interface IdentityResult {\n idToken: string\n refreshToken?: string\n}\n\nexport async function startDeviceAuthorization(apiUrl: string, insecure?: boolean): Promise<DeviceAuthorization> {\n const res = await fetch(`${apiUrl}/connect/device/authorize`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({ client_id: CLI_CLIENT_ID }),\n ...insecureFetchOptions(insecure),\n })\n if (!res.ok) {\n const text = await res.text().catch(() => '')\n throw new Error(`Could not start device sign-in (${res.status}).${text ? ` ${text.slice(0, 300)}` : ''}`)\n }\n return (await res.json()) as DeviceAuthorization\n}\n\n/** Polls the token endpoint until approval, denial or expiry. Returns the identity + refresh tokens. */\nexport async function pollForIdentityToken(\n apiUrl: string,\n authorization: DeviceAuthorization,\n insecure?: boolean,\n onPoll?: () => void,\n): Promise<IdentityResult> {\n let intervalMs = Math.max(authorization.interval, 1) * 1000\n const deadline = Date.now() + authorization.expires_in * 1000\n\n while (Date.now() < deadline) {\n await sleep(intervalMs)\n onPoll?.()\n\n const res = await fetch(`${apiUrl}/connect/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({\n grant_type: 'device_code',\n device_code: authorization.device_code,\n client_id: CLI_CLIENT_ID,\n }),\n ...insecureFetchOptions(insecure),\n })\n\n let payload: TokenResponse | undefined\n try {\n payload = (await res.json()) as TokenResponse\n } catch {\n payload = undefined\n }\n\n if (res.ok && payload?.id_token) {\n return { idToken: payload.id_token, refreshToken: payload.refresh_token }\n }\n\n switch (payload?.error) {\n case 'authorization_pending':\n continue\n case 'slow_down':\n intervalMs += 5000\n continue\n case 'access_denied':\n throw new Error('Sign-in was denied in the browser.')\n case 'expired_token':\n throw new Error('The device code expired before it was approved. Run `verentis login` again.')\n default:\n throw new Error(`Device sign-in failed (${res.status}).${payload?.error ? ` ${payload.error}` : ''}`)\n }\n }\n\n throw new Error('The device code expired before it was approved. Run `verentis login` again.')\n}\n\n/** RefreshTokenError signals the refresh token is no longer usable — the caller must re-run `verentis login`. */\nexport class RefreshTokenError extends Error {}\n\n/**\n * Exchanges a refresh token for a fresh identity token (RFC 6749 §6), rotating the refresh token.\n * Throws {@link RefreshTokenError} when the token is invalid/expired/revoked so callers can prompt a re-login.\n */\nexport async function refreshIdentityToken(apiUrl: string, refreshToken: string, insecure?: boolean): Promise<IdentityResult> {\n const res = await fetch(`${apiUrl}/connect/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({\n grant_type: 'refresh_token',\n refresh_token: refreshToken,\n client_id: CLI_CLIENT_ID,\n }),\n ...insecureFetchOptions(insecure),\n })\n\n let payload: TokenResponse | undefined\n try {\n payload = (await res.json()) as TokenResponse\n } catch {\n payload = undefined\n }\n\n if (res.ok && payload?.id_token) {\n return { idToken: payload.id_token, refreshToken: payload.refresh_token ?? refreshToken }\n }\n\n // RFC 6749 §5.2: invalid_grant / invalid_client mean the token can't be renewed — re-login required.\n throw new RefreshTokenError(\n `Session could not be renewed${payload?.error ? ` (${payload.error})` : ` (${res.status})`}. Run \\`verentis login\\` again.`,\n )\n}\n\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))\n","import { loadConfig, requireApiUrl, saveConfig, type CliConfig, insecureFetchOptions } from './config.js'\nimport { isExpired } from './jwt.js'\nimport { RefreshTokenError, refreshIdentityToken } from './auth/deviceFlow.js'\n\nexport class ApiError extends Error {\n constructor(\n public readonly status: number,\n message: string,\n public readonly body?: unknown,\n ) {\n super(message)\n }\n}\n\nexport interface ApiClient {\n apiUrl: string\n request<T>(method: string, path: string, options?: RequestOptions): Promise<T>\n requestRaw(method: string, path: string, options?: RequestOptions): Promise<Response>\n /** Mints a scoped access token (optionally workspace-bound / node-bounded) and returns the raw JWT. */\n mintAccessToken(options: MintTokenOptions): Promise<string>\n}\n\nexport interface MintTokenOptions {\n scopes: string[]\n workspaceId?: string\n accountId?: string\n /** Confine the token to a resource boundary (e.g. a node subtree). */\n resourceId?: string\n resourceKind?: 'Account' | 'Workspace' | 'Node' | 'Publisher'\n}\n\nexport interface RequestOptions {\n scopes?: string[]\n /** Binds the access token to a workspace (required for calls the backend forwards to Node). */\n tokenWorkspaceId?: string\n body?: unknown\n /** Raw body stream/bytes (overrides json body). */\n rawBody?: BodyInit\n contentType?: string\n query?: Record<string, string | number | boolean | undefined>\n headers?: Record<string, string>\n}\n\nconst AUDIENCE = 'verentis'\n\nexport async function createApiClient(overrides?: Partial<CliConfig>): Promise<ApiClient> {\n const config = { ...(await loadConfig()), ...overrides }\n const apiUrl = requireApiUrl(config)\n const insecure = config.insecure\n const tokenCache = new Map<string, string>()\n\n // Identity/refresh token state. An env-provided identity token is externally managed — never\n // auto-refreshed or persisted; a device-flow login persists both to ~/.verentis/config.json.\n const envIdentity = process.env.VERENTIS_TOKEN\n let currentIdentity = envIdentity ?? config.identityToken\n let currentRefresh = config.refreshToken\n let refreshInflight: Promise<string> | null = null\n\n async function persistTokens(idToken: string, refreshToken?: string): Promise<void> {\n // Re-read from disk so we merge (don't clobber fields written elsewhere).\n const disk = await loadConfig()\n disk.identityToken = idToken\n if (refreshToken) disk.refreshToken = refreshToken\n await saveConfig(disk)\n }\n\n async function clearTokens(): Promise<void> {\n const disk = await loadConfig()\n delete disk.identityToken\n delete disk.refreshToken\n await saveConfig(disk)\n }\n\n /**\n * Returns a usable identity token, transparently renewing it via the refresh token when it is\n * expired or within 120s of expiry (rotation is persisted). Throws a clear \"log in again\" error when\n * there is no way to renew. Concurrent callers share a single in-flight refresh.\n */\n async function resolveIdentityToken(): Promise<string> {\n if (!currentIdentity) throw new ApiError(401, 'Not logged in. Run `verentis login`.')\n if (!isExpired(currentIdentity, 120)) return currentIdentity\n if (envIdentity || !currentRefresh) {\n throw new ApiError(401, 'Your session has expired — run `verentis login` again.')\n }\n if (!refreshInflight) {\n refreshInflight = (async () => {\n try {\n const refreshed = await refreshIdentityToken(apiUrl, currentRefresh!, insecure)\n currentIdentity = refreshed.idToken\n currentRefresh = refreshed.refreshToken ?? currentRefresh\n await persistTokens(refreshed.idToken, refreshed.refreshToken)\n return refreshed.idToken\n } catch (err) {\n if (err instanceof RefreshTokenError) {\n await clearTokens().catch(() => {})\n throw new ApiError(401, err.message)\n }\n throw err\n } finally {\n refreshInflight = null\n }\n })()\n }\n return refreshInflight\n }\n\n async function credentialFor(scopes: string[], workspaceId?: string): Promise<string> {\n // API keys are only understood by the Security service, so they are ALWAYS exchanged\n // for a scoped access token — never sent directly to other services.\n const cacheKey = `${workspaceId ?? ''}:${[...scopes].sort().join(' ')}`\n const cached = tokenCache.get(cacheKey)\n if (cached && !isExpired(cached)) return cached\n const token = await mintAccessToken({ scopes, workspaceId })\n tokenCache.set(cacheKey, token)\n return token\n }\n\n async function mintAccessToken(options: MintTokenOptions): Promise<string> {\n const apiKey = process.env.VERENTIS_API_KEY ?? config.apiKey\n if (!apiKey && !currentIdentity) {\n throw new Error('Not logged in. Run `verentis login` (or pass --api-key / --token).')\n }\n // API keys are exchanged directly; an identity token is renewed via its refresh token when stale.\n const credential = apiKey ?? (await resolveIdentityToken())\n\n const res = await fetch(`${apiUrl}/v1/tokens/access`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${credential}`,\n },\n body: JSON.stringify({\n audience: AUDIENCE,\n scopes: options.scopes,\n ...(options.workspaceId ? { workspaceId: options.workspaceId } : {}),\n ...(options.accountId ? { accountId: options.accountId } : {}),\n ...(options.resourceId ? { resourceId: options.resourceId, resourceKind: options.resourceKind ?? 'Node' } : {}),\n }),\n ...insecureFetchOptions(insecure),\n })\n if (!res.ok) {\n const text = await res.text().catch(() => '')\n throw new ApiError(res.status, `Access-token exchange failed (${res.status}). ${hintFor(res.status)}${text ? `\\n${truncate(text)}` : ''}`)\n }\n const data = (await res.json()) as { access_token?: string }\n if (!data.access_token) throw new Error('Access-token response did not include access_token.')\n return data.access_token\n }\n\n async function requestRaw(method: string, path: string, options: RequestOptions = {}): Promise<Response> {\n const token = await credentialFor(options.scopes ?? [], options.tokenWorkspaceId)\n const url = new URL(`${apiUrl}${path}`)\n for (const [key, value] of Object.entries(options.query ?? {})) {\n if (value !== undefined) url.searchParams.set(key, String(value))\n }\n\n const headers: Record<string, string> = { Authorization: `Bearer ${token}` }\n let body: BodyInit | undefined\n if (options.rawBody !== undefined) {\n body = options.rawBody\n headers['Content-Type'] = options.contentType ?? 'application/octet-stream'\n } else if (options.body !== undefined) {\n body = JSON.stringify(options.body)\n headers['Content-Type'] = 'application/json'\n }\n\n for (const [key, value] of Object.entries(options.headers ?? {})) headers[key] = value\n\n const res = await fetch(url, { method, headers, body, ...insecureFetchOptions(insecure), ...(options.rawBody !== undefined ? { duplex: 'half' as const } : {}) })\n if (!res.ok) {\n const text = await res.text().catch(() => '')\n throw new ApiError(res.status, `${method} ${path} failed (${res.status}). ${hintFor(res.status)}${formatErrorBody(text)}`)\n }\n return res\n }\n\n async function request<T>(method: string, path: string, options: RequestOptions = {}): Promise<T> {\n const res = await requestRaw(method, path, options)\n if (res.status === 204) return undefined as T\n const text = await res.text()\n if (!text) return undefined as T\n try {\n return JSON.parse(text) as T\n } catch {\n return text as unknown as T\n }\n }\n\n return { apiUrl, request, requestRaw, mintAccessToken }\n}\n\nfunction hintFor(status: number): string {\n switch (status) {\n case 401:\n return 'Your credential is invalid or expired — run `verentis login` again.'\n case 403:\n return 'You lack the required scope or ownership for this operation.'\n case 404:\n return 'Not found (or not visible to you).'\n default:\n return ''\n }\n}\n\nfunction truncate(text: string, max = 400): string {\n return text.length > max ? `${text.slice(0, max)}…` : text\n}\n\n/** Render RFC 7807 ProblemDetails / validation errors compactly; fall back to raw text. */\nfunction formatErrorBody(text: string): string {\n if (!text) return ''\n try {\n const problem = JSON.parse(text) as { title?: string; detail?: string; errors?: Record<string, string[]> }\n const lines: string[] = []\n if (problem.title) lines.push(problem.title)\n if (problem.detail && problem.detail !== problem.title) lines.push(problem.detail)\n for (const [field, messages] of Object.entries(problem.errors ?? {})) {\n for (const message of messages) lines.push(` ${field}: ${message}`)\n }\n if (lines.length > 0) return `\\n${truncate(lines.join('\\n'), 800)}`\n } catch {\n // not json — fall through\n }\n return `\\n${truncate(text)}`\n}\n\nexport const SCOPES = {\n publisherRead: 'marketplace.publisher.read',\n publisherCreate: 'marketplace.publisher.create',\n publisherUpdate: 'marketplace.publisher.update',\n packageRead: 'marketplace.package.read',\n packageReadAll: 'marketplace.package.read-all',\n packageCreate: 'marketplace.package.create',\n packagePublish: 'marketplace.package.publish',\n installCreate: 'marketplace.install.create',\n installRead: 'marketplace.install.read',\n installDelete: 'marketplace.install.delete',\n} as const\n","/**\n * Scope catalog — every authorization scope the platform registers, grouped per service.\n * Source of truth: each service's `*.Application/Security/Scopes.cs` in the platform repo.\n */\n\nexport const SECURITY = {\n apiKeyCreate: 'security.api-key.create',\n apiKeyRead: 'security.api-key.read',\n apiKeyReadAll: 'security.api-key.read-all',\n apiKeyUpdate: 'security.api-key.update',\n grantsCreate: 'security.grants.create',\n grantsDelete: 'security.grants.delete',\n grantsRead: 'security.grants.read',\n grantsReadAll: 'security.grants.read-all',\n membershipCreate: 'security.membership.create',\n membershipDelete: 'security.membership.delete',\n membershipRead: 'security.membership.read',\n roleCreate: 'security.role.create',\n roleRead: 'security.role.read',\n roleReadAll: 'security.role.read-all',\n roleUpdate: 'security.role.update',\n serviceCreate: 'security.service.create',\n serviceDelete: 'security.service.delete',\n serviceRead: 'security.service.read',\n serviceReadAll: 'security.service.read-all',\n serviceUpdate: 'security.service.update',\n summaryReadAll: 'security.summary.read-all',\n userCreate: 'security.user.create',\n userRead: 'security.user.read',\n userReadAll: 'security.user.read-all',\n userUpdate: 'security.user.update',\n workspaceOauthRead: 'security.workspace-oauth.read',\n workspaceOauthUpdate: 'security.workspace-oauth.update',\n} as const\n\nexport const ACCOUNT = {\n accountCreate: 'account.account.create',\n invitationAccept: 'account.invitation.accept',\n invitationCreate: 'account.invitation.create',\n invitationDelete: 'account.invitation.delete',\n invitationRead: 'account.invitation.read',\n invitationUpdate: 'account.invitation.update',\n} as const\n\nexport const WORKSPACE = {\n create: 'account.workspace.create',\n read: 'account.workspace.read',\n readAll: 'account.workspace.read-all',\n update: 'account.workspace.update',\n urlsCreate: 'account.workspace.urls.create',\n urlsDelete: 'account.workspace.urls.delete',\n urlsRead: 'account.workspace.urls.read',\n invitationAccept: 'account.workspace.invitation.accept',\n invitationCreate: 'account.workspace.invitation.create',\n invitationDelete: 'account.workspace.invitation.delete',\n invitationRead: 'account.workspace.invitation.read',\n invitationUpdate: 'account.workspace.invitation.update',\n} as const\n\nexport const FABRIC = {\n serviceCreate: 'fabric.service.create',\n serviceDelete: 'fabric.service.delete',\n serviceRead: 'fabric.service.read',\n serviceReadAll: 'fabric.service.read-all',\n serviceShutdown: 'fabric.service.shutdown',\n} as const\n\nexport const SETTINGS = {\n delete: 'fabric.setting.delete',\n read: 'fabric.setting.read',\n readAll: 'fabric.setting.read-all',\n update: 'fabric.setting.update',\n} as const\n\nexport const NODE = {\n branchCreate: 'node.branch.create',\n branchRead: 'node.branch.read',\n branchReadAll: 'node.branch.read-all',\n branchUpdate: 'node.branch.update',\n contentCreate: 'node.content.create',\n contentRead: 'node.content.read',\n contentReadAll: 'node.content.read-all',\n contentUpdate: 'node.content.update',\n fileDelete: 'node.file.delete',\n fileRead: 'node.file.read',\n journalCreate: 'node.journal.create',\n journalRead: 'node.journal.read',\n journalReadAll: 'node.journal.read-all',\n journalUpdate: 'node.journal.update',\n nodeCreate: 'node.node.create',\n nodeReadAll: 'node.node.read-all',\n nodeUpdate: 'node.node.update',\n} as const\n\nexport const EXECUTION = {\n run: 'execution.execution.run',\n} as const\n\nexport const AI = {\n conversationConverse: 'ai.conversation.converse',\n conversationDelete: 'ai.conversation.delete',\n conversationRead: 'ai.conversation.read',\n toolExecute: 'ai.tool.execute',\n toolRead: 'ai.tool.read',\n} as const\n\nexport const RESOURCE = {\n create: 'resources.resource.create',\n delete: 'resources.resource.delete',\n read: 'resources.resource.read',\n readAll: 'resources.resource.read-all',\n update: 'resources.resource.update',\n} as const\n\nexport const MARKETPLACE = {\n billingManage: 'marketplace.billing.manage',\n entitlementCreate: 'marketplace.entitlement.create',\n entitlementRead: 'marketplace.entitlement.read',\n installCreate: 'marketplace.install.create',\n installDelete: 'marketplace.install.delete',\n installRead: 'marketplace.install.read',\n moderationReview: 'marketplace.moderation.review',\n packageCreate: 'marketplace.package.create',\n packageDelete: 'marketplace.package.delete',\n packagePublish: 'marketplace.package.publish',\n packageRead: 'marketplace.package.read',\n packageReadAll: 'marketplace.package.read-all',\n packageUpdate: 'marketplace.package.update',\n packageVisibilityManage: 'marketplace.package.visibility.manage',\n publisherCreate: 'marketplace.publisher.create',\n publisherRead: 'marketplace.publisher.read',\n publisherReadAll: 'marketplace.publisher.read-all',\n publisherUpdate: 'marketplace.publisher.update',\n reportCreate: 'marketplace.report.create',\n reportReview: 'marketplace.report.review',\n statsRead: 'marketplace.stats.read',\n trustManage: 'marketplace.trust.manage',\n} as const\n\n/** The standard VFS read/write set an engine run needs (mirrors the python engine manifest). */\nexport const ENGINE_DEFAULT_PERMISSIONS = [\n NODE.fileRead,\n NODE.contentRead,\n NODE.branchRead,\n NODE.nodeCreate,\n NODE.nodeUpdate,\n NODE.contentCreate,\n NODE.contentUpdate,\n NODE.journalCreate,\n NODE.journalUpdate,\n NODE.branchUpdate,\n NODE.fileDelete,\n EXECUTION.run,\n] as const\n","/**\n * Endpoint catalog — declarative map of the platform's gateway-exposed HTTP surface,\n * grouped per backend service. Commands consume these entries via `call()` in client.ts.\n *\n * Adding CLI coverage for a new endpoint = add one entry here + a thin command.\n * Anything not listed is still reachable with `verentis api <method> <path>`.\n */\nimport * as scopes from './scopes.js'\n\nexport interface Endpoint {\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'\n /** Path template; `{param}` segments are filled from `params`. */\n path: string\n scopes: readonly string[]\n /** Access token must be workspace-bound (calls the backend forwards to Node, or Node itself). */\n workspaceBound?: boolean\n /** Response is a PagedResult ({ totalCount, pageCount, pageSize, pageNumber, data }). */\n paged?: boolean\n}\n\nconst e = <T extends Endpoint>(endpoint: T): T => endpoint\n\n/** Verentis.Security — users, grants, API keys, workspace auth providers, tokens. */\nexport const security = {\n createAccessToken: e({ method: 'POST', path: '/v1/tokens/access', scopes: [] }),\n listUsers: e({ method: 'GET', path: '/v1/users', scopes: [scopes.SECURITY.userReadAll] }),\n getUser: e({ method: 'GET', path: '/v1/users/{userId}', scopes: [scopes.SECURITY.userRead] }),\n getUserRoles: e({ method: 'GET', path: '/v1/users/{userId}/roles', scopes: [scopes.SECURITY.userRead] }),\n getUserGrants: e({ method: 'GET', path: '/v1/users/{userId}/grants', scopes: [scopes.SECURITY.userRead] }),\n activateUser: e({ method: 'PATCH', path: '/v1/users/{userId}/activate', scopes: [scopes.SECURITY.userUpdate] }),\n suspendUser: e({ method: 'PATCH', path: '/v1/users/{userId}/suspend', scopes: [scopes.SECURITY.userUpdate] }),\n grantUserPermission: e({ method: 'POST', path: '/v1/users/{userId}/grants', scopes: [scopes.SECURITY.grantsCreate] }),\n updateUserGrant: e({ method: 'PATCH', path: '/v1/users/{userId}/grants/{grantId}', scopes: [scopes.SECURITY.grantsCreate, scopes.SECURITY.grantsDelete] }),\n createApiKey: e({ method: 'POST', path: '/v1/api-keys', scopes: [scopes.SECURITY.apiKeyCreate] }),\n listApiKeys: e({ method: 'GET', path: '/v1/api-keys', scopes: [scopes.SECURITY.apiKeyReadAll] }),\n getApiKey: e({ method: 'GET', path: '/v1/api-keys/{apiKeyId}', scopes: [scopes.SECURITY.apiKeyRead] }),\n updateApiKey: e({ method: 'PATCH', path: '/v1/api-keys/{apiKeyId}', scopes: [scopes.SECURITY.apiKeyUpdate] }),\n revokeApiKey: e({ method: 'PATCH', path: '/v1/api-keys/{apiKeyId}/revoke', scopes: [scopes.SECURITY.apiKeyUpdate] }),\n regenerateApiKey: e({ method: 'POST', path: '/v1/api-keys/{apiKeyId}/regenerate', scopes: [scopes.SECURITY.apiKeyUpdate] }),\n addApiKeyGrant: e({ method: 'POST', path: '/v1/api-keys/{apiKeyId}/grants', scopes: [scopes.SECURITY.apiKeyUpdate] }),\n removeApiKeyGrant: e({ method: 'DELETE', path: '/v1/api-keys/{apiKeyId}/grants/{permissionKey}', scopes: [scopes.SECURITY.apiKeyUpdate] }),\n grantCatalog: e({ method: 'GET', path: '/v1/grants/catalog', scopes: [scopes.SECURITY.grantsReadAll] }),\n getWorkspaceAuthProvider: e({ method: 'GET', path: '/v1/workspaces/{workspaceId}/auth-provider', scopes: [scopes.SECURITY.workspaceOauthRead] }),\n upsertWorkspaceAuthProvider: e({ method: 'PUT', path: '/v1/workspaces/{workspaceId}/auth-provider', scopes: [scopes.SECURITY.workspaceOauthUpdate] }),\n} as const\n\n/** Verentis.Account — account lifecycle + account invitations. */\nexport const account = {\n get: e({ method: 'GET', path: '/v1/accounts/{accountId}', scopes: ['account.account.read'] }),\n update: e({ method: 'PUT', path: '/v1/accounts/{accountId}', scopes: ['account.account.update'] }),\n listInvitations: e({ method: 'GET', path: '/v1/accounts/{accountId}/invitations', scopes: [scopes.ACCOUNT.invitationRead], paged: true }),\n createInvitation: e({ method: 'POST', path: '/v1/accounts/{accountId}/invitations', scopes: [scopes.ACCOUNT.invitationCreate] }),\n resendInvitation: e({ method: 'POST', path: '/v1/accounts/{accountId}/invitations/{invitationId}/resend', scopes: [scopes.ACCOUNT.invitationUpdate] }),\n revokeInvitation: e({ method: 'DELETE', path: '/v1/accounts/{accountId}/invitations/{invitationId}', scopes: [scopes.ACCOUNT.invitationDelete] }),\n getInvitationByCode: e({ method: 'GET', path: '/v1/account-invitations/{code}', scopes: [] }),\n acceptInvitation: e({ method: 'POST', path: '/v1/account-invitations/accept', scopes: [scopes.ACCOUNT.invitationAccept] }),\n} as const\n\n/** Verentis.Workspace — workspaces, domains, workspace invitations. */\nexport const workspace = {\n list: e({ method: 'GET', path: '/v1/workspaces', scopes: [scopes.WORKSPACE.readAll], paged: true }),\n get: e({ method: 'GET', path: '/v1/workspaces/{workspaceId}', scopes: [scopes.WORKSPACE.read] }),\n createMine: e({ method: 'POST', path: '/v1/workspaces', scopes: [scopes.WORKSPACE.create] }),\n update: e({ method: 'PUT', path: '/v1/workspaces/{workspaceId}', scopes: [scopes.WORKSPACE.update] }),\n listDomains: e({ method: 'GET', path: '/v1/workspaces/{workspaceId}/domains', scopes: [scopes.WORKSPACE.urlsRead] }),\n addDomain: e({ method: 'POST', path: '/v1/workspaces/{workspaceId}/domains', scopes: [scopes.WORKSPACE.urlsCreate] }),\n removeDomain: e({ method: 'DELETE', path: '/v1/workspaces/{workspaceId}/domains/{domainId}', scopes: [scopes.WORKSPACE.urlsDelete] }),\n listInvitations: e({ method: 'GET', path: '/v1/workspaces/{workspaceId}/invitations', scopes: [scopes.WORKSPACE.invitationRead], paged: true }),\n createInvitation: e({ method: 'POST', path: '/v1/workspaces/{workspaceId}/invitations', scopes: [scopes.WORKSPACE.invitationCreate] }),\n resendInvitation: e({ method: 'POST', path: '/v1/workspaces/{workspaceId}/invitations/{invitationId}/resend', scopes: [scopes.WORKSPACE.invitationUpdate] }),\n revokeInvitation: e({ method: 'DELETE', path: '/v1/workspaces/{workspaceId}/invitations/{invitationId}', scopes: [scopes.WORKSPACE.invitationDelete] }),\n getInvitationByCode: e({ method: 'GET', path: '/v1/workspace-invitations/{code}', scopes: [] }),\n acceptInvitation: e({ method: 'POST', path: '/v1/workspace-invitations/accept', scopes: [scopes.WORKSPACE.invitationAccept] }),\n} as const\n\n/** Verentis.Settings — key/value platform settings. */\nexport const settings = {\n list: e({ method: 'GET', path: '/v1/settings', scopes: [scopes.SETTINGS.readAll], paged: true }),\n get: e({ method: 'GET', path: '/v1/settings/{key}', scopes: [scopes.SETTINGS.read] }),\n upsert: e({ method: 'PUT', path: '/v1/settings/{key}', scopes: [scopes.SETTINGS.update] }),\n delete: e({ method: 'DELETE', path: '/v1/settings/{key}', scopes: [scopes.SETTINGS.delete] }),\n} as const\n\n/** Verentis.Node — the workspace virtual file system. All calls are workspace-bound. */\nexport const files = {\n get: e({ method: 'GET', path: '/v1/files/{path}', scopes: [scopes.NODE.fileRead], workspaceBound: true }),\n raw: e({ method: 'GET', path: '/v1/files/raw/{path}', scopes: [scopes.NODE.fileRead], workspaceBound: true }),\n package: e({ method: 'GET', path: '/v1/files/package/{path}', scopes: [scopes.NODE.fileRead], workspaceBound: true }),\n upload: e({\n method: 'POST',\n path: '/v1/files/{path}',\n scopes: [scopes.NODE.nodeCreate, scopes.NODE.fileRead, scopes.NODE.nodeUpdate, scopes.NODE.journalCreate],\n workspaceBound: true,\n }),\n update: e({ method: 'PUT', path: '/v1/files/{path}', scopes: [scopes.NODE.nodeUpdate, scopes.NODE.fileRead, scopes.NODE.journalCreate], workspaceBound: true }),\n delete: e({ method: 'DELETE', path: '/v1/files/{path}', scopes: [scopes.NODE.fileDelete], workspaceBound: true }),\n} as const\n\n/** Verentis.Execution — executions, logs, engines. */\nexport const execution = {\n request: e({ method: 'POST', path: '/v1/executions', scopes: [scopes.EXECUTION.run, ...scopes.ENGINE_DEFAULT_PERMISSIONS], workspaceBound: true }),\n list: e({ method: 'GET', path: '/v1/executions', scopes: [scopes.EXECUTION.run], workspaceBound: true, paged: true }),\n get: e({ method: 'GET', path: '/v1/executions/{id}', scopes: [scopes.EXECUTION.run], workspaceBound: true }),\n cancel: e({ method: 'POST', path: '/v1/executions/{id}/cancel', scopes: [scopes.EXECUTION.run], workspaceBound: true }),\n logs: e({ method: 'GET', path: '/v1/executions/{id}/logs', scopes: [scopes.EXECUTION.run], workspaceBound: true }),\n logsStream: e({ method: 'GET', path: '/v1/executions/{id}/logs/stream', scopes: [scopes.EXECUTION.run], workspaceBound: true }),\n listEngines: e({ method: 'GET', path: '/v1/engines', scopes: [scopes.EXECUTION.run], paged: true }),\n getEngine: e({ method: 'GET', path: '/v1/engines/{id}', scopes: [scopes.EXECUTION.run] }),\n resolveEngine: e({ method: 'GET', path: '/v1/engines/resolve', scopes: [scopes.EXECUTION.run] }),\n syncEngines: e({ method: 'POST', path: '/v1/engines/sync', scopes: [scopes.EXECUTION.run], workspaceBound: true }),\n} as const\n\n/** Verentis.Marketplace — publishers, packages, versions, installations. */\nexport const marketplace = {\n searchPublishers: e({ method: 'GET', path: '/v1/publishers', scopes: [scopes.MARKETPLACE.publisherReadAll], paged: true }),\n getPublisher: e({ method: 'GET', path: '/v1/publishers/{id}', scopes: [scopes.MARKETPLACE.publisherRead] }),\n getPublisherByName: e({ method: 'GET', path: '/v1/publishers/by-name/{name}', scopes: [scopes.MARKETPLACE.publisherRead] }),\n getMyPublisher: e({ method: 'GET', path: '/v1/publishers/me', scopes: [scopes.MARKETPLACE.publisherRead] }),\n createPublisher: e({ method: 'POST', path: '/v1/publishers', scopes: [scopes.MARKETPLACE.publisherCreate] }),\n updatePublisher: e({ method: 'PUT', path: '/v1/publishers/{id}', scopes: [scopes.MARKETPLACE.publisherUpdate] }),\n setPublisherLogo: e({ method: 'PUT', path: '/v1/publishers/{id}/logo', scopes: [scopes.MARKETPLACE.publisherUpdate] }),\n removePublisherLogo: e({ method: 'DELETE', path: '/v1/publishers/{id}/logo', scopes: [scopes.MARKETPLACE.publisherUpdate] }),\n registerSigningKey: e({ method: 'POST', path: '/v1/publishers/{publisherId}/keys', scopes: [scopes.MARKETPLACE.publisherUpdate] }),\n revokeSigningKey: e({ method: 'DELETE', path: '/v1/publishers/{publisherId}/keys/{kid}', scopes: [scopes.MARKETPLACE.publisherUpdate] }),\n searchPackages: e({ method: 'GET', path: '/v1/packages', scopes: [scopes.MARKETPLACE.packageReadAll], paged: true }),\n getPackageCategories: e({ method: 'GET', path: '/v1/packages/categories', scopes: [scopes.MARKETPLACE.packageReadAll] }),\n getPackage: e({ method: 'GET', path: '/v1/packages/{id}', scopes: [scopes.MARKETPLACE.packageRead] }),\n createPackage: e({ method: 'POST', path: '/v1/packages', scopes: [scopes.MARKETPLACE.packageCreate] }),\n updatePackage: e({ method: 'PUT', path: '/v1/packages/{id}', scopes: [scopes.MARKETPLACE.packageUpdate] }),\n archivePackage: e({ method: 'DELETE', path: '/v1/packages/{id}', scopes: [scopes.MARKETPLACE.packageDelete] }),\n deprecatePackage: e({ method: 'POST', path: '/v1/packages/{id}/deprecate', scopes: [scopes.MARKETPLACE.packageUpdate] }),\n undeprecatePackage: e({ method: 'DELETE', path: '/v1/packages/{id}/deprecate', scopes: [scopes.MARKETPLACE.packageUpdate] }),\n setPackageVisibility: e({ method: 'PUT', path: '/v1/packages/{id}/visibility', scopes: [scopes.MARKETPLACE.packageVisibilityManage] }),\n listPublisherPackages: e({ method: 'GET', path: '/v1/publishers/{publisherId}/packages', scopes: [scopes.MARKETPLACE.packageRead], paged: true }),\n listVersions: e({ method: 'GET', path: '/v1/packages/{packageId}/versions', scopes: [scopes.MARKETPLACE.packageRead], paged: true }),\n uploadVersion: e({ method: 'POST', path: '/v1/packages/{packageId}/versions', scopes: [scopes.MARKETPLACE.packagePublish] }),\n getVersion: e({ method: 'GET', path: '/v1/packages/{packageId}/versions/{version}', scopes: [scopes.MARKETPLACE.packageRead] }),\n downloadTarball: e({ method: 'GET', path: '/v1/packages/{packageId}/versions/{version}/tarball', scopes: [scopes.MARKETPLACE.packageRead] }),\n yankVersion: e({ method: 'POST', path: '/v1/packages/{packageId}/versions/{version}/yank', scopes: [scopes.MARKETPLACE.packagePublish] }),\n listVisibilityGrants: e({ method: 'GET', path: '/v1/packages/{packageId}/visibility-grants', scopes: [scopes.MARKETPLACE.packageVisibilityManage] }),\n grantVisibility: e({ method: 'POST', path: '/v1/packages/{packageId}/visibility-grants', scopes: [scopes.MARKETPLACE.packageVisibilityManage] }),\n revokeVisibility: e({ method: 'DELETE', path: '/v1/packages/{packageId}/visibility-grants/{grantId}', scopes: [scopes.MARKETPLACE.packageVisibilityManage] }),\n getPackageStats: e({ method: 'GET', path: '/v1/packages/{packageId}/stats', scopes: [scopes.MARKETPLACE.statsRead] }),\n listInstallations: e({ method: 'GET', path: '/v1/installations', scopes: [scopes.MARKETPLACE.installRead], paged: true }),\n install: e({ method: 'POST', path: '/v1/installations', scopes: [scopes.MARKETPLACE.installCreate], workspaceBound: true }),\n uninstall: e({ method: 'DELETE', path: '/v1/installations/{id}', scopes: [scopes.MARKETPLACE.installDelete], workspaceBound: true }),\n} as const\n\n/** Verentis.Resource — resource registrations (apps/engines visible to a workspace). */\nexport const resource = {\n list: e({ method: 'GET', path: '/v1/resources', scopes: [scopes.RESOURCE.readAll], workspaceBound: true, paged: true }),\n get: e({ method: 'GET', path: '/v1/resources/{id}', scopes: [scopes.RESOURCE.read], workspaceBound: true }),\n resolve: e({ method: 'GET', path: '/v1/resources/resolve', scopes: [scopes.RESOURCE.readAll], workspaceBound: true }),\n resolveFileType: e({ method: 'GET', path: '/v1/resources/file-types/resolve', scopes: [scopes.RESOURCE.readAll], workspaceBound: true }),\n} as const\n","/** Thin typed wrapper that executes catalog endpoints against the ApiClient. */\nimport type { ApiClient, RequestOptions } from '../http.js'\nimport type { Endpoint } from './catalog.js'\n\nexport interface CallOptions {\n /** Values for `{param}` placeholders in the endpoint path. */\n params?: Record<string, string | number>\n query?: Record<string, string | number | boolean | undefined>\n body?: unknown\n /** Workspace to bind the access token to (required when endpoint.workspaceBound). */\n workspaceId?: string\n /** Extra scopes on top of the endpoint's declared ones. */\n extraScopes?: string[]\n rawBody?: BodyInit\n contentType?: string\n}\n\nexport function fillPath(template: string, params: Record<string, string | number> = {}): string {\n return template.replace(/\\{(\\w+)\\}/g, (_, name: string) => {\n const value = params[name]\n if (value === undefined) throw new Error(`Missing path parameter '${name}' for ${template}`)\n // File-system-like path params may contain slashes which must survive.\n return String(value)\n .split('/')\n .map((segment) => encodeURIComponent(segment))\n .join('/')\n })\n}\n\nfunction toRequestOptions(endpoint: Endpoint, options: CallOptions): RequestOptions {\n if (endpoint.workspaceBound && !options.workspaceId) {\n throw new Error('This operation requires a workspace. Pass --workspace <id> or set one with `verentis use workspace <id>`.')\n }\n return {\n scopes: [...new Set([...endpoint.scopes, ...(options.extraScopes ?? [])])],\n tokenWorkspaceId: endpoint.workspaceBound ? options.workspaceId : undefined,\n query: options.query,\n body: options.body,\n rawBody: options.rawBody,\n contentType: options.contentType,\n }\n}\n\n/** Unwraps the platform's `JsonResponse<T>` (`{ value: T }`) envelope when present. */\nfunction unwrap<T>(payload: unknown): T {\n if (payload !== null && typeof payload === 'object' && !Array.isArray(payload)) {\n const keys = Object.keys(payload as Record<string, unknown>)\n if (keys.length === 1 && keys[0] === 'value') return (payload as { value: T }).value\n }\n return payload as T\n}\n\nexport async function call<T>(api: ApiClient, endpoint: Endpoint, options: CallOptions = {}): Promise<T> {\n const result = await api.request<unknown>(endpoint.method, fillPath(endpoint.path, options.params), toRequestOptions(endpoint, options))\n return unwrap<T>(result)\n}\n\nexport async function callRaw(api: ApiClient, endpoint: Endpoint, options: CallOptions = {}): Promise<Response> {\n return api.requestRaw(endpoint.method, fillPath(endpoint.path, options.params), toRequestOptions(endpoint, options))\n}\n\nexport interface PagedResult<T> {\n totalCount?: number\n pageCount?: number\n pageSize?: number\n pageNumber?: number\n data?: T[]\n /** Some services expose `items` instead of `data`. */\n items?: T[]\n}\n\nexport const pageItems = <T>(page: PagedResult<T> | T[] | null | undefined): T[] => {\n if (!page) return []\n if (Array.isArray(page)) return page\n return page.data ?? page.items ?? []\n}\n\nexport interface PagingFlags {\n page?: string\n pageSize?: string\n orderBy?: string\n all?: boolean\n}\n\nexport function pagingQuery(flags: PagingFlags): Record<string, string | number | undefined> {\n return {\n PageNo: flags.page ? Number(flags.page) : 1,\n PageSize: flags.pageSize ? Number(flags.pageSize) : 50,\n OrderBy: flags.orderBy,\n }\n}\n\n/** Fetch every page of a paged endpoint (used by --all). */\nexport async function callAllPages<T>(api: ApiClient, endpoint: Endpoint, options: CallOptions = {}): Promise<T[]> {\n const items: T[] = []\n let pageNo = 1\n for (;;) {\n const page = await call<PagedResult<T>>(api, endpoint, {\n ...options,\n query: { ...options.query, PageNo: pageNo, PageSize: 100 },\n })\n const batch = pageItems(page)\n items.push(...batch)\n const pageCount = Array.isArray(page) ? 1 : (page.pageCount ?? 1)\n if (batch.length === 0 || pageNo >= pageCount) return items\n pageNo += 1\n }\n}\n","/** Resolution of the active workspace/account context: flag → env → config → token claim. */\nimport { loadConfig } from './config.js'\nimport { decodeJwtPayload } from './jwt.js'\n\nexport interface ContextFlags {\n workspace?: string\n account?: string\n}\n\nexport async function resolveWorkspaceId(flags: ContextFlags, required = true): Promise<string | undefined> {\n const config = await loadConfig()\n const workspaceId = flags.workspace ?? process.env.VERENTIS_WORKSPACE_ID ?? config.defaultWorkspaceId\n if (!workspaceId && required) {\n throw new Error('No workspace selected. Pass --workspace <id> or set a default with `verentis use workspace <id>`.')\n }\n return workspaceId\n}\n\nexport async function resolveAccountId(flags: ContextFlags, required = true): Promise<string | undefined> {\n const config = await loadConfig()\n let accountId = flags.account ?? process.env.VERENTIS_ACCOUNT_ID ?? config.defaultAccountId\n if (!accountId) {\n const identityToken = process.env.VERENTIS_TOKEN ?? config.identityToken\n if (identityToken) accountId = decodeJwtPayload(identityToken)?.account_id as string | undefined\n }\n if (!accountId && required) {\n throw new Error('No account selected. Pass --account <id> or set a default with `verentis use account <id>`.')\n }\n return accountId\n}\n\n/** Standard scope query params for Security management endpoints (users, api-keys, grants). */\nexport async function managementScope(flags: ContextFlags & { node?: string }): Promise<Record<string, string>> {\n const accountId = (await resolveAccountId(flags))!\n const workspaceId = await resolveWorkspaceId(flags, false)\n if (flags.node && !workspaceId) throw new Error('--node requires --workspace.')\n const scopeKind = flags.node ? 'Node' : workspaceId ? 'Workspace' : 'Account'\n const scopeId = flags.node ?? workspaceId ?? accountId\n return {\n scopeKind,\n scopeId,\n accountId,\n ...(workspaceId ? { workspaceId } : {}),\n ...(flags.node ? { nodeId: flags.node } : {}),\n }\n}\n","/** Shared output helpers: human tables by default, `--json` for scripting. */\n\nexport interface OutputOptions {\n json?: boolean\n}\n\nexport function printJson(value: unknown): void {\n console.log(JSON.stringify(value, null, 2))\n}\n\n/** Render rows as an aligned column table. Columns are picked from `columns` (key → header). */\nexport function printTable<T extends Record<string, unknown>>(rows: T[], columns: Record<string, string>): void {\n if (rows.length === 0) {\n console.log('(none)')\n return\n }\n const keys = Object.keys(columns)\n const cells = rows.map((row) => keys.map((key) => formatCell(row[key])))\n const headers = keys.map((key) => columns[key])\n const widths = headers.map((header, i) => Math.max(header.length, ...cells.map((row) => row[i].length)))\n const line = (parts: string[]) => parts.map((part, i) => part.padEnd(widths[i])).join(' ').trimEnd()\n console.log(line(headers))\n console.log(line(widths.map((w) => '-'.repeat(w))))\n for (const row of cells) console.log(line(row))\n}\n\nfunction formatCell(value: unknown): string {\n if (value === null || value === undefined) return ''\n if (value instanceof Date) return value.toISOString()\n if (typeof value === 'object') return JSON.stringify(value)\n return String(value)\n}\n\n/** Print either JSON (with --json) or a table of the given rows. */\nexport function output<T extends Record<string, unknown>>(rows: T[], columns: Record<string, string>, options: OutputOptions, jsonValue?: unknown): void {\n if (options.json) {\n printJson(jsonValue ?? rows)\n return\n }\n printTable(rows, columns)\n}\n\n/** Print a single record as `key: value` lines, or JSON with --json. */\nexport function outputRecord(record: Record<string, unknown>, options: OutputOptions): void {\n if (options.json) {\n printJson(record)\n return\n }\n const width = Math.max(...Object.keys(record).map((k) => k.length))\n for (const [key, value] of Object.entries(record)) {\n console.log(`${key.padEnd(width)} ${formatCell(value)}`)\n }\n}\n","import { Command } from 'commander'\nimport { createApiClient } from '../http.js'\nimport { account } from '../api/catalog.js'\nimport { call, pageItems, type PagedResult } from '../api/client.js'\nimport { resolveAccountId } from '../context.js'\nimport { output, outputRecord } from '../output.js'\n\ninterface InvitationDto {\n id: string\n emailAddress: string\n roleKey: string\n status: string\n expiresAt?: string\n [key: string]: unknown\n}\n\nexport function registerAccount(program: Command): void {\n const accountCmd = program.command('account').description('Manage Verentis accounts')\n\n accountCmd\n .command('get')\n .description('Show account details')\n .option('--account <accountId>', 'account id (default: configured/derived account)')\n .option('--json', 'output JSON')\n .action(async (options: { account?: string; json?: boolean }) => {\n const accountId = (await resolveAccountId(options))!\n const api = await createApiClient()\n const result = await call<Record<string, unknown>>(api, account.get, { params: { accountId } })\n outputRecord(result, options)\n })\n\n accountCmd\n .command('update')\n .description('Update account details')\n .requiredOption('--name <name>', 'account name')\n .option('--description <description>')\n .option('--account <accountId>', 'account id')\n .action(async (options: { name: string; description?: string; account?: string }) => {\n const accountId = (await resolveAccountId(options))!\n const api = await createApiClient()\n await call(api, account.update, {\n params: { accountId },\n body: { accountId, name: options.name, description: options.description ?? null },\n })\n console.log(`Account ${accountId} updated.`)\n })\n\n const inviteCmd = accountCmd.command('invite').description('Manage account invitations')\n\n inviteCmd\n .command('list')\n .description('List invitations for the account')\n .option('--account <accountId>', 'account id')\n .option('--json', 'output JSON')\n .action(async (options: { account?: string; json?: boolean }) => {\n const accountId = (await resolveAccountId(options))!\n const api = await createApiClient()\n const page = await call<PagedResult<InvitationDto>>(api, account.listInvitations, { params: { accountId } })\n const items = pageItems(page)\n output(items, { emailAddress: 'Email', roleKey: 'Role', status: 'Status', id: 'Id' }, options, page)\n })\n\n inviteCmd\n .command('create <email>')\n .description('Invite a user to the account')\n .option('--role <roleKey>', 'role to assign on acceptance', 'member')\n .option('--account <accountId>', 'account id')\n .action(async (email: string, options: { role: string; account?: string }) => {\n const accountId = (await resolveAccountId(options))!\n const api = await createApiClient()\n const id = await call<string>(api, account.createInvitation, {\n params: { accountId },\n body: { accountId, emailAddress: email, roleKey: options.role },\n })\n console.log(`Invitation ${id ?? ''} sent to ${email} (role ${options.role}).`.replace(' ', ' '))\n })\n\n inviteCmd\n .command('resend <invitationId>')\n .description('Resend an invitation email')\n .option('--account <accountId>', 'account id')\n .action(async (invitationId: string, options: { account?: string }) => {\n const accountId = (await resolveAccountId(options))!\n const api = await createApiClient()\n await call(api, account.resendInvitation, { params: { accountId, invitationId }, body: { accountId, invitationId } })\n console.log(`Invitation ${invitationId} resent.`)\n })\n\n inviteCmd\n .command('revoke <invitationId>')\n .description('Revoke an invitation')\n .option('--account <accountId>', 'account id')\n .action(async (invitationId: string, options: { account?: string }) => {\n const accountId = (await resolveAccountId(options))!\n const api = await createApiClient()\n await call(api, account.revokeInvitation, { params: { accountId, invitationId } })\n console.log(`Invitation ${invitationId} revoked.`)\n })\n\n inviteCmd\n .command('accept <code>')\n .description('Accept an account invitation code as the current user')\n .action(async (code: string) => {\n const api = await createApiClient()\n await call(api, account.acceptInvitation, { body: { code } })\n console.log('Invitation accepted.')\n })\n}\n","import { readFile } from 'node:fs/promises'\nimport { Command } from 'commander'\nimport { createApiClient } from '../http.js'\nimport { printJson } from '../output.js'\n\n/**\n * `verentis api` — authenticated escape hatch for any gateway endpoint (like `gh api`).\n * Gives full API parity for operations without a dedicated command yet.\n */\nexport function registerApi(program: Command): void {\n program\n .command('api <method> <path>')\n .description('Call any platform API endpoint with automatic authentication (e.g. `verentis api GET /v1/workspaces`)')\n .option('--scope <scope...>', 'scopes to request on the access token (repeatable)')\n .option('--workspace <workspaceId>', 'bind the access token to a workspace')\n .option('--body <json>', 'JSON request body (use @file.json to read from a file, or - for stdin)')\n .option('--query <key=value...>', 'query string parameters (repeatable)')\n .option('--content-type <type>', 'content type for --body when not JSON')\n .option('--raw', 'print the raw response body without JSON pretty-printing')\n .action(async (method: string, path: string, options: { scope?: string[]; workspace?: string; body?: string; query?: string[]; contentType?: string; raw?: boolean }) => {\n const api = await createApiClient()\n const query: Record<string, string> = {}\n for (const pair of options.query ?? []) {\n const idx = pair.indexOf('=')\n if (idx < 0) throw new Error(`Invalid --query '${pair}' (expected key=value).`)\n query[pair.slice(0, idx)] = pair.slice(idx + 1)\n }\n\n let body: unknown\n let rawBody: BodyInit | undefined\n if (options.body !== undefined) {\n let text = options.body\n if (text === '-') text = await readStdin()\n else if (text.startsWith('@')) text = await readFile(text.slice(1), 'utf8')\n if (options.contentType && !options.contentType.includes('json')) rawBody = text\n else body = JSON.parse(text)\n }\n\n const res = await api.requestRaw(method.toUpperCase(), path, {\n scopes: options.scope ?? [],\n tokenWorkspaceId: options.workspace,\n body,\n rawBody,\n contentType: options.contentType,\n query,\n })\n\n const text = await res.text()\n if (!text) {\n console.error(`${res.status} ${res.statusText}`)\n return\n }\n if (options.raw) {\n process.stdout.write(text)\n return\n }\n try {\n printJson(JSON.parse(text))\n } catch {\n process.stdout.write(text)\n }\n })\n}\n\nasync function readStdin(): Promise<string> {\n const chunks: Buffer[] = []\n for await (const chunk of process.stdin) chunks.push(chunk as Buffer)\n return Buffer.concat(chunks).toString('utf8')\n}\n","import { Command } from 'commander'\nimport { createApiClient } from '../http.js'\nimport { security } from '../api/catalog.js'\nimport { call } from '../api/client.js'\nimport { managementScope } from '../context.js'\nimport { loadConfig } from '../config.js'\nimport { decodeJwtPayload } from '../jwt.js'\nimport { output, outputRecord } from '../output.js'\n\ninterface ScopeFlags {\n account?: string\n workspace?: string\n node?: string\n json?: boolean\n}\n\ninterface CreateApiKeyResult {\n id: string\n rawKeyValue: string\n keyPrefix: string\n}\n\n/** The current user's id (sub) from the stored identity token — default API-key principal. */\nasync function currentUserId(): Promise<string | undefined> {\n const config = await loadConfig()\n const token = process.env.VERENTIS_TOKEN ?? config.identityToken\n return token ? (decodeJwtPayload(token)?.sub as string | undefined) : undefined\n}\n\nexport function registerApiKey(program: Command): void {\n const keyCmd = program.command('apikey').description('Manage Verentis API keys (vrt_...)')\n\n keyCmd\n .command('create <name>')\n .description('Create an API key in the selected scope (prints the key once — store it safely)')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>', 'create a workspace-scoped key')\n .option('--node <nodeId>', 'confine the key to a node subtree (requires --workspace)')\n .option('--principal <principalId>', 'principal the key acts as (default: you)')\n .option('--principal-type <type>', 'User | Role | Service', 'User')\n .option('--expires <iso8601>', 'expiry timestamp')\n .option('--grant <scope...>', 'permission scopes to grant the key (repeatable)')\n .option('--json', 'output JSON')\n .action(async (name: string, options: ScopeFlags & { principal?: string; principalType: string; expires?: string; grant?: string[] }) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n const principalId = options.principal ?? (await currentUserId())\n if (!principalId) throw new Error('Cannot determine the key principal. Pass --principal <userId> (API-key logins have no user context).')\n\n const result = await call<CreateApiKeyResult>(api, security.createApiKey, {\n body: {\n ...scope,\n name,\n principalType: options.principalType,\n principalId,\n expiresAt: options.expires ?? null,\n },\n })\n\n for (const grantScope of options.grant ?? []) {\n await call(api, security.addApiKeyGrant, {\n params: { apiKeyId: result.id },\n body: { ...scope, apiKeyId: result.id, permissionKey: grantScope, effect: 'Allow' },\n })\n }\n\n if (options.json) {\n outputRecord(result as unknown as Record<string, unknown>, options)\n return\n }\n console.log(`API key '${name}' created (${result.id}).`)\n console.log(`\\n ${result.rawKeyValue}\\n`)\n console.log('This value is shown ONCE. Store it safely (e.g. `verentis login --api-key ...` on the target machine).')\n if (options.grant?.length) console.log(`Granted: ${options.grant.join(', ')}`)\n })\n\n keyCmd\n .command('list')\n .description('List API keys in the selected scope')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .option('--search <text>')\n .option('--revoked', 'include only revoked keys')\n .option('--json', 'output JSON')\n .action(async (options: ScopeFlags & { search?: string; revoked?: boolean }) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n const result = await call<Record<string, unknown>[]>(api, security.listApiKeys, {\n query: { ...scope, search: options.search, isRevoked: options.revoked },\n })\n output(result ?? [], { name: 'Name', keyPrefix: 'Prefix', isRevoked: 'Revoked', expiresAt: 'Expires', id: 'Id' }, options, result)\n })\n\n keyCmd\n .command('get <apiKeyId>')\n .description('Show API key details (metadata only — the secret is never retrievable)')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .option('--json', 'output JSON')\n .action(async (apiKeyId: string, options: ScopeFlags) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n const result = await call<Record<string, unknown>>(api, security.getApiKey, { params: { apiKeyId }, query: scope })\n outputRecord(result, options)\n })\n\n keyCmd\n .command('update <apiKeyId>')\n .description('Update API key metadata')\n .requiredOption('--name <name>', 'new key name')\n .option('--expires <iso8601>', 'new expiry timestamp')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .action(async (apiKeyId: string, options: ScopeFlags & { name: string; expires?: string }) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n await call(api, security.updateApiKey, {\n params: { apiKeyId },\n body: { ...scope, apiKeyId, name: options.name, expiresAt: options.expires ?? null },\n })\n console.log(`API key ${apiKeyId} updated.`)\n })\n\n keyCmd\n .command('revoke <apiKeyId>')\n .description('Revoke an API key permanently')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .action(async (apiKeyId: string, options: ScopeFlags) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n await call(api, security.revokeApiKey, { params: { apiKeyId }, body: { ...scope, apiKeyId } })\n console.log(`API key ${apiKeyId} revoked.`)\n })\n\n keyCmd\n .command('regenerate <apiKeyId>')\n .description('Regenerate the secret for an API key (prints the new value once)')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .option('--json', 'output JSON')\n .action(async (apiKeyId: string, options: ScopeFlags) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n const result = await call<CreateApiKeyResult>(api, security.regenerateApiKey, { params: { apiKeyId }, body: { ...scope, apiKeyId } })\n if (options.json) {\n outputRecord(result as unknown as Record<string, unknown>, options)\n return\n }\n console.log(`API key ${apiKeyId} regenerated:`)\n console.log(`\\n ${result.rawKeyValue}\\n`)\n console.log('This value is shown ONCE. The previous secret no longer works.')\n })\n\n const grantCmd = keyCmd.command('grant').description('Manage permission grants on an API key')\n\n grantCmd\n .command('add <apiKeyId> <scope>')\n .description('Grant a permission scope to an API key (e.g. node.file.read)')\n .option('--deny', 'add as a Deny grant instead of Allow')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .action(async (apiKeyId: string, scopeName: string, options: ScopeFlags & { deny?: boolean }) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n await call(api, security.addApiKeyGrant, {\n params: { apiKeyId },\n body: { ...scope, apiKeyId, permissionKey: scopeName, effect: options.deny ? 'Deny' : 'Allow' },\n })\n console.log(`Granted ${scopeName} to API key ${apiKeyId}${options.deny ? ' (Deny)' : ''}.`)\n })\n\n grantCmd\n .command('remove <apiKeyId> <scope>')\n .description('Remove a permission grant from an API key')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .action(async (apiKeyId: string, scopeName: string, options: ScopeFlags) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n await call(api, security.removeApiKeyGrant, { params: { apiKeyId, permissionKey: scopeName }, query: scope })\n console.log(`Removed ${scopeName} from API key ${apiKeyId}.`)\n })\n}\n","/**\n * Local execution-context builder — produces the exact `context.json` + `VERENTIS_*` env the\n * platform injects into engine containers (contract: Verentis.Execution ExecutionProtocol /\n * ExecutionContext, protocol version 1). The engine SDK auto-loads either form.\n */\nimport { randomUUID } from 'node:crypto'\nimport { decodeJwtPayload } from '../jwt.js'\n\nexport interface LocalContextInput {\n apiUrl: string\n accessToken: string\n scopes: string[]\n workspaceId: string\n workspaceName?: string\n filePath?: string\n fileMimeType?: string\n branch?: string\n tool?: string\n mode?: string\n timeoutSeconds?: number\n args?: string[]\n env?: Record<string, string>\n parameters?: Record<string, unknown>\n executionId?: string\n}\n\nexport interface LocalExecutionContext {\n version: 1\n execution: { id: string; mode: string; tool?: string; trigger: string; timeout: number }\n workspace: { id: string; name?: string }\n file?: { path: string; name: string; mimeType?: string; branch: string }\n input: { arguments: string[]; environment: Record<string, string>; parameters?: Record<string, unknown> }\n platform: { apiUrl: string; token: { accessToken: string; expiresAt?: string; scopes: string[] } }\n}\n\nexport function buildLocalContext(input: LocalContextInput): LocalExecutionContext {\n const payload = decodeJwtPayload(input.accessToken)\n const expiresAt = payload?.exp ? new Date(payload.exp * 1000).toISOString() : undefined\n const filePath = input.filePath ? (input.filePath.startsWith('/') ? input.filePath : `/${input.filePath}`) : undefined\n\n return {\n version: 1,\n execution: {\n id: input.executionId ?? `local-${randomUUID()}`,\n mode: input.mode ?? 'request-response',\n ...(input.tool ? { tool: input.tool } : {}),\n trigger: 'user',\n timeout: input.timeoutSeconds ?? 300,\n },\n workspace: { id: input.workspaceId, ...(input.workspaceName ? { name: input.workspaceName } : {}) },\n ...(filePath\n ? {\n file: {\n path: filePath,\n name: filePath.split('/').pop() ?? filePath,\n ...(input.fileMimeType ? { mimeType: input.fileMimeType } : {}),\n branch: input.branch ?? 'main',\n },\n }\n : {}),\n input: {\n arguments: input.args ?? [],\n environment: input.env ?? {},\n ...(input.parameters ? { parameters: input.parameters } : {}),\n },\n platform: {\n apiUrl: input.apiUrl,\n token: { accessToken: input.accessToken, ...(expiresAt ? { expiresAt } : {}), scopes: input.scopes },\n },\n }\n}\n\n/** The env-var mirror of the context (ExecutionProtocol.EnvVars). */\nexport function contextEnv(context: LocalExecutionContext, contextPath: string): Record<string, string> {\n return {\n VERENTIS_CONTEXT_PATH: contextPath,\n VERENTIS_EXECUTION_ID: context.execution.id,\n VERENTIS_EXECUTION_MODE: context.execution.mode,\n ...(context.execution.tool ? { VERENTIS_EXECUTION_TOOL: context.execution.tool } : {}),\n VERENTIS_API_URL: context.platform.apiUrl,\n VERENTIS_ACCESS_TOKEN: context.platform.token.accessToken,\n VERENTIS_WORKSPACE_ID: context.workspace.id,\n ...(context.file\n ? {\n VERENTIS_FILE_PATH: context.file.path,\n ...(context.file.mimeType ? { VERENTIS_FILE_MIME_TYPE: context.file.mimeType } : {}),\n VERENTIS_FILE_BRANCH: context.file.branch,\n }\n : {}),\n VERENTIS_TIMEOUT: String(context.execution.timeout),\n }\n}\n","import { readFile, readdir, stat } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { parse } from 'yaml'\n\nexport type PackageKind = 'Application' | 'ExecutionEngine' | 'Bundle'\n\nexport interface ManifestMetadata {\n name: string\n 'display-name'?: string\n version: string\n description?: string\n icon?: string\n author?: string\n}\n\nexport interface PackagingSection {\n publisher?: string\n name?: string\n files?: string[]\n exclude?: string[]\n encryption?: 'none' | 'optional' | 'required'\n bundle?: { 'default-path'?: string }\n}\n\nexport interface MarketplaceImage {\n source: string\n alt: string\n caption?: string\n}\n\nexport interface MarketplaceHero {\n source: string\n alt: string\n}\n\nexport interface MarketplaceSection {\n logo?: string\n hero?: MarketplaceHero\n images?: MarketplaceImage[]\n readme?: string\n changelog?: string\n assets?: string[]\n}\n\nexport interface Manifest {\n 'api-version'?: string\n kind: string\n metadata: ManifestMetadata\n spec?: Record<string, unknown>\n marketplace?: MarketplaceSection\n packaging?: PackagingSection\n [key: string]: unknown\n}\n\nconst KIND_MAP: Record<string, PackageKind> = {\n application: 'Application',\n executionengine: 'ExecutionEngine',\n bundle: 'Bundle',\n}\n\nexport function normalizeKind(kind: string): PackageKind {\n const mapped = KIND_MAP[kind.replace(/[^a-z]/gi, '').toLowerCase()]\n if (!mapped) throw new Error(`Unsupported manifest kind '${kind}' — expected Application, ExecutionEngine or Bundle.`)\n return mapped\n}\n\nexport function validateLaunchManifestKind(kind: string | undefined, spec: unknown): string | undefined {\n if (kind === 'Application' || !spec || typeof spec !== 'object' || Array.isArray(spec)) return undefined\n if (!Object.prototype.hasOwnProperty.call(spec, 'launch')) return undefined\n return 'spec.launch is only supported for Application manifests'\n}\n\nexport async function loadManifest(path: string): Promise<Manifest> {\n const text = await readFile(path, 'utf8')\n const manifest = parse(text) as Manifest\n if (!manifest || typeof manifest !== 'object') throw new Error(`Failed to parse manifest at ${path}.`)\n if (!manifest.kind) throw new Error(`Manifest at ${path} is missing 'kind'.`)\n if (!manifest.metadata?.name) throw new Error(`Manifest at ${path} is missing 'metadata.name'.`)\n if (!manifest.metadata?.version) throw new Error(`Manifest at ${path} is missing 'metadata.version'.`)\n const kind = normalizeKind(manifest.kind)\n const launchKindError = validateLaunchManifestKind(kind, manifest.spec)\n if (launchKindError) throw new Error(`Invalid manifest at ${path}: ${launchKindError}.`)\n const marketplaceErrors = validateMarketplaceSection(manifest.marketplace)\n if (marketplaceErrors.length > 0) {\n throw new Error(`Invalid marketplace section in ${path}: ${marketplaceErrors.join(' ')}`)\n }\n return manifest\n}\n\nexport function validateMarketplaceSection(marketplace: unknown): string[] {\n if (marketplace === undefined) return []\n if (!marketplace || typeof marketplace !== 'object' || Array.isArray(marketplace)) {\n return ['marketplace must be an object.']\n }\n\n const section = marketplace as Record<string, unknown>\n const errors: string[] = []\n for (const field of ['logo', 'readme', 'changelog'] as const) {\n const value = section[field]\n if (value !== undefined && (typeof value !== 'string' || value.trim().length === 0)) {\n errors.push(`marketplace.${field} must be a non-empty relative path.`)\n }\n }\n\n if (section.hero !== undefined) {\n if (!section.hero || typeof section.hero !== 'object' || Array.isArray(section.hero)) {\n errors.push('marketplace.hero must be an object.')\n } else {\n const hero = section.hero as Record<string, unknown>\n if (typeof hero.source !== 'string' || hero.source.trim().length === 0) {\n errors.push('marketplace.hero.source must be a non-empty relative path.')\n }\n if (typeof hero.alt !== 'string' || hero.alt.trim().length === 0) {\n errors.push('marketplace.hero.alt is required and must not be empty.')\n }\n }\n }\n\n if (section.images !== undefined) {\n if (!Array.isArray(section.images)) {\n errors.push('marketplace.images must be a list.')\n } else {\n if (section.images.length > 8) errors.push('marketplace.images may contain at most 8 images.')\n section.images.forEach((value, index) => {\n const at = `marketplace.images[${index}]`\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n errors.push(`${at} must be an object.`)\n return\n }\n const image = value as Record<string, unknown>\n if (typeof image.source !== 'string' || image.source.trim().length === 0) {\n errors.push(`${at}.source must be a non-empty relative path.`)\n }\n if (typeof image.alt !== 'string' || image.alt.trim().length === 0) {\n errors.push(`${at}.alt is required and must not be empty.`)\n }\n if (image.caption !== undefined && typeof image.caption !== 'string') {\n errors.push(`${at}.caption must be a string when provided.`)\n }\n })\n }\n }\n\n if (section.assets !== undefined) {\n if (!Array.isArray(section.assets)) {\n errors.push('marketplace.assets must be a list of relative glob strings.')\n } else {\n section.assets.forEach((value, index) => {\n if (typeof value !== 'string' || value.trim().length === 0) {\n errors.push(`marketplace.assets[${index}] must be a non-empty relative glob string.`)\n }\n })\n }\n }\n return errors\n}\n\n/** Locates the manifest in a project directory: manifest.yaml or a single *.app.yaml / *.engine.yaml / *.bundle.yaml. */\nexport async function findManifest(dir: string): Promise<string> {\n const explicit = join(dir, 'manifest.yaml')\n try {\n if ((await stat(explicit)).isFile()) return explicit\n } catch {\n // fall through to pattern search\n }\n\n const entries = await readdir(dir)\n const candidates = entries.filter((name) => /\\.(app|engine|bundle)\\.ya?ml$/.test(name))\n if (candidates.length === 1) return join(dir, candidates[0]!)\n if (candidates.length === 0) {\n throw new Error(`No manifest found in ${dir}. Expected manifest.yaml or *.app.yaml / *.engine.yaml / *.bundle.yaml.`)\n }\n throw new Error(`Multiple manifests found in ${dir} (${candidates.join(', ')}). Pass --manifest to disambiguate.`)\n}\n\nexport const NAME_PATTERN = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/\n\nexport function validatePackageName(name: string, label: string): void {\n if (!NAME_PATTERN.test(name)) {\n throw new Error(`Invalid ${label} '${name}' — use lowercase letters, digits and hyphens (no leading/trailing hyphen).`)\n }\n}\n","/** Engine/app manifest inspection for the dev loop: permissions extraction + structural validation. */\nimport { readFile } from 'node:fs/promises'\nimport { parse } from 'yaml'\nimport {\n validateLaunchManifestKind,\n validateMarketplaceSection,\n type MarketplaceSection,\n} from '../vpkg/manifest.js'\n\nexport interface ManifestDocument {\n 'api-version'?: string\n kind?: string\n metadata?: {\n name?: string\n 'display-name'?: string\n version?: string\n description?: string\n [key: string]: unknown\n }\n spec?: {\n runtimes?: Record<string, unknown>\n 'file-types'?: { pattern?: string; extensions?: string[]; priority?: number }[]\n 'execution-modes'?: string[]\n tools?: { name?: string; description?: string; [key: string]: unknown }[]\n capabilities?: string[]\n permissions?: string[]\n resources?: Record<string, unknown>\n sandbox?: Record<string, unknown>\n entry?: unknown\n 'entry-points'?: { id?: string; entry?: string; route?: string; [key: string]: unknown }[]\n launch?: {\n enabled?: boolean\n 'entry-point'?: string\n pinnable?: boolean\n [key: string]: unknown\n }\n install?: { from?: string; to?: string; mode?: string; mime?: string }[]\n 'install-root'?: string\n scopes?: string[]\n [key: string]: unknown\n }\n marketplace?: MarketplaceSection\n packaging?: { publisher?: string; files?: string[]; [key: string]: unknown }\n [key: string]: unknown\n}\n\n/** Lenient manifest load (no required fields) — validation reports problems instead of throwing. */\nexport async function readManifestDocument(path: string): Promise<ManifestDocument> {\n const text = await readFile(path, 'utf8')\n const doc = parse(text) as ManifestDocument\n if (!doc || typeof doc !== 'object') throw new Error(`${path} is not a YAML manifest.`)\n return doc\n}\n\n/** The permission scopes a manifest declares under `spec.permissions`. */\nexport function manifestPermissions(manifest: ManifestDocument): string[] {\n const permissions = manifest.spec?.permissions\n if (!Array.isArray(permissions)) return []\n return permissions.filter((p): p is string => typeof p === 'string')\n}\n\nexport interface ValidationIssue {\n level: 'error' | 'warning'\n message: string\n}\n\n/** Structural validation mirroring the platform's registration-time checks. */\nexport function validateManifest(manifest: ManifestDocument): ValidationIssue[] {\n const issues: ValidationIssue[] = []\n const error = (message: string) => issues.push({ level: 'error', message })\n const warning = (message: string) => issues.push({ level: 'warning', message })\n\n const kind = manifest.kind\n if (!kind) {\n error(\"missing 'kind' (ExecutionEngine | Application | Bundle)\")\n return issues\n }\n if (!['ExecutionEngine', 'Application', 'Bundle'].includes(kind)) {\n error(`unknown kind '${kind}' (expected ExecutionEngine, Application or Bundle)`)\n }\n if (!manifest['api-version']) warning(\"missing 'api-version' (expected verentis.io/v1)\")\n\n const meta = manifest.metadata ?? {}\n for (const field of ['name', 'display-name', 'version'] as const) {\n if (!meta[field]) error(`metadata.${field} is required`)\n }\n\n const spec = manifest.spec ?? {}\n const launchKindError = validateLaunchManifestKind(kind, spec)\n if (launchKindError) error(launchKindError)\n\n if (kind === 'ExecutionEngine') {\n const runtimes = spec.runtimes ?? {}\n if (Object.keys(runtimes).length === 0) {\n error('spec.runtimes must declare at least one runtime (docker and/or wasm)')\n }\n const docker = runtimes['docker'] as { image?: string } | undefined\n if (docker && !docker.image) error('spec.runtimes.docker.image is required')\n const wasm = runtimes['wasm'] as { module?: string } | undefined\n if (wasm && !wasm.module) error('spec.runtimes.wasm.module is required')\n\n if (!spec['file-types']?.length) warning('spec.file-types is empty — the engine will never be auto-resolved for a file')\n for (const fileType of spec['file-types'] ?? []) {\n if (!fileType.pattern) error(\"every spec.file-types[] entry needs a 'pattern' (MIME type)\")\n }\n for (const tool of spec.tools ?? []) {\n if (!tool.name) error(\"every spec.tools[] entry needs a 'name'\")\n }\n if (!spec['execution-modes']?.length) warning('spec.execution-modes is empty (expected e.g. request-response)')\n if (!manifestPermissions(manifest).length) warning('spec.permissions is empty — the run token will carry no VFS scopes')\n }\n\n if (kind === 'Application') {\n const hasIframe = !!spec.entry || !!(spec['entry-points'] as unknown[] | undefined)?.length\n const hasInstall = Array.isArray(spec.install) && spec.install.length > 0\n const hasScopes = Array.isArray(spec.scopes) && spec.scopes.length > 0\n if (!hasIframe && !hasInstall && !hasScopes) {\n error(\n 'an Application must declare at least one contribution: spec.entry / spec.entry-points[] (iframe UI), ' +\n 'spec.install[] (installed files), or spec.scopes[] (identity)',\n )\n }\n validateApplicationLaunch(spec, issues)\n }\n\n validateInstallDirectives(spec.install, issues)\n for (const message of validateMarketplaceSection(manifest.marketplace)) error(message)\n\n const packaging = manifest.packaging ?? {}\n if (!packaging.publisher) warning('packaging.publisher is not set — `verentis pack`/`publish` will refuse the package')\n\n return issues\n}\n\nfunction validateApplicationLaunch(\n spec: NonNullable<ManifestDocument['spec']>,\n issues: ValidationIssue[],\n): void {\n const launch = spec.launch\n if (launch === undefined) return\n\n const error = (message: string) => issues.push({ level: 'error', message })\n if (!launch || typeof launch !== 'object' || Array.isArray(launch)) {\n error('spec.launch must be an object')\n return\n }\n\n if (launch.pinnable === true && launch.enabled !== true) {\n error('spec.launch.pinnable requires spec.launch.enabled')\n }\n if (launch.enabled !== true) return\n\n const launchEntryPoint = launch['entry-point']\n if (launchEntryPoint !== undefined && (typeof launchEntryPoint !== 'string' || !launchEntryPoint.trim())) {\n error('spec.launch.entry-point must be a non-empty entry-point id')\n return\n }\n\n if (typeof launchEntryPoint === 'string') {\n const entryPoint = spec['entry-points']?.find((candidate) => candidate.id === launchEntryPoint)\n if (!entryPoint) {\n error(`spec.launch.entry-point '${launchEntryPoint}' does not match spec.entry-points[].id`)\n return\n }\n\n if (!resolvesIframeEntry(spec.entry, entryPoint.entry ?? entryPoint.route)) {\n error('spec.launch.enabled requires the selected entry point to resolve an iframe entry')\n }\n return\n }\n\n if (!isAbsoluteHttpUrl(spec.entry)) {\n error('spec.launch.enabled requires spec.entry or spec.launch.entry-point')\n }\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0\n}\n\nfunction resolvesIframeEntry(baseEntry: unknown, routeOrEntry: unknown): boolean {\n if (isAbsoluteHttpUrl(routeOrEntry)) return true\n return isAbsoluteHttpUrl(baseEntry)\n}\n\nfunction isAbsoluteHttpUrl(value: unknown): value is string {\n if (!isNonEmptyString(value)) return false\n try {\n const url = new URL(value)\n return url.protocol === 'http:' || url.protocol === 'https:'\n } catch {\n return false\n }\n}\n\n/** Validates a `spec.install` map (present on apps that place files into the workspace VFS). */\nfunction validateInstallDirectives(\n install: { from?: string; to?: string; mode?: string; mime?: string }[] | undefined,\n issues: ValidationIssue[],\n): void {\n if (install === undefined) return\n const error = (message: string) => issues.push({ level: 'error', message })\n\n if (!Array.isArray(install)) {\n error('spec.install must be a list of install directives')\n return\n }\n\n install.forEach((directive, index) => {\n const at = `spec.install[${index}]`\n if (!directive || typeof directive !== 'object') {\n error(`${at} must be an object with 'from' and 'to'`)\n return\n }\n\n if (!directive.from || typeof directive.from !== 'string') {\n error(`${at}.from is required (a path/glob relative to the package payload)`)\n } else if (directive.from.startsWith('/') || directive.from.split('/').includes('..')) {\n error(`${at}.from must be a relative path inside the package payload (no leading '/' or '..')`)\n }\n\n if (!directive.to || typeof directive.to !== 'string') {\n error(`${at}.to is required (a workspace-absolute destination path)`)\n } else {\n if (!directive.to.startsWith('/')) error(`${at}.to must be a workspace-absolute path (start with '/')`)\n if (directive.to.split('/').includes('..')) error(`${at}.to must not contain '..'`)\n }\n\n if (directive.mode !== undefined && directive.mode !== 'seed' && directive.mode !== 'managed') {\n error(`${at}.mode must be 'seed' or 'managed' (got '${directive.mode}')`)\n }\n })\n}\n","import { spawn } from 'node:child_process'\nimport { mkdir, writeFile } from 'node:fs/promises'\nimport { dirname, resolve } from 'node:path'\nimport { Command } from 'commander'\nimport { createApiClient, type ApiClient } from '../http.js'\nimport { files } from '../api/catalog.js'\nimport { call } from '../api/client.js'\nimport { resolveWorkspaceId } from '../context.js'\nimport { decodeJwtPayload } from '../jwt.js'\nimport { printJson } from '../output.js'\nimport { ENGINE_DEFAULT_PERMISSIONS } from '../api/scopes.js'\nimport { buildLocalContext, contextEnv, type LocalExecutionContext } from '../dev/context.js'\nimport { manifestPermissions, readManifestDocument } from '../dev/manifest.js'\nimport { findManifest } from '../vpkg/manifest.js'\nimport type { FileDto } from './files.js'\n\ninterface TokenFlags {\n workspace?: string\n scopes?: string[]\n manifest?: string\n boundary?: string\n branch: string\n json?: boolean\n}\n\n/** Resolve the scope set for a dev token: explicit flags → manifest permissions → engine default set. */\nasync function resolveDevScopes(flags: { scopes?: string[]; manifest?: string }): Promise<string[]> {\n if (flags.scopes?.length) return flags.scopes\n const manifestPath = flags.manifest ?? (await findManifest(process.cwd()).catch(() => undefined))\n if (manifestPath) {\n const manifest = await readManifestDocument(manifestPath)\n const permissions = manifestPermissions(manifest)\n if (permissions.length > 0) {\n console.error(`Using ${permissions.length} scope(s) from ${manifestPath}`)\n return permissions\n }\n }\n return [...ENGINE_DEFAULT_PERMISSIONS]\n}\n\n/** Mint a workspace-bound (optionally node-bounded) access token like a platform run receives. */\nasync function mintDevToken(api: ApiClient, workspaceId: string, scopes: string[], boundary?: string, branch = 'main'): Promise<string> {\n let resourceId: string | undefined\n if (boundary) {\n const node = await call<FileDto>(api, files.get, {\n params: { path: boundary.replace(/^\\/+/, '').replace(/\\/+$/, '') },\n workspaceId,\n query: { branch },\n })\n if (!node.nodeId) throw new Error(`Could not resolve a node id for boundary path '${boundary}'.`)\n resourceId = node.nodeId\n }\n return api.mintAccessToken({\n scopes,\n workspaceId,\n ...(resourceId ? { resourceId, resourceKind: 'Node' as const } : {}),\n })\n}\n\ninterface ContextFlags extends TokenFlags {\n file?: string\n tool?: string\n mode?: string\n timeout?: string\n arg?: string[]\n env?: string[]\n params?: string\n out?: string\n}\n\nasync function buildContextFromFlags(api: ApiClient, options: ContextFlags): Promise<LocalExecutionContext> {\n const workspaceId = (await resolveWorkspaceId(options))!\n const scopes = await resolveDevScopes(options)\n const token = await mintDevToken(api, workspaceId, scopes, options.boundary, options.branch)\n\n const env: Record<string, string> = {}\n for (const pair of options.env ?? []) {\n const idx = pair.indexOf('=')\n if (idx < 0) throw new Error(`Invalid --env '${pair}' (expected KEY=value).`)\n env[pair.slice(0, idx)] = pair.slice(idx + 1)\n }\n\n let fileMimeType: string | undefined\n if (options.file) {\n // Best-effort metadata for the target file; keep the context usable when it doesn't exist yet.\n const remote = await call<FileDto>(api, files.get, {\n params: { path: options.file.replace(/^\\/+/, '') },\n workspaceId,\n query: { branch: options.branch },\n }).catch(() => undefined)\n fileMimeType = remote?.mimeType\n }\n\n return buildLocalContext({\n apiUrl: api.apiUrl,\n accessToken: token,\n scopes,\n workspaceId,\n filePath: options.file,\n fileMimeType,\n branch: options.branch,\n tool: options.tool,\n mode: options.mode,\n timeoutSeconds: options.timeout ? Number(options.timeout) : undefined,\n args: options.arg,\n env,\n parameters: options.params ? (JSON.parse(options.params) as Record<string, unknown>) : undefined,\n })\n}\n\nexport function registerDev(program: Command): void {\n const devCmd = program\n .command('dev')\n .description('Local development loop for engine/app scripts (real workspace access from your machine)')\n\n devCmd\n .command('token')\n .description('Mint a workspace-bound access token like a platform run receives')\n .option('--workspace <workspaceId>')\n .option('--scopes <scope...>', 'explicit scopes (default: manifest spec.permissions, else the engine default set)')\n .option('--manifest <path>', 'engine/app manifest to read spec.permissions from')\n .option('--boundary <path>', 'confine the token to this workspace directory subtree (like platform runs)')\n .option('--branch <branch>', 'workspace branch', 'main')\n .option('--json', 'output JSON with token metadata')\n .action(async (options: TokenFlags) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n const scopes = await resolveDevScopes(options)\n const token = await mintDevToken(api, workspaceId, scopes, options.boundary, options.branch)\n if (options.json) {\n const payload = decodeJwtPayload(token)\n printJson({\n access_token: token,\n scopes,\n workspaceId,\n expiresAt: payload?.exp ? new Date(payload.exp * 1000).toISOString() : undefined,\n })\n return\n }\n console.log(token)\n })\n\n devCmd\n .command('context')\n .description(\"Write a real context.json (the platform's engine contract) for local runs\")\n .option('--workspace <workspaceId>')\n .option('--file <path>', 'workspace file path the run targets (engine.context.file)')\n .option('--tool <tool>', 'engine tool name (e.g. execute)', 'execute')\n .option('--mode <mode>', 'execution mode', 'request-response')\n .option('--timeout <seconds>', 'execution timeout')\n .option('--arg <value...>', 'command-line arguments (repeatable)')\n .option('--env <KEY=value...>', 'environment entries for engine.context.input.environment (repeatable)')\n .option('--params <json>', 'tool parameters JSON')\n .option('--scopes <scope...>', 'explicit token scopes')\n .option('--manifest <path>', 'manifest to read spec.permissions from')\n .option('--boundary <path>', 'confine the token to this directory subtree')\n .option('--branch <branch>', 'workspace branch', 'main')\n .option('--out <path>', 'output path', '.verentis/context.json')\n .action(async (options: ContextFlags) => {\n const api = await createApiClient()\n const context = await buildContextFromFlags(api, options)\n const outPath = resolve(options.out ?? '.verentis/context.json')\n await mkdir(dirname(outPath), { recursive: true })\n await writeFile(outPath, JSON.stringify(context, null, 2) + '\\n', { mode: 0o600 })\n console.log(`Wrote ${outPath} (token expires ${context.platform.token.expiresAt ?? 'unknown'}).`)\n console.log('\\nRun your script with the SDK pointed at it:')\n console.log(` export VERENTIS_CONTEXT_PATH=${outPath}`)\n console.log(' python your_script.py')\n })\n\n devCmd\n .command('run <script>')\n .description('Run a local script against the REAL workspace (mint token → context.json → spawn)')\n .option('--workspace <workspaceId>')\n .option('--file <path>', 'workspace file path the run pretends to target (default: /<script name>)')\n .option('--tool <tool>', 'engine tool name', 'execute')\n .option('--mode <mode>', 'execution mode', 'request-response')\n .option('--timeout <seconds>', 'execution timeout')\n .option('--arg <value...>', 'arguments passed to the script (repeatable)')\n .option('--env <KEY=value...>', 'extra environment variables (repeatable)')\n .option('--params <json>', 'tool parameters JSON')\n .option('--scopes <scope...>', 'explicit token scopes')\n .option('--manifest <path>', 'manifest to read spec.permissions from')\n .option('--boundary <path>', 'confine the token to this directory subtree')\n .option('--branch <branch>', 'workspace branch', 'main')\n .option('--python <interpreter>', 'python interpreter', 'python3')\n .option('--debug [port]', 'wait for a debugger: wraps with debugpy --listen <port> --wait-for-client')\n .option('--keep-context', 'keep the generated .verentis/context.json after the run')\n .action(async (script: string, options: ContextFlags & { python: string; debug?: string | boolean; keepContext?: boolean }) => {\n const api = await createApiClient()\n const scriptPath = resolve(script)\n const effective = { ...options, file: options.file ?? `/${script.replace(/^\\.\\//, '')}` }\n const context = await buildContextFromFlags(api, effective)\n\n const contextPath = resolve('.verentis/context.json')\n await mkdir(dirname(contextPath), { recursive: true })\n await writeFile(contextPath, JSON.stringify(context, null, 2) + '\\n', { mode: 0o600 })\n\n const env = {\n ...process.env,\n ...context.input.environment,\n ...contextEnv(context, contextPath),\n }\n\n const pythonArgs: string[] = []\n if (options.debug !== undefined) {\n const port = typeof options.debug === 'string' ? options.debug : '5678'\n pythonArgs.push('-m', 'debugpy', '--listen', port, '--wait-for-client')\n console.error(`Waiting for a debugger to attach on port ${port} (VS Code: \"Python Debugger: Attach\")…`)\n }\n pythonArgs.push(scriptPath, ...(context.input.arguments ?? []))\n\n console.error(`→ ${options.python} ${pythonArgs.join(' ')}`)\n console.error(` workspace ${context.workspace.id} · branch ${options.branch} · token expires ${context.platform.token.expiresAt ?? 'unknown'}\\n`)\n\n const child = spawn(options.python, pythonArgs, { env, stdio: 'inherit' })\n const exitCode: number = await new Promise((resolveExit) => {\n child.on('close', (code) => resolveExit(code ?? 1))\n child.on('error', (error) => {\n console.error(`Failed to start ${options.python}: ${error.message}`)\n if (options.debug !== undefined) console.error('Is debugpy installed? pip install debugpy')\n resolveExit(1)\n })\n })\n process.exitCode = exitCode\n })\n\n devCmd\n .command('vscode')\n .description('Scaffold .vscode/launch.json with attach + launch configs for the dev loop')\n .option('--port <port>', 'debugpy port', '5678')\n .action(async (options: { port: string }) => {\n const launch = {\n version: '0.2.0',\n configurations: [\n {\n name: 'Verentis: attach to dev run',\n type: 'debugpy',\n request: 'attach',\n connect: { host: 'localhost', port: Number(options.port) },\n justMyCode: true,\n },\n {\n name: 'Verentis: launch current file with context',\n type: 'debugpy',\n request: 'launch',\n program: '${file}',\n console: 'integratedTerminal',\n justMyCode: true,\n env: { VERENTIS_CONTEXT_PATH: '${workspaceFolder}/.verentis/context.json' },\n },\n ],\n }\n const outPath = resolve('.vscode/launch.json')\n await mkdir(dirname(outPath), { recursive: true })\n await writeFile(outPath, JSON.stringify(launch, null, 2) + '\\n')\n console.log(`Wrote ${outPath}.`)\n console.log('Workflow:')\n console.log(' 1. verentis dev run script.py --debug # waits for the debugger')\n console.log(' 2. F5 → \"Verentis: attach to dev run\" # breakpoints hit your local code')\n console.log(' or: verentis dev context && F5 → \"launch current file with context\"')\n })\n}\n","import { Command } from 'commander'\nimport { createApiClient, type ApiClient } from '../http.js'\nimport { execution } from '../api/catalog.js'\nimport { call, callRaw, pageItems, pagingQuery, type PagedResult, type PagingFlags } from '../api/client.js'\nimport { resolveWorkspaceId } from '../context.js'\nimport { output, outputRecord, printJson } from '../output.js'\n\nexport interface ExecutionDto {\n id: string\n workspaceId: string\n engineId: string\n engineName?: string\n filePath?: string\n mode?: string\n trigger?: string\n tool?: string\n status: string\n requestedAt?: string\n startedAt?: string\n completedAt?: string\n result?: { status?: string; data?: unknown; artifacts?: string[]; error?: string } | null\n progressPercent?: number | null\n progressMessage?: string | null\n [key: string]: unknown\n}\n\ninterface ExecutionLogsDto {\n stdout?: string\n stderr?: string\n running?: boolean\n truncated?: boolean\n}\n\nconst TERMINAL_STATUSES = new Set(['Completed', 'Failed', 'Cancelled', 'TimedOut'])\n\nexport function registerExec(program: Command): void {\n const execCmd = program.command('exec').description('Run and inspect executions')\n\n execCmd\n .command('run <filePath>')\n .description('Execute a workspace file with its engine (e.g. `verentis exec run /scripts/transform.py`)')\n .option('--workspace <workspaceId>')\n .option('--branch <branch>', 'workspace branch', 'main')\n .option('--engine <engineId>', 'explicit engine id (default: resolved from the file type)')\n .option('--tool <tool>', 'engine tool to invoke (default: the engine default, e.g. execute)')\n .option('--mode <mode>', 'request-response | long-running')\n .option('--arg <value...>', 'command-line arguments passed to the script (repeatable)')\n .option('--params <json>', 'tool parameters JSON (engine.context.input.parameters)')\n .option('--follow', 'wait for completion and stream logs')\n .option('--json', 'output the execution record as JSON')\n .action(async (filePath: string, options: { workspace?: string; branch: string; engine?: string; tool?: string; mode?: string; arg?: string[]; params?: string; follow?: boolean; json?: boolean }) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n if (options.params) JSON.parse(options.params) // validate early\n\n const result = await call<ExecutionDto>(api, execution.request, {\n workspaceId,\n body: {\n workspaceId,\n engineId: options.engine ?? null,\n filePath: filePath.startsWith('/') ? filePath : `/${filePath}`,\n branch: options.branch,\n tool: options.tool ?? null,\n mode: options.mode ?? null,\n arguments: options.arg ?? [],\n parameters: options.params ?? null,\n clientRuntimeCapable: false,\n },\n })\n\n if (options.json && !options.follow) {\n printJson(result)\n return\n }\n console.log(`Execution ${result.id} → ${result.status} (engine ${result.engineName ?? result.engineId})`)\n\n if (options.follow) {\n await followExecution(api, workspaceId, result.id, options.json)\n } else if (!TERMINAL_STATUSES.has(result.status)) {\n console.log(`Follow with: verentis exec logs ${result.id} --follow`)\n } else {\n printResult(result)\n }\n })\n\n execCmd\n .command('list')\n .description('List executions in a workspace')\n .option('--workspace <workspaceId>')\n .option('--file <filePath>', 'filter by workspace file path')\n .option('--page <n>')\n .option('--page-size <n>')\n .option('--order-by <field>')\n .option('--json', 'output JSON')\n .action(async (options: PagingFlags & { workspace?: string; file?: string; json?: boolean }) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n const page = await call<PagedResult<ExecutionDto>>(api, execution.list, {\n workspaceId,\n query: { workspaceId, filePath: options.file, ...pagingQuery(options) },\n })\n output(\n pageItems(page).map((exec) => ({\n id: exec.id,\n status: exec.status,\n engine: exec.engineName ?? exec.engineId,\n file: exec.filePath ?? '',\n requestedAt: exec.requestedAt ?? '',\n })),\n { id: 'Id', status: 'Status', engine: 'Engine', file: 'File', requestedAt: 'Requested' },\n options,\n page,\n )\n })\n\n execCmd\n .command('get <executionId>')\n .description('Show execution details (status, result, artifacts)')\n .option('--workspace <workspaceId>')\n .option('--json', 'output JSON')\n .action(async (executionId: string, options: { workspace?: string; json?: boolean }) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n const result = await call<ExecutionDto>(api, execution.get, {\n params: { id: executionId },\n workspaceId,\n query: { workspaceId },\n })\n if (options.json) {\n printJson(result)\n return\n }\n const { result: execResult, ...rest } = result\n outputRecord(rest as Record<string, unknown>, options)\n printResult(result)\n })\n\n execCmd\n .command('cancel <executionId>')\n .description('Cancel a running execution')\n .option('--workspace <workspaceId>')\n .action(async (executionId: string, options: { workspace?: string }) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n const result = await call<ExecutionDto>(api, execution.cancel, {\n params: { id: executionId },\n workspaceId,\n body: { id: executionId, workspaceId },\n })\n console.log(`Execution ${executionId} → ${result?.status ?? 'Cancelled'}.`)\n })\n\n execCmd\n .command('logs <executionId>')\n .description('Fetch (or stream with --follow) the logs of an execution')\n .option('--workspace <workspaceId>')\n .option('--follow', 'stream live logs via SSE until the execution ends')\n .action(async (executionId: string, options: { workspace?: string; follow?: boolean }) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n if (options.follow) {\n await streamLogs(api, workspaceId, executionId)\n return\n }\n const logs = await call<ExecutionLogsDto>(api, execution.logs, {\n params: { id: executionId },\n workspaceId,\n query: { workspaceId },\n })\n if (logs.stdout) process.stdout.write(logs.stdout.endsWith('\\n') ? logs.stdout : `${logs.stdout}\\n`)\n if (logs.stderr) process.stderr.write(logs.stderr.endsWith('\\n') ? logs.stderr : `${logs.stderr}\\n`)\n if (logs.truncated) console.error('(logs truncated — the full log exceeded the inline limit)')\n if (logs.running) console.error('(execution still running — use --follow to stream)')\n })\n\n const engineCmd = program.command('engine').description('Inspect execution engines')\n\n engineCmd\n .command('list')\n .description('List registered execution engines')\n .option('--json', 'output JSON')\n .action(async (options: { json?: boolean }) => {\n const api = await createApiClient()\n const page = await call<PagedResult<Record<string, unknown>>>(api, execution.listEngines, {\n query: { PageNo: 1, PageSize: 100 },\n })\n output(pageItems(page), { name: 'Name', displayName: 'Display', version: 'Version', id: 'Id' }, options, page)\n })\n\n engineCmd\n .command('get <engineId>')\n .description('Show engine details (runtimes, tools, permissions)')\n .action(async (engineId: string) => {\n const api = await createApiClient()\n const result = await call<unknown>(api, execution.getEngine, { params: { id: engineId } })\n printJson(result)\n })\n\n engineCmd\n .command('resolve <fileTypeOrPath>')\n .description('Resolve which engine handles a MIME type or file path')\n .option('--workspace <workspaceId>')\n .action(async (fileTypeOrPath: string, options: { workspace?: string }) => {\n const api = await createApiClient()\n const workspaceId = await resolveWorkspaceId(options, false)\n const query = fileTypeOrPath.includes('/') && !fileTypeOrPath.includes('.')\n ? { fileType: fileTypeOrPath }\n : fileTypeOrPath.includes('.') && !fileTypeOrPath.includes('/')\n ? { fileType: fileTypeOrPath }\n : { filePath: fileTypeOrPath }\n const result = await call<unknown>(api, execution.resolveEngine, {\n query: { ...query, ...(workspaceId ? { workspaceId } : {}) },\n })\n printJson(result)\n })\n\n engineCmd\n .command('sync')\n .description('Re-scan the workspace for engine manifests and sync registrations')\n .option('--workspace <workspaceId>')\n .action(async (options: { workspace?: string }) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n const result = await call<unknown>(api, execution.syncEngines, { workspaceId, body: { workspaceId } })\n printJson(result)\n })\n}\n\nfunction printResult(exec: ExecutionDto): void {\n if (!exec.result) return\n if (exec.result.error) console.error(`Error: ${exec.result.error}`)\n if (exec.result.data !== undefined && exec.result.data !== null) {\n console.log('Result:')\n printJson(exec.result.data)\n }\n for (const artifact of exec.result.artifacts ?? []) console.log(`Artifact: ${artifact}`)\n}\n\n/** Stream `text/event-stream` frames, writing `data:` payload lines to stdout until `event: end`. */\nexport async function streamLogs(api: ApiClient, workspaceId: string, executionId: string): Promise<void> {\n const res = await callRaw(api, execution.logsStream, {\n params: { id: executionId },\n workspaceId,\n query: { workspaceId },\n })\n if (!res.body) return\n\n const decoder = new TextDecoder()\n let buffer = ''\n let currentEvent = 'message'\n const reader = (res.body as ReadableStream<Uint8Array>).getReader()\n for (;;) {\n const { done, value } = await reader.read()\n if (done) break\n buffer += decoder.decode(value, { stream: true })\n let newlineIdx: number\n while ((newlineIdx = buffer.indexOf('\\n')) >= 0) {\n const line = buffer.slice(0, newlineIdx).replace(/\\r$/, '')\n buffer = buffer.slice(newlineIdx + 1)\n if (line.startsWith('event: ')) {\n currentEvent = line.slice(7).trim()\n } else if (line.startsWith('data: ')) {\n if (currentEvent === 'end') return\n console.log(line.slice(6))\n } else if (line === '') {\n currentEvent = 'message'\n }\n }\n }\n}\n\n/** Poll an execution to terminal status while streaming its logs. */\nasync function followExecution(api: ApiClient, workspaceId: string, executionId: string, json?: boolean): Promise<void> {\n await streamLogs(api, workspaceId, executionId)\n // Stream ended — poll briefly for the final record (result persistence can lag the stream).\n for (let attempt = 0; attempt < 30; attempt++) {\n const exec = await call<ExecutionDto>(api, execution.get, {\n params: { id: executionId },\n workspaceId,\n query: { workspaceId },\n })\n if (TERMINAL_STATUSES.has(exec.status)) {\n if (json) printJson(exec)\n else {\n console.log(`Status: ${exec.status}`)\n printResult(exec)\n }\n if (exec.status !== 'Completed') process.exitCode = 1\n return\n }\n await new Promise((resolve) => setTimeout(resolve, 1000))\n }\n console.error('Timed out waiting for a terminal status — check `verentis exec get`.')\n process.exitCode = 1\n}\n","import { createReadStream, createWriteStream } from 'node:fs'\nimport { mkdir, readdir, readFile, stat } from 'node:fs/promises'\nimport { basename, dirname, join, posix, resolve } from 'node:path'\nimport { Readable } from 'node:stream'\nimport { pipeline } from 'node:stream/promises'\nimport { Command } from 'commander'\nimport { createApiClient, type ApiClient } from '../http.js'\nimport { files } from '../api/catalog.js'\nimport { call, callRaw, fillPath, pageItems, type PagedResult } from '../api/client.js'\nimport { resolveWorkspaceId } from '../context.js'\nimport { output, outputRecord } from '../output.js'\n\nexport interface FileDto {\n path: string\n name: string\n mimeType: string\n hash?: string\n version?: string\n etag?: string\n children?: PagedResult<FileDto>\n size?: number | null\n nodeId?: string\n [key: string]: unknown\n}\n\ninterface FileFlags {\n workspace?: string\n branch: string\n json?: boolean\n}\n\nconst normalizeRemote = (path: string): string => {\n const trimmed = path.replace(/^\\/+/, '').replace(/\\/+$/, '')\n return trimmed\n}\n\nasync function uploadWithHeaders(\n api: ApiClient,\n workspaceId: string,\n remotePath: string,\n localPath: string,\n options: { branch: string; contentType?: string; autoExtract?: boolean },\n): Promise<FileDto> {\n // Raw body upload with branch/extract headers (multipart not required by the controller).\n const stream = Readable.toWeb(createReadStream(localPath)) as unknown as ReadableStream\n const res = await api.requestRaw('POST', fillPath(files.upload.path, { path: normalizeRemote(remotePath) }), {\n scopes: [...files.upload.scopes],\n tokenWorkspaceId: workspaceId,\n rawBody: stream,\n contentType: options.contentType ?? 'application/octet-stream',\n headers: {\n 'X-Branch': options.branch,\n 'Content-Disposition': `attachment; filename=\"${basename(localPath)}\"`,\n ...(options.autoExtract ? { 'X-Auto-Extract': 'true' } : {}),\n },\n })\n return (await res.json()) as FileDto\n}\n\nexport function registerFiles(program: Command): void {\n const filesCmd = program.command('files').description('Work with workspace files (the VFS)')\n\n filesCmd\n .command('ls [path]')\n .description('List a directory in the workspace')\n .option('--workspace <workspaceId>')\n .option('--branch <branch>', 'workspace branch', 'main')\n .option('--json', 'output JSON')\n .action(async (path: string | undefined, options: FileFlags) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n const result = await call<FileDto>(api, files.get, {\n params: { path: normalizeRemote(path ?? '/') },\n workspaceId,\n query: { branch: options.branch, PageNo: 1, PageSize: 100 },\n })\n const entries = pageItems(result.children)\n if (entries.length === 0 && result.name) {\n outputRecord(result as Record<string, unknown>, options)\n return\n }\n output(\n entries.map((entry) => ({ ...entry, size: entry.size ?? '' })),\n { name: 'Name', mimeType: 'Type', size: 'Size', path: 'Path' },\n options,\n result,\n )\n })\n\n filesCmd\n .command('stat <path>')\n .description('Show file metadata')\n .option('--workspace <workspaceId>')\n .option('--branch <branch>', 'workspace branch', 'main')\n .option('--json', 'output JSON')\n .action(async (path: string, options: FileFlags) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n const result = await call<FileDto>(api, files.get, {\n params: { path: normalizeRemote(path) },\n workspaceId,\n query: { branch: options.branch },\n })\n const { children, ...rest } = result\n outputRecord(rest as Record<string, unknown>, options)\n })\n\n filesCmd\n .command('cat <path>')\n .description('Print raw file content to stdout')\n .option('--workspace <workspaceId>')\n .option('--branch <branch>', 'workspace branch', 'main')\n .action(async (path: string, options: FileFlags) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n const res = await callRaw(api, files.raw, {\n params: { path: normalizeRemote(path) },\n workspaceId,\n query: { branch: options.branch },\n })\n if (!res.body) return\n await pipeline(Readable.fromWeb(res.body as import('node:stream/web').ReadableStream), process.stdout, { end: false })\n })\n\n filesCmd\n .command('download <remotePath> [localPath]')\n .description('Download a file (or directory as an archive with --format)')\n .option('--workspace <workspaceId>')\n .option('--branch <branch>', 'workspace branch', 'main')\n .option('--format <format>', 'archive format for directories: Zip | TarGz')\n .action(async (remotePath: string, localPath: string | undefined, options: FileFlags & { format?: string }) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n const res = await callRaw(api, files.raw, {\n params: { path: normalizeRemote(remotePath) },\n workspaceId,\n query: { branch: options.branch, format: options.format },\n })\n const suffix = options.format === 'Zip' ? '.zip' : options.format === 'TarGz' ? '.tar.gz' : ''\n const out = resolve(localPath ?? `${basename(normalizeRemote(remotePath)) || 'download'}${suffix}`)\n if (!res.body) throw new Error('Empty response.')\n await mkdir(dirname(out), { recursive: true })\n await pipeline(Readable.fromWeb(res.body as import('node:stream/web').ReadableStream), createWriteStream(out))\n console.log(`Downloaded ${remotePath} → ${out}`)\n })\n\n filesCmd\n .command('upload <localPath> [remotePath]')\n .description('Upload a file or directory (directories upload file-by-file)')\n .option('--workspace <workspaceId>')\n .option('--branch <branch>', 'workspace branch', 'main')\n .option('--content-type <type>', 'content type for a single-file upload')\n .option('--extract', 'archive uploads: extract server-side into the target directory (X-Auto-Extract)')\n .action(async (localPath: string, remotePath: string | undefined, options: FileFlags & { contentType?: string; extract?: boolean }) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n const local = resolve(localPath)\n const info = await stat(local)\n\n if (info.isDirectory()) {\n const remoteBase = normalizeRemote(remotePath ?? basename(local))\n const uploaded = await uploadDirectory(api, workspaceId, local, remoteBase, options.branch)\n console.log(`Uploaded ${uploaded} file(s) to /${remoteBase}.`)\n return\n }\n\n const remote = remotePath && remotePath.endsWith('/') ? posix.join(normalizeRemote(remotePath), basename(local)) : normalizeRemote(remotePath ?? basename(local))\n const result = await uploadWithHeaders(api, workspaceId, remote, local, {\n branch: options.branch,\n contentType: options.contentType,\n autoExtract: options.extract,\n })\n console.log(`Uploaded ${localPath} → /${result.path ?? remote}`)\n })\n\n filesCmd\n .command('rm <path>')\n .description('Delete a file or directory')\n .option('--workspace <workspaceId>')\n .option('--branch <branch>', 'workspace branch', 'main')\n .option('--recursive', 'delete directory contents recursively')\n .action(async (path: string, options: FileFlags & { recursive?: boolean }) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n await api.requestRaw('DELETE', fillPath(files.delete.path, { path: normalizeRemote(path) }), {\n scopes: [...files.delete.scopes],\n tokenWorkspaceId: workspaceId,\n query: { branch: options.branch },\n headers: options.recursive ? { 'X-Delete-Mode': 'Deep' } : {},\n })\n console.log(`Deleted /${normalizeRemote(path)}.`)\n })\n\n filesCmd\n .command('mv <fromPath> <toPath>')\n .description('Move or rename a file')\n .option('--workspace <workspaceId>')\n .option('--branch <branch>', 'workspace branch', 'main')\n .action(async (fromPath: string, toPath: string, options: FileFlags) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n await call(api, files.update, {\n params: { path: normalizeRemote(fromPath) },\n workspaceId,\n body: { branch: options.branch, path: normalizeRemote(fromPath), toPath: normalizeRemote(toPath) },\n })\n console.log(`Moved /${normalizeRemote(fromPath)} → /${normalizeRemote(toPath)}.`)\n })\n}\n\nasync function uploadDirectory(api: ApiClient, workspaceId: string, localDir: string, remoteBase: string, branch: string): Promise<number> {\n let count = 0\n const entries = await readdir(localDir, { withFileTypes: true })\n for (const entry of entries) {\n if (entry.name.startsWith('.git') || entry.name === 'node_modules' || entry.name === '__pycache__') continue\n const localEntry = join(localDir, entry.name)\n const remoteEntry = posix.join(remoteBase, entry.name)\n if (entry.isDirectory()) {\n count += await uploadDirectory(api, workspaceId, localEntry, remoteEntry, branch)\n } else if (entry.isFile()) {\n await uploadWithHeaders(api, workspaceId, remoteEntry, localEntry, { branch })\n console.log(` /${remoteEntry}`)\n count += 1\n }\n }\n return count\n}\n\n/** Read a remote file fully into memory (helper for other commands). */\nexport async function readRemoteFile(api: ApiClient, workspaceId: string, path: string, branch: string): Promise<Buffer> {\n const res = await callRaw(api, files.raw, { params: { path: normalizeRemote(path) }, workspaceId, query: { branch } })\n return Buffer.from(await res.arrayBuffer())\n}\n","import { mkdir, stat, writeFile } from 'node:fs/promises'\nimport { join, resolve } from 'node:path'\nimport { Command } from 'commander'\n\nconst TEMPLATES: Record<string, (name: string) => string> = {\n application: (name) => `api-version: verentis.io/v1\nkind: Application\n\nmetadata:\n name: ${name}\n display-name: ${titleCase(name)}\n description: \"\"\n icon: layout-dashboard\n version: 0.1.0\n author: \"\"\n\n# Marketplace presentation (optional):\n# marketplace:\n# logo: ./marketplace/logo.png\n# hero:\n# source: ./marketplace/hero.webp\n# alt: A concise description of the hero background\n# images:\n# - source: ./marketplace/screenshot.png\n# alt: A concise description of the screenshot\n# caption: Optional visible caption\n# readme: ./README.md\n# changelog: ./CHANGELOG.md\n# assets:\n# - \"marketplace/**/*.{png,jpg,jpeg,webp,svg}\"\n\nspec:\n entry: https://example.com # hosted app origin\n scope: global\n\n # Opt into a standalone workspace surface. Contextual file handlers should omit this block.\n # launch:\n # enabled: true\n # entry-point: home # optional; otherwise spec.entry is used\n # pinnable: true\n\n entry-points: []\n capabilities: []\n permissions: []\n\n sandbox:\n allow-scripts: true\n allow-same-origin: true\n allow-popups: false\n allow-forms: true\n\npackaging:\n publisher: \"\" # your publisher name\n files: [] # globs relative to this manifest, e.g. [\"schemas/**/*.json\"]\n encryption: none\n`,\n engine: (name) => `api-version: verentis.io/v1\nkind: ExecutionEngine\n\nmetadata:\n name: ${name}\n display-name: ${titleCase(name)}\n description: \"\"\n icon: lucide:terminal\n version: 0.1.0\n author: \"\"\n\n# Marketplace presentation (optional):\n# marketplace:\n# logo: ./marketplace/logo.png\n# hero:\n# source: ./marketplace/hero.webp\n# alt: A concise description of the hero background\n# images:\n# - source: ./marketplace/screenshot.png\n# alt: A concise description of the screenshot\n# readme: ./README.md\n# changelog: ./CHANGELOG.md\n# assets:\n# - \"marketplace/**/*.{png,jpg,jpeg,webp,svg}\"\n\nspec:\n runtimes: {}\n file-types: []\n execution-modes:\n - request-response\n\npackaging:\n publisher: \"\" # your publisher name\n files: [] # e.g. [\"dist/runner.js\"] — reference as ./runner.js in spec\n encryption: none\n`,\n bundle: (name) => `api-version: verentis.io/v1\nkind: Bundle\n\nmetadata:\n name: ${name}\n display-name: ${titleCase(name)}\n description: \"\"\n version: 0.1.0\n author: \"\"\n\n# Marketplace presentation (optional):\n# marketplace:\n# logo: ./marketplace/logo.png\n# hero:\n# source: ./marketplace/hero.webp\n# alt: A concise description of the hero background\n# images:\n# - source: ./marketplace/screenshot.png\n# alt: A concise description of the screenshot\n# readme: ./README.md\n# changelog: ./CHANGELOG.md\n# assets:\n# - \"marketplace/**/*.{png,jpg,jpeg,webp,svg}\"\n\npackaging:\n publisher: \"\" # your publisher name\n files:\n - \"content/**/*\" # everything under content/ is installed at the target path\n bundle:\n default-path: /data/${name}\n encryption: none\n`,\n}\n\nexport function registerInit(program: Command): void {\n program\n .command('init [dir]')\n .description('Scaffold a manifest.yaml for a new package')\n .option('--kind <kind>', 'application | engine | bundle', 'application')\n .option('--name <name>', 'package name (defaults to the directory name)')\n .action(async (dir: string | undefined, options: { kind: string; name?: string }) => {\n const template = TEMPLATES[options.kind.toLowerCase()]\n if (!template) throw new Error(`Unknown kind '${options.kind}' — use application, engine or bundle.`)\n\n const targetDir = resolve(dir ?? '.')\n await mkdir(targetDir, { recursive: true })\n const name = (options.name ?? targetDir.split('/').pop() ?? 'my-package').toLowerCase().replace(/[^a-z0-9-]/g, '-')\n\n const manifestPath = join(targetDir, 'manifest.yaml')\n if (await exists(manifestPath)) throw new Error(`${manifestPath} already exists.`)\n await writeFile(manifestPath, template(name))\n console.log(`Created ${manifestPath} (kind: ${options.kind}).`)\n console.log('Fill in packaging.publisher and packaging.files, then run `verentis pack`.')\n })\n}\n\nasync function exists(path: string): Promise<boolean> {\n try {\n await stat(path)\n return true\n } catch {\n return false\n }\n}\n\nfunction titleCase(value: string): string {\n return value.replace(/(^|[-_])(\\w)/g, (_, __, c: string) => ` ${c.toUpperCase()}`).trim()\n}\n","import { createHash, generateKeyPairSync, sign as cryptoSign, verify as cryptoVerify, createPrivateKey, createPublicKey, type KeyObject } from 'node:crypto'\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { keysDir } from '../config.js'\n\nexport interface SigningKey {\n kid: string\n algorithm: 'Ed25519'\n /** Base64 of the raw 32-byte Ed25519 public key (the format the registry stores). */\n publicKey: string\n /** PKCS#8 PEM private key. */\n privateKeyPem: string\n createdAt: string\n}\n\n/** kid = first 16 hex chars of sha256(raw public key), lowercase — must match the registry. */\nexport function computeKid(publicKeyBase64: string): string {\n return createHash('sha256').update(Buffer.from(publicKeyBase64, 'base64')).digest('hex').slice(0, 16)\n}\n\nexport function generateSigningKey(): SigningKey {\n const { publicKey, privateKey } = generateKeyPairSync('ed25519')\n const rawPublic = rawPublicKeyBytes(publicKey)\n const publicKeyBase64 = rawPublic.toString('base64')\n return {\n kid: computeKid(publicKeyBase64),\n algorithm: 'Ed25519',\n publicKey: publicKeyBase64,\n privateKeyPem: privateKey.export({ type: 'pkcs8', format: 'pem' }).toString(),\n createdAt: new Date().toISOString(),\n }\n}\n\nexport function signEd25519(privateKeyPem: string, message: Buffer): Buffer {\n return cryptoSign(null, message, createPrivateKey(privateKeyPem))\n}\n\nexport function verifyEd25519(publicKeyBase64: string, message: Buffer, signature: Buffer): boolean {\n const jwk = { kty: 'OKP', crv: 'Ed25519', x: Buffer.from(publicKeyBase64, 'base64').toString('base64url') }\n const key = createPublicKey({ key: jwk, format: 'jwk' })\n return cryptoVerify(null, message, key, signature)\n}\n\nfunction rawPublicKeyBytes(publicKey: KeyObject): Buffer {\n const jwk = publicKey.export({ format: 'jwk' }) as { x?: string }\n if (!jwk.x) throw new Error('Failed to export Ed25519 public key.')\n return Buffer.from(jwk.x, 'base64url')\n}\n\nexport function keyPath(name: string): string {\n if (!/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/.test(name)) {\n throw new Error(`Invalid key name '${name}' — use lowercase letters, digits and hyphens.`)\n }\n return join(keysDir(), `${name}.json`)\n}\n\nexport async function saveKey(name: string, key: SigningKey): Promise<string> {\n await mkdir(keysDir(), { recursive: true, mode: 0o700 })\n const path = keyPath(name)\n await writeFile(path, JSON.stringify(key, null, 2) + '\\n', { mode: 0o600, flag: 'wx' })\n return path\n}\n\nexport async function loadKey(name: string): Promise<SigningKey> {\n try {\n return JSON.parse(await readFile(keyPath(name), 'utf8')) as SigningKey\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n throw new Error(`Signing key '${name}' not found. Generate one with \\`verentis keygen --name ${name}\\`.`)\n }\n throw error\n }\n}\n","import { createReadStream } from 'node:fs'\nimport { stat } from 'node:fs/promises'\nimport { Readable } from 'node:stream'\nimport { SCOPES, type ApiClient } from './http.js'\n\nexport interface PublisherDto {\n id: string\n accountId: string\n name: string\n displayName: string\n description?: string | null\n websiteUrl?: string | null\n contactEmail?: string | null\n logoUrl?: string | null\n isVerified: boolean\n status: string\n signingKeys?: { kid: string; algorithm: string; status: string }[]\n}\n\nexport interface PackageSummaryDto {\n id: string\n publisherId: string\n publisherName: string\n name: string\n displayName: string\n kind: string\n visibility: string\n latestPublishedVersion?: string | null\n}\n\nexport interface PagedResult<T> {\n data?: T[]\n items?: T[]\n totalCount?: number\n}\n\nexport interface PackageVersionDto {\n id: string\n packageId: string\n version: string\n status: string\n sizeBytes: number\n treeDigest: string\n isEncrypted: boolean\n hasDeveloperSignature: boolean\n hasMarketplaceSignature: boolean\n}\n\nconst pageItems = <T>(page: PagedResult<T>): T[] => page.data ?? page.items ?? []\n\nexport async function getMyPublisher(api: ApiClient): Promise<PublisherDto | null> {\n const result = await api.request<PublisherDto | null>('GET', '/v1/publishers/me', {\n scopes: [SCOPES.publisherRead],\n })\n return result ?? null\n}\n\nexport async function requireMyPublisher(api: ApiClient): Promise<PublisherDto> {\n const publisher = await getMyPublisher(api)\n if (!publisher) {\n throw new Error('No publisher profile for this account. Create one with `verentis publisher create --name <name> --display-name <display>`.')\n }\n return publisher\n}\n\nexport async function findPackageByName(api: ApiClient, publisherId: string, name: string): Promise<PackageSummaryDto | null> {\n const page = await api.request<PagedResult<PackageSummaryDto>>('GET', `/v1/publishers/${publisherId}/packages`, {\n scopes: [SCOPES.packageRead],\n query: { PageNo: 1, PageSize: 100 },\n })\n return pageItems(page).find((pkg) => pkg.name === name) ?? null\n}\n\nexport async function createPackage(\n api: ApiClient,\n input: { publisherId: string; name: string; displayName: string; kind: string; description?: string; visibility?: 'Public' | 'Private' },\n): Promise<string> {\n return api.request<string>('POST', '/v1/packages', {\n scopes: [SCOPES.packageCreate],\n body: {\n publisherId: input.publisherId,\n name: input.name,\n displayName: input.displayName,\n kind: input.kind,\n description: input.description ?? null,\n icon: null,\n categories: [],\n visibility: input.visibility ?? 'Private',\n },\n })\n}\n\nexport async function uploadVersion(api: ApiClient, packageId: string, vpkgPath: string): Promise<PackageVersionDto> {\n const size = (await stat(vpkgPath)).size\n const stream = Readable.toWeb(createReadStream(vpkgPath)) as unknown as ReadableStream\n const res = await api.requestRaw('POST', `/v1/packages/${packageId}/versions`, {\n scopes: [SCOPES.packagePublish],\n rawBody: stream,\n contentType: 'application/vnd.verentis.package+tar+gzip',\n })\n void size\n return (await res.json()) as PackageVersionDto\n}\n\nexport async function yankVersion(api: ApiClient, packageId: string, version: string): Promise<void> {\n await api.request('POST', `/v1/packages/${packageId}/versions/${encodeURIComponent(version)}/yank`, {\n scopes: [SCOPES.packagePublish],\n })\n}\n\nexport async function downloadTarball(api: ApiClient, packageId: string, version: string, workspaceId?: string): Promise<Response> {\n return api.requestRaw('GET', `/v1/packages/${packageId}/versions/${encodeURIComponent(version)}/tarball`, {\n scopes: [SCOPES.packageRead],\n query: { workspaceId },\n })\n}\n\n/** Resolves \"publisher/name\" or plain \"name\" (relative to the caller's publisher). */\nexport async function resolvePackageRef(api: ApiClient, ref: string): Promise<{ package: PackageSummaryDto; publisherName: string }> {\n const [publisherName, packageName] = ref.includes('/') ? (ref.split('/', 2) as [string, string]) : [undefined, ref]\n\n if (!publisherName) {\n const me = await requireMyPublisher(api)\n const pkg = await findPackageByName(api, me.id, packageName)\n if (!pkg) throw new Error(`Package '${packageName}' not found under your publisher '${me.name}'.`)\n return { package: pkg, publisherName: me.name }\n }\n\n const page = await api.request<PagedResult<PackageSummaryDto>>('GET', '/v1/packages', {\n scopes: [SCOPES.packageReadAll],\n query: { SearchText: packageName, PageNo: 1, PageSize: 100 },\n })\n const pkg = pageItems(page).find((p) => p.name === packageName && p.publisherName === publisherName)\n if (!pkg) throw new Error(`Package '${publisherName}/${packageName}' not found (or not visible to you).`)\n return { package: pkg, publisherName }\n}\n","import { Command } from 'commander'\nimport { createApiClient, SCOPES } from '../http.js'\nimport { loadConfig, saveConfig } from '../config.js'\nimport { generateSigningKey, loadKey, saveKey } from '../crypto/keys.js'\nimport { requireMyPublisher } from '../registry.js'\n\nexport function registerKeygen(program: Command): void {\n program\n .command('keygen')\n .description('Generate an Ed25519 signing key and register its public half with your publisher profile')\n .option('--name <name>', 'key name (stored at ~/.verentis/keys/<name>.json)', 'default')\n .option('--no-register', 'skip registering the public key with the marketplace')\n .option('--set-default', 'use this key as the default for `verentis pack`', true)\n .action(async (options: { name: string; register: boolean; setDefault: boolean }) => {\n const key = generateSigningKey()\n const path = await saveKey(options.name, key)\n console.log(`Generated Ed25519 key '${options.name}' (kid ${key.kid})`)\n console.log(` private key: ${path} — keep this safe; it never leaves your machine.`)\n\n if (options.setDefault) {\n const config = await loadConfig()\n config.defaultKey = options.name\n await saveConfig(config)\n }\n\n if (options.register) {\n const api = await createApiClient()\n const publisher = await requireMyPublisher(api)\n await api.request('POST', `/v1/publishers/${publisher.id}/keys`, {\n scopes: [SCOPES.publisherUpdate],\n body: { publisherId: publisher.id, algorithm: 'Ed25519', publicKey: key.publicKey },\n })\n console.log(`Registered public key with publisher '${publisher.name}'.`)\n } else {\n console.log('Public key NOT registered (use `verentis key register` later).')\n }\n })\n\n const keyCmd = program.command('key').description('Manage signing keys')\n\n keyCmd\n .command('register')\n .description(\"Register a local key's public half with your publisher profile\")\n .option('--name <name>', 'key name', 'default')\n .action(async (options: { name: string }) => {\n const key = await loadKey(options.name)\n const api = await createApiClient()\n const publisher = await requireMyPublisher(api)\n await api.request('POST', `/v1/publishers/${publisher.id}/keys`, {\n scopes: [SCOPES.publisherUpdate],\n body: { publisherId: publisher.id, algorithm: 'Ed25519', publicKey: key.publicKey },\n })\n console.log(`Registered key '${options.name}' (kid ${key.kid}) with publisher '${publisher.name}'.`)\n })\n\n keyCmd\n .command('revoke <kid>')\n .description('Revoke a registered signing key')\n .action(async (kid: string) => {\n const api = await createApiClient()\n const publisher = await requireMyPublisher(api)\n await api.request('DELETE', `/v1/publishers/${publisher.id}/keys/${encodeURIComponent(kid)}`, {\n scopes: [SCOPES.publisherUpdate],\n })\n console.log(`Revoked key ${kid}.`)\n })\n}\n","import { Command } from 'commander'\nimport { createApiClient, SCOPES } from '../http.js'\nimport { loadConfig, saveConfig } from '../config.js'\nimport { decodeJwtPayload } from '../jwt.js'\nimport { pollForIdentityToken, startDeviceAuthorization } from '../auth/deviceFlow.js'\n\nexport function registerLogin(program: Command): void {\n program\n .command('login')\n .description('Sign in to Verentis (browser device flow by default; --api-key/--token for non-interactive use)')\n .option('--api-url <url>', 'Verentis API gateway URL')\n .option('--api-key <key>', 'Verentis API key (vrt_...)')\n .option('--token <token>', 'Verentis identity token (exchanged per request for scoped access tokens)')\n .option('--sealing-key <key>', \"the platform's base64 X25519 sealing PUBLIC key (used by `pack --encrypt`)\")\n .option('--insecure', 'skip TLS certificate verification (for local dev with self-signed certs)')\n .action(async (options: { apiUrl?: string; apiKey?: string; token?: string; sealingKey?: string; insecure?: boolean }) => {\n const config = await loadConfig()\n if (options.apiUrl) config.apiUrl = options.apiUrl\n if (options.sealingKey) config.sealingPublicKey = options.sealingKey\n if (options.insecure !== undefined) config.insecure = options.insecure\n if (!config.apiUrl) throw new Error('An API URL is required. Pass --api-url <url>.')\n\n if (options.apiKey) {\n if (!options.apiKey.startsWith('vrt_')) throw new Error('API keys start with \"vrt_\".')\n config.apiKey = options.apiKey\n delete config.identityToken\n delete config.refreshToken\n await saveConfig(config)\n console.log(`Configuration saved (API key @ ${config.apiUrl}).`)\n return\n }\n if (options.token) {\n config.identityToken = options.token\n delete config.apiKey\n delete config.refreshToken\n await saveConfig(config)\n console.log(`Configuration saved (identity token @ ${config.apiUrl}).`)\n return\n }\n\n // Device-code flow (RFC 8628): works over SSH — approve in any browser.\n const apiUrl = config.apiUrl.replace(/\\/+$/, '')\n const insecure = config.insecure\n const authorization = await startDeviceAuthorization(apiUrl, insecure)\n\n console.log('To sign in, open this URL in a browser:')\n console.log(`\\n ${authorization.verification_uri_complete ?? authorization.verification_uri}\\n`)\n console.log(`and confirm the code: ${authorization.user_code}`)\n console.log('\\nWaiting for approval…')\n\n const identity = await pollForIdentityToken(apiUrl, authorization, insecure, () => process.stderr.write('.'))\n process.stderr.write('\\n')\n\n config.identityToken = identity.idToken\n if (identity.refreshToken) config.refreshToken = identity.refreshToken\n else delete config.refreshToken\n delete config.apiKey\n await saveConfig(config)\n\n const claims = decodeJwtPayload(identity.idToken)\n console.log(`Signed in as ${claims?.name ?? claims?.email ?? claims?.sub ?? 'unknown'} @ ${config.apiUrl}.`)\n if (!claims?.account_id) {\n console.log('Note: no unambiguous account context — admin commands may need --account <id>.')\n }\n })\n\n program\n .command('logout')\n .description('Remove stored credentials')\n .action(async () => {\n const config = await loadConfig()\n delete config.apiKey\n delete config.identityToken\n delete config.refreshToken\n await saveConfig(config)\n console.log('Credentials removed.')\n })\n\n program\n .command('whoami')\n .description('Show the current identity, account and publisher profile')\n .action(async () => {\n const config = await loadConfig()\n const identityToken = process.env.VERENTIS_TOKEN ?? config.identityToken\n if (identityToken) {\n const claims = decodeJwtPayload(identityToken)\n if (claims) {\n const expiry = claims.exp ? new Date(claims.exp * 1000) : undefined\n const expired = expiry && expiry.getTime() <= Date.now()\n const renewable = Boolean(config.refreshToken) && !process.env.VERENTIS_TOKEN\n console.log(`User: ${claims.name ?? claims.email ?? claims.sub ?? '(unknown)'}${claims.sub ? ` (${claims.sub})` : ''}`)\n if (claims.account_id) console.log(`Account: ${claims.account_id}`)\n if (expiry) {\n const state = expired ? (renewable ? 'expired (auto-renews)' : 'EXPIRED') : 'expires'\n console.log(`Token ${state}: ${expiry.toISOString()}`)\n }\n if (renewable) console.log('Session: refresh token stored (stays signed in across expiries)')\n }\n } else if (process.env.VERENTIS_API_KEY ?? config.apiKey) {\n console.log('Credential: API key (identity claims not available)')\n }\n if (config.defaultWorkspaceId) console.log(`Workspace: ${config.defaultWorkspaceId} (default)`)\n\n const api = await createApiClient()\n const publisher = await api.request<{ name?: string; displayName?: string; isVerified?: boolean; signingKeys?: { kid: string; status: string }[] } | null>(\n 'GET',\n '/v1/publishers/me',\n { scopes: [SCOPES.publisherRead] },\n ).catch(() => null)\n if (!publisher) {\n console.log('Publisher: none — create one with `verentis publisher create --name <name> --display-name \"<display name>\"`')\n return\n }\n console.log(`Publisher: ${publisher.name} (${publisher.displayName})${publisher.isVerified ? ' ✓ verified' : ''}`)\n for (const key of publisher.signingKeys ?? []) {\n console.log(` key ${key.kid} [${key.status}]`)\n }\n })\n}\n","import { signEd25519, verifyEd25519, type SigningKey } from './keys.js'\n\n/**\n * DSSE (Dead Simple Signing Envelope) — https://github.com/secure-systems-lab/dsse\n * Envelope and PAE encoding must match the marketplace registry's verifier:\n * payload type `application/vnd.verentis.package.digests+json`, Ed25519 signatures.\n */\nexport const DSSE_PAYLOAD_TYPE = 'application/vnd.verentis.package.digests+json'\n\nexport interface DsseEnvelope {\n payload: string\n payloadType: string\n signatures: { keyid: string; sig: string }[]\n}\n\n/** DSSE pre-authentication encoding: \"DSSEv1 <typeLen> <type> <payloadLen> \" + payload. */\nexport function preAuthenticationEncoding(payloadType: string, payload: Buffer): Buffer {\n const typeBytes = Buffer.from(payloadType, 'utf8')\n const header = Buffer.from(\n `DSSEv1 ${typeBytes.length} ${payloadType} ${payload.length} `, 'utf8')\n return Buffer.concat([header, payload])\n}\n\nexport function signEnvelope(payload: string, key: SigningKey): DsseEnvelope {\n const payloadBytes = Buffer.from(payload, 'utf8')\n const pae = preAuthenticationEncoding(DSSE_PAYLOAD_TYPE, payloadBytes)\n const signature = signEd25519(key.privateKeyPem, pae)\n return {\n payload: payloadBytes.toString('base64'),\n payloadType: DSSE_PAYLOAD_TYPE,\n signatures: [{ keyid: key.kid, sig: signature.toString('base64') }],\n }\n}\n\n/** Returns the keyid of the first signature that verifies, or null. */\nexport function verifyEnvelope(envelope: DsseEnvelope, expectedPayload: string, publicKeysByKid: Record<string, string>): string | null {\n if (envelope.payloadType !== DSSE_PAYLOAD_TYPE) return null\n const payloadBytes = Buffer.from(envelope.payload, 'base64')\n if (payloadBytes.toString('utf8') !== expectedPayload) return null\n\n const pae = preAuthenticationEncoding(envelope.payloadType, payloadBytes)\n for (const signature of envelope.signatures) {\n for (const [kid, publicKey] of Object.entries(publicKeysByKid)) {\n if (signature.keyid && signature.keyid !== kid) continue\n try {\n if (verifyEd25519(publicKey, pae, Buffer.from(signature.sig, 'base64'))) return kid\n } catch {\n // try next key\n }\n }\n }\n return null\n}\n","import {\n createCipheriv,\n createDecipheriv,\n createPrivateKey,\n createPublicKey,\n diffieHellman,\n generateKeyPairSync,\n hkdfSync,\n randomBytes,\n type KeyObject,\n} from 'node:crypto'\n\n/**\n * Sealed-package payload encryption.\n *\n * Content encryption: AES-256-GCM per entry, layout nonce(12) || ciphertext || tag(16).\n * Key wrapping (\"x25519-hkdf-sha256-aes256gcm\"): per recipient an ephemeral X25519 keypair;\n * shared = X25519(ephemeralPrivate, recipientPublic)\n * kek = HKDF-SHA256(shared, salt = ephemeralPublic || recipientPublic, info = \"verentis-vpkg-wrap-v1\", 32)\n * wrapped = AES-256-GCM(kek) over the 32-byte content key (same nonce||ct||tag layout).\n * The registry digests cover the ENCRYPTED entry bytes, so integrity and signing are\n * unchanged for sealed packages.\n */\nexport const WRAP_ALGORITHM = 'x25519-hkdf-sha256-aes256gcm'\nexport const CONTENT_ALGORITHM = 'aes-256-gcm'\nexport const WRAP_INFO = 'verentis-vpkg-wrap-v1'\n\nexport interface EncryptionRecipient {\n /** Recipient label: \"platform\" (escrow / Node member reads) or a custom name. */\n id: string\n /** Base64 raw X25519 public key of the recipient. */\n publicKey: string\n /** Base64 raw X25519 public key of the wrap-time ephemeral keypair. */\n ephemeralPublicKey: string\n /** Base64 nonce||ciphertext||tag over the content key. */\n wrappedKey: string\n}\n\nexport interface EncryptionManifest {\n algorithm: typeof CONTENT_ALGORITHM\n keyWrapping: typeof WRAP_ALGORITHM\n recipients: EncryptionRecipient[]\n}\n\nexport interface SealingKeyPair {\n /** Base64 raw 32-byte X25519 public key. */\n publicKey: string\n /** Base64 raw 32-byte X25519 private key. */\n privateKey: string\n}\n\nexport function generateSealingKeyPair(): SealingKeyPair {\n const { publicKey, privateKey } = generateKeyPairSync('x25519')\n return {\n publicKey: rawX25519Public(publicKey).toString('base64'),\n privateKey: rawX25519Private(privateKey).toString('base64'),\n }\n}\n\nexport function generateContentKey(): Buffer {\n return randomBytes(32)\n}\n\n/** AES-256-GCM encrypt: returns nonce(12) || ciphertext || tag(16). */\nexport function encryptBytes(key: Buffer, plaintext: Buffer): Buffer {\n const nonce = randomBytes(12)\n const cipher = createCipheriv(CONTENT_ALGORITHM, key, nonce)\n const ciphertext = Buffer.concat([cipher.update(plaintext), cipher.final()])\n return Buffer.concat([nonce, ciphertext, cipher.getAuthTag()])\n}\n\nexport function decryptBytes(key: Buffer, sealed: Buffer): Buffer {\n if (sealed.length < 12 + 16) throw new Error('Sealed data too short.')\n const nonce = sealed.subarray(0, 12)\n const tag = sealed.subarray(sealed.length - 16)\n const ciphertext = sealed.subarray(12, sealed.length - 16)\n const decipher = createDecipheriv(CONTENT_ALGORITHM, key, nonce)\n decipher.setAuthTag(tag)\n return Buffer.concat([decipher.update(ciphertext), decipher.final()])\n}\n\n/** Wraps the content key for one recipient. */\nexport function wrapContentKey(contentKey: Buffer, recipientId: string, recipientPublicKeyBase64: string): EncryptionRecipient {\n const recipientPublic = Buffer.from(recipientPublicKeyBase64, 'base64')\n const ephemeral = generateKeyPairSync('x25519')\n const ephemeralPublic = rawX25519Public(ephemeral.publicKey)\n\n const kek = deriveWrapKey(ephemeral.privateKey, publicKeyFromRaw(recipientPublic), ephemeralPublic, recipientPublic)\n return {\n id: recipientId,\n publicKey: recipientPublicKeyBase64,\n ephemeralPublicKey: ephemeralPublic.toString('base64'),\n wrappedKey: encryptBytes(kek, contentKey).toString('base64'),\n }\n}\n\n/** Unwraps the content key with a recipient's private key. Returns null when this recipient doesn't match. */\nexport function unwrapContentKey(manifest: EncryptionManifest, recipientPrivateKeyBase64: string): Buffer | null {\n const privateKey = privateKeyFromRaw(Buffer.from(recipientPrivateKeyBase64, 'base64'))\n const ownPublic = rawX25519Public(createPublicKey(privateKey))\n\n for (const recipient of manifest.recipients) {\n if (recipient.publicKey !== ownPublic.toString('base64')) continue\n const ephemeralPublic = Buffer.from(recipient.ephemeralPublicKey, 'base64')\n const kek = deriveWrapKey(privateKey, publicKeyFromRaw(ephemeralPublic), ephemeralPublic, ownPublic)\n try {\n return decryptBytes(kek, Buffer.from(recipient.wrappedKey, 'base64'))\n } catch {\n return null\n }\n }\n return null\n}\n\nfunction deriveWrapKey(privateKey: KeyObject, publicKey: KeyObject, ephemeralPublic: Buffer, recipientPublic: Buffer): Buffer {\n const shared = diffieHellman({ privateKey, publicKey })\n const salt = Buffer.concat([ephemeralPublic, recipientPublic])\n return Buffer.from(hkdfSync('sha256', shared, salt, WRAP_INFO, 32))\n}\n\nfunction rawX25519Public(key: KeyObject): Buffer {\n const jwk = key.export({ format: 'jwk' }) as { x?: string }\n if (!jwk.x) throw new Error('Failed to export X25519 public key.')\n return Buffer.from(jwk.x, 'base64url')\n}\n\nfunction rawX25519Private(key: KeyObject): Buffer {\n const jwk = key.export({ format: 'jwk' }) as { d?: string }\n if (!jwk.d) throw new Error('Failed to export X25519 private key.')\n return Buffer.from(jwk.d, 'base64url')\n}\n\nfunction publicKeyFromRaw(raw: Buffer): KeyObject {\n return createPublicKey({ key: { kty: 'OKP', crv: 'X25519', x: raw.toString('base64url') }, format: 'jwk' })\n}\n\nfunction privateKeyFromRaw(raw: Buffer): KeyObject {\n // PKCS#8 wrapping for X25519 private keys (RFC 8410): fixed prefix || 32-byte key.\n const der = Buffer.concat([Buffer.from('302e020100300506032b656e04220420', 'hex'), raw])\n return createPrivateKey({ key: der, format: 'der', type: 'pkcs8' })\n}\n","import { createHash } from 'node:crypto'\nimport { glob, readFile, realpath, stat } from 'node:fs/promises'\nimport { extname, isAbsolute, join, relative, resolve, sep } from 'node:path'\nimport type { MarketplaceSection } from './manifest.js'\n\nconst MIB = 1024 * 1024\nconst MAX_LOGO_BYTES = MIB\nconst MAX_IMAGE_BYTES = 5 * MIB\nconst MAX_TOTAL_IMAGE_BYTES = 25 * MIB\nconst MAX_MARKDOWN_BYTES = MIB\n\nexport interface CatalogFileReference {\n source: string\n path: string\n mediaType: string\n size: number\n sha256: string\n}\n\nexport interface CatalogImageReference extends CatalogFileReference {\n alt: string\n caption?: string\n}\n\nexport interface CatalogIndex {\n schemaVersion: 1\n logo?: CatalogFileReference\n hero?: CatalogImageReference\n images?: CatalogImageReference[]\n readme?: CatalogFileReference\n changelog?: CatalogFileReference\n assets?: CatalogFileReference[]\n}\n\nexport interface CatalogEntry {\n path: string\n bytes: Buffer\n}\n\nexport interface CatalogBuild {\n index: CatalogIndex\n indexJson: string\n entries: CatalogEntry[]\n}\n\ninterface ResolvedFile {\n source: string\n path: string\n bytes: Buffer\n}\n\ninterface ImageInfo {\n extension: string\n mediaType: string\n}\n\nexport async function buildCatalog(projectDir: string, marketplace: MarketplaceSection): Promise<CatalogBuild> {\n const root = await realpath(projectDir)\n const entries = new Map<string, Buffer>()\n const imageDigests = new Map<string, number>()\n const index: CatalogIndex = { schemaVersion: 1 }\n\n const addImage = async (source: string, label: string, maxBytes: number): Promise<CatalogFileReference> => {\n const file = await resolveDirectFile(root, source, label)\n if (file.bytes.length > maxBytes) {\n throw new Error(`${label} exceeds the ${formatMiB(maxBytes)} MiB limit (${file.bytes.length} bytes).`)\n }\n const image = validateImage(file.bytes, file.path, label)\n const reference = addContentAddressedEntry(file, image, 'assets', entries)\n imageDigests.set(reference.sha256, reference.size)\n return reference\n }\n\n const addMarkdown = async (source: string, label: string): Promise<CatalogFileReference> => {\n const file = await resolveDirectFile(root, source, label)\n if (file.bytes.length > MAX_MARKDOWN_BYTES) {\n throw new Error(`${label} exceeds the 1 MiB limit (${file.bytes.length} bytes).`)\n }\n validateMarkdown(file.bytes, file.path, label)\n return addContentAddressedEntry(file, { extension: '.md', mediaType: 'text/markdown' }, 'docs', entries)\n }\n\n if (marketplace.logo) index.logo = await addImage(marketplace.logo, 'marketplace.logo', MAX_LOGO_BYTES)\n\n if (marketplace.hero) {\n const reference = await addImage(marketplace.hero.source, 'marketplace.hero.source', MAX_IMAGE_BYTES)\n index.hero = { ...reference, alt: marketplace.hero.alt.trim() }\n }\n\n if (marketplace.images?.length) {\n index.images = []\n for (const [position, image] of marketplace.images.entries()) {\n const reference = await addImage(image.source, `marketplace.images[${position}].source`, MAX_IMAGE_BYTES)\n index.images.push({\n ...reference,\n alt: image.alt.trim(),\n ...(image.caption !== undefined ? { caption: image.caption } : {}),\n })\n }\n }\n\n if (marketplace.readme) index.readme = await addMarkdown(marketplace.readme, 'marketplace.readme')\n if (marketplace.changelog) index.changelog = await addMarkdown(marketplace.changelog, 'marketplace.changelog')\n\n if (marketplace.assets?.length) {\n index.assets = []\n const assetFiles = await resolveAssetGlobs(root, marketplace.assets)\n for (const file of assetFiles) {\n if (file.bytes.length > MAX_IMAGE_BYTES) {\n throw new Error(`marketplace.assets matched '${file.source}', which exceeds the 5 MiB per-image limit (${file.bytes.length} bytes).`)\n }\n const image = validateImage(file.bytes, file.path, `marketplace.assets entry '${file.source}'`)\n const reference = addContentAddressedEntry(file, image, 'assets', entries)\n imageDigests.set(reference.sha256, reference.size)\n index.assets.push(reference)\n }\n }\n\n const totalImageBytes = [...imageDigests.values()].reduce((sum, size) => sum + size, 0)\n if (totalImageBytes > MAX_TOTAL_IMAGE_BYTES) {\n throw new Error(`Marketplace image assets exceed the 25 MiB total limit (${totalImageBytes} bytes).`)\n }\n\n const indexJson = `${JSON.stringify(index, null, 2)}\\n`\n return {\n index,\n indexJson,\n entries: [...entries.entries()].sort(([left], [right]) => left.localeCompare(right)).map(([path, bytes]) => ({ path, bytes })),\n }\n}\n\nasync function resolveDirectFile(root: string, source: string, label: string): Promise<ResolvedFile> {\n const normalized = normalizeRelativeReference(source, label)\n return readContainedFile(root, normalized, label)\n}\n\nasync function resolveAssetGlobs(root: string, patterns: string[]): Promise<ResolvedFile[]> {\n const matched = new Set<string>()\n for (const sourcePattern of patterns) {\n const pattern = normalizeRelativeReference(sourcePattern, 'marketplace.assets glob')\n for await (const entry of glob(pattern, { cwd: root })) {\n const normalized = toEntryPath(entry)\n const info = await stat(join(root, normalized)).catch(() => null)\n if (info?.isFile()) matched.add(normalized)\n }\n }\n\n const files: ResolvedFile[] = []\n for (const source of [...matched].sort()) {\n files.push(await readContainedFile(root, source, `marketplace.assets entry '${source}'`))\n }\n return files\n}\n\nasync function readContainedFile(root: string, source: string, label: string): Promise<ResolvedFile> {\n const candidate = resolve(root, source)\n const actual = await realpath(candidate).catch(() => {\n throw new Error(`${label} references missing file '${source}'.`)\n })\n const fromRoot = relative(root, actual)\n if (fromRoot === '' || fromRoot.startsWith(`..${sep}`) || fromRoot === '..' || isAbsolute(fromRoot)) {\n throw new Error(`${label} references '${source}', which escapes the manifest directory.`)\n }\n const info = await stat(actual)\n if (!info.isFile()) throw new Error(`${label} references '${source}', which is not a file.`)\n return { source: toEntryPath(source), path: actual, bytes: await readFile(actual) }\n}\n\nfunction normalizeRelativeReference(source: string, label: string): string {\n const value = source.trim()\n if (\n value.length === 0\n || value.includes('\\0')\n || value.includes('\\\\')\n || isAbsolute(value)\n || /^[a-z]:/i.test(value)\n || value.split('/').includes('..')\n ) {\n throw new Error(`${label} must be relative to the manifest directory and must not escape it (got '${source}').`)\n }\n const normalized = value.replace(/^(?:\\.\\/)+/, '')\n if (normalized.length === 0 || normalized === '.') throw new Error(`${label} must reference a file inside the manifest directory.`)\n return normalized\n}\n\nfunction addContentAddressedEntry(\n file: ResolvedFile,\n type: ImageInfo,\n directory: 'assets' | 'docs',\n entries: Map<string, Buffer>,\n): CatalogFileReference {\n const sha256 = createHash('sha256').update(file.bytes).digest('hex')\n const path = `catalog/${directory}/${sha256}${type.extension}`\n entries.set(path, file.bytes)\n return {\n source: file.source,\n path,\n mediaType: type.mediaType,\n size: file.bytes.length,\n sha256,\n }\n}\n\nfunction validateImage(bytes: Buffer, path: string, label: string): ImageInfo {\n const pngSignature = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])\n if (bytes.length >= 24 && bytes.subarray(0, 8).equals(pngSignature)) {\n if (bytes.readUInt32BE(8) !== 13 || bytes.toString('ascii', 12, 16) !== 'IHDR') throw new Error(`${label} is not a valid PNG file.`)\n return { extension: '.png', mediaType: 'image/png' }\n }\n\n if (bytes.length >= 4 && bytes[0] === 0xff && bytes[1] === 0xd8) {\n if (bytes[bytes.length - 2] !== 0xff || bytes[bytes.length - 1] !== 0xd9) throw new Error(`${label} is not a valid JPEG file.`)\n return { extension: '.jpg', mediaType: 'image/jpeg' }\n }\n\n if (bytes.length >= 12 && bytes.toString('ascii', 0, 4) === 'RIFF' && bytes.toString('ascii', 8, 12) === 'WEBP') {\n const declaredLength = bytes.readUInt32LE(4) + 8\n if (declaredLength !== bytes.length) throw new Error(`${label} has an invalid WebP length.`)\n return { extension: '.webp', mediaType: 'image/webp' }\n }\n\n const extension = extname(path).toLowerCase()\n if (extension === '.svg' || looksLikeSvg(bytes)) {\n validateSvg(bytes, label)\n return { extension: '.svg', mediaType: 'image/svg+xml' }\n }\n\n throw new Error(`${label} must be a valid PNG, JPEG, WebP or SVG image.`)\n}\n\nfunction looksLikeSvg(bytes: Buffer): boolean {\n const prefix = bytes.subarray(0, Math.min(bytes.length, 512)).toString('utf8').replace(/^\\uFEFF/, '').trimStart()\n return prefix.startsWith('<svg') || prefix.startsWith('<?xml') || prefix.startsWith('<!--')\n}\n\nfunction validateSvg(bytes: Buffer, label: string): void {\n let text: string\n try {\n text = new TextDecoder('utf-8', { fatal: true }).decode(bytes)\n } catch {\n throw new Error(`${label} is not valid UTF-8 SVG content.`)\n }\n const trimmed = text.replace(/^\\uFEFF/, '').trim()\n const root = /^(?:<\\?xml[\\s\\S]*?\\?>\\s*)?(?:<!--[\\s\\S]*?-->\\s*)*<svg\\b/i\n if (!root.test(trimmed) || (!/<\\/svg>\\s*$/i.test(trimmed) && !/<svg\\b[\\s\\S]*\\/>\\s*$/i.test(trimmed))) {\n throw new Error(`${label} is not a well-formed SVG document.`)\n }\n if (/&#(?:x[0-9a-f]+|[0-9]+);/i.test(trimmed)) {\n throw new Error(`${label} contains numeric XML character references, which are not allowed in SVG content.`)\n }\n if (\n /<!DOCTYPE|<!ENTITY/i.test(trimmed)\n || /<(?:script|foreignObject|iframe|object|embed|audio|video)\\b/i.test(trimmed)\n || /\\son[a-z]+\\s*=/i.test(trimmed)\n || /(?:javascript|vbscript)\\s*:/i.test(trimmed)\n || /data\\s*:\\s*text\\/html/i.test(trimmed)\n ) {\n throw new Error(`${label} contains active SVG content, which is not allowed.`)\n }\n}\n\nfunction validateMarkdown(bytes: Buffer, _path: string, label: string): void {\n try {\n const text = new TextDecoder('utf-8', { fatal: true }).decode(bytes)\n if (text.includes('\\0')) throw new Error('NUL')\n } catch {\n throw new Error(`${label} must contain valid UTF-8 Markdown text.`)\n }\n}\n\nfunction formatMiB(bytes: number): number {\n return bytes / MIB\n}\n\nfunction toEntryPath(path: string): string {\n return path.split(sep).join('/')\n}\n","import { readFile } from 'node:fs/promises'\nimport { isAbsolute, join, resolve } from 'node:path'\nimport { parse } from 'yaml'\n\nexport interface OverlaySelector {\n /** Maps to <projectDir>/environments/<env>.yaml. */\n env?: string\n /** An explicit overlay file path (wins over env). */\n overlay?: string\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\n/**\n * Deep-merges `overlay` onto `base`: nested plain objects merge recursively, while arrays and\n * scalars in the overlay REPLACE the base value (so e.g. redirect-uris is taken from the overlay,\n * not appended). Never mutates `base`.\n */\nexport function deepMerge<T>(base: T, overlay: unknown): T {\n if (!isPlainObject(base) || !isPlainObject(overlay)) {\n return overlay as T\n }\n const result: Record<string, unknown> = { ...base }\n for (const [key, value] of Object.entries(overlay)) {\n result[key] = key in result ? deepMerge(result[key], value) : value\n }\n return result as T\n}\n\n/** Applies a loaded overlay mapping onto a base manifest object. */\nexport function applyOverlay<T>(base: T, overlay: Record<string, unknown>): T {\n return deepMerge(base, overlay)\n}\n\n/**\n * Resolves which overlay file to merge. `--overlay <path>` (relative to the cwd, or absolute) wins\n * over `--env <name>` (which maps to `<projectDir>/environments/<name>.yaml`). Returns undefined\n * when neither is set.\n */\nexport function resolveOverlayPath(projectDir: string, selector: OverlaySelector): string | undefined {\n if (selector.overlay) {\n return isAbsolute(selector.overlay) ? selector.overlay : resolve(selector.overlay)\n }\n if (selector.env) {\n return join(projectDir, 'environments', `${selector.env}.yaml`)\n }\n return undefined\n}\n\n/** Reads and parses an overlay YAML file, requiring a mapping (an empty file is an empty mapping). */\nexport async function loadOverlay(path: string): Promise<Record<string, unknown>> {\n let text: string\n try {\n text = await readFile(path, 'utf8')\n } catch (error) {\n if ((error as NodeJS.ErrnoException)?.code === 'ENOENT') {\n throw new Error(`Overlay file not found: ${path}`)\n }\n throw error\n }\n const parsed = parse(text)\n if (parsed === null || parsed === undefined) return {}\n if (!isPlainObject(parsed)) {\n throw new Error(`Overlay ${path} must be a YAML mapping (got ${Array.isArray(parsed) ? 'a list' : typeof parsed}).`)\n }\n return parsed\n}\n","import { createHash } from 'node:crypto'\nimport { glob, mkdir, mkdtemp, readFile, rm, stat, writeFile } from 'node:fs/promises'\nimport { tmpdir } from 'node:os'\nimport { dirname, join, relative, resolve, sep } from 'node:path'\nimport * as tar from 'tar'\nimport { stringify } from 'yaml'\nimport { signEnvelope } from '../crypto/dsse.js'\nimport type { SigningKey } from '../crypto/keys.js'\nimport {\n encryptBytes,\n generateContentKey,\n wrapContentKey,\n CONTENT_ALGORITHM,\n WRAP_ALGORITHM,\n type EncryptionManifest,\n} from '../crypto/seal.js'\nimport { buildCatalog, type CatalogIndex } from './catalog.js'\nimport { applyOverlay, loadOverlay, resolveOverlayPath } from './overlay.js'\nimport {\n loadManifest,\n normalizeKind,\n validateLaunchManifestKind,\n validateMarketplaceSection,\n validatePackageName,\n type Manifest,\n} from './manifest.js'\n\nexport interface PackRecipient {\n id: string\n /** Base64 raw X25519 public key. */\n publicKey: string\n}\n\nexport interface PackOptions {\n manifestPath: string\n publisher: string\n /** Overrides packaging.name / metadata.name. */\n name?: string\n outDir?: string\n signingKey?: SigningKey\n /** When set, payload entries are AES-256-GCM encrypted and the content key wrapped per recipient. */\n encryptFor?: PackRecipient[]\n /** Merge environments/<env>.yaml onto the base manifest before packing. */\n env?: string\n /** Merge an explicit overlay file before packing (wins over env). */\n overlay?: string\n /** Override metadata.version (e.g. a CI-derived build number). */\n version?: string\n}\n\nexport interface PackResult {\n outFile: string\n name: string\n publisher: string\n version: string\n kind: string\n files: string[]\n catalog?: CatalogIndex\n catalogFiles: string[]\n treeDigest: string\n signed: boolean\n encrypted: boolean\n}\n\n/**\n * Builds a .vpkg: gzip tarball with manifest.yaml, files/**, optional catalog/**,\n * and .verentis metadata\n * (package.yaml, digests.json, signatures/developer.dsse.json). Layout and digest\n * semantics must match the registry's VpkgArchiveService.\n */\nexport async function pack(options: PackOptions): Promise<PackResult> {\n const manifestPath = resolve(options.manifestPath)\n const projectDir = dirname(manifestPath)\n const base = await loadManifest(manifestPath)\n const overlayPath = resolveOverlayPath(projectDir, { env: options.env, overlay: options.overlay })\n let manifest = overlayPath ? (applyOverlay(base, await loadOverlay(overlayPath)) as typeof base) : base\n let overrideApplied = overlayPath !== undefined\n if (options.version !== undefined) {\n manifest = { ...manifest, metadata: { ...manifest.metadata, version: options.version } }\n overrideApplied = true\n }\n const kind = normalizeKind(manifest.kind)\n const launchKindError = validateLaunchManifestKind(kind, manifest.spec)\n if (launchKindError) throw new Error(`Invalid manifest: ${launchKindError}.`)\n const marketplaceErrors = validateMarketplaceSection(manifest.marketplace)\n if (marketplaceErrors.length > 0) throw new Error(`Invalid marketplace section: ${marketplaceErrors.join(' ')}`)\n\n const name = (options.name ?? manifest.packaging?.name ?? manifest.metadata.name).toLowerCase()\n const publisher = options.publisher.toLowerCase()\n validatePackageName(name, 'package name')\n validatePackageName(publisher, 'publisher name')\n const version = manifest.metadata.version\n\n const payloadFiles = await resolvePayloadFiles(projectDir, manifestPath, manifest)\n const catalog = manifest.marketplace ? await buildCatalog(projectDir, manifest.marketplace) : undefined\n\n const staging = await mkdtemp(join(tmpdir(), 'vpkg-'))\n try {\n // When an overlay or version override is applied, embed the merged manifest (comments are lost);\n // otherwise embed the authored file verbatim so comments survive.\n const manifestText = overrideApplied ? stringify(manifest) : await readFile(manifestPath, 'utf8')\n await writeFile(join(staging, 'manifest.yaml'), manifestText)\n\n const encrypt = (options.encryptFor?.length ?? 0) > 0\n const contentKey = encrypt ? generateContentKey() : null\n\n const digests: Record<string, string> = {\n 'manifest.yaml': sha256Hex(Buffer.from(manifestText, 'utf8')),\n }\n\n for (const file of payloadFiles) {\n const sourcePath = join(projectDir, file)\n const entryName = `files/${toEntryPath(file)}`\n const targetPath = join(staging, 'files', file)\n await mkdir(dirname(targetPath), { recursive: true })\n\n // Encrypted packages seal every payload entry; digests cover the sealed bytes so\n // registry integrity + signing are unchanged.\n const bytes = contentKey ? encryptBytes(contentKey, await readFile(sourcePath)) : await readFile(sourcePath)\n await writeFile(targetPath, bytes)\n digests[entryName] = sha256Hex(bytes)\n }\n\n if (catalog) {\n for (const entry of catalog.entries) {\n const targetPath = join(staging, entry.path)\n await mkdir(dirname(targetPath), { recursive: true })\n await writeFile(targetPath, entry.bytes)\n digests[entry.path] = sha256Hex(entry.bytes)\n }\n await mkdir(join(staging, 'catalog'), { recursive: true })\n await writeFile(join(staging, 'catalog', 'index.json'), catalog.indexJson)\n digests['catalog/index.json'] = sha256Hex(Buffer.from(catalog.indexJson, 'utf8'))\n }\n\n await mkdir(join(staging, '.verentis', 'signatures'), { recursive: true })\n\n if (contentKey) {\n const encryption: EncryptionManifest = {\n algorithm: CONTENT_ALGORITHM,\n keyWrapping: WRAP_ALGORITHM,\n recipients: options.encryptFor!.map((r) => wrapContentKey(contentKey, r.id, r.publicKey)),\n }\n await writeFile(join(staging, '.verentis', 'encryption.json'), JSON.stringify(encryption, null, 2))\n }\n\n const digestsJson = JSON.stringify({ algorithm: 'sha256', entries: digests }, null, 2)\n await writeFile(join(staging, '.verentis', 'digests.json'), digestsJson)\n\n const packageYaml = [\n `name: ${name}`,\n `publisher: ${publisher}`,\n `version: ${version}`,\n `kind: ${kind}`,\n ...(manifest.metadata['display-name'] ? [`display-name: ${JSON.stringify(manifest.metadata['display-name'])}`] : []),\n '',\n ].join('\\n')\n await writeFile(join(staging, '.verentis', 'package.yaml'), packageYaml)\n\n let signed = false\n if (options.signingKey) {\n const envelope = signEnvelope(digestsJson, options.signingKey)\n await writeFile(join(staging, '.verentis', 'signatures', 'developer.dsse.json'), JSON.stringify(envelope, null, 2))\n signed = true\n }\n\n const outDir = resolve(options.outDir ?? projectDir)\n await mkdir(outDir, { recursive: true })\n const outFile = join(outDir, `${name}-${version}.vpkg`)\n\n const entries = [\n 'manifest.yaml',\n '.verentis/package.yaml',\n '.verentis/digests.json',\n ...(contentKey ? ['.verentis/encryption.json'] : []),\n ...(signed ? ['.verentis/signatures/developer.dsse.json'] : []),\n ...payloadFiles.map((file) => `files/${toEntryPath(file)}`),\n ...(catalog ? ['catalog/index.json', ...catalog.entries.map((entry) => entry.path)] : []),\n ]\n await tar.create({ gzip: true, file: outFile, cwd: staging, portable: true, mtime: new Date(0) }, entries)\n\n return {\n outFile,\n name,\n publisher,\n version,\n kind,\n files: payloadFiles.map(toEntryPath),\n catalog: catalog?.index,\n catalogFiles: catalog ? ['index.json', ...catalog.entries.map((entry) => entry.path.replace(/^catalog\\//, ''))] : [],\n treeDigest: sha256Hex(Buffer.from(digestsJson, 'utf8')),\n signed,\n encrypted: encrypt,\n }\n } finally {\n await rm(staging, { recursive: true, force: true })\n }\n}\n\nasync function resolvePayloadFiles(projectDir: string, manifestPath: string, manifest: Manifest): Promise<string[]> {\n const includes = manifest.packaging?.files ?? defaultIncludes(manifest)\n const excludes = manifest.packaging?.exclude ?? []\n\n const matched = new Set<string>()\n for (const pattern of includes) {\n for await (const entry of glob(pattern, { cwd: projectDir, exclude: excludes })) {\n const abs = join(projectDir, entry)\n if (!(await stat(abs)).isFile()) continue\n if (abs === manifestPath) continue\n const rel = relative(projectDir, abs)\n if (rel.startsWith('..')) throw new Error(`Packaging glob '${pattern}' matched '${rel}' outside the project directory.`)\n matched.add(rel)\n }\n }\n return [...matched].sort()\n}\n\nfunction defaultIncludes(manifest: Manifest): string[] {\n // Without an explicit packaging.files list, pull in every file the manifest references:\n // schema `source:` paths (the common Application case) and every `spec.install[].from` glob\n // (apps that place files into the workspace VFS). Engines/bundles without either must declare\n // packaging.files.\n const sources = new Set<string>()\n collectSchemaSources((manifest as { spec?: unknown }).spec, sources)\n collectInstallSources(manifest, sources)\n if (sources.size === 0) return []\n return [...sources]\n}\n\n/** Collects `spec.install[].from` globs so a file-collection app packs its payload by default. */\nfunction collectInstallSources(manifest: Manifest, sources: Set<string>): void {\n const spec = (manifest as { spec?: { install?: unknown } }).spec\n const install = spec?.install\n if (!Array.isArray(install)) return\n for (const directive of install) {\n const from = (directive as { from?: unknown })?.from\n if (typeof from === 'string' && from.length > 0 && !from.startsWith('/')) {\n sources.add(from)\n }\n }\n}\n\nfunction collectSchemaSources(node: unknown, sources: Set<string>): void {\n if (Array.isArray(node)) {\n for (const item of node) collectSchemaSources(item, sources)\n return\n }\n if (node && typeof node === 'object') {\n for (const [key, value] of Object.entries(node as Record<string, unknown>)) {\n if (key === 'source' && typeof value === 'string' && value.startsWith('./')) {\n sources.add(value.slice(2))\n } else {\n collectSchemaSources(value, sources)\n }\n }\n }\n}\n\nfunction toEntryPath(file: string): string {\n return file.split(sep).join('/')\n}\n\nfunction sha256Hex(data: Buffer): string {\n return createHash('sha256').update(data).digest('hex')\n}\n","import { createHash } from 'node:crypto'\nimport { glob, mkdtemp, readFile, rm } from 'node:fs/promises'\nimport { tmpdir } from 'node:os'\nimport { join, sep } from 'node:path'\nimport * as tar from 'tar'\nimport { parse } from 'yaml'\nimport type { DsseEnvelope } from '../crypto/dsse.js'\nimport type { EncryptionManifest } from '../crypto/seal.js'\nimport type { CatalogIndex } from './catalog.js'\n\nexport interface VpkgContents {\n metadata: { name: string; publisher: string; version: string; kind: string; 'display-name'?: string }\n manifestYaml: string\n digestsJson: string\n treeDigest: string\n developerSignature?: DsseEnvelope\n marketplaceSignature?: DsseEnvelope\n encryption?: EncryptionManifest\n files: string[]\n catalog?: CatalogIndex\n catalogFiles: string[]\n /** Digest problems discovered while reading ([] = digest-clean). */\n digestErrors: string[]\n}\n\n/** Extracts and digest-checks a .vpkg (mirrors the registry's read/validate pass). */\nexport async function readVpkg(vpkgPath: string): Promise<VpkgContents> {\n const staging = await mkdtemp(join(tmpdir(), 'vpkg-read-'))\n try {\n await tar.extract({ file: vpkgPath, cwd: staging })\n\n const manifestYaml = await readFile(join(staging, 'manifest.yaml'), 'utf8').catch(() => {\n throw new Error('Invalid package: missing manifest.yaml.')\n })\n const packageYaml = await readFile(join(staging, '.verentis', 'package.yaml'), 'utf8').catch(() => {\n throw new Error('Invalid package: missing .verentis/package.yaml.')\n })\n const digestsJson = await readFile(join(staging, '.verentis', 'digests.json'), 'utf8').catch(() => {\n throw new Error('Invalid package: missing .verentis/digests.json.')\n })\n\n const metadata = parse(packageYaml) as VpkgContents['metadata']\n const declared = JSON.parse(digestsJson) as { entries?: Record<string, string> }\n\n const files = await listFiles(staging, 'files/**/*')\n const catalogFiles = await listFiles(staging, 'catalog/**/*')\n const contentFiles = [...files, ...catalogFiles]\n\n const digestErrors: string[] = []\n const entries = declared.entries ?? {}\n const manifestDigest = createHash('sha256').update(manifestYaml, 'utf8').digest('hex')\n if (!entries['manifest.yaml']) {\n digestErrors.push(\"Entry 'manifest.yaml' is not covered by digests.json.\")\n } else if (entries['manifest.yaml'].toLowerCase() !== manifestDigest) {\n digestErrors.push('Digest mismatch for manifest.yaml.')\n }\n for (const file of contentFiles) {\n const declaredDigest = entries[file]\n if (!declaredDigest) {\n digestErrors.push(`Entry '${file}' is not covered by digests.json.`)\n continue\n }\n const actual = createHash('sha256').update(await readFile(join(staging, file))).digest('hex')\n if (actual !== declaredDigest.toLowerCase()) digestErrors.push(`Digest mismatch for '${file}'.`)\n }\n for (const declaredPath of Object.keys(entries)) {\n if (declaredPath !== 'manifest.yaml' && !contentFiles.includes(declaredPath)) {\n digestErrors.push(`Digest declared for missing entry '${declaredPath}'.`)\n }\n }\n\n let catalog: CatalogIndex | undefined\n if (catalogFiles.includes('catalog/index.json')) {\n try {\n catalog = JSON.parse(await readFile(join(staging, 'catalog', 'index.json'), 'utf8')) as CatalogIndex\n if (catalog.schemaVersion !== 1) digestErrors.push(`Unsupported catalog schema version '${String(catalog.schemaVersion)}'.`)\n } catch {\n digestErrors.push('Invalid catalog/index.json.')\n }\n } else if (catalogFiles.length > 0) {\n digestErrors.push('Catalog entries are present but catalog/index.json is missing.')\n }\n\n const developerSignature = await readJsonIfExists<DsseEnvelope>(join(staging, '.verentis', 'signatures', 'developer.dsse.json'))\n const marketplaceSignature = await readJsonIfExists<DsseEnvelope>(join(staging, '.verentis', 'signatures', 'marketplace.dsse.json'))\n const encryption = await readJsonIfExists<EncryptionManifest>(join(staging, '.verentis', 'encryption.json'))\n\n return {\n metadata,\n manifestYaml,\n digestsJson,\n treeDigest: createHash('sha256').update(digestsJson, 'utf8').digest('hex'),\n developerSignature: developerSignature ?? undefined,\n marketplaceSignature: marketplaceSignature ?? undefined,\n encryption: encryption ?? undefined,\n files: files.map((f) => f.replace(/^files\\//, '')),\n catalog,\n catalogFiles: catalogFiles.map((f) => f.replace(/^catalog\\//, '')),\n digestErrors,\n }\n\n } finally {\n await rm(staging, { recursive: true, force: true })\n }\n}\n\nasync function listFiles(root: string, pattern: string): Promise<string[]> {\n const files: string[] = []\n for await (const entry of glob(pattern, { cwd: root })) {\n const abs = join(root, entry)\n const info = await readFile(abs).catch(() => null)\n if (info !== null) files.push(entry.split(sep).join('/'))\n }\n return files.sort()\n}\n\nasync function readJsonIfExists<T>(path: string): Promise<T | null> {\n try {\n return JSON.parse(await readFile(path, 'utf8')) as T\n } catch {\n return null\n }\n}\n","import { resolve } from 'node:path'\nimport { Command } from 'commander'\nimport { loadConfig } from '../config.js'\nimport { loadKey } from '../crypto/keys.js'\nimport { verifyEnvelope } from '../crypto/dsse.js'\nimport { generateSealingKeyPair } from '../crypto/seal.js'\nimport { findManifest, loadManifest } from '../vpkg/manifest.js'\nimport { pack, type PackRecipient } from '../vpkg/pack.js'\nimport { readVpkg } from '../vpkg/read.js'\n\nexport function registerPack(program: Command): void {\n program\n .command('pack [dir]')\n .description('Build a signed .vpkg from a project directory')\n .option('--manifest <path>', 'manifest path (default: auto-detected in the project directory)')\n .option('--publisher <name>', 'publisher name (default: packaging.publisher in the manifest)')\n .option('--name <name>', 'override the package name')\n .option('--env <name>', 'merge a per-environment overlay (environments/<name>.yaml) before packing')\n .option('--overlay <path>', 'merge an explicit overlay file before packing (wins over --env)')\n .option('--set-version <version>', 'override metadata.version (e.g. a CI-derived build number)')\n .option('--out <dir>', 'output directory (default: the project directory)')\n .option('--key <name>', 'signing key name (default: the configured default key)')\n .option('--no-sign', 'produce an unsigned package')\n .option('--encrypt', 'seal the payload (AES-256-GCM); requires at least one recipient')\n .option('--recipient <id=base64key...>', 'additional X25519 recipient (repeatable)', collectRecipients, [] as PackRecipient[])\n .action(async (dir: string | undefined, options: { manifest?: string; publisher?: string; name?: string; env?: string; overlay?: string; setVersion?: string; out?: string; key?: string; sign: boolean; encrypt?: boolean; recipient: PackRecipient[] }) => {\n const projectDir = resolve(dir ?? '.')\n const manifestPath = options.manifest ? resolve(options.manifest) : await findManifest(projectDir)\n const manifest = await loadManifest(manifestPath)\n\n const publisher = options.publisher ?? manifest.packaging?.publisher\n if (!publisher) {\n throw new Error('No publisher: set packaging.publisher in the manifest or pass --publisher.')\n }\n\n const config = await loadConfig()\n\n let signingKey\n if (options.sign) {\n const keyName = options.key ?? config.defaultKey\n if (keyName) {\n signingKey = await loadKey(keyName)\n } else {\n console.warn('Warning: no signing key configured — producing an UNSIGNED package. Run `verentis keygen` to create one.')\n }\n }\n\n let encryptFor: PackRecipient[] | undefined\n if (options.encrypt || manifest.packaging?.encryption === 'required') {\n encryptFor = [...options.recipient]\n const platformKey = process.env.VERENTIS_SEALING_KEY ?? config.sealingPublicKey\n if (platformKey && !encryptFor.some((r) => r.id === 'platform')) {\n // The platform recipient lets Verentis.Node serve member reads from the sealed package.\n encryptFor.unshift({ id: 'platform', publicKey: platformKey })\n }\n if (encryptFor.length === 0) {\n throw new Error(\n 'Encryption requires at least one recipient. Configure the platform sealing key '\n + '(`verentis login --sealing-key <base64>` / VERENTIS_SEALING_KEY) or pass --recipient id=key.',\n )\n }\n }\n\n const result = await pack({\n manifestPath,\n publisher,\n name: options.name,\n env: options.env,\n overlay: options.overlay,\n version: options.setVersion,\n outDir: options.out,\n signingKey,\n encryptFor,\n })\n\n console.log(`Packed ${result.publisher}/${result.name}@${result.version} (${result.kind})`)\n console.log(` ${result.outFile}`)\n console.log(` ${result.files.length} payload file(s), tree digest ${result.treeDigest.slice(0, 16)}…, ${result.signed ? 'signed' : 'UNSIGNED'}${result.encrypted ? ', ENCRYPTED' : ''}`)\n if (result.catalog) console.log(` ${result.catalogFiles.length} plaintext catalog file(s)`)\n })\n\n program\n .command('seal-keygen')\n .description('Generate an X25519 sealing keypair (for platform escrow or custom recipients)')\n .action(() => {\n const pair = generateSealingKeyPair()\n console.log(`public: ${pair.publicKey}`)\n console.log(`private: ${pair.privateKey}`)\n console.log('Distribute the PUBLIC key to packers; keep the private key in the consumer (e.g. Node Packaging:SealingPrivateKey).')\n })\n\n program\n .command('verify <vpkg>')\n .description('Verify the digests (and, when possible, the developer signature) of a .vpkg')\n .option('--key <name>', 'verify the developer signature against a local key')\n .action(async (vpkgPath: string, options: { key?: string }) => {\n const contents = await readVpkg(resolve(vpkgPath))\n console.log(`${contents.metadata.publisher}/${contents.metadata.name}@${contents.metadata.version} (${contents.metadata.kind})`)\n console.log(` payload files: ${contents.files.length}, catalog files: ${contents.catalogFiles.length}, tree digest ${contents.treeDigest.slice(0, 16)}…`)\n if (contents.catalog) {\n const docs = Number(!!contents.catalog.readme) + Number(!!contents.catalog.changelog)\n console.log(` catalog schema v${contents.catalog.schemaVersion}: ${contents.catalog.images?.length ?? 0} gallery image(s), ${docs} document(s)${contents.catalog.logo ? ', logo' : ''}${contents.catalog.hero ? ', hero' : ''}`)\n }\n if (contents.encryption) {\n console.log(` 🔒 encrypted (${contents.encryption.algorithm}); recipients: ${contents.encryption.recipients.map((r) => r.id).join(', ')}`)\n }\n\n if (contents.digestErrors.length > 0) {\n for (const error of contents.digestErrors) console.error(` ✗ ${error}`)\n process.exitCode = 1\n } else {\n console.log(' ✓ digests verified')\n }\n\n if (contents.developerSignature) {\n if (options.key) {\n const key = await loadKey(options.key)\n const kid = verifyEnvelope(contents.developerSignature, contents.digestsJson, { [key.kid]: key.publicKey })\n if (kid) {\n console.log(` ✓ developer signature verified (kid ${kid})`)\n } else {\n console.error(' ✗ developer signature does NOT verify with that key')\n process.exitCode = 1\n }\n } else {\n console.log(` • developer signature present (keyid ${contents.developerSignature.signatures[0]?.keyid ?? '?'}) — pass --key to verify locally`)\n }\n } else {\n console.log(' • unsigned')\n }\n\n if (contents.marketplaceSignature) console.log(' ✓ marketplace countersignature present')\n })\n}\n\nfunction collectRecipients(value: string, previous: PackRecipient[]): PackRecipient[] {\n const eq = value.indexOf('=')\n if (eq <= 0) throw new Error(`Invalid --recipient '${value}' — expected id=base64PublicKey.`)\n return [...previous, { id: value.slice(0, eq), publicKey: value.slice(eq + 1) }]\n}\n","import { Command } from 'commander'\nimport { createApiClient } from '../http.js'\nimport { marketplace } from '../api/catalog.js'\nimport { call, pageItems, pagingQuery, type PagedResult, type PagingFlags } from '../api/client.js'\nimport { requireMyPublisher, resolvePackageRef } from '../registry.js'\nimport { output, outputRecord, printJson } from '../output.js'\n\nexport function registerPackage(program: Command): void {\n const pkgCmd = program.command('package').description('Manage marketplace packages')\n\n pkgCmd\n .command('list')\n .description(\"List your publisher's packages\")\n .option('--json', 'output JSON')\n .action(async (options: { json?: boolean }) => {\n const api = await createApiClient()\n const publisher = await requireMyPublisher(api)\n const page = await call<PagedResult<Record<string, unknown>>>(api, marketplace.listPublisherPackages, {\n params: { publisherId: publisher.id },\n query: { PageNo: 1, PageSize: 100 },\n })\n output(pageItems(page), { name: 'Name', kind: 'Kind', visibility: 'Visibility', latestPublishedVersion: 'Latest', id: 'Id' }, options, page)\n })\n\n pkgCmd\n .command('info <ref>')\n .description(\"Show package details (ref: 'name' or 'publisher/name')\")\n .option('--json', 'output JSON')\n .action(async (ref: string, options: { json?: boolean }) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n const detail = await call<Record<string, unknown>>(api, marketplace.getPackage, { params: { id: pkg.id } })\n outputRecord(detail, options)\n })\n\n pkgCmd\n .command('versions <ref>')\n .description('List versions of a package')\n .option('--json', 'output JSON')\n .action(async (ref: string, options: { json?: boolean }) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n const page = await call<PagedResult<Record<string, unknown>>>(api, marketplace.listVersions, {\n params: { packageId: pkg.id },\n query: { PageNo: 1, PageSize: 100 },\n })\n output(pageItems(page), { version: 'Version', status: 'Status', sizeBytes: 'Size', hasMarketplaceSignature: 'Countersigned', id: 'Id' }, options, page)\n })\n\n pkgCmd\n .command('update <ref>')\n .description('Update package metadata')\n .option('--display-name <displayName>')\n .option('--description <description>')\n .option('--icon <icon>')\n .option('--categories <category...>', 'category list (replaces existing)')\n .action(async (ref: string, options: { displayName?: string; description?: string; icon?: string; categories?: string[] }) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n const current = await call<Record<string, unknown>>(api, marketplace.getPackage, { params: { id: pkg.id } })\n await call(api, marketplace.updatePackage, {\n params: { id: pkg.id },\n body: {\n id: pkg.id,\n displayName: options.displayName ?? current.displayName,\n description: options.description ?? current.description ?? null,\n icon: options.icon ?? current.icon ?? null,\n categories: options.categories ?? current.categories ?? [],\n },\n })\n console.log(`Package ${ref} updated.`)\n })\n\n pkgCmd\n .command('deprecate <ref>')\n .description('Mark a package as deprecated (optionally with a successor)')\n .option('--message <message>', 'deprecation message shown in the catalog')\n .option('--replacement <packageId>', 'suggested replacement package id')\n .action(async (ref: string, options: { message?: string; replacement?: string }) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n await call(api, marketplace.deprecatePackage, {\n params: { id: pkg.id },\n body: { id: pkg.id, message: options.message ?? null, replacementPackageId: options.replacement ?? null },\n })\n console.log(`Package ${ref} deprecated.`)\n })\n\n pkgCmd\n .command('undeprecate <ref>')\n .description('Remove the deprecation flag from a package')\n .action(async (ref: string) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n await call(api, marketplace.undeprecatePackage, { params: { id: pkg.id } })\n console.log(`Package ${ref} restored.`)\n })\n\n pkgCmd\n .command('archive <ref>')\n .description('Archive (soft-delete) a package — it disappears from the catalog')\n .action(async (ref: string) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n await call(api, marketplace.archivePackage, { params: { id: pkg.id } })\n console.log(`Package ${ref} archived.`)\n })\n\n pkgCmd\n .command('stats <ref>')\n .description('Show download/install statistics for a package')\n .action(async (ref: string) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n const stats = await call<unknown>(api, marketplace.getPackageStats, { params: { packageId: pkg.id } })\n printJson(stats)\n })\n\n const visibilityCmd = pkgCmd.command('visibility').description('Manage private-package visibility')\n\n visibilityCmd\n .command('set <ref> <visibility>')\n .description('Set catalog visibility: Public | Private')\n .action(async (ref: string, visibility: string) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n await call(api, marketplace.setPackageVisibility, { params: { id: pkg.id }, body: { id: pkg.id, visibility } })\n console.log(`Package ${ref} visibility → ${visibility}.`)\n })\n\n visibilityCmd\n .command('grants <ref>')\n .description('List visibility grants of a private package')\n .option('--json', 'output JSON')\n .action(async (ref: string, options: { json?: boolean }) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n const grants = await call<Record<string, unknown>[]>(api, marketplace.listVisibilityGrants, { params: { packageId: pkg.id } })\n output(grants ?? [], { granteeType: 'Type', granteeId: 'Grantee', id: 'GrantId' }, options, grants)\n })\n\n visibilityCmd\n .command('grant <ref> <granteeId>')\n .description('Grant a workspace/account visibility of a private package')\n .option('--type <granteeType>', 'Workspace | Account', 'Workspace')\n .action(async (ref: string, granteeId: string, options: { type: string }) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n await call(api, marketplace.grantVisibility, {\n params: { packageId: pkg.id },\n body: { packageId: pkg.id, granteeType: options.type, granteeId },\n })\n console.log(`Visibility of ${ref} granted to ${options.type} ${granteeId}.`)\n })\n\n visibilityCmd\n .command('revoke <ref> <grantId>')\n .description('Revoke a visibility grant')\n .action(async (ref: string, grantId: string) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n await call(api, marketplace.revokeVisibility, { params: { packageId: pkg.id, grantId } })\n console.log(`Visibility grant ${grantId} revoked.`)\n })\n\n program\n .command('installs')\n .description('List package installations in a workspace')\n .option('--workspace <workspaceId>')\n .option('--page <n>')\n .option('--page-size <n>')\n .option('--json', 'output JSON')\n .action(async (options: PagingFlags & { workspace?: string; json?: boolean }) => {\n const api = await createApiClient()\n const page = await call<PagedResult<Record<string, unknown>>>(api, marketplace.listInstallations, {\n query: { workspaceId: options.workspace, ...pagingQuery(options) },\n })\n output(pageItems(page), { packageName: 'Package', version: 'Version', status: 'Status', installPath: 'Path', id: 'Id' }, options, page)\n })\n}\n","import { readFile, stat } from 'node:fs/promises'\nimport { resolve } from 'node:path'\n\nconst MAX_LOGO_BYTES = 1024 * 1024\nconst PNG_SIGNATURE = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])\n\nexport interface PublisherLogo {\n path: string\n bytes: Buffer\n contentType: 'image/png' | 'image/jpeg' | 'image/webp' | 'image/svg+xml'\n}\n\nexport async function readPublisherLogo(path: string): Promise<PublisherLogo> {\n const absolutePath = resolve(path)\n const info = await stat(absolutePath).catch(() => {\n throw new Error(`Publisher logo '${absolutePath}' does not exist.`)\n })\n if (!info.isFile()) throw new Error(`Publisher logo '${absolutePath}' is not a file.`)\n if (info.size > MAX_LOGO_BYTES) {\n throw new Error(`Publisher logo exceeds the 1 MiB limit (${info.size} bytes).`)\n }\n\n const bytes = await readFile(absolutePath)\n return { path: absolutePath, bytes, contentType: detectPublisherLogoContentType(bytes) }\n}\n\nexport function detectPublisherLogoContentType(bytes: Buffer): PublisherLogo['contentType'] {\n if (\n bytes.length >= 24\n && bytes.subarray(0, 8).equals(PNG_SIGNATURE)\n && bytes.readUInt32BE(8) === 13\n && bytes.toString('ascii', 12, 16) === 'IHDR'\n ) {\n return 'image/png'\n }\n\n if (\n bytes.length >= 4\n && bytes[0] === 0xff\n && bytes[1] === 0xd8\n && bytes[bytes.length - 2] === 0xff\n && bytes[bytes.length - 1] === 0xd9\n ) {\n return 'image/jpeg'\n }\n\n if (\n bytes.length >= 12\n && bytes.toString('ascii', 0, 4) === 'RIFF'\n && bytes.toString('ascii', 8, 12) === 'WEBP'\n && bytes.readUInt32LE(4) + 8 === bytes.length\n ) {\n return 'image/webp'\n }\n\n let text: string\n try {\n text = new TextDecoder('utf-8', { fatal: true }).decode(bytes).replace(/^\\uFEFF/, '').trim()\n } catch {\n throw unsupportedLogoError()\n }\n const root = /^(?:<\\?xml[\\s\\S]*?\\?>\\s*)?(?:<!--[\\s\\S]*?-->\\s*)*<svg\\b/i\n const closed = /<\\/svg>\\s*$/i.test(text) || /<svg\\b[\\s\\S]*\\/>\\s*$/i.test(text)\n if (!root.test(text) || !closed) throw unsupportedLogoError()\n if (/&#(?:x[0-9a-f]+|[0-9]+);/i.test(text)) {\n throw new Error('Publisher logo SVG contains numeric XML character references, which are not allowed.')\n }\n if (\n /<!DOCTYPE|<!ENTITY/i.test(text)\n || /<(?:script|foreignObject|iframe|object|embed|audio|video)\\b/i.test(text)\n || /\\son[a-z]+\\s*=/i.test(text)\n || /(?:javascript|vbscript)\\s*:/i.test(text)\n || /data\\s*:\\s*text\\/html/i.test(text)\n ) {\n throw new Error('Publisher logo SVG contains active content, which is not allowed.')\n }\n return 'image/svg+xml'\n}\n\nfunction unsupportedLogoError(): Error {\n return new Error('Publisher logo must be a valid PNG, JPEG, WebP or SVG image.')\n}\n","import { Command } from 'commander'\nimport { createApiClient, type ApiClient } from '../http.js'\nimport { marketplace } from '../api/catalog.js'\nimport { call, callRaw } from '../api/client.js'\nimport { getMyPublisher, requireMyPublisher } from '../registry.js'\nimport { readPublisherLogo } from '../publisher/logo.js'\n\ninterface PublisherCreateOptions {\n name: string\n displayName: string\n description?: string\n website?: string\n email?: string\n logo?: string\n}\n\ninterface PublisherUpdateOptions {\n displayName?: string\n description?: string\n website?: string\n email?: string\n}\n\nexport function registerPublisher(program: Command): void {\n const publisherCmd = program.command('publisher').description('Manage your publisher profile')\n\n publisherCmd\n .command('create')\n .description('Onboard your account as a marketplace publisher')\n .requiredOption('--name <name>', 'URL-safe publisher name (e.g. acme)')\n .requiredOption('--display-name <displayName>', 'human-readable publisher name')\n .option('--description <description>')\n .option('--website <url>')\n .option('--email <email>')\n .option('--logo <file>', 'PNG, JPEG, WebP or SVG logo (maximum 1 MiB)')\n .action(async (options: PublisherCreateOptions) => {\n const api = await createApiClient()\n const existing = await getMyPublisher(api)\n if (existing) {\n console.log(`This account already has publisher '${existing.name}'.`)\n return\n }\n const id = await call<string>(api, marketplace.createPublisher, {\n body: {\n name: options.name,\n displayName: options.displayName,\n description: options.description ?? null,\n websiteUrl: options.website ?? null,\n contactEmail: options.email ?? null,\n },\n })\n console.log(`Publisher '${options.name}' created (${id}).`)\n if (options.logo) {\n await uploadPublisherLogo(api, id, options.logo)\n console.log(`Publisher logo uploaded from ${options.logo}.`)\n }\n console.log('Next: generate and register a signing key with `verentis keygen`.')\n })\n\n publisherCmd\n .command('update')\n .description('Update your publisher profile')\n .option('--display-name <displayName>')\n .option('--description <description>')\n .option('--website <url>')\n .option('--email <email>')\n .action(async (options: PublisherUpdateOptions) => {\n if (Object.values(options).every((value) => value === undefined)) {\n throw new Error('No publisher fields supplied. Pass --display-name, --description, --website or --email.')\n }\n const api = await createApiClient()\n const current = await requireMyPublisher(api)\n await call(api, marketplace.updatePublisher, {\n params: { id: current.id },\n body: {\n id: current.id,\n displayName: options.displayName ?? current.displayName,\n description: options.description ?? current.description ?? null,\n websiteUrl: options.website ?? current.websiteUrl ?? null,\n contactEmail: options.email ?? current.contactEmail ?? null,\n },\n })\n console.log(`Publisher '${current.name}' updated.`)\n })\n\n const logoCmd = publisherCmd.command('logo').description('Manage your publisher logo')\n\n logoCmd\n .command('set <file>')\n .description('Upload a PNG, JPEG, WebP or SVG publisher logo (maximum 1 MiB)')\n .action(async (file: string) => {\n const api = await createApiClient()\n const publisher = await requireMyPublisher(api)\n await uploadPublisherLogo(api, publisher.id, file)\n console.log(`Publisher logo uploaded from ${file}.`)\n })\n\n logoCmd\n .command('remove')\n .description('Remove your publisher logo')\n .action(async () => {\n const api = await createApiClient()\n const publisher = await requireMyPublisher(api)\n await call(api, marketplace.removePublisherLogo, { params: { id: publisher.id } })\n console.log('Publisher logo removed.')\n })\n}\n\nexport async function uploadPublisherLogo(api: ApiClient, publisherId: string, path: string): Promise<void> {\n const logo = await readPublisherLogo(path)\n await callRaw(api, marketplace.setPublisherLogo, {\n params: { id: publisherId },\n rawBody: new Blob([new Uint8Array(logo.bytes)], { type: logo.contentType }),\n contentType: logo.contentType,\n })\n}\n","import { createWriteStream } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { Readable } from 'node:stream'\nimport { pipeline } from 'node:stream/promises'\nimport { Command } from 'commander'\nimport { createApiClient, SCOPES } from '../http.js'\nimport { readVpkg } from '../vpkg/read.js'\nimport {\n createPackage,\n downloadTarball,\n findPackageByName,\n requireMyPublisher,\n resolvePackageRef,\n uploadVersion,\n yankVersion,\n} from '../registry.js'\nimport { loadConfig } from '../config.js'\n\nexport function registerRegistry(program: Command): void {\n program\n .command('publish <vpkg>')\n .description('Upload a packed .vpkg to the marketplace registry (creates the package on first publish)')\n .option('--visibility <visibility>', 'catalog visibility for a newly created package: Public | Private', 'Private')\n .action(async (vpkgPath: string, options: { visibility: string }) => {\n const contents = await readVpkg(resolve(vpkgPath))\n if (contents.digestErrors.length > 0) {\n throw new Error(`Refusing to publish: package failed digest verification:\\n ${contents.digestErrors.join('\\n ')}`)\n }\n\n const api = await createApiClient()\n const publisher = await requireMyPublisher(api)\n if (publisher.name !== contents.metadata.publisher) {\n throw new Error(`Package declares publisher '${contents.metadata.publisher}' but you are '${publisher.name}'.`)\n }\n\n let pkg = await findPackageByName(api, publisher.id, contents.metadata.name)\n if (!pkg) {\n const visibility = options.visibility === 'Public' ? 'Public' : 'Private'\n const id = await createPackage(api, {\n publisherId: publisher.id,\n name: contents.metadata.name,\n displayName: contents.metadata['display-name'] ?? contents.metadata.name,\n kind: contents.metadata.kind,\n visibility,\n })\n console.log(`Created package ${publisher.name}/${contents.metadata.name} (${visibility.toLowerCase()}).`)\n pkg = { id } as NonNullable<typeof pkg>\n }\n\n const version = await uploadVersion(api, pkg.id, resolve(vpkgPath))\n console.log(`Published ${publisher.name}/${contents.metadata.name}@${version.version} → ${version.status}`)\n if (version.status === 'Submitted') {\n console.log('The version is queued for moderation; it becomes installable once approved and published.')\n }\n })\n\n program\n .command('yank <ref> <version>')\n .description(\"Withdraw a published version from the catalog (ref: 'name' or 'publisher/name')\")\n .action(async (ref: string, version: string) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n await yankVersion(api, pkg.id, version)\n console.log(`Yanked ${ref}@${version}.`)\n })\n\n program\n .command('download <ref> [version]')\n .description('Download a package tarball (defaults to the latest published version)')\n .option('--out <path>', 'output file path')\n .option('--workspace <workspaceId>', 'workspace context for visibility checks')\n .action(async (ref: string, version: string | undefined, options: { out?: string; workspace?: string }) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n const effectiveVersion = version ?? pkg.latestPublishedVersion ?? undefined\n if (!effectiveVersion) throw new Error(`Package '${ref}' has no published version.`)\n\n const res = await downloadTarball(api, pkg.id, effectiveVersion, options.workspace)\n const outPath = resolve(options.out ?? `${pkg.name}-${effectiveVersion}.vpkg`)\n if (!res.body) throw new Error('Empty download response.')\n await pipeline(Readable.fromWeb(res.body as import('node:stream/web').ReadableStream), createWriteStream(outPath))\n console.log(`Downloaded ${ref}@${effectiveVersion} → ${outPath}`)\n })\n\n program\n .command('search [text]')\n .description('Search the marketplace catalog')\n .option('--kind <kind>', 'Application | ExecutionEngine | Bundle')\n .action(async (text: string | undefined, options: { kind?: string }) => {\n const api = await createApiClient()\n const page = await api.request<{ data?: unknown[]; items?: unknown[] }>('GET', '/v1/packages', {\n scopes: [SCOPES.packageReadAll],\n query: { SearchText: text, Kind: options.kind, PageNo: 1, PageSize: 50 },\n })\n const items = (page.data ?? page.items ?? []) as { publisherName: string; name: string; displayName: string; kind: string; visibility: string; latestPublishedVersion?: string }[]\n if (items.length === 0) {\n console.log('No packages found.')\n return\n }\n for (const pkg of items) {\n const version = pkg.latestPublishedVersion ? `@${pkg.latestPublishedVersion}` : ' (no published version)'\n console.log(`${pkg.publisherName}/${pkg.name}${version} — ${pkg.displayName} [${pkg.kind}, ${pkg.visibility.toLowerCase()}]`)\n }\n })\n\n program\n .command('install <ref> [version]')\n .description('Install a package into a workspace')\n .option('--workspace <workspaceId>', 'target workspace (default: configured default workspace)')\n .option('--path <path>', 'install path override (bundles)')\n .option('--branch <branch>', 'workspace branch', 'main')\n .option('--sealed', 'install as a sealed tarball instead of extracting')\n .action(async (ref: string, version: string | undefined, options: { workspace?: string; path?: string; branch: string; sealed?: boolean }) => {\n const config = await loadConfig()\n const workspaceId = options.workspace ?? config.defaultWorkspaceId\n if (!workspaceId) throw new Error('No workspace: pass --workspace <id> or set defaultWorkspaceId in ~/.verentis/config.json.')\n\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n const installationId = await api.request<string>('POST', '/v1/installations', {\n // Marketplace forwards this token to Node for the extraction, so it needs\n // the node scope and must be bound to the target workspace.\n scopes: [SCOPES.installCreate, 'node.node.create'],\n tokenWorkspaceId: workspaceId,\n body: {\n workspaceId,\n packageId: pkg.id,\n version: version ?? null,\n installPath: options.path ?? null,\n branch: options.branch,\n installMode: options.sealed ? 'Sealed' : 'Extracted',\n },\n })\n console.log(`Installation ${installationId} started for ${ref} in workspace ${workspaceId}.`)\n })\n\n program\n .command('uninstall <installationId>')\n .description('Uninstall a package from a workspace')\n .requiredOption('--workspace <workspaceId>', 'the workspace the installation belongs to')\n .action(async (installationId: string, options: { workspace: string }) => {\n const api = await createApiClient()\n await api.request('DELETE', `/v1/installations/${installationId}`, {\n scopes: [SCOPES.installDelete, 'node.file.delete'],\n tokenWorkspaceId: options.workspace,\n body: { id: installationId, workspaceId: options.workspace },\n })\n console.log(`Uninstalled ${installationId}.`)\n })\n}\n","import { Command } from 'commander'\nimport { createApiClient } from '../http.js'\nimport { settings } from '../api/catalog.js'\nimport { call } from '../api/client.js'\nimport { resolveAccountId, resolveWorkspaceId } from '../context.js'\nimport { printJson } from '../output.js'\n\ninterface SettingFlags {\n account?: string\n workspace?: string\n json?: boolean\n}\n\n/** Settings attach to an Account or Workspace parent; workspace wins when both are present. */\nasync function settingScope(flags: SettingFlags): Promise<{ scopeKind: string; parentId: string }> {\n const workspaceId = await resolveWorkspaceId(flags, false)\n if (flags.workspace || (!flags.account && workspaceId)) {\n if (!workspaceId) throw new Error('No workspace selected.')\n return { scopeKind: 'Workspace', parentId: workspaceId }\n }\n const accountId = (await resolveAccountId(flags))!\n return { scopeKind: 'Account', parentId: accountId }\n}\n\nexport function registerSettings(program: Command): void {\n const settingsCmd = program.command('settings').description('Manage platform settings (account or workspace scope)')\n\n settingsCmd\n .command('list')\n .description('List settings in the selected scope')\n .option('--account <accountId>', 'account scope')\n .option('--workspace <workspaceId>', 'workspace scope')\n .option('--secrets', 'include secret values')\n .action(async (options: SettingFlags & { secrets?: boolean }) => {\n const api = await createApiClient()\n const scope = await settingScope(options)\n const result = await call<unknown>(api, settings.list, {\n query: { ...scope, includeSecretValues: options.secrets ?? false },\n })\n printJson(result)\n })\n\n settingsCmd\n .command('get <key>')\n .description('Read one setting')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .option('--secrets', 'include secret values')\n .action(async (key: string, options: SettingFlags & { secrets?: boolean }) => {\n const api = await createApiClient()\n const scope = await settingScope(options)\n const result = await call<unknown>(api, settings.get, {\n params: { key },\n query: { ...scope, includeSecretValues: options.secrets ?? false },\n })\n printJson(result)\n })\n\n settingsCmd\n .command('set <key> <value>')\n .description('Create or update a setting (value parsed as JSON when possible)')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .action(async (key: string, value: string, options: SettingFlags) => {\n const api = await createApiClient()\n const scope = await settingScope(options)\n let parsed: unknown = value\n try {\n parsed = JSON.parse(value)\n } catch {\n // keep as string\n }\n await call(api, settings.upsert, {\n params: { key },\n query: scope,\n body: { scopeKind: scope.scopeKind, parentId: scope.parentId, key, value: parsed },\n })\n console.log(`Setting ${key} saved (${scope.scopeKind.toLowerCase()} scope).`)\n })\n\n settingsCmd\n .command('delete <key>')\n .description('Delete a setting')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .action(async (key: string, options: SettingFlags) => {\n const api = await createApiClient()\n const scope = await settingScope(options)\n await call(api, settings.delete, { params: { key }, query: scope })\n console.log(`Setting ${key} deleted.`)\n })\n}\n","/** Single source of truth for the CLI version — read from package.json at runtime. */\nimport { readFileSync } from 'node:fs'\nimport { fileURLToPath } from 'node:url'\n\nexport const PACKAGE_NAME = '@verentis/cli'\n\nlet cached: string | undefined\n\n/**\n * The installed CLI version, read from the package's own package.json.\n *\n * The release pipeline bumps package.json (`npm version`) but not any source constant, so reading it\n * at runtime keeps `verentis --version`, the update notice and `verentis update` all in agreement.\n */\nexport function getCliVersion(): string {\n if (cached) return cached\n cached = readVersion() ?? '0.0.0'\n return cached\n}\n\nfunction readVersion(): string | undefined {\n // The bundled entry lives at dist/index.js and the source at src/*, so package.json is one level up\n // in both layouts. Fall back one more level for safety, guarding against grabbing a foreign manifest.\n const candidates = ['../package.json', '../../package.json']\n for (const relative of candidates) {\n try {\n const raw = readFileSync(fileURLToPath(new URL(relative, import.meta.url)), 'utf8')\n const pkg = JSON.parse(raw) as { name?: string; version?: string }\n if (pkg.version && (relative === '../package.json' || pkg.name === PACKAGE_NAME)) return pkg.version\n } catch {\n // try the next candidate\n }\n }\n return undefined\n}\n","/** Looks up the latest published CLI version from the npm registry (dist-tags). */\nimport { PACKAGE_NAME } from '../version.js'\n\nconst DEFAULT_REGISTRY = 'https://registry.npmjs.org'\n\n/** The registry base URL, overridable for private mirrors (e.g. VERENTIS_UPDATE_REGISTRY). */\nexport function registryUrl(): string {\n const configured = process.env.VERENTIS_UPDATE_REGISTRY ?? process.env.npm_config_registry ?? DEFAULT_REGISTRY\n return configured.replace(/\\/+$/, '')\n}\n\n/**\n * Fetches the `latest` dist-tag for the CLI package. Returns null on any failure (offline, timeout,\n * 4xx/5xx, malformed body) so callers can degrade gracefully — this is only ever a hint.\n */\nexport async function fetchLatestVersion(options: { timeoutMs?: number } = {}): Promise<string | null> {\n const url = `${registryUrl()}/${PACKAGE_NAME.replace('/', '%2F')}`\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), options.timeoutMs ?? 3000)\n try {\n const res = await fetch(url, {\n // The abbreviated packument is far smaller than the full manifest but still carries dist-tags.\n headers: { Accept: 'application/vnd.npm.install-v1+json' },\n signal: controller.signal,\n })\n if (!res.ok) return null\n const body = (await res.json()) as { 'dist-tags'?: Record<string, string> }\n return body['dist-tags']?.latest ?? null\n } catch {\n return null\n } finally {\n clearTimeout(timer)\n }\n}\n","/** Minimal, dependency-free semver comparison — enough for update checks (no ranges). */\n\n/** True when `candidate` is a strictly higher semver precedence than `base`. */\nexport function isNewerVersion(candidate: string, base: string): boolean {\n return compareVersions(candidate, base) > 0\n}\n\n/** Returns -1, 0 or 1 following semver precedence (build metadata ignored, prerelease < release). */\nexport function compareVersions(a: string, b: string): number {\n const pa = parse(a)\n const pb = parse(b)\n\n for (let i = 0; i < 3; i++) {\n if (pa.main[i] !== pb.main[i]) return pa.main[i] < pb.main[i] ? -1 : 1\n }\n\n // A version WITHOUT a prerelease outranks one WITH a prerelease (1.0.0 > 1.0.0-rc.1).\n if (pa.pre.length === 0 && pb.pre.length === 0) return 0\n if (pa.pre.length === 0) return 1\n if (pb.pre.length === 0) return -1\n\n const len = Math.max(pa.pre.length, pb.pre.length)\n for (let i = 0; i < len; i++) {\n if (i >= pa.pre.length) return -1 // fewer identifiers = lower precedence\n if (i >= pb.pre.length) return 1\n const x = pa.pre[i]\n const y = pb.pre[i]\n const xNum = /^\\d+$/.test(x)\n const yNum = /^\\d+$/.test(y)\n if (xNum && yNum) {\n const nx = Number(x)\n const ny = Number(y)\n if (nx !== ny) return nx < ny ? -1 : 1\n } else if (xNum !== yNum) {\n return xNum ? -1 : 1 // numeric identifiers rank lower than alphanumeric\n } else if (x !== y) {\n return x < y ? -1 : 1\n }\n }\n return 0\n}\n\nfunction parse(version: string): { main: [number, number, number]; pre: string[] } {\n const cleaned = version.trim().replace(/^v/i, '').split('+', 1)[0] // drop build metadata\n const dash = cleaned.indexOf('-')\n const core = dash === -1 ? cleaned : cleaned.slice(0, dash)\n const pre = dash === -1 ? '' : cleaned.slice(dash + 1)\n const parts = core.split('.').map((n) => Number.parseInt(n, 10) || 0)\n return { main: [parts[0] ?? 0, parts[1] ?? 0, parts[2] ?? 0], pre: pre ? pre.split('.') : [] }\n}\n","/** Persisted marker for the last update check, so the notice never adds latency to a command. */\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { configDir } from '../config.js'\n\nexport interface UpdateState {\n /** ISO timestamp of the last registry check (successful or not). */\n lastCheckAt: string\n /** Latest version seen at that check (absent when the registry was unreachable). */\n latestVersion?: string\n}\n\nconst DEFAULT_MAX_AGE_MS = 24 * 60 * 60 * 1000\n\nconst statePath = () => join(configDir(), 'update-check.json')\n\nexport async function readUpdateState(): Promise<UpdateState | null> {\n try {\n return JSON.parse(await readFile(statePath(), 'utf8')) as UpdateState\n } catch {\n return null\n }\n}\n\nexport async function writeUpdateState(state: UpdateState): Promise<void> {\n await mkdir(configDir(), { recursive: true, mode: 0o700 })\n await writeFile(statePath(), JSON.stringify(state, null, 2) + '\\n', { mode: 0o600 })\n}\n\n/** True when there is no recent check on record and the registry should be re-queried. */\nexport function isStale(state: UpdateState | null, maxAgeMs = DEFAULT_MAX_AGE_MS): boolean {\n if (!state?.lastCheckAt) return true\n const checkedAt = Date.parse(state.lastCheckAt)\n return !Number.isFinite(checkedAt) || Date.now() - checkedAt > maxAgeMs\n}\n","/**\n * Passive \"a new version is available\" notice, in the style of the Aspire and Azure CLIs.\n *\n * The notice is printed from a locally cached marker, so it never adds latency. When that marker is\n * stale it kicks off a *detached* background process (the hidden `__update-check` command) that\n * refreshes the cache for the next invocation — the current command exits immediately either way.\n */\nimport { spawn } from 'node:child_process'\nimport { getCliVersion } from '../version.js'\nimport { fetchLatestVersion } from './registry.js'\nimport { isNewerVersion } from './semver.js'\nimport { isStale, readUpdateState, writeUpdateState } from './state.js'\n\n/** Commands for which a trailing update notice would be noise or self-referential. */\nconst SUPPRESSED_COMMANDS = new Set(['update', '__update-check', 'help'])\n\n/**\n * Prints an update notice if the cache knows of a newer version, then refreshes the cache in the\n * background when it is stale. Never throws — update checks must not affect command exit status.\n */\nexport async function notifyOnExit(argv: string[]): Promise<void> {\n if (isUpdateCheckSuppressed(argv)) return\n try {\n const current = getCliVersion()\n const state = await readUpdateState()\n if (state?.latestVersion && isNewerVersion(state.latestVersion, current)) {\n printUpdateNotice(current, state.latestVersion)\n }\n if (isStale(state)) spawnBackgroundRefresh()\n } catch {\n // A failed update check is never worth surfacing.\n }\n}\n\n/** Body of the hidden `__update-check` command: refresh the cached marker, silently. */\nexport async function runUpdateCheckRefresh(): Promise<void> {\n const latest = await fetchLatestVersion({ timeoutMs: 4000 }).catch(() => null)\n // Record the attempt regardless of outcome so we back off for the full interval on failure too.\n await writeUpdateState({ lastCheckAt: new Date().toISOString(), latestVersion: latest ?? undefined }).catch(() => {})\n}\n\n/** Whether the passive notice (and background refresh) should be skipped for this invocation. */\nexport function isUpdateCheckSuppressed(argv: string[]): boolean {\n if (isEnvDisabled()) return true\n if (process.env.CI) return true\n if (!process.stderr.isTTY) return true // keep piped/scripted output clean\n\n const args = argv.slice(2)\n if (args.length === 0) return true // bare `verentis` prints help\n if (args.some((a) => a === '--json' || a === '-h' || a === '--help' || a === '-V' || a === '--version')) return true\n\n const command = args.find((a) => !a.startsWith('-'))\n return command !== undefined && SUPPRESSED_COMMANDS.has(command)\n}\n\nfunction isEnvDisabled(): boolean {\n const off = new Set(['0', 'false', 'no', 'off'])\n const noCheck = process.env.VERENTIS_NO_UPDATE_CHECK\n if (noCheck !== undefined && noCheck !== '' && !off.has(noCheck.toLowerCase())) return true\n const explicit = process.env.VERENTIS_UPDATE_CHECK\n return explicit !== undefined && off.has(explicit.toLowerCase())\n}\n\nfunction printUpdateNotice(current: string, latest: string): void {\n const message = [\n `Update available ${current} → ${latest}`,\n 'Run `verentis update` to install the latest version.',\n ]\n const width = Math.max(...message.map((line) => line.length))\n const border = '─'.repeat(width + 2)\n const lines = ['', `╭${border}╮`, ...message.map((line) => `│ ${line.padEnd(width)} │`), `╰${border}╯`, '']\n process.stderr.write(lines.join('\\n') + '\\n')\n}\n\nfunction spawnBackgroundRefresh(): void {\n try {\n const entry = process.argv[1]\n if (!entry) return\n const child = spawn(process.execPath, [entry, '__update-check'], {\n detached: true,\n stdio: 'ignore',\n windowsHide: true,\n })\n child.on('error', () => {}) // never let a failed spawn bubble up\n child.unref()\n } catch {\n // ignore — the notice will simply refresh on a later run\n }\n}\n","import { spawnSync } from 'node:child_process'\nimport { fileURLToPath } from 'node:url'\nimport { Command } from 'commander'\nimport { getCliVersion, PACKAGE_NAME } from '../version.js'\nimport { fetchLatestVersion } from '../update/registry.js'\nimport { runUpdateCheckRefresh } from '../update/notifier.js'\nimport { isNewerVersion } from '../update/semver.js'\nimport { writeUpdateState } from '../update/state.js'\n\ntype PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun'\n\ninterface InstallCommand {\n command: string\n args: string[]\n}\n\nexport function registerUpdate(program: Command): void {\n program\n .command('update')\n .description('Update the Verentis CLI to the latest published version')\n .option('--check', 'report whether a newer version is available without installing')\n .option('--to <version>', 'install a specific version instead of the latest')\n .action(async (options: { check?: boolean; to?: string }) => {\n const current = getCliVersion()\n const target = await resolveTarget(options.to)\n\n if (options.check) {\n reportCheck(current, target, Boolean(options.to))\n return\n }\n\n if (!options.to && !isNewerVersion(target, current)) {\n console.log(`Already on the latest version (${current}).`)\n return\n }\n\n const install = resolveInstallCommand(`${PACKAGE_NAME}@${target}`)\n if (!install) {\n throw new Error(\n `Automatic update is only supported for a global install of ${PACKAGE_NAME}.\\n` +\n `Update manually, for example:\\n npm install -g ${PACKAGE_NAME}@${target}`,\n )\n }\n\n console.log(`Updating ${PACKAGE_NAME}: ${current} → ${target}`)\n console.log(`$ ${install.command} ${install.args.join(' ')}`)\n const result = spawnSync(install.command, install.args, { stdio: 'inherit' })\n if (result.error) {\n const code = (result.error as NodeJS.ErrnoException).code\n const hint = code === 'ENOENT' ? ` ('${install.command}' was not found on PATH).` : `: ${result.error.message}`\n throw new Error(`Could not run the update${hint}\\nUpdate manually:\\n ${install.command} ${install.args.join(' ')}`)\n }\n if (typeof result.status === 'number' && result.status !== 0) {\n throw new Error(\n `Update failed (${install.command} exited with code ${result.status}).\\n` +\n `You can retry manually:\\n ${install.command} ${install.args.join(' ')}`,\n )\n }\n console.log(`Updated to ${target}. Run \\`verentis --version\\` to confirm.`)\n })\n\n // Internal: refreshes the cached latest-version marker used by the passive update notice.\n program\n .command('__update-check', { hidden: true })\n .description('(internal) refresh the cached latest-version marker')\n .action(async () => {\n await runUpdateCheckRefresh()\n })\n}\n\nasync function resolveTarget(requested?: string): Promise<string> {\n if (requested) return requested.replace(/^v/i, '')\n const latest = await fetchLatestVersion({ timeoutMs: 8000 })\n if (!latest) {\n throw new Error(\n 'Could not reach the package registry to determine the latest version. ' +\n 'Check your connection, or point VERENTIS_UPDATE_REGISTRY at a reachable registry.',\n )\n }\n // Keep the passive-notice cache in sync with what we just learned.\n await writeUpdateState({ lastCheckAt: new Date().toISOString(), latestVersion: latest }).catch(() => {})\n return latest\n}\n\nfunction reportCheck(current: string, target: string, pinned: boolean): void {\n if (pinned) {\n console.log(`Current version: ${current}`)\n console.log(`Requested version: ${target}`)\n return\n }\n if (isNewerVersion(target, current)) {\n console.log(`A new version is available: ${current} → ${target}`)\n console.log('Run `verentis update` to install it.')\n } else {\n console.log(`You are on the latest version (${current}).`)\n }\n}\n\nfunction resolveInstallCommand(spec: string): InstallCommand | null {\n const location = packageLocation()\n // Only self-update real installed packages — never a source checkout or `npm link`ed dev tree.\n if (!location || !location.replace(/\\\\/g, '/').includes('/node_modules/')) return null\n\n switch (detectPackageManager(location)) {\n case 'pnpm':\n return { command: 'pnpm', args: ['add', '-g', spec] }\n case 'yarn':\n return { command: 'yarn', args: ['global', 'add', spec] }\n case 'bun':\n return { command: 'bun', args: ['add', '-g', spec] }\n default:\n return { command: 'npm', args: ['install', '-g', spec] }\n }\n}\n\n/** Path of this package's own code on disk, used to infer the installing package manager. */\nfunction packageLocation(): string | undefined {\n try {\n return fileURLToPath(import.meta.url)\n } catch {\n return process.argv[1]\n }\n}\n\nfunction detectPackageManager(location: string): PackageManager {\n const path = location.replace(/\\\\/g, '/')\n if (/\\/(\\.pnpm|pnpm)\\//.test(path)) return 'pnpm'\n if (/\\/(\\.yarn|yarn)\\//.test(path)) return 'yarn'\n if (/\\/\\.bun\\//.test(path)) return 'bun'\n return 'npm'\n}\n","import { Command } from 'commander'\nimport { loadConfig, saveConfig } from '../config.js'\nimport { outputRecord } from '../output.js'\n\nexport function registerUse(program: Command): void {\n const useCmd = program.command('use').description('Set default context for subsequent commands')\n\n useCmd\n .command('workspace <workspaceId>')\n .description('Set the default workspace (files, exec, install, dev commands)')\n .action(async (workspaceId: string) => {\n const config = await loadConfig()\n config.defaultWorkspaceId = workspaceId\n await saveConfig(config)\n console.log(`Default workspace set to ${workspaceId}.`)\n })\n\n useCmd\n .command('account <accountId>')\n .description('Set the default account (admin commands)')\n .action(async (accountId: string) => {\n const config = await loadConfig()\n config.defaultAccountId = accountId\n await saveConfig(config)\n console.log(`Default account set to ${accountId}.`)\n })\n\n program\n .command('context')\n .description('Show the current CLI context (API URL, credential kind, defaults)')\n .option('--json', 'output JSON')\n .action(async (options: { json?: boolean }) => {\n const config = await loadConfig()\n outputRecord(\n {\n apiUrl: process.env.VERENTIS_API_URL ?? config.apiUrl ?? '(not set)',\n credential: process.env.VERENTIS_API_KEY ?? config.apiKey ? 'api key' : (process.env.VERENTIS_TOKEN ?? config.identityToken) ? 'identity token' : '(none)',\n defaultWorkspaceId: config.defaultWorkspaceId ?? '(not set)',\n defaultAccountId: config.defaultAccountId ?? '(not set)',\n defaultKey: config.defaultKey ?? '(not set)',\n },\n options,\n )\n })\n}\n","import { Command } from 'commander'\nimport { createApiClient } from '../http.js'\nimport { security } from '../api/catalog.js'\nimport { call } from '../api/client.js'\nimport { managementScope } from '../context.js'\nimport { output, outputRecord } from '../output.js'\n\ninterface ScopeFlags {\n account?: string\n workspace?: string\n node?: string\n json?: boolean\n}\n\nexport function registerUser(program: Command): void {\n const userCmd = program\n .command('user')\n .description('Manage users in an account/workspace scope')\n\n userCmd\n .command('list')\n .description('List users visible in the selected scope')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .option('--search <text>')\n .option('--active <bool>', 'filter by active state (true/false)')\n .option('--json', 'output JSON')\n .action(async (options: ScopeFlags & { search?: string; active?: string }) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n const result = await call<Record<string, unknown>[]>(api, security.listUsers, {\n query: { ...scope, search: options.search, isActive: options.active },\n })\n output(result ?? [], { displayName: 'Name', email: 'Email', isActive: 'Active', userId: 'UserId', id: 'Id' }, options, result)\n })\n\n userCmd\n .command('get <userId>')\n .description('Show user details')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .option('--json', 'output JSON')\n .action(async (userId: string, options: ScopeFlags) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n const result = await call<Record<string, unknown>>(api, security.getUser, { params: { userId }, query: scope })\n outputRecord(result, options)\n })\n\n userCmd\n .command('activate <userId>')\n .description('Activate a suspended user in the scope')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .action(async (userId: string, options: ScopeFlags) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n await call(api, security.activateUser, { params: { userId }, body: { ...scope, userId } })\n console.log(`User ${userId} activated.`)\n })\n\n userCmd\n .command('suspend <userId>')\n .description('Suspend a user in the scope')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .action(async (userId: string, options: ScopeFlags) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n await call(api, security.suspendUser, { params: { userId }, body: { ...scope, userId } })\n console.log(`User ${userId} suspended.`)\n })\n\n userCmd\n .command('roles <userId>')\n .description(\"List a user's role memberships in the scope\")\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .option('--json', 'output JSON')\n .action(async (userId: string, options: ScopeFlags) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n const result = await call<Record<string, unknown>[]>(api, security.getUserRoles, { params: { userId }, query: scope })\n output(result ?? [], { roleName: 'Role', roleKey: 'Key', membershipId: 'MembershipId' }, options, result)\n })\n\n const grantsCmd = userCmd.command('grants').description('Manage direct permission grants for a user')\n\n grantsCmd\n .command('list <userId>')\n .description('List direct grants for a user')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .option('--json', 'output JSON')\n .action(async (userId: string, options: ScopeFlags) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n const result = await call<Record<string, unknown>[]>(api, security.getUserGrants, { params: { userId }, query: scope })\n output(result ?? [], { scope: 'Scope', resourceKind: 'ResourceKind', resourceId: 'ResourceId', effect: 'Effect', id: 'GrantId' }, options, result)\n })\n\n grantsCmd\n .command('add <userId> <scope>')\n .description('Grant a permission scope to a user (e.g. node.file.read)')\n .requiredOption('--resource-id <id>', 'resource the grant applies to (account/workspace/node id)')\n .requiredOption('--resource-kind <kind>', 'Account | Workspace | Node')\n .option('--expires <iso8601>', 'expiry timestamp')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .action(async (userId: string, scopeName: string, options: ScopeFlags & { resourceId: string; resourceKind: string; expires?: string }) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n await call(api, security.grantUserPermission, {\n params: { userId },\n body: {\n ...scope,\n userId,\n resourceId: options.resourceId,\n resourceKind: options.resourceKind,\n scope: scopeName,\n expiresAt: options.expires ?? null,\n },\n })\n console.log(`Granted ${scopeName} on ${options.resourceKind} ${options.resourceId} to user ${userId}.`)\n })\n}\n","import { dirname, resolve } from 'node:path'\nimport { stat } from 'node:fs/promises'\nimport { Command } from 'commander'\nimport { buildCatalog } from '../vpkg/catalog.js'\nimport { findManifest } from '../vpkg/manifest.js'\nimport { applyOverlay, loadOverlay, resolveOverlayPath } from '../vpkg/overlay.js'\nimport { readManifestDocument, validateManifest } from '../dev/manifest.js'\n\nexport function registerValidate(program: Command): void {\n program\n .command('validate [pathOrDir]')\n .description('Validate an engine/app/bundle manifest (structure + registration-time checks)')\n .option('--env <name>', 'merge a per-environment overlay (environments/<name>.yaml) before validating')\n .option('--overlay <path>', 'merge an explicit overlay file before validating (wins over --env)')\n .action(async (pathOrDir: string | undefined, options: { env?: string; overlay?: string }) => {\n const target = resolve(pathOrDir ?? '.')\n const info = await stat(target).catch(() => null)\n const manifestPath = info?.isDirectory() ? await findManifest(target) : target\n if (!info) throw new Error(`${target} does not exist.`)\n\n const base = await readManifestDocument(manifestPath)\n const overlayPath = resolveOverlayPath(dirname(manifestPath), { env: options.env, overlay: options.overlay })\n const manifest = overlayPath ? applyOverlay(base, await loadOverlay(overlayPath)) : base\n const issues = validateManifest(manifest)\n if (manifest.marketplace && !issues.some((issue) => issue.level === 'error' && issue.message.startsWith('marketplace'))) {\n try {\n await buildCatalog(dirname(manifestPath), manifest.marketplace)\n } catch (error) {\n issues.push({ level: 'error', message: error instanceof Error ? error.message : String(error) })\n }\n }\n const errors = issues.filter((issue) => issue.level === 'error')\n const warnings = issues.filter((issue) => issue.level === 'warning')\n\n console.log(`${manifestPath} — kind ${manifest.kind ?? '(unknown)'}, ${manifest.metadata?.name ?? '?'}@${manifest.metadata?.version ?? '?'}`)\n for (const issue of errors) console.error(` error: ${issue.message}`)\n for (const issue of warnings) console.warn(` warning: ${issue.message}`)\n\n if (errors.length === 0) {\n console.log(warnings.length > 0 ? `OK with ${warnings.length} warning(s).` : 'OK.')\n } else {\n console.error(`${errors.length} error(s).`)\n process.exitCode = 1\n }\n })\n}\n","import { Command } from 'commander'\nimport { createApiClient } from '../http.js'\nimport { workspace } from '../api/catalog.js'\nimport { call, pageItems, pagingQuery, type PagedResult, type PagingFlags } from '../api/client.js'\nimport { loadConfig, saveConfig } from '../config.js'\nimport { output, outputRecord } from '../output.js'\n\ninterface WorkspaceDto {\n id: string\n name: string\n slug?: string\n description?: string\n [key: string]: unknown\n}\n\nexport function registerWorkspace(program: Command): void {\n const wsCmd = program.command('workspace').description('Manage workspaces')\n\n wsCmd\n .command('list')\n .description('List workspaces you can access')\n .option('--page <n>')\n .option('--page-size <n>')\n .option('--order-by <field>')\n .option('--json', 'output JSON')\n .action(async (options: PagingFlags & { json?: boolean }) => {\n const api = await createApiClient()\n const page = await call<PagedResult<WorkspaceDto>>(api, workspace.list, { query: pagingQuery(options) })\n output(pageItems(page), { name: 'Name', slug: 'Slug', id: 'Id' }, options, page)\n })\n\n wsCmd\n .command('get [workspaceId]')\n .description('Show workspace details (default: configured default workspace)')\n .option('--json', 'output JSON')\n .action(async (workspaceId: string | undefined, options: { json?: boolean }) => {\n const config = await loadConfig()\n const id = workspaceId ?? config.defaultWorkspaceId\n if (!id) throw new Error('No workspace: pass an id or set one with `verentis use workspace <id>`.')\n const api = await createApiClient()\n const result = await call<Record<string, unknown>>(api, workspace.get, { params: { workspaceId: id } })\n outputRecord(result, options)\n })\n\n wsCmd\n .command('create <name>')\n .description('Create a workspace owned by you')\n .option('--use', 'set the new workspace as the default')\n .action(async (name: string, options: { use?: boolean }) => {\n const api = await createApiClient()\n const id = await call<string>(api, workspace.createMine, { body: { name } })\n console.log(`Workspace '${name}' created (${id}).`)\n if (options.use) {\n const config = await loadConfig()\n config.defaultWorkspaceId = id\n await saveConfig(config)\n console.log('Set as default workspace.')\n }\n })\n\n wsCmd\n .command('update <workspaceId>')\n .description('Update workspace details')\n .requiredOption('--name <name>', 'workspace name')\n .option('--description <description>')\n .action(async (workspaceId: string, options: { name: string; description?: string }) => {\n const api = await createApiClient()\n await call(api, workspace.update, {\n params: { workspaceId },\n body: { workspaceId, name: options.name, description: options.description ?? null },\n })\n console.log(`Workspace ${workspaceId} updated.`)\n })\n\n const domainCmd = wsCmd.command('domain').description('Manage workspace domains')\n\n domainCmd\n .command('list <workspaceId>')\n .description('List domains attached to a workspace')\n .option('--json', 'output JSON')\n .action(async (workspaceId: string, options: { json?: boolean }) => {\n const api = await createApiClient()\n const result = await call<unknown>(api, workspace.listDomains, { params: { workspaceId } })\n const items = pageItems(result as PagedResult<Record<string, unknown>>)\n output(items, { host: 'Host', status: 'Status', id: 'Id' }, options, result)\n })\n\n domainCmd\n .command('add <workspaceId> <host>')\n .description('Attach a domain to a workspace')\n .action(async (workspaceId: string, host: string) => {\n const api = await createApiClient()\n const id = await call<string>(api, workspace.addDomain, { params: { workspaceId }, body: { workspaceId, host } })\n console.log(`Domain ${host} added${id ? ` (${id})` : ''}.`)\n })\n\n domainCmd\n .command('remove <workspaceId> <domainId>')\n .description('Remove a domain from a workspace')\n .action(async (workspaceId: string, domainId: string) => {\n const api = await createApiClient()\n await call(api, workspace.removeDomain, { params: { workspaceId, domainId } })\n console.log(`Domain ${domainId} removed.`)\n })\n\n const inviteCmd = wsCmd.command('invite').description('Manage workspace invitations')\n\n inviteCmd\n .command('list <workspaceId>')\n .description('List invitations for a workspace')\n .option('--json', 'output JSON')\n .action(async (workspaceId: string, options: { json?: boolean }) => {\n const api = await createApiClient()\n const page = await call<PagedResult<Record<string, unknown>>>(api, workspace.listInvitations, { params: { workspaceId } })\n output(pageItems(page), { emailAddress: 'Email', roleKey: 'Role', status: 'Status', id: 'Id' }, options, page)\n })\n\n inviteCmd\n .command('create <workspaceId> <email>')\n .description('Invite a user to a workspace')\n .option('--role <roleKey>', 'role to assign on acceptance', 'member')\n .action(async (workspaceId: string, email: string, options: { role: string }) => {\n const api = await createApiClient()\n const id = await call<string>(api, workspace.createInvitation, {\n params: { workspaceId },\n body: { workspaceId, emailAddress: email, roleKey: options.role },\n })\n console.log(`Invitation${id ? ` ${id}` : ''} sent to ${email} (role ${options.role}).`)\n })\n\n inviteCmd\n .command('resend <workspaceId> <invitationId>')\n .description('Resend a workspace invitation')\n .action(async (workspaceId: string, invitationId: string) => {\n const api = await createApiClient()\n await call(api, workspace.resendInvitation, { params: { workspaceId, invitationId }, body: { workspaceId, invitationId } })\n console.log(`Invitation ${invitationId} resent.`)\n })\n\n inviteCmd\n .command('revoke <workspaceId> <invitationId>')\n .description('Revoke a workspace invitation')\n .action(async (workspaceId: string, invitationId: string) => {\n const api = await createApiClient()\n await call(api, workspace.revokeInvitation, { params: { workspaceId, invitationId } })\n console.log(`Invitation ${invitationId} revoked.`)\n })\n\n inviteCmd\n .command('accept <code>')\n .description('Accept a workspace invitation code as the current user')\n .action(async (code: string) => {\n const api = await createApiClient()\n await call(api, workspace.acceptInvitation, { body: { code } })\n console.log('Invitation accepted.')\n })\n}\n","import { Command } from 'commander'\nimport { registerAccount } from './commands/account.js'\nimport { registerApi } from './commands/api.js'\nimport { registerApiKey } from './commands/apikey.js'\nimport { registerDev } from './commands/dev.js'\nimport { registerExec } from './commands/exec.js'\nimport { registerFiles } from './commands/files.js'\nimport { registerInit } from './commands/init.js'\nimport { registerKeygen } from './commands/keygen.js'\nimport { registerLogin } from './commands/login.js'\nimport { registerPack } from './commands/pack.js'\nimport { registerPackage } from './commands/package.js'\nimport { registerPublisher } from './commands/publisher.js'\nimport { registerRegistry } from './commands/registry.js'\nimport { registerSettings } from './commands/settings.js'\nimport { registerUpdate } from './commands/update.js'\nimport { registerUse } from './commands/use.js'\nimport { registerUser } from './commands/user.js'\nimport { registerValidate } from './commands/validate.js'\nimport { registerWorkspace } from './commands/workspace.js'\nimport { ApiError } from './http.js'\nimport { notifyOnExit } from './update/notifier.js'\nimport { getCliVersion } from './version.js'\n\nconst program = new Command()\n .enablePositionalOptions()\n .name('verentis')\n .description('Verentis CLI — admin, marketplace publishing, and the engine/app developer loop')\n .version(getCliVersion())\n\n// Auth + context\nregisterLogin(program)\nregisterUse(program)\n\n// Admin\nregisterAccount(program)\nregisterWorkspace(program)\nregisterUser(program)\nregisterApiKey(program)\nregisterSettings(program)\n\n// Workspace files + executions\nregisterFiles(program)\nregisterExec(program)\n\n// Developer loop\nregisterDev(program)\nregisterValidate(program)\n\n// Marketplace\nregisterPublisher(program)\nregisterKeygen(program)\nregisterInit(program)\nregisterPack(program)\nregisterRegistry(program)\nregisterPackage(program)\n\n// Escape hatch\nregisterApi(program)\n\n// Self-update\nregisterUpdate(program)\n\nasync function main(): Promise<void> {\n try {\n await program.parseAsync()\n } catch (error: unknown) {\n if (error instanceof ApiError || error instanceof Error) {\n console.error(`Error: ${error.message}`)\n } else {\n console.error(error)\n }\n process.exitCode = 1\n }\n // Best-effort \"new version available\" notice; never affects the command's outcome.\n await notifyOnExit(process.argv)\n}\n\nvoid main()\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/config.ts","../src/jwt.ts","../src/auth/deviceFlow.ts","../src/http.ts","../src/api/scopes.ts","../src/api/catalog.ts","../src/api/client.ts","../src/context.ts","../src/output.ts","../src/commands/account.ts","../src/commands/api.ts","../src/commands/apikey.ts","../src/dev/context.ts","../src/vpkg/manifest.ts","../src/dev/manifest.ts","../src/commands/dev.ts","../src/commands/exec.ts","../src/commands/files.ts","../src/commands/init.ts","../src/crypto/keys.ts","../src/registry.ts","../src/commands/keygen.ts","../src/commands/login.ts","../src/crypto/dsse.ts","../src/crypto/seal.ts","../src/vpkg/catalog.ts","../src/vpkg/overlay.ts","../src/vpkg/pack.ts","../src/vpkg/read.ts","../src/commands/pack.ts","../src/commands/package.ts","../src/publisher/logo.ts","../src/commands/publisher.ts","../src/commands/registry.ts","../src/commands/settings.ts","../src/version.ts","../src/update/registry.ts","../src/update/semver.ts","../src/update/state.ts","../src/update/notifier.ts","../src/commands/update.ts","../src/commands/use.ts","../src/commands/user.ts","../src/commands/validate.ts","../src/commands/workspace.ts","../src/index.ts"],"names":["resolve","cached","program","text","readFile","marketplace","join","parse","settings","mkdir","writeFile","dirname","stat","readdir","cryptoSign","cryptoVerify","pageItems","Readable","createReadStream","pkg","generateKeyPairSync","createPublicKey","files","createHash","isAbsolute","toEntryPath","glob","relative","sep","mkdtemp","tmpdir","tar2","rm","MAX_LOGO_BYTES","pipeline","createWriteStream","spawn","fileURLToPath"],"mappings":"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","file":"index.js","sourcesContent":["import { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { Agent } from 'node:https'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\nexport interface CliConfig {\n /** Base API URL (the gateway), e.g. https://api.localtest.me:8443 */\n apiUrl?: string\n /** Verentis API key (vrt_ prefix) — sent directly as a bearer credential. */\n apiKey?: string\n /** Identity token — exchanged for audience-scoped access tokens per request. */\n identityToken?: string\n /** Refresh token for renewing the identity token (device-code login). */\n refreshToken?: string\n /** Default workspace for workspace-scoped commands (files, exec, install, dev). */\n defaultWorkspaceId?: string\n /** Default account for admin commands (users, api-keys, invitations). */\n defaultAccountId?: string\n /** Name of the default signing key (file under ~/.verentis/keys). */\n defaultKey?: string\n /** Base64 X25519 public key of the platform sealing recipient (for `pack --encrypt`). */\n sealingPublicKey?: string\n /** Skip TLS certificate verification (for local dev with self-signed certs). */\n insecure?: boolean\n}\n\n/** HTTPS agent that skips certificate verification (for local dev with self-signed certs). */\nconst insecureAgent = new Agent({ rejectUnauthorized: false })\n\n/** Returns fetch options that skip TLS verification when insecure mode is enabled. */\nexport function insecureFetchOptions(insecure: boolean | undefined): { dispatcher?: import('undici-types').Dispatcher } {\n // Node 18.2+ fetch() accepts undici's dispatcher for custom TLS settings.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return insecure ? { dispatcher: insecureAgent as any } : {}\n}\n\nexport const configDir = () => process.env.VERENTIS_CONFIG_DIR ?? join(homedir(), '.verentis')\nexport const configPath = () => join(configDir(), 'config.json')\nexport const keysDir = () => join(configDir(), 'keys')\n\nexport async function loadConfig(): Promise<CliConfig> {\n try {\n return JSON.parse(await readFile(configPath(), 'utf8')) as CliConfig\n } catch {\n return {}\n }\n}\n\nexport async function saveConfig(config: CliConfig): Promise<void> {\n await mkdir(configDir(), { recursive: true, mode: 0o700 })\n await writeFile(configPath(), JSON.stringify(config, null, 2) + '\\n', { mode: 0o600 })\n}\n\nexport function requireApiUrl(config: CliConfig): string {\n const url = process.env.VERENTIS_API_URL ?? config.apiUrl\n if (!url) {\n throw new Error('No API URL configured. Run `verentis login --api-url <url>` first (or set VERENTIS_API_URL).')\n }\n return url.replace(/\\/+$/, '')\n}\n","/** Minimal JWT payload inspection (no signature verification — client-side hints only). */\n\nexport interface JwtPayload {\n sub?: string\n account_id?: string\n workspace_id?: string\n scope?: string\n exp?: number\n name?: string\n email?: string\n [claim: string]: unknown\n}\n\nexport function decodeJwtPayload(token: string): JwtPayload | null {\n const parts = token.split('.')\n if (parts.length !== 3) return null\n try {\n const json = Buffer.from(parts[1].replace(/-/g, '+').replace(/_/g, '/'), 'base64').toString('utf8')\n return JSON.parse(json) as JwtPayload\n } catch {\n return null\n }\n}\n\n/** True when the token has an `exp` within `skewSeconds` of now (or already past). */\nexport function isExpired(token: string, skewSeconds = 60): boolean {\n const payload = decodeJwtPayload(token)\n if (!payload?.exp) return false\n return payload.exp * 1000 <= Date.now() + skewSeconds * 1000\n}\n","/** RFC 8628 device-code flow against the Verentis Security OIDC endpoints. */\n\nimport { insecureFetchOptions } from '../config.js'\n\nexport const CLI_CLIENT_ID = 'Verentis.Cli'\n\nexport interface DeviceAuthorization {\n device_code: string\n user_code: string\n verification_uri: string\n verification_uri_complete?: string\n expires_in: number\n interval: number\n}\n\ninterface TokenResponse {\n id_token?: string\n access_token?: string\n refresh_token?: string\n expires_in?: number\n error?: string | null\n}\n\nexport interface IdentityResult {\n idToken: string\n refreshToken?: string\n}\n\nexport async function startDeviceAuthorization(apiUrl: string, insecure?: boolean): Promise<DeviceAuthorization> {\n const res = await fetch(`${apiUrl}/connect/device/authorize`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({ client_id: CLI_CLIENT_ID }),\n ...insecureFetchOptions(insecure),\n })\n if (!res.ok) {\n const text = await res.text().catch(() => '')\n throw new Error(`Could not start device sign-in (${res.status}).${text ? ` ${text.slice(0, 300)}` : ''}`)\n }\n return (await res.json()) as DeviceAuthorization\n}\n\n/** Polls the token endpoint until approval, denial or expiry. Returns the identity + refresh tokens. */\nexport async function pollForIdentityToken(\n apiUrl: string,\n authorization: DeviceAuthorization,\n insecure?: boolean,\n onPoll?: () => void,\n): Promise<IdentityResult> {\n let intervalMs = Math.max(authorization.interval, 1) * 1000\n const deadline = Date.now() + authorization.expires_in * 1000\n\n while (Date.now() < deadline) {\n await sleep(intervalMs)\n onPoll?.()\n\n const res = await fetch(`${apiUrl}/connect/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({\n grant_type: 'device_code',\n device_code: authorization.device_code,\n client_id: CLI_CLIENT_ID,\n }),\n ...insecureFetchOptions(insecure),\n })\n\n let payload: TokenResponse | undefined\n try {\n payload = (await res.json()) as TokenResponse\n } catch {\n payload = undefined\n }\n\n if (res.ok && payload?.id_token) {\n return { idToken: payload.id_token, refreshToken: payload.refresh_token }\n }\n\n switch (payload?.error) {\n case 'authorization_pending':\n continue\n case 'slow_down':\n intervalMs += 5000\n continue\n case 'access_denied':\n throw new Error('Sign-in was denied in the browser.')\n case 'expired_token':\n throw new Error('The device code expired before it was approved. Run `verentis login` again.')\n default:\n throw new Error(`Device sign-in failed (${res.status}).${payload?.error ? ` ${payload.error}` : ''}`)\n }\n }\n\n throw new Error('The device code expired before it was approved. Run `verentis login` again.')\n}\n\n/** RefreshTokenError signals the refresh token is no longer usable — the caller must re-run `verentis login`. */\nexport class RefreshTokenError extends Error {}\n\n/**\n * Exchanges a refresh token for a fresh identity token (RFC 6749 §6), rotating the refresh token.\n * Throws {@link RefreshTokenError} when the token is invalid/expired/revoked so callers can prompt a re-login.\n */\nexport async function refreshIdentityToken(apiUrl: string, refreshToken: string, insecure?: boolean): Promise<IdentityResult> {\n const res = await fetch(`${apiUrl}/connect/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({\n grant_type: 'refresh_token',\n refresh_token: refreshToken,\n client_id: CLI_CLIENT_ID,\n }),\n ...insecureFetchOptions(insecure),\n })\n\n let payload: TokenResponse | undefined\n try {\n payload = (await res.json()) as TokenResponse\n } catch {\n payload = undefined\n }\n\n if (res.ok && payload?.id_token) {\n return { idToken: payload.id_token, refreshToken: payload.refresh_token ?? refreshToken }\n }\n\n // RFC 6749 §5.2: invalid_grant / invalid_client mean the token can't be renewed — re-login required.\n throw new RefreshTokenError(\n `Session could not be renewed${payload?.error ? ` (${payload.error})` : ` (${res.status})`}. Run \\`verentis login\\` again.`,\n )\n}\n\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))\n","import { loadConfig, requireApiUrl, saveConfig, type CliConfig, insecureFetchOptions } from './config.js'\nimport { isExpired } from './jwt.js'\nimport { RefreshTokenError, refreshIdentityToken } from './auth/deviceFlow.js'\n\nexport class ApiError extends Error {\n constructor(\n public readonly status: number,\n message: string,\n public readonly body?: unknown,\n ) {\n super(message)\n }\n}\n\nexport interface ApiClient {\n apiUrl: string\n request<T>(method: string, path: string, options?: RequestOptions): Promise<T>\n requestRaw(method: string, path: string, options?: RequestOptions): Promise<Response>\n /** Mints a scoped access token (optionally workspace-bound / node-bounded) and returns the raw JWT. */\n mintAccessToken(options: MintTokenOptions): Promise<string>\n}\n\nexport interface MintTokenOptions {\n scopes: string[]\n workspaceId?: string\n accountId?: string\n /** Confine the token to a resource boundary (e.g. a node subtree). */\n resourceId?: string\n resourceKind?: 'Account' | 'Workspace' | 'Node' | 'Publisher'\n}\n\nexport interface RequestOptions {\n scopes?: string[]\n /** Binds the access token to a workspace (required for calls the backend forwards to Node). */\n tokenWorkspaceId?: string\n body?: unknown\n /** Raw body stream/bytes (overrides json body). */\n rawBody?: BodyInit\n contentType?: string\n query?: Record<string, string | number | boolean | undefined>\n headers?: Record<string, string>\n}\n\nconst AUDIENCE = 'verentis'\n\nexport async function createApiClient(overrides?: Partial<CliConfig>): Promise<ApiClient> {\n const config = { ...(await loadConfig()), ...overrides }\n const apiUrl = requireApiUrl(config)\n const insecure = config.insecure\n const tokenCache = new Map<string, string>()\n\n // Identity/refresh token state. An env-provided identity token is externally managed — never\n // auto-refreshed or persisted; a device-flow login persists both to ~/.verentis/config.json.\n const envIdentity = process.env.VERENTIS_TOKEN\n let currentIdentity = envIdentity ?? config.identityToken\n let currentRefresh = config.refreshToken\n let refreshInflight: Promise<string> | null = null\n\n async function persistTokens(idToken: string, refreshToken?: string): Promise<void> {\n // Re-read from disk so we merge (don't clobber fields written elsewhere).\n const disk = await loadConfig()\n disk.identityToken = idToken\n if (refreshToken) disk.refreshToken = refreshToken\n await saveConfig(disk)\n }\n\n async function clearTokens(): Promise<void> {\n const disk = await loadConfig()\n delete disk.identityToken\n delete disk.refreshToken\n await saveConfig(disk)\n }\n\n /**\n * Returns a usable identity token, transparently renewing it via the refresh token when it is\n * expired or within 120s of expiry (rotation is persisted). Throws a clear \"log in again\" error when\n * there is no way to renew. Concurrent callers share a single in-flight refresh.\n */\n async function resolveIdentityToken(): Promise<string> {\n if (!currentIdentity) throw new ApiError(401, 'Not logged in. Run `verentis login`.')\n if (!isExpired(currentIdentity, 120)) return currentIdentity\n if (envIdentity || !currentRefresh) {\n throw new ApiError(401, 'Your session has expired — run `verentis login` again.')\n }\n if (!refreshInflight) {\n refreshInflight = (async () => {\n try {\n const refreshed = await refreshIdentityToken(apiUrl, currentRefresh!, insecure)\n currentIdentity = refreshed.idToken\n currentRefresh = refreshed.refreshToken ?? currentRefresh\n await persistTokens(refreshed.idToken, refreshed.refreshToken)\n return refreshed.idToken\n } catch (err) {\n if (err instanceof RefreshTokenError) {\n await clearTokens().catch(() => {})\n throw new ApiError(401, err.message)\n }\n throw err\n } finally {\n refreshInflight = null\n }\n })()\n }\n return refreshInflight\n }\n\n async function credentialFor(scopes: string[], workspaceId?: string): Promise<string> {\n // API keys are only understood by the Security service, so they are ALWAYS exchanged\n // for a scoped access token — never sent directly to other services.\n const cacheKey = `${workspaceId ?? ''}:${[...scopes].sort().join(' ')}`\n const cached = tokenCache.get(cacheKey)\n if (cached && !isExpired(cached)) return cached\n const token = await mintAccessToken({ scopes, workspaceId })\n tokenCache.set(cacheKey, token)\n return token\n }\n\n async function mintAccessToken(options: MintTokenOptions): Promise<string> {\n const apiKey = process.env.VERENTIS_API_KEY ?? config.apiKey\n if (!apiKey && !currentIdentity) {\n throw new Error('Not logged in. Run `verentis login` (or pass --api-key / --token).')\n }\n // API keys are exchanged directly; an identity token is renewed via its refresh token when stale.\n const credential = apiKey ?? (await resolveIdentityToken())\n\n const res = await fetch(`${apiUrl}/v1/tokens/access`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${credential}`,\n },\n body: JSON.stringify({\n audience: AUDIENCE,\n scopes: options.scopes,\n ...(options.workspaceId ? { workspaceId: options.workspaceId } : {}),\n ...(options.accountId ? { accountId: options.accountId } : {}),\n ...(options.resourceId ? { resourceId: options.resourceId, resourceKind: options.resourceKind ?? 'Node' } : {}),\n }),\n ...insecureFetchOptions(insecure),\n })\n if (!res.ok) {\n const text = await res.text().catch(() => '')\n throw new ApiError(res.status, `Access-token exchange failed (${res.status}). ${hintFor(res.status)}${text ? `\\n${truncate(text)}` : ''}`)\n }\n const data = (await res.json()) as { access_token?: string }\n if (!data.access_token) throw new Error('Access-token response did not include access_token.')\n return data.access_token\n }\n\n async function requestRaw(method: string, path: string, options: RequestOptions = {}): Promise<Response> {\n const token = await credentialFor(options.scopes ?? [], options.tokenWorkspaceId)\n const url = new URL(`${apiUrl}${path}`)\n for (const [key, value] of Object.entries(options.query ?? {})) {\n if (value !== undefined) url.searchParams.set(key, String(value))\n }\n\n const headers: Record<string, string> = { Authorization: `Bearer ${token}` }\n let body: BodyInit | undefined\n if (options.rawBody !== undefined) {\n body = options.rawBody\n headers['Content-Type'] = options.contentType ?? 'application/octet-stream'\n } else if (options.body !== undefined) {\n body = JSON.stringify(options.body)\n headers['Content-Type'] = 'application/json'\n }\n\n for (const [key, value] of Object.entries(options.headers ?? {})) headers[key] = value\n\n const res = await fetch(url, { method, headers, body, ...insecureFetchOptions(insecure), ...(options.rawBody !== undefined ? { duplex: 'half' as const } : {}) })\n if (!res.ok) {\n const text = await res.text().catch(() => '')\n throw new ApiError(res.status, `${method} ${path} failed (${res.status}). ${hintFor(res.status)}${formatErrorBody(text)}`)\n }\n return res\n }\n\n async function request<T>(method: string, path: string, options: RequestOptions = {}): Promise<T> {\n const res = await requestRaw(method, path, options)\n if (res.status === 204) return undefined as T\n const text = await res.text()\n if (!text) return undefined as T\n try {\n return JSON.parse(text) as T\n } catch {\n return text as unknown as T\n }\n }\n\n return { apiUrl, request, requestRaw, mintAccessToken }\n}\n\nfunction hintFor(status: number): string {\n switch (status) {\n case 401:\n return 'Your credential is invalid or expired — run `verentis login` again.'\n case 403:\n return 'You lack the required scope or ownership for this operation.'\n case 404:\n return 'Not found (or not visible to you).'\n default:\n return ''\n }\n}\n\nfunction truncate(text: string, max = 400): string {\n return text.length > max ? `${text.slice(0, max)}…` : text\n}\n\n/** Render RFC 7807 ProblemDetails / validation errors compactly; fall back to raw text. */\nfunction formatErrorBody(text: string): string {\n if (!text) return ''\n try {\n const problem = JSON.parse(text) as { title?: string; detail?: string; errors?: Record<string, string[]> }\n const lines: string[] = []\n if (problem.title) lines.push(problem.title)\n if (problem.detail && problem.detail !== problem.title) lines.push(problem.detail)\n for (const [field, messages] of Object.entries(problem.errors ?? {})) {\n for (const message of messages) lines.push(` ${field}: ${message}`)\n }\n if (lines.length > 0) return `\\n${truncate(lines.join('\\n'), 800)}`\n } catch {\n // not json — fall through\n }\n return `\\n${truncate(text)}`\n}\n\nexport const SCOPES = {\n publisherRead: 'marketplace.publisher.read',\n publisherCreate: 'marketplace.publisher.create',\n publisherUpdate: 'marketplace.publisher.update',\n packageRead: 'marketplace.package.read',\n packageReadAll: 'marketplace.package.read-all',\n packageCreate: 'marketplace.package.create',\n packagePublish: 'marketplace.package.publish',\n installCreate: 'marketplace.install.create',\n installRead: 'marketplace.install.read',\n installDelete: 'marketplace.install.delete',\n} as const\n","/**\n * Scope catalog — every authorization scope the platform registers, grouped per service.\n * Source of truth: each service's `*.Application/Security/Scopes.cs` in the platform repo.\n */\n\nexport const SECURITY = {\n apiKeyCreate: 'security.api-key.create',\n apiKeyRead: 'security.api-key.read',\n apiKeyReadAll: 'security.api-key.read-all',\n apiKeyUpdate: 'security.api-key.update',\n grantsCreate: 'security.grants.create',\n grantsDelete: 'security.grants.delete',\n grantsRead: 'security.grants.read',\n grantsReadAll: 'security.grants.read-all',\n membershipCreate: 'security.membership.create',\n membershipDelete: 'security.membership.delete',\n membershipRead: 'security.membership.read',\n roleCreate: 'security.role.create',\n roleRead: 'security.role.read',\n roleReadAll: 'security.role.read-all',\n roleUpdate: 'security.role.update',\n serviceCreate: 'security.service.create',\n serviceDelete: 'security.service.delete',\n serviceRead: 'security.service.read',\n serviceReadAll: 'security.service.read-all',\n serviceUpdate: 'security.service.update',\n summaryReadAll: 'security.summary.read-all',\n userCreate: 'security.user.create',\n userRead: 'security.user.read',\n userReadAll: 'security.user.read-all',\n userUpdate: 'security.user.update',\n workspaceOauthRead: 'security.workspace-oauth.read',\n workspaceOauthUpdate: 'security.workspace-oauth.update',\n} as const\n\nexport const ACCOUNT = {\n accountCreate: 'account.account.create',\n invitationAccept: 'account.invitation.accept',\n invitationCreate: 'account.invitation.create',\n invitationDelete: 'account.invitation.delete',\n invitationRead: 'account.invitation.read',\n invitationUpdate: 'account.invitation.update',\n} as const\n\nexport const WORKSPACE = {\n create: 'account.workspace.create',\n read: 'account.workspace.read',\n readAll: 'account.workspace.read-all',\n update: 'account.workspace.update',\n urlsCreate: 'account.workspace.urls.create',\n urlsDelete: 'account.workspace.urls.delete',\n urlsRead: 'account.workspace.urls.read',\n invitationAccept: 'account.workspace.invitation.accept',\n invitationCreate: 'account.workspace.invitation.create',\n invitationDelete: 'account.workspace.invitation.delete',\n invitationRead: 'account.workspace.invitation.read',\n invitationUpdate: 'account.workspace.invitation.update',\n} as const\n\nexport const FABRIC = {\n serviceCreate: 'fabric.service.create',\n serviceDelete: 'fabric.service.delete',\n serviceRead: 'fabric.service.read',\n serviceReadAll: 'fabric.service.read-all',\n serviceShutdown: 'fabric.service.shutdown',\n} as const\n\nexport const SETTINGS = {\n delete: 'fabric.setting.delete',\n read: 'fabric.setting.read',\n readAll: 'fabric.setting.read-all',\n update: 'fabric.setting.update',\n} as const\n\nexport const NODE = {\n branchCreate: 'node.branch.create',\n branchRead: 'node.branch.read',\n branchReadAll: 'node.branch.read-all',\n branchUpdate: 'node.branch.update',\n contentCreate: 'node.content.create',\n contentRead: 'node.content.read',\n contentReadAll: 'node.content.read-all',\n contentUpdate: 'node.content.update',\n fileDelete: 'node.file.delete',\n fileRead: 'node.file.read',\n journalCreate: 'node.journal.create',\n journalRead: 'node.journal.read',\n journalReadAll: 'node.journal.read-all',\n journalUpdate: 'node.journal.update',\n nodeCreate: 'node.node.create',\n nodeReadAll: 'node.node.read-all',\n nodeUpdate: 'node.node.update',\n} as const\n\nexport const EXECUTION = {\n run: 'execution.execution.run',\n} as const\n\nexport const AI = {\n conversationConverse: 'ai.conversation.converse',\n conversationDelete: 'ai.conversation.delete',\n conversationRead: 'ai.conversation.read',\n toolExecute: 'ai.tool.execute',\n toolRead: 'ai.tool.read',\n} as const\n\nexport const RESOURCE = {\n create: 'resources.resource.create',\n delete: 'resources.resource.delete',\n read: 'resources.resource.read',\n readAll: 'resources.resource.read-all',\n update: 'resources.resource.update',\n} as const\n\nexport const MARKETPLACE = {\n billingManage: 'marketplace.billing.manage',\n entitlementCreate: 'marketplace.entitlement.create',\n entitlementRead: 'marketplace.entitlement.read',\n installCreate: 'marketplace.install.create',\n installDelete: 'marketplace.install.delete',\n installRead: 'marketplace.install.read',\n moderationReview: 'marketplace.moderation.review',\n packageCreate: 'marketplace.package.create',\n packageDelete: 'marketplace.package.delete',\n packagePublish: 'marketplace.package.publish',\n packageRead: 'marketplace.package.read',\n packageReadAll: 'marketplace.package.read-all',\n packageUpdate: 'marketplace.package.update',\n packageVisibilityManage: 'marketplace.package.visibility.manage',\n publisherCreate: 'marketplace.publisher.create',\n publisherRead: 'marketplace.publisher.read',\n publisherReadAll: 'marketplace.publisher.read-all',\n publisherUpdate: 'marketplace.publisher.update',\n reportCreate: 'marketplace.report.create',\n reportReview: 'marketplace.report.review',\n statsRead: 'marketplace.stats.read',\n trustManage: 'marketplace.trust.manage',\n} as const\n\n/** The standard VFS read/write set an engine run needs (mirrors the python engine manifest). */\nexport const ENGINE_DEFAULT_PERMISSIONS = [\n NODE.fileRead,\n NODE.contentRead,\n NODE.branchRead,\n NODE.nodeCreate,\n NODE.nodeUpdate,\n NODE.contentCreate,\n NODE.contentUpdate,\n NODE.journalCreate,\n NODE.journalUpdate,\n NODE.branchUpdate,\n NODE.fileDelete,\n EXECUTION.run,\n] as const\n","/**\n * Endpoint catalog — declarative map of the platform's gateway-exposed HTTP surface,\n * grouped per backend service. Commands consume these entries via `call()` in client.ts.\n *\n * Adding CLI coverage for a new endpoint = add one entry here + a thin command.\n * Anything not listed is still reachable with `verentis api <method> <path>`.\n */\nimport * as scopes from './scopes.js'\n\nexport interface Endpoint {\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'\n /** Path template; `{param}` segments are filled from `params`. */\n path: string\n scopes: readonly string[]\n /** Access token must be workspace-bound (calls the backend forwards to Node, or Node itself). */\n workspaceBound?: boolean\n /** Response is a PagedResult ({ totalCount, pageCount, pageSize, pageNumber, data }). */\n paged?: boolean\n}\n\nconst e = <T extends Endpoint>(endpoint: T): T => endpoint\n\n/** Verentis.Security — users, grants, API keys, workspace auth providers, tokens. */\nexport const security = {\n createAccessToken: e({ method: 'POST', path: '/v1/tokens/access', scopes: [] }),\n listUsers: e({ method: 'GET', path: '/v1/users', scopes: [scopes.SECURITY.userReadAll] }),\n getUser: e({ method: 'GET', path: '/v1/users/{userId}', scopes: [scopes.SECURITY.userRead] }),\n getUserRoles: e({ method: 'GET', path: '/v1/users/{userId}/roles', scopes: [scopes.SECURITY.userRead] }),\n getUserGrants: e({ method: 'GET', path: '/v1/users/{userId}/grants', scopes: [scopes.SECURITY.userRead] }),\n activateUser: e({ method: 'PATCH', path: '/v1/users/{userId}/activate', scopes: [scopes.SECURITY.userUpdate] }),\n suspendUser: e({ method: 'PATCH', path: '/v1/users/{userId}/suspend', scopes: [scopes.SECURITY.userUpdate] }),\n grantUserPermission: e({ method: 'POST', path: '/v1/users/{userId}/grants', scopes: [scopes.SECURITY.grantsCreate] }),\n updateUserGrant: e({ method: 'PATCH', path: '/v1/users/{userId}/grants/{grantId}', scopes: [scopes.SECURITY.grantsCreate, scopes.SECURITY.grantsDelete] }),\n createApiKey: e({ method: 'POST', path: '/v1/api-keys', scopes: [scopes.SECURITY.apiKeyCreate] }),\n listApiKeys: e({ method: 'GET', path: '/v1/api-keys', scopes: [scopes.SECURITY.apiKeyReadAll] }),\n getApiKey: e({ method: 'GET', path: '/v1/api-keys/{apiKeyId}', scopes: [scopes.SECURITY.apiKeyRead] }),\n updateApiKey: e({ method: 'PATCH', path: '/v1/api-keys/{apiKeyId}', scopes: [scopes.SECURITY.apiKeyUpdate] }),\n revokeApiKey: e({ method: 'PATCH', path: '/v1/api-keys/{apiKeyId}/revoke', scopes: [scopes.SECURITY.apiKeyUpdate] }),\n regenerateApiKey: e({ method: 'POST', path: '/v1/api-keys/{apiKeyId}/regenerate', scopes: [scopes.SECURITY.apiKeyUpdate] }),\n addApiKeyGrant: e({ method: 'POST', path: '/v1/api-keys/{apiKeyId}/grants', scopes: [scopes.SECURITY.apiKeyUpdate] }),\n removeApiKeyGrant: e({ method: 'DELETE', path: '/v1/api-keys/{apiKeyId}/grants/{permissionKey}', scopes: [scopes.SECURITY.apiKeyUpdate] }),\n grantCatalog: e({ method: 'GET', path: '/v1/grants/catalog', scopes: [scopes.SECURITY.grantsReadAll] }),\n getWorkspaceAuthProvider: e({ method: 'GET', path: '/v1/workspaces/{workspaceId}/auth-provider', scopes: [scopes.SECURITY.workspaceOauthRead] }),\n upsertWorkspaceAuthProvider: e({ method: 'PUT', path: '/v1/workspaces/{workspaceId}/auth-provider', scopes: [scopes.SECURITY.workspaceOauthUpdate] }),\n} as const\n\n/** Verentis.Account — account lifecycle + account invitations. */\nexport const account = {\n get: e({ method: 'GET', path: '/v1/accounts/{accountId}', scopes: ['account.account.read'] }),\n update: e({ method: 'PUT', path: '/v1/accounts/{accountId}', scopes: ['account.account.update'] }),\n listInvitations: e({ method: 'GET', path: '/v1/accounts/{accountId}/invitations', scopes: [scopes.ACCOUNT.invitationRead], paged: true }),\n createInvitation: e({ method: 'POST', path: '/v1/accounts/{accountId}/invitations', scopes: [scopes.ACCOUNT.invitationCreate] }),\n resendInvitation: e({ method: 'POST', path: '/v1/accounts/{accountId}/invitations/{invitationId}/resend', scopes: [scopes.ACCOUNT.invitationUpdate] }),\n revokeInvitation: e({ method: 'DELETE', path: '/v1/accounts/{accountId}/invitations/{invitationId}', scopes: [scopes.ACCOUNT.invitationDelete] }),\n getInvitationByCode: e({ method: 'GET', path: '/v1/account-invitations/{code}', scopes: [] }),\n acceptInvitation: e({ method: 'POST', path: '/v1/account-invitations/accept', scopes: [scopes.ACCOUNT.invitationAccept] }),\n} as const\n\n/** Verentis.Workspace — workspaces, domains, workspace invitations. */\nexport const workspace = {\n list: e({ method: 'GET', path: '/v1/workspaces', scopes: [scopes.WORKSPACE.readAll], paged: true }),\n get: e({ method: 'GET', path: '/v1/workspaces/{workspaceId}', scopes: [scopes.WORKSPACE.read] }),\n createMine: e({ method: 'POST', path: '/v1/workspaces', scopes: [scopes.WORKSPACE.create] }),\n update: e({ method: 'PUT', path: '/v1/workspaces/{workspaceId}', scopes: [scopes.WORKSPACE.update] }),\n listDomains: e({ method: 'GET', path: '/v1/workspaces/{workspaceId}/domains', scopes: [scopes.WORKSPACE.urlsRead] }),\n addDomain: e({ method: 'POST', path: '/v1/workspaces/{workspaceId}/domains', scopes: [scopes.WORKSPACE.urlsCreate] }),\n removeDomain: e({ method: 'DELETE', path: '/v1/workspaces/{workspaceId}/domains/{domainId}', scopes: [scopes.WORKSPACE.urlsDelete] }),\n listInvitations: e({ method: 'GET', path: '/v1/workspaces/{workspaceId}/invitations', scopes: [scopes.WORKSPACE.invitationRead], paged: true }),\n createInvitation: e({ method: 'POST', path: '/v1/workspaces/{workspaceId}/invitations', scopes: [scopes.WORKSPACE.invitationCreate] }),\n resendInvitation: e({ method: 'POST', path: '/v1/workspaces/{workspaceId}/invitations/{invitationId}/resend', scopes: [scopes.WORKSPACE.invitationUpdate] }),\n revokeInvitation: e({ method: 'DELETE', path: '/v1/workspaces/{workspaceId}/invitations/{invitationId}', scopes: [scopes.WORKSPACE.invitationDelete] }),\n getInvitationByCode: e({ method: 'GET', path: '/v1/workspace-invitations/{code}', scopes: [] }),\n acceptInvitation: e({ method: 'POST', path: '/v1/workspace-invitations/accept', scopes: [scopes.WORKSPACE.invitationAccept] }),\n} as const\n\n/** Verentis.Settings — key/value platform settings. */\nexport const settings = {\n list: e({ method: 'GET', path: '/v1/settings', scopes: [scopes.SETTINGS.readAll], paged: true }),\n get: e({ method: 'GET', path: '/v1/settings/{key}', scopes: [scopes.SETTINGS.read] }),\n upsert: e({ method: 'PUT', path: '/v1/settings/{key}', scopes: [scopes.SETTINGS.update] }),\n delete: e({ method: 'DELETE', path: '/v1/settings/{key}', scopes: [scopes.SETTINGS.delete] }),\n} as const\n\n/** Verentis.Node — the workspace virtual file system. All calls are workspace-bound. */\nexport const files = {\n get: e({ method: 'GET', path: '/v1/files/{path}', scopes: [scopes.NODE.fileRead], workspaceBound: true }),\n raw: e({ method: 'GET', path: '/v1/files/raw/{path}', scopes: [scopes.NODE.fileRead], workspaceBound: true }),\n package: e({ method: 'GET', path: '/v1/files/package/{path}', scopes: [scopes.NODE.fileRead], workspaceBound: true }),\n upload: e({\n method: 'POST',\n path: '/v1/files/{path}',\n scopes: [scopes.NODE.nodeCreate, scopes.NODE.fileRead, scopes.NODE.nodeUpdate, scopes.NODE.journalCreate],\n workspaceBound: true,\n }),\n update: e({ method: 'PUT', path: '/v1/files/{path}', scopes: [scopes.NODE.nodeUpdate, scopes.NODE.fileRead, scopes.NODE.journalCreate], workspaceBound: true }),\n delete: e({ method: 'DELETE', path: '/v1/files/{path}', scopes: [scopes.NODE.fileDelete], workspaceBound: true }),\n} as const\n\n/** Verentis.Execution — executions, logs, engines. */\nexport const execution = {\n request: e({ method: 'POST', path: '/v1/executions', scopes: [scopes.EXECUTION.run, ...scopes.ENGINE_DEFAULT_PERMISSIONS], workspaceBound: true }),\n list: e({ method: 'GET', path: '/v1/executions', scopes: [scopes.EXECUTION.run], workspaceBound: true, paged: true }),\n get: e({ method: 'GET', path: '/v1/executions/{id}', scopes: [scopes.EXECUTION.run], workspaceBound: true }),\n cancel: e({ method: 'POST', path: '/v1/executions/{id}/cancel', scopes: [scopes.EXECUTION.run], workspaceBound: true }),\n logs: e({ method: 'GET', path: '/v1/executions/{id}/logs', scopes: [scopes.EXECUTION.run], workspaceBound: true }),\n logsStream: e({ method: 'GET', path: '/v1/executions/{id}/logs/stream', scopes: [scopes.EXECUTION.run], workspaceBound: true }),\n listEngines: e({ method: 'GET', path: '/v1/engines', scopes: [scopes.EXECUTION.run], paged: true }),\n getEngine: e({ method: 'GET', path: '/v1/engines/{id}', scopes: [scopes.EXECUTION.run] }),\n resolveEngine: e({ method: 'GET', path: '/v1/engines/resolve', scopes: [scopes.EXECUTION.run] }),\n syncEngines: e({ method: 'POST', path: '/v1/engines/sync', scopes: [scopes.EXECUTION.run], workspaceBound: true }),\n} as const\n\n/** Verentis.Marketplace — publishers, packages, versions, installations. */\nexport const marketplace = {\n searchPublishers: e({ method: 'GET', path: '/v1/publishers', scopes: [scopes.MARKETPLACE.publisherReadAll], paged: true }),\n getPublisher: e({ method: 'GET', path: '/v1/publishers/{id}', scopes: [scopes.MARKETPLACE.publisherRead] }),\n getPublisherByName: e({ method: 'GET', path: '/v1/publishers/by-name/{name}', scopes: [scopes.MARKETPLACE.publisherRead] }),\n getMyPublisher: e({ method: 'GET', path: '/v1/publishers/me', scopes: [scopes.MARKETPLACE.publisherRead] }),\n createPublisher: e({ method: 'POST', path: '/v1/publishers', scopes: [scopes.MARKETPLACE.publisherCreate] }),\n updatePublisher: e({ method: 'PUT', path: '/v1/publishers/{id}', scopes: [scopes.MARKETPLACE.publisherUpdate] }),\n setPublisherLogo: e({ method: 'PUT', path: '/v1/publishers/{id}/logo', scopes: [scopes.MARKETPLACE.publisherUpdate] }),\n removePublisherLogo: e({ method: 'DELETE', path: '/v1/publishers/{id}/logo', scopes: [scopes.MARKETPLACE.publisherUpdate] }),\n registerSigningKey: e({ method: 'POST', path: '/v1/publishers/{publisherId}/keys', scopes: [scopes.MARKETPLACE.publisherUpdate] }),\n revokeSigningKey: e({ method: 'DELETE', path: '/v1/publishers/{publisherId}/keys/{kid}', scopes: [scopes.MARKETPLACE.publisherUpdate] }),\n searchPackages: e({ method: 'GET', path: '/v1/packages', scopes: [scopes.MARKETPLACE.packageReadAll], paged: true }),\n getPackageCategories: e({ method: 'GET', path: '/v1/packages/categories', scopes: [scopes.MARKETPLACE.packageReadAll] }),\n getPackage: e({ method: 'GET', path: '/v1/packages/{id}', scopes: [scopes.MARKETPLACE.packageRead] }),\n createPackage: e({ method: 'POST', path: '/v1/packages', scopes: [scopes.MARKETPLACE.packageCreate] }),\n updatePackage: e({ method: 'PUT', path: '/v1/packages/{id}', scopes: [scopes.MARKETPLACE.packageUpdate] }),\n archivePackage: e({ method: 'DELETE', path: '/v1/packages/{id}', scopes: [scopes.MARKETPLACE.packageDelete] }),\n deprecatePackage: e({ method: 'POST', path: '/v1/packages/{id}/deprecate', scopes: [scopes.MARKETPLACE.packageUpdate] }),\n undeprecatePackage: e({ method: 'DELETE', path: '/v1/packages/{id}/deprecate', scopes: [scopes.MARKETPLACE.packageUpdate] }),\n setPackageVisibility: e({ method: 'PUT', path: '/v1/packages/{id}/visibility', scopes: [scopes.MARKETPLACE.packageVisibilityManage] }),\n listPublisherPackages: e({ method: 'GET', path: '/v1/publishers/{publisherId}/packages', scopes: [scopes.MARKETPLACE.packageRead], paged: true }),\n listVersions: e({ method: 'GET', path: '/v1/packages/{packageId}/versions', scopes: [scopes.MARKETPLACE.packageRead], paged: true }),\n uploadVersion: e({ method: 'POST', path: '/v1/packages/{packageId}/versions', scopes: [scopes.MARKETPLACE.packagePublish] }),\n getVersion: e({ method: 'GET', path: '/v1/packages/{packageId}/versions/{version}', scopes: [scopes.MARKETPLACE.packageRead] }),\n downloadTarball: e({ method: 'GET', path: '/v1/packages/{packageId}/versions/{version}/tarball', scopes: [scopes.MARKETPLACE.packageRead] }),\n yankVersion: e({ method: 'POST', path: '/v1/packages/{packageId}/versions/{version}/yank', scopes: [scopes.MARKETPLACE.packagePublish] }),\n listVisibilityGrants: e({ method: 'GET', path: '/v1/packages/{packageId}/visibility-grants', scopes: [scopes.MARKETPLACE.packageVisibilityManage] }),\n grantVisibility: e({ method: 'POST', path: '/v1/packages/{packageId}/visibility-grants', scopes: [scopes.MARKETPLACE.packageVisibilityManage] }),\n revokeVisibility: e({ method: 'DELETE', path: '/v1/packages/{packageId}/visibility-grants/{grantId}', scopes: [scopes.MARKETPLACE.packageVisibilityManage] }),\n getPackageStats: e({ method: 'GET', path: '/v1/packages/{packageId}/stats', scopes: [scopes.MARKETPLACE.statsRead] }),\n listInstallations: e({ method: 'GET', path: '/v1/installations', scopes: [scopes.MARKETPLACE.installRead], paged: true }),\n install: e({ method: 'POST', path: '/v1/installations', scopes: [scopes.MARKETPLACE.installCreate], workspaceBound: true }),\n uninstall: e({ method: 'DELETE', path: '/v1/installations/{id}', scopes: [scopes.MARKETPLACE.installDelete], workspaceBound: true }),\n} as const\n\n/** Verentis.Resource — resource registrations (apps/engines visible to a workspace). */\nexport const resource = {\n list: e({ method: 'GET', path: '/v1/resources', scopes: [scopes.RESOURCE.readAll], workspaceBound: true, paged: true }),\n get: e({ method: 'GET', path: '/v1/resources/{id}', scopes: [scopes.RESOURCE.read], workspaceBound: true }),\n resolve: e({ method: 'GET', path: '/v1/resources/resolve', scopes: [scopes.RESOURCE.readAll], workspaceBound: true }),\n resolveFileType: e({ method: 'GET', path: '/v1/resources/file-types/resolve', scopes: [scopes.RESOURCE.readAll], workspaceBound: true }),\n} as const\n","/** Thin typed wrapper that executes catalog endpoints against the ApiClient. */\nimport type { ApiClient, RequestOptions } from '../http.js'\nimport type { Endpoint } from './catalog.js'\n\nexport interface CallOptions {\n /** Values for `{param}` placeholders in the endpoint path. */\n params?: Record<string, string | number>\n query?: Record<string, string | number | boolean | undefined>\n body?: unknown\n /** Workspace to bind the access token to (required when endpoint.workspaceBound). */\n workspaceId?: string\n /** Extra scopes on top of the endpoint's declared ones. */\n extraScopes?: string[]\n rawBody?: BodyInit\n contentType?: string\n}\n\nexport function fillPath(template: string, params: Record<string, string | number> = {}): string {\n return template.replace(/\\{(\\w+)\\}/g, (_, name: string) => {\n const value = params[name]\n if (value === undefined) throw new Error(`Missing path parameter '${name}' for ${template}`)\n // File-system-like path params may contain slashes which must survive.\n return String(value)\n .split('/')\n .map((segment) => encodeURIComponent(segment))\n .join('/')\n })\n}\n\nfunction toRequestOptions(endpoint: Endpoint, options: CallOptions): RequestOptions {\n if (endpoint.workspaceBound && !options.workspaceId) {\n throw new Error('This operation requires a workspace. Pass --workspace <id> or set one with `verentis use workspace <id>`.')\n }\n return {\n scopes: [...new Set([...endpoint.scopes, ...(options.extraScopes ?? [])])],\n tokenWorkspaceId: endpoint.workspaceBound ? options.workspaceId : undefined,\n query: options.query,\n body: options.body,\n rawBody: options.rawBody,\n contentType: options.contentType,\n }\n}\n\n/** Unwraps the platform's `JsonResponse<T>` (`{ value: T }`) envelope when present. */\nfunction unwrap<T>(payload: unknown): T {\n if (payload !== null && typeof payload === 'object' && !Array.isArray(payload)) {\n const keys = Object.keys(payload as Record<string, unknown>)\n if (keys.length === 1 && keys[0] === 'value') return (payload as { value: T }).value\n }\n return payload as T\n}\n\nexport async function call<T>(api: ApiClient, endpoint: Endpoint, options: CallOptions = {}): Promise<T> {\n const result = await api.request<unknown>(endpoint.method, fillPath(endpoint.path, options.params), toRequestOptions(endpoint, options))\n return unwrap<T>(result)\n}\n\nexport async function callRaw(api: ApiClient, endpoint: Endpoint, options: CallOptions = {}): Promise<Response> {\n return api.requestRaw(endpoint.method, fillPath(endpoint.path, options.params), toRequestOptions(endpoint, options))\n}\n\nexport interface PagedResult<T> {\n totalCount?: number\n pageCount?: number\n pageSize?: number\n pageNumber?: number\n data?: T[]\n /** Some services expose `items` instead of `data`. */\n items?: T[]\n}\n\nexport const pageItems = <T>(page: PagedResult<T> | T[] | null | undefined): T[] => {\n if (!page) return []\n if (Array.isArray(page)) return page\n return page.data ?? page.items ?? []\n}\n\nexport interface PagingFlags {\n page?: string\n pageSize?: string\n orderBy?: string\n all?: boolean\n}\n\nexport function pagingQuery(flags: PagingFlags): Record<string, string | number | undefined> {\n return {\n PageNo: flags.page ? Number(flags.page) : 1,\n PageSize: flags.pageSize ? Number(flags.pageSize) : 50,\n OrderBy: flags.orderBy,\n }\n}\n\n/** Fetch every page of a paged endpoint (used by --all). */\nexport async function callAllPages<T>(api: ApiClient, endpoint: Endpoint, options: CallOptions = {}): Promise<T[]> {\n const items: T[] = []\n let pageNo = 1\n for (;;) {\n const page = await call<PagedResult<T>>(api, endpoint, {\n ...options,\n query: { ...options.query, PageNo: pageNo, PageSize: 100 },\n })\n const batch = pageItems(page)\n items.push(...batch)\n const pageCount = Array.isArray(page) ? 1 : (page.pageCount ?? 1)\n if (batch.length === 0 || pageNo >= pageCount) return items\n pageNo += 1\n }\n}\n","/** Resolution of the active workspace/account context: flag → env → config → token claim. */\nimport { loadConfig } from './config.js'\nimport { decodeJwtPayload } from './jwt.js'\n\nexport interface ContextFlags {\n workspace?: string\n account?: string\n}\n\nexport async function resolveWorkspaceId(flags: ContextFlags, required = true): Promise<string | undefined> {\n const config = await loadConfig()\n const workspaceId = flags.workspace ?? process.env.VERENTIS_WORKSPACE_ID ?? config.defaultWorkspaceId\n if (!workspaceId && required) {\n throw new Error('No workspace selected. Pass --workspace <id> or set a default with `verentis use workspace <id>`.')\n }\n return workspaceId\n}\n\nexport async function resolveAccountId(flags: ContextFlags, required = true): Promise<string | undefined> {\n const config = await loadConfig()\n let accountId = flags.account ?? process.env.VERENTIS_ACCOUNT_ID ?? config.defaultAccountId\n if (!accountId) {\n const identityToken = process.env.VERENTIS_TOKEN ?? config.identityToken\n if (identityToken) accountId = decodeJwtPayload(identityToken)?.account_id as string | undefined\n }\n if (!accountId && required) {\n throw new Error('No account selected. Pass --account <id> or set a default with `verentis use account <id>`.')\n }\n return accountId\n}\n\n/** Standard scope query params for Security management endpoints (users, api-keys, grants). */\nexport async function managementScope(flags: ContextFlags & { node?: string }): Promise<Record<string, string>> {\n const accountId = (await resolveAccountId(flags))!\n const workspaceId = await resolveWorkspaceId(flags, false)\n if (flags.node && !workspaceId) throw new Error('--node requires --workspace.')\n const scopeKind = flags.node ? 'Node' : workspaceId ? 'Workspace' : 'Account'\n const scopeId = flags.node ?? workspaceId ?? accountId\n return {\n scopeKind,\n scopeId,\n accountId,\n ...(workspaceId ? { workspaceId } : {}),\n ...(flags.node ? { nodeId: flags.node } : {}),\n }\n}\n","/** Shared output helpers: human tables by default, `--json` for scripting. */\n\nexport interface OutputOptions {\n json?: boolean\n}\n\nexport function printJson(value: unknown): void {\n console.log(JSON.stringify(value, null, 2))\n}\n\n/** Render rows as an aligned column table. Columns are picked from `columns` (key → header). */\nexport function printTable<T extends Record<string, unknown>>(rows: T[], columns: Record<string, string>): void {\n if (rows.length === 0) {\n console.log('(none)')\n return\n }\n const keys = Object.keys(columns)\n const cells = rows.map((row) => keys.map((key) => formatCell(row[key])))\n const headers = keys.map((key) => columns[key])\n const widths = headers.map((header, i) => Math.max(header.length, ...cells.map((row) => row[i].length)))\n const line = (parts: string[]) => parts.map((part, i) => part.padEnd(widths[i])).join(' ').trimEnd()\n console.log(line(headers))\n console.log(line(widths.map((w) => '-'.repeat(w))))\n for (const row of cells) console.log(line(row))\n}\n\nfunction formatCell(value: unknown): string {\n if (value === null || value === undefined) return ''\n if (value instanceof Date) return value.toISOString()\n if (typeof value === 'object') return JSON.stringify(value)\n return String(value)\n}\n\n/** Print either JSON (with --json) or a table of the given rows. */\nexport function output<T extends Record<string, unknown>>(rows: T[], columns: Record<string, string>, options: OutputOptions, jsonValue?: unknown): void {\n if (options.json) {\n printJson(jsonValue ?? rows)\n return\n }\n printTable(rows, columns)\n}\n\n/** Print a single record as `key: value` lines, or JSON with --json. */\nexport function outputRecord(record: Record<string, unknown>, options: OutputOptions): void {\n if (options.json) {\n printJson(record)\n return\n }\n const width = Math.max(...Object.keys(record).map((k) => k.length))\n for (const [key, value] of Object.entries(record)) {\n console.log(`${key.padEnd(width)} ${formatCell(value)}`)\n }\n}\n","import { Command } from 'commander'\nimport { createApiClient } from '../http.js'\nimport { account } from '../api/catalog.js'\nimport { call, pageItems, type PagedResult } from '../api/client.js'\nimport { resolveAccountId } from '../context.js'\nimport { output, outputRecord } from '../output.js'\n\ninterface InvitationDto {\n id: string\n emailAddress: string\n roleKey: string\n status: string\n expiresAt?: string\n [key: string]: unknown\n}\n\nexport function registerAccount(program: Command): void {\n const accountCmd = program.command('account').description('Manage Verentis accounts')\n\n accountCmd\n .command('get')\n .description('Show account details')\n .option('--account <accountId>', 'account id (default: configured/derived account)')\n .option('--json', 'output JSON')\n .action(async (options: { account?: string; json?: boolean }) => {\n const accountId = (await resolveAccountId(options))!\n const api = await createApiClient()\n const result = await call<Record<string, unknown>>(api, account.get, { params: { accountId } })\n outputRecord(result, options)\n })\n\n accountCmd\n .command('update')\n .description('Update account details')\n .requiredOption('--name <name>', 'account name')\n .option('--description <description>')\n .option('--account <accountId>', 'account id')\n .action(async (options: { name: string; description?: string; account?: string }) => {\n const accountId = (await resolveAccountId(options))!\n const api = await createApiClient()\n await call(api, account.update, {\n params: { accountId },\n body: { accountId, name: options.name, description: options.description ?? null },\n })\n console.log(`Account ${accountId} updated.`)\n })\n\n const inviteCmd = accountCmd.command('invite').description('Manage account invitations')\n\n inviteCmd\n .command('list')\n .description('List invitations for the account')\n .option('--account <accountId>', 'account id')\n .option('--json', 'output JSON')\n .action(async (options: { account?: string; json?: boolean }) => {\n const accountId = (await resolveAccountId(options))!\n const api = await createApiClient()\n const page = await call<PagedResult<InvitationDto>>(api, account.listInvitations, { params: { accountId } })\n const items = pageItems(page)\n output(items, { emailAddress: 'Email', roleKey: 'Role', status: 'Status', id: 'Id' }, options, page)\n })\n\n inviteCmd\n .command('create <email>')\n .description('Invite a user to the account')\n .option('--role <roleKey>', 'role to assign on acceptance', 'member')\n .option('--account <accountId>', 'account id')\n .action(async (email: string, options: { role: string; account?: string }) => {\n const accountId = (await resolveAccountId(options))!\n const api = await createApiClient()\n const id = await call<string>(api, account.createInvitation, {\n params: { accountId },\n body: { accountId, emailAddress: email, roleKey: options.role },\n })\n console.log(`Invitation ${id ?? ''} sent to ${email} (role ${options.role}).`.replace(' ', ' '))\n })\n\n inviteCmd\n .command('resend <invitationId>')\n .description('Resend an invitation email')\n .option('--account <accountId>', 'account id')\n .action(async (invitationId: string, options: { account?: string }) => {\n const accountId = (await resolveAccountId(options))!\n const api = await createApiClient()\n await call(api, account.resendInvitation, { params: { accountId, invitationId }, body: { accountId, invitationId } })\n console.log(`Invitation ${invitationId} resent.`)\n })\n\n inviteCmd\n .command('revoke <invitationId>')\n .description('Revoke an invitation')\n .option('--account <accountId>', 'account id')\n .action(async (invitationId: string, options: { account?: string }) => {\n const accountId = (await resolveAccountId(options))!\n const api = await createApiClient()\n await call(api, account.revokeInvitation, { params: { accountId, invitationId } })\n console.log(`Invitation ${invitationId} revoked.`)\n })\n\n inviteCmd\n .command('accept <code>')\n .description('Accept an account invitation code as the current user')\n .action(async (code: string) => {\n const api = await createApiClient()\n await call(api, account.acceptInvitation, { body: { code } })\n console.log('Invitation accepted.')\n })\n}\n","import { readFile } from 'node:fs/promises'\nimport { Command } from 'commander'\nimport { createApiClient } from '../http.js'\nimport { printJson } from '../output.js'\n\n/**\n * `verentis api` — authenticated escape hatch for any gateway endpoint (like `gh api`).\n * Gives full API parity for operations without a dedicated command yet.\n */\nexport function registerApi(program: Command): void {\n program\n .command('api <method> <path>')\n .description('Call any platform API endpoint with automatic authentication (e.g. `verentis api GET /v1/workspaces`)')\n .option('--scope <scope...>', 'scopes to request on the access token (repeatable)')\n .option('--workspace <workspaceId>', 'bind the access token to a workspace')\n .option('--body <json>', 'JSON request body (use @file.json to read from a file, or - for stdin)')\n .option('--query <key=value...>', 'query string parameters (repeatable)')\n .option('--content-type <type>', 'content type for --body when not JSON')\n .option('--raw', 'print the raw response body without JSON pretty-printing')\n .action(async (method: string, path: string, options: { scope?: string[]; workspace?: string; body?: string; query?: string[]; contentType?: string; raw?: boolean }) => {\n const api = await createApiClient()\n const query: Record<string, string> = {}\n for (const pair of options.query ?? []) {\n const idx = pair.indexOf('=')\n if (idx < 0) throw new Error(`Invalid --query '${pair}' (expected key=value).`)\n query[pair.slice(0, idx)] = pair.slice(idx + 1)\n }\n\n let body: unknown\n let rawBody: BodyInit | undefined\n if (options.body !== undefined) {\n let text = options.body\n if (text === '-') text = await readStdin()\n else if (text.startsWith('@')) text = await readFile(text.slice(1), 'utf8')\n if (options.contentType && !options.contentType.includes('json')) rawBody = text\n else body = JSON.parse(text)\n }\n\n const res = await api.requestRaw(method.toUpperCase(), path, {\n scopes: options.scope ?? [],\n tokenWorkspaceId: options.workspace,\n body,\n rawBody,\n contentType: options.contentType,\n query,\n })\n\n const text = await res.text()\n if (!text) {\n console.error(`${res.status} ${res.statusText}`)\n return\n }\n if (options.raw) {\n process.stdout.write(text)\n return\n }\n try {\n printJson(JSON.parse(text))\n } catch {\n process.stdout.write(text)\n }\n })\n}\n\nasync function readStdin(): Promise<string> {\n const chunks: Buffer[] = []\n for await (const chunk of process.stdin) chunks.push(chunk as Buffer)\n return Buffer.concat(chunks).toString('utf8')\n}\n","import { Command } from 'commander'\nimport { createApiClient } from '../http.js'\nimport { security } from '../api/catalog.js'\nimport { call } from '../api/client.js'\nimport { managementScope } from '../context.js'\nimport { loadConfig } from '../config.js'\nimport { decodeJwtPayload } from '../jwt.js'\nimport { output, outputRecord } from '../output.js'\n\ninterface ScopeFlags {\n account?: string\n workspace?: string\n node?: string\n json?: boolean\n}\n\ninterface CreateApiKeyResult {\n id: string\n rawKeyValue: string\n keyPrefix: string\n}\n\n/** The current user's id (sub) from the stored identity token — default API-key principal. */\nasync function currentUserId(): Promise<string | undefined> {\n const config = await loadConfig()\n const token = process.env.VERENTIS_TOKEN ?? config.identityToken\n return token ? (decodeJwtPayload(token)?.sub as string | undefined) : undefined\n}\n\nexport function registerApiKey(program: Command): void {\n const keyCmd = program.command('apikey').description('Manage Verentis API keys (vrt_...)')\n\n keyCmd\n .command('create <name>')\n .description('Create an API key in the selected scope (prints the key once — store it safely)')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>', 'create a workspace-scoped key')\n .option('--node <nodeId>', 'confine the key to a node subtree (requires --workspace)')\n .option('--principal <principalId>', 'principal the key acts as (default: you)')\n .option('--principal-type <type>', 'User | Role | Service', 'User')\n .option('--expires <iso8601>', 'expiry timestamp')\n .option('--grant <scope...>', 'permission scopes to grant the key (repeatable)')\n .option('--json', 'output JSON')\n .action(async (name: string, options: ScopeFlags & { principal?: string; principalType: string; expires?: string; grant?: string[] }) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n const principalId = options.principal ?? (await currentUserId())\n if (!principalId) throw new Error('Cannot determine the key principal. Pass --principal <userId> (API-key logins have no user context).')\n\n const result = await call<CreateApiKeyResult>(api, security.createApiKey, {\n body: {\n ...scope,\n name,\n principalType: options.principalType,\n principalId,\n expiresAt: options.expires ?? null,\n },\n })\n\n for (const grantScope of options.grant ?? []) {\n await call(api, security.addApiKeyGrant, {\n params: { apiKeyId: result.id },\n body: { ...scope, apiKeyId: result.id, permissionKey: grantScope, effect: 'Allow' },\n })\n }\n\n if (options.json) {\n outputRecord(result as unknown as Record<string, unknown>, options)\n return\n }\n console.log(`API key '${name}' created (${result.id}).`)\n console.log(`\\n ${result.rawKeyValue}\\n`)\n console.log('This value is shown ONCE. Store it safely (e.g. `verentis login --api-key ...` on the target machine).')\n if (options.grant?.length) console.log(`Granted: ${options.grant.join(', ')}`)\n })\n\n keyCmd\n .command('list')\n .description('List API keys in the selected scope')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .option('--search <text>')\n .option('--revoked', 'include only revoked keys')\n .option('--json', 'output JSON')\n .action(async (options: ScopeFlags & { search?: string; revoked?: boolean }) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n const result = await call<Record<string, unknown>[]>(api, security.listApiKeys, {\n query: { ...scope, search: options.search, isRevoked: options.revoked },\n })\n output(result ?? [], { name: 'Name', keyPrefix: 'Prefix', isRevoked: 'Revoked', expiresAt: 'Expires', id: 'Id' }, options, result)\n })\n\n keyCmd\n .command('get <apiKeyId>')\n .description('Show API key details (metadata only — the secret is never retrievable)')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .option('--json', 'output JSON')\n .action(async (apiKeyId: string, options: ScopeFlags) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n const result = await call<Record<string, unknown>>(api, security.getApiKey, { params: { apiKeyId }, query: scope })\n outputRecord(result, options)\n })\n\n keyCmd\n .command('update <apiKeyId>')\n .description('Update API key metadata')\n .requiredOption('--name <name>', 'new key name')\n .option('--expires <iso8601>', 'new expiry timestamp')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .action(async (apiKeyId: string, options: ScopeFlags & { name: string; expires?: string }) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n await call(api, security.updateApiKey, {\n params: { apiKeyId },\n body: { ...scope, apiKeyId, name: options.name, expiresAt: options.expires ?? null },\n })\n console.log(`API key ${apiKeyId} updated.`)\n })\n\n keyCmd\n .command('revoke <apiKeyId>')\n .description('Revoke an API key permanently')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .action(async (apiKeyId: string, options: ScopeFlags) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n await call(api, security.revokeApiKey, { params: { apiKeyId }, body: { ...scope, apiKeyId } })\n console.log(`API key ${apiKeyId} revoked.`)\n })\n\n keyCmd\n .command('regenerate <apiKeyId>')\n .description('Regenerate the secret for an API key (prints the new value once)')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .option('--json', 'output JSON')\n .action(async (apiKeyId: string, options: ScopeFlags) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n const result = await call<CreateApiKeyResult>(api, security.regenerateApiKey, { params: { apiKeyId }, body: { ...scope, apiKeyId } })\n if (options.json) {\n outputRecord(result as unknown as Record<string, unknown>, options)\n return\n }\n console.log(`API key ${apiKeyId} regenerated:`)\n console.log(`\\n ${result.rawKeyValue}\\n`)\n console.log('This value is shown ONCE. The previous secret no longer works.')\n })\n\n const grantCmd = keyCmd.command('grant').description('Manage permission grants on an API key')\n\n grantCmd\n .command('add <apiKeyId> <scope>')\n .description('Grant a permission scope to an API key (e.g. node.file.read)')\n .option('--deny', 'add as a Deny grant instead of Allow')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .action(async (apiKeyId: string, scopeName: string, options: ScopeFlags & { deny?: boolean }) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n await call(api, security.addApiKeyGrant, {\n params: { apiKeyId },\n body: { ...scope, apiKeyId, permissionKey: scopeName, effect: options.deny ? 'Deny' : 'Allow' },\n })\n console.log(`Granted ${scopeName} to API key ${apiKeyId}${options.deny ? ' (Deny)' : ''}.`)\n })\n\n grantCmd\n .command('remove <apiKeyId> <scope>')\n .description('Remove a permission grant from an API key')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .action(async (apiKeyId: string, scopeName: string, options: ScopeFlags) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n await call(api, security.removeApiKeyGrant, { params: { apiKeyId, permissionKey: scopeName }, query: scope })\n console.log(`Removed ${scopeName} from API key ${apiKeyId}.`)\n })\n}\n","/**\n * Local execution-context builder — produces the exact `context.json` + `VERENTIS_*` env the\n * platform injects into engine containers (contract: Verentis.Execution ExecutionProtocol /\n * ExecutionContext, protocol version 1). The engine SDK auto-loads either form.\n */\nimport { randomUUID } from 'node:crypto'\nimport { decodeJwtPayload } from '../jwt.js'\n\nexport interface LocalContextInput {\n apiUrl: string\n accessToken: string\n scopes: string[]\n workspaceId: string\n workspaceName?: string\n filePath?: string\n fileMimeType?: string\n branch?: string\n tool?: string\n mode?: string\n timeoutSeconds?: number\n args?: string[]\n env?: Record<string, string>\n parameters?: Record<string, unknown>\n executionId?: string\n}\n\nexport interface LocalExecutionContext {\n version: 1\n execution: { id: string; mode: string; tool?: string; trigger: string; timeout: number }\n workspace: { id: string; name?: string }\n file?: { path: string; name: string; mimeType?: string; branch: string }\n input: { arguments: string[]; environment: Record<string, string>; parameters?: Record<string, unknown> }\n platform: { apiUrl: string; token: { accessToken: string; expiresAt?: string; scopes: string[] } }\n}\n\nexport function buildLocalContext(input: LocalContextInput): LocalExecutionContext {\n const payload = decodeJwtPayload(input.accessToken)\n const expiresAt = payload?.exp ? new Date(payload.exp * 1000).toISOString() : undefined\n const filePath = input.filePath ? (input.filePath.startsWith('/') ? input.filePath : `/${input.filePath}`) : undefined\n\n return {\n version: 1,\n execution: {\n id: input.executionId ?? `local-${randomUUID()}`,\n mode: input.mode ?? 'request-response',\n ...(input.tool ? { tool: input.tool } : {}),\n trigger: 'user',\n timeout: input.timeoutSeconds ?? 300,\n },\n workspace: { id: input.workspaceId, ...(input.workspaceName ? { name: input.workspaceName } : {}) },\n ...(filePath\n ? {\n file: {\n path: filePath,\n name: filePath.split('/').pop() ?? filePath,\n ...(input.fileMimeType ? { mimeType: input.fileMimeType } : {}),\n branch: input.branch ?? 'main',\n },\n }\n : {}),\n input: {\n arguments: input.args ?? [],\n environment: input.env ?? {},\n ...(input.parameters ? { parameters: input.parameters } : {}),\n },\n platform: {\n apiUrl: input.apiUrl,\n token: { accessToken: input.accessToken, ...(expiresAt ? { expiresAt } : {}), scopes: input.scopes },\n },\n }\n}\n\n/** The env-var mirror of the context (ExecutionProtocol.EnvVars). */\nexport function contextEnv(context: LocalExecutionContext, contextPath: string): Record<string, string> {\n return {\n VERENTIS_CONTEXT_PATH: contextPath,\n VERENTIS_EXECUTION_ID: context.execution.id,\n VERENTIS_EXECUTION_MODE: context.execution.mode,\n ...(context.execution.tool ? { VERENTIS_EXECUTION_TOOL: context.execution.tool } : {}),\n VERENTIS_API_URL: context.platform.apiUrl,\n VERENTIS_ACCESS_TOKEN: context.platform.token.accessToken,\n VERENTIS_WORKSPACE_ID: context.workspace.id,\n ...(context.file\n ? {\n VERENTIS_FILE_PATH: context.file.path,\n ...(context.file.mimeType ? { VERENTIS_FILE_MIME_TYPE: context.file.mimeType } : {}),\n VERENTIS_FILE_BRANCH: context.file.branch,\n }\n : {}),\n VERENTIS_TIMEOUT: String(context.execution.timeout),\n }\n}\n","import { readFile, readdir, stat } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { parse } from 'yaml'\n\nexport type PackageKind = 'Application' | 'ExecutionEngine' | 'Bundle'\n\nexport interface ManifestMetadata {\n name: string\n 'display-name'?: string\n version: string\n description?: string\n icon?: string\n author?: string\n}\n\nexport interface PackagingSection {\n publisher?: string\n name?: string\n files?: string[]\n exclude?: string[]\n encryption?: 'none' | 'optional' | 'required'\n bundle?: { 'default-path'?: string }\n}\n\nexport interface MarketplaceImage {\n source: string\n alt: string\n caption?: string\n}\n\nexport interface MarketplaceHero {\n source: string\n alt: string\n}\n\nexport interface MarketplaceSection {\n logo?: string\n hero?: MarketplaceHero\n images?: MarketplaceImage[]\n readme?: string\n changelog?: string\n assets?: string[]\n}\n\nexport interface Manifest {\n 'api-version'?: string\n kind: string\n metadata: ManifestMetadata\n spec?: Record<string, unknown>\n marketplace?: MarketplaceSection\n packaging?: PackagingSection\n [key: string]: unknown\n}\n\nconst KIND_MAP: Record<string, PackageKind> = {\n application: 'Application',\n executionengine: 'ExecutionEngine',\n bundle: 'Bundle',\n}\n\nexport function normalizeKind(kind: string): PackageKind {\n const mapped = KIND_MAP[kind.replace(/[^a-z]/gi, '').toLowerCase()]\n if (!mapped) throw new Error(`Unsupported manifest kind '${kind}' — expected Application, ExecutionEngine or Bundle.`)\n return mapped\n}\n\nexport function validateLaunchManifestKind(kind: string | undefined, spec: unknown): string | undefined {\n if (kind === 'Application' || !spec || typeof spec !== 'object' || Array.isArray(spec)) return undefined\n if (!Object.prototype.hasOwnProperty.call(spec, 'launch')) return undefined\n return 'spec.launch is only supported for Application manifests'\n}\n\nexport async function loadManifest(path: string): Promise<Manifest> {\n const text = await readFile(path, 'utf8')\n const manifest = parse(text) as Manifest\n if (!manifest || typeof manifest !== 'object') throw new Error(`Failed to parse manifest at ${path}.`)\n if (!manifest.kind) throw new Error(`Manifest at ${path} is missing 'kind'.`)\n if (!manifest.metadata?.name) throw new Error(`Manifest at ${path} is missing 'metadata.name'.`)\n if (!manifest.metadata?.version) throw new Error(`Manifest at ${path} is missing 'metadata.version'.`)\n const kind = normalizeKind(manifest.kind)\n const launchKindError = validateLaunchManifestKind(kind, manifest.spec)\n if (launchKindError) throw new Error(`Invalid manifest at ${path}: ${launchKindError}.`)\n const marketplaceErrors = validateMarketplaceSection(manifest.marketplace)\n if (marketplaceErrors.length > 0) {\n throw new Error(`Invalid marketplace section in ${path}: ${marketplaceErrors.join(' ')}`)\n }\n return manifest\n}\n\nexport function validateMarketplaceSection(marketplace: unknown): string[] {\n if (marketplace === undefined) return []\n if (!marketplace || typeof marketplace !== 'object' || Array.isArray(marketplace)) {\n return ['marketplace must be an object.']\n }\n\n const section = marketplace as Record<string, unknown>\n const errors: string[] = []\n for (const field of ['logo', 'readme', 'changelog'] as const) {\n const value = section[field]\n if (value !== undefined && (typeof value !== 'string' || value.trim().length === 0)) {\n errors.push(`marketplace.${field} must be a non-empty relative path.`)\n }\n }\n\n if (section.hero !== undefined) {\n if (!section.hero || typeof section.hero !== 'object' || Array.isArray(section.hero)) {\n errors.push('marketplace.hero must be an object.')\n } else {\n const hero = section.hero as Record<string, unknown>\n if (typeof hero.source !== 'string' || hero.source.trim().length === 0) {\n errors.push('marketplace.hero.source must be a non-empty relative path.')\n }\n if (typeof hero.alt !== 'string' || hero.alt.trim().length === 0) {\n errors.push('marketplace.hero.alt is required and must not be empty.')\n }\n }\n }\n\n if (section.images !== undefined) {\n if (!Array.isArray(section.images)) {\n errors.push('marketplace.images must be a list.')\n } else {\n if (section.images.length > 8) errors.push('marketplace.images may contain at most 8 images.')\n section.images.forEach((value, index) => {\n const at = `marketplace.images[${index}]`\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n errors.push(`${at} must be an object.`)\n return\n }\n const image = value as Record<string, unknown>\n if (typeof image.source !== 'string' || image.source.trim().length === 0) {\n errors.push(`${at}.source must be a non-empty relative path.`)\n }\n if (typeof image.alt !== 'string' || image.alt.trim().length === 0) {\n errors.push(`${at}.alt is required and must not be empty.`)\n }\n if (image.caption !== undefined && typeof image.caption !== 'string') {\n errors.push(`${at}.caption must be a string when provided.`)\n }\n })\n }\n }\n\n if (section.assets !== undefined) {\n if (!Array.isArray(section.assets)) {\n errors.push('marketplace.assets must be a list of relative glob strings.')\n } else {\n section.assets.forEach((value, index) => {\n if (typeof value !== 'string' || value.trim().length === 0) {\n errors.push(`marketplace.assets[${index}] must be a non-empty relative glob string.`)\n }\n })\n }\n }\n return errors\n}\n\n/** Locates the manifest in a project directory: manifest.yaml or a single *.app.yaml / *.engine.yaml / *.bundle.yaml. */\nexport async function findManifest(dir: string): Promise<string> {\n const explicit = join(dir, 'manifest.yaml')\n try {\n if ((await stat(explicit)).isFile()) return explicit\n } catch {\n // fall through to pattern search\n }\n\n const entries = await readdir(dir)\n const candidates = entries.filter((name) => /\\.(app|engine|bundle)\\.ya?ml$/.test(name))\n if (candidates.length === 1) return join(dir, candidates[0]!)\n if (candidates.length === 0) {\n throw new Error(`No manifest found in ${dir}. Expected manifest.yaml or *.app.yaml / *.engine.yaml / *.bundle.yaml.`)\n }\n throw new Error(`Multiple manifests found in ${dir} (${candidates.join(', ')}). Pass --manifest to disambiguate.`)\n}\n\nexport const NAME_PATTERN = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/\n\nexport function validatePackageName(name: string, label: string): void {\n if (!NAME_PATTERN.test(name)) {\n throw new Error(`Invalid ${label} '${name}' — use lowercase letters, digits and hyphens (no leading/trailing hyphen).`)\n }\n}\n","/** Engine/app manifest inspection for the dev loop: permissions extraction + structural validation. */\nimport { readFile } from 'node:fs/promises'\nimport { parse } from 'yaml'\nimport {\n validateLaunchManifestKind,\n validateMarketplaceSection,\n type MarketplaceSection,\n} from '../vpkg/manifest.js'\n\nexport interface ManifestDocument {\n 'api-version'?: string\n kind?: string\n metadata?: {\n name?: string\n 'display-name'?: string\n version?: string\n description?: string\n [key: string]: unknown\n }\n spec?: {\n runtimes?: Record<string, unknown>\n 'file-types'?: { pattern?: string; extensions?: string[]; priority?: number }[]\n 'execution-modes'?: string[]\n tools?: { name?: string; description?: string; [key: string]: unknown }[]\n capabilities?: string[]\n permissions?: string[]\n resources?: Record<string, unknown>\n sandbox?: Record<string, unknown>\n entry?: unknown\n 'entry-points'?: { id?: string; entry?: string; route?: string; [key: string]: unknown }[]\n launch?: {\n enabled?: boolean\n 'entry-point'?: string\n pinnable?: boolean\n [key: string]: unknown\n }\n install?: { from?: string; to?: string; mode?: string; mime?: string }[]\n 'install-root'?: string\n scopes?: string[]\n settings?: SettingDeclarationEntry[]\n [key: string]: unknown\n }\n marketplace?: MarketplaceSection\n packaging?: { publisher?: string; files?: string[]; [key: string]: unknown }\n [key: string]: unknown\n}\n\n/** A `spec.settings[]` entry — a workspace setting/secret the app or engine requires. */\nexport interface SettingDeclarationEntry {\n key?: string\n env?: string\n secret?: boolean\n required?: boolean\n 'display-name'?: string\n description?: string\n type?: string\n default?: unknown\n options?: unknown[]\n [key: string]: unknown\n}\n\n/** Lenient manifest load (no required fields) — validation reports problems instead of throwing. */\nexport async function readManifestDocument(path: string): Promise<ManifestDocument> {\n const text = await readFile(path, 'utf8')\n const doc = parse(text) as ManifestDocument\n if (!doc || typeof doc !== 'object') throw new Error(`${path} is not a YAML manifest.`)\n return doc\n}\n\n/** The permission scopes a manifest declares under `spec.permissions`. */\nexport function manifestPermissions(manifest: ManifestDocument): string[] {\n const permissions = manifest.spec?.permissions\n if (!Array.isArray(permissions)) return []\n return permissions.filter((p): p is string => typeof p === 'string')\n}\n\nexport interface ValidationIssue {\n level: 'error' | 'warning'\n message: string\n}\n\n/** Structural validation mirroring the platform's registration-time checks. */\nexport function validateManifest(manifest: ManifestDocument): ValidationIssue[] {\n const issues: ValidationIssue[] = []\n const error = (message: string) => issues.push({ level: 'error', message })\n const warning = (message: string) => issues.push({ level: 'warning', message })\n\n const kind = manifest.kind\n if (!kind) {\n error(\"missing 'kind' (ExecutionEngine | Application | Bundle)\")\n return issues\n }\n if (!['ExecutionEngine', 'Application', 'Bundle'].includes(kind)) {\n error(`unknown kind '${kind}' (expected ExecutionEngine, Application or Bundle)`)\n }\n if (!manifest['api-version']) warning(\"missing 'api-version' (expected verentis.io/v1)\")\n\n const meta = manifest.metadata ?? {}\n for (const field of ['name', 'display-name', 'version'] as const) {\n if (!meta[field]) error(`metadata.${field} is required`)\n }\n\n const spec = manifest.spec ?? {}\n const launchKindError = validateLaunchManifestKind(kind, spec)\n if (launchKindError) error(launchKindError)\n\n if (kind === 'ExecutionEngine') {\n const runtimes = spec.runtimes ?? {}\n if (Object.keys(runtimes).length === 0) {\n error('spec.runtimes must declare at least one runtime (docker and/or wasm)')\n }\n const docker = runtimes['docker'] as { image?: string } | undefined\n if (docker && !docker.image) error('spec.runtimes.docker.image is required')\n const wasm = runtimes['wasm'] as { module?: string } | undefined\n if (wasm && !wasm.module) error('spec.runtimes.wasm.module is required')\n\n if (!spec['file-types']?.length) warning('spec.file-types is empty — the engine will never be auto-resolved for a file')\n for (const fileType of spec['file-types'] ?? []) {\n if (!fileType.pattern) error(\"every spec.file-types[] entry needs a 'pattern' (MIME type)\")\n }\n for (const tool of spec.tools ?? []) {\n if (!tool.name) error(\"every spec.tools[] entry needs a 'name'\")\n }\n if (!spec['execution-modes']?.length) warning('spec.execution-modes is empty (expected e.g. request-response)')\n if (!manifestPermissions(manifest).length) warning('spec.permissions is empty — the run token will carry no VFS scopes')\n }\n\n if (kind === 'Application') {\n const hasIframe = !!spec.entry || !!(spec['entry-points'] as unknown[] | undefined)?.length\n const hasInstall = Array.isArray(spec.install) && spec.install.length > 0\n const hasScopes = Array.isArray(spec.scopes) && spec.scopes.length > 0\n if (!hasIframe && !hasInstall && !hasScopes) {\n error(\n 'an Application must declare at least one contribution: spec.entry / spec.entry-points[] (iframe UI), ' +\n 'spec.install[] (installed files), or spec.scopes[] (identity)',\n )\n }\n validateApplicationLaunch(spec, issues)\n }\n\n validateInstallDirectives(spec.install, issues)\n validateSettingDeclarations(kind, spec, issues)\n for (const message of validateMarketplaceSection(manifest.marketplace)) error(message)\n\n const packaging = manifest.packaging ?? {}\n if (!packaging.publisher) warning('packaging.publisher is not set — `verentis pack`/`publish` will refuse the package')\n\n return issues\n}\n\nfunction validateApplicationLaunch(\n spec: NonNullable<ManifestDocument['spec']>,\n issues: ValidationIssue[],\n): void {\n const launch = spec.launch\n if (launch === undefined) return\n\n const error = (message: string) => issues.push({ level: 'error', message })\n if (!launch || typeof launch !== 'object' || Array.isArray(launch)) {\n error('spec.launch must be an object')\n return\n }\n\n if (launch.pinnable === true && launch.enabled !== true) {\n error('spec.launch.pinnable requires spec.launch.enabled')\n }\n if (launch.enabled !== true) return\n\n const launchEntryPoint = launch['entry-point']\n if (launchEntryPoint !== undefined && (typeof launchEntryPoint !== 'string' || !launchEntryPoint.trim())) {\n error('spec.launch.entry-point must be a non-empty entry-point id')\n return\n }\n\n if (typeof launchEntryPoint === 'string') {\n const entryPoint = spec['entry-points']?.find((candidate) => candidate.id === launchEntryPoint)\n if (!entryPoint) {\n error(`spec.launch.entry-point '${launchEntryPoint}' does not match spec.entry-points[].id`)\n return\n }\n\n if (!resolvesIframeEntry(spec.entry, entryPoint.entry ?? entryPoint.route)) {\n error('spec.launch.enabled requires the selected entry point to resolve an iframe entry')\n }\n return\n }\n\n if (!isAbsoluteHttpUrl(spec.entry)) {\n error('spec.launch.enabled requires spec.entry or spec.launch.entry-point')\n }\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0\n}\n\nfunction resolvesIframeEntry(baseEntry: unknown, routeOrEntry: unknown): boolean {\n if (isAbsoluteHttpUrl(routeOrEntry)) return true\n return isAbsoluteHttpUrl(baseEntry)\n}\n\nfunction isAbsoluteHttpUrl(value: unknown): value is string {\n if (!isNonEmptyString(value)) return false\n try {\n const url = new URL(value)\n return url.protocol === 'http:' || url.protocol === 'https:'\n } catch {\n return false\n }\n}\n\n/** Validates a `spec.install` map (present on apps that place files into the workspace VFS). */\nfunction validateInstallDirectives(\n install: { from?: string; to?: string; mode?: string; mime?: string }[] | undefined,\n issues: ValidationIssue[],\n): void {\n if (install === undefined) return\n const error = (message: string) => issues.push({ level: 'error', message })\n\n if (!Array.isArray(install)) {\n error('spec.install must be a list of install directives')\n return\n }\n\n install.forEach((directive, index) => {\n const at = `spec.install[${index}]`\n if (!directive || typeof directive !== 'object') {\n error(`${at} must be an object with 'from' and 'to'`)\n return\n }\n\n if (!directive.from || typeof directive.from !== 'string') {\n error(`${at}.from is required (a path/glob relative to the package payload)`)\n } else if (directive.from.startsWith('/') || directive.from.split('/').includes('..')) {\n error(`${at}.from must be a relative path inside the package payload (no leading '/' or '..')`)\n }\n\n if (!directive.to || typeof directive.to !== 'string') {\n error(`${at}.to is required (a workspace-absolute destination path)`)\n } else {\n if (!directive.to.startsWith('/')) error(`${at}.to must be a workspace-absolute path (start with '/')`)\n if (directive.to.split('/').includes('..')) error(`${at}.to must not contain '..'`)\n }\n\n if (directive.mode !== undefined && directive.mode !== 'seed' && directive.mode !== 'managed') {\n error(`${at}.mode must be 'seed' or 'managed' (got '${directive.mode}')`)\n }\n })\n}\n\nconst SETTING_KEY_PATTERN = /^[a-z0-9]+([.-][a-z0-9]+)*$/\nconst ENV_VAR_PATTERN = /^[A-Z][A-Z0-9_]*$/\nconst SETTING_TYPES = ['string', 'number', 'boolean', 'select']\n\n/**\n * Validates `spec.settings[]` — workspace settings/secrets the manifest requires. Keys are stored\n * namespaced as `{metadata.name}.{key}`; declared entries are auto-registered as workspace setting\n * definitions, prompted for at install, and provisioned into engine runs.\n */\nfunction validateSettingDeclarations(\n kind: string,\n spec: NonNullable<ManifestDocument['spec']>,\n issues: ValidationIssue[],\n): void {\n const settings = spec.settings\n if (settings === undefined) return\n const error = (message: string) => issues.push({ level: 'error', message })\n\n if (!Array.isArray(settings)) {\n error('spec.settings must be a list of setting declarations')\n return\n }\n\n const seen = new Set<string>()\n settings.forEach((declaration, index) => {\n const at = `spec.settings[${index}]`\n if (!declaration || typeof declaration !== 'object' || Array.isArray(declaration)) {\n error(`${at} must be an object with at least a 'key'`)\n return\n }\n\n if (!declaration.key || typeof declaration.key !== 'string') {\n error(`${at}.key is required (short key, stored namespaced as '{metadata.name}.{key}')`)\n } else if (!SETTING_KEY_PATTERN.test(declaration.key)) {\n error(`${at}.key '${declaration.key}' must be lowercase kebab/dot notation (e.g. 'api-key' or 'smtp.host')`)\n } else if (seen.has(declaration.key)) {\n error(`${at}.key '${declaration.key}' is declared more than once`)\n } else {\n seen.add(declaration.key)\n }\n\n if (declaration.env !== undefined) {\n if (typeof declaration.env !== 'string' || !ENV_VAR_PATTERN.test(declaration.env)) {\n error(`${at}.env must be an environment variable name (UPPER_SNAKE_CASE, e.g. 'MY_API_KEY')`)\n } else if (declaration.env.startsWith('VERENTIS_')) {\n error(`${at}.env must not use the reserved 'VERENTIS_' prefix`)\n }\n }\n\n for (const flag of ['secret', 'required'] as const) {\n if (declaration[flag] !== undefined && typeof declaration[flag] !== 'boolean') {\n error(`${at}.${flag} must be a boolean`)\n }\n }\n\n const type = declaration.type ?? 'string'\n if (typeof type !== 'string' || !SETTING_TYPES.includes(type)) {\n error(`${at}.type must be one of ${SETTING_TYPES.join(', ')} (got '${String(declaration.type)}')`)\n }\n\n if (declaration.secret === true && declaration.default !== undefined) {\n error(`${at} declares a default for a secret — secrets must never ship default values`)\n }\n\n if (type === 'select') {\n if (!Array.isArray(declaration.options) || declaration.options.length === 0) {\n error(`${at}.options is required for type 'select'`)\n }\n } else if (declaration.options !== undefined) {\n error(`${at}.options is only allowed for type 'select'`)\n }\n })\n\n // Secrets are provisioned server-side only: a wasm-only engine has no runtime that can\n // ever receive them, so the declaration is unsatisfiable.\n if (kind === 'ExecutionEngine') {\n const declaresSecret = settings.some(\n (declaration) => declaration && typeof declaration === 'object' && declaration.secret === true,\n )\n const runtimes = spec.runtimes ?? {}\n if (declaresSecret && !runtimes['docker']) {\n error(\n 'spec.settings declares secrets but the engine has no docker runtime — secrets are server-only ' +\n 'and cannot be provisioned into browser (wasm) runs',\n )\n }\n }\n}\n","import { spawn } from 'node:child_process'\nimport { mkdir, writeFile } from 'node:fs/promises'\nimport { dirname, resolve } from 'node:path'\nimport { Command } from 'commander'\nimport { createApiClient, type ApiClient } from '../http.js'\nimport { files } from '../api/catalog.js'\nimport { call } from '../api/client.js'\nimport { resolveWorkspaceId } from '../context.js'\nimport { decodeJwtPayload } from '../jwt.js'\nimport { printJson } from '../output.js'\nimport { ENGINE_DEFAULT_PERMISSIONS } from '../api/scopes.js'\nimport { buildLocalContext, contextEnv, type LocalExecutionContext } from '../dev/context.js'\nimport { manifestPermissions, readManifestDocument } from '../dev/manifest.js'\nimport { findManifest } from '../vpkg/manifest.js'\nimport type { FileDto } from './files.js'\n\ninterface TokenFlags {\n workspace?: string\n scopes?: string[]\n manifest?: string\n boundary?: string\n branch: string\n json?: boolean\n}\n\n/** Resolve the scope set for a dev token: explicit flags → manifest permissions → engine default set. */\nasync function resolveDevScopes(flags: { scopes?: string[]; manifest?: string }): Promise<string[]> {\n if (flags.scopes?.length) return flags.scopes\n const manifestPath = flags.manifest ?? (await findManifest(process.cwd()).catch(() => undefined))\n if (manifestPath) {\n const manifest = await readManifestDocument(manifestPath)\n const permissions = manifestPermissions(manifest)\n if (permissions.length > 0) {\n console.error(`Using ${permissions.length} scope(s) from ${manifestPath}`)\n return permissions\n }\n }\n return [...ENGINE_DEFAULT_PERMISSIONS]\n}\n\n/** Mint a workspace-bound (optionally node-bounded) access token like a platform run receives. */\nasync function mintDevToken(api: ApiClient, workspaceId: string, scopes: string[], boundary?: string, branch = 'main'): Promise<string> {\n let resourceId: string | undefined\n if (boundary) {\n const node = await call<FileDto>(api, files.get, {\n params: { path: boundary.replace(/^\\/+/, '').replace(/\\/+$/, '') },\n workspaceId,\n query: { branch },\n })\n if (!node.nodeId) throw new Error(`Could not resolve a node id for boundary path '${boundary}'.`)\n resourceId = node.nodeId\n }\n return api.mintAccessToken({\n scopes,\n workspaceId,\n ...(resourceId ? { resourceId, resourceKind: 'Node' as const } : {}),\n })\n}\n\ninterface ContextFlags extends TokenFlags {\n file?: string\n tool?: string\n mode?: string\n timeout?: string\n arg?: string[]\n env?: string[]\n params?: string\n out?: string\n}\n\nasync function buildContextFromFlags(api: ApiClient, options: ContextFlags): Promise<LocalExecutionContext> {\n const workspaceId = (await resolveWorkspaceId(options))!\n const scopes = await resolveDevScopes(options)\n const token = await mintDevToken(api, workspaceId, scopes, options.boundary, options.branch)\n\n const env: Record<string, string> = {}\n for (const pair of options.env ?? []) {\n const idx = pair.indexOf('=')\n if (idx < 0) throw new Error(`Invalid --env '${pair}' (expected KEY=value).`)\n env[pair.slice(0, idx)] = pair.slice(idx + 1)\n }\n\n let fileMimeType: string | undefined\n if (options.file) {\n // Best-effort metadata for the target file; keep the context usable when it doesn't exist yet.\n const remote = await call<FileDto>(api, files.get, {\n params: { path: options.file.replace(/^\\/+/, '') },\n workspaceId,\n query: { branch: options.branch },\n }).catch(() => undefined)\n fileMimeType = remote?.mimeType\n }\n\n return buildLocalContext({\n apiUrl: api.apiUrl,\n accessToken: token,\n scopes,\n workspaceId,\n filePath: options.file,\n fileMimeType,\n branch: options.branch,\n tool: options.tool,\n mode: options.mode,\n timeoutSeconds: options.timeout ? Number(options.timeout) : undefined,\n args: options.arg,\n env,\n parameters: options.params ? (JSON.parse(options.params) as Record<string, unknown>) : undefined,\n })\n}\n\nexport function registerDev(program: Command): void {\n const devCmd = program\n .command('dev')\n .description('Local development loop for engine/app scripts (real workspace access from your machine)')\n\n devCmd\n .command('token')\n .description('Mint a workspace-bound access token like a platform run receives')\n .option('--workspace <workspaceId>')\n .option('--scopes <scope...>', 'explicit scopes (default: manifest spec.permissions, else the engine default set)')\n .option('--manifest <path>', 'engine/app manifest to read spec.permissions from')\n .option('--boundary <path>', 'confine the token to this workspace directory subtree (like platform runs)')\n .option('--branch <branch>', 'workspace branch', 'main')\n .option('--json', 'output JSON with token metadata')\n .action(async (options: TokenFlags) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n const scopes = await resolveDevScopes(options)\n const token = await mintDevToken(api, workspaceId, scopes, options.boundary, options.branch)\n if (options.json) {\n const payload = decodeJwtPayload(token)\n printJson({\n access_token: token,\n scopes,\n workspaceId,\n expiresAt: payload?.exp ? new Date(payload.exp * 1000).toISOString() : undefined,\n })\n return\n }\n console.log(token)\n })\n\n devCmd\n .command('context')\n .description(\"Write a real context.json (the platform's engine contract) for local runs\")\n .option('--workspace <workspaceId>')\n .option('--file <path>', 'workspace file path the run targets (engine.context.file)')\n .option('--tool <tool>', 'engine tool name (e.g. execute)', 'execute')\n .option('--mode <mode>', 'execution mode', 'request-response')\n .option('--timeout <seconds>', 'execution timeout')\n .option('--arg <value...>', 'command-line arguments (repeatable)')\n .option('--env <KEY=value...>', 'environment entries for engine.context.input.environment (repeatable)')\n .option('--params <json>', 'tool parameters JSON')\n .option('--scopes <scope...>', 'explicit token scopes')\n .option('--manifest <path>', 'manifest to read spec.permissions from')\n .option('--boundary <path>', 'confine the token to this directory subtree')\n .option('--branch <branch>', 'workspace branch', 'main')\n .option('--out <path>', 'output path', '.verentis/context.json')\n .action(async (options: ContextFlags) => {\n const api = await createApiClient()\n const context = await buildContextFromFlags(api, options)\n const outPath = resolve(options.out ?? '.verentis/context.json')\n await mkdir(dirname(outPath), { recursive: true })\n await writeFile(outPath, JSON.stringify(context, null, 2) + '\\n', { mode: 0o600 })\n console.log(`Wrote ${outPath} (token expires ${context.platform.token.expiresAt ?? 'unknown'}).`)\n console.log('\\nRun your script with the SDK pointed at it:')\n console.log(` export VERENTIS_CONTEXT_PATH=${outPath}`)\n console.log(' python your_script.py')\n })\n\n devCmd\n .command('run <script>')\n .description('Run a local script against the REAL workspace (mint token → context.json → spawn)')\n .option('--workspace <workspaceId>')\n .option('--file <path>', 'workspace file path the run pretends to target (default: /<script name>)')\n .option('--tool <tool>', 'engine tool name', 'execute')\n .option('--mode <mode>', 'execution mode', 'request-response')\n .option('--timeout <seconds>', 'execution timeout')\n .option('--arg <value...>', 'arguments passed to the script (repeatable)')\n .option('--env <KEY=value...>', 'extra environment variables (repeatable)')\n .option('--params <json>', 'tool parameters JSON')\n .option('--scopes <scope...>', 'explicit token scopes')\n .option('--manifest <path>', 'manifest to read spec.permissions from')\n .option('--boundary <path>', 'confine the token to this directory subtree')\n .option('--branch <branch>', 'workspace branch', 'main')\n .option('--python <interpreter>', 'python interpreter', 'python3')\n .option('--debug [port]', 'wait for a debugger: wraps with debugpy --listen <port> --wait-for-client')\n .option('--keep-context', 'keep the generated .verentis/context.json after the run')\n .action(async (script: string, options: ContextFlags & { python: string; debug?: string | boolean; keepContext?: boolean }) => {\n const api = await createApiClient()\n const scriptPath = resolve(script)\n const effective = { ...options, file: options.file ?? `/${script.replace(/^\\.\\//, '')}` }\n const context = await buildContextFromFlags(api, effective)\n\n const contextPath = resolve('.verentis/context.json')\n await mkdir(dirname(contextPath), { recursive: true })\n await writeFile(contextPath, JSON.stringify(context, null, 2) + '\\n', { mode: 0o600 })\n\n const env = {\n ...process.env,\n ...context.input.environment,\n ...contextEnv(context, contextPath),\n }\n\n const pythonArgs: string[] = []\n if (options.debug !== undefined) {\n const port = typeof options.debug === 'string' ? options.debug : '5678'\n pythonArgs.push('-m', 'debugpy', '--listen', port, '--wait-for-client')\n console.error(`Waiting for a debugger to attach on port ${port} (VS Code: \"Python Debugger: Attach\")…`)\n }\n pythonArgs.push(scriptPath, ...(context.input.arguments ?? []))\n\n console.error(`→ ${options.python} ${pythonArgs.join(' ')}`)\n console.error(` workspace ${context.workspace.id} · branch ${options.branch} · token expires ${context.platform.token.expiresAt ?? 'unknown'}\\n`)\n\n const child = spawn(options.python, pythonArgs, { env, stdio: 'inherit' })\n const exitCode: number = await new Promise((resolveExit) => {\n child.on('close', (code) => resolveExit(code ?? 1))\n child.on('error', (error) => {\n console.error(`Failed to start ${options.python}: ${error.message}`)\n if (options.debug !== undefined) console.error('Is debugpy installed? pip install debugpy')\n resolveExit(1)\n })\n })\n process.exitCode = exitCode\n })\n\n devCmd\n .command('vscode')\n .description('Scaffold .vscode/launch.json with attach + launch configs for the dev loop')\n .option('--port <port>', 'debugpy port', '5678')\n .action(async (options: { port: string }) => {\n const launch = {\n version: '0.2.0',\n configurations: [\n {\n name: 'Verentis: attach to dev run',\n type: 'debugpy',\n request: 'attach',\n connect: { host: 'localhost', port: Number(options.port) },\n justMyCode: true,\n },\n {\n name: 'Verentis: launch current file with context',\n type: 'debugpy',\n request: 'launch',\n program: '${file}',\n console: 'integratedTerminal',\n justMyCode: true,\n env: { VERENTIS_CONTEXT_PATH: '${workspaceFolder}/.verentis/context.json' },\n },\n ],\n }\n const outPath = resolve('.vscode/launch.json')\n await mkdir(dirname(outPath), { recursive: true })\n await writeFile(outPath, JSON.stringify(launch, null, 2) + '\\n')\n console.log(`Wrote ${outPath}.`)\n console.log('Workflow:')\n console.log(' 1. verentis dev run script.py --debug # waits for the debugger')\n console.log(' 2. F5 → \"Verentis: attach to dev run\" # breakpoints hit your local code')\n console.log(' or: verentis dev context && F5 → \"launch current file with context\"')\n })\n}\n","import { Command } from 'commander'\nimport { createApiClient, type ApiClient } from '../http.js'\nimport { execution } from '../api/catalog.js'\nimport { call, callRaw, pageItems, pagingQuery, type PagedResult, type PagingFlags } from '../api/client.js'\nimport { resolveWorkspaceId } from '../context.js'\nimport { output, outputRecord, printJson } from '../output.js'\n\nexport interface ExecutionDto {\n id: string\n workspaceId: string\n engineId: string\n engineName?: string\n filePath?: string\n mode?: string\n trigger?: string\n tool?: string\n status: string\n requestedAt?: string\n startedAt?: string\n completedAt?: string\n result?: { status?: string; data?: unknown; artifacts?: string[]; error?: string } | null\n progressPercent?: number | null\n progressMessage?: string | null\n [key: string]: unknown\n}\n\ninterface ExecutionLogsDto {\n stdout?: string\n stderr?: string\n running?: boolean\n truncated?: boolean\n}\n\nconst TERMINAL_STATUSES = new Set(['Completed', 'Failed', 'Cancelled', 'TimedOut'])\n\nexport function registerExec(program: Command): void {\n const execCmd = program.command('exec').description('Run and inspect executions')\n\n execCmd\n .command('run <filePath>')\n .description('Execute a workspace file with its engine (e.g. `verentis exec run /scripts/transform.py`)')\n .option('--workspace <workspaceId>')\n .option('--branch <branch>', 'workspace branch', 'main')\n .option('--engine <engineId>', 'explicit engine id (default: resolved from the file type)')\n .option('--tool <tool>', 'engine tool to invoke (default: the engine default, e.g. execute)')\n .option('--mode <mode>', 'request-response | long-running')\n .option('--arg <value...>', 'command-line arguments passed to the script (repeatable)')\n .option('--params <json>', 'tool parameters JSON (engine.context.input.parameters)')\n .option('--follow', 'wait for completion and stream logs')\n .option('--json', 'output the execution record as JSON')\n .action(async (filePath: string, options: { workspace?: string; branch: string; engine?: string; tool?: string; mode?: string; arg?: string[]; params?: string; follow?: boolean; json?: boolean }) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n if (options.params) JSON.parse(options.params) // validate early\n\n const result = await call<ExecutionDto>(api, execution.request, {\n workspaceId,\n body: {\n workspaceId,\n engineId: options.engine ?? null,\n filePath: filePath.startsWith('/') ? filePath : `/${filePath}`,\n branch: options.branch,\n tool: options.tool ?? null,\n mode: options.mode ?? null,\n arguments: options.arg ?? [],\n parameters: options.params ?? null,\n clientRuntimeCapable: false,\n },\n })\n\n if (options.json && !options.follow) {\n printJson(result)\n return\n }\n console.log(`Execution ${result.id} → ${result.status} (engine ${result.engineName ?? result.engineId})`)\n\n if (options.follow) {\n await followExecution(api, workspaceId, result.id, options.json)\n } else if (!TERMINAL_STATUSES.has(result.status)) {\n console.log(`Follow with: verentis exec logs ${result.id} --follow`)\n } else {\n printResult(result)\n }\n })\n\n execCmd\n .command('list')\n .description('List executions in a workspace')\n .option('--workspace <workspaceId>')\n .option('--file <filePath>', 'filter by workspace file path')\n .option('--page <n>')\n .option('--page-size <n>')\n .option('--order-by <field>')\n .option('--json', 'output JSON')\n .action(async (options: PagingFlags & { workspace?: string; file?: string; json?: boolean }) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n const page = await call<PagedResult<ExecutionDto>>(api, execution.list, {\n workspaceId,\n query: { workspaceId, filePath: options.file, ...pagingQuery(options) },\n })\n output(\n pageItems(page).map((exec) => ({\n id: exec.id,\n status: exec.status,\n engine: exec.engineName ?? exec.engineId,\n file: exec.filePath ?? '',\n requestedAt: exec.requestedAt ?? '',\n })),\n { id: 'Id', status: 'Status', engine: 'Engine', file: 'File', requestedAt: 'Requested' },\n options,\n page,\n )\n })\n\n execCmd\n .command('get <executionId>')\n .description('Show execution details (status, result, artifacts)')\n .option('--workspace <workspaceId>')\n .option('--json', 'output JSON')\n .action(async (executionId: string, options: { workspace?: string; json?: boolean }) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n const result = await call<ExecutionDto>(api, execution.get, {\n params: { id: executionId },\n workspaceId,\n query: { workspaceId },\n })\n if (options.json) {\n printJson(result)\n return\n }\n const { result: execResult, ...rest } = result\n outputRecord(rest as Record<string, unknown>, options)\n printResult(result)\n })\n\n execCmd\n .command('cancel <executionId>')\n .description('Cancel a running execution')\n .option('--workspace <workspaceId>')\n .action(async (executionId: string, options: { workspace?: string }) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n const result = await call<ExecutionDto>(api, execution.cancel, {\n params: { id: executionId },\n workspaceId,\n body: { id: executionId, workspaceId },\n })\n console.log(`Execution ${executionId} → ${result?.status ?? 'Cancelled'}.`)\n })\n\n execCmd\n .command('logs <executionId>')\n .description('Fetch (or stream with --follow) the logs of an execution')\n .option('--workspace <workspaceId>')\n .option('--follow', 'stream live logs via SSE until the execution ends')\n .action(async (executionId: string, options: { workspace?: string; follow?: boolean }) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n if (options.follow) {\n await streamLogs(api, workspaceId, executionId)\n return\n }\n const logs = await call<ExecutionLogsDto>(api, execution.logs, {\n params: { id: executionId },\n workspaceId,\n query: { workspaceId },\n })\n if (logs.stdout) process.stdout.write(logs.stdout.endsWith('\\n') ? logs.stdout : `${logs.stdout}\\n`)\n if (logs.stderr) process.stderr.write(logs.stderr.endsWith('\\n') ? logs.stderr : `${logs.stderr}\\n`)\n if (logs.truncated) console.error('(logs truncated — the full log exceeded the inline limit)')\n if (logs.running) console.error('(execution still running — use --follow to stream)')\n })\n\n const engineCmd = program.command('engine').description('Inspect execution engines')\n\n engineCmd\n .command('list')\n .description('List registered execution engines')\n .option('--json', 'output JSON')\n .action(async (options: { json?: boolean }) => {\n const api = await createApiClient()\n const page = await call<PagedResult<Record<string, unknown>>>(api, execution.listEngines, {\n query: { PageNo: 1, PageSize: 100 },\n })\n output(pageItems(page), { name: 'Name', displayName: 'Display', version: 'Version', id: 'Id' }, options, page)\n })\n\n engineCmd\n .command('get <engineId>')\n .description('Show engine details (runtimes, tools, permissions)')\n .action(async (engineId: string) => {\n const api = await createApiClient()\n const result = await call<unknown>(api, execution.getEngine, { params: { id: engineId } })\n printJson(result)\n })\n\n engineCmd\n .command('resolve <fileTypeOrPath>')\n .description('Resolve which engine handles a MIME type or file path')\n .option('--workspace <workspaceId>')\n .action(async (fileTypeOrPath: string, options: { workspace?: string }) => {\n const api = await createApiClient()\n const workspaceId = await resolveWorkspaceId(options, false)\n const query = fileTypeOrPath.includes('/') && !fileTypeOrPath.includes('.')\n ? { fileType: fileTypeOrPath }\n : fileTypeOrPath.includes('.') && !fileTypeOrPath.includes('/')\n ? { fileType: fileTypeOrPath }\n : { filePath: fileTypeOrPath }\n const result = await call<unknown>(api, execution.resolveEngine, {\n query: { ...query, ...(workspaceId ? { workspaceId } : {}) },\n })\n printJson(result)\n })\n\n engineCmd\n .command('sync')\n .description('Re-scan the workspace for engine manifests and sync registrations')\n .option('--workspace <workspaceId>')\n .action(async (options: { workspace?: string }) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n const result = await call<unknown>(api, execution.syncEngines, { workspaceId, body: { workspaceId } })\n printJson(result)\n })\n}\n\nfunction printResult(exec: ExecutionDto): void {\n if (!exec.result) return\n if (exec.result.error) console.error(`Error: ${exec.result.error}`)\n if (exec.result.data !== undefined && exec.result.data !== null) {\n console.log('Result:')\n printJson(exec.result.data)\n }\n for (const artifact of exec.result.artifacts ?? []) console.log(`Artifact: ${artifact}`)\n}\n\n/** Stream `text/event-stream` frames, writing `data:` payload lines to stdout until `event: end`. */\nexport async function streamLogs(api: ApiClient, workspaceId: string, executionId: string): Promise<void> {\n const res = await callRaw(api, execution.logsStream, {\n params: { id: executionId },\n workspaceId,\n query: { workspaceId },\n })\n if (!res.body) return\n\n const decoder = new TextDecoder()\n let buffer = ''\n let currentEvent = 'message'\n const reader = (res.body as ReadableStream<Uint8Array>).getReader()\n for (;;) {\n const { done, value } = await reader.read()\n if (done) break\n buffer += decoder.decode(value, { stream: true })\n let newlineIdx: number\n while ((newlineIdx = buffer.indexOf('\\n')) >= 0) {\n const line = buffer.slice(0, newlineIdx).replace(/\\r$/, '')\n buffer = buffer.slice(newlineIdx + 1)\n if (line.startsWith('event: ')) {\n currentEvent = line.slice(7).trim()\n } else if (line.startsWith('data: ')) {\n if (currentEvent === 'end') return\n console.log(line.slice(6))\n } else if (line === '') {\n currentEvent = 'message'\n }\n }\n }\n}\n\n/** Poll an execution to terminal status while streaming its logs. */\nasync function followExecution(api: ApiClient, workspaceId: string, executionId: string, json?: boolean): Promise<void> {\n await streamLogs(api, workspaceId, executionId)\n // Stream ended — poll briefly for the final record (result persistence can lag the stream).\n for (let attempt = 0; attempt < 30; attempt++) {\n const exec = await call<ExecutionDto>(api, execution.get, {\n params: { id: executionId },\n workspaceId,\n query: { workspaceId },\n })\n if (TERMINAL_STATUSES.has(exec.status)) {\n if (json) printJson(exec)\n else {\n console.log(`Status: ${exec.status}`)\n printResult(exec)\n }\n if (exec.status !== 'Completed') process.exitCode = 1\n return\n }\n await new Promise((resolve) => setTimeout(resolve, 1000))\n }\n console.error('Timed out waiting for a terminal status — check `verentis exec get`.')\n process.exitCode = 1\n}\n","import { createReadStream, createWriteStream } from 'node:fs'\nimport { mkdir, readdir, readFile, stat } from 'node:fs/promises'\nimport { basename, dirname, join, posix, resolve } from 'node:path'\nimport { Readable } from 'node:stream'\nimport { pipeline } from 'node:stream/promises'\nimport { Command } from 'commander'\nimport { createApiClient, type ApiClient } from '../http.js'\nimport { files } from '../api/catalog.js'\nimport { call, callRaw, fillPath, pageItems, type PagedResult } from '../api/client.js'\nimport { resolveWorkspaceId } from '../context.js'\nimport { output, outputRecord } from '../output.js'\n\nexport interface FileDto {\n path: string\n name: string\n mimeType: string\n hash?: string\n version?: string\n etag?: string\n children?: PagedResult<FileDto>\n size?: number | null\n nodeId?: string\n [key: string]: unknown\n}\n\ninterface FileFlags {\n workspace?: string\n branch: string\n json?: boolean\n}\n\nconst normalizeRemote = (path: string): string => {\n const trimmed = path.replace(/^\\/+/, '').replace(/\\/+$/, '')\n return trimmed\n}\n\nasync function uploadWithHeaders(\n api: ApiClient,\n workspaceId: string,\n remotePath: string,\n localPath: string,\n options: { branch: string; contentType?: string; autoExtract?: boolean },\n): Promise<FileDto> {\n // Raw body upload with branch/extract headers (multipart not required by the controller).\n const stream = Readable.toWeb(createReadStream(localPath)) as unknown as ReadableStream\n const res = await api.requestRaw('POST', fillPath(files.upload.path, { path: normalizeRemote(remotePath) }), {\n scopes: [...files.upload.scopes],\n tokenWorkspaceId: workspaceId,\n rawBody: stream,\n contentType: options.contentType ?? 'application/octet-stream',\n headers: {\n 'X-Branch': options.branch,\n 'Content-Disposition': `attachment; filename=\"${basename(localPath)}\"`,\n ...(options.autoExtract ? { 'X-Auto-Extract': 'true' } : {}),\n },\n })\n return (await res.json()) as FileDto\n}\n\nexport function registerFiles(program: Command): void {\n const filesCmd = program.command('files').description('Work with workspace files (the VFS)')\n\n filesCmd\n .command('ls [path]')\n .description('List a directory in the workspace')\n .option('--workspace <workspaceId>')\n .option('--branch <branch>', 'workspace branch', 'main')\n .option('--json', 'output JSON')\n .action(async (path: string | undefined, options: FileFlags) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n const result = await call<FileDto>(api, files.get, {\n params: { path: normalizeRemote(path ?? '/') },\n workspaceId,\n query: { branch: options.branch, PageNo: 1, PageSize: 100 },\n })\n const entries = pageItems(result.children)\n if (entries.length === 0 && result.name) {\n outputRecord(result as Record<string, unknown>, options)\n return\n }\n output(\n entries.map((entry) => ({ ...entry, size: entry.size ?? '' })),\n { name: 'Name', mimeType: 'Type', size: 'Size', path: 'Path' },\n options,\n result,\n )\n })\n\n filesCmd\n .command('stat <path>')\n .description('Show file metadata')\n .option('--workspace <workspaceId>')\n .option('--branch <branch>', 'workspace branch', 'main')\n .option('--json', 'output JSON')\n .action(async (path: string, options: FileFlags) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n const result = await call<FileDto>(api, files.get, {\n params: { path: normalizeRemote(path) },\n workspaceId,\n query: { branch: options.branch },\n })\n const { children, ...rest } = result\n outputRecord(rest as Record<string, unknown>, options)\n })\n\n filesCmd\n .command('cat <path>')\n .description('Print raw file content to stdout')\n .option('--workspace <workspaceId>')\n .option('--branch <branch>', 'workspace branch', 'main')\n .action(async (path: string, options: FileFlags) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n const res = await callRaw(api, files.raw, {\n params: { path: normalizeRemote(path) },\n workspaceId,\n query: { branch: options.branch },\n })\n if (!res.body) return\n await pipeline(Readable.fromWeb(res.body as import('node:stream/web').ReadableStream), process.stdout, { end: false })\n })\n\n filesCmd\n .command('download <remotePath> [localPath]')\n .description('Download a file (or directory as an archive with --format)')\n .option('--workspace <workspaceId>')\n .option('--branch <branch>', 'workspace branch', 'main')\n .option('--format <format>', 'archive format for directories: Zip | TarGz')\n .action(async (remotePath: string, localPath: string | undefined, options: FileFlags & { format?: string }) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n const res = await callRaw(api, files.raw, {\n params: { path: normalizeRemote(remotePath) },\n workspaceId,\n query: { branch: options.branch, format: options.format },\n })\n const suffix = options.format === 'Zip' ? '.zip' : options.format === 'TarGz' ? '.tar.gz' : ''\n const out = resolve(localPath ?? `${basename(normalizeRemote(remotePath)) || 'download'}${suffix}`)\n if (!res.body) throw new Error('Empty response.')\n await mkdir(dirname(out), { recursive: true })\n await pipeline(Readable.fromWeb(res.body as import('node:stream/web').ReadableStream), createWriteStream(out))\n console.log(`Downloaded ${remotePath} → ${out}`)\n })\n\n filesCmd\n .command('upload <localPath> [remotePath]')\n .description('Upload a file or directory (directories upload file-by-file)')\n .option('--workspace <workspaceId>')\n .option('--branch <branch>', 'workspace branch', 'main')\n .option('--content-type <type>', 'content type for a single-file upload')\n .option('--extract', 'archive uploads: extract server-side into the target directory (X-Auto-Extract)')\n .action(async (localPath: string, remotePath: string | undefined, options: FileFlags & { contentType?: string; extract?: boolean }) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n const local = resolve(localPath)\n const info = await stat(local)\n\n if (info.isDirectory()) {\n const remoteBase = normalizeRemote(remotePath ?? basename(local))\n const uploaded = await uploadDirectory(api, workspaceId, local, remoteBase, options.branch)\n console.log(`Uploaded ${uploaded} file(s) to /${remoteBase}.`)\n return\n }\n\n const remote = remotePath && remotePath.endsWith('/') ? posix.join(normalizeRemote(remotePath), basename(local)) : normalizeRemote(remotePath ?? basename(local))\n const result = await uploadWithHeaders(api, workspaceId, remote, local, {\n branch: options.branch,\n contentType: options.contentType,\n autoExtract: options.extract,\n })\n console.log(`Uploaded ${localPath} → /${result.path ?? remote}`)\n })\n\n filesCmd\n .command('rm <path>')\n .description('Delete a file or directory')\n .option('--workspace <workspaceId>')\n .option('--branch <branch>', 'workspace branch', 'main')\n .option('--recursive', 'delete directory contents recursively')\n .action(async (path: string, options: FileFlags & { recursive?: boolean }) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n await api.requestRaw('DELETE', fillPath(files.delete.path, { path: normalizeRemote(path) }), {\n scopes: [...files.delete.scopes],\n tokenWorkspaceId: workspaceId,\n query: { branch: options.branch },\n headers: options.recursive ? { 'X-Delete-Mode': 'Deep' } : {},\n })\n console.log(`Deleted /${normalizeRemote(path)}.`)\n })\n\n filesCmd\n .command('mv <fromPath> <toPath>')\n .description('Move or rename a file')\n .option('--workspace <workspaceId>')\n .option('--branch <branch>', 'workspace branch', 'main')\n .action(async (fromPath: string, toPath: string, options: FileFlags) => {\n const workspaceId = (await resolveWorkspaceId(options))!\n const api = await createApiClient()\n await call(api, files.update, {\n params: { path: normalizeRemote(fromPath) },\n workspaceId,\n body: { branch: options.branch, path: normalizeRemote(fromPath), toPath: normalizeRemote(toPath) },\n })\n console.log(`Moved /${normalizeRemote(fromPath)} → /${normalizeRemote(toPath)}.`)\n })\n}\n\nasync function uploadDirectory(api: ApiClient, workspaceId: string, localDir: string, remoteBase: string, branch: string): Promise<number> {\n let count = 0\n const entries = await readdir(localDir, { withFileTypes: true })\n for (const entry of entries) {\n if (entry.name.startsWith('.git') || entry.name === 'node_modules' || entry.name === '__pycache__') continue\n const localEntry = join(localDir, entry.name)\n const remoteEntry = posix.join(remoteBase, entry.name)\n if (entry.isDirectory()) {\n count += await uploadDirectory(api, workspaceId, localEntry, remoteEntry, branch)\n } else if (entry.isFile()) {\n await uploadWithHeaders(api, workspaceId, remoteEntry, localEntry, { branch })\n console.log(` /${remoteEntry}`)\n count += 1\n }\n }\n return count\n}\n\n/** Read a remote file fully into memory (helper for other commands). */\nexport async function readRemoteFile(api: ApiClient, workspaceId: string, path: string, branch: string): Promise<Buffer> {\n const res = await callRaw(api, files.raw, { params: { path: normalizeRemote(path) }, workspaceId, query: { branch } })\n return Buffer.from(await res.arrayBuffer())\n}\n","import { mkdir, stat, writeFile } from 'node:fs/promises'\nimport { join, resolve } from 'node:path'\nimport { Command } from 'commander'\n\nconst TEMPLATES: Record<string, (name: string) => string> = {\n application: (name) => `api-version: verentis.io/v1\nkind: Application\n\nmetadata:\n name: ${name}\n display-name: ${titleCase(name)}\n description: \"\"\n icon: layout-dashboard\n version: 0.1.0\n author: \"\"\n\n# Marketplace presentation (optional):\n# marketplace:\n# logo: ./marketplace/logo.png\n# hero:\n# source: ./marketplace/hero.webp\n# alt: A concise description of the hero background\n# images:\n# - source: ./marketplace/screenshot.png\n# alt: A concise description of the screenshot\n# caption: Optional visible caption\n# readme: ./README.md\n# changelog: ./CHANGELOG.md\n# assets:\n# - \"marketplace/**/*.{png,jpg,jpeg,webp,svg}\"\n\nspec:\n entry: https://example.com # hosted app origin\n scope: global\n\n # Opt into a standalone workspace surface. Contextual file handlers should omit this block.\n # launch:\n # enabled: true\n # entry-point: home # optional; otherwise spec.entry is used\n # pinnable: true\n\n entry-points: []\n capabilities: []\n permissions: []\n\n sandbox:\n allow-scripts: true\n allow-same-origin: true\n allow-popups: false\n allow-forms: true\n\npackaging:\n publisher: \"\" # your publisher name\n files: [] # globs relative to this manifest, e.g. [\"schemas/**/*.json\"]\n encryption: none\n`,\n engine: (name) => `api-version: verentis.io/v1\nkind: ExecutionEngine\n\nmetadata:\n name: ${name}\n display-name: ${titleCase(name)}\n description: \"\"\n icon: lucide:terminal\n version: 0.1.0\n author: \"\"\n\n# Marketplace presentation (optional):\n# marketplace:\n# logo: ./marketplace/logo.png\n# hero:\n# source: ./marketplace/hero.webp\n# alt: A concise description of the hero background\n# images:\n# - source: ./marketplace/screenshot.png\n# alt: A concise description of the screenshot\n# readme: ./README.md\n# changelog: ./CHANGELOG.md\n# assets:\n# - \"marketplace/**/*.{png,jpg,jpeg,webp,svg}\"\n\nspec:\n runtimes: {}\n file-types: []\n execution-modes:\n - request-response\n\npackaging:\n publisher: \"\" # your publisher name\n files: [] # e.g. [\"dist/runner.js\"] — reference as ./runner.js in spec\n encryption: none\n`,\n bundle: (name) => `api-version: verentis.io/v1\nkind: Bundle\n\nmetadata:\n name: ${name}\n display-name: ${titleCase(name)}\n description: \"\"\n version: 0.1.0\n author: \"\"\n\n# Marketplace presentation (optional):\n# marketplace:\n# logo: ./marketplace/logo.png\n# hero:\n# source: ./marketplace/hero.webp\n# alt: A concise description of the hero background\n# images:\n# - source: ./marketplace/screenshot.png\n# alt: A concise description of the screenshot\n# readme: ./README.md\n# changelog: ./CHANGELOG.md\n# assets:\n# - \"marketplace/**/*.{png,jpg,jpeg,webp,svg}\"\n\npackaging:\n publisher: \"\" # your publisher name\n files:\n - \"content/**/*\" # everything under content/ is installed at the target path\n bundle:\n default-path: /data/${name}\n encryption: none\n`,\n}\n\nexport function registerInit(program: Command): void {\n program\n .command('init [dir]')\n .description('Scaffold a manifest.yaml for a new package')\n .option('--kind <kind>', 'application | engine | bundle', 'application')\n .option('--name <name>', 'package name (defaults to the directory name)')\n .action(async (dir: string | undefined, options: { kind: string; name?: string }) => {\n const template = TEMPLATES[options.kind.toLowerCase()]\n if (!template) throw new Error(`Unknown kind '${options.kind}' — use application, engine or bundle.`)\n\n const targetDir = resolve(dir ?? '.')\n await mkdir(targetDir, { recursive: true })\n const name = (options.name ?? targetDir.split('/').pop() ?? 'my-package').toLowerCase().replace(/[^a-z0-9-]/g, '-')\n\n const manifestPath = join(targetDir, 'manifest.yaml')\n if (await exists(manifestPath)) throw new Error(`${manifestPath} already exists.`)\n await writeFile(manifestPath, template(name))\n console.log(`Created ${manifestPath} (kind: ${options.kind}).`)\n console.log('Fill in packaging.publisher and packaging.files, then run `verentis pack`.')\n })\n}\n\nasync function exists(path: string): Promise<boolean> {\n try {\n await stat(path)\n return true\n } catch {\n return false\n }\n}\n\nfunction titleCase(value: string): string {\n return value.replace(/(^|[-_])(\\w)/g, (_, __, c: string) => ` ${c.toUpperCase()}`).trim()\n}\n","import { createHash, generateKeyPairSync, sign as cryptoSign, verify as cryptoVerify, createPrivateKey, createPublicKey, type KeyObject } from 'node:crypto'\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { keysDir } from '../config.js'\n\nexport interface SigningKey {\n kid: string\n algorithm: 'Ed25519'\n /** Base64 of the raw 32-byte Ed25519 public key (the format the registry stores). */\n publicKey: string\n /** PKCS#8 PEM private key. */\n privateKeyPem: string\n createdAt: string\n}\n\n/** kid = first 16 hex chars of sha256(raw public key), lowercase — must match the registry. */\nexport function computeKid(publicKeyBase64: string): string {\n return createHash('sha256').update(Buffer.from(publicKeyBase64, 'base64')).digest('hex').slice(0, 16)\n}\n\nexport function generateSigningKey(): SigningKey {\n const { publicKey, privateKey } = generateKeyPairSync('ed25519')\n const rawPublic = rawPublicKeyBytes(publicKey)\n const publicKeyBase64 = rawPublic.toString('base64')\n return {\n kid: computeKid(publicKeyBase64),\n algorithm: 'Ed25519',\n publicKey: publicKeyBase64,\n privateKeyPem: privateKey.export({ type: 'pkcs8', format: 'pem' }).toString(),\n createdAt: new Date().toISOString(),\n }\n}\n\nexport function signEd25519(privateKeyPem: string, message: Buffer): Buffer {\n return cryptoSign(null, message, createPrivateKey(privateKeyPem))\n}\n\nexport function verifyEd25519(publicKeyBase64: string, message: Buffer, signature: Buffer): boolean {\n const jwk = { kty: 'OKP', crv: 'Ed25519', x: Buffer.from(publicKeyBase64, 'base64').toString('base64url') }\n const key = createPublicKey({ key: jwk, format: 'jwk' })\n return cryptoVerify(null, message, key, signature)\n}\n\nfunction rawPublicKeyBytes(publicKey: KeyObject): Buffer {\n const jwk = publicKey.export({ format: 'jwk' }) as { x?: string }\n if (!jwk.x) throw new Error('Failed to export Ed25519 public key.')\n return Buffer.from(jwk.x, 'base64url')\n}\n\nexport function keyPath(name: string): string {\n if (!/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/.test(name)) {\n throw new Error(`Invalid key name '${name}' — use lowercase letters, digits and hyphens.`)\n }\n return join(keysDir(), `${name}.json`)\n}\n\nexport async function saveKey(name: string, key: SigningKey): Promise<string> {\n await mkdir(keysDir(), { recursive: true, mode: 0o700 })\n const path = keyPath(name)\n await writeFile(path, JSON.stringify(key, null, 2) + '\\n', { mode: 0o600, flag: 'wx' })\n return path\n}\n\nexport async function loadKey(name: string): Promise<SigningKey> {\n try {\n return JSON.parse(await readFile(keyPath(name), 'utf8')) as SigningKey\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n throw new Error(`Signing key '${name}' not found. Generate one with \\`verentis keygen --name ${name}\\`.`)\n }\n throw error\n }\n}\n","import { createReadStream } from 'node:fs'\nimport { stat } from 'node:fs/promises'\nimport { Readable } from 'node:stream'\nimport { SCOPES, type ApiClient } from './http.js'\n\nexport interface PublisherDto {\n id: string\n accountId: string\n name: string\n displayName: string\n description?: string | null\n websiteUrl?: string | null\n contactEmail?: string | null\n logoUrl?: string | null\n isVerified: boolean\n status: string\n signingKeys?: { kid: string; algorithm: string; status: string }[]\n}\n\nexport interface PackageSummaryDto {\n id: string\n publisherId: string\n publisherName: string\n name: string\n displayName: string\n kind: string\n visibility: string\n latestPublishedVersion?: string | null\n}\n\nexport interface PagedResult<T> {\n data?: T[]\n items?: T[]\n totalCount?: number\n}\n\nexport interface PackageVersionDto {\n id: string\n packageId: string\n version: string\n status: string\n sizeBytes: number\n treeDigest: string\n isEncrypted: boolean\n hasDeveloperSignature: boolean\n hasMarketplaceSignature: boolean\n}\n\nconst pageItems = <T>(page: PagedResult<T>): T[] => page.data ?? page.items ?? []\n\nexport async function getMyPublisher(api: ApiClient): Promise<PublisherDto | null> {\n const result = await api.request<PublisherDto | null>('GET', '/v1/publishers/me', {\n scopes: [SCOPES.publisherRead],\n })\n return result ?? null\n}\n\nexport async function requireMyPublisher(api: ApiClient): Promise<PublisherDto> {\n const publisher = await getMyPublisher(api)\n if (!publisher) {\n throw new Error('No publisher profile for this account. Create one with `verentis publisher create --name <name> --display-name <display>`.')\n }\n return publisher\n}\n\nexport async function findPackageByName(api: ApiClient, publisherId: string, name: string): Promise<PackageSummaryDto | null> {\n const page = await api.request<PagedResult<PackageSummaryDto>>('GET', `/v1/publishers/${publisherId}/packages`, {\n scopes: [SCOPES.packageRead],\n query: { PageNo: 1, PageSize: 100 },\n })\n return pageItems(page).find((pkg) => pkg.name === name) ?? null\n}\n\nexport async function createPackage(\n api: ApiClient,\n input: { publisherId: string; name: string; displayName: string; kind: string; description?: string; visibility?: 'Public' | 'Private' },\n): Promise<string> {\n return api.request<string>('POST', '/v1/packages', {\n scopes: [SCOPES.packageCreate],\n body: {\n publisherId: input.publisherId,\n name: input.name,\n displayName: input.displayName,\n kind: input.kind,\n description: input.description ?? null,\n icon: null,\n categories: [],\n visibility: input.visibility ?? 'Private',\n },\n })\n}\n\nexport async function uploadVersion(api: ApiClient, packageId: string, vpkgPath: string): Promise<PackageVersionDto> {\n const size = (await stat(vpkgPath)).size\n const stream = Readable.toWeb(createReadStream(vpkgPath)) as unknown as ReadableStream\n const res = await api.requestRaw('POST', `/v1/packages/${packageId}/versions`, {\n scopes: [SCOPES.packagePublish],\n rawBody: stream,\n contentType: 'application/vnd.verentis.package+tar+gzip',\n })\n void size\n return (await res.json()) as PackageVersionDto\n}\n\nexport async function yankVersion(api: ApiClient, packageId: string, version: string): Promise<void> {\n await api.request('POST', `/v1/packages/${packageId}/versions/${encodeURIComponent(version)}/yank`, {\n scopes: [SCOPES.packagePublish],\n })\n}\n\nexport async function downloadTarball(api: ApiClient, packageId: string, version: string, workspaceId?: string): Promise<Response> {\n return api.requestRaw('GET', `/v1/packages/${packageId}/versions/${encodeURIComponent(version)}/tarball`, {\n scopes: [SCOPES.packageRead],\n query: { workspaceId },\n })\n}\n\n/** Resolves \"publisher/name\" or plain \"name\" (relative to the caller's publisher). */\nexport async function resolvePackageRef(api: ApiClient, ref: string): Promise<{ package: PackageSummaryDto; publisherName: string }> {\n const [publisherName, packageName] = ref.includes('/') ? (ref.split('/', 2) as [string, string]) : [undefined, ref]\n\n if (!publisherName) {\n const me = await requireMyPublisher(api)\n const pkg = await findPackageByName(api, me.id, packageName)\n if (!pkg) throw new Error(`Package '${packageName}' not found under your publisher '${me.name}'.`)\n return { package: pkg, publisherName: me.name }\n }\n\n const page = await api.request<PagedResult<PackageSummaryDto>>('GET', '/v1/packages', {\n scopes: [SCOPES.packageReadAll],\n query: { SearchText: packageName, PageNo: 1, PageSize: 100 },\n })\n const pkg = pageItems(page).find((p) => p.name === packageName && p.publisherName === publisherName)\n if (!pkg) throw new Error(`Package '${publisherName}/${packageName}' not found (or not visible to you).`)\n return { package: pkg, publisherName }\n}\n","import { Command } from 'commander'\nimport { createApiClient, SCOPES } from '../http.js'\nimport { loadConfig, saveConfig } from '../config.js'\nimport { generateSigningKey, loadKey, saveKey } from '../crypto/keys.js'\nimport { requireMyPublisher } from '../registry.js'\n\nexport function registerKeygen(program: Command): void {\n program\n .command('keygen')\n .description('Generate an Ed25519 signing key and register its public half with your publisher profile')\n .option('--name <name>', 'key name (stored at ~/.verentis/keys/<name>.json)', 'default')\n .option('--no-register', 'skip registering the public key with the marketplace')\n .option('--set-default', 'use this key as the default for `verentis pack`', true)\n .action(async (options: { name: string; register: boolean; setDefault: boolean }) => {\n const key = generateSigningKey()\n const path = await saveKey(options.name, key)\n console.log(`Generated Ed25519 key '${options.name}' (kid ${key.kid})`)\n console.log(` private key: ${path} — keep this safe; it never leaves your machine.`)\n\n if (options.setDefault) {\n const config = await loadConfig()\n config.defaultKey = options.name\n await saveConfig(config)\n }\n\n if (options.register) {\n const api = await createApiClient()\n const publisher = await requireMyPublisher(api)\n await api.request('POST', `/v1/publishers/${publisher.id}/keys`, {\n scopes: [SCOPES.publisherUpdate],\n body: { publisherId: publisher.id, algorithm: 'Ed25519', publicKey: key.publicKey },\n })\n console.log(`Registered public key with publisher '${publisher.name}'.`)\n } else {\n console.log('Public key NOT registered (use `verentis key register` later).')\n }\n })\n\n const keyCmd = program.command('key').description('Manage signing keys')\n\n keyCmd\n .command('register')\n .description(\"Register a local key's public half with your publisher profile\")\n .option('--name <name>', 'key name', 'default')\n .action(async (options: { name: string }) => {\n const key = await loadKey(options.name)\n const api = await createApiClient()\n const publisher = await requireMyPublisher(api)\n await api.request('POST', `/v1/publishers/${publisher.id}/keys`, {\n scopes: [SCOPES.publisherUpdate],\n body: { publisherId: publisher.id, algorithm: 'Ed25519', publicKey: key.publicKey },\n })\n console.log(`Registered key '${options.name}' (kid ${key.kid}) with publisher '${publisher.name}'.`)\n })\n\n keyCmd\n .command('revoke <kid>')\n .description('Revoke a registered signing key')\n .action(async (kid: string) => {\n const api = await createApiClient()\n const publisher = await requireMyPublisher(api)\n await api.request('DELETE', `/v1/publishers/${publisher.id}/keys/${encodeURIComponent(kid)}`, {\n scopes: [SCOPES.publisherUpdate],\n })\n console.log(`Revoked key ${kid}.`)\n })\n}\n","import { Command } from 'commander'\nimport { createApiClient, SCOPES } from '../http.js'\nimport { loadConfig, saveConfig } from '../config.js'\nimport { decodeJwtPayload } from '../jwt.js'\nimport { pollForIdentityToken, startDeviceAuthorization } from '../auth/deviceFlow.js'\n\nexport function registerLogin(program: Command): void {\n program\n .command('login')\n .description('Sign in to Verentis (browser device flow by default; --api-key/--token for non-interactive use)')\n .option('--api-url <url>', 'Verentis API gateway URL')\n .option('--api-key <key>', 'Verentis API key (vrt_...)')\n .option('--token <token>', 'Verentis identity token (exchanged per request for scoped access tokens)')\n .option('--sealing-key <key>', \"the platform's base64 X25519 sealing PUBLIC key (used by `pack --encrypt`)\")\n .option('--insecure', 'skip TLS certificate verification (for local dev with self-signed certs)')\n .action(async (options: { apiUrl?: string; apiKey?: string; token?: string; sealingKey?: string; insecure?: boolean }) => {\n const config = await loadConfig()\n if (options.apiUrl) config.apiUrl = options.apiUrl\n if (options.sealingKey) config.sealingPublicKey = options.sealingKey\n if (options.insecure !== undefined) config.insecure = options.insecure\n if (!config.apiUrl) throw new Error('An API URL is required. Pass --api-url <url>.')\n\n if (options.apiKey) {\n if (!options.apiKey.startsWith('vrt_')) throw new Error('API keys start with \"vrt_\".')\n config.apiKey = options.apiKey\n delete config.identityToken\n delete config.refreshToken\n await saveConfig(config)\n console.log(`Configuration saved (API key @ ${config.apiUrl}).`)\n return\n }\n if (options.token) {\n config.identityToken = options.token\n delete config.apiKey\n delete config.refreshToken\n await saveConfig(config)\n console.log(`Configuration saved (identity token @ ${config.apiUrl}).`)\n return\n }\n\n // Device-code flow (RFC 8628): works over SSH — approve in any browser.\n const apiUrl = config.apiUrl.replace(/\\/+$/, '')\n const insecure = config.insecure\n const authorization = await startDeviceAuthorization(apiUrl, insecure)\n\n console.log('To sign in, open this URL in a browser:')\n console.log(`\\n ${authorization.verification_uri_complete ?? authorization.verification_uri}\\n`)\n console.log(`and confirm the code: ${authorization.user_code}`)\n console.log('\\nWaiting for approval…')\n\n const identity = await pollForIdentityToken(apiUrl, authorization, insecure, () => process.stderr.write('.'))\n process.stderr.write('\\n')\n\n config.identityToken = identity.idToken\n if (identity.refreshToken) config.refreshToken = identity.refreshToken\n else delete config.refreshToken\n delete config.apiKey\n await saveConfig(config)\n\n const claims = decodeJwtPayload(identity.idToken)\n console.log(`Signed in as ${claims?.name ?? claims?.email ?? claims?.sub ?? 'unknown'} @ ${config.apiUrl}.`)\n if (!claims?.account_id) {\n console.log('Note: no unambiguous account context — admin commands may need --account <id>.')\n }\n })\n\n program\n .command('logout')\n .description('Remove stored credentials')\n .action(async () => {\n const config = await loadConfig()\n delete config.apiKey\n delete config.identityToken\n delete config.refreshToken\n await saveConfig(config)\n console.log('Credentials removed.')\n })\n\n program\n .command('whoami')\n .description('Show the current identity, account and publisher profile')\n .action(async () => {\n const config = await loadConfig()\n const identityToken = process.env.VERENTIS_TOKEN ?? config.identityToken\n if (identityToken) {\n const claims = decodeJwtPayload(identityToken)\n if (claims) {\n const expiry = claims.exp ? new Date(claims.exp * 1000) : undefined\n const expired = expiry && expiry.getTime() <= Date.now()\n const renewable = Boolean(config.refreshToken) && !process.env.VERENTIS_TOKEN\n console.log(`User: ${claims.name ?? claims.email ?? claims.sub ?? '(unknown)'}${claims.sub ? ` (${claims.sub})` : ''}`)\n if (claims.account_id) console.log(`Account: ${claims.account_id}`)\n if (expiry) {\n const state = expired ? (renewable ? 'expired (auto-renews)' : 'EXPIRED') : 'expires'\n console.log(`Token ${state}: ${expiry.toISOString()}`)\n }\n if (renewable) console.log('Session: refresh token stored (stays signed in across expiries)')\n }\n } else if (process.env.VERENTIS_API_KEY ?? config.apiKey) {\n console.log('Credential: API key (identity claims not available)')\n }\n if (config.defaultWorkspaceId) console.log(`Workspace: ${config.defaultWorkspaceId} (default)`)\n\n const api = await createApiClient()\n const publisher = await api.request<{ name?: string; displayName?: string; isVerified?: boolean; signingKeys?: { kid: string; status: string }[] } | null>(\n 'GET',\n '/v1/publishers/me',\n { scopes: [SCOPES.publisherRead] },\n ).catch(() => null)\n if (!publisher) {\n console.log('Publisher: none — create one with `verentis publisher create --name <name> --display-name \"<display name>\"`')\n return\n }\n console.log(`Publisher: ${publisher.name} (${publisher.displayName})${publisher.isVerified ? ' ✓ verified' : ''}`)\n for (const key of publisher.signingKeys ?? []) {\n console.log(` key ${key.kid} [${key.status}]`)\n }\n })\n}\n","import { signEd25519, verifyEd25519, type SigningKey } from './keys.js'\n\n/**\n * DSSE (Dead Simple Signing Envelope) — https://github.com/secure-systems-lab/dsse\n * Envelope and PAE encoding must match the marketplace registry's verifier:\n * payload type `application/vnd.verentis.package.digests+json`, Ed25519 signatures.\n */\nexport const DSSE_PAYLOAD_TYPE = 'application/vnd.verentis.package.digests+json'\n\nexport interface DsseEnvelope {\n payload: string\n payloadType: string\n signatures: { keyid: string; sig: string }[]\n}\n\n/** DSSE pre-authentication encoding: \"DSSEv1 <typeLen> <type> <payloadLen> \" + payload. */\nexport function preAuthenticationEncoding(payloadType: string, payload: Buffer): Buffer {\n const typeBytes = Buffer.from(payloadType, 'utf8')\n const header = Buffer.from(\n `DSSEv1 ${typeBytes.length} ${payloadType} ${payload.length} `, 'utf8')\n return Buffer.concat([header, payload])\n}\n\nexport function signEnvelope(payload: string, key: SigningKey): DsseEnvelope {\n const payloadBytes = Buffer.from(payload, 'utf8')\n const pae = preAuthenticationEncoding(DSSE_PAYLOAD_TYPE, payloadBytes)\n const signature = signEd25519(key.privateKeyPem, pae)\n return {\n payload: payloadBytes.toString('base64'),\n payloadType: DSSE_PAYLOAD_TYPE,\n signatures: [{ keyid: key.kid, sig: signature.toString('base64') }],\n }\n}\n\n/** Returns the keyid of the first signature that verifies, or null. */\nexport function verifyEnvelope(envelope: DsseEnvelope, expectedPayload: string, publicKeysByKid: Record<string, string>): string | null {\n if (envelope.payloadType !== DSSE_PAYLOAD_TYPE) return null\n const payloadBytes = Buffer.from(envelope.payload, 'base64')\n if (payloadBytes.toString('utf8') !== expectedPayload) return null\n\n const pae = preAuthenticationEncoding(envelope.payloadType, payloadBytes)\n for (const signature of envelope.signatures) {\n for (const [kid, publicKey] of Object.entries(publicKeysByKid)) {\n if (signature.keyid && signature.keyid !== kid) continue\n try {\n if (verifyEd25519(publicKey, pae, Buffer.from(signature.sig, 'base64'))) return kid\n } catch {\n // try next key\n }\n }\n }\n return null\n}\n","import {\n createCipheriv,\n createDecipheriv,\n createPrivateKey,\n createPublicKey,\n diffieHellman,\n generateKeyPairSync,\n hkdfSync,\n randomBytes,\n type KeyObject,\n} from 'node:crypto'\n\n/**\n * Sealed-package payload encryption.\n *\n * Content encryption: AES-256-GCM per entry, layout nonce(12) || ciphertext || tag(16).\n * Key wrapping (\"x25519-hkdf-sha256-aes256gcm\"): per recipient an ephemeral X25519 keypair;\n * shared = X25519(ephemeralPrivate, recipientPublic)\n * kek = HKDF-SHA256(shared, salt = ephemeralPublic || recipientPublic, info = \"verentis-vpkg-wrap-v1\", 32)\n * wrapped = AES-256-GCM(kek) over the 32-byte content key (same nonce||ct||tag layout).\n * The registry digests cover the ENCRYPTED entry bytes, so integrity and signing are\n * unchanged for sealed packages.\n */\nexport const WRAP_ALGORITHM = 'x25519-hkdf-sha256-aes256gcm'\nexport const CONTENT_ALGORITHM = 'aes-256-gcm'\nexport const WRAP_INFO = 'verentis-vpkg-wrap-v1'\n\nexport interface EncryptionRecipient {\n /** Recipient label: \"platform\" (escrow / Node member reads) or a custom name. */\n id: string\n /** Base64 raw X25519 public key of the recipient. */\n publicKey: string\n /** Base64 raw X25519 public key of the wrap-time ephemeral keypair. */\n ephemeralPublicKey: string\n /** Base64 nonce||ciphertext||tag over the content key. */\n wrappedKey: string\n}\n\nexport interface EncryptionManifest {\n algorithm: typeof CONTENT_ALGORITHM\n keyWrapping: typeof WRAP_ALGORITHM\n recipients: EncryptionRecipient[]\n}\n\nexport interface SealingKeyPair {\n /** Base64 raw 32-byte X25519 public key. */\n publicKey: string\n /** Base64 raw 32-byte X25519 private key. */\n privateKey: string\n}\n\nexport function generateSealingKeyPair(): SealingKeyPair {\n const { publicKey, privateKey } = generateKeyPairSync('x25519')\n return {\n publicKey: rawX25519Public(publicKey).toString('base64'),\n privateKey: rawX25519Private(privateKey).toString('base64'),\n }\n}\n\nexport function generateContentKey(): Buffer {\n return randomBytes(32)\n}\n\n/** AES-256-GCM encrypt: returns nonce(12) || ciphertext || tag(16). */\nexport function encryptBytes(key: Buffer, plaintext: Buffer): Buffer {\n const nonce = randomBytes(12)\n const cipher = createCipheriv(CONTENT_ALGORITHM, key, nonce)\n const ciphertext = Buffer.concat([cipher.update(plaintext), cipher.final()])\n return Buffer.concat([nonce, ciphertext, cipher.getAuthTag()])\n}\n\nexport function decryptBytes(key: Buffer, sealed: Buffer): Buffer {\n if (sealed.length < 12 + 16) throw new Error('Sealed data too short.')\n const nonce = sealed.subarray(0, 12)\n const tag = sealed.subarray(sealed.length - 16)\n const ciphertext = sealed.subarray(12, sealed.length - 16)\n const decipher = createDecipheriv(CONTENT_ALGORITHM, key, nonce)\n decipher.setAuthTag(tag)\n return Buffer.concat([decipher.update(ciphertext), decipher.final()])\n}\n\n/** Wraps the content key for one recipient. */\nexport function wrapContentKey(contentKey: Buffer, recipientId: string, recipientPublicKeyBase64: string): EncryptionRecipient {\n const recipientPublic = Buffer.from(recipientPublicKeyBase64, 'base64')\n const ephemeral = generateKeyPairSync('x25519')\n const ephemeralPublic = rawX25519Public(ephemeral.publicKey)\n\n const kek = deriveWrapKey(ephemeral.privateKey, publicKeyFromRaw(recipientPublic), ephemeralPublic, recipientPublic)\n return {\n id: recipientId,\n publicKey: recipientPublicKeyBase64,\n ephemeralPublicKey: ephemeralPublic.toString('base64'),\n wrappedKey: encryptBytes(kek, contentKey).toString('base64'),\n }\n}\n\n/** Unwraps the content key with a recipient's private key. Returns null when this recipient doesn't match. */\nexport function unwrapContentKey(manifest: EncryptionManifest, recipientPrivateKeyBase64: string): Buffer | null {\n const privateKey = privateKeyFromRaw(Buffer.from(recipientPrivateKeyBase64, 'base64'))\n const ownPublic = rawX25519Public(createPublicKey(privateKey))\n\n for (const recipient of manifest.recipients) {\n if (recipient.publicKey !== ownPublic.toString('base64')) continue\n const ephemeralPublic = Buffer.from(recipient.ephemeralPublicKey, 'base64')\n const kek = deriveWrapKey(privateKey, publicKeyFromRaw(ephemeralPublic), ephemeralPublic, ownPublic)\n try {\n return decryptBytes(kek, Buffer.from(recipient.wrappedKey, 'base64'))\n } catch {\n return null\n }\n }\n return null\n}\n\nfunction deriveWrapKey(privateKey: KeyObject, publicKey: KeyObject, ephemeralPublic: Buffer, recipientPublic: Buffer): Buffer {\n const shared = diffieHellman({ privateKey, publicKey })\n const salt = Buffer.concat([ephemeralPublic, recipientPublic])\n return Buffer.from(hkdfSync('sha256', shared, salt, WRAP_INFO, 32))\n}\n\nfunction rawX25519Public(key: KeyObject): Buffer {\n const jwk = key.export({ format: 'jwk' }) as { x?: string }\n if (!jwk.x) throw new Error('Failed to export X25519 public key.')\n return Buffer.from(jwk.x, 'base64url')\n}\n\nfunction rawX25519Private(key: KeyObject): Buffer {\n const jwk = key.export({ format: 'jwk' }) as { d?: string }\n if (!jwk.d) throw new Error('Failed to export X25519 private key.')\n return Buffer.from(jwk.d, 'base64url')\n}\n\nfunction publicKeyFromRaw(raw: Buffer): KeyObject {\n return createPublicKey({ key: { kty: 'OKP', crv: 'X25519', x: raw.toString('base64url') }, format: 'jwk' })\n}\n\nfunction privateKeyFromRaw(raw: Buffer): KeyObject {\n // PKCS#8 wrapping for X25519 private keys (RFC 8410): fixed prefix || 32-byte key.\n const der = Buffer.concat([Buffer.from('302e020100300506032b656e04220420', 'hex'), raw])\n return createPrivateKey({ key: der, format: 'der', type: 'pkcs8' })\n}\n","import { createHash } from 'node:crypto'\nimport { glob, readFile, realpath, stat } from 'node:fs/promises'\nimport { extname, isAbsolute, join, relative, resolve, sep } from 'node:path'\nimport type { MarketplaceSection } from './manifest.js'\n\nconst MIB = 1024 * 1024\nconst MAX_LOGO_BYTES = MIB\nconst MAX_IMAGE_BYTES = 5 * MIB\nconst MAX_TOTAL_IMAGE_BYTES = 25 * MIB\nconst MAX_MARKDOWN_BYTES = MIB\n\nexport interface CatalogFileReference {\n source: string\n path: string\n mediaType: string\n size: number\n sha256: string\n}\n\nexport interface CatalogImageReference extends CatalogFileReference {\n alt: string\n caption?: string\n}\n\nexport interface CatalogIndex {\n schemaVersion: 1\n logo?: CatalogFileReference\n hero?: CatalogImageReference\n images?: CatalogImageReference[]\n readme?: CatalogFileReference\n changelog?: CatalogFileReference\n assets?: CatalogFileReference[]\n}\n\nexport interface CatalogEntry {\n path: string\n bytes: Buffer\n}\n\nexport interface CatalogBuild {\n index: CatalogIndex\n indexJson: string\n entries: CatalogEntry[]\n}\n\ninterface ResolvedFile {\n source: string\n path: string\n bytes: Buffer\n}\n\ninterface ImageInfo {\n extension: string\n mediaType: string\n}\n\nexport async function buildCatalog(projectDir: string, marketplace: MarketplaceSection): Promise<CatalogBuild> {\n const root = await realpath(projectDir)\n const entries = new Map<string, Buffer>()\n const imageDigests = new Map<string, number>()\n const index: CatalogIndex = { schemaVersion: 1 }\n\n const addImage = async (source: string, label: string, maxBytes: number): Promise<CatalogFileReference> => {\n const file = await resolveDirectFile(root, source, label)\n if (file.bytes.length > maxBytes) {\n throw new Error(`${label} exceeds the ${formatMiB(maxBytes)} MiB limit (${file.bytes.length} bytes).`)\n }\n const image = validateImage(file.bytes, file.path, label)\n const reference = addContentAddressedEntry(file, image, 'assets', entries)\n imageDigests.set(reference.sha256, reference.size)\n return reference\n }\n\n const addMarkdown = async (source: string, label: string): Promise<CatalogFileReference> => {\n const file = await resolveDirectFile(root, source, label)\n if (file.bytes.length > MAX_MARKDOWN_BYTES) {\n throw new Error(`${label} exceeds the 1 MiB limit (${file.bytes.length} bytes).`)\n }\n validateMarkdown(file.bytes, file.path, label)\n return addContentAddressedEntry(file, { extension: '.md', mediaType: 'text/markdown' }, 'docs', entries)\n }\n\n if (marketplace.logo) index.logo = await addImage(marketplace.logo, 'marketplace.logo', MAX_LOGO_BYTES)\n\n if (marketplace.hero) {\n const reference = await addImage(marketplace.hero.source, 'marketplace.hero.source', MAX_IMAGE_BYTES)\n index.hero = { ...reference, alt: marketplace.hero.alt.trim() }\n }\n\n if (marketplace.images?.length) {\n index.images = []\n for (const [position, image] of marketplace.images.entries()) {\n const reference = await addImage(image.source, `marketplace.images[${position}].source`, MAX_IMAGE_BYTES)\n index.images.push({\n ...reference,\n alt: image.alt.trim(),\n ...(image.caption !== undefined ? { caption: image.caption } : {}),\n })\n }\n }\n\n if (marketplace.readme) index.readme = await addMarkdown(marketplace.readme, 'marketplace.readme')\n if (marketplace.changelog) index.changelog = await addMarkdown(marketplace.changelog, 'marketplace.changelog')\n\n if (marketplace.assets?.length) {\n index.assets = []\n const assetFiles = await resolveAssetGlobs(root, marketplace.assets)\n for (const file of assetFiles) {\n if (file.bytes.length > MAX_IMAGE_BYTES) {\n throw new Error(`marketplace.assets matched '${file.source}', which exceeds the 5 MiB per-image limit (${file.bytes.length} bytes).`)\n }\n const image = validateImage(file.bytes, file.path, `marketplace.assets entry '${file.source}'`)\n const reference = addContentAddressedEntry(file, image, 'assets', entries)\n imageDigests.set(reference.sha256, reference.size)\n index.assets.push(reference)\n }\n }\n\n const totalImageBytes = [...imageDigests.values()].reduce((sum, size) => sum + size, 0)\n if (totalImageBytes > MAX_TOTAL_IMAGE_BYTES) {\n throw new Error(`Marketplace image assets exceed the 25 MiB total limit (${totalImageBytes} bytes).`)\n }\n\n const indexJson = `${JSON.stringify(index, null, 2)}\\n`\n return {\n index,\n indexJson,\n entries: [...entries.entries()].sort(([left], [right]) => left.localeCompare(right)).map(([path, bytes]) => ({ path, bytes })),\n }\n}\n\nasync function resolveDirectFile(root: string, source: string, label: string): Promise<ResolvedFile> {\n const normalized = normalizeRelativeReference(source, label)\n return readContainedFile(root, normalized, label)\n}\n\nasync function resolveAssetGlobs(root: string, patterns: string[]): Promise<ResolvedFile[]> {\n const matched = new Set<string>()\n for (const sourcePattern of patterns) {\n const pattern = normalizeRelativeReference(sourcePattern, 'marketplace.assets glob')\n for await (const entry of glob(pattern, { cwd: root })) {\n const normalized = toEntryPath(entry)\n const info = await stat(join(root, normalized)).catch(() => null)\n if (info?.isFile()) matched.add(normalized)\n }\n }\n\n const files: ResolvedFile[] = []\n for (const source of [...matched].sort()) {\n files.push(await readContainedFile(root, source, `marketplace.assets entry '${source}'`))\n }\n return files\n}\n\nasync function readContainedFile(root: string, source: string, label: string): Promise<ResolvedFile> {\n const candidate = resolve(root, source)\n const actual = await realpath(candidate).catch(() => {\n throw new Error(`${label} references missing file '${source}'.`)\n })\n const fromRoot = relative(root, actual)\n if (fromRoot === '' || fromRoot.startsWith(`..${sep}`) || fromRoot === '..' || isAbsolute(fromRoot)) {\n throw new Error(`${label} references '${source}', which escapes the manifest directory.`)\n }\n const info = await stat(actual)\n if (!info.isFile()) throw new Error(`${label} references '${source}', which is not a file.`)\n return { source: toEntryPath(source), path: actual, bytes: await readFile(actual) }\n}\n\nfunction normalizeRelativeReference(source: string, label: string): string {\n const value = source.trim()\n if (\n value.length === 0\n || value.includes('\\0')\n || value.includes('\\\\')\n || isAbsolute(value)\n || /^[a-z]:/i.test(value)\n || value.split('/').includes('..')\n ) {\n throw new Error(`${label} must be relative to the manifest directory and must not escape it (got '${source}').`)\n }\n const normalized = value.replace(/^(?:\\.\\/)+/, '')\n if (normalized.length === 0 || normalized === '.') throw new Error(`${label} must reference a file inside the manifest directory.`)\n return normalized\n}\n\nfunction addContentAddressedEntry(\n file: ResolvedFile,\n type: ImageInfo,\n directory: 'assets' | 'docs',\n entries: Map<string, Buffer>,\n): CatalogFileReference {\n const sha256 = createHash('sha256').update(file.bytes).digest('hex')\n const path = `catalog/${directory}/${sha256}${type.extension}`\n entries.set(path, file.bytes)\n return {\n source: file.source,\n path,\n mediaType: type.mediaType,\n size: file.bytes.length,\n sha256,\n }\n}\n\nfunction validateImage(bytes: Buffer, path: string, label: string): ImageInfo {\n const pngSignature = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])\n if (bytes.length >= 24 && bytes.subarray(0, 8).equals(pngSignature)) {\n if (bytes.readUInt32BE(8) !== 13 || bytes.toString('ascii', 12, 16) !== 'IHDR') throw new Error(`${label} is not a valid PNG file.`)\n return { extension: '.png', mediaType: 'image/png' }\n }\n\n if (bytes.length >= 4 && bytes[0] === 0xff && bytes[1] === 0xd8) {\n if (bytes[bytes.length - 2] !== 0xff || bytes[bytes.length - 1] !== 0xd9) throw new Error(`${label} is not a valid JPEG file.`)\n return { extension: '.jpg', mediaType: 'image/jpeg' }\n }\n\n if (bytes.length >= 12 && bytes.toString('ascii', 0, 4) === 'RIFF' && bytes.toString('ascii', 8, 12) === 'WEBP') {\n const declaredLength = bytes.readUInt32LE(4) + 8\n if (declaredLength !== bytes.length) throw new Error(`${label} has an invalid WebP length.`)\n return { extension: '.webp', mediaType: 'image/webp' }\n }\n\n const extension = extname(path).toLowerCase()\n if (extension === '.svg' || looksLikeSvg(bytes)) {\n validateSvg(bytes, label)\n return { extension: '.svg', mediaType: 'image/svg+xml' }\n }\n\n throw new Error(`${label} must be a valid PNG, JPEG, WebP or SVG image.`)\n}\n\nfunction looksLikeSvg(bytes: Buffer): boolean {\n const prefix = bytes.subarray(0, Math.min(bytes.length, 512)).toString('utf8').replace(/^\\uFEFF/, '').trimStart()\n return prefix.startsWith('<svg') || prefix.startsWith('<?xml') || prefix.startsWith('<!--')\n}\n\nfunction validateSvg(bytes: Buffer, label: string): void {\n let text: string\n try {\n text = new TextDecoder('utf-8', { fatal: true }).decode(bytes)\n } catch {\n throw new Error(`${label} is not valid UTF-8 SVG content.`)\n }\n const trimmed = text.replace(/^\\uFEFF/, '').trim()\n const root = /^(?:<\\?xml[\\s\\S]*?\\?>\\s*)?(?:<!--[\\s\\S]*?-->\\s*)*<svg\\b/i\n if (!root.test(trimmed) || (!/<\\/svg>\\s*$/i.test(trimmed) && !/<svg\\b[\\s\\S]*\\/>\\s*$/i.test(trimmed))) {\n throw new Error(`${label} is not a well-formed SVG document.`)\n }\n if (/&#(?:x[0-9a-f]+|[0-9]+);/i.test(trimmed)) {\n throw new Error(`${label} contains numeric XML character references, which are not allowed in SVG content.`)\n }\n if (\n /<!DOCTYPE|<!ENTITY/i.test(trimmed)\n || /<(?:script|foreignObject|iframe|object|embed|audio|video)\\b/i.test(trimmed)\n || /\\son[a-z]+\\s*=/i.test(trimmed)\n || /(?:javascript|vbscript)\\s*:/i.test(trimmed)\n || /data\\s*:\\s*text\\/html/i.test(trimmed)\n ) {\n throw new Error(`${label} contains active SVG content, which is not allowed.`)\n }\n}\n\nfunction validateMarkdown(bytes: Buffer, _path: string, label: string): void {\n try {\n const text = new TextDecoder('utf-8', { fatal: true }).decode(bytes)\n if (text.includes('\\0')) throw new Error('NUL')\n } catch {\n throw new Error(`${label} must contain valid UTF-8 Markdown text.`)\n }\n}\n\nfunction formatMiB(bytes: number): number {\n return bytes / MIB\n}\n\nfunction toEntryPath(path: string): string {\n return path.split(sep).join('/')\n}\n","import { readFile } from 'node:fs/promises'\nimport { isAbsolute, join, resolve } from 'node:path'\nimport { parse } from 'yaml'\n\nexport interface OverlaySelector {\n /** Maps to <projectDir>/environments/<env>.yaml. */\n env?: string\n /** An explicit overlay file path (wins over env). */\n overlay?: string\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\n/**\n * Deep-merges `overlay` onto `base`: nested plain objects merge recursively, while arrays and\n * scalars in the overlay REPLACE the base value (so e.g. redirect-uris is taken from the overlay,\n * not appended). Never mutates `base`.\n */\nexport function deepMerge<T>(base: T, overlay: unknown): T {\n if (!isPlainObject(base) || !isPlainObject(overlay)) {\n return overlay as T\n }\n const result: Record<string, unknown> = { ...base }\n for (const [key, value] of Object.entries(overlay)) {\n result[key] = key in result ? deepMerge(result[key], value) : value\n }\n return result as T\n}\n\n/** Applies a loaded overlay mapping onto a base manifest object. */\nexport function applyOverlay<T>(base: T, overlay: Record<string, unknown>): T {\n return deepMerge(base, overlay)\n}\n\n/**\n * Resolves which overlay file to merge. `--overlay <path>` (relative to the cwd, or absolute) wins\n * over `--env <name>` (which maps to `<projectDir>/environments/<name>.yaml`). Returns undefined\n * when neither is set.\n */\nexport function resolveOverlayPath(projectDir: string, selector: OverlaySelector): string | undefined {\n if (selector.overlay) {\n return isAbsolute(selector.overlay) ? selector.overlay : resolve(selector.overlay)\n }\n if (selector.env) {\n return join(projectDir, 'environments', `${selector.env}.yaml`)\n }\n return undefined\n}\n\n/** Reads and parses an overlay YAML file, requiring a mapping (an empty file is an empty mapping). */\nexport async function loadOverlay(path: string): Promise<Record<string, unknown>> {\n let text: string\n try {\n text = await readFile(path, 'utf8')\n } catch (error) {\n if ((error as NodeJS.ErrnoException)?.code === 'ENOENT') {\n throw new Error(`Overlay file not found: ${path}`)\n }\n throw error\n }\n const parsed = parse(text)\n if (parsed === null || parsed === undefined) return {}\n if (!isPlainObject(parsed)) {\n throw new Error(`Overlay ${path} must be a YAML mapping (got ${Array.isArray(parsed) ? 'a list' : typeof parsed}).`)\n }\n return parsed\n}\n","import { createHash } from 'node:crypto'\nimport { glob, mkdir, mkdtemp, readFile, rm, stat, writeFile } from 'node:fs/promises'\nimport { tmpdir } from 'node:os'\nimport { dirname, join, relative, resolve, sep } from 'node:path'\nimport * as tar from 'tar'\nimport { stringify } from 'yaml'\nimport { signEnvelope } from '../crypto/dsse.js'\nimport type { SigningKey } from '../crypto/keys.js'\nimport {\n encryptBytes,\n generateContentKey,\n wrapContentKey,\n CONTENT_ALGORITHM,\n WRAP_ALGORITHM,\n type EncryptionManifest,\n} from '../crypto/seal.js'\nimport { buildCatalog, type CatalogIndex } from './catalog.js'\nimport { applyOverlay, loadOverlay, resolveOverlayPath } from './overlay.js'\nimport {\n loadManifest,\n normalizeKind,\n validateLaunchManifestKind,\n validateMarketplaceSection,\n validatePackageName,\n type Manifest,\n} from './manifest.js'\n\nexport interface PackRecipient {\n id: string\n /** Base64 raw X25519 public key. */\n publicKey: string\n}\n\nexport interface PackOptions {\n manifestPath: string\n publisher: string\n /** Overrides packaging.name / metadata.name. */\n name?: string\n outDir?: string\n signingKey?: SigningKey\n /** When set, payload entries are AES-256-GCM encrypted and the content key wrapped per recipient. */\n encryptFor?: PackRecipient[]\n /** Merge environments/<env>.yaml onto the base manifest before packing. */\n env?: string\n /** Merge an explicit overlay file before packing (wins over env). */\n overlay?: string\n /** Override metadata.version (e.g. a CI-derived build number). */\n version?: string\n}\n\nexport interface PackResult {\n outFile: string\n name: string\n publisher: string\n version: string\n kind: string\n files: string[]\n catalog?: CatalogIndex\n catalogFiles: string[]\n treeDigest: string\n signed: boolean\n encrypted: boolean\n}\n\n/**\n * Builds a .vpkg: gzip tarball with manifest.yaml, files/**, optional catalog/**,\n * and .verentis metadata\n * (package.yaml, digests.json, signatures/developer.dsse.json). Layout and digest\n * semantics must match the registry's VpkgArchiveService.\n */\nexport async function pack(options: PackOptions): Promise<PackResult> {\n const manifestPath = resolve(options.manifestPath)\n const projectDir = dirname(manifestPath)\n const base = await loadManifest(manifestPath)\n const overlayPath = resolveOverlayPath(projectDir, { env: options.env, overlay: options.overlay })\n let manifest = overlayPath ? (applyOverlay(base, await loadOverlay(overlayPath)) as typeof base) : base\n let overrideApplied = overlayPath !== undefined\n if (options.version !== undefined) {\n manifest = { ...manifest, metadata: { ...manifest.metadata, version: options.version } }\n overrideApplied = true\n }\n const kind = normalizeKind(manifest.kind)\n const launchKindError = validateLaunchManifestKind(kind, manifest.spec)\n if (launchKindError) throw new Error(`Invalid manifest: ${launchKindError}.`)\n const marketplaceErrors = validateMarketplaceSection(manifest.marketplace)\n if (marketplaceErrors.length > 0) throw new Error(`Invalid marketplace section: ${marketplaceErrors.join(' ')}`)\n\n const name = (options.name ?? manifest.packaging?.name ?? manifest.metadata.name).toLowerCase()\n const publisher = options.publisher.toLowerCase()\n validatePackageName(name, 'package name')\n validatePackageName(publisher, 'publisher name')\n const version = manifest.metadata.version\n\n const payloadFiles = await resolvePayloadFiles(projectDir, manifestPath, manifest)\n const catalog = manifest.marketplace ? await buildCatalog(projectDir, manifest.marketplace) : undefined\n\n const staging = await mkdtemp(join(tmpdir(), 'vpkg-'))\n try {\n // When an overlay or version override is applied, embed the merged manifest (comments are lost);\n // otherwise embed the authored file verbatim so comments survive.\n const manifestText = overrideApplied ? stringify(manifest) : await readFile(manifestPath, 'utf8')\n await writeFile(join(staging, 'manifest.yaml'), manifestText)\n\n const encrypt = (options.encryptFor?.length ?? 0) > 0\n const contentKey = encrypt ? generateContentKey() : null\n\n const digests: Record<string, string> = {\n 'manifest.yaml': sha256Hex(Buffer.from(manifestText, 'utf8')),\n }\n\n for (const file of payloadFiles) {\n const sourcePath = join(projectDir, file)\n const entryName = `files/${toEntryPath(file)}`\n const targetPath = join(staging, 'files', file)\n await mkdir(dirname(targetPath), { recursive: true })\n\n // Encrypted packages seal every payload entry; digests cover the sealed bytes so\n // registry integrity + signing are unchanged.\n const bytes = contentKey ? encryptBytes(contentKey, await readFile(sourcePath)) : await readFile(sourcePath)\n await writeFile(targetPath, bytes)\n digests[entryName] = sha256Hex(bytes)\n }\n\n if (catalog) {\n for (const entry of catalog.entries) {\n const targetPath = join(staging, entry.path)\n await mkdir(dirname(targetPath), { recursive: true })\n await writeFile(targetPath, entry.bytes)\n digests[entry.path] = sha256Hex(entry.bytes)\n }\n await mkdir(join(staging, 'catalog'), { recursive: true })\n await writeFile(join(staging, 'catalog', 'index.json'), catalog.indexJson)\n digests['catalog/index.json'] = sha256Hex(Buffer.from(catalog.indexJson, 'utf8'))\n }\n\n await mkdir(join(staging, '.verentis', 'signatures'), { recursive: true })\n\n if (contentKey) {\n const encryption: EncryptionManifest = {\n algorithm: CONTENT_ALGORITHM,\n keyWrapping: WRAP_ALGORITHM,\n recipients: options.encryptFor!.map((r) => wrapContentKey(contentKey, r.id, r.publicKey)),\n }\n await writeFile(join(staging, '.verentis', 'encryption.json'), JSON.stringify(encryption, null, 2))\n }\n\n const digestsJson = JSON.stringify({ algorithm: 'sha256', entries: digests }, null, 2)\n await writeFile(join(staging, '.verentis', 'digests.json'), digestsJson)\n\n const packageYaml = [\n `name: ${name}`,\n `publisher: ${publisher}`,\n `version: ${version}`,\n `kind: ${kind}`,\n ...(manifest.metadata['display-name'] ? [`display-name: ${JSON.stringify(manifest.metadata['display-name'])}`] : []),\n '',\n ].join('\\n')\n await writeFile(join(staging, '.verentis', 'package.yaml'), packageYaml)\n\n let signed = false\n if (options.signingKey) {\n const envelope = signEnvelope(digestsJson, options.signingKey)\n await writeFile(join(staging, '.verentis', 'signatures', 'developer.dsse.json'), JSON.stringify(envelope, null, 2))\n signed = true\n }\n\n const outDir = resolve(options.outDir ?? projectDir)\n await mkdir(outDir, { recursive: true })\n const outFile = join(outDir, `${name}-${version}.vpkg`)\n\n const entries = [\n 'manifest.yaml',\n '.verentis/package.yaml',\n '.verentis/digests.json',\n ...(contentKey ? ['.verentis/encryption.json'] : []),\n ...(signed ? ['.verentis/signatures/developer.dsse.json'] : []),\n ...payloadFiles.map((file) => `files/${toEntryPath(file)}`),\n ...(catalog ? ['catalog/index.json', ...catalog.entries.map((entry) => entry.path)] : []),\n ]\n await tar.create({ gzip: true, file: outFile, cwd: staging, portable: true, mtime: new Date(0) }, entries)\n\n return {\n outFile,\n name,\n publisher,\n version,\n kind,\n files: payloadFiles.map(toEntryPath),\n catalog: catalog?.index,\n catalogFiles: catalog ? ['index.json', ...catalog.entries.map((entry) => entry.path.replace(/^catalog\\//, ''))] : [],\n treeDigest: sha256Hex(Buffer.from(digestsJson, 'utf8')),\n signed,\n encrypted: encrypt,\n }\n } finally {\n await rm(staging, { recursive: true, force: true })\n }\n}\n\nasync function resolvePayloadFiles(projectDir: string, manifestPath: string, manifest: Manifest): Promise<string[]> {\n const includes = manifest.packaging?.files ?? defaultIncludes(manifest)\n const excludes = manifest.packaging?.exclude ?? []\n\n const matched = new Set<string>()\n for (const pattern of includes) {\n for await (const entry of glob(pattern, { cwd: projectDir, exclude: excludes })) {\n const abs = join(projectDir, entry)\n if (!(await stat(abs)).isFile()) continue\n if (abs === manifestPath) continue\n const rel = relative(projectDir, abs)\n if (rel.startsWith('..')) throw new Error(`Packaging glob '${pattern}' matched '${rel}' outside the project directory.`)\n matched.add(rel)\n }\n }\n return [...matched].sort()\n}\n\nfunction defaultIncludes(manifest: Manifest): string[] {\n // Without an explicit packaging.files list, pull in every file the manifest references:\n // schema `source:` paths (the common Application case) and every `spec.install[].from` glob\n // (apps that place files into the workspace VFS). Engines/bundles without either must declare\n // packaging.files.\n const sources = new Set<string>()\n collectSchemaSources((manifest as { spec?: unknown }).spec, sources)\n collectInstallSources(manifest, sources)\n if (sources.size === 0) return []\n return [...sources]\n}\n\n/** Collects `spec.install[].from` globs so a file-collection app packs its payload by default. */\nfunction collectInstallSources(manifest: Manifest, sources: Set<string>): void {\n const spec = (manifest as { spec?: { install?: unknown } }).spec\n const install = spec?.install\n if (!Array.isArray(install)) return\n for (const directive of install) {\n const from = (directive as { from?: unknown })?.from\n if (typeof from === 'string' && from.length > 0 && !from.startsWith('/')) {\n sources.add(from)\n }\n }\n}\n\nfunction collectSchemaSources(node: unknown, sources: Set<string>): void {\n if (Array.isArray(node)) {\n for (const item of node) collectSchemaSources(item, sources)\n return\n }\n if (node && typeof node === 'object') {\n for (const [key, value] of Object.entries(node as Record<string, unknown>)) {\n if (key === 'source' && typeof value === 'string' && value.startsWith('./')) {\n sources.add(value.slice(2))\n } else {\n collectSchemaSources(value, sources)\n }\n }\n }\n}\n\nfunction toEntryPath(file: string): string {\n return file.split(sep).join('/')\n}\n\nfunction sha256Hex(data: Buffer): string {\n return createHash('sha256').update(data).digest('hex')\n}\n","import { createHash } from 'node:crypto'\nimport { glob, mkdtemp, readFile, rm } from 'node:fs/promises'\nimport { tmpdir } from 'node:os'\nimport { join, sep } from 'node:path'\nimport * as tar from 'tar'\nimport { parse } from 'yaml'\nimport type { DsseEnvelope } from '../crypto/dsse.js'\nimport type { EncryptionManifest } from '../crypto/seal.js'\nimport type { CatalogIndex } from './catalog.js'\n\nexport interface VpkgContents {\n metadata: { name: string; publisher: string; version: string; kind: string; 'display-name'?: string }\n manifestYaml: string\n digestsJson: string\n treeDigest: string\n developerSignature?: DsseEnvelope\n marketplaceSignature?: DsseEnvelope\n encryption?: EncryptionManifest\n files: string[]\n catalog?: CatalogIndex\n catalogFiles: string[]\n /** Digest problems discovered while reading ([] = digest-clean). */\n digestErrors: string[]\n}\n\n/** Extracts and digest-checks a .vpkg (mirrors the registry's read/validate pass). */\nexport async function readVpkg(vpkgPath: string): Promise<VpkgContents> {\n const staging = await mkdtemp(join(tmpdir(), 'vpkg-read-'))\n try {\n await tar.extract({ file: vpkgPath, cwd: staging })\n\n const manifestYaml = await readFile(join(staging, 'manifest.yaml'), 'utf8').catch(() => {\n throw new Error('Invalid package: missing manifest.yaml.')\n })\n const packageYaml = await readFile(join(staging, '.verentis', 'package.yaml'), 'utf8').catch(() => {\n throw new Error('Invalid package: missing .verentis/package.yaml.')\n })\n const digestsJson = await readFile(join(staging, '.verentis', 'digests.json'), 'utf8').catch(() => {\n throw new Error('Invalid package: missing .verentis/digests.json.')\n })\n\n const metadata = parse(packageYaml) as VpkgContents['metadata']\n const declared = JSON.parse(digestsJson) as { entries?: Record<string, string> }\n\n const files = await listFiles(staging, 'files/**/*')\n const catalogFiles = await listFiles(staging, 'catalog/**/*')\n const contentFiles = [...files, ...catalogFiles]\n\n const digestErrors: string[] = []\n const entries = declared.entries ?? {}\n const manifestDigest = createHash('sha256').update(manifestYaml, 'utf8').digest('hex')\n if (!entries['manifest.yaml']) {\n digestErrors.push(\"Entry 'manifest.yaml' is not covered by digests.json.\")\n } else if (entries['manifest.yaml'].toLowerCase() !== manifestDigest) {\n digestErrors.push('Digest mismatch for manifest.yaml.')\n }\n for (const file of contentFiles) {\n const declaredDigest = entries[file]\n if (!declaredDigest) {\n digestErrors.push(`Entry '${file}' is not covered by digests.json.`)\n continue\n }\n const actual = createHash('sha256').update(await readFile(join(staging, file))).digest('hex')\n if (actual !== declaredDigest.toLowerCase()) digestErrors.push(`Digest mismatch for '${file}'.`)\n }\n for (const declaredPath of Object.keys(entries)) {\n if (declaredPath !== 'manifest.yaml' && !contentFiles.includes(declaredPath)) {\n digestErrors.push(`Digest declared for missing entry '${declaredPath}'.`)\n }\n }\n\n let catalog: CatalogIndex | undefined\n if (catalogFiles.includes('catalog/index.json')) {\n try {\n catalog = JSON.parse(await readFile(join(staging, 'catalog', 'index.json'), 'utf8')) as CatalogIndex\n if (catalog.schemaVersion !== 1) digestErrors.push(`Unsupported catalog schema version '${String(catalog.schemaVersion)}'.`)\n } catch {\n digestErrors.push('Invalid catalog/index.json.')\n }\n } else if (catalogFiles.length > 0) {\n digestErrors.push('Catalog entries are present but catalog/index.json is missing.')\n }\n\n const developerSignature = await readJsonIfExists<DsseEnvelope>(join(staging, '.verentis', 'signatures', 'developer.dsse.json'))\n const marketplaceSignature = await readJsonIfExists<DsseEnvelope>(join(staging, '.verentis', 'signatures', 'marketplace.dsse.json'))\n const encryption = await readJsonIfExists<EncryptionManifest>(join(staging, '.verentis', 'encryption.json'))\n\n return {\n metadata,\n manifestYaml,\n digestsJson,\n treeDigest: createHash('sha256').update(digestsJson, 'utf8').digest('hex'),\n developerSignature: developerSignature ?? undefined,\n marketplaceSignature: marketplaceSignature ?? undefined,\n encryption: encryption ?? undefined,\n files: files.map((f) => f.replace(/^files\\//, '')),\n catalog,\n catalogFiles: catalogFiles.map((f) => f.replace(/^catalog\\//, '')),\n digestErrors,\n }\n\n } finally {\n await rm(staging, { recursive: true, force: true })\n }\n}\n\nasync function listFiles(root: string, pattern: string): Promise<string[]> {\n const files: string[] = []\n for await (const entry of glob(pattern, { cwd: root })) {\n const abs = join(root, entry)\n const info = await readFile(abs).catch(() => null)\n if (info !== null) files.push(entry.split(sep).join('/'))\n }\n return files.sort()\n}\n\nasync function readJsonIfExists<T>(path: string): Promise<T | null> {\n try {\n return JSON.parse(await readFile(path, 'utf8')) as T\n } catch {\n return null\n }\n}\n","import { resolve } from 'node:path'\nimport { Command } from 'commander'\nimport { loadConfig } from '../config.js'\nimport { loadKey } from '../crypto/keys.js'\nimport { verifyEnvelope } from '../crypto/dsse.js'\nimport { generateSealingKeyPair } from '../crypto/seal.js'\nimport { findManifest, loadManifest } from '../vpkg/manifest.js'\nimport { pack, type PackRecipient } from '../vpkg/pack.js'\nimport { readVpkg } from '../vpkg/read.js'\n\nexport function registerPack(program: Command): void {\n program\n .command('pack [dir]')\n .description('Build a signed .vpkg from a project directory')\n .option('--manifest <path>', 'manifest path (default: auto-detected in the project directory)')\n .option('--publisher <name>', 'publisher name (default: packaging.publisher in the manifest)')\n .option('--name <name>', 'override the package name')\n .option('--env <name>', 'merge a per-environment overlay (environments/<name>.yaml) before packing')\n .option('--overlay <path>', 'merge an explicit overlay file before packing (wins over --env)')\n .option('--set-version <version>', 'override metadata.version (e.g. a CI-derived build number)')\n .option('--out <dir>', 'output directory (default: the project directory)')\n .option('--key <name>', 'signing key name (default: the configured default key)')\n .option('--no-sign', 'produce an unsigned package')\n .option('--encrypt', 'seal the payload (AES-256-GCM); requires at least one recipient')\n .option('--recipient <id=base64key...>', 'additional X25519 recipient (repeatable)', collectRecipients, [] as PackRecipient[])\n .action(async (dir: string | undefined, options: { manifest?: string; publisher?: string; name?: string; env?: string; overlay?: string; setVersion?: string; out?: string; key?: string; sign: boolean; encrypt?: boolean; recipient: PackRecipient[] }) => {\n const projectDir = resolve(dir ?? '.')\n const manifestPath = options.manifest ? resolve(options.manifest) : await findManifest(projectDir)\n const manifest = await loadManifest(manifestPath)\n\n const publisher = options.publisher ?? manifest.packaging?.publisher\n if (!publisher) {\n throw new Error('No publisher: set packaging.publisher in the manifest or pass --publisher.')\n }\n\n const config = await loadConfig()\n\n let signingKey\n if (options.sign) {\n const keyName = options.key ?? config.defaultKey\n if (keyName) {\n signingKey = await loadKey(keyName)\n } else {\n console.warn('Warning: no signing key configured — producing an UNSIGNED package. Run `verentis keygen` to create one.')\n }\n }\n\n let encryptFor: PackRecipient[] | undefined\n if (options.encrypt || manifest.packaging?.encryption === 'required') {\n encryptFor = [...options.recipient]\n const platformKey = process.env.VERENTIS_SEALING_KEY ?? config.sealingPublicKey\n if (platformKey && !encryptFor.some((r) => r.id === 'platform')) {\n // The platform recipient lets Verentis.Node serve member reads from the sealed package.\n encryptFor.unshift({ id: 'platform', publicKey: platformKey })\n }\n if (encryptFor.length === 0) {\n throw new Error(\n 'Encryption requires at least one recipient. Configure the platform sealing key '\n + '(`verentis login --sealing-key <base64>` / VERENTIS_SEALING_KEY) or pass --recipient id=key.',\n )\n }\n }\n\n const result = await pack({\n manifestPath,\n publisher,\n name: options.name,\n env: options.env,\n overlay: options.overlay,\n version: options.setVersion,\n outDir: options.out,\n signingKey,\n encryptFor,\n })\n\n console.log(`Packed ${result.publisher}/${result.name}@${result.version} (${result.kind})`)\n console.log(` ${result.outFile}`)\n console.log(` ${result.files.length} payload file(s), tree digest ${result.treeDigest.slice(0, 16)}…, ${result.signed ? 'signed' : 'UNSIGNED'}${result.encrypted ? ', ENCRYPTED' : ''}`)\n if (result.catalog) console.log(` ${result.catalogFiles.length} plaintext catalog file(s)`)\n })\n\n program\n .command('seal-keygen')\n .description('Generate an X25519 sealing keypair (for platform escrow or custom recipients)')\n .action(() => {\n const pair = generateSealingKeyPair()\n console.log(`public: ${pair.publicKey}`)\n console.log(`private: ${pair.privateKey}`)\n console.log('Distribute the PUBLIC key to packers; keep the private key in the consumer (e.g. Node Packaging:SealingPrivateKey).')\n })\n\n program\n .command('verify <vpkg>')\n .description('Verify the digests (and, when possible, the developer signature) of a .vpkg')\n .option('--key <name>', 'verify the developer signature against a local key')\n .action(async (vpkgPath: string, options: { key?: string }) => {\n const contents = await readVpkg(resolve(vpkgPath))\n console.log(`${contents.metadata.publisher}/${contents.metadata.name}@${contents.metadata.version} (${contents.metadata.kind})`)\n console.log(` payload files: ${contents.files.length}, catalog files: ${contents.catalogFiles.length}, tree digest ${contents.treeDigest.slice(0, 16)}…`)\n if (contents.catalog) {\n const docs = Number(!!contents.catalog.readme) + Number(!!contents.catalog.changelog)\n console.log(` catalog schema v${contents.catalog.schemaVersion}: ${contents.catalog.images?.length ?? 0} gallery image(s), ${docs} document(s)${contents.catalog.logo ? ', logo' : ''}${contents.catalog.hero ? ', hero' : ''}`)\n }\n if (contents.encryption) {\n console.log(` 🔒 encrypted (${contents.encryption.algorithm}); recipients: ${contents.encryption.recipients.map((r) => r.id).join(', ')}`)\n }\n\n if (contents.digestErrors.length > 0) {\n for (const error of contents.digestErrors) console.error(` ✗ ${error}`)\n process.exitCode = 1\n } else {\n console.log(' ✓ digests verified')\n }\n\n if (contents.developerSignature) {\n if (options.key) {\n const key = await loadKey(options.key)\n const kid = verifyEnvelope(contents.developerSignature, contents.digestsJson, { [key.kid]: key.publicKey })\n if (kid) {\n console.log(` ✓ developer signature verified (kid ${kid})`)\n } else {\n console.error(' ✗ developer signature does NOT verify with that key')\n process.exitCode = 1\n }\n } else {\n console.log(` • developer signature present (keyid ${contents.developerSignature.signatures[0]?.keyid ?? '?'}) — pass --key to verify locally`)\n }\n } else {\n console.log(' • unsigned')\n }\n\n if (contents.marketplaceSignature) console.log(' ✓ marketplace countersignature present')\n })\n}\n\nfunction collectRecipients(value: string, previous: PackRecipient[]): PackRecipient[] {\n const eq = value.indexOf('=')\n if (eq <= 0) throw new Error(`Invalid --recipient '${value}' — expected id=base64PublicKey.`)\n return [...previous, { id: value.slice(0, eq), publicKey: value.slice(eq + 1) }]\n}\n","import { Command } from 'commander'\nimport { createApiClient } from '../http.js'\nimport { marketplace } from '../api/catalog.js'\nimport { call, pageItems, pagingQuery, type PagedResult, type PagingFlags } from '../api/client.js'\nimport { requireMyPublisher, resolvePackageRef } from '../registry.js'\nimport { output, outputRecord, printJson } from '../output.js'\n\nexport function registerPackage(program: Command): void {\n const pkgCmd = program.command('package').description('Manage marketplace packages')\n\n pkgCmd\n .command('list')\n .description(\"List your publisher's packages\")\n .option('--json', 'output JSON')\n .action(async (options: { json?: boolean }) => {\n const api = await createApiClient()\n const publisher = await requireMyPublisher(api)\n const page = await call<PagedResult<Record<string, unknown>>>(api, marketplace.listPublisherPackages, {\n params: { publisherId: publisher.id },\n query: { PageNo: 1, PageSize: 100 },\n })\n output(pageItems(page), { name: 'Name', kind: 'Kind', visibility: 'Visibility', latestPublishedVersion: 'Latest', id: 'Id' }, options, page)\n })\n\n pkgCmd\n .command('info <ref>')\n .description(\"Show package details (ref: 'name' or 'publisher/name')\")\n .option('--json', 'output JSON')\n .action(async (ref: string, options: { json?: boolean }) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n const detail = await call<Record<string, unknown>>(api, marketplace.getPackage, { params: { id: pkg.id } })\n outputRecord(detail, options)\n })\n\n pkgCmd\n .command('versions <ref>')\n .description('List versions of a package')\n .option('--json', 'output JSON')\n .action(async (ref: string, options: { json?: boolean }) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n const page = await call<PagedResult<Record<string, unknown>>>(api, marketplace.listVersions, {\n params: { packageId: pkg.id },\n query: { PageNo: 1, PageSize: 100 },\n })\n output(pageItems(page), { version: 'Version', status: 'Status', sizeBytes: 'Size', hasMarketplaceSignature: 'Countersigned', id: 'Id' }, options, page)\n })\n\n pkgCmd\n .command('update <ref>')\n .description('Update package metadata')\n .option('--display-name <displayName>')\n .option('--description <description>')\n .option('--icon <icon>')\n .option('--categories <category...>', 'category list (replaces existing)')\n .action(async (ref: string, options: { displayName?: string; description?: string; icon?: string; categories?: string[] }) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n const current = await call<Record<string, unknown>>(api, marketplace.getPackage, { params: { id: pkg.id } })\n await call(api, marketplace.updatePackage, {\n params: { id: pkg.id },\n body: {\n id: pkg.id,\n displayName: options.displayName ?? current.displayName,\n description: options.description ?? current.description ?? null,\n icon: options.icon ?? current.icon ?? null,\n categories: options.categories ?? current.categories ?? [],\n },\n })\n console.log(`Package ${ref} updated.`)\n })\n\n pkgCmd\n .command('deprecate <ref>')\n .description('Mark a package as deprecated (optionally with a successor)')\n .option('--message <message>', 'deprecation message shown in the catalog')\n .option('--replacement <packageId>', 'suggested replacement package id')\n .action(async (ref: string, options: { message?: string; replacement?: string }) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n await call(api, marketplace.deprecatePackage, {\n params: { id: pkg.id },\n body: { id: pkg.id, message: options.message ?? null, replacementPackageId: options.replacement ?? null },\n })\n console.log(`Package ${ref} deprecated.`)\n })\n\n pkgCmd\n .command('undeprecate <ref>')\n .description('Remove the deprecation flag from a package')\n .action(async (ref: string) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n await call(api, marketplace.undeprecatePackage, { params: { id: pkg.id } })\n console.log(`Package ${ref} restored.`)\n })\n\n pkgCmd\n .command('archive <ref>')\n .description('Archive (soft-delete) a package — it disappears from the catalog')\n .action(async (ref: string) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n await call(api, marketplace.archivePackage, { params: { id: pkg.id } })\n console.log(`Package ${ref} archived.`)\n })\n\n pkgCmd\n .command('stats <ref>')\n .description('Show download/install statistics for a package')\n .action(async (ref: string) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n const stats = await call<unknown>(api, marketplace.getPackageStats, { params: { packageId: pkg.id } })\n printJson(stats)\n })\n\n const visibilityCmd = pkgCmd.command('visibility').description('Manage private-package visibility')\n\n visibilityCmd\n .command('set <ref> <visibility>')\n .description('Set catalog visibility: Public | Private')\n .action(async (ref: string, visibility: string) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n await call(api, marketplace.setPackageVisibility, { params: { id: pkg.id }, body: { id: pkg.id, visibility } })\n console.log(`Package ${ref} visibility → ${visibility}.`)\n })\n\n visibilityCmd\n .command('grants <ref>')\n .description('List visibility grants of a private package')\n .option('--json', 'output JSON')\n .action(async (ref: string, options: { json?: boolean }) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n const grants = await call<Record<string, unknown>[]>(api, marketplace.listVisibilityGrants, { params: { packageId: pkg.id } })\n output(grants ?? [], { granteeType: 'Type', granteeId: 'Grantee', id: 'GrantId' }, options, grants)\n })\n\n visibilityCmd\n .command('grant <ref> <granteeId>')\n .description('Grant a workspace/account visibility of a private package')\n .option('--type <granteeType>', 'Workspace | Account', 'Workspace')\n .action(async (ref: string, granteeId: string, options: { type: string }) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n await call(api, marketplace.grantVisibility, {\n params: { packageId: pkg.id },\n body: { packageId: pkg.id, granteeType: options.type, granteeId },\n })\n console.log(`Visibility of ${ref} granted to ${options.type} ${granteeId}.`)\n })\n\n visibilityCmd\n .command('revoke <ref> <grantId>')\n .description('Revoke a visibility grant')\n .action(async (ref: string, grantId: string) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n await call(api, marketplace.revokeVisibility, { params: { packageId: pkg.id, grantId } })\n console.log(`Visibility grant ${grantId} revoked.`)\n })\n\n program\n .command('installs')\n .description('List package installations in a workspace')\n .option('--workspace <workspaceId>')\n .option('--page <n>')\n .option('--page-size <n>')\n .option('--json', 'output JSON')\n .action(async (options: PagingFlags & { workspace?: string; json?: boolean }) => {\n const api = await createApiClient()\n const page = await call<PagedResult<Record<string, unknown>>>(api, marketplace.listInstallations, {\n query: { workspaceId: options.workspace, ...pagingQuery(options) },\n })\n output(pageItems(page), { packageName: 'Package', version: 'Version', status: 'Status', installPath: 'Path', id: 'Id' }, options, page)\n })\n}\n","import { readFile, stat } from 'node:fs/promises'\nimport { resolve } from 'node:path'\n\nconst MAX_LOGO_BYTES = 1024 * 1024\nconst PNG_SIGNATURE = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])\n\nexport interface PublisherLogo {\n path: string\n bytes: Buffer\n contentType: 'image/png' | 'image/jpeg' | 'image/webp' | 'image/svg+xml'\n}\n\nexport async function readPublisherLogo(path: string): Promise<PublisherLogo> {\n const absolutePath = resolve(path)\n const info = await stat(absolutePath).catch(() => {\n throw new Error(`Publisher logo '${absolutePath}' does not exist.`)\n })\n if (!info.isFile()) throw new Error(`Publisher logo '${absolutePath}' is not a file.`)\n if (info.size > MAX_LOGO_BYTES) {\n throw new Error(`Publisher logo exceeds the 1 MiB limit (${info.size} bytes).`)\n }\n\n const bytes = await readFile(absolutePath)\n return { path: absolutePath, bytes, contentType: detectPublisherLogoContentType(bytes) }\n}\n\nexport function detectPublisherLogoContentType(bytes: Buffer): PublisherLogo['contentType'] {\n if (\n bytes.length >= 24\n && bytes.subarray(0, 8).equals(PNG_SIGNATURE)\n && bytes.readUInt32BE(8) === 13\n && bytes.toString('ascii', 12, 16) === 'IHDR'\n ) {\n return 'image/png'\n }\n\n if (\n bytes.length >= 4\n && bytes[0] === 0xff\n && bytes[1] === 0xd8\n && bytes[bytes.length - 2] === 0xff\n && bytes[bytes.length - 1] === 0xd9\n ) {\n return 'image/jpeg'\n }\n\n if (\n bytes.length >= 12\n && bytes.toString('ascii', 0, 4) === 'RIFF'\n && bytes.toString('ascii', 8, 12) === 'WEBP'\n && bytes.readUInt32LE(4) + 8 === bytes.length\n ) {\n return 'image/webp'\n }\n\n let text: string\n try {\n text = new TextDecoder('utf-8', { fatal: true }).decode(bytes).replace(/^\\uFEFF/, '').trim()\n } catch {\n throw unsupportedLogoError()\n }\n const root = /^(?:<\\?xml[\\s\\S]*?\\?>\\s*)?(?:<!--[\\s\\S]*?-->\\s*)*<svg\\b/i\n const closed = /<\\/svg>\\s*$/i.test(text) || /<svg\\b[\\s\\S]*\\/>\\s*$/i.test(text)\n if (!root.test(text) || !closed) throw unsupportedLogoError()\n if (/&#(?:x[0-9a-f]+|[0-9]+);/i.test(text)) {\n throw new Error('Publisher logo SVG contains numeric XML character references, which are not allowed.')\n }\n if (\n /<!DOCTYPE|<!ENTITY/i.test(text)\n || /<(?:script|foreignObject|iframe|object|embed|audio|video)\\b/i.test(text)\n || /\\son[a-z]+\\s*=/i.test(text)\n || /(?:javascript|vbscript)\\s*:/i.test(text)\n || /data\\s*:\\s*text\\/html/i.test(text)\n ) {\n throw new Error('Publisher logo SVG contains active content, which is not allowed.')\n }\n return 'image/svg+xml'\n}\n\nfunction unsupportedLogoError(): Error {\n return new Error('Publisher logo must be a valid PNG, JPEG, WebP or SVG image.')\n}\n","import { Command } from 'commander'\nimport { createApiClient, type ApiClient } from '../http.js'\nimport { marketplace } from '../api/catalog.js'\nimport { call, callRaw } from '../api/client.js'\nimport { getMyPublisher, requireMyPublisher } from '../registry.js'\nimport { readPublisherLogo } from '../publisher/logo.js'\n\ninterface PublisherCreateOptions {\n name: string\n displayName: string\n description?: string\n website?: string\n email?: string\n logo?: string\n}\n\ninterface PublisherUpdateOptions {\n displayName?: string\n description?: string\n website?: string\n email?: string\n}\n\nexport function registerPublisher(program: Command): void {\n const publisherCmd = program.command('publisher').description('Manage your publisher profile')\n\n publisherCmd\n .command('create')\n .description('Onboard your account as a marketplace publisher')\n .requiredOption('--name <name>', 'URL-safe publisher name (e.g. acme)')\n .requiredOption('--display-name <displayName>', 'human-readable publisher name')\n .option('--description <description>')\n .option('--website <url>')\n .option('--email <email>')\n .option('--logo <file>', 'PNG, JPEG, WebP or SVG logo (maximum 1 MiB)')\n .action(async (options: PublisherCreateOptions) => {\n const api = await createApiClient()\n const existing = await getMyPublisher(api)\n if (existing) {\n console.log(`This account already has publisher '${existing.name}'.`)\n return\n }\n const id = await call<string>(api, marketplace.createPublisher, {\n body: {\n name: options.name,\n displayName: options.displayName,\n description: options.description ?? null,\n websiteUrl: options.website ?? null,\n contactEmail: options.email ?? null,\n },\n })\n console.log(`Publisher '${options.name}' created (${id}).`)\n if (options.logo) {\n await uploadPublisherLogo(api, id, options.logo)\n console.log(`Publisher logo uploaded from ${options.logo}.`)\n }\n console.log('Next: generate and register a signing key with `verentis keygen`.')\n })\n\n publisherCmd\n .command('update')\n .description('Update your publisher profile')\n .option('--display-name <displayName>')\n .option('--description <description>')\n .option('--website <url>')\n .option('--email <email>')\n .action(async (options: PublisherUpdateOptions) => {\n if (Object.values(options).every((value) => value === undefined)) {\n throw new Error('No publisher fields supplied. Pass --display-name, --description, --website or --email.')\n }\n const api = await createApiClient()\n const current = await requireMyPublisher(api)\n await call(api, marketplace.updatePublisher, {\n params: { id: current.id },\n body: {\n id: current.id,\n displayName: options.displayName ?? current.displayName,\n description: options.description ?? current.description ?? null,\n websiteUrl: options.website ?? current.websiteUrl ?? null,\n contactEmail: options.email ?? current.contactEmail ?? null,\n },\n })\n console.log(`Publisher '${current.name}' updated.`)\n })\n\n const logoCmd = publisherCmd.command('logo').description('Manage your publisher logo')\n\n logoCmd\n .command('set <file>')\n .description('Upload a PNG, JPEG, WebP or SVG publisher logo (maximum 1 MiB)')\n .action(async (file: string) => {\n const api = await createApiClient()\n const publisher = await requireMyPublisher(api)\n await uploadPublisherLogo(api, publisher.id, file)\n console.log(`Publisher logo uploaded from ${file}.`)\n })\n\n logoCmd\n .command('remove')\n .description('Remove your publisher logo')\n .action(async () => {\n const api = await createApiClient()\n const publisher = await requireMyPublisher(api)\n await call(api, marketplace.removePublisherLogo, { params: { id: publisher.id } })\n console.log('Publisher logo removed.')\n })\n}\n\nexport async function uploadPublisherLogo(api: ApiClient, publisherId: string, path: string): Promise<void> {\n const logo = await readPublisherLogo(path)\n await callRaw(api, marketplace.setPublisherLogo, {\n params: { id: publisherId },\n rawBody: new Blob([new Uint8Array(logo.bytes)], { type: logo.contentType }),\n contentType: logo.contentType,\n })\n}\n","import { createWriteStream } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { Readable } from 'node:stream'\nimport { pipeline } from 'node:stream/promises'\nimport { Command } from 'commander'\nimport { createApiClient, SCOPES } from '../http.js'\nimport { readVpkg } from '../vpkg/read.js'\nimport {\n createPackage,\n downloadTarball,\n findPackageByName,\n requireMyPublisher,\n resolvePackageRef,\n uploadVersion,\n yankVersion,\n} from '../registry.js'\nimport { loadConfig } from '../config.js'\n\nexport function registerRegistry(program: Command): void {\n program\n .command('publish <vpkg>')\n .description('Upload a packed .vpkg to the marketplace registry (creates the package on first publish)')\n .option('--visibility <visibility>', 'catalog visibility for a newly created package: Public | Private', 'Private')\n .action(async (vpkgPath: string, options: { visibility: string }) => {\n const contents = await readVpkg(resolve(vpkgPath))\n if (contents.digestErrors.length > 0) {\n throw new Error(`Refusing to publish: package failed digest verification:\\n ${contents.digestErrors.join('\\n ')}`)\n }\n\n const api = await createApiClient()\n const publisher = await requireMyPublisher(api)\n if (publisher.name !== contents.metadata.publisher) {\n throw new Error(`Package declares publisher '${contents.metadata.publisher}' but you are '${publisher.name}'.`)\n }\n\n let pkg = await findPackageByName(api, publisher.id, contents.metadata.name)\n if (!pkg) {\n const visibility = options.visibility === 'Public' ? 'Public' : 'Private'\n const id = await createPackage(api, {\n publisherId: publisher.id,\n name: contents.metadata.name,\n displayName: contents.metadata['display-name'] ?? contents.metadata.name,\n kind: contents.metadata.kind,\n visibility,\n })\n console.log(`Created package ${publisher.name}/${contents.metadata.name} (${visibility.toLowerCase()}).`)\n pkg = { id } as NonNullable<typeof pkg>\n }\n\n const version = await uploadVersion(api, pkg.id, resolve(vpkgPath))\n console.log(`Published ${publisher.name}/${contents.metadata.name}@${version.version} → ${version.status}`)\n if (version.status === 'Submitted') {\n console.log('The version is queued for moderation; it becomes installable once approved and published.')\n }\n })\n\n program\n .command('yank <ref> <version>')\n .description(\"Withdraw a published version from the catalog (ref: 'name' or 'publisher/name')\")\n .action(async (ref: string, version: string) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n await yankVersion(api, pkg.id, version)\n console.log(`Yanked ${ref}@${version}.`)\n })\n\n program\n .command('download <ref> [version]')\n .description('Download a package tarball (defaults to the latest published version)')\n .option('--out <path>', 'output file path')\n .option('--workspace <workspaceId>', 'workspace context for visibility checks')\n .action(async (ref: string, version: string | undefined, options: { out?: string; workspace?: string }) => {\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n const effectiveVersion = version ?? pkg.latestPublishedVersion ?? undefined\n if (!effectiveVersion) throw new Error(`Package '${ref}' has no published version.`)\n\n const res = await downloadTarball(api, pkg.id, effectiveVersion, options.workspace)\n const outPath = resolve(options.out ?? `${pkg.name}-${effectiveVersion}.vpkg`)\n if (!res.body) throw new Error('Empty download response.')\n await pipeline(Readable.fromWeb(res.body as import('node:stream/web').ReadableStream), createWriteStream(outPath))\n console.log(`Downloaded ${ref}@${effectiveVersion} → ${outPath}`)\n })\n\n program\n .command('search [text]')\n .description('Search the marketplace catalog')\n .option('--kind <kind>', 'Application | ExecutionEngine | Bundle')\n .action(async (text: string | undefined, options: { kind?: string }) => {\n const api = await createApiClient()\n const page = await api.request<{ data?: unknown[]; items?: unknown[] }>('GET', '/v1/packages', {\n scopes: [SCOPES.packageReadAll],\n query: { SearchText: text, Kind: options.kind, PageNo: 1, PageSize: 50 },\n })\n const items = (page.data ?? page.items ?? []) as { publisherName: string; name: string; displayName: string; kind: string; visibility: string; latestPublishedVersion?: string }[]\n if (items.length === 0) {\n console.log('No packages found.')\n return\n }\n for (const pkg of items) {\n const version = pkg.latestPublishedVersion ? `@${pkg.latestPublishedVersion}` : ' (no published version)'\n console.log(`${pkg.publisherName}/${pkg.name}${version} — ${pkg.displayName} [${pkg.kind}, ${pkg.visibility.toLowerCase()}]`)\n }\n })\n\n program\n .command('install <ref> [version]')\n .description('Install a package into a workspace')\n .option('--workspace <workspaceId>', 'target workspace (default: configured default workspace)')\n .option('--path <path>', 'install path override (bundles)')\n .option('--branch <branch>', 'workspace branch', 'main')\n .option('--sealed', 'install as a sealed tarball instead of extracting')\n .action(async (ref: string, version: string | undefined, options: { workspace?: string; path?: string; branch: string; sealed?: boolean }) => {\n const config = await loadConfig()\n const workspaceId = options.workspace ?? config.defaultWorkspaceId\n if (!workspaceId) throw new Error('No workspace: pass --workspace <id> or set defaultWorkspaceId in ~/.verentis/config.json.')\n\n const api = await createApiClient()\n const { package: pkg } = await resolvePackageRef(api, ref)\n const installationId = await api.request<string>('POST', '/v1/installations', {\n // Marketplace forwards this token to Node for the extraction, so it needs\n // the node scope and must be bound to the target workspace.\n scopes: [SCOPES.installCreate, 'node.node.create'],\n tokenWorkspaceId: workspaceId,\n body: {\n workspaceId,\n packageId: pkg.id,\n version: version ?? null,\n installPath: options.path ?? null,\n branch: options.branch,\n installMode: options.sealed ? 'Sealed' : 'Extracted',\n },\n })\n console.log(`Installation ${installationId} started for ${ref} in workspace ${workspaceId}.`)\n })\n\n program\n .command('uninstall <installationId>')\n .description('Uninstall a package from a workspace')\n .requiredOption('--workspace <workspaceId>', 'the workspace the installation belongs to')\n .action(async (installationId: string, options: { workspace: string }) => {\n const api = await createApiClient()\n await api.request('DELETE', `/v1/installations/${installationId}`, {\n scopes: [SCOPES.installDelete, 'node.file.delete'],\n tokenWorkspaceId: options.workspace,\n body: { id: installationId, workspaceId: options.workspace },\n })\n console.log(`Uninstalled ${installationId}.`)\n })\n}\n","import { Command } from 'commander'\nimport { createApiClient } from '../http.js'\nimport { settings } from '../api/catalog.js'\nimport { call } from '../api/client.js'\nimport { resolveAccountId, resolveWorkspaceId } from '../context.js'\nimport { printJson } from '../output.js'\n\ninterface SettingFlags {\n account?: string\n workspace?: string\n json?: boolean\n}\n\n/** Settings attach to an Account or Workspace parent; workspace wins when both are present. */\nasync function settingScope(flags: SettingFlags): Promise<{ scopeKind: string; parentId: string }> {\n const workspaceId = await resolveWorkspaceId(flags, false)\n if (flags.workspace || (!flags.account && workspaceId)) {\n if (!workspaceId) throw new Error('No workspace selected.')\n return { scopeKind: 'Workspace', parentId: workspaceId }\n }\n const accountId = (await resolveAccountId(flags))!\n return { scopeKind: 'Account', parentId: accountId }\n}\n\nexport function registerSettings(program: Command): void {\n const settingsCmd = program.command('settings').description('Manage platform settings (account or workspace scope)')\n\n settingsCmd\n .command('list')\n .description('List settings in the selected scope')\n .option('--account <accountId>', 'account scope')\n .option('--workspace <workspaceId>', 'workspace scope')\n .option('--secrets', 'include secret values')\n .action(async (options: SettingFlags & { secrets?: boolean }) => {\n const api = await createApiClient()\n const scope = await settingScope(options)\n const result = await call<unknown>(api, settings.list, {\n query: { ...scope, includeSecretValues: options.secrets ?? false },\n })\n printJson(result)\n })\n\n settingsCmd\n .command('get <key>')\n .description('Read one setting')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .option('--secrets', 'include secret values')\n .action(async (key: string, options: SettingFlags & { secrets?: boolean }) => {\n const api = await createApiClient()\n const scope = await settingScope(options)\n const result = await call<unknown>(api, settings.get, {\n params: { key },\n query: { ...scope, includeSecretValues: options.secrets ?? false },\n })\n printJson(result)\n })\n\n settingsCmd\n .command('set <key> <value>')\n .description('Create or update a setting (value parsed as JSON when possible)')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .action(async (key: string, value: string, options: SettingFlags) => {\n const api = await createApiClient()\n const scope = await settingScope(options)\n let parsed: unknown = value\n try {\n parsed = JSON.parse(value)\n } catch {\n // keep as string\n }\n await call(api, settings.upsert, {\n params: { key },\n query: scope,\n body: { scopeKind: scope.scopeKind, parentId: scope.parentId, key, value: parsed },\n })\n console.log(`Setting ${key} saved (${scope.scopeKind.toLowerCase()} scope).`)\n })\n\n settingsCmd\n .command('delete <key>')\n .description('Delete a setting')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .action(async (key: string, options: SettingFlags) => {\n const api = await createApiClient()\n const scope = await settingScope(options)\n await call(api, settings.delete, { params: { key }, query: scope })\n console.log(`Setting ${key} deleted.`)\n })\n}\n","/** Single source of truth for the CLI version — read from package.json at runtime. */\nimport { readFileSync } from 'node:fs'\nimport { fileURLToPath } from 'node:url'\n\nexport const PACKAGE_NAME = '@verentis/cli'\n\nlet cached: string | undefined\n\n/**\n * The installed CLI version, read from the package's own package.json.\n *\n * The release pipeline bumps package.json (`npm version`) but not any source constant, so reading it\n * at runtime keeps `verentis --version`, the update notice and `verentis update` all in agreement.\n */\nexport function getCliVersion(): string {\n if (cached) return cached\n cached = readVersion() ?? '0.0.0'\n return cached\n}\n\nfunction readVersion(): string | undefined {\n // The bundled entry lives at dist/index.js and the source at src/*, so package.json is one level up\n // in both layouts. Fall back one more level for safety, guarding against grabbing a foreign manifest.\n const candidates = ['../package.json', '../../package.json']\n for (const relative of candidates) {\n try {\n const raw = readFileSync(fileURLToPath(new URL(relative, import.meta.url)), 'utf8')\n const pkg = JSON.parse(raw) as { name?: string; version?: string }\n if (pkg.version && (relative === '../package.json' || pkg.name === PACKAGE_NAME)) return pkg.version\n } catch {\n // try the next candidate\n }\n }\n return undefined\n}\n","/** Looks up the latest published CLI version from the npm registry (dist-tags). */\nimport { PACKAGE_NAME } from '../version.js'\n\nconst DEFAULT_REGISTRY = 'https://registry.npmjs.org'\n\n/** The registry base URL, overridable for private mirrors (e.g. VERENTIS_UPDATE_REGISTRY). */\nexport function registryUrl(): string {\n const configured = process.env.VERENTIS_UPDATE_REGISTRY ?? process.env.npm_config_registry ?? DEFAULT_REGISTRY\n return configured.replace(/\\/+$/, '')\n}\n\n/**\n * Fetches the `latest` dist-tag for the CLI package. Returns null on any failure (offline, timeout,\n * 4xx/5xx, malformed body) so callers can degrade gracefully — this is only ever a hint.\n */\nexport async function fetchLatestVersion(options: { timeoutMs?: number } = {}): Promise<string | null> {\n const url = `${registryUrl()}/${PACKAGE_NAME.replace('/', '%2F')}`\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), options.timeoutMs ?? 3000)\n try {\n const res = await fetch(url, {\n // The abbreviated packument is far smaller than the full manifest but still carries dist-tags.\n headers: { Accept: 'application/vnd.npm.install-v1+json' },\n signal: controller.signal,\n })\n if (!res.ok) return null\n const body = (await res.json()) as { 'dist-tags'?: Record<string, string> }\n return body['dist-tags']?.latest ?? null\n } catch {\n return null\n } finally {\n clearTimeout(timer)\n }\n}\n","/** Minimal, dependency-free semver comparison — enough for update checks (no ranges). */\n\n/** True when `candidate` is a strictly higher semver precedence than `base`. */\nexport function isNewerVersion(candidate: string, base: string): boolean {\n return compareVersions(candidate, base) > 0\n}\n\n/** Returns -1, 0 or 1 following semver precedence (build metadata ignored, prerelease < release). */\nexport function compareVersions(a: string, b: string): number {\n const pa = parse(a)\n const pb = parse(b)\n\n for (let i = 0; i < 3; i++) {\n if (pa.main[i] !== pb.main[i]) return pa.main[i] < pb.main[i] ? -1 : 1\n }\n\n // A version WITHOUT a prerelease outranks one WITH a prerelease (1.0.0 > 1.0.0-rc.1).\n if (pa.pre.length === 0 && pb.pre.length === 0) return 0\n if (pa.pre.length === 0) return 1\n if (pb.pre.length === 0) return -1\n\n const len = Math.max(pa.pre.length, pb.pre.length)\n for (let i = 0; i < len; i++) {\n if (i >= pa.pre.length) return -1 // fewer identifiers = lower precedence\n if (i >= pb.pre.length) return 1\n const x = pa.pre[i]\n const y = pb.pre[i]\n const xNum = /^\\d+$/.test(x)\n const yNum = /^\\d+$/.test(y)\n if (xNum && yNum) {\n const nx = Number(x)\n const ny = Number(y)\n if (nx !== ny) return nx < ny ? -1 : 1\n } else if (xNum !== yNum) {\n return xNum ? -1 : 1 // numeric identifiers rank lower than alphanumeric\n } else if (x !== y) {\n return x < y ? -1 : 1\n }\n }\n return 0\n}\n\nfunction parse(version: string): { main: [number, number, number]; pre: string[] } {\n const cleaned = version.trim().replace(/^v/i, '').split('+', 1)[0] // drop build metadata\n const dash = cleaned.indexOf('-')\n const core = dash === -1 ? cleaned : cleaned.slice(0, dash)\n const pre = dash === -1 ? '' : cleaned.slice(dash + 1)\n const parts = core.split('.').map((n) => Number.parseInt(n, 10) || 0)\n return { main: [parts[0] ?? 0, parts[1] ?? 0, parts[2] ?? 0], pre: pre ? pre.split('.') : [] }\n}\n","/** Persisted marker for the last update check, so the notice never adds latency to a command. */\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { configDir } from '../config.js'\n\nexport interface UpdateState {\n /** ISO timestamp of the last registry check (successful or not). */\n lastCheckAt: string\n /** Latest version seen at that check (absent when the registry was unreachable). */\n latestVersion?: string\n}\n\nconst DEFAULT_MAX_AGE_MS = 24 * 60 * 60 * 1000\n\nconst statePath = () => join(configDir(), 'update-check.json')\n\nexport async function readUpdateState(): Promise<UpdateState | null> {\n try {\n return JSON.parse(await readFile(statePath(), 'utf8')) as UpdateState\n } catch {\n return null\n }\n}\n\nexport async function writeUpdateState(state: UpdateState): Promise<void> {\n await mkdir(configDir(), { recursive: true, mode: 0o700 })\n await writeFile(statePath(), JSON.stringify(state, null, 2) + '\\n', { mode: 0o600 })\n}\n\n/** True when there is no recent check on record and the registry should be re-queried. */\nexport function isStale(state: UpdateState | null, maxAgeMs = DEFAULT_MAX_AGE_MS): boolean {\n if (!state?.lastCheckAt) return true\n const checkedAt = Date.parse(state.lastCheckAt)\n return !Number.isFinite(checkedAt) || Date.now() - checkedAt > maxAgeMs\n}\n","/**\n * Passive \"a new version is available\" notice, in the style of the Aspire and Azure CLIs.\n *\n * The notice is printed from a locally cached marker, so it never adds latency. When that marker is\n * stale it kicks off a *detached* background process (the hidden `__update-check` command) that\n * refreshes the cache for the next invocation — the current command exits immediately either way.\n */\nimport { spawn } from 'node:child_process'\nimport { getCliVersion } from '../version.js'\nimport { fetchLatestVersion } from './registry.js'\nimport { isNewerVersion } from './semver.js'\nimport { isStale, readUpdateState, writeUpdateState } from './state.js'\n\n/** Commands for which a trailing update notice would be noise or self-referential. */\nconst SUPPRESSED_COMMANDS = new Set(['update', '__update-check', 'help'])\n\n/**\n * Prints an update notice if the cache knows of a newer version, then refreshes the cache in the\n * background when it is stale. Never throws — update checks must not affect command exit status.\n */\nexport async function notifyOnExit(argv: string[]): Promise<void> {\n if (isUpdateCheckSuppressed(argv)) return\n try {\n const current = getCliVersion()\n const state = await readUpdateState()\n if (state?.latestVersion && isNewerVersion(state.latestVersion, current)) {\n printUpdateNotice(current, state.latestVersion)\n }\n if (isStale(state)) spawnBackgroundRefresh()\n } catch {\n // A failed update check is never worth surfacing.\n }\n}\n\n/** Body of the hidden `__update-check` command: refresh the cached marker, silently. */\nexport async function runUpdateCheckRefresh(): Promise<void> {\n const latest = await fetchLatestVersion({ timeoutMs: 4000 }).catch(() => null)\n // Record the attempt regardless of outcome so we back off for the full interval on failure too.\n await writeUpdateState({ lastCheckAt: new Date().toISOString(), latestVersion: latest ?? undefined }).catch(() => {})\n}\n\n/** Whether the passive notice (and background refresh) should be skipped for this invocation. */\nexport function isUpdateCheckSuppressed(argv: string[]): boolean {\n if (isEnvDisabled()) return true\n if (process.env.CI) return true\n if (!process.stderr.isTTY) return true // keep piped/scripted output clean\n\n const args = argv.slice(2)\n if (args.length === 0) return true // bare `verentis` prints help\n if (args.some((a) => a === '--json' || a === '-h' || a === '--help' || a === '-V' || a === '--version')) return true\n\n const command = args.find((a) => !a.startsWith('-'))\n return command !== undefined && SUPPRESSED_COMMANDS.has(command)\n}\n\nfunction isEnvDisabled(): boolean {\n const off = new Set(['0', 'false', 'no', 'off'])\n const noCheck = process.env.VERENTIS_NO_UPDATE_CHECK\n if (noCheck !== undefined && noCheck !== '' && !off.has(noCheck.toLowerCase())) return true\n const explicit = process.env.VERENTIS_UPDATE_CHECK\n return explicit !== undefined && off.has(explicit.toLowerCase())\n}\n\nfunction printUpdateNotice(current: string, latest: string): void {\n const message = [\n `Update available ${current} → ${latest}`,\n 'Run `verentis update` to install the latest version.',\n ]\n const width = Math.max(...message.map((line) => line.length))\n const border = '─'.repeat(width + 2)\n const lines = ['', `╭${border}╮`, ...message.map((line) => `│ ${line.padEnd(width)} │`), `╰${border}╯`, '']\n process.stderr.write(lines.join('\\n') + '\\n')\n}\n\nfunction spawnBackgroundRefresh(): void {\n try {\n const entry = process.argv[1]\n if (!entry) return\n const child = spawn(process.execPath, [entry, '__update-check'], {\n detached: true,\n stdio: 'ignore',\n windowsHide: true,\n })\n child.on('error', () => {}) // never let a failed spawn bubble up\n child.unref()\n } catch {\n // ignore — the notice will simply refresh on a later run\n }\n}\n","import { spawnSync } from 'node:child_process'\nimport { fileURLToPath } from 'node:url'\nimport { Command } from 'commander'\nimport { getCliVersion, PACKAGE_NAME } from '../version.js'\nimport { fetchLatestVersion } from '../update/registry.js'\nimport { runUpdateCheckRefresh } from '../update/notifier.js'\nimport { isNewerVersion } from '../update/semver.js'\nimport { writeUpdateState } from '../update/state.js'\n\ntype PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun'\n\ninterface InstallCommand {\n command: string\n args: string[]\n}\n\nexport function registerUpdate(program: Command): void {\n program\n .command('update')\n .description('Update the Verentis CLI to the latest published version')\n .option('--check', 'report whether a newer version is available without installing')\n .option('--to <version>', 'install a specific version instead of the latest')\n .action(async (options: { check?: boolean; to?: string }) => {\n const current = getCliVersion()\n const target = await resolveTarget(options.to)\n\n if (options.check) {\n reportCheck(current, target, Boolean(options.to))\n return\n }\n\n if (!options.to && !isNewerVersion(target, current)) {\n console.log(`Already on the latest version (${current}).`)\n return\n }\n\n const install = resolveInstallCommand(`${PACKAGE_NAME}@${target}`)\n if (!install) {\n throw new Error(\n `Automatic update is only supported for a global install of ${PACKAGE_NAME}.\\n` +\n `Update manually, for example:\\n npm install -g ${PACKAGE_NAME}@${target}`,\n )\n }\n\n console.log(`Updating ${PACKAGE_NAME}: ${current} → ${target}`)\n console.log(`$ ${install.command} ${install.args.join(' ')}`)\n const result = spawnSync(install.command, install.args, { stdio: 'inherit' })\n if (result.error) {\n const code = (result.error as NodeJS.ErrnoException).code\n const hint = code === 'ENOENT' ? ` ('${install.command}' was not found on PATH).` : `: ${result.error.message}`\n throw new Error(`Could not run the update${hint}\\nUpdate manually:\\n ${install.command} ${install.args.join(' ')}`)\n }\n if (typeof result.status === 'number' && result.status !== 0) {\n throw new Error(\n `Update failed (${install.command} exited with code ${result.status}).\\n` +\n `You can retry manually:\\n ${install.command} ${install.args.join(' ')}`,\n )\n }\n console.log(`Updated to ${target}. Run \\`verentis --version\\` to confirm.`)\n })\n\n // Internal: refreshes the cached latest-version marker used by the passive update notice.\n program\n .command('__update-check', { hidden: true })\n .description('(internal) refresh the cached latest-version marker')\n .action(async () => {\n await runUpdateCheckRefresh()\n })\n}\n\nasync function resolveTarget(requested?: string): Promise<string> {\n if (requested) return requested.replace(/^v/i, '')\n const latest = await fetchLatestVersion({ timeoutMs: 8000 })\n if (!latest) {\n throw new Error(\n 'Could not reach the package registry to determine the latest version. ' +\n 'Check your connection, or point VERENTIS_UPDATE_REGISTRY at a reachable registry.',\n )\n }\n // Keep the passive-notice cache in sync with what we just learned.\n await writeUpdateState({ lastCheckAt: new Date().toISOString(), latestVersion: latest }).catch(() => {})\n return latest\n}\n\nfunction reportCheck(current: string, target: string, pinned: boolean): void {\n if (pinned) {\n console.log(`Current version: ${current}`)\n console.log(`Requested version: ${target}`)\n return\n }\n if (isNewerVersion(target, current)) {\n console.log(`A new version is available: ${current} → ${target}`)\n console.log('Run `verentis update` to install it.')\n } else {\n console.log(`You are on the latest version (${current}).`)\n }\n}\n\nfunction resolveInstallCommand(spec: string): InstallCommand | null {\n const location = packageLocation()\n // Only self-update real installed packages — never a source checkout or `npm link`ed dev tree.\n if (!location || !location.replace(/\\\\/g, '/').includes('/node_modules/')) return null\n\n switch (detectPackageManager(location)) {\n case 'pnpm':\n return { command: 'pnpm', args: ['add', '-g', spec] }\n case 'yarn':\n return { command: 'yarn', args: ['global', 'add', spec] }\n case 'bun':\n return { command: 'bun', args: ['add', '-g', spec] }\n default:\n return { command: 'npm', args: ['install', '-g', spec] }\n }\n}\n\n/** Path of this package's own code on disk, used to infer the installing package manager. */\nfunction packageLocation(): string | undefined {\n try {\n return fileURLToPath(import.meta.url)\n } catch {\n return process.argv[1]\n }\n}\n\nfunction detectPackageManager(location: string): PackageManager {\n const path = location.replace(/\\\\/g, '/')\n if (/\\/(\\.pnpm|pnpm)\\//.test(path)) return 'pnpm'\n if (/\\/(\\.yarn|yarn)\\//.test(path)) return 'yarn'\n if (/\\/\\.bun\\//.test(path)) return 'bun'\n return 'npm'\n}\n","import { Command } from 'commander'\nimport { loadConfig, saveConfig } from '../config.js'\nimport { outputRecord } from '../output.js'\n\nexport function registerUse(program: Command): void {\n const useCmd = program.command('use').description('Set default context for subsequent commands')\n\n useCmd\n .command('workspace <workspaceId>')\n .description('Set the default workspace (files, exec, install, dev commands)')\n .action(async (workspaceId: string) => {\n const config = await loadConfig()\n config.defaultWorkspaceId = workspaceId\n await saveConfig(config)\n console.log(`Default workspace set to ${workspaceId}.`)\n })\n\n useCmd\n .command('account <accountId>')\n .description('Set the default account (admin commands)')\n .action(async (accountId: string) => {\n const config = await loadConfig()\n config.defaultAccountId = accountId\n await saveConfig(config)\n console.log(`Default account set to ${accountId}.`)\n })\n\n program\n .command('context')\n .description('Show the current CLI context (API URL, credential kind, defaults)')\n .option('--json', 'output JSON')\n .action(async (options: { json?: boolean }) => {\n const config = await loadConfig()\n outputRecord(\n {\n apiUrl: process.env.VERENTIS_API_URL ?? config.apiUrl ?? '(not set)',\n credential: process.env.VERENTIS_API_KEY ?? config.apiKey ? 'api key' : (process.env.VERENTIS_TOKEN ?? config.identityToken) ? 'identity token' : '(none)',\n defaultWorkspaceId: config.defaultWorkspaceId ?? '(not set)',\n defaultAccountId: config.defaultAccountId ?? '(not set)',\n defaultKey: config.defaultKey ?? '(not set)',\n },\n options,\n )\n })\n}\n","import { Command } from 'commander'\nimport { createApiClient } from '../http.js'\nimport { security } from '../api/catalog.js'\nimport { call } from '../api/client.js'\nimport { managementScope } from '../context.js'\nimport { output, outputRecord } from '../output.js'\n\ninterface ScopeFlags {\n account?: string\n workspace?: string\n node?: string\n json?: boolean\n}\n\nexport function registerUser(program: Command): void {\n const userCmd = program\n .command('user')\n .description('Manage users in an account/workspace scope')\n\n userCmd\n .command('list')\n .description('List users visible in the selected scope')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .option('--search <text>')\n .option('--active <bool>', 'filter by active state (true/false)')\n .option('--json', 'output JSON')\n .action(async (options: ScopeFlags & { search?: string; active?: string }) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n const result = await call<Record<string, unknown>[]>(api, security.listUsers, {\n query: { ...scope, search: options.search, isActive: options.active },\n })\n output(result ?? [], { displayName: 'Name', email: 'Email', isActive: 'Active', userId: 'UserId', id: 'Id' }, options, result)\n })\n\n userCmd\n .command('get <userId>')\n .description('Show user details')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .option('--json', 'output JSON')\n .action(async (userId: string, options: ScopeFlags) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n const result = await call<Record<string, unknown>>(api, security.getUser, { params: { userId }, query: scope })\n outputRecord(result, options)\n })\n\n userCmd\n .command('activate <userId>')\n .description('Activate a suspended user in the scope')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .action(async (userId: string, options: ScopeFlags) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n await call(api, security.activateUser, { params: { userId }, body: { ...scope, userId } })\n console.log(`User ${userId} activated.`)\n })\n\n userCmd\n .command('suspend <userId>')\n .description('Suspend a user in the scope')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .action(async (userId: string, options: ScopeFlags) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n await call(api, security.suspendUser, { params: { userId }, body: { ...scope, userId } })\n console.log(`User ${userId} suspended.`)\n })\n\n userCmd\n .command('roles <userId>')\n .description(\"List a user's role memberships in the scope\")\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .option('--json', 'output JSON')\n .action(async (userId: string, options: ScopeFlags) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n const result = await call<Record<string, unknown>[]>(api, security.getUserRoles, { params: { userId }, query: scope })\n output(result ?? [], { roleName: 'Role', roleKey: 'Key', membershipId: 'MembershipId' }, options, result)\n })\n\n const grantsCmd = userCmd.command('grants').description('Manage direct permission grants for a user')\n\n grantsCmd\n .command('list <userId>')\n .description('List direct grants for a user')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .option('--json', 'output JSON')\n .action(async (userId: string, options: ScopeFlags) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n const result = await call<Record<string, unknown>[]>(api, security.getUserGrants, { params: { userId }, query: scope })\n output(result ?? [], { scope: 'Scope', resourceKind: 'ResourceKind', resourceId: 'ResourceId', effect: 'Effect', id: 'GrantId' }, options, result)\n })\n\n grantsCmd\n .command('add <userId> <scope>')\n .description('Grant a permission scope to a user (e.g. node.file.read)')\n .requiredOption('--resource-id <id>', 'resource the grant applies to (account/workspace/node id)')\n .requiredOption('--resource-kind <kind>', 'Account | Workspace | Node')\n .option('--expires <iso8601>', 'expiry timestamp')\n .option('--account <accountId>')\n .option('--workspace <workspaceId>')\n .action(async (userId: string, scopeName: string, options: ScopeFlags & { resourceId: string; resourceKind: string; expires?: string }) => {\n const api = await createApiClient()\n const scope = await managementScope(options)\n await call(api, security.grantUserPermission, {\n params: { userId },\n body: {\n ...scope,\n userId,\n resourceId: options.resourceId,\n resourceKind: options.resourceKind,\n scope: scopeName,\n expiresAt: options.expires ?? null,\n },\n })\n console.log(`Granted ${scopeName} on ${options.resourceKind} ${options.resourceId} to user ${userId}.`)\n })\n}\n","import { dirname, resolve } from 'node:path'\nimport { stat } from 'node:fs/promises'\nimport { Command } from 'commander'\nimport { buildCatalog } from '../vpkg/catalog.js'\nimport { findManifest } from '../vpkg/manifest.js'\nimport { applyOverlay, loadOverlay, resolveOverlayPath } from '../vpkg/overlay.js'\nimport { readManifestDocument, validateManifest } from '../dev/manifest.js'\n\nexport function registerValidate(program: Command): void {\n program\n .command('validate [pathOrDir]')\n .description('Validate an engine/app/bundle manifest (structure + registration-time checks)')\n .option('--env <name>', 'merge a per-environment overlay (environments/<name>.yaml) before validating')\n .option('--overlay <path>', 'merge an explicit overlay file before validating (wins over --env)')\n .action(async (pathOrDir: string | undefined, options: { env?: string; overlay?: string }) => {\n const target = resolve(pathOrDir ?? '.')\n const info = await stat(target).catch(() => null)\n const manifestPath = info?.isDirectory() ? await findManifest(target) : target\n if (!info) throw new Error(`${target} does not exist.`)\n\n const base = await readManifestDocument(manifestPath)\n const overlayPath = resolveOverlayPath(dirname(manifestPath), { env: options.env, overlay: options.overlay })\n const manifest = overlayPath ? applyOverlay(base, await loadOverlay(overlayPath)) : base\n const issues = validateManifest(manifest)\n if (manifest.marketplace && !issues.some((issue) => issue.level === 'error' && issue.message.startsWith('marketplace'))) {\n try {\n await buildCatalog(dirname(manifestPath), manifest.marketplace)\n } catch (error) {\n issues.push({ level: 'error', message: error instanceof Error ? error.message : String(error) })\n }\n }\n const errors = issues.filter((issue) => issue.level === 'error')\n const warnings = issues.filter((issue) => issue.level === 'warning')\n\n console.log(`${manifestPath} — kind ${manifest.kind ?? '(unknown)'}, ${manifest.metadata?.name ?? '?'}@${manifest.metadata?.version ?? '?'}`)\n for (const issue of errors) console.error(` error: ${issue.message}`)\n for (const issue of warnings) console.warn(` warning: ${issue.message}`)\n\n if (errors.length === 0) {\n console.log(warnings.length > 0 ? `OK with ${warnings.length} warning(s).` : 'OK.')\n } else {\n console.error(`${errors.length} error(s).`)\n process.exitCode = 1\n }\n })\n}\n","import { Command } from 'commander'\nimport { createApiClient } from '../http.js'\nimport { workspace } from '../api/catalog.js'\nimport { call, pageItems, pagingQuery, type PagedResult, type PagingFlags } from '../api/client.js'\nimport { loadConfig, saveConfig } from '../config.js'\nimport { output, outputRecord } from '../output.js'\n\ninterface WorkspaceDto {\n id: string\n name: string\n slug?: string\n description?: string\n [key: string]: unknown\n}\n\nexport function registerWorkspace(program: Command): void {\n const wsCmd = program.command('workspace').description('Manage workspaces')\n\n wsCmd\n .command('list')\n .description('List workspaces you can access')\n .option('--page <n>')\n .option('--page-size <n>')\n .option('--order-by <field>')\n .option('--json', 'output JSON')\n .action(async (options: PagingFlags & { json?: boolean }) => {\n const api = await createApiClient()\n const page = await call<PagedResult<WorkspaceDto>>(api, workspace.list, { query: pagingQuery(options) })\n output(pageItems(page), { name: 'Name', slug: 'Slug', id: 'Id' }, options, page)\n })\n\n wsCmd\n .command('get [workspaceId]')\n .description('Show workspace details (default: configured default workspace)')\n .option('--json', 'output JSON')\n .action(async (workspaceId: string | undefined, options: { json?: boolean }) => {\n const config = await loadConfig()\n const id = workspaceId ?? config.defaultWorkspaceId\n if (!id) throw new Error('No workspace: pass an id or set one with `verentis use workspace <id>`.')\n const api = await createApiClient()\n const result = await call<Record<string, unknown>>(api, workspace.get, { params: { workspaceId: id } })\n outputRecord(result, options)\n })\n\n wsCmd\n .command('create <name>')\n .description('Create a workspace owned by you')\n .option('--use', 'set the new workspace as the default')\n .action(async (name: string, options: { use?: boolean }) => {\n const api = await createApiClient()\n const id = await call<string>(api, workspace.createMine, { body: { name } })\n console.log(`Workspace '${name}' created (${id}).`)\n if (options.use) {\n const config = await loadConfig()\n config.defaultWorkspaceId = id\n await saveConfig(config)\n console.log('Set as default workspace.')\n }\n })\n\n wsCmd\n .command('update <workspaceId>')\n .description('Update workspace details')\n .requiredOption('--name <name>', 'workspace name')\n .option('--description <description>')\n .action(async (workspaceId: string, options: { name: string; description?: string }) => {\n const api = await createApiClient()\n await call(api, workspace.update, {\n params: { workspaceId },\n body: { workspaceId, name: options.name, description: options.description ?? null },\n })\n console.log(`Workspace ${workspaceId} updated.`)\n })\n\n const domainCmd = wsCmd.command('domain').description('Manage workspace domains')\n\n domainCmd\n .command('list <workspaceId>')\n .description('List domains attached to a workspace')\n .option('--json', 'output JSON')\n .action(async (workspaceId: string, options: { json?: boolean }) => {\n const api = await createApiClient()\n const result = await call<unknown>(api, workspace.listDomains, { params: { workspaceId } })\n const items = pageItems(result as PagedResult<Record<string, unknown>>)\n output(items, { host: 'Host', status: 'Status', id: 'Id' }, options, result)\n })\n\n domainCmd\n .command('add <workspaceId> <host>')\n .description('Attach a domain to a workspace')\n .action(async (workspaceId: string, host: string) => {\n const api = await createApiClient()\n const id = await call<string>(api, workspace.addDomain, { params: { workspaceId }, body: { workspaceId, host } })\n console.log(`Domain ${host} added${id ? ` (${id})` : ''}.`)\n })\n\n domainCmd\n .command('remove <workspaceId> <domainId>')\n .description('Remove a domain from a workspace')\n .action(async (workspaceId: string, domainId: string) => {\n const api = await createApiClient()\n await call(api, workspace.removeDomain, { params: { workspaceId, domainId } })\n console.log(`Domain ${domainId} removed.`)\n })\n\n const inviteCmd = wsCmd.command('invite').description('Manage workspace invitations')\n\n inviteCmd\n .command('list <workspaceId>')\n .description('List invitations for a workspace')\n .option('--json', 'output JSON')\n .action(async (workspaceId: string, options: { json?: boolean }) => {\n const api = await createApiClient()\n const page = await call<PagedResult<Record<string, unknown>>>(api, workspace.listInvitations, { params: { workspaceId } })\n output(pageItems(page), { emailAddress: 'Email', roleKey: 'Role', status: 'Status', id: 'Id' }, options, page)\n })\n\n inviteCmd\n .command('create <workspaceId> <email>')\n .description('Invite a user to a workspace')\n .option('--role <roleKey>', 'role to assign on acceptance', 'member')\n .action(async (workspaceId: string, email: string, options: { role: string }) => {\n const api = await createApiClient()\n const id = await call<string>(api, workspace.createInvitation, {\n params: { workspaceId },\n body: { workspaceId, emailAddress: email, roleKey: options.role },\n })\n console.log(`Invitation${id ? ` ${id}` : ''} sent to ${email} (role ${options.role}).`)\n })\n\n inviteCmd\n .command('resend <workspaceId> <invitationId>')\n .description('Resend a workspace invitation')\n .action(async (workspaceId: string, invitationId: string) => {\n const api = await createApiClient()\n await call(api, workspace.resendInvitation, { params: { workspaceId, invitationId }, body: { workspaceId, invitationId } })\n console.log(`Invitation ${invitationId} resent.`)\n })\n\n inviteCmd\n .command('revoke <workspaceId> <invitationId>')\n .description('Revoke a workspace invitation')\n .action(async (workspaceId: string, invitationId: string) => {\n const api = await createApiClient()\n await call(api, workspace.revokeInvitation, { params: { workspaceId, invitationId } })\n console.log(`Invitation ${invitationId} revoked.`)\n })\n\n inviteCmd\n .command('accept <code>')\n .description('Accept a workspace invitation code as the current user')\n .action(async (code: string) => {\n const api = await createApiClient()\n await call(api, workspace.acceptInvitation, { body: { code } })\n console.log('Invitation accepted.')\n })\n}\n","import { Command } from 'commander'\nimport { registerAccount } from './commands/account.js'\nimport { registerApi } from './commands/api.js'\nimport { registerApiKey } from './commands/apikey.js'\nimport { registerDev } from './commands/dev.js'\nimport { registerExec } from './commands/exec.js'\nimport { registerFiles } from './commands/files.js'\nimport { registerInit } from './commands/init.js'\nimport { registerKeygen } from './commands/keygen.js'\nimport { registerLogin } from './commands/login.js'\nimport { registerPack } from './commands/pack.js'\nimport { registerPackage } from './commands/package.js'\nimport { registerPublisher } from './commands/publisher.js'\nimport { registerRegistry } from './commands/registry.js'\nimport { registerSettings } from './commands/settings.js'\nimport { registerUpdate } from './commands/update.js'\nimport { registerUse } from './commands/use.js'\nimport { registerUser } from './commands/user.js'\nimport { registerValidate } from './commands/validate.js'\nimport { registerWorkspace } from './commands/workspace.js'\nimport { ApiError } from './http.js'\nimport { notifyOnExit } from './update/notifier.js'\nimport { getCliVersion } from './version.js'\n\nconst program = new Command()\n .enablePositionalOptions()\n .name('verentis')\n .description('Verentis CLI — admin, marketplace publishing, and the engine/app developer loop')\n .version(getCliVersion())\n\n// Auth + context\nregisterLogin(program)\nregisterUse(program)\n\n// Admin\nregisterAccount(program)\nregisterWorkspace(program)\nregisterUser(program)\nregisterApiKey(program)\nregisterSettings(program)\n\n// Workspace files + executions\nregisterFiles(program)\nregisterExec(program)\n\n// Developer loop\nregisterDev(program)\nregisterValidate(program)\n\n// Marketplace\nregisterPublisher(program)\nregisterKeygen(program)\nregisterInit(program)\nregisterPack(program)\nregisterRegistry(program)\nregisterPackage(program)\n\n// Escape hatch\nregisterApi(program)\n\n// Self-update\nregisterUpdate(program)\n\nasync function main(): Promise<void> {\n try {\n await program.parseAsync()\n } catch (error: unknown) {\n if (error instanceof ApiError || error instanceof Error) {\n console.error(`Error: ${error.message}`)\n } else {\n console.error(error)\n }\n process.exitCode = 1\n }\n // Best-effort \"new version available\" notice; never affects the command's outcome.\n await notifyOnExit(process.argv)\n}\n\nvoid main()\n"]}
|