@voicethere/agent 0.2.17 → 0.3.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/templates/build-seed-bundles-cli.d.ts +3 -0
- package/dist/templates/build-seed-bundles-cli.d.ts.map +1 -0
- package/dist/templates/build-seed-bundles-cli.js +8 -0
- package/dist/templates/build-seed-bundles-cli.js.map +1 -0
- package/dist/templates/echo/agent.js +527 -0
- package/dist/templates/echo-dc/agent.js +517 -0
- package/dist/templates/game-sync/agent.js +771 -0
- package/dist/templates/index.d.ts +19 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +77 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/registry.d.ts +18 -0
- package/dist/templates/registry.d.ts.map +1 -0
- package/dist/templates/registry.js +81 -0
- package/dist/templates/registry.js.map +1 -0
- package/dist/templates/voice-starter/agent.js +598 -0
- package/package.json +15 -2
- package/templates/README.md +53 -40
- package/templates/crash.ts +61 -0
- package/templates/echo-smoke.ts +27 -0
- package/templates/game-sync-smoke.ts +81 -0
- package/templates/redis-sync/agent.ts +255 -0
- package/templates/redis-sync/world-layout.ts +118 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type AgentTemplateDefinition, type TemplateKind } from "./registry.js";
|
|
2
|
+
export type { AgentTemplateDefinition, AgentTemplateId, TemplateKind, } from "./registry.js";
|
|
3
|
+
export { AGENT_TEMPLATES, getTemplateById, isAgentTemplateId, listSeedOnCreateTemplates, } from "./registry.js";
|
|
4
|
+
export interface TemplateSourceFile {
|
|
5
|
+
/** Project-relative path within the template tree (e.g. `agent.ts`, `world-layout.ts`). */
|
|
6
|
+
path: string;
|
|
7
|
+
content: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ListTemplatesFilter {
|
|
10
|
+
kind?: TemplateKind;
|
|
11
|
+
}
|
|
12
|
+
export declare function listTemplates(filter?: ListTemplatesFilter): AgentTemplateDefinition[];
|
|
13
|
+
export declare function getTemplate(id: string): AgentTemplateDefinition;
|
|
14
|
+
export declare function resolveTemplateEntryPath(id: string): string;
|
|
15
|
+
export declare function loadTemplateSources(id: string): TemplateSourceFile[];
|
|
16
|
+
export declare function hasSeedBundle(id: string): boolean;
|
|
17
|
+
export declare function loadTemplateBundle(id: string): Buffer;
|
|
18
|
+
export declare function buildSeedTemplateBundles(): Promise<void>;
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,YAAY,EAGlB,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,uBAAuB,EACvB,eAAe,EACf,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,kBAAkB;IACjC,2FAA2F;IAC3F,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAaD,wBAAgB,aAAa,CAC3B,MAAM,CAAC,EAAE,mBAAmB,GAC3B,uBAAuB,EAAE,CAK3B;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,uBAAuB,CAE/D;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAO3D;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAYpE;AAMD,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAMjD;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAYrD;AAED,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CAS9D"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join, resolve } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { buildAgentBundle } from "../build-bundle.js";
|
|
5
|
+
import { AGENT_TEMPLATES, getTemplateById, listSeedOnCreateTemplates, } from "./registry.js";
|
|
6
|
+
export { AGENT_TEMPLATES, getTemplateById, isAgentTemplateId, listSeedOnCreateTemplates, } from "./registry.js";
|
|
7
|
+
const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
|
|
8
|
+
const PACKAGE_ROOT = join(MODULE_DIR, "..", "..");
|
|
9
|
+
const TEMPLATES_DIR = join(PACKAGE_ROOT, "templates");
|
|
10
|
+
function toProjectRelativeSourcePath(sourceFile) {
|
|
11
|
+
if (sourceFile.includes("/")) {
|
|
12
|
+
return sourceFile.split("/").pop() ?? sourceFile;
|
|
13
|
+
}
|
|
14
|
+
return sourceFile;
|
|
15
|
+
}
|
|
16
|
+
export function listTemplates(filter) {
|
|
17
|
+
if (!filter?.kind) {
|
|
18
|
+
return [...AGENT_TEMPLATES];
|
|
19
|
+
}
|
|
20
|
+
return AGENT_TEMPLATES.filter((template) => template.kind === filter.kind);
|
|
21
|
+
}
|
|
22
|
+
export function getTemplate(id) {
|
|
23
|
+
return getTemplateById(id);
|
|
24
|
+
}
|
|
25
|
+
export function resolveTemplateEntryPath(id) {
|
|
26
|
+
const template = getTemplateById(id);
|
|
27
|
+
const entryPath = join(TEMPLATES_DIR, template.entry);
|
|
28
|
+
if (!existsSync(entryPath)) {
|
|
29
|
+
throw new Error(`Template entry not found for ${id}: ${entryPath}`);
|
|
30
|
+
}
|
|
31
|
+
return resolve(entryPath);
|
|
32
|
+
}
|
|
33
|
+
export function loadTemplateSources(id) {
|
|
34
|
+
const template = getTemplateById(id);
|
|
35
|
+
return template.sourceFiles.map((sourceFile) => {
|
|
36
|
+
const absolutePath = join(TEMPLATES_DIR, sourceFile);
|
|
37
|
+
if (!existsSync(absolutePath)) {
|
|
38
|
+
throw new Error(`Template source not found for ${id}: ${absolutePath}`);
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
path: toProjectRelativeSourcePath(sourceFile),
|
|
42
|
+
content: readFileSync(absolutePath, "utf8"),
|
|
43
|
+
};
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
function seedBundlePath(id) {
|
|
47
|
+
return join(PACKAGE_ROOT, "dist", "templates", id, "agent.js");
|
|
48
|
+
}
|
|
49
|
+
export function hasSeedBundle(id) {
|
|
50
|
+
const template = getTemplateById(id);
|
|
51
|
+
if (!template.seedOnCreate) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
return existsSync(seedBundlePath(id));
|
|
55
|
+
}
|
|
56
|
+
export function loadTemplateBundle(id) {
|
|
57
|
+
const template = getTemplateById(id);
|
|
58
|
+
if (!template.seedOnCreate) {
|
|
59
|
+
throw new Error(`Template ${id} does not publish a seed bundle`);
|
|
60
|
+
}
|
|
61
|
+
const bundlePath = seedBundlePath(id);
|
|
62
|
+
if (!existsSync(bundlePath)) {
|
|
63
|
+
throw new Error(`Missing prebuilt seed bundle for ${id}. Run npm run build in @voicethere/agent.`);
|
|
64
|
+
}
|
|
65
|
+
return readFileSync(bundlePath);
|
|
66
|
+
}
|
|
67
|
+
export async function buildSeedTemplateBundles() {
|
|
68
|
+
for (const template of listSeedOnCreateTemplates()) {
|
|
69
|
+
const outfile = seedBundlePath(template.id);
|
|
70
|
+
await buildAgentBundle({
|
|
71
|
+
cwd: PACKAGE_ROOT,
|
|
72
|
+
entry: join("templates", template.entry),
|
|
73
|
+
outfile,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type TemplateKind = "product" | "e2e";
|
|
2
|
+
export interface AgentTemplateDefinition {
|
|
3
|
+
id: string;
|
|
4
|
+
/** Path relative to `templates/` (e.g. `echo.ts`, `redis-sync/agent.ts`). */
|
|
5
|
+
entry: string;
|
|
6
|
+
kind: TemplateKind;
|
|
7
|
+
/** When true, a prebuilt bundle is published at `dist/templates/<id>/agent.js`. */
|
|
8
|
+
seedOnCreate: boolean;
|
|
9
|
+
description: string;
|
|
10
|
+
/** All TypeScript sources for this template (project-relative paths). */
|
|
11
|
+
sourceFiles: string[];
|
|
12
|
+
}
|
|
13
|
+
export declare const AGENT_TEMPLATES: readonly AgentTemplateDefinition[];
|
|
14
|
+
export type AgentTemplateId = (typeof AGENT_TEMPLATES)[number]["id"];
|
|
15
|
+
export declare function isAgentTemplateId(id: string): id is AgentTemplateId;
|
|
16
|
+
export declare function getTemplateById(id: string): AgentTemplateDefinition;
|
|
17
|
+
export declare function listSeedOnCreateTemplates(): AgentTemplateDefinition[];
|
|
18
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/templates/registry.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,KAAK,CAAC;AAE7C,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;IACnB,mFAAmF;IACnF,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,eAAO,MAAM,eAAe,EAAE,SAAS,uBAAuB,EAyEpD,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAMrE,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,eAAe,CAEnE;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,uBAAuB,CAMnE;AAED,wBAAgB,yBAAyB,IAAI,uBAAuB,EAAE,CAErE"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
export const AGENT_TEMPLATES = [
|
|
2
|
+
{
|
|
3
|
+
id: "echo",
|
|
4
|
+
entry: "echo.ts",
|
|
5
|
+
kind: "product",
|
|
6
|
+
seedOnCreate: true,
|
|
7
|
+
description: "Full echo debug agent — voice finals and DataChannel chat with TTS playback.",
|
|
8
|
+
sourceFiles: ["echo.ts"],
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
id: "echo-dc",
|
|
12
|
+
entry: "echo-dc.ts",
|
|
13
|
+
kind: "product",
|
|
14
|
+
seedOnCreate: true,
|
|
15
|
+
description: "Data-channel-only echo — relays speech events and chat without TTS.",
|
|
16
|
+
sourceFiles: ["echo-dc.ts"],
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
id: "voice-starter",
|
|
20
|
+
entry: "agent.ts",
|
|
21
|
+
kind: "product",
|
|
22
|
+
seedOnCreate: true,
|
|
23
|
+
description: "Voice starter covering every speech event — customize onUserSpeechFinal for your LLM.",
|
|
24
|
+
sourceFiles: ["agent.ts"],
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
id: "game-sync",
|
|
28
|
+
entry: "game-sync.ts",
|
|
29
|
+
kind: "product",
|
|
30
|
+
seedOnCreate: true,
|
|
31
|
+
description: "Authoritative multi-object sync sample for real-time games and simulations.",
|
|
32
|
+
sourceFiles: ["game-sync.ts"],
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
id: "echo-smoke",
|
|
36
|
+
entry: "echo-smoke.ts",
|
|
37
|
+
kind: "e2e",
|
|
38
|
+
seedOnCreate: false,
|
|
39
|
+
description: "Minimal echo agent for e2e voice-smoke, agent-smoke, and cli-smoke uploads.",
|
|
40
|
+
sourceFiles: ["echo-smoke.ts"],
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
id: "crash",
|
|
44
|
+
entry: "crash.ts",
|
|
45
|
+
kind: "e2e",
|
|
46
|
+
seedOnCreate: false,
|
|
47
|
+
description: "Crash / echo agent for session-errors-smoke and agent-crash-policy smokes.",
|
|
48
|
+
sourceFiles: ["crash.ts"],
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
id: "game-sync-smoke",
|
|
52
|
+
entry: "game-sync-smoke.ts",
|
|
53
|
+
kind: "e2e",
|
|
54
|
+
seedOnCreate: false,
|
|
55
|
+
description: "Minimal data-channel agent for deploy-smoke, shared-child, and idle smokes.",
|
|
56
|
+
sourceFiles: ["game-sync-smoke.ts"],
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
id: "redis-sync",
|
|
60
|
+
entry: "redis-sync/agent.ts",
|
|
61
|
+
kind: "e2e",
|
|
62
|
+
seedOnCreate: false,
|
|
63
|
+
description: "Redis-backed world buffer sync for redis-sync-smoke (Advanced tier + project Redis).",
|
|
64
|
+
sourceFiles: ["redis-sync/agent.ts", "redis-sync/world-layout.ts"],
|
|
65
|
+
},
|
|
66
|
+
];
|
|
67
|
+
const TEMPLATE_BY_ID = new Map(AGENT_TEMPLATES.map((template) => [template.id, template]));
|
|
68
|
+
export function isAgentTemplateId(id) {
|
|
69
|
+
return TEMPLATE_BY_ID.has(id);
|
|
70
|
+
}
|
|
71
|
+
export function getTemplateById(id) {
|
|
72
|
+
const template = TEMPLATE_BY_ID.get(id);
|
|
73
|
+
if (!template) {
|
|
74
|
+
throw new Error(`Unknown agent template id: ${id}`);
|
|
75
|
+
}
|
|
76
|
+
return template;
|
|
77
|
+
}
|
|
78
|
+
export function listSeedOnCreateTemplates() {
|
|
79
|
+
return AGENT_TEMPLATES.filter((template) => template.seedOnCreate);
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/templates/registry.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,eAAe,GAAuC;IACjE;QACE,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,IAAI;QAClB,WAAW,EACT,8EAA8E;QAChF,WAAW,EAAE,CAAC,SAAS,CAAC;KACzB;IACD;QACE,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,IAAI;QAClB,WAAW,EACT,qEAAqE;QACvE,WAAW,EAAE,CAAC,YAAY,CAAC;KAC5B;IACD;QACE,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,UAAU;QACjB,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,IAAI;QAClB,WAAW,EACT,uFAAuF;QACzF,WAAW,EAAE,CAAC,UAAU,CAAC;KAC1B;IACD;QACE,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,cAAc;QACrB,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,IAAI;QAClB,WAAW,EACT,6EAA6E;QAC/E,WAAW,EAAE,CAAC,cAAc,CAAC;KAC9B;IACD;QACE,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,eAAe;QACtB,IAAI,EAAE,KAAK;QACX,YAAY,EAAE,KAAK;QACnB,WAAW,EACT,6EAA6E;QAC/E,WAAW,EAAE,CAAC,eAAe,CAAC;KAC/B;IACD;QACE,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,UAAU;QACjB,IAAI,EAAE,KAAK;QACX,YAAY,EAAE,KAAK;QACnB,WAAW,EACT,4EAA4E;QAC9E,WAAW,EAAE,CAAC,UAAU,CAAC;KAC1B;IACD;QACE,EAAE,EAAE,iBAAiB;QACrB,KAAK,EAAE,oBAAoB;QAC3B,IAAI,EAAE,KAAK;QACX,YAAY,EAAE,KAAK;QACnB,WAAW,EACT,6EAA6E;QAC/E,WAAW,EAAE,CAAC,oBAAoB,CAAC;KACpC;IACD;QACE,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,qBAAqB;QAC5B,IAAI,EAAE,KAAK;QACX,YAAY,EAAE,KAAK;QACnB,WAAW,EACT,sFAAsF;QACxF,WAAW,EAAE,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;KACnE;CACO,CAAC;AAIX,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,eAAe,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAC3D,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,EAAU;IAC1C,OAAO,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAU;IACxC,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AACrE,CAAC"}
|