mach6-core 1.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 (245) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +454 -0
  3. package/dist/agent/context-monitor.d.ts +40 -0
  4. package/dist/agent/context-monitor.d.ts.map +1 -0
  5. package/dist/agent/context-monitor.js +138 -0
  6. package/dist/agent/context-monitor.js.map +1 -0
  7. package/dist/agent/context.d.ts +8 -0
  8. package/dist/agent/context.d.ts.map +1 -0
  9. package/dist/agent/context.js +197 -0
  10. package/dist/agent/context.js.map +1 -0
  11. package/dist/agent/runner.d.ts +42 -0
  12. package/dist/agent/runner.d.ts.map +1 -0
  13. package/dist/agent/runner.js +168 -0
  14. package/dist/agent/runner.js.map +1 -0
  15. package/dist/agent/system-prompt.d.ts +10 -0
  16. package/dist/agent/system-prompt.d.ts.map +1 -0
  17. package/dist/agent/system-prompt.js +120 -0
  18. package/dist/agent/system-prompt.js.map +1 -0
  19. package/dist/boot/sequence.d.ts +34 -0
  20. package/dist/boot/sequence.d.ts.map +1 -0
  21. package/dist/boot/sequence.js +103 -0
  22. package/dist/boot/sequence.js.map +1 -0
  23. package/dist/channels/__test__/integration.test.d.ts +8 -0
  24. package/dist/channels/__test__/integration.test.d.ts.map +1 -0
  25. package/dist/channels/__test__/integration.test.js +221 -0
  26. package/dist/channels/__test__/integration.test.js.map +1 -0
  27. package/dist/channels/adapter.d.ts +53 -0
  28. package/dist/channels/adapter.d.ts.map +1 -0
  29. package/dist/channels/adapter.js +164 -0
  30. package/dist/channels/adapter.js.map +1 -0
  31. package/dist/channels/adapters/discord.d.ts +49 -0
  32. package/dist/channels/adapters/discord.d.ts.map +1 -0
  33. package/dist/channels/adapters/discord.js +382 -0
  34. package/dist/channels/adapters/discord.js.map +1 -0
  35. package/dist/channels/adapters/whatsapp.d.ts +59 -0
  36. package/dist/channels/adapters/whatsapp.d.ts.map +1 -0
  37. package/dist/channels/adapters/whatsapp.js +503 -0
  38. package/dist/channels/adapters/whatsapp.js.map +1 -0
  39. package/dist/channels/bus.d.ts +55 -0
  40. package/dist/channels/bus.d.ts.map +1 -0
  41. package/dist/channels/bus.js +307 -0
  42. package/dist/channels/bus.js.map +1 -0
  43. package/dist/channels/formatter.d.ts +16 -0
  44. package/dist/channels/formatter.d.ts.map +1 -0
  45. package/dist/channels/formatter.js +226 -0
  46. package/dist/channels/formatter.js.map +1 -0
  47. package/dist/channels/presence.d.ts +67 -0
  48. package/dist/channels/presence.d.ts.map +1 -0
  49. package/dist/channels/presence.js +209 -0
  50. package/dist/channels/presence.js.map +1 -0
  51. package/dist/channels/registry.d.ts +57 -0
  52. package/dist/channels/registry.d.ts.map +1 -0
  53. package/dist/channels/registry.js +159 -0
  54. package/dist/channels/registry.js.map +1 -0
  55. package/dist/channels/router.d.ts +49 -0
  56. package/dist/channels/router.d.ts.map +1 -0
  57. package/dist/channels/router.js +244 -0
  58. package/dist/channels/router.js.map +1 -0
  59. package/dist/channels/types.d.ts +279 -0
  60. package/dist/channels/types.d.ts.map +1 -0
  61. package/dist/channels/types.js +67 -0
  62. package/dist/channels/types.js.map +1 -0
  63. package/dist/cli/brand.d.ts +71 -0
  64. package/dist/cli/brand.d.ts.map +1 -0
  65. package/dist/cli/brand.js +194 -0
  66. package/dist/cli/brand.js.map +1 -0
  67. package/dist/cli/wizard.d.ts +8 -0
  68. package/dist/cli/wizard.d.ts.map +1 -0
  69. package/dist/cli/wizard.js +520 -0
  70. package/dist/cli/wizard.js.map +1 -0
  71. package/dist/config/config.d.ts +47 -0
  72. package/dist/config/config.d.ts.map +1 -0
  73. package/dist/config/config.js +63 -0
  74. package/dist/config/config.js.map +1 -0
  75. package/dist/config/validator.d.ts +18 -0
  76. package/dist/config/validator.d.ts.map +1 -0
  77. package/dist/config/validator.js +92 -0
  78. package/dist/config/validator.js.map +1 -0
  79. package/dist/cron/budget.d.ts +39 -0
  80. package/dist/cron/budget.d.ts.map +1 -0
  81. package/dist/cron/budget.js +98 -0
  82. package/dist/cron/budget.js.map +1 -0
  83. package/dist/formatters/markdown.d.ts +6 -0
  84. package/dist/formatters/markdown.d.ts.map +1 -0
  85. package/dist/formatters/markdown.js +85 -0
  86. package/dist/formatters/markdown.js.map +1 -0
  87. package/dist/gateway/daemon.d.ts +97 -0
  88. package/dist/gateway/daemon.d.ts.map +1 -0
  89. package/dist/gateway/daemon.js +772 -0
  90. package/dist/gateway/daemon.js.map +1 -0
  91. package/dist/heartbeat/scheduler.d.ts +45 -0
  92. package/dist/heartbeat/scheduler.d.ts.map +1 -0
  93. package/dist/heartbeat/scheduler.js +102 -0
  94. package/dist/heartbeat/scheduler.js.map +1 -0
  95. package/dist/index.d.ts +3 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/index.js +305 -0
  98. package/dist/index.js.map +1 -0
  99. package/dist/memory/integrity.d.ts +37 -0
  100. package/dist/memory/integrity.d.ts.map +1 -0
  101. package/dist/memory/integrity.js +108 -0
  102. package/dist/memory/integrity.js.map +1 -0
  103. package/dist/providers/anthropic.d.ts +3 -0
  104. package/dist/providers/anthropic.d.ts.map +1 -0
  105. package/dist/providers/anthropic.js +232 -0
  106. package/dist/providers/anthropic.js.map +1 -0
  107. package/dist/providers/diagnostics.d.ts +18 -0
  108. package/dist/providers/diagnostics.d.ts.map +1 -0
  109. package/dist/providers/diagnostics.js +87 -0
  110. package/dist/providers/diagnostics.js.map +1 -0
  111. package/dist/providers/github-copilot.d.ts +3 -0
  112. package/dist/providers/github-copilot.d.ts.map +1 -0
  113. package/dist/providers/github-copilot.js +145 -0
  114. package/dist/providers/github-copilot.js.map +1 -0
  115. package/dist/providers/gladius.d.ts +3 -0
  116. package/dist/providers/gladius.d.ts.map +1 -0
  117. package/dist/providers/gladius.js +16 -0
  118. package/dist/providers/gladius.js.map +1 -0
  119. package/dist/providers/openai.d.ts +3 -0
  120. package/dist/providers/openai.d.ts.map +1 -0
  121. package/dist/providers/openai.js +161 -0
  122. package/dist/providers/openai.js.map +1 -0
  123. package/dist/providers/retry.d.ts +2 -0
  124. package/dist/providers/retry.d.ts.map +1 -0
  125. package/dist/providers/retry.js +50 -0
  126. package/dist/providers/retry.js.map +1 -0
  127. package/dist/providers/types.d.ts +78 -0
  128. package/dist/providers/types.d.ts.map +1 -0
  129. package/dist/providers/types.js +3 -0
  130. package/dist/providers/types.js.map +1 -0
  131. package/dist/security/sanitizer.d.ts +26 -0
  132. package/dist/security/sanitizer.d.ts.map +1 -0
  133. package/dist/security/sanitizer.js +115 -0
  134. package/dist/security/sanitizer.js.map +1 -0
  135. package/dist/sessions/manager.d.ts +40 -0
  136. package/dist/sessions/manager.d.ts.map +1 -0
  137. package/dist/sessions/manager.js +255 -0
  138. package/dist/sessions/manager.js.map +1 -0
  139. package/dist/sessions/queue.d.ts +41 -0
  140. package/dist/sessions/queue.d.ts.map +1 -0
  141. package/dist/sessions/queue.js +93 -0
  142. package/dist/sessions/queue.js.map +1 -0
  143. package/dist/sessions/store.d.ts +12 -0
  144. package/dist/sessions/store.d.ts.map +1 -0
  145. package/dist/sessions/store.js +74 -0
  146. package/dist/sessions/store.js.map +1 -0
  147. package/dist/sessions/sub-agent.d.ts +18 -0
  148. package/dist/sessions/sub-agent.d.ts.map +1 -0
  149. package/dist/sessions/sub-agent.js +117 -0
  150. package/dist/sessions/sub-agent.js.map +1 -0
  151. package/dist/sessions/types.d.ts +48 -0
  152. package/dist/sessions/types.d.ts.map +1 -0
  153. package/dist/sessions/types.js +3 -0
  154. package/dist/sessions/types.js.map +1 -0
  155. package/dist/test/channel-integration.d.ts +10 -0
  156. package/dist/test/channel-integration.d.ts.map +1 -0
  157. package/dist/test/channel-integration.js +226 -0
  158. package/dist/test/channel-integration.js.map +1 -0
  159. package/dist/test/prompt-test.d.ts +2 -0
  160. package/dist/test/prompt-test.d.ts.map +1 -0
  161. package/dist/test/prompt-test.js +33 -0
  162. package/dist/test/prompt-test.js.map +1 -0
  163. package/dist/test/smoke.d.ts +8 -0
  164. package/dist/test/smoke.d.ts.map +1 -0
  165. package/dist/test/smoke.js +134 -0
  166. package/dist/test/smoke.js.map +1 -0
  167. package/dist/tools/builtin/comb.d.ts +4 -0
  168. package/dist/tools/builtin/comb.d.ts.map +1 -0
  169. package/dist/tools/builtin/comb.js +50 -0
  170. package/dist/tools/builtin/comb.js.map +1 -0
  171. package/dist/tools/builtin/edit.d.ts +3 -0
  172. package/dist/tools/builtin/edit.d.ts.map +1 -0
  173. package/dist/tools/builtin/edit.js +42 -0
  174. package/dist/tools/builtin/edit.js.map +1 -0
  175. package/dist/tools/builtin/exec.d.ts +3 -0
  176. package/dist/tools/builtin/exec.d.ts.map +1 -0
  177. package/dist/tools/builtin/exec.js +75 -0
  178. package/dist/tools/builtin/exec.js.map +1 -0
  179. package/dist/tools/builtin/image.d.ts +3 -0
  180. package/dist/tools/builtin/image.d.ts.map +1 -0
  181. package/dist/tools/builtin/image.js +208 -0
  182. package/dist/tools/builtin/image.js.map +1 -0
  183. package/dist/tools/builtin/memory.d.ts +3 -0
  184. package/dist/tools/builtin/memory.d.ts.map +1 -0
  185. package/dist/tools/builtin/memory.js +36 -0
  186. package/dist/tools/builtin/memory.js.map +1 -0
  187. package/dist/tools/builtin/message.d.ts +13 -0
  188. package/dist/tools/builtin/message.d.ts.map +1 -0
  189. package/dist/tools/builtin/message.js +330 -0
  190. package/dist/tools/builtin/message.js.map +1 -0
  191. package/dist/tools/builtin/process.d.ts +43 -0
  192. package/dist/tools/builtin/process.d.ts.map +1 -0
  193. package/dist/tools/builtin/process.js +178 -0
  194. package/dist/tools/builtin/process.js.map +1 -0
  195. package/dist/tools/builtin/read.d.ts +3 -0
  196. package/dist/tools/builtin/read.d.ts.map +1 -0
  197. package/dist/tools/builtin/read.js +36 -0
  198. package/dist/tools/builtin/read.js.map +1 -0
  199. package/dist/tools/builtin/spawn.d.ts +8 -0
  200. package/dist/tools/builtin/spawn.d.ts.map +1 -0
  201. package/dist/tools/builtin/spawn.js +90 -0
  202. package/dist/tools/builtin/spawn.js.map +1 -0
  203. package/dist/tools/builtin/tts.d.ts +3 -0
  204. package/dist/tools/builtin/tts.d.ts.map +1 -0
  205. package/dist/tools/builtin/tts.js +77 -0
  206. package/dist/tools/builtin/tts.js.map +1 -0
  207. package/dist/tools/builtin/web-fetch.d.ts +3 -0
  208. package/dist/tools/builtin/web-fetch.d.ts.map +1 -0
  209. package/dist/tools/builtin/web-fetch.js +46 -0
  210. package/dist/tools/builtin/web-fetch.js.map +1 -0
  211. package/dist/tools/builtin/write.d.ts +3 -0
  212. package/dist/tools/builtin/write.d.ts.map +1 -0
  213. package/dist/tools/builtin/write.js +31 -0
  214. package/dist/tools/builtin/write.js.map +1 -0
  215. package/dist/tools/mcp-bridge.d.ts +42 -0
  216. package/dist/tools/mcp-bridge.d.ts.map +1 -0
  217. package/dist/tools/mcp-bridge.js +198 -0
  218. package/dist/tools/mcp-bridge.js.map +1 -0
  219. package/dist/tools/policy.d.ts +57 -0
  220. package/dist/tools/policy.d.ts.map +1 -0
  221. package/dist/tools/policy.js +106 -0
  222. package/dist/tools/policy.js.map +1 -0
  223. package/dist/tools/registry.d.ts +15 -0
  224. package/dist/tools/registry.d.ts.map +1 -0
  225. package/dist/tools/registry.js +41 -0
  226. package/dist/tools/registry.js.map +1 -0
  227. package/dist/tools/sandbox.d.ts +91 -0
  228. package/dist/tools/sandbox.d.ts.map +1 -0
  229. package/dist/tools/sandbox.js +279 -0
  230. package/dist/tools/sandbox.js.map +1 -0
  231. package/dist/tools/types.d.ts +23 -0
  232. package/dist/tools/types.d.ts.map +1 -0
  233. package/dist/tools/types.js +3 -0
  234. package/dist/tools/types.js.map +1 -0
  235. package/dist/web/http-api.d.ts +61 -0
  236. package/dist/web/http-api.d.ts.map +1 -0
  237. package/dist/web/http-api.js +200 -0
  238. package/dist/web/http-api.js.map +1 -0
  239. package/dist/web/server.d.ts +7 -0
  240. package/dist/web/server.d.ts.map +1 -0
  241. package/dist/web/server.js +396 -0
  242. package/dist/web/server.js.map +1 -0
  243. package/mach6.example.json +50 -0
  244. package/package.json +58 -0
  245. package/web/index.html +1370 -0
