@tealbrick/kit 0.2.5 → 0.2.7

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/BOOTSTRAP.md CHANGED
@@ -1,13 +1,12 @@
1
- > Eve 0.63.0 is a candidate; the approved baseline remains Eve 0.58.1. Suite 0.2.4 is an unpublished compatibility candidate.
1
+ > Eve 0.66.0 is the supported baseline. Suite 0.2.7 contains deployment fixes and is not yet published; npm latest remains 0.2.6.
2
2
 
3
3
  # Deployment guide: Eve agent + Teal Brick kit
4
4
 
5
5
  This guide installs the seven implemented packages through one kit and activates
6
- only the capabilities you select. The supported harness line is **Eve 0.63.x**;
7
- **0.63.0** and **AI SDK 7.0.105** are the current tested versions. Use Node **24**.
6
+ only the capabilities you select. The supported harness line is **Eve 0.66.x**;
7
+ **0.66.0** and **AI SDK 7.0.107** are the current tested versions. Use Node **24**.
8
8
 
9
- **Release status:** `@tealbrick/kit@0.2.4` is the unpublished Eve 0.63 compatibility candidate for the
10
- complete suite. Use the npm installation in step 3. Do not substitute an unrelated unscoped `tealbrick` package.
9
+ **Release status:** `@tealbrick/kit@0.2.7` is the unpublished deployment-fix suite. Until publication, install the validated local tarballs with workspace dependency overrides; the versioned npm command in step 3 applies after publication. Do not substitute an unrelated unscoped `tealbrick` package.
11
10
 
12
11
  ## What installs what
13
12
 
@@ -19,12 +18,12 @@ Eve runs the agent and needs its own working primary-model authentication.
19
18
  For a fresh machine, the sequence is:
20
19
 
21
20
  1. Install Node 24 and npm.
22
- 2. Create an Eve 0.63.0 project and configure its primary model credentials.
23
- 3. Install `@tealbrick/kit@0.2.4` inside that project.
21
+ 2. Create an Eve 0.66.0 project and configure its primary model credentials.
22
+ 3. Install `@tealbrick/kit@0.2.7` inside that project.
24
23
  4. Run `tealbrick setup` to sign in, select capabilities and register the card.
25
24
  5. Build and start Eve, then check a real chat from desktop.
26
25
 
27
- For an **existing Eve 0.63.0 project**, start at step 3 from its project directory.
26
+ For an **existing Eve 0.66.0 project**, start at step 3 from its project directory.
28
27
  Do not run `eve init` over an existing agent. Preserve its model configuration and
29
28
  review any existing Eve channel before setup, as explained under Portal below.
30
29
 
@@ -40,14 +39,14 @@ npm --version
40
39
 
41
40
  The first command should report `v24.x`. Run the remaining commands as the account
42
41
  that will own the new agent project. For our deployment this account runs on
43
- Nucbox/Fedora N150. This package guide does not provision a VM or install AVMM.
42
+ an AVMM guest on Neuu after the September23 migration. This package guide does not provision a VM or install AVMM.
44
43
 
45
44
  ## 2. Create a fresh Eve project
46
45
 
47
46
  Choose an unused project directory, outside any existing live agent:
48
47
 
49
48
  ```bash
50
- npx --yes eve@0.63.0 init tealbrick-agent --model openai/gpt-5.6-terra
49
+ npx --yes eve@0.66.0 init tealbrick-agent --model openai/gpt-5.6-terra
51
50
  ```
52
51
 
53
52
  Finish scaffolding and return to the terminal before continuing. If Eve starts
@@ -55,7 +54,7 @@ Finish scaffolding and return to the terminal before continuing. If Eve starts
55
54
 
56
55
  ```bash
57
56
  cd tealbrick-agent
58
- npm install --save-exact eve@0.63.0 ai@7.0.105
57
+ npm install --save-exact eve@0.66.0 ai@7.0.107
59
58
  ```
60
59
 
61
60
  Keep `package-lock.json` under version control.
@@ -82,7 +81,7 @@ Run this inside the Eve project created in step 2 (or your existing compatible
82
81
  project), not in an empty directory or as a global install:
83
82
 
84
83
  ```bash
85
- npm install --save-exact @tealbrick/kit@0.2.4
84
+ npm install --save-exact @tealbrick/kit@0.2.7
86
85
  ```
87
86
 
88
87
  This installs Portal, AVM, Voice, Vision, Deliver and the shared provider transport
@@ -245,3 +244,15 @@ Restart the running Eve process after the rebuild. Deselecting a capability remo
245
244
  its kit-owned mounts. Setup refuses to overwrite hand-edited mounts. Saved settings
246
245
  and optional local secrets live under ignored `.tealbrick/`; secrets are not embedded
247
246
  in generated source. Disabling a capability does not revoke or delete its credentials.
