arcie 0.1.3 → 0.1.4

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.
Files changed (114) hide show
  1. package/README.md +34 -6
  2. package/dist/agent/index.d.ts +6 -3
  3. package/dist/agent/index.js +6 -6
  4. package/dist/agent/index.js.map +1 -1
  5. package/dist/auth/index.d.ts +6 -5
  6. package/dist/auth/index.js +8 -17
  7. package/dist/auth/index.js.map +1 -1
  8. package/dist/channels/index.d.ts +8 -5
  9. package/dist/channels/index.js +10 -12
  10. package/dist/channels/index.js.map +1 -1
  11. package/dist/chunk-2ZSKZYWK.js +1901 -0
  12. package/dist/chunk-2ZSKZYWK.js.map +1 -0
  13. package/dist/chunk-3CNQ6HQV.js +12 -0
  14. package/dist/chunk-3CNQ6HQV.js.map +1 -0
  15. package/dist/chunk-4L7WVCTU.js +12 -0
  16. package/dist/chunk-4L7WVCTU.js.map +1 -0
  17. package/dist/chunk-6XETPLIF.js +176 -0
  18. package/dist/chunk-6XETPLIF.js.map +1 -0
  19. package/dist/chunk-CKHBEZCT.js +24 -0
  20. package/dist/chunk-CKHBEZCT.js.map +1 -0
  21. package/dist/chunk-FQ7KDNV5.js +12 -0
  22. package/dist/chunk-FQ7KDNV5.js.map +1 -0
  23. package/dist/chunk-L3BTL5FM.js +39 -0
  24. package/dist/chunk-L3BTL5FM.js.map +1 -0
  25. package/dist/chunk-LQC65UHE.js +34 -0
  26. package/dist/chunk-LQC65UHE.js.map +1 -0
  27. package/dist/chunk-PHTJLJOV.js +25 -0
  28. package/dist/chunk-PHTJLJOV.js.map +1 -0
  29. package/dist/chunk-QE46QFID.js +92 -0
  30. package/dist/chunk-QE46QFID.js.map +1 -0
  31. package/dist/chunk-WAD7VLNI.js +51 -0
  32. package/dist/chunk-WAD7VLNI.js.map +1 -0
  33. package/dist/chunk-ZJNHQXMO.js +20 -0
  34. package/dist/chunk-ZJNHQXMO.js.map +1 -0
  35. package/dist/cli/index.d.ts +0 -2
  36. package/dist/cli/index.js +252 -36
  37. package/dist/cli/index.js.map +1 -1
  38. package/dist/context/index.d.ts +14 -11
  39. package/dist/context/index.js +22 -37
  40. package/dist/context/index.js.map +1 -1
  41. package/dist/discover/index.d.ts +17 -7
  42. package/dist/discover/index.js +6 -132
  43. package/dist/discover/index.js.map +1 -1
  44. package/dist/hooks/index.d.ts +6 -3
  45. package/dist/hooks/index.js +6 -6
  46. package/dist/hooks/index.js.map +1 -1
  47. package/dist/index-b4NcDl3m.d.ts +136 -0
  48. package/dist/index.d.ts +297 -18
  49. package/dist/index.js +158 -13
  50. package/dist/index.js.map +1 -1
  51. package/dist/instructions/index.d.ts +7 -4
  52. package/dist/instructions/index.js +8 -32
  53. package/dist/instructions/index.js.map +1 -1
  54. package/dist/protocol/events.d.ts +47 -39
  55. package/dist/protocol/events.js +46 -45
  56. package/dist/protocol/events.js.map +1 -1
  57. package/dist/runner/index.d.ts +4 -18
  58. package/dist/runner/index.js +10 -277
  59. package/dist/runner/index.js.map +1 -1
  60. package/dist/schedules/index.d.ts +6 -3
  61. package/dist/schedules/index.js +6 -6
  62. package/dist/schedules/index.js.map +1 -1
  63. package/dist/skills/index.d.ts +7 -4
  64. package/dist/skills/index.js +8 -27
  65. package/dist/skills/index.js.map +1 -1
  66. package/dist/tools/index.d.ts +13 -3
  67. package/dist/tools/index.js +8 -9
  68. package/dist/tools/index.js.map +1 -1
  69. package/dist/types-BxOQTzx1.d.ts +151 -0
  70. package/docs/getting-started.md +2 -2
  71. package/docs/index.md +3 -2
  72. package/docs/project-layout.md +2 -2
  73. package/docs/subagents.md +95 -0
  74. package/package.json +15 -10
  75. package/templates/default/agent/agent.ts +2 -2
  76. package/templates/default/package.json +3 -3
  77. package/dist/agent/index.d.ts.map +0 -1
  78. package/dist/auth/index.d.ts.map +0 -1
  79. package/dist/channels/index.d.ts.map +0 -1
  80. package/dist/cli/banner.d.ts +0 -2
  81. package/dist/cli/banner.d.ts.map +0 -1
  82. package/dist/cli/banner.js +0 -10
  83. package/dist/cli/banner.js.map +0 -1
  84. package/dist/cli/build.d.ts +0 -5
  85. package/dist/cli/build.d.ts.map +0 -1
  86. package/dist/cli/build.js +0 -54
  87. package/dist/cli/build.js.map +0 -1
  88. package/dist/cli/dev.d.ts +0 -5
  89. package/dist/cli/dev.d.ts.map +0 -1
  90. package/dist/cli/dev.js +0 -74
  91. package/dist/cli/dev.js.map +0 -1
  92. package/dist/cli/index.d.ts.map +0 -1
  93. package/dist/cli/init.d.ts +0 -4
  94. package/dist/cli/init.d.ts.map +0 -1
  95. package/dist/cli/init.js +0 -75
  96. package/dist/cli/init.js.map +0 -1
  97. package/dist/context/index.d.ts.map +0 -1
  98. package/dist/discover/index.d.ts.map +0 -1
  99. package/dist/hooks/index.d.ts.map +0 -1
  100. package/dist/index.d.ts.map +0 -1
  101. package/dist/instructions/index.d.ts.map +0 -1
  102. package/dist/loader.d.ts +0 -7
  103. package/dist/loader.d.ts.map +0 -1
  104. package/dist/loader.js +0 -102
  105. package/dist/loader.js.map +0 -1
  106. package/dist/protocol/events.d.ts.map +0 -1
  107. package/dist/runner/index.d.ts.map +0 -1
  108. package/dist/schedules/index.d.ts.map +0 -1
  109. package/dist/skills/index.d.ts.map +0 -1
  110. package/dist/tools/index.d.ts.map +0 -1
  111. package/dist/types.d.ts +0 -118
  112. package/dist/types.d.ts.map +0 -1
  113. package/dist/types.js +0 -2
  114. package/dist/types.js.map +0 -1
