@vpxa/aikit 0.1.304 → 0.1.306

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.
Files changed (60) hide show
  1. package/package.json +1 -1
  2. package/packages/analyzers/dist/index.js +7 -7
  3. package/packages/blocks-core/dist/index.mjs +3 -2
  4. package/packages/cli/dist/index.js +19 -19
  5. package/packages/indexer/dist/index.js +1 -1
  6. package/packages/present/dist/index.html +3 -2
  7. package/packages/server/dist/auth-7LFAZQBu.js +1 -0
  8. package/packages/server/dist/auth-bEP-6uqy.js +2 -0
  9. package/packages/server/dist/bin.js +6 -6
  10. package/packages/server/dist/config-B-wvmMyo.js +1 -0
  11. package/packages/server/dist/config-Bx85fwRX.js +2 -0
  12. package/packages/server/dist/{curated-manager-i5QA4c79.js → curated-manager-BrgM_znO.js} +4 -4
  13. package/packages/server/dist/dashboard-static-Dw7Nsq4f.js +1 -0
  14. package/packages/server/dist/dashboard-static-dPnij4uF.js +2 -0
  15. package/packages/server/dist/index.d.ts +97 -88
  16. package/packages/server/dist/index.js +1 -1
  17. package/packages/server/dist/{promotion-DmwIVl0c.js → promotion-BGWhzk_I.js} +2 -2
  18. package/packages/server/dist/{promotion-bQutAIz-.js → promotion-RbjKfC88.js} +2 -2
  19. package/packages/server/dist/proxy.js +1 -1
  20. package/packages/server/dist/resolve-sibling-BmZ7AxaA.js +1 -0
  21. package/packages/server/dist/resolve-sibling-DrGKPpb0.js +2 -0
  22. package/packages/server/dist/{routes-1wkXLxXe.js → routes-C7bDyCOW.js} +2 -2
  23. package/packages/server/dist/{routes-KC-D2U8n.js → routes-CfG5gdSR.js} +2 -2
  24. package/packages/server/dist/{server-B02eYZOD.js → server-B_KbLM43.js} +177 -175
  25. package/packages/server/dist/server-http-B-TDT3t-.js +2 -0
  26. package/packages/server/dist/server-http-BbuuthEP.js +1 -0
  27. package/packages/server/dist/server-stdio-BUb39kqq.js +2 -0
  28. package/packages/server/dist/server-stdio-Ch7yAxNk.js +1 -0
  29. package/packages/server/dist/{server-Cs9O29n1.js → server-utMi-Qu3.js} +177 -175
  30. package/packages/server/dist/server-utils-De-aZNQa.js +1 -0
  31. package/packages/server/dist/settings-static-BpQgaMRs.js +1 -0
  32. package/packages/server/dist/settings-static-MepJZjer.js +2 -0
  33. package/packages/server/dist/startup-maintenance-D0Uhpi3k.js +1 -0
  34. package/packages/server/dist/startup-maintenance-L9NUOBVy.js +2 -0
  35. package/packages/server/dist/version-check-6qDKknz4.js +1 -0
  36. package/packages/server/dist/version-check-DSWaugPC.js +2 -0
  37. package/packages/server/dist/workspace-bootstrap-BPWA6BVf.js +1 -0
  38. package/packages/server/viewers/canvas.html +3 -2
  39. package/packages/server/viewers/report-template.html +3 -2
  40. package/packages/server/viewers/tour-viewer.html +3 -2
  41. package/packages/store/dist/index.d.ts +3 -1
  42. package/packages/store/dist/index.js +24 -24
  43. package/scaffold/dist/adapters/hermes-agent.mjs +56 -0
  44. package/scaffold/dist/definitions/models.mjs +1 -1
  45. package/scaffold/dist/definitions/skills/c4-architecture.mjs +1 -1
  46. package/scaffold/dist/definitions/skills/docs.mjs +1 -1
  47. package/scaffold/dist/definitions/skills/present.mjs +1 -1
  48. package/scaffold/dist/generated/block-docs.mjs +13 -2
  49. package/packages/server/dist/auth-Bz5dmZgR.js +0 -1
  50. package/packages/server/dist/auth-lzZKfxlV.js +0 -2
  51. package/packages/server/dist/config-CaJwUDXI.js +0 -2
  52. package/packages/server/dist/config-_gMeJYrz.js +0 -1
  53. package/packages/server/dist/dashboard-static-CRfR1yKU.js +0 -2
  54. package/packages/server/dist/dashboard-static-FmfoS46e.js +0 -1
  55. package/packages/server/dist/resolve-sibling-1oDoO-Re.js +0 -1
  56. package/packages/server/dist/resolve-sibling-ByoHo7Tp.js +0 -2
  57. package/packages/server/dist/settings-static-B3lnYvcb.js +0 -2
  58. package/packages/server/dist/settings-static-BtvyIrza.js +0 -1
  59. package/packages/server/dist/version-check-CJK1Fwmy.js +0 -2
  60. package/packages/server/dist/version-check-yzdUDXHC.js +0 -1
