@animus-labs/cortex 0.2.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 (293) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +73 -0
  3. package/dist/budget-guard.d.ts +75 -0
  4. package/dist/budget-guard.d.ts.map +1 -0
  5. package/dist/budget-guard.js +142 -0
  6. package/dist/budget-guard.js.map +1 -0
  7. package/dist/compaction/compaction.d.ts +99 -0
  8. package/dist/compaction/compaction.d.ts.map +1 -0
  9. package/dist/compaction/compaction.js +302 -0
  10. package/dist/compaction/compaction.js.map +1 -0
  11. package/dist/compaction/failsafe.d.ts +57 -0
  12. package/dist/compaction/failsafe.d.ts.map +1 -0
  13. package/dist/compaction/failsafe.js +135 -0
  14. package/dist/compaction/failsafe.js.map +1 -0
  15. package/dist/compaction/index.d.ts +381 -0
  16. package/dist/compaction/index.d.ts.map +1 -0
  17. package/dist/compaction/index.js +979 -0
  18. package/dist/compaction/index.js.map +1 -0
  19. package/dist/compaction/microcompaction.d.ts +219 -0
  20. package/dist/compaction/microcompaction.d.ts.map +1 -0
  21. package/dist/compaction/microcompaction.js +536 -0
  22. package/dist/compaction/microcompaction.js.map +1 -0
  23. package/dist/compaction/observational/buffering.d.ts +225 -0
  24. package/dist/compaction/observational/buffering.d.ts.map +1 -0
  25. package/dist/compaction/observational/buffering.js +354 -0
  26. package/dist/compaction/observational/buffering.js.map +1 -0
  27. package/dist/compaction/observational/constants.d.ts +70 -0
  28. package/dist/compaction/observational/constants.d.ts.map +1 -0
  29. package/dist/compaction/observational/constants.js +507 -0
  30. package/dist/compaction/observational/constants.js.map +1 -0
  31. package/dist/compaction/observational/index.d.ts +219 -0
  32. package/dist/compaction/observational/index.d.ts.map +1 -0
  33. package/dist/compaction/observational/index.js +641 -0
  34. package/dist/compaction/observational/index.js.map +1 -0
  35. package/dist/compaction/observational/observer.d.ts +97 -0
  36. package/dist/compaction/observational/observer.d.ts.map +1 -0
  37. package/dist/compaction/observational/observer.js +424 -0
  38. package/dist/compaction/observational/observer.js.map +1 -0
  39. package/dist/compaction/observational/recall-tool.d.ts +27 -0
  40. package/dist/compaction/observational/recall-tool.d.ts.map +1 -0
  41. package/dist/compaction/observational/recall-tool.js +93 -0
  42. package/dist/compaction/observational/recall-tool.js.map +1 -0
  43. package/dist/compaction/observational/reflector.d.ts +94 -0
  44. package/dist/compaction/observational/reflector.d.ts.map +1 -0
  45. package/dist/compaction/observational/reflector.js +167 -0
  46. package/dist/compaction/observational/reflector.js.map +1 -0
  47. package/dist/compaction/observational/types.d.ts +271 -0
  48. package/dist/compaction/observational/types.d.ts.map +1 -0
  49. package/dist/compaction/observational/types.js +15 -0
  50. package/dist/compaction/observational/types.js.map +1 -0
  51. package/dist/context-manager.d.ts +134 -0
  52. package/dist/context-manager.d.ts.map +1 -0
  53. package/dist/context-manager.js +170 -0
  54. package/dist/context-manager.js.map +1 -0
  55. package/dist/cortex-agent.d.ts +1020 -0
  56. package/dist/cortex-agent.d.ts.map +1 -0
  57. package/dist/cortex-agent.js +3589 -0
  58. package/dist/cortex-agent.js.map +1 -0
  59. package/dist/error-classifier.d.ts +48 -0
  60. package/dist/error-classifier.d.ts.map +1 -0
  61. package/dist/error-classifier.js +152 -0
  62. package/dist/error-classifier.js.map +1 -0
  63. package/dist/event-bridge.d.ts +166 -0
  64. package/dist/event-bridge.d.ts.map +1 -0
  65. package/dist/event-bridge.js +381 -0
  66. package/dist/event-bridge.js.map +1 -0
  67. package/dist/index.d.ts +55 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +57 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/mcp-client.d.ts +119 -0
  72. package/dist/mcp-client.d.ts.map +1 -0
  73. package/dist/mcp-client.js +474 -0
  74. package/dist/mcp-client.js.map +1 -0
  75. package/dist/model-wrapper.d.ts +58 -0
  76. package/dist/model-wrapper.d.ts.map +1 -0
  77. package/dist/model-wrapper.js +86 -0
  78. package/dist/model-wrapper.js.map +1 -0
  79. package/dist/noop-logger.d.ts +4 -0
  80. package/dist/noop-logger.d.ts.map +1 -0
  81. package/dist/noop-logger.js +8 -0
  82. package/dist/noop-logger.js.map +1 -0
  83. package/dist/prompt-diagnostics.d.ts +47 -0
  84. package/dist/prompt-diagnostics.d.ts.map +1 -0
  85. package/dist/prompt-diagnostics.js +230 -0
  86. package/dist/prompt-diagnostics.js.map +1 -0
  87. package/dist/provider-manager.d.ts +224 -0
  88. package/dist/provider-manager.d.ts.map +1 -0
  89. package/dist/provider-manager.js +563 -0
  90. package/dist/provider-manager.js.map +1 -0
  91. package/dist/provider-registry.d.ts +115 -0
  92. package/dist/provider-registry.d.ts.map +1 -0
  93. package/dist/provider-registry.js +305 -0
  94. package/dist/provider-registry.js.map +1 -0
  95. package/dist/schema-converter.d.ts +20 -0
  96. package/dist/schema-converter.d.ts.map +1 -0
  97. package/dist/schema-converter.js +48 -0
  98. package/dist/schema-converter.js.map +1 -0
  99. package/dist/skill-preprocessor.d.ts +46 -0
  100. package/dist/skill-preprocessor.d.ts.map +1 -0
  101. package/dist/skill-preprocessor.js +237 -0
  102. package/dist/skill-preprocessor.js.map +1 -0
  103. package/dist/skill-registry.d.ts +107 -0
  104. package/dist/skill-registry.d.ts.map +1 -0
  105. package/dist/skill-registry.js +330 -0
  106. package/dist/skill-registry.js.map +1 -0
  107. package/dist/skill-tool.d.ts +54 -0
  108. package/dist/skill-tool.d.ts.map +1 -0
  109. package/dist/skill-tool.js +88 -0
  110. package/dist/skill-tool.js.map +1 -0
  111. package/dist/sub-agent-manager.d.ts +90 -0
  112. package/dist/sub-agent-manager.d.ts.map +1 -0
  113. package/dist/sub-agent-manager.js +192 -0
  114. package/dist/sub-agent-manager.js.map +1 -0
  115. package/dist/token-estimator.d.ts +23 -0
  116. package/dist/token-estimator.d.ts.map +1 -0
  117. package/dist/token-estimator.js +27 -0
  118. package/dist/token-estimator.js.map +1 -0
  119. package/dist/tool-contract.d.ts +68 -0
  120. package/dist/tool-contract.d.ts.map +1 -0
  121. package/dist/tool-contract.js +35 -0
  122. package/dist/tool-contract.js.map +1 -0
  123. package/dist/tool-result-persistence.d.ts +89 -0
  124. package/dist/tool-result-persistence.d.ts.map +1 -0
  125. package/dist/tool-result-persistence.js +152 -0
  126. package/dist/tool-result-persistence.js.map +1 -0
  127. package/dist/tools/bash/index.d.ts +71 -0
  128. package/dist/tools/bash/index.d.ts.map +1 -0
  129. package/dist/tools/bash/index.js +485 -0
  130. package/dist/tools/bash/index.js.map +1 -0
  131. package/dist/tools/bash/interactive.d.ts +47 -0
  132. package/dist/tools/bash/interactive.d.ts.map +1 -0
  133. package/dist/tools/bash/interactive.js +262 -0
  134. package/dist/tools/bash/interactive.js.map +1 -0
  135. package/dist/tools/bash/safety.d.ts +149 -0
  136. package/dist/tools/bash/safety.d.ts.map +1 -0
  137. package/dist/tools/bash/safety.js +1116 -0
  138. package/dist/tools/bash/safety.js.map +1 -0
  139. package/dist/tools/edit.d.ts +57 -0
  140. package/dist/tools/edit.d.ts.map +1 -0
  141. package/dist/tools/edit.js +310 -0
  142. package/dist/tools/edit.js.map +1 -0
  143. package/dist/tools/glob.d.ts +34 -0
  144. package/dist/tools/glob.d.ts.map +1 -0
  145. package/dist/tools/glob.js +268 -0
  146. package/dist/tools/glob.js.map +1 -0
  147. package/dist/tools/grep.d.ts +53 -0
  148. package/dist/tools/grep.d.ts.map +1 -0
  149. package/dist/tools/grep.js +673 -0
  150. package/dist/tools/grep.js.map +1 -0
  151. package/dist/tools/index.d.ts +62 -0
  152. package/dist/tools/index.d.ts.map +1 -0
  153. package/dist/tools/index.js +52 -0
  154. package/dist/tools/index.js.map +1 -0
  155. package/dist/tools/read.d.ts +43 -0
  156. package/dist/tools/read.d.ts.map +1 -0
  157. package/dist/tools/read.js +459 -0
  158. package/dist/tools/read.js.map +1 -0
  159. package/dist/tools/runtime.d.ts +62 -0
  160. package/dist/tools/runtime.d.ts.map +1 -0
  161. package/dist/tools/runtime.js +116 -0
  162. package/dist/tools/runtime.js.map +1 -0
  163. package/dist/tools/shared/cwd-tracker.d.ts +32 -0
  164. package/dist/tools/shared/cwd-tracker.d.ts.map +1 -0
  165. package/dist/tools/shared/cwd-tracker.js +44 -0
  166. package/dist/tools/shared/cwd-tracker.js.map +1 -0
  167. package/dist/tools/shared/edit-history.d.ts +55 -0
  168. package/dist/tools/shared/edit-history.d.ts.map +1 -0
  169. package/dist/tools/shared/edit-history.js +72 -0
  170. package/dist/tools/shared/edit-history.js.map +1 -0
  171. package/dist/tools/shared/edit-matcher.d.ts +83 -0
  172. package/dist/tools/shared/edit-matcher.d.ts.map +1 -0
  173. package/dist/tools/shared/edit-matcher.js +359 -0
  174. package/dist/tools/shared/edit-matcher.js.map +1 -0
  175. package/dist/tools/shared/file-mutation-lock.d.ts +22 -0
  176. package/dist/tools/shared/file-mutation-lock.d.ts.map +1 -0
  177. package/dist/tools/shared/file-mutation-lock.js +35 -0
  178. package/dist/tools/shared/file-mutation-lock.js.map +1 -0
  179. package/dist/tools/shared/gitignore.d.ts +17 -0
  180. package/dist/tools/shared/gitignore.d.ts.map +1 -0
  181. package/dist/tools/shared/gitignore.js +59 -0
  182. package/dist/tools/shared/gitignore.js.map +1 -0
  183. package/dist/tools/shared/pdf-extractor.d.ts +96 -0
  184. package/dist/tools/shared/pdf-extractor.d.ts.map +1 -0
  185. package/dist/tools/shared/pdf-extractor.js +196 -0
  186. package/dist/tools/shared/pdf-extractor.js.map +1 -0
  187. package/dist/tools/shared/read-registry.d.ts +66 -0
  188. package/dist/tools/shared/read-registry.d.ts.map +1 -0
  189. package/dist/tools/shared/read-registry.js +65 -0
  190. package/dist/tools/shared/read-registry.js.map +1 -0
  191. package/dist/tools/shared/safe-env.d.ts +18 -0
  192. package/dist/tools/shared/safe-env.d.ts.map +1 -0
  193. package/dist/tools/shared/safe-env.js +70 -0
  194. package/dist/tools/shared/safe-env.js.map +1 -0
  195. package/dist/tools/sub-agent.d.ts +91 -0
  196. package/dist/tools/sub-agent.d.ts.map +1 -0
  197. package/dist/tools/sub-agent.js +89 -0
  198. package/dist/tools/sub-agent.js.map +1 -0
  199. package/dist/tools/task-output.d.ts +38 -0
  200. package/dist/tools/task-output.d.ts.map +1 -0
  201. package/dist/tools/task-output.js +186 -0
  202. package/dist/tools/task-output.js.map +1 -0
  203. package/dist/tools/tool-search/index.d.ts +40 -0
  204. package/dist/tools/tool-search/index.d.ts.map +1 -0
  205. package/dist/tools/tool-search/index.js +110 -0
  206. package/dist/tools/tool-search/index.js.map +1 -0
  207. package/dist/tools/tool-search/registry.d.ts +82 -0
  208. package/dist/tools/tool-search/registry.d.ts.map +1 -0
  209. package/dist/tools/tool-search/registry.js +238 -0
  210. package/dist/tools/tool-search/registry.js.map +1 -0
  211. package/dist/tools/undo-edit.d.ts +51 -0
  212. package/dist/tools/undo-edit.d.ts.map +1 -0
  213. package/dist/tools/undo-edit.js +231 -0
  214. package/dist/tools/undo-edit.js.map +1 -0
  215. package/dist/tools/web-fetch/cache.d.ts +49 -0
  216. package/dist/tools/web-fetch/cache.d.ts.map +1 -0
  217. package/dist/tools/web-fetch/cache.js +89 -0
  218. package/dist/tools/web-fetch/cache.js.map +1 -0
  219. package/dist/tools/web-fetch/index.d.ts +53 -0
  220. package/dist/tools/web-fetch/index.d.ts.map +1 -0
  221. package/dist/tools/web-fetch/index.js +513 -0
  222. package/dist/tools/web-fetch/index.js.map +1 -0
  223. package/dist/tools/write.d.ts +59 -0
  224. package/dist/tools/write.d.ts.map +1 -0
  225. package/dist/tools/write.js +316 -0
  226. package/dist/tools/write.js.map +1 -0
  227. package/dist/types.d.ts +881 -0
  228. package/dist/types.d.ts.map +1 -0
  229. package/dist/types.js +16 -0
  230. package/dist/types.js.map +1 -0
  231. package/dist/working-tags.d.ts +44 -0
  232. package/dist/working-tags.d.ts.map +1 -0
  233. package/dist/working-tags.js +103 -0
  234. package/dist/working-tags.js.map +1 -0
  235. package/package.json +87 -0
  236. package/src/budget-guard.ts +170 -0
  237. package/src/compaction/compaction.ts +386 -0
  238. package/src/compaction/failsafe.ts +185 -0
  239. package/src/compaction/index.ts +1199 -0
  240. package/src/compaction/microcompaction.ts +709 -0
  241. package/src/compaction/observational/buffering.ts +430 -0
  242. package/src/compaction/observational/constants.ts +532 -0
  243. package/src/compaction/observational/index.ts +837 -0
  244. package/src/compaction/observational/observer.ts +510 -0
  245. package/src/compaction/observational/recall-tool.ts +130 -0
  246. package/src/compaction/observational/reflector.ts +221 -0
  247. package/src/compaction/observational/types.ts +343 -0
  248. package/src/context-manager.ts +237 -0
  249. package/src/cortex-agent.ts +4297 -0
  250. package/src/error-classifier.ts +199 -0
  251. package/src/event-bridge.ts +508 -0
  252. package/src/index.ts +292 -0
  253. package/src/mcp-client.ts +582 -0
  254. package/src/model-wrapper.ts +128 -0
  255. package/src/noop-logger.ts +9 -0
  256. package/src/prompt-diagnostics.ts +296 -0
  257. package/src/provider-manager.ts +823 -0
  258. package/src/provider-registry.ts +386 -0
  259. package/src/schema-converter.ts +51 -0
  260. package/src/skill-preprocessor.ts +314 -0
  261. package/src/skill-registry.ts +378 -0
  262. package/src/skill-tool.ts +130 -0
  263. package/src/sub-agent-manager.ts +236 -0
  264. package/src/token-estimator.ts +26 -0
  265. package/src/tool-contract.ts +113 -0
  266. package/src/tool-result-persistence.ts +197 -0
  267. package/src/tools/bash/index.ts +633 -0
  268. package/src/tools/bash/interactive.ts +302 -0
  269. package/src/tools/bash/safety.ts +1297 -0
  270. package/src/tools/edit.ts +422 -0
  271. package/src/tools/glob.ts +330 -0
  272. package/src/tools/grep.ts +819 -0
  273. package/src/tools/index.ts +110 -0
  274. package/src/tools/read.ts +580 -0
  275. package/src/tools/runtime.ts +173 -0
  276. package/src/tools/shared/cwd-tracker.ts +50 -0
  277. package/src/tools/shared/edit-history.ts +96 -0
  278. package/src/tools/shared/edit-matcher.ts +457 -0
  279. package/src/tools/shared/file-mutation-lock.ts +40 -0
  280. package/src/tools/shared/gitignore.ts +61 -0
  281. package/src/tools/shared/pdf-extractor.ts +290 -0
  282. package/src/tools/shared/read-registry.ts +93 -0
  283. package/src/tools/shared/safe-env.ts +82 -0
  284. package/src/tools/sub-agent.ts +171 -0
  285. package/src/tools/task-output.ts +236 -0
  286. package/src/tools/tool-search/index.ts +167 -0
  287. package/src/tools/tool-search/registry.ts +278 -0
  288. package/src/tools/undo-edit.ts +314 -0
  289. package/src/tools/web-fetch/cache.ts +112 -0
  290. package/src/tools/web-fetch/index.ts +604 -0
  291. package/src/tools/write.ts +385 -0
  292. package/src/types.ts +1057 -0
  293. package/src/working-tags.ts +118 -0
