@rizom/brain 0.2.0-alpha.691 → 0.2.0-alpha.692
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/brain.js +16 -16
- package/dist/chunks/{app-zb4wkm3j.js → app-223hjhs8.js} +2 -2
- package/dist/chunks/{index-41mdbfrk.js → index-6q9qf483.js} +3 -3
- package/dist/chunks/{index-41mdbfrk.js.map → index-6q9qf483.js.map} +1 -1
- package/dist/chunks/index-zxffbhsj.js +7 -0
- package/dist/chunks/index-zxffbhsj.js.map +11 -0
- package/dist/chunks/{package-tvdk2gte.js → package-tn24s06v.js} +3 -3
- package/dist/chunks/{package-tvdk2gte.js.map → package-tn24s06v.js.map} +1 -1
- package/dist/model.js +14 -14
- package/dist/model.js.map +1 -1
- package/dist/testing.js +1 -1
- package/package.json +1 -1
- package/dist/chunks/index-h2tqd54z.js +0 -7
- package/dist/chunks/index-h2tqd54z.js.map +0 -11
- /package/dist/chunks/{app-zb4wkm3j.js.map → app-223hjhs8.js.map} +0 -0
package/dist/testing.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{O as k,P as V,Q as U}from"./chunks/index-
|
|
2
|
+
import{O as k,P as V,Q as U}from"./chunks/index-6q9qf483.js";import{Ba as N,Ca as O,Da as z,Ea as M,Fa as q,Ga as J,Ha as L,Ja as _,Ka as j,R as E,U as I,ja as A,ka as x}from"./chunks/index-tc1g7d2h.js";import{Ma as D}from"./chunks/index-3cd745gg.js";import{Ae as C,Kb as h,Lg as P,Mg as w,Qj as B}from"./chunks/index-dre4wmv8.js";import{_k as p}from"./chunks/index-qnt46f4v.js";import{Xn as S,Yn as v}from"./chunks/index-yhsfzqsw.js";import"./chunks/index-g95msk2x.js";import"./chunks/index-q6a6w2ga.js";import"./chunks/index-x4qnbqvy.js";import"./chunks/index-edt6y87t.js";import{mkdtemp as K,rm as b}from"fs/promises";import{tmpdir as X}from"os";import{join as m}from"path";var y="none";function s(){return Promise.reject(Error("A test brain has no AI provider"))}function W(e){return{specificationVersion:"v3",provider:"test-brain",modelId:e,supportedUrls:{},doGenerate:s,doStream:s}}function T(e){let r={...e};return{generateText:s,generateObject:s,judge:s,generateImage:s,getModel:()=>W(r.model??"none"),canGenerateImages:()=>!1,getConfig:()=>({...r}),updateConfig:(o)=>{r={...r,...o}}}}function R(){return{identity:{model:"test:none",dimensions:1536,promptRevision:0},embedQuery:s,embedDocuments:s}}var Y="shell",ee=20;function te(e){if("needsConfirmation"in e)return{needsConfirmation:!0,summary:e.summary};if(!e.success)return{success:!1,error:e.error,...p({code:e.code})};return{success:!0,...p({data:e.data,message:e.message})}}function re(e,r){if(e.status==="completed"||e.status==="failed")return!0;return e.status==="pending"&&e.lastError!==null&&e.scheduledFor>r}function ne(e,r){return e.flatMap((o)=>{if(!D(o))throw Error("A test brain runs packages configured with use(), as defineBrain does");return P(o.definition,o.config,r)})}async function F(e,r){let o=k(r.directory);V(o,r.brainVersion);let f=ne(e.plugins,{name:o.name,version:o.version}),a=await K(m(r.temporaryRoot??X(),"rizom-test-brain-")),g={...E({dataDir:a,cacheDir:m(a,"cache"),distDir:m(a,"dist")}),embedding:{enabled:!1}},i;try{await new J(v.createFresh({level:S.WARN,context:"test-brain"}),{getStandardConfigWithDirectories:async()=>g,migrateEntities:O,migrateJobQueue:z,migrateConversations:M,migrateRuntimeState:q}).runAllMigrations();let t=_({name:o.name,version:o.version,logLevel:"warn",plugins:f,shellConfig:{...g,dataDir:m(a,"brain-data"),ai:{model:y}}}),n=I(j(t));i=N.createFresh(n,{aiService:T(A(n)),embeddingService:R()}),await i.initialize()}catch(t){throw await b(a,{recursive:!0,force:!0}),t}let Z=f.map((t)=>t.id),H,Q=async()=>{try{await i.shutdown()}finally{await b(a,{recursive:!0,force:!0})}};return Object.freeze({async tool(t,n){let l=i.getMCPService().listTools(),d=l.find(({tool:u})=>u.name===t);if(!d)throw Error(`No tool "${t}"; this brain has ${l.map(({tool:u})=>u.name).join(", ")}`);return te(await d.tool.handler(n,L()))},request:(t,n)=>h(i.getMessageBus(),t,n,Y),async fetch(t){let n=x(B(i),t.method.toUpperCase(),new URL(t.url).pathname);if(!n)return new Response("Not Found",{status:404});if(n.sharedHostAdmission==="deny")return new Response("Unauthorized",{status:401});return n.handler(t)},entities:C(i.getEntityService(),"restricted"),jobs:Object.freeze({async wait(t,n){let l=i.getJobQueueService(),d=async()=>{let c=await l.getStatus(n);if(!c||!Z.some((G)=>c.type===`${G}:${t.name}`))return null;if(re(c,Date.now()))return c;return await Bun.sleep(ee),d()},u=await d();return u?w(t,u):null}}),stop:()=>H??=Q()})}function Ee(e){return F(e,{brainVersion:U.version,directory:process.cwd()})}export{Ee as startTestBrain};
|
|
3
3
|
|
|
4
4
|
//# debugId=261DEEA8750E744864756E2164756E21
|
|
5
5
|
//# sourceMappingURL=testing.js.map
|
package/package.json
CHANGED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{N as p}from"./index-66v76w4h.js";import{Ba as m,Ga as d,Ja as v,Ka as S}from"./index-tc1g7d2h.js";import{Lg as h}from"./index-dre4wmv8.js";import{Xn as t,Yn as r}from"./index-yhsfzqsw.js";import{Dv as s,Es as a,ps as f}from"./index-g95msk2x.js";import{yx as g}from"./index-edt6y87t.js";async function u(e){let[{default:i},{default:n}]=await Promise.all([import("./index-sdvcnhe0.js"),import("./package-tvdk2gte.js")]);return h(i,e??{},{name:n.name,version:n.version},{pluginId:"cli"})}class c{shell=null;config;signalScope=null;signalShutdownFiber=null;stopPromise=null;hasCLI=!1;static create(e,i){return new c(v(e),i)}constructor(e,i){if(this.config=e,this.hasCLI=process.argv.slice(2).includes("--cli"),i)this.shell=i}async migrate(){let e=r.getInstance();await new d(e).runAllMigrations({database:this.config.shellConfig?.database?.url??this.config.database,jobQueueDatabase:this.config.shellConfig?.jobQueueDatabase?.url,conversationDatabase:this.config.shellConfig?.conversationDatabase?.url,runtimeStateDatabase:this.config.shellConfig?.runtimeStateDatabase?.url})}createShell(e,i){this.shell=m.createFresh(S(this.config,e),void 0,{...i?.processRole&&{processRole:i.processRole},...i?.peerChannel&&{peerChannel:i.peerChannel}})}async registerCLIInterface(){if(!this.hasCLI)return;let e=this.getShell().getPluginManager();for(let i of await u(this.config.cliConfig))e.registerPlugin(i)}async initialize(e,i){if(!this.shell){if(!i?.migrationsCompleted)await this.migrate();this.createShell(e,i)}await this.registerCLIInterface(),await this.getShell().initialize(e)}async start(){if(this.stopPromise)return;this.setupSignalHandlers()}stop(){return this.stopPromise??=this.stopApp(),this.stopPromise}async stopApp(){await this.closeSignalScope(),await this.shell?.shutdown()}async run(e){let n={debug:t.DEBUG,info:t.INFO,warn:t.WARN,error:t.ERROR}[this.config.logLevel??"info"]??t.INFO,o=r.createFresh({level:n,context:this.config.name,useStderr:this.hasCLI});if(this.hasCLI)r.getInstance().setUseStderr(!0);try{await this.initialize(void 0,e),await this.start(),e?.onRuntimeReady?.(),o.info(`\u2705 ${this.config.name} v${this.config.version} ready`),process.stdin.resume()}catch(l){o.error(`\u274C Failed to start ${this.config.name}:`,l),process.exit(1)}}static async run(e,i,n){await c.create(e,i).run(n)}setupSignalHandlers(){if(this.signalScope)return;let e=s.runSync(a.make()),i=()=>{this.requestGracefulShutdown("SIGINT")},n=()=>{this.requestGracefulShutdown("SIGTERM")},o=p(["SIGINT"],i),l=p(["SIGTERM"],n);s.runSync(a.addFinalizer(e,s.sync(()=>{l(),o()}))),this.signalScope=e}requestGracefulShutdown(e){if(this.signalShutdownFiber)return;let i=r.getInstance();i.info(`
|
|
3
|
-
Received ${e}, shutting down gracefully...`);let n=s.tryPromise({try:()=>this.stop(),catch:(o)=>o}).pipe(s.match({onFailure:(o)=>{i.error("Error during shutdown:",o),process.exit(1)},onSuccess:()=>{process.exit(0)}}));this.signalShutdownFiber=s.runFork(n)}async closeSignalScope(){let e=this.signalScope;if(this.signalScope=null,e)await s.runPromise(a.close(e,f.void))}getShell(){if(!this.shell)throw Error("Shell not initialized. Call initialize() first.");return this.shell}}
|
|
4
|
-
export{c as B};
|
|
5
|
-
|
|
6
|
-
//# debugId=36871B013F6A352764756E2164756E21
|
|
7
|
-
//# sourceMappingURL=index-h2tqd54z.js.map
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../shell/app/src/cli-interface.ts", "../../../shell/app/src/app.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import type { Plugin } from \"@brains/plugins\";\nimport { instantiatePluginPackageDefinition } from \"@brains/plugins\";\nimport type { CLIConfig } from \"@brains/chat-repl\";\n\n/**\n * The terminal interface `--cli` adds: the chat-repl package's definition,\n * under the plugin id its class had, so its daemon stays `cli:cli`. Loaded\n * only when asked for, which keeps React and Ink out of every other start.\n */\nexport async function createCliInterface(\n config: CLIConfig | undefined,\n): Promise<Plugin[]> {\n const [{ default: cliInterface }, { default: manifest }] = await Promise.all([\n import(\"@brains/chat-repl\"),\n import(\"@brains/chat-repl/package.json\"),\n ]);\n return instantiatePluginPackageDefinition(\n cliInterface,\n config ?? {},\n { name: manifest.name, version: manifest.version },\n { pluginId: \"cli\" },\n );\n}\n",
|
|
6
|
-
"import { Shell } from \"@brains/core\";\nimport type { AppConfig, AppConfigInput } from \"./types\";\nimport { ConsoleLogger, LogLevel } from \"@brains/utils/logger\";\nimport { MigrationManager } from \"./migration-manager\";\nimport { createCliInterface } from \"./cli-interface\";\nimport {\n buildShellConfig,\n toAppConfig,\n type InitializeOptions,\n} from \"./shell-config\";\nimport { Effect, Exit, Scope } from \"@brains/utils/effect\";\nimport type { Fiber } from \"@brains/utils/effect\";\nimport type { PeerChannel, RuntimeProcessRole } from \"@brains/core\";\nimport { addProcessSignalListeners } from \"@brains/utils/process-signals\";\n\nexport interface AppRuntimeOptions {\n migrationsCompleted?: boolean;\n processRole?: RuntimeProcessRole;\n /** The line to the runtime's other processes, when supervised. */\n peerChannel?: PeerChannel;\n onRuntimeReady?: () => void;\n}\n\nexport class App {\n private shell: Shell | null = null;\n private config: AppConfig;\n private signalScope: Scope.Closeable | null = null;\n private signalShutdownFiber: Fiber.Fiber<void, never> | null = null;\n private stopPromise: Promise<void> | null = null;\n private hasCLI = false;\n\n public static create(config?: AppConfigInput, shell?: Shell): App {\n return new App(toAppConfig(config), shell);\n }\n\n private constructor(config: AppConfig, shell?: Shell) {\n this.config = config;\n // Check if --cli flag is present\n this.hasCLI = process.argv.slice(2).includes(\"--cli\");\n\n // Store the shell if provided, otherwise we'll create it in initialize()\n if (shell) {\n this.shell = shell;\n }\n }\n\n public async migrate(): Promise<void> {\n const logger = ConsoleLogger.getInstance();\n const migrationManager = new MigrationManager(logger);\n // Pass database URL overrides from shellConfig or simple config\n await migrationManager.runAllMigrations({\n database: this.config.shellConfig?.database?.url ?? this.config.database,\n jobQueueDatabase: this.config.shellConfig?.jobQueueDatabase?.url,\n conversationDatabase: this.config.shellConfig?.conversationDatabase?.url,\n runtimeStateDatabase: this.config.shellConfig?.runtimeStateDatabase?.url,\n });\n }\n\n private createShell(\n options?: InitializeOptions,\n runtimeOptions?: AppRuntimeOptions,\n ): void {\n // Let shellInitializer build the logger from shellConfig.logging so\n // logFile, format, and level take effect. ConsoleLogger.getInstance() ignores\n // options on a pre-existing singleton.\n this.shell = Shell.createFresh(\n buildShellConfig(this.config, options),\n undefined,\n {\n ...(runtimeOptions?.processRole && {\n processRole: runtimeOptions.processRole,\n }),\n ...(runtimeOptions?.peerChannel && {\n peerChannel: runtimeOptions.peerChannel,\n }),\n },\n );\n }\n\n private async registerCLIInterface(): Promise<void> {\n if (!this.hasCLI) return;\n\n const pluginManager = this.getShell().getPluginManager();\n for (const plugin of await createCliInterface(this.config.cliConfig)) {\n pluginManager.registerPlugin(plugin);\n }\n }\n\n public async initialize(\n options?: InitializeOptions,\n runtimeOptions?: AppRuntimeOptions,\n ): Promise<void> {\n // A supervised child starts only after the parent has completed migrations.\n // Injected shells remain migration-free for tests and embedding applications.\n if (!this.shell) {\n if (!runtimeOptions?.migrationsCompleted) await this.migrate();\n this.createShell(options, runtimeOptions);\n }\n\n await this.registerCLIInterface();\n\n // Initialize shell (which will initialize all plugins including interfaces)\n await this.getShell().initialize(options);\n }\n\n public async start(): Promise<void> {\n if (this.stopPromise) return;\n this.setupSignalHandlers();\n }\n\n public stop(): Promise<void> {\n this.stopPromise ??= this.stopApp();\n return this.stopPromise;\n }\n\n private async stopApp(): Promise<void> {\n await this.closeSignalScope();\n await this.shell?.shutdown();\n }\n\n /**\n * Run the app - handles initialization, startup, and keeps process alive\n * This is the simplest way to start an app\n */\n public async run(runtimeOptions?: AppRuntimeOptions): Promise<void> {\n // Create logger for run output\n const logLevelMap: Record<string, LogLevel> = {\n debug: LogLevel.DEBUG,\n info: LogLevel.INFO,\n warn: LogLevel.WARN,\n error: LogLevel.ERROR,\n };\n const logLevel =\n logLevelMap[this.config.logLevel ?? \"info\"] ?? LogLevel.INFO;\n\n const logger = ConsoleLogger.createFresh({\n level: logLevel,\n context: this.config.name,\n useStderr: this.hasCLI, // Use stderr when CLI is active to avoid interfering with Ink UI\n });\n\n // Configure global logger instance to also use stderr if CLI is active\n if (this.hasCLI) {\n ConsoleLogger.getInstance().setUseStderr(true);\n }\n\n try {\n await this.initialize(undefined, runtimeOptions);\n await this.start();\n runtimeOptions?.onRuntimeReady?.();\n\n logger.info(`✅ ${this.config.name} v${this.config.version} ready`);\n\n // Keep process alive\n process.stdin.resume();\n } catch (error) {\n logger.error(`❌ Failed to start ${this.config.name}:`, error);\n process.exit(1);\n }\n }\n\n /**\n * Static convenience method to create and run an app in one call\n */\n public static async run(\n config?: AppConfigInput,\n shell?: Shell,\n runtimeOptions?: AppRuntimeOptions,\n ): Promise<void> {\n const app = App.create(config, shell);\n await app.run(runtimeOptions);\n }\n\n private setupSignalHandlers(): void {\n if (this.signalScope) return;\n\n const scope = Effect.runSync(Scope.make());\n const sigintHandler = (): void => {\n this.requestGracefulShutdown(\"SIGINT\");\n };\n const sigtermHandler = (): void => {\n this.requestGracefulShutdown(\"SIGTERM\");\n };\n\n const removeSigint = addProcessSignalListeners([\"SIGINT\"], sigintHandler);\n const removeSigterm = addProcessSignalListeners(\n [\"SIGTERM\"],\n sigtermHandler,\n );\n Effect.runSync(\n Scope.addFinalizer(\n scope,\n Effect.sync(() => {\n removeSigterm();\n removeSigint();\n }),\n ),\n );\n this.signalScope = scope;\n }\n\n private requestGracefulShutdown(signal: \"SIGINT\" | \"SIGTERM\"): void {\n if (this.signalShutdownFiber) return;\n\n const logger = ConsoleLogger.getInstance();\n logger.info(`\\nReceived ${signal}, shutting down gracefully...`);\n const shutdown = Effect.tryPromise({\n try: () => this.stop(),\n catch: (error) => error,\n }).pipe(\n Effect.match({\n onFailure: (error) => {\n logger.error(\"Error during shutdown:\", error);\n process.exit(1);\n },\n onSuccess: () => {\n process.exit(0);\n },\n }),\n );\n this.signalShutdownFiber = Effect.runFork(shutdown);\n }\n\n private async closeSignalScope(): Promise<void> {\n const scope = this.signalScope;\n this.signalScope = null;\n if (scope) await Effect.runPromise(Scope.close(scope, Exit.void));\n }\n\n public getShell(): Shell {\n if (!this.shell) {\n throw new Error(\"Shell not initialized. Call initialize() first.\");\n }\n return this.shell;\n }\n}\n"
|
|
7
|
-
],
|
|
8
|
-
"mappings": "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",
|
|
9
|
-
"debugId": "36871B013F6A352764756E2164756E21",
|
|
10
|
-
"names": []
|
|
11
|
-
}
|
|
File without changes
|