247
+
248
+ ## Eve 0.66 deployment additions (suite 0.2.7)
249
+
250
+ `tealbrick setup` now includes Persistent routines and Production self-evolution.
251
+ Routines require an enrolled host bridge, scope and runtime token; setup mounts
252
+ CRUD, production dispatch and desktop delivery together. Self-evolution requires
253
+ an existing `deployment/*.ts` native Eve policy module outside the writable agent
254
+ tree. Native proposals require the deployment's existing governed activation path.
255
+
256
+ AVMM/guests migrated to Neuu on September23. Verify current canonical migration
257
+ records before targeting either host. Do not create new canary agents. Committed
258
+ source, npm publication and installed deployment are separate states.
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- > Eve 0.63.0 is a candidate; the approved baseline remains Eve 0.58.1. Suite 0.2.4 is an unpublished compatibility candidate.
1
+ > Eve 0.66.0 is the supported baseline. Suite 0.2.7 contains deployment fixes and is not yet published; npm latest remains 0.2.6.
2
2
 
3
3
  # @tealbrick/kit
4
4
 
@@ -6,16 +6,16 @@ One installation, explicitly selected capabilities. The kit includes the current
6
6
  implemented Portal, Voice, Vision, Deliver and AVM packages. Dependencies are code
7
7
  availability, not agent permissions. Nothing is mounted by installing the kit.
8
8
 
9
- Install inside an existing Eve 0.63.0 project:
9
+ Install inside an existing Eve 0.66.0 project:
10
10
 
11
11
  ```sh
12
- npm install --save-exact @tealbrick/kit@0.2.4
12
+ npm install --save-exact @tealbrick/kit@0.2.7
13
13
  npx --no-install tealbrick setup
14
14
  ```
15
15
 
16
16
  The suite is published on npm. The kit does not install, create or start Eve.
17
17
  Create the Eve project first and configure its primary-model authentication.
18
- Eve 0.63.0 and Node 24 are the validated host versions; VM provisioning remains
18
+ Eve 0.66.0 and Node 24 are the validated host versions; VM provisioning remains
19
19
  host setup. After Teal Brick setup, build and start Eve to make the agent usable.
20
20
 
21
21
  See [BOOTSTRAP.md](BOOTSTRAP.md) for the complete deployment guide, including fresh-machine and existing-agent paths, provider prompts and verification.
package/dist/cli.js CHANGED
@@ -37,6 +37,8 @@ async function main() {
37
37
  { name: 'Voice: live-session / STT / TTS endpoints', value: 'voice', checked: !!old.voice },
38
38
  { name: 'Vision API (native tool requires a trusted turn-auth adapter)', value: 'vision', checked: !!old.vision },
39
39
  { name: 'Deliver files to chat', value: 'deliver', checked: old.deliver !== undefined },
40
+ { name: 'Production self-evolution (requires deployment policy)', value: 'selfEvolution', checked: !!old.selfEvolution },
41
+ { name: 'Persistent routines, desktop management and AVMM wake', value: 'routines', checked: !!old.routines },
40
42
  { name: 'AVM inspection over SSH', value: 'avm', checked: !!old.avm },
41
43
  ] });
42
44
  const config = { version: 1 }, credentials = {};
@@ -95,6 +97,15 @@ async function main() {
95
97
  delete config.avm.identityTokenFile;
96
98
  }
97
99
  }
100
+ if (selected.includes('selfEvolution'))
101
+ config.selfEvolution = { policyModule: await input({ message: 'Deployment policy module outside agent/ (deployment/name.ts)', default: old.selfEvolution?.policyModule }) };
102
+ if (selected.includes('routines')) {
103
+ const credentialRef = 'TEALBRICK_ROUTINE_BRIDGE_TOKEN';
104
+ const token = await password({ message: 'Host routine bridge token (blank keeps existing runtime secret)', mask: '*' });
105
+ if (token)
106
+ credentials[credentialRef] = token;
107
+ config.routines = { url: await input({ message: 'Enrolled host routine bridge URL including /routines', default: old.routines?.url }), credentialRef, scope: { org: login.org, workspace: workspaceId, agent: name, owner: await input({ message: 'Portal managing user ID (must match the host enrollment)', default: old.routines?.scope.owner }) }, buildCommand: JSON.parse(await input({ message: 'Build command JSON argv', default: JSON.stringify(old.routines?.buildCommand ?? ['npm', 'run', 'build']) })), restartCommand: JSON.parse(await input({ message: 'Operator-configured restart command JSON argv', default: old.routines ? JSON.stringify(old.routines.restartCommand) : undefined })) };
108
+ }
98
109
  console.log(JSON.stringify({ enabled: planKit(config).enabled, mounts: Object.keys(planKit(config).files) }, null, 2));
