@agent-native/core 0.1.0 → 0.2.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/dist/cli/create.d.ts +1 -1
- package/dist/cli/create.js +5 -5
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/index.js +95 -10
- package/dist/cli/index.js.map +1 -1
- package/dist/client/{fusion-chat.d.ts → agent-chat.d.ts} +6 -6
- package/dist/client/agent-chat.d.ts.map +1 -0
- package/dist/client/agent-chat.js +32 -0
- package/dist/client/agent-chat.js.map +1 -0
- package/dist/client/harness.d.ts +38 -0
- package/dist/client/harness.d.ts.map +1 -0
- package/dist/client/harness.js +89 -0
- package/dist/client/harness.js.map +1 -0
- package/dist/client/index.d.ts +3 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +3 -2
- package/dist/client/index.js.map +1 -1
- package/dist/client/use-agent-chat.d.ts +14 -0
- package/dist/client/use-agent-chat.d.ts.map +1 -0
- package/dist/client/{use-fusion-chat.js → use-agent-chat.js} +6 -6
- package/dist/client/use-agent-chat.js.map +1 -0
- package/dist/index.browser.d.ts +3 -0
- package/dist/index.browser.d.ts.map +1 -0
- package/dist/index.browser.js +6 -0
- package/dist/index.browser.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -5
- package/dist/index.js.map +1 -1
- package/dist/scripts/runner.d.ts +1 -1
- package/dist/scripts/runner.js +1 -1
- package/dist/shared/{fusion-chat.d.ts → agent-chat.d.ts} +10 -10
- package/dist/shared/agent-chat.d.ts.map +1 -0
- package/dist/shared/{fusion-chat.js → agent-chat.js} +11 -11
- package/dist/shared/agent-chat.js.map +1 -0
- package/dist/shared/index.d.ts +1 -1
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +1 -1
- package/dist/shared/index.js.map +1 -1
- package/dist/vite/client.js +1 -1
- package/dist/vite/client.js.map +1 -1
- package/package.json +32 -11
- package/src/templates/default/AGENTS.md +7 -7
- package/src/templates/default/client/App.tsx +1 -1
- package/src/templates/default/client/lib/utils.ts +1 -1
- package/src/templates/default/package.json +6 -9
- package/src/templates/default/scripts/hello.ts +4 -4
- package/src/templates/default/scripts/run.ts +1 -1
- package/src/templates/default/server/index.ts +1 -1
- package/src/templates/default/server/node-build.ts +1 -1
- package/dist/client/fusion-chat.d.ts.map +0 -1
- package/dist/client/fusion-chat.js +0 -19
- package/dist/client/fusion-chat.js.map +0 -1
- package/dist/client/use-fusion-chat.d.ts +0 -14
- package/dist/client/use-fusion-chat.d.ts.map +0 -1
- package/dist/client/use-fusion-chat.js.map +0 -1
- package/dist/shared/fusion-chat.d.ts.map +0 -1
- package/dist/shared/fusion-chat.js.map +0 -1
package/dist/cli/create.d.ts
CHANGED
package/dist/cli/create.js
CHANGED
|
@@ -4,11 +4,11 @@ import { fileURLToPath } from "url";
|
|
|
4
4
|
const __filename = fileURLToPath(import.meta.url);
|
|
5
5
|
const __dirname = path.dirname(__filename);
|
|
6
6
|
/**
|
|
7
|
-
* Scaffold a new
|
|
7
|
+
* Scaffold a new agent-native app from the default template.
|
|
8
8
|
*/
|
|
9
9
|
export function createApp(name) {
|
|
10
10
|
if (!name) {
|
|
11
|
-
console.error("Usage:
|
|
11
|
+
console.error("Usage: agent-native create <app-name>");
|
|
12
12
|
process.exit(1);
|
|
13
13
|
}
|
|
14
14
|
// Validate name
|
|
@@ -67,9 +67,9 @@ export function createApp(name) {
|
|
|
67
67
|
console.log(`Next steps:`);
|
|
68
68
|
console.log(` cd ${name}`);
|
|
69
69
|
console.log(` pnpm install`);
|
|
70
|
-
console.log(` pnpm dev`);
|
|
71
|
-
console.log(
|
|
72
|
-
console.log(`
|
|
70
|
+
console.log(` pnpm dev # Start dev server at http://localhost:8080`);
|
|
71
|
+
console.log(` pnpm build # Build for production`);
|
|
72
|
+
console.log(` pnpm start # Start production server`);
|
|
73
73
|
}
|
|
74
74
|
function copyDir(src, dest) {
|
|
75
75
|
fs.mkdirSync(dest, { recursive: true });
|
package/dist/cli/create.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/cli/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/cli/create.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,27 +1,112 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
2
|
+
import { execSync, spawn } from "child_process";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import fs from "fs";
|
|
3
5
|
const command = process.argv[2];
|
|
4
6
|
const args = process.argv.slice(3);
|
|
7
|
+
function findViteBin() {
|
|
8
|
+
// Look for vite in node_modules/.bin
|
|
9
|
+
const localVite = path.resolve("node_modules/.bin/vite");
|
|
10
|
+
if (fs.existsSync(localVite))
|
|
11
|
+
return localVite;
|
|
12
|
+
return "vite"; // fallback to PATH
|
|
13
|
+
}
|
|
14
|
+
function findTsxBin() {
|
|
15
|
+
const localTsx = path.resolve("node_modules/.bin/tsx");
|
|
16
|
+
if (fs.existsSync(localTsx))
|
|
17
|
+
return localTsx;
|
|
18
|
+
return "tsx";
|
|
19
|
+
}
|
|
20
|
+
function run(cmd, cmdArgs, opts) {
|
|
21
|
+
const child = spawn(cmd, cmdArgs, {
|
|
22
|
+
stdio: opts?.stdio ?? "inherit",
|
|
23
|
+
shell: process.platform === "win32",
|
|
24
|
+
env: process.env,
|
|
25
|
+
});
|
|
26
|
+
child.on("exit", (code) => process.exit(code ?? 0));
|
|
27
|
+
return child;
|
|
28
|
+
}
|
|
5
29
|
switch (command) {
|
|
6
|
-
case "
|
|
7
|
-
|
|
30
|
+
case "dev": {
|
|
31
|
+
// Like `next dev` — runs Vite dev server with express plugin
|
|
32
|
+
const vite = findViteBin();
|
|
33
|
+
run(vite, args);
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
case "build": {
|
|
37
|
+
// Like `next build` — builds client SPA + server bundle
|
|
38
|
+
const vite = findViteBin();
|
|
39
|
+
console.log("Building client...");
|
|
40
|
+
execSync(`${vite} build`, { stdio: "inherit" });
|
|
41
|
+
console.log("\nBuilding server...");
|
|
42
|
+
execSync(`${vite} build --config vite.config.server.ts`, { stdio: "inherit" });
|
|
43
|
+
console.log("\nBuild complete.");
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
case "start": {
|
|
47
|
+
// Like `next start` — runs production server
|
|
48
|
+
const serverEntry = path.resolve("dist/server/production.mjs");
|
|
49
|
+
if (!fs.existsSync(serverEntry)) {
|
|
50
|
+
console.error('No production build found. Run "agent-native build" first.');
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
run("node", [serverEntry, ...args]);
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
case "script": {
|
|
57
|
+
// Run a script from scripts/ — `agent-native script generate-image --prompt "hello"`
|
|
58
|
+
const scriptName = args[0];
|
|
59
|
+
if (!scriptName) {
|
|
60
|
+
console.error("Usage: agent-native script <name> [--args]");
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
const tsx = findTsxBin();
|
|
64
|
+
run(tsx, ["scripts/run.ts", ...args]);
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
case "typecheck": {
|
|
68
|
+
// Run TypeScript type checking
|
|
69
|
+
const tsc = path.resolve("node_modules/.bin/tsc");
|
|
70
|
+
const tscBin = fs.existsSync(tsc) ? tsc : "tsc";
|
|
71
|
+
run(tscBin, ["--noEmit", ...args]);
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
case "create": {
|
|
75
|
+
import("./create.js").then((m) => m.createApp(args[0]));
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
case "--version":
|
|
79
|
+
case "-v": {
|
|
80
|
+
const pkgPath = path.resolve(path.dirname(new URL(import.meta.url).pathname), "../../package.json");
|
|
81
|
+
try {
|
|
82
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
|
|
83
|
+
console.log(pkg.version);
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
console.log("unknown");
|
|
87
|
+
}
|
|
8
88
|
break;
|
|
89
|
+
}
|
|
9
90
|
case "--help":
|
|
10
91
|
case "-h":
|
|
11
92
|
case undefined:
|
|
12
|
-
console.log(`agent-native
|
|
93
|
+
console.log(`agent-native v0.2.0
|
|
13
94
|
|
|
14
95
|
Usage:
|
|
15
|
-
agent-native
|
|
16
|
-
agent-native
|
|
96
|
+
agent-native dev Start development server
|
|
97
|
+
agent-native build Build for production (client + server)
|
|
98
|
+
agent-native start Start production server
|
|
99
|
+
agent-native script <name> Run a script from scripts/
|
|
100
|
+
agent-native typecheck Run TypeScript type checking
|
|
101
|
+
agent-native create <name> Scaffold a new agent-native app
|
|
17
102
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
103
|
+
Options:
|
|
104
|
+
-h, --help Show this help message
|
|
105
|
+
-v, --version Show version number`);
|
|
21
106
|
break;
|
|
22
107
|
default:
|
|
23
108
|
console.error(`Unknown command: ${command}`);
|
|
24
|
-
console.error(
|
|
109
|
+
console.error('Run "agent-native --help" for usage.');
|
|
25
110
|
process.exit(1);
|
|
26
111
|
}
|
|
27
112
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Agent Chat Bridge (browser)
|
|
3
3
|
*
|
|
4
|
-
* Sends structured messages to the
|
|
4
|
+
* Sends structured messages to the agent chat from UI interactions.
|
|
5
5
|
* Messages are sent via postMessage to the parent window (or self if top-level).
|
|
6
6
|
*/
|
|
7
|
-
export interface
|
|
7
|
+
export interface AgentChatMessage {
|
|
8
8
|
/** The visible prompt message sent to the chat */
|
|
9
9
|
message: string;
|
|
10
10
|
/** Hidden context appended to the message (not shown in chat UI) */
|
|
@@ -21,7 +21,7 @@ export interface FusionChatMessage {
|
|
|
21
21
|
uploadedReferenceImages?: string[];
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
24
|
-
* Send a message to the
|
|
24
|
+
* Send a message to the agent chat via postMessage.
|
|
25
25
|
*/
|
|
26
|
-
export declare function
|
|
27
|
-
//# sourceMappingURL=
|
|
26
|
+
export declare function sendToAgentChat(opts: AgentChatMessage): void;
|
|
27
|
+
//# sourceMappingURL=agent-chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-chat.d.ts","sourceRoot":"","sources":["../../src/client/agent-chat.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,yCAAyC;IACzC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;CACpC;AAoBD;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAQ5D"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Chat Bridge (browser)
|
|
3
|
+
*
|
|
4
|
+
* Sends structured messages to the agent chat from UI interactions.
|
|
5
|
+
* Messages are sent via postMessage to the parent window (or self if top-level).
|
|
6
|
+
*/
|
|
7
|
+
const AGENT_CHAT_MESSAGE_TYPE = "builder.submitChat";
|
|
8
|
+
/**
|
|
9
|
+
* Listen for chatRunning messages from the harness (postMessage)
|
|
10
|
+
* and re-dispatch as a CustomEvent so hooks like useAgentChatGenerating() work.
|
|
11
|
+
*/
|
|
12
|
+
if (typeof window !== "undefined") {
|
|
13
|
+
window.addEventListener("message", (event) => {
|
|
14
|
+
if (event.data?.type === "builder.fusion.chatRunning") {
|
|
15
|
+
window.dispatchEvent(new CustomEvent("builder.fusion.chatRunning", {
|
|
16
|
+
detail: event.data.detail,
|
|
17
|
+
}));
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Send a message to the agent chat via postMessage.
|
|
23
|
+
*/
|
|
24
|
+
export function sendToAgentChat(opts) {
|
|
25
|
+
const payload = {
|
|
26
|
+
type: AGENT_CHAT_MESSAGE_TYPE,
|
|
27
|
+
data: opts,
|
|
28
|
+
};
|
|
29
|
+
const target = window.parent !== window ? window.parent : window;
|
|
30
|
+
target.postMessage(payload, "*");
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=agent-chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-chat.js","sourceRoot":"","sources":["../../src/client/agent-chat.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmBH,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AAErD;;;GAGG;AACH,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IAClC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QAC3C,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,4BAA4B,EAAE,CAAC;YACtD,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,4BAA4B,EAAE;gBAC5C,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM;aAC1B,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAsB;IACpD,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,uBAAuB;QAC7B,IAAI,EAAE,IAAI;KACX,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACjE,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harness Communication (browser)
|
|
3
|
+
*
|
|
4
|
+
* Utilities for communicating with the parent harness frame via postMessage.
|
|
5
|
+
* Provides typed request/response patterns and message sending.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Send a typed message to the parent harness frame.
|
|
9
|
+
* No-op if running at top level (no parent frame).
|
|
10
|
+
*/
|
|
11
|
+
export declare function sendToHarness(type: string, data?: any): void;
|
|
12
|
+
/**
|
|
13
|
+
* Listen for a specific message type from the parent harness.
|
|
14
|
+
* Returns a cleanup function.
|
|
15
|
+
*/
|
|
16
|
+
export declare function onHarnessMessage(type: string, handler: (data: any) => void): () => void;
|
|
17
|
+
export interface UserInfo {
|
|
18
|
+
name?: string;
|
|
19
|
+
email?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Request user info (name + email) from the parent harness.
|
|
23
|
+
* Falls back to empty object if harness doesn't respond within timeout.
|
|
24
|
+
*/
|
|
25
|
+
export declare function requestUserInfo(timeoutMs?: number): Promise<UserInfo>;
|
|
26
|
+
/**
|
|
27
|
+
* Enter visual editing selection mode for a specific element.
|
|
28
|
+
*/
|
|
29
|
+
export declare function enterStyleEditing(selector: string): void;
|
|
30
|
+
/**
|
|
31
|
+
* Enter text editing mode for a specific element.
|
|
32
|
+
*/
|
|
33
|
+
export declare function enterTextEditing(selector: string): void;
|
|
34
|
+
/**
|
|
35
|
+
* Exit selection mode.
|
|
36
|
+
*/
|
|
37
|
+
export declare function exitSelectionMode(): void;
|
|
38
|
+
//# sourceMappingURL=harness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/client/harness.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAI5D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAC3B,MAAM,IAAI,CAUZ;AAMD,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CA8BnE;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAExD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAEvD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harness Communication (browser)
|
|
3
|
+
*
|
|
4
|
+
* Utilities for communicating with the parent harness frame via postMessage.
|
|
5
|
+
* Provides typed request/response patterns and message sending.
|
|
6
|
+
*/
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// Low-level parent messaging
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
/**
|
|
11
|
+
* Send a typed message to the parent harness frame.
|
|
12
|
+
* No-op if running at top level (no parent frame).
|
|
13
|
+
*/
|
|
14
|
+
export function sendToHarness(type, data) {
|
|
15
|
+
if (typeof window === "undefined")
|
|
16
|
+
return;
|
|
17
|
+
const target = window.parent !== window ? window.parent : window;
|
|
18
|
+
target.postMessage({ type, data }, "*");
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Listen for a specific message type from the parent harness.
|
|
22
|
+
* Returns a cleanup function.
|
|
23
|
+
*/
|
|
24
|
+
export function onHarnessMessage(type, handler) {
|
|
25
|
+
if (typeof window === "undefined")
|
|
26
|
+
return () => { };
|
|
27
|
+
const listener = (event) => {
|
|
28
|
+
if (event.data?.type === type) {
|
|
29
|
+
handler(event.data.data ?? event.data.detail ?? event.data);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
window.addEventListener("message", listener);
|
|
33
|
+
return () => window.removeEventListener("message", listener);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Request user info (name + email) from the parent harness.
|
|
37
|
+
* Falls back to empty object if harness doesn't respond within timeout.
|
|
38
|
+
*/
|
|
39
|
+
export function requestUserInfo(timeoutMs = 1500) {
|
|
40
|
+
return new Promise((resolve) => {
|
|
41
|
+
if (typeof window === "undefined" || window.parent === window) {
|
|
42
|
+
resolve({});
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
let settled = false;
|
|
46
|
+
const timer = setTimeout(() => {
|
|
47
|
+
if (!settled) {
|
|
48
|
+
settled = true;
|
|
49
|
+
window.removeEventListener("message", handler);
|
|
50
|
+
resolve({});
|
|
51
|
+
}
|
|
52
|
+
}, timeoutMs);
|
|
53
|
+
function handler(event) {
|
|
54
|
+
if (!event.data || event.data.type !== "builder.userInfo")
|
|
55
|
+
return;
|
|
56
|
+
if (settled)
|
|
57
|
+
return;
|
|
58
|
+
settled = true;
|
|
59
|
+
clearTimeout(timer);
|
|
60
|
+
window.removeEventListener("message", handler);
|
|
61
|
+
const { name, email } = event.data.data ?? {};
|
|
62
|
+
resolve({ name: name || undefined, email: email || undefined });
|
|
63
|
+
}
|
|
64
|
+
window.addEventListener("message", handler);
|
|
65
|
+
window.parent.postMessage({ type: "builder.getUserInfo" }, "*");
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
// Selection Mode (visual editing)
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
/**
|
|
72
|
+
* Enter visual editing selection mode for a specific element.
|
|
73
|
+
*/
|
|
74
|
+
export function enterStyleEditing(selector) {
|
|
75
|
+
sendToHarness("builder.enterStyleEditing", { selector });
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Enter text editing mode for a specific element.
|
|
79
|
+
*/
|
|
80
|
+
export function enterTextEditing(selector) {
|
|
81
|
+
sendToHarness("builder.enterTextEditing", { selector });
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Exit selection mode.
|
|
85
|
+
*/
|
|
86
|
+
export function exitSelectionMode() {
|
|
87
|
+
sendToHarness("builder.exitSelectionMode");
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=harness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harness.js","sourceRoot":"","sources":["../../src/client/harness.ts"],"names":[],"mappings":"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"}
|
package/dist/client/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
1
|
+
export { sendToAgentChat, type AgentChatMessage } from "./agent-chat.js";
|
|
2
|
+
export { useAgentChatGenerating } from "./use-agent-chat.js";
|
|
3
3
|
export { useFileWatcher } from "./use-file-watcher.js";
|
|
4
4
|
export { cn } from "./utils.js";
|
|
5
|
+
export { sendToHarness, onHarnessMessage, requestUserInfo, enterStyleEditing, enterTextEditing, exitSelectionMode, type UserInfo, } from "./harness.js";
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAChC,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,QAAQ,GACd,MAAM,cAAc,CAAC"}
|
package/dist/client/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
1
|
+
export { sendToAgentChat } from "./agent-chat.js";
|
|
2
|
+
export { useAgentChatGenerating } from "./use-agent-chat.js";
|
|
3
3
|
export { useFileWatcher } from "./use-file-watcher.js";
|
|
4
4
|
export { cn } from "./utils.js";
|
|
5
|
+
export { sendToHarness, onHarnessMessage, requestUserInfo, enterStyleEditing, enterTextEditing, exitSelectionMode, } from "./harness.js";
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAyB,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAChC,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type AgentChatMessage } from "./agent-chat.js";
|
|
2
|
+
/**
|
|
3
|
+
* Hook that wraps sendToAgentChat with a loading state.
|
|
4
|
+
*
|
|
5
|
+
* Returns [isGenerating, send] where:
|
|
6
|
+
* - isGenerating: true after send() is called, false when the
|
|
7
|
+
* builder.fusion.chatRunning event fires with detail.isRunning === false
|
|
8
|
+
* - send: wrapper around sendToAgentChat that sets isGenerating to true
|
|
9
|
+
*/
|
|
10
|
+
export declare function useAgentChatGenerating(): [
|
|
11
|
+
boolean,
|
|
12
|
+
(opts: AgentChatMessage) => void
|
|
13
|
+
];
|
|
14
|
+
//# sourceMappingURL=use-agent-chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-agent-chat.d.ts","sourceRoot":"","sources":["../../src/client/use-agent-chat.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEzE;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,IAAI;IACxC,OAAO;IACP,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI;CACjC,CAqBA"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { useState, useEffect, useCallback } from "react";
|
|
2
|
-
import {
|
|
2
|
+
import { sendToAgentChat } from "./agent-chat.js";
|
|
3
3
|
/**
|
|
4
|
-
* Hook that wraps
|
|
4
|
+
* Hook that wraps sendToAgentChat with a loading state.
|
|
5
5
|
*
|
|
6
6
|
* Returns [isGenerating, send] where:
|
|
7
7
|
* - isGenerating: true after send() is called, false when the
|
|
8
8
|
* builder.fusion.chatRunning event fires with detail.isRunning === false
|
|
9
|
-
* - send: wrapper around
|
|
9
|
+
* - send: wrapper around sendToAgentChat that sets isGenerating to true
|
|
10
10
|
*/
|
|
11
|
-
export function
|
|
11
|
+
export function useAgentChatGenerating() {
|
|
12
12
|
const [isGenerating, setIsGenerating] = useState(false);
|
|
13
13
|
useEffect(() => {
|
|
14
14
|
const handler = (e) => {
|
|
@@ -22,8 +22,8 @@ export function useFusionChatGenerating() {
|
|
|
22
22
|
}, []);
|
|
23
23
|
const send = useCallback((opts) => {
|
|
24
24
|
setIsGenerating(true);
|
|
25
|
-
|
|
25
|
+
sendToAgentChat(opts);
|
|
26
26
|
}, []);
|
|
27
27
|
return [isGenerating, send];
|
|
28
28
|
}
|
|
29
|
-
//# sourceMappingURL=use-
|
|
29
|
+
//# sourceMappingURL=use-agent-chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-agent-chat.js","sourceRoot":"","sources":["../../src/client/use-agent-chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,eAAe,EAAyB,MAAM,iBAAiB,CAAC;AAEzE;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB;IAIpC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,CAAC,CAAQ,EAAE,EAAE;YAC3B,MAAM,MAAM,GAAI,CAAiB,CAAC,MAAM,CAAC;YACzC,IAAI,MAAM,EAAE,SAAS,KAAK,KAAK,EAAE,CAAC;gBAChC,eAAe,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;QACH,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;QAC/D,OAAO,GAAG,EAAE,CACV,MAAM,CAAC,mBAAmB,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,IAAsB,EAAE,EAAE;QAClD,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,eAAe,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../src/index.browser.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,EAAE,EACF,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// Browser-safe entry — only client & shared exports (no Node/Express/chokidar).
|
|
2
|
+
// Client
|
|
3
|
+
export { sendToAgentChat, useAgentChatGenerating, useFileWatcher, cn, } from "./client/index.js";
|
|
4
|
+
// Shared (isomorphic)
|
|
5
|
+
export { agentChat } from "./shared/index.js";
|
|
6
|
+
//# sourceMappingURL=index.browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.browser.js","sourceRoot":"","sources":["../src/index.browser.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAEhF,SAAS;AACT,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,EAAE,GAEH,MAAM,mBAAmB,CAAC;AAE3B,sBAAsB;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { createServer, createFileWatcher, createSSEHandler, createProductionServer, } from "./server/index.js";
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
1
|
+
export { createServer, createFileWatcher, createSSEHandler, createProductionServer, type CreateServerOptions, type FileWatcherOptions, type SSEHandlerOptions, type ProductionServerOptions, } from "./server/index.js";
|
|
2
|
+
export { sendToAgentChat, useAgentChatGenerating, useFileWatcher, cn, type AgentChatMessage, } from "./client/index.js";
|
|
3
|
+
export { agentChat } from "./shared/index.js";
|
|
4
4
|
export { runScript, loadEnv, parseArgs, camelCaseArgs, isValidPath, isValidProjectPath, ensureDir, fail, } from "./scripts/index.js";
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,GAC7B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,EAAE,EACF,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,OAAO,EACL,SAAS,EACT,OAAO,EACP,SAAS,EACT,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,SAAS,EACT,IAAI,GACL,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
//
|
|
1
|
+
// Framework for agent-native apps.
|
|
2
|
+
// Import everything from "@agent-native/core".
|
|
3
|
+
// Server
|
|
4
4
|
export { createServer, createFileWatcher, createSSEHandler, createProductionServer, } from "./server/index.js";
|
|
5
|
-
|
|
6
|
-
export {
|
|
5
|
+
// Client
|
|
6
|
+
export { sendToAgentChat, useAgentChatGenerating, useFileWatcher, cn, } from "./client/index.js";
|
|
7
|
+
// Shared (isomorphic)
|
|
8
|
+
export { agentChat } from "./shared/index.js";
|
|
9
|
+
// Scripts
|
|
7
10
|
export { runScript, loadEnv, parseArgs, camelCaseArgs, isValidPath, isValidProjectPath, ensureDir, fail, } from "./scripts/index.js";
|
|
8
11
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,+CAA+C;AAE/C,SAAS;AACT,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,GAKvB,MAAM,mBAAmB,CAAC;AAE3B,SAAS;AACT,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,EAAE,GAEH,MAAM,mBAAmB,CAAC;AAE3B,sBAAsB;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,UAAU;AACV,OAAO,EACL,SAAS,EACT,OAAO,EACP,SAAS,EACT,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,SAAS,EACT,IAAI,GACL,MAAM,oBAAoB,CAAC"}
|
package/dist/scripts/runner.d.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
/**
|
|
10
10
|
* Run the script dispatcher. Call this from your app's scripts/run.ts:
|
|
11
11
|
*
|
|
12
|
-
* import { runScript } from "@agent-native/core
|
|
12
|
+
* import { runScript } from "@agent-native/core";
|
|
13
13
|
* runScript();
|
|
14
14
|
*/
|
|
15
15
|
export declare function runScript(): Promise<void>;
|
package/dist/scripts/runner.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Isomorphic
|
|
2
|
+
* Isomorphic Agent Chat Utility
|
|
3
3
|
*
|
|
4
4
|
* Works in both browser and Node.js contexts:
|
|
5
5
|
* - Browser: sends via postMessage to the parent window
|
|
6
6
|
* - Node.js (scripts): sends via BUILDER_PARENT_MESSAGE stdout format,
|
|
7
7
|
* which the Electron host translates to postMessage
|
|
8
8
|
*/
|
|
9
|
-
export interface
|
|
9
|
+
export interface AgentChatMessage {
|
|
10
10
|
/** The visible prompt text shown in the chat input */
|
|
11
11
|
message: string;
|
|
12
12
|
/** Hidden context appended to the prompt (not shown to user, but sent to AI) */
|
|
@@ -15,25 +15,25 @@ export interface FusionChatMessage {
|
|
|
15
15
|
submit?: boolean;
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
|
-
* Send a structured message to
|
|
18
|
+
* Send a structured message to the agent chat.
|
|
19
19
|
* Automatically detects environment (browser vs Node.js) and uses the right transport.
|
|
20
20
|
*/
|
|
21
|
-
declare function send(data:
|
|
21
|
+
declare function send(data: AgentChatMessage): void;
|
|
22
22
|
/**
|
|
23
|
-
* Submit a message to
|
|
23
|
+
* Submit a message to the agent chat (auto-submits by default).
|
|
24
24
|
*/
|
|
25
25
|
declare function submit(message: string, context?: string): void;
|
|
26
26
|
/**
|
|
27
|
-
* Prefill the
|
|
27
|
+
* Prefill the agent chat input without submitting (user reviews first).
|
|
28
28
|
*/
|
|
29
29
|
declare function prefill(message: string, context?: string): void;
|
|
30
|
-
export declare const
|
|
31
|
-
/** Send raw
|
|
30
|
+
export declare const agentChat: {
|
|
31
|
+
/** Send raw AgentChatMessage — full control over all fields */
|
|
32
32
|
send: typeof send;
|
|
33
|
-
/** Auto-submit a message to
|
|
33
|
+
/** Auto-submit a message to agent chat */
|
|
34
34
|
submit: typeof submit;
|
|
35
35
|
/** Prefill the chat input for user review before sending */
|
|
36
36
|
prefill: typeof prefill;
|
|
37
37
|
};
|
|
38
38
|
export {};
|
|
39
|
-
//# sourceMappingURL=
|
|
39
|
+
//# sourceMappingURL=agent-chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-chat.d.ts","sourceRoot":"","sources":["../../src/shared/agent-chat.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAOD;;;GAGG;AACH,iBAAS,IAAI,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAiB1C;AAED;;GAEG;AACH,iBAAS,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAEvD;AAED;;GAEG;AACH,iBAAS,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAExD;AAED,eAAO,MAAM,SAAS;IACpB,+DAA+D;;IAE/D,0CAA0C;;IAE1C,4DAA4D;;CAE7D,CAAC"}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Isomorphic
|
|
2
|
+
* Isomorphic Agent Chat Utility
|
|
3
3
|
*
|
|
4
4
|
* Works in both browser and Node.js contexts:
|
|
5
5
|
* - Browser: sends via postMessage to the parent window
|
|
6
6
|
* - Node.js (scripts): sends via BUILDER_PARENT_MESSAGE stdout format,
|
|
7
7
|
* which the Electron host translates to postMessage
|
|
8
8
|
*/
|
|
9
|
-
const
|
|
9
|
+
const AGENT_CHAT_MESSAGE_TYPE = "builder.submitChat";
|
|
10
10
|
const isBrowser = typeof window !== "undefined" && typeof window.postMessage === "function";
|
|
11
11
|
/**
|
|
12
|
-
* Send a structured message to
|
|
12
|
+
* Send a structured message to the agent chat.
|
|
13
13
|
* Automatically detects environment (browser vs Node.js) and uses the right transport.
|
|
14
14
|
*/
|
|
15
15
|
function send(data) {
|
|
16
|
-
const payload = { type:
|
|
16
|
+
const payload = { type: AGENT_CHAT_MESSAGE_TYPE, data };
|
|
17
17
|
if (isBrowser) {
|
|
18
18
|
const target = window.parent !== window ? window.parent : window;
|
|
19
19
|
try {
|
|
20
20
|
target.postMessage(payload, "*");
|
|
21
21
|
}
|
|
22
22
|
catch (err) {
|
|
23
|
-
console.error("[
|
|
23
|
+
console.error("[agentChat] postMessage failed:", err);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
else {
|
|
@@ -30,23 +30,23 @@ function send(data) {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
33
|
-
* Submit a message to
|
|
33
|
+
* Submit a message to the agent chat (auto-submits by default).
|
|
34
34
|
*/
|
|
35
35
|
function submit(message, context) {
|
|
36
36
|
send({ message, context, submit: true });
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
|
-
* Prefill the
|
|
39
|
+
* Prefill the agent chat input without submitting (user reviews first).
|
|
40
40
|
*/
|
|
41
41
|
function prefill(message, context) {
|
|
42
42
|
send({ message, context, submit: false });
|
|
43
43
|
}
|
|
44
|
-
export const
|
|
45
|
-
/** Send raw
|
|
44
|
+
export const agentChat = {
|
|
45
|
+
/** Send raw AgentChatMessage — full control over all fields */
|
|
46
46
|
send,
|
|
47
|
-
/** Auto-submit a message to
|
|
47
|
+
/** Auto-submit a message to agent chat */
|
|
48
48
|
submit,
|
|
49
49
|
/** Prefill the chat input for user review before sending */
|
|
50
50
|
prefill,
|
|
51
51
|
};
|
|
52
|
-
//# sourceMappingURL=
|
|
52
|
+
//# sourceMappingURL=agent-chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-chat.js","sourceRoot":"","sources":["../../src/shared/agent-chat.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AAErD,MAAM,SAAS,GACb,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,UAAU,CAAC;AAE5E;;;GAGG;AACH,SAAS,IAAI,CAAC,IAAsB;IAClC,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC;IAExD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACjE,IAAI,CAAC;YACH,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,6EAA6E;QAC7E,OAAO,CAAC,GAAG,CACT,yBAAyB;YACvB,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAC1D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,MAAM,CAAC,OAAe,EAAE,OAAgB;IAC/C,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAS,OAAO,CAAC,OAAe,EAAE,OAAgB;IAChD,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,+DAA+D;IAC/D,IAAI;IACJ,0CAA0C;IAC1C,MAAM;IACN,4DAA4D;IAC5D,OAAO;CACR,CAAC"}
|
package/dist/shared/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { agentChat, type AgentChatMessage } from "./agent-chat.js";
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/shared/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { agentChat } from "./agent-chat.js";
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/shared/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAyB,MAAM,iBAAiB,CAAC"}
|
package/dist/vite/client.js
CHANGED
package/dist/vite/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/vite/client.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,aAAa,EAA6B,MAAM,qBAAqB,CAAC;AAmB/E;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,UAA+B,EAAE;IAC5D,qCAAqC;IACrC,IAAI,WAAgB,CAAC;IACrB,IAAI,CAAC;QACH,WAAW,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;QAClD,IAAI,WAAW,CAAC,OAAO;YAAE,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;IACxC,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,OAAO;QACL,MAAM,EAAE;YACN,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;YAC1B,EAAE,EAAE;gBACF,KAAK,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/vite/client.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,aAAa,EAA6B,MAAM,qBAAqB,CAAC;AAmB/E;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,UAA+B,EAAE;IAC5D,qCAAqC;IACrC,IAAI,WAAgB,CAAC;IACrB,IAAI,CAAC;QACH,WAAW,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;QAClD,IAAI,WAAW,CAAC,OAAO;YAAE,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;IACxC,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,OAAO;QACL,MAAM,EAAE;YACN,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;YAC1B,EAAE,EAAE;gBACF,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;gBACxC,IAAI,EAAE;oBACJ,MAAM;oBACN,QAAQ;oBACR,aAAa;oBACb,YAAY;oBACZ,WAAW;oBACX,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;iBAC1B;aACF;SACF;QACD,KAAK,EAAE;YACL,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,UAAU;SACrC;QACD,OAAO,EAAE;YACP,WAAW,EAAE,EAAE;YACf,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC;YAC9B,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;SAC3B,CAAC,MAAM,CAAC,OAAO,CAAC;QACjB,OAAO,EAAE;YACP,KAAK,EAAE;gBACL,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC;gBAClC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC;gBACxC,GAAG,OAAO,CAAC,OAAO;aACnB;SACF;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Framework for agent-native application development — where AI agents and UI share state via files",
|
|
6
6
|
"license": "MIT",
|
|
@@ -8,7 +8,10 @@
|
|
|
8
8
|
"agent-native": "./dist/cli/index.js"
|
|
9
9
|
},
|
|
10
10
|
"exports": {
|
|
11
|
-
".":
|
|
11
|
+
".": {
|
|
12
|
+
"browser": "./dist/index.browser.js",
|
|
13
|
+
"default": "./dist/index.js"
|
|
14
|
+
},
|
|
12
15
|
"./vite": "./dist/vite/index.js",
|
|
13
16
|
"./server": "./dist/server/index.js",
|
|
14
17
|
"./client": "./dist/client/index.js",
|
|
@@ -51,15 +54,33 @@
|
|
|
51
54
|
"vite": ">=6"
|
|
52
55
|
},
|
|
53
56
|
"peerDependenciesMeta": {
|
|
54
|
-
"@tanstack/react-query": {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
"
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
"
|
|
61
|
-
|
|
62
|
-
|
|
57
|
+
"@tanstack/react-query": {
|
|
58
|
+
"optional": true
|
|
59
|
+
},
|
|
60
|
+
"tailwindcss": {
|
|
61
|
+
"optional": true
|
|
62
|
+
},
|
|
63
|
+
"tailwindcss-animate": {
|
|
64
|
+
"optional": true
|
|
65
|
+
},
|
|
66
|
+
"autoprefixer": {
|
|
67
|
+
"optional": true
|
|
68
|
+
},
|
|
69
|
+
"postcss": {
|
|
70
|
+
"optional": true
|
|
71
|
+
},
|
|
72
|
+
"cors": {
|
|
73
|
+
"optional": true
|
|
74
|
+
},
|
|
75
|
+
"express": {
|
|
76
|
+
"optional": true
|
|
77
|
+
},
|
|
78
|
+
"@vitejs/plugin-react-swc": {
|
|
79
|
+
"optional": true
|
|
80
|
+
},
|
|
81
|
+
"vite": {
|
|
82
|
+
"optional": true
|
|
83
|
+
}
|
|
63
84
|
},
|
|
64
85
|
"devDependencies": {
|
|
65
86
|
"@tanstack/react-query": "^5.84.2",
|
|
@@ -7,7 +7,7 @@ This is an **@agent-native/core** application — the AI agent and UI share stat
|
|
|
7
7
|
### Core Principles
|
|
8
8
|
|
|
9
9
|
1. **Files as database** — All app state lives in files. Both UI and agent read/write the same files.
|
|
10
|
-
2. **All AI through agent chat** — No inline LLM calls. UI delegates to the AI via `
|
|
10
|
+
2. **All AI through agent chat** — No inline LLM calls. UI delegates to the AI via `sendToAgentChat()` / `agentChat.submit()`.
|
|
11
11
|
3. **Scripts for agent operations** — `pnpm script <name>` dispatches to callable script files in `scripts/`.
|
|
12
12
|
4. **Bidirectional SSE events** — The file watcher keeps the UI in sync when the agent modifies files.
|
|
13
13
|
5. **Agent can update code** — The agent can modify this app's source code directly.
|
|
@@ -43,16 +43,16 @@ Edit `server/index.ts`, add your route to `createAppServer()`.
|
|
|
43
43
|
Create `scripts/my-script.ts` exporting `default async function(args: string[])`.
|
|
44
44
|
Run with: `pnpm script my-script --arg value`
|
|
45
45
|
|
|
46
|
-
**Sending to
|
|
46
|
+
**Sending to agent chat from UI:**
|
|
47
47
|
```ts
|
|
48
|
-
import {
|
|
49
|
-
|
|
48
|
+
import { sendToAgentChat } from "@agent-native/core";
|
|
49
|
+
sendToAgentChat({ message: "Generate something", context: "...", submit: true });
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
**Sending to
|
|
52
|
+
**Sending to agent chat from scripts:**
|
|
53
53
|
```ts
|
|
54
|
-
import {
|
|
55
|
-
|
|
54
|
+
import { agentChat } from "@agent-native/core";
|
|
55
|
+
agentChat.submit("Generate something");
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
### Tech Stack
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { StrictMode } from "react";
|
|
2
2
|
import { createRoot } from "react-dom/client";
|
|
3
3
|
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
4
|
-
import { useFileWatcher } from "@agent-native/core
|
|
4
|
+
import { useFileWatcher } from "@agent-native/core";
|
|
5
5
|
import "./global.css";
|
|
6
6
|
|
|
7
7
|
const queryClient = new QueryClient();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { cn } from "@agent-native/core
|
|
1
|
+
export { cn } from "@agent-native/core";
|
|
@@ -3,17 +3,14 @@
|
|
|
3
3
|
"private": true,
|
|
4
4
|
"type": "module",
|
|
5
5
|
"scripts": {
|
|
6
|
-
"dev": "
|
|
7
|
-
"build": "
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"typecheck": "tsc",
|
|
12
|
-
"format.fix": "prettier --write .",
|
|
13
|
-
"script": "tsx scripts/run.ts"
|
|
6
|
+
"dev": "agent-native dev",
|
|
7
|
+
"build": "agent-native build",
|
|
8
|
+
"start": "agent-native start",
|
|
9
|
+
"typecheck": "agent-native typecheck",
|
|
10
|
+
"script": "agent-native script"
|
|
14
11
|
},
|
|
15
12
|
"dependencies": {
|
|
16
|
-
"@agent-native/core": "^0.
|
|
13
|
+
"@agent-native/core": "^0.2.0",
|
|
17
14
|
"dotenv": "^17.2.1",
|
|
18
15
|
"express": "^5.1.0"
|
|
19
16
|
},
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* Scripts export a default async function that receives CLI args.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { parseArgs } from "@agent-native/core
|
|
8
|
-
import {
|
|
7
|
+
import { parseArgs } from "@agent-native/core";
|
|
8
|
+
import { agentChat } from "@agent-native/core";
|
|
9
9
|
|
|
10
10
|
export default async function hello(args: string[]) {
|
|
11
11
|
const parsed = parseArgs(args);
|
|
@@ -13,8 +13,8 @@ export default async function hello(args: string[]) {
|
|
|
13
13
|
|
|
14
14
|
console.log(`Hello, ${name}!`);
|
|
15
15
|
|
|
16
|
-
// Example: send a message to
|
|
16
|
+
// Example: send a message to agent chat (works in Electron context)
|
|
17
17
|
if (parsed["send-chat"] === "true") {
|
|
18
|
-
|
|
18
|
+
agentChat.submit(`Hello from the script system! Name: ${name}`);
|
|
19
19
|
}
|
|
20
20
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "dotenv/config";
|
|
2
|
-
import { createServer, createFileWatcher, createSSEHandler } from "@agent-native/core
|
|
2
|
+
import { createServer, createFileWatcher, createSSEHandler } from "@agent-native/core";
|
|
3
3
|
|
|
4
4
|
export function createAppServer() {
|
|
5
5
|
const app = createServer();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fusion-chat.d.ts","sourceRoot":"","sources":["../../src/client/fusion-chat.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,iBAAiB;IAChC,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,yCAAyC;IACzC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;CACpC;AAID;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAQ9D"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fusion Chat Bridge (browser)
|
|
3
|
-
*
|
|
4
|
-
* Sends structured messages to the Fusion AI chat from UI interactions.
|
|
5
|
-
* Messages are sent via postMessage to the parent window (or self if top-level).
|
|
6
|
-
*/
|
|
7
|
-
const FUSION_MESSAGE_TYPE = "builder.submitChat";
|
|
8
|
-
/**
|
|
9
|
-
* Send a message to the Fusion AI chat via postMessage.
|
|
10
|
-
*/
|
|
11
|
-
export function sendToFusionChat(opts) {
|
|
12
|
-
const payload = {
|
|
13
|
-
type: FUSION_MESSAGE_TYPE,
|
|
14
|
-
data: opts,
|
|
15
|
-
};
|
|
16
|
-
const target = window.parent !== window ? window.parent : window;
|
|
17
|
-
target.postMessage(payload, "*");
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=fusion-chat.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fusion-chat.js","sourceRoot":"","sources":["../../src/client/fusion-chat.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmBH,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;AAEjD;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAuB;IACtD,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,IAAI;KACX,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACjE,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { type FusionChatMessage } from "./fusion-chat.js";
|
|
2
|
-
/**
|
|
3
|
-
* Hook that wraps sendToFusionChat with a loading state.
|
|
4
|
-
*
|
|
5
|
-
* Returns [isGenerating, send] where:
|
|
6
|
-
* - isGenerating: true after send() is called, false when the
|
|
7
|
-
* builder.fusion.chatRunning event fires with detail.isRunning === false
|
|
8
|
-
* - send: wrapper around sendToFusionChat that sets isGenerating to true
|
|
9
|
-
*/
|
|
10
|
-
export declare function useFusionChatGenerating(): [
|
|
11
|
-
boolean,
|
|
12
|
-
(opts: FusionChatMessage) => void
|
|
13
|
-
];
|
|
14
|
-
//# sourceMappingURL=use-fusion-chat.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-fusion-chat.d.ts","sourceRoot":"","sources":["../../src/client/use-fusion-chat.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE5E;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,IAAI;IACzC,OAAO;IACP,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI;CAClC,CAqBA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-fusion-chat.js","sourceRoot":"","sources":["../../src/client/use-fusion-chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAA0B,MAAM,kBAAkB,CAAC;AAE5E;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB;IAIrC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,CAAC,CAAQ,EAAE,EAAE;YAC3B,MAAM,MAAM,GAAI,CAAiB,CAAC,MAAM,CAAC;YACzC,IAAI,MAAM,EAAE,SAAS,KAAK,KAAK,EAAE,CAAC;gBAChC,eAAe,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;QACH,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;QAC/D,OAAO,GAAG,EAAE,CACV,MAAM,CAAC,mBAAmB,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,IAAuB,EAAE,EAAE;QACnD,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fusion-chat.d.ts","sourceRoot":"","sources":["../../src/shared/fusion-chat.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,iBAAiB;IAChC,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAOD;;;GAGG;AACH,iBAAS,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAiB3C;AAED;;GAEG;AACH,iBAAS,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAEvD;AAED;;GAEG;AACH,iBAAS,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAExD;AAED,eAAO,MAAM,UAAU;IACrB,gEAAgE;;IAEhE,2CAA2C;;IAE3C,4DAA4D;;CAE7D,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fusion-chat.js","sourceRoot":"","sources":["../../src/shared/fusion-chat.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;AAEjD,MAAM,SAAS,GACb,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,UAAU,CAAC;AAE5E;;;GAGG;AACH,SAAS,IAAI,CAAC,IAAuB;IACnC,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;IAEpD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACjE,IAAI,CAAC;YACH,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,6EAA6E;QAC7E,OAAO,CAAC,GAAG,CACT,yBAAyB;YACvB,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAC1D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,MAAM,CAAC,OAAe,EAAE,OAAgB;IAC/C,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAS,OAAO,CAAC,OAAe,EAAE,OAAgB;IAChD,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,gEAAgE;IAChE,IAAI;IACJ,2CAA2C;IAC3C,MAAM;IACN,4DAA4D;IAC5D,OAAO;CACR,CAAC"}
|