@keystrokehq/cli 0.1.119 → 0.1.121
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/dist-BOhgWxae.mjs +3 -0
- package/dist/{dist-_VnO_w_x.mjs → dist-CPKiOMpO.mjs} +1038 -216
- package/dist/dist-CPKiOMpO.mjs.map +1 -0
- package/dist/{dist-Cv14W_rK.mjs → dist-CPu6Uh2o.mjs} +152 -93
- package/dist/dist-CPu6Uh2o.mjs.map +1 -0
- package/dist/{dist-Dapwh1K9.mjs → dist-_HOtlAw_.mjs} +2 -2
- package/dist/{dist-Dapwh1K9.mjs.map → dist-_HOtlAw_.mjs.map} +1 -1
- package/dist/{dist-09fqaTku.mjs → dist-jfI0JHuM.mjs} +3 -3
- package/dist/{dist-09fqaTku.mjs.map → dist-jfI0JHuM.mjs.map} +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{maybe-auto-update-D7c5bEmF.mjs → maybe-auto-update-B4hlQg1Z.mjs} +2 -2
- package/dist/{maybe-auto-update-D7c5bEmF.mjs.map → maybe-auto-update-B4hlQg1Z.mjs.map} +1 -1
- package/dist/{program-Clv5Xyph.mjs → program-CS_3jI2k.mjs} +122 -11
- package/dist/program-CS_3jI2k.mjs.map +1 -0
- package/dist/{run-package-manager-update-Cz09nEv8.mjs → run-package-manager-update-CPANKKNP.mjs} +2 -2
- package/dist/{run-package-manager-update-Cz09nEv8.mjs.map → run-package-manager-update-CPANKKNP.mjs.map} +1 -1
- package/package.json +3 -3
- package/dist/dist-Cv14W_rK.mjs.map +0 -1
- package/dist/dist-DxhD4InG.mjs +0 -3
- package/dist/dist-_VnO_w_x.mjs.map +0 -1
- package/dist/program-Clv5Xyph.mjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { G as packAssetDirs, H as computeCallSiteIds, J as entryIdFromFile, U as diagnoseWorkflowSource, V as classifyCall, W as locateWorkflow, X as shouldSkipKeystrokeModuleFile, Y as readKeystrokeIgnoreDirective, a as buildStoredRouteManifestForProject } from "./dist-
|
|
2
|
+
import { G as packAssetDirs, H as computeCallSiteIds, J as entryIdFromFile, U as diagnoseWorkflowSource, V as classifyCall, W as locateWorkflow, X as shouldSkipKeystrokeModuleFile, Y as readKeystrokeIgnoreDirective, a as buildStoredRouteManifestForProject } from "./dist-CPKiOMpO.mjs";
|
|
3
3
|
import { isBuiltin } from "node:module";
|
|
4
4
|
import { dirname, join, relative, resolve, sep } from "node:path";
|
|
5
5
|
import { existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, realpathSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
@@ -773,7 +773,7 @@ async function buildApp(options = {}) {
|
|
|
773
773
|
warnWorkflowDiagnosticsFrom(workflowDiagnostics);
|
|
774
774
|
}
|
|
775
775
|
if (emitManifest) {
|
|
776
|
-
const { emitStoredRouteManifestForProject } = await import("./dist-
|
|
776
|
+
const { emitStoredRouteManifestForProject } = await import("./dist-BOhgWxae.mjs");
|
|
777
777
|
await emitStoredRouteManifestForProject(root);
|
|
778
778
|
}
|
|
779
779
|
} finally {
|
|
@@ -798,4 +798,4 @@ async function watchApp(options = {}) {
|
|
|
798
798
|
//#endregion
|
|
799
799
|
export { buildApp, buildFilteredApp, resolveRuntimeBuildArtifact, watchApp };
|
|
800
800
|
|
|
801
|
-
//# sourceMappingURL=dist-
|
|
801
|
+
//# sourceMappingURL=dist-jfI0JHuM.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dist-09fqaTku.mjs","names":["toPosix$1","toPosix"],"sources":["../../../packages/build/dist/walk-project-eIHZ7A1f.mjs","../../../packages/tsdown-config/deps.js","../../../packages/tsdown-config/index.js","../../../packages/build/dist/index.mjs"],"sourcesContent":["import { readFileSync, readdirSync, realpathSync, statSync } from \"node:fs\";\nimport { join, relative, resolve, sep } from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport { entryIdFromFile, readKeystrokeIgnoreDirective, shouldSkipKeystrokeModuleFile } from \"@keystrokehq/manifest/discovery\";\nimport { fileURLToPath } from \"node:url\";\n//#region src/ignore-guard-plugin.ts\nfunction toPosix$1(path) {\n\treturn path.split(sep).join(\"/\");\n}\nfunction projectRelativePath(root, filePath) {\n\treturn toPosix$1(relative(root, normalizeBuildFilePath(filePath)));\n}\n/** Normalize paths so /var and /private/var compare equal on macOS. */\nfunction normalizeBuildFilePath(filePath) {\n\tconst absolute = resolve(filePath);\n\ttry {\n\t\treturn realpathSync.native(absolute);\n\t} catch {\n\t\treturn absolute;\n\t}\n}\nfunction normalizeModuleId(id, root) {\n\tif (id.startsWith(\"\\0\")) return null;\n\tconst normalized = normalizeBuildFilePath(id.startsWith(\"file://\") ? fileURLToPath(id) : id);\n\tif (!normalized.startsWith(normalizeBuildFilePath(root))) return null;\n\treturn normalized;\n}\nfunction formatImportGuardError(root, ignoredPath, importer) {\n\tconst ignored = projectRelativePath(root, ignoredPath);\n\tif (importer) return `Cannot import \"${ignored}\" (@keystroke ignore) from \"${projectRelativePath(root, importer)}\". Remove the directive or stop importing it from a shipped module.`;\n\treturn `Cannot import \"${ignored}\" (@keystroke ignore). Remove the directive or stop importing it from a shipped module.`;\n}\n/** Throw when a built module imports a `@keystroke ignore` source file. */\nfunction keystrokeIgnoreGuardPlugin(options) {\n\tconst root = normalizeBuildFilePath(options.root);\n\tconst ignoredFiles = new Set(options.ignoredFiles.map((filePath) => normalizeBuildFilePath(filePath)));\n\tfunction assertNotIgnored(filePath, importer) {\n\t\tconst normalized = normalizeBuildFilePath(filePath);\n\t\tif (!ignoredFiles.has(normalized)) return;\n\t\tthrow new Error(formatImportGuardError(root, normalized, importer));\n\t}\n\treturn {\n\t\tname: \"keystroke-ignore-guard\",\n\t\tasync resolveId(source, importer, resolveOptions) {\n\t\t\tif (resolveOptions?.isEntry || !importer) return null;\n\t\t\tconst resolved = await this.resolve(source, importer, {\n\t\t\t\t...resolveOptions,\n\t\t\t\tskipSelf: true\n\t\t\t});\n\t\t\tif (!resolved) return null;\n\t\t\tassertNotIgnored(typeof resolved === \"string\" ? resolved : resolved.id, importer);\n\t\t\treturn null;\n\t\t},\n\t\tload(id) {\n\t\t\tconst normalized = normalizeModuleId(id, root);\n\t\t\tif (!normalized) return null;\n\t\t\tassertNotIgnored(normalized);\n\t\t\treturn null;\n\t\t}\n\t};\n}\n//#endregion\n//#region src/walk-project.ts\nconst IGNORED_DIRS = new Set([\n\t\"node_modules\",\n\t\"dist\",\n\t\".git\",\n\t\".turbo\",\n\t\"build\",\n\t\"coverage\",\n\t\".keystroke\",\n\t\".cache\",\n\t\"tmp\"\n]);\nconst IGNORED_ENV_FILE = /\\.env/;\nconst IGNORED_LOG_FILE = /\\.log$/;\nfunction isIgnoredFile(name) {\n\treturn IGNORED_ENV_FILE.test(name) || IGNORED_LOG_FILE.test(name);\n}\nfunction toPosix(path) {\n\treturn path.split(sep).join(\"/\");\n}\nfunction isProbablyBinary(buffer) {\n\tconst sampleLength = Math.min(buffer.length, 8e3);\n\tfor (let index = 0; index < sampleLength; index += 1) if (buffer[index] === 0) return true;\n\treturn false;\n}\nfunction classifyBuildEntry(root, srcRoot, filePath) {\n\tconst relativePath = toPosix(relative(root, filePath));\n\tconst agentsPrefix = `${toPosix(relative(root, join(srcRoot, \"agents\")))}/`;\n\tconst workflowsPrefix = `${toPosix(relative(root, join(srcRoot, \"workflows\")))}/`;\n\tconst triggersPrefix = `${toPosix(relative(root, join(srcRoot, \"triggers\")))}/`;\n\tconst actionsPrefix = `${toPosix(relative(root, join(srcRoot, \"actions\")))}/`;\n\tif (relativePath.startsWith(agentsPrefix) && /\\.(ts|mts)$/.test(relativePath) && !/\\.(int\\.)?test\\.(ts|mts)$/.test(relativePath)) {\n\t\tconst id = entryIdFromFile(join(srcRoot, \"agents\"), filePath, { nestedEntry: \"agent\" });\n\t\treturn id ? {\n\t\t\tentryKey: `agents/${id}`,\n\t\t\tentryPath: filePath\n\t\t} : null;\n\t}\n\tif (relativePath.startsWith(actionsPrefix) && /\\.(ts|mts)$/.test(relativePath) && !/\\.(int\\.)?test\\.(ts|mts)$/.test(relativePath)) {\n\t\tconst id = entryIdFromFile(join(srcRoot, \"actions\"), filePath, { nestedEntry: \"action\" });\n\t\treturn id ? {\n\t\t\tentryKey: `actions/${id}`,\n\t\t\tentryPath: filePath\n\t\t} : null;\n\t}\n\tif (relativePath.startsWith(workflowsPrefix) && /\\.(ts|mts)$/.test(relativePath) && !/\\.(int\\.)?test\\.(ts|mts)$/.test(relativePath)) {\n\t\tconst id = entryIdFromFile(join(srcRoot, \"workflows\"), filePath, { nestedEntry: \"workflow\" });\n\t\treturn id ? {\n\t\t\tentryKey: `workflows/${id}`,\n\t\t\tentryPath: filePath\n\t\t} : null;\n\t}\n\tif (relativePath.startsWith(triggersPrefix) && /\\.(ts|mts)$/.test(relativePath) && !/\\.(int\\.)?test\\.(ts|mts)$/.test(relativePath)) {\n\t\tconst id = entryIdFromFile(join(srcRoot, \"triggers\"), filePath, { nestedEntry: \"trigger\" });\n\t\treturn id ? {\n\t\t\tentryKey: `triggers/${id}`,\n\t\t\tentryPath: filePath\n\t\t} : null;\n\t}\n\treturn null;\n}\nfunction shouldSkipIgnoredModule(filePath, phase) {\n\treturn shouldSkipKeystrokeModuleFile(readKeystrokeIgnoreDirective(filePath), phase);\n}\nfunction isSrcTypeScriptFile(srcRoot, filePath) {\n\tconst relativePath = toPosix(relative(srcRoot, filePath));\n\tif (relativePath.startsWith(\"..\")) return false;\n\treturn /\\.(ts|mts)$/.test(relativePath);\n}\nfunction walkTree(root, dir, srcRoot, phase, collectSources, sourceFiles, buildEntries, ignoredFiles, totals) {\n\tfor (const name of readdirSync(dir).sort()) {\n\t\tif (collectSources && (sourceFiles.length >= 2e3 || totals.bytes >= 8388608)) return;\n\t\tconst absolute = join(dir, name);\n\t\tconst stats = statSync(absolute);\n\t\tif (stats.isDirectory()) {\n\t\t\tif (IGNORED_DIRS.has(name)) continue;\n\t\t\twalkTree(root, absolute, srcRoot, phase, collectSources, sourceFiles, buildEntries, ignoredFiles, totals);\n\t\t\tcontinue;\n\t\t}\n\t\tif (!stats.isFile()) continue;\n\t\tconst isUnderSrc = isSrcTypeScriptFile(srcRoot, absolute);\n\t\tconst skipIgnored = isUnderSrc ? shouldSkipIgnoredModule(absolute, phase) : false;\n\t\tif (isUnderSrc && skipIgnored) ignoredFiles.push(normalizeBuildFilePath(absolute));\n\t\tconst buildEntry = classifyBuildEntry(root, srcRoot, absolute);\n\t\tif (buildEntry && !skipIgnored) buildEntries[buildEntry.entryKey] = buildEntry.entryPath;\n\t\tif (!collectSources) continue;\n\t\tif (stats.size > 262144 || isIgnoredFile(name)) continue;\n\t\tconst buffer = readFileSync(absolute);\n\t\tif (isProbablyBinary(buffer)) continue;\n\t\ttotals.bytes += buffer.byteLength;\n\t\tsourceFiles.push({\n\t\t\tpath: toPosix(relative(root, absolute)),\n\t\t\tcontents: buffer.toString(\"utf8\"),\n\t\t\thash: createHash(\"sha256\").update(buffer).digest(\"hex\")\n\t\t});\n\t}\n}\n/**\n* One full-tree walk of the project: classifies tsdown entries and optionally\n* collects deploy source files (path + contents + hash) under snapshot limits.\n*/\nfunction walkProject(root, srcDirOrOptions = \"src\", maybeOptions) {\n\tconst srcDir = typeof srcDirOrOptions === \"string\" ? srcDirOrOptions : srcDirOrOptions.srcDir ?? \"src\";\n\tconst options = typeof srcDirOrOptions === \"string\" ? maybeOptions ?? {} : srcDirOrOptions;\n\tconst collectSources = options.collectSources ?? false;\n\tconst phase = options.phase ?? \"build\";\n\tconst sourceFiles = [];\n\tconst buildEntries = {};\n\tconst ignoredFiles = [];\n\twalkTree(root, root, join(root, srcDir), phase, collectSources, sourceFiles, buildEntries, ignoredFiles, { bytes: 0 });\n\treturn {\n\t\tsourceFiles,\n\t\tbuildEntries,\n\t\tignoredFiles\n\t};\n}\n//#endregion\nexport { keystrokeIgnoreGuardPlugin as n, walkProject as t };\n\n//# sourceMappingURL=walk-project-eIHZ7A1f.mjs.map","import { isBuiltin } from \"node:module\";\n\n/** Native addons kept external — resolved from the CLI runtime at app start. */\nexport const NATIVE_RUNTIME_DEPS = [\"pg\", \"better-sqlite3\", \"@parcel/watcher\"];\n\n/**\n * Framework/runtime `@keystrokehq/*` shipped in the project-server image, so user-app builds\n * keep them external and resolve them from the runtime at boot. Everything else under the scope\n * (Composio catalog integrations like `@keystrokehq/posthog`, …) is bundled into the artifact.\n *\n * This set MUST equal the `@keystrokehq/*` dependency closure of `@keystrokehq/project-runtime`\n * (the deploy image) — `deps.test.ts` enforces it. To change what stays external, change what the\n * runtime image depends on; do not edit this list by hand. `exa` is the only integration\n * package the framework imports directly (web search); `gateway` ships Slack and other channel\n * adapters in the runtime image.\n */\nexport const RUNTIME_KEYSTROKE_PACKAGES = new Set([\n \"access-control\",\n \"action\",\n \"agent\",\n \"app\",\n \"auth\",\n \"build\",\n \"config\",\n \"credentials\",\n \"database\",\n \"exa\",\n \"gateway\",\n \"hosting\",\n \"http\",\n \"keystroke\",\n \"manifest\",\n \"mcp\",\n \"memory\",\n \"oauth\",\n \"platform-database\",\n \"project-runtime\",\n \"projects\",\n \"runtime\",\n \"sandbox\",\n \"scheduler\",\n \"sdk\",\n \"secrets\",\n \"shared\",\n \"storage\",\n \"telemetry\",\n \"tracing\",\n \"trigger\",\n \"tsdown-config\",\n \"web-search\",\n \"worker\",\n \"workflow\",\n \"workflow-canvas\",\n]);\n\n/** Matches framework/runtime `@keystrokehq/*` kept external during user-app builds. */\nexport const FRAMEWORK_KEYSTROKE_EXTERNAL = new RegExp(\n `^@keystrokehq\\\\/(?:${[...RUNTIME_KEYSTROKE_PACKAGES].sort().join(\"|\")})(?:\\\\/|$)`,\n);\n\nfunction keystrokePackageName(name) {\n if (!name.startsWith(\"@keystrokehq/\")) {\n return null;\n }\n\n return name.slice(\"@keystrokehq/\".length).split(\"/\")[0] ?? null;\n}\n\nfunction isRuntimeKeystrokePackage(name) {\n const pkg = keystrokePackageName(name);\n return pkg !== null && RUNTIME_KEYSTROKE_PACKAGES.has(pkg);\n}\n\n/**\n * Kept external so .d.ts emission does not inline internal/inferred types.\n *\n * `typescript` is external because the TS compiler cannot be cleanly bundled into\n * ESM — it mixes `require()`/`__filename` with top-level await, which Node rejects\n * with `ERR_AMBIGUOUS_MODULE_SYNTAX` on load. Packages that use the compiler\n * (`workflow-canvas`, `manifest`, `build`) declare it as a dependency, so it\n * resolves from `node_modules` at runtime instead of being inlined.\n */\nexport const LIBRARY_EXTERNAL_DEPS = [\n \"better-auth\",\n /^@better-auth\\//,\n /^better-auth\\//,\n \"typescript\",\n];\n\n/** Non-auth runtime deps kept external for published entry bundles (platform, etc.). */\nexport const BUNDLED_ENTRY_RUNTIME_EXTERNAL_DEPS = [\n ...NATIVE_RUNTIME_DEPS,\n \"dockerode\",\n \"ssh2\",\n \"cpu-features\",\n \"microsandbox\",\n /^@aws-sdk\\//,\n /^@napi-rs\\//,\n \"hono\",\n /^@hono\\//,\n \"undici\",\n];\n\n/** Kept external when bundling published entry points (cli, keystroke, platform). */\nexport const BUNDLED_ENTRY_EXTERNAL_DEPS = [\n ...BUNDLED_ENTRY_RUNTIME_EXTERNAL_DEPS,\n ...LIBRARY_EXTERNAL_DEPS,\n];\n\n/** Bundle into CLI — device login uses Better Auth client only. */\nexport const BETTER_AUTH_CLIENT_BUNDLE_PATTERNS = [\n /^better-auth\\/client$/,\n /^better-auth\\/client\\//,\n];\n\n/** Server adapters and root entry — must not ship in the CLI bundle. */\nexport const BETTER_AUTH_SERVER_EXTERNAL_PATTERNS = [\n /^better-auth$/,\n /^@better-auth\\//,\n /^better-auth\\/(?!client(\\/|$)).+/,\n];\n\nexport function isNativeRuntimeDep(id) {\n return NATIVE_RUNTIME_DEPS.some((dep) => id === dep || id.startsWith(`${dep}/`));\n}\n\nfunction packageName(id) {\n if (id.startsWith(\"@\")) {\n const [scope, name] = id.split(\"/\");\n return name ? `${scope}/${name}` : id;\n }\n\n return id.split(\"/\")[0] ?? id;\n}\n\nfunction isRuntimeExternal(id) {\n const name = packageName(id);\n if (isNativeRuntimeDep(name)) {\n return true;\n }\n\n if (name.startsWith(\"@keystrokehq/\")) {\n return isRuntimeKeystrokePackage(name);\n }\n\n if (name === \"better-auth\" || name.startsWith(\"@better-auth/\")) {\n return true;\n }\n\n return false;\n}\n\n/** Library packages resolve npm deps from node_modules at runtime. */\nexport function libraryBuildDepsConfig() {\n return {\n alwaysBundle: (_id) => null,\n neverBundle: [...NATIVE_RUNTIME_DEPS, /^@keystrokehq\\//, ...LIBRARY_EXTERNAL_DEPS],\n onlyBundle: false,\n };\n}\n\n/** Bundle npm deps into dist; resolve @keystrokehq/* and natives from the runtime. */\nexport function userAppBuildDepsConfig() {\n return {\n alwaysBundle: (id, _importer) => {\n if (id.startsWith(\".\") || id.startsWith(\"/\") || isBuiltin(id)) {\n return null;\n }\n\n return isRuntimeExternal(id) ? null : true;\n },\n neverBundle: [...NATIVE_RUNTIME_DEPS, FRAMEWORK_KEYSTROKE_EXTERNAL, ...LIBRARY_EXTERNAL_DEPS],\n onlyBundle: false,\n };\n}\n\n/**\n * Published entry packages (cli, keystroke, platform): declare bundled @keystrokehq/*\n * in dependencies (changesets release graph ignores devDependencies). Inlining is\n * driven by alwaysBundle below, not by dep kind. Runtime npm deps stay external.\n */\nexport function bundledEntryDepsConfig() {\n return {\n alwaysBundle: [/^@keystrokehq\\//],\n neverBundle: [...BUNDLED_ENTRY_EXTERNAL_DEPS],\n onlyBundle: false,\n };\n}\n\n/** Published CLI: inline better-auth client + @better-auth/*; keep server adapters external. */\nexport const BETTER_AUTH_CLI_BUNDLE_PATTERNS = [\n ...BETTER_AUTH_CLIENT_BUNDLE_PATTERNS,\n /^@better-auth\\//,\n];\n\nexport const BETTER_AUTH_CLI_EXTERNAL_PATTERNS = [\n /^better-auth$/,\n /^better-auth\\/(?!client(\\/|$)).+/,\n /^@better-auth\\/drizzle-adapter/,\n \"drizzle-orm\",\n];\n\n/** Rolldown/tsdown — native bindings; stay in CLI node_modules at runtime. */\nexport const CLI_BUILD_TOOL_EXTERNAL_PATTERNS = [\"tsdown\", \"rolldown\", /^@rolldown\\//, \"tsx\"];\n\n/** CLI: inline better-auth/client; keep server + drizzle adapters external. */\nexport function cliBundledEntryDepsConfig() {\n return {\n alwaysBundle: [/^@keystrokehq\\//, ...BETTER_AUTH_CLI_BUNDLE_PATTERNS],\n neverBundle: [\n ...BUNDLED_ENTRY_RUNTIME_EXTERNAL_DEPS,\n ...BETTER_AUTH_CLI_EXTERNAL_PATTERNS,\n ...CLI_BUILD_TOOL_EXTERNAL_PATTERNS,\n // The TS compiler cannot be inlined into ESM (`require`/`__filename` + top-level\n // await → `__filename is not defined` / `ERR_AMBIGUOUS_MODULE_SYNTAX` on load).\n // The CLI inlines the @keystrokehq/* packages that use it (build, manifest,\n // workflow-canvas), so `typescript` must resolve from the CLI's own node_modules —\n // hence it is also a runtime dependency of @keystrokehq/cli.\n \"typescript\",\n ],\n onlyBundle: false,\n };\n}\n","import { bundledEntryDepsConfig, libraryBuildDepsConfig } from \"./deps.js\";\n\nexport {\n isNativeRuntimeDep,\n NATIVE_RUNTIME_DEPS,\n bundledEntryDepsConfig,\n cliBundledEntryDepsConfig,\n libraryBuildDepsConfig,\n userAppBuildDepsConfig,\n} from \"./deps.js\";\n\nexport const baseTsdownConfig = {\n format: [\"esm\", \"cjs\"],\n dts: true,\n clean: true,\n sourcemap: true,\n target: \"node20\",\n deps: libraryBuildDepsConfig(),\n};\n\n/** tsdown config for published bundles (cli, keystroke, platform). */\nexport const bundledEntryTsdownConfig = {\n format: [\"esm\", \"cjs\"],\n dts: true,\n clean: true,\n sourcemap: true,\n target: \"node20\",\n deps: bundledEntryDepsConfig(),\n};\n","import { n as keystrokeIgnoreGuardPlugin, t as walkProject } from \"./walk-project-eIHZ7A1f.mjs\";\nimport { t as resolveModuleDirs } from \"./resolve-module-dirs-BPHQhRGy.mjs\";\nimport { existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, rmSync, statSync, writeFileSync } from \"node:fs\";\nimport { dirname, join, relative, sep } from \"node:path\";\nimport { packAssetDirs } from \"@keystrokehq/sandbox/files\";\nimport { baseTsdownConfig, userAppBuildDepsConfig } from \"@keystrokehq/tsdown-config\";\nimport { build, mergeConfig } from \"tsdown\";\nimport { classifyCall, computeCallSiteIds, diagnoseWorkflowSource, locateWorkflow } from \"@keystrokehq/workflow-canvas\";\nimport ts from \"typescript\";\nimport { buildStoredRouteManifestForProject } from \"@keystrokehq/manifest\";\n//#region src/inject-call-site-ids.ts\n/**\n* Build-time injection of the deterministic structural `callSiteId` into every\n* durable step call in a workflow source file, so the runtime emits\n* `step:<callSiteId>#<occurrence>` correlation ids (and `step:<callSiteId>`\n* credential consumer ids) that line up 1:1 with the canvas graph nodes the\n* deploy-time producer mints from the same source. There is no user-authored\n* step id — identity is entirely internal and injected here.\n*\n* Injection shape by kind (the `callSiteId` is the same id `computeCallSiteIds`\n* returns, which equals the producer's step-node id):\n* - action/sub-workflow `x.run(i)` → `x.run(i).__site(\"<id>\")` (builder method)\n* - agent `a.prompt(i, opts?)` → `__site` merged into the prompt options\n* - llm `promptLlm(i, opts?)` → `__site` merged into the options\n* - hook `ctx.hook(opts?)` → `__site` merged into the options\n* - sleep `ctx.sleep(d, opts?)` → `__site` merged into a second options arg\n*/\nfunction injectCallSiteIds(code, fileName) {\n\tconst sourceFile = ts.createSourceFile(fileName, code, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n\tconst located = locateWorkflow(sourceFile);\n\tif (!located) return code;\n\tconst ids = computeCallSiteIds(sourceFile);\n\tif (ids.size === 0) return code;\n\tconst edits = [];\n\tfor (const [node, id] of ids) {\n\t\tconst info = classifyCall(node, located.ctxParamName);\n\t\tif (!info) continue;\n\t\tif (info.callKind === \"workflow-step\") {\n\t\t\tedits.push({\n\t\t\t\tpos: node.getEnd(),\n\t\t\t\ttext: `.__site(${JSON.stringify(id)})`\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (info.callKind === \"agent\" || info.callKind === \"llm\") {\n\t\t\tpushOptionsEdit(edits, node, id);\n\t\t\tcontinue;\n\t\t}\n\t\tif (info.callKind === \"hook\") {\n\t\t\tpushHookOptionsEdit(edits, node, id);\n\t\t\tcontinue;\n\t\t}\n\t\tif (info.callKind === \"wait\") pushSleepOptionsEdit(edits, node, id);\n\t}\n\tif (edits.length === 0) return code;\n\tedits.sort((a, b) => b.pos - a.pos);\n\tlet out = code;\n\tfor (const edit of edits) out = out.slice(0, edit.pos) + edit.text + out.slice(edit.pos);\n\treturn out;\n}\n/**\n* Merge `__site: \"<id>\"` into a call's options argument (agents / promptLlm).\n* - no 2nd arg → append `, { __site: \"id\" }`\n* - 2nd arg object literal → insert `__site: \"id\", ` after its `{`\n* - 2nd arg anything else → wrap as `{ ...orig, __site: \"id\" }`\n*/\nfunction pushOptionsEdit(edits, call, id) {\n\tconst literal = JSON.stringify(id);\n\tconst optionsArg = call.arguments[1];\n\tif (!optionsArg) {\n\t\tconst firstArg = call.arguments[0];\n\t\tconst insertAt = firstArg ? firstArg.getEnd() : call.getEnd() - 1;\n\t\tedits.push({\n\t\t\tpos: insertAt,\n\t\t\ttext: `, { __site: ${literal} }`\n\t\t});\n\t\treturn;\n\t}\n\tif (ts.isObjectLiteralExpression(optionsArg)) {\n\t\tedits.push({\n\t\t\tpos: optionsArg.getStart() + 1,\n\t\t\ttext: ` __site: ${literal},`\n\t\t});\n\t\treturn;\n\t}\n\tedits.push({\n\t\tpos: optionsArg.getStart(),\n\t\ttext: \"{ ...\"\n\t});\n\tedits.push({\n\t\tpos: optionsArg.getEnd(),\n\t\ttext: `, __site: ${literal} }`\n\t});\n}\n/** Merge `__site` into `ctx.hook(opts?)` — options are the first (only) argument. */\nfunction pushHookOptionsEdit(edits, call, id) {\n\tconst literal = JSON.stringify(id);\n\tconst optionsArg = call.arguments[0];\n\tif (!optionsArg) {\n\t\tedits.push({\n\t\t\tpos: call.getEnd() - 1,\n\t\t\ttext: `{ __site: ${literal} }`\n\t\t});\n\t\treturn;\n\t}\n\tif (ts.isObjectLiteralExpression(optionsArg)) {\n\t\tedits.push({\n\t\t\tpos: optionsArg.getStart() + 1,\n\t\t\ttext: ` __site: ${literal},`\n\t\t});\n\t\treturn;\n\t}\n\tedits.push({\n\t\tpos: optionsArg.getStart(),\n\t\ttext: \"{ ...\"\n\t});\n\tedits.push({\n\t\tpos: optionsArg.getEnd(),\n\t\ttext: `, __site: ${literal} }`\n\t});\n}\n/** Append `{ __site }` as the second arg to `ctx.sleep(duration)`. */\nfunction pushSleepOptionsEdit(edits, call, id) {\n\tconst literal = JSON.stringify(id);\n\tconst durationArg = call.arguments[0];\n\tconst insertAt = durationArg ? durationArg.getEnd() : call.getEnd() - 1;\n\tedits.push({\n\t\tpos: insertAt,\n\t\ttext: `, { __site: ${literal} }`\n\t});\n}\nfunction toPosix$2(path) {\n\treturn path.split(sep).join(\"/\");\n}\n/**\n* Rolldown plugin that runs {@link injectCallSiteIds} over workflow source files\n* (and their same-file helpers) before transpile. Scoped to `src/workflows/` so\n* non-workflow modules are untouched; cross-file helpers stay unkeyed by design.\n*/\nfunction callSiteIdInjectionPlugin(options) {\n\tconst srcDir = options.srcDir ?? \"src\";\n\tconst workflowsPrefix = toPosix$2(`${options.root}/${srcDir}/workflows/`);\n\treturn {\n\t\tname: \"keystroke-call-site-ids\",\n\t\ttransform(code, id) {\n\t\t\tconst normalized = toPosix$2(id);\n\t\t\tif (!normalized.startsWith(workflowsPrefix) || !normalized.endsWith(\".ts\")) return null;\n\t\t\tconst transformed = injectCallSiteIds(code, normalized);\n\t\t\treturn transformed === code ? null : {\n\t\t\t\tcode: transformed,\n\t\t\t\tmap: null\n\t\t\t};\n\t\t}\n\t};\n}\n//#endregion\n//#region src/workflow-diagnostics.ts\nconst TEST_FILE = /\\.(test|int\\.test|spec)\\.ts$/;\nfunction toPosix$1(path) {\n\treturn path.split(sep).join(\"/\");\n}\nfunction collectTsFiles(dir, out) {\n\tlet entries;\n\ttry {\n\t\tentries = readdirSync(dir);\n\t} catch {\n\t\treturn;\n\t}\n\tfor (const entry of entries) {\n\t\tif (entry === \"node_modules\" || entry.startsWith(\".\")) continue;\n\t\tconst full = join(dir, entry);\n\t\tif (statSync(full).isDirectory()) {\n\t\t\tcollectTsFiles(full, out);\n\t\t\tcontinue;\n\t\t}\n\t\tif (entry.endsWith(\".ts\") && !TEST_FILE.test(entry)) out.push(full);\n\t}\n}\n/**\n* Run the workflow-canvas reliability checks over every `src/**` module. Errors\n* (steps outside a workflow, steps nested as call arguments) block the build;\n* warnings (opaque code-blocks, dropped spread inputs) explain each degraded\n* construct. Best-effort per-file: an unparseable file is skipped, never fatal.\n*/\nfunction collectWorkflowDiagnostics(root, srcDir = \"src\") {\n\tconst srcRoot = join(root, srcDir);\n\tif (!existsSync(srcRoot)) return [];\n\tconst files = [];\n\tcollectTsFiles(srcRoot, files);\n\tconst diagnostics = [];\n\tfor (const file of files) {\n\t\tconst rel = toPosix$1(relative(root, file));\n\t\ttry {\n\t\t\tconst source = readFileSync(file, \"utf8\");\n\t\t\tdiagnostics.push(...diagnoseWorkflowSource(source, rel));\n\t\t} catch {}\n\t}\n\treturn diagnostics;\n}\nfunction formatDiagnostic(diagnostic) {\n\treturn ` ${diagnostic.line !== void 0 ? `${diagnostic.fileName}:${diagnostic.line}:${diagnostic.column ?? 1}` : diagnostic.fileName}\\n ${diagnostic.message}`;\n}\n/** Throw when any blocking (error-severity) diagnostic is found. */\nfunction assertWorkflowDiagnosticErrorsFrom(diagnostics) {\n\tconst errors = diagnostics.filter((d) => d.severity === \"error\");\n\tif (errors.length > 0) throw new Error(`Workflow canvas: ${errors.length} unsupported construct(s) must be fixed before deploy:\\n${errors.map(formatDiagnostic).join(\"\\n\")}\\n`);\n}\n/** Print soft (warning-severity) diagnostics after a successful build. */\nfunction warnWorkflowDiagnosticsFrom(diagnostics) {\n\tconst warnings = diagnostics.filter((d) => d.severity === \"warning\");\n\tif (warnings.length > 0) console.warn(`\\n⚠ Workflow canvas: ${warnings.length} construct(s) will render as a degraded (opaque) canvas:\\n${warnings.map(formatDiagnostic).join(\"\\n\")}\\n`);\n}\n/** Throw when any blocking (error-severity) diagnostic is found. Run before building. */\nfunction assertWorkflowDiagnosticErrors(root, srcDir = \"src\") {\n\tassertWorkflowDiagnosticErrorsFrom(collectWorkflowDiagnostics(root, srcDir));\n}\n/** Print soft (warning-severity) diagnostics after a successful build. */\nfunction warnWorkflowDiagnostics(root, srcDir = \"src\") {\n\twarnWorkflowDiagnosticsFrom(collectWorkflowDiagnostics(root, srcDir));\n}\n/**\n* Collect diagnostics, print warnings, and throw a formatted error when any\n* blocking (error-severity) diagnostic is found.\n*\n* @deprecated Prefer {@link assertWorkflowDiagnosticErrors} before build and\n* {@link warnWorkflowDiagnostics} after build so warnings appear below build logs.\n*/\nfunction assertWorkflowDiagnostics(root, srcDir = \"src\") {\n\tconst diagnostics = collectWorkflowDiagnostics(root, srcDir);\n\tassertWorkflowDiagnosticErrorsFrom(diagnostics);\n\twarnWorkflowDiagnosticsFrom(diagnostics);\n}\n//#endregion\n//#region src/resolve-runtime-artifact.ts\nfunction packageRoot(nodeModules, scope, name) {\n\tconst direct = scope ? join(nodeModules, scope, name) : join(nodeModules, name);\n\tif (existsSync(join(direct, \"package.json\"))) return direct;\n\tconst pnpmDir = join(nodeModules, \".pnpm\");\n\tif (!existsSync(pnpmDir)) return null;\n\tfor (const entry of readdirSync(pnpmDir)) {\n\t\tconst candidate = scope ? join(pnpmDir, entry, \"node_modules\", scope, name) : join(pnpmDir, entry, \"node_modules\", name);\n\t\tif (existsSync(join(candidate, \"package.json\"))) return candidate;\n\t}\n\treturn null;\n}\n/** Resolve a file shipped with `@keystrokehq/build` inside the CLI runtime. */\nfunction resolveRuntimeBuildArtifact(runtimeNodeModules, relativePath) {\n\tconst pkgRoot = packageRoot(runtimeNodeModules, \"@keystrokehq\", \"build\");\n\tif (!pkgRoot) throw new Error(\"Keystroke runtime is missing @keystrokehq/build\");\n\tconst artifact = join(pkgRoot, relativePath);\n\tif (!existsSync(artifact)) throw new Error(`Keystroke runtime artifact not found: ${relativePath}`);\n\treturn artifact;\n}\n//#endregion\n//#region src/vitest-plugin.ts\nconst ASSETS_MODULE$1 = \"@keystrokehq/assets\";\nconst virtualPrefix = `\\0${ASSETS_MODULE$1}:`;\n/** Vitest plugin resolving `@keystrokehq/assets` from disk. */\nfunction agentAssetsVitestPlugin(appRoot = process.cwd()) {\n\tlet manifest = null;\n\treturn {\n\t\tname: \"keystroke-assets\",\n\t\tresolveId(source) {\n\t\t\tif (source !== ASSETS_MODULE$1) return null;\n\t\t\treturn `${virtualPrefix}manifest`;\n\t\t},\n\t\tload(id) {\n\t\t\tif (id !== `${virtualPrefix}manifest`) return null;\n\t\t\tmanifest ??= packAssetDirs(appRoot);\n\t\t\treturn `export default ${JSON.stringify(manifest)};`;\n\t\t}\n\t};\n}\nfunction findAppRootFromConfig(configFile) {\n\tif (!configFile) return process.cwd();\n\treturn dirname(configFile);\n}\nfunction agentAssetsVitestPluginFromConfig(configFile) {\n\treturn agentAssetsVitestPlugin(findAppRootFromConfig(configFile));\n}\n//#endregion\n//#region src/resolve-build-filter.ts\n/** Resolve exact build-entry keys for a filtered deploy build. */\nfunction resolveBuildFilter(filter, buildEntries) {\n\tif (filter.length === 0) throw new Error(\"At least one --filter entry is required\");\n\tconst matched = {};\n\tfor (const key of [...new Set(filter)]) {\n\t\tconst entryPath = buildEntries[key];\n\t\tif (!entryPath) throw new Error(`Unknown build entry \"${key}\". Use keys like agents/foo or workflows/bar from walkProject.`);\n\t\tmatched[key] = entryPath;\n\t}\n\treturn matched;\n}\n//#endregion\n//#region src/build-filtered.ts\nfunction toPosix(path) {\n\treturn path.replace(/\\\\/g, \"/\");\n}\nfunction distRelativePath(entryKey) {\n\treturn `${entryKey}.mjs`;\n}\nasync function buildSingleEntry(root, entryKey, entryPath, ignoredFiles) {\n\tmkdirSync(join(root, \".keystroke\"), { recursive: true });\n\tconst scratchRoot = mkdtempSync(join(root, \".keystroke\", \"filter-build-\"));\n\tconst outDir = join(scratchRoot, \"dist\");\n\tconst relativePath = distRelativePath(entryKey);\n\tawait build(mergeConfig(baseTsdownConfig, {\n\t\tentry: { [entryKey]: entryPath },\n\t\tformat: [\"esm\"],\n\t\toutDir,\n\t\tclean: true,\n\t\tdts: false,\n\t\tloader: { \".md\": \"text\" },\n\t\tdeps: userAppBuildDepsConfig(),\n\t\tplugins: [keystrokeIgnoreGuardPlugin({\n\t\t\troot,\n\t\t\tignoredFiles\n\t\t})]\n\t}));\n\treturn {\n\t\tscratchRoot,\n\t\trelativePath\n\t};\n}\nasync function manifestEntriesForBuiltModule(root, entryPath, relativePath, contents, sourceMap) {\n\tconst moduleFile = toPosix(relative(root, entryPath));\n\tconst distPath = join(root, \"dist\", relativePath);\n\tconst distMapPath = `${distPath}.map`;\n\tconst previousDist = existsSync(distPath) ? readFileSync(distPath) : void 0;\n\tconst hadMap = existsSync(distMapPath);\n\tconst previousMap = hadMap ? readFileSync(distMapPath) : void 0;\n\tmkdirSync(dirname(distPath), { recursive: true });\n\twriteFileSync(distPath, contents);\n\tif (sourceMap) writeFileSync(distMapPath, sourceMap);\n\ttry {\n\t\treturn (await buildStoredRouteManifestForProject(root, { reloadModules: true })).entries.filter((entry) => \"moduleFile\" in entry && entry.moduleFile === moduleFile);\n\t} finally {\n\t\tif (previousDist) writeFileSync(distPath, previousDist);\n\t\telse rmSync(distPath, { force: true });\n\t\tif (previousMap) writeFileSync(distMapPath, previousMap);\n\t\telse if (sourceMap || hadMap) rmSync(distMapPath, { force: true });\n\t}\n}\n/** Build selected modules in isolation for a filtered deploy merge. */\nasync function buildFilteredApp(options) {\n\tconst root = options.root ?? process.cwd();\n\tconst srcDir = options.srcDir ?? \"src\";\n\tconst phase = options.phase ?? \"deploy\";\n\tconst collectSources = options.collectSources ?? false;\n\tconst previous = process.cwd();\n\tconst workflowDiagnostics = collectWorkflowDiagnostics(root, srcDir);\n\tassertWorkflowDiagnosticErrorsFrom(workflowDiagnostics);\n\tconst walked = walkProject(root, {\n\t\tsrcDir,\n\t\tcollectSources,\n\t\tphase\n\t});\n\tconst matched = resolveBuildFilter(options.filter, walked.buildEntries);\n\tconst files = [];\n\tconst manifestEntries = [];\n\ttry {\n\t\tprocess.chdir(root);\n\t\tfor (const [entryKey, entryPath] of Object.entries(matched)) {\n\t\t\tconst { scratchRoot, relativePath } = await buildSingleEntry(root, entryKey, entryPath, walked.ignoredFiles);\n\t\t\ttry {\n\t\t\t\tconst builtPath = join(scratchRoot, \"dist\", relativePath);\n\t\t\t\tconst mapPath = `${builtPath}.map`;\n\t\t\t\tconst contents = readFileSync(builtPath);\n\t\t\t\tconst sourceMap = existsSync(mapPath) ? readFileSync(mapPath) : void 0;\n\t\t\t\tfiles.push({\n\t\t\t\t\tentryKey,\n\t\t\t\t\trelativePath,\n\t\t\t\t\tcontents,\n\t\t\t\t\tsourceMap\n\t\t\t\t});\n\t\t\t\tmanifestEntries.push(...await manifestEntriesForBuiltModule(root, entryPath, relativePath, contents, sourceMap));\n\t\t\t} finally {\n\t\t\t\trmSync(scratchRoot, {\n\t\t\t\t\trecursive: true,\n\t\t\t\t\tforce: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t} finally {\n\t\twarnWorkflowDiagnosticsFrom(workflowDiagnostics);\n\t\tprocess.chdir(previous);\n\t}\n\treturn {\n\t\tfiles,\n\t\tmanifestEntries,\n\t\tsourceFiles: walked.sourceFiles\n\t};\n}\n//#endregion\n//#region src/index.ts\nconst ASSETS_MODULE = \"@keystrokehq/assets\";\nconst VIRTUAL_PREFIX = `\\0${ASSETS_MODULE}:`;\nfunction renderAssetModule(manifest) {\n\treturn `export default ${JSON.stringify(manifest)};\\n`;\n}\n/** Rolldown plugin: pack src/skills + src/files and expose `@keystrokehq/assets`. */\nfunction agentAssetsPlugin(options) {\n\tconst srcDir = options.srcDir ?? \"src\";\n\tlet manifest = null;\n\treturn {\n\t\tname: \"keystroke-assets\",\n\t\tbuildStart() {\n\t\t\tmanifest = packAssetDirs(options.root, srcDir);\n\t\t},\n\t\tresolveId(source) {\n\t\t\tif (source !== ASSETS_MODULE) return null;\n\t\t\treturn `${VIRTUAL_PREFIX}manifest`;\n\t\t},\n\t\tload(id) {\n\t\t\tif (id !== `${VIRTUAL_PREFIX}manifest` || !manifest) return null;\n\t\t\treturn renderAssetModule(manifest);\n\t\t},\n\t\tbuildEnd() {\n\t\t\tif (!manifest) return;\n\t\t\tconst outDir = join(options.root, options.outDir ?? \"dist\", \".keystroke\");\n\t\t\tmkdirSync(outDir, { recursive: true });\n\t\t\twriteFileSync(join(outDir, \"assets.mjs\"), renderAssetModule(manifest));\n\t\t}\n\t};\n}\n/** Full tsdown config for user keystroke apps (config + discovered modules only). */\nfunction createAppBuildConfig(options = {}, walked) {\n\tconst root = options.root ?? process.cwd();\n\tconst srcDir = options.srcDir ?? \"src\";\n\tconst outDir = options.outDir ?? \"dist\";\n\tconst configEntry = existsSync(join(root, \"keystroke.config.ts\")) ? join(root, \"keystroke.config.ts\") : void 0;\n\tconst walkedResult = walked ?? walkProject(root, {\n\t\tsrcDir,\n\t\tphase: options.phase\n\t});\n\tconst discovered = walkedResult.buildEntries;\n\tconst ignoredFiles = walkedResult.ignoredFiles;\n\tconst entries = {\n\t\t...configEntry ? { config: configEntry } : {},\n\t\t...discovered\n\t};\n\tif (Object.keys(entries).length === 0) throw new Error(\"Nothing to build — add keystroke.config.ts or modules under src/\");\n\treturn mergeConfig(baseTsdownConfig, {\n\t\tentry: entries,\n\t\tformat: [\"esm\"],\n\t\toutDir: join(root, outDir),\n\t\tclean: options.clean ?? true,\n\t\tdts: false,\n\t\tloader: { \".md\": \"text\" },\n\t\tdeps: userAppBuildDepsConfig(),\n\t\tplugins: [\n\t\t\tkeystrokeIgnoreGuardPlugin({\n\t\t\t\troot,\n\t\t\t\tignoredFiles\n\t\t\t}),\n\t\t\tcallSiteIdInjectionPlugin({\n\t\t\t\troot,\n\t\t\t\tsrcDir\n\t\t\t}),\n\t\t\tagentAssetsPlugin({\n\t\t\t\troot,\n\t\t\t\tsrcDir,\n\t\t\t\toutDir\n\t\t\t})\n\t\t]\n\t});\n}\n/** Build user agents, workflows, triggers, and config to `dist/`. */\nasync function buildApp(options = {}) {\n\tconst root = options.root ?? process.cwd();\n\tconst srcDir = options.srcDir ?? \"src\";\n\tconst emitManifest = options.emitManifest ?? true;\n\tconst collectSources = options.collectSources ?? false;\n\tconst phase = options.phase ?? \"build\";\n\tconst previous = process.cwd();\n\tconst walked = walkProject(root, {\n\t\tsrcDir,\n\t\tcollectSources,\n\t\tphase\n\t});\n\ttry {\n\t\tprocess.chdir(root);\n\t\tconst workflowDiagnostics = collectWorkflowDiagnostics(root, srcDir);\n\t\tassertWorkflowDiagnosticErrorsFrom(workflowDiagnostics);\n\t\ttry {\n\t\t\tawait build(createAppBuildConfig({\n\t\t\t\t...options,\n\t\t\t\troot\n\t\t\t}, {\n\t\t\t\tbuildEntries: walked.buildEntries,\n\t\t\t\tignoredFiles: walked.ignoredFiles\n\t\t\t}));\n\t\t} finally {\n\t\t\twarnWorkflowDiagnosticsFrom(workflowDiagnostics);\n\t\t}\n\t\tif (emitManifest) {\n\t\t\tconst { emitStoredRouteManifestForProject } = await import(\"@keystrokehq/manifest\");\n\t\t\tawait emitStoredRouteManifestForProject(root);\n\t\t}\n\t} finally {\n\t\tprocess.chdir(previous);\n\t}\n\treturn { sourceFiles: walked.sourceFiles };\n}\n/**\n* Watch `src/` and rebuild `dist/` on change.\n*\n* NOT true hot reload — each change runs a full tsdown rebuild. Callers should\n* restart the API server in `onRebuild` so discovery picks up new/changed modules.\n*/\nasync function watchApp(options = {}) {\n\tconst { runWatchApp } = await import(\"./watch-app-DTIeKrbl.mjs\");\n\tawait runWatchApp((watchOptions) => buildApp({\n\t\t...watchOptions,\n\t\temitManifest: false,\n\t\tcollectSources: false\n\t}), options);\n}\n//#endregion\nexport { agentAssetsVitestPlugin, agentAssetsVitestPluginFromConfig, assertWorkflowDiagnosticErrors, assertWorkflowDiagnosticErrorsFrom, assertWorkflowDiagnostics, buildApp, buildFilteredApp, callSiteIdInjectionPlugin, collectWorkflowDiagnostics, createAppBuildConfig, injectCallSiteIds, resolveBuildFilter, resolveModuleDirs, resolveRuntimeBuildArtifact, warnWorkflowDiagnostics, warnWorkflowDiagnosticsFrom, watchApp };\n\n//# sourceMappingURL=index.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dist-jfI0JHuM.mjs","names":["toPosix$1","toPosix"],"sources":["../../../packages/build/dist/walk-project-eIHZ7A1f.mjs","../../../packages/tsdown-config/deps.js","../../../packages/tsdown-config/index.js","../../../packages/build/dist/index.mjs"],"sourcesContent":["import { readFileSync, readdirSync, realpathSync, statSync } from \"node:fs\";\nimport { join, relative, resolve, sep } from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport { entryIdFromFile, readKeystrokeIgnoreDirective, shouldSkipKeystrokeModuleFile } from \"@keystrokehq/manifest/discovery\";\nimport { fileURLToPath } from \"node:url\";\n//#region src/ignore-guard-plugin.ts\nfunction toPosix$1(path) {\n\treturn path.split(sep).join(\"/\");\n}\nfunction projectRelativePath(root, filePath) {\n\treturn toPosix$1(relative(root, normalizeBuildFilePath(filePath)));\n}\n/** Normalize paths so /var and /private/var compare equal on macOS. */\nfunction normalizeBuildFilePath(filePath) {\n\tconst absolute = resolve(filePath);\n\ttry {\n\t\treturn realpathSync.native(absolute);\n\t} catch {\n\t\treturn absolute;\n\t}\n}\nfunction normalizeModuleId(id, root) {\n\tif (id.startsWith(\"\\0\")) return null;\n\tconst normalized = normalizeBuildFilePath(id.startsWith(\"file://\") ? fileURLToPath(id) : id);\n\tif (!normalized.startsWith(normalizeBuildFilePath(root))) return null;\n\treturn normalized;\n}\nfunction formatImportGuardError(root, ignoredPath, importer) {\n\tconst ignored = projectRelativePath(root, ignoredPath);\n\tif (importer) return `Cannot import \"${ignored}\" (@keystroke ignore) from \"${projectRelativePath(root, importer)}\". Remove the directive or stop importing it from a shipped module.`;\n\treturn `Cannot import \"${ignored}\" (@keystroke ignore). Remove the directive or stop importing it from a shipped module.`;\n}\n/** Throw when a built module imports a `@keystroke ignore` source file. */\nfunction keystrokeIgnoreGuardPlugin(options) {\n\tconst root = normalizeBuildFilePath(options.root);\n\tconst ignoredFiles = new Set(options.ignoredFiles.map((filePath) => normalizeBuildFilePath(filePath)));\n\tfunction assertNotIgnored(filePath, importer) {\n\t\tconst normalized = normalizeBuildFilePath(filePath);\n\t\tif (!ignoredFiles.has(normalized)) return;\n\t\tthrow new Error(formatImportGuardError(root, normalized, importer));\n\t}\n\treturn {\n\t\tname: \"keystroke-ignore-guard\",\n\t\tasync resolveId(source, importer, resolveOptions) {\n\t\t\tif (resolveOptions?.isEntry || !importer) return null;\n\t\t\tconst resolved = await this.resolve(source, importer, {\n\t\t\t\t...resolveOptions,\n\t\t\t\tskipSelf: true\n\t\t\t});\n\t\t\tif (!resolved) return null;\n\t\t\tassertNotIgnored(typeof resolved === \"string\" ? resolved : resolved.id, importer);\n\t\t\treturn null;\n\t\t},\n\t\tload(id) {\n\t\t\tconst normalized = normalizeModuleId(id, root);\n\t\t\tif (!normalized) return null;\n\t\t\tassertNotIgnored(normalized);\n\t\t\treturn null;\n\t\t}\n\t};\n}\n//#endregion\n//#region src/walk-project.ts\nconst IGNORED_DIRS = new Set([\n\t\"node_modules\",\n\t\"dist\",\n\t\".git\",\n\t\".turbo\",\n\t\"build\",\n\t\"coverage\",\n\t\".keystroke\",\n\t\".cache\",\n\t\"tmp\"\n]);\nconst IGNORED_ENV_FILE = /\\.env/;\nconst IGNORED_LOG_FILE = /\\.log$/;\nfunction isIgnoredFile(name) {\n\treturn IGNORED_ENV_FILE.test(name) || IGNORED_LOG_FILE.test(name);\n}\nfunction toPosix(path) {\n\treturn path.split(sep).join(\"/\");\n}\nfunction isProbablyBinary(buffer) {\n\tconst sampleLength = Math.min(buffer.length, 8e3);\n\tfor (let index = 0; index < sampleLength; index += 1) if (buffer[index] === 0) return true;\n\treturn false;\n}\nfunction classifyBuildEntry(root, srcRoot, filePath) {\n\tconst relativePath = toPosix(relative(root, filePath));\n\tconst agentsPrefix = `${toPosix(relative(root, join(srcRoot, \"agents\")))}/`;\n\tconst workflowsPrefix = `${toPosix(relative(root, join(srcRoot, \"workflows\")))}/`;\n\tconst triggersPrefix = `${toPosix(relative(root, join(srcRoot, \"triggers\")))}/`;\n\tconst actionsPrefix = `${toPosix(relative(root, join(srcRoot, \"actions\")))}/`;\n\tif (relativePath.startsWith(agentsPrefix) && /\\.(ts|mts)$/.test(relativePath) && !/\\.(int\\.)?test\\.(ts|mts)$/.test(relativePath)) {\n\t\tconst id = entryIdFromFile(join(srcRoot, \"agents\"), filePath, { nestedEntry: \"agent\" });\n\t\treturn id ? {\n\t\t\tentryKey: `agents/${id}`,\n\t\t\tentryPath: filePath\n\t\t} : null;\n\t}\n\tif (relativePath.startsWith(actionsPrefix) && /\\.(ts|mts)$/.test(relativePath) && !/\\.(int\\.)?test\\.(ts|mts)$/.test(relativePath)) {\n\t\tconst id = entryIdFromFile(join(srcRoot, \"actions\"), filePath, { nestedEntry: \"action\" });\n\t\treturn id ? {\n\t\t\tentryKey: `actions/${id}`,\n\t\t\tentryPath: filePath\n\t\t} : null;\n\t}\n\tif (relativePath.startsWith(workflowsPrefix) && /\\.(ts|mts)$/.test(relativePath) && !/\\.(int\\.)?test\\.(ts|mts)$/.test(relativePath)) {\n\t\tconst id = entryIdFromFile(join(srcRoot, \"workflows\"), filePath, { nestedEntry: \"workflow\" });\n\t\treturn id ? {\n\t\t\tentryKey: `workflows/${id}`,\n\t\t\tentryPath: filePath\n\t\t} : null;\n\t}\n\tif (relativePath.startsWith(triggersPrefix) && /\\.(ts|mts)$/.test(relativePath) && !/\\.(int\\.)?test\\.(ts|mts)$/.test(relativePath)) {\n\t\tconst id = entryIdFromFile(join(srcRoot, \"triggers\"), filePath, { nestedEntry: \"trigger\" });\n\t\treturn id ? {\n\t\t\tentryKey: `triggers/${id}`,\n\t\t\tentryPath: filePath\n\t\t} : null;\n\t}\n\treturn null;\n}\nfunction shouldSkipIgnoredModule(filePath, phase) {\n\treturn shouldSkipKeystrokeModuleFile(readKeystrokeIgnoreDirective(filePath), phase);\n}\nfunction isSrcTypeScriptFile(srcRoot, filePath) {\n\tconst relativePath = toPosix(relative(srcRoot, filePath));\n\tif (relativePath.startsWith(\"..\")) return false;\n\treturn /\\.(ts|mts)$/.test(relativePath);\n}\nfunction walkTree(root, dir, srcRoot, phase, collectSources, sourceFiles, buildEntries, ignoredFiles, totals) {\n\tfor (const name of readdirSync(dir).sort()) {\n\t\tif (collectSources && (sourceFiles.length >= 2e3 || totals.bytes >= 8388608)) return;\n\t\tconst absolute = join(dir, name);\n\t\tconst stats = statSync(absolute);\n\t\tif (stats.isDirectory()) {\n\t\t\tif (IGNORED_DIRS.has(name)) continue;\n\t\t\twalkTree(root, absolute, srcRoot, phase, collectSources, sourceFiles, buildEntries, ignoredFiles, totals);\n\t\t\tcontinue;\n\t\t}\n\t\tif (!stats.isFile()) continue;\n\t\tconst isUnderSrc = isSrcTypeScriptFile(srcRoot, absolute);\n\t\tconst skipIgnored = isUnderSrc ? shouldSkipIgnoredModule(absolute, phase) : false;\n\t\tif (isUnderSrc && skipIgnored) ignoredFiles.push(normalizeBuildFilePath(absolute));\n\t\tconst buildEntry = classifyBuildEntry(root, srcRoot, absolute);\n\t\tif (buildEntry && !skipIgnored) buildEntries[buildEntry.entryKey] = buildEntry.entryPath;\n\t\tif (!collectSources) continue;\n\t\tif (stats.size > 262144 || isIgnoredFile(name)) continue;\n\t\tconst buffer = readFileSync(absolute);\n\t\tif (isProbablyBinary(buffer)) continue;\n\t\ttotals.bytes += buffer.byteLength;\n\t\tsourceFiles.push({\n\t\t\tpath: toPosix(relative(root, absolute)),\n\t\t\tcontents: buffer.toString(\"utf8\"),\n\t\t\thash: createHash(\"sha256\").update(buffer).digest(\"hex\")\n\t\t});\n\t}\n}\n/**\n* One full-tree walk of the project: classifies tsdown entries and optionally\n* collects deploy source files (path + contents + hash) under snapshot limits.\n*/\nfunction walkProject(root, srcDirOrOptions = \"src\", maybeOptions) {\n\tconst srcDir = typeof srcDirOrOptions === \"string\" ? srcDirOrOptions : srcDirOrOptions.srcDir ?? \"src\";\n\tconst options = typeof srcDirOrOptions === \"string\" ? maybeOptions ?? {} : srcDirOrOptions;\n\tconst collectSources = options.collectSources ?? false;\n\tconst phase = options.phase ?? \"build\";\n\tconst sourceFiles = [];\n\tconst buildEntries = {};\n\tconst ignoredFiles = [];\n\twalkTree(root, root, join(root, srcDir), phase, collectSources, sourceFiles, buildEntries, ignoredFiles, { bytes: 0 });\n\treturn {\n\t\tsourceFiles,\n\t\tbuildEntries,\n\t\tignoredFiles\n\t};\n}\n//#endregion\nexport { keystrokeIgnoreGuardPlugin as n, walkProject as t };\n\n//# sourceMappingURL=walk-project-eIHZ7A1f.mjs.map","import { isBuiltin } from \"node:module\";\n\n/** Native addons kept external — resolved from the CLI runtime at app start. */\nexport const NATIVE_RUNTIME_DEPS = [\"pg\", \"better-sqlite3\", \"@parcel/watcher\"];\n\n/**\n * Framework/runtime `@keystrokehq/*` shipped in the project-server image, so user-app builds\n * keep them external and resolve them from the runtime at boot. Everything else under the scope\n * (Composio catalog integrations like `@keystrokehq/posthog`, …) is bundled into the artifact.\n *\n * This set MUST equal the `@keystrokehq/*` dependency closure of `@keystrokehq/project-runtime`\n * (the deploy image) — `deps.test.ts` enforces it. To change what stays external, change what the\n * runtime image depends on; do not edit this list by hand. `exa` is the only integration\n * package the framework imports directly (web search); `gateway` ships Slack and other channel\n * adapters in the runtime image.\n */\nexport const RUNTIME_KEYSTROKE_PACKAGES = new Set([\n \"access-control\",\n \"action\",\n \"agent\",\n \"app\",\n \"auth\",\n \"build\",\n \"config\",\n \"credentials\",\n \"database\",\n \"exa\",\n \"gateway\",\n \"hosting\",\n \"http\",\n \"keystroke\",\n \"manifest\",\n \"mcp\",\n \"memory\",\n \"oauth\",\n \"platform-database\",\n \"project-runtime\",\n \"projects\",\n \"runtime\",\n \"sandbox\",\n \"scheduler\",\n \"sdk\",\n \"secrets\",\n \"shared\",\n \"storage\",\n \"telemetry\",\n \"tracing\",\n \"trigger\",\n \"tsdown-config\",\n \"web-search\",\n \"worker\",\n \"workflow\",\n \"workflow-canvas\",\n]);\n\n/** Matches framework/runtime `@keystrokehq/*` kept external during user-app builds. */\nexport const FRAMEWORK_KEYSTROKE_EXTERNAL = new RegExp(\n `^@keystrokehq\\\\/(?:${[...RUNTIME_KEYSTROKE_PACKAGES].sort().join(\"|\")})(?:\\\\/|$)`,\n);\n\nfunction keystrokePackageName(name) {\n if (!name.startsWith(\"@keystrokehq/\")) {\n return null;\n }\n\n return name.slice(\"@keystrokehq/\".length).split(\"/\")[0] ?? null;\n}\n\nfunction isRuntimeKeystrokePackage(name) {\n const pkg = keystrokePackageName(name);\n return pkg !== null && RUNTIME_KEYSTROKE_PACKAGES.has(pkg);\n}\n\n/**\n * Kept external so .d.ts emission does not inline internal/inferred types.\n *\n * `typescript` is external because the TS compiler cannot be cleanly bundled into\n * ESM — it mixes `require()`/`__filename` with top-level await, which Node rejects\n * with `ERR_AMBIGUOUS_MODULE_SYNTAX` on load. Packages that use the compiler\n * (`workflow-canvas`, `manifest`, `build`) declare it as a dependency, so it\n * resolves from `node_modules` at runtime instead of being inlined.\n */\nexport const LIBRARY_EXTERNAL_DEPS = [\n \"better-auth\",\n /^@better-auth\\//,\n /^better-auth\\//,\n \"typescript\",\n];\n\n/** Non-auth runtime deps kept external for published entry bundles (platform, etc.). */\nexport const BUNDLED_ENTRY_RUNTIME_EXTERNAL_DEPS = [\n ...NATIVE_RUNTIME_DEPS,\n \"dockerode\",\n \"ssh2\",\n \"cpu-features\",\n \"microsandbox\",\n /^@aws-sdk\\//,\n /^@napi-rs\\//,\n \"hono\",\n /^@hono\\//,\n \"undici\",\n];\n\n/** Kept external when bundling published entry points (cli, keystroke, platform). */\nexport const BUNDLED_ENTRY_EXTERNAL_DEPS = [\n ...BUNDLED_ENTRY_RUNTIME_EXTERNAL_DEPS,\n ...LIBRARY_EXTERNAL_DEPS,\n];\n\n/** Bundle into CLI — device login uses Better Auth client only. */\nexport const BETTER_AUTH_CLIENT_BUNDLE_PATTERNS = [\n /^better-auth\\/client$/,\n /^better-auth\\/client\\//,\n];\n\n/** Server adapters and root entry — must not ship in the CLI bundle. */\nexport const BETTER_AUTH_SERVER_EXTERNAL_PATTERNS = [\n /^better-auth$/,\n /^@better-auth\\//,\n /^better-auth\\/(?!client(\\/|$)).+/,\n];\n\nexport function isNativeRuntimeDep(id) {\n return NATIVE_RUNTIME_DEPS.some((dep) => id === dep || id.startsWith(`${dep}/`));\n}\n\nfunction packageName(id) {\n if (id.startsWith(\"@\")) {\n const [scope, name] = id.split(\"/\");\n return name ? `${scope}/${name}` : id;\n }\n\n return id.split(\"/\")[0] ?? id;\n}\n\nfunction isRuntimeExternal(id) {\n const name = packageName(id);\n if (isNativeRuntimeDep(name)) {\n return true;\n }\n\n if (name.startsWith(\"@keystrokehq/\")) {\n return isRuntimeKeystrokePackage(name);\n }\n\n if (name === \"better-auth\" || name.startsWith(\"@better-auth/\")) {\n return true;\n }\n\n return false;\n}\n\n/** Library packages resolve npm deps from node_modules at runtime. */\nexport function libraryBuildDepsConfig() {\n return {\n alwaysBundle: (_id) => null,\n neverBundle: [...NATIVE_RUNTIME_DEPS, /^@keystrokehq\\//, ...LIBRARY_EXTERNAL_DEPS],\n onlyBundle: false,\n };\n}\n\n/** Bundle npm deps into dist; resolve @keystrokehq/* and natives from the runtime. */\nexport function userAppBuildDepsConfig() {\n return {\n alwaysBundle: (id, _importer) => {\n if (id.startsWith(\".\") || id.startsWith(\"/\") || isBuiltin(id)) {\n return null;\n }\n\n return isRuntimeExternal(id) ? null : true;\n },\n neverBundle: [...NATIVE_RUNTIME_DEPS, FRAMEWORK_KEYSTROKE_EXTERNAL, ...LIBRARY_EXTERNAL_DEPS],\n onlyBundle: false,\n };\n}\n\n/**\n * Published entry packages (cli, keystroke, platform): declare bundled @keystrokehq/*\n * in dependencies (changesets release graph ignores devDependencies). Inlining is\n * driven by alwaysBundle below, not by dep kind. Runtime npm deps stay external.\n */\nexport function bundledEntryDepsConfig() {\n return {\n alwaysBundle: [/^@keystrokehq\\//],\n neverBundle: [...BUNDLED_ENTRY_EXTERNAL_DEPS],\n onlyBundle: false,\n };\n}\n\n/** Published CLI: inline better-auth client + @better-auth/*; keep server adapters external. */\nexport const BETTER_AUTH_CLI_BUNDLE_PATTERNS = [\n ...BETTER_AUTH_CLIENT_BUNDLE_PATTERNS,\n /^@better-auth\\//,\n];\n\nexport const BETTER_AUTH_CLI_EXTERNAL_PATTERNS = [\n /^better-auth$/,\n /^better-auth\\/(?!client(\\/|$)).+/,\n /^@better-auth\\/drizzle-adapter/,\n \"drizzle-orm\",\n];\n\n/** Rolldown/tsdown — native bindings; stay in CLI node_modules at runtime. */\nexport const CLI_BUILD_TOOL_EXTERNAL_PATTERNS = [\"tsdown\", \"rolldown\", /^@rolldown\\//, \"tsx\"];\n\n/** CLI: inline better-auth/client; keep server + drizzle adapters external. */\nexport function cliBundledEntryDepsConfig() {\n return {\n alwaysBundle: [/^@keystrokehq\\//, ...BETTER_AUTH_CLI_BUNDLE_PATTERNS],\n neverBundle: [\n ...BUNDLED_ENTRY_RUNTIME_EXTERNAL_DEPS,\n ...BETTER_AUTH_CLI_EXTERNAL_PATTERNS,\n ...CLI_BUILD_TOOL_EXTERNAL_PATTERNS,\n // The TS compiler cannot be inlined into ESM (`require`/`__filename` + top-level\n // await → `__filename is not defined` / `ERR_AMBIGUOUS_MODULE_SYNTAX` on load).\n // The CLI inlines the @keystrokehq/* packages that use it (build, manifest,\n // workflow-canvas), so `typescript` must resolve from the CLI's own node_modules —\n // hence it is also a runtime dependency of @keystrokehq/cli.\n \"typescript\",\n ],\n onlyBundle: false,\n };\n}\n","import { bundledEntryDepsConfig, libraryBuildDepsConfig } from \"./deps.js\";\n\nexport {\n isNativeRuntimeDep,\n NATIVE_RUNTIME_DEPS,\n bundledEntryDepsConfig,\n cliBundledEntryDepsConfig,\n libraryBuildDepsConfig,\n userAppBuildDepsConfig,\n} from \"./deps.js\";\n\nexport const baseTsdownConfig = {\n format: [\"esm\", \"cjs\"],\n dts: true,\n clean: true,\n sourcemap: true,\n target: \"node20\",\n deps: libraryBuildDepsConfig(),\n};\n\n/** tsdown config for published bundles (cli, keystroke, platform). */\nexport const bundledEntryTsdownConfig = {\n format: [\"esm\", \"cjs\"],\n dts: true,\n clean: true,\n sourcemap: true,\n target: \"node20\",\n deps: bundledEntryDepsConfig(),\n};\n","import { n as keystrokeIgnoreGuardPlugin, t as walkProject } from \"./walk-project-eIHZ7A1f.mjs\";\nimport { t as resolveModuleDirs } from \"./resolve-module-dirs-BPHQhRGy.mjs\";\nimport { existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, rmSync, statSync, writeFileSync } from \"node:fs\";\nimport { dirname, join, relative, sep } from \"node:path\";\nimport { packAssetDirs } from \"@keystrokehq/sandbox/files\";\nimport { baseTsdownConfig, userAppBuildDepsConfig } from \"@keystrokehq/tsdown-config\";\nimport { build, mergeConfig } from \"tsdown\";\nimport { classifyCall, computeCallSiteIds, diagnoseWorkflowSource, locateWorkflow } from \"@keystrokehq/workflow-canvas\";\nimport ts from \"typescript\";\nimport { buildStoredRouteManifestForProject } from \"@keystrokehq/manifest\";\n//#region src/inject-call-site-ids.ts\n/**\n* Build-time injection of the deterministic structural `callSiteId` into every\n* durable step call in a workflow source file, so the runtime emits\n* `step:<callSiteId>#<occurrence>` correlation ids (and `step:<callSiteId>`\n* credential consumer ids) that line up 1:1 with the canvas graph nodes the\n* deploy-time producer mints from the same source. There is no user-authored\n* step id — identity is entirely internal and injected here.\n*\n* Injection shape by kind (the `callSiteId` is the same id `computeCallSiteIds`\n* returns, which equals the producer's step-node id):\n* - action/sub-workflow `x.run(i)` → `x.run(i).__site(\"<id>\")` (builder method)\n* - agent `a.prompt(i, opts?)` → `__site` merged into the prompt options\n* - llm `promptLlm(i, opts?)` → `__site` merged into the options\n* - hook `ctx.hook(opts?)` → `__site` merged into the options\n* - sleep `ctx.sleep(d, opts?)` → `__site` merged into a second options arg\n*/\nfunction injectCallSiteIds(code, fileName) {\n\tconst sourceFile = ts.createSourceFile(fileName, code, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n\tconst located = locateWorkflow(sourceFile);\n\tif (!located) return code;\n\tconst ids = computeCallSiteIds(sourceFile);\n\tif (ids.size === 0) return code;\n\tconst edits = [];\n\tfor (const [node, id] of ids) {\n\t\tconst info = classifyCall(node, located.ctxParamName);\n\t\tif (!info) continue;\n\t\tif (info.callKind === \"workflow-step\") {\n\t\t\tedits.push({\n\t\t\t\tpos: node.getEnd(),\n\t\t\t\ttext: `.__site(${JSON.stringify(id)})`\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (info.callKind === \"agent\" || info.callKind === \"llm\") {\n\t\t\tpushOptionsEdit(edits, node, id);\n\t\t\tcontinue;\n\t\t}\n\t\tif (info.callKind === \"hook\") {\n\t\t\tpushHookOptionsEdit(edits, node, id);\n\t\t\tcontinue;\n\t\t}\n\t\tif (info.callKind === \"wait\") pushSleepOptionsEdit(edits, node, id);\n\t}\n\tif (edits.length === 0) return code;\n\tedits.sort((a, b) => b.pos - a.pos);\n\tlet out = code;\n\tfor (const edit of edits) out = out.slice(0, edit.pos) + edit.text + out.slice(edit.pos);\n\treturn out;\n}\n/**\n* Merge `__site: \"<id>\"` into a call's options argument (agents / promptLlm).\n* - no 2nd arg → append `, { __site: \"id\" }`\n* - 2nd arg object literal → insert `__site: \"id\", ` after its `{`\n* - 2nd arg anything else → wrap as `{ ...orig, __site: \"id\" }`\n*/\nfunction pushOptionsEdit(edits, call, id) {\n\tconst literal = JSON.stringify(id);\n\tconst optionsArg = call.arguments[1];\n\tif (!optionsArg) {\n\t\tconst firstArg = call.arguments[0];\n\t\tconst insertAt = firstArg ? firstArg.getEnd() : call.getEnd() - 1;\n\t\tedits.push({\n\t\t\tpos: insertAt,\n\t\t\ttext: `, { __site: ${literal} }`\n\t\t});\n\t\treturn;\n\t}\n\tif (ts.isObjectLiteralExpression(optionsArg)) {\n\t\tedits.push({\n\t\t\tpos: optionsArg.getStart() + 1,\n\t\t\ttext: ` __site: ${literal},`\n\t\t});\n\t\treturn;\n\t}\n\tedits.push({\n\t\tpos: optionsArg.getStart(),\n\t\ttext: \"{ ...\"\n\t});\n\tedits.push({\n\t\tpos: optionsArg.getEnd(),\n\t\ttext: `, __site: ${literal} }`\n\t});\n}\n/** Merge `__site` into `ctx.hook(opts?)` — options are the first (only) argument. */\nfunction pushHookOptionsEdit(edits, call, id) {\n\tconst literal = JSON.stringify(id);\n\tconst optionsArg = call.arguments[0];\n\tif (!optionsArg) {\n\t\tedits.push({\n\t\t\tpos: call.getEnd() - 1,\n\t\t\ttext: `{ __site: ${literal} }`\n\t\t});\n\t\treturn;\n\t}\n\tif (ts.isObjectLiteralExpression(optionsArg)) {\n\t\tedits.push({\n\t\t\tpos: optionsArg.getStart() + 1,\n\t\t\ttext: ` __site: ${literal},`\n\t\t});\n\t\treturn;\n\t}\n\tedits.push({\n\t\tpos: optionsArg.getStart(),\n\t\ttext: \"{ ...\"\n\t});\n\tedits.push({\n\t\tpos: optionsArg.getEnd(),\n\t\ttext: `, __site: ${literal} }`\n\t});\n}\n/** Append `{ __site }` as the second arg to `ctx.sleep(duration)`. */\nfunction pushSleepOptionsEdit(edits, call, id) {\n\tconst literal = JSON.stringify(id);\n\tconst durationArg = call.arguments[0];\n\tconst insertAt = durationArg ? durationArg.getEnd() : call.getEnd() - 1;\n\tedits.push({\n\t\tpos: insertAt,\n\t\ttext: `, { __site: ${literal} }`\n\t});\n}\nfunction toPosix$2(path) {\n\treturn path.split(sep).join(\"/\");\n}\n/**\n* Rolldown plugin that runs {@link injectCallSiteIds} over workflow source files\n* (and their same-file helpers) before transpile. Scoped to `src/workflows/` so\n* non-workflow modules are untouched; cross-file helpers stay unkeyed by design.\n*/\nfunction callSiteIdInjectionPlugin(options) {\n\tconst srcDir = options.srcDir ?? \"src\";\n\tconst workflowsPrefix = toPosix$2(`${options.root}/${srcDir}/workflows/`);\n\treturn {\n\t\tname: \"keystroke-call-site-ids\",\n\t\ttransform(code, id) {\n\t\t\tconst normalized = toPosix$2(id);\n\t\t\tif (!normalized.startsWith(workflowsPrefix) || !normalized.endsWith(\".ts\")) return null;\n\t\t\tconst transformed = injectCallSiteIds(code, normalized);\n\t\t\treturn transformed === code ? null : {\n\t\t\t\tcode: transformed,\n\t\t\t\tmap: null\n\t\t\t};\n\t\t}\n\t};\n}\n//#endregion\n//#region src/workflow-diagnostics.ts\nconst TEST_FILE = /\\.(test|int\\.test|spec)\\.ts$/;\nfunction toPosix$1(path) {\n\treturn path.split(sep).join(\"/\");\n}\nfunction collectTsFiles(dir, out) {\n\tlet entries;\n\ttry {\n\t\tentries = readdirSync(dir);\n\t} catch {\n\t\treturn;\n\t}\n\tfor (const entry of entries) {\n\t\tif (entry === \"node_modules\" || entry.startsWith(\".\")) continue;\n\t\tconst full = join(dir, entry);\n\t\tif (statSync(full).isDirectory()) {\n\t\t\tcollectTsFiles(full, out);\n\t\t\tcontinue;\n\t\t}\n\t\tif (entry.endsWith(\".ts\") && !TEST_FILE.test(entry)) out.push(full);\n\t}\n}\n/**\n* Run the workflow-canvas reliability checks over every `src/**` module. Errors\n* (steps outside a workflow, steps nested as call arguments) block the build;\n* warnings (opaque code-blocks, dropped spread inputs) explain each degraded\n* construct. Best-effort per-file: an unparseable file is skipped, never fatal.\n*/\nfunction collectWorkflowDiagnostics(root, srcDir = \"src\") {\n\tconst srcRoot = join(root, srcDir);\n\tif (!existsSync(srcRoot)) return [];\n\tconst files = [];\n\tcollectTsFiles(srcRoot, files);\n\tconst diagnostics = [];\n\tfor (const file of files) {\n\t\tconst rel = toPosix$1(relative(root, file));\n\t\ttry {\n\t\t\tconst source = readFileSync(file, \"utf8\");\n\t\t\tdiagnostics.push(...diagnoseWorkflowSource(source, rel));\n\t\t} catch {}\n\t}\n\treturn diagnostics;\n}\nfunction formatDiagnostic(diagnostic) {\n\treturn ` ${diagnostic.line !== void 0 ? `${diagnostic.fileName}:${diagnostic.line}:${diagnostic.column ?? 1}` : diagnostic.fileName}\\n ${diagnostic.message}`;\n}\n/** Throw when any blocking (error-severity) diagnostic is found. */\nfunction assertWorkflowDiagnosticErrorsFrom(diagnostics) {\n\tconst errors = diagnostics.filter((d) => d.severity === \"error\");\n\tif (errors.length > 0) throw new Error(`Workflow canvas: ${errors.length} unsupported construct(s) must be fixed before deploy:\\n${errors.map(formatDiagnostic).join(\"\\n\")}\\n`);\n}\n/** Print soft (warning-severity) diagnostics after a successful build. */\nfunction warnWorkflowDiagnosticsFrom(diagnostics) {\n\tconst warnings = diagnostics.filter((d) => d.severity === \"warning\");\n\tif (warnings.length > 0) console.warn(`\\n⚠ Workflow canvas: ${warnings.length} construct(s) will render as a degraded (opaque) canvas:\\n${warnings.map(formatDiagnostic).join(\"\\n\")}\\n`);\n}\n/** Throw when any blocking (error-severity) diagnostic is found. Run before building. */\nfunction assertWorkflowDiagnosticErrors(root, srcDir = \"src\") {\n\tassertWorkflowDiagnosticErrorsFrom(collectWorkflowDiagnostics(root, srcDir));\n}\n/** Print soft (warning-severity) diagnostics after a successful build. */\nfunction warnWorkflowDiagnostics(root, srcDir = \"src\") {\n\twarnWorkflowDiagnosticsFrom(collectWorkflowDiagnostics(root, srcDir));\n}\n/**\n* Collect diagnostics, print warnings, and throw a formatted error when any\n* blocking (error-severity) diagnostic is found.\n*\n* @deprecated Prefer {@link assertWorkflowDiagnosticErrors} before build and\n* {@link warnWorkflowDiagnostics} after build so warnings appear below build logs.\n*/\nfunction assertWorkflowDiagnostics(root, srcDir = \"src\") {\n\tconst diagnostics = collectWorkflowDiagnostics(root, srcDir);\n\tassertWorkflowDiagnosticErrorsFrom(diagnostics);\n\twarnWorkflowDiagnosticsFrom(diagnostics);\n}\n//#endregion\n//#region src/resolve-runtime-artifact.ts\nfunction packageRoot(nodeModules, scope, name) {\n\tconst direct = scope ? join(nodeModules, scope, name) : join(nodeModules, name);\n\tif (existsSync(join(direct, \"package.json\"))) return direct;\n\tconst pnpmDir = join(nodeModules, \".pnpm\");\n\tif (!existsSync(pnpmDir)) return null;\n\tfor (const entry of readdirSync(pnpmDir)) {\n\t\tconst candidate = scope ? join(pnpmDir, entry, \"node_modules\", scope, name) : join(pnpmDir, entry, \"node_modules\", name);\n\t\tif (existsSync(join(candidate, \"package.json\"))) return candidate;\n\t}\n\treturn null;\n}\n/** Resolve a file shipped with `@keystrokehq/build` inside the CLI runtime. */\nfunction resolveRuntimeBuildArtifact(runtimeNodeModules, relativePath) {\n\tconst pkgRoot = packageRoot(runtimeNodeModules, \"@keystrokehq\", \"build\");\n\tif (!pkgRoot) throw new Error(\"Keystroke runtime is missing @keystrokehq/build\");\n\tconst artifact = join(pkgRoot, relativePath);\n\tif (!existsSync(artifact)) throw new Error(`Keystroke runtime artifact not found: ${relativePath}`);\n\treturn artifact;\n}\n//#endregion\n//#region src/vitest-plugin.ts\nconst ASSETS_MODULE$1 = \"@keystrokehq/assets\";\nconst virtualPrefix = `\\0${ASSETS_MODULE$1}:`;\n/** Vitest plugin resolving `@keystrokehq/assets` from disk. */\nfunction agentAssetsVitestPlugin(appRoot = process.cwd()) {\n\tlet manifest = null;\n\treturn {\n\t\tname: \"keystroke-assets\",\n\t\tresolveId(source) {\n\t\t\tif (source !== ASSETS_MODULE$1) return null;\n\t\t\treturn `${virtualPrefix}manifest`;\n\t\t},\n\t\tload(id) {\n\t\t\tif (id !== `${virtualPrefix}manifest`) return null;\n\t\t\tmanifest ??= packAssetDirs(appRoot);\n\t\t\treturn `export default ${JSON.stringify(manifest)};`;\n\t\t}\n\t};\n}\nfunction findAppRootFromConfig(configFile) {\n\tif (!configFile) return process.cwd();\n\treturn dirname(configFile);\n}\nfunction agentAssetsVitestPluginFromConfig(configFile) {\n\treturn agentAssetsVitestPlugin(findAppRootFromConfig(configFile));\n}\n//#endregion\n//#region src/resolve-build-filter.ts\n/** Resolve exact build-entry keys for a filtered deploy build. */\nfunction resolveBuildFilter(filter, buildEntries) {\n\tif (filter.length === 0) throw new Error(\"At least one --filter entry is required\");\n\tconst matched = {};\n\tfor (const key of [...new Set(filter)]) {\n\t\tconst entryPath = buildEntries[key];\n\t\tif (!entryPath) throw new Error(`Unknown build entry \"${key}\". Use keys like agents/foo or workflows/bar from walkProject.`);\n\t\tmatched[key] = entryPath;\n\t}\n\treturn matched;\n}\n//#endregion\n//#region src/build-filtered.ts\nfunction toPosix(path) {\n\treturn path.replace(/\\\\/g, \"/\");\n}\nfunction distRelativePath(entryKey) {\n\treturn `${entryKey}.mjs`;\n}\nasync function buildSingleEntry(root, entryKey, entryPath, ignoredFiles) {\n\tmkdirSync(join(root, \".keystroke\"), { recursive: true });\n\tconst scratchRoot = mkdtempSync(join(root, \".keystroke\", \"filter-build-\"));\n\tconst outDir = join(scratchRoot, \"dist\");\n\tconst relativePath = distRelativePath(entryKey);\n\tawait build(mergeConfig(baseTsdownConfig, {\n\t\tentry: { [entryKey]: entryPath },\n\t\tformat: [\"esm\"],\n\t\toutDir,\n\t\tclean: true,\n\t\tdts: false,\n\t\tloader: { \".md\": \"text\" },\n\t\tdeps: userAppBuildDepsConfig(),\n\t\tplugins: [keystrokeIgnoreGuardPlugin({\n\t\t\troot,\n\t\t\tignoredFiles\n\t\t})]\n\t}));\n\treturn {\n\t\tscratchRoot,\n\t\trelativePath\n\t};\n}\nasync function manifestEntriesForBuiltModule(root, entryPath, relativePath, contents, sourceMap) {\n\tconst moduleFile = toPosix(relative(root, entryPath));\n\tconst distPath = join(root, \"dist\", relativePath);\n\tconst distMapPath = `${distPath}.map`;\n\tconst previousDist = existsSync(distPath) ? readFileSync(distPath) : void 0;\n\tconst hadMap = existsSync(distMapPath);\n\tconst previousMap = hadMap ? readFileSync(distMapPath) : void 0;\n\tmkdirSync(dirname(distPath), { recursive: true });\n\twriteFileSync(distPath, contents);\n\tif (sourceMap) writeFileSync(distMapPath, sourceMap);\n\ttry {\n\t\treturn (await buildStoredRouteManifestForProject(root, { reloadModules: true })).entries.filter((entry) => \"moduleFile\" in entry && entry.moduleFile === moduleFile);\n\t} finally {\n\t\tif (previousDist) writeFileSync(distPath, previousDist);\n\t\telse rmSync(distPath, { force: true });\n\t\tif (previousMap) writeFileSync(distMapPath, previousMap);\n\t\telse if (sourceMap || hadMap) rmSync(distMapPath, { force: true });\n\t}\n}\n/** Build selected modules in isolation for a filtered deploy merge. */\nasync function buildFilteredApp(options) {\n\tconst root = options.root ?? process.cwd();\n\tconst srcDir = options.srcDir ?? \"src\";\n\tconst phase = options.phase ?? \"deploy\";\n\tconst collectSources = options.collectSources ?? false;\n\tconst previous = process.cwd();\n\tconst workflowDiagnostics = collectWorkflowDiagnostics(root, srcDir);\n\tassertWorkflowDiagnosticErrorsFrom(workflowDiagnostics);\n\tconst walked = walkProject(root, {\n\t\tsrcDir,\n\t\tcollectSources,\n\t\tphase\n\t});\n\tconst matched = resolveBuildFilter(options.filter, walked.buildEntries);\n\tconst files = [];\n\tconst manifestEntries = [];\n\ttry {\n\t\tprocess.chdir(root);\n\t\tfor (const [entryKey, entryPath] of Object.entries(matched)) {\n\t\t\tconst { scratchRoot, relativePath } = await buildSingleEntry(root, entryKey, entryPath, walked.ignoredFiles);\n\t\t\ttry {\n\t\t\t\tconst builtPath = join(scratchRoot, \"dist\", relativePath);\n\t\t\t\tconst mapPath = `${builtPath}.map`;\n\t\t\t\tconst contents = readFileSync(builtPath);\n\t\t\t\tconst sourceMap = existsSync(mapPath) ? readFileSync(mapPath) : void 0;\n\t\t\t\tfiles.push({\n\t\t\t\t\tentryKey,\n\t\t\t\t\trelativePath,\n\t\t\t\t\tcontents,\n\t\t\t\t\tsourceMap\n\t\t\t\t});\n\t\t\t\tmanifestEntries.push(...await manifestEntriesForBuiltModule(root, entryPath, relativePath, contents, sourceMap));\n\t\t\t} finally {\n\t\t\t\trmSync(scratchRoot, {\n\t\t\t\t\trecursive: true,\n\t\t\t\t\tforce: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t} finally {\n\t\twarnWorkflowDiagnosticsFrom(workflowDiagnostics);\n\t\tprocess.chdir(previous);\n\t}\n\treturn {\n\t\tfiles,\n\t\tmanifestEntries,\n\t\tsourceFiles: walked.sourceFiles\n\t};\n}\n//#endregion\n//#region src/index.ts\nconst ASSETS_MODULE = \"@keystrokehq/assets\";\nconst VIRTUAL_PREFIX = `\\0${ASSETS_MODULE}:`;\nfunction renderAssetModule(manifest) {\n\treturn `export default ${JSON.stringify(manifest)};\\n`;\n}\n/** Rolldown plugin: pack src/skills + src/files and expose `@keystrokehq/assets`. */\nfunction agentAssetsPlugin(options) {\n\tconst srcDir = options.srcDir ?? \"src\";\n\tlet manifest = null;\n\treturn {\n\t\tname: \"keystroke-assets\",\n\t\tbuildStart() {\n\t\t\tmanifest = packAssetDirs(options.root, srcDir);\n\t\t},\n\t\tresolveId(source) {\n\t\t\tif (source !== ASSETS_MODULE) return null;\n\t\t\treturn `${VIRTUAL_PREFIX}manifest`;\n\t\t},\n\t\tload(id) {\n\t\t\tif (id !== `${VIRTUAL_PREFIX}manifest` || !manifest) return null;\n\t\t\treturn renderAssetModule(manifest);\n\t\t},\n\t\tbuildEnd() {\n\t\t\tif (!manifest) return;\n\t\t\tconst outDir = join(options.root, options.outDir ?? \"dist\", \".keystroke\");\n\t\t\tmkdirSync(outDir, { recursive: true });\n\t\t\twriteFileSync(join(outDir, \"assets.mjs\"), renderAssetModule(manifest));\n\t\t}\n\t};\n}\n/** Full tsdown config for user keystroke apps (config + discovered modules only). */\nfunction createAppBuildConfig(options = {}, walked) {\n\tconst root = options.root ?? process.cwd();\n\tconst srcDir = options.srcDir ?? \"src\";\n\tconst outDir = options.outDir ?? \"dist\";\n\tconst configEntry = existsSync(join(root, \"keystroke.config.ts\")) ? join(root, \"keystroke.config.ts\") : void 0;\n\tconst walkedResult = walked ?? walkProject(root, {\n\t\tsrcDir,\n\t\tphase: options.phase\n\t});\n\tconst discovered = walkedResult.buildEntries;\n\tconst ignoredFiles = walkedResult.ignoredFiles;\n\tconst entries = {\n\t\t...configEntry ? { config: configEntry } : {},\n\t\t...discovered\n\t};\n\tif (Object.keys(entries).length === 0) throw new Error(\"Nothing to build — add keystroke.config.ts or modules under src/\");\n\treturn mergeConfig(baseTsdownConfig, {\n\t\tentry: entries,\n\t\tformat: [\"esm\"],\n\t\toutDir: join(root, outDir),\n\t\tclean: options.clean ?? true,\n\t\tdts: false,\n\t\tloader: { \".md\": \"text\" },\n\t\tdeps: userAppBuildDepsConfig(),\n\t\tplugins: [\n\t\t\tkeystrokeIgnoreGuardPlugin({\n\t\t\t\troot,\n\t\t\t\tignoredFiles\n\t\t\t}),\n\t\t\tcallSiteIdInjectionPlugin({\n\t\t\t\troot,\n\t\t\t\tsrcDir\n\t\t\t}),\n\t\t\tagentAssetsPlugin({\n\t\t\t\troot,\n\t\t\t\tsrcDir,\n\t\t\t\toutDir\n\t\t\t})\n\t\t]\n\t});\n}\n/** Build user agents, workflows, triggers, and config to `dist/`. */\nasync function buildApp(options = {}) {\n\tconst root = options.root ?? process.cwd();\n\tconst srcDir = options.srcDir ?? \"src\";\n\tconst emitManifest = options.emitManifest ?? true;\n\tconst collectSources = options.collectSources ?? false;\n\tconst phase = options.phase ?? \"build\";\n\tconst previous = process.cwd();\n\tconst walked = walkProject(root, {\n\t\tsrcDir,\n\t\tcollectSources,\n\t\tphase\n\t});\n\ttry {\n\t\tprocess.chdir(root);\n\t\tconst workflowDiagnostics = collectWorkflowDiagnostics(root, srcDir);\n\t\tassertWorkflowDiagnosticErrorsFrom(workflowDiagnostics);\n\t\ttry {\n\t\t\tawait build(createAppBuildConfig({\n\t\t\t\t...options,\n\t\t\t\troot\n\t\t\t}, {\n\t\t\t\tbuildEntries: walked.buildEntries,\n\t\t\t\tignoredFiles: walked.ignoredFiles\n\t\t\t}));\n\t\t} finally {\n\t\t\twarnWorkflowDiagnosticsFrom(workflowDiagnostics);\n\t\t}\n\t\tif (emitManifest) {\n\t\t\tconst { emitStoredRouteManifestForProject } = await import(\"@keystrokehq/manifest\");\n\t\t\tawait emitStoredRouteManifestForProject(root);\n\t\t}\n\t} finally {\n\t\tprocess.chdir(previous);\n\t}\n\treturn { sourceFiles: walked.sourceFiles };\n}\n/**\n* Watch `src/` and rebuild `dist/` on change.\n*\n* NOT true hot reload — each change runs a full tsdown rebuild. Callers should\n* restart the API server in `onRebuild` so discovery picks up new/changed modules.\n*/\nasync function watchApp(options = {}) {\n\tconst { runWatchApp } = await import(\"./watch-app-DTIeKrbl.mjs\");\n\tawait runWatchApp((watchOptions) => buildApp({\n\t\t...watchOptions,\n\t\temitManifest: false,\n\t\tcollectSources: false\n\t}), options);\n}\n//#endregion\nexport { agentAssetsVitestPlugin, agentAssetsVitestPluginFromConfig, assertWorkflowDiagnosticErrors, assertWorkflowDiagnosticErrorsFrom, assertWorkflowDiagnostics, buildApp, buildFilteredApp, callSiteIdInjectionPlugin, collectWorkflowDiagnostics, createAppBuildConfig, injectCallSiteIds, resolveBuildFilter, resolveModuleDirs, resolveRuntimeBuildArtifact, warnWorkflowDiagnostics, warnWorkflowDiagnosticsFrom, watchApp };\n\n//# sourceMappingURL=index.mjs.map"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { _ as resolveCliRoot, a as formatReleaseAgeBlockMessage, g as readCliVersion, h as isNewerVersion, i as fetchLatestCliRelease, n as computeReleaseAgeRetryAfter, o as isReleaseAgeBlock, r as readPnpmMinimumReleaseAgeMinutes, s as detectCliInstall, t as runPackageManagerUpdate, y as getCliConfigDir } from "./run-package-manager-update-
|
|
2
|
+
import { _ as resolveCliRoot, a as formatReleaseAgeBlockMessage, g as readCliVersion, h as isNewerVersion, i as fetchLatestCliRelease, n as computeReleaseAgeRetryAfter, o as isReleaseAgeBlock, r as readPnpmMinimumReleaseAgeMinutes, s as detectCliInstall, t as runPackageManagerUpdate, y as getCliConfigDir } from "./run-package-manager-update-CPANKKNP.mjs";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
5
5
|
import { spawnSync } from "node:child_process";
|
|
@@ -136,4 +136,4 @@ async function maybeAutoUpdate(argv) {
|
|
|
136
136
|
//#endregion
|
|
137
137
|
export { maybeAutoUpdate };
|
|
138
138
|
|
|
139
|
-
//# sourceMappingURL=maybe-auto-update-
|
|
139
|
+
//# sourceMappingURL=maybe-auto-update-B4hlQg1Z.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maybe-auto-update-D7c5bEmF.mjs","names":[],"sources":["../src/update/update-block-cache.ts","../src/update/maybe-auto-update.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nimport { getCliConfigDir } from \"../config\";\n\nexport type UpdateBlockCache = {\n registryLatest?: string;\n blockedUntil?: string;\n lastFailedAt?: string;\n};\n\nconst CACHE_FILE = \"update-check.json\";\nconst GENERIC_RETRY_MS = 24 * 60 * 60 * 1000;\n\nfunction cachePath(configDir = getCliConfigDir()): string {\n return join(configDir, CACHE_FILE);\n}\n\nexport function readUpdateBlockCache(configDir?: string): UpdateBlockCache {\n const path = cachePath(configDir);\n if (!existsSync(path)) {\n return {};\n }\n\n try {\n return JSON.parse(readFileSync(path, \"utf8\")) as UpdateBlockCache;\n } catch {\n return {};\n }\n}\n\nexport function writeUpdateBlockCache(cache: UpdateBlockCache, configDir?: string): void {\n const dir = configDir ?? getCliConfigDir();\n mkdirSync(dir, { recursive: true });\n writeFileSync(cachePath(dir), `${JSON.stringify(cache, null, 2)}\\n`, \"utf8\");\n}\n\nexport function shouldSkipCachedUpdate(\n cache: UpdateBlockCache,\n registryLatest: string,\n now = Date.now(),\n): boolean {\n if (cache.registryLatest !== registryLatest) {\n return false;\n }\n\n if (cache.blockedUntil) {\n const blockedUntilMs = Date.parse(cache.blockedUntil);\n if (Number.isFinite(blockedUntilMs) && blockedUntilMs > now) {\n return true;\n }\n }\n\n if (cache.lastFailedAt) {\n const lastFailedMs = Date.parse(cache.lastFailedAt);\n if (Number.isFinite(lastFailedMs) && now - lastFailedMs < GENERIC_RETRY_MS) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function clearUpdateBlockCache(configDir?: string): void {\n writeUpdateBlockCache({}, configDir);\n}\n\nexport function recordReleaseAgeBlock(options: {\n registryLatest: string;\n retryAfter?: Date;\n configDir?: string;\n}): void {\n writeUpdateBlockCache(\n {\n registryLatest: options.registryLatest,\n blockedUntil: options.retryAfter?.toISOString(),\n },\n options.configDir,\n );\n}\n\nexport function recordGenericUpdateFailure(registryLatest: string, configDir?: string): void {\n writeUpdateBlockCache(\n {\n registryLatest,\n lastFailedAt: new Date().toISOString(),\n },\n configDir,\n );\n}\n","import { spawnSync } from \"node:child_process\";\n\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\nimport { readCliVersion } from \"../version\";\nimport { isNewerVersion } from \"./compare-version\";\nimport { detectCliInstall } from \"./detect-cli-install\";\nimport { formatReleaseAgeBlockMessage, isReleaseAgeBlock } from \"./detect-release-age-block\";\nimport { fetchLatestCliRelease } from \"./fetch-latest-version\";\nimport {\n computeReleaseAgeRetryAfter,\n readPnpmMinimumReleaseAgeMinutes,\n} from \"./read-pnpm-release-age-minutes\";\nimport { runPackageManagerUpdate } from \"./run-package-manager-update\";\nimport {\n clearUpdateBlockCache,\n readUpdateBlockCache,\n recordGenericUpdateFailure,\n recordReleaseAgeBlock,\n shouldSkipCachedUpdate,\n} from \"./update-block-cache\";\n\nfunction isTopLevelUpdateCommand(args: string[]): boolean {\n const valueFlags = new Set([\"--project\", \"--organization\", \"--dir\"]);\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === undefined) {\n return false;\n }\n\n if (arg === \"--\") {\n return args[i + 1] === \"update\";\n }\n\n if (arg.startsWith(\"-\")) {\n if (\n arg === \"--local\" ||\n arg === \"-h\" ||\n arg === \"--help\" ||\n arg === \"-V\" ||\n arg === \"--version\" ||\n arg.startsWith(\"-V\")\n ) {\n continue;\n }\n\n if (arg.includes(\"=\")) {\n continue;\n }\n\n if (valueFlags.has(arg) || arg.startsWith(\"--\")) {\n i++;\n }\n continue;\n }\n\n return arg === \"update\";\n }\n\n return false;\n}\n\nfunction shouldSkipAutoUpdate(argv: string[]): boolean {\n if (\n process.env.KEYSTROKE_DEV ||\n process.env.KEYSTROKE_SKIP_UPDATE ||\n process.env.KEYSTROKE_UPDATING\n ) {\n return true;\n }\n\n if (process.env.CI === \"true\" || process.env.CI === \"1\") {\n return true;\n }\n\n const args = argv.slice(2);\n if (args.length === 0) {\n return false;\n }\n\n // Explicit `keystroke update` owns CLI + project package updates.\n if (isTopLevelUpdateCommand(args)) {\n return true;\n }\n\n return args.every(\n (arg) =>\n arg === \"-V\" ||\n arg === \"--version\" ||\n arg === \"-h\" ||\n arg === \"--help\" ||\n arg.startsWith(\"-V\"),\n );\n}\n\nfunction reexecCli(argv: string[]): never {\n const result = spawnSync(process.execPath, argv.slice(1), {\n stdio: \"inherit\",\n env: {\n ...process.env,\n KEYSTROKE_UPDATING: \"1\",\n },\n });\n\n process.exit(result.status ?? 1);\n}\n\nfunction releaseAgeRetryAfter(\n install: NonNullable<ReturnType<typeof detectCliInstall>>,\n publishedAt: string | undefined,\n): Date | undefined {\n if (install.packageManager !== \"pnpm\") {\n return undefined;\n }\n\n return computeReleaseAgeRetryAfter(publishedAt, readPnpmMinimumReleaseAgeMinutes());\n}\n\nexport async function maybeAutoUpdate(argv: string[]): Promise<void> {\n if (shouldSkipAutoUpdate(argv)) {\n return;\n }\n\n const install = detectCliInstall(resolveCliRoot(import.meta.url));\n if (!install || (install.kind === \"local\" && !install.projectRoot)) {\n return;\n }\n\n const currentVersion = readCliVersion();\n const release = await fetchLatestCliRelease();\n\n if (!release || !isNewerVersion(release.version, currentVersion)) {\n clearUpdateBlockCache();\n return;\n }\n\n const cache = readUpdateBlockCache();\n if (shouldSkipCachedUpdate(cache, release.version)) {\n return;\n }\n\n process.stderr.write(\n `Updating @keystrokehq/cli ${currentVersion} -> ${release.version} via ${install.packageManager}...\\n`,\n );\n\n const result = runPackageManagerUpdate(install);\n const installedVersion = readCliVersion();\n\n if (isNewerVersion(installedVersion, currentVersion)) {\n clearUpdateBlockCache();\n process.stderr.write(`Updated @keystrokehq/cli ${currentVersion} -> ${installedVersion}.\\n`);\n reexecCli(argv);\n }\n\n if (result.ok) {\n clearUpdateBlockCache();\n return;\n }\n\n if (isReleaseAgeBlock(result.output)) {\n const retryAfter = releaseAgeRetryAfter(install, release.publishedAt);\n recordReleaseAgeBlock({\n registryLatest: release.version,\n retryAfter,\n });\n process.stderr.write(\n `${formatReleaseAgeBlockMessage({\n currentVersion,\n availableVersion: release.version,\n retryAfter,\n })}\\n`,\n );\n return;\n }\n\n recordGenericUpdateFailure(release.version);\n process.stderr.write(\"Auto-update failed; continuing with the current version.\\n\");\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"maybe-auto-update-B4hlQg1Z.mjs","names":[],"sources":["../src/update/update-block-cache.ts","../src/update/maybe-auto-update.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nimport { getCliConfigDir } from \"../config\";\n\nexport type UpdateBlockCache = {\n registryLatest?: string;\n blockedUntil?: string;\n lastFailedAt?: string;\n};\n\nconst CACHE_FILE = \"update-check.json\";\nconst GENERIC_RETRY_MS = 24 * 60 * 60 * 1000;\n\nfunction cachePath(configDir = getCliConfigDir()): string {\n return join(configDir, CACHE_FILE);\n}\n\nexport function readUpdateBlockCache(configDir?: string): UpdateBlockCache {\n const path = cachePath(configDir);\n if (!existsSync(path)) {\n return {};\n }\n\n try {\n return JSON.parse(readFileSync(path, \"utf8\")) as UpdateBlockCache;\n } catch {\n return {};\n }\n}\n\nexport function writeUpdateBlockCache(cache: UpdateBlockCache, configDir?: string): void {\n const dir = configDir ?? getCliConfigDir();\n mkdirSync(dir, { recursive: true });\n writeFileSync(cachePath(dir), `${JSON.stringify(cache, null, 2)}\\n`, \"utf8\");\n}\n\nexport function shouldSkipCachedUpdate(\n cache: UpdateBlockCache,\n registryLatest: string,\n now = Date.now(),\n): boolean {\n if (cache.registryLatest !== registryLatest) {\n return false;\n }\n\n if (cache.blockedUntil) {\n const blockedUntilMs = Date.parse(cache.blockedUntil);\n if (Number.isFinite(blockedUntilMs) && blockedUntilMs > now) {\n return true;\n }\n }\n\n if (cache.lastFailedAt) {\n const lastFailedMs = Date.parse(cache.lastFailedAt);\n if (Number.isFinite(lastFailedMs) && now - lastFailedMs < GENERIC_RETRY_MS) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function clearUpdateBlockCache(configDir?: string): void {\n writeUpdateBlockCache({}, configDir);\n}\n\nexport function recordReleaseAgeBlock(options: {\n registryLatest: string;\n retryAfter?: Date;\n configDir?: string;\n}): void {\n writeUpdateBlockCache(\n {\n registryLatest: options.registryLatest,\n blockedUntil: options.retryAfter?.toISOString(),\n },\n options.configDir,\n );\n}\n\nexport function recordGenericUpdateFailure(registryLatest: string, configDir?: string): void {\n writeUpdateBlockCache(\n {\n registryLatest,\n lastFailedAt: new Date().toISOString(),\n },\n configDir,\n );\n}\n","import { spawnSync } from \"node:child_process\";\n\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\nimport { readCliVersion } from \"../version\";\nimport { isNewerVersion } from \"./compare-version\";\nimport { detectCliInstall } from \"./detect-cli-install\";\nimport { formatReleaseAgeBlockMessage, isReleaseAgeBlock } from \"./detect-release-age-block\";\nimport { fetchLatestCliRelease } from \"./fetch-latest-version\";\nimport {\n computeReleaseAgeRetryAfter,\n readPnpmMinimumReleaseAgeMinutes,\n} from \"./read-pnpm-release-age-minutes\";\nimport { runPackageManagerUpdate } from \"./run-package-manager-update\";\nimport {\n clearUpdateBlockCache,\n readUpdateBlockCache,\n recordGenericUpdateFailure,\n recordReleaseAgeBlock,\n shouldSkipCachedUpdate,\n} from \"./update-block-cache\";\n\nfunction isTopLevelUpdateCommand(args: string[]): boolean {\n const valueFlags = new Set([\"--project\", \"--organization\", \"--dir\"]);\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === undefined) {\n return false;\n }\n\n if (arg === \"--\") {\n return args[i + 1] === \"update\";\n }\n\n if (arg.startsWith(\"-\")) {\n if (\n arg === \"--local\" ||\n arg === \"-h\" ||\n arg === \"--help\" ||\n arg === \"-V\" ||\n arg === \"--version\" ||\n arg.startsWith(\"-V\")\n ) {\n continue;\n }\n\n if (arg.includes(\"=\")) {\n continue;\n }\n\n if (valueFlags.has(arg) || arg.startsWith(\"--\")) {\n i++;\n }\n continue;\n }\n\n return arg === \"update\";\n }\n\n return false;\n}\n\nfunction shouldSkipAutoUpdate(argv: string[]): boolean {\n if (\n process.env.KEYSTROKE_DEV ||\n process.env.KEYSTROKE_SKIP_UPDATE ||\n process.env.KEYSTROKE_UPDATING\n ) {\n return true;\n }\n\n if (process.env.CI === \"true\" || process.env.CI === \"1\") {\n return true;\n }\n\n const args = argv.slice(2);\n if (args.length === 0) {\n return false;\n }\n\n // Explicit `keystroke update` owns CLI + project package updates.\n if (isTopLevelUpdateCommand(args)) {\n return true;\n }\n\n return args.every(\n (arg) =>\n arg === \"-V\" ||\n arg === \"--version\" ||\n arg === \"-h\" ||\n arg === \"--help\" ||\n arg.startsWith(\"-V\"),\n );\n}\n\nfunction reexecCli(argv: string[]): never {\n const result = spawnSync(process.execPath, argv.slice(1), {\n stdio: \"inherit\",\n env: {\n ...process.env,\n KEYSTROKE_UPDATING: \"1\",\n },\n });\n\n process.exit(result.status ?? 1);\n}\n\nfunction releaseAgeRetryAfter(\n install: NonNullable<ReturnType<typeof detectCliInstall>>,\n publishedAt: string | undefined,\n): Date | undefined {\n if (install.packageManager !== \"pnpm\") {\n return undefined;\n }\n\n return computeReleaseAgeRetryAfter(publishedAt, readPnpmMinimumReleaseAgeMinutes());\n}\n\nexport async function maybeAutoUpdate(argv: string[]): Promise<void> {\n if (shouldSkipAutoUpdate(argv)) {\n return;\n }\n\n const install = detectCliInstall(resolveCliRoot(import.meta.url));\n if (!install || (install.kind === \"local\" && !install.projectRoot)) {\n return;\n }\n\n const currentVersion = readCliVersion();\n const release = await fetchLatestCliRelease();\n\n if (!release || !isNewerVersion(release.version, currentVersion)) {\n clearUpdateBlockCache();\n return;\n }\n\n const cache = readUpdateBlockCache();\n if (shouldSkipCachedUpdate(cache, release.version)) {\n return;\n }\n\n process.stderr.write(\n `Updating @keystrokehq/cli ${currentVersion} -> ${release.version} via ${install.packageManager}...\\n`,\n );\n\n const result = runPackageManagerUpdate(install);\n const installedVersion = readCliVersion();\n\n if (isNewerVersion(installedVersion, currentVersion)) {\n clearUpdateBlockCache();\n process.stderr.write(`Updated @keystrokehq/cli ${currentVersion} -> ${installedVersion}.\\n`);\n reexecCli(argv);\n }\n\n if (result.ok) {\n clearUpdateBlockCache();\n return;\n }\n\n if (isReleaseAgeBlock(result.output)) {\n const retryAfter = releaseAgeRetryAfter(install, release.publishedAt);\n recordReleaseAgeBlock({\n registryLatest: release.version,\n retryAfter,\n });\n process.stderr.write(\n `${formatReleaseAgeBlockMessage({\n currentVersion,\n availableVersion: release.version,\n retryAfter,\n })}\\n`,\n );\n return;\n }\n\n recordGenericUpdateFailure(release.version);\n process.stderr.write(\"Auto-update failed; continuing with the current version.\\n\");\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { $ as CredentialInstanceListResponseSchema, $n as
|
|
3
|
-
import { a as alias, c as event, i as packProjectArtifact, l as flushTelemetry, n as withMcpReadClient, o as captureException, r as mergeFilteredArtifact, s as configureTelemetry, t as mapInParallelBatches, u as shutdownTelemetry } from "./dist-
|
|
4
|
-
import { C as getWebUrl, E as resolvePlatformUrlForWebUrl, S as getPlatformUrl, _ as resolveCliRoot, a as formatReleaseAgeBlockMessage, b as getConfigDir, c as detectManagerFromLockfile, d as installDependencies$1, f as installPlaygroundDependencies, g as readCliVersion, h as isNewerVersion, i as fetchLatestCliRelease, l as buildPlaygroundWorkspace, m as resolvePackageManager, n as computeReleaseAgeRetryAfter, o as isReleaseAgeBlock, p as resolveGithubPackagesToken, r as readPnpmMinimumReleaseAgeMinutes, s as detectCliInstall, t as runPackageManagerUpdate, u as detectPackageManager, v as createCliConfig, w as DEFAULT_PLATFORM_URL, x as getEffectiveApiTarget, y as getCliConfigDir } from "./run-package-manager-update-
|
|
2
|
+
import { $ as CredentialInstanceListResponseSchema, $n as UpsertGatewayAttachmentBodySchema, $t as PresignChatAttachmentResponseSchema, A as ConnectAuthorizeUrlResponseSchema, An as StartOAuthConnectionResultSchema, At as ListAppsResponseSchema, B as CreateCustomAppRequestSchema, Bn as UpdateChannelBindingBodySchema, Bt as ListProjectFilesResponseSchema, C as ChannelAccountListResponseSchema, Cn as SkillSummaryListResponseSchema, Cr as buildConnectDeeplink, Ct as InviteOrganizationMembersResponseSchema, D as CompleteProjectArtifactResponseSchema, Dn as StartMcpOAuthConnectionInputSchema, Dr as isAcceptableInstallExit, Dt as ListAgentMemoryFilesResponseSchema, E as ChannelDirectoryListResponseSchema, En as StartKeystrokeConnectionResultSchema, Er as detectProjectPackageManagerFromSnapshot, F as CreateBillingPortalRequestSchema, Fn as TriggerInvokeResponseSchema, Fr as resolveConnectAppSlug, Ft as ListOrganizationInvitationsResponseSchema, G as CreateProjectRequestSchema, Gn as UpdateOrganizationMemberResponseSchema, Gt as ManagedServiceKindSchema, H as CreateOrganizationRequestSchema, Hn as UpdateCredentialRequestSchema, Ht as ListProjectMetricsResponseSchema, I as CreateCredentialInstanceBodySchema, In as TriggerListResponseSchema, Ir as resolveDocsMcpUrl, It as ListOrganizationMembersPageQuerySchema, J as CredentialAssignmentListQuerySchema, Jn as UpdateProjectMemberResponseSchema, Jt as OrganizationSidebarBrandingPatchSchema, K as CreateProjectResponseSchema, Kn as UpdateOrganizationRequestSchema, Kt as McpDiscoverResponseSchema, L as CreateCredentialsRequestSchema, Ln as TriggerRunDetailResponseSchema, Lr as resolvePublicPlatformOrigin, Lt as ListOrganizationMembersPageResponseSchema, M as ConnectProvidersResponseSchema, Mn as SubmitTeamRequestRequestSchema, Mr as parseErrorResponse, Mt as ListCredentialsPageQuerySchema, N as CreateApiKeyRequestSchema, Nn as TriggerDetailResponseSchema, Nt as ListCredentialsPageResponseSchema, O as ConfirmCheckoutRequestSchema, On as StartMcpOAuthConnectionResultSchema, Or as listenPortFromPublicUrl, Ot as ListAgentWorkspaceFilesResponseSchema, P as CreateApiKeyResponseSchema, Pn as TriggerInvokeInputsSchema, Pt as ListManagedServiceCredentialsResponseSchema, Q as CredentialConsumerListResponseSchema, Qn as UploadProjectSourceResponseSchema, Qt as PresignChatAttachmentRequestSchema, R as CreateCredentialsResponseSchema, Rn as TriggerRunListResponseSchema, Rr as slugifyAppName, Rt as ListOrganizationsResponseSchema, S as CatalogAppsPageResponseSchema, Sn as SkillSummaryDetailResponseSchema, Sr as WorkspaceWorkflowOverviewSchema, St as InviteOrganizationMembersRequestSchema, T as ChannelConnectionSchema, Tn as StartKeystrokeConnectionInputSchema, Tr as deriveCustomAppDisplay, Tt as InviteProjectMembersResponseSchema, U as CreateOrganizationResponseSchema, Un as UpdateManagedServiceCredentialRequestSchema, Ut as ListProjectsResponseSchema, V as CreateCustomAppResponseSchema, Vn as UpdateCredentialInstanceBodySchema, Vt as ListProjectMembersResponseSchema, W as CreateProjectArtifactResponseSchema, Wn as UpdateOrganizationMemberRequestSchema, Wt as ManagedServiceCredentialSchema, X as CredentialAssignmentRecordSchema, Xn as UpdateProjectSettingsRequestSchema, Xt as PROJECT_PULL_STATE_RELATIVE_PATH, Y as CredentialAssignmentListResponseSchema, Yn as UpdateProjectRequestSchema, Yt as OrganizationSidebarBrandingSchema, Z as CredentialConsumerListQuerySchema, Zn as UploadProjectSourceManifestRequestSchema, Zt as PROJECT_REACHABILITY_REQUEST_TIMEOUT_MS, _ as BindChannelBodySchema, _n as PublishedFormSchema, _r as WorkspaceTriggerDetailSchema, _t as HealthResponseSchema, a as AgentSessionListResponseSchema, an as PresignUserAvatarResponseSchema, ar as WorkflowCanvasRunSchema, at as DownloadActiveProjectArtifactResponseSchema, b as CatalogActionsPageResponseSchema, br as WorkspaceTriggerOverviewSchema, bt as HistoryRunListQuerySchema, c as AgentTriggerSummaryListResponseSchema, cn as ProjectResponseSchema, cr as WorkflowFormUpsertBodySchema, ct as DuplicateCredentialsResponseSchema, d as AutoTopupSummarySchema, dn as PromptInputSchema, dr as WorkflowRunInputsPutBodySchema, dt as FormFieldConfigSchema, en as PresignOrgLogoRequestSchema, er as UserAvatarPatchSchema, et as CredentialInstanceRecordSchema, f as BillingActivityResponseSchema, fn as PromptResponseSchema, fr as WorkflowRunInputsSchema, ft as GatewayAttachmentRecordSchema, g as BillingUsageResponseSchema, gr as WorkflowSummaryListResponseSchema, gt as GraphqlDiscoverResponseSchema, h as BillingSummaryResponseSchema, hn as PublicFormSubmitResponseSchema, hr as WorkflowSummaryDetailResponseSchema, ht as GetCustomAppResponseSchema, i as AgentSessionDetailResponseSchema, in as PresignUserAvatarRequestSchema, ir as WorkflowCanvasCredentialBindingsSchema, it as DeclineOrganizationInvitationResponseSchema, j as ConnectManagedServiceCredentialRequestSchema, jn as SubmitMarketingContactRequestSchema, jr as parseAppSlug, jt as ListChannelPlatformsResponseSchema, k as ConfirmCheckoutResponseSchema, kn as StartOAuthConnectionInputSchema, kt as ListApiKeysResponseSchema, l as AppSlugAvailabilityResponseSchema, ln as ProjectSettingsResponseSchema, lr as WorkflowRunDetailResponseSchema, lt as ExecuteKeystrokeToolRequestSchema, m as BillingRedirectResponseSchema, mn as PublicFormSubmitBodySchema, mr as WorkflowRunResponseSchema, mt as GetCredentialResponseSchema, n as AcceptOrganizationInvitationResponseSchema, nn as PresignProjectSourceRequestSchema, nr as UserPreferencesPatchSchema, nt as DOCS_QUERY_TOOL, o as AgentSummaryDetailResponseSchema, on as ProjectPullStateSchema, or as WorkflowCanvasSchema, ot as DownloadActiveProjectSourceResponseSchema, p as BillingInvoiceUrlResponseSchema, pn as PublicFormMetadataSchema, pr as WorkflowRunListResponseSchema, pt as GetAppCatalogEntryResponseSchema, q as CreateSubscriptionCheckoutRequestSchema, qn as UpdateProjectMemberRequestSchema, qt as OpenApiDiscoverResponseSchema, r as ActiveOrganizationResponseSchema, rn as PresignProjectSourceResponseSchema, rr as UserPreferencesSchema, rt as DOCS_SEARCH_TOOL, s as AgentSummaryListResponseSchema, sn as ProjectReachabilityResponseSchema, sr as WorkflowFormResponseSchema, st as DuplicateCredentialRequestSchema, t as ACTIVE_ORG_HEADER, tn as PresignOrgLogoResponseSchema, tr as UserAvatarSchema, u as AssignCredentialBodySchema, un as ProjectSlugAvailabilityResponseSchema, ur as WorkflowRunHooksResponseSchema, v as CLIENT_CHANNEL_HEADER, vn as QueuedAgentPromptResponseSchema, vr as WorkspaceTriggerFileSchema, vt as HistoryRunCancelResponseSchema, w as ChannelConnectionListResponseSchema, wn as SlugAvailabilityResponseSchema, wt as InviteProjectMembersRequestSchema, x as CatalogAppDetailResponseSchema, xn as RecentResourceListResponseSchema, xr as WorkspaceTriggerRunListResponseSchema, xt as HistoryRunListResponseSchema, y as CatalogActionDetailResponseSchema, yn as QueuedRunResponseSchema, yr as WorkspaceTriggerListResponseSchema, yt as HistoryRunDetailResponseSchema, z as CreateCreditsCheckoutRequestSchema, zn as UpdateAutoTopupRequestSchema, zt as ListProjectDeploymentsResponseSchema } from "./dist-CPu6Uh2o.mjs";
|
|
3
|
+
import { a as alias, c as event, i as packProjectArtifact, l as flushTelemetry, n as withMcpReadClient, o as captureException, r as mergeFilteredArtifact, s as configureTelemetry, t as mapInParallelBatches, u as shutdownTelemetry } from "./dist-_HOtlAw_.mjs";
|
|
4
|
+
import { C as getWebUrl, E as resolvePlatformUrlForWebUrl, S as getPlatformUrl, _ as resolveCliRoot, a as formatReleaseAgeBlockMessage, b as getConfigDir, c as detectManagerFromLockfile, d as installDependencies$1, f as installPlaygroundDependencies, g as readCliVersion, h as isNewerVersion, i as fetchLatestCliRelease, l as buildPlaygroundWorkspace, m as resolvePackageManager, n as computeReleaseAgeRetryAfter, o as isReleaseAgeBlock, p as resolveGithubPackagesToken, r as readPnpmMinimumReleaseAgeMinutes, s as detectCliInstall, t as runPackageManagerUpdate, u as detectPackageManager, v as createCliConfig, w as DEFAULT_PLATFORM_URL, x as getEffectiveApiTarget, y as getCliConfigDir } from "./run-package-manager-update-CPANKKNP.mjs";
|
|
5
5
|
import { createRequire } from "node:module";
|
|
6
6
|
import { Command } from "commander";
|
|
7
7
|
import { platform, release } from "node:os";
|
|
@@ -4176,6 +4176,61 @@ function createWorkflowsResource(http) {
|
|
|
4176
4176
|
}
|
|
4177
4177
|
};
|
|
4178
4178
|
}
|
|
4179
|
+
function createWorkflowFormsResource(http) {
|
|
4180
|
+
return {
|
|
4181
|
+
async get(workflowId) {
|
|
4182
|
+
try {
|
|
4183
|
+
const response = await http.get(`api/workflows/${encodeURIComponent(workflowId)}/form`);
|
|
4184
|
+
if (response.status === 404) return null;
|
|
4185
|
+
return WorkflowFormResponseSchema.parse(await response.json());
|
|
4186
|
+
} catch (error) {
|
|
4187
|
+
throw await toPlatformError(error);
|
|
4188
|
+
}
|
|
4189
|
+
},
|
|
4190
|
+
async publish(workflowId, input = {}) {
|
|
4191
|
+
try {
|
|
4192
|
+
const body = WorkflowFormUpsertBodySchema.parse(input);
|
|
4193
|
+
const data = await http.put(`api/workflows/${encodeURIComponent(workflowId)}/form`, { json: body }).json();
|
|
4194
|
+
return PublishedFormSchema.parse(data);
|
|
4195
|
+
} catch (error) {
|
|
4196
|
+
throw await toPlatformError(error);
|
|
4197
|
+
}
|
|
4198
|
+
},
|
|
4199
|
+
async unpublish(workflowId) {
|
|
4200
|
+
try {
|
|
4201
|
+
const data = await http.delete(`api/workflows/${encodeURIComponent(workflowId)}/form`).json();
|
|
4202
|
+
return PublishedFormSchema.parse(data);
|
|
4203
|
+
} catch (error) {
|
|
4204
|
+
throw await toPlatformError(error);
|
|
4205
|
+
}
|
|
4206
|
+
},
|
|
4207
|
+
async rotate(workflowId) {
|
|
4208
|
+
try {
|
|
4209
|
+
const data = await http.post(`api/workflows/${encodeURIComponent(workflowId)}/form/rotate`).json();
|
|
4210
|
+
return PublishedFormSchema.parse(data);
|
|
4211
|
+
} catch (error) {
|
|
4212
|
+
throw await toPlatformError(error);
|
|
4213
|
+
}
|
|
4214
|
+
},
|
|
4215
|
+
async getPublic(token) {
|
|
4216
|
+
try {
|
|
4217
|
+
const data = await http.get(`api/public/forms/${encodeURIComponent(token)}`).json();
|
|
4218
|
+
return PublicFormMetadataSchema.parse(data);
|
|
4219
|
+
} catch (error) {
|
|
4220
|
+
throw await toPlatformError(error);
|
|
4221
|
+
}
|
|
4222
|
+
},
|
|
4223
|
+
async submitPublic(token, input) {
|
|
4224
|
+
try {
|
|
4225
|
+
const body = PublicFormSubmitBodySchema.parse(input);
|
|
4226
|
+
const data = await http.post(`api/public/forms/${encodeURIComponent(token)}/submit`, { json: body }).json();
|
|
4227
|
+
return PublicFormSubmitResponseSchema.parse(data);
|
|
4228
|
+
} catch (error) {
|
|
4229
|
+
throw await toPlatformError(error);
|
|
4230
|
+
}
|
|
4231
|
+
}
|
|
4232
|
+
};
|
|
4233
|
+
}
|
|
4179
4234
|
function createSkillsResource(http) {
|
|
4180
4235
|
return {
|
|
4181
4236
|
async list(options) {
|
|
@@ -5125,6 +5180,7 @@ function createPlatformClient(options) {
|
|
|
5125
5180
|
projectSettings: createProjectSettingsResource(http),
|
|
5126
5181
|
agents: createAgentsResource(http),
|
|
5127
5182
|
workflows: createWorkflowsResource(http),
|
|
5183
|
+
workflowForms: createWorkflowFormsResource(http),
|
|
5128
5184
|
skills: createSkillsResource(http),
|
|
5129
5185
|
triggers: createTriggersResource(http),
|
|
5130
5186
|
apps: createAppsResource(http),
|
|
@@ -7510,7 +7566,7 @@ function registerBuildCommand(program) {
|
|
|
7510
7566
|
try {
|
|
7511
7567
|
const root = resolveProjectRoot(options.dir);
|
|
7512
7568
|
await ensureSdkCurrent(root);
|
|
7513
|
-
const { buildApp } = await import("./dist-
|
|
7569
|
+
const { buildApp } = await import("./dist-jfI0JHuM.mjs");
|
|
7514
7570
|
await buildApp({ root });
|
|
7515
7571
|
process.stdout.write(`Built ${root}\n`);
|
|
7516
7572
|
} catch (error) {
|
|
@@ -7645,7 +7701,7 @@ async function sleep(ms) {
|
|
|
7645
7701
|
}
|
|
7646
7702
|
async function buildDeployArchive(client, root, projectId, filter) {
|
|
7647
7703
|
if (filter?.length) {
|
|
7648
|
-
const { buildFilteredApp } = await import("./dist-
|
|
7704
|
+
const { buildFilteredApp } = await import("./dist-jfI0JHuM.mjs");
|
|
7649
7705
|
const filtered = await buildFilteredApp({
|
|
7650
7706
|
root,
|
|
7651
7707
|
filter,
|
|
@@ -7667,7 +7723,7 @@ async function buildDeployArchive(client, root, projectId, filter) {
|
|
|
7667
7723
|
sourceFiles: filtered.sourceFiles
|
|
7668
7724
|
};
|
|
7669
7725
|
}
|
|
7670
|
-
const { buildApp } = await import("./dist-
|
|
7726
|
+
const { buildApp } = await import("./dist-jfI0JHuM.mjs");
|
|
7671
7727
|
const { sourceFiles } = await buildApp({
|
|
7672
7728
|
root,
|
|
7673
7729
|
collectSources: true,
|
|
@@ -7798,7 +7854,7 @@ function runtimeChildEnv(parentEnv, overrides) {
|
|
|
7798
7854
|
//#region src/project/bootstrap-run.ts
|
|
7799
7855
|
/** Node args + env for `@keystrokehq/build` bootstrap (shared by start + dev). */
|
|
7800
7856
|
async function resolveBootstrapRun(options) {
|
|
7801
|
-
const { resolveRuntimeBuildArtifact } = await import("./dist-
|
|
7857
|
+
const { resolveRuntimeBuildArtifact } = await import("./dist-jfI0JHuM.mjs");
|
|
7802
7858
|
const loader = pathToFileURL(resolveRuntimeBuildArtifact(options.runtimeNodeModules, "dist/runtime-loader.mjs")).href;
|
|
7803
7859
|
const bootstrap = resolveRuntimeBuildArtifact(options.runtimeNodeModules, "dist/standalone-bootstrap.mjs");
|
|
7804
7860
|
const args = [`--import=${loader}`];
|
|
@@ -7948,7 +8004,7 @@ async function runDev(options) {
|
|
|
7948
8004
|
process.on("SIGINT", shutdown);
|
|
7949
8005
|
process.on("SIGTERM", shutdown);
|
|
7950
8006
|
try {
|
|
7951
|
-
const { watchApp } = await import("./dist-
|
|
8007
|
+
const { watchApp } = await import("./dist-jfI0JHuM.mjs");
|
|
7952
8008
|
await watchApp({
|
|
7953
8009
|
root,
|
|
7954
8010
|
clean: false,
|
|
@@ -9010,7 +9066,7 @@ async function runStart(options) {
|
|
|
9010
9066
|
const apiPort = Number(new URL(serverUrl).port || 80);
|
|
9011
9067
|
const runtimeNodeModules = resolveCliRuntimeNodeModules(resolveCliRoot(import.meta.url));
|
|
9012
9068
|
ensureNativeDeps(runtimeNodeModules);
|
|
9013
|
-
const { buildApp } = await import("./dist-
|
|
9069
|
+
const { buildApp } = await import("./dist-jfI0JHuM.mjs");
|
|
9014
9070
|
await buildApp({
|
|
9015
9071
|
root,
|
|
9016
9072
|
clean: false
|
|
@@ -9446,6 +9502,60 @@ function registerUpdateCommand(program) {
|
|
|
9446
9502
|
});
|
|
9447
9503
|
}
|
|
9448
9504
|
//#endregion
|
|
9505
|
+
//#region src/commands/workflows/forms.ts
|
|
9506
|
+
function registerWorkflowFormsCommand(workflows) {
|
|
9507
|
+
const forms = workflows.command("forms").description("Publish and manage workflow forms");
|
|
9508
|
+
forms.command("get").description("Get a workflow's published form").argument("<workflowSlug>", "Workflow slug").action((workflowSlug) => runFormCommand("Get workflow form failed", workflowSlug, async (client, workflowId) => {
|
|
9509
|
+
const form = await client.workflowForms.get(workflowId);
|
|
9510
|
+
process.stdout.write(`${JSON.stringify(form, null, 2)}\n`);
|
|
9511
|
+
}));
|
|
9512
|
+
forms.command("url").description("Print a workflow form's public URL").argument("<workflowSlug>", "Workflow slug").action((workflowSlug) => runFormCommand("Get workflow form URL failed", workflowSlug, async (client, workflowId) => {
|
|
9513
|
+
const form = await client.workflowForms.get(workflowId);
|
|
9514
|
+
if (!form?.enabled) throw new Error(`Workflow "${workflowSlug}" does not have a published form.`);
|
|
9515
|
+
process.stdout.write(`${form.publicUrl}\n`);
|
|
9516
|
+
}));
|
|
9517
|
+
forms.command("publish").description("Publish or update a workflow form").argument("<workflowSlug>", "Workflow slug").option("--title <text>", "Public form title override").option("--description <text>", "Public form description override").option("--config <json>", "Complete JSON form configuration").option("--field-config <json>", "JSON per-field presentation configuration").addHelpText("after", `
|
|
9518
|
+
Examples:
|
|
9519
|
+
${cliBinaryName()} workflows forms publish request-review
|
|
9520
|
+
${cliBinaryName()} workflows forms publish request-review --field-config '{"message":{"label":"What needs review?","control":"textarea"}}'
|
|
9521
|
+
${cliBinaryName()} workflows forms publish request-review --config '{"title":"Request a review","enabled":true}'
|
|
9522
|
+
`).action((workflowSlug, options) => runFormCommand("Publish workflow form failed", workflowSlug, async (client, workflowId) => {
|
|
9523
|
+
const input = parsePublishInput(options);
|
|
9524
|
+
const form = await client.workflowForms.publish(workflowId, input);
|
|
9525
|
+
process.stdout.write(`${JSON.stringify(form, null, 2)}\n`);
|
|
9526
|
+
}));
|
|
9527
|
+
forms.command("unpublish").description("Stop accepting submissions for a workflow form").argument("<workflowSlug>", "Workflow slug").action((workflowSlug) => runFormCommand("Unpublish workflow form failed", workflowSlug, async (client, workflowId) => {
|
|
9528
|
+
const form = await client.workflowForms.unpublish(workflowId);
|
|
9529
|
+
process.stdout.write(`${JSON.stringify(form, null, 2)}\n`);
|
|
9530
|
+
}));
|
|
9531
|
+
forms.command("rotate").description("Rotate a workflow form's public link").argument("<workflowSlug>", "Workflow slug").action((workflowSlug) => runFormCommand("Rotate workflow form link failed", workflowSlug, async (client, workflowId) => {
|
|
9532
|
+
const form = await client.workflowForms.rotate(workflowId);
|
|
9533
|
+
process.stdout.write(`${JSON.stringify(form, null, 2)}\n`);
|
|
9534
|
+
}));
|
|
9535
|
+
}
|
|
9536
|
+
function parsePublishInput(options) {
|
|
9537
|
+
const config = options.config === void 0 ? {} : WorkflowFormUpsertBodySchema.parse(parseJsonOption(options.config, "--config"));
|
|
9538
|
+
const fieldConfig = options.fieldConfig === void 0 ? void 0 : FormFieldConfigSchema.parse(parseJsonOption(options.fieldConfig, "--field-config"));
|
|
9539
|
+
return WorkflowFormUpsertBodySchema.parse({
|
|
9540
|
+
...config,
|
|
9541
|
+
...options.title !== void 0 ? { title: options.title } : {},
|
|
9542
|
+
...options.description !== void 0 ? { description: options.description } : {},
|
|
9543
|
+
...fieldConfig !== void 0 ? { fieldConfig } : {}
|
|
9544
|
+
});
|
|
9545
|
+
}
|
|
9546
|
+
function runFormCommand(title, workflowSlug, action) {
|
|
9547
|
+
return runCliCommand(title, async () => {
|
|
9548
|
+
const config = createCliConfig();
|
|
9549
|
+
const client = createCliPlatformClient(config);
|
|
9550
|
+
await resolveActiveOrganization(config);
|
|
9551
|
+
const projectId = await resolveActiveProjectId(config);
|
|
9552
|
+
const matches = (await client.workflows.list(projectId ? { projectId } : void 0)).filter((workflow) => workflow.slug === workflowSlug);
|
|
9553
|
+
if (matches.length === 0) throw new Error(`Workflow "${workflowSlug}" was not found in the active organization.`);
|
|
9554
|
+
if (matches.length > 1) throw new Error(`Workflow "${workflowSlug}" is ambiguous. Link a project or pass --project to choose one.`);
|
|
9555
|
+
await action(client, matches[0].id);
|
|
9556
|
+
}, void 0, { orgScoped: true });
|
|
9557
|
+
}
|
|
9558
|
+
//#endregion
|
|
9449
9559
|
//#region src/commands/workflows/list.ts
|
|
9450
9560
|
function registerWorkflowListCommand(workflow) {
|
|
9451
9561
|
workflow.command("list").description("List workflows in the active organization").option("--admin", "List all org resources (org owner or admin only)").action((options) => runCliCommand("List workflows failed", async () => {
|
|
@@ -9536,6 +9646,7 @@ function registerWorkflowsCommand(program) {
|
|
|
9536
9646
|
registerWorkflowListCommand(workflows);
|
|
9537
9647
|
registerWorkflowRunCommand(workflows);
|
|
9538
9648
|
registerWorkflowRunsCommand(workflows);
|
|
9649
|
+
registerWorkflowFormsCommand(workflows);
|
|
9539
9650
|
}
|
|
9540
9651
|
//#endregion
|
|
9541
9652
|
//#region src/commands/channels/run-channel.ts
|
|
@@ -9843,7 +9954,7 @@ function createProgram() {
|
|
|
9843
9954
|
async function runCli(argv) {
|
|
9844
9955
|
initCliTelemetry();
|
|
9845
9956
|
try {
|
|
9846
|
-
const { maybeAutoUpdate } = await import("./maybe-auto-update-
|
|
9957
|
+
const { maybeAutoUpdate } = await import("./maybe-auto-update-B4hlQg1Z.mjs");
|
|
9847
9958
|
await maybeAutoUpdate(argv);
|
|
9848
9959
|
await createProgram().parseAsync(argv);
|
|
9849
9960
|
} finally {
|
|
@@ -9853,4 +9964,4 @@ async function runCli(argv) {
|
|
|
9853
9964
|
//#endregion
|
|
9854
9965
|
export { runCli };
|
|
9855
9966
|
|
|
9856
|
-
//# sourceMappingURL=program-
|
|
9967
|
+
//# sourceMappingURL=program-CS_3jI2k.mjs.map
|