@@ -1,3 +1,6 @@
1
- import type { ScheduleConfig } from "../types.js";
2
- export declare function defineSchedule(config: ScheduleConfig): ScheduleConfig;
3
- //# sourceMappingURL=index.d.ts.map
1
+ import { a as ScheduleConfig } from '../types-BxOQTzx1.js';
2
+ import 'zod';
3
+
4
+ declare function defineSchedule(config: ScheduleConfig): ScheduleConfig;
5
+
6
+ export { defineSchedule };
@@ -1,7 +1,7 @@
1
- export function defineSchedule(config) {
2
- if (!config.name || !config.cron || !config.handler) {
3
- throw new Error("Schedule must have name, cron, and handler");
4
- }
5
- return config;
6
- }
1
+ import {
2
+ defineSchedule
3
+ } from "../chunk-4L7WVCTU.js";
4
+ export {
5
+ defineSchedule
6
+ };
7
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schedules/index.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,cAAc,CAAC,MAAsB;IACnD,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,4 +1,7 @@
1
- import type { SkillConfig } from "../types.js";
2
- export declare function defineSkill(config: SkillConfig): SkillConfig;
3
- export declare function getSkill(agentDir: string, name: string): SkillConfig | null;
4
- //# sourceMappingURL=index.d.ts.map
1
+ import { b as SkillConfig } from '../types-BxOQTzx1.js';
2
+ import 'zod';
3
+
4
+ declare function defineSkill(config: SkillConfig): SkillConfig;
5
+ declare function getSkill(agentDir: string, name: string): SkillConfig | null;
6
+
7
+ export { defineSkill, getSkill };
@@ -1,28 +1,9 @@
1
- import { readFileSync, existsSync } from "node:fs";
2
- import { resolve } from "node:path";
3
- export function defineSkill(config) {
4
- if (!config.name || !config.content) {
5
- throw new Error("Skill must have a name and content");
6
- }
7
- return config;
8
- }
9
- export function getSkill(agentDir, name) {
10
- const mdPath = resolve(agentDir, "knowledge", `${name}.md`);
11
- const tsPath = resolve(agentDir, "knowledge", `${name}.ts`);
12
- if (existsSync(mdPath)) {
13
- return {
14
- name,
15
- description: "",
16
- content: readFileSync(mdPath, "utf-8"),
17
- };
18
- }
19
- if (existsSync(tsPath)) {
20
- return {
21
- name,
22
- description: "",
23
- content: readFileSync(tsPath, "utf-8"),
24
- };
25
- }
26
- return null;
27
- }
1
+ import {
2
+ defineSkill,
3
+ getSkill
4
+ } from "../chunk-LQC65UHE.js";
5
+ export {
6
+ defineSkill,
7
+ getSkill
8
+ };
28
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,UAAU,WAAW,CAAC,MAAmB;IAC7C,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,QAAQ,CACtB,QAAgB,EAChB,IAAY;IAEZ,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;IAE5D,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,IAAI;YACJ,WAAW,EAAE,EAAE;YACf,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC;SACvC,CAAC;IACJ,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,IAAI;YACJ,WAAW,EAAE,EAAE;YACf,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC;SACvC,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,3 +1,13 @@
1
- import type { ToolConfig } from "../types.js";
2
- export declare function defineTool<TInput = unknown, TOutput = unknown>(config: ToolConfig<TInput, TOutput>): ToolConfig<TInput, TOutput>;
3
- //# sourceMappingURL=index.d.ts.map
1
+ import { c as ToolConfig } from '../types-BxOQTzx1.js';
2
+ import 'zod';
3
+
4
+ declare function defineTool<TInput = unknown, TOutput = unknown>(config: ToolConfig<TInput, TOutput>): ToolConfig<TInput, TOutput>;
5
+ interface ModelToolDefinition {
6
+ name: string;
7
+ description: string;
8
+ input_schema?: Record<string, unknown>;
9
+ type: "function";
10
+ }
11
+ declare function toModelOutput(name: string, tool: ToolConfig): ModelToolDefinition;
12
+
13
+ export { type ModelToolDefinition, defineTool, toModelOutput };
@@ -1,10 +1,9 @@
1
- export function defineTool(config) {
2
- if (!config.description) {
3
- throw new Error("Tool must have a description");
4
- }
5
- if (!config.execute) {
6
- throw new Error("Tool must have an execute function");
7
- }
8
- return config;
9
- }
1
+ import {
2
+ defineTool,
3
+ toModelOutput
4
+ } from "../chunk-PHTJLJOV.js";
5
+ export {
6
+ defineTool,
7
+ toModelOutput
8
+ };
10
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,UAAU,CACxB,MAAmC;IAEnC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,151 @@
1
+ import { z } from 'zod';
2
+
3
+ interface CencoriConfig {
4
+ project?: string;
5
+ apiKey?: string;
6
+ billing?: {
7
+ budget?: string;
8
+ endUserMarkup?: number;
9
+ };
10
+ security?: {
11
+ policy?: "strict" | "standard" | "permissive";
12
+ };
13
+ }
14
+ interface AgentConfig {
15
+ model: string;
16
+ name?: string;
17
+ description?: string;
18
+ cencori?: CencoriConfig;
19
+ }
20
+ type ApprovalStrategy = "always" | "never" | "once";
21
+ interface ToolConfig<TInput = unknown, TOutput = unknown> {
22
+ name?: string;
23
+ description: string;
24
+ inputSchema?: z.ZodType<TInput>;
25
+ outputSchema?: z.ZodType<TOutput>;
26
+ sandbox?: boolean;
27
+ needsApproval?: ApprovalStrategy;
28
+ execute: (input: TInput) => TOutput | Promise<TOutput>;
29
+ }
30
+ interface InstructionsConfig {
31
+ content: string;
32
+ filePath?: string;
33
+ }
34
+ interface SkillConfig {
35
+ name: string;
36
+ description: string;
37
+ content: string;
38
+ }
39
+ interface HookConfig {
40
+ name: string;
41
+ event: HookEvent;
42
+ handler: (payload: HookPayload) => void | Promise<void>;
43
+ }
44
+ type HookEvent = "beforeTurn" | "afterTurn" | "beforeToolCall" | "afterToolCall" | "onError" | "onStart" | "onEnd";
45
+ interface HookPayload {
46
+ turn?: TurnContext;
47
+ toolCall?: ToolCallContext;
48
+ error?: Error;
49
+ }
50
+ interface TurnContext {
51
+ id: string;
52
+ sessionId?: string;
53
+ input: string;
54
+ output?: string;
55
+ toolCalls?: ToolCallContext[];
56
+ }
57
+ interface ToolCallContext {
58
+ tool: string;
59
+ input: unknown;
60
+ output?: unknown;
61
+ durationMs?: number;
62
+ error?: Error;
63
+ }
64
+ interface ChannelConfig {
65
+ name: string;
66
+ type: "http" | "slack" | "discord" | "custom";
67
+ handler: (request: ChannelRequest) => ChannelResponse | Promise<ChannelResponse>;
68
+ }
69
+ interface ChannelRequest {
70
+ body: unknown;
71
+ headers: Record<string, string>;
72
+ method: string;
73
+ }
74
+ interface ChannelResponse {
75
+ status: number;
76
+ body: unknown;
77
+ }
78
+ interface ConnectionConfig {
79
+ name: string;
80
+ description: string;
81
+ auth: {
82
+ type: "oauth2" | "apiKey" | "basic";
83
+ authorizeUrl?: string;
84
+ tokenUrl?: string;
85
+ clientId?: string;
86
+ scopes?: string[];
87
+ };
88
+ }
89
+ interface ScheduleConfig {
90
+ name: string;
91
+ cron: string;
92
+ handler: () => void | Promise<void>;
93
+ timezone?: string;
94
+ }
95
+ interface SessionConfig {
96
+ maxTurns?: number;
97
+ idleTimeoutMs?: number;
98
+ requireApproval?: boolean;
99
+ memory?: {
100
+ strategy: "lastN" | "summary" | "keyFacts" | "semantic";
101
+ limit?: number;
102
+ workingMemory?: boolean;
103
+ workingMemoryTemplate?: string;
104
+ };
105
+ }
106
+ interface PolicyConfig {
107
+ inputGuards?: string[];
108
+ outputGuards?: string[];
109
+ allowedModels?: string[];
110
+ blockedTools?: string[];
111
+ budget?: {
112
+ maxSpendPerSession?: string;
113
+ maxSpendPerDay?: string;
114
+ maxSpendPerMonth?: string;
115
+ };
116
+ }
117
+ /**
118
+ * A subagent is a fully self-contained child agent the orchestrator can
119
+ * delegate a focused subtask to. It runs in its own fresh, isolated session —
120
+ * it never inherits the parent's conversation history; the parent passes all
121
+ * needed context in via the delegation `message`.
122
+ */
123
+ interface SubagentManifest {
124
+ /** The child agent's config. `description` is required (validated at load). */
125
+ config: AgentConfig;
126
+ instructions: string;
127
+ tools: Record<string, ToolConfig>;
128
+ skills: Record<string, SkillConfig>;
129
+ }
130
+ interface AgentManifest {
131
+ config: AgentConfig;
132
+ instructions: string;
133
+ tools: Record<string, ToolConfig>;
134
+ skills: Record<string, SkillConfig>;
135
+ hooks: Record<string, HookConfig>;
136
+ channels: Record<string, ChannelConfig>;
137
+ schedules: Record<string, ScheduleConfig>;
138
+ connections: Record<string, ConnectionConfig>;
139
+ /** Declared specialists under `subagents/<id>/`, keyed by directory name. */
140
+ subagents: Record<string, SubagentManifest>;
141
+ session?: SessionConfig;
142
+ policy?: PolicyConfig;
143
+ }
144
+ interface Session {
145
+ id: string;
146
+ created: Date;
147
+ turns: TurnContext[];
148
+ metadata: Record<string, unknown>;
149
+ }
150
+
151
+ export type { AgentConfig as A, ChannelConfig as C, HookConfig as H, InstructionsConfig as I, PolicyConfig as P, Session as S, TurnContext as T, ScheduleConfig as a, SkillConfig as b, ToolConfig as c, ConnectionConfig as d, SessionConfig as e, AgentManifest as f, ApprovalStrategy as g, CencoriConfig as h, ChannelRequest as i, ChannelResponse as j, HookEvent as k, HookPayload as l, SubagentManifest as m, ToolCallContext as n };
@@ -3,7 +3,7 @@
3
3
  ## Install
