agentopology 0.1.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 (174) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +450 -0
  3. package/dist/analyzer/__tests__/analyzer.test.d.ts +2 -0
  4. package/dist/analyzer/__tests__/analyzer.test.d.ts.map +1 -0
  5. package/dist/analyzer/__tests__/analyzer.test.js +258 -0
  6. package/dist/analyzer/__tests__/analyzer.test.js.map +1 -0
  7. package/dist/analyzer/index.d.ts +44 -0
  8. package/dist/analyzer/index.d.ts.map +1 -0
  9. package/dist/analyzer/index.js +308 -0
  10. package/dist/analyzer/index.js.map +1 -0
  11. package/dist/bindings/__tests__/bindings.test.d.ts +2 -0
  12. package/dist/bindings/__tests__/bindings.test.d.ts.map +1 -0
  13. package/dist/bindings/__tests__/bindings.test.js +2089 -0
  14. package/dist/bindings/__tests__/bindings.test.js.map +1 -0
  15. package/dist/bindings/claude-code.d.ts +12 -0
  16. package/dist/bindings/claude-code.d.ts.map +1 -0
  17. package/dist/bindings/claude-code.js +2063 -0
  18. package/dist/bindings/claude-code.js.map +1 -0
  19. package/dist/bindings/codex.d.ts +18 -0
  20. package/dist/bindings/codex.d.ts.map +1 -0
  21. package/dist/bindings/codex.js +1633 -0
  22. package/dist/bindings/codex.js.map +1 -0
  23. package/dist/bindings/copilot-cli.d.ts +20 -0
  24. package/dist/bindings/copilot-cli.d.ts.map +1 -0
  25. package/dist/bindings/copilot-cli.js +1515 -0
  26. package/dist/bindings/copilot-cli.js.map +1 -0
  27. package/dist/bindings/cursor.d.ts +17 -0
  28. package/dist/bindings/cursor.d.ts.map +1 -0
  29. package/dist/bindings/cursor.js +1715 -0
  30. package/dist/bindings/cursor.js.map +1 -0
  31. package/dist/bindings/gemini-cli.d.ts +18 -0
  32. package/dist/bindings/gemini-cli.d.ts.map +1 -0
  33. package/dist/bindings/gemini-cli.js +1327 -0
  34. package/dist/bindings/gemini-cli.js.map +1 -0
  35. package/dist/bindings/index.d.ts +20 -0
  36. package/dist/bindings/index.d.ts.map +1 -0
  37. package/dist/bindings/index.js +33 -0
  38. package/dist/bindings/index.js.map +1 -0
  39. package/dist/bindings/kiro.d.ts +17 -0
  40. package/dist/bindings/kiro.d.ts.map +1 -0
  41. package/dist/bindings/kiro.js +1624 -0
  42. package/dist/bindings/kiro.js.map +1 -0
  43. package/dist/bindings/openclaw.d.ts +18 -0
  44. package/dist/bindings/openclaw.d.ts.map +1 -0
  45. package/dist/bindings/openclaw.js +1578 -0
  46. package/dist/bindings/openclaw.js.map +1 -0
  47. package/dist/bindings/types.d.ts +33 -0
  48. package/dist/bindings/types.d.ts.map +1 -0
  49. package/dist/bindings/types.js +23 -0
  50. package/dist/bindings/types.js.map +1 -0
  51. package/dist/cli/index.d.ts +19 -0
  52. package/dist/cli/index.d.ts.map +1 -0
  53. package/dist/cli/index.js +679 -0
  54. package/dist/cli/index.js.map +1 -0
  55. package/dist/docs/__tests__/docs.test.d.ts +2 -0
  56. package/dist/docs/__tests__/docs.test.d.ts.map +1 -0
  57. package/dist/docs/__tests__/docs.test.js +438 -0
  58. package/dist/docs/__tests__/docs.test.js.map +1 -0
  59. package/dist/docs/content.d.ts +16 -0
  60. package/dist/docs/content.d.ts.map +1 -0
  61. package/dist/docs/content.js +3273 -0
  62. package/dist/docs/content.js.map +1 -0
  63. package/dist/docs/index.d.ts +17 -0
  64. package/dist/docs/index.d.ts.map +1 -0
  65. package/dist/docs/index.js +117 -0
  66. package/dist/docs/index.js.map +1 -0
  67. package/dist/exporters/__tests__/exporters.test.d.ts +2 -0
  68. package/dist/exporters/__tests__/exporters.test.d.ts.map +1 -0
  69. package/dist/exporters/__tests__/exporters.test.js +731 -0
  70. package/dist/exporters/__tests__/exporters.test.js.map +1 -0
  71. package/dist/exporters/index.d.ts +13 -0
  72. package/dist/exporters/index.d.ts.map +1 -0
  73. package/dist/exporters/index.js +18 -0
  74. package/dist/exporters/index.js.map +1 -0
  75. package/dist/exporters/json.d.ts +8 -0
  76. package/dist/exporters/json.d.ts.map +1 -0
  77. package/dist/exporters/json.js +25 -0
  78. package/dist/exporters/json.js.map +1 -0
  79. package/dist/exporters/markdown.d.ts +9 -0
  80. package/dist/exporters/markdown.d.ts.map +1 -0
  81. package/dist/exporters/markdown.js +686 -0
  82. package/dist/exporters/markdown.js.map +1 -0
  83. package/dist/exporters/mermaid.d.ts +11 -0
  84. package/dist/exporters/mermaid.d.ts.map +1 -0
  85. package/dist/exporters/mermaid.js +161 -0
  86. package/dist/exporters/mermaid.js.map +1 -0
  87. package/dist/exporters/types.d.ts +22 -0
  88. package/dist/exporters/types.d.ts.map +1 -0
  89. package/dist/exporters/types.js +10 -0
  90. package/dist/exporters/types.js.map +1 -0
  91. package/dist/import/__tests__/import.test.d.ts +2 -0
  92. package/dist/import/__tests__/import.test.d.ts.map +1 -0
  93. package/dist/import/__tests__/import.test.js +781 -0
  94. package/dist/import/__tests__/import.test.js.map +1 -0
  95. package/dist/import/claude-code.d.ts +38 -0
  96. package/dist/import/claude-code.d.ts.map +1 -0
  97. package/dist/import/claude-code.js +897 -0
  98. package/dist/import/claude-code.js.map +1 -0
  99. package/dist/import/index.d.ts +18 -0
  100. package/dist/import/index.d.ts.map +1 -0
  101. package/dist/import/index.js +28 -0
  102. package/dist/import/index.js.map +1 -0
  103. package/dist/import/serializer.d.ts +11 -0
  104. package/dist/import/serializer.d.ts.map +1 -0
  105. package/dist/import/serializer.js +960 -0
  106. package/dist/import/serializer.js.map +1 -0
  107. package/dist/index.d.ts +26 -0
  108. package/dist/index.d.ts.map +1 -0
  109. package/dist/index.js +21 -0
  110. package/dist/index.js.map +1 -0
  111. package/dist/parser/__tests__/parser.test.d.ts +2 -0
  112. package/dist/parser/__tests__/parser.test.d.ts.map +1 -0
  113. package/dist/parser/__tests__/parser.test.js +6514 -0
  114. package/dist/parser/__tests__/parser.test.js.map +1 -0
  115. package/dist/parser/ast.d.ts +708 -0
  116. package/dist/parser/ast.d.ts.map +1 -0
  117. package/dist/parser/ast.js +12 -0
  118. package/dist/parser/ast.js.map +1 -0
  119. package/dist/parser/index.d.ts +253 -0
  120. package/dist/parser/index.d.ts.map +1 -0
  121. package/dist/parser/index.js +1985 -0
  122. package/dist/parser/index.js.map +1 -0
  123. package/dist/parser/lexer.d.ts +100 -0
  124. package/dist/parser/lexer.d.ts.map +1 -0
  125. package/dist/parser/lexer.js +304 -0
  126. package/dist/parser/lexer.js.map +1 -0
  127. package/dist/parser/validator.d.ts +42 -0
  128. package/dist/parser/validator.d.ts.map +1 -0
  129. package/dist/parser/validator.js +2568 -0
  130. package/dist/parser/validator.js.map +1 -0
  131. package/dist/scaffold/__tests__/scaffold.test.d.ts +7 -0
  132. package/dist/scaffold/__tests__/scaffold.test.d.ts.map +1 -0
  133. package/dist/scaffold/__tests__/scaffold.test.js +295 -0
  134. package/dist/scaffold/__tests__/scaffold.test.js.map +1 -0
  135. package/dist/scaffold/incremental.d.ts +43 -0
  136. package/dist/scaffold/incremental.d.ts.map +1 -0
  137. package/dist/scaffold/incremental.js +185 -0
  138. package/dist/scaffold/incremental.js.map +1 -0
  139. package/dist/scaffold/index.d.ts +13 -0
  140. package/dist/scaffold/index.d.ts.map +1 -0
  141. package/dist/scaffold/index.js +13 -0
  142. package/dist/scaffold/index.js.map +1 -0
  143. package/dist/scaffold/manifest.d.ts +30 -0
  144. package/dist/scaffold/manifest.d.ts.map +1 -0
  145. package/dist/scaffold/manifest.js +71 -0
  146. package/dist/scaffold/manifest.js.map +1 -0
  147. package/dist/scaffold/merge.d.ts +52 -0
  148. package/dist/scaffold/merge.d.ts.map +1 -0
  149. package/dist/scaffold/merge.js +134 -0
  150. package/dist/scaffold/merge.js.map +1 -0
  151. package/dist/scaffold/types.d.ts +51 -0
  152. package/dist/scaffold/types.d.ts.map +1 -0
  153. package/dist/scaffold/types.js +10 -0
  154. package/dist/scaffold/types.js.map +1 -0
  155. package/dist/sync/index.d.ts +34 -0
  156. package/dist/sync/index.d.ts.map +1 -0
  157. package/dist/sync/index.js +392 -0
  158. package/dist/sync/index.js.map +1 -0
  159. package/dist/visualizer/index.d.ts +17 -0
  160. package/dist/visualizer/index.d.ts.map +1 -0
  161. package/dist/visualizer/index.js +1976 -0
  162. package/dist/visualizer/index.js.map +1 -0
  163. package/examples/code-review.at +167 -0
  164. package/examples/data-processing.at +296 -0
  165. package/examples/openclaw-assistant.at +142 -0
  166. package/examples/scheduled-monitor.at +193 -0
  167. package/examples/simple-pipeline.at +163 -0
  168. package/package.json +77 -0
  169. package/skill/SKILL.md +403 -0
  170. package/skill/scripts/emit.ts +853 -0
  171. package/skill/scripts/visualize.ts +89 -0
  172. package/spec/grammar.md +1466 -0
  173. package/spec/reserved-keywords.md +147 -0
  174. package/spec/validation.md +535 -0
