@tealbrick/kit 0.2.6 → 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 +23 -12
- package/README.md +4 -4
- package/dist/cli.js +11 -0
- package/dist/index.d.ts +16 -1
- package/dist/index.js +28 -2
- package/package.json +6 -6
package/BOOTSTRAP.md
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
> Eve 0.
|
|
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.
|
|
7
|
-
**0.
|
|
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.
|
|
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.
|
|
23
|
-
3. Install `@tealbrick/kit@0.2.
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
9
|
+
Install inside an existing Eve 0.66.0 project:
|
|
10
10
|
|
|
11
11
|
```sh
|
|
12
|
-
npm install --save-exact @tealbrick/kit@0.2.
|
|
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.
|
|
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
|
|
14
|
-
|
|
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.
|
|
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,11 +37,11 @@
|
|
|
37
37
|
"test": "node --test test/*.test.mjs"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@tealbrick/portal": "0.2.
|
|
41
|
-
"@tealbrick/avm": "0.2.
|
|
42
|
-
"@tealbrick/voice": "0.2.
|
|
43
|
-
"@tealbrick/vision": "0.2.
|
|
44
|
-
"@tealbrick/deliver": "0.2.
|
|
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
|
},
|