@keystrokehq/cli 0.1.97 → 0.1.99

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.
@@ -12,10 +12,10 @@ import "./chunk-L2UW7DWF-B3tEHhPF.mjs";
12
12
  import { n as u$1, t as b } from "./chunk-XRFHFXFP-BGxzVZgK.mjs";
13
13
  import { n as x$1, t as C } from "./chunk-5H5SCKJM-BvfXlL01.mjs";
14
14
  import { createRequire } from "node:module";
15
+ import { AsyncLocalStorage } from "node:async_hooks";
15
16
  import { fileURLToPath } from "node:url";
16
17
  import { randomBytes } from "node:crypto";
17
18
  import { Worker } from "node:worker_threads";
18
- import { AsyncLocalStorage } from "node:async_hooks";
19
19
  //#region ../../node_modules/.pnpm/just-bash@3.0.1/node_modules/just-bash/dist/bundle/chunks/js-exec-N5KEZBH7.js
20
20
  createRequire(import.meta.url);
21
21
  var U = 1e4, I = 6e4, A = new AsyncLocalStorage(), M = `js-exec - Sandboxed JavaScript/TypeScript runtime with Node.js-compatible APIs
@@ -330,4 +330,4 @@ ${M}`,
330
330
  //#endregion
331
331
  export { ae as jsExecCommand, de as nodeStubCommand };
332
332
 