4
4
 
5
5
  ```bash
6
- npx eline@latest init my-agent
6
+ npx arcie@latest init my-agent
7
7
  cd my-agent
8
8
  npm install
9
9
  ```
@@ -27,7 +27,7 @@ curl -X POST http://localhost:3000 \
27
27
  Create `agent/tools/get_weather.ts`:
28
28
 
29
29
  ```ts
30
- import { defineTool } from "eline/tools";
30
+ import { defineTool } from "arcie/tools";
31
31
  import { z } from "zod";
32
32
 
33
33
  export default defineTool({
package/docs/index.md CHANGED
@@ -1,11 +1,12 @@
1
- # Eline Documentation
1
+ # Arcie Documentation
2
2
 
3
- Eline is a filesystem-first framework for production agents on Cencori.
3
+ Arcie is a filesystem-first framework for production agents on Cencori.
4
4
 
5
5
  ## Getting Started
6
6
 
7
7
  - [Getting Started](getting-started.md)
8
8
  - [Project Layout](project-layout.md)
9
+ - [Subagents](subagents.md)
9
10
 
10
11
  ## Authoring
11
12
 
@@ -21,7 +21,7 @@ my-agent/
21
21
  Required config. Defines the model and Cencori integration:
22
22
 
23
23
  ```ts