99
110
  if (!await confirm({ message: 'Apply settings and register this agent in the selected Portal workspace? Rebuild/restart Eve afterward.', default: false }))
100
111
  return;
package/dist/index.d.ts CHANGED
@@ -1,6 +1,21 @@
1
1
  import { z } from 'zod';
2
2
  declare const schema: z.ZodObject<{
3
3
  version: z.ZodLiteral<1>;
4
+ selfEvolution: z.ZodOptional<z.ZodObject<{
5
+ policyModule: z.ZodString;
6
+ }, z.core.$strict>>;
7
+ routines: z.ZodOptional<z.ZodObject<{
8
+ url: z.ZodString;
9
+ credentialRef: z.ZodString;
10
+ scope: z.ZodObject<{
11
+ org: z.ZodString;
12
+ workspace: z.ZodString;
13
+ agent: z.ZodString;
14
+ owner: z.ZodString;
15
+ }, z.core.$strict>;
16
+ buildCommand: z.ZodTuple<[z.ZodString], z.ZodString>;
17
+ restartCommand: z.ZodTuple<[z.ZodString], z.ZodString>;
18
+ }, z.core.$strict>>;
4
19
  portal: z.ZodOptional<z.ZodObject<{
5
20
  issuer: z.ZodString;
6
21
  org: z.ZodString;
@@ -922,7 +937,7 @@ declare const schema: z.ZodObject<{
922
937
  }>>>;
923
938
  }, z.core.$strict>;
924
939
  export type KitConfig = z.input<typeof schema>;
925
- export declare const capabilities: readonly ["portal", "runtime", "voice", "vision", "deliver", "avm"];
940
+ export declare const capabilities: readonly ["portal", "runtime", "voice", "vision", "deliver", "avm", "routines", "selfEvolution"];
926
941
  export interface MountPlan {
927
942
  enabled: string[];
928
943
  files: Record<string, string>;
package/dist/index.js CHANGED
@@ -10,8 +10,10 @@ const auth = z.object({ issuer: z.string().url().refine(v => new URL(v).protocol
10
10
  const media = z.object({ settings: z.unknown(), authorizationModule: z.string().optional() }).strict();
11
11
  const ref = z.string().regex(/^TEALBRICK_[A-Z0-9_]+$/);
12
12
  const runtime = z.object({ issuer: z.string().url(), org: z.string().min(1), workspaceId: z.string().min(1), agentId: z.string().min(1), connectionId: z.string().min(1), credentialRef: ref, bindings: z.record(z.string(), z.object({ endpoint: z.string().url(), instanceId: z.string().min(1), companyId: z.string().min(1), credentialRef: ref }).strict()) }).strict();
13
- const schema = z.object({ version: z.literal(1), portal: auth.optional(), runtime: runtime.optional(), voice: media.optional(), vision: media.optional(), deliver: z.unknown().optional(), avm: z.custom(v => avmConfigSchema.safeParse(v).success).transform(v => 'target' in v ? { target: v.target, sudo: v.sudo ?? false, ...Object.fromEntries(Object.entries(v).filter(([k]) => k !== 'target' && k !== 'sudo')) } : v).optional() }).strict();
14
- export const capabilities = ['portal', 'runtime', 'voice', 'vision', 'deliver', 'avm'];
13
+ const command = z.tuple([z.string().min(1)]).rest(z.string());
14
+ const routines = z.object({ url: z.string().url(), credentialRef: ref, scope: z.object({ org: z.string().min(1), workspace: z.string().min(1), agent: z.string().min(1), owner: z.string().min(1) }).strict(), buildCommand: command, restartCommand: command }).strict();
15
+ const schema = z.object({ version: z.literal(1), selfEvolution: z.object({ policyModule: z.string().regex(/^deployment\/[a-zA-Z0-9_-]+\.(ts|js|mjs)$/) }).strict().optional(), routines: routines.optional(), portal: auth.optional(), runtime: runtime.optional(), voice: media.optional(), vision: media.optional(), deliver: z.unknown().optional(), avm: z.custom(v => avmConfigSchema.safeParse(v).success).transform(v => 'target' in v ? { target: v.target, sudo: v.sudo ?? false, ...Object.fromEntries(Object.entries(v).filter(([k]) => k !== 'target' && k !== 'sudo')) } : v).optional() }).strict();
16
+ export const capabilities = ['portal', 'runtime', 'voice', 'vision', 'deliver', 'avm', 'routines', 'selfEvolution'];
15
17
  const marker = '// Managed by @tealbrick/kit. Change selection with tealbrick setup.\n';
16
18
  const render = (body) => marker + body + '\n';
17
19
  const hash = (data) => createHash('sha256').update(data).digest('hex');
@@ -65,6 +67,25 @@ export function planKit(value) {
65
67
  }
66
68
  if (c.avm)
67
69
  files['agent/extensions/tealbrick-avm.ts'] = render(`import avm from '@tealbrick/avm/eve';\nexport default avm(${JSON.stringify(c.avm)});`);
70
+ if (c.selfEvolution) {
71
+ if (!c.portal)
72
+ throw Error('kit_evolution_requires_portal');
73
+ // Native deployed authoring policy lives outside the agent-authored tree.
74
+ const module = '../../' + c.selfEvolution.policyModule;
75
+ files['agent/extensions/tealbrick-self-evolution.ts'] = render(`import selfModification from 'eve/self-modification';\nimport policy from ${JSON.stringify(module)};\nexport default selfModification(policy);`);
76
+ }
77
+ if (c.routines) {
78
+ if (!c.portal || c.routines.scope.org !== c.portal.org || c.routines.scope.agent !== c.portal.agent)
79
+ throw Error('kit_routines_require_matching_portal');
80
+ const r = c.routines;
81
+ const endpoint = new URL(r.url);
82
+ if (!['http:', 'https:'].includes(endpoint.protocol) || endpoint.username || endpoint.password || endpoint.search || endpoint.hash)
83
+ throw Error('kit_invalid_routine_endpoint');
84
+ files['agent/lib/tealbrick-routines.ts'] = render(`import {createRoutineClient} from '@tealbrick/avm/routines-client';\nimport {runtimeSecret} from '@tealbrick/kit/secrets';\nexport const scope=${JSON.stringify(r.scope)};\nexport const bridge=createRoutineClient({url:${JSON.stringify(r.url)},token:async()=>{const token=await runtimeSecret(${JSON.stringify(r.credentialRef)});if(!token)throw Error('routine_credential_missing');return token;}});`);
85
+ files['agent/tools/tealbrick_routines.ts'] = render(`import {routineTool} from '@tealbrick/avm/routines-eve';\nimport {bridge,scope} from '../lib/tealbrick-routines';\nexport default routineTool({bridge,scope});`);
86
+ files['agent/channels/management.ts'] = render(`import {managementChannel} from '@tealbrick/portal/management/eve';\nimport {bridge,scope} from '../lib/tealbrick-routines';\nexport default managementChannel({auth:${JSON.stringify(c.portal)},appRoot:process.cwd(),routines:{owner:scope.owner,call:(action,input)=>bridge.call(action,input)},buildCommand:${JSON.stringify(r.buildCommand)},restartCommand:${JSON.stringify(r.restartCommand)}});`);
87
+ files['agent/schedules/tealbrick-routines.ts'] = render(`import {routineDispatcher} from '@tealbrick/avm/routines-eve';\nimport {bridge} from '../lib/tealbrick-routines';\nimport delivery from '../channels/management';\nexport default routineDispatcher({bridge,delivery});`);
88
+ }
68
89
  return { enabled: capabilities.filter(k => c[k] !== undefined), files };
69
90
  }
70
91
  async function optional(path) { try {
@@ -128,6 +149,11 @@ export async function applyKit(root, config, credentials = {}) {
128
149
  else if (content !== null)
129
150
  throw Error(`kit_mount_conflict:${name}`);
130
151
  }
152
+ if (config.selfEvolution) {
153
+ const path = await safe(root, config.selfEvolution.policyModule);
154
+ if (await optional(path) === null)
155
+ throw Error('kit_evolution_policy_module_missing');
156
+ }
131
157
  if (config.vision?.authorizationModule) {
132
158
  const path = await safe(root, config.vision.authorizationModule);
133
159
  if (await optional(path) === null)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tealbrick/kit",
3
- "version": "0.2.5",
3
+ "version": "0.2.7",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Complete Teal Brick package kit with explicit Eve capability activation",
@@ -37,16 +37,16 @@
37
37
  "test": "node --test test/*.test.mjs"
38
38
  },
39
39
  "dependencies": {
40
- "@tealbrick/portal": "0.2.5",
41
- "@tealbrick/avm": "0.2.5",
42
- "@tealbrick/voice": "0.2.5",
43
- "@tealbrick/vision": "0.2.5",
44
- "@tealbrick/deliver": "0.2.5",
40
+ "@tealbrick/portal": "0.2.7",
41
+ "@tealbrick/avm": "0.2.7",
42
+ "@tealbrick/voice": "0.2.7",
43
+ "@tealbrick/vision": "0.2.7",
44
+ "@tealbrick/deliver": "0.2.7",
45
45
  "@inquirer/prompts": "8.7.2",
46
46
  "zod": "^4.0.0"
47
47
  },
48
48
  "peerDependencies": {
49
- "eve": ">=0.64.1 <0.65.0"
49
+ "eve": ">=0.66.0 <0.67.0"
50
50
  },
51
51
  "peerDependenciesMeta": {
52
52
  "eve": {