@agentuity/cli 1.0.59 → 2.0.0-beta.1
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/bin/cli.ts +2 -3
- package/dist/cmd/build/app-config-extractor.d.ts +27 -0
- package/dist/cmd/build/app-config-extractor.d.ts.map +1 -0
- package/dist/cmd/build/app-config-extractor.js +152 -0
- package/dist/cmd/build/app-config-extractor.js.map +1 -0
- package/dist/cmd/build/app-router-detector.d.ts +2 -5
- package/dist/cmd/build/app-router-detector.d.ts.map +1 -1
- package/dist/cmd/build/app-router-detector.js +130 -154
- package/dist/cmd/build/app-router-detector.js.map +1 -1
- package/dist/cmd/build/ci.d.ts.map +1 -1
- package/dist/cmd/build/ci.js +5 -21
- package/dist/cmd/build/ci.js.map +1 -1
- package/dist/cmd/build/ids.d.ts +11 -0
- package/dist/cmd/build/ids.d.ts.map +1 -0
- package/dist/cmd/build/ids.js +18 -0
- package/dist/cmd/build/ids.js.map +1 -0
- package/dist/cmd/build/index.d.ts.map +1 -1
- package/dist/cmd/build/index.js +8 -0
- package/dist/cmd/build/index.js.map +1 -1
- package/dist/cmd/build/vite/agent-discovery.d.ts +8 -4
- package/dist/cmd/build/vite/agent-discovery.d.ts.map +1 -1
- package/dist/cmd/build/vite/agent-discovery.js +166 -487
- package/dist/cmd/build/vite/agent-discovery.js.map +1 -1
- package/dist/cmd/build/vite/bun-dev-server.d.ts +43 -14
- package/dist/cmd/build/vite/bun-dev-server.d.ts.map +1 -1
- package/dist/cmd/build/vite/bun-dev-server.js +290 -129
- package/dist/cmd/build/vite/bun-dev-server.js.map +1 -1
- package/dist/cmd/build/vite/config-loader.d.ts +15 -20
- package/dist/cmd/build/vite/config-loader.d.ts.map +1 -1
- package/dist/cmd/build/vite/config-loader.js +41 -74
- package/dist/cmd/build/vite/config-loader.js.map +1 -1
- package/dist/cmd/build/vite/docs-generator.d.ts.map +1 -1
- package/dist/cmd/build/vite/docs-generator.js +0 -2
- package/dist/cmd/build/vite/docs-generator.js.map +1 -1
- package/dist/cmd/build/vite/index.d.ts.map +1 -1
- package/dist/cmd/build/vite/index.js +0 -36
- package/dist/cmd/build/vite/index.js.map +1 -1
- package/dist/cmd/build/vite/lifecycle-generator.d.ts +10 -2
- package/dist/cmd/build/vite/lifecycle-generator.d.ts.map +1 -1
- package/dist/cmd/build/vite/lifecycle-generator.js +302 -23
- package/dist/cmd/build/vite/lifecycle-generator.js.map +1 -1
- package/dist/cmd/build/vite/route-discovery.d.ts +11 -38
- package/dist/cmd/build/vite/route-discovery.d.ts.map +1 -1
- package/dist/cmd/build/vite/route-discovery.js +97 -177
- package/dist/cmd/build/vite/route-discovery.js.map +1 -1
- package/dist/cmd/build/vite/server-bundler.js +1 -1
- package/dist/cmd/build/vite/server-bundler.js.map +1 -1
- package/dist/cmd/build/vite/static-renderer.d.ts +0 -2
- package/dist/cmd/build/vite/static-renderer.d.ts.map +1 -1
- package/dist/cmd/build/vite/static-renderer.js +19 -13
- package/dist/cmd/build/vite/static-renderer.js.map +1 -1
- package/dist/cmd/build/vite/vite-asset-server-config.d.ts +6 -3
- package/dist/cmd/build/vite/vite-asset-server-config.d.ts.map +1 -1
- package/dist/cmd/build/vite/vite-asset-server-config.js +175 -69
- package/dist/cmd/build/vite/vite-asset-server-config.js.map +1 -1
- package/dist/cmd/build/vite/vite-asset-server.d.ts +8 -3
- package/dist/cmd/build/vite/vite-asset-server.d.ts.map +1 -1
- package/dist/cmd/build/vite/vite-asset-server.js +14 -13
- package/dist/cmd/build/vite/vite-asset-server.js.map +1 -1
- package/dist/cmd/build/vite/vite-builder.d.ts.map +1 -1
- package/dist/cmd/build/vite/vite-builder.js +42 -190
- package/dist/cmd/build/vite/vite-builder.js.map +1 -1
- package/dist/cmd/build/vite/ws-proxy.d.ts +53 -0
- package/dist/cmd/build/vite/ws-proxy.d.ts.map +1 -0
- package/dist/cmd/build/vite/ws-proxy.js +95 -0
- package/dist/cmd/build/vite/ws-proxy.js.map +1 -0
- package/dist/cmd/build/vite-bundler.d.ts.map +1 -1
- package/dist/cmd/build/vite-bundler.js +0 -3
- package/dist/cmd/build/vite-bundler.js.map +1 -1
- package/dist/cmd/cloud/deploy-fork.d.ts.map +1 -1
- package/dist/cmd/cloud/deploy-fork.js +15 -36
- package/dist/cmd/cloud/deploy-fork.js.map +1 -1
- package/dist/cmd/cloud/sandbox/exec.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/exec.js +28 -86
- package/dist/cmd/cloud/sandbox/exec.js.map +1 -1
- package/dist/cmd/cloud/sandbox/run.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/run.js +2 -9
- package/dist/cmd/cloud/sandbox/run.js.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/build.js +2 -2
- package/dist/cmd/cloud/sandbox/snapshot/build.js.map +1 -1
- package/dist/cmd/coder/hub-url.d.ts.map +1 -1
- package/dist/cmd/coder/hub-url.js +1 -3
- package/dist/cmd/coder/hub-url.js.map +1 -1
- package/dist/cmd/coder/start.js +6 -6
- package/dist/cmd/coder/start.js.map +1 -1
- package/dist/cmd/coder/tui-init.d.ts +2 -2
- package/dist/cmd/coder/tui-init.js +2 -2
- package/dist/cmd/coder/tui-init.js.map +1 -1
- package/dist/cmd/dev/file-watcher.d.ts.map +1 -1
- package/dist/cmd/dev/file-watcher.js +2 -8
- 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 +432 -752
- package/dist/cmd/dev/index.js.map +1 -1
- package/dist/cmd/dev/process-manager.d.ts +104 -0
- package/dist/cmd/dev/process-manager.d.ts.map +1 -0
- package/dist/cmd/dev/process-manager.js +204 -0
- package/dist/cmd/dev/process-manager.js.map +1 -0
- package/dist/errors.d.ts +10 -24
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +12 -42
- package/dist/errors.js.map +1 -1
- package/dist/schema-generator.d.ts.map +1 -1
- package/dist/schema-generator.js +12 -2
- package/dist/schema-generator.js.map +1 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +5 -19
- package/dist/tui.js.map +1 -1
- package/dist/utils/version-mismatch.d.ts +39 -0
- package/dist/utils/version-mismatch.d.ts.map +1 -0
- package/dist/utils/version-mismatch.js +161 -0
- package/dist/utils/version-mismatch.js.map +1 -0
- package/package.json +6 -6
- package/src/cmd/ai/prompt/agent.md +0 -1
- package/src/cmd/ai/prompt/api.md +0 -7
- package/src/cmd/ai/prompt/web.md +51 -213
- package/src/cmd/build/app-config-extractor.ts +186 -0
- package/src/cmd/build/app-router-detector.ts +152 -182
- package/src/cmd/build/ci.ts +5 -21
- package/src/cmd/build/ids.ts +19 -0
- package/src/cmd/build/index.ts +10 -0
- package/src/cmd/build/vite/agent-discovery.ts +208 -679
- package/src/cmd/build/vite/bun-dev-server.ts +383 -146
- package/src/cmd/build/vite/config-loader.ts +45 -77
- package/src/cmd/build/vite/docs-generator.ts +0 -2
- package/src/cmd/build/vite/index.ts +1 -42
- package/src/cmd/build/vite/lifecycle-generator.ts +345 -21
- package/src/cmd/build/vite/route-discovery.ts +116 -274
- package/src/cmd/build/vite/server-bundler.ts +1 -1
- package/src/cmd/build/vite/static-renderer.ts +23 -15
- package/src/cmd/build/vite/vite-asset-server-config.ts +200 -70
- package/src/cmd/build/vite/vite-asset-server.ts +25 -15
- package/src/cmd/build/vite/vite-builder.ts +49 -220
- package/src/cmd/build/vite/ws-proxy.ts +126 -0
- package/src/cmd/build/vite-bundler.ts +0 -4
- package/src/cmd/cloud/deploy-fork.ts +16 -39
- package/src/cmd/cloud/sandbox/exec.ts +23 -130
- package/src/cmd/cloud/sandbox/run.ts +2 -9
- package/src/cmd/cloud/sandbox/snapshot/build.ts +2 -2
- package/src/cmd/coder/hub-url.ts +1 -3
- package/src/cmd/coder/start.ts +6 -6
- package/src/cmd/coder/tui-init.ts +4 -4
- package/src/cmd/dev/file-watcher.ts +2 -9
- package/src/cmd/dev/index.ts +476 -859
- package/src/cmd/dev/process-manager.ts +261 -0
- package/src/errors.ts +12 -44
- package/src/schema-generator.ts +12 -2
- package/src/tui.ts +5 -18
- package/src/utils/version-mismatch.ts +204 -0
- package/dist/cmd/build/ast.d.ts +0 -78
- package/dist/cmd/build/ast.d.ts.map +0 -1
- package/dist/cmd/build/ast.js +0 -2703
- package/dist/cmd/build/ast.js.map +0 -1
- package/dist/cmd/build/entry-generator.d.ts +0 -25
- package/dist/cmd/build/entry-generator.d.ts.map +0 -1
- package/dist/cmd/build/entry-generator.js +0 -695
- package/dist/cmd/build/entry-generator.js.map +0 -1
- package/dist/cmd/build/vite/api-mount-path.d.ts +0 -61
- package/dist/cmd/build/vite/api-mount-path.d.ts.map +0 -1
- package/dist/cmd/build/vite/api-mount-path.js +0 -83
- package/dist/cmd/build/vite/api-mount-path.js.map +0 -1
- package/dist/cmd/build/vite/registry-generator.d.ts +0 -19
- package/dist/cmd/build/vite/registry-generator.d.ts.map +0 -1
- package/dist/cmd/build/vite/registry-generator.js +0 -1108
- package/dist/cmd/build/vite/registry-generator.js.map +0 -1
- package/dist/cmd/build/webanalytics-generator.d.ts +0 -16
- package/dist/cmd/build/webanalytics-generator.d.ts.map +0 -1
- package/dist/cmd/build/webanalytics-generator.js +0 -178
- package/dist/cmd/build/webanalytics-generator.js.map +0 -1
- package/dist/cmd/build/workbench.d.ts +0 -7
- package/dist/cmd/build/workbench.d.ts.map +0 -1
- package/dist/cmd/build/workbench.js +0 -55
- package/dist/cmd/build/workbench.js.map +0 -1
- package/dist/utils/route-migration.d.ts +0 -62
- package/dist/utils/route-migration.d.ts.map +0 -1
- package/dist/utils/route-migration.js +0 -630
- package/dist/utils/route-migration.js.map +0 -1
- package/dist/utils/stream-capture.d.ts +0 -9
- package/dist/utils/stream-capture.d.ts.map +0 -1
- package/dist/utils/stream-capture.js +0 -34
- package/dist/utils/stream-capture.js.map +0 -1
- package/src/cmd/build/ast.ts +0 -3529
- package/src/cmd/build/entry-generator.ts +0 -760
- package/src/cmd/build/vite/api-mount-path.ts +0 -87
- package/src/cmd/build/vite/registry-generator.ts +0 -1267
- package/src/cmd/build/webanalytics-generator.ts +0 -197
- package/src/cmd/build/workbench.ts +0 -58
- package/src/utils/route-migration.ts +0 -757
- package/src/utils/stream-capture.ts +0 -39
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version mismatch detection for @agentuity/* packages.
|
|
3
|
+
*
|
|
4
|
+
* Detects when a project uses outdated v1 SDK packages while the CLI is v2,
|
|
5
|
+
* and recommends running the migration tool.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
import { getVersion } from '../version';
|
|
10
|
+
/**
|
|
11
|
+
* Extract major version from semver string
|
|
12
|
+
*/
|
|
13
|
+
function extractMajor(version) {
|
|
14
|
+
// Handle ranges like ^1.0.0, ~2.0.0, >=1.0.0
|
|
15
|
+
const match = version.match(/(\d+)\.\d+\.\d+/);
|
|
16
|
+
if (match?.[1]) {
|
|
17
|
+
return parseInt(match[1], 10);
|
|
18
|
+
}
|
|
19
|
+
// Handle "latest" or "*"
|
|
20
|
+
if (version === 'latest' || version === '*') {
|
|
21
|
+
return 0; // Unknown major
|
|
22
|
+
}
|
|
23
|
+
return 0;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get installed version from node_modules
|
|
27
|
+
*/
|
|
28
|
+
function getInstalledVersion(projectDir, packageName) {
|
|
29
|
+
try {
|
|
30
|
+
const pkgPath = join(projectDir, 'node_modules', packageName, 'package.json');
|
|
31
|
+
if (!existsSync(pkgPath)) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
35
|
+
return pkg.version || null;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Detect version mismatches in @agentuity/* packages.
|
|
43
|
+
*
|
|
44
|
+
* @param projectDir - Root directory of the user's project
|
|
45
|
+
* @param logger - Logger instance
|
|
46
|
+
* @returns Version mismatch detection result
|
|
47
|
+
*/
|
|
48
|
+
export function detectVersionMismatch(projectDir, logger) {
|
|
49
|
+
const cliVersion = getVersion();
|
|
50
|
+
const cliMajor = extractMajor(cliVersion);
|
|
51
|
+
const result = {
|
|
52
|
+
cliMajor,
|
|
53
|
+
packages: [],
|
|
54
|
+
mismatched: [],
|
|
55
|
+
outdated: [],
|
|
56
|
+
hasV1Packages: false,
|
|
57
|
+
hasMajorMismatches: false,
|
|
58
|
+
};
|
|
59
|
+
// Skip check for canary versions
|
|
60
|
+
if (cliVersion.includes('-')) {
|
|
61
|
+
logger.debug('Skipping version mismatch check for canary version: %s', cliVersion);
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
// Read package.json
|
|
65
|
+
const packageJsonPath = join(projectDir, 'package.json');
|
|
66
|
+
if (!existsSync(packageJsonPath)) {
|
|
67
|
+
logger.debug('No package.json found, skipping version mismatch check');
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
let packageJson;
|
|
71
|
+
try {
|
|
72
|
+
packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
logger.debug('Failed to read package.json: %s', error);
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
// Collect all @agentuity/* packages
|
|
79
|
+
const allDeps = {
|
|
80
|
+
...packageJson.dependencies,
|
|
81
|
+
...packageJson.devDependencies,
|
|
82
|
+
};
|
|
83
|
+
const agentuitPackages = Object.entries(allDeps)
|
|
84
|
+
.filter(([name]) => name.startsWith('@agentuity/'))
|
|
85
|
+
.map(([name, specifier]) => ({ name, specifier }));
|
|
86
|
+
if (agentuitPackages.length === 0) {
|
|
87
|
+
logger.debug('No @agentuity/* packages found in package.json');
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
// Check each package's installed version
|
|
91
|
+
for (const { name } of agentuitPackages) {
|
|
92
|
+
const installedVersion = getInstalledVersion(projectDir, name);
|
|
93
|
+
if (!installedVersion) {
|
|
94
|
+
logger.debug('%s: not installed, skipping', name);
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
const major = extractMajor(installedVersion);
|
|
98
|
+
const info = {
|
|
99
|
+
name,
|
|
100
|
+
version: installedVersion,
|
|
101
|
+
major,
|
|
102
|
+
};
|
|
103
|
+
result.packages.push(info);
|
|
104
|
+
// Check if this is a v1 package when CLI is v2+
|
|
105
|
+
if (major === 1 && cliMajor >= 2) {
|
|
106
|
+
result.outdated.push(info);
|
|
107
|
+
result.hasV1Packages = true;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Check for major version mismatches across installed packages
|
|
111
|
+
if (result.packages.length > 1) {
|
|
112
|
+
const majors = new Set(result.packages.map((p) => p.major));
|
|
113
|
+
if (majors.size > 1) {
|
|
114
|
+
result.hasMajorMismatches = true;
|
|
115
|
+
// Find packages that don't match the most common major version
|
|
116
|
+
const majorCounts = new Map();
|
|
117
|
+
for (const pkg of result.packages) {
|
|
118
|
+
majorCounts.set(pkg.major, (majorCounts.get(pkg.major) || 0) + 1);
|
|
119
|
+
}
|
|
120
|
+
const mostCommonMajor = [...majorCounts.entries()].sort((a, b) => b[1] - a[1])[0]?.[0] || cliMajor;
|
|
121
|
+
for (const pkg of result.packages) {
|
|
122
|
+
if (pkg.major !== mostCommonMajor) {
|
|
123
|
+
result.mismatched.push(pkg);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Format a warning message for version mismatches.
|
|
132
|
+
*/
|
|
133
|
+
export function formatVersionMismatchWarning(result) {
|
|
134
|
+
const lines = [];
|
|
135
|
+
if (result.hasV1Packages) {
|
|
136
|
+
lines.push('You are using Agentuity SDK v1 packages, but v2 is now available.');
|
|
137
|
+
lines.push('');
|
|
138
|
+
lines.push(' Outdated packages:');
|
|
139
|
+
for (const pkg of result.outdated) {
|
|
140
|
+
lines.push(` • ${pkg.name}@${pkg.version}`);
|
|
141
|
+
}
|
|
142
|
+
lines.push('');
|
|
143
|
+
lines.push(' → Run `npx @agentuity/migrate` to upgrade your project to v2.');
|
|
144
|
+
lines.push(' This will automatically update your code and dependencies.');
|
|
145
|
+
lines.push('');
|
|
146
|
+
lines.push(' See the migration guide: https://docs.agentuity.com/migration/v1-to-v2');
|
|
147
|
+
}
|
|
148
|
+
else if (result.hasMajorMismatches) {
|
|
149
|
+
lines.push('Your project has mismatched major versions across @agentuity/* packages.');
|
|
150
|
+
lines.push('');
|
|
151
|
+
lines.push(' Packages:');
|
|
152
|
+
for (const pkg of result.packages) {
|
|
153
|
+
const marker = result.mismatched.includes(pkg) ? ' ⚠️' : '';
|
|
154
|
+
lines.push(` • ${pkg.name}@${pkg.version} (v${pkg.major})${marker}`);
|
|
155
|
+
}
|
|
156
|
+
lines.push('');
|
|
157
|
+
lines.push(' → Run `bun install` to sync versions, or pin to the same major version.');
|
|
158
|
+
}
|
|
159
|
+
return lines.join('\n');
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=version-mismatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-mismatch.js","sourceRoot":"","sources":["../../src/utils/version-mismatch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAwBxC;;GAEG;AACH,SAAS,YAAY,CAAC,OAAe;IACpC,6CAA6C;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC/C,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,yBAAyB;IACzB,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;QAC7C,OAAO,CAAC,CAAC,CAAC,gBAAgB;IAC3B,CAAC;IACD,OAAO,CAAC,CAAC;AACV,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,UAAkB,EAAE,WAAmB;IACnE,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;QAC9E,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACb,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,OAAO,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,UAAkB,EAAE,MAAc;IACvE,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAE1C,MAAM,MAAM,GAA0B;QACrC,QAAQ;QACR,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;QACZ,aAAa,EAAE,KAAK;QACpB,kBAAkB,EAAE,KAAK;KACzB,CAAC;IAEF,iCAAiC;IACjC,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,wDAAwD,EAAE,UAAU,CAAC,CAAC;QACnF,OAAO,MAAM,CAAC;IACf,CAAC;IAED,oBAAoB;IACpB,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IACzD,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACvE,OAAO,MAAM,CAAC;IACf,CAAC;IAED,IAAI,WAGH,CAAC;IACF,IAAI,CAAC;QACJ,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;QACvD,OAAO,MAAM,CAAC;IACf,CAAC;IAED,oCAAoC;IACpC,MAAM,OAAO,GAAG;QACf,GAAG,WAAW,CAAC,YAAY;QAC3B,GAAG,WAAW,CAAC,eAAe;KAC9B,CAAC;IAEF,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;SAC9C,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;SAClD,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAEpD,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAC/D,OAAO,MAAM,CAAC;IACf,CAAC;IAED,yCAAyC;IACzC,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,gBAAgB,EAAE,CAAC;QACzC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;YAClD,SAAS;QACV,CAAC;QAED,MAAM,KAAK,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAgB;YACzB,IAAI;YACJ,OAAO,EAAE,gBAAgB;YACzB,KAAK;SACL,CAAC;QAEF,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3B,gDAAgD;QAChD,IAAI,KAAK,KAAK,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC;QAC7B,CAAC;IACF,CAAC;IAED,+DAA+D;IAC/D,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5D,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC;YACjC,+DAA+D;YAC/D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;YAC9C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACnC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACnE,CAAC;YACD,MAAM,eAAe,GACpB,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;YAE5E,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACnC,IAAI,GAAG,CAAC,KAAK,KAAK,eAAe,EAAE,CAAC;oBACnC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC7B,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAA6B;IACzE,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;QAChF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACnC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QAC9E,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;QAC7E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;IACxF,CAAC;SAAM,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;QACvF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,MAAM,GAAG,CAAC,KAAK,IAAI,MAAM,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;IACzF,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentuity/cli",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0-beta.1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"author": "Agentuity employees and contributors",
|
|
6
6
|
"type": "module",
|
|
@@ -41,9 +41,9 @@
|
|
|
41
41
|
"prepublishOnly": "bun run clean && bun run build"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@agentuity/auth": "
|
|
45
|
-
"@agentuity/core": "
|
|
46
|
-
"@agentuity/server": "
|
|
44
|
+
"@agentuity/auth": "2.0.0-beta.1",
|
|
45
|
+
"@agentuity/core": "2.0.0-beta.1",
|
|
46
|
+
"@agentuity/server": "2.0.0-beta.1",
|
|
47
47
|
"@datasert/cronjs-parser": "^1.4.0",
|
|
48
48
|
"@vitejs/plugin-react": "^5.1.2",
|
|
49
49
|
"acorn-loose": "^8.5.2",
|
|
@@ -59,10 +59,10 @@
|
|
|
59
59
|
"typescript": "^5.9.0",
|
|
60
60
|
"vite": "^7.2.7",
|
|
61
61
|
"zod": "^4.3.5",
|
|
62
|
-
"@agentuity/frontend": "
|
|
62
|
+
"@agentuity/frontend": "2.0.0-beta.1"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
|
-
"@agentuity/test-utils": "
|
|
65
|
+
"@agentuity/test-utils": "2.0.0-beta.1",
|
|
66
66
|
"@types/adm-zip": "^0.5.7",
|
|
67
67
|
"@types/bun": "latest",
|
|
68
68
|
"@types/tar-fs": "^2.0.4",
|
|
@@ -7,7 +7,6 @@ This folder contains AI agents for your Agentuity application. Each agent is org
|
|
|
7
7
|
The `src/generated/` folder contains auto-generated TypeScript files:
|
|
8
8
|
|
|
9
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
10
|
- `app.ts` - Application entry point (regenerated on every build)
|
|
12
11
|
|
|
13
12
|
**Important:** Never edit files in `src/generated/` - they are overwritten on every build.
|
package/src/cmd/ai/prompt/api.md
CHANGED
|
@@ -6,18 +6,11 @@ This folder contains REST API routes for your Agentuity application. Each API is
|
|
|
6
6
|
|
|
7
7
|
The `src/generated/` folder contains auto-generated TypeScript files:
|
|
8
8
|
|
|
9
|
-
- `routes.ts` - Route registry with strongly-typed route definitions and schema types
|
|
10
9
|
- `registry.ts` - Agent registry (for calling agents from routes)
|
|
11
10
|
- `app.ts` - Application entry point (regenerated on every build)
|
|
12
11
|
|
|
13
12
|
**Important:** Never edit files in `src/generated/` - they are overwritten on every build.
|
|
14
13
|
|
|
15
|
-
Import generated types in your routes:
|
|
16
|
-
|
|
17
|
-
```typescript
|
|
18
|
-
import type { POST_Api_UsersInput, POST_Api_UsersOutput } from '../generated/routes';
|
|
19
|
-
```
|
|
20
|
-
|
|
21
14
|
## Directory Structure
|
|
22
15
|
|
|
23
16
|
Each API folder must contain:
|
package/src/cmd/ai/prompt/web.md
CHANGED
|
@@ -6,19 +6,17 @@ This folder contains your React-based web application that communicates with you
|
|
|
6
6
|
|
|
7
7
|
The `src/generated/` folder contains auto-generated TypeScript files:
|
|
8
8
|
|
|
9
|
-
- `routes.ts` - Route registry with type-safe API, WebSocket, and SSE route definitions
|
|
10
9
|
- `registry.ts` - Agent registry with input/output types
|
|
11
10
|
|
|
12
11
|
**Important:** Never edit files in `src/generated/` - they are overwritten on every build.
|
|
13
12
|
|
|
14
|
-
|
|
13
|
+
For type-safe API calls, use Hono's `hc()` client:
|
|
15
14
|
|
|
16
15
|
```typescript
|
|
17
|
-
|
|
18
|
-
import {
|
|
16
|
+
import { hc } from 'hono/client';
|
|
17
|
+
import type { AppType } from '../api/router';
|
|
19
18
|
|
|
20
|
-
|
|
21
|
-
const { data } = useAPI('GET /api/users');
|
|
19
|
+
const client = hc<AppType>('/');
|
|
22
20
|
```
|
|
23
21
|
|
|
24
22
|
## Directory Structure
|
|
@@ -48,12 +46,25 @@ src/web/
|
|
|
48
46
|
### App.tsx - Main Component
|
|
49
47
|
|
|
50
48
|
```typescript
|
|
51
|
-
import { AgentuityProvider
|
|
49
|
+
import { AgentuityProvider } from '@agentuity/react';
|
|
50
|
+
import { hc } from 'hono/client';
|
|
51
|
+
import type { AppType } from '../api/router';
|
|
52
52
|
import { useState } from 'react';
|
|
53
53
|
|
|
54
|
+
const client = hc<AppType>('/');
|
|
55
|
+
|
|
54
56
|
function HelloForm() {
|
|
55
57
|
const [name, setName] = useState('World');
|
|
56
|
-
const
|
|
58
|
+
const [greeting, setGreeting] = useState<string | null>(null);
|
|
59
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
60
|
+
|
|
61
|
+
const handleSubmit = async () => {
|
|
62
|
+
setIsLoading(true);
|
|
63
|
+
const res = await client.api.hello.$post({ json: { name } });
|
|
64
|
+
const data = await res.json();
|
|
65
|
+
setGreeting(data.greeting);
|
|
66
|
+
setIsLoading(false);
|
|
67
|
+
};
|
|
57
68
|
|
|
58
69
|
return (
|
|
59
70
|
<div>
|
|
@@ -65,7 +76,7 @@ function HelloForm() {
|
|
|
65
76
|
/>
|
|
66
77
|
|
|
67
78
|
<button
|
|
68
|
-
onClick={
|
|
79
|
+
onClick={handleSubmit}
|
|
69
80
|
disabled={isLoading}
|
|
70
81
|
>
|
|
71
82
|
{isLoading ? 'Running...' : 'Say Hello'}
|
|
@@ -117,159 +128,30 @@ createRoot(root).render(<App />);
|
|
|
117
128
|
</html>
|
|
118
129
|
```
|
|
119
130
|
|
|
120
|
-
##
|
|
121
|
-
|
|
122
|
-
All hooks from `@agentuity/react` must be used within an `AgentuityProvider`. **Always use these hooks instead of raw `fetch()` calls** - they provide type safety, automatic error handling, and integration with the Agentuity platform.
|
|
123
|
-
|
|
124
|
-
### useAPI - Type-Safe API Calls
|
|
125
|
-
|
|
126
|
-
The primary hook for making HTTP requests. **Use this instead of `fetch()`.**
|
|
127
|
-
|
|
128
|
-
```typescript
|
|
129
|
-
import { useAPI } from '@agentuity/react';
|
|
130
|
-
|
|
131
|
-
function MyComponent() {
|
|
132
|
-
// GET requests auto-execute and return refetch
|
|
133
|
-
const { data, isLoading, error, refetch } = useAPI('GET /api/users');
|
|
134
|
-
|
|
135
|
-
// POST/PUT/DELETE return invoke for manual execution
|
|
136
|
-
const { invoke, data: result, isLoading: saving } = useAPI('POST /api/users');
|
|
137
|
-
|
|
138
|
-
const handleCreate = async () => {
|
|
139
|
-
// Input is fully typed from route schema!
|
|
140
|
-
await invoke({ name: 'Alice', email: 'alice@example.com' });
|
|
141
|
-
};
|
|
142
|
-
|
|
143
|
-
return (
|
|
144
|
-
<div>
|
|
145
|
-
<button onClick={handleCreate} disabled={saving}>
|
|
146
|
-
{saving ? 'Creating...' : 'Create User'}
|
|
147
|
-
</button>
|
|
148
|
-
{result && <p>Created: {result.name}</p>}
|
|
149
|
-
</div>
|
|
150
|
-
);
|
|
151
|
-
}
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
**useAPI Return Values:**
|
|
131
|
+
## Type-Safe API Calls
|
|
155
132
|
|
|
156
|
-
|
|
157
|
-
| ------------ | ------------------------ | ----------------------------------------- |
|
|
158
|
-
| `data` | `T \| undefined` | Response data (typed from route schema) |
|
|
159
|
-
| `error` | `Error \| null` | Error if request failed |
|
|
160
|
-
| `isLoading` | `boolean` | True during initial load |
|
|
161
|
-
| `isFetching` | `boolean` | True during any fetch (including refetch) |
|
|
162
|
-
| `isSuccess` | `boolean` | True if last request succeeded |
|
|
163
|
-
| `isError` | `boolean` | True if last request failed |
|
|
164
|
-
| `invoke` | `(input?) => Promise<T>` | Manual trigger (POST/PUT/DELETE) |
|
|
165
|
-
| `refetch` | `() => Promise<void>` | Refetch data (GET) |
|
|
166
|
-
| `reset` | `() => void` | Reset state to initial |
|
|
167
|
-
|
|
168
|
-
### useAPI Options
|
|
133
|
+
Use Hono's `hc()` client for type-safe API calls. The types are derived directly from your router.
|
|
169
134
|
|
|
170
135
|
```typescript
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
route: 'GET /api/search',
|
|
174
|
-
query: { q: 'react', limit: '10' },
|
|
175
|
-
staleTime: 5000, // Cache for 5 seconds
|
|
176
|
-
refetchInterval: 10000, // Auto-refetch every 10 seconds
|
|
177
|
-
enabled: true, // Set to false to disable auto-fetch
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
// POST with callbacks
|
|
181
|
-
const { invoke } = useAPI({
|
|
182
|
-
route: 'POST /api/users',
|
|
183
|
-
onSuccess: (data) => console.log('Created:', data),
|
|
184
|
-
onError: (error) => console.error('Failed:', error),
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
// Streaming responses with onChunk
|
|
188
|
-
const { invoke } = useAPI({
|
|
189
|
-
route: 'POST /api/stream',
|
|
190
|
-
onChunk: (chunk) => console.log('Received chunk:', chunk),
|
|
191
|
-
delimiter: '\n', // Split stream by newlines (default)
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
// Custom headers
|
|
195
|
-
const { data } = useAPI({
|
|
196
|
-
route: 'GET /api/protected',
|
|
197
|
-
headers: { 'X-Custom-Header': 'value' },
|
|
198
|
-
});
|
|
199
|
-
```
|
|
136
|
+
import { hc } from 'hono/client';
|
|
137
|
+
import type { AppType } from '../api/router';
|
|
200
138
|
|
|
201
|
-
|
|
139
|
+
// Create a typed client
|
|
140
|
+
const client = hc<AppType>('/');
|
|
202
141
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
import { useWebsocket } from '@agentuity/react';
|
|
142
|
+
// All routes are fully typed
|
|
143
|
+
const res = await client.api.users.$get();
|
|
144
|
+
const users = await res.json();
|
|
207
145
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
return (
|
|
212
|
-
<div>
|
|
213
|
-
<p>Status: {isConnected ? 'Connected' : 'Disconnected'}</p>
|
|
214
|
-
<button onClick={() => send({ message: 'Hello' })}>Send</button>
|
|
215
|
-
<div>
|
|
216
|
-
{messages.map((msg, i) => (
|
|
217
|
-
<p key={i}>{JSON.stringify(msg)}</p>
|
|
218
|
-
))}
|
|
219
|
-
</div>
|
|
220
|
-
<button onClick={clearMessages}>Clear</button>
|
|
221
|
-
</div>
|
|
222
|
-
);
|
|
223
|
-
}
|
|
146
|
+
const res2 = await client.api.users.$post({ json: { name: 'Alice', email: 'alice@example.com' } });
|
|
147
|
+
const created = await res2.json();
|
|
224
148
|
```
|
|
225
149
|
|
|
226
|
-
|
|
150
|
+
For WebSocket and SSE, use the native browser APIs or `WebSocketManager`/`EventStreamManager` from `@agentuity/frontend`.
|
|
227
151
|
|
|
228
|
-
|
|
229
|
-
| --------------- | ---------------- | ---------------------------------------- |
|
|
230
|
-
| `isConnected` | `boolean` | True when WebSocket is connected |
|
|
231
|
-
| `data` | `T \| undefined` | Most recent message received |
|
|
232
|
-
| `messages` | `T[]` | Array of all received messages |
|
|
233
|
-
| `send` | `(data) => void` | Send a message (typed from route schema) |
|
|
234
|
-
| `clearMessages` | `() => void` | Clear the messages array |
|
|
235
|
-
| `close` | `() => void` | Close the connection |
|
|
236
|
-
| `error` | `Error \| null` | Error if connection failed |
|
|
237
|
-
| `isError` | `boolean` | True if there's an error |
|
|
238
|
-
| `reset` | `() => void` | Reset state and reconnect |
|
|
239
|
-
| `readyState` | `number` | WebSocket ready state |
|
|
240
|
-
|
|
241
|
-
### useEventStream - Server-Sent Events
|
|
242
|
-
|
|
243
|
-
For server-to-client streaming (one-way). Use when server pushes updates to client.
|
|
244
|
-
|
|
245
|
-
```typescript
|
|
246
|
-
import { useEventStream } from '@agentuity/react';
|
|
247
|
-
|
|
248
|
-
function NotificationsComponent() {
|
|
249
|
-
const { isConnected, data, error, close, reset } = useEventStream('/api/notifications');
|
|
250
|
-
|
|
251
|
-
return (
|
|
252
|
-
<div>
|
|
253
|
-
<p>Connected: {isConnected ? 'Yes' : 'No'}</p>
|
|
254
|
-
{error && <p>Error: {error.message}</p>}
|
|
255
|
-
<p>Latest: {JSON.stringify(data)}</p>
|
|
256
|
-
<button onClick={close}>Disconnect</button>
|
|
257
|
-
</div>
|
|
258
|
-
);
|
|
259
|
-
}
|
|
260
|
-
```
|
|
261
|
-
|
|
262
|
-
**useEventStream Return Values:**
|
|
152
|
+
## React Hooks
|
|
263
153
|
|
|
264
|
-
|
|
265
|
-
| ------------- | ---------------- | ---------------------------------- |
|
|
266
|
-
| `isConnected` | `boolean` | True when EventSource is connected |
|
|
267
|
-
| `data` | `T \| undefined` | Most recent event data |
|
|
268
|
-
| `error` | `Error \| null` | Error if connection failed |
|
|
269
|
-
| `isError` | `boolean` | True if there's an error |
|
|
270
|
-
| `close` | `() => void` | Close the connection |
|
|
271
|
-
| `reset` | `() => void` | Reset state and reconnect |
|
|
272
|
-
| `readyState` | `number` | EventSource ready state |
|
|
154
|
+
`@agentuity/react` provides hooks for context, auth, WebRTC, and analytics. All hooks must be used within an `AgentuityProvider`.
|
|
273
155
|
|
|
274
156
|
### useAgentuity - Access Context
|
|
275
157
|
|
|
@@ -330,22 +212,21 @@ function AuthStatus() {
|
|
|
330
212
|
## Complete Example
|
|
331
213
|
|
|
332
214
|
```typescript
|
|
333
|
-
import { AgentuityProvider
|
|
334
|
-
import {
|
|
215
|
+
import { AgentuityProvider } from '@agentuity/react';
|
|
216
|
+
import { hc } from 'hono/client';
|
|
217
|
+
import type { AppType } from '../api/router';
|
|
218
|
+
import { useState } from 'react';
|
|
219
|
+
|
|
220
|
+
const client = hc<AppType>('/');
|
|
335
221
|
|
|
336
222
|
function Dashboard() {
|
|
337
223
|
const [count, setCount] = useState(0);
|
|
338
|
-
const
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
send({ ping: Date.now() });
|
|
345
|
-
}, 1000);
|
|
346
|
-
return () => clearInterval(interval);
|
|
347
|
-
}
|
|
348
|
-
}, [isConnected, send]);
|
|
224
|
+
const [result, setResult] = useState<any>(null);
|
|
225
|
+
|
|
226
|
+
const handleProcess = async () => {
|
|
227
|
+
const res = await client.api.process.$post({ json: { name: 'Jeff', age: 30 } });
|
|
228
|
+
setResult(await res.json());
|
|
229
|
+
};
|
|
349
230
|
|
|
350
231
|
return (
|
|
351
232
|
<div style={{ fontFamily: 'sans-serif', padding: '2rem' }}>
|
|
@@ -359,15 +240,10 @@ function Dashboard() {
|
|
|
359
240
|
</div>
|
|
360
241
|
|
|
361
242
|
<div>
|
|
362
|
-
<button onClick={
|
|
243
|
+
<button onClick={handleProcess}>
|
|
363
244
|
Call API
|
|
364
245
|
</button>
|
|
365
|
-
<p>{JSON.stringify(
|
|
366
|
-
</div>
|
|
367
|
-
|
|
368
|
-
<div>
|
|
369
|
-
<strong>WebSocket:</strong>
|
|
370
|
-
{isConnected ? JSON.stringify(wsMessage) : 'Not connected'}
|
|
246
|
+
<p>{JSON.stringify(result)}</p>
|
|
371
247
|
</div>
|
|
372
248
|
</div>
|
|
373
249
|
);
|
|
@@ -451,47 +327,10 @@ Import in `index.html`:
|
|
|
451
327
|
</div>
|
|
452
328
|
```
|
|
453
329
|
|
|
454
|
-
## RPC-Style API Client
|
|
455
|
-
|
|
456
|
-
For non-React contexts (like utility functions or event handlers), use `createClient`:
|
|
457
|
-
|
|
458
|
-
```typescript
|
|
459
|
-
import { createClient } from '@agentuity/react';
|
|
460
|
-
|
|
461
|
-
// Create a typed client (uses global baseUrl and auth from AgentuityProvider)
|
|
462
|
-
const api = createClient();
|
|
463
|
-
|
|
464
|
-
// Type-safe RPC-style calls - routes become nested objects
|
|
465
|
-
// Route 'GET /api/users' becomes api.users.get()
|
|
466
|
-
// Route 'POST /api/users' becomes api.users.post()
|
|
467
|
-
// Route 'GET /api/users/:id' becomes api.users.id.get({ id: '123' })
|
|
468
|
-
|
|
469
|
-
async function fetchData() {
|
|
470
|
-
const users = await api.users.get();
|
|
471
|
-
const newUser = await api.users.post({ name: 'Alice', email: 'alice@example.com' });
|
|
472
|
-
const user = await api.users.id.get({ id: '123' });
|
|
473
|
-
return { users, newUser, user };
|
|
474
|
-
}
|
|
475
|
-
```
|
|
476
|
-
|
|
477
|
-
**When to use `createClient` vs `useAPI`:**
|
|
478
|
-
|
|
479
|
-
| Use Case | Recommendation |
|
|
480
|
-
| ------------------------- | -------------- |
|
|
481
|
-
| React component rendering | `useAPI` hook |
|
|
482
|
-
| Event handlers | Either works |
|
|
483
|
-
| Utility functions | `createClient` |
|
|
484
|
-
| Non-React code | `createClient` |
|
|
485
|
-
| Need loading/error state | `useAPI` hook |
|
|
486
|
-
| Need caching/refetch | `useAPI` hook |
|
|
487
|
-
|
|
488
330
|
## Best Practices
|
|
489
331
|
|
|
490
|
-
- Wrap your app with **AgentuityProvider** for
|
|
491
|
-
- **
|
|
492
|
-
- Use **useAPI** for type-safe HTTP requests (GET, POST, PUT, DELETE)
|
|
493
|
-
- Use **useWebsocket** for bidirectional real-time communication
|
|
494
|
-
- Use **useEventStream** for server-to-client streaming
|
|
332
|
+
- Wrap your app with **AgentuityProvider** for auth and context
|
|
333
|
+
- Use **hc()** from `hono/client` for type-safe API calls
|
|
495
334
|
- Use **useAuth** for authentication state management
|
|
496
335
|
- Handle loading and error states in UI
|
|
497
336
|
- Place reusable components in separate files
|
|
@@ -502,8 +341,7 @@ async function fetchData() {
|
|
|
502
341
|
- **App.tsx** must export a function named `App`
|
|
503
342
|
- **frontend.tsx** must render the `App` component to `#root`
|
|
504
343
|
- **index.html** must have a `<div id="root"></div>`
|
|
505
|
-
-
|
|
344
|
+
- Route types are derived from your Hono router via `hc<typeof router>()`
|
|
506
345
|
- The web app is served at `/` by default
|
|
507
346
|
- Static files in `public/` are served at `/public/*`
|
|
508
347
|
- Module script tag: `<script type="module" src="/web/frontend.tsx"></script>`
|
|
509
|
-
- **Never use raw `fetch()` calls** - always use `useAPI` or `createClient`
|