24
- import { defineAgent } from "eline";
24
+ import { defineAgent } from "arcie";
25
25
 
26
26
  export default defineAgent({
27
27
  model: "claude-sonnet-4-5",
@@ -41,7 +41,7 @@ Required. The system prompt that defines the agent's personality and behavior.
41
41
  Optional. TypeScript files exporting a `defineTool` config:
42
42
 
43
43
  ```ts
44
- import { defineTool } from "eline/tools";
44
+ import { defineTool } from "arcie/tools";
45
45
  import { z } from "zod";
46
46
 
47
47
  export default defineTool({
@@ -0,0 +1,95 @@
1
+ # Subagents
2
+
3
+ A subagent is a child agent that the orchestrator delegates a focused subtask to.
4
+ Each one runs in its own **fresh, isolated session** — it never sees the parent's
5
+ conversation history. The parent passes everything the child needs through a single
6
+ `message` and gets a result back. This keeps the orchestrator's context small and
7
+ each specialist sharply scoped.
8
+
9
+ ## Two kinds
10
+
11
+ - **Declared subagents** — specialists you define under `agent/subagents/<id>/`.
12
+ Use one when the child needs a different prompt, a narrower tool surface, or its
13
+ own runtime context.
14
+ - **The built-in `agent` tool** — every agent can spawn a copy of itself for a
15
+ focused subtask. The copy inherits the parent's instructions, tools, and skills,
16
+ but starts with fresh state.
17
+
18
+ If the agent can keep its own identity and just needs an optional procedure, reach
19
+ for a skill instead of a subagent.
20
+
21
+ ## Defining a subagent
22
+
23
+ A subagent is a directory that looks like a small agent:
24
+
25
+ ```
26
+ agent/subagents/researcher/
27
+ ├── agent.ts # required — defineAgent({ model, description })
28
+ ├── instructions.md # optional — the subagent's system prompt
29
+ ├── tools/ # optional — the subagent's own tools
30
+ └── skills/ # optional — the subagent's own knowledge
31
+ ```
32
+
33
+ ```ts
34
+ // agent/subagents/researcher/agent.ts
35
+ import { defineAgent } from "arcie";
36
+
37
+ export default defineAgent({
38
+ model: "claude-sonnet-4-5",
39
+ description: "Investigate ambiguous questions before the parent agent responds.",
40
+ });
41
+ ```
42
+
43
+ The directory name (`researcher`) becomes the tool name the orchestrator calls.
44
+
45
+ ### `description` is required
46
+
47
+ Unlike the root agent, a subagent **must** declare a `description` — it's how the
48
+ orchestrator decides when to delegate. Leaving it out is a hard error at load time:
49
+
50
+ ```
51
+ Subagent "researcher" must declare a description in agent.ts
52
+ ```
53
+
54
+ A subagent directory with no `agent.ts` is reported by `arcie dev` / `arcie build` as
55
+ `SUBAGENT_MISSING_CONFIG`.
56
+
57
+ ## Isolation
58
+
59
+ Declared subagents are isolated. They **inherit nothing** from the parent — absent
60
+ slots fall back to the framework default, not to the root agent's version. If two
61
+ subagents need the same procedure, copy it under each one's `skills/`.
62
+
63
+ This isolation is deliberate: each delegation spins up its own session, so the
64
+ subagent's work never pollutes the parent's context, and the parent only ever sees
65
+ the subagent's final result.
66
+
67
+ ## How delegation works
68
+
69
+ The orchestrator perceives subagents as tools. Both declared subagents and the
70
+ built-in `agent` tool expose the same interface:
71
+
72
+ ```ts
73
+ {
74
+ message: string; // all the context the child needs (it sees nothing else)
75
+ outputSchema?: object; // when set, the child returns structured output
76
+ }
77
+ ```
78
+
79
+ When `outputSchema` is provided, the subagent runs in **task mode** and returns
80
+ structured output as the tool result — which is what makes fan-out / map-reduce
81
+ orchestration possible.
82
+
83
+ Each delegation emits two control-plane events in the parent's stream:
84
+
85
+ - `subagent.called` — `{ name, callId, childSessionId, turnId }`
86
+ - `subagent.completed` — `{ name, callId, output }`
87
+
88
+ ## Status
89
+
90
+ Authoring and loading work today: subagents are discovered, validated (including the
91
+ `description` requirement), and loaded into the agent manifest with their own
92
+ instructions and tools — `arcie build` lists them under `subagents` in the manifest.
93
+ The runtime orchestration loop — the model invoking a subagent, spawning the isolated
94
+ child session, and feeding the result back into the parent turn — is being wired
95
+ through the Cencori Sessions API.
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "arcie",
3
3
  "type": "module",
4
- "version": "0.1.3",
4
+ "version": "0.1.4",
5
5
  "description": "The electronic line — build agents at the speed of light.",
6
6
  "bin": {
7
- "eline": "dist/cli/index.js"
7
+ "arcie": "dist/cli/index.js"
8
8
  },
9
9
  "files": [
10
10
  "dist",
@@ -22,6 +22,7 @@
22
22
  "./channels": "./dist/channels/index.js",
23
23
  "./schedules": "./dist/schedules/index.js",
24
24
  "./context": "./dist/context/index.js",
25
+ "./memory": "./dist/memory/index.js",
25
26
  "./agent": "./dist/agent/index.js",
26
27
  "./runner": "./dist/runner/index.js",
27
28
  "./auth": "./dist/auth/index.js",
@@ -32,19 +33,21 @@
32
33
  "*": {
33
34
  "*": [
34
35
  "./dist/*/index.d.ts",
36
+ "./dist/*.d.ts",
35
37
  "./dist/index.d.ts"
36
38
  ]
37
39
  }
38
40
  },
39
41
  "scripts": {
40
- "build": "tsc -p tsconfig.build.json",
41
- "dev": "tsc --watch",
42
+ "build": "tsup",
43
+ "dev": "tsup --watch",
44
+ "typecheck": "tsc -p tsconfig.build.json --noEmit",
42
45
  "prepublishOnly": "npm run build",
43
46
  "test": "vitest run",
44
47
  "test:watch": "vitest"
45
48
  },
46
49
  "keywords": [
47
- "eline",
50
+ "arcie",
48
51
  "ai",
49
52
  "agent",
50
53
  "framework",
@@ -55,10 +58,11 @@
55
58
  "license": "MIT",
56
59
  "repository": {
57
60
  "type": "git",
58
- "url": "git+https://github.com/cencori/eline.git"
61
+ "url": "git+https://github.com/cencori/arcie.git"
59
62
  },
60
- "homepage": "https://cencori.com/eline",
63
+ "homepage": "https://cencori.com/arcie",
61
64
  "dependencies": {
65
+ "@libsql/client": "^0.17.4",
62
66
  "chalk": "^5.3.0",
63
67
  "commander": "^12.0.0",
64
68
  "ora": "^8.0.1",
@@ -66,8 +70,9 @@
66
70
  "zod-to-json-schema": "^3.25.2"
67
71
  },
68
72
  "devDependencies": {
69
- "@types/node": "^20.0.0",
70
- "typescript": "^5.3.0",
71
- "vitest": "^2.0.0"
73
+ "@types/node": "^26.0.0",
74
+ "tsup": "^8.5.1",
75
+ "typescript": "^6.0.3",
76
+ "vitest": "^4.1.9"
72
77
  }
73
78
  }
@@ -1,9 +1,9 @@
1
- import { defineAgent } from "eline";
1
+ import { defineAgent } from "arcie";
2
2
 
3
3
  export default defineAgent({
4
4
  model: "claude-sonnet-4-5",
5
5
  name: "my-agent",
6
- description: "An Eline agent powered by Cencori.",
6
+ description: "An Arcie agent powered by Cencori.",
7
7
  cencori: {
8
8
  project: process.env.CENCORI_PROJECT_ID,
9
9
  billing: {
@@ -4,11 +4,11 @@
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
7
- "dev": "eline dev",
8
- "build": "eline build"
7
+ "dev": "arcie dev",
8
+ "build": "arcie build"
9
9
  },
10
10
  "dependencies": {
11
- "eline": "^0.1.2",
11
+ "arcie": "^0.1.2",
12
12
  "zod": "^3.23.0"
13
13
  },
14
14
  "devDependencies": {
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
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"}
@@ -1,2 +0,0 @@
1
- export declare function showBanner(): void;
2
- //# sourceMappingURL=banner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/cli/banner.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,IAAI,IAAI,CAQjC"}
@@ -1,10 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,5 +0,0 @@
1
- export declare function buildCommand(options: {
2
- agentDir: string;
3
- outDir: string;
4
- }): Promise<void>;
5
- //# sourceMappingURL=build.d.ts.map
@@ -1 +0,0 @@
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"}
package/dist/cli/build.js DELETED
@@ -1,54 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"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"}
package/dist/cli/dev.d.ts DELETED
@@ -1,5 +0,0 @@
1
- export declare function devCommand(options: {
2
- port: string;
3
- agentDir: string;
4
- }): Promise<void>;
5
- //# sourceMappingURL=dev.d.ts.map
@@ -1 +0,0 @@
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"}