333
- //# sourceMappingURL=js-exec-N5KEZBH7-CgtG-I6s.mjs.map
333
+ //# sourceMappingURL=js-exec-N5KEZBH7-CoRL1IOd.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"js-exec-N5KEZBH7-CgtG-I6s.mjs","names":["O","_","g","v","L","h","k","w","i","C","F","R","j","r","E","o","b","S"],"sources":["../../../node_modules/.pnpm/just-bash@3.0.1/node_modules/just-bash/dist/bundle/chunks/js-exec-N5KEZBH7.js"],"sourcesContent":["import{createRequire} from\"node:module\";const require=createRequire(import.meta.url);\nimport{a as C,b as F}from\"./chunk-5H5SCKJM.js\";import\"./chunk-WNH3HOQA.js\";import\"./chunk-HBVMHTO5.js\";import{a as w,b as g}from\"./chunk-XRFHFXFP.js\";import\"./chunk-L2UW7DWF.js\";import{a as j}from\"./chunk-DLL7UR66.js\";import{b as v}from\"./chunk-TN7HHBQW.js\";import{c as S}from\"./chunk-NRSASXYY.js\";import{a as b,b as h}from\"./chunk-FOCWZZDE.js\";import{a as k}from\"./chunk-W5DWRFSU.js\";import{b as E}from\"./chunk-QAYAQNCG.js\";import\"./chunk-BZUGFHVS.js\";import{AsyncLocalStorage as O}from\"node:async_hooks\";import{randomBytes as R}from\"node:crypto\";import{fileURLToPath as _}from\"node:url\";import{Worker as L}from\"node:worker_threads\";var U=1e4,I=6e4,A=new O,M=`js-exec - Sandboxed JavaScript/TypeScript runtime with Node.js-compatible APIs\n\nUsage: js-exec [OPTIONS] [-c CODE | FILE] [ARGS...]\n\nOptions:\n -c CODE Execute inline code\n -m, --module Enable ES module mode (import/export)\n --strip-types Strip TypeScript type annotations\n --version, -V Show version\n --help Show this help\n\nExamples:\n js-exec -c \"console.log(1 + 2)\"\n js-exec script.js\n js-exec app.ts\n echo 'console.log(\"hello\")' | js-exec\n\nFile Extension Auto-Detection:\n .js script mode (module mode if top-level await detected)\n .mjs ES module mode\n .ts, .mts ES module mode + TypeScript stripping\n\nNode.js Compatibility:\n Code written for Node.js largely works here. Both require and import\n are supported, the node: prefix works, and standard globals like process,\n console, and fetch are available. All I/O is synchronous.\n\n Available modules:\n fs, path, child_process, process, console,\n os, url, assert, util, events, buffer, stream,\n string_decoder, querystring\n\n fs (global, require('fs'), or import from 'node:fs'):\n readFileSync, writeFileSync, appendFileSync, copyFileSync, renameSync\n readdirSync, mkdirSync, rmSync, unlinkSync, rmdirSync\n statSync, lstatSync, existsSync, realpathSync, chmodSync\n symlinkSync, readlinkSync, readFileBuffer\n fs.promises.readFile, fs.promises.writeFile, fs.promises.access, ...\n\n path: join, resolve, dirname, basename, extname, normalize,\n relative, isAbsolute, parse, format, sep, delimiter\n\n child_process:\n execSync(cmd) throws on non-zero exit, returns stdout\n spawnSync(cmd, args) returns { stdout, stderr, status }\n\n process (also global): argv, cwd(), exit(), env, platform, arch,\n version, versions\n\n os: platform(), arch(), homedir(), tmpdir(), type(), hostname(),\n EOL, cpus(), endianness()\n\n url: URL, URLSearchParams, parse(), format()\n\n assert: ok(), equal(), strictEqual(), deepEqual(), throws(),\n doesNotThrow(), fail()\n\n util: format(), inspect(), promisify(), types, inherits()\n\n events: EventEmitter (on, once, emit, off, removeListener, ...)\n\n buffer: Buffer.from(), Buffer.alloc(), Buffer.concat(),\n Buffer.isBuffer(), toString(), slice(), equals()\n\n stream: Readable, Writable, Duplex, Transform, PassThrough, pipeline\n\n string_decoder: StringDecoder (write, end)\n\n querystring: parse(), stringify(), escape(), unescape()\n\nOther Globals:\n console log (stdout), error/warn (stderr)\n fetch(url, opts) HTTP; returns Promise<Response> (Web Fetch API)\n URL, URLSearchParams, Headers, Request, Response\n Buffer Buffer.from(), Buffer.alloc(), etc.\n\nNot Available:\n http, https, net, tls, crypto, zlib, dns, cluster, worker_threads,\n vm, v8, readline, and other Node.js built-in modules that require\n native bindings. Use fetch() for HTTP requests.\n\nLimits:\n Memory: 64 MB per execution\n Timeout: 10 s (60 s with network; configurable via maxJsTimeoutMs)\n Engine: QuickJS (compiled to WebAssembly)\n`;function J(t){let e={code:null,scriptFile:null,showVersion:!1,scriptArgs:[],isModule:!1,stripTypes:!1};if(t.length===0)return e;for(let r=0;r<t.length;r++){let s=t[r];if(s===\"-m\"||s===\"--module\"){e.isModule=!0;continue}if(s===\"--strip-types\"){e.stripTypes=!0;continue}if(s===\"-c\")return r+1>=t.length?{stdout:\"\",stderr:`js-exec: option requires an argument -- 'c'\n`,exitCode:2}:(e.code=t[r+1],e.scriptArgs=t.slice(r+2),e);if(s===\"--version\"||s===\"-V\")return e.showVersion=!0,e;if(s.startsWith(\"-\")&&s!==\"-\"&&s!==\"--\")return{stdout:\"\",stderr:`js-exec: unrecognized option '${s}'\n`,exitCode:2};if(s===\"--\")return r+1<t.length&&(e.scriptFile=t[r+1],e.scriptArgs=t.slice(r+2)),e;if(!s.startsWith(\"-\"))return e.scriptFile=s,e.scriptArgs=t.slice(r+1),e}return e}var c=null,y=null,u=[],n=null,D=_(new URL(\"./js-exec-worker.js\",import.meta.url));function p(){for(;u.length>0&&u[0].canceled;)u.shift();if(n||u.length===0)return;let t=u.shift();if(!t)return;n=t,H().postMessage(n.input)}function N(t,e){if(!t||typeof t!=\"object\")return{success:!1,error:\"Malformed worker response\"};let r=t;return typeof r.protocolToken!=\"string\"||r.protocolToken!==e?{success:!1,error:\"Malformed worker response: invalid protocol token\"}:typeof r.success!=\"boolean\"?{success:!1,error:\"Malformed worker response: missing success flag\"}:r.success?{success:!0}:{success:!1,error:typeof r.error==\"string\"&&r.error.length>0?r.error:\"Worker execution failed\"}}function H(){if(y&&(g(y),y=null),c)return c;let t=v.runTrusted(()=>new L(D));return c=t,t.on(\"message\",e=>{if(c===t){if(n){let r=N(e,n.input.protocolToken);n.resolve(r),n=null}u.length>0?p():z()}}),t.on(\"error\",e=>{if(c===t){if(n){let r=h(k(e));n.resolve({success:!1,error:r}),n=null}for(let r of u)r.resolve({success:!1,error:\"Worker crashed\"});u.length=0,c=null}}),t.on(\"exit\",()=>{c===t&&(c=null,n&&(n.resolve({success:!1,error:\"Worker exited unexpectedly\"}),n=null),u.length>0&&p())}),t}function z(){y=w(()=>{c&&!n&&u.length===0&&(c.terminate(),c=null)},5e3)}async function $(t,e,r,s=[],o,i,a){return A.getStore()?{stdout:\"\",stderr:`js-exec: recursive invocation is not supported\n`,exitCode:1}:G(t,e,r,s,o,i,a)}async function V(t,e,r){let s,o=new Promise(l=>{s=l}),i={input:t,resolve:()=>{}},a=w(()=>{if(n===i){let l=c;l&&(c=null,l.terminate()),n=null,p()}else i.canceled=!0,n||p();i.resolve({success:!1,error:`Execution timeout: exceeded ${r}ms limit`})},r);i.resolve=l=>{g(a),s(l)},u.push(i),p();let[f,d]=await Promise.all([e.run(r),o.catch(l=>({success:!1,error:h(k(l))}))]);return{bridgeOutput:f,workerResult:d}}function Q(t){let e=t.limits?.maxJsTimeoutMs??U;return t.fetch?Math.max(e,I):e}async function G(t,e,r,s=[],o,i,a){let f=C(),d=e.exec,l=d?(P,q)=>A.run(!0,()=>d(P,q)):void 0,W=new F(f,e.fs,e.cwd,\"js-exec\",e.fetch,e.limits?.maxOutputSize??0,l,e.invokeTool),T=Q(e),B={protocolToken:R(16).toString(\"hex\"),sharedBuffer:f,jsCode:t,cwd:e.cwd,env:j(e.env),args:s,scriptPath:r,bootstrapCode:o,isModule:i,stripTypes:a,timeoutMs:T,hasInvokeTool:e.invokeTool!==void 0},{bridgeOutput:m,workerResult:x}=await V(B,W,T);return!x.success&&x.error?{stdout:m.stdout,stderr:`${m.stderr}js-exec: ${h(x.error)}\n`,exitCode:m.exitCode||1}:{...m}}var ae={name:\"js-exec\",async execute(t,e){if(E(t))return{stdout:M,stderr:\"\",exitCode:0};let r=J(t);if(\"exitCode\"in r)return r;if(r.showVersion)return{stdout:`QuickJS (quickjs-emscripten)\n`,stderr:\"\",exitCode:0};let s,o;if(r.code!==null)s=r.code,o=\"-c\";else if(r.scriptFile!==null){let d=e.fs.resolvePath(e.cwd,r.scriptFile);if(!await e.fs.exists(d))return{stdout:\"\",stderr:`js-exec: can't open file '${r.scriptFile}': No such file or directory\n`,exitCode:2};try{s=await e.fs.readFile(d),o=d}catch(l){return{stdout:\"\",stderr:`js-exec: can't open file '${r.scriptFile}': ${b(l.message)}\n`,exitCode:2}}}else if(S(e.stdin).trim())s=S(e.stdin),o=\"<stdin>\";else return{stdout:\"\",stderr:`js-exec: no input provided (use -c CODE or provide a script file)\n`,exitCode:2};let i=r.isModule,a=r.stripTypes;o&&o!==\"-c\"&&o!==\"<stdin>\"&&((o.endsWith(\".mjs\")||o.endsWith(\".mts\")||o.endsWith(\".ts\"))&&(i=!0),(o.endsWith(\".ts\")||o.endsWith(\".mts\"))&&(a=!0)),!i&&/\\bawait\\s+[\\w([`]/.test(s)&&(i=!0);let f=e.jsBootstrapCode;return $(s,e,o,r.scriptArgs,f,i,a)}},de={name:\"node\",async execute(){return{stdout:\"\",stderr:`node: this sandbox uses js-exec instead of node\n\n${M}`,exitCode:1}}};export{ae as jsExecCommand,de as nodeStubCommand};\n"],"x_google_ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"js-exec-N5KEZBH7-CoRL1IOd.mjs","names":["O","_","g","v","L","h","k","w","i","C","F","R","j","r","E","o","b","S"],"sources":["../../../node_modules/.pnpm/just-bash@3.0.1/node_modules/just-bash/dist/bundle/chunks/js-exec-N5KEZBH7.js"],"sourcesContent":["import{createRequire} from\"node:module\";const require=createRequire(import.meta.url);\nimport{a as C,b as F}from\"./chunk-5H5SCKJM.js\";import\"./chunk-WNH3HOQA.js\";import\"./chunk-HBVMHTO5.js\";import{a as w,b as g}from\"./chunk-XRFHFXFP.js\";import\"./chunk-L2UW7DWF.js\";import{a as j}from\"./chunk-DLL7UR66.js\";import{b as v}from\"./chunk-TN7HHBQW.js\";import{c as S}from\"./chunk-NRSASXYY.js\";import{a as b,b as h}from\"./chunk-FOCWZZDE.js\";import{a as k}from\"./chunk-W5DWRFSU.js\";import{b as E}from\"./chunk-QAYAQNCG.js\";import\"./chunk-BZUGFHVS.js\";import{AsyncLocalStorage as O}from\"node:async_hooks\";import{randomBytes as R}from\"node:crypto\";import{fileURLToPath as _}from\"node:url\";import{Worker as L}from\"node:worker_threads\";var U=1e4,I=6e4,A=new O,M=`js-exec - Sandboxed JavaScript/TypeScript runtime with Node.js-compatible APIs\n\nUsage: js-exec [OPTIONS] [-c CODE | FILE] [ARGS...]\n\nOptions:\n -c CODE Execute inline code\n -m, --module Enable ES module mode (import/export)\n --strip-types Strip TypeScript type annotations\n --version, -V Show version\n --help Show this help\n\nExamples:\n js-exec -c \"console.log(1 + 2)\"\n js-exec script.js\n js-exec app.ts\n echo 'console.log(\"hello\")' | js-exec\n\nFile Extension Auto-Detection:\n .js script mode (module mode if top-level await detected)\n .mjs ES module mode\n .ts, .mts ES module mode + TypeScript stripping\n\nNode.js Compatibility:\n Code written for Node.js largely works here. Both require and import\n are supported, the node: prefix works, and standard globals like process,\n console, and fetch are available. All I/O is synchronous.\n\n Available modules:\n fs, path, child_process, process, console,\n os, url, assert, util, events, buffer, stream,\n string_decoder, querystring\n\n fs (global, require('fs'), or import from 'node:fs'):\n readFileSync, writeFileSync, appendFileSync, copyFileSync, renameSync\n readdirSync, mkdirSync, rmSync, unlinkSync, rmdirSync\n statSync, lstatSync, existsSync, realpathSync, chmodSync\n symlinkSync, readlinkSync, readFileBuffer\n fs.promises.readFile, fs.promises.writeFile, fs.promises.access, ...\n\n path: join, resolve, dirname, basename, extname, normalize,\n relative, isAbsolute, parse, format, sep, delimiter\n\n child_process:\n execSync(cmd) throws on non-zero exit, returns stdout\n spawnSync(cmd, args) returns { stdout, stderr, status }\n\n process (also global): argv, cwd(), exit(), env, platform, arch,\n version, versions\n\n os: platform(), arch(), homedir(), tmpdir(), type(), hostname(),\n EOL, cpus(), endianness()\n\n url: URL, URLSearchParams, parse(), format()\n\n assert: ok(), equal(), strictEqual(), deepEqual(), throws(),\n doesNotThrow(), fail()\n\n util: format(), inspect(), promisify(), types, inherits()\n\n events: EventEmitter (on, once, emit, off, removeListener, ...)\n\n buffer: Buffer.from(), Buffer.alloc(), Buffer.concat(),\n Buffer.isBuffer(), toString(), slice(), equals()\n\n stream: Readable, Writable, Duplex, Transform, PassThrough, pipeline\n\n string_decoder: StringDecoder (write, end)\n\n querystring: parse(), stringify(), escape(), unescape()\n\nOther Globals:\n console log (stdout), error/warn (stderr)\n fetch(url, opts) HTTP; returns Promise<Response> (Web Fetch API)\n URL, URLSearchParams, Headers, Request, Response\n Buffer Buffer.from(), Buffer.alloc(), etc.\n\nNot Available:\n http, https, net, tls, crypto, zlib, dns, cluster, worker_threads,\n vm, v8, readline, and other Node.js built-in modules that require\n native bindings. Use fetch() for HTTP requests.\n\nLimits:\n Memory: 64 MB per execution\n Timeout: 10 s (60 s with network; configurable via maxJsTimeoutMs)\n Engine: QuickJS (compiled to WebAssembly)\n`;function J(t){let e={code:null,scriptFile:null,showVersion:!1,scriptArgs:[],isModule:!1,stripTypes:!1};if(t.length===0)return e;for(let r=0;r<t.length;r++){let s=t[r];if(s===\"-m\"||s===\"--module\"){e.isModule=!0;continue}if(s===\"--strip-types\"){e.stripTypes=!0;continue}if(s===\"-c\")return r+1>=t.length?{stdout:\"\",stderr:`js-exec: option requires an argument -- 'c'\n`,exitCode:2}:(e.code=t[r+1],e.scriptArgs=t.slice(r+2),e);if(s===\"--version\"||s===\"-V\")return e.showVersion=!0,e;if(s.startsWith(\"-\")&&s!==\"-\"&&s!==\"--\")return{stdout:\"\",stderr:`js-exec: unrecognized option '${s}'\n`,exitCode:2};if(s===\"--\")return r+1<t.length&&(e.scriptFile=t[r+1],e.scriptArgs=t.slice(r+2)),e;if(!s.startsWith(\"-\"))return e.scriptFile=s,e.scriptArgs=t.slice(r+1),e}return e}var c=null,y=null,u=[],n=null,D=_(new URL(\"./js-exec-worker.js\",import.meta.url));function p(){for(;u.length>0&&u[0].canceled;)u.shift();if(n||u.length===0)return;let t=u.shift();if(!t)return;n=t,H().postMessage(n.input)}function N(t,e){if(!t||typeof t!=\"object\")return{success:!1,error:\"Malformed worker response\"};let r=t;return typeof r.protocolToken!=\"string\"||r.protocolToken!==e?{success:!1,error:\"Malformed worker response: invalid protocol token\"}:typeof r.success!=\"boolean\"?{success:!1,error:\"Malformed worker response: missing success flag\"}:r.success?{success:!0}:{success:!1,error:typeof r.error==\"string\"&&r.error.length>0?r.error:\"Worker execution failed\"}}function H(){if(y&&(g(y),y=null),c)return c;let t=v.runTrusted(()=>new L(D));return c=t,t.on(\"message\",e=>{if(c===t){if(n){let r=N(e,n.input.protocolToken);n.resolve(r),n=null}u.length>0?p():z()}}),t.on(\"error\",e=>{if(c===t){if(n){let r=h(k(e));n.resolve({success:!1,error:r}),n=null}for(let r of u)r.resolve({success:!1,error:\"Worker crashed\"});u.length=0,c=null}}),t.on(\"exit\",()=>{c===t&&(c=null,n&&(n.resolve({success:!1,error:\"Worker exited unexpectedly\"}),n=null),u.length>0&&p())}),t}function z(){y=w(()=>{c&&!n&&u.length===0&&(c.terminate(),c=null)},5e3)}async function $(t,e,r,s=[],o,i,a){return A.getStore()?{stdout:\"\",stderr:`js-exec: recursive invocation is not supported\n`,exitCode:1}:G(t,e,r,s,o,i,a)}async function V(t,e,r){let s,o=new Promise(l=>{s=l}),i={input:t,resolve:()=>{}},a=w(()=>{if(n===i){let l=c;l&&(c=null,l.terminate()),n=null,p()}else i.canceled=!0,n||p();i.resolve({success:!1,error:`Execution timeout: exceeded ${r}ms limit`})},r);i.resolve=l=>{g(a),s(l)},u.push(i),p();let[f,d]=await Promise.all([e.run(r),o.catch(l=>({success:!1,error:h(k(l))}))]);return{bridgeOutput:f,workerResult:d}}function Q(t){let e=t.limits?.maxJsTimeoutMs??U;return t.fetch?Math.max(e,I):e}async function G(t,e,r,s=[],o,i,a){let f=C(),d=e.exec,l=d?(P,q)=>A.run(!0,()=>d(P,q)):void 0,W=new F(f,e.fs,e.cwd,\"js-exec\",e.fetch,e.limits?.maxOutputSize??0,l,e.invokeTool),T=Q(e),B={protocolToken:R(16).toString(\"hex\"),sharedBuffer:f,jsCode:t,cwd:e.cwd,env:j(e.env),args:s,scriptPath:r,bootstrapCode:o,isModule:i,stripTypes:a,timeoutMs:T,hasInvokeTool:e.invokeTool!==void 0},{bridgeOutput:m,workerResult:x}=await V(B,W,T);return!x.success&&x.error?{stdout:m.stdout,stderr:`${m.stderr}js-exec: ${h(x.error)}\n`,exitCode:m.exitCode||1}:{...m}}var ae={name:\"js-exec\",async execute(t,e){if(E(t))return{stdout:M,stderr:\"\",exitCode:0};let r=J(t);if(\"exitCode\"in r)return r;if(r.showVersion)return{stdout:`QuickJS (quickjs-emscripten)\n`,stderr:\"\",exitCode:0};let s,o;if(r.code!==null)s=r.code,o=\"-c\";else if(r.scriptFile!==null){let d=e.fs.resolvePath(e.cwd,r.scriptFile);if(!await e.fs.exists(d))return{stdout:\"\",stderr:`js-exec: can't open file '${r.scriptFile}': No such file or directory\n`,exitCode:2};try{s=await e.fs.readFile(d),o=d}catch(l){return{stdout:\"\",stderr:`js-exec: can't open file '${r.scriptFile}': ${b(l.message)}\n`,exitCode:2}}}else if(S(e.stdin).trim())s=S(e.stdin),o=\"<stdin>\";else return{stdout:\"\",stderr:`js-exec: no input provided (use -c CODE or provide a script file)\n`,exitCode:2};let i=r.isModule,a=r.stripTypes;o&&o!==\"-c\"&&o!==\"<stdin>\"&&((o.endsWith(\".mjs\")||o.endsWith(\".mts\")||o.endsWith(\".ts\"))&&(i=!0),(o.endsWith(\".ts\")||o.endsWith(\".mts\"))&&(a=!0)),!i&&/\\bawait\\s+[\\w([`]/.test(s)&&(i=!0);let f=e.jsBootstrapCode;return $(s,e,o,r.scriptArgs,f,i,a)}},de={name:\"node\",async execute(){return{stdout:\"\",stderr:`node: this sandbox uses js-exec instead of node\n\n${M}`,exitCode:1}}};export{ae as jsExecCommand,de as nodeStubCommand};\n"],"x_google_ignoreList":[0],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { _ as isNewerVersion, a as formatReleaseAgeBlockMessage, g as resolveCliRoot, i as fetchLatestCliRelease, l as readCliVersion, n as computeReleaseAgeRetryAfter, o as isReleaseAgeBlock, r as readPnpmMinimumReleaseAgeMinutes, s as detectCliInstall, t as runPackageManagerUpdate, y as getCliConfigDir } from "./run-package-manager-update-CEE3gsWX.mjs";
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-BVuBh1a2.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-CRIaoRBQ.mjs.map
139
+ //# sourceMappingURL=maybe-auto-update-DflBoY7a.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"maybe-auto-update-CRIaoRBQ.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-DflBoY7a.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,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
- import { Ct as LOCAL_PLATFORM_ORIGIN, xr as originFromPublicUrl } from "./dist-yxSyWJLs.mjs";
2
+ import { Ct as LOCAL_PLATFORM_ORIGIN, xr as originFromPublicUrl } from "./dist-ZZlE2vk6.mjs";
3
3
  import Conf from "conf";
