@agent-native/core 0.59.0 → 0.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/dist/a2a/index.d.ts +2 -0
  2. package/dist/a2a/index.d.ts.map +1 -1
  3. package/dist/a2a/index.js +1 -0
  4. package/dist/a2a/index.js.map +1 -1
  5. package/dist/a2a/invoke.d.ts +63 -0
  6. package/dist/a2a/invoke.d.ts.map +1 -0
  7. package/dist/a2a/invoke.js +157 -0
  8. package/dist/a2a/invoke.js.map +1 -0
  9. package/dist/agent/run-store.d.ts +15 -0
  10. package/dist/agent/run-store.d.ts.map +1 -1
  11. package/dist/agent/run-store.js +28 -0
  12. package/dist/agent/run-store.js.map +1 -1
  13. package/dist/chat-threads/store.d.ts +21 -0
  14. package/dist/chat-threads/store.d.ts.map +1 -1
  15. package/dist/chat-threads/store.js +128 -0
  16. package/dist/chat-threads/store.js.map +1 -1
  17. package/dist/cli/agent.d.ts +23 -0
  18. package/dist/cli/agent.d.ts.map +1 -0
  19. package/dist/cli/agent.js +300 -0
  20. package/dist/cli/agent.js.map +1 -0
  21. package/dist/cli/agents.d.ts +14 -0
  22. package/dist/cli/agents.d.ts.map +1 -0
  23. package/dist/cli/agents.js +95 -0
  24. package/dist/cli/agents.js.map +1 -0
  25. package/dist/cli/code-agent-executor.d.ts.map +1 -1
  26. package/dist/cli/code-agent-executor.js +264 -2
  27. package/dist/cli/code-agent-executor.js.map +1 -1
  28. package/dist/cli/create.d.ts +3 -2
  29. package/dist/cli/create.d.ts.map +1 -1
  30. package/dist/cli/create.js +154 -83
  31. package/dist/cli/create.js.map +1 -1
  32. package/dist/cli/index.js +50 -2
  33. package/dist/cli/index.js.map +1 -1
  34. package/dist/cli/invoke.d.ts +26 -0
  35. package/dist/cli/invoke.d.ts.map +1 -0
  36. package/dist/cli/invoke.js +227 -0
  37. package/dist/cli/invoke.js.map +1 -0
  38. package/dist/cli/templates-meta.d.ts +1 -1
  39. package/dist/cli/templates-meta.d.ts.map +1 -1
  40. package/dist/cli/templates-meta.js +9 -8
  41. package/dist/cli/templates-meta.js.map +1 -1
  42. package/dist/cli/workspacify.d.ts +1 -1
  43. package/dist/cli/workspacify.d.ts.map +1 -1
  44. package/dist/cli/workspacify.js +6 -6
  45. package/dist/cli/workspacify.js.map +1 -1
  46. package/dist/client/AgentPanel.js +1 -1
  47. package/dist/client/AgentPanel.js.map +1 -1
  48. package/dist/client/AssistantChat.d.ts.map +1 -1
  49. package/dist/client/AssistantChat.js +8 -2
  50. package/dist/client/AssistantChat.js.map +1 -1
  51. package/dist/client/NewWorkspaceAppFlow.d.ts.map +1 -1
  52. package/dist/client/NewWorkspaceAppFlow.js +5 -4
  53. package/dist/client/NewWorkspaceAppFlow.js.map +1 -1
  54. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  55. package/dist/client/agent-chat-adapter.js +65 -12
  56. package/dist/client/agent-chat-adapter.js.map +1 -1
  57. package/dist/client/blocks/library/diagram.d.ts.map +1 -1
  58. package/dist/client/blocks/library/diagram.js +23 -17
  59. package/dist/client/blocks/library/diagram.js.map +1 -1
  60. package/dist/client/blocks/types.d.ts +2 -0
  61. package/dist/client/blocks/types.d.ts.map +1 -1
  62. package/dist/client/blocks/types.js.map +1 -1
  63. package/dist/client/chat/index.d.ts +1 -1
  64. package/dist/client/chat/index.d.ts.map +1 -1
  65. package/dist/client/chat/index.js.map +1 -1
  66. package/dist/client/extensions/ExtensionViewer.js +1 -1
  67. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  68. package/dist/client/index.d.ts +1 -1
  69. package/dist/client/index.d.ts.map +1 -1
  70. package/dist/client/index.js.map +1 -1
  71. package/dist/client/notifications/NotificationsBell.d.ts +3 -1
  72. package/dist/client/notifications/NotificationsBell.d.ts.map +1 -1
  73. package/dist/client/notifications/NotificationsBell.js +7 -3
  74. package/dist/client/notifications/NotificationsBell.js.map +1 -1
  75. package/dist/client/use-chat-threads.d.ts +13 -0
  76. package/dist/client/use-chat-threads.d.ts.map +1 -1
  77. package/dist/client/use-chat-threads.js +41 -0
  78. package/dist/client/use-chat-threads.js.map +1 -1
  79. package/dist/integrations/plugin.d.ts.map +1 -1
  80. package/dist/integrations/plugin.js +2 -2
  81. package/dist/integrations/plugin.js.map +1 -1
  82. package/dist/onboarding/default-steps.d.ts.map +1 -1
  83. package/dist/onboarding/default-steps.js +102 -0
  84. package/dist/onboarding/default-steps.js.map +1 -1
  85. package/dist/org/auto-join-domain.d.ts +11 -3
  86. package/dist/org/auto-join-domain.d.ts.map +1 -1
  87. package/dist/org/auto-join-domain.js +7 -6
  88. package/dist/org/auto-join-domain.js.map +1 -1
  89. package/dist/org/context.d.ts.map +1 -1
  90. package/dist/org/context.js +68 -32
  91. package/dist/org/context.js.map +1 -1
  92. package/dist/org/migrations.d.ts.map +1 -1
  93. package/dist/org/migrations.js +6 -0
  94. package/dist/org/migrations.js.map +1 -1
  95. package/dist/provider-api/actions/github-repo-files.d.ts +84 -0
  96. package/dist/provider-api/actions/github-repo-files.d.ts.map +1 -0
  97. package/dist/provider-api/actions/github-repo-files.js +213 -0
  98. package/dist/provider-api/actions/github-repo-files.js.map +1 -0
  99. package/dist/provider-api/github-repo.d.ts +11 -0
  100. package/dist/provider-api/github-repo.d.ts.map +1 -0
  101. package/dist/provider-api/github-repo.js +553 -0
  102. package/dist/provider-api/github-repo.js.map +1 -0
  103. package/dist/provider-api/index.d.ts +184 -11
  104. package/dist/provider-api/index.d.ts.map +1 -1
  105. package/dist/provider-api/index.js +519 -0
  106. package/dist/provider-api/index.js.map +1 -1
  107. package/dist/scripts/docs/search.d.ts.map +1 -1
  108. package/dist/scripts/docs/search.js +38 -13
  109. package/dist/scripts/docs/search.js.map +1 -1
  110. package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
  111. package/dist/secrets/register-framework-secrets.js +11 -0
  112. package/dist/secrets/register-framework-secrets.js.map +1 -1
  113. package/dist/server/agent-chat-plugin.d.ts +32 -0
  114. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  115. package/dist/server/agent-chat-plugin.js +297 -2
  116. package/dist/server/agent-chat-plugin.js.map +1 -1
  117. package/dist/server/auth-marketing.d.ts.map +1 -1
  118. package/dist/server/auth-marketing.js +17 -7
  119. package/dist/server/auth-marketing.js.map +1 -1
  120. package/dist/server/auth.d.ts.map +1 -1
  121. package/dist/server/auth.js +6 -0
  122. package/dist/server/auth.js.map +1 -1
  123. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  124. package/dist/server/core-routes-plugin.js +18 -98
  125. package/dist/server/core-routes-plugin.js.map +1 -1
  126. package/dist/styles/blocks.css +30 -8
  127. package/dist/styles/rich-markdown-editor.css +10 -4
  128. package/dist/templates/{starter-shell-sync.spec.ts → chat-shell-sync.spec.ts} +21 -21
  129. package/dist/templates/default/.agents/skills/actions/SKILL.md +5 -5
  130. package/dist/templates/default/.agents/skills/agent-native-docs/SKILL.md +63 -0
  131. package/dist/templates/default/AGENTS.md +22 -1
  132. package/dist/templates/default/actions/hello.ts +1 -1
  133. package/dist/templates/default/actions/navigate.ts +1 -1
  134. package/dist/templates/default/actions/view-screen.ts +1 -1
  135. package/dist/templates/headless/.agents/skills/agent-native-docs/SKILL.md +63 -0
  136. package/dist/templates/headless/.env.example +4 -0
  137. package/dist/templates/headless/.prettierrc +5 -0
  138. package/dist/templates/headless/AGENTS.md +58 -0
  139. package/dist/templates/headless/DEVELOPING.md +22 -0
  140. package/dist/templates/headless/_gitignore +36 -0
  141. package/dist/templates/headless/actions/hello.ts +14 -0
  142. package/dist/templates/headless/actions/run.ts +3 -0
  143. package/dist/templates/headless/package.json +22 -0
  144. package/dist/templates/headless/tsconfig.json +7 -0
  145. package/dist/templates/ui-primitives-sync.spec.ts +2 -2
  146. package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -5
  147. package/dist/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +63 -0
  148. package/dist/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +9 -0
  149. package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +93 -0
  150. package/dist/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +11 -1
  151. package/dist/templates/workspace-core/.agents/skills/secrets/SKILL.md +1 -1
  152. package/dist/templates/workspace-core/AGENTS.md +20 -3
  153. package/dist/templates/workspace-core/src/server/index.ts +1 -1
  154. package/dist/templates/workspace-root/AGENTS.md +25 -5
  155. package/dist/templates/workspace-root/README.md +7 -7
  156. package/dist/triggers/dispatcher.d.ts +2 -3
  157. package/dist/triggers/dispatcher.d.ts.map +1 -1
  158. package/dist/triggers/dispatcher.js +2 -3
  159. package/dist/triggers/dispatcher.js.map +1 -1
  160. package/dist/triggers/routes.d.ts +38 -0
  161. package/dist/triggers/routes.d.ts.map +1 -0
  162. package/dist/triggers/routes.js +202 -0
  163. package/dist/triggers/routes.js.map +1 -0
  164. package/dist/vite/client.d.ts +2 -1
  165. package/dist/vite/client.d.ts.map +1 -1
  166. package/dist/vite/client.js +121 -2
  167. package/dist/vite/client.js.map +1 -1
  168. package/docs/AGENTS.md +57 -0
  169. package/docs/SKILL.md +40 -0
  170. package/docs/content/a2a-protocol.md +1 -1
  171. package/docs/content/actions.md +48 -8
  172. package/docs/content/agent-surfaces.md +76 -14
  173. package/docs/content/cli-adapters.md +1 -1
  174. package/docs/content/cloneable-saas.md +5 -4
  175. package/docs/content/code-agents-ui.md +1 -1
  176. package/docs/content/components.md +1 -1
  177. package/docs/content/context-awareness.md +15 -3
  178. package/docs/content/creating-templates.md +15 -7
  179. package/docs/content/drop-in-agent.md +1 -1
  180. package/docs/content/faq.md +6 -4
  181. package/docs/content/getting-started.md +63 -73
  182. package/docs/content/key-concepts.md +24 -24
  183. package/docs/content/native-chat-ui.md +4 -4
  184. package/docs/content/pure-agent-apps.md +34 -10
  185. package/docs/content/security.md +1 -1
  186. package/docs/content/server.md +1 -1
  187. package/docs/content/template-chat.md +85 -0
  188. package/docs/content/template-dispatch.md +1 -1
  189. package/docs/content/tracking.md +1 -1
  190. package/docs/content/what-is-agent-native.md +7 -6
  191. package/package.json +10 -1
  192. package/src/templates/{starter-shell-sync.spec.ts → chat-shell-sync.spec.ts} +21 -21
  193. package/src/templates/default/.agents/skills/actions/SKILL.md +5 -5
  194. package/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +63 -0
  195. package/src/templates/default/AGENTS.md +22 -1
  196. package/src/templates/default/actions/hello.ts +1 -1
  197. package/src/templates/default/actions/navigate.ts +1 -1
  198. package/src/templates/default/actions/view-screen.ts +1 -1
  199. package/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +63 -0
  200. package/src/templates/headless/.env.example +4 -0
  201. package/src/templates/headless/.prettierrc +5 -0
  202. package/src/templates/headless/AGENTS.md +58 -0
  203. package/src/templates/headless/DEVELOPING.md +22 -0
  204. package/src/templates/headless/_gitignore +36 -0
  205. package/src/templates/headless/actions/hello.ts +14 -0
  206. package/src/templates/headless/actions/run.ts +3 -0
  207. package/src/templates/headless/package.json +22 -0
  208. package/src/templates/headless/tsconfig.json +7 -0
  209. package/src/templates/ui-primitives-sync.spec.ts +2 -2
  210. package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -5
  211. package/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +63 -0
  212. package/src/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +9 -0
  213. package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +93 -0
  214. package/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +11 -1
  215. package/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +1 -1
  216. package/src/templates/workspace-core/AGENTS.md +20 -3
  217. package/src/templates/workspace-core/src/server/index.ts +1 -1
  218. package/src/templates/workspace-root/AGENTS.md +25 -5
  219. package/src/templates/workspace-root/README.md +7 -7
  220. package/docs/content/template-starter.md +0 -78
