arcie 0.1.2
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/LICENSE +21 -0
- package/README.md +66 -0
- package/dist/agent/index.d.ts +3 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +7 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/auth/index.d.ts +10 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +18 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/channels/index.d.ts +5 -0
- package/dist/channels/index.d.ts.map +1 -0
- package/dist/channels/index.js +13 -0
- package/dist/channels/index.js.map +1 -0
- package/dist/cli/banner.d.ts +2 -0
- package/dist/cli/banner.d.ts.map +1 -0
- package/dist/cli/banner.js +10 -0
- package/dist/cli/banner.js.map +1 -0
- package/dist/cli/build.d.ts +5 -0
- package/dist/cli/build.d.ts.map +1 -0
- package/dist/cli/build.js +54 -0
- package/dist/cli/build.js.map +1 -0
- package/dist/cli/dev.d.ts +5 -0
- package/dist/cli/dev.d.ts.map +1 -0
- package/dist/cli/dev.js +74 -0
- package/dist/cli/dev.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +43 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +4 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +75 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/context/index.d.ts +11 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +38 -0
- package/dist/context/index.js.map +1 -0
- package/dist/discover/index.d.ts +31 -0
- package/dist/discover/index.d.ts.map +1 -0
- package/dist/discover/index.js +133 -0
- package/dist/discover/index.js.map +1 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +7 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/instructions/index.d.ts +4 -0
- package/dist/instructions/index.d.ts.map +1 -0
- package/dist/instructions/index.js +33 -0
- package/dist/instructions/index.js.map +1 -0
- package/dist/loader.d.ts +7 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +102 -0
- package/dist/loader.js.map +1 -0
- package/dist/protocol/events.d.ts +192 -0
- package/dist/protocol/events.d.ts.map +1 -0
- package/dist/protocol/events.js +46 -0
- package/dist/protocol/events.js.map +1 -0
- package/dist/runner/index.d.ts +18 -0
- package/dist/runner/index.d.ts.map +1 -0
- package/dist/runner/index.js +278 -0
- package/dist/runner/index.js.map +1 -0
- package/dist/schedules/index.d.ts +3 -0
- package/dist/schedules/index.d.ts.map +1 -0
- package/dist/schedules/index.js +7 -0
- package/dist/schedules/index.js.map +1 -0
- package/dist/skills/index.d.ts +4 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +28 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +10 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types.d.ts +118 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/docs/getting-started.md +51 -0
- package/docs/index.md +31 -0
- package/docs/project-layout.md +88 -0
- package/package.json +73 -0
- package/templates/default/agent/agent.ts +13 -0
- package/templates/default/agent/channels/.gitkeep +0 -0
- package/templates/default/agent/connections/.gitkeep +0 -0
- package/templates/default/agent/instructions.md +3 -0
- package/templates/default/agent/knowledge/.gitkeep +0 -0
- package/templates/default/agent/policies/.gitkeep +0 -0
- package/templates/default/agent/schedules/.gitkeep +0 -0
- package/templates/default/agent/sessions/.gitkeep +0 -0
- package/templates/default/agent/subagents/.gitkeep +0 -0
- package/templates/default/agent/tools/.gitkeep +0 -0
- package/templates/default/package.json +17 -0
- package/templates/default/tsconfig.json +11 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Cencori
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Eline
|
|
2
|
+
|
|
3
|
+
The electronic line — build agents at the speed of light.
|
|
4
|
+
|
|
5
|
+
> Site: [cencori.com/eline](https://cencori.com/eline) · Docs: [cencori.com/eline/docs](https://cencori.com/eline/docs)
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
npx eline@latest init my-agent
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
my-agent/
|
|
13
|
+
├── agent/
|
|
14
|
+
│ ├── agent.ts # model + Cencori config
|
|
15
|
+
│ ├── instructions.md # system prompt
|
|
16
|
+
│ ├── tools/ # what it can do
|
|
17
|
+
│ ├── knowledge/ # what it knows
|
|
18
|
+
│ ├── subagents/ # who it delegates to
|
|
19
|
+
│ ├── channels/ # where it lives (HTTP, Slack, etc.)
|
|
20
|
+
│ ├── schedules/ # when it acts on its own
|
|
21
|
+
│ ├── sessions/ # durable execution policies
|
|
22
|
+
│ └── policies/ # security, budgets, guardrails
|
|
23
|
+
├── package.json
|
|
24
|
+
└── tsconfig.json
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Quick Start
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npx eline@latest init my-agent
|
|
31
|
+
cd my-agent
|
|
32
|
+
npm run dev
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Authoring
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
// agent/agent.ts
|
|
39
|
+
import { defineAgent } from "eline";
|
|
40
|
+
|
|
41
|
+
export default defineAgent({
|
|
42
|
+
model: "claude-sonnet-4-5",
|
|
43
|
+
cencori: {
|
|
44
|
+
project: "proj_abc",
|
|
45
|
+
billing: { budget: "50.00/month" },
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
```ts
|
|
51
|
+
// agent/tools/get_weather.ts
|
|
52
|
+
import { defineTool } from "eline/tools";
|
|
53
|
+
import { z } from "zod";
|
|
54
|
+
|
|
55
|
+
export default defineTool({
|
|
56
|
+
description: "Get the current weather for a city.",
|
|
57
|
+
inputSchema: z.object({ city: z.string() }),
|
|
58
|
+
async execute({ city }) {
|
|
59
|
+
return { city, condition: "Sunny", temperatureF: 72 };
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## License
|
|
65
|
+
|
|
66
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAK5D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CAAC,MAAmB;IAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type TokenValue = string | (() => string | Promise<string>);
|
|
2
|
+
export type OutboundAuthFn = () => Promise<{
|
|
3
|
+
readonly headers: Readonly<Record<string, string>>;
|
|
4
|
+
}>;
|
|
5
|
+
export declare function bearer(token: TokenValue): OutboundAuthFn;
|
|
6
|
+
export declare function basic(input: {
|
|
7
|
+
username: string;
|
|
8
|
+
password: TokenValue;
|
|
9
|
+
}): OutboundAuthFn;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAEnE,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACpD,CAAC,CAAC;AAEH,wBAAgB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,cAAc,CAMxD;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,UAAU,CAAC;CACtB,GAAG,cAAc,CAMjB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export function bearer(token) {
|
|
2
|
+
return async () => ({
|
|
3
|
+
headers: {
|
|
4
|
+
authorization: `Bearer ${await resolveToken(token)}`,
|
|
5
|
+
},
|
|
6
|
+
});
|
|
7
|
+
}
|
|
8
|
+
export function basic(input) {
|
|
9
|
+
return async () => ({
|
|
10
|
+
headers: {
|
|
11
|
+
authorization: `Basic ${btoa(`${input.username}:${await resolveToken(input.password)}`)}`,
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
async function resolveToken(value) {
|
|
16
|
+
return typeof value === "function" ? await value() : value;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,MAAM,CAAC,KAAiB;IACtC,OAAO,KAAK,IAAI,EAAE,CAAC,CAAC;QAClB,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,MAAM,YAAY,CAAC,KAAK,CAAC,EAAE;SACrD;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,KAGrB;IACC,OAAO,KAAK,IAAI,EAAE,CAAC,CAAC;QAClB,OAAO,EAAE;YACP,aAAa,EAAE,SAAS,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,IAAI,MAAM,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;SAC1F;KACF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,KAAiB;IAC3C,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ChannelConfig } from "../types.js";
|
|
2
|
+
export declare function defineChannel(config: ChannelConfig): ChannelConfig;
|
|
3
|
+
export declare function POST(handler: ChannelConfig["handler"]): ChannelConfig["handler"];
|
|
4
|
+
export declare function GET(handler: ChannelConfig["handler"]): ChannelConfig["handler"];
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/channels/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAKlE;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC,SAAS,CAAC,CAEhF;AAED,wBAAgB,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC,SAAS,CAAC,CAE/E"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function defineChannel(config) {
|
|
2
|
+
if (!config.name || !config.handler) {
|
|
3
|
+
throw new Error("Channel must have name and handler");
|
|
4
|
+
}
|
|
5
|
+
return config;
|
|
6
|
+
}
|
|
7
|
+
export function POST(handler) {
|
|
8
|
+
return handler;
|
|
9
|
+
}
|
|
10
|
+
export function GET(handler) {
|
|
11
|
+
return handler;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/channels/index.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAAC,MAAqB;IACjD,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAiC;IACpD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,OAAiC;IACnD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/cli/banner.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,IAAI,IAAI,CAQjC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function showBanner() {
|
|
2
|
+
console.log();
|
|
3
|
+
console.log(" ╔══════════════════════════════════╗");
|
|
4
|
+
console.log(" ║ Eline ║");
|
|
5
|
+
console.log(" ║ The electronic line — build ║");
|
|
6
|
+
console.log(" ║ agents at the speed of light. ║");
|
|
7
|
+
console.log(" ╚══════════════════════════════════╝");
|
|
8
|
+
console.log();
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=banner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/cli/banner.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"AAKA,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2DhB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { mkdirSync, writeFileSync, existsSync } from "node:fs";
|
|
2
|
+
import { resolve, join } from "node:path";
|
|
3
|
+
import { loadAgent } from "../loader.js";
|
|
4
|
+
import { discoverAgent } from "../discover/index.js";
|
|
5
|
+
export async function buildCommand(options) {
|
|
6
|
+
const agentDirPath = resolve(process.cwd(), options.agentDir);
|
|
7
|
+
const outDir = resolve(process.cwd(), options.outDir);
|
|
8
|
+
console.log(`\n Building agent...\n`);
|
|
9
|
+
if (!existsSync(agentDirPath)) {
|
|
10
|
+
console.error(` Agent directory not found: ${agentDirPath}`);
|
|
11
|
+
process.exit(1);
|
|
12
|
+
}
|
|
13
|
+
const { agent: discovered, diagnostics } = discoverAgent(agentDirPath);
|
|
14
|
+
if (diagnostics.some((d) => d.severity === "error")) {
|
|
15
|
+
for (const d of diagnostics) {
|
|
16
|
+
console.error(` ✖ ${d.code}: ${d.message}`);
|
|
17
|
+
}
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
const agent = await loadAgent(agentDirPath);
|
|
22
|
+
mkdirSync(outDir, { recursive: true });
|
|
23
|
+
const manifest = {
|
|
24
|
+
config: agent.manifest.config,
|
|
25
|
+
instructions: agent.manifest.instructions,
|
|
26
|
+
tools: Object.keys(agent.manifest.tools),
|
|
27
|
+
skills: Object.keys(agent.manifest.skills),
|
|
28
|
+
hooks: Object.keys(agent.manifest.hooks),
|
|
29
|
+
channels: Object.keys(agent.manifest.channels),
|
|
30
|
+
schedules: Object.keys(agent.manifest.schedules),
|
|
31
|
+
discovered: {
|
|
32
|
+
tools: discovered.tools.map((t) => t.name),
|
|
33
|
+
skills: discovered.skills.map((s) => s.name),
|
|
34
|
+
hooks: discovered.hooks.map((h) => h.name),
|
|
35
|
+
channels: discovered.channels.map((c) => c.name),
|
|
36
|
+
schedules: discovered.schedules.map((s) => s.name),
|
|
37
|
+
},
|
|
38
|
+
session: agent.manifest.session,
|
|
39
|
+
policy: agent.manifest.policy,
|
|
40
|
+
};
|
|
41
|
+
writeFileSync(join(outDir, "manifest.json"), JSON.stringify(manifest, null, 2));
|
|
42
|
+
console.log(` Written to ${outDir}/manifest.json`);
|
|
43
|
+
console.log(` Tools: ${manifest.tools.length}`);
|
|
44
|
+
console.log(` Skills: ${manifest.skills.length}`);
|
|
45
|
+
console.log(` Channels: ${manifest.channels.length}`);
|
|
46
|
+
console.log(` Schedules: ${manifest.schedules.length}`);
|
|
47
|
+
console.log(`\n Done.\n`);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
console.error(` Build failed:`, err);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"AAQA,wBAAsB,UAAU,CAAC,OAAO,EAAE;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0EhB"}
|
package/dist/cli/dev.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { createServer } from "node:http";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { loadAgent } from "../loader.js";
|
|
4
|
+
import { discoverAgent } from "../discover/index.js";
|
|
5
|
+
import { streamAgent } from "../runner/index.js";
|
|
6
|
+
import { showBanner } from "./banner.js";
|
|
7
|
+
export async function devCommand(options) {
|
|
8
|
+
const port = parseInt(options.port, 10);
|
|
9
|
+
const agentDirPath = resolve(process.cwd(), options.agentDir);
|
|
10
|
+
showBanner();
|
|
11
|
+
const { agent: discovered, diagnostics } = discoverAgent(agentDirPath);
|
|
12
|
+
if (diagnostics.some((d) => d.severity === "error")) {
|
|
13
|
+
for (const d of diagnostics) {
|
|
14
|
+
console.error(` ✖ ${d.code}: ${d.message}`);
|
|
15
|
+
}
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
for (const d of diagnostics) {
|
|
19
|
+
console.warn(` ⚠ ${d.code}: ${d.message}`);
|
|
20
|
+
}
|
|
21
|
+
console.log(` Agent: ${agentDirPath}`);
|
|
22
|
+
console.log(` Server: http://localhost:${port}`);
|
|
23
|
+
console.log();
|
|
24
|
+
if (discovered.agentConfig) {
|
|
25
|
+
try {
|
|
26
|
+
const agent = await loadAgent(agentDirPath);
|
|
27
|
+
console.log(` Model: ${agent.manifest.config.model}`);
|
|
28
|
+
console.log(` Tools: ${Object.keys(agent.manifest.tools).length}`);
|
|
29
|
+
console.log();
|
|
30
|
+
}
|
|
31
|
+
catch { }
|
|
32
|
+
}
|
|
33
|
+
const server = createServer(async (req, res) => {
|
|
34
|
+
if (req.method === "POST" && req.url === "/") {
|
|
35
|
+
let body = "";
|
|
36
|
+
for await (const chunk of req)
|
|
37
|
+
body += chunk;
|
|
38
|
+
try {
|
|
39
|
+
const { message, stream } = JSON.parse(body);
|
|
40
|
+
if (stream) {
|
|
41
|
+
res.writeHead(200, {
|
|
42
|
+
"Content-Type": "application/x-ndjson",
|
|
43
|
+
"Cache-Control": "no-cache",
|
|
44
|
+
Connection: "keep-alive",
|
|
45
|
+
});
|
|
46
|
+
for await (const event of streamAgent(agentDirPath, message)) {
|
|
47
|
+
res.write(JSON.stringify(event) + "\n");
|
|
48
|
+
}
|
|
49
|
+
res.end();
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
res.writeHead(200, { "Content-Type": "application/json" });
|
|
53
|
+
for await (const event of streamAgent(agentDirPath, message)) { }
|
|
54
|
+
const result = await loadAgent(agentDirPath).then((a) => a.manifest.config);
|
|
55
|
+
res.end(JSON.stringify({ status: "ok" }));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
res.writeHead(500, { "Content-Type": "application/json" });
|
|
60
|
+
res.end(JSON.stringify({ error: String(err) }));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
res.writeHead(404);
|
|
65
|
+
res.end("Not found");
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
server.listen(port, () => {
|
|
69
|
+
console.log(` Listening on http://localhost:${port}`);
|
|
70
|
+
console.log(` POST / with { "message": "hello" }`);
|
|
71
|
+
console.log();
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=dev.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { initCommand } from "./init.js";
|
|
4
|
+
import { devCommand } from "./dev.js";
|
|
5
|
+
import { buildCommand } from "./build.js";
|
|
6
|
+
import { showBanner } from "./banner.js";
|
|
7
|
+
import { readFileSync } from "node:fs";
|
|
8
|
+
import { resolve, dirname } from "node:path";
|
|
9
|
+
import { fileURLToPath } from "node:url";
|
|
10
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
const pkgPath = resolve(__dirname, "../../package.json");
|
|
12
|
+
let version = "0.1.0";
|
|
13
|
+
try {
|
|
14
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
15
|
+
version = pkg.version;
|
|
16
|
+
}
|
|
17
|
+
catch { }
|
|
18
|
+
showBanner();
|
|
19
|
+
const program = new Command();
|
|
20
|
+
program
|
|
21
|
+
.name("eline")
|
|
22
|
+
.description("Eline — the electronic line, build agents at the speed of light")
|
|
23
|
+
.version(version);
|
|
24
|
+
program
|
|
25
|
+
.command("init")
|
|
26
|
+
.description("Scaffold a new agent project")
|
|
27
|
+
.argument("[name]", "Project directory name")
|
|
28
|
+
.option("--template <name>", "Template to use (default, agent-only)", "default")
|
|
29
|
+
.action(initCommand);
|
|
30
|
+
program
|
|
31
|
+
.command("dev")
|
|
32
|
+
.description("Run the agent locally")
|
|
33
|
+
.option("-p, --port <port>", "Port to listen on", "3000")
|
|
34
|
+
.option("--agent-dir <path>", "Path to agent directory", "agent")
|
|
35
|
+
.action(devCommand);
|
|
36
|
+
program
|
|
37
|
+
.command("build")
|
|
38
|
+
.description("Compile the agent for production")
|
|
39
|
+
.option("--agent-dir <path>", "Path to agent directory", "agent")
|
|
40
|
+
.option("--out-dir <path>", "Output directory", ".eline")
|
|
41
|
+
.action(buildCommand);
|
|
42
|
+
program.parse(process.argv);
|
|
43
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;AACzD,IAAI,OAAO,GAAG,OAAO,CAAC;AACtB,IAAI,CAAC;IACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AACxB,CAAC;AAAC,MAAM,CAAC,CAAA,CAAC;AAEV,UAAU,EAAE,CAAC;AAEb,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,iEAAiE,CAAC;KAC9E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,8BAA8B,CAAC;KAC3C,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC;KAC5C,MAAM,CAAC,mBAAmB,EAAE,uCAAuC,EAAE,SAAS,CAAC;KAC/E,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,uBAAuB,CAAC;KACpC,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,CAAC;KACxD,MAAM,CAAC,oBAAoB,EAAE,yBAAyB,EAAE,OAAO,CAAC;KAChE,MAAM,CAAC,UAAU,CAAC,CAAC;AAEtB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,oBAAoB,EAAE,yBAAyB,EAAE,OAAO,CAAC;KAChE,MAAM,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,QAAQ,CAAC;KACxD,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAOA,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC5B,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
|
package/dist/cli/init.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { mkdirSync, writeFileSync, existsSync, readFileSync, readdirSync, statSync, copyFileSync } from "node:fs";
|
|
2
|
+
import { resolve, join, dirname } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
5
|
+
const TEMPLATES_DIR = resolve(__dirname, "../../templates");
|
|
6
|
+
export async function initCommand(name, options) {
|
|
7
|
+
const targetDir = name
|
|
8
|
+
? resolve(process.cwd(), name)
|
|
9
|
+
: resolve(process.cwd(), ".");
|
|
10
|
+
if (existsSync(targetDir) && name) {
|
|
11
|
+
console.error(`Directory already exists: ${targetDir}`);
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
const templateDir = resolve(TEMPLATES_DIR, options.template);
|
|
15
|
+
if (!existsSync(templateDir)) {
|
|
16
|
+
console.error(`Template not found: ${options.template}`);
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
console.log(`\n Scaffolding agent in ${targetDir}...\n`);
|
|
20
|
+
copyTemplate(templateDir, targetDir);
|
|
21
|
+
if (name) {
|
|
22
|
+
updatePackageJson(targetDir, name);
|
|
23
|
+
}
|
|
24
|
+
console.log(` Done! Created agent in ${targetDir}`);
|
|
25
|
+
console.log(`\n Next steps:`);
|
|
26
|
+
console.log(` cd ${name || "."}`);
|
|
27
|
+
console.log(` npm install`);
|
|
28
|
+
console.log(` npm run dev`);
|
|
29
|
+
console.log();
|
|
30
|
+
}
|
|
31
|
+
function copyTemplate(src, dest) {
|
|
32
|
+
const entries = collectFiles(src);
|
|
33
|
+
for (const entry of entries) {
|
|
34
|
+
const relative = entry.replace(src, "").replace(/^\//, "");
|
|
35
|
+
const destPath = join(dest, relative);
|
|
36
|
+
if (entry.endsWith(".gitkeep")) {
|
|
37
|
+
const parentDir = destPath.replace("/.gitkeep", "");
|
|
38
|
+
mkdirSync(parentDir, { recursive: true });
|
|
39
|
+
writeFileSync(join(parentDir, ".gitkeep"), "");
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
mkdirSync(dirname(destPath), { recursive: true });
|
|
43
|
+
if (entry.endsWith(".ts") || entry.endsWith(".md") || entry.endsWith(".json")) {
|
|
44
|
+
const content = readFileSync(entry, "utf-8");
|
|
45
|
+
writeFileSync(destPath, content);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
copyFileSync(entry, destPath);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function collectFiles(dir) {
|
|
53
|
+
const files = [];
|
|
54
|
+
const entries = readdirSync(dir);
|
|
55
|
+
for (const entry of entries) {
|
|
56
|
+
const fullPath = join(dir, entry);
|
|
57
|
+
const stat = statSync(fullPath);
|
|
58
|
+
if (stat.isDirectory()) {
|
|
59
|
+
files.push(...collectFiles(fullPath));
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
files.push(fullPath);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return files;
|
|
66
|
+
}
|
|
67
|
+
function updatePackageJson(targetDir, projectName) {
|
|
68
|
+
const pkgPath = join(targetDir, "package.json");
|
|
69
|
+
if (existsSync(pkgPath)) {
|
|
70
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
71
|
+
pkg.name = projectName;
|
|
72
|
+
writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + "\n");
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Session, TurnContext } from "../types.js";
|
|
2
|
+
export declare function getSession(): Session | null;
|
|
3
|
+
export declare function getTurn(): TurnContext | null;
|
|
4
|
+
export declare function setSession(session: Session): void;
|
|
5
|
+
export declare function setTurn(turn: TurnContext): void;
|
|
6
|
+
export declare function getContext<T = unknown>(key: string): T | undefined;
|
|
7
|
+
export declare function requireContext<T = unknown>(key: string): T;
|
|
8
|
+
export declare function hasContext(key: string): boolean;
|
|
9
|
+
export declare function setContext(key: string, value: unknown): void;
|
|
10
|
+
export declare function ensureContext<T>(key: string, factory: () => T): T;
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAMxD,wBAAgB,UAAU,IAAI,OAAO,GAAG,IAAI,CAE3C;AAED,wBAAgB,OAAO,IAAI,WAAW,GAAG,IAAI,CAE5C;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEjD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAE/C;AAED,wBAAgB,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAElE;AAED,wBAAgB,cAAc,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,CAM1D;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAE5D;AAED,wBAAgB,aAAa,CAAC,CAAC,EAC7B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,GACf,CAAC,CAKH"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
let currentSession = null;
|
|
2
|
+
let currentTurn = null;
|
|
3
|
+
const sharedContext = new Map();
|
|
4
|
+
export function getSession() {
|
|
5
|
+
return currentSession;
|
|
6
|
+
}
|
|
7
|
+
export function getTurn() {
|
|
8
|
+
return currentTurn;
|
|
9
|
+
}
|
|
10
|
+
export function setSession(session) {
|
|
11
|
+
currentSession = session;
|
|
12
|
+
}
|
|
13
|
+
export function setTurn(turn) {
|
|
14
|
+
currentTurn = turn;
|
|
15
|
+
}
|
|
16
|
+
export function getContext(key) {
|
|
17
|
+
return sharedContext.get(key);
|
|
18
|
+
}
|
|
19
|
+
export function requireContext(key) {
|
|
20
|
+
const value = sharedContext.get(key);
|
|
21
|
+
if (value === undefined) {
|
|
22
|
+
throw new Error(`Required context key not found: ${key}`);
|
|
23
|
+
}
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
export function hasContext(key) {
|
|
27
|
+
return sharedContext.has(key);
|
|
28
|
+
}
|
|
29
|
+
export function setContext(key, value) {
|
|
30
|
+
sharedContext.set(key, value);
|
|
31
|
+
}
|
|
32
|
+
export function ensureContext(key, factory) {
|
|
33
|
+
if (!sharedContext.has(key)) {
|
|
34
|
+
sharedContext.set(key, factory());
|
|
35
|
+
}
|
|
36
|
+
return sharedContext.get(key);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAEA,IAAI,cAAc,GAAmB,IAAI,CAAC;AAC1C,IAAI,WAAW,GAAuB,IAAI,CAAC;AAC3C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAmB,CAAC;AAEjD,MAAM,UAAU,UAAU;IACxB,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,cAAc,GAAG,OAAO,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAiB;IACvC,WAAW,GAAG,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,UAAU,CAAc,GAAW;IACjD,OAAO,aAAa,CAAC,GAAG,CAAC,GAAG,CAAkB,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,cAAc,CAAc,GAAW;IACrD,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,mCAAmC,GAAG,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,KAAc;IACpD,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,GAAW,EACX,OAAgB;IAEhB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,aAAa,CAAC,GAAG,CAAC,GAAG,CAAM,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface DiscoveredSlot {
|
|
2
|
+
name: string;
|
|
3
|
+
filePath: string;
|
|
4
|
+
type: "markdown" | "module";
|
|
5
|
+
kind: "flat" | "named";
|
|
6
|
+
}
|
|
7
|
+
export interface DiscoveredAgent {
|
|
8
|
+
root: string;
|
|
9
|
+
agentConfig?: string;
|
|
10
|
+
instructions?: string;
|
|
11
|
+
tools: DiscoveredSlot[];
|
|
12
|
+
skills: DiscoveredSlot[];
|
|
13
|
+
hooks: DiscoveredSlot[];
|
|
14
|
+
channels: DiscoveredSlot[];
|
|
15
|
+
schedules: DiscoveredSlot[];
|
|
16
|
+
connections: DiscoveredSlot[];
|
|
17
|
+
subagents: DiscoveredSlot[];
|
|
18
|
+
lib: DiscoveredSlot[];
|
|
19
|
+
}
|
|
20
|
+
export interface DiscoverDiagnostic {
|
|
21
|
+
code: string;
|
|
22
|
+
message: string;
|
|
23
|
+
severity: "error" | "warning";
|
|
24
|
+
filePath?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface DiscoverResult {
|
|
27
|
+
agent: DiscoveredAgent;
|
|
28
|
+
diagnostics: DiscoverDiagnostic[];
|
|
29
|
+
}
|
|
30
|
+
export declare function discoverAgent(agentDir: string): DiscoverResult;
|
|
31
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/discover/index.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC5B,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,GAAG,EAAE,cAAc,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,eAAe,CAAC;IACvB,WAAW,EAAE,kBAAkB,EAAE,CAAC;CACnC;AASD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CA8B9D"}
|