@@ -0,0 +1 @@
1
+ import{fileURLToPath as e}from"node:url";import{readFileSync as t}from"node:fs";import{dirname as n,resolve as r}from"node:path";function i(){try{let i=r(n(e(import.meta.url)),`..`,`..`,`..`,`package.json`);return JSON.parse(t(i,`utf-8`)).version??`0.0.0`}catch{return`0.0.0`}}function a(e){let t=e.headers[`mcp-session-id`];return Array.isArray(t)?t[0]:t}function o(e,t){let n=process.env[e];if(!n)return t;let r=Number.parseInt(n,10);return Number.isFinite(r)&&r>0?r:t}const s=/^https?:\/\/(localhost|127\.0\.0\.1)(:\d+)?$/i;function c({requestOrigin:e,configuredOrigin:t,allowAnyOrigin:n,fallbackOrigin:r}){let i=t??r;return i===`*`?n?{allowOrigin:`*`,warn:!1}:e?s.test(e)?{allowOrigin:e,warn:!1}:{allowOrigin:null,warn:!0}:{allowOrigin:r,warn:!1}:{allowOrigin:i,warn:!1}}function l({limit:e,windowMs:t}){let n=new Map,r=(e,r)=>{let i=r-t,a=n.get(e)?.filter(e=>e>i)??[];return a.length===0?(n.delete(e),[]):(n.set(e,a),a)};return{allow(t,i=Date.now()){let a=r(t,i);return a.length>=e?!1:(a.push(i),n.set(t,a),!0)},getRetryAfterMs(n,i=Date.now()){let a=r(n,i);return a.length<e?0:Math.max(0,a[0]+t-i)}}}export{c as a,i,a as n,o as r,l as t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./resolve-sibling-BmZ7AxaA.js";import{fileURLToPath as t}from"node:url";import{createReadStream as n,existsSync as r,statSync as i}from"node:fs";import{dirname as a,extname as o,join as s,resolve as c,sep as l}from"node:path";const u=import.meta.dirname??a(t(import.meta.url)),d={".html":`text/html`,".js":`application/javascript`,".css":`text/css`,".json":`application/json`,".png":`image/png`,".svg":`image/svg+xml`,".ico":`image/x-icon`,".woff":`font/woff`,".woff2":`font/woff2`};function f(t){return t?s(t,`..`,`..`,`settings-ui`,`dist`):e(`settings-ui`)??s(u,`..`,`..`,`settings-ui`,`dist`)}function p(e,t){let n=t.replace(/^\/settings\/?/,``)||`index.html`;if(n.startsWith(`api/`)||n===`api`)return{kind:`not-found`};try{n=decodeURIComponent(n)}catch{}let a=c(e,n);if(!(a===e||a.startsWith(`${e}${l}`)))return{kind:`forbidden`};try{if(i(a).isFile())return{kind:`file`,path:a,contentType:d[o(a)]??`application/octet-stream`}}catch{}let u=s(e,`index.html`);return r(u)?{kind:`spa`,path:u,contentType:`text/html`}:{kind:`not-found`}}function m(e,t,i){return r(t)?(e.get(`/settings{/*path}`,(e,r)=>{let i=p(t,e.path);if(i.kind===`forbidden`){r.status(403).end(`Forbidden`);return}if(i.kind===`not-found`){r.status(404).end(`Not found`);return}r.setHeader(`Content-Type`,i.contentType),i.kind===`file`&&/\.[a-f0-9]{8,}\.(js|css)$/i.test(i.path)?r.setHeader(`Cache-Control`,`public, max-age=31536000, immutable`):r.setHeader(`Cache-Control`,`no-cache`),n(i.path).pipe(r)}),i.info(`Settings UI available`,{url:`/settings/`,dir:t}),!0):!1}export{m as registerSettingsRoutes,f as resolveSettingsDir,p as resolveSettingsRequest};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import{t as e}from"./resolve-sibling-DrGKPpb0.js";import{fileURLToPath as t}from"node:url";import{createReadStream as n,existsSync as r,statSync as i}from"node:fs";import{dirname as a,extname as o,join as s,resolve as c,sep as l}from"node:path";const u=import.meta.dirname??a(t(import.meta.url)),d={".html":`text/html`,".js":`application/javascript`,".css":`text/css`,".json":`application/json`,".png":`image/png`,".svg":`image/svg+xml`,".ico":`image/x-icon`,".woff":`font/woff`,".woff2":`font/woff2`};function f(t){return t?s(t,`..`,`..`,`settings-ui`,`dist`):e(`settings-ui`)??s(u,`..`,`..`,`settings-ui`,`dist`)}function p(e,t){let n=t.replace(/^\/settings\/?/,``)||`index.html`;if(n.startsWith(`api/`)||n===`api`)return{kind:`not-found`};try{n=decodeURIComponent(n)}catch{}let a=c(e,n);if(!(a===e||a.startsWith(`${e}${l}`)))return{kind:`forbidden`};try{if(i(a).isFile())return{kind:`file`,path:a,contentType:d[o(a)]??`application/octet-stream`}}catch{}let u=s(e,`index.html`);return r(u)?{kind:`spa`,path:u,contentType:`text/html`}:{kind:`not-found`}}function m(e,t,i){return r(t)?(e.get(`/settings{/*path}`,(e,r)=>{let i=p(t,e.path);if(i.kind===`forbidden`){r.status(403).end(`Forbidden`);return}if(i.kind===`not-found`){r.status(404).end(`Not found`);return}r.setHeader(`Content-Type`,i.contentType),i.kind===`file`&&/\.[a-f0-9]{8,}\.(js|css)$/i.test(i.path)?r.setHeader(`Cache-Control`,`public, max-age=31536000, immutable`):r.setHeader(`Cache-Control`,`no-cache`),n(i.path).pipe(r)}),i.info(`Settings UI available`,{url:`/settings/`,dir:t}),!0):!1}export{m as registerSettingsRoutes,f as resolveSettingsDir,p as resolveSettingsRequest};
@@ -0,0 +1 @@
1
+ import{t as e}from"./curated-manager-BrgM_znO.js";import{createLogger as t,serializeError as n}from"../../core/dist/index.js";const r=t(`server`);function i(e,t){return t?{version:e,...n(t)}:{version:e}}function a(t,a,o){t.then(async()=>{try{let{markPromoteRun:t,markPruneRun:n,prune:i,shouldRunStartupPrune:o,shouldRunWeeklyPromote:s}=await import(`../../tools/dist/index.js`),c=a();if(!c)return;if(o()){let e=await i({});n(),e.totalBytesFreed>0&&r.info(`Storage maintenance complete`,{forgeOrphans:e.forgeGroundOrphans.count,legacyLance:e.legacyLance.count,bytesFreed:e.totalBytesFreed});let{groupLessons:t,pruneLessons:a}=await import(`./evolution-BX_zTSdj.js`).then(e=>e.t),o=await a(c.curated,c.stateStore,{dryRun:!1});o.pruned.length>0&&r.info(`Startup lesson prune complete`,{pruned:o.pruned.length});let s=await t(c.curated,c.stateStore,{dryRun:!1});(s.groupsCreated>0||s.lessonsGrouped>0)&&r.info(`Startup lesson grouping complete`,{groupsCreated:s.groupsCreated,lessonsGrouped:s.lessonsGrouped})}if(s()){let{DEFAULT_PROMOTE_CONFIG:n,collectWorkspaceLessons:i,getGlobalCuratedDir:a,promoteLessons:o,scanForDuplicates:s}=await import(`./promotion-BGWhzk_I.js`).then(e=>e.o),l=c.curated,u=new e(a(),l.store,l.embedder),d=await i(),f={...n,dryRun:!1},p=await o(s(d,f),u,f);t(),p.promoted.length>0&&r.info(`Weekly lesson promotion complete`,{promoted:p.promoted.length,candidates:p.candidates.length})}}catch(e){r.warn(`Startup maintenance failed (non-critical)`,i(o,e))}}).catch(e=>r.warn(`Startup maintenance failed`,n(e)))}export{i as n,a as t};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import{t as e}from"./bin.js";import{createLogger as t,serializeError as n}from"../../core/dist/index.js";const r=t(`server`);function i(e,t){return t?{version:e,...n(t)}:{version:e}}function a(t,a,o){t.then(async()=>{try{let{markPromoteRun:t,markPruneRun:n,prune:i,shouldRunStartupPrune:o,shouldRunWeeklyPromote:s}=await import(`../../tools/dist/index.js`),c=a();if(!c)return;if(o()){let e=await i({});n(),e.totalBytesFreed>0&&r.info(`Storage maintenance complete`,{forgeOrphans:e.forgeGroundOrphans.count,legacyLance:e.legacyLance.count,bytesFreed:e.totalBytesFreed});let{groupLessons:t,pruneLessons:a}=await import(`./evolution-DWaEE6XW.js`).then(e=>e.t),o=await a(c.curated,c.stateStore,{dryRun:!1});o.pruned.length>0&&r.info(`Startup lesson prune complete`,{pruned:o.pruned.length});let s=await t(c.curated,c.stateStore,{dryRun:!1});(s.groupsCreated>0||s.lessonsGrouped>0)&&r.info(`Startup lesson grouping complete`,{groupsCreated:s.groupsCreated,lessonsGrouped:s.lessonsGrouped})}if(s()){let{DEFAULT_PROMOTE_CONFIG:n,collectWorkspaceLessons:i,getGlobalCuratedDir:a,promoteLessons:o,scanForDuplicates:s}=await import(`./promotion-RbjKfC88.js`).then(e=>e.o),l=c.curated,u=new e(a(),l.store,l.embedder),d=await i(),f={...n,dryRun:!1},p=await o(s(d,f),u,f);t(),p.promoted.length>0&&r.info(`Weekly lesson promotion complete`,{promoted:p.promoted.length,candidates:p.candidates.length})}}catch(e){r.warn(`Startup maintenance failed (non-critical)`,i(o,e))}}).catch(e=>r.warn(`Startup maintenance failed`,n(e)))}export{i as n,a as t};
@@ -0,0 +1 @@
1
+ import{fileURLToPath as e}from"node:url";import{createLogger as t}from"../../core/dist/index.js";import{existsSync as n,mkdirSync as r,readFileSync as i,renameSync as a,rmSync as o,writeFileSync as s}from"node:fs";import{dirname as c,join as l,resolve as u}from"node:path";import{execFile as d,execSync as f}from"node:child_process";import{homedir as p}from"node:os";const m=`@vpxa/aikit`,h=`https://registry.npmjs.org/${m}/latest`,g=t(`server`),_=l(p(),`.aikit`),v=l(_,`current-version.json`),y=l(_,`versions`),b=/^\d+\.\d+\.\d+(-[\w.+]+)?(\+[\w.]+)?$/;function x(e){if(!b.test(e))throw Error(`Invalid semver version: ${JSON.stringify(e)}`)}function S(){let t=u(c(e(import.meta.url)),`..`,`..`,`..`,`package.json`);try{return JSON.parse(i(t,`utf-8`)).version??`0.0.0`}catch{return`0.0.0`}}function C(e,t){let n=e.split(`.`).map(Number),r=t.split(`.`).map(Number);for(let e=0;e<3;e++){let t=(n[e]??0)-(r[e]??0);if(t!==0)return t>0?1:-1}return 0}function w(e,t){let n=e.split(`.`).map(Number),r=t.split(`.`).map(Number);for(let e=0;e<3;e++){if((n[e]??0)>(r[e]??0))return!0;if((n[e]??0)<(r[e]??0))return!1}return!1}async function T(e){x(e);let t=`v${e}`,i=l(y,`${t}-staging`),c=l(y,t);try{n(i)&&o(i,{recursive:!0,force:!0}),r(i,{recursive:!0}),f(`tar -xzf "${f(`npm pack ${m}@${e}`,{cwd:i,encoding:`utf-8`,timeout:6e4,windowsHide:!0}).trim()}"`,{cwd:i,encoding:`utf-8`,timeout:3e4,windowsHide:!0});let u=l(i,`package`);f(`npm install --production --install-strategy=nested --no-audit --no-fund`,{cwd:u,encoding:`utf-8`,timeout:12e4,windowsHide:!0});let d=l(u,`packages`,`server`,`dist`,`bin.js`);if(!n(d))throw Error(`Server entry not found at ${d}`);if(!n(l(u,`node_modules`)))throw Error(`node_modules not found — npm install may have failed`);let p=`${v}.tmp`;s(p,JSON.stringify({version:e,installedAt:new Date().toISOString()},null,2)),a(p,v),n(c)&&o(c,{recursive:!0,force:!0}),a(u,c),g.info(`Installed version ${t}`,{targetDir:c})}finally{n(i)&&o(i,{recursive:!0,force:!0})}}async function E(){try{let e=i(v,`utf-8`),{version:t}=JSON.parse(e),r=await fetch(h,{signal:AbortSignal.timeout(1e4)});if(!r.ok)return;let o=(await r.json()).version;if(!o||o===t||!w(o,t))return;if(n(l(y,`v${o}`))){let e=`${v}.tmp`;s(e,JSON.stringify({version:o,installedAt:new Date().toISOString()},null,2)),a(e,v),g.info(`Re-activated existing version v${o} — no download needed`);return}g.info(`New version available: ${o}. Installing...`),await T(o),g.info(`Updated to v${o}. Restart to use.`)}catch(e){g.error(`Background update check failed: ${e instanceof Error?e.message:String(e)}`)}}function D(){if(n(v)){E();return}let e=S();fetch(h,{signal:AbortSignal.timeout(1e4)}).then(e=>{if(e.ok)return e.json()}).then(async t=>{if(!t||typeof t!=`object`)return;let n=t.version;if(n&&C(e,n)<0){g.info(`Newer version available — installing`,{currentVersion:e,latestVersion:n});try{await T(n),g.info(`Installed v${n}. Restart MCP to use.`)}catch(e){g.warn(`Auto-install failed`,{error:e instanceof Error?e.message:String(e),latestVersion:n})}}}).catch(()=>{})}function O(){try{let e=u(p(),`.copilot`,`.aikit-scaffold.json`);return n(e)?JSON.parse(i(e,`utf-8`)).version??null:null}catch{return null}}function k(){try{let e=u(process.cwd(),`.github`,`.aikit-scaffold.json`);return n(e)?JSON.parse(i(e,`utf-8`)).version??null:null}catch{return null}}let A=`idle`,j=null,M=null;function N(){return{state:A,error:j}}function P(){A=`idle`,j=null}function F(){try{let t=S(),r=O(),i=k(),a=r!=null&&r!==t,o=i!=null&&i!==t;if(D(),!a&&!o||(M!==t&&(P(),M=t),A!==`idle`))return;A=`pending`,j=null,g.info(`Scaffold version mismatch — auto-upgrading`,{serverVersion:t,userScaffoldVersion:r,workspaceScaffoldVersion:i});let s=c(e(import.meta.url)),l=[u(s,`..`,`..`,`..`,`bin`,`aikit.mjs`),u(s,`..`,`bin`,`aikit.mjs`),...process.argv[1]?[u(c(process.argv[1]),`aikit.mjs`)]:[]],f=l.find(e=>n(e));if(!f){A=`failed`,j=`aikit CLI binary not found. Tried: ${l.join(`, `)}`,g.warn(`Cannot auto-upgrade: aikit CLI binary not found`,{candidates:l,platform:process.platform});return}d(process.execPath,[f,`upgrade`],{timeout:3e4,windowsHide:!0},(e,n,r)=>{e?(A=`failed`,j=e.message,g.warn(`Auto-upgrade failed`,{error:e.message,stderr:r?.slice(0,500),binPath:f,platform:process.platform})):(A=`success`,j=null,g.info(`Auto-upgrade completed to version ${t}`))}).unref()}catch(e){A=`failed`,j=e instanceof Error?e.message:String(e),g.warn(`Auto-upgrade check failed`,{error:j})}}export{F as autoUpgradeScaffold,D as checkForUpdates,S as getCurrentVersion,N as getUpgradeState};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import{fileURLToPath as e}from"node:url";import{createLogger as t}from"../../core/dist/index.js";import{existsSync as n,mkdirSync as r,readFileSync as i,renameSync as a,rmSync as o,writeFileSync as s}from"node:fs";import{dirname as c,join as l,resolve as u}from"node:path";import{homedir as d}from"node:os";import{execFile as f,execSync as p}from"node:child_process";const m=`@vpxa/aikit`,h=`https://registry.npmjs.org/${m}/latest`,g=t(`server`),_=l(d(),`.aikit`),v=l(_,`current-version.json`),y=l(_,`versions`),b=/^\d+\.\d+\.\d+(-[\w.+]+)?(\+[\w.]+)?$/;function x(e){if(!b.test(e))throw Error(`Invalid semver version: ${JSON.stringify(e)}`)}function S(){let t=u(c(e(import.meta.url)),`..`,`..`,`..`,`package.json`);try{return JSON.parse(i(t,`utf-8`)).version??`0.0.0`}catch{return`0.0.0`}}function C(e,t){let n=e.split(`.`).map(Number),r=t.split(`.`).map(Number);for(let e=0;e<3;e++){let t=(n[e]??0)-(r[e]??0);if(t!==0)return t>0?1:-1}return 0}function w(e,t){let n=e.split(`.`).map(Number),r=t.split(`.`).map(Number);for(let e=0;e<3;e++){if((n[e]??0)>(r[e]??0))return!0;if((n[e]??0)<(r[e]??0))return!1}return!1}async function T(e){x(e);let t=`v${e}`,i=l(y,`${t}-staging`),c=l(y,t);try{n(i)&&o(i,{recursive:!0,force:!0}),r(i,{recursive:!0}),p(`tar -xzf "${p(`npm pack ${m}@${e}`,{cwd:i,encoding:`utf-8`,timeout:6e4,windowsHide:!0}).trim()}"`,{cwd:i,encoding:`utf-8`,timeout:3e4,windowsHide:!0});let u=l(i,`package`);p(`npm install --production --install-strategy=nested --no-audit --no-fund`,{cwd:u,encoding:`utf-8`,timeout:12e4,windowsHide:!0});let d=l(u,`packages`,`server`,`dist`,`bin.js`);if(!n(d))throw Error(`Server entry not found at ${d}`);if(!n(l(u,`node_modules`)))throw Error(`node_modules not found — npm install may have failed`);let f=`${v}.tmp`;s(f,JSON.stringify({version:e,installedAt:new Date().toISOString()},null,2)),a(f,v),n(c)&&o(c,{recursive:!0,force:!0}),a(u,c),g.info(`Installed version ${t}`,{targetDir:c})}finally{n(i)&&o(i,{recursive:!0,force:!0})}}async function E(){try{let e=i(v,`utf-8`),{version:t}=JSON.parse(e),r=await fetch(h,{signal:AbortSignal.timeout(1e4)});if(!r.ok)return;let o=(await r.json()).version;if(!o||o===t||!w(o,t))return;if(n(l(y,`v${o}`))){let e=`${v}.tmp`;s(e,JSON.stringify({version:o,installedAt:new Date().toISOString()},null,2)),a(e,v),g.info(`Re-activated existing version v${o} — no download needed`);return}g.info(`New version available: ${o}. Installing...`),await T(o),g.info(`Updated to v${o}. Restart to use.`)}catch(e){g.error(`Background update check failed: ${e instanceof Error?e.message:String(e)}`)}}function D(){if(n(v)){E();return}let e=S();fetch(h,{signal:AbortSignal.timeout(1e4)}).then(e=>{if(e.ok)return e.json()}).then(async t=>{if(!t||typeof t!=`object`)return;let n=t.version;if(n&&C(e,n)<0){g.info(`Newer version available — installing`,{currentVersion:e,latestVersion:n});try{await T(n),g.info(`Installed v${n}. Restart MCP to use.`)}catch(e){g.warn(`Auto-install failed`,{error:e instanceof Error?e.message:String(e),latestVersion:n})}}}).catch(()=>{})}function O(){try{let e=u(d(),`.copilot`,`.aikit-scaffold.json`);return n(e)?JSON.parse(i(e,`utf-8`)).version??null:null}catch{return null}}function k(){try{let e=u(process.cwd(),`.github`,`.aikit-scaffold.json`);return n(e)?JSON.parse(i(e,`utf-8`)).version??null:null}catch{return null}}let A=`idle`,j=null,M=null;function N(){return{state:A,error:j}}function P(){A=`idle`,j=null}function F(){try{let t=S(),r=O(),i=k(),a=r!=null&&r!==t,o=i!=null&&i!==t;if(D(),!a&&!o||(M!==t&&(P(),M=t),A!==`idle`))return;A=`pending`,j=null,g.info(`Scaffold version mismatch — auto-upgrading`,{serverVersion:t,userScaffoldVersion:r,workspaceScaffoldVersion:i});let s=c(e(import.meta.url)),l=[u(s,`..`,`..`,`..`,`bin`,`aikit.mjs`),u(s,`..`,`bin`,`aikit.mjs`),...process.argv[1]?[u(c(process.argv[1]),`aikit.mjs`)]:[]],d=l.find(e=>n(e));if(!d){A=`failed`,j=`aikit CLI binary not found. Tried: ${l.join(`, `)}`,g.warn(`Cannot auto-upgrade: aikit CLI binary not found`,{candidates:l,platform:process.platform});return}f(process.execPath,[d,`upgrade`],{timeout:3e4,windowsHide:!0},(e,n,r)=>{e?(A=`failed`,j=e.message,g.warn(`Auto-upgrade failed`,{error:e.message,stderr:r?.slice(0,500),binPath:d,platform:process.platform})):(A=`success`,j=null,g.info(`Auto-upgrade completed to version ${t}`))}).unref()}catch(e){A=`failed`,j=e instanceof Error?e.message:String(e),g.warn(`Auto-upgrade check failed`,{error:j})}}export{F as autoUpgradeScaffold,D as checkForUpdates,S as getCurrentVersion,N as getUpgradeState};
@@ -0,0 +1 @@
1
+ import{fileURLToPath as e}from"node:url";import{serializeError as t}from"../../core/dist/index.js";import{resolve as n}from"node:path";function r(t){return t.startsWith(`file://`)?e(t):t}function i(e){let t=n(e);return process.platform===`win32`?t.toLowerCase():t}function a(e){let t=new Map;for(let n of e){let e=r(n.uri);t.set(i(e),e)}return[...t.values()].sort((e,t)=>i(e).localeCompare(i(t)))}function o({config:e,roots:t}){let n=a(t);if(n.length===0)return null;let r=e.sources?.[0]?.path;if(r){let e=i(r),t=n.find(t=>i(t)===e);if(t)return t}return n[0]}function s({config:e,log:t,reconfigureForWorkspace:n,roots:r}){let s=a(r);if(s.length===0)return!1;let c=o({config:e,roots:s.map(e=>({uri:e}))});if(!c)return!1;let l=e.sources?.[0]?.path;return t.debug(`MCP roots resolved`,{rootPath:c,rootCount:s.length,selectedBy:l&&i(l)===i(c)?`configured-source`:`stable-sorted-root`}),n(e,c),e.allRoots=s,!0}async function c({config:e,indexMode:n,log:r,rootsChangedNotificationSchema:i,reconfigureForWorkspace:a,runInitialIndex:o,server:c,startInit:l,timeoutMs:u=5e3,getCwd:d=()=>process.cwd(),version:f=`0.0.0`}){let p=!1,m=!1,h,g=c.server,_=e=>{let n=t(e),r=`${String(e)} ${String(n.message??``)}`.toLowerCase();return r.includes(`method not found`)||r.includes(`not supported`)||r.includes(`unsupported`)||r.includes(`unknown method`)||r.includes(`roots/list`)||r.includes(`timed out`)},v=()=>{p||(p=!0,l())},y=()=>{m||n!==`auto`||(m=!0,(async()=>{try{await o()}catch(e){r.error(`Initial index failed`,{version:f,...t(e)})}})())},b=t=>t.length===0||(h&&=(clearTimeout(h),void 0),!s({config:e,log:r,reconfigureForWorkspace:a,roots:t}))?!1:(v(),y(),!0);try{if(b((await g.listRoots()).roots))return;r.debug(`No MCP roots yet; waiting for roots/list_changed notification`)}catch(n){if(_(n)){r.warn(`MCP roots/list not supported by client; using cwd fallback`,{version:f,cwd:d(),...t(n)}),s({config:e,log:r,reconfigureForWorkspace:a,roots:[{uri:d()}]})&&(v(),y());return}r.warn(`MCP roots/list failed; waiting for roots/list_changed notification`,{version:f,cwd:d(),...t(n)})}g.setNotificationHandler(i,async()=>{try{b((await g.listRoots()).roots)}catch(e){r.warn(`roots/list retry failed after notification`,{version:f,...t(e)})}}),h=setTimeout(()=>{let t=d();r.debug(`Timed out waiting for roots/list_changed; falling back to cwd workspace`,{cwd:t}),s({config:e,log:r,reconfigureForWorkspace:a,roots:[{uri:t}]})&&(v(),y())},u)}export{c as n,o as r,s as t};