@@ -0,0 +1,42 @@
1
+ // Mach6 — Builtin tool: surgical file editing
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ export const editTool = {
5
+ name: 'edit',
6
+ description: 'Edit a file by replacing exact text. The oldText must match exactly (including whitespace). Use for precise, surgical edits.',
7
+ parameters: {
8
+ type: 'object',
9
+ properties: {
10
+ path: { type: 'string', description: 'Path to the file to edit' },
11
+ oldText: { type: 'string', description: 'Exact text to find and replace (must match exactly)' },
12
+ newText: { type: 'string', description: 'New text to replace the old text with' },
13
+ },
14
+ required: ['path', 'oldText', 'newText'],
15
+ },
16
+ async execute(input) {
17
+ const filePath = path.resolve(input.path);
18
+ const oldText = input.oldText;
19
+ const newText = input.newText;
20
+ if (!fs.existsSync(filePath))
21
+ return `Error: File not found: ${filePath}`;
22
+ const content = fs.readFileSync(filePath, 'utf-8');
23
+ const idx = content.indexOf(oldText);
24
+ if (idx === -1) {
25
+ // Try to help: show nearby content
26
+ const lines = content.split('\n');
27
+ const preview = lines.slice(0, 10).join('\n');
28
+ return `Error: oldText not found in ${filePath}. File starts with:\n${preview}`;
29
+ }
30
+ // Check for multiple matches
31
+ const secondIdx = content.indexOf(oldText, idx + 1);
32
+ if (secondIdx !== -1) {
33
+ return `Error: oldText matches multiple locations in ${filePath}. Make the match more specific.`;
34
+ }
35
+ const updated = content.slice(0, idx) + newText + content.slice(idx + oldText.length);
36
+ fs.writeFileSync(filePath, updated);
37
+ const oldLines = oldText.split('\n').length;
38
+ const newLines = newText.split('\n').length;
39
+ return `Edited ${filePath}: replaced ${oldLines} line(s) with ${newLines} line(s)`;
40
+ },
41
+ };
42
+ //# sourceMappingURL=edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../../src/tools/builtin/edit.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAE9C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,MAAM,CAAC,MAAM,QAAQ,GAAmB;IACtC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,8HAA8H;IAC3I,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;YACjE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qDAAqD,EAAE;YAC/F,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE;SAClF;QACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;KACzC;IACD,KAAK,CAAC,OAAO,CAAC,KAAK;QACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAc,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAiB,CAAC;QACxC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAiB,CAAC;QAExC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,0BAA0B,QAAQ,EAAE,CAAC;QAE1E,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,mCAAmC;YACnC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9C,OAAO,+BAA+B,QAAQ,wBAAwB,OAAO,EAAE,CAAC;QAClF,CAAC;QAED,6BAA6B;QAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QACpD,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;YACrB,OAAO,gDAAgD,QAAQ,iCAAiC,CAAC;QACnG,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QACtF,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAC5C,OAAO,UAAU,QAAQ,cAAc,QAAQ,iBAAiB,QAAQ,UAAU,CAAC;IACrF,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDefinition } from '../types.js';
2
+ export declare const execTool: ToolDefinition;
3
+ //# sourceMappingURL=exec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/exec.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,QAAQ,EAAE,cA6EtB,CAAC"}
@@ -0,0 +1,75 @@
1
+ // Mach6 — Builtin tool: exec shell commands (enhanced with background + PTY)
2
+ import { spawn } from 'node:child_process';
3
+ import { getProcessManager } from './process.js';
4
+ export const execTool = {
5
+ name: 'exec',
6
+ description: 'Execute a shell command and return its output (stdout + stderr). Set background=true to run in background (returns process ID for polling).',
7
+ parameters: {
8
+ type: 'object',
9
+ properties: {
10
+ command: { type: 'string', description: 'Shell command to execute' },
11
+ workdir: { type: 'string', description: 'Working directory (defaults to cwd)' },
12
+ timeout: { type: 'number', description: 'Timeout in seconds (default 30, ignored if background)' },
13
+ background: { type: 'boolean', description: 'Run in background (returns process ID)' },
14
+ pty: { type: 'boolean', description: 'Wrap in pseudo-TTY via script command' },
15
+ },
16
+ required: ['command'],
17
+ },
18
+ async execute(input) {
19
+ const command = input.command;
20
+ const workdir = input.workdir ?? process.cwd();
21
+ const background = input.background ?? false;
22
+ const pty = input.pty ?? false;
23
+ // Self-kill guard: prevent AVA from stopping/restarting her own service or rewriting the ava script
24
+ const SELF_KILL_PATTERNS = [
25
+ /systemctl\s+(stop|restart|disable)\s+mach6/i,
26
+ /kill\s+.*mach6|pkill.*mach6/i,
27
+ />\s*\/home\/adam\/\.local\/bin\/ava/,
28
+ /write.*\/home\/adam\/\.local\/bin\/ava/i,
29
+ ];
30
+ for (const pat of SELF_KILL_PATTERNS) {
31
+ if (pat.test(command)) {
32
+ return `Error: Cannot restart/kill the gateway service from within the agent. Use the 'ava restart' CLI command from a terminal instead. This is a safety guard to prevent self-termination.`;
33
+ }
34
+ }
35
+ // Background mode: delegate to process manager
36
+ if (background) {
37
+ const mgr = getProcessManager();
38
+ const p = mgr.start(command, workdir);
39
+ return JSON.stringify({ processId: p.id, pid: p.pid, status: 'running' });
40
+ }
41
+ const timeoutMs = (input.timeout ?? 30) * 1000;
42
+ // PTY wrapping: use `script` to allocate a pseudo-terminal
43
+ const actualCommand = pty
44
+ ? `script -qec ${JSON.stringify(command)} /dev/null`
45
+ : command;
46
+ return new Promise((resolve) => {
47
+ const chunks = [];
48
+ const proc = spawn('sh', ['-c', actualCommand], {
49
+ cwd: workdir,
50
+ stdio: ['ignore', 'pipe', 'pipe'],
51
+ env: { ...process.env, TERM: pty ? 'xterm-256color' : (process.env.TERM ?? 'dumb') },
52
+ });
53
+ const timer = setTimeout(() => {
54
+ proc.kill('SIGKILL');
55
+ resolve(`Error: Command timed out after ${timeoutMs / 1000}s\n${Buffer.concat(chunks).toString('utf-8')}`);
56
+ }, timeoutMs);
57
+ proc.stdout.on('data', (d) => chunks.push(d));
58
+ proc.stderr.on('data', (d) => chunks.push(d));
59
+ proc.on('close', (code) => {
60
+ clearTimeout(timer);
61
+ let output = Buffer.concat(chunks).toString('utf-8');
62
+ if (output.length > 100_000)
63
+ output = output.slice(0, 100_000) + '\n... (truncated)';
64
+ if (code !== 0)
65
+ output += `\nExit code: ${code}`;
66
+ resolve(output);
67
+ });
68
+ proc.on('error', (err) => {
69
+ clearTimeout(timer);
70
+ resolve(`Error: ${err.message}`);
71
+ });
72
+ });
73
+ },
74
+ };
75
+ //# sourceMappingURL=exec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../src/tools/builtin/exec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDefinition } from '../types.js';
2
+ export declare const imageTool: ToolDefinition;
3
+ //# sourceMappingURL=image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/image.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA0KlD,eAAO,MAAM,SAAS,EAAE,cAgDvB,CAAC"}
@@ -0,0 +1,208 @@
1
+ // Mach6 — Builtin tool: vision analysis
2
+ // Routes through GitHub Copilot (OpenAI-compatible proxy) for vision.
3
+ // NO direct Anthropic/OpenAI API calls — we pay for Copilot, use Copilot.
4
+ import fs from 'node:fs';
5
+ import os from 'node:os';
6
+ import path from 'node:path';
7
+ import { execSync } from 'node:child_process';
8
+ // ── Copilot token resolution (mirrors github-copilot.ts provider) ──
9
+ const COPILOT_TOKEN_URL = 'https://api.github.com/copilot_internal/v2/token';
10
+ const DEFAULT_COPILOT_BASE = 'https://api.individual.githubcopilot.com';
11
+ let cachedToken = null;
12
+ function tokenCachePath() {
13
+ return path.join(os.homedir(), '.mach6', 'credentials', 'github-copilot.token.json');
14
+ }
15
+ function loadCachedToken() {
16
+ try {
17
+ const data = JSON.parse(fs.readFileSync(tokenCachePath(), 'utf-8'));
18
+ if (data?.token && data?.expiresAt)
19
+ return data;
20
+ }
21
+ catch { /* ignore */ }
22
+ return null;
23
+ }
24
+ function saveCachedToken(t) {
25
+ try {
26
+ const p = tokenCachePath();
27
+ fs.mkdirSync(path.dirname(p), { recursive: true });
28
+ fs.writeFileSync(p, JSON.stringify(t, null, 2));
29
+ }
30
+ catch { /* best effort */ }
31
+ }
32
+ function isUsable(t) {
33
+ return t.expiresAt - Date.now() > 5 * 60 * 1000;
34
+ }
35
+ function deriveBaseUrl(token) {
36
+ const match = token.match(/(?:^|;)\s*proxy-ep=([^;\s]+)/i);
37
+ const ep = match?.[1]?.trim();
38
+ if (!ep)
39
+ return DEFAULT_COPILOT_BASE;
40
+ const host = ep.replace(/^https?:\/\//, '').replace(/^proxy\./i, 'api.');
41
+ return `https://${host}`;
42
+ }
43
+ async function resolveGitHubToken() {
44
+ const home = os.homedir();
45
+ const copilotEnv = process.env.COPILOT_GITHUB_TOKEN;
46
+ if (copilotEnv?.trim())
47
+ return copilotEnv.trim();
48
+ const copilotCliPath = path.join(home, '.copilot-cli-access-token');
49
+ try {
50
+ const cliToken = fs.readFileSync(copilotCliPath, 'utf-8').trim();
51
+ if (cliToken)
52
+ return cliToken;
53
+ }
54
+ catch { /* not found */ }
55
+ const envToken = process.env.GH_TOKEN ?? process.env.GITHUB_TOKEN;
56
+ if (envToken?.trim())
57
+ return envToken.trim();
58
+ // Unix/macOS hosts.json
59
+ const hostsPath = path.join(home, '.config', 'github-copilot', 'hosts.json');
60
+ try {
61
+ const hosts = JSON.parse(fs.readFileSync(hostsPath, 'utf-8'));
62
+ for (const key of Object.keys(hosts)) {
63
+ if (hosts[key]?.oauth_token)
64
+ return hosts[key].oauth_token;
65
+ }
66
+ }
67
+ catch { /* not found */ }
68
+ // Windows: %APPDATA%\github-copilot\hosts.json
69
+ if (process.platform === 'win32') {
70
+ const appData = process.env.APPDATA ?? path.join(home, 'AppData', 'Roaming');
71
+ const winHostsPath = path.join(appData, 'github-copilot', 'hosts.json');
72
+ try {
73
+ const hosts = JSON.parse(fs.readFileSync(winHostsPath, 'utf-8'));
74
+ for (const key of Object.keys(hosts)) {
75
+ if (hosts[key]?.oauth_token)
76
+ return hosts[key].oauth_token;
77
+ }
78
+ }
79
+ catch { /* not found */ }
80
+ }
81
+ // Last resort: gh CLI
82
+ try {
83
+ const token = execSync('gh auth token', { encoding: 'utf-8', timeout: 5000 }).trim();
84
+ if (token)
85
+ return token;
86
+ }
87
+ catch { /* gh not available */ }
88
+ throw new Error('No GitHub token found for Copilot vision');
89
+ }
90
+ async function getCopilotToken() {
91
+ if (cachedToken && isUsable(cachedToken)) {
92
+ return { token: cachedToken.token, baseUrl: deriveBaseUrl(cachedToken.token) };
93
+ }
94
+ const disk = loadCachedToken();
95
+ if (disk && isUsable(disk)) {
96
+ cachedToken = disk;
97
+ return { token: disk.token, baseUrl: deriveBaseUrl(disk.token) };
98
+ }
99
+ const ghToken = await resolveGitHubToken();
100
+ const res = await fetch(COPILOT_TOKEN_URL, {
101
+ method: 'GET',
102
+ headers: { Accept: 'application/json', Authorization: `Bearer ${ghToken}` },
103
+ signal: AbortSignal.timeout(15_000),
104
+ });
105
+ if (!res.ok)
106
+ throw new Error(`Copilot token exchange failed: HTTP ${res.status}`);
107
+ const json = await res.json();
108
+ const token = json.token;
109
+ let expiresAt = json.expires_at;
110
+ if (expiresAt < 10_000_000_000)
111
+ expiresAt *= 1000;
112
+ const entry = { token, expiresAt };
113
+ cachedToken = entry;
114
+ saveCachedToken(entry);
115
+ return { token, baseUrl: deriveBaseUrl(token) };
116
+ }
117
+ // ── Vision call through Copilot proxy ──
118
+ async function callCopilotVision(base64, mediaType, prompt) {
119
+ const { token, baseUrl } = await getCopilotToken();
120
+ // Copilot proxy uses OpenAI-compatible format, no /v1 prefix
121
+ const endpoint = baseUrl.includes('githubcopilot.com')
122
+ ? `${baseUrl}/chat/completions`
123
+ : `${baseUrl}/v1/chat/completions`;
124
+ const res = await fetch(endpoint, {
125
+ method: 'POST',
126
+ headers: {
127
+ 'Content-Type': 'application/json',
128
+ 'Authorization': `Bearer ${token}`,
129
+ 'Editor-Version': 'vscode/1.96.2',
130
+ 'User-Agent': 'GitHubCopilotChat/0.26.7',
131
+ 'Copilot-Integration-Id': 'vscode-chat',
132
+ 'Openai-Intent': 'conversation-panel',
133
+ },
134
+ body: JSON.stringify({
135
+ model: 'gpt-4o',
136
+ max_tokens: 1024,
137
+ stream: false,
138
+ messages: [{
139
+ role: 'user',
140
+ content: [
141
+ {
142
+ type: 'image_url',
143
+ image_url: { url: `data:${mediaType};base64,${base64}` },
144
+ },
145
+ { type: 'text', text: prompt },
146
+ ],
147
+ }],
148
+ }),
149
+ signal: AbortSignal.timeout(60_000),
150
+ });
151
+ if (!res.ok) {
152
+ const errText = await res.text();
153
+ return `Error: Copilot Vision API returned ${res.status}: ${errText}`;
154
+ }
155
+ const data = await res.json();
156
+ return data.choices?.[0]?.message?.content ?? 'No analysis returned.';
157
+ }
158
+ // ── Tool definition ──
159
+ export const imageTool = {
160
+ name: 'image',
161
+ description: 'Analyze an image with a vision model. Accepts a local file path or URL. Returns the model\'s analysis.',
162
+ parameters: {
163
+ type: 'object',
164
+ properties: {
165
+ image: { type: 'string', description: 'Image path (local file) or URL' },
166
+ prompt: { type: 'string', description: 'What to analyze or ask about the image (default: "Describe this image")' },
167
+ },
168
+ required: ['image'],
169
+ },
170
+ async execute(input) {
171
+ const imagePath = input.image;
172
+ const prompt = input.prompt ?? 'Describe this image in detail.';
173
+ // ── Resolve image to base64 ──
174
+ let imageBase64;
175
+ let mediaType;
176
+ if (imagePath.startsWith('http://') || imagePath.startsWith('https://')) {
177
+ try {
178
+ const res = await fetch(imagePath, { signal: AbortSignal.timeout(30_000) });
179
+ if (!res.ok)
180
+ return `Error: Failed to fetch image: HTTP ${res.status}`;
181
+ const buffer = Buffer.from(await res.arrayBuffer());
182
+ imageBase64 = buffer.toString('base64');
183
+ mediaType = res.headers.get('content-type') ?? 'image/jpeg';
184
+ }
185
+ catch (err) {
186
+ return `Error: Failed to fetch image: ${err instanceof Error ? err.message : String(err)}`;
187
+ }
188
+ }
189
+ else {
190
+ const resolved = path.resolve(imagePath);
191
+ if (!fs.existsSync(resolved))
192
+ return `Error: Image not found: ${resolved}`;
193
+ const stat = fs.statSync(resolved);
194
+ if (stat.size > 20 * 1024 * 1024)
195
+ return `Error: Image too large (${(stat.size / 1024 / 1024).toFixed(1)}MB, max 20MB)`;
196
+ const ext = path.extname(resolved).toLowerCase();
197
+ const mimeMap = {
198
+ '.jpg': 'image/jpeg', '.jpeg': 'image/jpeg', '.png': 'image/png',
199
+ '.gif': 'image/gif', '.webp': 'image/webp', '.svg': 'image/svg+xml',
200
+ };
201
+ mediaType = mimeMap[ext] ?? 'image/png';
202
+ imageBase64 = fs.readFileSync(resolved).toString('base64');
203
+ }
204
+ // ── Call vision through Copilot ──
205
+ return await callCopilotVision(imageBase64, mediaType, prompt);
206
+ },
207
+ };
208
+ //# sourceMappingURL=image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.js","sourceRoot":"","sources":["../../../src/tools/builtin/image.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDefinition } from '../types.js';
2
+ export declare const memorySearchTool: ToolDefinition;
3
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/memory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAOlD,eAAO,MAAM,gBAAgB,EAAE,cA2B9B,CAAC"}
@@ -0,0 +1,36 @@
1
+ // Mach6 — HEKTOR memory search tool
2
+ import { execSync } from 'node:child_process';
3
+ // Resolve paths from MACH6_WORKSPACE env var (set by daemon) or fallback to cwd
4
+ function getWorkspace() {
5
+ return process.env.MACH6_WORKSPACE ?? process.cwd();
6
+ }
7
+ export const memorySearchTool = {
8
+ name: 'memory_search',
9
+ description: 'Search enterprise memory using HEKTOR (BM25 + vector hybrid search). Returns semantically relevant results from indexed files.',
10
+ parameters: {
11
+ type: 'object',
12
+ properties: {
13
+ query: { type: 'string', description: 'Search query' },
14
+ mode: { type: 'string', description: 'Search mode: bm25, vector, or hybrid (default)', enum: ['bm25', 'vector', 'hybrid'] },
15
+ k: { type: 'number', description: 'Number of results (default 5)' },
16
+ },
17
+ required: ['query'],
18
+ },
19
+ async execute(input) {
20
+ const query = String(input.query ?? '');
21
+ const mode = String(input.mode ?? 'hybrid');
22
+ const k = Number(input.k ?? 5);
23
+ const ws = getWorkspace();
24
+ try {
25
+ const venv = `source ${ws}/.hektor-env/bin/activate`;
26
+ const script = `python3 ${ws}/.ava-memory/ava_memory_fast.py`;
27
+ const cmd = `${venv} && ${script} search "${query.replace(/"/g, '\\"')}" --mode ${mode} -k ${k}`;
28
+ const out = execSync(cmd, { encoding: 'utf-8', timeout: 30000, shell: '/bin/bash' });
29
+ return out.trim() || 'No results found.';
30
+ }
31
+ catch (err) {
32
+ return JSON.stringify({ error: err instanceof Error ? err.message : String(err) });
33
+ }
34
+ },
35
+ };
36
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/tools/builtin/memory.ts"],"names":[],"mappings":"AAAA,oCAAoC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,gFAAgF;AAChF,SAAS,YAAY;IACnB,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC9C,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,gIAAgI;IAC7I,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;YACtD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gDAAgD,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE;YAC3H,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+BAA+B,EAAE;SACpE;QACD,QAAQ,EAAE,CAAC,OAAO,CAAC;KACpB;IACD,KAAK,CAAC,OAAO,CAAC,KAAK;QACjB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/B,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,UAAU,EAAE,2BAA2B,CAAC;YACrD,MAAM,MAAM,GAAG,WAAW,EAAE,iCAAiC,CAAC;YAC9D,MAAM,GAAG,GAAG,GAAG,IAAI,OAAO,MAAM,YAAY,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,IAAI,OAAO,CAAC,EAAE,CAAC;YACjG,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;YACrF,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,mBAAmB,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { ToolDefinition } from '../types.js';
2
+ import type { ChannelRegistry } from '../../channels/registry.js';
3
+ /** Factory — needs registry reference from daemon */
4
+ export declare function createMessageTool(registry: ChannelRegistry): ToolDefinition;
5
+ /** Typing indicator tool */
6
+ export declare function createTypingTool(registry: ChannelRegistry): ToolDefinition;
7
+ /** Presence update tool (WhatsApp) */
8
+ export declare function createPresenceTool(registry: ChannelRegistry): ToolDefinition;
9
+ /** Delete message tool */
10
+ export declare function createDeleteMessageTool(registry: ChannelRegistry): ToolDefinition;
11
+ /** Mark messages as read tool */
12
+ export declare function createMarkReadTool(registry: ChannelRegistry): ToolDefinition;
13
+ //# sourceMappingURL=message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/message.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAGlE,qDAAqD;AACrD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,eAAe,GAAG,cAAc,CAsI3E;AAED,4BAA4B;AAC5B,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,cAAc,CA+C1E;AAED,sCAAsC;AACtC,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,eAAe,GAAG,cAAc,CAqD5E;AAED,0BAA0B;AAC1B,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,eAAe,GAAG,cAAc,CA+CjF;AAED,iCAAiC;AACjC,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,eAAe,GAAG,cAAc,CA+C5E"}