@element47/ag 4.4.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 (158) hide show
  1. package/README.md +316 -0
  2. package/dist/cli/parser.d.ts +6 -0
  3. package/dist/cli/parser.d.ts.map +1 -0
  4. package/dist/cli/parser.js +62 -0
  5. package/dist/cli/parser.js.map +1 -0
  6. package/dist/cli/repl.d.ts +16 -0
  7. package/dist/cli/repl.d.ts.map +1 -0
  8. package/dist/cli/repl.js +599 -0
  9. package/dist/cli/repl.js.map +1 -0
  10. package/dist/cli.d.ts +3 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +84 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/core/__tests__/agent.test.d.ts +2 -0
  15. package/dist/core/__tests__/agent.test.d.ts.map +1 -0
  16. package/dist/core/__tests__/agent.test.js +53 -0
  17. package/dist/core/__tests__/agent.test.js.map +1 -0
  18. package/dist/core/__tests__/config.test.d.ts +2 -0
  19. package/dist/core/__tests__/config.test.d.ts.map +1 -0
  20. package/dist/core/__tests__/config.test.js +58 -0
  21. package/dist/core/__tests__/config.test.js.map +1 -0
  22. package/dist/core/__tests__/constants.test.d.ts +2 -0
  23. package/dist/core/__tests__/constants.test.d.ts.map +1 -0
  24. package/dist/core/__tests__/constants.test.js +40 -0
  25. package/dist/core/__tests__/constants.test.js.map +1 -0
  26. package/dist/core/__tests__/context.test.d.ts +2 -0
  27. package/dist/core/__tests__/context.test.d.ts.map +1 -0
  28. package/dist/core/__tests__/context.test.js +120 -0
  29. package/dist/core/__tests__/context.test.js.map +1 -0
  30. package/dist/core/__tests__/environment.test.d.ts +2 -0
  31. package/dist/core/__tests__/environment.test.d.ts.map +1 -0
  32. package/dist/core/__tests__/environment.test.js +94 -0
  33. package/dist/core/__tests__/environment.test.js.map +1 -0
  34. package/dist/core/__tests__/permissions.test.d.ts +2 -0
  35. package/dist/core/__tests__/permissions.test.d.ts.map +1 -0
  36. package/dist/core/__tests__/permissions.test.js +66 -0
  37. package/dist/core/__tests__/permissions.test.js.map +1 -0
  38. package/dist/core/__tests__/registry.test.d.ts +2 -0
  39. package/dist/core/__tests__/registry.test.d.ts.map +1 -0
  40. package/dist/core/__tests__/registry.test.js +152 -0
  41. package/dist/core/__tests__/registry.test.js.map +1 -0
  42. package/dist/core/__tests__/streaming.test.d.ts +2 -0
  43. package/dist/core/__tests__/streaming.test.d.ts.map +1 -0
  44. package/dist/core/__tests__/streaming.test.js +54 -0
  45. package/dist/core/__tests__/streaming.test.js.map +1 -0
  46. package/dist/core/agent.d.ts +87 -0
  47. package/dist/core/agent.d.ts.map +1 -0
  48. package/dist/core/agent.js +711 -0
  49. package/dist/core/agent.js.map +1 -0
  50. package/dist/core/colors.d.ts +12 -0
  51. package/dist/core/colors.d.ts.map +1 -0
  52. package/dist/core/colors.js +37 -0
  53. package/dist/core/colors.js.map +1 -0
  54. package/dist/core/config.d.ts +13 -0
  55. package/dist/core/config.d.ts.map +1 -0
  56. package/dist/core/config.js +30 -0
  57. package/dist/core/config.js.map +1 -0
  58. package/dist/core/constants.d.ts +5 -0
  59. package/dist/core/constants.d.ts.map +1 -0
  60. package/dist/core/constants.js +26 -0
  61. package/dist/core/constants.js.map +1 -0
  62. package/dist/core/context.d.ts +18 -0
  63. package/dist/core/context.d.ts.map +1 -0
  64. package/dist/core/context.js +99 -0
  65. package/dist/core/context.js.map +1 -0
  66. package/dist/core/loader.d.ts +3 -0
  67. package/dist/core/loader.d.ts.map +1 -0
  68. package/dist/core/loader.js +39 -0
  69. package/dist/core/loader.js.map +1 -0
  70. package/dist/core/registry.d.ts +11 -0
  71. package/dist/core/registry.d.ts.map +1 -0
  72. package/dist/core/registry.js +112 -0
  73. package/dist/core/registry.js.map +1 -0
  74. package/dist/core/skills.d.ts +14 -0
  75. package/dist/core/skills.d.ts.map +1 -0
  76. package/dist/core/skills.js +100 -0
  77. package/dist/core/skills.js.map +1 -0
  78. package/dist/core/types.d.ts +64 -0
  79. package/dist/core/types.d.ts.map +1 -0
  80. package/dist/core/types.js +2 -0
  81. package/dist/core/types.js.map +1 -0
  82. package/dist/core/version.d.ts +2 -0
  83. package/dist/core/version.d.ts.map +1 -0
  84. package/dist/core/version.js +7 -0
  85. package/dist/core/version.js.map +1 -0
  86. package/dist/memory/__tests__/memory.test.d.ts +2 -0
  87. package/dist/memory/__tests__/memory.test.d.ts.map +1 -0
  88. package/dist/memory/__tests__/memory.test.js +196 -0
  89. package/dist/memory/__tests__/memory.test.js.map +1 -0
  90. package/dist/memory/memory.d.ts +41 -0
  91. package/dist/memory/memory.d.ts.map +1 -0
  92. package/dist/memory/memory.js +206 -0
  93. package/dist/memory/memory.js.map +1 -0
  94. package/dist/tools/__tests__/bash.test.d.ts +2 -0
  95. package/dist/tools/__tests__/bash.test.d.ts.map +1 -0
  96. package/dist/tools/__tests__/bash.test.js +58 -0
  97. package/dist/tools/__tests__/bash.test.js.map +1 -0
  98. package/dist/tools/__tests__/file.test.d.ts +2 -0
  99. package/dist/tools/__tests__/file.test.d.ts.map +1 -0
  100. package/dist/tools/__tests__/file.test.js +115 -0
  101. package/dist/tools/__tests__/file.test.js.map +1 -0
  102. package/dist/tools/__tests__/git.test.d.ts +2 -0
  103. package/dist/tools/__tests__/git.test.d.ts.map +1 -0
  104. package/dist/tools/__tests__/git.test.js +19 -0
  105. package/dist/tools/__tests__/git.test.js.map +1 -0
  106. package/dist/tools/__tests__/grep.test.d.ts +2 -0
  107. package/dist/tools/__tests__/grep.test.d.ts.map +1 -0
  108. package/dist/tools/__tests__/grep.test.js +36 -0
  109. package/dist/tools/__tests__/grep.test.js.map +1 -0
  110. package/dist/tools/__tests__/memory-tool.test.d.ts +2 -0
  111. package/dist/tools/__tests__/memory-tool.test.d.ts.map +1 -0
  112. package/dist/tools/__tests__/memory-tool.test.js +39 -0
  113. package/dist/tools/__tests__/memory-tool.test.js.map +1 -0
  114. package/dist/tools/__tests__/plan.test.d.ts +2 -0
  115. package/dist/tools/__tests__/plan.test.d.ts.map +1 -0
  116. package/dist/tools/__tests__/plan.test.js +81 -0
  117. package/dist/tools/__tests__/plan.test.js.map +1 -0
  118. package/dist/tools/__tests__/schemas.test.d.ts +2 -0
  119. package/dist/tools/__tests__/schemas.test.d.ts.map +1 -0
  120. package/dist/tools/__tests__/schemas.test.js +40 -0
  121. package/dist/tools/__tests__/schemas.test.js.map +1 -0
  122. package/dist/tools/__tests__/web.test.d.ts +2 -0
  123. package/dist/tools/__tests__/web.test.d.ts.map +1 -0
  124. package/dist/tools/__tests__/web.test.js +51 -0
  125. package/dist/tools/__tests__/web.test.js.map +1 -0
  126. package/dist/tools/bash.d.ts +6 -0
  127. package/dist/tools/bash.d.ts.map +1 -0
  128. package/dist/tools/bash.js +89 -0
  129. package/dist/tools/bash.js.map +1 -0
  130. package/dist/tools/file.d.ts +7 -0
  131. package/dist/tools/file.d.ts.map +1 -0
  132. package/dist/tools/file.js +224 -0
  133. package/dist/tools/file.js.map +1 -0
  134. package/dist/tools/git.d.ts +3 -0
  135. package/dist/tools/git.d.ts.map +1 -0
  136. package/dist/tools/git.js +220 -0
  137. package/dist/tools/git.js.map +1 -0
  138. package/dist/tools/grep.d.ts +8 -0
  139. package/dist/tools/grep.d.ts.map +1 -0
  140. package/dist/tools/grep.js +265 -0
  141. package/dist/tools/grep.js.map +1 -0
  142. package/dist/tools/memory.d.ts +3 -0
  143. package/dist/tools/memory.d.ts.map +1 -0
  144. package/dist/tools/memory.js +33 -0
  145. package/dist/tools/memory.js.map +1 -0
  146. package/dist/tools/plan.d.ts +3 -0
  147. package/dist/tools/plan.d.ts.map +1 -0
  148. package/dist/tools/plan.js +60 -0
  149. package/dist/tools/plan.js.map +1 -0
  150. package/dist/tools/skill.d.ts +6 -0
  151. package/dist/tools/skill.d.ts.map +1 -0
  152. package/dist/tools/skill.js +20 -0
  153. package/dist/tools/skill.js.map +1 -0
  154. package/dist/tools/web.d.ts +3 -0
  155. package/dist/tools/web.d.ts.map +1 -0
  156. package/dist/tools/web.js +187 -0
  157. package/dist/tools/web.js.map +1 -0
  158. package/package.json +48 -0