@@ -0,0 +1,300 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { autoDiscoverActions } from "../server/action-discovery.js";
4
+ import { createGitHubRepoToolEntries } from "../provider-api/github-repo.js";
5
+ import { getRequestOrgId, getRequestUserEmail, runWithRequestContext, } from "../server/request-context.js";
6
+ import { resolveDevUserEmail } from "../scripts/dev-session.js";
7
+ import { loadEnv } from "../scripts/utils.js";
8
+ import { actionsToEngineTools, } from "../agent/production-agent.js";
9
+ import { runAgentLoopDirectWithSoftTimeout } from "../agent/run-loop-with-resume.js";
10
+ import { registerBuiltinEngines, resolveEngine, } from "../agent/engine/index.js";
11
+ import { DEFAULT_MODEL } from "../agent/default-model.js";
12
+ import { captureCliOutput } from "../server/cli-capture.js";
13
+ const VALUE_FLAGS = new Set([
14
+ "message",
15
+ "prompt",
16
+ "engine",
17
+ "model",
18
+ "user",
19
+ "user-email",
20
+ "org",
21
+ "org-id",
22
+ "soft-timeout-ms",
23
+ "max-iterations",
24
+ ]);
25
+ export function parseAgentArgs(args) {
26
+ const parsed = {
27
+ json: false,
28
+ help: false,
29
+ errors: [],
30
+ };
31
+ const positional = [];
32
+ for (let i = 0; i < args.length; i += 1) {
33
+ const arg = args[i];
34
+ if (arg === "--") {
35
+ positional.push(...args.slice(i + 1));
36
+ break;
37
+ }
38
+ if (!arg.startsWith("--")) {
39
+ positional.push(arg);
40
+ continue;
41
+ }
42
+ const eqIndex = arg.indexOf("=");
43
+ const rawName = eqIndex === -1 ? arg.slice("--".length) : arg.slice("--".length, eqIndex);
44
+ const inlineValue = eqIndex === -1 ? undefined : arg.slice(eqIndex + 1);
45
+ const name = rawName.trim();
46
+ if (name === "help" || name === "h") {
47
+ parsed.help = true;
48
+ continue;
49
+ }
50
+ if (name === "json") {
51
+ parsed.json = true;
52
+ continue;
53
+ }
54
+ if (name === "no-soft-timeout") {
55
+ parsed.softTimeoutMs = 0;
56
+ continue;
57
+ }
58
+ if (!VALUE_FLAGS.has(name)) {
59
+ parsed.errors.push(`Unknown option: --${name}`);
60
+ continue;
61
+ }
62
+ const value = inlineValue ??
63
+ (args[i + 1] !== undefined && !args[i + 1].startsWith("--")
64
+ ? args[++i]
65
+ : undefined);
66
+ if (value === undefined) {
67
+ parsed.errors.push(`Missing value for --${name}`);
68
+ continue;
69
+ }
70
+ switch (name) {
71
+ case "message":
72
+ case "prompt":
73
+ parsed.prompt = value;
74
+ break;
75
+ case "engine":
76
+ parsed.engine = value;
77
+ break;
78
+ case "model":
79
+ parsed.model = value;
80
+ break;
81
+ case "user":
82
+ case "user-email":
83
+ parsed.userEmail = value;
84
+ break;
85
+ case "org":
86
+ case "org-id":
87
+ parsed.orgId = value;
88
+ break;
89
+ case "soft-timeout-ms":
90
+ parsed.softTimeoutMs = parsePositiveInteger("--soft-timeout-ms", value, parsed);
91
+ break;
92
+ case "max-iterations":
93
+ parsed.maxIterations = parsePositiveInteger("--max-iterations", value, parsed);
94
+ break;
95
+ }
96
+ }
97
+ if (!parsed.prompt && positional.length > 0) {
98
+ parsed.prompt = positional.join(" ");
99
+ }
100
+ return parsed;
101
+ }
102
+ export async function runAgent(args, io = {}) {
103
+ loadEnv();
104
+ registerBuiltinEngines();
105
+ const stdout = io.stdout ?? console.log;
106
+ const stderr = io.stderr ?? console.error;
107
+ const env = io.env ?? process.env;
108
+ const parsed = parseAgentArgs(args);
109
+ if (parsed.help) {
110
+ stdout(formatAgentUsage());
111
+ return 0;
112
+ }
113
+ if (!parsed.prompt?.trim()) {
114
+ parsed.errors.push('Missing "prompt"');
115
+ }
116
+ if (parsed.errors.length > 0) {
117
+ stderr(parsed.errors.join("\n"));
118
+ stderr("");
119
+ stderr(formatAgentUsage());
120
+ return 1;
121
+ }
122
+ const ownerEmail = parsed.userEmail ?? env.AGENT_USER_EMAIL ?? (await resolveDevUserEmail());
123
+ const orgId = parsed.orgId ?? env.AGENT_ORG_ID ?? undefined;
124
+ try {
125
+ const result = await runWithRequestContext({ userEmail: ownerEmail, orgId }, () => runLocalAgentLoop(parsed));
126
+ if (parsed.json) {
127
+ stdout(JSON.stringify(result, null, 2));
128
+ }
129
+ else {
130
+ stdout(result.responseText.trimEnd());
131
+ if (result.responseText && !result.responseText.endsWith("\n")) {
132
+ stdout("");
133
+ }
134
+ }
135
+ return 0;
136
+ }
137
+ catch (err) {
138
+ stderr(err instanceof Error ? err.message : String(err));
139
+ return 1;
140
+ }
141
+ }
142
+ async function runLocalAgentLoop(parsed) {
143
+ const localActions = await autoDiscoverActions("auto");
144
+ const builtinActions = await createHeadlessBuiltinActions();
145
+ const repoActions = createGitHubRepoToolEntries({
146
+ appId: process.env.AGENT_NATIVE_APP_ID ?? process.env.APP_ID ?? "app",
147
+ });
148
+ const actions = { ...builtinActions, ...localActions, ...repoActions };
149
+ const tools = actionsToEngineTools(actions);
150
+ if (tools.length === 0) {
151
+ throw new Error("No agent-callable actions were found. Add actions/*.ts with defineAction() first.");
152
+ }
153
+ const engine = await resolveEngine({
154
+ engineOption: parsed.engine,
155
+ model: parsed.model,
156
+ });
157
+ const model = parsed.model ?? engine.defaultModel ?? DEFAULT_MODEL;
158
+ const messages = [
159
+ {
160
+ role: "user",
161
+ content: [{ type: "text", text: parsed.prompt.trim() }],
162
+ },
163
+ ];
164
+ const events = [];
165
+ let responseText = "";
166
+ const controller = new AbortController();
167
+ const ownerEmail = getRequestUserEmail();
168
+ const orgId = getRequestOrgId();
169
+ const usage = await runAgentLoopDirectWithSoftTimeout({
170
+ engine,
171
+ model,
172
+ systemPrompt: buildHeadlessSystemPrompt(tools.map((tool) => tool.name)),
173
+ tools,
174
+ actions,
175
+ messages,
176
+ signal: controller.signal,
177
+ ownerEmail,
178
+ orgId,
179
+ maxIterations: parsed.maxIterations,
180
+ send(event) {
181
+ events.push(event);
182
+ if (event.type === "text") {
183
+ responseText += event.text ?? "";
184
+ }
185
+ },
186
+ }, parsed.softTimeoutMs);
187
+ return {
188
+ responseText,
189
+ usage,
190
+ events,
191
+ tools: tools.map((tool) => tool.name).sort(),
192
+ };
193
+ }
194
+ function buildHeadlessSystemPrompt(actionNames) {
195
+ const instructions = readLocalInstructions();
196
+ const actionList = actionNames.length > 0
197
+ ? `Available local actions: ${actionNames.join(", ")}.`
198
+ : "No local actions were discovered.";
199
+ return [
200
+ "You are the app agent for this Agent-Native project.",
201
+ "Use the registered app actions as your source of truth for doing work.",
202
+ "Use docs-search before implementing or answering advanced Agent Native framework questions; it reads the version-matched docs bundled with @agent-native/core.",
203
+ "Use connected GitHub repository tools for repo context when a repository is configured; do not assume a local clone or sandbox exists.",
204
+ "You are running headlessly from the command line, so reply with the final useful result in plain text.",
205
+ actionList,
206
+ instructions ? `Project instructions:\n${instructions}` : "",
207
+ ]
208
+ .filter(Boolean)
209
+ .join("\n\n");
210
+ }
211
+ function cliArgsFromToolArgs(args) {
212
+ const cliArgs = [];
213
+ for (const [key, value] of Object.entries(args)) {
214
+ if (value === undefined)
215
+ continue;
216
+ const normalized = value != null && typeof value === "object"
217
+ ? JSON.stringify(value)
218
+ : String(value);
219
+ cliArgs.push(`--${key}`, normalized);
220
+ }
221
+ return cliArgs;
222
+ }
223
+ export async function createHeadlessBuiltinActions() {
224
+ const docsSearch = await import("../scripts/docs/search.js");
225
+ return {
226
+ "docs-search": {
227
+ readOnly: true,
228
+ tool: {
229
+ description: "Search and read version-matched Agent Native framework documentation bundled in @agent-native/core, plus bundled AGENTS.md and codebase skills. Use --list to see pages, --query to search, and --slug to read a page.",
230
+ parameters: {
231
+ type: "object",
232
+ properties: {
233
+ query: {
234
+ type: "string",
235
+ description: "Search term to find relevant docs, for example actions, automations, a2a, database, sharing, or pure-agent apps.",
236
+ },
237
+ slug: {
238
+ type: "string",
239
+ description: "Read a specific doc page by slug, for example actions, agent-native-docs, automations, a2a-protocol, or external-agents.",
240
+ },
241
+ list: {
242
+ type: "string",
243
+ description: 'Set to "true" to list all available doc pages.',
244
+ enum: ["true"],
245
+ },
246
+ },
247
+ },
248
+ },
249
+ run: async (args) => {
250
+ return captureCliOutput(() => docsSearch.default(cliArgsFromToolArgs(args)));
251
+ },
252
+ },
253
+ };
254
+ }
255
+ function readLocalInstructions() {
256
+ const candidates = ["AGENTS.md", "CLAUDE.md", "README.md"];
257
+ const chunks = [];
258
+ for (const name of candidates) {
259
+ const file = path.resolve(process.cwd(), name);
260
+ try {
261
+ if (!fs.existsSync(file))
262
+ continue;
263
+ const content = fs.readFileSync(file, "utf8").trim();
264
+ if (!content)
265
+ continue;
266
+ chunks.push(`# ${name}\n${content.slice(0, 12_000)}`);
267
+ }
268
+ catch {
269
+ // Ignore unreadable local instruction files.
270
+ }
271
+ }
272
+ return chunks.join("\n\n");
273
+ }
274
+ function parsePositiveInteger(flag, value, parsed) {
275
+ const n = Number(value);
276
+ if (!Number.isInteger(n) || n <= 0) {
277
+ parsed.errors.push(`${flag} must be a positive integer`);
278
+ return undefined;
279
+ }
280
+ return n;
281
+ }
282
+ export function formatAgentUsage() {
283
+ return [
284
+ 'Usage: agent-native agent "prompt" [options]',
285
+ "",
286
+ "Runs the production app-agent loop once against this folder's actions/ directory.",
287
+ "",
288
+ "Options:",
289
+ " --message <text> Prompt (alias for positional prompt)",
290
+ " --engine <name> Agent engine name (defaults to env/settings)",
291
+ " --model <name> Model override",
292
+ " --user-email <email> Owner identity for scoped actions",
293
+ " --org-id <id> Organization id for scoped credentials",
294
+ " --soft-timeout-ms <n> Soft timeout before continuation recovery",
295
+ " --no-soft-timeout Disable continuation soft timeout wrapper",
296
+ " --max-iterations <n> Maximum tool/LLM loop iterations",
297
+ " --json Print response, events, usage, and tools",
298
+ ].join("\n");
299
+ }
300
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/cli/agent.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { autoDiscoverActions } from \"../server/action-discovery.js\";\nimport { createGitHubRepoToolEntries } from \"../provider-api/github-repo.js\";\nimport {\n getRequestOrgId,\n getRequestUserEmail,\n runWithRequestContext,\n} from \"../server/request-context.js\";\nimport { resolveDevUserEmail } from \"../scripts/dev-session.js\";\nimport { loadEnv } from \"../scripts/utils.js\";\nimport {\n actionsToEngineTools,\n type AgentLoopUsage,\n type ActionEntry,\n} from \"../agent/production-agent.js\";\nimport { runAgentLoopDirectWithSoftTimeout } from \"../agent/run-loop-with-resume.js\";\nimport {\n registerBuiltinEngines,\n resolveEngine,\n} from \"../agent/engine/index.js\";\nimport { DEFAULT_MODEL } from \"../agent/default-model.js\";\nimport type { AgentChatEvent } from \"../agent/types.js\";\nimport type { EngineMessage } from \"../agent/engine/types.js\";\nimport { captureCliOutput } from \"../server/cli-capture.js\";\n\nexport interface ParsedAgentArgs {\n prompt?: string;\n engine?: string;\n model?: string;\n userEmail?: string;\n orgId?: string;\n softTimeoutMs?: number;\n maxIterations?: number;\n json: boolean;\n help: boolean;\n errors: string[];\n}\n\nexport interface AgentCliIo {\n stdout?: (text: string) => void;\n stderr?: (text: string) => void;\n env?: NodeJS.ProcessEnv;\n}\n\nconst VALUE_FLAGS = new Set([\n \"message\",\n \"prompt\",\n \"engine\",\n \"model\",\n \"user\",\n \"user-email\",\n \"org\",\n \"org-id\",\n \"soft-timeout-ms\",\n \"max-iterations\",\n]);\n\nexport function parseAgentArgs(args: string[]): ParsedAgentArgs {\n const parsed: ParsedAgentArgs = {\n json: false,\n help: false,\n errors: [],\n };\n const positional: string[] = [];\n\n for (let i = 0; i < args.length; i += 1) {\n const arg = args[i];\n if (arg === \"--\") {\n positional.push(...args.slice(i + 1));\n break;\n }\n if (!arg.startsWith(\"--\")) {\n positional.push(arg);\n continue;\n }\n\n const eqIndex = arg.indexOf(\"=\");\n const rawName =\n eqIndex === -1 ? arg.slice(\"--\".length) : arg.slice(\"--\".length, eqIndex);\n const inlineValue = eqIndex === -1 ? undefined : arg.slice(eqIndex + 1);\n const name = rawName.trim();\n\n if (name === \"help\" || name === \"h\") {\n parsed.help = true;\n continue;\n }\n if (name === \"json\") {\n parsed.json = true;\n continue;\n }\n if (name === \"no-soft-timeout\") {\n parsed.softTimeoutMs = 0;\n continue;\n }\n if (!VALUE_FLAGS.has(name)) {\n parsed.errors.push(`Unknown option: --${name}`);\n continue;\n }\n\n const value =\n inlineValue ??\n (args[i + 1] !== undefined && !args[i + 1].startsWith(\"--\")\n ? args[++i]\n : undefined);\n if (value === undefined) {\n parsed.errors.push(`Missing value for --${name}`);\n continue;\n }\n\n switch (name) {\n case \"message\":\n case \"prompt\":\n parsed.prompt = value;\n break;\n case \"engine\":\n parsed.engine = value;\n break;\n case \"model\":\n parsed.model = value;\n break;\n case \"user\":\n case \"user-email\":\n parsed.userEmail = value;\n break;\n case \"org\":\n case \"org-id\":\n parsed.orgId = value;\n break;\n case \"soft-timeout-ms\":\n parsed.softTimeoutMs = parsePositiveInteger(\n \"--soft-timeout-ms\",\n value,\n parsed,\n );\n break;\n case \"max-iterations\":\n parsed.maxIterations = parsePositiveInteger(\n \"--max-iterations\",\n value,\n parsed,\n );\n break;\n }\n }\n\n if (!parsed.prompt && positional.length > 0) {\n parsed.prompt = positional.join(\" \");\n }\n\n return parsed;\n}\n\nexport async function runAgent(\n args: string[],\n io: AgentCliIo = {},\n): Promise<number> {\n loadEnv();\n registerBuiltinEngines();\n\n const stdout = io.stdout ?? console.log;\n const stderr = io.stderr ?? console.error;\n const env = io.env ?? process.env;\n const parsed = parseAgentArgs(args);\n\n if (parsed.help) {\n stdout(formatAgentUsage());\n return 0;\n }\n if (!parsed.prompt?.trim()) {\n parsed.errors.push('Missing \"prompt\"');\n }\n if (parsed.errors.length > 0) {\n stderr(parsed.errors.join(\"\\n\"));\n stderr(\"\");\n stderr(formatAgentUsage());\n return 1;\n }\n\n const ownerEmail =\n parsed.userEmail ?? env.AGENT_USER_EMAIL ?? (await resolveDevUserEmail());\n const orgId = parsed.orgId ?? env.AGENT_ORG_ID ?? undefined;\n\n try {\n const result = await runWithRequestContext(\n { userEmail: ownerEmail, orgId },\n () => runLocalAgentLoop(parsed),\n );\n if (parsed.json) {\n stdout(JSON.stringify(result, null, 2));\n } else {\n stdout(result.responseText.trimEnd());\n if (result.responseText && !result.responseText.endsWith(\"\\n\")) {\n stdout(\"\");\n }\n }\n return 0;\n } catch (err) {\n stderr(err instanceof Error ? err.message : String(err));\n return 1;\n }\n}\n\nasync function runLocalAgentLoop(parsed: ParsedAgentArgs): Promise<{\n responseText: string;\n usage: AgentLoopUsage;\n events: AgentChatEvent[];\n tools: string[];\n}> {\n const localActions = await autoDiscoverActions(\"auto\");\n const builtinActions = await createHeadlessBuiltinActions();\n const repoActions = createGitHubRepoToolEntries({\n appId: process.env.AGENT_NATIVE_APP_ID ?? process.env.APP_ID ?? \"app\",\n });\n const actions = { ...builtinActions, ...localActions, ...repoActions };\n const tools = actionsToEngineTools(actions);\n if (tools.length === 0) {\n throw new Error(\n \"No agent-callable actions were found. Add actions/*.ts with defineAction() first.\",\n );\n }\n\n const engine = await resolveEngine({\n engineOption: parsed.engine,\n model: parsed.model,\n });\n const model = parsed.model ?? engine.defaultModel ?? DEFAULT_MODEL;\n const messages: EngineMessage[] = [\n {\n role: \"user\",\n content: [{ type: \"text\", text: parsed.prompt!.trim() }],\n },\n ];\n const events: AgentChatEvent[] = [];\n let responseText = \"\";\n const controller = new AbortController();\n const ownerEmail = getRequestUserEmail();\n const orgId = getRequestOrgId();\n\n const usage = await runAgentLoopDirectWithSoftTimeout(\n {\n engine,\n model,\n systemPrompt: buildHeadlessSystemPrompt(tools.map((tool) => tool.name)),\n tools,\n actions,\n messages,\n signal: controller.signal,\n ownerEmail,\n orgId,\n maxIterations: parsed.maxIterations,\n send(event) {\n events.push(event);\n if (event.type === \"text\") {\n responseText += event.text ?? \"\";\n }\n },\n },\n parsed.softTimeoutMs,\n );\n\n return {\n responseText,\n usage,\n events,\n tools: tools.map((tool) => tool.name).sort(),\n };\n}\n\nfunction buildHeadlessSystemPrompt(actionNames: string[]): string {\n const instructions = readLocalInstructions();\n const actionList =\n actionNames.length > 0\n ? `Available local actions: ${actionNames.join(\", \")}.`\n : \"No local actions were discovered.\";\n return [\n \"You are the app agent for this Agent-Native project.\",\n \"Use the registered app actions as your source of truth for doing work.\",\n \"Use docs-search before implementing or answering advanced Agent Native framework questions; it reads the version-matched docs bundled with @agent-native/core.\",\n \"Use connected GitHub repository tools for repo context when a repository is configured; do not assume a local clone or sandbox exists.\",\n \"You are running headlessly from the command line, so reply with the final useful result in plain text.\",\n actionList,\n instructions ? `Project instructions:\\n${instructions}` : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\\n\");\n}\n\nfunction cliArgsFromToolArgs(args: Record<string, unknown>): string[] {\n const cliArgs: string[] = [];\n for (const [key, value] of Object.entries(args)) {\n if (value === undefined) continue;\n const normalized =\n value != null && typeof value === \"object\"\n ? JSON.stringify(value)\n : String(value);\n cliArgs.push(`--${key}`, normalized);\n }\n return cliArgs;\n}\n\nexport async function createHeadlessBuiltinActions(): Promise<\n Record<string, ActionEntry>\n> {\n const docsSearch = await import(\"../scripts/docs/search.js\");\n return {\n \"docs-search\": {\n readOnly: true,\n tool: {\n description:\n \"Search and read version-matched Agent Native framework documentation bundled in @agent-native/core, plus bundled AGENTS.md and codebase skills. Use --list to see pages, --query to search, and --slug to read a page.\",\n parameters: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description:\n \"Search term to find relevant docs, for example actions, automations, a2a, database, sharing, or pure-agent apps.\",\n },\n slug: {\n type: \"string\",\n description:\n \"Read a specific doc page by slug, for example actions, agent-native-docs, automations, a2a-protocol, or external-agents.\",\n },\n list: {\n type: \"string\",\n description: 'Set to \"true\" to list all available doc pages.',\n enum: [\"true\"],\n },\n },\n },\n },\n run: async (args: Record<string, unknown>): Promise<string> => {\n return captureCliOutput(() =>\n docsSearch.default(cliArgsFromToolArgs(args)),\n );\n },\n },\n };\n}\n\nfunction readLocalInstructions(): string {\n const candidates = [\"AGENTS.md\", \"CLAUDE.md\", \"README.md\"];\n const chunks: string[] = [];\n for (const name of candidates) {\n const file = path.resolve(process.cwd(), name);\n try {\n if (!fs.existsSync(file)) continue;\n const content = fs.readFileSync(file, \"utf8\").trim();\n if (!content) continue;\n chunks.push(`# ${name}\\n${content.slice(0, 12_000)}`);\n } catch {\n // Ignore unreadable local instruction files.\n }\n }\n return chunks.join(\"\\n\\n\");\n}\n\nfunction parsePositiveInteger(\n flag: string,\n value: string,\n parsed: ParsedAgentArgs,\n): number | undefined {\n const n = Number(value);\n if (!Number.isInteger(n) || n <= 0) {\n parsed.errors.push(`${flag} must be a positive integer`);\n return undefined;\n }\n return n;\n}\n\nexport function formatAgentUsage(): string {\n return [\n 'Usage: agent-native agent \"prompt\" [options]',\n \"\",\n \"Runs the production app-agent loop once against this folder's actions/ directory.\",\n \"\",\n \"Options:\",\n \" --message <text> Prompt (alias for positional prompt)\",\n \" --engine <name> Agent engine name (defaults to env/settings)\",\n \" --model <name> Model override\",\n \" --user-email <email> Owner identity for scoped actions\",\n \" --org-id <id> Organization id for scoped credentials\",\n \" --soft-timeout-ms <n> Soft timeout before continuation recovery\",\n \" --no-soft-timeout Disable continuation soft timeout wrapper\",\n \" --max-iterations <n> Maximum tool/LLM loop iterations\",\n \" --json Print response, events, usage, and tools\",\n ].join(\"\\n\");\n}\n"]}
@@ -0,0 +1,14 @@
1
+ export interface ParsedAgentsArgs {
2
+ command: "list" | "help";
3
+ selfAppId?: string;
4
+ json: boolean;
5
+ errors: string[];
6
+ }
7
+ export interface AgentsCliIo {
8
+ stdout?: (text: string) => void;
9
+ stderr?: (text: string) => void;
10
+ }
11
+ export declare function parseAgentsArgs(args: string[]): ParsedAgentsArgs;
12
+ export declare function runAgents(args: string[], io?: AgentsCliIo): Promise<number>;
13
+ export declare function formatAgentsUsage(): string;
14
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/cli/agents.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAiDhE;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EAAE,EACd,EAAE,GAAE,WAAgB,GACnB,OAAO,CAAC,MAAM,CAAC,CAyCjB;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAU1C"}
@@ -0,0 +1,95 @@
1
+ import { discoverAgents } from "../server/agent-discovery.js";
2
+ export function parseAgentsArgs(args) {
3
+ const parsed = {
4
+ command: "list",
5
+ json: false,
6
+ errors: [],
7
+ };
8
+ const positional = [];
9
+ for (let i = 0; i < args.length; i += 1) {
10
+ const arg = args[i];
11
+ if (!arg.startsWith("--")) {
12
+ positional.push(arg);
13
+ continue;
14
+ }
15
+ const eqIndex = arg.indexOf("=");
16
+ const name = eqIndex === -1 ? arg.slice("--".length) : arg.slice("--".length, eqIndex);
17
+ const inlineValue = eqIndex === -1 ? undefined : arg.slice(eqIndex + 1);
18
+ if (name === "help" || name === "h") {
19
+ parsed.command = "help";
20
+ continue;
21
+ }
22
+ if (name === "json") {
23
+ parsed.json = true;
24
+ continue;
25
+ }
26
+ if (name === "self" || name === "self-app-id") {
27
+ const value = inlineValue ??
28
+ (args[i + 1] !== undefined && !args[i + 1].startsWith("--")
29
+ ? args[++i]
30
+ : undefined);
31
+ if (!value) {
32
+ parsed.errors.push(`Missing value for --${name}`);
33
+ }
34
+ else {
35
+ parsed.selfAppId = value;
36
+ }
37
+ continue;
38
+ }
39
+ parsed.errors.push(`Unknown option: --${name}`);
40
+ }
41
+ if (positional[0] === "help")
42
+ parsed.command = "help";
43
+ if (positional[0] && positional[0] !== "list" && positional[0] !== "help") {
44
+ parsed.errors.push(`Unknown agents command: ${positional[0]}`);
45
+ }
46
+ return parsed;
47
+ }
48
+ export async function runAgents(args, io = {}) {
49
+ const stdout = io.stdout ?? console.log;
50
+ const stderr = io.stderr ?? console.error;
51
+ const parsed = parseAgentsArgs(args);
52
+ if (parsed.command === "help") {
53
+ stdout(formatAgentsUsage());
54
+ return 0;
55
+ }
56
+ if (parsed.errors.length > 0) {
57
+ stderr(parsed.errors.join("\n"));
58
+ stderr("");
59
+ stderr(formatAgentsUsage());
60
+ return 1;
61
+ }
62
+ const agents = await discoverAgents(parsed.selfAppId);
63
+ if (parsed.json) {
64
+ stdout(JSON.stringify({ agents }, null, 2));
65
+ return 0;
66
+ }
67
+ if (agents.length === 0) {
68
+ stdout("No connected agents found.");
69
+ return 0;
70
+ }
71
+ const rows = agents.map((agent) => ({
72
+ id: agent.id,
73
+ name: agent.name,
74
+ url: agent.url,
75
+ }));
76
+ const idWidth = Math.max(2, ...rows.map((row) => row.id.length));
77
+ const nameWidth = Math.max(4, ...rows.map((row) => row.name.length));
78
+ stdout(`${"ID".padEnd(idWidth)} ${"Name".padEnd(nameWidth)} URL`);
79
+ for (const row of rows) {
80
+ stdout(`${row.id.padEnd(idWidth)} ${row.name.padEnd(nameWidth)} ${row.url}`);
81
+ }
82
+ return 0;
83
+ }
84
+ export function formatAgentsUsage() {
85
+ return [
86
+ "Usage: agent-native agents list [options]",
87
+ "",
88
+ "Lists discoverable agent-native apps from the same registry used by chat and A2A.",
89
+ "",
90
+ "Options:",
91
+ " --self-app-id <id> Exclude the current app from results",
92
+ " --json Print machine-readable output",
93
+ ].join("\n");
94
+ }
95
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/cli/agents.ts"],"names":[],"mappings":"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","sourcesContent":["import { discoverAgents } from \"../server/agent-discovery.js\";\n\nexport interface ParsedAgentsArgs {\n command: \"list\" | \"help\";\n selfAppId?: string;\n json: boolean;\n errors: string[];\n}\n\nexport interface AgentsCliIo {\n stdout?: (text: string) => void;\n stderr?: (text: string) => void;\n}\n\nexport function parseAgentsArgs(args: string[]): ParsedAgentsArgs {\n const parsed: ParsedAgentsArgs = {\n command: \"list\",\n json: false,\n errors: [],\n };\n const positional: string[] = [];\n\n for (let i = 0; i < args.length; i += 1) {\n const arg = args[i];\n if (!arg.startsWith(\"--\")) {\n positional.push(arg);\n continue;\n }\n const eqIndex = arg.indexOf(\"=\");\n const name =\n eqIndex === -1 ? arg.slice(\"--\".length) : arg.slice(\"--\".length, eqIndex);\n const inlineValue = eqIndex === -1 ? undefined : arg.slice(eqIndex + 1);\n\n if (name === \"help\" || name === \"h\") {\n parsed.command = \"help\";\n continue;\n }\n if (name === \"json\") {\n parsed.json = true;\n continue;\n }\n if (name === \"self\" || name === \"self-app-id\") {\n const value =\n inlineValue ??\n (args[i + 1] !== undefined && !args[i + 1].startsWith(\"--\")\n ? args[++i]\n : undefined);\n if (!value) {\n parsed.errors.push(`Missing value for --${name}`);\n } else {\n parsed.selfAppId = value;\n }\n continue;\n }\n parsed.errors.push(`Unknown option: --${name}`);\n }\n\n if (positional[0] === \"help\") parsed.command = \"help\";\n if (positional[0] && positional[0] !== \"list\" && positional[0] !== \"help\") {\n parsed.errors.push(`Unknown agents command: ${positional[0]}`);\n }\n\n return parsed;\n}\n\nexport async function runAgents(\n args: string[],\n io: AgentsCliIo = {},\n): Promise<number> {\n const stdout = io.stdout ?? console.log;\n const stderr = io.stderr ?? console.error;\n const parsed = parseAgentsArgs(args);\n\n if (parsed.command === \"help\") {\n stdout(formatAgentsUsage());\n return 0;\n }\n if (parsed.errors.length > 0) {\n stderr(parsed.errors.join(\"\\n\"));\n stderr(\"\");\n stderr(formatAgentsUsage());\n return 1;\n }\n\n const agents = await discoverAgents(parsed.selfAppId);\n if (parsed.json) {\n stdout(JSON.stringify({ agents }, null, 2));\n return 0;\n }\n\n if (agents.length === 0) {\n stdout(\"No connected agents found.\");\n return 0;\n }\n\n const rows = agents.map((agent) => ({\n id: agent.id,\n name: agent.name,\n url: agent.url,\n }));\n const idWidth = Math.max(2, ...rows.map((row) => row.id.length));\n const nameWidth = Math.max(4, ...rows.map((row) => row.name.length));\n stdout(`${\"ID\".padEnd(idWidth)} ${\"Name\".padEnd(nameWidth)} URL`);\n for (const row of rows) {\n stdout(\n `${row.id.padEnd(idWidth)} ${row.name.padEnd(nameWidth)} ${row.url}`,\n );\n }\n return 0;\n}\n\nexport function formatAgentsUsage(): string {\n return [\n \"Usage: agent-native agents list [options]\",\n \"\",\n \"Lists discoverable agent-native apps from the same registry used by chat and A2A.\",\n \"\",\n \"Options:\",\n \" --self-app-id <id> Exclude the current app from results\",\n \" --json Print machine-readable output\",\n ].join(\"\\n\");\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"code-agent-executor.d.ts","sourceRoot":"","sources":["../../src/cli/code-agent-executor.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EACV,WAAW,EAEX,aAAa,EAEd,MAAM,0BAA0B,CAAC;AAQlC,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAQL,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAG9B,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,WAAW,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC/B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AA6BD,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CA+YpC;AAED,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,IAAI,CAAC,0BAA0B,EAAE,OAAO,CAAM,GACtD,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAEpC;AAED;;;;GAIG;AACH,wBAAsB,qCAAqC,CACzD,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;CAAO,GAC/C,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAYpC;AAED,wBAAsB,+BAA+B,CACnD,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;CAAO,GAC/C,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CA4FpC;AAED;;;;GAIG;AACH,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;CAAO,GAC/C,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CA0CpC;AAyTD;;;;;;;;;;;;;;;;;GAiBG;AACH,wCAAwC;AACxC,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,SAAS,OAAO,sBAAsB,EAAE,wBAAwB,EAAE,GACzE,aAAa,EAAE,CAmHjB;AAmED;;;;;;;;;GASG;AACH,wCAAwC;AACxC,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,uBAAuB,GACtC,OAAO,CAAC,MAAM,CAAC,CA4BjB;AAED,wCAAwC;AACxC,wBAAgB,0BAA0B,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAc1E;AAED,wCAAwC;AACxC,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,uBAAuB,EACvC,qBAAqB,SAAK,EAC1B,WAAW,SAAK,GACf,MAAM,CA4DR;AA2DD,MAAM,MAAM,0BAA0B,GAClC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1C,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,MAAM,GACd,0BAA0B,CAuD5B"}
1
+ {"version":3,"file":"code-agent-executor.d.ts","sourceRoot":"","sources":["../../src/cli/code-agent-executor.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EACV,WAAW,EAEX,aAAa,EAEd,MAAM,0BAA0B,CAAC;AAQlC,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAQL,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAG9B,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,WAAW,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC/B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAsCD,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CA4ZpC;AA8RD,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,IAAI,CAAC,0BAA0B,EAAE,OAAO,CAAM,GACtD,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAEpC;AAED;;;;GAIG;AACH,wBAAsB,qCAAqC,CACzD,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;CAAO,GAC/C,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAYpC;AAED,wBAAsB,+BAA+B,CACnD,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;CAAO,GAC/C,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CA4FpC;AAED;;;;GAIG;AACH,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;CAAO,GAC/C,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CA0CpC;AAyTD;;;;;;;;;;;;;;;;;GAiBG;AACH,wCAAwC;AACxC,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,SAAS,OAAO,sBAAsB,EAAE,wBAAwB,EAAE,GACzE,aAAa,EAAE,CAmHjB;AAmED;;;;;;;;;GASG;AACH,wCAAwC;AACxC,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,uBAAuB,GACtC,OAAO,CAAC,MAAM,CAAC,CA4BjB;AAED,wCAAwC;AACxC,wBAAgB,0BAA0B,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAc1E;AAED,wCAAwC;AACxC,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,uBAAuB,EACvC,qBAAqB,SAAK,EAC1B,WAAW,SAAK,GACf,MAAM,CA4DR;AA2DD,MAAM,MAAM,0BAA0B,GAClC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1C,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,MAAM,GACd,0BAA0B,CAuD5B"}