4
4
  import { homedir } from "node:os";
5
5
  import { dirname, join } from "node:path";
6
6
  import { existsSync, readFileSync, realpathSync } from "node:fs";
7
- import { spawnSync } from "node:child_process";
8
7
  import { fileURLToPath } from "node:url";
8
+ import { spawnSync } from "node:child_process";
9
9
  //#region src/resolve-platform-url.ts
10
10
  const DEFAULT_WEB_URL = "https://keystroke.ai";
11
11
  const DEFAULT_PLATFORM_URL = "https://api.keystroke.ai";
@@ -76,6 +76,27 @@ function getPlatformUrl(config) {
76
76
  return resolvePlatformUrlForWebUrl(getWebUrl(config), { fallback: config.get("platformUrl") });
77
77
  }
78
78
  //#endregion
79
+ //#region src/project/resolve-cli-root.ts
80
+ function isCliPackage(dir) {
81
+ const packageJsonPath = join(dir, "package.json");
82
+ if (!existsSync(packageJsonPath)) return false;
83
+ return JSON.parse(readFileSync(packageJsonPath, "utf8")).name === "@keystrokehq/cli";
84
+ }
85
+ function resolveCliRoot(fromModuleUrl) {
86
+ let dir = dirname(fileURLToPath(fromModuleUrl));
87
+ while (dir !== dirname(dir)) {
88
+ if (isCliPackage(dir)) return dir;
89
+ dir = dirname(dir);
90
+ }
91
+ throw new Error("Could not resolve keystroke CLI package root");
92
+ }
93
+ //#endregion
94
+ //#region src/version.ts
95
+ function readCliVersion() {
96
+ const packageJsonPath = join(resolveCliRoot(import.meta.url), "package.json");
97
+ return JSON.parse(readFileSync(packageJsonPath, "utf8")).version ?? "0.0.0";
98
+ }
99
+ //#endregion
79
100
  //#region src/update/compare-version.ts