@@ -0,0 +1,100 @@
1
+ import { readFileSync, existsSync, readdirSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { pathToFileURL } from 'node:url';
4
+ import { AG_DIR } from './constants.js';
5
+ function parseFrontmatter(raw) {
6
+ const match = raw.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
7
+ if (!match)
8
+ return { meta: {}, body: raw };
9
+ const meta = {};
10
+ for (const line of match[1].split('\n')) {
11
+ const colon = line.indexOf(':');
12
+ if (colon === -1)
13
+ continue;
14
+ const key = line.slice(0, colon).trim();
15
+ const raw = line.slice(colon + 1).trim();
16
+ if (raw === 'true')
17
+ meta[key] = true;
18
+ else if (raw === 'false')
19
+ meta[key] = false;
20
+ else
21
+ meta[key] = raw;
22
+ }
23
+ return { meta, body: match[2].trim() };
24
+ }
25
+ function loadSkillsFromDir(dir) {
26
+ if (!existsSync(dir))
27
+ return [];
28
+ const skills = [];
29
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
30
+ if (!entry.isDirectory())
31
+ continue;
32
+ const skillDir = join(dir, entry.name);
33
+ const skillFile = join(skillDir, 'SKILL.md');
34
+ if (!existsSync(skillFile))
35
+ continue;
36
+ try {
37
+ const raw = readFileSync(skillFile, 'utf-8');
38
+ const { meta, body } = parseFrontmatter(raw);
39
+ if (!meta.name || !meta.description || typeof meta.name !== 'string' || typeof meta.description !== 'string')
40
+ continue;
41
+ skills.push({
42
+ name: meta.name,
43
+ description: meta.description,
44
+ hasTools: meta.tools === true,
45
+ always: meta.always === true,
46
+ content: body,
47
+ dir: skillDir,
48
+ });
49
+ }
50
+ catch (e) {
51
+ const msg = e instanceof Error ? e.message : String(e);
52
+ process.stderr.write(`Warning: skill ${entry.name} failed to load: ${msg}\n`);
53
+ }
54
+ }
55
+ return skills;
56
+ }
57
+ export function discoverSkills(cwd) {
58
+ const globalSkills = loadSkillsFromDir(join(AG_DIR, 'skills'));
59
+ const localSkills = loadSkillsFromDir(join(cwd, '.ag', 'skills'));
60
+ // Local overrides global by name
61
+ const byName = new Map();
62
+ for (const s of globalSkills)
63
+ byName.set(s.name, s);
64
+ for (const s of localSkills)
65
+ byName.set(s.name, s);
66
+ return Array.from(byName.values());
67
+ }
68
+ export function buildSkillCatalog(skills) {
69
+ if (skills.length === 0)
70
+ return '';
71
+ const lines = skills.map(s => `- ${s.name}: ${s.description}`);
72
+ return `<available-skills>\n${lines.join('\n')}\n</available-skills>`;
73
+ }
74
+ export function getAlwaysOnContent(skills) {
75
+ const always = skills.filter(s => s.always);
76
+ if (always.length === 0)
77
+ return '';
78
+ return always.map(s => `<skill name="${s.name}">\n${s.content}\n</skill>`).join('\n\n');
79
+ }
80
+ export async function loadSkillTools(skillDir) {
81
+ const toolsFile = join(skillDir, 'tools.mjs');
82
+ if (!existsSync(toolsFile))
83
+ return [];
84
+ try {
85
+ const mod = await import(pathToFileURL(toolsFile).href);
86
+ const exported = mod.default;
87
+ // Support single tool or array of tools
88
+ const items = Array.isArray(exported) ? exported : [exported];
89
+ return items.filter((t) => {
90
+ const tool = t;
91
+ return tool?.type === 'function' && tool?.function?.name && typeof tool?.execute === 'function';
92
+ });
93
+ }
94
+ catch (e) {
95
+ const msg = e instanceof Error ? e.message : String(e);
96
+ process.stderr.write(`Warning: skill tools failed to load from ${skillDir}: ${msg}\n`);
97
+ return [];
98
+ }
99
+ }
100
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAWxC,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAC9D,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC3C,MAAM,IAAI,GAAqC,EAAE,CAAC;IAClD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,SAAS;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,GAAG,KAAK,MAAM;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;aAChC,IAAI,GAAG,KAAK,OAAO;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;;YACvC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACvB,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9D,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAS;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,SAAS;QACrC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;gBAAE,SAAS;YACvH,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,IAAI,CAAC,IAAc;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAqB;gBACvC,QAAQ,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI;gBAC7B,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,IAAI;gBAC5B,OAAO,EAAE,IAAI;gBACb,GAAG,EAAE,QAAQ;aACd,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,KAAK,CAAC,IAAI,oBAAoB,GAAG,IAAI,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClE,iCAAiC;IACjC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,YAAY;QAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,WAAW;QAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACnD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/D,OAAO,uBAAuB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAmB;IACpD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAC;IACtC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC;QAC7B,wCAAwC;QACxC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC9D,OAAO,KAAK,CAAC,MAAM,CACjB,CAAC,CAAU,EAAE,EAAE;YACb,MAAM,IAAI,GAAG,CAA4B,CAAC;YAC1C,OAAO,IAAI,EAAE,IAAI,KAAK,UAAU,IAAK,IAAI,EAAE,QAAoC,EAAE,IAAI,IAAI,OAAO,IAAI,EAAE,OAAO,KAAK,UAAU,CAAC;QAC/H,CAAC,CACQ,CAAC;IACd,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,QAAQ,KAAK,GAAG,IAAI,CAAC,CAAC;QACvF,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,64 @@
1
+ export interface Message {
2
+ role: 'system' | 'user' | 'assistant' | 'tool';
3
+ content: string | null;
4
+ tool_calls?: ToolCall[];
5
+ tool_call_id?: string;
6
+ }
7
+ export interface ToolCall {
8
+ id: string;
9
+ type: 'function';
10
+ function: {
11
+ name: string;
12
+ arguments: string;
13
+ };
14
+ }
15
+ export interface Tool {
16
+ type: 'function';
17
+ function: ToolDefinition;
18
+ execute: (args: any) => Promise<string> | string;
19
+ }
20
+ export interface ToolDefinition {
21
+ name: string;
22
+ description: string;
23
+ parameters: {
24
+ type: 'object';
25
+ properties: Record<string, unknown>;
26
+ required: string[];
27
+ };
28
+ }
29
+ /** Return 'allow' to proceed, 'deny' to skip the tool call */
30
+ export type ConfirmToolCall = (toolName: string, args: Record<string, unknown>) => Promise<'allow' | 'deny'>;
31
+ export interface AgentConfig {
32
+ apiKey?: string;
33
+ model?: string;
34
+ baseURL?: string;
35
+ systemPrompt?: string;
36
+ maxIterations?: number;
37
+ cwd?: string;
38
+ extraTools?: Tool[];
39
+ stream?: boolean;
40
+ confirmToolCall?: ConfirmToolCall;
41
+ }
42
+ export interface StreamChunk {
43
+ type: 'thinking' | 'text' | 'tool_start' | 'tool_end' | 'done' | 'max_iterations';
44
+ content?: string;
45
+ toolName?: string;
46
+ toolCallId?: string;
47
+ success?: boolean;
48
+ }
49
+ export interface Usage {
50
+ prompt_tokens: number;
51
+ completion_tokens: number;
52
+ total_tokens: number;
53
+ }
54
+ export interface CLIOptions {
55
+ model?: string;
56
+ key?: string;
57
+ system?: string;
58
+ baseURL?: string;
59
+ maxIterations?: number;
60
+ help?: boolean;
61
+ stats?: boolean;
62
+ yes?: boolean;
63
+ }
64
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,cAAc,CAAC;IAEzB,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CAClD;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACzF;AAED,8DAA8D;AAC9D,MAAM,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;AAE7G,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,gBAAgB,CAAC;IAClF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,KAAK;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare const VERSION: string;
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/core/version.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,OAAO,EAAE,MAAoB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { join, dirname } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ const __dirname = dirname(fileURLToPath(import.meta.url));
5
+ const pkg = JSON.parse(readFileSync(join(__dirname, '..', '..', 'package.json'), 'utf-8'));
6
+ export const VERSION = pkg.version;
7
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/core/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAE3F,MAAM,CAAC,MAAM,OAAO,GAAW,GAAG,CAAC,OAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=memory.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.test.d.ts","sourceRoot":"","sources":["../../../src/memory/__tests__/memory.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,196 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { mkdirSync, rmSync, existsSync } from 'node:fs';
3
+ import { randomBytes } from 'node:crypto';
4
+ import { paths, loadGlobalMemory, saveGlobalMemory, appendGlobalMemory, loadProjectMemory, saveProjectMemory, appendProjectMemory, savePlan, loadPlan, listPlans, loadPlanByName, appendPlan, setActivePlan, getActivePlanName, loadContext, loadHistory, appendHistory, getStats, clearProject, clearAll, } from '../memory.js';
5
+ // memory.ts uses AG_DIR (~/.ag) internally keyed by md5(cwd).
6
+ // We use a unique fake cwd per test run so each test gets isolated project dirs.
7
+ const fakeCwd = `/tmp/__ag_test_${randomBytes(8).toString('hex')}__`;
8
+ let projectDir;
9
+ // Global memory (~/.ag/memory.md) is shared across all tests.
10
+ // Save/restore it around the entire test suite to avoid cross-test contamination.
11
+ let savedGlobalMemory;
12
+ beforeEach(() => {
13
+ // Ensure the fake cwd "exists" enough for paths() to derive a project dir
14
+ mkdirSync(fakeCwd, { recursive: true });
15
+ const p = paths(fakeCwd);
16
+ projectDir = p.projectDir;
17
+ // Snapshot global memory before each test
18
+ savedGlobalMemory = loadGlobalMemory(fakeCwd);
19
+ });
20
+ afterEach(() => {
21
+ // Restore global memory to pre-test state
22
+ saveGlobalMemory(savedGlobalMemory, fakeCwd);
23
+ // Clean up the project dir under ~/.ag/projects/
24
+ if (existsSync(projectDir))
25
+ rmSync(projectDir, { recursive: true });
26
+ if (existsSync(fakeCwd))
27
+ rmSync(fakeCwd, { recursive: true });
28
+ });
29
+ describe('paths', () => {
30
+ it('returns expected structure', () => {
31
+ const p = paths(fakeCwd);
32
+ expect(p.globalMemory).toContain('.ag/memory.md');
33
+ expect(p.projectMemory).toContain('memory.md');
34
+ expect(p.plansDir).toContain('plans');
35
+ expect(p.history).toContain('history.jsonl');
36
+ expect(existsSync(p.plansDir)).toBe(true);
37
+ });
38
+ });
39
+ describe('global memory', () => {
40
+ it('roundtrips save/load', () => {
41
+ saveGlobalMemory('test global content', fakeCwd);
42
+ expect(loadGlobalMemory(fakeCwd)).toBe('test global content');
43
+ });
44
+ it('appends with newline separator', () => {
45
+ saveGlobalMemory('line1', fakeCwd);
46
+ appendGlobalMemory('line2', fakeCwd);
47
+ expect(loadGlobalMemory(fakeCwd)).toBe('line1\nline2');
48
+ });
49
+ });
50
+ describe('project memory', () => {
51
+ it('roundtrips save/load', () => {
52
+ saveProjectMemory('project stuff', fakeCwd);
53
+ expect(loadProjectMemory(fakeCwd)).toBe('project stuff');
54
+ });
55
+ it('appends with newline separator', () => {
56
+ saveProjectMemory('first', fakeCwd);
57
+ appendProjectMemory('second', fakeCwd);
58
+ expect(loadProjectMemory(fakeCwd)).toBe('first\nsecond');
59
+ });
60
+ });
61
+ describe('plans', () => {
62
+ it('saves and lists plans', () => {
63
+ savePlan('Plan A content', 'plan-a', fakeCwd);
64
+ savePlan('Plan B content', 'plan-b', fakeCwd);
65
+ const plans = listPlans(fakeCwd);
66
+ expect(plans.length).toBe(2);
67
+ // Newest first
68
+ expect(plans[0].name).toContain('plan-b');
69
+ });
70
+ it('loads latest plan', () => {
71
+ savePlan('old plan', 'old', fakeCwd);
72
+ savePlan('new plan', 'new', fakeCwd);
73
+ expect(loadPlan(fakeCwd)).toBe('new plan');
74
+ });
75
+ it('loads plan by name', () => {
76
+ const filePath = savePlan('specific plan', 'specific', fakeCwd);
77
+ const name = filePath.split('/').pop().replace('.md', '');
78
+ expect(loadPlanByName(name, fakeCwd)).toBe('specific plan');
79
+ });
80
+ it('blocks path traversal in loadPlanByName', () => {
81
+ expect(loadPlanByName('../../etc/passwd', fakeCwd)).toBe('');
82
+ });
83
+ it('appends to latest plan', () => {
84
+ savePlan('base', 'append-test', fakeCwd);
85
+ appendPlan('\nmore content', fakeCwd);
86
+ expect(loadPlan(fakeCwd)).toContain('more content');
87
+ });
88
+ it('appendPlan creates new plan if none exist', () => {
89
+ appendPlan('first plan via append', fakeCwd);
90
+ expect(listPlans(fakeCwd).length).toBe(1);
91
+ expect(loadPlan(fakeCwd)).toContain('first plan via append');
92
+ });
93
+ it('setActivePlan switches current plan', () => {
94
+ savePlan('plan X', 'x', fakeCwd);
95
+ const planY = savePlan('plan Y', 'y', fakeCwd);
96
+ const plans = listPlans(fakeCwd);
97
+ const planXName = plans.find(p => p.name.includes('x')).name;
98
+ setActivePlan(planXName, fakeCwd);
99
+ expect(loadPlan(fakeCwd)).toBe('plan X');
100
+ expect(getActivePlanName(fakeCwd)).toBe(planXName);
101
+ });
102
+ });
103
+ describe('loadContext', () => {
104
+ it('builds system prompt with XML tags', () => {
105
+ saveGlobalMemory('global fact', fakeCwd);
106
+ saveProjectMemory('project fact', fakeCwd);
107
+ savePlan('the plan', 'ctx-test', fakeCwd);
108
+ const ctx = loadContext(fakeCwd);
109
+ expect(ctx).toContain('<global-memory>');
110
+ expect(ctx).toContain('global fact');
111
+ expect(ctx).toContain('<project-memory>');
112
+ expect(ctx).toContain('project fact');
113
+ expect(ctx).toContain('<current-plan>');
114
+ expect(ctx).toContain('the plan');
115
+ });
116
+ it('truncates at 4000 chars with [truncated] marker', () => {
117
+ const long = 'x'.repeat(5000);
118
+ saveProjectMemory(long, fakeCwd);
119
+ const ctx = loadContext(fakeCwd);
120
+ expect(ctx).toContain('[truncated]');
121
+ expect(ctx.length).toBeLessThan(long.length + 200);
122
+ });
123
+ it('returns empty string when no memory exists', () => {
124
+ expect(loadContext(fakeCwd)).toBe('');
125
+ });
126
+ });
127
+ describe('history', () => {
128
+ it('roundtrips append/load for user and assistant messages', () => {
129
+ appendHistory({ role: 'user', content: 'hello' }, fakeCwd);
130
+ appendHistory({ role: 'assistant', content: 'hi there' }, fakeCwd);
131
+ const history = loadHistory(fakeCwd);
132
+ expect(history.length).toBe(2);
133
+ expect(history[0].content).toBe('hello');
134
+ expect(history[1].content).toBe('hi there');
135
+ });
136
+ it('filters out tool messages', () => {
137
+ appendHistory({ role: 'user', content: 'do something' }, fakeCwd);
138
+ appendHistory({ role: 'assistant', content: '', tool_calls: [{ id: '1', type: 'function', function: { name: 'bash', arguments: '{}' } }] }, fakeCwd);
139
+ appendHistory({ role: 'tool', content: 'tool result', tool_call_id: '1' }, fakeCwd);
140
+ appendHistory({ role: 'assistant', content: 'done' }, fakeCwd);
141
+ const history = loadHistory(fakeCwd);
142
+ expect(history.length).toBe(2);
143
+ expect(history[0].content).toBe('do something');
144
+ expect(history[1].content).toBe('done');
145
+ });
146
+ it('respects limit parameter', () => {
147
+ for (let i = 0; i < 20; i++) {
148
+ appendHistory({ role: 'user', content: `msg ${i}` }, fakeCwd);
149
+ }
150
+ const history = loadHistory(fakeCwd, 5);
151
+ expect(history.length).toBe(5);
152
+ expect(history[4].content).toBe('msg 19');
153
+ });
154
+ it('returns empty array when no history', () => {
155
+ expect(loadHistory(fakeCwd)).toEqual([]);
156
+ });
157
+ });
158
+ describe('getStats', () => {
159
+ it('returns correct counts', () => {
160
+ const stats = getStats(fakeCwd);
161
+ expect(stats.globalMemory).toBe(false);
162
+ expect(stats.projectMemory).toBe(false);
163
+ expect(stats.planCount).toBe(0);
164
+ expect(stats.historyLines).toBe(0);
165
+ });
166
+ it('reflects saved data', () => {
167
+ saveProjectMemory('data', fakeCwd);
168
+ savePlan('plan', 'stat-test', fakeCwd);
169
+ appendHistory({ role: 'user', content: 'hi' }, fakeCwd);
170
+ const stats = getStats(fakeCwd);
171
+ expect(stats.projectMemory).toBe(true);
172
+ expect(stats.planCount).toBe(1);
173
+ expect(stats.historyLines).toBe(1);
174
+ });
175
+ });
176
+ describe('clearProject', () => {
177
+ it('clears project memory, plans, and history', () => {
178
+ saveProjectMemory('data', fakeCwd);
179
+ savePlan('plan', 'clear-test', fakeCwd);
180
+ appendHistory({ role: 'user', content: 'hi' }, fakeCwd);
181
+ clearProject(fakeCwd);
182
+ expect(loadProjectMemory(fakeCwd)).toBe('');
183
+ expect(listPlans(fakeCwd).length).toBe(0);
184
+ expect(loadHistory(fakeCwd)).toEqual([]);
185
+ });
186
+ });
187
+ describe('clearAll', () => {
188
+ it('clears everything including global memory', () => {
189
+ saveGlobalMemory('global', fakeCwd);
190
+ saveProjectMemory('project', fakeCwd);
191
+ clearAll(fakeCwd);
192
+ expect(loadGlobalMemory(fakeCwd)).toBe('');
193
+ expect(loadProjectMemory(fakeCwd)).toBe('');
194
+ });
195
+ });
196
+ //# sourceMappingURL=memory.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.test.js","sourceRoot":"","sources":["../../../src/memory/__tests__/memory.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { Message } from '../core/types.js';
2
+ export declare function paths(cwd?: string): {
3
+ globalMemory: string;
4
+ projectMemory: string;
5
+ plansDir: string;
6
+ history: string;
7
+ projectDir: string;
8
+ };
9
+ export declare function loadGlobalMemory(cwd?: string): string;
10
+ export declare function loadProjectMemory(cwd?: string): string;
11
+ export declare function loadPlan(cwd?: string): string;
12
+ /** List all plan files sorted newest first */
13
+ export declare function listPlans(cwd?: string): {
14
+ name: string;
15
+ path: string;
16
+ }[];
17
+ /** Load a specific plan by name */
18
+ export declare function loadPlanByName(name: string, cwd?: string): string;
19
+ /** Build a system prompt prefix from all memory tiers (capped to avoid context bloat) */
20
+ export declare function loadContext(cwd?: string): string;
21
+ /** Load recent user/assistant messages from history (for session continuity) */
22
+ export declare function loadHistory(cwd?: string, limit?: number): Message[];
23
+ export declare function saveGlobalMemory(content: string, cwd?: string): void;
24
+ export declare function appendGlobalMemory(content: string, cwd?: string): void;
25
+ export declare function saveProjectMemory(content: string, cwd?: string): void;
26
+ export declare function appendProjectMemory(content: string, cwd?: string): void;
27
+ export declare function setActivePlan(name: string, cwd?: string): void;
28
+ export declare function getActivePlanName(cwd?: string): string | null;
29
+ export declare function savePlan(content: string, name?: string, cwd?: string): string;
30
+ export declare function appendPlan(content: string, cwd?: string): string;
31
+ export declare function appendHistory(message: Message, cwd?: string): void;
32
+ export interface MemoryStats {
33
+ globalMemory: boolean;
34
+ projectMemory: boolean;
35
+ planCount: number;
36
+ historyLines: number;
37
+ }
38
+ export declare function getStats(cwd?: string): MemoryStats;
39
+ export declare function clearProject(cwd?: string): void;
40
+ export declare function clearAll(cwd?: string): void;
41
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/memory/memory.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAiB3C,wBAAgB,KAAK,CAAC,GAAG,GAAE,MAAsB;;;;;;EAahD;AAID,wBAAgB,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAA0C;AAChG,wBAAgB,iBAAiB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAA2C;AAClG,wBAAgB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,8CAA8C;AAC9C,wBAAgB,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAQxE;AAED,mCAAmC;AACnC,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAMjE;AAqBD,yFAAyF;AACzF,wBAAgB,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAqBhD;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,EAAE,CAc/D;AAID,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAEpE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAItE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAErE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAIvE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAG9D;AAED,wBAAgB,iBAAiB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI7D;AAOD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ7E;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAQhE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CASlE;AAID,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,CASlD;AAID,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAU/C;AAED,wBAAgB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAI3C"}