theokit 0.13.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{actions-virtual-module-3CDQTWOC.js → actions-virtual-module-G4BANOLW.js} +5 -3
- package/dist/{actions-virtual-module-3CDQTWOC.js.map → actions-virtual-module-G4BANOLW.js.map} +1 -1
- package/dist/{actions-virtual-module-EIPXX4ZB.js → actions-virtual-module-RM7JRY5N.js} +7 -7
- package/dist/agent-MN7XGJR3.js +209 -0
- package/dist/agent-MN7XGJR3.js.map +1 -0
- package/dist/{app-typed-client-7PBFWZUE.js → app-typed-client-5VQE6DNF.js} +7 -7
- package/dist/{app-typed-client-CSOK7NPC.js → app-typed-client-Z6BHD4MF.js} +5 -3
- package/dist/{app-typed-client-CSOK7NPC.js.map → app-typed-client-Z6BHD4MF.js.map} +1 -1
- package/dist/boot/index.js +3 -3
- package/dist/{build-HXND27XG.js → build-QDAFSKKW.js} +11 -7
- package/dist/{build-HXND27XG.js.map → build-QDAFSKKW.js.map} +1 -1
- package/dist/chunk-34YQOXGM.js +37 -0
- package/dist/chunk-34YQOXGM.js.map +1 -0
- package/dist/{chunk-7YZHAQU7.js → chunk-567NA7Y6.js} +8 -99
- package/dist/chunk-567NA7Y6.js.map +1 -0
- package/dist/{chunk-3S3BNW5K.js → chunk-5UUOGAJH.js} +2 -2
- package/dist/{chunk-BQDGES7C.js → chunk-GBXLKYIA.js} +19 -43
- package/dist/chunk-GBXLKYIA.js.map +1 -0
- package/dist/chunk-GDN3PXFH.js +101 -0
- package/dist/chunk-GDN3PXFH.js.map +1 -0
- package/dist/{chunk-TGTNRUH3.js → chunk-H243MR3F.js} +2 -2
- package/dist/{chunk-NHJMZCAS.js → chunk-JZHT3LW7.js} +1 -1
- package/dist/chunk-JZHT3LW7.js.map +1 -0
- package/dist/chunk-KGFNWIMS.js +94 -0
- package/dist/chunk-KGFNWIMS.js.map +1 -0
- package/dist/{chunk-EXP56GFQ.js → chunk-NBWB4S46.js} +38 -9
- package/dist/chunk-NBWB4S46.js.map +1 -0
- package/dist/{chunk-F4YUPDJ2.js → chunk-NXTF5PPW.js} +15 -41
- package/dist/chunk-NXTF5PPW.js.map +1 -0
- package/dist/{chunk-UNLA45FY.js → chunk-OTFIRP6S.js} +76 -46
- package/dist/chunk-OTFIRP6S.js.map +1 -0
- package/dist/chunk-P37RZRFV.js +31 -0
- package/dist/chunk-P37RZRFV.js.map +1 -0
- package/dist/{chunk-RYTZYFSD.js → chunk-UOR6JTCI.js} +205 -33
- package/dist/chunk-UOR6JTCI.js.map +1 -0
- package/dist/{chunk-WFNLNIJX.js → chunk-Z5IGLBWE.js} +1 -1
- package/dist/{chunk-O62MW4MT.js → chunk-ZJDKAD3L.js} +55 -14
- package/dist/chunk-ZJDKAD3L.js.map +1 -0
- package/dist/cli/index.js +22 -6
- package/dist/cli/index.js.map +1 -1
- package/dist/client/index.d.ts +3 -152
- package/dist/client/index.js +13 -236
- package/dist/client/index.js.map +1 -1
- package/dist/{dev-OWW4XVIH.js → dev-TEE4T6ZB.js} +13 -8
- package/dist/{dev-OWW4XVIH.js.map → dev-TEE4T6ZB.js.map} +1 -1
- package/dist/{dev-emit-5MDSBP5D.js → dev-emit-VJ5CFMPY.js} +5 -3
- package/dist/{dev-emit-5MDSBP5D.js.map → dev-emit-VJ5CFMPY.js.map} +1 -1
- package/dist/index.js +12 -13
- package/dist/index.js.map +1 -1
- package/dist/{info-OUEUZOT7.js → info-7PE2PZJI.js} +6 -5
- package/dist/{info-OUEUZOT7.js.map → info-7PE2PZJI.js.map} +1 -1
- package/dist/{internal-api-4YTJDITC.js → internal-api-5BDI6N5U.js} +20 -20
- package/dist/{internal-api-EFKZWIYZ.js → internal-api-J27TYE2I.js} +7 -4
- package/dist/load-config-JKYO5RFK.js +14 -0
- package/dist/{openapi-FHY6HC6I.js → openapi-MXMLZCXC.js} +7 -4
- package/dist/{openapi-FHY6HC6I.js.map → openapi-MXMLZCXC.js.map} +1 -1
- package/dist/{registry-34LL7NF4.js → registry-XJUYD2OU.js} +2 -2
- package/dist/{routes-EW7TP7NJ.js → routes-NNBEZSGN.js} +5 -3
- package/dist/{routes-EW7TP7NJ.js.map → routes-NNBEZSGN.js.map} +1 -1
- package/dist/server/auth/index.js +1 -1
- package/dist/server/define/index.d.ts +3 -70
- package/dist/server/define/index.js +2 -4
- package/dist/server/http/index.js +2 -2
- package/dist/server/index.d.ts +1 -3
- package/dist/server/index.js +90 -105
- package/dist/server/index.js.map +1 -1
- package/dist/server/jobs/index.js +4 -4
- package/dist/server/observability/index.js +1 -1
- package/dist/server/scan/index.js +1 -1
- package/dist/{start-KIQ5TTLR.js → start-7MQEEQH4.js} +68 -8
- package/dist/start-7MQEEQH4.js.map +1 -0
- package/dist/{static-55G3LX2I.js → static-7ARBVDJF.js} +4 -4
- package/dist/vite-plugin/index.js +12 -13
- package/dist/{vite-plugin-RK66K26Z.js → vite-plugin-GC6WCU4P.js} +11 -7
- package/package.json +2 -6
- package/dist/agent-events-DosDXkSV.d.ts +0 -94
- package/dist/chunk-2KZQPDYR.js +0 -226
- package/dist/chunk-2KZQPDYR.js.map +0 -1
- package/dist/chunk-7YZHAQU7.js.map +0 -1
- package/dist/chunk-BQDGES7C.js.map +0 -1
- package/dist/chunk-EXP56GFQ.js.map +0 -1
- package/dist/chunk-F4YUPDJ2.js.map +0 -1
- package/dist/chunk-NHJMZCAS.js.map +0 -1
- package/dist/chunk-O62MW4MT.js.map +0 -1
- package/dist/chunk-RYTZYFSD.js.map +0 -1
- package/dist/chunk-UNLA45FY.js.map +0 -1
- package/dist/chunk-ZSTZXR2D.js +0 -208
- package/dist/chunk-ZSTZXR2D.js.map +0 -1
- package/dist/server/agent/index.d.ts +0 -229
- package/dist/server/agent/index.js +0 -17
- package/dist/start-KIQ5TTLR.js.map +0 -1
- /package/dist/{actions-virtual-module-EIPXX4ZB.js.map → actions-virtual-module-RM7JRY5N.js.map} +0 -0
- /package/dist/{app-typed-client-7PBFWZUE.js.map → app-typed-client-5VQE6DNF.js.map} +0 -0
- /package/dist/{chunk-3S3BNW5K.js.map → chunk-5UUOGAJH.js.map} +0 -0
- /package/dist/{chunk-TGTNRUH3.js.map → chunk-H243MR3F.js.map} +0 -0
- /package/dist/{chunk-WFNLNIJX.js.map → chunk-Z5IGLBWE.js.map} +0 -0
- /package/dist/{internal-api-4YTJDITC.js.map → internal-api-5BDI6N5U.js.map} +0 -0
- /package/dist/{internal-api-EFKZWIYZ.js.map → internal-api-J27TYE2I.js.map} +0 -0
- /package/dist/{server/agent/index.js.map → load-config-JKYO5RFK.js.map} +0 -0
- /package/dist/{registry-34LL7NF4.js.map → registry-XJUYD2OU.js.map} +0 -0
- /package/dist/{static-55G3LX2I.js.map → static-7ARBVDJF.js.map} +0 -0
- /package/dist/{vite-plugin-RK66K26Z.js.map → vite-plugin-GC6WCU4P.js.map} +0 -0
package/dist/cli/index.js
CHANGED
|
@@ -5,12 +5,12 @@ import "tsx/esm";
|
|
|
5
5
|
import cac from "cac";
|
|
6
6
|
var cli = cac("theokit");
|
|
7
7
|
cli.command("dev", "Start development server").option("--port <port>", "Port number").action(async (options) => {
|
|
8
|
-
const { devCommand } = await import("../dev-
|
|
8
|
+
const { devCommand } = await import("../dev-TEE4T6ZB.js");
|
|
9
9
|
await devCommand({ port: options.port ? Number(options.port) : void 0 });
|
|
10
10
|
});
|
|
11
11
|
cli.command("build", "Build for production").option("--target <target>", "Deploy target (node, vercel, cloudflare)").action(async (options) => {
|
|
12
12
|
try {
|
|
13
|
-
const { buildCommand } = await import("../build-
|
|
13
|
+
const { buildCommand } = await import("../build-QDAFSKKW.js");
|
|
14
14
|
await buildCommand({ target: options.target });
|
|
15
15
|
} catch (err) {
|
|
16
16
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -22,7 +22,7 @@ cli.command("build", "Build for production").option("--target <target>", "Deploy
|
|
|
22
22
|
});
|
|
23
23
|
cli.command("start", "Start production server").option("--port <port>", "Port number").action(async (options) => {
|
|
24
24
|
try {
|
|
25
|
-
const { startCommand } = await import("../start-
|
|
25
|
+
const { startCommand } = await import("../start-7MQEEQH4.js");
|
|
26
26
|
await startCommand({ port: options.port ? Number(options.port) : void 0 });
|
|
27
27
|
} catch (err) {
|
|
28
28
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -47,9 +47,25 @@ cli.command(
|
|
|
47
47
|
process.exit(1);
|
|
48
48
|
}
|
|
49
49
|
});
|
|
50
|
+
cli.command(
|
|
51
|
+
"agent <name> [message]",
|
|
52
|
+
"Run an agent in the terminal (stream + tool calls + approval)"
|
|
53
|
+
).action(async (name, message) => {
|
|
54
|
+
try {
|
|
55
|
+
const { agentCommand } = await import("../agent-MN7XGJR3.js");
|
|
56
|
+
const { sawError } = await agentCommand(name, message);
|
|
57
|
+
if (sawError) process.exit(1);
|
|
58
|
+
} catch (err) {
|
|
59
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
60
|
+
console.error(`
|
|
61
|
+
\u2717 ${msg}
|
|
62
|
+
`);
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
50
66
|
cli.command("routes", "List all routes, actions, and WebSocket endpoints").action(async () => {
|
|
51
67
|
try {
|
|
52
|
-
const { routesCommand } = await import("../routes-
|
|
68
|
+
const { routesCommand } = await import("../routes-NNBEZSGN.js");
|
|
53
69
|
await routesCommand();
|
|
54
70
|
} catch (err) {
|
|
55
71
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -90,7 +106,7 @@ cli.command("add <package>", "Install a known TheoKit adapter or plugin (whiteli
|
|
|
90
106
|
await addCommand(pkg);
|
|
91
107
|
});
|
|
92
108
|
cli.command("info", "Print environment info (runtime, config, routes)").action(async () => {
|
|
93
|
-
const { infoCommand } = await import("../info-
|
|
109
|
+
const { infoCommand } = await import("../info-7PE2PZJI.js");
|
|
94
110
|
await infoCommand();
|
|
95
111
|
});
|
|
96
112
|
cli.command(
|
|
@@ -98,7 +114,7 @@ cli.command(
|
|
|
98
114
|
"Generate <distDir>/openapi.json from route schemas (opt-in via config.openapi)"
|
|
99
115
|
).option("--dry-run", "Print the document to stdout without writing to disk (EC-3)").action(async (options) => {
|
|
100
116
|
try {
|
|
101
|
-
const { openapiCommand } = await import("../openapi-
|
|
117
|
+
const { openapiCommand } = await import("../openapi-MXMLZCXC.js");
|
|
102
118
|
await openapiCommand({ dryRun: Boolean(options.dryRun) });
|
|
103
119
|
} catch (err) {
|
|
104
120
|
const msg = err instanceof Error ? err.message : String(err);
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/index.ts"],"sourcesContent":["import cac from 'cac'\n\ninterface CliOptions {\n port?: string | number\n target?: string\n upgradeReadiness?: string | number\n json?: boolean\n allowWarnings?: boolean\n force?: boolean\n dryRun?: boolean\n}\n\nconst cli = cac('theokit')\n\ncli\n .command('dev', 'Start development server')\n .option('--port <port>', 'Port number')\n .action(async (options: CliOptions) => {\n const { devCommand } = await import('./commands/dev.js')\n await devCommand({ port: options.port ? Number(options.port) : undefined })\n })\n\ncli\n .command('build', 'Build for production')\n .option('--target <target>', 'Deploy target (node, vercel, cloudflare)')\n .action(async (options: CliOptions) => {\n try {\n const { buildCommand } = await import('./commands/build.js')\n await buildCommand({ target: options.target })\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`\\n ✗ ${msg}\\n`)\n process.exit(1)\n }\n })\n\ncli\n .command('start', 'Start production server')\n .option('--port <port>', 'Port number')\n .action(async (options: CliOptions) => {\n try {\n const { startCommand } = await import('./commands/start/index.js')\n await startCommand({ port: options.port ? Number(options.port) : undefined })\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`\\n ✗ ${msg}\\n`)\n process.exit(1)\n }\n })\n\ncli\n .command(\n 'generate <type> <name> [...fields]',\n 'Generate a route, action, page, ws, controller, or resource (resource accepts field:type args)',\n )\n .action(async (type: string, name: string, fields: string[]) => {\n try {\n const { generateCommand } = await import('./commands/generate.js')\n await generateCommand(type, name, fields.length > 0 ? fields : undefined)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`\\n ✗ ${msg}\\n`)\n process.exit(1)\n }\n })\n\ncli.command('routes', 'List all routes, actions, and WebSocket endpoints').action(async () => {\n try {\n const { routesCommand } = await import('./commands/routes.js')\n await routesCommand()\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`\\n ✗ ${msg}\\n`)\n process.exit(1)\n }\n})\n\ncli\n .command('check', 'Run typecheck + scan + (optional) eslint')\n .option(\n '--upgrade-readiness <version>',\n 'Scan source for anticipated breakage under a future TheoKit version (currently supports 0.3). See docs/migration/0.2-to-0.3.md',\n )\n .option('--json', 'Emit machine-readable JSON (only with --upgrade-readiness)')\n .option(\n '--allow-warnings',\n 'Do not fail the build when violations are present (only with --upgrade-readiness)',\n )\n .action(async (options: CliOptions) => {\n // cac may coerce `0.3` to a JS number — normalize before comparing.\n const targetRaw = options.upgradeReadiness\n if (targetRaw !== undefined) {\n const target = String(targetRaw)\n if (target !== '0.3') {\n console.error(`\\n ✗ --upgrade-readiness: only '0.3' is supported (got '${target}')\\n`)\n process.exit(1)\n }\n const { upgradeReadinessCommand } = await import('./commands/upgrade-readiness.js')\n await upgradeReadinessCommand({\n json: Boolean(options.json),\n allowWarnings: Boolean(options.allowWarnings),\n })\n return\n }\n const { checkCommand } = await import('./commands/check.js')\n await checkCommand()\n })\n\ncli\n .command('add <package>', 'Install a known TheoKit adapter or plugin (whitelist-only)')\n .action(async (pkg: string) => {\n const { addCommand } = await import('./commands/add.js')\n await addCommand(pkg)\n })\n\ncli.command('info', 'Print environment info (runtime, config, routes)').action(async () => {\n const { infoCommand } = await import('./commands/info.js')\n await infoCommand()\n})\n\ncli\n .command(\n 'openapi',\n 'Generate <distDir>/openapi.json from route schemas (opt-in via config.openapi)',\n )\n .option('--dry-run', 'Print the document to stdout without writing to disk (EC-3)')\n .action(async (options: CliOptions) => {\n try {\n const { openapiCommand } = await import('./commands/openapi.js')\n await openapiCommand({ dryRun: Boolean(options.dryRun) })\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`\\n ✗ ${msg}\\n`)\n process.exit(1)\n }\n })\n\ncli\n .command(\n 'migrate <kind>',\n 'Run a one-shot convention migration. Supported: router (G6 dotted→nested), services-json-v1-to-v2 (Plan v1.2 T2.3)',\n )\n .option('--dry-run', 'Print the migration plan but do not touch the filesystem')\n .option('--force', 'Skip the dev-server port pre-flight check (CI / non-TTY)')\n .option('--name <slug>', 'Explicit project name (DNS-1123). Services-json migrate only.')\n .action(async (kind: string, options: CliOptions & { name?: string }) => {\n try {\n if (kind === 'router') {\n const { routerMigrateCommand } = await import('./commands/migrate/router.js')\n await routerMigrateCommand({\n dryRun: Boolean(options.dryRun),\n force: Boolean(options.force),\n })\n return\n }\n if (kind === 'services-json-v1-to-v2' || kind === 'services-json') {\n const { servicesJsonMigrateCommand } = await import('./commands/migrate/services-json.js')\n await servicesJsonMigrateCommand({\n dryRun: Boolean(options.dryRun),\n name: options.name,\n })\n return\n }\n console.error(\n `\\n ✗ Unknown migration kind: ${kind}. Supported: router, services-json-v1-to-v2\\n`,\n )\n process.exit(1)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`\\n ✗ ${msg}\\n`)\n process.exit(1)\n }\n })\n\ncli\n .command('docker', 'Generate Dockerfile for production')\n .option('--force', 'Overwrite existing Dockerfile')\n .action(async (options: CliOptions) => {\n try {\n const { dockerCommand } = await import('./commands/docker.js')\n await dockerCommand({ force: options.force })\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`\\n ✗ ${msg}\\n`)\n process.exit(1)\n }\n })\n\ncli\n .command('db <action>', 'Database commands: migrate (push schema), generate (SQL files), seed')\n .action(async (action: string) => {\n try {\n const { dbCommandCli } = await import('./commands/db.js')\n dbCommandCli(action)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`\\n ✗ ${msg}\\n`)\n process.exit(1)\n }\n })\n\ncli.help()\ncli.version('0.1.0-alpha.0')\n\nexport function main(): void {\n cli.parse()\n}\n\n// Auto-execute when run as script\nmain()\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/cli/index.ts"],"sourcesContent":["import cac from 'cac'\n\ninterface CliOptions {\n port?: string | number\n target?: string\n upgradeReadiness?: string | number\n json?: boolean\n allowWarnings?: boolean\n force?: boolean\n dryRun?: boolean\n}\n\nconst cli = cac('theokit')\n\ncli\n .command('dev', 'Start development server')\n .option('--port <port>', 'Port number')\n .action(async (options: CliOptions) => {\n const { devCommand } = await import('./commands/dev.js')\n await devCommand({ port: options.port ? Number(options.port) : undefined })\n })\n\ncli\n .command('build', 'Build for production')\n .option('--target <target>', 'Deploy target (node, vercel, cloudflare)')\n .action(async (options: CliOptions) => {\n try {\n const { buildCommand } = await import('./commands/build.js')\n await buildCommand({ target: options.target })\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`\\n ✗ ${msg}\\n`)\n process.exit(1)\n }\n })\n\ncli\n .command('start', 'Start production server')\n .option('--port <port>', 'Port number')\n .action(async (options: CliOptions) => {\n try {\n const { startCommand } = await import('./commands/start/index.js')\n await startCommand({ port: options.port ? Number(options.port) : undefined })\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`\\n ✗ ${msg}\\n`)\n process.exit(1)\n }\n })\n\ncli\n .command(\n 'generate <type> <name> [...fields]',\n 'Generate a route, action, page, ws, controller, or resource (resource accepts field:type args)',\n )\n .action(async (type: string, name: string, fields: string[]) => {\n try {\n const { generateCommand } = await import('./commands/generate.js')\n await generateCommand(type, name, fields.length > 0 ? fields : undefined)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`\\n ✗ ${msg}\\n`)\n process.exit(1)\n }\n })\n\ncli\n .command(\n 'agent <name> [message]',\n 'Run an agent in the terminal (stream + tool calls + approval)',\n )\n .action(async (name: string, message: string | undefined) => {\n try {\n const { agentCommand } = await import('./commands/agent.js')\n const { sawError } = await agentCommand(name, message)\n // The run ended with an error chunk (already rendered) — exit non-zero so `$?` / CI reflects it.\n if (sawError) process.exit(1)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`\\n ✗ ${msg}\\n`)\n process.exit(1)\n }\n })\n\ncli.command('routes', 'List all routes, actions, and WebSocket endpoints').action(async () => {\n try {\n const { routesCommand } = await import('./commands/routes.js')\n await routesCommand()\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`\\n ✗ ${msg}\\n`)\n process.exit(1)\n }\n})\n\ncli\n .command('check', 'Run typecheck + scan + (optional) eslint')\n .option(\n '--upgrade-readiness <version>',\n 'Scan source for anticipated breakage under a future TheoKit version (currently supports 0.3). See docs/migration/0.2-to-0.3.md',\n )\n .option('--json', 'Emit machine-readable JSON (only with --upgrade-readiness)')\n .option(\n '--allow-warnings',\n 'Do not fail the build when violations are present (only with --upgrade-readiness)',\n )\n .action(async (options: CliOptions) => {\n // cac may coerce `0.3` to a JS number — normalize before comparing.\n const targetRaw = options.upgradeReadiness\n if (targetRaw !== undefined) {\n const target = String(targetRaw)\n if (target !== '0.3') {\n console.error(`\\n ✗ --upgrade-readiness: only '0.3' is supported (got '${target}')\\n`)\n process.exit(1)\n }\n const { upgradeReadinessCommand } = await import('./commands/upgrade-readiness.js')\n await upgradeReadinessCommand({\n json: Boolean(options.json),\n allowWarnings: Boolean(options.allowWarnings),\n })\n return\n }\n const { checkCommand } = await import('./commands/check.js')\n await checkCommand()\n })\n\ncli\n .command('add <package>', 'Install a known TheoKit adapter or plugin (whitelist-only)')\n .action(async (pkg: string) => {\n const { addCommand } = await import('./commands/add.js')\n await addCommand(pkg)\n })\n\ncli.command('info', 'Print environment info (runtime, config, routes)').action(async () => {\n const { infoCommand } = await import('./commands/info.js')\n await infoCommand()\n})\n\ncli\n .command(\n 'openapi',\n 'Generate <distDir>/openapi.json from route schemas (opt-in via config.openapi)',\n )\n .option('--dry-run', 'Print the document to stdout without writing to disk (EC-3)')\n .action(async (options: CliOptions) => {\n try {\n const { openapiCommand } = await import('./commands/openapi.js')\n await openapiCommand({ dryRun: Boolean(options.dryRun) })\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`\\n ✗ ${msg}\\n`)\n process.exit(1)\n }\n })\n\ncli\n .command(\n 'migrate <kind>',\n 'Run a one-shot convention migration. Supported: router (G6 dotted→nested), services-json-v1-to-v2 (Plan v1.2 T2.3)',\n )\n .option('--dry-run', 'Print the migration plan but do not touch the filesystem')\n .option('--force', 'Skip the dev-server port pre-flight check (CI / non-TTY)')\n .option('--name <slug>', 'Explicit project name (DNS-1123). Services-json migrate only.')\n .action(async (kind: string, options: CliOptions & { name?: string }) => {\n try {\n if (kind === 'router') {\n const { routerMigrateCommand } = await import('./commands/migrate/router.js')\n await routerMigrateCommand({\n dryRun: Boolean(options.dryRun),\n force: Boolean(options.force),\n })\n return\n }\n if (kind === 'services-json-v1-to-v2' || kind === 'services-json') {\n const { servicesJsonMigrateCommand } = await import('./commands/migrate/services-json.js')\n await servicesJsonMigrateCommand({\n dryRun: Boolean(options.dryRun),\n name: options.name,\n })\n return\n }\n console.error(\n `\\n ✗ Unknown migration kind: ${kind}. Supported: router, services-json-v1-to-v2\\n`,\n )\n process.exit(1)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`\\n ✗ ${msg}\\n`)\n process.exit(1)\n }\n })\n\ncli\n .command('docker', 'Generate Dockerfile for production')\n .option('--force', 'Overwrite existing Dockerfile')\n .action(async (options: CliOptions) => {\n try {\n const { dockerCommand } = await import('./commands/docker.js')\n await dockerCommand({ force: options.force })\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`\\n ✗ ${msg}\\n`)\n process.exit(1)\n }\n })\n\ncli\n .command('db <action>', 'Database commands: migrate (push schema), generate (SQL files), seed')\n .action(async (action: string) => {\n try {\n const { dbCommandCli } = await import('./commands/db.js')\n dbCommandCli(action)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error(`\\n ✗ ${msg}\\n`)\n process.exit(1)\n }\n })\n\ncli.help()\ncli.version('0.1.0-alpha.0')\n\nexport function main(): void {\n cli.parse()\n}\n\n// Auto-execute when run as script\nmain()\n"],"mappings":"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","names":[]}
|
package/dist/client/index.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { T as TheoErrorEnvelope } from '../error-envelope-BsNzzAV5.js';
|
|
3
3
|
export { FetchOptionsLike, Fetcher, QueryKey, UseTheoQueryConfig, buildUseTheoQueryConfig, stableQueryKey } from '../react-query/index.js';
|
|
4
|
-
import { A as AgentEvent, a as AgentErrorEvent } from '../agent-events-DosDXkSV.js';
|
|
5
|
-
export { b as AgentMessageEvent, c as AgentThinkingEvent, d as AgentToolCallEvent, e as AgentToolResultEvent } from '../agent-events-DosDXkSV.js';
|
|
6
4
|
import { UIMessage } from 'ai';
|
|
7
5
|
import * as react from 'react';
|
|
8
6
|
import { LinkProps as LinkProps$1 } from 'react-router';
|
|
@@ -117,152 +115,6 @@ interface Batcher {
|
|
|
117
115
|
}
|
|
118
116
|
declare function createBatcher(options: BatcherOptions): Batcher;
|
|
119
117
|
|
|
120
|
-
/**
|
|
121
|
-
* Accumulated assistant text (M5-1): the concatenation of every `message`
|
|
122
|
-
* event's `content`. Pure. Assumes append/delta semantics — a server that
|
|
123
|
-
* emits full-snapshot messages should read `events` directly.
|
|
124
|
-
*/
|
|
125
|
-
declare function deriveLiveText(events: readonly AgentEvent[]): string;
|
|
126
|
-
/**
|
|
127
|
-
* The current error (M5-1): the last `error` event, or `undefined`. Surfaces
|
|
128
|
-
* the full `AgentErrorEvent` (with `code`/`retriable`) so the UI can branch.
|
|
129
|
-
* Pure.
|
|
130
|
-
*/
|
|
131
|
-
declare function deriveError(events: readonly AgentEvent[]): AgentErrorEvent | undefined;
|
|
132
|
-
/**
|
|
133
|
-
* T5.2 — useAgentStream
|
|
134
|
-
*
|
|
135
|
-
* React hook to consume an agent endpoint defined with `defineAgentEndpoint`.
|
|
136
|
-
*
|
|
137
|
-
* Transport (ADR D7, EC-3): fetch + ReadableStream — NOT EventSource.
|
|
138
|
-
* EventSource is GET-only; agent endpoints need POST + body.
|
|
139
|
-
*
|
|
140
|
-
* Returns:
|
|
141
|
-
* events — array of AgentEvents accumulated so far
|
|
142
|
-
* send — call with a payload to (re)open a stream
|
|
143
|
-
* status — 'idle' | 'streaming' | 'done' | 'error'
|
|
144
|
-
* abort — manually cancel an in-flight stream
|
|
145
|
-
*
|
|
146
|
-
* Cleanup (EC-8): on unmount, the current AbortController fires .abort(),
|
|
147
|
-
* which propagates to the underlying fetch and the ReadableStream reader.
|
|
148
|
-
* Safe under React.StrictMode double-mount.
|
|
149
|
-
*/
|
|
150
|
-
type AgentStreamStatus = 'idle' | 'streaming' | 'done' | 'error';
|
|
151
|
-
interface UseAgentStreamReturn<TBody = unknown> {
|
|
152
|
-
events: AgentEvent[];
|
|
153
|
-
status: AgentStreamStatus;
|
|
154
|
-
/** Accumulated assistant text — concatenation of all `message` contents (M5-1). */
|
|
155
|
-
liveText: string;
|
|
156
|
-
/** The last `error` event, or `undefined` (M5-1). */
|
|
157
|
-
error: AgentErrorEvent | undefined;
|
|
158
|
-
send: (body: TBody) => void;
|
|
159
|
-
abort: () => void;
|
|
160
|
-
reset: () => void;
|
|
161
|
-
}
|
|
162
|
-
interface UseAgentStreamOptions {
|
|
163
|
-
/** Extra headers (e.g., auth). */
|
|
164
|
-
headers?: Record<string, string>;
|
|
165
|
-
/** Override fetch (rare — primarily for tests). */
|
|
166
|
-
fetch?: typeof fetch;
|
|
167
|
-
}
|
|
168
|
-
declare function useAgentStream<TBody = unknown>(path: string, options?: UseAgentStreamOptions): UseAgentStreamReturn<TBody>;
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* A correlated, UI-facing view of one tool invocation (M5-2).
|
|
172
|
-
*
|
|
173
|
-
* `foldAgentToolCards` correlates a `tool_call` with its `tool_result` (by
|
|
174
|
-
* `id`, falling back to FIFO-by-name) into a single card so consumers stop
|
|
175
|
-
* hand-rolling `switch(event.type)`.
|
|
176
|
-
*/
|
|
177
|
-
interface AgentToolCard {
|
|
178
|
-
/** Correlation id (the event `id`, or a synthesized `tool-<index>`). */
|
|
179
|
-
id: string;
|
|
180
|
-
name: string;
|
|
181
|
-
args: Record<string, unknown>;
|
|
182
|
-
status: 'running' | 'success' | 'error';
|
|
183
|
-
/** The `tool_result.data` payload, once the result arrives. */
|
|
184
|
-
result?: unknown;
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Classifies a `tool_result.data` payload as success/error. Injectable so the
|
|
188
|
-
* correlator is decoupled from any specific tool-result envelope shape.
|
|
189
|
-
*/
|
|
190
|
-
type ToolEnvelopeResolver = (data: unknown) => {
|
|
191
|
-
error: boolean;
|
|
192
|
-
};
|
|
193
|
-
interface FoldAgentToolCardsOptions {
|
|
194
|
-
/** Override the default envelope classifier. */
|
|
195
|
-
resolveEnvelope?: ToolEnvelopeResolver;
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* Default envelope resolver: an object (or a JSON STRING parsing to an object)
|
|
199
|
-
* with `ok === false` is an error; everything else is success (conservative).
|
|
200
|
-
* sdk-tools handlers return a JSON STRING, so string parsing is intentional.
|
|
201
|
-
*/
|
|
202
|
-
declare function defaultResolveEnvelope(data: unknown): {
|
|
203
|
-
error: boolean;
|
|
204
|
-
};
|
|
205
|
-
/**
|
|
206
|
-
* Fold an `AgentEvent[]` into correlated {@link AgentToolCard}s (M5-2). Pure.
|
|
207
|
-
*
|
|
208
|
-
* Correlation: a `tool_result` matches its `tool_call` by `id` when both carry
|
|
209
|
-
* one; otherwise it matches the oldest still-`running` card with the same
|
|
210
|
-
* `name` (FIFO). An unmatched `tool_result` becomes its own finished card.
|
|
211
|
-
* A `tool_call` with no result stays `running`. The error status comes from
|
|
212
|
-
* `options.resolveEnvelope` (default {@link defaultResolveEnvelope}).
|
|
213
|
-
*/
|
|
214
|
-
declare function foldAgentToolCards(events: readonly AgentEvent[], options?: FoldAgentToolCardsOptions): AgentToolCard[];
|
|
215
|
-
|
|
216
|
-
/** {@link useAgentToolCards} return — the stream result plus correlated tool cards. */
|
|
217
|
-
interface UseAgentToolCardsReturn<TBody = unknown> extends UseAgentStreamReturn<TBody> {
|
|
218
|
-
/** Correlated tool cards folded from the stream events (M5-2). */
|
|
219
|
-
toolCards: AgentToolCard[];
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* `useAgentStream` + correlated tool cards (M5-2). Composes the stream hook with
|
|
223
|
-
* the pure {@link foldAgentToolCards} reducer; pass `resolveEnvelope` to classify
|
|
224
|
-
* tool-result payloads (default flags `{ ok: false }` envelopes as errors).
|
|
225
|
-
*/
|
|
226
|
-
declare function useAgentToolCards<TBody = unknown>(path: string, options?: UseAgentStreamOptions & FoldAgentToolCardsOptions): UseAgentToolCardsReturn<TBody>;
|
|
227
|
-
|
|
228
|
-
/**
|
|
229
|
-
* T5.2 — Pure SSE consumer used by useAgentStream.
|
|
230
|
-
*
|
|
231
|
-
* Split out from the React hook so the wire behavior can be tested
|
|
232
|
-
* without a DOM. The hook is glue: useState + useEffect + this primitive.
|
|
233
|
-
*
|
|
234
|
-
* Transport (ADR D7, EC-3): fetch + ReadableStream — NOT EventSource.
|
|
235
|
-
* EventSource is GET-only and cannot carry a body. Agent endpoints need
|
|
236
|
-
* POST + JSON body, so we use fetch + manual SSE chunk parsing.
|
|
237
|
-
*/
|
|
238
|
-
interface ConsumeOptions<TBody = unknown> {
|
|
239
|
-
/** Request body — JSON-serialized into the POST. */
|
|
240
|
-
body: TBody;
|
|
241
|
-
/** Called once per SSE event parsed off the stream. */
|
|
242
|
-
onEvent: (event: AgentEvent) => void;
|
|
243
|
-
/** Optional fetch override (tests). */
|
|
244
|
-
fetch?: typeof fetch;
|
|
245
|
-
/** Optional abort signal — passed through to fetch. */
|
|
246
|
-
signal?: AbortSignal;
|
|
247
|
-
/** Extra headers (e.g., auth). */
|
|
248
|
-
headers?: Record<string, string>;
|
|
249
|
-
}
|
|
250
|
-
/**
|
|
251
|
-
* Parse a single SSE line of the form `data: <json>`.
|
|
252
|
-
* Returns null for non-data lines, comments, or malformed JSON.
|
|
253
|
-
*/
|
|
254
|
-
declare function parseSSEChunk(line: string): AgentEvent | null;
|
|
255
|
-
/**
|
|
256
|
-
* POSTs to `path` with `body`, reads the SSE response, and invokes
|
|
257
|
-
* `onEvent` for each parsed AgentEvent. Resolves when the server
|
|
258
|
-
* closes the stream or the signal aborts.
|
|
259
|
-
*
|
|
260
|
-
* T1.1 — Attaches `X-Theo-Action: '1'` so 0.3.0 strict CSRF mode accepts
|
|
261
|
-
* the request. The user can override (or suppress) by passing the header
|
|
262
|
-
* in `options.headers` — spread order ensures their value wins.
|
|
263
|
-
*/
|
|
264
|
-
declare function consumeAgentStream<TBody = unknown>(path: string, options: ConsumeOptions<TBody>): Promise<void>;
|
|
265
|
-
|
|
266
118
|
/**
|
|
267
119
|
* M2 (theokit-ai-first) — read a TheoKit agent endpoint's `UIMessageStream` SSE `Response`
|
|
268
120
|
* into reconstructed assistant `UIMessage`s, reusing the `ai` package's own consumer
|
|
@@ -288,9 +140,8 @@ declare function consumeUIMessageStream(response: Response, onMessage: (message:
|
|
|
288
140
|
* so the request shape is inferred end-to-end from the server `defineAgent({ input })` with
|
|
289
141
|
* ZERO manual wiring (DoD line 2).
|
|
290
142
|
*
|
|
291
|
-
* Transport
|
|
292
|
-
*
|
|
293
|
-
* pay for it.
|
|
143
|
+
* Transport: fetch + ReadableStream (POST needs a body; EventSource is GET-only). `ai` is
|
|
144
|
+
* loaded lazily by `consumeUIMessageStream` so non-agent apps never pay for it.
|
|
294
145
|
*/
|
|
295
146
|
type UseAgentStatus = 'idle' | 'streaming' | 'done' | 'error';
|
|
296
147
|
interface UseAgentReturn<TInput = unknown> {
|
|
@@ -415,4 +266,4 @@ interface ImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {
|
|
|
415
266
|
}
|
|
416
267
|
declare function Image({ priority, loading, decoding, ...props }: ImageProps): react.JSX.Element;
|
|
417
268
|
|
|
418
|
-
export {
|
|
269
|
+
export { type BatchRequest, type BatchResponse, type BatchTransport, type Batcher, type BatcherOptions, type CreateAppClientOptions, Image, type ImageProps, type InferBody, type InferQuery, type InferResponse, Link, type LinkProps, Metadata, type MetadataProps, type PrefetchBehavior, TheoFetchError, type TheoFetchOptions, type UseAgentOptions, type UseAgentReturn, type UseAgentStatus, consumeUIMessageStream, createAppClient, createBatcher, theoFetch, useAgent };
|
package/dist/client/index.js
CHANGED
|
@@ -384,221 +384,6 @@ function createAppClient(baseUrlOrOptions, legacyFetchImpl) {
|
|
|
384
384
|
return makeProxy({ segments: [], baseUrl, fetchImpl });
|
|
385
385
|
}
|
|
386
386
|
|
|
387
|
-
// src/client/use-agent-stream.ts
|
|
388
|
-
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
389
|
-
|
|
390
|
-
// src/client/agent-stream-core.ts
|
|
391
|
-
function dispatchSseParts(parts, onEvent) {
|
|
392
|
-
for (const part of parts) {
|
|
393
|
-
for (const line of part.split("\n")) {
|
|
394
|
-
const evt = parseSSEChunk(line);
|
|
395
|
-
if (evt) onEvent(evt);
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
function parseSSEChunk(line) {
|
|
400
|
-
if (!line.startsWith("data:")) return null;
|
|
401
|
-
const raw = line.slice(5).trim();
|
|
402
|
-
if (!raw) return null;
|
|
403
|
-
try {
|
|
404
|
-
return JSON.parse(raw);
|
|
405
|
-
} catch {
|
|
406
|
-
return null;
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
async function consumeAgentStream(path, options) {
|
|
410
|
-
const fetchImpl = options.fetch ?? globalThis.fetch;
|
|
411
|
-
const response = await fetchImpl(path, {
|
|
412
|
-
method: "POST",
|
|
413
|
-
headers: {
|
|
414
|
-
"content-type": "application/json",
|
|
415
|
-
accept: "text/event-stream",
|
|
416
|
-
"X-Theo-Action": "1",
|
|
417
|
-
...options.headers
|
|
418
|
-
},
|
|
419
|
-
body: JSON.stringify(options.body),
|
|
420
|
-
signal: options.signal
|
|
421
|
-
});
|
|
422
|
-
if (!response.body) return;
|
|
423
|
-
const reader = response.body.getReader();
|
|
424
|
-
const decoder = new TextDecoder();
|
|
425
|
-
let buf = "";
|
|
426
|
-
try {
|
|
427
|
-
let done = false;
|
|
428
|
-
while (!done) {
|
|
429
|
-
const chunk = await reader.read();
|
|
430
|
-
done = chunk.done;
|
|
431
|
-
if (done) continue;
|
|
432
|
-
buf += decoder.decode(chunk.value, { stream: true });
|
|
433
|
-
const parts = buf.split("\n\n");
|
|
434
|
-
buf = parts.pop() ?? "";
|
|
435
|
-
dispatchSseParts(parts, options.onEvent);
|
|
436
|
-
}
|
|
437
|
-
} finally {
|
|
438
|
-
try {
|
|
439
|
-
reader.releaseLock();
|
|
440
|
-
} catch {
|
|
441
|
-
}
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
// src/client/use-agent-stream.ts
|
|
446
|
-
function deriveLiveText(events) {
|
|
447
|
-
let text = "";
|
|
448
|
-
for (const event of events) {
|
|
449
|
-
if (event.type === "message") text += event.content;
|
|
450
|
-
}
|
|
451
|
-
return text;
|
|
452
|
-
}
|
|
453
|
-
function deriveError(events) {
|
|
454
|
-
let last;
|
|
455
|
-
for (const event of events) {
|
|
456
|
-
if (event.type === "error") last = event;
|
|
457
|
-
}
|
|
458
|
-
return last;
|
|
459
|
-
}
|
|
460
|
-
function useAgentStream(path, options = {}) {
|
|
461
|
-
const [events, setEvents] = useState([]);
|
|
462
|
-
const [status, setStatus] = useState("idle");
|
|
463
|
-
const controllerRef = useRef(null);
|
|
464
|
-
const abort = useCallback(() => {
|
|
465
|
-
if (controllerRef.current) {
|
|
466
|
-
controllerRef.current.abort();
|
|
467
|
-
controllerRef.current = null;
|
|
468
|
-
}
|
|
469
|
-
}, []);
|
|
470
|
-
const reset = useCallback(() => {
|
|
471
|
-
abort();
|
|
472
|
-
setEvents([]);
|
|
473
|
-
setStatus("idle");
|
|
474
|
-
}, [abort]);
|
|
475
|
-
const send = useCallback(
|
|
476
|
-
(body) => {
|
|
477
|
-
abort();
|
|
478
|
-
const controller = new AbortController();
|
|
479
|
-
controllerRef.current = controller;
|
|
480
|
-
setStatus("streaming");
|
|
481
|
-
let sawError = false;
|
|
482
|
-
consumeAgentStream(path, {
|
|
483
|
-
body,
|
|
484
|
-
fetch: options.fetch,
|
|
485
|
-
headers: options.headers,
|
|
486
|
-
signal: controller.signal,
|
|
487
|
-
onEvent: (event) => {
|
|
488
|
-
if (event.type === "error") sawError = true;
|
|
489
|
-
setEvents((prev) => [...prev, event]);
|
|
490
|
-
}
|
|
491
|
-
}).then(() => {
|
|
492
|
-
if (controllerRef.current !== controller) return;
|
|
493
|
-
setStatus(sawError ? "error" : "done");
|
|
494
|
-
}).catch(() => {
|
|
495
|
-
if (controllerRef.current !== controller) return;
|
|
496
|
-
if (controller.signal.aborted) return;
|
|
497
|
-
setStatus("error");
|
|
498
|
-
});
|
|
499
|
-
},
|
|
500
|
-
[abort, path, options.fetch, options.headers]
|
|
501
|
-
);
|
|
502
|
-
useEffect(() => {
|
|
503
|
-
return () => {
|
|
504
|
-
if (controllerRef.current) {
|
|
505
|
-
controllerRef.current.abort();
|
|
506
|
-
controllerRef.current = null;
|
|
507
|
-
}
|
|
508
|
-
};
|
|
509
|
-
}, []);
|
|
510
|
-
const liveText = useMemo(() => deriveLiveText(events), [events]);
|
|
511
|
-
const error = useMemo(() => deriveError(events), [events]);
|
|
512
|
-
return { events, status, liveText, error, send, abort, reset };
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
// src/client/agent-tool-cards.ts
|
|
516
|
-
function defaultResolveEnvelope(data) {
|
|
517
|
-
return { error: coerceObject(data)?.ok === false };
|
|
518
|
-
}
|
|
519
|
-
function coerceObject(data) {
|
|
520
|
-
if (typeof data === "object" && data !== null) return data;
|
|
521
|
-
if (typeof data === "string") {
|
|
522
|
-
try {
|
|
523
|
-
const parsed = JSON.parse(data);
|
|
524
|
-
if (typeof parsed === "object" && parsed !== null) return parsed;
|
|
525
|
-
} catch {
|
|
526
|
-
return void 0;
|
|
527
|
-
}
|
|
528
|
-
}
|
|
529
|
-
return void 0;
|
|
530
|
-
}
|
|
531
|
-
function foldAgentToolCards(events, options = {}) {
|
|
532
|
-
const resolve = options.resolveEnvelope ?? defaultResolveEnvelope;
|
|
533
|
-
const cards = [];
|
|
534
|
-
const byId = /* @__PURE__ */ new Map();
|
|
535
|
-
const runningByName = /* @__PURE__ */ new Map();
|
|
536
|
-
events.forEach((event, index) => {
|
|
537
|
-
if (event.type === "tool_call") {
|
|
538
|
-
const card = {
|
|
539
|
-
id: event.id ?? `tool-${index}`,
|
|
540
|
-
name: event.name,
|
|
541
|
-
args: event.args,
|
|
542
|
-
status: "running"
|
|
543
|
-
};
|
|
544
|
-
cards.push(card);
|
|
545
|
-
if (event.id !== void 0) byId.set(event.id, card);
|
|
546
|
-
pushRunning(runningByName, event.name, card);
|
|
547
|
-
} else if (event.type === "tool_result") {
|
|
548
|
-
const card = matchResultCard(event, index, byId, runningByName, cards);
|
|
549
|
-
card.result = event.data;
|
|
550
|
-
card.status = resolve(event.data).error ? "error" : "success";
|
|
551
|
-
}
|
|
552
|
-
});
|
|
553
|
-
return cards;
|
|
554
|
-
}
|
|
555
|
-
function pushRunning(runningByName, name, card) {
|
|
556
|
-
const queue = runningByName.get(name);
|
|
557
|
-
if (queue) queue.push(card);
|
|
558
|
-
else runningByName.set(name, [card]);
|
|
559
|
-
}
|
|
560
|
-
function removeRunning(runningByName, name, card) {
|
|
561
|
-
const queue = runningByName.get(name);
|
|
562
|
-
if (!queue) return;
|
|
563
|
-
const at = queue.indexOf(card);
|
|
564
|
-
if (at >= 0) queue.splice(at, 1);
|
|
565
|
-
}
|
|
566
|
-
function matchResultCard(event, index, byId, runningByName, cards) {
|
|
567
|
-
if (event.id !== void 0) {
|
|
568
|
-
const byIdCard = byId.get(event.id);
|
|
569
|
-
if (byIdCard) {
|
|
570
|
-
byId.delete(event.id);
|
|
571
|
-
removeRunning(runningByName, byIdCard.name, byIdCard);
|
|
572
|
-
return byIdCard;
|
|
573
|
-
}
|
|
574
|
-
}
|
|
575
|
-
const fifo = runningByName.get(event.name)?.shift();
|
|
576
|
-
if (fifo) {
|
|
577
|
-
byId.delete(fifo.id);
|
|
578
|
-
return fifo;
|
|
579
|
-
}
|
|
580
|
-
const orphan = {
|
|
581
|
-
id: event.id ?? `tool-${index}`,
|
|
582
|
-
name: event.name,
|
|
583
|
-
args: {},
|
|
584
|
-
status: "running"
|
|
585
|
-
};
|
|
586
|
-
cards.push(orphan);
|
|
587
|
-
return orphan;
|
|
588
|
-
}
|
|
589
|
-
|
|
590
|
-
// src/client/use-agent-tool-cards.ts
|
|
591
|
-
import { useMemo as useMemo2 } from "react";
|
|
592
|
-
function useAgentToolCards(path, options = {}) {
|
|
593
|
-
const { resolveEnvelope, ...streamOptions } = options;
|
|
594
|
-
const stream = useAgentStream(path, streamOptions);
|
|
595
|
-
const toolCards = useMemo2(
|
|
596
|
-
() => foldAgentToolCards(stream.events, { resolveEnvelope }),
|
|
597
|
-
[stream.events, resolveEnvelope]
|
|
598
|
-
);
|
|
599
|
-
return { ...stream, toolCards };
|
|
600
|
-
}
|
|
601
|
-
|
|
602
387
|
// src/client/consume-ui-message-stream.ts
|
|
603
388
|
async function consumeUIMessageStream(response, onMessage) {
|
|
604
389
|
if (response.body === null) return;
|
|
@@ -618,23 +403,23 @@ async function consumeUIMessageStream(response, onMessage) {
|
|
|
618
403
|
}
|
|
619
404
|
|
|
620
405
|
// src/client/use-agent.ts
|
|
621
|
-
import { useCallback
|
|
406
|
+
import { useCallback, useRef, useState } from "react";
|
|
622
407
|
function useAgent(path, options = {}) {
|
|
623
|
-
const [messages, setMessages] =
|
|
624
|
-
const [status, setStatus] =
|
|
625
|
-
const [error, setError] =
|
|
626
|
-
const controllerRef =
|
|
627
|
-
const abort =
|
|
408
|
+
const [messages, setMessages] = useState([]);
|
|
409
|
+
const [status, setStatus] = useState("idle");
|
|
410
|
+
const [error, setError] = useState(void 0);
|
|
411
|
+
const controllerRef = useRef(null);
|
|
412
|
+
const abort = useCallback(() => {
|
|
628
413
|
controllerRef.current?.abort();
|
|
629
414
|
controllerRef.current = null;
|
|
630
415
|
}, []);
|
|
631
|
-
const reset =
|
|
416
|
+
const reset = useCallback(() => {
|
|
632
417
|
abort();
|
|
633
418
|
setMessages([]);
|
|
634
419
|
setError(void 0);
|
|
635
420
|
setStatus("idle");
|
|
636
421
|
}, [abort]);
|
|
637
|
-
const send =
|
|
422
|
+
const send = useCallback(
|
|
638
423
|
(input) => {
|
|
639
424
|
abort();
|
|
640
425
|
const controller = new AbortController();
|
|
@@ -682,7 +467,7 @@ function useAgent(path, options = {}) {
|
|
|
682
467
|
import {
|
|
683
468
|
Link as RouterLink
|
|
684
469
|
} from "react-router";
|
|
685
|
-
import { useRef as
|
|
470
|
+
import { useRef as useRef2, useCallback as useCallback2, useEffect } from "react";
|
|
686
471
|
import { jsx } from "react/jsx-runtime";
|
|
687
472
|
var prefetched = /* @__PURE__ */ new Set();
|
|
688
473
|
function injectPrefetch(href) {
|
|
@@ -699,8 +484,8 @@ function resolveTo(to) {
|
|
|
699
484
|
return to?.pathname ?? "";
|
|
700
485
|
}
|
|
701
486
|
function Link({ prefetch = "intent", to, onMouseEnter, onFocus, ...rest }) {
|
|
702
|
-
const ref =
|
|
703
|
-
const handleIntent =
|
|
487
|
+
const ref = useRef2(null);
|
|
488
|
+
const handleIntent = useCallback2(
|
|
704
489
|
(event) => {
|
|
705
490
|
if (prefetch === "intent") {
|
|
706
491
|
injectPrefetch(resolveTo(to));
|
|
@@ -716,7 +501,7 @@ function Link({ prefetch = "intent", to, onMouseEnter, onFocus, ...rest }) {
|
|
|
716
501
|
},
|
|
717
502
|
[prefetch, to, onMouseEnter, onFocus]
|
|
718
503
|
);
|
|
719
|
-
|
|
504
|
+
useEffect(() => {
|
|
720
505
|
if (prefetch !== "viewport" || !ref.current) return;
|
|
721
506
|
if (typeof IntersectionObserver === "undefined") return;
|
|
722
507
|
const observer = new IntersectionObserver(
|
|
@@ -781,19 +566,11 @@ export {
|
|
|
781
566
|
Metadata,
|
|
782
567
|
TheoFetchError,
|
|
783
568
|
buildUseTheoQueryConfig,
|
|
784
|
-
consumeAgentStream,
|
|
785
569
|
consumeUIMessageStream,
|
|
786
570
|
createAppClient,
|
|
787
571
|
createBatcher,
|
|
788
|
-
defaultResolveEnvelope,
|
|
789
|
-
deriveError,
|
|
790
|
-
deriveLiveText,
|
|
791
|
-
foldAgentToolCards,
|
|
792
|
-
parseSSEChunk,
|
|
793
572
|
stableQueryKey,
|
|
794
573
|
theoFetch,
|
|
795
|
-
useAgent
|
|
796
|
-
useAgentStream,
|
|
797
|
-
useAgentToolCards
|
|
574
|
+
useAgent
|
|
798
575
|
};
|
|
799
576
|
//# sourceMappingURL=index.js.map
|