80
101
  function parseVersion(version) {
81
102
  const [major = 0, minor = 0, patch = 0] = (version.trim().replace(/^v/, "").split("-")[0] ?? "").split(".").map((part) => {
@@ -96,21 +117,6 @@ function isNewerVersion(latest, current) {
96
117
  return latestPatch > currentPatch;
97
118
  }
98
119
  //#endregion
99
- //#region src/project/resolve-cli-root.ts
100
- function isCliPackage(dir) {
101
- const packageJsonPath = join(dir, "package.json");
102
- if (!existsSync(packageJsonPath)) return false;
103
- return JSON.parse(readFileSync(packageJsonPath, "utf8")).name === "@keystrokehq/cli";
104
- }
105
- function resolveCliRoot(fromModuleUrl) {
106
- let dir = dirname(fileURLToPath(fromModuleUrl));
107
- while (dir !== dirname(dir)) {
108
- if (isCliPackage(dir)) return dir;
109
- dir = dirname(dir);
110
- }
111
- throw new Error("Could not resolve keystroke CLI package root");
112
- }
113
- //#endregion
114
120
  //#region src/init/package-manager.ts
115
121
  const MANAGERS = [
116
122
  "pnpm",
@@ -176,12 +182,6 @@ function buildPlaygroundWorkspace(monorepoRoot) {
176
182
  }).status !== 0) throw new Error("workspace build failed (pnpm run build)");
177
183
  }
178
184
  //#endregion
179
- //#region src/version.ts
180
- function readCliVersion() {
181
- const packageJsonPath = join(resolveCliRoot(import.meta.url), "package.json");
182
- return JSON.parse(readFileSync(packageJsonPath, "utf8")).version ?? "0.0.0";
183
- }
184
- //#endregion
185
185
  //#region src/update/detect-cli-install.ts
186
186
  function realpathSafe(path) {
187
187
  try {
@@ -452,6 +452,6 @@ function runPackageManagerUpdate(install) {
452
452
  return firstAttempt;
453
453
  }
454
454
  //#endregion
455
- export { getWebUrl as C, resolvePlatformUrlForWebUrl as E, getPlatformUrl as S, DEFAULT_WEB_URL as T, isNewerVersion as _, formatReleaseAgeBlockMessage as a, getConfigDir as b, detectManagerFromLockfile as c, detectPackageManager as d, installDependencies as f, resolveCliRoot as g, resolvePackageManager as h, fetchLatestCliRelease as i, readCliVersion as l, resolveGithubPackagesToken as m, computeReleaseAgeRetryAfter as n, isReleaseAgeBlock as o, installPlaygroundDependencies as p, readPnpmMinimumReleaseAgeMinutes as r, detectCliInstall as s, runPackageManagerUpdate as t, buildPlaygroundWorkspace as u, createCliConfig as v, DEFAULT_PLATFORM_URL as w, getEffectiveApiTarget as x, getCliConfigDir as y };
455
+ export { getWebUrl as C, resolvePlatformUrlForWebUrl as E, getPlatformUrl as S, DEFAULT_WEB_URL as T, resolveCliRoot as _, formatReleaseAgeBlockMessage as a, getConfigDir as b, detectManagerFromLockfile as c, installDependencies as d, installPlaygroundDependencies as f, readCliVersion as g, isNewerVersion as h, fetchLatestCliRelease as i, buildPlaygroundWorkspace as l, resolvePackageManager as m, computeReleaseAgeRetryAfter as n, isReleaseAgeBlock as o, resolveGithubPackagesToken as p, readPnpmMinimumReleaseAgeMinutes as r, detectCliInstall as s, runPackageManagerUpdate as t, detectPackageManager as u, createCliConfig as v, DEFAULT_PLATFORM_URL as w, getEffectiveApiTarget as x, getCliConfigDir as y };
456
456
 
457
- //# sourceMappingURL=run-package-manager-update-CEE3gsWX.mjs.map
457
+ //# sourceMappingURL=run-package-manager-update-BVuBh1a2.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-package-manager-update-CEE3gsWX.mjs","names":[],"sources":["../src/resolve-platform-url.ts","../src/config.ts","../src/update/compare-version.ts","../src/project/resolve-cli-root.ts","../src/init/package-manager.ts","../src/version.ts","../src/update/detect-cli-install.ts","../src/update/detect-release-age-block.ts","../src/update/fetch-latest-version.ts","../src/update/read-pnpm-release-age-minutes.ts","../src/update/resolve-global-pnpm-root.ts","../src/update/build-update-command.ts","../src/update/run-package-manager-update.ts"],"sourcesContent":["import { LOCAL_PLATFORM_ORIGIN, originFromPublicUrl } from \"@keystrokehq/shared\";\n\nexport const DEFAULT_WEB_URL = \"https://keystroke.ai\";\nexport const DEFAULT_PLATFORM_URL = \"https://api.keystroke.ai\";\nexport const LOCAL_WEB_URL = \"http://localhost:3000\";\n\nexport type ResolvePlatformUrlOptions = {\n platformUrl?: string;\n /** Used when webUrl does not match a known deployment. */\n fallback?: string;\n};\n\nfunction webOriginFromUrl(webUrl: string): string {\n return originFromPublicUrl(webUrl, webUrl.replace(/\\/+$/, \"\"));\n}\n\n/** Known web origins with a fixed platform API — undefined for custom/staging URLs. */\nexport function knownPlatformUrlForWebUrl(webUrl: string): string | undefined {\n const webOrigin = webOriginFromUrl(webUrl);\n\n if (webOrigin === LOCAL_WEB_URL || webOrigin === \"http://127.0.0.1:3000\") {\n return LOCAL_PLATFORM_ORIGIN;\n }\n\n if (webOrigin === DEFAULT_WEB_URL) {\n return DEFAULT_PLATFORM_URL;\n }\n\n return undefined;\n}\n\nexport function resolvePlatformUrlForWebUrl(\n webUrl: string,\n options: ResolvePlatformUrlOptions = {},\n): string {\n const explicit = options.platformUrl?.trim();\n if (explicit) {\n return explicit.replace(/\\/+$/, \"\");\n }\n\n const known = knownPlatformUrlForWebUrl(webUrl);\n if (known) {\n return known;\n }\n\n const fallback = options.fallback?.trim() || DEFAULT_PLATFORM_URL;\n return fallback.replace(/\\/+$/, \"\");\n}\n","import Conf from \"conf\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\n\nimport {\n DEFAULT_PLATFORM_URL,\n DEFAULT_WEB_URL,\n knownPlatformUrlForWebUrl,\n resolvePlatformUrlForWebUrl,\n} from \"./resolve-platform-url\";\n\nexport type ApiTargetMode = \"local\" | \"platform\";\n\nexport type CliConfig = {\n webUrl: string;\n platformUrl: string;\n apiTarget?: ApiTargetMode;\n};\n\nexport function getCliConfigDir(cwd = join(homedir(), \".keystroke\")): string {\n return cwd;\n}\n\nexport function getConfigDir(config: Conf<CliConfig>): string {\n return dirname(config.path);\n}\n\nexport function getEffectiveApiTarget(config: Conf<CliConfig>): ApiTargetMode {\n const explicit = config.get(\"apiTarget\");\n if (explicit === \"local\" || explicit === \"platform\") {\n return explicit;\n }\n\n if (process.env.KEYSTROKE_API_KEY?.trim()) {\n return \"platform\";\n }\n\n return \"local\";\n}\n\nfunction syncPlatformUrlWithWebUrl(config: Conf<CliConfig>): void {\n const webUrl = config.get(\"webUrl\");\n const known = knownPlatformUrlForWebUrl(webUrl);\n if (!known) {\n return;\n }\n\n const stored = config.get(\"platformUrl\");\n if (stored !== known) {\n config.set(\"platformUrl\", known);\n }\n}\n\nexport function createCliConfig(cwd = getCliConfigDir()): Conf<CliConfig> {\n const config = new Conf<CliConfig>({\n projectName: \"keystroke\",\n cwd,\n schema: {\n webUrl: {\n type: \"string\",\n default: DEFAULT_WEB_URL,\n },\n platformUrl: {\n type: \"string\",\n default: DEFAULT_PLATFORM_URL,\n },\n apiTarget: {\n type: \"string\",\n enum: [\"local\", \"platform\"],\n },\n },\n });\n\n syncPlatformUrlWithWebUrl(config);\n return config;\n}\n\nexport function getWebUrl(config: Conf<CliConfig>): string {\n return config.get(\"webUrl\");\n}\n\nexport function getPlatformUrl(config: Conf<CliConfig>): string {\n const apiKey = process.env.KEYSTROKE_API_KEY?.trim();\n const fromEnv = process.env.KEYSTROKE_PLATFORM_URL?.trim();\n if (apiKey && fromEnv) {\n return fromEnv.replace(/\\/+$/, \"\");\n }\n return resolvePlatformUrlForWebUrl(getWebUrl(config), {\n fallback: config.get(\"platformUrl\"),\n });\n}\n","function parseVersion(version: string): [number, number, number] {\n const normalized = version.trim().replace(/^v/, \"\").split(\"-\")[0] ?? \"\";\n const [major = 0, minor = 0, patch = 0] = normalized.split(\".\").map((part) => {\n const value = Number.parseInt(part, 10);\n return Number.isFinite(value) ? value : 0;\n });\n\n return [major, minor, patch];\n}\n\nexport function isNewerVersion(latest: string, current: string): boolean {\n const [latestMajor, latestMinor, latestPatch] = parseVersion(latest);\n const [currentMajor, currentMinor, currentPatch] = parseVersion(current);\n\n if (latestMajor !== currentMajor) {\n return latestMajor > currentMajor;\n }\n\n if (latestMinor !== currentMinor) {\n return latestMinor > currentMinor;\n }\n\n return latestPatch > currentPatch;\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nfunction isCliPackage(dir: string): boolean {\n const packageJsonPath = join(dir, \"package.json\");\n if (!existsSync(packageJsonPath)) {\n return false;\n }\n\n const pkg = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as { name?: string };\n return pkg.name === \"@keystrokehq/cli\";\n}\n\nexport function resolveCliRoot(fromModuleUrl: string): string {\n let dir = dirname(fileURLToPath(fromModuleUrl));\n\n while (dir !== dirname(dir)) {\n if (isCliPackage(dir)) {\n return dir;\n }\n\n dir = dirname(dir);\n }\n\n throw new Error(\"Could not resolve keystroke CLI package root\");\n}\n","import { spawnSync } from \"node:child_process\";\n\nexport type PackageManager = \"npm\" | \"pnpm\" | \"yarn\" | \"bun\";\n\nconst MANAGERS: PackageManager[] = [\"pnpm\", \"npm\", \"yarn\", \"bun\"];\n\nexport function detectPackageManager(): PackageManager {\n const userAgent = process.env.npm_config_user_agent ?? \"\";\n\n for (const manager of MANAGERS) {\n if (userAgent.startsWith(manager)) {\n return manager;\n }\n }\n\n if (process.env.PNPM_HOME) {\n return \"pnpm\";\n }\n\n return \"npm\";\n}\n\nexport function resolvePackageManager(explicit?: string): PackageManager {\n if (!explicit) {\n return detectPackageManager();\n }\n\n const normalized = explicit.trim().toLowerCase();\n if (!MANAGERS.includes(normalized as PackageManager)) {\n throw new Error(`Unsupported package manager \"${explicit}\". Use npm, pnpm, yarn, or bun.`);\n }\n\n return normalized as PackageManager;\n}\n\n/** Resolve GitHub Packages auth for @keystrokehq/* when NODE_AUTH_TOKEN is unset. */\nexport function resolveGithubPackagesToken(): string | undefined {\n if (process.env.NODE_AUTH_TOKEN) {\n return process.env.NODE_AUTH_TOKEN;\n }\n\n for (const key of [\"GITHUB_TOKEN\", \"GH_TOKEN\"] as const) {\n const value = process.env[key];\n if (value) {\n return value;\n }\n }\n\n const gh = spawnSync(\"gh\", [\"auth\", \"token\"], { encoding: \"utf8\" });\n if (gh.status === 0) {\n const token = gh.stdout.trim();\n if (token) {\n return token;\n }\n }\n\n return undefined;\n}\n\nexport function installDependencies(cwd: string, manager: PackageManager): void {\n const token = resolveGithubPackagesToken();\n const env = token ? { ...process.env, NODE_AUTH_TOKEN: token } : process.env;\n\n const result = spawnSync(manager, [\"install\"], {\n cwd,\n stdio: \"inherit\",\n env,\n });\n\n if (result.status !== 0) {\n throw new Error(`${manager} install failed`);\n }\n}\n\nexport function installPlaygroundDependencies(cwd: string): void {\n const result = spawnSync(\"pnpm\", [\"install\", \"--ignore-workspace\"], {\n cwd,\n stdio: \"inherit\",\n env: process.env,\n });\n\n if (result.status !== 0) {\n throw new Error(\"pnpm install failed\");\n }\n}\n\n/**\n * Build every workspace package so the playground's `link:` deps resolve to\n * compiled `dist/`. Without this, `keystroke dev` fails with\n * `ERR_MODULE_NOT_FOUND` against whichever package was never built. Turbo\n * caches, so this is only slow on the first run.\n */\nexport function buildPlaygroundWorkspace(monorepoRoot: string): void {\n // Build with a clean Node env: the `keystroke-dev` wrapper sets\n // NODE_OPTIONS=--conditions=development, which would make tsdown/turbo resolve\n // their own deps to src/ and fail. Dropping NODE_OPTIONS builds to dist/ normally.\n const { NODE_OPTIONS: _drop, ...buildEnv } = process.env;\n const result = spawnSync(\"pnpm\", [\"run\", \"build\"], {\n cwd: monorepoRoot,\n stdio: \"inherit\",\n env: buildEnv,\n });\n\n if (result.status !== 0) {\n throw new Error(\"workspace build failed (pnpm run build)\");\n }\n}\n","import { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { resolveCliRoot } from \"./project/resolve-cli-root\";\n\nexport function readCliVersion(): string {\n const packageJsonPath = join(resolveCliRoot(import.meta.url), \"package.json\");\n const pkg = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as { version?: string };\n return pkg.version ?? \"0.0.0\";\n}\n","import { existsSync, realpathSync } from \"node:fs\";\nimport { spawnSync } from \"node:child_process\";\nimport { dirname, join } from \"node:path\";\n\nimport { detectPackageManager, type PackageManager } from \"../init/package-manager\";\n\nexport type CliInstallKind = \"global\" | \"local\";\n\nexport type CliInstallInfo = {\n kind: CliInstallKind;\n packageManager: PackageManager;\n packageRoot: string;\n projectRoot?: string;\n};\n\nfunction realpathSafe(path: string): string {\n try {\n return realpathSync(path);\n } catch {\n return path;\n }\n}\n\nexport function detectManagerFromLockfile(dir: string): PackageManager | undefined {\n if (existsSync(join(dir, \"pnpm-lock.yaml\"))) {\n return \"pnpm\";\n }\n\n if (existsSync(join(dir, \"bun.lockb\")) || existsSync(join(dir, \"bun.lock\"))) {\n return \"bun\";\n }\n\n if (existsSync(join(dir, \"yarn.lock\"))) {\n return \"yarn\";\n }\n\n if (existsSync(join(dir, \"package-lock.json\"))) {\n return \"npm\";\n }\n\n return undefined;\n}\n\nfunction findLocalProjectRoot(packageRoot: string): string | undefined {\n const normalizedRoot = realpathSafe(packageRoot);\n let dir = dirname(packageRoot);\n\n while (dir !== dirname(dir)) {\n const installedCliPath = join(dir, \"node_modules\", \"@keystrokehq\", \"cli\");\n if (\n existsSync(join(dir, \"package.json\")) &&\n realpathSafe(installedCliPath) === normalizedRoot\n ) {\n return dir;\n }\n\n dir = dirname(dir);\n }\n\n return undefined;\n}\n\nfunction globalRootForManager(manager: PackageManager): string | undefined {\n const commands: Record<PackageManager, { command: string; args: string[] }> = {\n pnpm: { command: \"pnpm\", args: [\"root\", \"-g\"] },\n npm: { command: \"npm\", args: [\"root\", \"-g\"] },\n yarn: { command: \"yarn\", args: [\"global\", \"dir\"] },\n bun: { command: \"bun\", args: [\"pm\", \"bin\"] },\n };\n\n const { command, args } = commands[manager];\n const result = spawnSync(command, args, { encoding: \"utf8\" });\n\n if (result.status !== 0) {\n return undefined;\n }\n\n const root = result.stdout.trim();\n return root ? realpathSafe(root) : undefined;\n}\n\nfunction detectGlobalManager(packageRoot: string): PackageManager {\n const normalizedRoot = realpathSafe(packageRoot);\n\n if (normalizedRoot.includes(`${join(\"\", \".pnpm\")}`)) {\n return \"pnpm\";\n }\n\n for (const manager of [\"pnpm\", \"npm\", \"yarn\", \"bun\"] as const) {\n const globalRoot = globalRootForManager(manager);\n if (globalRoot && normalizedRoot.startsWith(globalRoot)) {\n return manager;\n }\n }\n\n if (process.env.PNPM_HOME) {\n return \"pnpm\";\n }\n\n return detectPackageManager();\n}\n\nexport function detectCliInstall(packageRoot: string): CliInstallInfo | undefined {\n const normalizedRoot = realpathSafe(packageRoot);\n const projectRoot = findLocalProjectRoot(normalizedRoot);\n\n if (projectRoot) {\n const packageManager = detectManagerFromLockfile(projectRoot) ?? detectPackageManager();\n\n return {\n kind: \"local\",\n packageManager,\n packageRoot: normalizedRoot,\n projectRoot,\n };\n }\n\n return {\n kind: \"global\",\n packageManager: detectGlobalManager(normalizedRoot),\n packageRoot: normalizedRoot,\n };\n}\n","const RELEASE_AGE_PATTERNS = [\n /minimumReleaseAge/i,\n /minimum-release-age/i,\n /ERR_PNPM_NO_MATURE_MATCHING_VERSION/,\n /ERR_PNPM_MINIMUM_RELEASE_AGE/,\n /does not meet the minimumReleaseAge constraint/,\n];\n\nexport function isReleaseAgeBlock(output: string): boolean {\n return RELEASE_AGE_PATTERNS.some((pattern) => pattern.test(output));\n}\n\nexport function formatReleaseAgeBlockMessage(options: {\n currentVersion: string;\n availableVersion: string;\n retryAfter?: Date;\n}): string {\n const retry =\n options.retryAfter !== undefined ? ` Retry after ${options.retryAfter.toLocaleString()}.` : \"\";\n\n return (\n `@keystrokehq/cli ${options.availableVersion} is available but blocked by your ` +\n `minimum-release-age setting. You're on ${options.currentVersion}.${retry} ` +\n `Add @keystrokehq/cli to minimumReleaseAgeExclude to install immediately.`\n );\n}\n","const REGISTRY_URL = \"https://registry.npmjs.org/@keystrokehq%2Fcli\";\nconst REQUEST_TIMEOUT_MS = 3_000;\n\ntype RegistryPackage = {\n \"dist-tags\"?: {\n latest?: string;\n };\n time?: Record<string, string>;\n};\n\nexport type CliRegistryRelease = {\n version: string;\n publishedAt?: string;\n};\n\nexport async function fetchLatestCliRelease(): Promise<CliRegistryRelease | undefined> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);\n\n try {\n const response = await fetch(REGISTRY_URL, {\n signal: controller.signal,\n headers: {\n Accept: \"application/json\",\n },\n });\n\n if (!response.ok) {\n return undefined;\n }\n\n const payload = (await response.json()) as RegistryPackage;\n const version = payload[\"dist-tags\"]?.latest?.trim();\n if (!version) {\n return undefined;\n }\n\n return {\n version,\n publishedAt: payload.time?.[version],\n };\n } catch {\n return undefined;\n } finally {\n clearTimeout(timeout);\n }\n}\n\nexport async function fetchLatestCliVersion(): Promise<string | undefined> {\n const release = await fetchLatestCliRelease();\n return release?.version;\n}\n","import { spawnSync } from \"node:child_process\";\n\nexport function readPnpmMinimumReleaseAgeMinutes(): number | undefined {\n const result = spawnSync(\"pnpm\", [\"config\", \"get\", \"minimum-release-age\"], {\n encoding: \"utf8\",\n });\n\n if (result.status !== 0) {\n return undefined;\n }\n\n const value = result.stdout.trim();\n if (!value || value === \"undefined\" || value === \"0\") {\n return undefined;\n }\n\n const minutes = Number.parseInt(value, 10);\n return Number.isFinite(minutes) && minutes > 0 ? minutes : undefined;\n}\n\nexport function computeReleaseAgeRetryAfter(\n publishedAt: string | undefined,\n minimumReleaseAgeMinutes: number | undefined,\n): Date | undefined {\n if (!publishedAt || !minimumReleaseAgeMinutes) {\n return undefined;\n }\n\n const publishedMs = Date.parse(publishedAt);\n if (!Number.isFinite(publishedMs)) {\n return undefined;\n }\n\n return new Date(publishedMs + minimumReleaseAgeMinutes * 60_000);\n}\n","/** pnpm global installs live in `<pnpm-home>/global/<major>/`. */\nexport function resolveGlobalPnpmRoot(packageRoot: string): string | undefined {\n const normalized = packageRoot.replace(/\\\\/g, \"/\");\n const match = normalized.match(/^(.*\\/global\\/\\d+)\\//);\n return match?.[1];\n}\n","import type { CliInstallInfo } from \"./detect-cli-install\";\nimport { resolveGlobalPnpmRoot } from \"./resolve-global-pnpm-root\";\n\nconst PACKAGE_NAME = \"@keystrokehq/cli@latest\";\n\nexport function buildUpdateCommand(install: CliInstallInfo): {\n command: string;\n args: string[];\n cwd?: string;\n} {\n const { kind, packageManager } = install;\n\n if (kind === \"global\") {\n switch (packageManager) {\n case \"pnpm\":\n return {\n command: \"pnpm\",\n args: [\"add\", \"-g\", PACKAGE_NAME],\n cwd: resolveGlobalPnpmRoot(install.packageRoot),\n };\n case \"yarn\":\n return { command: \"yarn\", args: [\"global\", \"add\", PACKAGE_NAME] };\n case \"bun\":\n return { command: \"bun\", args: [\"add\", \"-g\", PACKAGE_NAME] };\n case \"npm\":\n default:\n return { command: \"npm\", args: [\"install\", \"-g\", PACKAGE_NAME] };\n }\n }\n\n const cwd = install.projectRoot;\n switch (packageManager) {\n case \"pnpm\":\n return { command: \"pnpm\", args: [\"add\", \"-D\", PACKAGE_NAME], cwd };\n case \"yarn\":\n return { command: \"yarn\", args: [\"add\", \"-D\", PACKAGE_NAME], cwd };\n case \"bun\":\n return { command: \"bun\", args: [\"add\", \"-D\", PACKAGE_NAME], cwd };\n case \"npm\":\n default:\n return { command: \"npm\", args: [\"install\", \"-D\", PACKAGE_NAME], cwd };\n }\n}\n","import { spawnSync } from \"node:child_process\";\n\nimport { buildUpdateCommand } from \"./build-update-command\";\nimport type { CliInstallInfo } from \"./detect-cli-install\";\n\nexport function updateSpawnEnv(): NodeJS.ProcessEnv {\n const env = { ...process.env };\n const pnpmHome = env.PNPM_HOME;\n\n if (!pnpmHome) {\n return env;\n }\n\n const pathKey = process.platform === \"win32\" ? \"Path\" : \"PATH\";\n const path = env[pathKey] ?? \"\";\n const segments = path.split(process.platform === \"win32\" ? \";\" : \":\");\n const binDir = `${pnpmHome}/bin`;\n const prefix = [binDir, pnpmHome].filter((dir) => !segments.includes(dir));\n\n if (prefix.length > 0) {\n env[pathKey] = [...prefix, path].filter(Boolean).join(process.platform === \"win32\" ? \";\" : \":\");\n }\n\n return env;\n}\n\nexport type PackageManagerRunResult = {\n ok: boolean;\n output: string;\n};\n\nfunction runPackageManager(command: string, args: string[], cwd?: string): PackageManagerRunResult {\n const result = spawnSync(command, args, {\n cwd,\n encoding: \"utf8\",\n env: updateSpawnEnv(),\n });\n\n const output = `${result.stdout ?? \"\"}${result.stderr ?? \"\"}`;\n\n return {\n ok: result.status === 0,\n output,\n };\n}\n\nfunction migratePnpmGlobal(cwd: string): boolean {\n const result = spawnSync(\"pnpm\", [\"install\"], {\n cwd,\n encoding: \"utf8\",\n env: {\n ...updateSpawnEnv(),\n CI: \"true\",\n },\n });\n\n return result.status === 0;\n}\n\nexport function runPackageManagerUpdate(install: CliInstallInfo): PackageManagerRunResult {\n const { command, args, cwd } = buildUpdateCommand(install);\n const firstAttempt = runPackageManager(command, args, cwd);\n\n if (firstAttempt.ok) {\n return firstAttempt;\n }\n\n if (install.kind === \"global\" && install.packageManager === \"pnpm\" && cwd) {\n if (migratePnpmGlobal(cwd)) {\n return runPackageManager(command, args, cwd);\n }\n }\n\n return firstAttempt;\n}\n"],"mappings":";;;;;;;;;AAEA,MAAa,kBAAkB;AAC/B,MAAa,uBAAuB;AASpC,SAAS,iBAAiB,QAAwB;CAChD,OAAO,oBAAoB,QAAQ,OAAO,QAAQ,QAAQ,EAAE,CAAC;AAC/D;;AAGA,SAAgB,0BAA0B,QAAoC;CAC5E,MAAM,YAAY,iBAAiB,MAAM;CAEzC,IAAI,cAAA,2BAA+B,cAAc,yBAC/C,OAAO;CAGT,IAAI,cAAA,wBACF,OAAO;AAIX;AAEA,SAAgB,4BACd,QACA,UAAqC,CAAC,GAC9B;CACR,MAAM,WAAW,QAAQ,aAAa,KAAK;CAC3C,IAAI,UACF,OAAO,SAAS,QAAQ,QAAQ,EAAE;CAGpC,MAAM,QAAQ,0BAA0B,MAAM;CAC9C,IAAI,OACF,OAAO;CAIT,QADiB,QAAQ,UAAU,KAAK,KAAA,4BACxB,QAAQ,QAAQ,EAAE;AACpC;;;AC5BA,SAAgB,gBAAgB,MAAM,KAAK,QAAQ,GAAG,YAAY,GAAW;CAC3E,OAAO;AACT;AAEA,SAAgB,aAAa,QAAiC;CAC5D,OAAO,QAAQ,OAAO,IAAI;AAC5B;AAEA,SAAgB,sBAAsB,QAAwC;CAC5E,MAAM,WAAW,OAAO,IAAI,WAAW;CACvC,IAAI,aAAa,WAAW,aAAa,YACvC,OAAO;CAGT,IAAI,QAAQ,IAAI,mBAAmB,KAAK,GACtC,OAAO;CAGT,OAAO;AACT;AAEA,SAAS,0BAA0B,QAA+B;CAEhE,MAAM,QAAQ,0BADC,OAAO,IAAI,QACmB,CAAC;CAC9C,IAAI,CAAC,OACH;CAIF,IADe,OAAO,IAAI,aACjB,MAAM,OACb,OAAO,IAAI,eAAe,KAAK;AAEnC;AAEA,SAAgB,gBAAgB,MAAM,gBAAgB,GAAoB;CACxE,MAAM,SAAS,IAAI,KAAgB;EACjC,aAAa;EACb;EACA,QAAQ;GACN,QAAQ;IACN,MAAM;IACN,SAAS;GACX;GACA,aAAa;IACX,MAAM;IACN,SAAS;GACX;GACA,WAAW;IACT,MAAM;IACN,MAAM,CAAC,SAAS,UAAU;GAC5B;EACF;CACF,CAAC;CAED,0BAA0B,MAAM;CAChC,OAAO;AACT;AAEA,SAAgB,UAAU,QAAiC;CACzD,OAAO,OAAO,IAAI,QAAQ;AAC5B;AAEA,SAAgB,eAAe,QAAiC;CAC9D,MAAM,SAAS,QAAQ,IAAI,mBAAmB,KAAK;CACnD,MAAM,UAAU,QAAQ,IAAI,wBAAwB,KAAK;CACzD,IAAI,UAAU,SACZ,OAAO,QAAQ,QAAQ,QAAQ,EAAE;CAEnC,OAAO,4BAA4B,UAAU,MAAM,GAAG,EACpD,UAAU,OAAO,IAAI,aAAa,EACpC,CAAC;AACH;;;AC1FA,SAAS,aAAa,SAA2C;CAE/D,MAAM,CAAC,QAAQ,GAAG,QAAQ,GAAG,QAAQ,MADlB,QAAQ,KAAK,EAAE,QAAQ,MAAM,EAAE,EAAE,MAAM,GAAG,EAAE,MAAM,IAChB,MAAM,GAAG,EAAE,KAAK,SAAS;EAC5E,MAAM,QAAQ,OAAO,SAAS,MAAM,EAAE;EACtC,OAAO,OAAO,SAAS,KAAK,IAAI,QAAQ;CAC1C,CAAC;CAED,OAAO;EAAC;EAAO;EAAO;CAAK;AAC7B;AAEA,SAAgB,eAAe,QAAgB,SAA0B;CACvE,MAAM,CAAC,aAAa,aAAa,eAAe,aAAa,MAAM;CACnE,MAAM,CAAC,cAAc,cAAc,gBAAgB,aAAa,OAAO;CAEvE,IAAI,gBAAgB,cAClB,OAAO,cAAc;CAGvB,IAAI,gBAAgB,cAClB,OAAO,cAAc;CAGvB,OAAO,cAAc;AACvB;;;ACnBA,SAAS,aAAa,KAAsB;CAC1C,MAAM,kBAAkB,KAAK,KAAK,cAAc;CAChD,IAAI,CAAC,WAAW,eAAe,GAC7B,OAAO;CAIT,OADY,KAAK,MAAM,aAAa,iBAAiB,MAAM,CAClD,EAAE,SAAS;AACtB;AAEA,SAAgB,eAAe,eAA+B;CAC5D,IAAI,MAAM,QAAQ,cAAc,aAAa,CAAC;CAE9C,OAAO,QAAQ,QAAQ,GAAG,GAAG;EAC3B,IAAI,aAAa,GAAG,GAClB,OAAO;EAGT,MAAM,QAAQ,GAAG;CACnB;CAEA,MAAM,IAAI,MAAM,8CAA8C;AAChE;;;ACtBA,MAAM,WAA6B;CAAC;CAAQ;CAAO;CAAQ;AAAK;AAEhE,SAAgB,uBAAuC;CACrD,MAAM,YAAY,QAAQ,IAAI,yBAAyB;CAEvD,KAAK,MAAM,WAAW,UACpB,IAAI,UAAU,WAAW,OAAO,GAC9B,OAAO;CAIX,IAAI,QAAQ,IAAI,WACd,OAAO;CAGT,OAAO;AACT;AAEA,SAAgB,sBAAsB,UAAmC;CACvE,IAAI,CAAC,UACH,OAAO,qBAAqB;CAG9B,MAAM,aAAa,SAAS,KAAK,EAAE,YAAY;CAC/C,IAAI,CAAC,SAAS,SAAS,UAA4B,GACjD,MAAM,IAAI,MAAM,gCAAgC,SAAS,gCAAgC;CAG3F,OAAO;AACT;;AAGA,SAAgB,6BAAiD;CAC/D,IAAI,QAAQ,IAAI,iBACd,OAAO,QAAQ,IAAI;CAGrB,KAAK,MAAM,OAAO,CAAC,gBAAgB,UAAU,GAAY;EACvD,MAAM,QAAQ,QAAQ,IAAI;EAC1B,IAAI,OACF,OAAO;CAEX;CAEA,MAAM,KAAK,UAAU,MAAM,CAAC,QAAQ,OAAO,GAAG,EAAE,UAAU,OAAO,CAAC;CAClE,IAAI,GAAG,WAAW,GAAG;EACnB,MAAM,QAAQ,GAAG,OAAO,KAAK;EAC7B,IAAI,OACF,OAAO;CAEX;AAGF;AAEA,SAAgB,oBAAoB,KAAa,SAA+B;CAC9E,MAAM,QAAQ,2BAA2B;CASzC,IANe,UAAU,SAAS,CAAC,SAAS,GAAG;EAC7C;EACA,OAAO;EACP,KALU,QAAQ;GAAE,GAAG,QAAQ;GAAK,iBAAiB;EAAM,IAAI,QAAQ;CAMzE,CAES,EAAE,WAAW,GACpB,MAAM,IAAI,MAAM,GAAG,QAAQ,gBAAgB;AAE/C;AAEA,SAAgB,8BAA8B,KAAmB;CAO/D,IANe,UAAU,QAAQ,CAAC,WAAW,oBAAoB,GAAG;EAClE;EACA,OAAO;EACP,KAAK,QAAQ;CACf,CAES,EAAE,WAAW,GACpB,MAAM,IAAI,MAAM,qBAAqB;AAEzC;;;;;;;AAQA,SAAgB,yBAAyB,cAA4B;CAInE,MAAM,EAAE,cAAc,OAAO,GAAG,aAAa,QAAQ;CAOrD,IANe,UAAU,QAAQ,CAAC,OAAO,OAAO,GAAG;EACjD,KAAK;EACL,OAAO;EACP,KAAK;CACP,CAES,EAAE,WAAW,GACpB,MAAM,IAAI,MAAM,yCAAyC;AAE7D;;;ACtGA,SAAgB,iBAAyB;CACvC,MAAM,kBAAkB,KAAK,eAAe,OAAO,KAAK,GAAG,GAAG,cAAc;CAE5E,OADY,KAAK,MAAM,aAAa,iBAAiB,MAAM,CAClD,EAAE,WAAW;AACxB;;;ACOA,SAAS,aAAa,MAAsB;CAC1C,IAAI;EACF,OAAO,aAAa,IAAI;CAC1B,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAgB,0BAA0B,KAAyC;CACjF,IAAI,WAAW,KAAK,KAAK,gBAAgB,CAAC,GACxC,OAAO;CAGT,IAAI,WAAW,KAAK,KAAK,WAAW,CAAC,KAAK,WAAW,KAAK,KAAK,UAAU,CAAC,GACxE,OAAO;CAGT,IAAI,WAAW,KAAK,KAAK,WAAW,CAAC,GACnC,OAAO;CAGT,IAAI,WAAW,KAAK,KAAK,mBAAmB,CAAC,GAC3C,OAAO;AAIX;AAEA,SAAS,qBAAqB,aAAyC;CACrE,MAAM,iBAAiB,aAAa,WAAW;CAC/C,IAAI,MAAM,QAAQ,WAAW;CAE7B,OAAO,QAAQ,QAAQ,GAAG,GAAG;EAC3B,MAAM,mBAAmB,KAAK,KAAK,gBAAgB,gBAAgB,KAAK;EACxE,IACE,WAAW,KAAK,KAAK,cAAc,CAAC,KACpC,aAAa,gBAAgB,MAAM,gBAEnC,OAAO;EAGT,MAAM,QAAQ,GAAG;CACnB;AAGF;AAEA,SAAS,qBAAqB,SAA6C;CAQzE,MAAM,EAAE,SAAS,SAAS;EANxB,MAAM;GAAE,SAAS;GAAQ,MAAM,CAAC,QAAQ,IAAI;EAAE;EAC9C,KAAK;GAAE,SAAS;GAAO,MAAM,CAAC,QAAQ,IAAI;EAAE;EAC5C,MAAM;GAAE,SAAS;GAAQ,MAAM,CAAC,UAAU,KAAK;EAAE;EACjD,KAAK;GAAE,SAAS;GAAO,MAAM,CAAC,MAAM,KAAK;EAAE;CAGZ,EAAE;CACnC,MAAM,SAAS,UAAU,SAAS,MAAM,EAAE,UAAU,OAAO,CAAC;CAE5D,IAAI,OAAO,WAAW,GACpB;CAGF,MAAM,OAAO,OAAO,OAAO,KAAK;CAChC,OAAO,OAAO,aAAa,IAAI,IAAI,KAAA;AACrC;AAEA,SAAS,oBAAoB,aAAqC;CAChE,MAAM,iBAAiB,aAAa,WAAW;CAE/C,IAAI,eAAe,SAAS,GAAG,KAAK,IAAI,OAAO,GAAG,GAChD,OAAO;CAGT,KAAK,MAAM,WAAW;EAAC;EAAQ;EAAO;EAAQ;CAAK,GAAY;EAC7D,MAAM,aAAa,qBAAqB,OAAO;EAC/C,IAAI,cAAc,eAAe,WAAW,UAAU,GACpD,OAAO;CAEX;CAEA,IAAI,QAAQ,IAAI,WACd,OAAO;CAGT,OAAO,qBAAqB;AAC9B;AAEA,SAAgB,iBAAiB,aAAiD;CAChF,MAAM,iBAAiB,aAAa,WAAW;CAC/C,MAAM,cAAc,qBAAqB,cAAc;CAEvD,IAAI,aAGF,OAAO;EACL,MAAM;EACN,gBAJqB,0BAA0B,WAAW,KAAK,qBAAqB;EAKpF,aAAa;EACb;CACF;CAGF,OAAO;EACL,MAAM;EACN,gBAAgB,oBAAoB,cAAc;EAClD,aAAa;CACf;AACF;;;AC1HA,MAAM,uBAAuB;CAC3B;CACA;CACA;CACA;CACA;AACF;AAEA,SAAgB,kBAAkB,QAAyB;CACzD,OAAO,qBAAqB,MAAM,YAAY,QAAQ,KAAK,MAAM,CAAC;AACpE;AAEA,SAAgB,6BAA6B,SAIlC;CACT,MAAM,QACJ,QAAQ,eAAe,KAAA,IAAY,gBAAgB,QAAQ,WAAW,eAAe,EAAE,KAAK;CAE9F,OACE,oBAAoB,QAAQ,iBAAiB,2EACH,QAAQ,eAAe,GAAG,MAAM;AAG9E;;;ACzBA,MAAM,eAAe;AACrB,MAAM,qBAAqB;AAc3B,eAAsB,wBAAiE;CACrF,MAAM,aAAa,IAAI,gBAAgB;CACvC,MAAM,UAAU,iBAAiB,WAAW,MAAM,GAAG,kBAAkB;CAEvE,IAAI;EACF,MAAM,WAAW,MAAM,MAAM,cAAc;GACzC,QAAQ,WAAW;GACnB,SAAS,EACP,QAAQ,mBACV;EACF,CAAC;EAED,IAAI,CAAC,SAAS,IACZ;EAGF,MAAM,UAAW,MAAM,SAAS,KAAK;EACrC,MAAM,UAAU,QAAQ,cAAc,QAAQ,KAAK;EACnD,IAAI,CAAC,SACH;EAGF,OAAO;GACL;GACA,aAAa,QAAQ,OAAO;EAC9B;CACF,QAAQ;EACN;CACF,UAAU;EACR,aAAa,OAAO;CACtB;AACF;;;AC5CA,SAAgB,mCAAuD;CACrE,MAAM,SAAS,UAAU,QAAQ;EAAC;EAAU;EAAO;CAAqB,GAAG,EACzE,UAAU,OACZ,CAAC;CAED,IAAI,OAAO,WAAW,GACpB;CAGF,MAAM,QAAQ,OAAO,OAAO,KAAK;CACjC,IAAI,CAAC,SAAS,UAAU,eAAe,UAAU,KAC/C;CAGF,MAAM,UAAU,OAAO,SAAS,OAAO,EAAE;CACzC,OAAO,OAAO,SAAS,OAAO,KAAK,UAAU,IAAI,UAAU,KAAA;AAC7D;AAEA,SAAgB,4BACd,aACA,0BACkB;CAClB,IAAI,CAAC,eAAe,CAAC,0BACnB;CAGF,MAAM,cAAc,KAAK,MAAM,WAAW;CAC1C,IAAI,CAAC,OAAO,SAAS,WAAW,GAC9B;CAGF,OAAO,IAAI,KAAK,cAAc,2BAA2B,GAAM;AACjE;;;;ACjCA,SAAgB,sBAAsB,aAAyC;CAG7E,OAFmB,YAAY,QAAQ,OAAO,GACvB,EAAE,MAAM,sBACpB,IAAI;AACjB;;;ACFA,MAAM,eAAe;AAErB,SAAgB,mBAAmB,SAIjC;CACA,MAAM,EAAE,MAAM,mBAAmB;CAEjC,IAAI,SAAS,UACX,QAAQ,gBAAR;EACE,KAAK,QACH,OAAO;GACL,SAAS;GACT,MAAM;IAAC;IAAO;IAAM;GAAY;GAChC,KAAK,sBAAsB,QAAQ,WAAW;EAChD;EACF,KAAK,QACH,OAAO;GAAE,SAAS;GAAQ,MAAM;IAAC;IAAU;IAAO;GAAY;EAAE;EAClE,KAAK,OACH,OAAO;GAAE,SAAS;GAAO,MAAM;IAAC;IAAO;IAAM;GAAY;EAAE;EAE7D,SACE,OAAO;GAAE,SAAS;GAAO,MAAM;IAAC;IAAW;IAAM;GAAY;EAAE;CACnE;CAGF,MAAM,MAAM,QAAQ;CACpB,QAAQ,gBAAR;EACE,KAAK,QACH,OAAO;GAAE,SAAS;GAAQ,MAAM;IAAC;IAAO;IAAM;GAAY;GAAG;EAAI;EACnE,KAAK,QACH,OAAO;GAAE,SAAS;GAAQ,MAAM;IAAC;IAAO;IAAM;GAAY;GAAG;EAAI;EACnE,KAAK,OACH,OAAO;GAAE,SAAS;GAAO,MAAM;IAAC;IAAO;IAAM;GAAY;GAAG;EAAI;EAElE,SACE,OAAO;GAAE,SAAS;GAAO,MAAM;IAAC;IAAW;IAAM;GAAY;GAAG;EAAI;CACxE;AACF;;;ACrCA,SAAgB,iBAAoC;CAClD,MAAM,MAAM,EAAE,GAAG,QAAQ,IAAI;CAC7B,MAAM,WAAW,IAAI;CAErB,IAAI,CAAC,UACH,OAAO;CAGT,MAAM,UAAU,QAAQ,aAAa,UAAU,SAAS;CACxD,MAAM,OAAO,IAAI,YAAY;CAC7B,MAAM,WAAW,KAAK,MAAM,QAAQ,aAAa,UAAU,MAAM,GAAG;CAEpE,MAAM,SAAS,CAAC,GADE,SAAS,OACH,QAAQ,EAAE,QAAQ,QAAQ,CAAC,SAAS,SAAS,GAAG,CAAC;CAEzE,IAAI,OAAO,SAAS,GAClB,IAAI,WAAW,CAAC,GAAG,QAAQ,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,QAAQ,aAAa,UAAU,MAAM,GAAG;CAGhG,OAAO;AACT;AAOA,SAAS,kBAAkB,SAAiB,MAAgB,KAAuC;CACjG,MAAM,SAAS,UAAU,SAAS,MAAM;EACtC;EACA,UAAU;EACV,KAAK,eAAe;CACtB,CAAC;CAED,MAAM,SAAS,GAAG,OAAO,UAAU,KAAK,OAAO,UAAU;CAEzD,OAAO;EACL,IAAI,OAAO,WAAW;EACtB;CACF;AACF;AAEA,SAAS,kBAAkB,KAAsB;CAU/C,OATe,UAAU,QAAQ,CAAC,SAAS,GAAG;EAC5C;EACA,UAAU;EACV,KAAK;GACH,GAAG,eAAe;GAClB,IAAI;EACN;CACF,CAEY,EAAE,WAAW;AAC3B;AAEA,SAAgB,wBAAwB,SAAkD;CACxF,MAAM,EAAE,SAAS,MAAM,QAAQ,mBAAmB,OAAO;CACzD,MAAM,eAAe,kBAAkB,SAAS,MAAM,GAAG;CAEzD,IAAI,aAAa,IACf,OAAO;CAGT,IAAI,QAAQ,SAAS,YAAY,QAAQ,mBAAmB,UAAU;MAChE,kBAAkB,GAAG,GACvB,OAAO,kBAAkB,SAAS,MAAM,GAAG;CAAA;CAI/C,OAAO;AACT"}
1
+ {"version":3,"file":"run-package-manager-update-BVuBh1a2.mjs","names":[],"sources":["../src/resolve-platform-url.ts","../src/config.ts","../src/project/resolve-cli-root.ts","../src/version.ts","../src/update/compare-version.ts","../src/init/package-manager.ts","../src/update/detect-cli-install.ts","../src/update/detect-release-age-block.ts","../src/update/fetch-latest-version.ts","../src/update/read-pnpm-release-age-minutes.ts","../src/update/resolve-global-pnpm-root.ts","../src/update/build-update-command.ts","../src/update/run-package-manager-update.ts"],"sourcesContent":["import { LOCAL_PLATFORM_ORIGIN, originFromPublicUrl } from \"@keystrokehq/shared\";\n\nexport const DEFAULT_WEB_URL = \"https://keystroke.ai\";\nexport const DEFAULT_PLATFORM_URL = \"https://api.keystroke.ai\";\nexport const LOCAL_WEB_URL = \"http://localhost:3000\";\n\nexport type ResolvePlatformUrlOptions = {\n platformUrl?: string;\n /** Used when webUrl does not match a known deployment. */\n fallback?: string;\n};\n\nfunction webOriginFromUrl(webUrl: string): string {\n return originFromPublicUrl(webUrl, webUrl.replace(/\\/+$/, \"\"));\n}\n\n/** Known web origins with a fixed platform API — undefined for custom/staging URLs. */\nexport function knownPlatformUrlForWebUrl(webUrl: string): string | undefined {\n const webOrigin = webOriginFromUrl(webUrl);\n\n if (webOrigin === LOCAL_WEB_URL || webOrigin === \"http://127.0.0.1:3000\") {\n return LOCAL_PLATFORM_ORIGIN;\n }\n\n if (webOrigin === DEFAULT_WEB_URL) {\n return DEFAULT_PLATFORM_URL;\n }\n\n return undefined;\n}\n\nexport function resolvePlatformUrlForWebUrl(\n webUrl: string,\n options: ResolvePlatformUrlOptions = {},\n): string {\n const explicit = options.platformUrl?.trim();\n if (explicit) {\n return explicit.replace(/\\/+$/, \"\");\n }\n\n const known = knownPlatformUrlForWebUrl(webUrl);\n if (known) {\n return known;\n }\n\n const fallback = options.fallback?.trim() || DEFAULT_PLATFORM_URL;\n return fallback.replace(/\\/+$/, \"\");\n}\n","import Conf from \"conf\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\n\nimport {\n DEFAULT_PLATFORM_URL,\n DEFAULT_WEB_URL,\n knownPlatformUrlForWebUrl,\n resolvePlatformUrlForWebUrl,\n} from \"./resolve-platform-url\";\n\nexport type ApiTargetMode = \"local\" | \"platform\";\n\nexport type CliConfig = {\n webUrl: string;\n platformUrl: string;\n apiTarget?: ApiTargetMode;\n};\n\nexport function getCliConfigDir(cwd = join(homedir(), \".keystroke\")): string {\n return cwd;\n}\n\nexport function getConfigDir(config: Conf<CliConfig>): string {\n return dirname(config.path);\n}\n\nexport function getEffectiveApiTarget(config: Conf<CliConfig>): ApiTargetMode {\n const explicit = config.get(\"apiTarget\");\n if (explicit === \"local\" || explicit === \"platform\") {\n return explicit;\n }\n\n if (process.env.KEYSTROKE_API_KEY?.trim()) {\n return \"platform\";\n }\n\n return \"local\";\n}\n\nfunction syncPlatformUrlWithWebUrl(config: Conf<CliConfig>): void {\n const webUrl = config.get(\"webUrl\");\n const known = knownPlatformUrlForWebUrl(webUrl);\n if (!known) {\n return;\n }\n\n const stored = config.get(\"platformUrl\");\n if (stored !== known) {\n config.set(\"platformUrl\", known);\n }\n}\n\nexport function createCliConfig(cwd = getCliConfigDir()): Conf<CliConfig> {\n const config = new Conf<CliConfig>({\n projectName: \"keystroke\",\n cwd,\n schema: {\n webUrl: {\n type: \"string\",\n default: DEFAULT_WEB_URL,\n },\n platformUrl: {\n type: \"string\",\n default: DEFAULT_PLATFORM_URL,\n },\n apiTarget: {\n type: \"string\",\n enum: [\"local\", \"platform\"],\n },\n },\n });\n\n syncPlatformUrlWithWebUrl(config);\n return config;\n}\n\nexport function getWebUrl(config: Conf<CliConfig>): string {\n return config.get(\"webUrl\");\n}\n\nexport function getPlatformUrl(config: Conf<CliConfig>): string {\n const apiKey = process.env.KEYSTROKE_API_KEY?.trim();\n const fromEnv = process.env.KEYSTROKE_PLATFORM_URL?.trim();\n if (apiKey && fromEnv) {\n return fromEnv.replace(/\\/+$/, \"\");\n }\n return resolvePlatformUrlForWebUrl(getWebUrl(config), {\n fallback: config.get(\"platformUrl\"),\n });\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nfunction isCliPackage(dir: string): boolean {\n const packageJsonPath = join(dir, \"package.json\");\n if (!existsSync(packageJsonPath)) {\n return false;\n }\n\n const pkg = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as { name?: string };\n return pkg.name === \"@keystrokehq/cli\";\n}\n\nexport function resolveCliRoot(fromModuleUrl: string): string {\n let dir = dirname(fileURLToPath(fromModuleUrl));\n\n while (dir !== dirname(dir)) {\n if (isCliPackage(dir)) {\n return dir;\n }\n\n dir = dirname(dir);\n }\n\n throw new Error(\"Could not resolve keystroke CLI package root\");\n}\n","import { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { resolveCliRoot } from \"./project/resolve-cli-root\";\n\nexport function readCliVersion(): string {\n const packageJsonPath = join(resolveCliRoot(import.meta.url), \"package.json\");\n const pkg = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as { version?: string };\n return pkg.version ?? \"0.0.0\";\n}\n","function parseVersion(version: string): [number, number, number] {\n const normalized = version.trim().replace(/^v/, \"\").split(\"-\")[0] ?? \"\";\n const [major = 0, minor = 0, patch = 0] = normalized.split(\".\").map((part) => {\n const value = Number.parseInt(part, 10);\n return Number.isFinite(value) ? value : 0;\n });\n\n return [major, minor, patch];\n}\n\nexport function isNewerVersion(latest: string, current: string): boolean {\n const [latestMajor, latestMinor, latestPatch] = parseVersion(latest);\n const [currentMajor, currentMinor, currentPatch] = parseVersion(current);\n\n if (latestMajor !== currentMajor) {\n return latestMajor > currentMajor;\n }\n\n if (latestMinor !== currentMinor) {\n return latestMinor > currentMinor;\n }\n\n return latestPatch > currentPatch;\n}\n","import { spawnSync } from \"node:child_process\";\n\nexport type PackageManager = \"npm\" | \"pnpm\" | \"yarn\" | \"bun\";\n\nconst MANAGERS: PackageManager[] = [\"pnpm\", \"npm\", \"yarn\", \"bun\"];\n\nexport function detectPackageManager(): PackageManager {\n const userAgent = process.env.npm_config_user_agent ?? \"\";\n\n for (const manager of MANAGERS) {\n if (userAgent.startsWith(manager)) {\n return manager;\n }\n }\n\n if (process.env.PNPM_HOME) {\n return \"pnpm\";\n }\n\n return \"npm\";\n}\n\nexport function resolvePackageManager(explicit?: string): PackageManager {\n if (!explicit) {\n return detectPackageManager();\n }\n\n const normalized = explicit.trim().toLowerCase();\n if (!MANAGERS.includes(normalized as PackageManager)) {\n throw new Error(`Unsupported package manager \"${explicit}\". Use npm, pnpm, yarn, or bun.`);\n }\n\n return normalized as PackageManager;\n}\n\n/** Resolve GitHub Packages auth for @keystrokehq/* when NODE_AUTH_TOKEN is unset. */\nexport function resolveGithubPackagesToken(): string | undefined {\n if (process.env.NODE_AUTH_TOKEN) {\n return process.env.NODE_AUTH_TOKEN;\n }\n\n for (const key of [\"GITHUB_TOKEN\", \"GH_TOKEN\"] as const) {\n const value = process.env[key];\n if (value) {\n return value;\n }\n }\n\n const gh = spawnSync(\"gh\", [\"auth\", \"token\"], { encoding: \"utf8\" });\n if (gh.status === 0) {\n const token = gh.stdout.trim();\n if (token) {\n return token;\n }\n }\n\n return undefined;\n}\n\nexport function installDependencies(cwd: string, manager: PackageManager): void {\n const token = resolveGithubPackagesToken();\n const env = token ? { ...process.env, NODE_AUTH_TOKEN: token } : process.env;\n\n const result = spawnSync(manager, [\"install\"], {\n cwd,\n stdio: \"inherit\",\n env,\n });\n\n if (result.status !== 0) {\n throw new Error(`${manager} install failed`);\n }\n}\n\nexport function installPlaygroundDependencies(cwd: string): void {\n const result = spawnSync(\"pnpm\", [\"install\", \"--ignore-workspace\"], {\n cwd,\n stdio: \"inherit\",\n env: process.env,\n });\n\n if (result.status !== 0) {\n throw new Error(\"pnpm install failed\");\n }\n}\n\n/**\n * Build every workspace package so the playground's `link:` deps resolve to\n * compiled `dist/`. Without this, `keystroke dev` fails with\n * `ERR_MODULE_NOT_FOUND` against whichever package was never built. Turbo\n * caches, so this is only slow on the first run.\n */\nexport function buildPlaygroundWorkspace(monorepoRoot: string): void {\n // Build with a clean Node env: the `keystroke-dev` wrapper sets\n // NODE_OPTIONS=--conditions=development, which would make tsdown/turbo resolve\n // their own deps to src/ and fail. Dropping NODE_OPTIONS builds to dist/ normally.\n const { NODE_OPTIONS: _drop, ...buildEnv } = process.env;\n const result = spawnSync(\"pnpm\", [\"run\", \"build\"], {\n cwd: monorepoRoot,\n stdio: \"inherit\",\n env: buildEnv,\n });\n\n if (result.status !== 0) {\n throw new Error(\"workspace build failed (pnpm run build)\");\n }\n}\n","import { existsSync, realpathSync } from \"node:fs\";\nimport { spawnSync } from \"node:child_process\";\nimport { dirname, join } from \"node:path\";\n\nimport { detectPackageManager, type PackageManager } from \"../init/package-manager\";\n\nexport type CliInstallKind = \"global\" | \"local\";\n\nexport type CliInstallInfo = {\n kind: CliInstallKind;\n packageManager: PackageManager;\n packageRoot: string;\n projectRoot?: string;\n};\n\nfunction realpathSafe(path: string): string {\n try {\n return realpathSync(path);\n } catch {\n return path;\n }\n}\n\nexport function detectManagerFromLockfile(dir: string): PackageManager | undefined {\n if (existsSync(join(dir, \"pnpm-lock.yaml\"))) {\n return \"pnpm\";\n }\n\n if (existsSync(join(dir, \"bun.lockb\")) || existsSync(join(dir, \"bun.lock\"))) {\n return \"bun\";\n }\n\n if (existsSync(join(dir, \"yarn.lock\"))) {\n return \"yarn\";\n }\n\n if (existsSync(join(dir, \"package-lock.json\"))) {\n return \"npm\";\n }\n\n return undefined;\n}\n\nfunction findLocalProjectRoot(packageRoot: string): string | undefined {\n const normalizedRoot = realpathSafe(packageRoot);\n let dir = dirname(packageRoot);\n\n while (dir !== dirname(dir)) {\n const installedCliPath = join(dir, \"node_modules\", \"@keystrokehq\", \"cli\");\n if (\n existsSync(join(dir, \"package.json\")) &&\n realpathSafe(installedCliPath) === normalizedRoot\n ) {\n return dir;\n }\n\n dir = dirname(dir);\n }\n\n return undefined;\n}\n\nfunction globalRootForManager(manager: PackageManager): string | undefined {\n const commands: Record<PackageManager, { command: string; args: string[] }> = {\n pnpm: { command: \"pnpm\", args: [\"root\", \"-g\"] },\n npm: { command: \"npm\", args: [\"root\", \"-g\"] },\n yarn: { command: \"yarn\", args: [\"global\", \"dir\"] },\n bun: { command: \"bun\", args: [\"pm\", \"bin\"] },\n };\n\n const { command, args } = commands[manager];\n const result = spawnSync(command, args, { encoding: \"utf8\" });\n\n if (result.status !== 0) {\n return undefined;\n }\n\n const root = result.stdout.trim();\n return root ? realpathSafe(root) : undefined;\n}\n\nfunction detectGlobalManager(packageRoot: string): PackageManager {\n const normalizedRoot = realpathSafe(packageRoot);\n\n if (normalizedRoot.includes(`${join(\"\", \".pnpm\")}`)) {\n return \"pnpm\";\n }\n\n for (const manager of [\"pnpm\", \"npm\", \"yarn\", \"bun\"] as const) {\n const globalRoot = globalRootForManager(manager);\n if (globalRoot && normalizedRoot.startsWith(globalRoot)) {\n return manager;\n }\n }\n\n if (process.env.PNPM_HOME) {\n return \"pnpm\";\n }\n\n return detectPackageManager();\n}\n\nexport function detectCliInstall(packageRoot: string): CliInstallInfo | undefined {\n const normalizedRoot = realpathSafe(packageRoot);\n const projectRoot = findLocalProjectRoot(normalizedRoot);\n\n if (projectRoot) {\n const packageManager = detectManagerFromLockfile(projectRoot) ?? detectPackageManager();\n\n return {\n kind: \"local\",\n packageManager,\n packageRoot: normalizedRoot,\n projectRoot,\n };\n }\n\n return {\n kind: \"global\",\n packageManager: detectGlobalManager(normalizedRoot),\n packageRoot: normalizedRoot,\n };\n}\n","const RELEASE_AGE_PATTERNS = [\n /minimumReleaseAge/i,\n /minimum-release-age/i,\n /ERR_PNPM_NO_MATURE_MATCHING_VERSION/,\n /ERR_PNPM_MINIMUM_RELEASE_AGE/,\n /does not meet the minimumReleaseAge constraint/,\n];\n\nexport function isReleaseAgeBlock(output: string): boolean {\n return RELEASE_AGE_PATTERNS.some((pattern) => pattern.test(output));\n}\n\nexport function formatReleaseAgeBlockMessage(options: {\n currentVersion: string;\n availableVersion: string;\n retryAfter?: Date;\n}): string {\n const retry =\n options.retryAfter !== undefined ? ` Retry after ${options.retryAfter.toLocaleString()}.` : \"\";\n\n return (\n `@keystrokehq/cli ${options.availableVersion} is available but blocked by your ` +\n `minimum-release-age setting. You're on ${options.currentVersion}.${retry} ` +\n `Add @keystrokehq/cli to minimumReleaseAgeExclude to install immediately.`\n );\n}\n","const REGISTRY_URL = \"https://registry.npmjs.org/@keystrokehq%2Fcli\";\nconst REQUEST_TIMEOUT_MS = 3_000;\n\ntype RegistryPackage = {\n \"dist-tags\"?: {\n latest?: string;\n };\n time?: Record<string, string>;\n};\n\nexport type CliRegistryRelease = {\n version: string;\n publishedAt?: string;\n};\n\nexport async function fetchLatestCliRelease(): Promise<CliRegistryRelease | undefined> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);\n\n try {\n const response = await fetch(REGISTRY_URL, {\n signal: controller.signal,\n headers: {\n Accept: \"application/json\",\n },\n });\n\n if (!response.ok) {\n return undefined;\n }\n\n const payload = (await response.json()) as RegistryPackage;\n const version = payload[\"dist-tags\"]?.latest?.trim();\n if (!version) {\n return undefined;\n }\n\n return {\n version,\n publishedAt: payload.time?.[version],\n };\n } catch {\n return undefined;\n } finally {\n clearTimeout(timeout);\n }\n}\n\nexport async function fetchLatestCliVersion(): Promise<string | undefined> {\n const release = await fetchLatestCliRelease();\n return release?.version;\n}\n","import { spawnSync } from \"node:child_process\";\n\nexport function readPnpmMinimumReleaseAgeMinutes(): number | undefined {\n const result = spawnSync(\"pnpm\", [\"config\", \"get\", \"minimum-release-age\"], {\n encoding: \"utf8\",\n });\n\n if (result.status !== 0) {\n return undefined;\n }\n\n const value = result.stdout.trim();\n if (!value || value === \"undefined\" || value === \"0\") {\n return undefined;\n }\n\n const minutes = Number.parseInt(value, 10);\n return Number.isFinite(minutes) && minutes > 0 ? minutes : undefined;\n}\n\nexport function computeReleaseAgeRetryAfter(\n publishedAt: string | undefined,\n minimumReleaseAgeMinutes: number | undefined,\n): Date | undefined {\n if (!publishedAt || !minimumReleaseAgeMinutes) {\n return undefined;\n }\n\n const publishedMs = Date.parse(publishedAt);\n if (!Number.isFinite(publishedMs)) {\n return undefined;\n }\n\n return new Date(publishedMs + minimumReleaseAgeMinutes * 60_000);\n}\n","/** pnpm global installs live in `<pnpm-home>/global/<major>/`. */\nexport function resolveGlobalPnpmRoot(packageRoot: string): string | undefined {\n const normalized = packageRoot.replace(/\\\\/g, \"/\");\n const match = normalized.match(/^(.*\\/global\\/\\d+)\\//);\n return match?.[1];\n}\n","import type { CliInstallInfo } from \"./detect-cli-install\";\nimport { resolveGlobalPnpmRoot } from \"./resolve-global-pnpm-root\";\n\nconst PACKAGE_NAME = \"@keystrokehq/cli@latest\";\n\nexport function buildUpdateCommand(install: CliInstallInfo): {\n command: string;\n args: string[];\n cwd?: string;\n} {\n const { kind, packageManager } = install;\n\n if (kind === \"global\") {\n switch (packageManager) {\n case \"pnpm\":\n return {\n command: \"pnpm\",\n args: [\"add\", \"-g\", PACKAGE_NAME],\n cwd: resolveGlobalPnpmRoot(install.packageRoot),\n };\n case \"yarn\":\n return { command: \"yarn\", args: [\"global\", \"add\", PACKAGE_NAME] };\n case \"bun\":\n return { command: \"bun\", args: [\"add\", \"-g\", PACKAGE_NAME] };\n case \"npm\":\n default:\n return { command: \"npm\", args: [\"install\", \"-g\", PACKAGE_NAME] };\n }\n }\n\n const cwd = install.projectRoot;\n switch (packageManager) {\n case \"pnpm\":\n return { command: \"pnpm\", args: [\"add\", \"-D\", PACKAGE_NAME], cwd };\n case \"yarn\":\n return { command: \"yarn\", args: [\"add\", \"-D\", PACKAGE_NAME], cwd };\n case \"bun\":\n return { command: \"bun\", args: [\"add\", \"-D\", PACKAGE_NAME], cwd };\n case \"npm\":\n default:\n return { command: \"npm\", args: [\"install\", \"-D\", PACKAGE_NAME], cwd };\n }\n}\n","import { spawnSync } from \"node:child_process\";\n\nimport { buildUpdateCommand } from \"./build-update-command\";\nimport type { CliInstallInfo } from \"./detect-cli-install\";\n\nexport function updateSpawnEnv(): NodeJS.ProcessEnv {\n const env = { ...process.env };\n const pnpmHome = env.PNPM_HOME;\n\n if (!pnpmHome) {\n return env;\n }\n\n const pathKey = process.platform === \"win32\" ? \"Path\" : \"PATH\";\n const path = env[pathKey] ?? \"\";\n const segments = path.split(process.platform === \"win32\" ? \";\" : \":\");\n const binDir = `${pnpmHome}/bin`;\n const prefix = [binDir, pnpmHome].filter((dir) => !segments.includes(dir));\n\n if (prefix.length > 0) {\n env[pathKey] = [...prefix, path].filter(Boolean).join(process.platform === \"win32\" ? \";\" : \":\");\n }\n\n return env;\n}\n\nexport type PackageManagerRunResult = {\n ok: boolean;\n output: string;\n};\n\nfunction runPackageManager(command: string, args: string[], cwd?: string): PackageManagerRunResult {\n const result = spawnSync(command, args, {\n cwd,\n encoding: \"utf8\",\n env: updateSpawnEnv(),\n });\n\n const output = `${result.stdout ?? \"\"}${result.stderr ?? \"\"}`;\n\n return {\n ok: result.status === 0,\n output,\n };\n}\n\nfunction migratePnpmGlobal(cwd: string): boolean {\n const result = spawnSync(\"pnpm\", [\"install\"], {\n cwd,\n encoding: \"utf8\",\n env: {\n ...updateSpawnEnv(),\n CI: \"true\",\n },\n });\n\n return result.status === 0;\n}\n\nexport function runPackageManagerUpdate(install: CliInstallInfo): PackageManagerRunResult {\n const { command, args, cwd } = buildUpdateCommand(install);\n const firstAttempt = runPackageManager(command, args, cwd);\n\n if (firstAttempt.ok) {\n return firstAttempt;\n }\n\n if (install.kind === \"global\" && install.packageManager === \"pnpm\" && cwd) {\n if (migratePnpmGlobal(cwd)) {\n return runPackageManager(command, args, cwd);\n }\n }\n\n return firstAttempt;\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keystrokehq/cli",
3
- "version": "0.1.97",
3
+ "version": "0.1.99",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/keystrokehq/keystroke.git",
@@ -31,6 +31,7 @@
31
31
  "drizzle-orm": "^0.45.2",
32
32
  "oxlint": "^1.66.0",
33
33
  "picomatch": "^4.0.4",
34
+ "posthog-node": "4.18.0",
34
35
  "tsdown": "^0.22.0",
35
36
  "typescript": "npm:@typescript/typescript6@^6.0.2",
36
37
  "vitest": "^4.1.7"
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import { g as emitStoredRouteManifestForProject } from "./dist-d4mUS55Z.mjs";
3
- export { emitStoredRouteManifestForProject };
@@ -1 +0,0 @@
1
- {"version":3,"file":"dist-CaiTZ-ZO.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 \"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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"}