@agentuity/cli 0.0.101 → 0.0.103
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/AGENTS.md +19 -188
- package/bin/cli.ts +21 -14
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +41 -12
- package/dist/cli.js.map +1 -1
- package/dist/cmd/ai/index.d.ts.map +1 -1
- package/dist/cmd/ai/index.js +6 -1
- package/dist/cmd/ai/index.js.map +1 -1
- package/dist/cmd/ai/prompt/agent.d.ts +7 -0
- package/dist/cmd/ai/prompt/agent.d.ts.map +1 -1
- package/dist/cmd/ai/prompt/agent.js +12 -323
- package/dist/cmd/ai/prompt/agent.js.map +1 -1
- package/dist/cmd/ai/prompt/api.d.ts +7 -0
- package/dist/cmd/ai/prompt/api.d.ts.map +1 -1
- package/dist/cmd/ai/prompt/api.js +12 -260
- package/dist/cmd/ai/prompt/api.js.map +1 -1
- package/dist/cmd/ai/prompt/version.d.ts +35 -0
- package/dist/cmd/ai/prompt/version.d.ts.map +1 -0
- package/dist/cmd/ai/prompt/version.js +55 -0
- package/dist/cmd/ai/prompt/version.js.map +1 -0
- package/dist/cmd/ai/prompt/web.d.ts +7 -0
- package/dist/cmd/ai/prompt/web.d.ts.map +1 -1
- package/dist/cmd/ai/prompt/web.js +12 -283
- package/dist/cmd/ai/prompt/web.js.map +1 -1
- package/dist/cmd/ai/skills/generate.d.ts +3 -0
- package/dist/cmd/ai/skills/generate.d.ts.map +1 -0
- package/dist/cmd/ai/skills/generate.js +65 -0
- package/dist/cmd/ai/skills/generate.js.map +1 -0
- package/dist/cmd/ai/skills/generator.d.ts +4 -0
- package/dist/cmd/ai/skills/generator.d.ts.map +1 -0
- package/dist/cmd/ai/skills/generator.js +402 -0
- package/dist/cmd/ai/skills/generator.js.map +1 -0
- package/dist/cmd/ai/skills/index.d.ts +4 -0
- package/dist/cmd/ai/skills/index.d.ts.map +1 -0
- package/dist/cmd/ai/skills/index.js +21 -0
- package/dist/cmd/ai/skills/index.js.map +1 -0
- package/dist/cmd/auth/signup.d.ts.map +1 -1
- package/dist/cmd/auth/signup.js +1 -0
- package/dist/cmd/auth/signup.js.map +1 -1
- package/dist/cmd/build/entry-generator.d.ts.map +1 -1
- package/dist/cmd/build/entry-generator.js +40 -5
- package/dist/cmd/build/entry-generator.js.map +1 -1
- package/dist/cmd/build/vite/bun-dev-server.d.ts +7 -1
- package/dist/cmd/build/vite/bun-dev-server.d.ts.map +1 -1
- package/dist/cmd/build/vite/bun-dev-server.js +30 -26
- package/dist/cmd/build/vite/bun-dev-server.js.map +1 -1
- package/dist/cmd/build/vite/metadata-generator.d.ts.map +1 -1
- package/dist/cmd/build/vite/metadata-generator.js +58 -7
- package/dist/cmd/build/vite/metadata-generator.js.map +1 -1
- package/dist/cmd/build/vite/prompt-generator.d.ts +23 -0
- package/dist/cmd/build/vite/prompt-generator.d.ts.map +1 -0
- package/dist/cmd/build/vite/prompt-generator.js +123 -0
- package/dist/cmd/build/vite/prompt-generator.js.map +1 -0
- package/dist/cmd/build/vite/registry-generator.d.ts.map +1 -1
- package/dist/cmd/build/vite/registry-generator.js +28 -11
- package/dist/cmd/build/vite/registry-generator.js.map +1 -1
- package/dist/cmd/build/vite/server-bundler.d.ts +4 -0
- package/dist/cmd/build/vite/server-bundler.d.ts.map +1 -1
- package/dist/cmd/build/vite/server-bundler.js +45 -16
- package/dist/cmd/build/vite/server-bundler.js.map +1 -1
- package/dist/cmd/build/vite/vite-asset-server-config.d.ts.map +1 -1
- package/dist/cmd/build/vite/vite-asset-server-config.js +4 -0
- package/dist/cmd/build/vite/vite-asset-server-config.js.map +1 -1
- package/dist/cmd/build/vite/vite-builder.d.ts.map +1 -1
- package/dist/cmd/build/vite/vite-builder.js +99 -87
- package/dist/cmd/build/vite/vite-builder.js.map +1 -1
- package/dist/cmd/cloud/deploy.d.ts.map +1 -1
- package/dist/cmd/cloud/deploy.js +80 -27
- package/dist/cmd/cloud/deploy.js.map +1 -1
- package/dist/cmd/cloud/keyvalue/create-namespace.d.ts.map +1 -1
- package/dist/cmd/cloud/keyvalue/create-namespace.js +3 -1
- package/dist/cmd/cloud/keyvalue/create-namespace.js.map +1 -1
- package/dist/cmd/cloud/keyvalue/delete-namespace.d.ts.map +1 -1
- package/dist/cmd/cloud/keyvalue/delete-namespace.js +3 -1
- package/dist/cmd/cloud/keyvalue/delete-namespace.js.map +1 -1
- package/dist/cmd/cloud/keyvalue/delete.d.ts.map +1 -1
- package/dist/cmd/cloud/keyvalue/delete.js +3 -1
- package/dist/cmd/cloud/keyvalue/delete.js.map +1 -1
- package/dist/cmd/cloud/keyvalue/set.d.ts.map +1 -1
- package/dist/cmd/cloud/keyvalue/set.js +4 -2
- package/dist/cmd/cloud/keyvalue/set.js.map +1 -1
- package/dist/cmd/cloud/stream/get.d.ts.map +1 -1
- package/dist/cmd/cloud/stream/get.js +2 -13
- package/dist/cmd/cloud/stream/get.js.map +1 -1
- package/dist/cmd/cloud/vector/delete-namespace.d.ts +3 -0
- package/dist/cmd/cloud/vector/delete-namespace.d.ts.map +1 -0
- package/dist/cmd/cloud/vector/delete-namespace.js +77 -0
- package/dist/cmd/cloud/vector/delete-namespace.js.map +1 -0
- package/dist/cmd/cloud/vector/index.d.ts.map +1 -1
- package/dist/cmd/cloud/vector/index.js +21 -4
- package/dist/cmd/cloud/vector/index.js.map +1 -1
- package/dist/cmd/cloud/vector/list-namespaces.d.ts +3 -0
- package/dist/cmd/cloud/vector/list-namespaces.d.ts.map +1 -0
- package/dist/cmd/cloud/vector/list-namespaces.js +42 -0
- package/dist/cmd/cloud/vector/list-namespaces.js.map +1 -0
- package/dist/cmd/cloud/vector/stats.d.ts +3 -0
- package/dist/cmd/cloud/vector/stats.d.ts.map +1 -0
- package/dist/cmd/cloud/vector/stats.js +142 -0
- package/dist/cmd/cloud/vector/stats.js.map +1 -0
- package/dist/cmd/cloud/vector/upsert.d.ts +3 -0
- package/dist/cmd/cloud/vector/upsert.d.ts.map +1 -0
- package/dist/cmd/cloud/vector/upsert.js +192 -0
- package/dist/cmd/cloud/vector/upsert.js.map +1 -0
- package/dist/cmd/dev/file-watcher.d.ts.map +1 -1
- package/dist/cmd/dev/file-watcher.js +90 -31
- package/dist/cmd/dev/file-watcher.js.map +1 -1
- package/dist/cmd/dev/index.d.ts.map +1 -1
- package/dist/cmd/dev/index.js +244 -64
- package/dist/cmd/dev/index.js.map +1 -1
- package/dist/cmd/dev/skills.d.ts +10 -0
- package/dist/cmd/dev/skills.d.ts.map +1 -0
- package/dist/cmd/dev/skills.js +57 -0
- package/dist/cmd/dev/skills.js.map +1 -0
- package/dist/cmd/dev/sync.js +7 -7
- package/dist/cmd/dev/sync.js.map +1 -1
- package/dist/cmd/index.d.ts.map +1 -1
- package/dist/cmd/index.js +1 -0
- package/dist/cmd/index.js.map +1 -1
- package/dist/cmd/project/create.d.ts.map +1 -1
- package/dist/cmd/project/create.js +3 -0
- package/dist/cmd/project/create.js.map +1 -1
- package/dist/cmd/project/template-flow.d.ts +1 -0
- package/dist/cmd/project/template-flow.d.ts.map +1 -1
- package/dist/cmd/project/template-flow.js +30 -5
- package/dist/cmd/project/template-flow.js.map +1 -1
- package/dist/cmd/setup/index.d.ts.map +1 -1
- package/dist/cmd/setup/index.js +1 -0
- package/dist/cmd/setup/index.js.map +1 -1
- package/dist/cmd/upgrade/index.d.ts +15 -0
- package/dist/cmd/upgrade/index.d.ts.map +1 -1
- package/dist/cmd/upgrade/index.js +59 -4
- package/dist/cmd/upgrade/index.js.map +1 -1
- package/dist/domain.d.ts +45 -0
- package/dist/domain.d.ts.map +1 -0
- package/dist/domain.js +200 -0
- package/dist/domain.js.map +1 -0
- package/dist/schema-generator.d.ts +2 -0
- package/dist/schema-generator.d.ts.map +1 -1
- package/dist/schema-generator.js +18 -0
- package/dist/schema-generator.js.map +1 -1
- package/dist/steps.d.ts +1 -1
- package/dist/steps.d.ts.map +1 -1
- package/dist/steps.js +16 -5
- package/dist/steps.js.map +1 -1
- package/dist/tui/prompt.d.ts +1 -2
- package/dist/tui/prompt.d.ts.map +1 -1
- package/dist/tui/prompt.js +8 -4
- package/dist/tui/prompt.js.map +1 -1
- package/dist/tui.d.ts +16 -0
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +23 -2
- package/dist/tui.js.map +1 -1
- package/dist/types.d.ts +9 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -3
- package/dist/types.js.map +1 -1
- package/package.json +4 -4
- package/src/cli.ts +47 -12
- package/src/cmd/ai/index.ts +6 -1
- package/src/cmd/ai/prompt/agent.md +306 -0
- package/src/cmd/ai/prompt/agent.ts +12 -322
- package/src/cmd/ai/prompt/api.md +360 -0
- package/src/cmd/ai/prompt/api.ts +13 -260
- package/src/cmd/ai/prompt/version.ts +61 -0
- package/src/cmd/ai/prompt/web.md +509 -0
- package/src/cmd/ai/prompt/web.ts +12 -282
- package/src/cmd/ai/skills/generate.ts +75 -0
- package/src/cmd/ai/skills/generator.ts +519 -0
- package/src/cmd/ai/skills/index.ts +23 -0
- package/src/cmd/auth/signup.ts +1 -0
- package/src/cmd/build/entry-generator.ts +43 -7
- package/src/cmd/build/vite/bun-dev-server.ts +31 -28
- package/src/cmd/build/vite/metadata-generator.ts +73 -7
- package/src/cmd/build/vite/prompt-generator.ts +169 -0
- package/src/cmd/build/vite/registry-generator.ts +33 -10
- package/src/cmd/build/vite/server-bundler.ts +53 -22
- package/src/cmd/build/vite/vite-asset-server-config.ts +5 -0
- package/src/cmd/build/vite/vite-builder.ts +107 -87
- package/src/cmd/cloud/deploy.ts +103 -31
- package/src/cmd/cloud/keyvalue/create-namespace.ts +3 -1
- package/src/cmd/cloud/keyvalue/delete-namespace.ts +3 -1
- package/src/cmd/cloud/keyvalue/delete.ts +3 -1
- package/src/cmd/cloud/keyvalue/set.ts +4 -2
- package/src/cmd/cloud/stream/get.ts +2 -9
- package/src/cmd/cloud/vector/delete-namespace.ts +89 -0
- package/src/cmd/cloud/vector/index.ts +21 -4
- package/src/cmd/cloud/vector/list-namespaces.ts +46 -0
- package/src/cmd/cloud/vector/stats.ts +160 -0
- package/src/cmd/cloud/vector/upsert.ts +216 -0
- package/src/cmd/dev/file-watcher.ts +101 -32
- package/src/cmd/dev/index.ts +343 -115
- package/src/cmd/dev/skills.ts +82 -0
- package/src/cmd/dev/sync.ts +7 -7
- package/src/cmd/index.ts +1 -0
- package/src/cmd/project/create.ts +3 -0
- package/src/cmd/project/template-flow.ts +37 -5
- package/src/cmd/setup/index.ts +1 -0
- package/src/cmd/upgrade/index.ts +68 -4
- package/src/domain.ts +273 -0
- package/src/schema-generator.ts +23 -0
- package/src/steps.ts +16 -5
- package/src/tui/prompt.ts +11 -5
- package/src/tui.ts +21 -2
- package/src/types/md.d.ts +8 -0
- package/src/types.ts +12 -3
- package/dist/cmd/cloud/domain.d.ts +0 -17
- package/dist/cmd/cloud/domain.d.ts.map +0 -1
- package/dist/cmd/cloud/domain.js +0 -79
- package/dist/cmd/cloud/domain.js.map +0 -1
- package/src/cmd/cloud/domain.ts +0 -100
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentuity/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.103",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"author": "Agentuity employees and contributors",
|
|
6
6
|
"type": "module",
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
"prepublishOnly": "bun run clean && bun run build"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@agentuity/core": "0.0.
|
|
44
|
-
"@agentuity/server": "0.0.
|
|
43
|
+
"@agentuity/core": "0.0.103",
|
|
44
|
+
"@agentuity/server": "0.0.103",
|
|
45
45
|
"@datasert/cronjs-parser": "^1.4.0",
|
|
46
46
|
"@terascope/fetch-github-release": "^2.2.1",
|
|
47
47
|
"@vitejs/plugin-react": "^5.1.2",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"zod": "^4.1.12"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
|
-
"@agentuity/test-utils": "0.0.
|
|
64
|
+
"@agentuity/test-utils": "0.0.103",
|
|
65
65
|
"@types/adm-zip": "^0.5.7",
|
|
66
66
|
"@types/bun": "latest",
|
|
67
67
|
"@types/tar-fs": "^2.0.4",
|
package/src/cli.ts
CHANGED
|
@@ -138,6 +138,35 @@ async function executeOrValidate(
|
|
|
138
138
|
/**
|
|
139
139
|
* Handle validation error - output structured result in validate mode, otherwise log and exit
|
|
140
140
|
*/
|
|
141
|
+
/**
|
|
142
|
+
* Format a user-friendly message for a validation issue
|
|
143
|
+
*/
|
|
144
|
+
function formatValidationIssueMessage(field: string, message: string): string {
|
|
145
|
+
// Detect "expected X, received undefined" pattern (missing required value)
|
|
146
|
+
if (message.includes('received undefined')) {
|
|
147
|
+
if (field && field !== 'unknown') {
|
|
148
|
+
return `Missing required option: --${field}`;
|
|
149
|
+
}
|
|
150
|
+
return 'Missing required value';
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Detect "expected X, received Y" pattern (wrong type)
|
|
154
|
+
const typeMatch = message.match(/expected (\w+), received (\w+)/i);
|
|
155
|
+
if (typeMatch) {
|
|
156
|
+
const [, expected, received] = typeMatch;
|
|
157
|
+
if (field && field !== 'unknown') {
|
|
158
|
+
return `Invalid value for --${field}: expected ${expected}, got ${received}`;
|
|
159
|
+
}
|
|
160
|
+
return `Invalid value: expected ${expected}, got ${received}`;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Default: include the field name if we have it
|
|
164
|
+
if (field && field !== 'unknown') {
|
|
165
|
+
return `--${field}: ${message}`;
|
|
166
|
+
}
|
|
167
|
+
return message;
|
|
168
|
+
}
|
|
169
|
+
|
|
141
170
|
function handleValidationError(
|
|
142
171
|
error: unknown,
|
|
143
172
|
commandName: string,
|
|
@@ -146,30 +175,36 @@ function handleValidationError(
|
|
|
146
175
|
if (error && typeof error === 'object' && 'issues' in error) {
|
|
147
176
|
const issues = (error as { issues: Array<{ path: string[]; message: string }> }).issues;
|
|
148
177
|
|
|
178
|
+
const formattedIssues = issues.map((issue) => {
|
|
179
|
+
const field = issue.path?.length ? issue.path.join('.') : 'unknown';
|
|
180
|
+
return {
|
|
181
|
+
field,
|
|
182
|
+
message: issue.message,
|
|
183
|
+
formatted: formatValidationIssueMessage(field, issue.message),
|
|
184
|
+
};
|
|
185
|
+
});
|
|
186
|
+
|
|
149
187
|
if (isValidateMode(baseCtx.options)) {
|
|
150
188
|
// In validate mode, output structured validation result
|
|
151
189
|
const result: ValidationResult = {
|
|
152
190
|
valid: false,
|
|
153
191
|
command: commandName,
|
|
154
|
-
errors:
|
|
155
|
-
field: issue.path?.length ? issue.path.join('.') : 'unknown',
|
|
156
|
-
message: issue.message,
|
|
157
|
-
})),
|
|
192
|
+
errors: formattedIssues.map(({ field, message }) => ({ field, message })),
|
|
158
193
|
};
|
|
159
194
|
outputValidation(result, baseCtx.options);
|
|
160
195
|
process.exit(ExitCode.VALIDATION_ERROR);
|
|
161
196
|
} else {
|
|
162
|
-
//
|
|
197
|
+
// Build a clear, actionable error message
|
|
198
|
+
const errorMessages = formattedIssues.map((i) => i.formatted);
|
|
199
|
+
const primaryMessage =
|
|
200
|
+
errorMessages.length === 1 ? errorMessages[0] : 'Invalid options or arguments';
|
|
201
|
+
|
|
163
202
|
exitWithError(
|
|
164
203
|
{
|
|
165
204
|
code: ErrorCode.VALIDATION_FAILED,
|
|
166
|
-
message:
|
|
167
|
-
details: {
|
|
168
|
-
|
|
169
|
-
field: issue.path?.length ? issue.path.join('.') : 'unknown',
|
|
170
|
-
message: issue.message,
|
|
171
|
-
})),
|
|
172
|
-
},
|
|
205
|
+
message: primaryMessage,
|
|
206
|
+
details: errorMessages.length > 1 ? { errors: errorMessages } : undefined,
|
|
207
|
+
suggestions: [`Run 'agentuity ${commandName} --help' for usage information`],
|
|
173
208
|
},
|
|
174
209
|
baseCtx.logger,
|
|
175
210
|
baseCtx.options.errorFormat ?? 'text'
|
package/src/cmd/ai/index.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { createCommand } from '../../types';
|
|
|
2
2
|
import capabilitiesCommand from './capabilities';
|
|
3
3
|
import promptCommand from './prompt';
|
|
4
4
|
import schemaCommand from './schema';
|
|
5
|
+
import skillsCommand from './skills';
|
|
5
6
|
import { getCommand } from '../../command-prefix';
|
|
6
7
|
|
|
7
8
|
export const command = createCommand({
|
|
@@ -18,6 +19,10 @@ export const command = createCommand({
|
|
|
18
19
|
command: getCommand('ai schema show'),
|
|
19
20
|
description: 'Output CLI schema for AI consumption',
|
|
20
21
|
},
|
|
22
|
+
{
|
|
23
|
+
command: getCommand('ai skills generate --output ./skills'),
|
|
24
|
+
description: 'Generate Agent Skills from CLI schema',
|
|
25
|
+
},
|
|
21
26
|
],
|
|
22
|
-
subcommands: [capabilitiesCommand, promptCommand, schemaCommand],
|
|
27
|
+
subcommands: [capabilitiesCommand, promptCommand, schemaCommand, skillsCommand],
|
|
23
28
|
});
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
# Agents Folder Guide
|
|
2
|
+
|
|
3
|
+
This folder contains AI agents for your Agentuity application. Each agent is organized in its own subdirectory.
|
|
4
|
+
|
|
5
|
+
## Generated Types
|
|
6
|
+
|
|
7
|
+
The `src/generated/` folder contains auto-generated TypeScript files:
|
|
8
|
+
|
|
9
|
+
- `registry.ts` - Agent registry with strongly-typed agent definitions and schema types
|
|
10
|
+
- `routes.ts` - Route registry for API, WebSocket, and SSE endpoints
|
|
11
|
+
- `app.ts` - Application entry point (regenerated on every build)
|
|
12
|
+
|
|
13
|
+
**Important:** Never edit files in `src/generated/` - they are overwritten on every build.
|
|
14
|
+
|
|
15
|
+
Import generated types in your agents:
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
import type { HelloInput, HelloOutput } from '../generated/registry';
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Directory Structure
|
|
22
|
+
|
|
23
|
+
Each agent folder must contain:
|
|
24
|
+
|
|
25
|
+
- **agent.ts** (required) - Agent definition with schema and handler
|
|
26
|
+
|
|
27
|
+
Example structure:
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
src/agent/
|
|
31
|
+
├── hello/
|
|
32
|
+
│ └── agent.ts
|
|
33
|
+
├── process-data/
|
|
34
|
+
│ └── agent.ts
|
|
35
|
+
└── (generated files in src/generated/)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Note:** HTTP routes are defined separately in `src/api/` - see the API folder guide for details.
|
|
39
|
+
|
|
40
|
+
## Creating an Agent
|
|
41
|
+
|
|
42
|
+
### Basic Agent (agent.ts)
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
import { createAgent } from '@agentuity/runtime';
|
|
46
|
+
import { s } from '@agentuity/schema';
|
|
47
|
+
|
|
48
|
+
const agent = createAgent('my-agent', {
|
|
49
|
+
description: 'What this agent does',
|
|
50
|
+
schema: {
|
|
51
|
+
input: s.object({
|
|
52
|
+
name: s.string(),
|
|
53
|
+
age: s.number(),
|
|
54
|
+
}),
|
|
55
|
+
output: s.string(),
|
|
56
|
+
},
|
|
57
|
+
handler: async (ctx, input) => {
|
|
58
|
+
// Access context: ctx.app, ctx.config, ctx.logger, ctx.kv, ctx.vector, ctx.stream
|
|
59
|
+
return `Hello, ${input.name}! You are ${input.age} years old.`;
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
export default agent;
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Agent with Lifecycle (setup/shutdown)
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
import { createAgent } from '@agentuity/runtime';
|
|
70
|
+
import { s } from '@agentuity/schema';
|
|
71
|
+
|
|
72
|
+
const agent = createAgent('lifecycle-agent', {
|
|
73
|
+
description: 'Agent with setup and shutdown',
|
|
74
|
+
schema: {
|
|
75
|
+
input: s.object({ message: s.string() }),
|
|
76
|
+
output: s.object({ result: s.string() }),
|
|
77
|
+
},
|
|
78
|
+
setup: async (app) => {
|
|
79
|
+
// Initialize resources (runs once on startup)
|
|
80
|
+
// app contains: appName, version, startedAt, config
|
|
81
|
+
return {
|
|
82
|
+
agentId: `agent-${Math.random().toString(36).substr(2, 9)}`,
|
|
83
|
+
connectionPool: ['conn-1', 'conn-2'],
|
|
84
|
+
};
|
|
85
|
+
},
|
|
86
|
+
handler: async (ctx, input) => {
|
|
87
|
+
// Access setup config via ctx.config (fully typed)
|
|
88
|
+
ctx.logger.info('Agent ID:', ctx.config.agentId);
|
|
89
|
+
ctx.logger.info('Connections:', ctx.config.connectionPool);
|
|
90
|
+
return { result: `Processed: ${input.message}` };
|
|
91
|
+
},
|
|
92
|
+
shutdown: async (app, config) => {
|
|
93
|
+
// Cleanup resources (runs on shutdown)
|
|
94
|
+
console.log('Shutting down agent:', config.agentId);
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
export default agent;
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Agent with Event Listeners
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
import { createAgent } from '@agentuity/runtime';
|
|
105
|
+
import { s } from '@agentuity/schema';
|
|
106
|
+
|
|
107
|
+
const agent = createAgent('event-agent', {
|
|
108
|
+
schema: {
|
|
109
|
+
input: s.object({ data: s.string() }),
|
|
110
|
+
output: s.string(),
|
|
111
|
+
},
|
|
112
|
+
handler: async (ctx, input) => {
|
|
113
|
+
return `Processed: ${input.data}`;
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
agent.addEventListener('started', (eventName, agent, ctx) => {
|
|
118
|
+
ctx.logger.info('Agent started');
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
agent.addEventListener('completed', (eventName, agent, ctx) => {
|
|
122
|
+
ctx.logger.info('Agent completed');
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
agent.addEventListener('errored', (eventName, agent, ctx, error) => {
|
|
126
|
+
ctx.logger.error('Agent errored:', error);
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
export default agent;
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Agent Context (ctx)
|
|
133
|
+
|
|
134
|
+
The handler receives a context object with:
|
|
135
|
+
|
|
136
|
+
- **ctx.app** - Application state (appName, version, startedAt, config from createApp)
|
|
137
|
+
- **ctx.config** - Agent-specific config (from setup return value, fully typed)
|
|
138
|
+
- **ctx.logger** - Structured logger (info, warn, error, debug, trace)
|
|
139
|
+
- **ctx.tracer** - OpenTelemetry tracer for custom spans
|
|
140
|
+
- **ctx.sessionId** - Unique session identifier
|
|
141
|
+
- **ctx.kv** - Key-value storage
|
|
142
|
+
- **ctx.vector** - Vector storage for embeddings
|
|
143
|
+
- **ctx.stream** - Stream storage for real-time data
|
|
144
|
+
- **ctx.state** - In-memory request-scoped state (Map)
|
|
145
|
+
- **ctx.thread** - Thread information for multi-turn conversations
|
|
146
|
+
- **ctx.session** - Session information
|
|
147
|
+
- **ctx.waitUntil** - Schedule background tasks
|
|
148
|
+
|
|
149
|
+
## Examples
|
|
150
|
+
|
|
151
|
+
### Using Key-Value Storage
|
|
152
|
+
|
|
153
|
+
```typescript
|
|
154
|
+
handler: async (ctx, input) => {
|
|
155
|
+
await ctx.kv.set('user:123', { name: 'Alice', age: 30 });
|
|
156
|
+
const user = await ctx.kv.get('user:123');
|
|
157
|
+
await ctx.kv.delete('user:123');
|
|
158
|
+
const keys = await ctx.kv.list('user:*');
|
|
159
|
+
return user;
|
|
160
|
+
};
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Using Vector Storage
|
|
164
|
+
|
|
165
|
+
```typescript
|
|
166
|
+
handler: async (ctx, input) => {
|
|
167
|
+
await ctx.vector.upsert('docs', [
|
|
168
|
+
{ id: '1', values: [0.1, 0.2, 0.3], metadata: { text: 'Hello' } },
|
|
169
|
+
]);
|
|
170
|
+
const results = await ctx.vector.query('docs', [0.1, 0.2, 0.3], { topK: 5 });
|
|
171
|
+
return results;
|
|
172
|
+
};
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Using Streams
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
handler: async (ctx, input) => {
|
|
179
|
+
const stream = await ctx.stream.create('agent-logs');
|
|
180
|
+
await ctx.stream.write(stream.id, 'Processing step 1');
|
|
181
|
+
await ctx.stream.write(stream.id, 'Processing step 2');
|
|
182
|
+
return { streamId: stream.id };
|
|
183
|
+
};
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Background Tasks with waitUntil
|
|
187
|
+
|
|
188
|
+
```typescript
|
|
189
|
+
handler: async (ctx, input) => {
|
|
190
|
+
// Schedule background work that continues after response
|
|
191
|
+
ctx.waitUntil(async () => {
|
|
192
|
+
await ctx.kv.set('processed', Date.now());
|
|
193
|
+
ctx.logger.info('Background task complete');
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
return { status: 'processing' };
|
|
197
|
+
};
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Calling Another Agent
|
|
201
|
+
|
|
202
|
+
```typescript
|
|
203
|
+
// Import the agent directly
|
|
204
|
+
import otherAgent from '../other-agent/agent';
|
|
205
|
+
|
|
206
|
+
handler: async (ctx, input) => {
|
|
207
|
+
const result = await otherAgent.run({ data: input.value });
|
|
208
|
+
return `Other agent returned: ${result}`;
|
|
209
|
+
};
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Subagents (Nested Agents)
|
|
213
|
+
|
|
214
|
+
Agents can have subagents organized one level deep. This is useful for grouping related functionality.
|
|
215
|
+
|
|
216
|
+
### Directory Structure for Subagents
|
|
217
|
+
|
|
218
|
+
```
|
|
219
|
+
src/agent/
|
|
220
|
+
└── team/ # Parent agent
|
|
221
|
+
├── agent.ts # Parent agent
|
|
222
|
+
├── members/ # Subagent
|
|
223
|
+
│ └── agent.ts
|
|
224
|
+
└── tasks/ # Subagent
|
|
225
|
+
└── agent.ts
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Parent Agent
|
|
229
|
+
|
|
230
|
+
```typescript
|
|
231
|
+
import { createAgent } from '@agentuity/runtime';
|
|
232
|
+
import { s } from '@agentuity/schema';
|
|
233
|
+
|
|
234
|
+
const agent = createAgent('team', {
|
|
235
|
+
description: 'Team Manager',
|
|
236
|
+
schema: {
|
|
237
|
+
input: s.object({ action: s.union([s.literal('info'), s.literal('count')]) }),
|
|
238
|
+
output: s.object({
|
|
239
|
+
message: s.string(),
|
|
240
|
+
timestamp: s.string(),
|
|
241
|
+
}),
|
|
242
|
+
},
|
|
243
|
+
handler: async (ctx, { action }) => {
|
|
244
|
+
return {
|
|
245
|
+
message: 'Team parent agent - manages members and tasks',
|
|
246
|
+
timestamp: new Date().toISOString(),
|
|
247
|
+
};
|
|
248
|
+
},
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
export default agent;
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### Subagent (Accessing Parent)
|
|
255
|
+
|
|
256
|
+
```typescript
|
|
257
|
+
import { createAgent } from '@agentuity/runtime';
|
|
258
|
+
import { s } from '@agentuity/schema';
|
|
259
|
+
import parentAgent from '../agent';
|
|
260
|
+
|
|
261
|
+
const agent = createAgent('team.members', {
|
|
262
|
+
description: 'Members Subagent',
|
|
263
|
+
schema: {
|
|
264
|
+
input: s.object({
|
|
265
|
+
action: s.union([s.literal('list'), s.literal('add'), s.literal('remove')]),
|
|
266
|
+
name: s.optional(s.string()),
|
|
267
|
+
}),
|
|
268
|
+
output: s.object({
|
|
269
|
+
members: s.array(s.string()),
|
|
270
|
+
parentInfo: s.optional(s.string()),
|
|
271
|
+
}),
|
|
272
|
+
},
|
|
273
|
+
handler: async (ctx, { action, name }) => {
|
|
274
|
+
// Call parent agent directly
|
|
275
|
+
const parentResult = await parentAgent.run({ action: 'info' });
|
|
276
|
+
const parentInfo = `Parent says: ${parentResult.message}`;
|
|
277
|
+
|
|
278
|
+
let members = ['Alice', 'Bob'];
|
|
279
|
+
if (action === 'add' && name) {
|
|
280
|
+
members.push(name);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
return { members, parentInfo };
|
|
284
|
+
},
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
export default agent;
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### Key Points About Subagents
|
|
291
|
+
|
|
292
|
+
- **One level deep**: Only one level of nesting is supported (no nested subagents)
|
|
293
|
+
- **Access parent**: Import and call parent agents directly
|
|
294
|
+
- **Agent names**: Subagents have dotted names like `"team.members"`
|
|
295
|
+
- **Shared context**: Subagents share the same app context (kv, logger, etc.)
|
|
296
|
+
|
|
297
|
+
## Rules
|
|
298
|
+
|
|
299
|
+
- Each agent folder name becomes the agent's route name (e.g., `hello/` → `/agent/hello`)
|
|
300
|
+
- **agent.ts** must export default the agent instance
|
|
301
|
+
- The first argument to `createAgent()` is the agent name (must match folder structure)
|
|
302
|
+
- Input/output schemas are enforced with @agentuity/schema validation
|
|
303
|
+
- Setup return value type automatically flows to ctx.config (fully typed)
|
|
304
|
+
- Use ctx.logger for logging, not console.log
|
|
305
|
+
- Import agents directly to call them (recommended approach)
|
|
306
|
+
- Subagents are one level deep only (team/members/, not team/members/subagent/)
|