@@ -0,0 +1,237 @@
1
+ /**
2
+ * Skill Preprocessor: processes SKILL.md body at load time.
3
+ *
4
+ * Three preprocessor types run in order:
5
+ * 1. Variable substitution: ${VAR}, $ARGUMENTS, $N
6
+ * 2. Shell commands: !`command` (parallel execution)
7
+ * 3. Script execution: !{script: path} (parallel execution)
8
+ *
9
+ * Shell commands use the same shell selection logic as the Bash tool
10
+ * (PowerShell on Windows, bash/zsh on Unix).
11
+ *
12
+ * References:
13
+ * - docs/cortex/skill-system.md
14
+ * - docs/cortex/cross-platform-considerations.md
15
+ */
16
+ import { execFile } from 'node:child_process';
17
+ import * as fs from 'node:fs';
18
+ import * as path from 'node:path';
19
+ import { pathToFileURL } from 'node:url';
20
+ // ---------------------------------------------------------------------------
21
+ // Constants
22
+ // ---------------------------------------------------------------------------
23
+ /** Timeout for each shell command or script execution. */
24
+ const COMMAND_TIMEOUT_MS = 10_000;
25
+ // ---------------------------------------------------------------------------
26
+ // Regex patterns
27
+ // ---------------------------------------------------------------------------
28
+ /** Match !`command` patterns (shell command markers). */
29
+ const SHELL_COMMAND_PATTERN = /^!`([^`]+)`$/gm;
30
+ /** Match !{script: path} or !{script: path, key: value, ...} patterns. */
31
+ const SCRIPT_PATTERN = /^!\{script:\s*([^,}]+)(?:,\s*([^}]+))?\}$/gm;
32
+ /** Match ${VAR} variable references. */
33
+ const VARIABLE_PATTERN = /\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g;
34
+ /** Match $N positional argument references (1-9). */
35
+ const POSITIONAL_PATTERN = /\$([1-9])/g;
36
+ /** Match $ARGUMENTS reference. */
37
+ const ARGUMENTS_PATTERN = /\$ARGUMENTS/g;
38
+ function getShellConfig() {
39
+ if (process.platform === 'win32') {
40
+ // PowerShell on Windows
41
+ const psCore = process.env['ProgramFiles'];
42
+ const psCorePath = psCore ? `${psCore}\\PowerShell\\7\\pwsh.exe` : null;
43
+ // Try pwsh (PowerShell 7+) first, fall back to Windows PowerShell
44
+ try {
45
+ if (psCorePath) {
46
+ fs.accessSync(psCorePath);
47
+ return { shell: psCorePath, args: ['-NoProfile', '-NonInteractive', '-Command'] };
48
+ }
49
+ }
50
+ catch {
51
+ // Fall through
52
+ }
53
+ return {
54
+ shell: 'powershell.exe',
55
+ args: ['-NoProfile', '-NonInteractive', '-Command'],
56
+ };
57
+ }
58
+ // Unix: use $SHELL, falling back to /bin/bash or /bin/sh
59
+ const userShell = process.env['SHELL'];
60
+ if (userShell && !userShell.endsWith('/fish')) {
61
+ return { shell: userShell, args: ['-c'] };
62
+ }
63
+ // Fall back
64
+ try {
65
+ fs.accessSync('/bin/bash');
66
+ return { shell: '/bin/bash', args: ['-c'] };
67
+ }
68
+ catch {
69
+ return { shell: '/bin/sh', args: ['-c'] };
70
+ }
71
+ }
72
+ // ---------------------------------------------------------------------------
73
+ // Preprocessor implementation
74
+ // ---------------------------------------------------------------------------
75
+ /**
76
+ * Preprocess a SKILL.md body. Runs all three stages:
77
+ * 1. Variable substitution
78
+ * 2. Shell commands and scripts (in parallel)
79
+ * 3. Assemble final content
80
+ */
81
+ export async function preprocessSkillBody(body, config) {
82
+ // Stage 1: Variable substitution (runs first so vars are available
83
+ // inside shell commands and script arguments)
84
+ let content = substituteVariables(body, config.variables);
85
+ // Stage 2: Collect shell command and script markers, execute in parallel
86
+ const shellReplacements = [];
87
+ const scriptReplacements = [];
88
+ // Find shell commands
89
+ let match;
90
+ const shellRegex = new RegExp(SHELL_COMMAND_PATTERN.source, 'gm');
91
+ while ((match = shellRegex.exec(content)) !== null) {
92
+ const fullMatch = match[0];
93
+ const command = match[1];
94
+ shellReplacements.push({
95
+ marker: fullMatch,
96
+ promise: executeShellCommand(command, config.skillDir),
97
+ });
98
+ }
99
+ // Find scripts
100
+ const scriptRegex = new RegExp(SCRIPT_PATTERN.source, 'gm');
101
+ while ((match = scriptRegex.exec(content)) !== null) {
102
+ const fullMatch = match[0];
103
+ const scriptPath = match[1].trim();
104
+ const extraArgs = match[2]?.trim() ?? '';
105
+ scriptReplacements.push({
106
+ marker: fullMatch,
107
+ promise: executeScript(scriptPath, extraArgs, config),
108
+ });
109
+ }
110
+ // Execute all in parallel
111
+ const allReplacements = [...shellReplacements, ...scriptReplacements];
112
+ if (allReplacements.length > 0) {
113
+ const results = await Promise.allSettled(allReplacements.map(r => r.promise));
114
+ for (let i = 0; i < allReplacements.length; i++) {
115
+ const replacement = allReplacements[i];
116
+ const result = results[i];
117
+ const output = result.status === 'fulfilled'
118
+ ? result.value
119
+ : `[Error: ${result.reason instanceof Error ? result.reason.message : String(result.reason)}]`;
120
+ // Use callback to prevent $& and other replacement patterns in output
121
+ content = content.replace(replacement.marker, () => output);
122
+ }
123
+ }
124
+ return content;
125
+ }
126
+ /**
127
+ * Substitute ${VAR}, $ARGUMENTS, and $N references with their values.
128
+ */
129
+ export function substituteVariables(body, variables) {
130
+ let result = body;
131
+ // Replace $ARGUMENTS first (before ${} to avoid partial matching)
132
+ result = result.replace(ARGUMENTS_PATTERN, () => variables['ARGUMENTS'] ?? '');
133
+ // Replace positional $1..$9
134
+ result = result.replace(POSITIONAL_PATTERN, (_match, num) => {
135
+ return variables[num] ?? '';
136
+ });
137
+ // Replace ${VAR} references
138
+ result = result.replace(VARIABLE_PATTERN, (_match, varName) => {
139
+ return variables[varName] ?? '';
140
+ });
141
+ return result;
142
+ }
143
+ /**
144
+ * Execute a shell command and return stdout.
145
+ * Uses the same shell selection as the Bash tool.
146
+ */
147
+ export function executeShellCommand(command, cwd) {
148
+ return new Promise((resolve) => {
149
+ const shellConfig = getShellConfig();
150
+ // Use execFile to invoke the shell directly with the command as an argument.
151
+ // This avoids double-shell invocation (exec spawns a shell around our shell).
152
+ const args = [...shellConfig.args, command];
153
+ const child = execFile(shellConfig.shell, args, {
154
+ cwd,
155
+ timeout: COMMAND_TIMEOUT_MS,
156
+ maxBuffer: 1024 * 1024, // 1MB
157
+ env: process.env,
158
+ }, (error, stdout, _stderr) => {
159
+ if (error) {
160
+ if ('killed' in error && error.killed) {
161
+ resolve('[Error: command timed out]');
162
+ }
163
+ else {
164
+ const exitCode = 'code' in error && error['code'] != null
165
+ ? error['code']
166
+ : 'unknown';
167
+ resolve(`[Error: command failed with exit code ${exitCode}]`);
168
+ }
169
+ return;
170
+ }
171
+ resolve(stdout.trim());
172
+ });
173
+ child.on('error', () => {
174
+ resolve('[Error: failed to execute command]');
175
+ });
176
+ });
177
+ }
178
+ /**
179
+ * Execute a JavaScript script and return its output.
180
+ * Scripts are loaded via dynamic import() and must export a default
181
+ * async function.
182
+ */
183
+ export async function executeScript(scriptPath, extraArgsStr, config) {
184
+ const absolutePath = path.isAbsolute(scriptPath)
185
+ ? scriptPath
186
+ : path.resolve(config.skillDir, scriptPath);
187
+ // Security: reject paths that escape the skill directory
188
+ const relative = path.relative(config.skillDir, absolutePath);
189
+ if (relative.startsWith('..') || path.isAbsolute(relative)) {
190
+ return '[Error: script path must be within the skill directory]';
191
+ }
192
+ // Parse extra args from "key: value, key2: value2" format
193
+ const scriptArgs = {};
194
+ if (extraArgsStr) {
195
+ const pairs = extraArgsStr.split(',');
196
+ for (const pair of pairs) {
197
+ const colonIdx = pair.indexOf(':');
198
+ if (colonIdx > 0) {
199
+ const key = pair.substring(0, colonIdx).trim();
200
+ const value = pair.substring(colonIdx + 1).trim();
201
+ scriptArgs[key] = value;
202
+ }
203
+ }
204
+ }
205
+ // Build context: consumer context spread first, then Cortex built-ins
206
+ // override (skillDir and scriptArgs are Cortex-owned and cannot be
207
+ // overridden by consumer). args/rawArgs come pre-merged in
208
+ // config.scriptContext from the registry with the same precedence.
209
+ const ctx = {
210
+ ...config.scriptContext,
211
+ skillDir: config.skillDir,
212
+ scriptArgs,
213
+ };
214
+ // Execute with timeout
215
+ const timeoutPromise = new Promise((resolve) => {
216
+ setTimeout(() => resolve('[Error: script timed out]'), COMMAND_TIMEOUT_MS);
217
+ });
218
+ const executionPromise = (async () => {
219
+ try {
220
+ // Dynamic import of the script file
221
+ const fileUrl = pathToFileURL(absolutePath).href;
222
+ const mod = await import(fileUrl);
223
+ const fn = mod.default ?? mod;
224
+ if (typeof fn !== 'function') {
225
+ return '[Error: script does not export a function]';
226
+ }
227
+ const result = await fn(ctx);
228
+ return typeof result === 'string' ? result : String(result ?? '');
229
+ }
230
+ catch (err) {
231
+ const message = err instanceof Error ? err.message : String(err);
232
+ return `[Error: script failed: ${message}]`;
233
+ }
234
+ })();
235
+ return Promise.race([executionPromise, timeoutPromise]);
236
+ }
237
+ //# sourceMappingURL=skill-preprocessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-preprocessor.js","sourceRoot":"","sources":["../src/skill-preprocessor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * SkillRegistry: manages all known skills for the Cortex agent.
3
+ *
4
+ * Config-driven: the consumer provides paths to SKILL.md files from any
5
+ * source (plugins, user directories, built-ins). The registry does not
6
+ * scan directories.
7
+ *
8
+ * Skills are parsed at registration time (frontmatter extracted, body
9
+ * deferred to load time). The registry produces a compact summary for
10
+ * the load_skill tool description.
11
+ *
12
+ * References:
13
+ * - docs/cortex/skill-system.md
14
+ * - docs/cortex/plans/phase-4-sub-agents-and-skills.md
15
+ */
16
+ import type { SkillConfig, SkillEntry } from './types.js';
17
+ /**
18
+ * Parse YAML frontmatter from a SKILL.md file.
19
+ * Expects --- delimited frontmatter at the start of the file.
20
+ *
21
+ * This is a lightweight parser that handles the common SKILL.md patterns
22
+ * without requiring a full YAML library. It handles:
23
+ * - Simple key: value pairs
24
+ * - Multi-line strings (using > or |)
25
+ * - Nested metadata maps
26
+ * - Space-delimited lists (for allowed-tools)
27
+ */
28
+ declare function parseFrontmatter(content: string): {
29
+ frontmatter: Record<string, unknown>;
30
+ body: string;
31
+ };
32
+ export declare class SkillRegistry {
33
+ private readonly entries;
34
+ /** Consumer-provided variables for ${VAR} substitution. */
35
+ private preprocessorVariables;
36
+ /** Consumer-provided context for !{script:} executions. */
37
+ private scriptContext;
38
+ /**
39
+ * Callback fired when skills are added or removed.
40
+ * CortexAgent sets this to rebuild the load_skill tool description.
41
+ */
42
+ onChange: (() => void) | null;
43
+ constructor(configs?: SkillConfig[]);
44
+ /**
45
+ * Add a skill from a SKILL.md file path.
46
+ * Reads and parses the frontmatter synchronously at registration time.
47
+ *
48
+ * If a skill with the same name already exists, the new one replaces it
49
+ * (last-registered wins).
50
+ */
51
+ addSkill(config: SkillConfig): void;
52
+ /**
53
+ * Remove a skill by name.
54
+ */
55
+ removeSkill(name: string): void;
56
+ /**
57
+ * Get a skill entry by name.
58
+ */
59
+ getEntry(name: string): SkillEntry | null;
60
+ /**
61
+ * Get all registered skill entries.
62
+ */
63
+ getAll(): SkillEntry[];
64
+ /**
65
+ * Get the number of registered skills.
66
+ */
67
+ get size(): number;
68
+ /**
69
+ * Generate the available skills summary for the load_skill tool description.
70
+ *
71
+ * Skills with disable-model-invocation: true (modelInvocable: false) are
72
+ * excluded from the summary. The agent cannot see or auto-load them.
73
+ *
74
+ * Format: XML listing with name, source, and description per skill.
75
+ * Each skill consumes approximately 100 tokens.
76
+ */
77
+ getAvailableSkillsSummary(maxTokens?: number): string;
78
+ /**
79
+ * Read and preprocess a skill's full body content.
80
+ * Runs variable substitution, shell commands, and scripts.
81
+ *
82
+ * @param name - The skill name
83
+ * @param callArgs - Arguments from the load_skill tool call
84
+ * @returns The preprocessed skill body
85
+ * @throws Error if the skill is not found
86
+ */
87
+ getSkillBody(name: string, callArgs: {
88
+ args: string[];
89
+ rawArgs: string;
90
+ }): Promise<string>;
91
+ /**
92
+ * Set consumer-provided variables for ${VAR} substitution.
93
+ * Called each tick during GATHER to update runtime values.
94
+ */
95
+ setPreprocessorVariables(variables: Record<string, string>): void;
96
+ /**
97
+ * Set consumer-provided context for !{script:} executions.
98
+ * Called each tick during GATHER to update runtime values.
99
+ */
100
+ setScriptContext(context: Record<string, unknown>): void;
101
+ /**
102
+ * Clear all entries. Called during destroy.
103
+ */
104
+ clear(): void;
105
+ }
106
+ export { parseFrontmatter };
107
+ //# sourceMappingURL=skill-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-registry.d.ts","sourceRoot":"","sources":["../src/skill-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAO1D;;;;;;;;;;GAUG;AACH,iBAAS,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CA6FjG;AAMD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IAEzD,2DAA2D;IAC3D,OAAO,CAAC,qBAAqB,CAA8B;IAE3D,2DAA2D;IAC3D,OAAO,CAAC,aAAa,CAA+B;IAEpD;;;OAGG;IACH,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAQ;gBAEzB,OAAO,CAAC,EAAE,WAAW,EAAE;IAQnC;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAsCnC;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO/B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAIzC;;OAEG;IACH,MAAM,IAAI,UAAU,EAAE;IAItB;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;;;;OAQG;IACH,yBAAyB,CAAC,SAAS,SAA2B,GAAG,MAAM;IA6CvE;;;;;;;;OAQG;IACG,YAAY,CAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC,MAAM,CAAC;IAkDlB;;;OAGG;IACH,wBAAwB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAIjE;;;OAGG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIxD;;OAEG;IACH,KAAK,IAAI,IAAI;CAKd;AAGD,OAAO,EAAE,gBAAgB,EAAE,CAAC"}