@@ -0,0 +1,392 @@
1
+ /**
2
+ * Sync-back module — extracts prompt content from platform agent files
3
+ * and writes it back into .at file prompt {} blocks.
4
+ * @module
5
+ */
6
+ import { escapeRegex } from "../parser/lexer.js";
7
+ /**
8
+ * Sync prompt content from platform agent files back into an .at source string.
9
+ *
10
+ * @param atSource - Current .at file content
11
+ * @param files - Platform agent files [{path, content}]
12
+ * @param binding - Target binding name
13
+ * @returns Updated .at file content with prompt {} blocks
14
+ */
15
+ export function syncFromPlatform(atSource, files, binding) {
16
+ let prompts;
17
+ switch (binding) {
18
+ case "claude-code":
19
+ prompts = extractClaudeCodePrompts(files);
20
+ break;
21
+ case "codex":
22
+ prompts = extractCodexPrompts(files);
23
+ break;
24
+ case "gemini-cli":
25
+ prompts = extractGeminiPrompts(files);
26
+ break;
27
+ case "copilot-cli":
28
+ prompts = extractCopilotPrompts(files);
29
+ break;
30
+ default:
31
+ throw new Error(`Unknown binding: ${binding}`);
32
+ }
33
+ return insertPromptBlocks(atSource, prompts);
34
+ }
35
+ // ---------------------------------------------------------------------------
36
+ // Per-binding extractors
37
+ // ---------------------------------------------------------------------------
38
+ /**
39
+ * Extract prompts from Claude Code agent files.
40
+ *
41
+ * Files matching `.claude/agents/<id>/AGENT.md` are parsed:
42
+ * - Skip YAML frontmatter (between `---` markers)
43
+ * - Look for `## Instructions` section
44
+ * - Extract everything until a known structural heading or end of file
45
+ */
46
+ function extractClaudeCodePrompts(files) {
47
+ const prompts = [];
48
+ for (const file of files) {
49
+ // Match .claude/agents/<id>/AGENT.md (path is relative from --dir)
50
+ const match = file.path.match(/(?:^|[\\/])agents[\\/]([^\\/]+)[\\/]AGENT\.md$/);
51
+ if (!match)
52
+ continue;
53
+ const agentId = match[1];
54
+ const content = extractSectionUntilKnownHeading(file.content, "## Instructions", CLAUDE_CODE_STRUCTURAL_HEADINGS);
55
+ if (content) {
56
+ prompts.push({ agentId, content });
57
+ }
58
+ }
59
+ return prompts;
60
+ }
61
+ /** Known structural headings in Claude Code AGENT.md files (not part of prompt content). */
62
+ export const CLAUDE_CODE_STRUCTURAL_HEADINGS = [
63
+ "## Role",
64
+ "## Reads",
65
+ "## Writes",
66
+ "## Outputs",
67
+ "## Scale",
68
+ ];
69
+ /** Known structural headings in Copilot .agent.md files. */
70
+ export const COPILOT_STRUCTURAL_HEADINGS = [
71
+ "## Role",
72
+ "## Reads",
73
+ "## Writes",
74
+ "## Outputs",
75
+ "## Scale",
76
+ ];
77
+ /**
78
+ * Extract prompts from Codex AGENTS.md file.
79
+ *
80
+ * Splits into per-agent sections by `### ` headings, then looks for
81
+ * `#### Instructions` within each agent section.
82
+ */
83
+ function extractCodexPrompts(files) {
84
+ const prompts = [];
85
+ const agentsFile = files.find((f) => f.path.endsWith("AGENTS.md") || f.path === "AGENTS.md");
86
+ if (!agentsFile)
87
+ return prompts;
88
+ const agentSections = splitByHeading(agentsFile.content, "### ");
89
+ for (const [heading, body] of agentSections) {
90
+ // Heading is the agent title — convert back to kebab-case id
91
+ const agentId = heading.trim().toLowerCase().replace(/\s+/g, "-");
92
+ const content = extractSubsectionContent(body, "#### Instructions");
93
+ if (content) {
94
+ prompts.push({ agentId, content });
95
+ }
96
+ }
97
+ return prompts;
98
+ }
99
+ /**
100
+ * Extract prompts from Gemini CLI files.
101
+ *
102
+ * Finds the Gemini context file (`.gemini/CONTEXT.md` or legacy `GEMINI.md`),
103
+ * splits agent sections under `## Agents` > `### AgentName`,
104
+ * and extracts body content after metadata bullet points.
105
+ */
106
+ function extractGeminiPrompts(files) {
107
+ const prompts = [];
108
+ const geminiFile = files.find((f) => f.path.endsWith("GEMINI.md") || f.path === "GEMINI.md" ||
109
+ f.path.endsWith(".gemini/CONTEXT.md"));
110
+ if (!geminiFile)
111
+ return prompts;
112
+ // Find the ## Agents section first
113
+ const agentsSection = extractSectionContent(geminiFile.content, "## Agents");
114
+ if (!agentsSection)
115
+ return prompts;
116
+ // Split into per-agent sections by ### headings
117
+ const agentSections = splitByHeading(agentsSection, "### ");
118
+ for (const [heading, body] of agentSections) {
119
+ const agentId = heading.trim().toLowerCase().replace(/\s+/g, "-");
120
+ // Extract content that's not metadata bullets (lines starting with `- `)
121
+ // The prompt content is non-bullet text after the description/role paragraph
122
+ // and before the metadata bullets
123
+ const lines = body.split("\n");
124
+ const contentLines = [];
125
+ let foundBullets = false;
126
+ let inPromptBlock = false;
127
+ for (const line of lines) {
128
+ const trimmed = line.trim();
129
+ if (trimmed.startsWith("- ") && !inPromptBlock) {
130
+ foundBullets = true;
131
+ continue;
132
+ }
133
+ // Skip empty lines before any content
134
+ if (!inPromptBlock && trimmed === "")
135
+ continue;
136
+ // Once we've seen bullets, anything after is prompt content
137
+ if (foundBullets && trimmed !== "") {
138
+ inPromptBlock = true;
139
+ }
140
+ if (inPromptBlock) {
141
+ contentLines.push(line);
142
+ }
143
+ }
144
+ // If we didn't find content after bullets, try extracting the first
145
+ // non-bullet paragraph (before the bullets)
146
+ if (contentLines.length === 0) {
147
+ const preLines = [];
148
+ for (const line of lines) {
149
+ const trimmed = line.trim();
150
+ if (trimmed.startsWith("- "))
151
+ break;
152
+ if (trimmed === "" && preLines.length === 0)
153
+ continue;
154
+ preLines.push(line);
155
+ }
156
+ // Only treat as prompt if it's more than a single short description line
157
+ if (preLines.length > 1) {
158
+ const content = preLines.join("\n").trim();
159
+ if (content) {
160
+ prompts.push({ agentId, content });
161
+ }
162
+ }
163
+ }
164
+ else {
165
+ const content = contentLines.join("\n").trim();
166
+ if (content) {
167
+ prompts.push({ agentId, content });
168
+ }
169
+ }
170
+ }
171
+ return prompts;
172
+ }
173
+ /**
174
+ * Extract prompts from Copilot CLI agent files.
175
+ *
176
+ * Files matching `.github/agents/<id>.agent.md` are parsed:
177
+ * - Skip YAML frontmatter
178
+ * - Look for `## Instructions` section
179
+ */
180
+ function extractCopilotPrompts(files) {
181
+ const prompts = [];
182
+ for (const file of files) {
183
+ const match = file.path.match(/(?:^|[\\/])agents[\\/]([^\\/]+)\.agent\.md$/);
184
+ if (!match)
185
+ continue;
186
+ const agentId = match[1];
187
+ const content = extractSectionUntilKnownHeading(file.content, "## Instructions", COPILOT_STRUCTURAL_HEADINGS);
188
+ if (content) {
189
+ prompts.push({ agentId, content });
190
+ }
191
+ }
192
+ return prompts;
193
+ }
194
+ // ---------------------------------------------------------------------------
195
+ // Helpers for extraction
196
+ // ---------------------------------------------------------------------------
197
+ /**
198
+ * Extract content of a markdown section (e.g., `## Instructions`).
199
+ * Returns the text from after the heading line until the next heading
200
+ * at the SAME or higher level (fewer #'s), or end of file.
201
+ *
202
+ * Headings at LOWER levels (more #'s, like ### inside ## Instructions)
203
+ * are included in the extracted content — this is important because
204
+ * prompt content often contains sub-headings.
205
+ *
206
+ * Skips YAML frontmatter if present.
207
+ */
208
+ function extractSectionContent(fileContent, heading) {
209
+ // Strip YAML frontmatter
210
+ let content = fileContent;
211
+ if (content.startsWith("---")) {
212
+ const endIdx = content.indexOf("---", 3);
213
+ if (endIdx !== -1) {
214
+ content = content.slice(endIdx + 3);
215
+ }
216
+ }
217
+ const headingLevel = heading.split(" ")[0]; // e.g., "##"
218
+ const headingPattern = new RegExp(`^${escapeRegex(heading)}\\s*$`, "m");
219
+ const match = headingPattern.exec(content);
220
+ if (!match)
221
+ return null;
222
+ const start = match.index + match[0].length;
223
+ const rest = content.slice(start);
224
+ // Find the next heading at the SAME or higher level only
225
+ // e.g., for ## Instructions, stop at ## but NOT at ###
226
+ const nextHeadingPattern = new RegExp(`^#{1,${headingLevel.length}} `, "m");
227
+ const nextMatch = nextHeadingPattern.exec(rest);
228
+ const sectionContent = nextMatch ? rest.slice(0, nextMatch.index) : rest;
229
+ return sectionContent.trim() || null;
230
+ }
231
+ /**
232
+ * Extract content of a markdown section until one of the known structural headings.
233
+ *
234
+ * Unlike extractSectionContent which stops at ANY heading at the same level,
235
+ * this only stops at headings that are part of the binding's structural format.
236
+ * This allows prompt content to contain arbitrary ## headings (like ## Guidelines).
237
+ *
238
+ * Skips YAML frontmatter if present.
239
+ */
240
+ export function extractSectionUntilKnownHeading(fileContent, heading, knownHeadings) {
241
+ // Strip YAML frontmatter
242
+ let content = fileContent;
243
+ if (content.startsWith("---")) {
244
+ const endIdx = content.indexOf("---", 3);
245
+ if (endIdx !== -1) {
246
+ content = content.slice(endIdx + 3);
247
+ }
248
+ }
249
+ const headingPattern = new RegExp(`^${escapeRegex(heading)}\\s*$`, "m");
250
+ const match = headingPattern.exec(content);
251
+ if (!match)
252
+ return null;
253
+ const start = match.index + match[0].length;
254
+ const rest = content.slice(start);
255
+ // Find the earliest occurrence of any known structural heading
256
+ let endPos = rest.length;
257
+ for (const kh of knownHeadings) {
258
+ const khPattern = new RegExp(`^${escapeRegex(kh)}\\s*$`, "m");
259
+ const khMatch = khPattern.exec(rest);
260
+ if (khMatch && khMatch.index < endPos) {
261
+ endPos = khMatch.index;
262
+ }
263
+ }
264
+ const sectionContent = rest.slice(0, endPos);
265
+ return sectionContent.trim() || null;
266
+ }
267
+ /**
268
+ * Extract subsection content from a body string (not a full file).
269
+ * Similar to extractSectionContent but operates on already-extracted text
270
+ * without frontmatter handling.
271
+ */
272
+ function extractSubsectionContent(body, heading) {
273
+ const headingLevel = heading.split(" ")[0];
274
+ const headingPattern = new RegExp(`^${escapeRegex(heading)}\\s*$`, "m");
275
+ const match = headingPattern.exec(body);
276
+ if (!match)
277
+ return null;
278
+ const start = match.index + match[0].length;
279
+ const rest = body.slice(start);
280
+ const nextHeadingPattern = new RegExp(`^#{1,${headingLevel.length}}\\s`, "m");
281
+ const nextMatch = nextHeadingPattern.exec(rest);
282
+ const sectionContent = nextMatch ? rest.slice(0, nextMatch.index) : rest;
283
+ return sectionContent.trim() || null;
284
+ }
285
+ /**
286
+ * Split markdown content into sections by a heading prefix (e.g., "### ").
287
+ * Returns an array of [headingText, bodyContent] pairs.
288
+ */
289
+ function splitByHeading(content, headingPrefix) {
290
+ const results = [];
291
+ const pattern = new RegExp(`^${escapeRegex(headingPrefix)}(.+)$`, "gm");
292
+ let lastMatch = null;
293
+ let match;
294
+ while ((match = pattern.exec(content)) !== null) {
295
+ if (lastMatch) {
296
+ const body = content.slice(lastMatch.index + lastMatch[0].length, match.index);
297
+ results.push([lastMatch[1], body]);
298
+ }
299
+ lastMatch = match;
300
+ }
301
+ // Last section
302
+ if (lastMatch) {
303
+ const body = content.slice(lastMatch.index + lastMatch[0].length);
304
+ results.push([lastMatch[1], body]);
305
+ }
306
+ return results;
307
+ }
308
+ // ---------------------------------------------------------------------------
309
+ // Insert prompt blocks into .at source
310
+ // ---------------------------------------------------------------------------
311
+ /**
312
+ * Insert or update `prompt { }` blocks in .at source text.
313
+ *
314
+ * For each extracted prompt:
315
+ * 1. Find the `agent <id> {` block using regex
316
+ * 2. Check if a `prompt { }` block already exists
317
+ * 3. If exists: replace the content between the prompt braces
318
+ * 4. If not: insert a new `prompt { ... }` block before the closing `}` of the agent
319
+ */
320
+ function insertPromptBlocks(atSource, prompts) {
321
+ let result = atSource;
322
+ for (const { agentId, content } of prompts) {
323
+ if (!content.trim())
324
+ continue;
325
+ // Find agent block — must re-search each time since result mutates
326
+ const agentPattern = new RegExp(`([ \\t]*)agent\\s+${escapeRegex(agentId)}\\s*\\{`, "m");
327
+ const agentMatch = agentPattern.exec(result);
328
+ if (!agentMatch)
329
+ continue;
330
+ const baseIndent = agentMatch[1];
331
+ const blockIndent = baseIndent + " ";
332
+ const contentIndent = blockIndent + " ";
333
+ // Find the agent block boundaries using brace counting
334
+ const braceStart = agentMatch.index + agentMatch[0].length;
335
+ let depth = 1;
336
+ let pos = braceStart;
337
+ while (pos < result.length && depth > 0) {
338
+ if (result[pos] === "{")
339
+ depth++;
340
+ else if (result[pos] === "}")
341
+ depth--;
342
+ pos++;
343
+ }
344
+ const agentEnd = pos; // position after closing }
345
+ const agentBody = result.slice(braceStart, agentEnd - 1);
346
+ // Indent the content
347
+ const indentedContent = content
348
+ .split("\n")
349
+ .map((line) => (line.trim() ? contentIndent + line : ""))
350
+ .join("\n");
351
+ // Check if prompt block already exists in this agent
352
+ const promptBlockRe = /prompt\s*\{/m;
353
+ const existingPrompt = promptBlockRe.exec(agentBody);
354
+ if (existingPrompt) {
355
+ // Replace existing prompt block content
356
+ // Find the prompt { in the full result string
357
+ const promptKeywordPos = braceStart + existingPrompt.index;
358
+ const promptBraceStart = result.indexOf("{", promptKeywordPos);
359
+ let pDepth = 1;
360
+ let pPos = promptBraceStart + 1;
361
+ while (pPos < result.length && pDepth > 0) {
362
+ if (result[pPos] === "{")
363
+ pDepth++;
364
+ else if (result[pPos] === "}")
365
+ pDepth--;
366
+ pPos++;
367
+ }
368
+ // pPos is now right after the closing } of the prompt block
369
+ // Replace everything from after { to before } (inclusive of the })
370
+ result =
371
+ result.slice(0, promptBraceStart + 1) +
372
+ "\n" +
373
+ indentedContent +
374
+ "\n" +
375
+ blockIndent +
376
+ "}" +
377
+ result.slice(pPos);
378
+ }
379
+ else {
380
+ // Insert new prompt block before the closing } of the agent
381
+ // Find the position just before the agent's closing brace
382
+ const closingBracePos = agentEnd - 1;
383
+ const promptBlock = `\n${blockIndent}prompt {\n${indentedContent}\n${blockIndent}}\n`;
384
+ result =
385
+ result.slice(0, closingBracePos) +
386
+ promptBlock +
387
+ result.slice(closingBracePos);
388
+ }
389
+ }
390
+ return result;
391
+ }
392
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * AgenTopology Visualizer.
3
+ *
4
+ * Generates a self-contained HTML file that renders an interactive
5
+ * topology graph from a parsed TopologyAST. No external dependencies —
6
+ * all CSS and JS are inlined.
7
+ *
8
+ * @module
9
+ */
10
+ import type { TopologyAST } from "../parser/ast.js";
11
+ /**
12
+ * Generate a self-contained HTML string that visualizes the given topology.
13
+ *
14
+ * Save the returned string to a `.html` file and open it in any browser.
15
+ */
16
+ export declare function generateVisualization(ast: TopologyAST): string;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/visualizer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EACV,WAAW,EAOZ,MAAM,kBAAkB,CAAC;AA8C1B;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAK9D"}