@makaio/framework 1.0.0-dev-1781996773251 → 1.0.0-dev-1782127638374
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.makaio-build.json +2 -2
- package/dist/adapter-subsystem/index.d.mts +13 -2
- package/dist/adapter-subsystem/index.mjs +1 -1
- package/dist/adapters/config/index.d.mts +1 -1
- package/dist/adapters/index.d.mts +11 -8
- package/dist/adapters/index.mjs +2 -2
- package/dist/adapters/stream-session/index.d.mts +18 -8
- package/dist/adapters/stream-session/index.mjs +1 -1
- package/dist/bus/index.d.mts +20 -20
- package/dist/clients/index.d.mts +5 -5
- package/dist/contracts/adapter/index.d.mts +2 -2
- package/dist/contracts/adapter/schemas/session-lineage.d.mts +1 -1
- package/dist/contracts/artifact/index.d.mts +1 -1
- package/dist/contracts/canonical-model/index.d.mts +1 -1
- package/dist/contracts/client/index.d.mts +1 -1
- package/dist/contracts/extension/index.d.mts +3 -3
- package/dist/contracts/facet/index.d.mts +1 -1
- package/dist/contracts/harness/index.d.mts +1 -1
- package/dist/contracts/index.d.mts +188 -188
- package/dist/contracts/materialization/index.d.mts +3 -3
- package/dist/contracts/session/index.d.mts +2 -2
- package/dist/contracts/shared/index.d.mts +1 -1
- package/dist/contracts/variant/index.d.mts +1 -1
- package/dist/contracts/workflow/index.d.mts +2 -2
- package/dist/{definition-0EXM1tyu.d.mts → definition-rjwHUOBd.d.mts} +1 -1
- package/dist/{index-DvLCzle5.d.mts → index-BB8AMXbw.d.mts} +28 -28
- package/dist/{index-Dch9gi4S.d.mts → index-BCNDvAhA.d.mts} +1 -1
- package/dist/{index-DnLf0YKC.d.mts → index-BWIkf5oJ.d.mts} +6 -6
- package/dist/{index-Cx1Bm6WD.d.mts → index-Ck7dBtkM.d.mts} +4 -4
- package/dist/{index-WHUV7neB.d.mts → index-CqImyhjX.d.mts} +100 -100
- package/dist/{index-DImePakw.d.mts → index-D1nWOF49.d.mts} +8 -8
- package/dist/{index-BfsvUD9j.d.mts → index-DDOB47U7.d.mts} +53 -53
- package/dist/{index-WOoVeAEf.d.mts → index-DO_Cu5A4.d.mts} +13 -13
- package/dist/{index-DDehaguq.d.mts → index-DP-JW3Jc.d.mts} +399 -399
- package/dist/{index-CuILCdip.d.mts → index-DTBQOCar.d.mts} +16 -16
- package/dist/{index-DHUARU-6.d.mts → index-DeIxVnVs.d.mts} +12 -12
- package/dist/{index-DOIbPMcj.d.mts → index-DknXbjOs.d.mts} +16 -16
- package/dist/{index-4eP9DRL_.d.mts → index-Mi_UJoUV.d.mts} +4 -4
- package/dist/{index-CaerrEDH.d.mts → index-NkNbYFud.d.mts} +1 -1
- package/dist/{index-CUSOL0X_.d.mts → index-ZpJftSoa.d.mts} +357 -357
- package/dist/{index-DFk-zky_.d.mts → index-ntS1EXlf.d.mts} +1 -1
- package/dist/kernel/extension/index.d.mts +1 -1
- package/dist/kernel/index.d.mts +2 -2
- package/dist/kernel/observability/index.d.mts +1 -1
- package/dist/{namespace-Do_rmLFb.d.mts → namespace-3yGm4WF9.d.mts} +2 -2
- package/dist/{namespace-Bm77p82L.d.mts → namespace-4xHw59K8.d.mts} +1 -1
- package/dist/{namespace-KMxsPJwm.d.mts → namespace-Bv8B89uB.d.mts} +9 -9
- package/dist/{namespace-CfvtDD_U.d.mts → namespace-CUkosedS.d.mts} +154 -154
- package/dist/{namespace-D8P8Sxce2.d.mts → namespace-DXWpFdQH2.d.mts} +2 -2
- package/dist/{namespace-UaiY5v62.d.mts → namespace-XmDoz6Sz.d.mts} +58 -58
- package/dist/package.json +1 -1
- package/dist/runtime-node/index.d.mts +1 -1
- package/dist/runtime-node/index.mjs +3 -3
- package/dist/runtime-node/workflow-worker/index.d.mts +1 -1
- package/dist/{schema-CKTzwiif.d.mts → schema-fZknEOha.d.mts} +3 -3
- package/dist/{schemas-CwgS7KoL2.d.mts → schemas-1ynXdrNI2.d.mts} +7 -7
- package/dist/{schemas-CoFCV42v.d.mts → schemas-BOhGc0CT.d.mts} +154 -154
- package/dist/{schemas-CDGld_OC.d.mts → schemas-CscdPqCt.d.mts} +3 -3
- package/dist/{schemas-DDaP5WkH.d.mts → schemas-Dn5bfiTL.d.mts} +2 -2
- package/dist/services/agent-runtime/index.d.mts +2 -2
- package/dist/services/agent-runtime/namespace.d.mts +1 -1
- package/dist/services/agent-runtime/schemas.d.mts +1 -1
- package/dist/services/context-rules/index.d.mts +3 -3
- package/dist/services/filesystem/namespace.d.mts +12 -12
- package/dist/services/filesystem/schemas.d.mts +6 -6
- package/dist/services/harness/index.d.mts +3 -3
- package/dist/services/index.d.mts +106 -106
- package/dist/services/session/index.d.mts +5 -5
- package/dist/services/session/messages/namespace.d.mts +1 -1
- package/dist/services/session/session-events/namespace.d.mts +1 -1
- package/dist/services/session/storage/namespace.d.mts +1 -1
- package/dist/services/session/storage/schema.d.mts +1 -1
- package/dist/services/settings/namespace.d.mts +4 -4
- package/dist/services/settings/storage/extension-configs/namespace.d.mts +3 -3
- package/dist/services/subagent-template/index.d.mts +2 -2
- package/dist/services/subagent-template/namespace.d.mts +1 -1
- package/dist/services/subagent-template/schemas.d.mts +1 -1
- package/dist/services/tray-menu/index.d.mts +2 -2
- package/dist/services/tray-menu/namespace.d.mts +1 -1
- package/dist/services/tray-menu/schemas.d.mts +1 -1
- package/dist/{session-lineage-Cht4jbvV.d.mts → session-lineage-DR-9DU-U.d.mts} +1 -1
- package/dist/{transition-BBElJqQ8.d.mts → transition-_Uow1Pr1.d.mts} +1 -1
- package/dist/{types-B49V7vZJ.d.mts → types-BTqJIp9-.d.mts} +270 -270
- package/dist/{types-BrTJEhR-.d.mts → types-Cse8s_cD.d.mts} +9 -1
- package/dist/workflow-engine/index.d.mts +52 -52
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{i as e,o as t,t as n}from"../chunk-DTipWd-i.mjs";import{t as r}from"../semver-CIhHqMkw.mjs";import{RuntimeNamespace as i,RuntimeSubjects as a}from"./bus/runtime/namespace.mjs";import{ExplicitDescriptorDiscovery as o,FilesystemDescriptorDiscovery as s,MergedDescriptorDiscovery as c}from"./extension-discovery.mjs";import{MAKAIO_CONFIG_FILE_ENV as l,MAKAIO_HOME_ENV as u,buildConfiguredRuntimeOptions as d,createMakaioConfigDiscovery as f,defineMakaioConfig as p,loadMakaioConfig as m,parseMakaioConfig as h,resolveMakaioConfigPath as g,resolveMakaioHome as _,shouldIncludeExtension as v}from"./makaio-config.mjs";import{t as y}from"../descriptor-to-package-DdpjpT7n.mjs";import{a as b,c as x,i as S,n as C,o as w,r as T,s as E,t as ee}from"../load-extensions-Cze1RHcG.mjs";import{i as te,o as ne,r as re,s as ie,t as ae}from"../workflow-worker-BIpYi6o7.mjs";import{createRequire as oe}from"node:module";import{z as D}from"zod";import{execFile as se}from"node:child_process";import{promisify as ce}from"node:util";import{fileURLToPath as le,pathToFileURL as O}from"node:url";import*as k from"node:fs/promises";import*as A from"node:path";import j from"node:path";import*as M from"node:crypto";import{createHash as N}from"node:crypto";import*as P from"node:fs";import{existsSync as F,readFileSync as ue}from"node:fs";import{createBusNamespace as de}from"@makaio/framework/core";import{ChannelClosedError as fe,MakaioBus as pe,openChannel as me,projectSubjectTelemetryFacts as he}from"@makaio/framework/bus";import{AIModelSchema as ge,AdapterSubjects as _e,BUILT_IN_THIN_WORKFLOW_PROVIDER_ID as ve,ConfigSchema as I,ConfigSubjects as L,CredentialSubjects as ye,FrameworkContractNamespaces as be,FrameworkStorageNamespaces as xe,SubjectTelemetrySubjects as Se,isDetachedDescriptor as Ce,registerWorkerNodeProvider as we,safeParseExtensionDescriptor as Te,unregisterWorkerNodeProvider as Ee,versionSatisfies as De}from"@makaio/framework/contracts";import{DispatchingAuth as Oe,E2EAuth as ke,HmacAuth as Ae,WebSocketClientTransport as je}from"@makaio/framework/node/transports";import{BaseService as Me}from"@makaio/framework/service-base";import{uniqueIndex as Ne}from"drizzle-orm/sqlite-core";import{uniqueIndex as Pe}from"drizzle-orm/pg-core";import{STORAGE_ENGINE_URL_HINTS as Fe,defineDialectSchema as Ie,defineDualTable as Le,findStorageEngine as Re,getDatabaseDialect as ze,getRawSqlExecutor as Be,getStorageEngine as Ve,registerDrizzleHandlers as He,registerStorageEngine as Ue,resolveSchema as We,resolveStorageEngine as Ge,resolveStorageEngineForUrl as Ke}from"@makaio/framework/storage/drizzle";import{and as qe,eq as R,sql as z}from"drizzle-orm";import{parseStoredCredentialRef as Je}from"@makaio/framework/contracts/config";import{AdapterRuntimeSubjects as Ye,registerAdapterRuntimeIdentityHandlers as Xe}from"@makaio/framework/services/adapter-runtime";import{buildProviderContext as Ze}from"@makaio/framework/services/provider-context";import*as Qe from"node:os";import{ProviderStorageSubjects as $e}from"@makaio/framework/services/settings/storage";import{isRecord as et}from"@makaio/framework/utils";import{AdapterSubsystemSubjects as tt}from"@makaio/framework/services/adapter-subsystem";import{BootNamespace as nt,ExtensionCoordinator as rt,ExtensionNamespace as it,KernelNamespace as at,coalesceExtensionOverrides as ot,createShutdownSequence as st,filterEligibleExtensions as ct}from"@makaio/framework/kernel";import{CachedRegistryFetcher as lt,FallbackRegistryFetcher as ut,ModelRegistrySchema as dt,ProviderModelOverrideSchema as ft,mergeModelMetadata as pt}from"@makaio/framework/services/model-registry";import{createClientsCorePackage as mt}from"@makaio/framework/clients";import{Readable as ht,Transform as gt}from"node:stream";import{pipeline as _t}from"node:stream/promises";import{createDatabaseClient as vt}from"@makaio/framework/storage/drizzle/client";import{AdapterSubsystemToken as yt,FileAdapterConfigRepository as bt,createAdapterSubsystemContributionProcessor as xt,createAdapterSubsystemPackage as St}from"@makaio/framework/adapter-subsystem";import{loadOrCreateMachineIdentity as Ct,loadOrCreateMachineIdentity as wt,machineKeysExist as Tt,validateMachineKeys as Et}from"@makaio/framework/node/machine-identity";import{resolveWorkspaceRoot as Dt}from"@makaio/framework/utils/workspace-root";import{Hono as Ot}from"hono";import{CliNamespace as kt}from"@makaio/framework/kernel/cli";import{startBusServer as At}from"@makaio/framework/node/bus-server";import{WebSocketServer as jt}from"ws";import{ConfigProvider as Mt}from"@makaio/framework/providers";import{KernelSubjects as B}from"@makaio/framework/kernel/namespace";import{FrameworkServicesCoreNamespaces as Nt,SessionOrchestratorToken as Pt,createArtifactKindContributionProcessor as Ft,createArtifactLifecycleHookContributionProcessor as It,createFacetNamespaceContributionProcessor as Lt,createModelRegistryPackage as Rt,createSurfaceBindingContributionProcessor as zt,createToolContributionProcessor as Bt,createTransitionContributionProcessor as Vt,createWorkflowBlockContributionProcessor as Ht,frameworkCorePackages as Ut}from"@makaio/framework/services";import{createLogImportContributionProcessor as Wt,logImportRegistryPackage as Gt}from"@makaio/framework/services/log-import";import{createWorkflowEnginePackage as Kt}from"@makaio/framework/workflow-engine/package";import{PreferenceValueSchema as qt,PreferencesSubjects as Jt}from"@makaio/framework/services/preferences";import{resolveConnectorCredentials as Yt,resolveCredentialRef as Xt}from"@makaio/framework/adapters/config";import{DefinitionSubjects as Zt}from"@makaio/framework/services/definition";import{ProviderRuntimeSubjects as Qt}from"@makaio/framework/services/provider-runtime";import{SettingsSubjects as $t}from"@makaio/framework/services/settings/namespace";import{parseWorkspaceGlobs as en}from"@makaio/framework/utils/workspace-packages";import{serveStatic as tn}from"@hono/node-server/serve-static";function nn(e){return e.on(_e.getCapabilities,async t=>{let{adapterName:n,adapterId:r}=t.payload;if(r){await t.next();return}if(n){let r=await e.requestOptional(Ye.resolveId,{adapterName:n}),i=r.handled?r.data.adapterId:void 0;i&&(t.payload.adapterId=i)}await t.next()},{priority:20})}function rn(e){let{coordinator:t,configRepository:n,platformDefaults:r}=e,i=St({configRepository:n,coordinator:t,platformDefaults:r});return t.registerContributionProcessor(xt({getAdapterSubsystemService:()=>t.getExtensionService(yt)})),{adapterSubsystemPackage:i}}function an(e){let{bus:t,currentMachineId:n}=e,r=Xe(t,{currentMachineId:n,listKnownAdapterNames:e.listKnownAdapterNames??(async()=>{let{configs:e}=await t.request(tt.listAdapterConfigs,{});return e.map(e=>e.name)})}),i=nn(t);return{cleanup:()=>{r.cleanup(),i()}}}function on(e=`sqlite`){let{migrations:t}=Ve(e);return t.resolveSourceChainDir?.()??j.resolve(import.meta.dirname,`..`,t.chainDirName)}var sn=class extends Error{expectedDialect;journalDialect;constructor(e,t,n,r){super(`Migration journal at ${r} declares dialect '${n??`unknown`}', but the target database speaks '${e}'. Point the runner at a migrations directory generated for '${e}' (journal dialect '${t}').`),this.name=`MigrationDialectMismatchError`,this.expectedDialect=e,this.journalDialect=n}};function cn(e={}){let t=typeof e==`string`?void 0:e.expectedDialect,n=typeof e==`string`?e:e.migrationsDir??on(t),r=j.join(n,`meta`,`_journal.json`);if(!F(r))throw Error(`Cannot find migrations journal at ${r}`);let i=JSON.parse(ue(r,`utf-8`));if(t!==void 0){let e=Ve(t).migrations.journalDialect;if(i.dialect!==e)throw new sn(t,e,i.dialect,r)}return i.entries.map(e=>{let t=ue(j.join(n,`${e.tag}.sql`),`utf-8`);return{tag:e.tag,sql:t.split(`--> statement-breakpoint`),folderMillis:e.when,hash:N(`sha256`).update(t).digest(`hex`),bps:e.breakpoints}})}function ln(e){return e.replace(/--.*$/gm,``).trim()}async function un(e,t){try{await e.run(z.raw(`ROLLBACK`))}catch(e){console.error(`[storage-migrations] Failed to roll back migration transaction`,{...t,rollbackError:e})}}async function dn(e){let{migrations:t}=e.engine;if(await e.session.run(z.raw(t.beginTransactionStatement)),t.acquireTransactionLock)try{await t.acquireTransactionLock(e.session,e.tableName)}catch(t){throw await un(e.session,{migrationsTable:e.tableName}),t}}async function fn(e){let t=e.engine.migrations.acquireTransactionLock!==void 0;t&&await dn(e);try{await e.session.run(z.raw(e.engine.migrations.buildLedgerDdl(e.tableName)));let n=await e.session.all(z`SELECT hash FROM ${e.tableId}`);return t&&await e.session.run(z.raw(`COMMIT`)),new Set(n.map(e=>e.hash))}catch(n){throw t&&await un(e.session,{migrationsTable:e.tableName}),n}}async function pn(e,t){try{await e.session.run(z`INSERT INTO ${e.tableId} ("hash", "created_at") VALUES (${t.hash}, ${t.folderMillis})`),await e.session.run(z.raw(`COMMIT`))}catch(e){throw console.error(`[storage-migrations] Failed to finalize migration`,{hash:t.hash,folderMillis:t.folderMillis,error:e}),e}}async function mn(e,t){return e.engine.migrations.acquireTransactionLock===void 0||(await e.session.all(z`SELECT hash FROM ${e.tableId} WHERE hash = ${t.hash}`)).length===0?!1:(console.warn(`[storage-migrations] Migration already recorded by a concurrent runner, skipping`,{hash:t.hash,folderMillis:t.folderMillis}),await e.session.run(z.raw(`COMMIT`)),!0)}async function hn(e,t){await e.session.run(z.raw(`ROLLBACK`)),await dn(e),!await mn(e,t)&&await pn(e,t)}async function gn(e,t){await dn(e);try{if(await mn(e,t))return;for(let[n,r]of t.sql.entries())if(ln(r))try{await e.session.run(z.raw(r))}catch(i){if(n===0&&/^\s*CREATE\s/i.test(r)&&e.engine.errors.isDuplicateObjectError(i)){if(t.sql.length>1)throw Error(`Cannot adopt multi-statement migration '${t.tag}' because its first schema object already exists. Reset the database or provide an incremental migration.`,{cause:i});console.warn(`[storage-migrations] Schema object already exists, adopting into ledger`,{hash:t.hash,folderMillis:t.folderMillis,statementIndex:n}),await hn(e,t);return}throw console.error(`[storage-migrations] Failed to apply migration statement`,{hash:t.hash,folderMillis:t.folderMillis,statementIndex:n,statement:r,error:i}),i}await pn(e,t)}catch(n){throw await un(e.session,{hash:t.hash,folderMillis:t.folderMillis}),n}}async function _n(e,t,n){let r=Be(e),i=Ve(r.dialect),a=n??i.migrations.defaultLedgerTable;await r.withSession(async e=>{let n={session:e,engine:i,tableName:a,tableId:z.identifier(a)},r=await fn(n);for(let e of t)r.has(e.hash)||(await gn(n,e),r.add(e.hash))})}async function vn(e,t={}){await _n(e,cn({migrationsDir:t.migrationsDir,expectedDialect:ze(e)})),await Ge(e).fts.provisionSearchIndex(e)}var yn=class{configPath;constructor(e){this.configPath=A.join(e,`config.json`)}async getConfig(){try{let e=await k.readFile(this.configPath,`utf-8`);return I.parse(JSON.parse(e))}catch(e){if(e.code===`ENOENT`)return I.parse({});if(e instanceof SyntaxError||e instanceof Error&&e.name===`ZodError`)return console.warn(`[FileConfigStorage] Failed to parse config, falling back to defaults:`,e),I.parse({});throw e}}async saveConfig(e){let t=A.dirname(this.configPath);await k.mkdir(t,{recursive:!0}),await k.writeFile(this.configPath,JSON.stringify(e,null,2),{encoding:`utf-8`,mode:384}),await k.chmod(this.configPath,384)}};function bn(e){try{let t=A.resolve(Dt(e),`static/model-registry.yaml`);return F(t)?t:void 0}catch{return}}async function xn(e,t){await new Promise((n,r)=>{if(e.address()){n();return}let i=e=>{if(o(),e.code===`EADDRINUSE`){r(Error(`Port ${t} is already in use`));return}r(e)},a=()=>{o(),n()},o=()=>{e.off(`error`,i),e.off(`listening`,a)};e.once(`error`,i),e.once(`listening`,a)}),e.on(`error`,e=>{console.error(`[HttpServer] Post-bind error:`,e)})}function Sn(e){let t=e.address();if(typeof t==`object`&&t&&`port`in t)return t.port;throw Error(`HTTP server is not bound to a TCP address`)}function Cn(e,t){let n=e,r=!1;return{fetch:(e,i,a)=>{if(!r)return new Response(`Makaio runtime is booting`,{status:503,headers:{"Retry-After":`1`}});let{pathname:o}=new URL(e.url);return t?.health&&e.method===`GET`&&o===`/health`?Response.json(t.health()):e.method===`GET`&&o===`/bus`?new Response(`WebSocket endpoint`,{status:426,headers:{Upgrade:`websocket`}}):n.fetch(e,i,a)},markReady(){r=!0},replaceApp(e){n=e}}}const wn=[`extension`,`static-fallback`];function Tn(e){let t=[];function n(e){let t=new Ot,n=[...e].sort((e,t)=>wn.indexOf(e.phase)-wn.indexOf(t.phase));for(let e of n)e.mount(t);return t}function r(){return n(t)}function i(r){e&&e.replaceApp(n(r)),t=r}return{add(e){i([...t,e])},remove(e){let n=t.filter(t=>t.owner!==e);n.length!==t.length&&i(n)},build:r,get contributions(){return[...t]}}}function En(e,t){if(!(e instanceof Error))return!1;let{rootPackageName:n,subpath:r}=On(t),i=(r===void 0?[t]:[t,n]).flatMap(e=>[`Cannot find package '${e}'`,`Cannot find module '${e}'`,`Cannot find package "${e}"`,`Cannot find module "${e}"`]),a=e;return(a.code===`ERR_MODULE_NOT_FOUND`||a.code===`MODULE_NOT_FOUND`)&&i.some(t=>e.message.includes(t))||a.code===`ERR_PACKAGE_PATH_NOT_EXPORTED`&&r!==void 0&&e.message.includes(`Package subpath '${r}' is not defined by "exports"`)&&kn(e.message,n)?!0:i.some(t=>e.message.includes(t))}async function Dn(e){try{return await import(e)}catch(t){if(En(t,e))return null;throw t}}function On(e){let t=e.split(`/`);return e.startsWith(`@`)?{rootPackageName:t.slice(0,2).join(`/`),subpath:t.length>2?`./${t.slice(2).join(`/`)}`:void 0}:{rootPackageName:t[0]??e,subpath:t.length>1?`./${t.slice(1).join(`/`)}`:void 0}}function kn(e,t){let n=t,r=t.replaceAll(`/`,`\\`);return e.includes(`/${n}/package.json`)||e.includes(`\\${r}\\package.json`)}function An(e){let t=e.url?.split(`?`)[0]??``;return t===`/bus`?!0:(t===`/`||t===``)&&e.headers.origin===void 0}function jn(e,t){return(n,r,i)=>{if(!An(n))return;let a=e();if(!a||!t()){r.destroy();return}a.handleUpgrade(n,r,i,e=>{a.emit(`connection`,e,n)})}}var Mn=class{options;busServer=null;websocketServer=null;upgradeHandlerServer=null;upgradeHandler=null;busReady=!1;connecting=!1;constructor(e){this.options=e}get dispatchingAuth(){return this.options.auth instanceof Oe?this.options.auth:void 0}async connect(e,t){if(this.connecting||this.busServer||this.websocketServer)throw Error(`[BusServerTransport] connect() called while transport is already connected or connecting`);if(this.options.httpServer.address()===null)throw Error(`[BusServerTransport] httpServer must already be listening before connect() is called`);this.connecting=!0;try{let t=new jt({noServer:!0});this.websocketServer=t;let n=jn(()=>this.websocketServer,()=>this.busReady);this.options.httpServer.on(`upgrade`,n),this.upgradeHandlerServer=this.options.httpServer,this.upgradeHandler=n,this.busServer=await At({websocket:t,bus:e,auth:this.options.auth,loopbackName:this.options.loopbackName??`node`}),this.busReady=!0}catch(e){throw await this.stopBusServer(`startup error`),this.detachUpgradeHandler(),await this.stopWebSocketServer(`startup error`),e}finally{this.connecting=!1}}async disconnect(){await this.stopBusServer(`shutdown`),this.detachUpgradeHandler(),await this.stopWebSocketServer(`shutdown`)}async stopBusServer(e){this.busReady=!1,this.busServer&&=(await this.busServer.stop().catch(t=>{console.error(`[BusServerTransport] Failed to stop bus server during ${e}:`,t)}),null)}detachUpgradeHandler(){this.upgradeHandlerServer&&this.upgradeHandler&&this.upgradeHandlerServer.off(`upgrade`,this.upgradeHandler),this.upgradeHandlerServer=null,this.upgradeHandler=null}async stopWebSocketServer(e){this.websocketServer&&=(await new Promise((e,t)=>{this.websocketServer.close(n=>n?t(n):e())}).catch(t=>{t instanceof Error&&t.message===`The server is not running`||console.error(`[BusServerTransport] Failed to close WebSocket server during ${e}:`,t)}),null)}},Nn=class extends Mt{keysDir;constructor(e,t){super(e),this.keysDir=A.join(t,`keys`)}async getConfig(e){let t=await super.getConfig(e);return t.bus?.remote&&!t.bus.remote.secret&&(t.bus.remote.secret=this.generateSecret(),(await this.getStoredConfig()).bus?.remote?.url===t.bus.remote.url&&await this.saveConfig(await this.prepareConfigForPersistence(t))),t}generateSecret(){return M.randomBytes(32).toString(`base64`)}async getMachineId(){return(await wt(this.keysDir)).machineId}getEnv(e){return process.env[e]}};function Pn(e,t){return{extensions:e.discovery??new s(void 0,{extensionsDir:j.join(t,`extensions`),nodeModulesDir:j.join(t,`node_modules`)})}}function Fn(e){return F(j.join(e,`meta`,`_journal.json`))}function In(e,t={}){let{moduleDir:n=import.meta.dirname,getMigrationsFolder:r=on}=t,i=Ve(e).migrations.chainDirName,a=[],o=j.resolve(n,`..`,i);if(Fn(o))return o;a.push(o);try{let t=r(e);if(Fn(t))return t;a.push(t)}catch(t){a.push(`getMigrationsFolder('${e}') unavailable: ${t instanceof Error?t.message:String(t)}`)}throw Error(`resolveBundledMigrationsDir: no '${e}' migrations directory with meta/_journal.json found. Probed: ${a.join(`; `)}. Pass an explicit migrations directory (boot option 'centralMigrationsDir' or InitializeNodeDatabaseOptions.migrationsDir) when migrations are staged elsewhere.`)}function Ln(e){if(process.platform===`win32`)return!0;let t=e?.code;return t===`ENOSYS`||t===`EINVAL`}function Rn(e){return e===void 0||e.trim()===``?void 0:e}function zn(e){try{let t=new URL(e);if(t.host!==``)return`${t.protocol}//${t.host}${t.pathname}`}catch{}let t=e.indexOf(`:`);return t===-1?`<unparseable database URL>`:`${e.slice(0,t+1)}…`}async function Bn(e,t,n){let r;try{r=await import(O(oe(A.resolve(t,`package.json`)).resolve(e.packageName)).href)}catch(t){throw Error(`initializeNodeDatabase: the database URL from ${n} targets the '${e.dialect}' storage engine, but '${e.packageName}' could not be loaded. Install ${e.packageName} in the host application, or pass its already-loaded storageEngine via the 'database.engines' boot option.`,{cause:t})}let i=r.storageEngine;if(i===void 0||i.dialect!==e.dialect)throw Error(`initializeNodeDatabase: '${e.packageName}' does not provide a storage engine for dialect '${e.dialect}'. Auto-resolved engine packages must export 'storageEngine: StorageEngine' with a matching dialect.`);Re(e.dialect)===void 0&&Ue(i)}async function Vn(e){let t=Rn(e.database?.url),n=t??Rn(process.env.MAKAIO_DATABASE_URL);if(n!==void 0){let r=t===void 0?`the MAKAIO_DATABASE_URL environment variable`:`the 'database.url' boot option`,i=Ke(n);if(i.kind===`missing-engine`&&(await Bn(i,e.database?.enginePackageImportBasePath??process.cwd(),r),i=Ke(n)),i.kind!==`engine`){let e=Fe.map(e=>e.packageName).join(`, `);throw Error(`initializeNodeDatabase: unsupported database URL '${zn(n)}' from ${r}. URL targets require a storage engine that claims the URL (e.g. postgres:// / postgresql:// via ${e}); SQLite targets are configured via the dbPath option or MAKAIO_DATABASE_PATH.`)}return{kind:`url`,url:n,dialect:i.engine.dialect}}let r=A.resolve(Rn(e.dbPath)??Rn(process.env.MAKAIO_DATABASE_PATH)??A.join(e.makaioHome,`makaio.db`));return{kind:`file`,dbPath:r,url:O(r).href}}async function Hn(e){for(let t of e.database?.engines??[])Ue(t);let t=await Vn(e);if(t.kind===`url`){let n=await vt({url:t.url,postgres:{poolMax:e.database?.poolMax}});try{let r=e.migrationsDir??In(t.dialect);return await vn(n.db,{migrationsDir:r}),{databaseClient:n}}catch(e){throw await n.close(),e}}let{dbPath:n}=t,r=A.dirname(n);await P.promises.mkdir(r,{recursive:!0});let i=await vt({url:t.url});try{await vn(i.db,{migrationsDir:e.migrationsDir});try{await P.promises.chmod(n,384)}catch(e){if(!Ln(e))throw e;console.warn(`[initializeNodeDatabase] Failed to set SQLite file permissions (continuing; this may be unsupported on Windows):`,e)}return{databaseClient:i,dbPath:n}}catch(e){throw await i.close(),e}}const Un=D.object({npmName:D.string(),version:D.string(),source:D.enum([`new`,`upgraded`,`already-present`])}),Wn=D.object({npmName:D.string(),reason:D.string()}),Gn=D.object({success:D.boolean(),packageName:D.string(),version:D.string().optional(),restartRequired:D.boolean(),error:D.string().optional(),installed:D.array(Un).optional(),skipped:D.array(Wn).optional(),warnings:D.array(D.string()).optional()}),Kn=D.object({success:D.boolean(),packageName:D.string(),error:D.string().optional(),restartRequired:D.boolean()}),qn=D.object({name:D.string(),version:D.string(),description:D.string().optional(),hasDescriptor:D.boolean().default(!1),serverImportPath:D.string().min(1).optional()}),Jn=D.object({packageName:D.string(),latestVersion:D.string(),success:D.boolean(),error:D.string().optional()}),Yn=D.object({name:D.string(),displayName:D.string(),description:D.string(),icon:D.string().optional(),tags:D.array(D.string()).optional(),descriptorName:D.string().min(1).optional()}),Xn=D.object({$schema:D.string(),updatedAt:D.string(),adapters:D.array(Yn),extensions:D.array(Yn)}),Zn=D.object({name:D.string(),currentVersion:D.string(),latestVersion:D.string(),description:D.string().optional()}),Qn=de(`packages`,{list:{request:D.object({}),response:D.object({packages:D.array(qn)})},install:{request:D.object({packageName:D.string().optional(),packageNames:D.array(D.string()).min(1).optional(),source:D.enum([`npm`,`local`]).optional(),force:D.boolean().optional()}).refine(e=>e.packageName!==void 0||e.packageNames!==void 0,{message:`Expected packageName or packageNames`}),response:Gn},uninstall:{request:D.object({packageName:D.string()}),response:Kn},getLatestVersion:{request:D.object({packageName:D.string()}),response:Jn},getRegistry:{request:D.object({}),response:Xn},checkUpdates:{request:D.object({}),response:D.object({updates:D.array(Zn)})},installed:D.object({packageName:D.string(),version:D.string()}),uninstalled:D.object({packageName:D.string()})}),V=Qn.subjects;async function $n(e,t,n){if(!A.isAbsolute(e))return;let r;try{r=await k.realpath(e)}catch{return}let i=er(t,n),a=[A.resolve(r,`src`,`${i}.ts`),A.resolve(r,`dist`,`${i}.mjs`)];for(let e of a){let t=await tr(e);if(t!==void 0&&nr(t,r))return t}}function er(e,t){return t===!0?e:t}async function tr(e){try{return await k.realpath(e)}catch{return}}function nr(e,t){let n=A.relative(t,e);return n.length>0&&!n.startsWith(`..`)&&!A.isAbsolute(n)}var rr=class{extensionsDir;constructor(e){this.extensionsDir=A.resolve(e)}async install(e){try{let t=A.resolve(e.endsWith(`descriptor.json`)?A.dirname(e):e),n=await k.realpath(t),r=await this.readDescriptor(n);Ce(r)||await this.validateEntrypoints(n,r.entrypoints);let i=this.linkPathFor(r.name);await k.mkdir(A.dirname(i),{recursive:!0});try{if((await k.lstat(i)).isSymbolicLink())await k.unlink(i);else throw Error(`${i} already exists and is not a symlink`)}catch(e){if(e.code!==`ENOENT`)throw e}let a=process.platform===`win32`?`junction`:`dir`;return await k.symlink(n,i,a),{success:!0,packageName:r.name,version:r.version,restartRequired:!0}}catch(e){return{success:!1,packageName:``,error:e instanceof Error?e.message:String(e),restartRequired:!1}}}async uninstall(e){try{let t=this.linkPathFor(e);if(await k.unlink(t),e.startsWith(`@`)){let e=A.dirname(t);(await k.readdir(e).catch(()=>null))?.length===0&&await k.rmdir(e).catch(()=>{})}return{success:!0,packageName:e,restartRequired:!0}}catch(t){return{success:!1,packageName:e,error:t instanceof Error?t.message:String(t),restartRequired:!1}}}async list(){try{await k.access(this.extensionsDir)}catch{return[]}let e=await k.readdir(this.extensionsDir),t=[];for(let n of e){let e=A.join(this.extensionsDir,n);if(n.startsWith(`@`)){let n=await k.readdir(e).catch(()=>[]);for(let r of n){let n=A.join(e,r),i=await this.readLocalEntry(n);i!==null&&t.push(i)}}else{let n=await this.readLocalEntry(e);n!==null&&t.push(n)}}return t}async readLocalEntry(e){try{if(!(await k.lstat(e)).isSymbolicLink())return null;let t=await k.readlink(e),n=await k.realpath(A.resolve(A.dirname(e),t)),r=A.join(n,`descriptor.json`),i=await k.readFile(r,`utf-8`),a=Te(JSON.parse(i));if(!a.success)return null;let o=a.data.entrypoints?.server,s=o===void 0?void 0:await $n(n,`server`,o);return{name:a.data.name,version:a.data.version,sourcePath:n,source:`local`,...s!==void 0&&{serverImportPath:s}}}catch{return null}}async readDescriptor(e){let t=A.join(e,`descriptor.json`),n=await k.readFile(t,`utf-8`).catch(()=>{throw Error(`descriptor.json not found at ${t}`)}),r=Te(JSON.parse(n));if(!r.success)throw Error(`Invalid descriptor.json: ${r.error.message}`);return r.data}async validateEntrypoints(e,t){await Promise.all(Object.entries(t).map(async([t,n])=>{if(n!==void 0&&await $n(e,t,n)===void 0){let e=er(t,n);throw Error(`${t} entrypoint "${e}" has no resolvable candidate: neither src/${e}.ts nor dist/${e}.mjs exists within the extension root`)}}))}linkPathFor(e){let t=A.resolve(this.extensionsDir,...e.split(`/`)),n=A.relative(this.extensionsDir,t);if(n===``||n.startsWith(`..`)||A.isAbsolute(n))throw Error(`Invalid extension name: ${e}`);return t}};const ir=`nodeLinker: node-modules`,ar=/^[A-Za-z]:[\\/]/;let or=null;function H(){return or||(or=Promise.all([import(`../lib-Ba55od_d.mjs`).then(e=>t(e.t(),1)),import(`../lib-ZKtnbCqH.mjs`).then(e=>t(e.t(),1)),import(`../lib-CM_BUxN8.mjs`).then(e=>t(e.default,1))]).then(([e,t,n])=>({Configuration:e.Configuration,Project:e.Project,Cache:e.Cache,StreamReport:e.StreamReport,structUtils:e.structUtils,ppath:t.ppath,npath:t.npath,xfs:t.xfs,getPluginConfiguration:n.getPluginConfiguration})),or)}var sr=class{makaioHome;constructor(e){this.makaioHome=e}async initialize(){try{let{npath:e,ppath:t,xfs:n}=await H(),r=e.toPortablePath(this.makaioHome),i=t.join(r,`package.json`);if(await n.mkdirpPromise(r),await this.ensureYarnRc(r,n,t),await n.existsPromise(i))return;await n.writeJsonPromise(i,{name:`makaio-packages`,version:`1.0.0`,private:!0,description:`Makaio installed packages`,dependencies:{}}),console.info(`[YarnPackageManager] Created package.json at %s`,i)}catch(e){throw Error(`Failed to initialize package.json`,{cause:e})}}async ensureYarnRc(e,t,n){let r=n.join(e,`.yarnrc.yml`),i=await t.existsPromise(r)?await t.readFilePromise(r,`utf8`):``,a=fr(i);i!==a&&(await t.writeFilePromise(r,a),console.info(`[YarnPackageManager] Wrote .yarnrc.yml at %s`,r))}async loadYarnState(){let{Configuration:e,Project:t,Cache:n,npath:r,getPluginConfiguration:i}=await H(),a=r.toPortablePath(this.makaioHome),o=await e.find(a,i()),{project:s}=await t.find(o,a);return{configuration:o,project:s,cache:await n.find(o)}}async runProjectInstall(e,t,n){let{StreamReport:r}=await H();if((await r.start({configuration:e,stdout:process.stdout},async e=>{await t.install({cache:n,report:e})})).hasErrors())throw Error(`Yarn install failed with errors`)}async parsePackageDescriptor(e){let{structUtils:t}=await H(),n=t.parseDescriptor(e);return n.range===`unknown`?t.makeDescriptor(n,`latest`):n}async installPackage(e){try{let{structUtils:t}=await H(),{configuration:n,project:r,cache:i}=await this.loadYarnState(),a=await this.parsePackageDescriptor(e),o=t.stringifyIdent(a),s=r.topLevelWorkspace.manifest.dependencies.get(a.identHash);r.topLevelWorkspace.manifest.dependencies.set(a.identHash,a),await this.runProjectInstall(n,r,i);let c=r.storedResolutions.get(a.descriptorHash);if(!c)throw Error(`Package resolution not found after installation`);let l=r.storedPackages.get(c);if(!l)throw Error(`Package not found after installation`);let u=l.version??`unknown`;if(!(await this.readInstalledDescriptor(o)).hasDescriptor)throw s?r.topLevelWorkspace.manifest.dependencies.set(a.identHash,s):r.topLevelWorkspace.manifest.dependencies.delete(a.identHash),await this.runProjectInstall(n,r,i),Error(`Installed package ${o} does not contain a valid descriptor.json`);return console.info(`[YarnPackageManager] Installed %s@%s`,o,u),u}catch(t){throw Error(`Failed to install ${e}`,{cause:t})}}async uninstallPackage(e){try{let{structUtils:t}=await H(),{configuration:n,project:r,cache:i}=await this.loadYarnState(),a=t.parseIdent(e);if(!r.topLevelWorkspace.manifest.dependencies.delete(a.identHash))throw Error(`Package ${e} not found in dependencies`);await this.runProjectInstall(n,r,i),console.info(`[YarnPackageManager] Uninstalled %s`,e)}catch(t){throw Error(`Failed to uninstall ${e}`,{cause:t})}}async listPackages(){try{let{xfs:e,npath:t,ppath:n,structUtils:r}=await H(),i=t.toPortablePath(this.makaioHome),a=n.join(i,`package.json`);if(!await e.existsPromise(a))return[];let{project:o}=await this.loadYarnState(),s=[];for(let[,e]of o.topLevelWorkspace.manifest.dependencies){let t=r.stringifyIdent(e),n=o.storedResolutions.get(e.descriptorHash),i=(n?o.storedPackages.get(n):void 0)?.version??r.parseRange(e.range).selector,a=await this.readInstalledDescriptor(t);a.hasDescriptor&&s.push({name:t,version:i,hasDescriptor:!0,...a.serverImportPath!==void 0&&{serverImportPath:a.serverImportPath}})}return s}catch(e){throw Error(`Failed to list packages`,{cause:e})}}async ensureFrameworkDependency(e){let t=ur(e);try{let{structUtils:e}=await H(),{configuration:n,project:r,cache:i}=await this.loadYarnState(),a=e.makeDescriptor(e.parseIdent(`@makaio/framework`),t);if(r.topLevelWorkspace.manifest.dependencies.get(a.identHash)?.range===t)return;r.topLevelWorkspace.manifest.dependencies.set(a.identHash,a),await this.runProjectInstall(n,r,i),console.info(`[YarnPackageManager] Ensured @makaio/framework@%s`,t)}catch(e){throw Error(`Failed to ensure @makaio/framework@${t}`,{cause:e})}}async getLatestVersion(e){return this.resolvePackageVersion(e)}async readInstalledDescriptor(e){let t=await this.readInstalledExtensionDescriptor(e);if(t===null)return{hasDescriptor:!1};let n=await this.resolveInstalledServerEntrypoint(e,t);return{hasDescriptor:!0,...n!==void 0&&{serverImportPath:n}}}async resolveInstalledServerEntrypoint(e,t){let n=t.entrypoints?.server;if(n!==void 0)return $n(A.join(this.makaioHome,`node_modules`,...e.split(`/`)),`server`,n)}async readInstalledExtensionDescriptor(e){let t=A.join(this.makaioHome,`node_modules`,...e.split(`/`),`descriptor.json`),n;try{let e=await k.readFile(t,`utf-8`);n=JSON.parse(e)}catch(e){if(e instanceof SyntaxError||pr(e))return null;throw e}let r=Te(n);return r.success?r.data:null}async listInstalledExtensionDescriptors(){let e=A.join(this.makaioHome,`package.json`),t;try{let n=await k.readFile(e,`utf-8`);t=JSON.parse(n)}catch(e){if(pr(e))return[];throw e}let n=Object.keys(t.dependencies??{});return(await Promise.all(n.map(async e=>{let t=await this.readInstalledExtensionDescriptor(e);return t===null?null:{npmName:e,version:await this.readInstalledPackageVersion(e),descriptor:t}}))).filter(e=>e!==null)}async readInstalledPackageVersion(e){let t=A.join(this.makaioHome,`node_modules`,...e.split(`/`),`package.json`);try{let e=await k.readFile(t,`utf-8`),n=JSON.parse(e);return typeof n.version==`string`?n.version:`unknown`}catch{return`unknown`}}async readManifestSnapshot(){let e=A.join(this.makaioHome,`package.json`),t=await k.readFile(e,`utf-8`);return JSON.parse(t)}async writeManifestAndReinstall(e){let t=A.join(this.makaioHome,`package.json`);await k.writeFile(t,`${JSON.stringify(e,null,2)}\n`,`utf-8`);let{configuration:n,project:r,cache:i}=await this.loadYarnState();await this.runProjectInstall(n,r,i)}async resolvePackageVersion(e){try{let{StreamReport:t}=await H(),{configuration:n,project:r}=await this.loadYarnState(),i=await this.parsePackageDescriptor(e),a=`unknown`;return await t.start({configuration:n,stdout:process.stdout},async e=>{let t=n.makeResolver(),o=await t.getCandidates(i,{},{project:r,resolver:t,report:e});if(o.length>0){let e=o[0];a=e.reference.match(/^npm:(.+)$/)?.[1]??e.reference}}),a}catch(t){throw Error(`Failed to resolve version for ${e}`,{cause:t})}}};function cr(e,t){return!t||t===`latest`?e:`${e}@${t}`}function lr(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t===-1)return e;let n=e.indexOf(`@`,t+1);return n===-1?e:e.slice(0,n)}let t=e.indexOf(`@`);return t===-1?e:e.slice(0,t)}function ur(e){return e.localPackagePath?`portal:${dr(e.localPackagePath)}`:e.versionRange}function dr(e){let t=(ar.test(e)?e:A.resolve(e)).replace(/\\/g,`/`);return ar.test(t)?`/${t}`:t}function fr(e){let t=e.split(/\r?\n/),n=!1,r=t.map(e=>/^\s*nodeLinker\s*:/.test(e)?(n=!0,ir):e);if(!n){let t=e.trimEnd();return`${t}${t.length>0?`
|
|
1
|
+
import{i as e,o as t,t as n}from"../chunk-DTipWd-i.mjs";import{t as r}from"../semver-CIhHqMkw.mjs";import{RuntimeNamespace as i,RuntimeSubjects as a}from"./bus/runtime/namespace.mjs";import{ExplicitDescriptorDiscovery as o,FilesystemDescriptorDiscovery as s,MergedDescriptorDiscovery as c}from"./extension-discovery.mjs";import{MAKAIO_CONFIG_FILE_ENV as l,MAKAIO_HOME_ENV as u,buildConfiguredRuntimeOptions as d,createMakaioConfigDiscovery as f,defineMakaioConfig as p,loadMakaioConfig as m,parseMakaioConfig as h,resolveMakaioConfigPath as g,resolveMakaioHome as _,shouldIncludeExtension as v}from"./makaio-config.mjs";import{t as y}from"../descriptor-to-package-DdpjpT7n.mjs";import{a as b,c as x,i as S,n as C,o as w,r as T,s as E,t as ee}from"../load-extensions-Cze1RHcG.mjs";import{i as te,o as ne,r as re,s as ie,t as ae}from"../workflow-worker-BIpYi6o7.mjs";import{createRequire as oe}from"node:module";import{z as D}from"zod";import{execFile as se}from"node:child_process";import{promisify as ce}from"node:util";import{fileURLToPath as le,pathToFileURL as O}from"node:url";import*as k from"node:fs/promises";import*as A from"node:path";import j from"node:path";import*as M from"node:crypto";import{createHash as N}from"node:crypto";import*as P from"node:fs";import{existsSync as F,readFileSync as ue}from"node:fs";import{createBusNamespace as de}from"@makaio/framework/core";import{ChannelClosedError as fe,MakaioBus as pe,openChannel as me,projectSubjectTelemetryFacts as he}from"@makaio/framework/bus";import{AIModelSchema as ge,AdapterSubjects as _e,BUILT_IN_THIN_WORKFLOW_PROVIDER_ID as ve,ConfigSchema as I,ConfigSubjects as L,CredentialSubjects as ye,FrameworkContractNamespaces as be,FrameworkStorageNamespaces as xe,SubjectTelemetrySubjects as Se,isDetachedDescriptor as Ce,registerWorkerNodeProvider as we,safeParseExtensionDescriptor as Te,unregisterWorkerNodeProvider as Ee,versionSatisfies as De}from"@makaio/framework/contracts";import{DispatchingAuth as Oe,E2EAuth as ke,HmacAuth as Ae,WebSocketClientTransport as je}from"@makaio/framework/node/transports";import{BaseService as Me}from"@makaio/framework/service-base";import{uniqueIndex as Ne}from"drizzle-orm/sqlite-core";import{uniqueIndex as Pe}from"drizzle-orm/pg-core";import{STORAGE_ENGINE_URL_HINTS as Fe,defineDialectSchema as Ie,defineDualTable as Le,findStorageEngine as Re,getDatabaseDialect as ze,getRawSqlExecutor as Be,getStorageEngine as Ve,registerDrizzleHandlers as He,registerStorageEngine as Ue,resolveSchema as We,resolveStorageEngine as Ge,resolveStorageEngineForUrl as Ke}from"@makaio/framework/storage/drizzle";import{and as qe,eq as R,sql as z}from"drizzle-orm";import{parseStoredCredentialRef as Je}from"@makaio/framework/contracts/config";import{AdapterRuntimeSubjects as Ye,registerAdapterRuntimeIdentityHandlers as Xe}from"@makaio/framework/services/adapter-runtime";import{buildProviderContext as Ze}from"@makaio/framework/services/provider-context";import*as Qe from"node:os";import{ProviderStorageSubjects as $e}from"@makaio/framework/services/settings/storage";import{isRecord as et}from"@makaio/framework/utils";import{BootNamespace as tt,ExtensionCoordinator as nt,ExtensionNamespace as rt,KernelNamespace as it,coalesceExtensionOverrides as at,createShutdownSequence as ot,filterEligibleExtensions as st}from"@makaio/framework/kernel";import{AdapterSubsystemSubjects as ct}from"@makaio/framework/services/adapter-subsystem";import{CachedRegistryFetcher as lt,FallbackRegistryFetcher as ut,ModelRegistrySchema as dt,ProviderModelOverrideSchema as ft,mergeModelMetadata as pt}from"@makaio/framework/services/model-registry";import{createClientsCorePackage as mt}from"@makaio/framework/clients";import{Readable as ht,Transform as gt}from"node:stream";import{pipeline as _t}from"node:stream/promises";import{createDatabaseClient as vt}from"@makaio/framework/storage/drizzle/client";import{AdapterSubsystemToken as yt,FileAdapterConfigRepository as bt,createAdapterSubsystemContributionProcessor as xt,createAdapterSubsystemPackage as St}from"@makaio/framework/adapter-subsystem";import{loadOrCreateMachineIdentity as Ct,loadOrCreateMachineIdentity as wt,machineKeysExist as Tt,validateMachineKeys as Et}from"@makaio/framework/node/machine-identity";import{resolveWorkspaceRoot as Dt}from"@makaio/framework/utils/workspace-root";import{Hono as Ot}from"hono";import{CliNamespace as kt}from"@makaio/framework/kernel/cli";import{startBusServer as At}from"@makaio/framework/node/bus-server";import{WebSocketServer as jt}from"ws";import{ConfigProvider as Mt}from"@makaio/framework/providers";import{KernelSubjects as B}from"@makaio/framework/kernel/namespace";import{FrameworkServicesCoreNamespaces as Nt,SessionOrchestratorToken as Pt,createArtifactKindContributionProcessor as Ft,createArtifactLifecycleHookContributionProcessor as It,createFacetNamespaceContributionProcessor as Lt,createModelRegistryPackage as Rt,createSurfaceBindingContributionProcessor as zt,createToolContributionProcessor as Bt,createTransitionContributionProcessor as Vt,createWorkflowBlockContributionProcessor as Ht,frameworkCorePackages as Ut}from"@makaio/framework/services";import{createLogImportContributionProcessor as Wt,logImportRegistryPackage as Gt}from"@makaio/framework/services/log-import";import{createWorkflowEnginePackage as Kt}from"@makaio/framework/workflow-engine/package";import{PreferenceValueSchema as qt,PreferencesSubjects as Jt}from"@makaio/framework/services/preferences";import{resolveConnectorCredentials as Yt,resolveCredentialRef as Xt}from"@makaio/framework/adapters/config";import{DefinitionSubjects as Zt}from"@makaio/framework/services/definition";import{ProviderRuntimeSubjects as Qt}from"@makaio/framework/services/provider-runtime";import{SettingsSubjects as $t}from"@makaio/framework/services/settings/namespace";import{parseWorkspaceGlobs as en}from"@makaio/framework/utils/workspace-packages";import{serveStatic as tn}from"@hono/node-server/serve-static";function nn(e){return e.on(_e.getCapabilities,async t=>{let{adapterName:n,adapterId:r}=t.payload;if(r){await t.next();return}if(n){let r=await e.requestOptional(Ye.resolveId,{adapterName:n}),i=r.handled?r.data.adapterId:void 0;i&&(t.payload.adapterId=i)}await t.next()},{priority:20})}function rn(e){let{coordinator:t,configRepository:n,platformDefaults:r}=e,i=St({configRepository:n,coordinator:t,platformDefaults:r});return t.registerContributionProcessor(xt({getAdapterSubsystemService:()=>t.getExtensionService(yt)})),{adapterSubsystemPackage:i}}function an(e){let{bus:t,currentMachineId:n}=e,r=Xe(t,{currentMachineId:n,listKnownAdapterNames:e.listKnownAdapterNames??(async()=>{let{configs:e}=await t.request(ct.listAdapterConfigs,{});return e.map(e=>e.name)})}),i=nn(t);return{cleanup:()=>{r.cleanup(),i()}}}function on(e=`sqlite`){let{migrations:t}=Ve(e);return t.resolveSourceChainDir?.()??j.resolve(import.meta.dirname,`..`,t.chainDirName)}var sn=class extends Error{expectedDialect;journalDialect;constructor(e,t,n,r){super(`Migration journal at ${r} declares dialect '${n??`unknown`}', but the target database speaks '${e}'. Point the runner at a migrations directory generated for '${e}' (journal dialect '${t}').`),this.name=`MigrationDialectMismatchError`,this.expectedDialect=e,this.journalDialect=n}};function cn(e={}){let t=typeof e==`string`?void 0:e.expectedDialect,n=typeof e==`string`?e:e.migrationsDir??on(t),r=j.join(n,`meta`,`_journal.json`);if(!F(r))throw Error(`Cannot find migrations journal at ${r}`);let i=JSON.parse(ue(r,`utf-8`));if(t!==void 0){let e=Ve(t).migrations.journalDialect;if(i.dialect!==e)throw new sn(t,e,i.dialect,r)}return i.entries.map(e=>{let t=ue(j.join(n,`${e.tag}.sql`),`utf-8`);return{tag:e.tag,sql:t.split(`--> statement-breakpoint`),folderMillis:e.when,hash:N(`sha256`).update(t).digest(`hex`),bps:e.breakpoints}})}function ln(e){return e.replace(/--.*$/gm,``).trim()}async function un(e,t){try{await e.run(z.raw(`ROLLBACK`))}catch(e){console.error(`[storage-migrations] Failed to roll back migration transaction`,{...t,rollbackError:e})}}async function dn(e){let{migrations:t}=e.engine;if(await e.session.run(z.raw(t.beginTransactionStatement)),t.acquireTransactionLock)try{await t.acquireTransactionLock(e.session,e.tableName)}catch(t){throw await un(e.session,{migrationsTable:e.tableName}),t}}async function fn(e){let t=e.engine.migrations.acquireTransactionLock!==void 0;t&&await dn(e);try{await e.session.run(z.raw(e.engine.migrations.buildLedgerDdl(e.tableName)));let n=await e.session.all(z`SELECT hash FROM ${e.tableId}`);return t&&await e.session.run(z.raw(`COMMIT`)),new Set(n.map(e=>e.hash))}catch(n){throw t&&await un(e.session,{migrationsTable:e.tableName}),n}}async function pn(e,t){try{await e.session.run(z`INSERT INTO ${e.tableId} ("hash", "created_at") VALUES (${t.hash}, ${t.folderMillis})`),await e.session.run(z.raw(`COMMIT`))}catch(e){throw console.error(`[storage-migrations] Failed to finalize migration`,{hash:t.hash,folderMillis:t.folderMillis,error:e}),e}}async function mn(e,t){return e.engine.migrations.acquireTransactionLock===void 0||(await e.session.all(z`SELECT hash FROM ${e.tableId} WHERE hash = ${t.hash}`)).length===0?!1:(console.warn(`[storage-migrations] Migration already recorded by a concurrent runner, skipping`,{hash:t.hash,folderMillis:t.folderMillis}),await e.session.run(z.raw(`COMMIT`)),!0)}async function hn(e,t){await e.session.run(z.raw(`ROLLBACK`)),await dn(e),!await mn(e,t)&&await pn(e,t)}async function gn(e,t){await dn(e);try{if(await mn(e,t))return;for(let[n,r]of t.sql.entries())if(ln(r))try{await e.session.run(z.raw(r))}catch(i){if(n===0&&/^\s*CREATE\s/i.test(r)&&e.engine.errors.isDuplicateObjectError(i)){if(t.sql.length>1)throw Error(`Cannot adopt multi-statement migration '${t.tag}' because its first schema object already exists. Reset the database or provide an incremental migration.`,{cause:i});console.warn(`[storage-migrations] Schema object already exists, adopting into ledger`,{hash:t.hash,folderMillis:t.folderMillis,statementIndex:n}),await hn(e,t);return}throw console.error(`[storage-migrations] Failed to apply migration statement`,{hash:t.hash,folderMillis:t.folderMillis,statementIndex:n,statement:r,error:i}),i}await pn(e,t)}catch(n){throw await un(e.session,{hash:t.hash,folderMillis:t.folderMillis}),n}}async function _n(e,t,n){let r=Be(e),i=Ve(r.dialect),a=n??i.migrations.defaultLedgerTable;await r.withSession(async e=>{let n={session:e,engine:i,tableName:a,tableId:z.identifier(a)},r=await fn(n);for(let e of t)r.has(e.hash)||(await gn(n,e),r.add(e.hash))})}async function vn(e,t={}){await _n(e,cn({migrationsDir:t.migrationsDir,expectedDialect:ze(e)})),await Ge(e).fts.provisionSearchIndex(e)}var yn=class{configPath;constructor(e){this.configPath=A.join(e,`config.json`)}async getConfig(){try{let e=await k.readFile(this.configPath,`utf-8`);return I.parse(JSON.parse(e))}catch(e){if(e.code===`ENOENT`)return I.parse({});if(e instanceof SyntaxError||e instanceof Error&&e.name===`ZodError`)return console.warn(`[FileConfigStorage] Failed to parse config, falling back to defaults:`,e),I.parse({});throw e}}async saveConfig(e){let t=A.dirname(this.configPath);await k.mkdir(t,{recursive:!0}),await k.writeFile(this.configPath,JSON.stringify(e,null,2),{encoding:`utf-8`,mode:384}),await k.chmod(this.configPath,384)}};function bn(e){try{let t=A.resolve(Dt(e),`static/model-registry.yaml`);return F(t)?t:void 0}catch{return}}async function xn(e,t){await new Promise((n,r)=>{if(e.address()){n();return}let i=e=>{if(o(),e.code===`EADDRINUSE`){r(Error(`Port ${t} is already in use`));return}r(e)},a=()=>{o(),n()},o=()=>{e.off(`error`,i),e.off(`listening`,a)};e.once(`error`,i),e.once(`listening`,a)}),e.on(`error`,e=>{console.error(`[HttpServer] Post-bind error:`,e)})}function Sn(e){let t=e.address();if(typeof t==`object`&&t&&`port`in t)return t.port;throw Error(`HTTP server is not bound to a TCP address`)}function Cn(e,t){let n=e,r=!1;return{fetch:(e,i,a)=>{if(!r)return new Response(`Makaio runtime is booting`,{status:503,headers:{"Retry-After":`1`}});let{pathname:o}=new URL(e.url);return t?.health&&e.method===`GET`&&o===`/health`?Response.json(t.health()):e.method===`GET`&&o===`/bus`?new Response(`WebSocket endpoint`,{status:426,headers:{Upgrade:`websocket`}}):n.fetch(e,i,a)},markReady(){r=!0},replaceApp(e){n=e}}}const wn=[`extension`,`static-fallback`];function Tn(e){let t=[];function n(e){let t=new Ot,n=[...e].sort((e,t)=>wn.indexOf(e.phase)-wn.indexOf(t.phase));for(let e of n)e.mount(t);return t}function r(){return n(t)}function i(r){e&&e.replaceApp(n(r)),t=r}return{add(e){i([...t,e])},remove(e){let n=t.filter(t=>t.owner!==e);n.length!==t.length&&i(n)},build:r,get contributions(){return[...t]}}}function En(e,t){if(!(e instanceof Error))return!1;let{rootPackageName:n,subpath:r}=On(t),i=(r===void 0?[t]:[t,n]).flatMap(e=>[`Cannot find package '${e}'`,`Cannot find module '${e}'`,`Cannot find package "${e}"`,`Cannot find module "${e}"`]),a=e;return(a.code===`ERR_MODULE_NOT_FOUND`||a.code===`MODULE_NOT_FOUND`)&&i.some(t=>e.message.includes(t))||a.code===`ERR_PACKAGE_PATH_NOT_EXPORTED`&&r!==void 0&&e.message.includes(`Package subpath '${r}' is not defined by "exports"`)&&kn(e.message,n)?!0:i.some(t=>e.message.includes(t))}async function Dn(e){try{return await import(e)}catch(t){if(En(t,e))return null;throw t}}function On(e){let t=e.split(`/`);return e.startsWith(`@`)?{rootPackageName:t.slice(0,2).join(`/`),subpath:t.length>2?`./${t.slice(2).join(`/`)}`:void 0}:{rootPackageName:t[0]??e,subpath:t.length>1?`./${t.slice(1).join(`/`)}`:void 0}}function kn(e,t){let n=t,r=t.replaceAll(`/`,`\\`);return e.includes(`/${n}/package.json`)||e.includes(`\\${r}\\package.json`)}function An(e){let t=e.url?.split(`?`)[0]??``;return t===`/bus`?!0:(t===`/`||t===``)&&e.headers.origin===void 0}function jn(e,t){return(n,r,i)=>{if(!An(n))return;let a=e();if(!a||!t()){r.destroy();return}a.handleUpgrade(n,r,i,e=>{a.emit(`connection`,e,n)})}}var Mn=class{options;busServer=null;websocketServer=null;upgradeHandlerServer=null;upgradeHandler=null;busReady=!1;connecting=!1;constructor(e){this.options=e}get dispatchingAuth(){return this.options.auth instanceof Oe?this.options.auth:void 0}async connect(e,t){if(this.connecting||this.busServer||this.websocketServer)throw Error(`[BusServerTransport] connect() called while transport is already connected or connecting`);if(this.options.httpServer.address()===null)throw Error(`[BusServerTransport] httpServer must already be listening before connect() is called`);this.connecting=!0;try{let t=new jt({noServer:!0});this.websocketServer=t;let n=jn(()=>this.websocketServer,()=>this.busReady);this.options.httpServer.on(`upgrade`,n),this.upgradeHandlerServer=this.options.httpServer,this.upgradeHandler=n,this.busServer=await At({websocket:t,bus:e,auth:this.options.auth,loopbackName:this.options.loopbackName??`node`}),this.busReady=!0}catch(e){throw await this.stopBusServer(`startup error`),this.detachUpgradeHandler(),await this.stopWebSocketServer(`startup error`),e}finally{this.connecting=!1}}async disconnect(){await this.stopBusServer(`shutdown`),this.detachUpgradeHandler(),await this.stopWebSocketServer(`shutdown`)}async stopBusServer(e){this.busReady=!1,this.busServer&&=(await this.busServer.stop().catch(t=>{console.error(`[BusServerTransport] Failed to stop bus server during ${e}:`,t)}),null)}detachUpgradeHandler(){this.upgradeHandlerServer&&this.upgradeHandler&&this.upgradeHandlerServer.off(`upgrade`,this.upgradeHandler),this.upgradeHandlerServer=null,this.upgradeHandler=null}async stopWebSocketServer(e){this.websocketServer&&=(await new Promise((e,t)=>{this.websocketServer.close(n=>n?t(n):e())}).catch(t=>{t instanceof Error&&t.message===`The server is not running`||console.error(`[BusServerTransport] Failed to close WebSocket server during ${e}:`,t)}),null)}},Nn=class extends Mt{keysDir;constructor(e,t){super(e),this.keysDir=A.join(t,`keys`)}async getConfig(e){let t=await super.getConfig(e);return t.bus?.remote&&!t.bus.remote.secret&&(t.bus.remote.secret=this.generateSecret(),(await this.getStoredConfig()).bus?.remote?.url===t.bus.remote.url&&await this.saveConfig(await this.prepareConfigForPersistence(t))),t}generateSecret(){return M.randomBytes(32).toString(`base64`)}async getMachineId(){return(await wt(this.keysDir)).machineId}getEnv(e){return process.env[e]}};function Pn(e,t){return{extensions:e.discovery??new s(void 0,{extensionsDir:j.join(t,`extensions`),nodeModulesDir:j.join(t,`node_modules`)})}}function Fn(e){return F(j.join(e,`meta`,`_journal.json`))}function In(e,t={}){let{moduleDir:n=import.meta.dirname,getMigrationsFolder:r=on}=t,i=Ve(e).migrations.chainDirName,a=[],o=j.resolve(n,`..`,i);if(Fn(o))return o;a.push(o);try{let t=r(e);if(Fn(t))return t;a.push(t)}catch(t){a.push(`getMigrationsFolder('${e}') unavailable: ${t instanceof Error?t.message:String(t)}`)}throw Error(`resolveBundledMigrationsDir: no '${e}' migrations directory with meta/_journal.json found. Probed: ${a.join(`; `)}. Pass an explicit migrations directory (boot option 'centralMigrationsDir' or InitializeNodeDatabaseOptions.migrationsDir) when migrations are staged elsewhere.`)}function Ln(e){if(process.platform===`win32`)return!0;let t=e?.code;return t===`ENOSYS`||t===`EINVAL`}function Rn(e){return e===void 0||e.trim()===``?void 0:e}function zn(e){try{let t=new URL(e);if(t.host!==``)return`${t.protocol}//${t.host}${t.pathname}`}catch{}let t=e.indexOf(`:`);return t===-1?`<unparseable database URL>`:`${e.slice(0,t+1)}…`}async function Bn(e,t,n){let r;try{r=await import(O(oe(A.resolve(t,`package.json`)).resolve(e.packageName)).href)}catch(t){throw Error(`initializeNodeDatabase: the database URL from ${n} targets the '${e.dialect}' storage engine, but '${e.packageName}' could not be loaded. Install ${e.packageName} in the host application, or pass its already-loaded storageEngine via the 'database.engines' boot option.`,{cause:t})}let i=r.storageEngine;if(i===void 0||i.dialect!==e.dialect)throw Error(`initializeNodeDatabase: '${e.packageName}' does not provide a storage engine for dialect '${e.dialect}'. Auto-resolved engine packages must export 'storageEngine: StorageEngine' with a matching dialect.`);Re(e.dialect)===void 0&&Ue(i)}async function Vn(e){let t=Rn(e.database?.url),n=t??Rn(process.env.MAKAIO_DATABASE_URL);if(n!==void 0){let r=t===void 0?`the MAKAIO_DATABASE_URL environment variable`:`the 'database.url' boot option`,i=Ke(n);if(i.kind===`missing-engine`&&(await Bn(i,e.database?.enginePackageImportBasePath??process.cwd(),r),i=Ke(n)),i.kind!==`engine`){let e=Fe.map(e=>e.packageName).join(`, `);throw Error(`initializeNodeDatabase: unsupported database URL '${zn(n)}' from ${r}. URL targets require a storage engine that claims the URL (e.g. postgres:// / postgresql:// via ${e}); SQLite targets are configured via the dbPath option or MAKAIO_DATABASE_PATH.`)}return{kind:`url`,url:n,dialect:i.engine.dialect}}let r=A.resolve(Rn(e.dbPath)??Rn(process.env.MAKAIO_DATABASE_PATH)??A.join(e.makaioHome,`makaio.db`));return{kind:`file`,dbPath:r,url:O(r).href}}async function Hn(e){for(let t of e.database?.engines??[])Ue(t);let t=await Vn(e);if(t.kind===`url`){let n=await vt({url:t.url,postgres:{poolMax:e.database?.poolMax}});try{let r=e.migrationsDir??In(t.dialect);return await vn(n.db,{migrationsDir:r}),{databaseClient:n}}catch(e){throw await n.close(),e}}let{dbPath:n}=t,r=A.dirname(n);await P.promises.mkdir(r,{recursive:!0});let i=await vt({url:t.url});try{await vn(i.db,{migrationsDir:e.migrationsDir});try{await P.promises.chmod(n,384)}catch(e){if(!Ln(e))throw e;console.warn(`[initializeNodeDatabase] Failed to set SQLite file permissions (continuing; this may be unsupported on Windows):`,e)}return{databaseClient:i,dbPath:n}}catch(e){throw await i.close(),e}}const Un=D.object({npmName:D.string(),version:D.string(),source:D.enum([`new`,`upgraded`,`already-present`])}),Wn=D.object({npmName:D.string(),reason:D.string()}),Gn=D.object({success:D.boolean(),packageName:D.string(),version:D.string().optional(),restartRequired:D.boolean(),error:D.string().optional(),installed:D.array(Un).optional(),skipped:D.array(Wn).optional(),warnings:D.array(D.string()).optional()}),Kn=D.object({success:D.boolean(),packageName:D.string(),error:D.string().optional(),restartRequired:D.boolean()}),qn=D.object({name:D.string(),version:D.string(),description:D.string().optional(),hasDescriptor:D.boolean().default(!1),serverImportPath:D.string().min(1).optional()}),Jn=D.object({packageName:D.string(),latestVersion:D.string(),success:D.boolean(),error:D.string().optional()}),Yn=D.object({name:D.string(),displayName:D.string(),description:D.string(),icon:D.string().optional(),tags:D.array(D.string()).optional(),descriptorName:D.string().min(1).optional()}),Xn=D.object({$schema:D.string(),updatedAt:D.string(),adapters:D.array(Yn),extensions:D.array(Yn)}),Zn=D.object({name:D.string(),currentVersion:D.string(),latestVersion:D.string(),description:D.string().optional()}),Qn=de(`packages`,{list:{request:D.object({}),response:D.object({packages:D.array(qn)})},install:{request:D.object({packageName:D.string().optional(),packageNames:D.array(D.string()).min(1).optional(),source:D.enum([`npm`,`local`]).optional(),force:D.boolean().optional()}).refine(e=>e.packageName!==void 0||e.packageNames!==void 0,{message:`Expected packageName or packageNames`}),response:Gn},uninstall:{request:D.object({packageName:D.string()}),response:Kn},getLatestVersion:{request:D.object({packageName:D.string()}),response:Jn},getRegistry:{request:D.object({}),response:Xn},checkUpdates:{request:D.object({}),response:D.object({updates:D.array(Zn)})},installed:D.object({packageName:D.string(),version:D.string()}),uninstalled:D.object({packageName:D.string()})}),V=Qn.subjects;async function $n(e,t,n){if(!A.isAbsolute(e))return;let r;try{r=await k.realpath(e)}catch{return}let i=er(t,n),a=[A.resolve(r,`src`,`${i}.ts`),A.resolve(r,`dist`,`${i}.mjs`)];for(let e of a){let t=await tr(e);if(t!==void 0&&nr(t,r))return t}}function er(e,t){return t===!0?e:t}async function tr(e){try{return await k.realpath(e)}catch{return}}function nr(e,t){let n=A.relative(t,e);return n.length>0&&!n.startsWith(`..`)&&!A.isAbsolute(n)}var rr=class{extensionsDir;constructor(e){this.extensionsDir=A.resolve(e)}async install(e){try{let t=A.resolve(e.endsWith(`descriptor.json`)?A.dirname(e):e),n=await k.realpath(t),r=await this.readDescriptor(n);Ce(r)||await this.validateEntrypoints(n,r.entrypoints);let i=this.linkPathFor(r.name);await k.mkdir(A.dirname(i),{recursive:!0});try{if((await k.lstat(i)).isSymbolicLink())await k.unlink(i);else throw Error(`${i} already exists and is not a symlink`)}catch(e){if(e.code!==`ENOENT`)throw e}let a=process.platform===`win32`?`junction`:`dir`;return await k.symlink(n,i,a),{success:!0,packageName:r.name,version:r.version,restartRequired:!0}}catch(e){return{success:!1,packageName:``,error:e instanceof Error?e.message:String(e),restartRequired:!1}}}async uninstall(e){try{let t=this.linkPathFor(e);if(await k.unlink(t),e.startsWith(`@`)){let e=A.dirname(t);(await k.readdir(e).catch(()=>null))?.length===0&&await k.rmdir(e).catch(()=>{})}return{success:!0,packageName:e,restartRequired:!0}}catch(t){return{success:!1,packageName:e,error:t instanceof Error?t.message:String(t),restartRequired:!1}}}async list(){try{await k.access(this.extensionsDir)}catch{return[]}let e=await k.readdir(this.extensionsDir),t=[];for(let n of e){let e=A.join(this.extensionsDir,n);if(n.startsWith(`@`)){let n=await k.readdir(e).catch(()=>[]);for(let r of n){let n=A.join(e,r),i=await this.readLocalEntry(n);i!==null&&t.push(i)}}else{let n=await this.readLocalEntry(e);n!==null&&t.push(n)}}return t}async readLocalEntry(e){try{if(!(await k.lstat(e)).isSymbolicLink())return null;let t=await k.readlink(e),n=await k.realpath(A.resolve(A.dirname(e),t)),r=A.join(n,`descriptor.json`),i=await k.readFile(r,`utf-8`),a=Te(JSON.parse(i));if(!a.success)return null;let o=a.data.entrypoints?.server,s=o===void 0?void 0:await $n(n,`server`,o);return{name:a.data.name,version:a.data.version,sourcePath:n,source:`local`,...s!==void 0&&{serverImportPath:s}}}catch{return null}}async readDescriptor(e){let t=A.join(e,`descriptor.json`),n=await k.readFile(t,`utf-8`).catch(()=>{throw Error(`descriptor.json not found at ${t}`)}),r=Te(JSON.parse(n));if(!r.success)throw Error(`Invalid descriptor.json: ${r.error.message}`);return r.data}async validateEntrypoints(e,t){await Promise.all(Object.entries(t).map(async([t,n])=>{if(n!==void 0&&await $n(e,t,n)===void 0){let e=er(t,n);throw Error(`${t} entrypoint "${e}" has no resolvable candidate: neither src/${e}.ts nor dist/${e}.mjs exists within the extension root`)}}))}linkPathFor(e){let t=A.resolve(this.extensionsDir,...e.split(`/`)),n=A.relative(this.extensionsDir,t);if(n===``||n.startsWith(`..`)||A.isAbsolute(n))throw Error(`Invalid extension name: ${e}`);return t}};const ir=`nodeLinker: node-modules`,ar=/^[A-Za-z]:[\\/]/;let or=null;function H(){return or||(or=Promise.all([import(`../lib-Ba55od_d.mjs`).then(e=>t(e.t(),1)),import(`../lib-ZKtnbCqH.mjs`).then(e=>t(e.t(),1)),import(`../lib-CM_BUxN8.mjs`).then(e=>t(e.default,1))]).then(([e,t,n])=>({Configuration:e.Configuration,Project:e.Project,Cache:e.Cache,StreamReport:e.StreamReport,structUtils:e.structUtils,ppath:t.ppath,npath:t.npath,xfs:t.xfs,getPluginConfiguration:n.getPluginConfiguration})),or)}var sr=class{makaioHome;constructor(e){this.makaioHome=e}async initialize(){try{let{npath:e,ppath:t,xfs:n}=await H(),r=e.toPortablePath(this.makaioHome),i=t.join(r,`package.json`);if(await n.mkdirpPromise(r),await this.ensureYarnRc(r,n,t),await n.existsPromise(i))return;await n.writeJsonPromise(i,{name:`makaio-packages`,version:`1.0.0`,private:!0,description:`Makaio installed packages`,dependencies:{}}),console.info(`[YarnPackageManager] Created package.json at %s`,i)}catch(e){throw Error(`Failed to initialize package.json`,{cause:e})}}async ensureYarnRc(e,t,n){let r=n.join(e,`.yarnrc.yml`),i=await t.existsPromise(r)?await t.readFilePromise(r,`utf8`):``,a=fr(i);i!==a&&(await t.writeFilePromise(r,a),console.info(`[YarnPackageManager] Wrote .yarnrc.yml at %s`,r))}async loadYarnState(){let{Configuration:e,Project:t,Cache:n,npath:r,getPluginConfiguration:i}=await H(),a=r.toPortablePath(this.makaioHome),o=await e.find(a,i()),{project:s}=await t.find(o,a);return{configuration:o,project:s,cache:await n.find(o)}}async runProjectInstall(e,t,n){let{StreamReport:r}=await H();if((await r.start({configuration:e,stdout:process.stdout},async e=>{await t.install({cache:n,report:e})})).hasErrors())throw Error(`Yarn install failed with errors`)}async parsePackageDescriptor(e){let{structUtils:t}=await H(),n=t.parseDescriptor(e);return n.range===`unknown`?t.makeDescriptor(n,`latest`):n}async installPackage(e){try{let{structUtils:t}=await H(),{configuration:n,project:r,cache:i}=await this.loadYarnState(),a=await this.parsePackageDescriptor(e),o=t.stringifyIdent(a),s=r.topLevelWorkspace.manifest.dependencies.get(a.identHash);r.topLevelWorkspace.manifest.dependencies.set(a.identHash,a),await this.runProjectInstall(n,r,i);let c=r.storedResolutions.get(a.descriptorHash);if(!c)throw Error(`Package resolution not found after installation`);let l=r.storedPackages.get(c);if(!l)throw Error(`Package not found after installation`);let u=l.version??`unknown`;if(!(await this.readInstalledDescriptor(o)).hasDescriptor)throw s?r.topLevelWorkspace.manifest.dependencies.set(a.identHash,s):r.topLevelWorkspace.manifest.dependencies.delete(a.identHash),await this.runProjectInstall(n,r,i),Error(`Installed package ${o} does not contain a valid descriptor.json`);return console.info(`[YarnPackageManager] Installed %s@%s`,o,u),u}catch(t){throw Error(`Failed to install ${e}`,{cause:t})}}async uninstallPackage(e){try{let{structUtils:t}=await H(),{configuration:n,project:r,cache:i}=await this.loadYarnState(),a=t.parseIdent(e);if(!r.topLevelWorkspace.manifest.dependencies.delete(a.identHash))throw Error(`Package ${e} not found in dependencies`);await this.runProjectInstall(n,r,i),console.info(`[YarnPackageManager] Uninstalled %s`,e)}catch(t){throw Error(`Failed to uninstall ${e}`,{cause:t})}}async listPackages(){try{let{xfs:e,npath:t,ppath:n,structUtils:r}=await H(),i=t.toPortablePath(this.makaioHome),a=n.join(i,`package.json`);if(!await e.existsPromise(a))return[];let{project:o}=await this.loadYarnState(),s=[];for(let[,e]of o.topLevelWorkspace.manifest.dependencies){let t=r.stringifyIdent(e),n=o.storedResolutions.get(e.descriptorHash),i=(n?o.storedPackages.get(n):void 0)?.version??r.parseRange(e.range).selector,a=await this.readInstalledDescriptor(t);a.hasDescriptor&&s.push({name:t,version:i,hasDescriptor:!0,...a.serverImportPath!==void 0&&{serverImportPath:a.serverImportPath}})}return s}catch(e){throw Error(`Failed to list packages`,{cause:e})}}async ensureFrameworkDependency(e){let t=ur(e);try{let{structUtils:e}=await H(),{configuration:n,project:r,cache:i}=await this.loadYarnState(),a=e.makeDescriptor(e.parseIdent(`@makaio/framework`),t);if(r.topLevelWorkspace.manifest.dependencies.get(a.identHash)?.range===t)return;r.topLevelWorkspace.manifest.dependencies.set(a.identHash,a),await this.runProjectInstall(n,r,i),console.info(`[YarnPackageManager] Ensured @makaio/framework@%s`,t)}catch(e){throw Error(`Failed to ensure @makaio/framework@${t}`,{cause:e})}}async getLatestVersion(e){return this.resolvePackageVersion(e)}async readInstalledDescriptor(e){let t=await this.readInstalledExtensionDescriptor(e);if(t===null)return{hasDescriptor:!1};let n=await this.resolveInstalledServerEntrypoint(e,t);return{hasDescriptor:!0,...n!==void 0&&{serverImportPath:n}}}async resolveInstalledServerEntrypoint(e,t){let n=t.entrypoints?.server;if(n!==void 0)return $n(A.join(this.makaioHome,`node_modules`,...e.split(`/`)),`server`,n)}async readInstalledExtensionDescriptor(e){let t=A.join(this.makaioHome,`node_modules`,...e.split(`/`),`descriptor.json`),n;try{let e=await k.readFile(t,`utf-8`);n=JSON.parse(e)}catch(e){if(e instanceof SyntaxError||pr(e))return null;throw e}let r=Te(n);return r.success?r.data:null}async listInstalledExtensionDescriptors(){let e=A.join(this.makaioHome,`package.json`),t;try{let n=await k.readFile(e,`utf-8`);t=JSON.parse(n)}catch(e){if(pr(e))return[];throw e}let n=Object.keys(t.dependencies??{});return(await Promise.all(n.map(async e=>{let t=await this.readInstalledExtensionDescriptor(e);return t===null?null:{npmName:e,version:await this.readInstalledPackageVersion(e),descriptor:t}}))).filter(e=>e!==null)}async readInstalledPackageVersion(e){let t=A.join(this.makaioHome,`node_modules`,...e.split(`/`),`package.json`);try{let e=await k.readFile(t,`utf-8`),n=JSON.parse(e);return typeof n.version==`string`?n.version:`unknown`}catch{return`unknown`}}async readManifestSnapshot(){let e=A.join(this.makaioHome,`package.json`),t=await k.readFile(e,`utf-8`);return JSON.parse(t)}async writeManifestAndReinstall(e){let t=A.join(this.makaioHome,`package.json`);await k.writeFile(t,`${JSON.stringify(e,null,2)}\n`,`utf-8`);let{configuration:n,project:r,cache:i}=await this.loadYarnState();await this.runProjectInstall(n,r,i)}async resolvePackageVersion(e){try{let{StreamReport:t}=await H(),{configuration:n,project:r}=await this.loadYarnState(),i=await this.parsePackageDescriptor(e),a=`unknown`;return await t.start({configuration:n,stdout:process.stdout},async e=>{let t=n.makeResolver(),o=await t.getCandidates(i,{},{project:r,resolver:t,report:e});if(o.length>0){let e=o[0];a=e.reference.match(/^npm:(.+)$/)?.[1]??e.reference}}),a}catch(t){throw Error(`Failed to resolve version for ${e}`,{cause:t})}}};function cr(e,t){return!t||t===`latest`?e:`${e}@${t}`}function lr(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t===-1)return e;let n=e.indexOf(`@`,t+1);return n===-1?e:e.slice(0,n)}let t=e.indexOf(`@`);return t===-1?e:e.slice(0,t)}function ur(e){return e.localPackagePath?`portal:${dr(e.localPackagePath)}`:e.versionRange}function dr(e){let t=(ar.test(e)?e:A.resolve(e)).replace(/\\/g,`/`);return ar.test(t)?`/${t}`:t}function fr(e){let t=e.split(/\r?\n/),n=!1,r=t.map(e=>/^\s*nodeLinker\s*:/.test(e)?(n=!0,ir):e);if(!n){let t=e.trimEnd();return`${t}${t.length>0?`
|
|
2
2
|
`:``}${ir}\n`}return`${r.join(`
|
|
3
3
|
`).trimEnd()}\n`}function pr(e){if(typeof e!=`object`||!e||!(`code`in e))return!1;let t=e.code;return t===`ENOENT`||t===`ENOTDIR`}function mr(e){if(e.startsWith(`git+`))return{kind:`git`,raw:e,resolved:e};let t=e===`~`||e.startsWith(`~/`)||e.startsWith(`~\\`);if(e.startsWith(`~`)&&!t)throw Error(`Unsupported home-relative path syntax: ${e}`);return e.startsWith(`.`)||A.isAbsolute(e)||A.win32.isAbsolute(e)||t?{kind:`local`,raw:e,resolved:t?A.resolve(Qe.homedir(),e===`~`?`.`:e.slice(2)):A.resolve(e)}:{kind:`npm`,raw:e,resolved:e}}var hr=class{packages;names;constructor(e,t){this.packages=e,this.names=t}async resolve(e,t={}){let n=t.snapshot!==null,r=n?t.snapshot===void 0?await this.packages.readManifestSnapshot():t.snapshot:null;try{return await this.runBfs(e,t.force===!0)}catch(e){if(n)try{await this.packages.writeManifestAndReinstall(r)}catch(t){throw AggregateError([e,t],`Dependency resolution failed and rollback failed: ${vr(e)}`)}throw e}}async runBfs(e,t){let n=await this.readInstalledIndex(),r=e.map(e=>{let t=_r(e),n=gr(t.npmName);return{npmName:t.npmName,...n?{expectedDescriptorName:n}:{},...t.requiredRange?{requiredRange:t.requiredRange}:{},optional:!1,path:[t.npmName],root:!0}}),i=new Set,a=[],o=[],s=[];for(;r.length>0;){let e=r.shift(),s=i.has(e.npmName),c=n.byNpmName.get(e.npmName);if(s){if(c&&this.assertDescriptorMatches(e,c.descriptor),c&&this.descriptorRangeSatisfied(c.descriptor,e.requiredRange))continue;if(!c)throw Error(`Package ${e.npmName} was resolved but is missing from the installed index`)}if(c&&this.assertDescriptorMatches(e,c.descriptor),c&&this.shouldUseCurrentDescriptor(c.descriptor,e)){a.push({npmName:e.npmName,version:c.version,source:`already-present`}),await this.enqueueDependencies(r,e,c.descriptor),i.add(e.npmName);continue}let l=cr(e.npmName,e.requiredRange),u,d;try{u=await this.packages.installPackage(l);let r=await this.packages.readInstalledExtensionDescriptor(e.npmName);if(!r)throw Error(`Installed package ${e.npmName} does not contain a valid descriptor.json`);this.assertDescriptorMatches(e,r),this.assertDescriptorVersionSatisfies(e,r),await this.assertDependentsCompatible(e.npmName,r.version,n,t),d=r}catch(t){if(e.optional){o.push({npmName:e.npmName,reason:t instanceof Error?t.message:String(t)});continue}throw t}a.push({npmName:e.npmName,version:u,source:c?`upgraded`:`new`}),c={npmName:e.npmName,version:u,descriptor:d},n.byNpmName.set(e.npmName,c),await this.enqueueDependencies(r,e,d),i.add(e.npmName)}return{installed:a,skipped:o,warnings:s}}async readInstalledIndex(){let e=await this.packages.listInstalledExtensionDescriptors();return{byNpmName:new Map(e.map(e=>[e.npmName,e]))}}descriptorRangeSatisfied(e,t){return t===void 0||De(e.version,t)}shouldUseCurrentDescriptor(e,t){return t.root&&t.requiredRange===void 0?!1:this.descriptorRangeSatisfied(e,t.requiredRange)}assertDescriptorMatches(e,t){if(!(e.expectedDescriptorName===void 0||t.name===e.expectedDescriptorName))throw Error(`Installed package ${e.npmName} declares descriptor name "${t.name}", expected "${e.expectedDescriptorName}"`)}assertDescriptorVersionSatisfies(e,t){if(!this.descriptorRangeSatisfied(t,e.requiredRange))throw Error(`Installed package ${e.npmName} descriptor version ${t.version} does not satisfy ${t.name} ${e.requiredRange}`)}async assertDependentsCompatible(e,t,n,r){if(r)return;let i=[];for(let r of n.byNpmName.values())for(let n of r.descriptor.dependencies??[])await this.names.resolveNpmPackageName(n.name)===e&&!De(t,n.version)&&i.push(`${r.npmName} requires ${n.name} ${n.version}`);if(i.length>0)throw Error(`Cannot install ${e}; existing dependencies would be violated:\n${i.join(`
|
|
4
|
-
`)}`)}async enqueueDependencies(e,t,n){for(let r of n.dependencies??[]){let n=await this.names.resolveNpmPackageName(r.name);if(t.path.includes(n))throw Error(`Circular dependency detected: ${[...t.path,n].join(` -> `)}`);e.push({npmName:n,expectedDescriptorName:r.name,requiredRange:r.version,optional:r.optional===!0,path:[...t.path,n],root:!1})}}};function gr(e){return e.startsWith(`@`)?void 0:e}function _r(e){let t=lr(e);if(t.length===e.length)return{npmName:t};let n=e.slice(t.length+1);return n===`latest`?{npmName:t}:{npmName:t,requiredRange:n}}function vr(e){return e instanceof Error?e.message:String(e)}var yr=class{registryClient;lookupMapPromise=null;constructor(e){this.registryClient=e}async resolveNpmPackageName(e){if(e.startsWith(`@`))return e;let t;try{t=await this.getLookupMap()}catch(t){throw Error(`Cannot resolve descriptor name "${e}": package registry is unavailable`,{cause:t})}return t.get(e)||`@makaio/${e}`}getLookupMap(){if(this.lookupMapPromise)return this.lookupMapPromise;let e=this.registryClient.getRegistry().then(e=>{let t=new Map;for(let n of[...e.adapters,...e.extensions])n.descriptorName&&t.set(n.descriptorName,n.name);return t}).catch(t=>{throw this.lookupMapPromise===e&&(this.lookupMapPromise=null),t});return this.lookupMapPromise=e,this.lookupMapPromise}},br=class{inner;portalMap;constructor(e,t){this.inner=e,this.portalMap=t}async installPackage(e){let t=lr(e),n=this.portalMap.get(t);if(n!==void 0){let e=`${t}@portal:${dr(n)}`;return this.inner.installPackage(e)}return this.inner.installPackage(e)}readInstalledExtensionDescriptor(e){return this.inner.readInstalledExtensionDescriptor(e)}listInstalledExtensionDescriptors(){return this.inner.listInstalledExtensionDescriptors()}readManifestSnapshot(){return this.inner.readManifestSnapshot()}writeManifestAndReinstall(e){return this.inner.writeManifestAndReinstall(e)}},xr=class{cache=null;inFlightFetch=null;registryUrl;cacheTtlMs;fetchTimeoutMs;fetchImpl;constructor(e={}){this.registryUrl=e.registryUrl??`https://raw.githubusercontent.com/makaio-ai/makaio/develop/registry/packages.json`,this.cacheTtlMs=e.cacheTtlMs??36e5,this.fetchTimeoutMs=e.fetchTimeoutMs??1e4,this.fetchImpl=e.fetchImpl??fetch}async getRegistry(){if(this.cache&&Date.now()-this.cache.timestamp<this.cacheTtlMs)return this.cache.data;this.inFlightFetch??=this.fetchAndCacheRegistry();try{return await this.inFlightFetch}finally{this.inFlightFetch=null}}async fetchAndCacheRegistry(){let e=new AbortController,t=setTimeout(()=>e.abort(),this.fetchTimeoutMs);try{let t=await this.fetchImpl(this.registryUrl,{signal:e.signal});if(!t.ok)throw Error(`HTTP ${t.status}: ${t.statusText}`);let n=await t.json(),r=Xn.parse(n);return this.cache={data:r,timestamp:Date.now()},r}catch(e){let t=e instanceof Error?e:Error(String(e));throw Error(`Failed to fetch package registry`,{cause:t})}finally{clearTimeout(t)}}clearCache(){this.cache=null}},Sr=t(r(),1),Cr=`1.0.0`;function wr(){let e=Cr;if(typeof e!=`string`||e.length===0)throw Error(`Package manager package metadata must include a string version.`);return`^${e}`}const Tr=wr();var Er=class extends Me{yarnManager;registryService;localInstaller;dependencyResolver;frameworkPeerRange;frameworkPackagePath;constructor(e,t,n={}){super(e),this.yarnManager=n.yarnManager??new sr(t),this.registryService=n.registryService??new xr,this.localInstaller=n.localInstaller??new rr(A.join(t,`extensions`)),this.frameworkPeerRange=n.frameworkPeerRange??Tr,this.frameworkPackagePath=n.frameworkPackagePath;let r=n.devPortalPackages?.size?new br(this.yarnManager,n.devPortalPackages):this.yarnManager;this.dependencyResolver=n.dependencyResolver??new hr(r,new yr(this.registryService))}async onInit(){await this.yarnManager.initialize(),console.info(`[PackageManagerService] Initialized`),this.registerPackageHandlers(),this.registerRegistryHandlers()}normalizePackageName(e){if(typeof e!=`string`)return null;let t=e.trim();return t.length>0?t:null}validatePackageNamePayload(e,t){return this.normalizePackageName(e)||(t(),null)}createInvalidPackageNameResult(e){return e?{success:!1,packageName:``,latestVersion:e.latestVersion,error:`Invalid packageName`}:{success:!1,packageName:``,error:`Invalid packageName`,restartRequired:!1}}async emitInstalled(e,t){try{await this.bus.emit(V.installed,{packageName:e,version:t})}catch(e){console.error(`[PackageManagerService] installed emit failed:`,e)}}async emitUninstalled(e){try{await this.bus.emit(V.uninstalled,{packageName:e})}catch(e){console.error(`[PackageManagerService] uninstalled emit failed:`,e)}}registerPackageHandlers(){this.registerListHandler(),this.registerInstallHandler(),this.registerUninstallHandler()}registerListHandler(){this.registerHandler(V.list,async e=>{try{let[t,n]=await Promise.all([this.yarnManager.listPackages(),this.localInstaller.list()]),r=[...t,...n.map(e=>({name:e.name,version:e.version,hasDescriptor:!0,...e.serverImportPath!==void 0&&{serverImportPath:e.serverImportPath}}))];e.setResult({packages:r})}catch(t){let n=t instanceof Error?t.message:String(t);console.error(`[PackageManagerService] List failed:`,n),e.setResult({packages:[]})}})}async ensureFrameworkPeer(){try{await this.yarnManager.ensureFrameworkDependency({versionRange:this.frameworkPeerRange,...this.frameworkPackagePath?{localPackagePath:this.frameworkPackagePath}:{}})}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to ensure @makaio/framework dependency ${this.frameworkPeerRange}: ${t}`,{cause:e})}}async installNpmPackages(e,t){let n=await this.yarnManager.readManifestSnapshot(),r;try{await this.ensureFrameworkPeer(),r=await this.dependencyResolver.resolve(e,{force:t,snapshot:null})}catch(e){try{await this.yarnManager.writeManifestAndReinstall(n)}catch(t){let n=e instanceof Error?e.message:String(e);throw AggregateError([e,t],`Package install failed and rollback failed: ${n}`)}throw e}for(let e of r.installed)e.source!==`already-present`&&await this.emitInstalled(e.npmName,e.version);let i=r.installed[0];return{success:!0,packageName:i?.npmName??e[0]??``,version:i?.version,restartRequired:!0,installed:[...r.installed],skipped:[...r.skipped],warnings:[...r.warnings]}}registerInstallHandler(){this.registerHandler(V.install,async e=>{let t=e.payload.packageNames??(e.payload.packageName===void 0?[]:[e.payload.packageName]),n=t.map(e=>this.normalizePackageName(e)).filter(e=>e!==null);if(n.length!==t.length||n.length===0){e.setResult(this.createInvalidPackageNameResult());return}let r;if(e.payload.source!==void 0)r={kind:e.payload.source};else{let t=n.map(e=>mr(e));r=t[0];let i=t.find(e=>e.kind!==r.kind);if(i){e.setResult({success:!1,packageName:``,error:`Cannot mix install sources: ${r.kind} and ${i.kind}`,restartRequired:!1});return}}if(r.kind===`git`){e.setResult({success:!1,packageName:n[0],error:`Git URL installs are not yet supported`,restartRequired:!1});return}if(r.kind===`local`){if(n.length>1){e.setResult({success:!1,packageName:``,error:`Local installs only support a single path`,restartRequired:!1});return}let t=await this.localInstaller.install(n[0]);t.success&&await this.emitInstalled(t.packageName,t.version??`unknown`),e.setResult(t);return}try{e.setResult(await this.installNpmPackages(n,e.payload.force))}catch(t){let r=t instanceof Error?t.message:String(t);console.error(`[PackageManagerService] Install failed:`,r),e.setResult({success:!1,packageName:n[0]??``,error:r,restartRequired:!1})}})}registerUninstallHandler(){this.registerHandler(V.uninstall,async e=>{let t=this.validatePackageNamePayload(e.payload.packageName,()=>{e.setResult(this.createInvalidPackageNameResult())});if(t){if((await this.localInstaller.list()).find(e=>e.name===t)){let n=await this.localInstaller.uninstall(t);n.success&&await this.emitUninstalled(t),e.setResult(n);return}try{await this.yarnManager.uninstallPackage(t),await this.emitUninstalled(t),e.setResult({success:!0,packageName:t,restartRequired:!0})}catch(n){let r=n instanceof Error?n.message:String(n);console.error(`[PackageManagerService] Uninstall failed:`,r),e.setResult({success:!1,packageName:t,error:r,restartRequired:!1})}}})}registerRegistryHandlers(){this.registerHandler(V.getLatestVersion,async e=>{let t=this.validatePackageNamePayload(e.payload.packageName,()=>{e.setResult(this.createInvalidPackageNameResult({latestVersion:`unknown`}))});if(t)try{let n=await this.yarnManager.getLatestVersion(t);e.setResult({success:!0,packageName:t,latestVersion:n})}catch(n){let r=n instanceof Error?n.message:String(n);console.error(`[PackageManagerService] Version check failed:`,r),e.setResult({success:!1,packageName:t,latestVersion:`unknown`,error:r})}}),this.registerHandler(V.getRegistry,async e=>{try{let t=await this.registryService.getRegistry();e.setResult(t)}catch(t){let n=t instanceof Error?t.message:String(t);console.error(`[PackageManagerService] Registry fetch failed:`,n),e.setResult({$schema:`makaio/package-registry/v1`,updatedAt:new Date().toISOString(),adapters:[],extensions:[]})}}),this.registerHandler(V.checkUpdates,async e=>{try{let t=await this.checkForUpdates();e.setResult({updates:t})}catch(t){let n=t instanceof Error?t.message:String(t);console.error(`[PackageManagerService] Update check failed:`,n),e.setResult({updates:[]})}})}async checkForUpdates(){try{let e=await this.yarnManager.listPackages(),t=[];return await Promise.all(e.map(async e=>{try{let n=await this.yarnManager.getLatestVersion(e.name);Sr.valid(e.version)&&Sr.valid(n)&&Sr.gt(n,e.version)&&t.push({name:e.name,currentVersion:e.version,latestVersion:n,description:e.description})}catch(t){console.warn(`[PackageManagerService] Failed to check updates for %s:`,e.name,t)}})),console.info(`[PackageManagerService] Found %d package updates`,t.length),t}catch(e){throw Error(`Failed to check for updates`,{cause:e})}}};function Dr(e={}){return{name:`makaio.package-manager`,displayName:`Package Manager`,version:`0.1.0`,critical:!0,namespaces:[Qn],create:t=>new Er(t.bus,t.makaioHome,{registryService:e.registryService,dependencyResolver:e.dependencyResolver,frameworkPeerRange:e.frameworkPeerRange,frameworkPackagePath:e.frameworkPackagePath,devPortalPackages:e.devPortalPackages})}}function Or(e){return{filter:e=>!!e.http,async processActivated(t,n){e.add({owner:t,phase:`extension`,mount:e=>n.http.mount(e)})},async processStopped(t){e.remove(t)}}}const kr={resolve(e,t){return!e&&!t?null:e?t?e.updatedAt>t.updatedAt?e:t:e:t}};function Ar(e){return{scope:e.scope,surface:e.surface??`any`,context:e.context??`any`,viewport:e.viewport??`any`}}function jr(e){return{scope:e.scope,surface:e.surface===`any`?void 0:e.surface,context:e.context===`any`?void 0:e.context,viewport:e.viewport===`any`?void 0:e.viewport}}function Mr(e,t){return[`makaio:prefs`,e.scope,e.surface||`any`,e.context||`any`,e.viewport||`any`,t].join(`:`)}function Nr(e){return typeof e==`object`&&!!e&&`value`in e&&`updatedAt`in e&&typeof e.value==`string`&&typeof e.updatedAt==`number`}function Pr(e){try{let t=JSON.parse(e);return Nr(t)?t:{value:JSON.stringify(t),updatedAt:0}}catch{return null}}const Fr=Le(`preferences`,e=>({scope:e.text(`scope`).notNull(),surface:e.text(`surface`).notNull().default(`any`),context:e.text(`context`).notNull().default(`any`),viewport:e.text(`viewport`).notNull().default(`any`),category:e.text(`category`).notNull(),value:e.text(`value`).notNull(),updatedAt:e.epochMs(`updated_at`).notNull()}),{sqlite:e=>[Ne(`preferences_pk`).on(e.scope,e.surface,e.context,e.viewport,e.category)],postgres:e=>[Pe(`preferences_pk`).on(e.scope,e.surface,e.context,e.viewport,e.category)]}),Ir=Fr.sqlite,Lr=Fr.postgres,Rr=Ie({preferences:Ir},{preferences:Lr});function zr(e,t,n){let r=[];return n!==void 0&&r.push(R(e.category,n)),t&&(t.scope!==void 0&&r.push(R(e.scope,t.scope)),t.surface!==void 0&&r.push(R(e.surface,t.surface)),t.context!==void 0&&r.push(R(e.context,t.context)),t.viewport!==void 0&&r.push(R(e.viewport,t.viewport))),r}async function Br(e,t,n){let{preferences:r}=We(e,Rr),i=zr(r,t,n);return(i.length>0?await e.select().from(r).where(qe(...i)):await e.select().from(r)).map(e=>{let t;try{t=JSON.parse(e.value)}catch{t=null}let n=qt.safeParse(t);return{key:jr(e),category:e.category,value:n.success?n.data:null,updatedAt:e.updatedAt}})}async function Vr(e,t,n){let{preferences:r}=We(e,Rr),i=Ar(t),[a]=await e.select().from(r).where(qe(R(r.scope,i.scope),R(r.surface,i.surface),R(r.context,i.context),R(r.viewport,i.viewport),R(r.category,n))).limit(1);return a}var Hr=class{db;conflictResolver;constructor(e){this.db=e.db,this.conflictResolver=e.conflictResolver??kr}async get(e,t){let n=await this.readFromDb(e,t),r=this.readFromLocalStorage(e,t),i=r?.updatedAt===0?r:null;!n&&r&&!i&&this.removeFromLocalStorage(e,t);let a=this.conflictResolver.resolve(i,n);if(!a)return null;let o;try{o=JSON.parse(a.value)}catch{return null}let s=qt.safeParse(o);return s.success?(await this.syncResolvedPreference(e,t,a,r,n),s.data):null}async set(e,t,n){let r=Date.now(),i=JSON.stringify(n??null);this.writeToLocalStorage(e,t,{value:i,updatedAt:r}),await this.writeToDb(e,t,i,r)}async delete(e,t){this.removeFromLocalStorage(e,t),await this.deleteFromDb(e,t)}async list(e,t){return Br(this.db,e,t)}async writeToDb(e,t,n,r){let{preferences:i}=We(this.db,Rr),a=Ar(e);await this.db.insert(i).values({...a,category:t,value:n,updatedAt:r}).onConflictDoUpdate({target:[i.scope,i.surface,i.context,i.viewport,i.category],set:{value:n,updatedAt:r}})}readFromLocalStorage(e,t){let n=Mr(e,t),r=globalThis.localStorage?.getItem(n);return r?Pr(r):null}writeToLocalStorage(e,t,n){let r=Mr(e,t);try{globalThis.localStorage?.setItem(r,JSON.stringify(n))}catch(e){console.warn(`[StorageCoordinator] localStorage write failed:`,e)}}removeFromLocalStorage(e,t){let n=Mr(e,t);try{globalThis.localStorage?.removeItem(n)}catch(e){console.warn(`[StorageCoordinator] localStorage delete failed:`,e)}}async syncResolvedPreference(e,t,n,r,i){this.isSameStoredPreference(n,i)||await this.writeToDb(e,t,n.value,n.updatedAt),r&&!this.isSameStoredPreference(n,r)&&this.writeToLocalStorage(e,t,n)}isSameStoredPreference(e,t){return!e||!t?!1:e.value===t.value&&e.updatedAt===t.updatedAt}async readFromDb(e,t){let n=await Vr(this.db,e,t);return n?{value:n.value,updatedAt:n.updatedAt}:null}async deleteFromDb(e,t){let{preferences:n}=We(this.db,Rr),r=Ar(e);await this.db.delete(n).where(qe(R(n.scope,r.scope),R(n.surface,r.surface),R(n.context,r.context),R(n.viewport,r.viewport),R(n.category,t)))}};function Ur(e,t,n){let r=new Hr({db:t}),i=e.on(Jt.get,async e=>{let{key:t,category:n}=e.payload,i=await r.get(t,n);e.setResult({value:i})}),a=e.on(Jt.set,async e=>{let{key:t,category:n,value:i}=e.payload;await r.set(t,n,i),e.setResult({success:!0})}),o=e.on(Jt.delete,async e=>{let{key:t,category:n}=e.payload;await r.delete(t,n),e.setResult({success:!0})}),s=e.on(Jt.list,async e=>{let{key:t,category:n}=e.payload,i=await r.list(t,n);e.setResult({items:i})});return()=>{i(),a(),o(),s()}}const Wr={name:`preferences-storage`,displayName:`Preferences Storage`,version:`0.1.0`,critical:!0,storage:{registerHandlers:He(Ur)}},Gr=ce(se);function Kr(e,t){if(!e.ok)throw Error(`HTTP ${e.status} ${e.statusText} fetching ${t}`)}function qr(e){return{fetchTimeoutMs:e.fetchTimeoutMs??3e4,downloadTimeoutMs:e.downloadTimeoutMs??6e5,execTimeoutMs:e.execTimeoutMs??12e4,extractTimeoutMs:e.extractTimeoutMs??3e5}}async function Jr(e,t){try{return await fetch(e,{signal:AbortSignal.timeout(t)})}catch(n){let r=n instanceof Error?n.name:``;throw r===`AbortError`||r===`TimeoutError`?Error(`Timed out fetching ${e} after ${t}ms`,{cause:n}):n}}async function Yr(e,t,n,r){await k.mkdir(t,{recursive:!0}),n===`tar.gz`?await Gr(`tar`,[`-xzf`,e,`-C`,t],{timeout:r}).catch(n=>{throw n.code===`ENOENT`?Error(`tar extraction failed: host executable "tar" was not found on PATH`):Error(`tar extraction failed: ${e} → ${t}\nstderr: ${n.stderr??``}\n${String(n.message)}`)}):await Gr(`unzip`,[`-q`,e,`-d`,t],{timeout:r}).catch(n=>{throw n.code===`ENOENT`?Error(`zip extraction failed: host executable "unzip" was not found on PATH`):Error(`unzip extraction failed: ${e} → ${t}\nstderr: ${n.stderr??``}\n${String(n.message)}`)})}async function Xr(e,t,n,r){let{stdout:i}=await Gr(e,t,{cwd:n?.cwd,env:n?.env===void 0?process.env:{...process.env,...n.env},shell:!1,timeout:r}).catch(n=>{if(n.code===`ENOENT`)throw Error(`Command failed: host executable "${e}" was not found on PATH`);let r=n.stderr??``;throw Error(`Command failed: ${e} ${t.join(` `)}\nstderr: ${r}\n${String(n.message)}`)});return(i??``).trim()}function Zr(e={}){let{fetchTimeoutMs:t,downloadTimeoutMs:n,execTimeoutMs:r,extractTimeoutMs:i}=qr(e);return{async fetchText(e){let n=await Jr(e,t);return Kr(n,e),n.text()},async fetchJson(e){let n=await Jr(e,t);return Kr(n,e),n.json()},async downloadFile(e,t,r){let i=await Jr(e,n);if(Kr(i,e),i.body===null)throw Error(`Response body is null for URL: ${e}`);let a=i.headers.get(`content-length`),o=a===null?null:parseInt(a,10),s=o!==null&&!isNaN(o)?o:null;await k.mkdir(A.dirname(t),{recursive:!0});let c=P.createWriteStream(t),l=0,u=new gt({transform(e,t,n){l+=e.length,r?.(l,s),n(null,e)}});try{await _t(ht.from(i.body),u,c)}catch(e){throw await k.rm(t,{force:!0}),e}return t},exec(e,t,n){return Xr(e,t,n,r)},async extractArchive(e,t,n){await Yr(e,t,n,i)},async deleteFile(e){await k.rm(e,{force:!0})},async computeChecksum(e,t=`sha256`){return new Promise((n,r)=>{let i=N(t),a=P.createReadStream(e);a.on(`error`,r),a.on(`data`,e=>i.update(e)),a.on(`end`,()=>n(i.digest(`hex`)))})},async removeDirectory(e){await k.rm(e,{recursive:!0,force:!0})}}}function Qr(e){let t,n=!1;for(let r=e.length-1;r>=0;--r){let i=e[r];try{i()}catch(e){n||=(t=e,!0)}}if(e.length=0,n)throw t}function $r(e,t){try{return t()}catch(t){try{Qr(e)}catch{}throw t}}function ei(e,t){for(let n of e){let e=n.providers.find(e=>e.definition.id===t);if(e)return e}}function ti(e,t,n){for(let r of t){let t=e.find(e=>e.name===r.adapterName);if(t?.providers.some(e=>e.definition.id===n))return t}}function ni(e){let{$schema:t,...n}=e;return n}function ri(e,t){let n=e.definition,r=Date.now();return{id:n.id,packageName:t,name:n.name,description:n.description,endpoints:n.endpoints,defaultModel:n.defaultModel,fastModel:n.fastModel,availableModels:n.availableModels??[],defaultModelFilterMode:`show-all`,credentialEnvVars:n.credentialEnvVars,capabilities:n.capabilities,enabled:!0,createdAt:r,updatedAt:r}}function ii(e,t,n,r){let i=[];return $r(i,()=>(i.push(e.on($t.adapter.getConfigSchema,({payload:e,setResult:n})=>{let r=t().find(t=>t.name===e.adapterName);if(!r?.adapterConfigSchema){n({hasSchema:!1,schema:null});return}n({hasSchema:!0,schema:D.toJSONSchema(r.adapterConfigSchema)})})),i.push(e.on(Zt.getCredentialSchema,({payload:e,setResult:n})=>{let r=ei(t(),e.definitionId)?.credentialSchema;if(r){n({hasSchema:!0,schema:D.toJSONSchema(r)});return}n({hasSchema:!1,schema:null})})),i.push(e.on(Zt.getConfigSchema,({payload:e,setResult:n})=>{let r=ei(t(),e.definitionId)?.configSchema;if(r){n({hasSchema:!0,schema:D.toJSONSchema(r)});return}n({hasSchema:!1,schema:null})})),r&&i.push(e.on($t.extension.getConfigSchema,({payload:e,setResult:t})=>{let n=r(e.extensionName);if(!n?.configSchema){t({hasSchema:!1,schema:null,uiConfig:null});return}t({hasSchema:!0,schema:ni(D.toJSONSchema(n.configSchema)),uiConfig:n.uiConfig??null})})),i.push(e.on($e.get,({payload:e,setResult:n})=>{for(let r of t()){let t=r.providers.find(t=>t.definition.id===e.id);if(t){n({provider:ri(t,r.packageName)});return}}n({provider:null})},{priority:-1})),i.push(e.on($e.list,({setResult:e})=>{let n=[],r=new Set;for(let e of t())for(let t of e.providers)r.has(t.definition.id)||(r.add(t.definition.id),n.push(ri(t,e.packageName)));e({providers:n})},{priority:-1})),i.push(e.on(Qt.fetchModels,async({payload:r,setResult:i})=>{let{config:a}=await e.request(tt.getProviderConfig,{id:r.providerConfigId});if(!a)throw Error(`Provider config '${r.providerConfigId}' not found`);let{bindings:o}=await e.request(tt.listBindingsByConfig,{providerConfigId:r.providerConfigId}),s=ti(t(),o,a.definitionId);if(!s)throw Error(o.length===0?`Provider config '${r.providerConfigId}' is not bound to an adapter`:`No loaded adapter bound to provider config '${r.providerConfigId}' for definition '${a.definitionId}'`);let c=await Ze(e,r.providerConfigId),l=s.options.adapterId,u=l?n().get(l):void 0;if(!l||!u)throw Error(`Adapter instance for '${s.name}' not initialized`);if(!(`fetchModels`in u)||typeof u.fetchModels!=`function`)throw Error(`Adapter '${s.name}' does not support model fetching`);let d=await Yt(e,c.credentialRefs),f=c.endpointOverrides?Object.values(c.endpointOverrides).find(e=>e!==void 0):void 0;i({models:await u.fetchModels(f,d)})})),()=>{Qr(i)}))}function ai(e,t){let n=new Map;for(let[r,i]of e)t.has(r)&&n.set(r,i);return n}function oi(...e){let t=new Map;for(let n of e)for(let[e,r]of n)t.set(e,{...t.get(e)??{},...r});return t}function si(e,t){let n=[e.on(L.get,async e=>{let n=await t.getConfig();e.setResult({config:n})}),e.on(L.update,async e=>{let n=I.parse(e.payload.config),r=await t.prepareConfigForPersistence(n);await t.saveConfig(r),e.setResult({success:!0})})];return()=>{for(let e of n)e()}}var U=n((e=>{let t=Symbol.for(`yaml.alias`),n=Symbol.for(`yaml.document`),r=Symbol.for(`yaml.map`),i=Symbol.for(`yaml.pair`),a=Symbol.for(`yaml.scalar`),o=Symbol.for(`yaml.seq`),s=Symbol.for(`yaml.node.type`),c=e=>!!e&&typeof e==`object`&&e[s]===t,l=e=>!!e&&typeof e==`object`&&e[s]===n,u=e=>!!e&&typeof e==`object`&&e[s]===r,d=e=>!!e&&typeof e==`object`&&e[s]===i,f=e=>!!e&&typeof e==`object`&&e[s]===a,p=e=>!!e&&typeof e==`object`&&e[s]===o;function m(e){if(e&&typeof e==`object`)switch(e[s]){case r:case o:return!0}return!1}function h(e){if(e&&typeof e==`object`)switch(e[s]){case t:case r:case a:case o:return!0}return!1}e.ALIAS=t,e.DOC=n,e.MAP=r,e.NODE_TYPE=s,e.PAIR=i,e.SCALAR=a,e.SEQ=o,e.hasAnchor=e=>(f(e)||m(e))&&!!e.anchor,e.isAlias=c,e.isCollection=m,e.isDocument=l,e.isMap=u,e.isNode=h,e.isPair=d,e.isScalar=f,e.isSeq=p})),ci=n((e=>{var t=U();let n=Symbol(`break visit`),r=Symbol(`skip children`),i=Symbol(`remove node`);function a(e,n){let r=l(n);t.isDocument(e)?o(null,e.contents,r,Object.freeze([e]))===i&&(e.contents=null):o(null,e,r,Object.freeze([]))}a.BREAK=n,a.SKIP=r,a.REMOVE=i;function o(e,r,a,s){let c=u(e,r,a,s);if(t.isNode(c)||t.isPair(c))return d(e,s,c),o(e,c,a,s);if(typeof c!=`symbol`){if(t.isCollection(r)){s=Object.freeze(s.concat(r));for(let e=0;e<r.items.length;++e){let t=o(e,r.items[e],a,s);if(typeof t==`number`)e=t-1;else if(t===n)return n;else t===i&&(r.items.splice(e,1),--e)}}else if(t.isPair(r)){s=Object.freeze(s.concat(r));let e=o(`key`,r.key,a,s);if(e===n)return n;e===i&&(r.key=null);let t=o(`value`,r.value,a,s);if(t===n)return n;t===i&&(r.value=null)}}return c}async function s(e,n){let r=l(n);t.isDocument(e)?await c(null,e.contents,r,Object.freeze([e]))===i&&(e.contents=null):await c(null,e,r,Object.freeze([]))}s.BREAK=n,s.SKIP=r,s.REMOVE=i;async function c(e,r,a,o){let s=await u(e,r,a,o);if(t.isNode(s)||t.isPair(s))return d(e,o,s),c(e,s,a,o);if(typeof s!=`symbol`){if(t.isCollection(r)){o=Object.freeze(o.concat(r));for(let e=0;e<r.items.length;++e){let t=await c(e,r.items[e],a,o);if(typeof t==`number`)e=t-1;else if(t===n)return n;else t===i&&(r.items.splice(e,1),--e)}}else if(t.isPair(r)){o=Object.freeze(o.concat(r));let e=await c(`key`,r.key,a,o);if(e===n)return n;e===i&&(r.key=null);let t=await c(`value`,r.value,a,o);if(t===n)return n;t===i&&(r.value=null)}}return s}function l(e){return typeof e==`object`&&(e.Collection||e.Node||e.Value)?Object.assign({Alias:e.Node,Map:e.Node,Scalar:e.Node,Seq:e.Node},e.Value&&{Map:e.Value,Scalar:e.Value,Seq:e.Value},e.Collection&&{Map:e.Collection,Seq:e.Collection},e):e}function u(e,n,r,i){if(typeof r==`function`)return r(e,n,i);if(t.isMap(n))return r.Map?.(e,n,i);if(t.isSeq(n))return r.Seq?.(e,n,i);if(t.isPair(n))return r.Pair?.(e,n,i);if(t.isScalar(n))return r.Scalar?.(e,n,i);if(t.isAlias(n))return r.Alias?.(e,n,i)}function d(e,n,r){let i=n[n.length-1];if(t.isCollection(i))i.items[e]=r;else if(t.isPair(i))e===`key`?i.key=r:i.value=r;else if(t.isDocument(i))i.contents=r;else{let e=t.isAlias(i)?`alias`:`scalar`;throw Error(`Cannot replace node with ${e} parent`)}}e.visit=a,e.visitAsync=s})),li=n((e=>{var t=U(),n=ci();let r={"!":`%21`,",":`%2C`,"[":`%5B`,"]":`%5D`,"{":`%7B`,"}":`%7D`},i=e=>e.replace(/[!,[\]{}]/g,e=>r[e]);var a=class e{constructor(t,n){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},e.defaultYaml,t),this.tags=Object.assign({},e.defaultTags,n)}clone(){let t=new e(this.yaml,this.tags);return t.docStart=this.docStart,t}atDocument(){let t=new e(this.yaml,this.tags);switch(this.yaml.version){case`1.1`:this.atNextDocument=!0;break;case`1.2`:this.atNextDocument=!1,this.yaml={explicit:e.defaultYaml.explicit,version:`1.2`},this.tags=Object.assign({},e.defaultTags);break}return t}add(t,n){this.atNextDocument&&=(this.yaml={explicit:e.defaultYaml.explicit,version:`1.1`},this.tags=Object.assign({},e.defaultTags),!1);let r=t.trim().split(/[ \t]+/),i=r.shift();switch(i){case`%TAG`:{if(r.length!==2&&(n(0,`%TAG directive should contain exactly two parts`),r.length<2))return!1;let[e,t]=r;return this.tags[e]=t,!0}case`%YAML`:{if(this.yaml.explicit=!0,r.length!==1)return n(0,`%YAML directive should contain exactly one part`),!1;let[e]=r;if(e===`1.1`||e===`1.2`)return this.yaml.version=e,!0;{let t=/^\d+\.\d+$/.test(e);return n(6,`Unsupported YAML version ${e}`,t),!1}}default:return n(0,`Unknown directive ${i}`,!0),!1}}tagName(e,t){if(e===`!`)return`!`;if(e[0]!==`!`)return t(`Not a valid tag: ${e}`),null;if(e[1]===`<`){let n=e.slice(2,-1);return n===`!`||n===`!!`?(t(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(e[e.length-1]!==`>`&&t(`Verbatim tags must end with a >`),n)}let[,n,r]=e.match(/^(.*!)([^!]*)$/s);r||t(`The ${e} tag has no suffix`);let i=this.tags[n];if(i)try{return i+decodeURIComponent(r)}catch(e){return t(String(e)),null}return n===`!`?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(let[t,n]of Object.entries(this.tags))if(e.startsWith(n))return t+i(e.substring(n.length));return e[0]===`!`?e:`!<${e}>`}toString(e){let r=this.yaml.explicit?[`%YAML ${this.yaml.version||`1.2`}`]:[],i=Object.entries(this.tags),a;if(e&&i.length>0&&t.isNode(e.contents)){let r={};n.visit(e.contents,(e,n)=>{t.isNode(n)&&n.tag&&(r[n.tag]=!0)}),a=Object.keys(r)}else a=[];for(let[t,n]of i)t===`!!`&&n===`tag:yaml.org,2002:`||(!e||a.some(e=>e.startsWith(n)))&&r.push(`%TAG ${t} ${n}`);return r.join(`
|
|
4
|
+
`)}`)}async enqueueDependencies(e,t,n){for(let r of n.dependencies??[]){let n=await this.names.resolveNpmPackageName(r.name);if(t.path.includes(n))throw Error(`Circular dependency detected: ${[...t.path,n].join(` -> `)}`);e.push({npmName:n,expectedDescriptorName:r.name,requiredRange:r.version,optional:r.optional===!0,path:[...t.path,n],root:!1})}}};function gr(e){return e.startsWith(`@`)?void 0:e}function _r(e){let t=lr(e);if(t.length===e.length)return{npmName:t};let n=e.slice(t.length+1);return n===`latest`?{npmName:t}:{npmName:t,requiredRange:n}}function vr(e){return e instanceof Error?e.message:String(e)}var yr=class{registryClient;lookupMapPromise=null;constructor(e){this.registryClient=e}async resolveNpmPackageName(e){if(e.startsWith(`@`))return e;let t;try{t=await this.getLookupMap()}catch(t){throw Error(`Cannot resolve descriptor name "${e}": package registry is unavailable`,{cause:t})}return t.get(e)||`@makaio/${e}`}getLookupMap(){if(this.lookupMapPromise)return this.lookupMapPromise;let e=this.registryClient.getRegistry().then(e=>{let t=new Map;for(let n of[...e.adapters,...e.extensions])n.descriptorName&&t.set(n.descriptorName,n.name);return t}).catch(t=>{throw this.lookupMapPromise===e&&(this.lookupMapPromise=null),t});return this.lookupMapPromise=e,this.lookupMapPromise}},br=class{inner;portalMap;constructor(e,t){this.inner=e,this.portalMap=t}async installPackage(e){let t=lr(e),n=this.portalMap.get(t);if(n!==void 0){let e=`${t}@portal:${dr(n)}`;return this.inner.installPackage(e)}return this.inner.installPackage(e)}readInstalledExtensionDescriptor(e){return this.inner.readInstalledExtensionDescriptor(e)}listInstalledExtensionDescriptors(){return this.inner.listInstalledExtensionDescriptors()}readManifestSnapshot(){return this.inner.readManifestSnapshot()}writeManifestAndReinstall(e){return this.inner.writeManifestAndReinstall(e)}},xr=class{cache=null;inFlightFetch=null;registryUrl;cacheTtlMs;fetchTimeoutMs;fetchImpl;constructor(e={}){this.registryUrl=e.registryUrl??`https://raw.githubusercontent.com/makaio-ai/makaio/develop/registry/packages.json`,this.cacheTtlMs=e.cacheTtlMs??36e5,this.fetchTimeoutMs=e.fetchTimeoutMs??1e4,this.fetchImpl=e.fetchImpl??fetch}async getRegistry(){if(this.cache&&Date.now()-this.cache.timestamp<this.cacheTtlMs)return this.cache.data;this.inFlightFetch??=this.fetchAndCacheRegistry();try{return await this.inFlightFetch}finally{this.inFlightFetch=null}}async fetchAndCacheRegistry(){let e=new AbortController,t=setTimeout(()=>e.abort(),this.fetchTimeoutMs);try{let t=await this.fetchImpl(this.registryUrl,{signal:e.signal});if(!t.ok)throw Error(`HTTP ${t.status}: ${t.statusText}`);let n=await t.json(),r=Xn.parse(n);return this.cache={data:r,timestamp:Date.now()},r}catch(e){let t=e instanceof Error?e:Error(String(e));throw Error(`Failed to fetch package registry`,{cause:t})}finally{clearTimeout(t)}}clearCache(){this.cache=null}},Sr=t(r(),1),Cr=`1.0.0`;function wr(){let e=Cr;if(typeof e!=`string`||e.length===0)throw Error(`Package manager package metadata must include a string version.`);return`^${e}`}const Tr=wr();var Er=class extends Me{yarnManager;registryService;localInstaller;dependencyResolver;frameworkPeerRange;frameworkPackagePath;constructor(e,t,n={}){super(e),this.yarnManager=n.yarnManager??new sr(t),this.registryService=n.registryService??new xr,this.localInstaller=n.localInstaller??new rr(A.join(t,`extensions`)),this.frameworkPeerRange=n.frameworkPeerRange??Tr,this.frameworkPackagePath=n.frameworkPackagePath;let r=n.devPortalPackages?.size?new br(this.yarnManager,n.devPortalPackages):this.yarnManager;this.dependencyResolver=n.dependencyResolver??new hr(r,new yr(this.registryService))}async onInit(){await this.yarnManager.initialize(),console.info(`[PackageManagerService] Initialized`),this.registerPackageHandlers(),this.registerRegistryHandlers()}normalizePackageName(e){if(typeof e!=`string`)return null;let t=e.trim();return t.length>0?t:null}validatePackageNamePayload(e,t){return this.normalizePackageName(e)||(t(),null)}createInvalidPackageNameResult(e){return e?{success:!1,packageName:``,latestVersion:e.latestVersion,error:`Invalid packageName`}:{success:!1,packageName:``,error:`Invalid packageName`,restartRequired:!1}}async emitInstalled(e,t){try{await this.bus.emit(V.installed,{packageName:e,version:t})}catch(e){console.error(`[PackageManagerService] installed emit failed:`,e)}}async emitUninstalled(e){try{await this.bus.emit(V.uninstalled,{packageName:e})}catch(e){console.error(`[PackageManagerService] uninstalled emit failed:`,e)}}registerPackageHandlers(){this.registerListHandler(),this.registerInstallHandler(),this.registerUninstallHandler()}registerListHandler(){this.registerHandler(V.list,async e=>{try{let[t,n]=await Promise.all([this.yarnManager.listPackages(),this.localInstaller.list()]),r=[...t,...n.map(e=>({name:e.name,version:e.version,hasDescriptor:!0,...e.serverImportPath!==void 0&&{serverImportPath:e.serverImportPath}}))];e.setResult({packages:r})}catch(t){let n=t instanceof Error?t.message:String(t);console.error(`[PackageManagerService] List failed:`,n),e.setResult({packages:[]})}})}async ensureFrameworkPeer(){try{await this.yarnManager.ensureFrameworkDependency({versionRange:this.frameworkPeerRange,...this.frameworkPackagePath?{localPackagePath:this.frameworkPackagePath}:{}})}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to ensure @makaio/framework dependency ${this.frameworkPeerRange}: ${t}`,{cause:e})}}async installNpmPackages(e,t){let n=await this.yarnManager.readManifestSnapshot(),r;try{await this.ensureFrameworkPeer(),r=await this.dependencyResolver.resolve(e,{force:t,snapshot:null})}catch(e){try{await this.yarnManager.writeManifestAndReinstall(n)}catch(t){let n=e instanceof Error?e.message:String(e);throw AggregateError([e,t],`Package install failed and rollback failed: ${n}`)}throw e}for(let e of r.installed)e.source!==`already-present`&&await this.emitInstalled(e.npmName,e.version);let i=r.installed[0];return{success:!0,packageName:i?.npmName??e[0]??``,version:i?.version,restartRequired:!0,installed:[...r.installed],skipped:[...r.skipped],warnings:[...r.warnings]}}registerInstallHandler(){this.registerHandler(V.install,async e=>{let t=e.payload.packageNames??(e.payload.packageName===void 0?[]:[e.payload.packageName]),n=t.map(e=>this.normalizePackageName(e)).filter(e=>e!==null);if(n.length!==t.length||n.length===0){e.setResult(this.createInvalidPackageNameResult());return}let r;if(e.payload.source!==void 0)r={kind:e.payload.source};else{let t=n.map(e=>mr(e));r=t[0];let i=t.find(e=>e.kind!==r.kind);if(i){e.setResult({success:!1,packageName:``,error:`Cannot mix install sources: ${r.kind} and ${i.kind}`,restartRequired:!1});return}}if(r.kind===`git`){e.setResult({success:!1,packageName:n[0],error:`Git URL installs are not yet supported`,restartRequired:!1});return}if(r.kind===`local`){if(n.length>1){e.setResult({success:!1,packageName:``,error:`Local installs only support a single path`,restartRequired:!1});return}let t=await this.localInstaller.install(n[0]);t.success&&await this.emitInstalled(t.packageName,t.version??`unknown`),e.setResult(t);return}try{e.setResult(await this.installNpmPackages(n,e.payload.force))}catch(t){let r=t instanceof Error?t.message:String(t);console.error(`[PackageManagerService] Install failed:`,r),e.setResult({success:!1,packageName:n[0]??``,error:r,restartRequired:!1})}})}registerUninstallHandler(){this.registerHandler(V.uninstall,async e=>{let t=this.validatePackageNamePayload(e.payload.packageName,()=>{e.setResult(this.createInvalidPackageNameResult())});if(t){if((await this.localInstaller.list()).find(e=>e.name===t)){let n=await this.localInstaller.uninstall(t);n.success&&await this.emitUninstalled(t),e.setResult(n);return}try{await this.yarnManager.uninstallPackage(t),await this.emitUninstalled(t),e.setResult({success:!0,packageName:t,restartRequired:!0})}catch(n){let r=n instanceof Error?n.message:String(n);console.error(`[PackageManagerService] Uninstall failed:`,r),e.setResult({success:!1,packageName:t,error:r,restartRequired:!1})}}})}registerRegistryHandlers(){this.registerHandler(V.getLatestVersion,async e=>{let t=this.validatePackageNamePayload(e.payload.packageName,()=>{e.setResult(this.createInvalidPackageNameResult({latestVersion:`unknown`}))});if(t)try{let n=await this.yarnManager.getLatestVersion(t);e.setResult({success:!0,packageName:t,latestVersion:n})}catch(n){let r=n instanceof Error?n.message:String(n);console.error(`[PackageManagerService] Version check failed:`,r),e.setResult({success:!1,packageName:t,latestVersion:`unknown`,error:r})}}),this.registerHandler(V.getRegistry,async e=>{try{let t=await this.registryService.getRegistry();e.setResult(t)}catch(t){let n=t instanceof Error?t.message:String(t);console.error(`[PackageManagerService] Registry fetch failed:`,n),e.setResult({$schema:`makaio/package-registry/v1`,updatedAt:new Date().toISOString(),adapters:[],extensions:[]})}}),this.registerHandler(V.checkUpdates,async e=>{try{let t=await this.checkForUpdates();e.setResult({updates:t})}catch(t){let n=t instanceof Error?t.message:String(t);console.error(`[PackageManagerService] Update check failed:`,n),e.setResult({updates:[]})}})}async checkForUpdates(){try{let e=await this.yarnManager.listPackages(),t=[];return await Promise.all(e.map(async e=>{try{let n=await this.yarnManager.getLatestVersion(e.name);Sr.valid(e.version)&&Sr.valid(n)&&Sr.gt(n,e.version)&&t.push({name:e.name,currentVersion:e.version,latestVersion:n,description:e.description})}catch(t){console.warn(`[PackageManagerService] Failed to check updates for %s:`,e.name,t)}})),console.info(`[PackageManagerService] Found %d package updates`,t.length),t}catch(e){throw Error(`Failed to check for updates`,{cause:e})}}};function Dr(e={}){return{name:`makaio.package-manager`,displayName:`Package Manager`,version:`0.1.0`,critical:!0,namespaces:[Qn],create:t=>new Er(t.bus,t.makaioHome,{registryService:e.registryService,dependencyResolver:e.dependencyResolver,frameworkPeerRange:e.frameworkPeerRange,frameworkPackagePath:e.frameworkPackagePath,devPortalPackages:e.devPortalPackages})}}function Or(e){return{filter:e=>!!e.http,async processActivated(t,n){e.add({owner:t,phase:`extension`,mount:e=>n.http.mount(e)})},async processStopped(t){e.remove(t)}}}const kr={resolve(e,t){return!e&&!t?null:e?t?e.updatedAt>t.updatedAt?e:t:e:t}};function Ar(e){return{scope:e.scope,surface:e.surface??`any`,context:e.context??`any`,viewport:e.viewport??`any`}}function jr(e){return{scope:e.scope,surface:e.surface===`any`?void 0:e.surface,context:e.context===`any`?void 0:e.context,viewport:e.viewport===`any`?void 0:e.viewport}}function Mr(e,t){return[`makaio:prefs`,e.scope,e.surface||`any`,e.context||`any`,e.viewport||`any`,t].join(`:`)}function Nr(e){return typeof e==`object`&&!!e&&`value`in e&&`updatedAt`in e&&typeof e.value==`string`&&typeof e.updatedAt==`number`}function Pr(e){try{let t=JSON.parse(e);return Nr(t)?t:{value:JSON.stringify(t),updatedAt:0}}catch{return null}}const Fr=Le(`preferences`,e=>({scope:e.text(`scope`).notNull(),surface:e.text(`surface`).notNull().default(`any`),context:e.text(`context`).notNull().default(`any`),viewport:e.text(`viewport`).notNull().default(`any`),category:e.text(`category`).notNull(),value:e.text(`value`).notNull(),updatedAt:e.epochMs(`updated_at`).notNull()}),{sqlite:e=>[Ne(`preferences_pk`).on(e.scope,e.surface,e.context,e.viewport,e.category)],postgres:e=>[Pe(`preferences_pk`).on(e.scope,e.surface,e.context,e.viewport,e.category)]}),Ir=Fr.sqlite,Lr=Fr.postgres,Rr=Ie({preferences:Ir},{preferences:Lr});function zr(e,t,n){let r=[];return n!==void 0&&r.push(R(e.category,n)),t&&(t.scope!==void 0&&r.push(R(e.scope,t.scope)),t.surface!==void 0&&r.push(R(e.surface,t.surface)),t.context!==void 0&&r.push(R(e.context,t.context)),t.viewport!==void 0&&r.push(R(e.viewport,t.viewport))),r}async function Br(e,t,n){let{preferences:r}=We(e,Rr),i=zr(r,t,n);return(i.length>0?await e.select().from(r).where(qe(...i)):await e.select().from(r)).map(e=>{let t;try{t=JSON.parse(e.value)}catch{t=null}let n=qt.safeParse(t);return{key:jr(e),category:e.category,value:n.success?n.data:null,updatedAt:e.updatedAt}})}async function Vr(e,t,n){let{preferences:r}=We(e,Rr),i=Ar(t),[a]=await e.select().from(r).where(qe(R(r.scope,i.scope),R(r.surface,i.surface),R(r.context,i.context),R(r.viewport,i.viewport),R(r.category,n))).limit(1);return a}var Hr=class{db;conflictResolver;constructor(e){this.db=e.db,this.conflictResolver=e.conflictResolver??kr}async get(e,t){let n=await this.readFromDb(e,t),r=this.readFromLocalStorage(e,t),i=r?.updatedAt===0?r:null;!n&&r&&!i&&this.removeFromLocalStorage(e,t);let a=this.conflictResolver.resolve(i,n);if(!a)return null;let o;try{o=JSON.parse(a.value)}catch{return null}let s=qt.safeParse(o);return s.success?(await this.syncResolvedPreference(e,t,a,r,n),s.data):null}async set(e,t,n){let r=Date.now(),i=JSON.stringify(n??null);this.writeToLocalStorage(e,t,{value:i,updatedAt:r}),await this.writeToDb(e,t,i,r)}async delete(e,t){this.removeFromLocalStorage(e,t),await this.deleteFromDb(e,t)}async list(e,t){return Br(this.db,e,t)}async writeToDb(e,t,n,r){let{preferences:i}=We(this.db,Rr),a=Ar(e);await this.db.insert(i).values({...a,category:t,value:n,updatedAt:r}).onConflictDoUpdate({target:[i.scope,i.surface,i.context,i.viewport,i.category],set:{value:n,updatedAt:r}})}readFromLocalStorage(e,t){let n=Mr(e,t),r=globalThis.localStorage?.getItem(n);return r?Pr(r):null}writeToLocalStorage(e,t,n){let r=Mr(e,t);try{globalThis.localStorage?.setItem(r,JSON.stringify(n))}catch(e){console.warn(`[StorageCoordinator] localStorage write failed:`,e)}}removeFromLocalStorage(e,t){let n=Mr(e,t);try{globalThis.localStorage?.removeItem(n)}catch(e){console.warn(`[StorageCoordinator] localStorage delete failed:`,e)}}async syncResolvedPreference(e,t,n,r,i){this.isSameStoredPreference(n,i)||await this.writeToDb(e,t,n.value,n.updatedAt),r&&!this.isSameStoredPreference(n,r)&&this.writeToLocalStorage(e,t,n)}isSameStoredPreference(e,t){return!e||!t?!1:e.value===t.value&&e.updatedAt===t.updatedAt}async readFromDb(e,t){let n=await Vr(this.db,e,t);return n?{value:n.value,updatedAt:n.updatedAt}:null}async deleteFromDb(e,t){let{preferences:n}=We(this.db,Rr),r=Ar(e);await this.db.delete(n).where(qe(R(n.scope,r.scope),R(n.surface,r.surface),R(n.context,r.context),R(n.viewport,r.viewport),R(n.category,t)))}};function Ur(e,t,n){let r=new Hr({db:t}),i=e.on(Jt.get,async e=>{let{key:t,category:n}=e.payload,i=await r.get(t,n);e.setResult({value:i})}),a=e.on(Jt.set,async e=>{let{key:t,category:n,value:i}=e.payload;await r.set(t,n,i),e.setResult({success:!0})}),o=e.on(Jt.delete,async e=>{let{key:t,category:n}=e.payload;await r.delete(t,n),e.setResult({success:!0})}),s=e.on(Jt.list,async e=>{let{key:t,category:n}=e.payload,i=await r.list(t,n);e.setResult({items:i})});return()=>{i(),a(),o(),s()}}const Wr={name:`preferences-storage`,displayName:`Preferences Storage`,version:`0.1.0`,critical:!0,storage:{registerHandlers:He(Ur)}},Gr=ce(se);function Kr(e,t){if(!e.ok)throw Error(`HTTP ${e.status} ${e.statusText} fetching ${t}`)}function qr(e){return{fetchTimeoutMs:e.fetchTimeoutMs??3e4,downloadTimeoutMs:e.downloadTimeoutMs??6e5,execTimeoutMs:e.execTimeoutMs??12e4,extractTimeoutMs:e.extractTimeoutMs??3e5}}async function Jr(e,t){try{return await fetch(e,{signal:AbortSignal.timeout(t)})}catch(n){let r=n instanceof Error?n.name:``;throw r===`AbortError`||r===`TimeoutError`?Error(`Timed out fetching ${e} after ${t}ms`,{cause:n}):n}}async function Yr(e,t,n,r){await k.mkdir(t,{recursive:!0}),n===`tar.gz`?await Gr(`tar`,[`-xzf`,e,`-C`,t],{timeout:r}).catch(n=>{throw n.code===`ENOENT`?Error(`tar extraction failed: host executable "tar" was not found on PATH`):Error(`tar extraction failed: ${e} → ${t}\nstderr: ${n.stderr??``}\n${String(n.message)}`)}):await Gr(`unzip`,[`-q`,e,`-d`,t],{timeout:r}).catch(n=>{throw n.code===`ENOENT`?Error(`zip extraction failed: host executable "unzip" was not found on PATH`):Error(`unzip extraction failed: ${e} → ${t}\nstderr: ${n.stderr??``}\n${String(n.message)}`)})}async function Xr(e,t,n,r){let{stdout:i}=await Gr(e,t,{cwd:n?.cwd,env:n?.env===void 0?process.env:{...process.env,...n.env},shell:!1,timeout:r}).catch(n=>{if(n.code===`ENOENT`)throw Error(`Command failed: host executable "${e}" was not found on PATH`);let r=n.stderr??``;throw Error(`Command failed: ${e} ${t.join(` `)}\nstderr: ${r}\n${String(n.message)}`)});return(i??``).trim()}function Zr(e={}){let{fetchTimeoutMs:t,downloadTimeoutMs:n,execTimeoutMs:r,extractTimeoutMs:i}=qr(e);return{async fetchText(e){let n=await Jr(e,t);return Kr(n,e),n.text()},async fetchJson(e){let n=await Jr(e,t);return Kr(n,e),n.json()},async downloadFile(e,t,r){let i=await Jr(e,n);if(Kr(i,e),i.body===null)throw Error(`Response body is null for URL: ${e}`);let a=i.headers.get(`content-length`),o=a===null?null:parseInt(a,10),s=o!==null&&!isNaN(o)?o:null;await k.mkdir(A.dirname(t),{recursive:!0});let c=P.createWriteStream(t),l=0,u=new gt({transform(e,t,n){l+=e.length,r?.(l,s),n(null,e)}});try{await _t(ht.from(i.body),u,c)}catch(e){throw await k.rm(t,{force:!0}),e}return t},exec(e,t,n){return Xr(e,t,n,r)},async extractArchive(e,t,n){await Yr(e,t,n,i)},async deleteFile(e){await k.rm(e,{force:!0})},async computeChecksum(e,t=`sha256`){return new Promise((n,r)=>{let i=N(t),a=P.createReadStream(e);a.on(`error`,r),a.on(`data`,e=>i.update(e)),a.on(`end`,()=>n(i.digest(`hex`)))})},async removeDirectory(e){await k.rm(e,{recursive:!0,force:!0})}}}function Qr(e){let t,n=!1;for(let r=e.length-1;r>=0;--r){let i=e[r];try{i()}catch(e){n||=(t=e,!0)}}if(e.length=0,n)throw t}function $r(e,t){try{return t()}catch(t){try{Qr(e)}catch{}throw t}}function ei(e,t){for(let n of e){let e=n.providers.find(e=>e.definition.id===t);if(e)return e}}function ti(e,t,n){for(let r of t){let t=e.find(e=>e.name===r.adapterName);if(t?.providers.some(e=>e.definition.id===n))return t}}function ni(e){let{$schema:t,...n}=e;return n}function ri(e,t){let n=e.definition,r=Date.now();return{id:n.id,packageName:t,name:n.name,description:n.description,endpoints:n.endpoints,defaultModel:n.defaultModel,fastModel:n.fastModel,availableModels:n.availableModels??[],defaultModelFilterMode:`show-all`,credentialEnvVars:n.credentialEnvVars,capabilities:n.capabilities,enabled:!0,createdAt:r,updatedAt:r}}function ii(e,t,n,r){let i=[];return $r(i,()=>(i.push(e.on($t.adapter.getConfigSchema,({payload:e,setResult:n})=>{let r=t().find(t=>t.name===e.adapterName);if(!r?.adapterConfigSchema){n({hasSchema:!1,schema:null});return}n({hasSchema:!0,schema:D.toJSONSchema(r.adapterConfigSchema)})})),i.push(e.on(Zt.getCredentialSchema,({payload:e,setResult:n})=>{let r=ei(t(),e.definitionId)?.credentialSchema;if(r){n({hasSchema:!0,schema:D.toJSONSchema(r)});return}n({hasSchema:!1,schema:null})})),i.push(e.on(Zt.getConfigSchema,({payload:e,setResult:n})=>{let r=ei(t(),e.definitionId)?.configSchema;if(r){n({hasSchema:!0,schema:D.toJSONSchema(r)});return}n({hasSchema:!1,schema:null})})),r&&i.push(e.on($t.extension.getConfigSchema,({payload:e,setResult:t})=>{let n=r(e.extensionName);if(!n?.configSchema){t({hasSchema:!1,schema:null,uiConfig:null});return}t({hasSchema:!0,schema:ni(D.toJSONSchema(n.configSchema)),uiConfig:n.uiConfig??null})})),i.push(e.on($e.get,({payload:e,setResult:n})=>{for(let r of t()){let t=r.providers.find(t=>t.definition.id===e.id);if(t){n({provider:ri(t,r.packageName)});return}}n({provider:null})},{priority:-1})),i.push(e.on($e.list,({setResult:e})=>{let n=[],r=new Set;for(let e of t())for(let t of e.providers)r.has(t.definition.id)||(r.add(t.definition.id),n.push(ri(t,e.packageName)));e({providers:n})},{priority:-1})),i.push(e.on(Qt.fetchModels,async({payload:r,setResult:i})=>{let{config:a}=await e.request(ct.getProviderConfig,{id:r.providerConfigId});if(!a)throw Error(`Provider config '${r.providerConfigId}' not found`);let{bindings:o}=await e.request(ct.listBindingsByConfig,{providerConfigId:r.providerConfigId}),s=ti(t(),o,a.definitionId);if(!s)throw Error(o.length===0?`Provider config '${r.providerConfigId}' is not bound to an adapter`:`No loaded adapter bound to provider config '${r.providerConfigId}' for definition '${a.definitionId}'`);let c=await Ze(e,r.providerConfigId),l=s.options.adapterId,u=l?n().get(l):void 0;if(!l||!u)throw Error(`Adapter instance for '${s.name}' not initialized`);if(!(`fetchModels`in u)||typeof u.fetchModels!=`function`)throw Error(`Adapter '${s.name}' does not support model fetching`);let d=await Yt(e,c.credentialRefs),f=c.endpointOverrides?Object.values(c.endpointOverrides).find(e=>e!==void 0):void 0;i({models:await u.fetchModels(f,d)})})),()=>{Qr(i)}))}function ai(e,t){let n=new Map;for(let[r,i]of e)t.has(r)&&n.set(r,i);return n}function oi(...e){let t=new Map;for(let n of e)for(let[e,r]of n)t.set(e,{...t.get(e)??{},...r});return t}function si(e,t){let n=[e.on(L.get,async e=>{let n=await t.getConfig();e.setResult({config:n})}),e.on(L.update,async e=>{let n=I.parse(e.payload.config),r=await t.prepareConfigForPersistence(n);await t.saveConfig(r),e.setResult({success:!0})})];return()=>{for(let e of n)e()}}var U=n((e=>{let t=Symbol.for(`yaml.alias`),n=Symbol.for(`yaml.document`),r=Symbol.for(`yaml.map`),i=Symbol.for(`yaml.pair`),a=Symbol.for(`yaml.scalar`),o=Symbol.for(`yaml.seq`),s=Symbol.for(`yaml.node.type`),c=e=>!!e&&typeof e==`object`&&e[s]===t,l=e=>!!e&&typeof e==`object`&&e[s]===n,u=e=>!!e&&typeof e==`object`&&e[s]===r,d=e=>!!e&&typeof e==`object`&&e[s]===i,f=e=>!!e&&typeof e==`object`&&e[s]===a,p=e=>!!e&&typeof e==`object`&&e[s]===o;function m(e){if(e&&typeof e==`object`)switch(e[s]){case r:case o:return!0}return!1}function h(e){if(e&&typeof e==`object`)switch(e[s]){case t:case r:case a:case o:return!0}return!1}e.ALIAS=t,e.DOC=n,e.MAP=r,e.NODE_TYPE=s,e.PAIR=i,e.SCALAR=a,e.SEQ=o,e.hasAnchor=e=>(f(e)||m(e))&&!!e.anchor,e.isAlias=c,e.isCollection=m,e.isDocument=l,e.isMap=u,e.isNode=h,e.isPair=d,e.isScalar=f,e.isSeq=p})),ci=n((e=>{var t=U();let n=Symbol(`break visit`),r=Symbol(`skip children`),i=Symbol(`remove node`);function a(e,n){let r=l(n);t.isDocument(e)?o(null,e.contents,r,Object.freeze([e]))===i&&(e.contents=null):o(null,e,r,Object.freeze([]))}a.BREAK=n,a.SKIP=r,a.REMOVE=i;function o(e,r,a,s){let c=u(e,r,a,s);if(t.isNode(c)||t.isPair(c))return d(e,s,c),o(e,c,a,s);if(typeof c!=`symbol`){if(t.isCollection(r)){s=Object.freeze(s.concat(r));for(let e=0;e<r.items.length;++e){let t=o(e,r.items[e],a,s);if(typeof t==`number`)e=t-1;else if(t===n)return n;else t===i&&(r.items.splice(e,1),--e)}}else if(t.isPair(r)){s=Object.freeze(s.concat(r));let e=o(`key`,r.key,a,s);if(e===n)return n;e===i&&(r.key=null);let t=o(`value`,r.value,a,s);if(t===n)return n;t===i&&(r.value=null)}}return c}async function s(e,n){let r=l(n);t.isDocument(e)?await c(null,e.contents,r,Object.freeze([e]))===i&&(e.contents=null):await c(null,e,r,Object.freeze([]))}s.BREAK=n,s.SKIP=r,s.REMOVE=i;async function c(e,r,a,o){let s=await u(e,r,a,o);if(t.isNode(s)||t.isPair(s))return d(e,o,s),c(e,s,a,o);if(typeof s!=`symbol`){if(t.isCollection(r)){o=Object.freeze(o.concat(r));for(let e=0;e<r.items.length;++e){let t=await c(e,r.items[e],a,o);if(typeof t==`number`)e=t-1;else if(t===n)return n;else t===i&&(r.items.splice(e,1),--e)}}else if(t.isPair(r)){o=Object.freeze(o.concat(r));let e=await c(`key`,r.key,a,o);if(e===n)return n;e===i&&(r.key=null);let t=await c(`value`,r.value,a,o);if(t===n)return n;t===i&&(r.value=null)}}return s}function l(e){return typeof e==`object`&&(e.Collection||e.Node||e.Value)?Object.assign({Alias:e.Node,Map:e.Node,Scalar:e.Node,Seq:e.Node},e.Value&&{Map:e.Value,Scalar:e.Value,Seq:e.Value},e.Collection&&{Map:e.Collection,Seq:e.Collection},e):e}function u(e,n,r,i){if(typeof r==`function`)return r(e,n,i);if(t.isMap(n))return r.Map?.(e,n,i);if(t.isSeq(n))return r.Seq?.(e,n,i);if(t.isPair(n))return r.Pair?.(e,n,i);if(t.isScalar(n))return r.Scalar?.(e,n,i);if(t.isAlias(n))return r.Alias?.(e,n,i)}function d(e,n,r){let i=n[n.length-1];if(t.isCollection(i))i.items[e]=r;else if(t.isPair(i))e===`key`?i.key=r:i.value=r;else if(t.isDocument(i))i.contents=r;else{let e=t.isAlias(i)?`alias`:`scalar`;throw Error(`Cannot replace node with ${e} parent`)}}e.visit=a,e.visitAsync=s})),li=n((e=>{var t=U(),n=ci();let r={"!":`%21`,",":`%2C`,"[":`%5B`,"]":`%5D`,"{":`%7B`,"}":`%7D`},i=e=>e.replace(/[!,[\]{}]/g,e=>r[e]);var a=class e{constructor(t,n){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},e.defaultYaml,t),this.tags=Object.assign({},e.defaultTags,n)}clone(){let t=new e(this.yaml,this.tags);return t.docStart=this.docStart,t}atDocument(){let t=new e(this.yaml,this.tags);switch(this.yaml.version){case`1.1`:this.atNextDocument=!0;break;case`1.2`:this.atNextDocument=!1,this.yaml={explicit:e.defaultYaml.explicit,version:`1.2`},this.tags=Object.assign({},e.defaultTags);break}return t}add(t,n){this.atNextDocument&&=(this.yaml={explicit:e.defaultYaml.explicit,version:`1.1`},this.tags=Object.assign({},e.defaultTags),!1);let r=t.trim().split(/[ \t]+/),i=r.shift();switch(i){case`%TAG`:{if(r.length!==2&&(n(0,`%TAG directive should contain exactly two parts`),r.length<2))return!1;let[e,t]=r;return this.tags[e]=t,!0}case`%YAML`:{if(this.yaml.explicit=!0,r.length!==1)return n(0,`%YAML directive should contain exactly one part`),!1;let[e]=r;if(e===`1.1`||e===`1.2`)return this.yaml.version=e,!0;{let t=/^\d+\.\d+$/.test(e);return n(6,`Unsupported YAML version ${e}`,t),!1}}default:return n(0,`Unknown directive ${i}`,!0),!1}}tagName(e,t){if(e===`!`)return`!`;if(e[0]!==`!`)return t(`Not a valid tag: ${e}`),null;if(e[1]===`<`){let n=e.slice(2,-1);return n===`!`||n===`!!`?(t(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(e[e.length-1]!==`>`&&t(`Verbatim tags must end with a >`),n)}let[,n,r]=e.match(/^(.*!)([^!]*)$/s);r||t(`The ${e} tag has no suffix`);let i=this.tags[n];if(i)try{return i+decodeURIComponent(r)}catch(e){return t(String(e)),null}return n===`!`?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(let[t,n]of Object.entries(this.tags))if(e.startsWith(n))return t+i(e.substring(n.length));return e[0]===`!`?e:`!<${e}>`}toString(e){let r=this.yaml.explicit?[`%YAML ${this.yaml.version||`1.2`}`]:[],i=Object.entries(this.tags),a;if(e&&i.length>0&&t.isNode(e.contents)){let r={};n.visit(e.contents,(e,n)=>{t.isNode(n)&&n.tag&&(r[n.tag]=!0)}),a=Object.keys(r)}else a=[];for(let[t,n]of i)t===`!!`&&n===`tag:yaml.org,2002:`||(!e||a.some(e=>e.startsWith(n)))&&r.push(`%TAG ${t} ${n}`);return r.join(`
|
|
5
5
|
`)}};a.defaultYaml={explicit:!1,version:`1.2`},a.defaultTags={"!!":`tag:yaml.org,2002:`},e.Directives=a})),ui=n((e=>{var t=U(),n=ci();function r(e){if(/[\x00-\x19\s,[\]{}]/.test(e)){let t=`Anchor must not contain whitespace or control characters: ${JSON.stringify(e)}`;throw Error(t)}return!0}function i(e){let t=new Set;return n.visit(e,{Value(e,n){n.anchor&&t.add(n.anchor)}}),t}function a(e,t){for(let n=1;;++n){let r=`${e}${n}`;if(!t.has(r))return r}}function o(e,n){let r=[],o=new Map,s=null;return{onAnchor:t=>{r.push(t),s??=i(e);let o=a(n,s);return s.add(o),o},setAnchors:()=>{for(let e of r){let n=o.get(e);if(typeof n==`object`&&n.anchor&&(t.isScalar(n.node)||t.isCollection(n.node)))n.node.anchor=n.anchor;else{let t=Error(`Failed to resolve repeated object (this should not happen)`);throw t.source=e,t}}},sourceObjects:o}}e.anchorIsValid=r,e.anchorNames=i,e.createNodeAnchors=o,e.findNewAnchor=a})),di=n((e=>{function t(e,n,r,i){if(i&&typeof i==`object`)if(Array.isArray(i))for(let n=0,r=i.length;n<r;++n){let r=i[n],a=t(e,i,String(n),r);a===void 0?delete i[n]:a!==r&&(i[n]=a)}else if(i instanceof Map)for(let n of Array.from(i.keys())){let r=i.get(n),a=t(e,i,n,r);a===void 0?i.delete(n):a!==r&&i.set(n,a)}else if(i instanceof Set)for(let n of Array.from(i)){let r=t(e,i,n,n);r===void 0?i.delete(n):r!==n&&(i.delete(n),i.add(r))}else for(let[n,r]of Object.entries(i)){let a=t(e,i,n,r);a===void 0?delete i[n]:a!==r&&(i[n]=a)}return e.call(n,r,i)}e.applyReviver=t})),W=n((e=>{var t=U();function n(e,r,i){if(Array.isArray(e))return e.map((e,t)=>n(e,String(t),i));if(e&&typeof e.toJSON==`function`){if(!i||!t.hasAnchor(e))return e.toJSON(r,i);let n={aliasCount:0,count:1,res:void 0};i.anchors.set(e,n),i.onCreate=e=>{n.res=e,delete i.onCreate};let a=e.toJSON(r,i);return i.onCreate&&i.onCreate(a),a}return typeof e==`bigint`&&!i?.keep?Number(e):e}e.toJS=n})),fi=n((e=>{var t=di(),n=U(),r=W();e.NodeBase=class{constructor(e){Object.defineProperty(this,n.NODE_TYPE,{value:e})}clone(){let e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:i,maxAliasCount:a,onAnchor:o,reviver:s}={}){if(!n.isDocument(e))throw TypeError(`A document argument is required`);let c={anchors:new Map,doc:e,keep:!0,mapAsMap:i===!0,mapKeyWarned:!1,maxAliasCount:typeof a==`number`?a:100},l=r.toJS(this,``,c);if(typeof o==`function`)for(let{count:e,res:t}of c.anchors.values())o(t,e);return typeof s==`function`?t.applyReviver(s,{"":l},``,l):l}}})),pi=n((e=>{var t=ui(),n=ci(),r=U(),i=fi(),a=W(),o=class extends i.NodeBase{constructor(e){super(r.ALIAS),this.source=e,Object.defineProperty(this,`tag`,{set(){throw Error(`Alias nodes cannot have tags`)}})}resolve(e,t){if(t?.maxAliasCount===0)throw ReferenceError(`Alias resolution is disabled`);let i;t?.aliasResolveCache?i=t.aliasResolveCache:(i=[],n.visit(e,{Node:(e,t)=>{(r.isAlias(t)||r.hasAnchor(t))&&i.push(t)}}),t&&(t.aliasResolveCache=i));let a;for(let e of i){if(e===this)break;e.anchor===this.source&&(a=e)}return a}toJSON(e,t){if(!t)return{source:this.source};let{anchors:n,doc:r,maxAliasCount:i}=t,o=this.resolve(r,t);if(!o){let e=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw ReferenceError(e)}let c=n.get(o);if(c||=(a.toJS(o,null,t),n.get(o)),c?.res===void 0)throw ReferenceError(`This should not happen: Alias anchor was not resolved?`);if(i>=0&&(c.count+=1,c.aliasCount===0&&(c.aliasCount=s(r,o,n)),c.count*c.aliasCount>i))throw ReferenceError(`Excessive alias count indicates a resource exhaustion attack`);return c.res}toString(e,n,r){let i=`*${this.source}`;if(e){if(t.anchorIsValid(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){let e=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw Error(e)}if(e.implicitKey)return`${i} `}return i}};function s(e,t,n){if(r.isAlias(t)){let r=t.resolve(e),i=n&&r&&n.get(r);return i?i.count*i.aliasCount:0}else if(r.isCollection(t)){let r=0;for(let i of t.items){let t=s(e,i,n);t>r&&(r=t)}return r}else if(r.isPair(t)){let r=s(e,t.key,n),i=s(e,t.value,n);return Math.max(r,i)}return 1}e.Alias=o})),G=n((e=>{var t=U(),n=fi(),r=W();let i=e=>!e||typeof e!=`function`&&typeof e!=`object`;var a=class extends n.NodeBase{constructor(e){super(t.SCALAR),this.value=e}toJSON(e,t){return t?.keep?this.value:r.toJS(this.value,e,t)}toString(){return String(this.value)}};a.BLOCK_FOLDED=`BLOCK_FOLDED`,a.BLOCK_LITERAL=`BLOCK_LITERAL`,a.PLAIN=`PLAIN`,a.QUOTE_DOUBLE=`QUOTE_DOUBLE`,a.QUOTE_SINGLE=`QUOTE_SINGLE`,e.Scalar=a,e.isScalarValue=i})),mi=n((e=>{var t=pi(),n=U(),r=G();function i(e,t,n){if(t){let e=n.filter(e=>e.tag===t),r=e.find(e=>!e.format)??e[0];if(!r)throw Error(`Tag ${t} not found`);return r}return n.find(t=>t.identify?.(e)&&!t.format)}function a(e,a,o){if(n.isDocument(e)&&(e=e.contents),n.isNode(e))return e;if(n.isPair(e)){let t=o.schema[n.MAP].createNode?.(o.schema,null,o);return t.items.push(e),t}(e instanceof String||e instanceof Number||e instanceof Boolean||typeof BigInt<`u`&&e instanceof BigInt)&&(e=e.valueOf());let{aliasDuplicateObjects:s,onAnchor:c,onTagObj:l,schema:u,sourceObjects:d}=o,f;if(s&&e&&typeof e==`object`){if(f=d.get(e),f)return f.anchor??=c(e),new t.Alias(f.anchor);f={anchor:null,node:null},d.set(e,f)}a?.startsWith(`!!`)&&(a=`tag:yaml.org,2002:`+a.slice(2));let p=i(e,a,u.tags);if(!p){if(e&&typeof e.toJSON==`function`&&(e=e.toJSON()),!e||typeof e!=`object`){let t=new r.Scalar(e);return f&&(f.node=t),t}p=e instanceof Map?u[n.MAP]:Symbol.iterator in Object(e)?u[n.SEQ]:u[n.MAP]}l&&(l(p),delete o.onTagObj);let m=p?.createNode?p.createNode(o.schema,e,o):typeof p?.nodeClass?.from==`function`?p.nodeClass.from(o.schema,e,o):new r.Scalar(e);return a?m.tag=a:p.default||(m.tag=p.tag),f&&(f.node=m),m}e.createNode=a})),hi=n((e=>{var t=mi(),n=U(),r=fi();function i(e,n,r){let i=r;for(let e=n.length-1;e>=0;--e){let t=n[e];if(typeof t==`number`&&Number.isInteger(t)&&t>=0){let e=[];e[t]=i,i=e}else i=new Map([[t,i]])}return t.createNode(i,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw Error(`This should not happen, please report a bug.`)},schema:e,sourceObjects:new Map})}let a=e=>e==null||typeof e==`object`&&!!e[Symbol.iterator]().next().done;e.Collection=class extends r.NodeBase{constructor(e,t){super(e),Object.defineProperty(this,`schema`,{value:t,configurable:!0,enumerable:!1,writable:!0})}clone(e){let t=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(t.schema=e),t.items=t.items.map(t=>n.isNode(t)||n.isPair(t)?t.clone(e):t),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(a(e))this.add(t);else{let[r,...a]=e,o=this.get(r,!0);if(n.isCollection(o))o.addIn(a,t);else if(o===void 0&&this.schema)this.set(r,i(this.schema,a,t));else throw Error(`Expected YAML collection at ${r}. Remaining path: ${a}`)}}deleteIn(e){let[t,...r]=e;if(r.length===0)return this.delete(t);let i=this.get(t,!0);if(n.isCollection(i))return i.deleteIn(r);throw Error(`Expected YAML collection at ${t}. Remaining path: ${r}`)}getIn(e,t){let[r,...i]=e,a=this.get(r,!0);return i.length===0?!t&&n.isScalar(a)?a.value:a:n.isCollection(a)?a.getIn(i,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!n.isPair(t))return!1;let r=t.value;return r==null||e&&n.isScalar(r)&&r.value==null&&!r.commentBefore&&!r.comment&&!r.tag})}hasIn(e){let[t,...r]=e;if(r.length===0)return this.has(t);let i=this.get(t,!0);return n.isCollection(i)?i.hasIn(r):!1}setIn(e,t){let[r,...a]=e;if(a.length===0)this.set(r,t);else{let e=this.get(r,!0);if(n.isCollection(e))e.setIn(a,t);else if(e===void 0&&this.schema)this.set(r,i(this.schema,a,t));else throw Error(`Expected YAML collection at ${r}. Remaining path: ${a}`)}}},e.collectionFromPath=i,e.isEmptyPath=a})),gi=n((e=>{let t=e=>e.replace(/^(?!$)(?: $)?/gm,`#`);function n(e,t){return/^\n+$/.test(e)?e.substring(1):t?e.replace(/^(?! *$)/gm,t):e}e.indentComment=n,e.lineComment=(e,t,r)=>e.endsWith(`
|
|
6
6
|
`)?n(r,t):r.includes(`
|
|
7
7
|
`)?`
|
|
@@ -116,4 +116,4 @@ $&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,`$1$2`).replace(/\
|
|
|
116
116
|
`,e)+1}yield*this.pop();break;default:yield*this.pop(),yield*this.step()}}*blockMap(e){let t=e.items[e.items.length-1];switch(this.type){case`newline`:if(this.onKeyLine=!1,t.value){let n=`end`in t.value?t.value.end:void 0;(Array.isArray(n)?n[n.length-1]:void 0)?.type===`comment`?n?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case`space`:case`comment`:if(t.value)e.items.push({start:[this.sourceToken]});else if(t.sep)t.sep.push(this.sourceToken);else{if(this.atIndentedComment(t.start,e.indent)){let n=e.items[e.items.length-2]?.value?.end;if(Array.isArray(n)){u(n,t.start),n.push(this.sourceToken),e.items.pop();return}}t.start.push(this.sourceToken)}return}if(this.indent>=e.indent){let n=!this.onKeyLine&&this.indent===e.indent,r=n&&(t.sep||t.explicitKey)&&this.type!==`seq-item-ind`,i=[];if(r&&t.sep&&!t.value){let n=[];for(let r=0;r<t.sep.length;++r){let i=t.sep[r];switch(i.type){case`newline`:n.push(r);break;case`space`:break;case`comment`:i.indent>e.indent&&(n.length=0);break;default:n.length=0}}n.length>=2&&(i=t.sep.splice(n[1]))}switch(this.type){case`anchor`:case`tag`:r||t.value?(i.push(this.sourceToken),e.items.push({start:i}),this.onKeyLine=!0):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case`explicit-key-ind`:!t.sep&&!t.explicitKey?(t.start.push(this.sourceToken),t.explicitKey=!0):r||t.value?(i.push(this.sourceToken),e.items.push({start:i,explicitKey:!0})):this.stack.push({type:`block-map`,offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]}),this.onKeyLine=!0;return;case`map-value-ind`:if(t.explicitKey)if(!t.sep)if(a(t.start,`newline`))Object.assign(t,{key:null,sep:[this.sourceToken]});else{let e=l(t.start);this.stack.push({type:`block-map`,offset:this.offset,indent:this.indent,items:[{start:e,key:null,sep:[this.sourceToken]}]})}else if(t.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(a(t.sep,`map-value-ind`))this.stack.push({type:`block-map`,offset:this.offset,indent:this.indent,items:[{start:i,key:null,sep:[this.sourceToken]}]});else if(s(t.key)&&!a(t.sep,`newline`)){let e=l(t.start),n=t.key,r=t.sep;r.push(this.sourceToken),delete t.key,delete t.sep,this.stack.push({type:`block-map`,offset:this.offset,indent:this.indent,items:[{start:e,key:n,sep:r}]})}else i.length>0?t.sep=t.sep.concat(i,this.sourceToken):t.sep.push(this.sourceToken);else t.sep?t.value||r?e.items.push({start:i,key:null,sep:[this.sourceToken]}):a(t.sep,`map-value-ind`)?this.stack.push({type:`block-map`,offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});this.onKeyLine=!0;return;case`alias`:case`scalar`:case`single-quoted-scalar`:case`double-quoted-scalar`:{let n=this.flowScalar(this.type);r||t.value?(e.items.push({start:i,key:n,sep:[]}),this.onKeyLine=!0):t.sep?this.stack.push(n):(Object.assign(t,{key:n,sep:[]}),this.onKeyLine=!0);return}default:{let r=this.startBlockValue(e);if(r){if(r.type===`block-seq`){if(!t.explicitKey&&t.sep&&!a(t.sep,`newline`)){yield*this.pop({type:`error`,offset:this.offset,message:`Unexpected block-seq-ind on same line with key`,source:this.source});return}}else n&&e.items.push({start:i});this.stack.push(r);return}}}}yield*this.pop(),yield*this.step()}*blockSequence(e){let t=e.items[e.items.length-1];switch(this.type){case`newline`:if(t.value){let n=`end`in t.value?t.value.end:void 0;(Array.isArray(n)?n[n.length-1]:void 0)?.type===`comment`?n?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else t.start.push(this.sourceToken);return;case`space`:case`comment`:if(t.value)e.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(t.start,e.indent)){let n=e.items[e.items.length-2]?.value?.end;if(Array.isArray(n)){u(n,t.start),n.push(this.sourceToken),e.items.pop();return}}t.start.push(this.sourceToken)}return;case`anchor`:case`tag`:if(t.value||this.indent<=e.indent)break;t.start.push(this.sourceToken);return;case`seq-item-ind`:if(this.indent!==e.indent)break;t.value||a(t.start,`seq-item-ind`)?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return}if(this.indent>e.indent){let t=this.startBlockValue(e);if(t){this.stack.push(t);return}}yield*this.pop(),yield*this.step()}*flowCollection(e){let t=e.items[e.items.length-1];if(this.type===`flow-error-end`){let e;do yield*this.pop(),e=this.peek(1);while(e?.type===`flow-collection`)}else if(e.end.length===0){switch(this.type){case`comma`:case`explicit-key-ind`:!t||t.sep?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken);return;case`map-value-ind`:!t||t.value?e.items.push({start:[],key:null,sep:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});return;case`space`:case`comment`:case`newline`:case`anchor`:case`tag`:!t||t.value?e.items.push({start:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case`alias`:case`scalar`:case`single-quoted-scalar`:case`double-quoted-scalar`:{let n=this.flowScalar(this.type);!t||t.value?e.items.push({start:[],key:n,sep:[]}):t.sep?this.stack.push(n):Object.assign(t,{key:n,sep:[]});return}case`flow-map-end`:case`flow-seq-end`:e.end.push(this.sourceToken);return}let n=this.startBlockValue(e);n?this.stack.push(n):(yield*this.pop(),yield*this.step())}else{let t=this.peek(2);if(t.type===`block-map`&&(this.type===`map-value-ind`&&t.indent===e.indent||this.type===`newline`&&!t.items[t.items.length-1].sep))yield*this.pop(),yield*this.step();else if(this.type===`map-value-ind`&&t.type!==`flow-collection`){let n=l(c(t));d(e);let r=e.end.splice(1,e.end.length);r.push(this.sourceToken);let i={type:`block-map`,offset:e.offset,indent:e.indent,items:[{start:n,key:e,sep:r}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=i}else yield*this.lineEnd(e)}}flowScalar(e){if(this.onNewLine){let e=this.source.indexOf(`
|
|
117
117
|
`)+1;for(;e!==0;)this.onNewLine(this.offset+e),e=this.source.indexOf(`
|
|
118
118
|
`,e)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case`alias`:case`scalar`:case`single-quoted-scalar`:case`double-quoted-scalar`:return this.flowScalar(this.type);case`block-scalar-header`:return{type:`block-scalar`,offset:this.offset,indent:this.indent,props:[this.sourceToken],source:``};case`flow-map-start`:case`flow-seq-start`:return{type:`flow-collection`,offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case`seq-item-ind`:return{type:`block-seq`,offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case`explicit-key-ind`:{this.onKeyLine=!0;let t=l(c(e));return t.push(this.sourceToken),{type:`block-map`,offset:this.offset,indent:this.indent,items:[{start:t,explicitKey:!0}]}}case`map-value-ind`:{this.onKeyLine=!0;let t=l(c(e));return{type:`block-map`,offset:this.offset,indent:this.indent,items:[{start:t,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,t){return this.type!==`comment`||this.indent<=t?!1:e.every(e=>e.type===`newline`||e.type===`space`)}*documentEnd(e){this.type!==`doc-mode`&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type===`newline`&&(yield*this.pop()))}*lineEnd(e){switch(this.type){case`comma`:case`doc-start`:case`doc-end`:case`flow-seq-end`:case`flow-map-end`:case`map-value-ind`:yield*this.pop(),yield*this.step();break;case`newline`:this.onKeyLine=!1;default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type===`newline`&&(yield*this.pop())}}}})),ma=n((e=>{var t=oa(),n=Wi(),r=Gi(),i=xi(),a=U(),o=fa(),s=pa();function c(e){let t=e.prettyErrors!==!1;return{lineCounter:e.lineCounter||t&&new o.LineCounter||null,prettyErrors:t}}function l(e,n={}){let{lineCounter:i,prettyErrors:a}=c(n),o=new s.Parser(i?.addNewLine),l=new t.Composer(n),u=Array.from(l.compose(o.parse(e)));if(a&&i)for(let t of u)t.errors.forEach(r.prettifyError(e,i)),t.warnings.forEach(r.prettifyError(e,i));return u.length>0?u:Object.assign([],{empty:!0},l.streamInfo())}function u(e,n={}){let{lineCounter:i,prettyErrors:a}=c(n),o=new s.Parser(i?.addNewLine),l=new t.Composer(n),u=null;for(let t of l.compose(o.parse(e),!0,e.length))if(!u)u=t;else if(u.options.logLevel!==`silent`){u.errors.push(new r.YAMLParseError(t.range.slice(0,2),`MULTIPLE_DOCS`,`Source contains multiple documents; please use YAML.parseAllDocuments()`));break}return a&&i&&(u.errors.forEach(r.prettifyError(e,i)),u.warnings.forEach(r.prettifyError(e,i))),u}function d(e,t,n){let r;typeof t==`function`?r=t:n===void 0&&t&&typeof t==`object`&&(n=t);let a=u(e,n);if(!a)return null;if(a.warnings.forEach(e=>i.warn(a.options.logLevel,e)),a.errors.length>0){if(a.options.logLevel!==`silent`)throw a.errors[0];a.errors=[]}return a.toJS(Object.assign({reviver:r},n))}function f(e,t,r){let i=null;if(typeof t==`function`||Array.isArray(t)?i=t:r===void 0&&t&&(r=t),typeof r==`string`&&(r=r.length),typeof r==`number`){let e=Math.round(r);r=e<1?void 0:e>8?{indent:8}:{indent:e}}if(e===void 0){let{keepUndefined:e}=r??t??{};if(!e)return}return a.isDocument(e)&&!i?e.toString(r):new n.Document(e,i,r).toString(r)}e.parse=d,e.parseAllDocuments=l,e.parseDocument=u,e.stringify=f})),$=n((e=>{var t=oa(),n=Wi(),r=Hi(),i=Gi(),a=pi(),o=U(),s=K(),c=G(),l=q(),u=Y();ua();var d=da(),f=fa(),p=pa(),m=ma(),h=ci();e.Composer=t.Composer,e.Document=n.Document,e.Schema=r.Schema,e.YAMLError=i.YAMLError,e.YAMLParseError=i.YAMLParseError,e.YAMLWarning=i.YAMLWarning,e.Alias=a.Alias,e.isAlias=o.isAlias,e.isCollection=o.isCollection,e.isDocument=o.isDocument,e.isMap=o.isMap,e.isNode=o.isNode,e.isPair=o.isPair,e.isScalar=o.isScalar,e.isSeq=o.isSeq,e.Pair=s.Pair,e.Scalar=c.Scalar,e.YAMLMap=l.YAMLMap,e.YAMLSeq=u.YAMLSeq,e.Lexer=d.Lexer,e.LineCounter=f.LineCounter,e.Parser=p.Parser,e.parse=m.parse,e.parseAllDocuments=m.parseAllDocuments,e.parseDocument=m.parseDocument,e.stringify=m.stringify,e.visit=h.visit,e.visitAsync=h.visitAsync}))();function ha(e){return e instanceof Error&&`code`in e&&typeof e.code==`string`}function ga(e){return ha(e)&&e.code===`ENOENT`}function _a(e){return ha(e)&&e.code===`ENOTDIR`}function va(e){return e instanceof Error?e.message:String(e)}async function ya(e){try{return(await P.promises.readdir(e)).filter(e=>e.endsWith(`.yaml`)).sort().map(t=>A.join(e,t))}catch(t){if(ga(t))return[];throw _a(t)?Error(`Invalid model registry directory ${e}: expected a directory.`,{cause:t}):t}}var ba=class{seedPaths;constructor(e){this.seedPaths=Array.isArray(e)?e:[e]}async fetch(){for(let e of this.seedPaths){let t=await xa(e);if(t!==void 0)try{return dt.parse((0,$.parse)(t))}catch(t){throw Error(`Invalid bundled model registry seed at ${e}: ${va(t)}`,{cause:t})}}throw Error(`Bundled model registry seed not found. Tried:\n${this.seedPaths.map(e=>`- ${e}`).join(`
|
|
119
|
-
`)}`)}};async function xa(e){try{return await P.promises.readFile(e,`utf-8`)}catch(t){if(Sa(t))return;throw Error(`Failed to read bundled model registry seed at ${e}: ${va(t)}`,{cause:t})}}function Sa(e){return ga(e)||_a(e)}var Ca=class{url;timeoutMs;constructor(e,t=1e4){let n=e.trim();if(!n)throw Error(`CdnRegistryFetcher requires a non-empty registry URL`);let r;try{r=new URL(n)}catch(e){throw Error(`CdnRegistryFetcher requires a valid registry URL: ${n}`,{cause:e})}if(r.protocol!==`http:`&&r.protocol!==`https:`)throw Error(`CdnRegistryFetcher requires an HTTP(S) registry URL: ${n}`);if(!Number.isFinite(t)||t<=0)throw Error(`CdnRegistryFetcher requires a positive finite timeoutMs, got ${t}`);this.url=r.toString(),this.timeoutMs=t}async fetch(){let e=new AbortController,t=setTimeout(()=>e.abort(),this.timeoutMs);try{let t=await fetch(this.url,{signal:e.signal});if(!t.ok)throw Error(`Failed to fetch model registry: ${t.status} ${t.statusText}`);let n=(0,$.parse)(await t.text());return dt.parse(n)}catch(e){throw e instanceof Error&&e.name===`AbortError`?Error(`Failed to fetch model registry: timed out after ${this.timeoutMs}ms`,{cause:e}):e}finally{clearTimeout(t)}}},wa=class{cachePath;trackFetchedAt;constructor(e,t={}){this.cachePath=e,this.trackFetchedAt=t.trackFetchedAt??!1}async get(){try{let e=await P.promises.readFile(this.cachePath,`utf-8`),t=Ta(JSON.parse(e)),n=dt.safeParse(t);return n.success?n.data:null}catch{return null}}async set(e){try{await P.promises.mkdir(A.dirname(this.cachePath),{recursive:!0});let t=this.trackFetchedAt?{fetchedAt:new Date().toISOString(),registry:e}:e;await P.promises.writeFile(this.cachePath,JSON.stringify(t,null,2),`utf-8`)}catch(e){console.warn(`[FileRegistryCache] Failed to write cache:`,e)}}};function Ta(e){return et(e)&&`registry`in e&&`fetchedAt`in e?e.registry:e}const Ea=D.object({name:D.string().optional(),models:D.array(ge)}),Da=D.object({name:D.string().optional(),models:D.record(D.string(),ft)}),Oa=D.object({$schema:D.literal(`makaio/model-registry/v2`).optional(),updatedAt:D.string().datetime().optional(),labs:D.record(D.string(),Ea).optional(),providers:D.record(D.string(),Da).optional()}),ka=D.object({name:D.string().optional(),models:D.array(D.record(D.string(),D.unknown()))}),Aa=D.object({name:D.string().optional(),models:D.record(D.string(),ft)});var ja=class{userModelsDir;constructor(e){this.userModelsDir=e}async fetch(){let e=Ma();return await Promise.all([this.loadLabDirectory(A.join(this.userModelsDir,`labs`),e),this.loadProviderDirectory(A.join(this.userModelsDir,`providers`),e)]),await this.loadFlatFiles(e),e}async loadLabDirectory(e,t){let n=await ya(e),r=await Promise.all(n.map(async e=>({labId:A.basename(e,`.yaml`),lab:await Ba(e,A.basename(e,`.yaml`))})));for(let{labId:e,lab:n}of r)Ga(t,e,n)}async loadProviderDirectory(e,t){let n=await ya(e),r=await Promise.all(n.map(async e=>({providerId:A.basename(e,`.yaml`),provider:await Va(e)})));for(let{providerId:e,provider:n}of r)Ka(t,e,n)}async loadFlatFiles(e){let t=await ya(this.userModelsDir);for(let n of t){let t=A.basename(n,`.yaml`),r=(0,$.parse)(await P.promises.readFile(n,`utf-8`));if(!et(r))throw Error(`Invalid model registry overlay YAML in ${n}: expected a YAML object.`);if(`labs`in r||`providers`in r){Wa(e,Oa.parse(r));continue}if(Array.isArray(r.models)){Ga(e,t,Ha(r,t));continue}if(et(r.models)){Ka(e,t,Ua(r));continue}throw Error(`Unrecognized model registry overlay shape in ${n}: expected labs, providers, or models.`)}}};function Ma(){return{labs:{},providers:{}}}function Na(e,t){return{$schema:`makaio/model-registry/v2`,updatedAt:t.updatedAt??e.updatedAt,labs:qa(Pa(e.labs,t.labs)),providers:Ja(La(e.providers,t.providers))}}function Pa(e,t){let n={...e};for(let[e,r]of Object.entries(t)){let t=n[e];n[e]=t===void 0?r:{...t,...r,models:Fa(t.models,r.models)}}return n}function Fa(e,t){let n=[...e],r=new Map(e.map((e,t)=>[e.name,t]));for(let e of t){let t=r.get(e.name);if(t===void 0){r.set(e.name,n.length),n.push(e);continue}n[t]=Ia(n[t],e)}return n}function Ia(e,t){let n={...e,...t},r=pt(e.metadata,t.metadata);return r===void 0?delete n.metadata:n.metadata=r,n}function La(e,t){let n={...e};for(let[e,r]of Object.entries(t)){let t=n[e];n[e]=t===void 0?r:{...t,...r,models:Ra(t.models,r.models)}}return n}function Ra(e,t){let n={...e};for(let[e,r]of Object.entries(t)){let t=n[e];n[e]=t===void 0?r:za(t,r)}return n}function za(e,t){let n={...e,...t},r=pt(e.metadata,t.metadata);return r===void 0?delete n.metadata:n.metadata=r,n}async function Ba(e,t){return Ha((0,$.parse)(await P.promises.readFile(e,`utf-8`)),t)}async function Va(e){return Ua((0,$.parse)(await P.promises.readFile(e,`utf-8`)))}function Ha(e,t){let n=ka.parse(e);return{...n.name===void 0?{}:{name:n.name},models:n.models.map(e=>ge.parse({...e,labId:t}))}}function Ua(e){let t=Aa.parse(e);return{...t.name===void 0?{}:{name:t.name},models:t.models}}function Wa(e,t){e.updatedAt=t.updatedAt??e.updatedAt,t.labs!==void 0&&(e.labs=Pa(e.labs,t.labs)),t.providers!==void 0&&(e.providers=La(e.providers,t.providers))}function Ga(e,t,n){e.labs=Pa(e.labs,{[t]:n})}function Ka(e,t,n){e.providers=La(e.providers,{[t]:n})}function qa(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,{...t,name:t.name??e}]))}function Ja(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,{...t,name:t.name??e}]))}var Ya=class{userModelsDir;baseFetcher;constructor(e,t){this.userModelsDir=e,this.baseFetcher=t}async fetch(){let e=await this.baseFetcher.fetch();if(await this.validateDirectory(this.userModelsDir),await this.validateDirectory(`${this.userModelsDir}/labs`),await this.validateDirectory(`${this.userModelsDir}/providers`),!await this.hasAnyOverlayFiles())return e;let t=Na(e,await new ja(this.userModelsDir).fetch());return dt.parse(t)}async validateDirectory(e){await ya(e)}async hasAnyOverlayFiles(){let e,t;try{let n=await k.readdir(this.userModelsDir,{withFileTypes:!0});e=n.map(e=>String(e.name)),t=new Map(n.map(e=>[String(e.name),[e.isFile(),e.isDirectory()]]))}catch(e){if(ga(e))return!1;throw e}return e.some(e=>{let[n,r]=t.get(e)??[!1,!1];return n&&e.endsWith(`.yaml`)||r&&(e===`labs`||e===`providers`)})}},Xa=class extends Error{constructor(e){super(`[boot] Could not find workspace root (no package.json with 'workspaces' field) starting from: ${e}`),this.name=`WorkspaceRootNotFoundError`}};function Za(e){return Qa(e).root}function Qa(e){let t=A.resolve(e);for(;;){let n=A.join(t,`package.json`);if(P.existsSync(n))try{let e=P.readFileSync(n,`utf-8`),r=JSON.parse(e);if(typeof r==`object`&&r&&`workspaces`in r)return{root:t,packageJsonPath:n,workspaces:en(r)}}catch{}let r=A.dirname(t);if(r===t)throw new Xa(e);t=r}}const $a=`MAKAIO_MODEL_REGISTRY_SOURCES`;function eo(e){let t=A.join(e.makaioHome,`models`),n=A.join(e.makaioHome,`cache`,`model-registry`);return new Ya(t,new ut(to(e).map(e=>io(e,n))))}function to(e){let t=ro(e.srcDir,e.cwd),n=t.slice(0,-1),r=t.slice(n.length);return so([...no(e.env??process.env),...e.seedPaths??[],...n,e.cdnRegistryUrl??`https://makaio-ai.github.io/makaio-framework/model-registry.yaml`,...e.fallbackSeedPaths??[],...r])}function no(e){let t=e[$a]?.trim();if(!t)return[];let n;try{n=t.startsWith(`[`)?JSON.parse(t):t}catch(e){throw Error(`[boot] ${$a} must be a JSON string array or a single source string`,{cause:e})}let r=Array.isArray(n)?n:[n];if(!r.every(e=>typeof e==`string`))throw Error(`[boot] ${$a} entries must be strings`);return r.map(e=>e.trim()).filter(e=>e.length>0)}function ro(e,t=process.cwd()){let n=A.resolve(e,`static/model-registry.yaml`),r=A.resolve(t,`static/model-registry.yaml`);try{return so([r,A.resolve(Za(e),`static/model-registry.yaml`),n])}catch(e){if(e instanceof Xa)return so([r,n]);throw e}}function io(e,t){let n=oo(e);return n?.protocol===`http:`||n?.protocol===`https:`?new lt(new Ca(n.href),new wa(A.join(t,`${lo(n.href)}.json`),{trackFetchedAt:!0})):new ba(ao(e,n))}function ao(e,t){if(t?.protocol===`file:`)return le(t);if(t!==void 0)throw Error(`[boot] Unsupported model registry source protocol "${t.protocol}" for ${e}`);return A.isAbsolute(e)?e:A.resolve(e)}function oo(e){try{return new URL(e)}catch{return}}function so(e){let t=new Set,n=[];for(let r of e){let e=co(r);t.has(e)||(t.add(e),n.push(r))}return n}function co(e){let t=oo(e);return t?.protocol===`file:`?`file:${A.resolve(le(t))}`:t===void 0?`file:${A.resolve(e)}`:`${t.protocol}//${t.host}${t.pathname}${t.search}`}function lo(e){return N(`sha256`).update(e).digest(`hex`).slice(0,16)}async function uo(e){let t=A.resolve(e.frameworkPackagePath);await fo(t);let n=A.join(e.makaioHome,`node_modules`,`@makaio`),r=A.join(n,`framework`);await k.mkdir(n,{recursive:!0}),!await po(r,t)&&(await k.rm(r,{recursive:!0,force:!0}),await k.symlink(t,r,process.platform===`win32`?`junction`:`dir`))}async function fo(e){let t=A.join(e,`package.json`),n=await k.readFile(t,`utf-8`);if(JSON.parse(n).name!==`@makaio/framework`)throw Error(`Expected @makaio/framework package at ${e}`)}async function po(e,t){try{return(await k.lstat(e)).isSymbolicLink()?await k.realpath(e)===await k.realpath(t):!1}catch(e){if(mo(e))return!1;throw e}}function mo(e){return typeof e==`object`&&!!e&&`code`in e&&e.code===`ENOENT`}function ho(e,t){e.push(...go(t))}function go(e){return e===void 0?[]:typeof e==`function`?[e]:[...e]}function _o(e,t=[]){let n=new Set([e]),r=new Set,i=new Map;for(let e of t)typeof e==`string`?n.add(e):(r.add(e.id),e.version!==void 0&&i.set(e.id,e.version));return{hosts:n,capabilities:r,...i.size>0?{capabilityVersions:i}:{}}}function vo(e=[]){return e.some(e=>typeof e==`string`&&e===`node`)?e:[`node`,...e]}function yo(e){return ot(ct(bo(e.packages,e.configProvider),e.surface,e.runtimeEnvironment))}function bo(e,t){return t?e.filter(e=>t.loadEnabled(e.name)!==!1):e}function xo(e,t){return e.filter(e=>e.runtimeOwnership?.[t]===!0).map(e=>e.name)}function So(e,t){let n=xo(e,t);if(n.length>1)throw Error(`Multiple extensions own runtimeOwnership.${t}: ${n.join(`, `)}`)}function Co(e){return e===!0||(So(e,`sessionOrchestrator`),xo(e,`sessionOrchestrator`).length===0)?Ut:Ut.filter(e=>e.name!==Pt.name)}function wo(e,t,n){let r=[];try{for(let i of e){let e=i.runtimeBoot;e&&ho(r,e.configure({bus:t,registerContributionProcessor:e=>{r.push(n.registerContributionProcessor(e))},forEachActiveExtension:e=>{n.forEachActiveExtension(e)}}))}}catch(e){let t=[];for(let e of[...r].reverse())try{e()}catch(e){t.push(e)}throw t.length>0?AggregateError([e,...t],`Extension boot contribution failed and rollback cleanup reported additional errors`,{cause:e}):e}return r}function To(){let e=process.env.MAKAIO_SKIP_EXTENSIONS;if(!e)return new Set;let t=e.split(`,`).map(e=>e.trim()).filter(Boolean);return new Set(t)}function Eo(e,t){let n=t.endsWith(`/`)?t:`${t}/`,r=tn({root:e,rewriteRequestPath:e=>e.slice(n.length-1)});return e=>{e.use(`${t}/*`,r)}}function Do(e){return`/extensions/${e}/browser`}function Oo(e,t){return`extensions/${e}/browser/${Ao(t)}`}function ko(e,t){return`/${Oo(e,t)}.js`}function Ao(e){let t=e.replaceAll(j.win32.sep,j.posix.sep),n=j.posix.basename(t),r=j.posix.extname(n);return r?n.slice(0,-r.length):n}function jo(e,t,n={}){let{createMount:r=Eo}=n,i=new Map(e.map(e=>[e.descriptor.name,e]));return t.map(e=>{let t=i.get(e.name);if(!t?.descriptor.entrypoints?.browser)return e;if(e.browser)return console.warn(`[extensions] ${e.name}: server entry already declares browser, skipping browser bridge`),e;if(e.http)return console.warn(`[extensions] ${e.name}: server entry already declares http, skipping browser bridge`),e;let n=t.descriptor.entrypoints.browser,a=C(`browser`,n),o=x(`browser`,n,t.extensionPath);if(!o)return console.warn(`[extensions] ${e.name}: browser entry has no resolvable candidate within extension directory, skipping bridge`),e;let s=A.dirname(o),c=Do(e.name),l=ko(e.name,a);return{...e,browser:{entrypoint:l},http:{prefix:c,mount:r(s,c)}}})}function Mo(e,t={}){let{createMount:n=Eo,frameworkVersion:r}=t,i=[],a=new Map;for(let t of e){let{descriptor:e,extensionPath:o}=t;if(r!==void 0&&!S(t,r)||e.execution===`detached`||e.entrypoints.server||!e.entrypoints.browser)continue;let s=e.entrypoints.browser,c=C(`browser`,s),l=x(`browser`,s,o);if(!l){console.warn(`[extensions] ${e.name}: browser entry has no resolvable candidate within extension directory, skipping synthesis`);continue}let u=A.dirname(l),d=Do(e.name),f=ko(e.name,c);i.push({...y(e),browser:{entrypoint:f},http:{prefix:d,mount:n(u,d)}}),e.config?.defaults&&a.set(e.name,e.config.defaults)}return{packages:i,configDefaults:a}}async function No(){let e=A.dirname(le(import.meta.url)),t=A.resolve(e,`..`,`package.json`),n=await k.readFile(t,`utf-8`),r=JSON.parse(n);if(typeof r!=`object`||!r||!(`version`in r)||typeof r.version!=`string`)throw Error(`[boot] package.json at ${t} has no string 'version' field`);return r.version}async function Po(e){let t={packages:[],configDefaults:new Map},n=[],r=e.frameworkVersion??await No();try{if(n=await e.extensionOptions.extensions.discover(),n=Fo(n,e.skipExtensions),process.env.MAKAIO_DEBUG){console.info(`[boot] Discovered %d extension descriptor(s):`,n.length);for(let e of n)console.info(`[boot] - %s (%s)`,e.descriptor.displayName??e.descriptor.name,e.source)}}catch(e){console.warn(`[boot] Extension discovery failed, skipping:`,e instanceof Error?e.message:e)}let i=n.filter(e=>S(e,r));if(i.length>0)try{t=await E(i,{frameworkVersion:r})}catch(e){console.warn(`[boot] Extension loading failed, skipping:`,e instanceof Error?e.message:e)}let a={...e.createMount?{createMount:e.createMount}:{},frameworkVersion:r},o=jo(i,t.packages,a),s=Mo(i,a),c=await ee(i,[...o,...s.packages],{frameworkVersion:r});return{discovered:n,extensionLoadResult:t,browserOnlyResult:s,extensionsWithCli:c,allExtensionPackages:c.packages}}function Fo(e,t){if(t.size===0)return e;let n=new Set(e.map(e=>e.descriptor.name)),r=[...t].filter(e=>!n.has(e));r.length&&console.warn(`[boot] MAKAIO_SKIP_EXTENSIONS: no matching extension(s): %s`,r.join(`, `));let i=new Set([...t].filter(e=>n.has(e))),a=e.filter(e=>!i.has(e.descriptor.name));return a.length<e.length&&console.info(`[boot] MAKAIO_SKIP_EXTENSIONS filtered %d extension(s): %s`,e.length-a.length,[...i].join(`, `)),a}async function Io(e,t){let n=Ge(e),r=n.dialect,i=new Set;for(let a of t){if(i.has(a.migrationSourceId))continue;i.add(a.migrationSourceId);let t=Lo(a.migrationSourceId,n);process.env.MAKAIO_DEBUG===`true`&&console.info(`[boot] Running migrations for package: ${a.name}`);let o;try{o=cn({migrationsDir:a.migrationsPathByDialect?.[r]??a.migrationsPath,migrationSourceId:a.migrationSourceId,expectedDialect:r})}catch(e){throw e instanceof Error&&e.name===`MigrationDialectMismatchError`?Error(`Extension '${a.name}' ships migrations that do not match the '${r}' database dialect. Disable this extension on '${r}' hosts or ship a migration chain generated for '${r}'.`,{cause:e}):e}await _n(e,o,t)}}function Lo(e,t){let n=N(`sha256`).update(e).digest(`hex`).slice(0,16);return t.migrations.extensionLedgerName(n)}function Ro(e,t){return new ke({signingKeyPair:e.signingKeyPair,identityId:e.machineId,getPeerSigningKey:t})}const zo=Se.fact.$meta.namespace,Bo=Se.fact.subject;function Vo(e,t){if(t.transport!==void 0||t.localOnly===!0)return!1;let n=`${t.namespace}.${t.subject}`,r=e.getContext().namespaceRegistry;return!r.isLocalSubject(n)&&!r.isCollectorOnlySubject(n)}function Ho(e){return e.type===`event`?{type:`event`,namespace:e.namespace,subject:e.subject,payload:e.payload,messageId:e.messageId,...e.correlationId===void 0?{}:{correlationId:e.correlationId}}:{type:e.type,namespace:e.namespace,subject:e.subject,payload:e.payload,messageId:e.messageId,correlationId:e.correlationId??e.messageId}}async function Uo(e,t,n,r,i){let a=Ho(i),o=he({message:a,direction:`outbound`,observedAt:Date.now(),machineId:n,namespaceRegistry:t.getContext().namespaceRegistry,projectorRegistry:r.projectorRegistry});for(let t of o)await e.send({type:`event`,namespace:zo,subject:Bo,payload:t,messageId:`${a.messageId}:telemetry:${t.factId}`,correlationId:a.correlationId})}async function Wo(e,t,n){let r=n.transport;await r.connect();let i;try{i=e.observeMessages(i=>{Vo(e,i)&&Uo(r,e,t,n,i).catch(e=>{console.error(`[upstream-telemetry] Failed to export subject telemetry fact`,e)})})}catch(e){throw await r.disconnect().catch(()=>void 0),e}return{shutdown:async()=>{i(),await r.disconnect()}}}function Go(e,t){let n=e===`0.0.0.0`?`127.0.0.1`:e===`::`?`::1`:e;return`ws://${n.includes(`:`)&&!n.startsWith(`[`)?`[${n}]`:n}:${t}/bus`}async function Ko(e,t,n,r){let o=r.makaioHome??_(),s=Pn(r,o),c=To(),l=r.peerSigningKeyResolver,u=[];try{if(r.lanBind&&e.dispatchingAuth&&!l)throw Error(`[boot] peerSigningKeyResolver is required when lanBind is enabled`);let d=r.configProvider,f=d??new Nn(new yn(o),o),p=await f.getConfig({mode:`local`}),m=r.machineIdentity??await wt(A.join(o,`keys`)),h=d?await d.getMachineId():m.machineId;if(m.machineId!==h)throw Error(`[boot] Config provider machineId '${h}' does not match runtime machine identity '${m.machineId}'`);console.info(`[boot] Config resolved (mode=%s)`,p.mode);let g=pe;if(g.registerNamespaces(be),g.registerNamespaces(xe),g.registerNamespaces([nt,kt,it,at,i]),g.registerNamespaces(Nt),g.registerNamespaces(r.hostNamespaces??[]),process.env.MAKAIO_DEBUG===`true`){let e=g.__onAny(e=>{let t;try{t=JSON.stringify(e.payload)}catch{t=`[unserializable payload]`}console.debug(`[bus-server] subject: ${e.subject}, payload: ${t}`)});u.push(e)}if(r.upstreamTelemetry){let e=await Wo(g,h,r.upstreamTelemetry);u.push(e.shutdown)}await g.emit(B.phase.busCreated,{machineId:h}),await e.connect(g,h),u.push(()=>e.disconnect()),console.info(`[boot] Transport ready on %s:%d`,n,t);try{r.onTransportReady?.({port:t,host:n})}catch(e){console.warn(`[boot] onTransportReady callback failed:`,e)}let{databaseClient:_}=await Hn({makaioHome:o,migrationsDir:r.centralMigrationsDir,database:r.database}),v=_.db;console.info(`[boot] Database initialized`),u.push(()=>_.close());let y=[g.on(a.database,e=>{e.setResult({db:v})}),g.on(a.machineIdentity,e=>{e.setResult({identity:m})}),g.on(a.busPort,e=>{e.setResult({port:t})})],b=!1,x=g.on(B.isReady,e=>{e.setResult({ready:b,machineId:h})});u.push(()=>{b=!1,x();for(let e of y)e()}),await g.emit(B.phase.coreReady,{machineId:h}),console.info(`[boot] Core ready (machineId=%s)`,h);let S=A.dirname(le(import.meta.url)),C=si(g,f);u.push(C),console.info(`[boot] Config handlers registered`),r.frameworkPackagePath&&(await uo({makaioHome:o,frameworkPackagePath:r.frameworkPackagePath}),console.info(`[boot] Framework package linked for extension resolution`));let w=r.frameworkModuleResolver;if(w){try{await w.install()}catch(e){throw await Promise.resolve(w.uninstall()).catch(()=>void 0),e}u.push(()=>w.uninstall()),console.info(`[boot] Framework module resolver installed`)}let T={current:void 0},E=eo({makaioHome:o,srcDir:S,fallbackSeedPaths:r.modelRegistryFallbackSeedPaths}),ee=process.env.USER??process.env.USERNAME??`unknown`;try{ee=Qe.userInfo().username}catch{}let te=r.frameworkVersion??await No(),{extensionLoadResult:oe,browserOnlyResult:D,extensionsWithCli:se,allExtensionPackages:ce}=await Po({extensionOptions:s,skipExtensions:c,frameworkVersion:te,createMount:r.createMount}),O=_o(process.platform,r.hostCapabilities),k=yo({packages:ce,configProvider:r.extensionConfigProvider,surface:r.surface??`headless`,runtimeEnvironment:O}),j=Go(n,t),M=new rt(g,{surface:r.surface??`headless`,db:v,extensionContextBase:{platform:process.platform,homedir:Qe.homedir(),makaioHome:o,username:ee,machineId:m.machineId,busUrl:j,tryImport:Dn},runtimeEnvironment:O,launcherCommand:r.launcherCommand,loadConfig:r.extensionConfigProvider?e=>r.extensionConfigProvider.loadConfig(e):void 0,loadEnabled:r.extensionConfigProvider?e=>r.extensionConfigProvider.loadEnabled(e):void 0,runMigrations:e=>Io(v,e)}),N=r.adapterConfigRepository??new bt({providerConfigsDir:A.join(o,`provider-configs`),adaptersDir:A.join(o,`adapters`)}),P=[Wr,mt({definitions:k.flatMap(e=>e.clients??[]),strategyDependencies:r.clientBinaryStrategyDependencies,postInstallHandlers:r.clientBinaryPostInstallHandlers})];r.enablePackageManager!==!1&&P.push(Dr({frameworkPeerRange:`^${te}`,frameworkPackagePath:r.frameworkPackagePath,devPortalPackages:r.devPortalPackages}));let F={cwd:process.cwd()},ue=re({busUrl:j,runtimeModuleDir:S,platformDefaults:F,workflowRunner:r.workflowRunner,makaioHome:o,bus:g}),{adapterSubsystemPackage:de}=rn({coordinator:M,configRepository:N,platformDefaults:F});if(P.push(de,...Co(k),Kt(ue),Rt(E),Gt),process.platform===`darwin`){let{platformMacOSPackage:e}=await import(`../src-_VODAJnf.mjs`);P.push(e)}let fe=[...P,...k],me=new Set(fe.map(e=>e.name)),he=ai(oi(oe.configDefaults,D.configDefaults,se.configDefaults,r.packageConfigDefaults??new Map),me);M.load(fe,he),M.registerContributionProcessor(Wt()),M.registerContributionProcessor(Ft()),M.registerContributionProcessor(It()),M.registerContributionProcessor(Lt()),M.registerContributionProcessor(zt()),M.registerContributionProcessor(Bt()),M.registerContributionProcessor(Ht()),M.registerContributionProcessor(Vt()),r.routeGraphBuilder&&M.registerContributionProcessor(Or(r.routeGraphBuilder)),ho(u,wo(fe,g,M)),u.push(()=>M.shutdown()),ho(u,r.configureCoordinator?.({bus:g,coordinator:M,registerContributionProcessor:e=>{M.registerContributionProcessor(e)},getAdapterSubsystemService:()=>M.getExtensionService(yt)})),await M.startAll(),await g.emit(B.phase.servicesReady,{machineId:h});let ge=M.list(),_e=ge.filter(e=>e.state===`active`);if(console.info(`[boot] Extensions started: %d active`,_e.length),process.env.MAKAIO_DEBUG){let e=ge.filter(e=>e.state===`failed`);for(let e of _e)console.info(`[boot] ✓ %s (%s)`,e.displayName,e.name);for(let t of e)console.warn(`[boot] ✗ %s (%s): %s`,t.displayName,t.name,t.error??`unknown`)}T.current=M.getExtensionService(yt);let I=new ie({workerEntry:ne({moduleDir:S,mode:A.basename(S)===`src`?`source`:`dist`}),manifest:{packages:[]}}),L=new ae({id:ve,displayName:`Local (Piscina)`,runner:I});try{await we(g,L)}catch(e){throw await I.dispose().catch(()=>void 0),e}u.push(async()=>{try{await Ee(g,L.id)}finally{await I.dispose().catch(()=>void 0)}}),console.info(`[boot] Piscina thin workflow provider registered (id=%s)`,L.id),u.push(ii(g,()=>T.current?.getLoadedAdapters()??[],()=>T.current?.getAdapterInstances()??new Map,e=>M.getExtension(e)));let ye=an({bus:g,currentMachineId:h});if(u.push(ye.cleanup),await g.broadcast(B.phase.coordinatorReady,{machineId:h}),r.lanBind&&e.dispatchingAuth&&l){let t=Ro(m,l);e.dispatchingAuth.setE2EAuth(t),console.info(`[boot] E2E auth enabled (LAN mode, machineId=%s)`,h)}b=!0,await g.emit(B.ready,{machineId:h}),console.info(`[boot] Runtime ready (machineId=%s)`,h);let Se=st([...u].reverse());return{port:t,host:n,machineId:h,bus:g,coordinator:M,trayEntries:M.trayEntries,windowRegistry:M.windowRegistry,shutdown:Se}}catch(e){console.error(`[boot] Startup failed — rolling back started resources`,e);for(let e of[...u].reverse())try{await e()}catch(e){console.warn(`[boot] Rollback step error:`,e)}throw e}}async function qo(e){let t=new Mn({httpServer:e.httpServer,auth:e.auth,loopbackName:e.loopbackName??`node`}),n=e.httpServer.address();if(typeof n!=`object`||!n)throw Error(`HTTP server is not bound to a TCP address`);return Ko(t,n.port,n.address,{...e,hostCapabilities:vo(e.hostCapabilities),clientBinaryStrategyDependencies:e.clientBinaryStrategyDependencies??Zr()})}const Jo=`MAKAIO_UPSTREAM_URL`,Yo=`MAKAIO_UPSTREAM_SECRET`;function Xo(e){return new je({url:e.url,name:`upstream-telemetry-ws`,auth:e.secret===void 0?void 0:new Ae({secret:e.secret})})}function Zo(e={}){let t=e.env??process.env,n=$o(t[Yo]),r=Qo(t[Jo]);if(r===void 0){if(n!==void 0)throw Error(`${Yo} requires ${Jo}`);return}return{transport:(e.createTransport??Xo)({url:r,...n===void 0?{}:{secret:n}})}}function Qo(e){let t=e?.trim();return t===void 0||t===``?void 0:t}function $o(e){let t=e?.trim();return t===void 0||t===``?void 0:t}async function es(e){return{...await d(e),hostCapabilities:[`node`]}}const ts=ce(se);var ns=class{async resolve(e){return Xt(e,{resolveKeychain:this.resolveKeychain})}async resolveKeychain(e,t){try{let{stdout:n}=await ts(`security`,[`find-generic-password`,`-s`,e,`-a`,t,`-w`]);return n.trim()||null}catch{return null}}},rs=class{bus;fallbackProvider=new ns;channelPromise;constructor(e){this.bus=e}async resolve(e){let t=Je(e);if(t){let{configId:e,key:n}=t;for(let t=0;t<2;t++)try{return(await(await this.getChannel()).request(ye.get,{configId:e})).credentials?.[n]??null}catch(e){if(e instanceof fe&&(this.channelPromise=void 0,t===0))continue;throw e}}return e.startsWith(`account-manager:`)?(console.warn(`[StoredCredentialProvider] account-manager: refs are account identifiers and cannot be resolved to credentials. The associated adapter should authenticate via its native credential store.`),null):e.startsWith(`stored:`)?(console.warn(`[StoredCredentialProvider] Unresolvable credential ref "${e}". Only the "stored:providerConfig:" format is supported. Re-save the credential using the current format.`),null):this.fallbackProvider.resolve(e)}getChannel(){return this.channelPromise??=this.openCredentialChannel().catch(e=>{throw this.channelPromise=void 0,e}),this.channelPromise}async openCredentialChannel(){let{token:e}=await this.bus.request(ye.getChannelToken,{});return me(this.bus.getContext(),`credentials`,{token:e,transports:[]})}};async function is(e){let{db:t}=await e.request(a.database,{});return t}const as=[`default`,`import`,`require`];var os=class{frameworkDistPath=``;install(){}uninstall(){}},ss=class{frameworkDistPath;hooks;installPromise;installToken;constructor(e){this.frameworkDistPath=e}async install(){if(this.hooks)return;if(this.installPromise)return this.installPromise;let e={};this.installToken=e;let t=this.installWithToken(e);this.installPromise=t;try{await t}finally{this.installPromise===t&&(this.installPromise=void 0)}}async installWithToken(e){let{registerHooks:t}=await import(`node:module`);if(this.installToken!==e||this.hooks)return;let n=this.frameworkDistPath,r=ls(n);this.hooks=t({resolve(e,t,i){let a=cs(n,e,r);return a?{shortCircuit:!0,url:O(a).href}:i(e,t)}})}uninstall(){this.installToken=void 0,this.installPromise=void 0,this.hooks?.deregister(),this.hooks=void 0}};function cs(e,t,n){if(!t.startsWith(`@makaio/framework/`))return;let r=t.slice(18),i=r.split(`/`);if(i.length===0||i.some(e=>e.length===0||e===`.`||e===`..`||e.includes(`\\`)))return;let a=ds((n??ls(e))[`./${r}`]);if(!a)return;let o=fs(a);if(!o)return;let s=j.resolve(e,o);return ps(s,e)?s:void 0}function ls(e){let t=j.join(e,`..`,`package.json`);return us(JSON.parse(ue(t,`utf-8`)).exports)}function us(e){if(typeof e!=`object`||!e||Array.isArray(e))return{};let t={};for(let[n,r]of Object.entries(e))if(n.startsWith(`.`)){if(typeof r==`string`){t[n]=r;continue}typeof r==`object`&&r&&!Array.isArray(r)&&(t[n]=r)}return t}function ds(e){if(typeof e==`string`)return e;if(e)for(let t of as){let n=e[t];if(typeof n==`string`)return n}}function fs(e){let t=e.split(`\\`).join(`/`);if(t.startsWith(`./dist/`))return t.slice(7)}function ps(e,t){let n=j.relative(t,e);return n===``||!n.startsWith(`..`)&&!j.isAbsolute(n)}export{Mn as BusServerTransportProvider,o as ExplicitDescriptorDiscovery,yn as FileConfigStorage,wa as FileRegistryCache,s as FilesystemDescriptorDiscovery,te as InProcessWorkflowRunner,l as MAKAIO_CONFIG_FILE_ENV,u as MAKAIO_HOME_ENV,Yo as MAKAIO_UPSTREAM_SECRET_ENV,Jo as MAKAIO_UPSTREAM_URL_ENV,c as MergedDescriptorDiscovery,ns as NodeCredentialProvider,ss as NodeFrameworkModuleResolver,os as NoopFrameworkModuleResolver,a as RuntimeSubjects,rs as StoredCredentialProvider,ie as ThinWorkflowPiscinaRunner,Xa as WorkspaceRootNotFoundError,an as activateAdapterRuntimeIdentity,Wo as attachUpstreamTelemetry,qo as bootMakaioRuntime,Ko as bootMakaioRuntimeCore,jo as bridgeExtensionBrowserEntries,d as buildConfiguredRuntimeOptions,Oo as buildExtensionBrowserRollupInputName,ko as buildExtensionBrowserRuntimeEntrypoint,es as buildNodeRuntimeOptions,Cn as createHonoRouteGraph,Tn as createHttpRouteGraphBuilder,f as createMakaioConfigDiscovery,Xo as createUpstreamTelemetryTransport,p as defineMakaioConfig,C as entrypointStem,Za as findWorkspaceRoot,Qa as findWorkspaceRootInfo,is as getRuntimeDatabase,Hn as initializeNodeDatabase,T as isCliContributionLike,b as isMakaioExtensionLike,En as isMissingOptionalRuntimePackage,w as isWithinDirectory,E as loadExtensions,m as loadMakaioConfig,Ct as loadOrCreateMachineIdentity,Tt as machineKeysExist,vo as normalizeNodeHostCapabilities,h as parseMakaioConfig,rn as prepareAdapterRuntime,No as readFrameworkVersion,nn as registerAdapterNameResolver,In as resolveBundledMigrationsDir,x as resolveConventionEntrypoint,cs as resolveFrameworkSpecifier,Sn as resolveListeningPort,g as resolveMakaioConfigPath,_ as resolveMakaioHome,bn as resolveStaticModelRegistryPath,Zo as resolveUpstreamTelemetryBootOptionsFromEnv,ne as resolveWorkflowWorkerEntry,vn as runMigrations,Co as selectFrameworkCorePackages,v as shouldIncludeExtension,Dn as tryImport,Et as validateMachineKeys,xn as waitForServerListening};
|
|
119
|
+
`)}`)}};async function xa(e){try{return await P.promises.readFile(e,`utf-8`)}catch(t){if(Sa(t))return;throw Error(`Failed to read bundled model registry seed at ${e}: ${va(t)}`,{cause:t})}}function Sa(e){return ga(e)||_a(e)}var Ca=class{url;timeoutMs;constructor(e,t=1e4){let n=e.trim();if(!n)throw Error(`CdnRegistryFetcher requires a non-empty registry URL`);let r;try{r=new URL(n)}catch(e){throw Error(`CdnRegistryFetcher requires a valid registry URL: ${n}`,{cause:e})}if(r.protocol!==`http:`&&r.protocol!==`https:`)throw Error(`CdnRegistryFetcher requires an HTTP(S) registry URL: ${n}`);if(!Number.isFinite(t)||t<=0)throw Error(`CdnRegistryFetcher requires a positive finite timeoutMs, got ${t}`);this.url=r.toString(),this.timeoutMs=t}async fetch(){let e=new AbortController,t=setTimeout(()=>e.abort(),this.timeoutMs);try{let t=await fetch(this.url,{signal:e.signal});if(!t.ok)throw Error(`Failed to fetch model registry: ${t.status} ${t.statusText}`);let n=(0,$.parse)(await t.text());return dt.parse(n)}catch(e){throw e instanceof Error&&e.name===`AbortError`?Error(`Failed to fetch model registry: timed out after ${this.timeoutMs}ms`,{cause:e}):e}finally{clearTimeout(t)}}},wa=class{cachePath;trackFetchedAt;constructor(e,t={}){this.cachePath=e,this.trackFetchedAt=t.trackFetchedAt??!1}async get(){try{let e=await P.promises.readFile(this.cachePath,`utf-8`),t=Ta(JSON.parse(e)),n=dt.safeParse(t);return n.success?n.data:null}catch{return null}}async set(e){try{await P.promises.mkdir(A.dirname(this.cachePath),{recursive:!0});let t=this.trackFetchedAt?{fetchedAt:new Date().toISOString(),registry:e}:e;await P.promises.writeFile(this.cachePath,JSON.stringify(t,null,2),`utf-8`)}catch(e){console.warn(`[FileRegistryCache] Failed to write cache:`,e)}}};function Ta(e){return et(e)&&`registry`in e&&`fetchedAt`in e?e.registry:e}const Ea=D.object({name:D.string().optional(),models:D.array(ge)}),Da=D.object({name:D.string().optional(),models:D.record(D.string(),ft)}),Oa=D.object({$schema:D.literal(`makaio/model-registry/v2`).optional(),updatedAt:D.string().datetime().optional(),labs:D.record(D.string(),Ea).optional(),providers:D.record(D.string(),Da).optional()}),ka=D.object({name:D.string().optional(),models:D.array(D.record(D.string(),D.unknown()))}),Aa=D.object({name:D.string().optional(),models:D.record(D.string(),ft)});var ja=class{userModelsDir;constructor(e){this.userModelsDir=e}async fetch(){let e=Ma();return await Promise.all([this.loadLabDirectory(A.join(this.userModelsDir,`labs`),e),this.loadProviderDirectory(A.join(this.userModelsDir,`providers`),e)]),await this.loadFlatFiles(e),e}async loadLabDirectory(e,t){let n=await ya(e),r=await Promise.all(n.map(async e=>({labId:A.basename(e,`.yaml`),lab:await Ba(e,A.basename(e,`.yaml`))})));for(let{labId:e,lab:n}of r)Ga(t,e,n)}async loadProviderDirectory(e,t){let n=await ya(e),r=await Promise.all(n.map(async e=>({providerId:A.basename(e,`.yaml`),provider:await Va(e)})));for(let{providerId:e,provider:n}of r)Ka(t,e,n)}async loadFlatFiles(e){let t=await ya(this.userModelsDir);for(let n of t){let t=A.basename(n,`.yaml`),r=(0,$.parse)(await P.promises.readFile(n,`utf-8`));if(!et(r))throw Error(`Invalid model registry overlay YAML in ${n}: expected a YAML object.`);if(`labs`in r||`providers`in r){Wa(e,Oa.parse(r));continue}if(Array.isArray(r.models)){Ga(e,t,Ha(r,t));continue}if(et(r.models)){Ka(e,t,Ua(r));continue}throw Error(`Unrecognized model registry overlay shape in ${n}: expected labs, providers, or models.`)}}};function Ma(){return{labs:{},providers:{}}}function Na(e,t){return{$schema:`makaio/model-registry/v2`,updatedAt:t.updatedAt??e.updatedAt,labs:qa(Pa(e.labs,t.labs)),providers:Ja(La(e.providers,t.providers))}}function Pa(e,t){let n={...e};for(let[e,r]of Object.entries(t)){let t=n[e];n[e]=t===void 0?r:{...t,...r,models:Fa(t.models,r.models)}}return n}function Fa(e,t){let n=[...e],r=new Map(e.map((e,t)=>[e.name,t]));for(let e of t){let t=r.get(e.name);if(t===void 0){r.set(e.name,n.length),n.push(e);continue}n[t]=Ia(n[t],e)}return n}function Ia(e,t){let n={...e,...t},r=pt(e.metadata,t.metadata);return r===void 0?delete n.metadata:n.metadata=r,n}function La(e,t){let n={...e};for(let[e,r]of Object.entries(t)){let t=n[e];n[e]=t===void 0?r:{...t,...r,models:Ra(t.models,r.models)}}return n}function Ra(e,t){let n={...e};for(let[e,r]of Object.entries(t)){let t=n[e];n[e]=t===void 0?r:za(t,r)}return n}function za(e,t){let n={...e,...t},r=pt(e.metadata,t.metadata);return r===void 0?delete n.metadata:n.metadata=r,n}async function Ba(e,t){return Ha((0,$.parse)(await P.promises.readFile(e,`utf-8`)),t)}async function Va(e){return Ua((0,$.parse)(await P.promises.readFile(e,`utf-8`)))}function Ha(e,t){let n=ka.parse(e);return{...n.name===void 0?{}:{name:n.name},models:n.models.map(e=>ge.parse({...e,labId:t}))}}function Ua(e){let t=Aa.parse(e);return{...t.name===void 0?{}:{name:t.name},models:t.models}}function Wa(e,t){e.updatedAt=t.updatedAt??e.updatedAt,t.labs!==void 0&&(e.labs=Pa(e.labs,t.labs)),t.providers!==void 0&&(e.providers=La(e.providers,t.providers))}function Ga(e,t,n){e.labs=Pa(e.labs,{[t]:n})}function Ka(e,t,n){e.providers=La(e.providers,{[t]:n})}function qa(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,{...t,name:t.name??e}]))}function Ja(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,{...t,name:t.name??e}]))}var Ya=class{userModelsDir;baseFetcher;constructor(e,t){this.userModelsDir=e,this.baseFetcher=t}async fetch(){let e=await this.baseFetcher.fetch();if(await this.validateDirectory(this.userModelsDir),await this.validateDirectory(`${this.userModelsDir}/labs`),await this.validateDirectory(`${this.userModelsDir}/providers`),!await this.hasAnyOverlayFiles())return e;let t=Na(e,await new ja(this.userModelsDir).fetch());return dt.parse(t)}async validateDirectory(e){await ya(e)}async hasAnyOverlayFiles(){let e,t;try{let n=await k.readdir(this.userModelsDir,{withFileTypes:!0});e=n.map(e=>String(e.name)),t=new Map(n.map(e=>[String(e.name),[e.isFile(),e.isDirectory()]]))}catch(e){if(ga(e))return!1;throw e}return e.some(e=>{let[n,r]=t.get(e)??[!1,!1];return n&&e.endsWith(`.yaml`)||r&&(e===`labs`||e===`providers`)})}},Xa=class extends Error{constructor(e){super(`[boot] Could not find workspace root (no package.json with 'workspaces' field) starting from: ${e}`),this.name=`WorkspaceRootNotFoundError`}};function Za(e){return Qa(e).root}function Qa(e){let t=A.resolve(e);for(;;){let n=A.join(t,`package.json`);if(P.existsSync(n))try{let e=P.readFileSync(n,`utf-8`),r=JSON.parse(e);if(typeof r==`object`&&r&&`workspaces`in r)return{root:t,packageJsonPath:n,workspaces:en(r)}}catch{}let r=A.dirname(t);if(r===t)throw new Xa(e);t=r}}const $a=`MAKAIO_MODEL_REGISTRY_SOURCES`;function eo(e){let t=A.join(e.makaioHome,`models`),n=A.join(e.makaioHome,`cache`,`model-registry`);return new Ya(t,new ut(to(e).map(e=>io(e,n))))}function to(e){let t=ro(e.srcDir,e.cwd),n=t.slice(0,-1),r=t.slice(n.length);return so([...no(e.env??process.env),...e.seedPaths??[],...n,e.cdnRegistryUrl??`https://makaio-ai.github.io/makaio-framework/model-registry.yaml`,...e.fallbackSeedPaths??[],...r])}function no(e){let t=e[$a]?.trim();if(!t)return[];let n;try{n=t.startsWith(`[`)?JSON.parse(t):t}catch(e){throw Error(`[boot] ${$a} must be a JSON string array or a single source string`,{cause:e})}let r=Array.isArray(n)?n:[n];if(!r.every(e=>typeof e==`string`))throw Error(`[boot] ${$a} entries must be strings`);return r.map(e=>e.trim()).filter(e=>e.length>0)}function ro(e,t=process.cwd()){let n=A.resolve(e,`static/model-registry.yaml`),r=A.resolve(t,`static/model-registry.yaml`);try{return so([r,A.resolve(Za(e),`static/model-registry.yaml`),n])}catch(e){if(e instanceof Xa)return so([r,n]);throw e}}function io(e,t){let n=oo(e);return n?.protocol===`http:`||n?.protocol===`https:`?new lt(new Ca(n.href),new wa(A.join(t,`${lo(n.href)}.json`),{trackFetchedAt:!0})):new ba(ao(e,n))}function ao(e,t){if(t?.protocol===`file:`)return le(t);if(t!==void 0)throw Error(`[boot] Unsupported model registry source protocol "${t.protocol}" for ${e}`);return A.isAbsolute(e)?e:A.resolve(e)}function oo(e){try{return new URL(e)}catch{return}}function so(e){let t=new Set,n=[];for(let r of e){let e=co(r);t.has(e)||(t.add(e),n.push(r))}return n}function co(e){let t=oo(e);return t?.protocol===`file:`?`file:${A.resolve(le(t))}`:t===void 0?`file:${A.resolve(e)}`:`${t.protocol}//${t.host}${t.pathname}${t.search}`}function lo(e){return N(`sha256`).update(e).digest(`hex`).slice(0,16)}async function uo(e){let t=A.resolve(e.frameworkPackagePath);await fo(t);let n=A.join(e.makaioHome,`node_modules`,`@makaio`),r=A.join(n,`framework`);await k.mkdir(n,{recursive:!0}),!await po(r,t)&&(await k.rm(r,{recursive:!0,force:!0}),await k.symlink(t,r,process.platform===`win32`?`junction`:`dir`))}async function fo(e){let t=A.join(e,`package.json`),n=await k.readFile(t,`utf-8`);if(JSON.parse(n).name!==`@makaio/framework`)throw Error(`Expected @makaio/framework package at ${e}`)}async function po(e,t){try{return(await k.lstat(e)).isSymbolicLink()?await k.realpath(e)===await k.realpath(t):!1}catch(e){if(mo(e))return!1;throw e}}function mo(e){return typeof e==`object`&&!!e&&`code`in e&&e.code===`ENOENT`}function ho(e,t){e.push(...go(t))}function go(e){return e===void 0?[]:typeof e==`function`?[e]:[...e]}function _o(e,t=[]){let n=new Set([e]),r=new Set,i=new Map;for(let e of t)typeof e==`string`?n.add(e):(r.add(e.id),e.version!==void 0&&i.set(e.id,e.version));return{hosts:n,capabilities:r,...i.size>0?{capabilityVersions:i}:{}}}function vo(e=[]){return e.some(e=>typeof e==`string`&&e===`node`)?e:[`node`,...e]}function yo(e){return at(st(bo(e.packages,e.configProvider),e.surface,e.runtimeEnvironment))}function bo(e,t){return t?e.filter(e=>t.loadEnabled(e.name)!==!1):e}function xo(e,t){return e.filter(e=>e.runtimeOwnership?.[t]===!0).map(e=>e.name)}function So(e,t){let n=xo(e,t);if(n.length>1)throw Error(`Multiple extensions own runtimeOwnership.${t}: ${n.join(`, `)}`)}function Co(e){return e===!0||(So(e,`sessionOrchestrator`),xo(e,`sessionOrchestrator`).length===0)?Ut:Ut.filter(e=>e.name!==Pt.name)}function wo(e,t,n){let r=[];try{for(let i of e){let e=i.runtimeBoot;e&&ho(r,e.configure({bus:t,registerContributionProcessor:e=>{r.push(n.registerContributionProcessor(e))},forEachActiveExtension:e=>{n.forEachActiveExtension(e)}}))}}catch(e){let t=[];for(let e of[...r].reverse())try{e()}catch(e){t.push(e)}throw t.length>0?AggregateError([e,...t],`Extension boot contribution failed and rollback cleanup reported additional errors`,{cause:e}):e}return r}function To(){let e=process.env.MAKAIO_SKIP_EXTENSIONS;if(!e)return new Set;let t=e.split(`,`).map(e=>e.trim()).filter(Boolean);return new Set(t)}function Eo(e,t){let n=t.endsWith(`/`)?t:`${t}/`,r=tn({root:e,rewriteRequestPath:e=>e.slice(n.length-1)});return e=>{e.use(`${t}/*`,r)}}function Do(e){return`/extensions/${e}/browser`}function Oo(e,t){return`extensions/${e}/browser/${Ao(t)}`}function ko(e,t){return`/${Oo(e,t)}.js`}function Ao(e){let t=e.replaceAll(j.win32.sep,j.posix.sep),n=j.posix.basename(t),r=j.posix.extname(n);return r?n.slice(0,-r.length):n}function jo(e,t,n={}){let{createMount:r=Eo}=n,i=new Map(e.map(e=>[e.descriptor.name,e]));return t.map(e=>{let t=i.get(e.name);if(!t?.descriptor.entrypoints?.browser)return e;if(e.browser)return console.warn(`[extensions] ${e.name}: server entry already declares browser, skipping browser bridge`),e;if(e.http)return console.warn(`[extensions] ${e.name}: server entry already declares http, skipping browser bridge`),e;let n=t.descriptor.entrypoints.browser,a=C(`browser`,n),o=x(`browser`,n,t.extensionPath);if(!o)return console.warn(`[extensions] ${e.name}: browser entry has no resolvable candidate within extension directory, skipping bridge`),e;let s=A.dirname(o),c=Do(e.name),l=ko(e.name,a);return{...e,browser:{entrypoint:l},http:{prefix:c,mount:r(s,c)}}})}function Mo(e,t={}){let{createMount:n=Eo,frameworkVersion:r}=t,i=[],a=new Map;for(let t of e){let{descriptor:e,extensionPath:o}=t;if(r!==void 0&&!S(t,r)||e.execution===`detached`||e.entrypoints.server||!e.entrypoints.browser)continue;let s=e.entrypoints.browser,c=C(`browser`,s),l=x(`browser`,s,o);if(!l){console.warn(`[extensions] ${e.name}: browser entry has no resolvable candidate within extension directory, skipping synthesis`);continue}let u=A.dirname(l),d=Do(e.name),f=ko(e.name,c);i.push({...y(e),browser:{entrypoint:f},http:{prefix:d,mount:n(u,d)}}),e.config?.defaults&&a.set(e.name,e.config.defaults)}return{packages:i,configDefaults:a}}async function No(){let e=A.dirname(le(import.meta.url)),t=A.resolve(e,`..`,`package.json`),n=await k.readFile(t,`utf-8`),r=JSON.parse(n);if(typeof r!=`object`||!r||!(`version`in r)||typeof r.version!=`string`)throw Error(`[boot] package.json at ${t} has no string 'version' field`);return r.version}async function Po(e){let t={packages:[],configDefaults:new Map},n=[],r=e.frameworkVersion??await No();try{if(n=await e.extensionOptions.extensions.discover(),n=Fo(n,e.skipExtensions),process.env.MAKAIO_DEBUG){console.info(`[boot] Discovered %d extension descriptor(s):`,n.length);for(let e of n)console.info(`[boot] - %s (%s)`,e.descriptor.displayName??e.descriptor.name,e.source)}}catch(e){console.warn(`[boot] Extension discovery failed, skipping:`,e instanceof Error?e.message:e)}let i=n.filter(e=>S(e,r));if(i.length>0)try{t=await E(i,{frameworkVersion:r})}catch(e){console.warn(`[boot] Extension loading failed, skipping:`,e instanceof Error?e.message:e)}let a={...e.createMount?{createMount:e.createMount}:{},frameworkVersion:r},o=jo(i,t.packages,a),s=Mo(i,a),c=await ee(i,[...o,...s.packages],{frameworkVersion:r});return{discovered:n,extensionLoadResult:t,browserOnlyResult:s,extensionsWithCli:c,allExtensionPackages:c.packages}}function Fo(e,t){if(t.size===0)return e;let n=new Set(e.map(e=>e.descriptor.name)),r=[...t].filter(e=>!n.has(e));r.length&&console.warn(`[boot] MAKAIO_SKIP_EXTENSIONS: no matching extension(s): %s`,r.join(`, `));let i=new Set([...t].filter(e=>n.has(e))),a=e.filter(e=>!i.has(e.descriptor.name));return a.length<e.length&&console.info(`[boot] MAKAIO_SKIP_EXTENSIONS filtered %d extension(s): %s`,e.length-a.length,[...i].join(`, `)),a}async function Io(e,t){let n=Ge(e),r=n.dialect,i=new Set;for(let a of t){if(i.has(a.migrationSourceId))continue;i.add(a.migrationSourceId);let t=Lo(a.migrationSourceId,n);process.env.MAKAIO_DEBUG===`true`&&console.info(`[boot] Running migrations for package: ${a.name}`);let o;try{o=cn({migrationsDir:a.migrationsPathByDialect?.[r]??a.migrationsPath,migrationSourceId:a.migrationSourceId,expectedDialect:r})}catch(e){throw e instanceof Error&&e.name===`MigrationDialectMismatchError`?Error(`Extension '${a.name}' ships migrations that do not match the '${r}' database dialect. Disable this extension on '${r}' hosts or ship a migration chain generated for '${r}'.`,{cause:e}):e}await _n(e,o,t)}}function Lo(e,t){let n=N(`sha256`).update(e).digest(`hex`).slice(0,16);return t.migrations.extensionLedgerName(n)}function Ro(e,t){return new ke({signingKeyPair:e.signingKeyPair,identityId:e.machineId,getPeerSigningKey:t})}const zo=Se.fact.$meta.namespace,Bo=Se.fact.subject;function Vo(e,t){if(t.transport!==void 0||t.localOnly===!0)return!1;let n=`${t.namespace}.${t.subject}`,r=e.getContext().namespaceRegistry;return!r.isLocalSubject(n)&&!r.isCollectorOnlySubject(n)}function Ho(e){return e.type===`event`?{type:`event`,namespace:e.namespace,subject:e.subject,payload:e.payload,messageId:e.messageId,...e.correlationId===void 0?{}:{correlationId:e.correlationId}}:{type:e.type,namespace:e.namespace,subject:e.subject,payload:e.payload,messageId:e.messageId,correlationId:e.correlationId??e.messageId}}async function Uo(e,t,n,r,i){let a=Ho(i),o=he({message:a,direction:`outbound`,observedAt:Date.now(),machineId:n,namespaceRegistry:t.getContext().namespaceRegistry,projectorRegistry:r.projectorRegistry});for(let t of o)await e.send({type:`event`,namespace:zo,subject:Bo,payload:t,messageId:`${a.messageId}:telemetry:${t.factId}`,correlationId:a.correlationId})}async function Wo(e,t,n){let r=n.transport;await r.connect();let i;try{i=e.observeMessages(i=>{Vo(e,i)&&Uo(r,e,t,n,i).catch(e=>{console.error(`[upstream-telemetry] Failed to export subject telemetry fact`,e)})})}catch(e){throw await r.disconnect().catch(()=>void 0),e}return{shutdown:async()=>{i(),await r.disconnect()}}}function Go(e,t){let n=e===`0.0.0.0`?`127.0.0.1`:e===`::`?`::1`:e;return`ws://${n.includes(`:`)&&!n.startsWith(`[`)?`[${n}]`:n}:${t}/bus`}async function Ko(e,t,n,r){let o=r.makaioHome??_(),s=Pn(r,o),c=To(),l=r.peerSigningKeyResolver,u=[];try{if(r.lanBind&&e.dispatchingAuth&&!l)throw Error(`[boot] peerSigningKeyResolver is required when lanBind is enabled`);let d=r.configProvider,f=d??new Nn(new yn(o),o),p=await f.getConfig({mode:`local`}),m=r.machineIdentity??await wt(A.join(o,`keys`)),h=d?await d.getMachineId():m.machineId;if(m.machineId!==h)throw Error(`[boot] Config provider machineId '${h}' does not match runtime machine identity '${m.machineId}'`);console.info(`[boot] Config resolved (mode=%s)`,p.mode);let g=pe;if(g.registerNamespaces(be),g.registerNamespaces(xe),g.registerNamespaces([tt,kt,rt,it,i]),g.registerNamespaces(Nt),g.registerNamespaces(r.hostNamespaces??[]),process.env.MAKAIO_DEBUG===`true`){let e=g.__onAny(e=>{let t;try{t=JSON.stringify(e.payload)}catch{t=`[unserializable payload]`}console.debug(`[bus-server] subject: ${e.subject}, payload: ${t}`)});u.push(e)}if(r.upstreamTelemetry){let e=await Wo(g,h,r.upstreamTelemetry);u.push(e.shutdown)}await g.emit(B.phase.busCreated,{machineId:h}),await e.connect(g,h),u.push(()=>e.disconnect()),console.info(`[boot] Transport ready on %s:%d`,n,t);try{r.onTransportReady?.({port:t,host:n})}catch(e){console.warn(`[boot] onTransportReady callback failed:`,e)}let{databaseClient:_}=await Hn({makaioHome:o,migrationsDir:r.centralMigrationsDir,database:r.database}),v=_.db;console.info(`[boot] Database initialized`),u.push(()=>_.close());let y=[g.on(a.database,e=>{e.setResult({db:v})}),g.on(a.machineIdentity,e=>{e.setResult({identity:m})}),g.on(a.busPort,e=>{e.setResult({port:t})})],b=!1,x=g.on(B.isReady,e=>{e.setResult({ready:b,machineId:h})});u.push(()=>{b=!1,x();for(let e of y)e()}),await g.emit(B.phase.coreReady,{machineId:h}),console.info(`[boot] Core ready (machineId=%s)`,h);let S=A.dirname(le(import.meta.url)),C=si(g,f);u.push(C),console.info(`[boot] Config handlers registered`),r.frameworkPackagePath&&(await uo({makaioHome:o,frameworkPackagePath:r.frameworkPackagePath}),console.info(`[boot] Framework package linked for extension resolution`));let w=r.frameworkModuleResolver;if(w){try{await w.install()}catch(e){throw await Promise.resolve(w.uninstall()).catch(()=>void 0),e}u.push(()=>w.uninstall()),console.info(`[boot] Framework module resolver installed`)}let T={current:void 0},E=eo({makaioHome:o,srcDir:S,fallbackSeedPaths:r.modelRegistryFallbackSeedPaths}),ee=process.env.USER??process.env.USERNAME??`unknown`;try{ee=Qe.userInfo().username}catch{}let te=r.frameworkVersion??await No(),{extensionLoadResult:oe,browserOnlyResult:D,extensionsWithCli:se,allExtensionPackages:ce}=await Po({extensionOptions:s,skipExtensions:c,frameworkVersion:te,createMount:r.createMount}),O=_o(process.platform,r.hostCapabilities),k=yo({packages:ce,configProvider:r.extensionConfigProvider,surface:r.surface??`headless`,runtimeEnvironment:O}),j=Go(n,t),M=new nt(g,{surface:r.surface??`headless`,db:v,extensionContextBase:{platform:process.platform,homedir:Qe.homedir(),makaioHome:o,username:ee,machineId:m.machineId,busUrl:j,tryImport:Dn},runtimeEnvironment:O,launcherCommand:r.launcherCommand,loadConfig:r.extensionConfigProvider?e=>r.extensionConfigProvider.loadConfig(e):void 0,loadEnabled:r.extensionConfigProvider?e=>r.extensionConfigProvider.loadEnabled(e):void 0,runMigrations:e=>Io(v,e)}),N=r.adapterConfigRepository??new bt({providerConfigsDir:A.join(o,`provider-configs`),adaptersDir:A.join(o,`adapters`)}),P=[Wr,mt({definitions:k.flatMap(e=>e.clients??[]),strategyDependencies:r.clientBinaryStrategyDependencies,postInstallHandlers:r.clientBinaryPostInstallHandlers})];r.enablePackageManager!==!1&&P.push(Dr({frameworkPeerRange:`^${te}`,frameworkPackagePath:r.frameworkPackagePath,devPortalPackages:r.devPortalPackages}));let F={cwd:process.cwd()},ue=re({busUrl:j,runtimeModuleDir:S,platformDefaults:F,workflowRunner:r.workflowRunner,makaioHome:o,bus:g}),{adapterSubsystemPackage:de}=rn({coordinator:M,configRepository:N,platformDefaults:F});if(P.push(de,...Co(k),Kt(ue),Rt(E),Gt),process.platform===`darwin`){let{platformMacOSPackage:e}=await import(`../src-_VODAJnf.mjs`);P.push(e)}let fe=[...P,...k],me=new Set(fe.map(e=>e.name)),he=ai(oi(oe.configDefaults,D.configDefaults,se.configDefaults,r.packageConfigDefaults??new Map),me);M.load(fe,he),M.registerContributionProcessor(Wt()),M.registerContributionProcessor(Ft()),M.registerContributionProcessor(It()),M.registerContributionProcessor(Lt()),M.registerContributionProcessor(zt()),M.registerContributionProcessor(Bt()),M.registerContributionProcessor(Ht()),M.registerContributionProcessor(Vt()),r.routeGraphBuilder&&M.registerContributionProcessor(Or(r.routeGraphBuilder)),ho(u,wo(fe,g,M)),u.push(()=>M.shutdown()),ho(u,r.configureCoordinator?.({bus:g,coordinator:M,registerContributionProcessor:e=>{M.registerContributionProcessor(e)},getAdapterSubsystemService:()=>M.getExtensionService(yt)})),await M.startAll(),await g.emit(B.phase.servicesReady,{machineId:h});let ge=M.list(),_e=ge.filter(e=>e.state===`active`);if(console.info(`[boot] Extensions started: %d active`,_e.length),process.env.MAKAIO_DEBUG){let e=ge.filter(e=>e.state===`failed`);for(let e of _e)console.info(`[boot] ✓ %s (%s)`,e.displayName,e.name);for(let t of e)console.warn(`[boot] ✗ %s (%s): %s`,t.displayName,t.name,t.error??`unknown`)}T.current=M.getExtensionService(yt);let I=new ie({workerEntry:ne({moduleDir:S,mode:A.basename(S)===`src`?`source`:`dist`}),manifest:{packages:[]}}),L=new ae({id:ve,displayName:`Local (Piscina)`,runner:I});try{await we(g,L)}catch(e){throw await I.dispose().catch(()=>void 0),e}u.push(async()=>{try{await Ee(g,L.id)}finally{await I.dispose().catch(()=>void 0)}}),console.info(`[boot] Piscina thin workflow provider registered (id=%s)`,L.id),u.push(ii(g,()=>T.current?.getLoadedAdapters()??[],()=>T.current?.getAdapterInstances()??new Map,e=>M.getExtension(e)));let ye=an({bus:g,currentMachineId:h});if(u.push(ye.cleanup),await g.broadcast(B.phase.coordinatorReady,{machineId:h}),r.lanBind&&e.dispatchingAuth&&l){let t=Ro(m,l);e.dispatchingAuth.setE2EAuth(t),console.info(`[boot] E2E auth enabled (LAN mode, machineId=%s)`,h)}b=!0,await g.emit(B.ready,{machineId:h}),console.info(`[boot] Runtime ready (machineId=%s)`,h);let Se=ot([...u].reverse());return{port:t,host:n,machineId:h,bus:g,coordinator:M,trayEntries:M.trayEntries,windowRegistry:M.windowRegistry,shutdown:Se}}catch(e){console.error(`[boot] Startup failed — rolling back started resources`,e);for(let e of[...u].reverse())try{await e()}catch(e){console.warn(`[boot] Rollback step error:`,e)}throw e}}async function qo(e){let t=new Mn({httpServer:e.httpServer,auth:e.auth,loopbackName:e.loopbackName??`node`}),n=e.httpServer.address();if(typeof n!=`object`||!n)throw Error(`HTTP server is not bound to a TCP address`);return Ko(t,n.port,n.address,{...e,hostCapabilities:vo(e.hostCapabilities),clientBinaryStrategyDependencies:e.clientBinaryStrategyDependencies??Zr()})}const Jo=`MAKAIO_UPSTREAM_URL`,Yo=`MAKAIO_UPSTREAM_SECRET`;function Xo(e){return new je({url:e.url,name:`upstream-telemetry-ws`,auth:e.secret===void 0?void 0:new Ae({secret:e.secret})})}function Zo(e={}){let t=e.env??process.env,n=$o(t[Yo]),r=Qo(t[Jo]);if(r===void 0){if(n!==void 0)throw Error(`${Yo} requires ${Jo}`);return}return{transport:(e.createTransport??Xo)({url:r,...n===void 0?{}:{secret:n}})}}function Qo(e){let t=e?.trim();return t===void 0||t===``?void 0:t}function $o(e){let t=e?.trim();return t===void 0||t===``?void 0:t}async function es(e){return{...await d(e),hostCapabilities:[`node`]}}const ts=ce(se);var ns=class{async resolve(e){return Xt(e,{resolveKeychain:this.resolveKeychain})}async resolveKeychain(e,t){try{let{stdout:n}=await ts(`security`,[`find-generic-password`,`-s`,e,`-a`,t,`-w`]);return n.trim()||null}catch{return null}}},rs=class{bus;fallbackProvider=new ns;channelPromise;constructor(e){this.bus=e}async resolve(e){let t=Je(e);if(t){let{configId:e,key:n}=t;for(let t=0;t<2;t++)try{return(await(await this.getChannel()).request(ye.get,{configId:e})).credentials?.[n]??null}catch(e){if(e instanceof fe&&(this.channelPromise=void 0,t===0))continue;throw e}}return e.startsWith(`account-manager:`)?(console.warn(`[StoredCredentialProvider] account-manager: refs are account identifiers and cannot be resolved to credentials. The associated adapter should authenticate via its native credential store.`),null):e.startsWith(`stored:`)?(console.warn(`[StoredCredentialProvider] Unresolvable credential ref "${e}". Only the "stored:providerConfig:" format is supported. Re-save the credential using the current format.`),null):this.fallbackProvider.resolve(e)}getChannel(){return this.channelPromise??=this.openCredentialChannel().catch(e=>{throw this.channelPromise=void 0,e}),this.channelPromise}async openCredentialChannel(){let{token:e}=await this.bus.request(ye.getChannelToken,{});return me(this.bus.getContext(),`credentials`,{token:e,transports:[]})}};async function is(e){let{db:t}=await e.request(a.database,{});return t}const as=[`default`,`import`,`require`];var os=class{frameworkDistPath=``;install(){}uninstall(){}},ss=class{frameworkDistPath;hooks;installPromise;installToken;constructor(e){this.frameworkDistPath=e}async install(){if(this.hooks)return;if(this.installPromise)return this.installPromise;let e={};this.installToken=e;let t=this.installWithToken(e);this.installPromise=t;try{await t}finally{this.installPromise===t&&(this.installPromise=void 0)}}async installWithToken(e){let{registerHooks:t}=await import(`node:module`);if(this.installToken!==e||this.hooks)return;let n=this.frameworkDistPath,r=ls(n);this.hooks=t({resolve(e,t,i){let a=cs(n,e,r);return a?{shortCircuit:!0,url:O(a).href}:i(e,t)}})}uninstall(){this.installToken=void 0,this.installPromise=void 0,this.hooks?.deregister(),this.hooks=void 0}};function cs(e,t,n){if(!t.startsWith(`@makaio/framework/`))return;let r=t.slice(18),i=r.split(`/`);if(i.length===0||i.some(e=>e.length===0||e===`.`||e===`..`||e.includes(`\\`)))return;let a=ds((n??ls(e))[`./${r}`]);if(!a)return;let o=fs(a);if(!o)return;let s=j.resolve(e,o);return ps(s,e)?s:void 0}function ls(e){let t=j.join(e,`..`,`package.json`);return us(JSON.parse(ue(t,`utf-8`)).exports)}function us(e){if(typeof e!=`object`||!e||Array.isArray(e))return{};let t={};for(let[n,r]of Object.entries(e))if(n.startsWith(`.`)){if(typeof r==`string`){t[n]=r;continue}typeof r==`object`&&r&&!Array.isArray(r)&&(t[n]=r)}return t}function ds(e){if(typeof e==`string`)return e;if(e)for(let t of as){let n=e[t];if(typeof n==`string`)return n}}function fs(e){let t=e.split(`\\`).join(`/`);if(t.startsWith(`./dist/`))return t.slice(7)}function ps(e,t){let n=j.relative(t,e);return n===``||!n.startsWith(`..`)&&!j.isAbsolute(n)}export{Mn as BusServerTransportProvider,o as ExplicitDescriptorDiscovery,yn as FileConfigStorage,wa as FileRegistryCache,s as FilesystemDescriptorDiscovery,te as InProcessWorkflowRunner,l as MAKAIO_CONFIG_FILE_ENV,u as MAKAIO_HOME_ENV,Yo as MAKAIO_UPSTREAM_SECRET_ENV,Jo as MAKAIO_UPSTREAM_URL_ENV,c as MergedDescriptorDiscovery,ns as NodeCredentialProvider,ss as NodeFrameworkModuleResolver,os as NoopFrameworkModuleResolver,a as RuntimeSubjects,rs as StoredCredentialProvider,ie as ThinWorkflowPiscinaRunner,Xa as WorkspaceRootNotFoundError,an as activateAdapterRuntimeIdentity,Wo as attachUpstreamTelemetry,qo as bootMakaioRuntime,Ko as bootMakaioRuntimeCore,jo as bridgeExtensionBrowserEntries,d as buildConfiguredRuntimeOptions,Oo as buildExtensionBrowserRollupInputName,ko as buildExtensionBrowserRuntimeEntrypoint,es as buildNodeRuntimeOptions,Cn as createHonoRouteGraph,Tn as createHttpRouteGraphBuilder,f as createMakaioConfigDiscovery,Xo as createUpstreamTelemetryTransport,p as defineMakaioConfig,C as entrypointStem,Za as findWorkspaceRoot,Qa as findWorkspaceRootInfo,is as getRuntimeDatabase,Hn as initializeNodeDatabase,T as isCliContributionLike,b as isMakaioExtensionLike,En as isMissingOptionalRuntimePackage,w as isWithinDirectory,E as loadExtensions,m as loadMakaioConfig,Ct as loadOrCreateMachineIdentity,Tt as machineKeysExist,vo as normalizeNodeHostCapabilities,h as parseMakaioConfig,rn as prepareAdapterRuntime,No as readFrameworkVersion,nn as registerAdapterNameResolver,In as resolveBundledMigrationsDir,x as resolveConventionEntrypoint,cs as resolveFrameworkSpecifier,Sn as resolveListeningPort,g as resolveMakaioConfigPath,_ as resolveMakaioHome,bn as resolveStaticModelRegistryPath,Zo as resolveUpstreamTelemetryBootOptionsFromEnv,ne as resolveWorkflowWorkerEntry,vn as runMigrations,Co as selectFrameworkCorePackages,v as shouldIncludeExtension,Dn as tryImport,Et as validateMachineKeys,xn as waitForServerListening};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { D as WorkflowWorkerEntryMode, O as WorkflowWorkerEntryResolverOptions, _ as ThinWorkflowPiscinaRunnerOptions, a as InProcessWorkflowRunnerOptions, c as WorkerNodeRunner, d as NodeWorkflowRunnerPackageOptions, f as createNodeWorkflowRunner, g as RuntimeLoadedWorkflow, h as IWorkflowRunner, i as InProcessWorkflowRunner, k as resolveWorkflowWorkerEntry, l as WorkerNodeRunnerOptions, m as ThinWorkflowPiscinaRunner, n as loadWorkflowModules, o as PiscinaThinWorkflowProvider, p as createNodeWorkflowRunnerPackageOptions, r as loadWorkflowFromConfig, s as PiscinaThinWorkflowProviderOptions, t as loadWorkflowModule, u as CreateNodeWorkflowRunnerPackageOptionsParams, v as WorkflowRunResult } from "../../index-
|
|
1
|
+
import { D as WorkflowWorkerEntryMode, O as WorkflowWorkerEntryResolverOptions, _ as ThinWorkflowPiscinaRunnerOptions, a as InProcessWorkflowRunnerOptions, c as WorkerNodeRunner, d as NodeWorkflowRunnerPackageOptions, f as createNodeWorkflowRunner, g as RuntimeLoadedWorkflow, h as IWorkflowRunner, i as InProcessWorkflowRunner, k as resolveWorkflowWorkerEntry, l as WorkerNodeRunnerOptions, m as ThinWorkflowPiscinaRunner, n as loadWorkflowModules, o as PiscinaThinWorkflowProvider, p as createNodeWorkflowRunnerPackageOptions, r as loadWorkflowFromConfig, s as PiscinaThinWorkflowProviderOptions, t as loadWorkflowModule, u as CreateNodeWorkflowRunnerPackageOptionsParams, v as WorkflowRunResult } from "../../index-ntS1EXlf.mjs";
|
|
2
2
|
export { CreateNodeWorkflowRunnerPackageOptionsParams, IWorkflowRunner, InProcessWorkflowRunner, InProcessWorkflowRunnerOptions, NodeWorkflowRunnerPackageOptions, PiscinaThinWorkflowProvider, PiscinaThinWorkflowProviderOptions, RuntimeLoadedWorkflow, ThinWorkflowPiscinaRunner, ThinWorkflowPiscinaRunnerOptions, WorkerNodeRunner, WorkerNodeRunnerOptions, WorkflowRunResult, WorkflowWorkerEntryMode, WorkflowWorkerEntryResolverOptions, createNodeWorkflowRunner, createNodeWorkflowRunnerPackageOptions, loadWorkflowFromConfig, loadWorkflowModule, loadWorkflowModules, resolveWorkflowWorkerEntry };
|
|
@@ -258,7 +258,7 @@ declare const sessions: _$drizzle_orm_sqlite_core0.SQLiteTableWithColumns<{
|
|
|
258
258
|
tableName: "sessions";
|
|
259
259
|
dataType: "string";
|
|
260
260
|
columnType: "SQLiteText";
|
|
261
|
-
data: "
|
|
261
|
+
data: "active" | "archived" | "closed" | "discovered";
|
|
262
262
|
driverParam: string;
|
|
263
263
|
notNull: true;
|
|
264
264
|
hasDefault: false;
|
|
@@ -372,7 +372,7 @@ declare const sessions: _$drizzle_orm_sqlite_core0.SQLiteTableWithColumns<{
|
|
|
372
372
|
tableName: "sessions";
|
|
373
373
|
dataType: "string";
|
|
374
374
|
columnType: "SQLiteText";
|
|
375
|
-
data: "fork" | "
|
|
375
|
+
data: "fork" | "branch" | "subagent" | "compress" | "rewrite" | "coordinator" | "aside";
|
|
376
376
|
driverParam: string;
|
|
377
377
|
notNull: false;
|
|
378
378
|
hasDefault: false;
|
|
@@ -1130,7 +1130,7 @@ declare const agents: _$drizzle_orm_sqlite_core0.SQLiteTableWithColumns<{
|
|
|
1130
1130
|
tableName: "agents";
|
|
1131
1131
|
dataType: "string";
|
|
1132
1132
|
columnType: "SQLiteText";
|
|
1133
|
-
data: "
|
|
1133
|
+
data: "active" | "idle" | "dead" | "disposed";
|
|
1134
1134
|
driverParam: string;
|
|
1135
1135
|
notNull: true;
|
|
1136
1136
|
hasDefault: false;
|
|
@@ -45,17 +45,17 @@ type SubagentTemplateSummary = z.infer<typeof SubagentTemplateSummarySchema>;
|
|
|
45
45
|
declare const SubagentTemplateCreateSchema: z.ZodObject<{
|
|
46
46
|
name: z.ZodString;
|
|
47
47
|
providerConfigId: z.ZodOptional<z.ZodString>;
|
|
48
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
49
|
+
adapterName: z.ZodString;
|
|
48
50
|
model: z.ZodOptional<z.ZodString>;
|
|
49
51
|
systemPrompt: z.ZodOptional<z.ZodString>;
|
|
50
52
|
allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
51
53
|
disallowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
52
|
-
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
53
54
|
allowedDirectories: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
54
55
|
contextMode: z.ZodDefault<z.ZodEnum<{
|
|
55
56
|
fork: "fork";
|
|
56
57
|
fresh: "fresh";
|
|
57
58
|
}>>;
|
|
58
|
-
adapterName: z.ZodString;
|
|
59
59
|
}, z.core.$strip>;
|
|
60
60
|
type SubagentTemplateCreate = z.infer<typeof SubagentTemplateCreateSchema>;
|
|
61
61
|
/**
|
|
@@ -130,17 +130,17 @@ declare const SubagentTemplateSettingsSchemas: {
|
|
|
130
130
|
request: z.ZodObject<{
|
|
131
131
|
name: z.ZodString;
|
|
132
132
|
providerConfigId: z.ZodOptional<z.ZodString>;
|
|
133
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
134
|
+
adapterName: z.ZodString;
|
|
133
135
|
model: z.ZodOptional<z.ZodString>;
|
|
134
136
|
systemPrompt: z.ZodOptional<z.ZodString>;
|
|
135
137
|
allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
136
138
|
disallowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
137
|
-
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
138
139
|
allowedDirectories: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
139
140
|
contextMode: z.ZodDefault<z.ZodEnum<{
|
|
140
141
|
fork: "fork";
|
|
141
142
|
fresh: "fresh";
|
|
142
143
|
}>>;
|
|
143
|
-
adapterName: z.ZodString;
|
|
144
144
|
}, z.core.$strip>;
|
|
145
145
|
response: z.ZodObject<{
|
|
146
146
|
id: z.ZodString;
|
|
@@ -191,8 +191,8 @@ declare const SubagentTemplateInstanceSchema: z.ZodObject<{
|
|
|
191
191
|
status: z.ZodEnum<{
|
|
192
192
|
completed: "completed";
|
|
193
193
|
cancelled: "cancelled";
|
|
194
|
-
failed: "failed";
|
|
195
194
|
running: "running";
|
|
195
|
+
failed: "failed";
|
|
196
196
|
waiting_input: "waiting_input";
|
|
197
197
|
}>;
|
|
198
198
|
createdAt: z.ZodString;
|
|
@@ -222,8 +222,8 @@ declare const SubagentTemplateInstanceStatusSchema: z.ZodObject<{
|
|
|
222
222
|
status: z.ZodEnum<{
|
|
223
223
|
completed: "completed";
|
|
224
224
|
cancelled: "cancelled";
|
|
225
|
-
failed: "failed";
|
|
226
225
|
running: "running";
|
|
226
|
+
failed: "failed";
|
|
227
227
|
waiting_input: "waiting_input";
|
|
228
228
|
}>;
|
|
229
229
|
result: z.ZodOptional<z.ZodString>;
|
|
@@ -274,8 +274,8 @@ declare const SubagentTemplateKernelSchemas: {
|
|
|
274
274
|
status: z.ZodEnum<{
|
|
275
275
|
completed: "completed";
|
|
276
276
|
cancelled: "cancelled";
|
|
277
|
-
failed: "failed";
|
|
278
277
|
running: "running";
|
|
278
|
+
failed: "failed";
|
|
279
279
|
waiting_input: "waiting_input";
|
|
280
280
|
}>;
|
|
281
281
|
result: z.ZodOptional<z.ZodString>;
|