@murphai/murph 0.1.1

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 (301) hide show
  1. package/CHANGELOG.md +2009 -0
  2. package/LICENSE +674 -0
  3. package/README.md +97 -0
  4. package/dist/.tsbuildinfo +1 -0
  5. package/dist/assistant/automation/run-loop.d.ts +21 -0
  6. package/dist/assistant/automation/run-loop.d.ts.map +1 -0
  7. package/dist/assistant/automation/run-loop.js +31 -0
  8. package/dist/assistant/automation/run-loop.js.map +1 -0
  9. package/dist/assistant/automation.d.ts +10 -0
  10. package/dist/assistant/automation.d.ts.map +1 -0
  11. package/dist/assistant/automation.js +5 -0
  12. package/dist/assistant/automation.js.map +1 -0
  13. package/dist/assistant/cron.d.ts +19 -0
  14. package/dist/assistant/cron.d.ts.map +1 -0
  15. package/dist/assistant/cron.js +59 -0
  16. package/dist/assistant/cron.js.map +1 -0
  17. package/dist/assistant/doctor-security.d.ts +15 -0
  18. package/dist/assistant/doctor-security.d.ts.map +1 -0
  19. package/dist/assistant/doctor-security.js +172 -0
  20. package/dist/assistant/doctor-security.js.map +1 -0
  21. package/dist/assistant/doctor.d.ts +5 -0
  22. package/dist/assistant/doctor.d.ts.map +1 -0
  23. package/dist/assistant/doctor.js +527 -0
  24. package/dist/assistant/doctor.js.map +1 -0
  25. package/dist/assistant/outbox.d.ts +19 -0
  26. package/dist/assistant/outbox.d.ts.map +1 -0
  27. package/dist/assistant/outbox.js +28 -0
  28. package/dist/assistant/outbox.js.map +1 -0
  29. package/dist/assistant/provider-catalog.d.ts +61 -0
  30. package/dist/assistant/provider-catalog.d.ts.map +1 -0
  31. package/dist/assistant/provider-catalog.js +205 -0
  32. package/dist/assistant/provider-catalog.js.map +1 -0
  33. package/dist/assistant/service.d.ts +85 -0
  34. package/dist/assistant/service.d.ts.map +1 -0
  35. package/dist/assistant/service.js +26 -0
  36. package/dist/assistant/service.js.map +1 -0
  37. package/dist/assistant/status.d.ts +9 -0
  38. package/dist/assistant/status.d.ts.map +1 -0
  39. package/dist/assistant/status.js +16 -0
  40. package/dist/assistant/status.js.map +1 -0
  41. package/dist/assistant/stop.d.ts +20 -0
  42. package/dist/assistant/stop.d.ts.map +1 -0
  43. package/dist/assistant/stop.js +142 -0
  44. package/dist/assistant/stop.js.map +1 -0
  45. package/dist/assistant/store.d.ts +6 -0
  46. package/dist/assistant/store.d.ts.map +1 -0
  47. package/dist/assistant/store.js +21 -0
  48. package/dist/assistant/store.js.map +1 -0
  49. package/dist/assistant/ui/ink.d.ts +247 -0
  50. package/dist/assistant/ui/ink.d.ts.map +1 -0
  51. package/dist/assistant/ui/ink.js +2417 -0
  52. package/dist/assistant/ui/ink.js.map +1 -0
  53. package/dist/assistant/ui/theme.d.ts +64 -0
  54. package/dist/assistant/ui/theme.d.ts.map +1 -0
  55. package/dist/assistant/ui/theme.js +180 -0
  56. package/dist/assistant/ui/theme.js.map +1 -0
  57. package/dist/assistant/ui/view-model.d.ts +89 -0
  58. package/dist/assistant/ui/view-model.d.ts.map +1 -0
  59. package/dist/assistant/ui/view-model.js +298 -0
  60. package/dist/assistant/ui/view-model.js.map +1 -0
  61. package/dist/assistant-chat-ink.d.ts +2 -0
  62. package/dist/assistant-chat-ink.d.ts.map +1 -0
  63. package/dist/assistant-chat-ink.js +2 -0
  64. package/dist/assistant-chat-ink.js.map +1 -0
  65. package/dist/assistant-daemon-client.d.ts +81 -0
  66. package/dist/assistant-daemon-client.d.ts.map +1 -0
  67. package/dist/assistant-daemon-client.js +473 -0
  68. package/dist/assistant-daemon-client.js.map +1 -0
  69. package/dist/assistant-runtime.d.ts +25 -0
  70. package/dist/assistant-runtime.d.ts.map +1 -0
  71. package/dist/assistant-runtime.js +17 -0
  72. package/dist/assistant-runtime.js.map +1 -0
  73. package/dist/bin.d.ts +3 -0
  74. package/dist/bin.d.ts.map +1 -0
  75. package/dist/bin.js +7 -0
  76. package/dist/bin.js.map +1 -0
  77. package/dist/cli-entry.d.ts +10 -0
  78. package/dist/cli-entry.d.ts.map +1 -0
  79. package/dist/cli-entry.js +127 -0
  80. package/dist/cli-entry.js.map +1 -0
  81. package/dist/commands/assistant.d.ts +5 -0
  82. package/dist/commands/assistant.d.ts.map +1 -0
  83. package/dist/commands/assistant.js +1663 -0
  84. package/dist/commands/assistant.js.map +1 -0
  85. package/dist/commands/audit-command-helpers.d.ts +15 -0
  86. package/dist/commands/audit-command-helpers.d.ts.map +1 -0
  87. package/dist/commands/audit-command-helpers.js +24 -0
  88. package/dist/commands/audit-command-helpers.js.map +1 -0
  89. package/dist/commands/audit.d.ts +4 -0
  90. package/dist/commands/audit.d.ts.map +1 -0
  91. package/dist/commands/audit.js +107 -0
  92. package/dist/commands/audit.js.map +1 -0
  93. package/dist/commands/device.d.ts +4 -0
  94. package/dist/commands/device.d.ts.map +1 -0
  95. package/dist/commands/device.js +177 -0
  96. package/dist/commands/device.js.map +1 -0
  97. package/dist/commands/document.d.ts +4 -0
  98. package/dist/commands/document.d.ts.map +1 -0
  99. package/dist/commands/document.js +117 -0
  100. package/dist/commands/document.js.map +1 -0
  101. package/dist/commands/event.d.ts +4 -0
  102. package/dist/commands/event.d.ts.map +1 -0
  103. package/dist/commands/event.js +136 -0
  104. package/dist/commands/event.js.map +1 -0
  105. package/dist/commands/experiment.d.ts +4 -0
  106. package/dist/commands/experiment.d.ts.map +1 -0
  107. package/dist/commands/experiment.js +140 -0
  108. package/dist/commands/experiment.js.map +1 -0
  109. package/dist/commands/export-intake-read-helpers.d.ts +150 -0
  110. package/dist/commands/export-intake-read-helpers.d.ts.map +1 -0
  111. package/dist/commands/export-intake-read-helpers.js +328 -0
  112. package/dist/commands/export-intake-read-helpers.js.map +1 -0
  113. package/dist/commands/export.d.ts +4 -0
  114. package/dist/commands/export.d.ts.map +1 -0
  115. package/dist/commands/export.js +179 -0
  116. package/dist/commands/export.js.map +1 -0
  117. package/dist/commands/food.d.ts +4 -0
  118. package/dist/commands/food.d.ts.map +1 -0
  119. package/dist/commands/food.js +190 -0
  120. package/dist/commands/food.js.map +1 -0
  121. package/dist/commands/health-command-factory.d.ts +230 -0
  122. package/dist/commands/health-command-factory.d.ts.map +1 -0
  123. package/dist/commands/health-command-factory.js +551 -0
  124. package/dist/commands/health-command-factory.js.map +1 -0
  125. package/dist/commands/health-entity-command-registry.d.ts +27 -0
  126. package/dist/commands/health-entity-command-registry.d.ts.map +1 -0
  127. package/dist/commands/health-entity-command-registry.js +84 -0
  128. package/dist/commands/health-entity-command-registry.js.map +1 -0
  129. package/dist/commands/inbox.d.ts +5 -0
  130. package/dist/commands/inbox.d.ts.map +1 -0
  131. package/dist/commands/inbox.js +841 -0
  132. package/dist/commands/inbox.js.map +1 -0
  133. package/dist/commands/intake.d.ts +4 -0
  134. package/dist/commands/intake.d.ts.map +1 -0
  135. package/dist/commands/intake.js +175 -0
  136. package/dist/commands/intake.js.map +1 -0
  137. package/dist/commands/intervention.d.ts +4 -0
  138. package/dist/commands/intervention.d.ts.map +1 -0
  139. package/dist/commands/intervention.js +122 -0
  140. package/dist/commands/intervention.js.map +1 -0
  141. package/dist/commands/journal.d.ts +12 -0
  142. package/dist/commands/journal.d.ts.map +1 -0
  143. package/dist/commands/journal.js +186 -0
  144. package/dist/commands/journal.js.map +1 -0
  145. package/dist/commands/meal.d.ts +4 -0
  146. package/dist/commands/meal.d.ts.map +1 -0
  147. package/dist/commands/meal.js +123 -0
  148. package/dist/commands/meal.js.map +1 -0
  149. package/dist/commands/profile.d.ts +4 -0
  150. package/dist/commands/profile.d.ts.map +1 -0
  151. package/dist/commands/profile.js +62 -0
  152. package/dist/commands/profile.js.map +1 -0
  153. package/dist/commands/protocol.d.ts +4 -0
  154. package/dist/commands/protocol.d.ts.map +1 -0
  155. package/dist/commands/protocol.js +79 -0
  156. package/dist/commands/protocol.js.map +1 -0
  157. package/dist/commands/provider.d.ts +4 -0
  158. package/dist/commands/provider.d.ts.map +1 -0
  159. package/dist/commands/provider.js +115 -0
  160. package/dist/commands/provider.js.map +1 -0
  161. package/dist/commands/read.d.ts +4 -0
  162. package/dist/commands/read.d.ts.map +1 -0
  163. package/dist/commands/read.js +55 -0
  164. package/dist/commands/read.js.map +1 -0
  165. package/dist/commands/recipe.d.ts +4 -0
  166. package/dist/commands/recipe.d.ts.map +1 -0
  167. package/dist/commands/recipe.js +116 -0
  168. package/dist/commands/recipe.js.map +1 -0
  169. package/dist/commands/record-mutation-command-helpers.d.ts +196 -0
  170. package/dist/commands/record-mutation-command-helpers.d.ts.map +1 -0
  171. package/dist/commands/record-mutation-command-helpers.js +150 -0
  172. package/dist/commands/record-mutation-command-helpers.js.map +1 -0
  173. package/dist/commands/research.d.ts +3 -0
  174. package/dist/commands/research.d.ts.map +1 -0
  175. package/dist/commands/research.js +104 -0
  176. package/dist/commands/research.js.map +1 -0
  177. package/dist/commands/sample-batch-command-helpers.d.ts +24 -0
  178. package/dist/commands/sample-batch-command-helpers.d.ts.map +1 -0
  179. package/dist/commands/sample-batch-command-helpers.js +99 -0
  180. package/dist/commands/sample-batch-command-helpers.js.map +1 -0
  181. package/dist/commands/sample-import-command-helpers.d.ts +24 -0
  182. package/dist/commands/sample-import-command-helpers.d.ts.map +1 -0
  183. package/dist/commands/sample-import-command-helpers.js +49 -0
  184. package/dist/commands/sample-import-command-helpers.js.map +1 -0
  185. package/dist/commands/sample-query-command-helpers.d.ts +11 -0
  186. package/dist/commands/sample-query-command-helpers.d.ts.map +1 -0
  187. package/dist/commands/sample-query-command-helpers.js +26 -0
  188. package/dist/commands/sample-query-command-helpers.js.map +1 -0
  189. package/dist/commands/samples.d.ts +4 -0
  190. package/dist/commands/samples.d.ts.map +1 -0
  191. package/dist/commands/samples.js +261 -0
  192. package/dist/commands/samples.js.map +1 -0
  193. package/dist/commands/search.d.ts +4 -0
  194. package/dist/commands/search.d.ts.map +1 -0
  195. package/dist/commands/search.js +295 -0
  196. package/dist/commands/search.js.map +1 -0
  197. package/dist/commands/supplement.d.ts +4 -0
  198. package/dist/commands/supplement.d.ts.map +1 -0
  199. package/dist/commands/supplement.js +338 -0
  200. package/dist/commands/supplement.js.map +1 -0
  201. package/dist/commands/vault.d.ts +4 -0
  202. package/dist/commands/vault.d.ts.map +1 -0
  203. package/dist/commands/vault.js +164 -0
  204. package/dist/commands/vault.js.map +1 -0
  205. package/dist/commands/workout.d.ts +4 -0
  206. package/dist/commands/workout.d.ts.map +1 -0
  207. package/dist/commands/workout.js +284 -0
  208. package/dist/commands/workout.js.map +1 -0
  209. package/dist/incur.generated.d.ts +2164 -0
  210. package/dist/incur.generated.d.ts.map +1 -0
  211. package/dist/incur.generated.js +2 -0
  212. package/dist/incur.generated.js.map +1 -0
  213. package/dist/index.d.ts +13 -0
  214. package/dist/index.d.ts.map +1 -0
  215. package/dist/index.js +14 -0
  216. package/dist/index.js.map +1 -0
  217. package/dist/research-cli-contracts.d.ts +22 -0
  218. package/dist/research-cli-contracts.d.ts.map +1 -0
  219. package/dist/research-cli-contracts.js +18 -0
  220. package/dist/research-cli-contracts.js.map +1 -0
  221. package/dist/research-runtime.d.ts +79 -0
  222. package/dist/research-runtime.d.ts.map +1 -0
  223. package/dist/research-runtime.js +351 -0
  224. package/dist/research-runtime.js.map +1 -0
  225. package/dist/run-terminal-logging.d.ts +12 -0
  226. package/dist/run-terminal-logging.d.ts.map +1 -0
  227. package/dist/run-terminal-logging.js +323 -0
  228. package/dist/run-terminal-logging.js.map +1 -0
  229. package/dist/setup-agentmail.d.ts +30 -0
  230. package/dist/setup-agentmail.d.ts.map +1 -0
  231. package/dist/setup-agentmail.js +136 -0
  232. package/dist/setup-agentmail.js.map +1 -0
  233. package/dist/setup-assistant-account.d.ts +29 -0
  234. package/dist/setup-assistant-account.d.ts.map +1 -0
  235. package/dist/setup-assistant-account.js +443 -0
  236. package/dist/setup-assistant-account.js.map +1 -0
  237. package/dist/setup-assistant.d.ts +34 -0
  238. package/dist/setup-assistant.d.ts.map +1 -0
  239. package/dist/setup-assistant.js +355 -0
  240. package/dist/setup-assistant.js.map +1 -0
  241. package/dist/setup-cli.d.ts +72 -0
  242. package/dist/setup-cli.d.ts.map +1 -0
  243. package/dist/setup-cli.js +387 -0
  244. package/dist/setup-cli.js.map +1 -0
  245. package/dist/setup-services/channels.d.ts +19 -0
  246. package/dist/setup-services/channels.d.ts.map +1 -0
  247. package/dist/setup-services/channels.js +721 -0
  248. package/dist/setup-services/channels.js.map +1 -0
  249. package/dist/setup-services/process.d.ts +18 -0
  250. package/dist/setup-services/process.d.ts.map +1 -0
  251. package/dist/setup-services/process.js +98 -0
  252. package/dist/setup-services/process.js.map +1 -0
  253. package/dist/setup-services/scheduled-updates.d.ts +9 -0
  254. package/dist/setup-services/scheduled-updates.d.ts.map +1 -0
  255. package/dist/setup-services/scheduled-updates.js +64 -0
  256. package/dist/setup-services/scheduled-updates.js.map +1 -0
  257. package/dist/setup-services/shell.d.ts +18 -0
  258. package/dist/setup-services/shell.d.ts.map +1 -0
  259. package/dist/setup-services/shell.js +447 -0
  260. package/dist/setup-services/shell.js.map +1 -0
  261. package/dist/setup-services/steps.d.ts +39 -0
  262. package/dist/setup-services/steps.d.ts.map +1 -0
  263. package/dist/setup-services/steps.js +86 -0
  264. package/dist/setup-services/steps.js.map +1 -0
  265. package/dist/setup-services/toolchain.d.ts +46 -0
  266. package/dist/setup-services/toolchain.d.ts.map +1 -0
  267. package/dist/setup-services/toolchain.js +232 -0
  268. package/dist/setup-services/toolchain.js.map +1 -0
  269. package/dist/setup-services.d.ts +44 -0
  270. package/dist/setup-services.d.ts.map +1 -0
  271. package/dist/setup-services.js +739 -0
  272. package/dist/setup-services.js.map +1 -0
  273. package/dist/setup-wizard.d.ts +101 -0
  274. package/dist/setup-wizard.d.ts.map +1 -0
  275. package/dist/setup-wizard.js +1458 -0
  276. package/dist/setup-wizard.js.map +1 -0
  277. package/dist/usecases/intervention.d.ts +63 -0
  278. package/dist/usecases/intervention.d.ts.map +1 -0
  279. package/dist/usecases/intervention.js +205 -0
  280. package/dist/usecases/intervention.js.map +1 -0
  281. package/dist/usecases/text-duration.d.ts +4 -0
  282. package/dist/usecases/text-duration.d.ts.map +1 -0
  283. package/dist/usecases/text-duration.js +63 -0
  284. package/dist/usecases/text-duration.js.map +1 -0
  285. package/dist/usecases/workout-format.d.ts +139 -0
  286. package/dist/usecases/workout-format.d.ts.map +1 -0
  287. package/dist/usecases/workout-format.js +445 -0
  288. package/dist/usecases/workout-format.js.map +1 -0
  289. package/dist/usecases/workout.d.ts +94 -0
  290. package/dist/usecases/workout.d.ts.map +1 -0
  291. package/dist/usecases/workout.js +411 -0
  292. package/dist/usecases/workout.js.map +1 -0
  293. package/dist/vault-cli-command-manifest.d.ts +562 -0
  294. package/dist/vault-cli-command-manifest.d.ts.map +1 -0
  295. package/dist/vault-cli-command-manifest.js +759 -0
  296. package/dist/vault-cli-command-manifest.js.map +1 -0
  297. package/dist/vault-cli.d.ts +6 -0
  298. package/dist/vault-cli.d.ts.map +1 -0
  299. package/dist/vault-cli.js +38 -0
  300. package/dist/vault-cli.js.map +1 -0
  301. package/package.json +85 -0
@@ -0,0 +1,447 @@
1
+ import { chmod, mkdir, readFile, stat, writeFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { createStep, DEFAULT_USER_BIN_DIRECTORY } from './steps.js';
4
+ import { defaultFileExists, isExecutable } from './process.js';
5
+ const PATH_BLOCK_BEGIN = '# >>> Murph PATH >>>';
6
+ const PATH_BLOCK_END = '# <<< Murph PATH <<<';
7
+ export async function ensureCliShims(input) {
8
+ const userBinDirectory = path.join(input.homeDirectory, DEFAULT_USER_BIN_DIRECTORY);
9
+ const shellProfilePath = resolveShellProfilePath(input.homeDirectory, input.env);
10
+ const shimSpecs = [
11
+ {
12
+ name: 'murph',
13
+ path: path.join(userBinDirectory, 'murph'),
14
+ },
15
+ {
16
+ name: 'vault-cli',
17
+ path: path.join(userBinDirectory, 'vault-cli'),
18
+ },
19
+ ];
20
+ const pathPresent = pathIncludesSegment(input.env.PATH, userBinDirectory);
21
+ const pathBlockStatus = pathPresent
22
+ ? 'reused'
23
+ : await readPathBlockStatus(shellProfilePath, input.fileExists);
24
+ const shimsReady = await Promise.all(shimSpecs.map(async (shim) => {
25
+ return await hasInstalledShim({
26
+ cliBinPath: input.cliBinPath,
27
+ fileExists: input.fileExists,
28
+ shimName: shim.name,
29
+ shimPath: shim.path,
30
+ });
31
+ }));
32
+ const hasAllShims = shimsReady.every(Boolean);
33
+ if (input.dryRun) {
34
+ const status = hasAllShims &&
35
+ (pathPresent || pathBlockStatus === 'reused')
36
+ ? 'reused'
37
+ : 'planned';
38
+ const detail = hasAllShims &&
39
+ (pathPresent || pathBlockStatus === 'reused')
40
+ ? `Reusing Murph CLI shims from ${userBinDirectory}.`
41
+ : pathPresent
42
+ ? `Would install Murph CLI shims in ${userBinDirectory}.`
43
+ : `Would install Murph CLI shims in ${userBinDirectory} and add ${userBinDirectory} to PATH via ${shellProfilePath}.`;
44
+ input.steps.push(createStep({
45
+ detail,
46
+ id: 'cli-shims',
47
+ kind: 'configure',
48
+ status,
49
+ title: 'CLI command shims',
50
+ }));
51
+ return;
52
+ }
53
+ await mkdir(userBinDirectory, { recursive: true });
54
+ let wroteShim = false;
55
+ for (const shim of shimSpecs) {
56
+ const changed = await writeCliShim({
57
+ cliBinPath: input.cliBinPath,
58
+ shimName: shim.name,
59
+ shimPath: shim.path,
60
+ });
61
+ wroteShim = wroteShim || changed;
62
+ }
63
+ let pathUpdated = false;
64
+ if (!pathPresent) {
65
+ pathUpdated = await ensurePathBlock(shellProfilePath);
66
+ input.notes.push(`Open a new shell or run source ${redactHomePath(shellProfilePath, input.homeDirectory)} to use ${shimSpecs[0].name} immediately.`);
67
+ }
68
+ const status = wroteShim || pathUpdated ? 'completed' : 'reused';
69
+ const detail = pathPresent
70
+ ? `${status === 'completed' ? 'Installed' : 'Reusing'} Murph CLI shims from ${userBinDirectory}.`
71
+ : `${status === 'completed' ? 'Installed' : 'Reusing'} Murph CLI shims from ${userBinDirectory} and ${pathUpdated ? 'added that directory to' : 'confirmed it is managed in'} ${shellProfilePath}.`;
72
+ input.steps.push(createStep({
73
+ detail,
74
+ id: 'cli-shims',
75
+ kind: 'configure',
76
+ status,
77
+ title: 'CLI command shims',
78
+ }));
79
+ }
80
+ export function resolveShellProfilePath(homeDirectory, env) {
81
+ const shellBaseName = path.basename(env.SHELL ?? '');
82
+ switch (shellBaseName) {
83
+ case 'bash':
84
+ return path.join(homeDirectory, '.bashrc');
85
+ case 'zsh':
86
+ return path.join(homeDirectory, '.zshrc');
87
+ default:
88
+ return path.join(homeDirectory, '.profile');
89
+ }
90
+ }
91
+ export function pathIncludesSegment(pathValue, entry) {
92
+ const normalizedEntry = path.resolve(entry);
93
+ return listPathSegments(pathValue).some((segment) => path.resolve(segment) === normalizedEntry);
94
+ }
95
+ export function redactNullableHomePath(value, homeDirectory) {
96
+ return value === null ? null : redactHomePath(value, homeDirectory);
97
+ }
98
+ export function redactHomePath(value, homeDirectory) {
99
+ const normalizedValue = path.resolve(value);
100
+ const normalizedHome = path.resolve(homeDirectory);
101
+ if (normalizedValue === normalizedHome) {
102
+ return '~';
103
+ }
104
+ if (normalizedValue.startsWith(`${normalizedHome}${path.sep}`)) {
105
+ return `~${normalizedValue.slice(normalizedHome.length)}`;
106
+ }
107
+ return value;
108
+ }
109
+ export function redactHomePathInText(text, homeDirectory) {
110
+ const normalizedHome = path.resolve(homeDirectory);
111
+ const escapedHome = escapeRegExp(normalizedHome);
112
+ return text.replace(new RegExp(`${escapedHome}(?=$|[/\\\\])`, 'g'), '~');
113
+ }
114
+ export function redactHomePathsInValue(value, homeDirectory) {
115
+ if (typeof value === 'string') {
116
+ return redactHomePathInText(value, homeDirectory);
117
+ }
118
+ if (Array.isArray(value)) {
119
+ return value.map((entry) => redactHomePathsInValue(entry, homeDirectory));
120
+ }
121
+ if (value && typeof value === 'object') {
122
+ return Object.fromEntries(Object.entries(value).map(([key, entry]) => [
123
+ key,
124
+ redactHomePathsInValue(entry, homeDirectory),
125
+ ]));
126
+ }
127
+ return value;
128
+ }
129
+ function escapeRegExp(value) {
130
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
131
+ }
132
+ function listPathSegments(pathValue) {
133
+ return (pathValue ?? '')
134
+ .split(path.delimiter)
135
+ .map((entry) => entry.trim())
136
+ .filter((entry) => entry.length > 0);
137
+ }
138
+ async function readPathBlockStatus(profilePath, fileExists) {
139
+ if (!(await fileExists(profilePath))) {
140
+ return 'missing';
141
+ }
142
+ const contents = await readFile(profilePath, 'utf8');
143
+ return hasManagedPathBlock(contents) ? 'reused' : 'missing';
144
+ }
145
+ async function hasInstalledShim(input) {
146
+ if (!(await input.fileExists(input.shimPath))) {
147
+ return false;
148
+ }
149
+ const contents = await readFile(input.shimPath, 'utf8');
150
+ if (contents !== buildCliShimScript(input.cliBinPath, input.shimName)) {
151
+ return false;
152
+ }
153
+ return await isExecutable(input.shimPath);
154
+ }
155
+ async function writeCliShim(input) {
156
+ const nextContents = buildCliShimScript(input.cliBinPath, input.shimName);
157
+ const exists = await defaultFileExists(input.shimPath);
158
+ if (exists) {
159
+ const currentContents = await readFile(input.shimPath, 'utf8');
160
+ const executable = await isExecutable(input.shimPath);
161
+ if (currentContents === nextContents && executable) {
162
+ return false;
163
+ }
164
+ }
165
+ await writeFile(input.shimPath, nextContents, 'utf8');
166
+ await chmod(input.shimPath, 0o755);
167
+ return true;
168
+ }
169
+ async function ensurePathBlock(profilePath) {
170
+ let existing = '';
171
+ if (await defaultFileExists(profilePath)) {
172
+ existing = await readFile(profilePath, 'utf8');
173
+ if (hasManagedPathBlock(existing)) {
174
+ return false;
175
+ }
176
+ }
177
+ const nextContents = `${existing}${existing.length > 0 && !existing.endsWith('\n') ? '\n' : ''}${buildManagedPathBlock()}`;
178
+ await writeFile(profilePath, nextContents, 'utf8');
179
+ return true;
180
+ }
181
+ function hasManagedPathBlock(contents) {
182
+ return contents.includes(PATH_BLOCK_BEGIN) && contents.includes(PATH_BLOCK_END);
183
+ }
184
+ function buildManagedPathBlock() {
185
+ return `${PATH_BLOCK_BEGIN}
186
+ export PATH="$HOME/.local/bin:$PATH"
187
+ ${PATH_BLOCK_END}
188
+ `;
189
+ }
190
+ function buildCliShimScript(cliBinPath, shimName) {
191
+ const generatedRepoRoot = resolveRepoRootFromCliBinPath(cliBinPath);
192
+ const workspacePackageNames = [
193
+ 'contracts',
194
+ 'core',
195
+ 'device-syncd',
196
+ 'importers',
197
+ 'inboxd',
198
+ 'parsers',
199
+ 'query',
200
+ 'runtime-state',
201
+ ];
202
+ const workspaceCheckLines = workspacePackageNames
203
+ .map((packageName) => {
204
+ return ` if [ ! -f "\${repo_root}/packages/${packageName}/dist/index.js" ]; then
205
+ missing_packages+=("\${repo_root}/packages/${packageName}")
206
+ fi`;
207
+ })
208
+ .join('\n');
209
+ return `#!/usr/bin/env bash
210
+ set -euo pipefail
211
+
212
+ repo_root_exists() {
213
+ local candidate="\${1:-}"
214
+ if [ -z "$candidate" ] || [ ! -d "$candidate" ]; then
215
+ return 1
216
+ fi
217
+
218
+ if [ -f "$candidate/packages/cli/src/bin.ts" ]; then
219
+ return 0
220
+ fi
221
+
222
+ if [ -f "$candidate/packages/cli/dist/bin.js" ]; then
223
+ return 0
224
+ fi
225
+
226
+ return 1
227
+ }
228
+
229
+ canonicalize_repo_root() {
230
+ (
231
+ cd "\${1:-}" >/dev/null 2>&1 && pwd -P
232
+ )
233
+ }
234
+
235
+ find_repo_root_from_pwd() {
236
+ local candidate
237
+ if ! candidate="$(pwd -P 2>/dev/null)"; then
238
+ return 1
239
+ fi
240
+
241
+ while true; do
242
+ if repo_root_exists "$candidate"; then
243
+ printf '%s\n' "$candidate"
244
+ return 0
245
+ fi
246
+
247
+ if [ "$candidate" = "/" ]; then
248
+ return 1
249
+ fi
250
+
251
+ candidate="$(dirname "$candidate")"
252
+ done
253
+ }
254
+
255
+ resolve_repo_root() {
256
+ if repo_root_exists "\${MURPH_REPO_ROOT:-}"; then
257
+ canonicalize_repo_root "\${MURPH_REPO_ROOT}"
258
+ return 0
259
+ fi
260
+
261
+ if repo_root_exists ${quoteShellArgument(generatedRepoRoot)}; then
262
+ canonicalize_repo_root ${quoteShellArgument(generatedRepoRoot)}
263
+ return 0
264
+ fi
265
+
266
+ find_repo_root_from_pwd
267
+ }
268
+
269
+ run_supervised() {
270
+ if [[ -t 0 && -t 2 ]]; then
271
+ exec "$@"
272
+ fi
273
+
274
+ "$@" &
275
+ child_pid=$!
276
+
277
+ forward_signal() {
278
+ local signal_name="$1"
279
+ local exit_code="$2"
280
+ local attempts=0
281
+
282
+ trap - INT TERM
283
+ kill "-$signal_name" "$child_pid" 2>/dev/null || true
284
+
285
+ while kill -0 "$child_pid" 2>/dev/null; do
286
+ if [ "$attempts" -ge 20 ]; then
287
+ kill -KILL "$child_pid" 2>/dev/null || true
288
+ break
289
+ fi
290
+
291
+ sleep 0.1
292
+ attempts=$((attempts + 1))
293
+ done
294
+
295
+ wait "$child_pid" 2>/dev/null || true
296
+ exit "$exit_code"
297
+ }
298
+
299
+ trap 'forward_signal INT 130' INT
300
+ trap 'forward_signal TERM 143' TERM
301
+
302
+ while kill -0 "$child_pid" 2>/dev/null; do
303
+ sleep 0.1
304
+ done
305
+
306
+ wait "$child_pid"
307
+ local exit_code=$?
308
+ trap - INT TERM
309
+ return "$exit_code"
310
+ }
311
+
312
+ repo_root="$(resolve_repo_root || true)"
313
+ if [ -z "$repo_root" ]; then
314
+ printf '%s\n' 'Murph CLI shim could not locate the repo checkout. Run \`pnpm exec tsx packages/cli/src/bin.ts setup\` or \`./scripts/setup-host.sh\` from the repo checkout to refresh the shims, or set \`MURPH_REPO_ROOT\`.' >&2
315
+ exit 1
316
+ fi
317
+
318
+ cli_package_root="$repo_root/packages/cli"
319
+ cli_bin_path="$cli_package_root/dist/bin.js"
320
+ # Only gate on the built CLI entrypoint. The package/root build commands own
321
+ # transitive artifact completeness, and hard-coding every emitted file here is brittle.
322
+ cli_dist_ready=false
323
+ if [ -f "$cli_bin_path" ]; then
324
+ cli_dist_ready=true
325
+ fi
326
+
327
+ is_discovery_invocation() {
328
+ for arg in "$@"; do
329
+ case "$arg" in
330
+ --help|--schema|--llms|--llms-full)
331
+ return 0
332
+ ;;
333
+ esac
334
+ done
335
+
336
+ return 1
337
+ }
338
+
339
+ resolve_command_token() {
340
+ while [ "$#" -gt 0 ]; do
341
+ case "$1" in
342
+ --)
343
+ if [ "$#" -gt 1 ]; then
344
+ printf '%s\n' "$2"
345
+ return 0
346
+ fi
347
+ return 1
348
+ ;;
349
+ --filter-output|--format|--token-limit|--token-offset)
350
+ if [ "$#" -lt 2 ]; then
351
+ return 1
352
+ fi
353
+ shift 2
354
+ continue
355
+ ;;
356
+ -*)
357
+ ;;
358
+ *)
359
+ printf '%s\n' "$1"
360
+ return 0
361
+ ;;
362
+ esac
363
+ shift
364
+ done
365
+
366
+ return 1
367
+ }
368
+
369
+ command_token="$(resolve_command_token "$@" || true)"
370
+
371
+ if is_discovery_invocation "$@"; then
372
+ if [ "$cli_dist_ready" = true ]; then
373
+ run_supervised env SETUP_PROGRAM_NAME=${quoteShellArgument(shimName)} node "$cli_bin_path" "$@"
374
+ exit $?
375
+ fi
376
+ fi
377
+
378
+ missing_packages=()
379
+ if [ "$cli_dist_ready" != true ]; then
380
+ missing_packages+=("$cli_package_root")
381
+ fi
382
+
383
+ ${workspaceCheckLines}
384
+
385
+ build_failed=false
386
+ if [ "\${#missing_packages[@]}" -gt 0 ]; then
387
+ if [ "$command_token" = "onboard" ]; then
388
+ if command -v pnpm >/dev/null 2>&1; then
389
+ if ! pnpm --dir "$repo_root" build:test-runtime:prepared >/dev/null; then
390
+ build_failed=true
391
+ fi
392
+ elif command -v corepack >/dev/null 2>&1; then
393
+ if ! corepack pnpm --dir "$repo_root" build:test-runtime:prepared >/dev/null; then
394
+ build_failed=true
395
+ fi
396
+ fi
397
+ else
398
+ if command -v pnpm >/dev/null 2>&1; then
399
+ for package_dir in "\${missing_packages[@]}"; do
400
+ if ! pnpm --dir "$package_dir" build >/dev/null; then
401
+ build_failed=true
402
+ break
403
+ fi
404
+ done
405
+ elif command -v corepack >/dev/null 2>&1; then
406
+ for package_dir in "\${missing_packages[@]}"; do
407
+ if ! corepack pnpm --dir "$package_dir" build >/dev/null; then
408
+ build_failed=true
409
+ break
410
+ fi
411
+ done
412
+ fi
413
+ fi
414
+ fi
415
+
416
+ if [ "$build_failed" = false ] && [ -f "$cli_bin_path" ]; then
417
+ cli_dist_ready=true
418
+ else
419
+ cli_dist_ready=false
420
+ fi
421
+
422
+ if [ "$cli_dist_ready" = true ]; then
423
+ run_supervised env SETUP_PROGRAM_NAME=${quoteShellArgument(shimName)} node "$cli_bin_path" "$@"
424
+ exit $?
425
+ fi
426
+
427
+ printf '%s\n' 'Murph CLI build output is unavailable or incomplete. Run \`pnpm --dir <repo> build:test-runtime:prepared\` (preferred) or \`pnpm --dir <repo> build\` from the repo checkout.' >&2
428
+ exit 1
429
+ `;
430
+ }
431
+ function resolveRepoCliSourceBinPath(cliBinPath) {
432
+ return path.resolve(path.dirname(cliBinPath), '..', 'src', 'bin.ts');
433
+ }
434
+ function resolveRepoRootFromCliBinPath(cliBinPath) {
435
+ return path.resolve(path.dirname(cliBinPath), '..', '..', '..');
436
+ }
437
+ function quoteShellArgument(value) {
438
+ return `'${value.replaceAll("'", `'\"'\"'`)}'`;
439
+ }
440
+ export async function hasNonEmptyFile(absolutePath, fileExists) {
441
+ if (!(await fileExists(absolutePath))) {
442
+ return false;
443
+ }
444
+ const fileStat = await stat(absolutePath);
445
+ return fileStat.isFile() && fileStat.size > 0;
446
+ }
447
+ //# sourceMappingURL=shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/setup-services/shell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { SetupStepKind, SetupStepResult, SetupStepStatus, WhisperModel } from '@murphai/assistant-core/setup-cli-contracts';
2
+ export declare const DEFAULT_TOOLCHAIN_DIRECTORY: string;
3
+ export declare const DEFAULT_USER_BIN_DIRECTORY: string;
4
+ export declare const BREW_INSTALL_COMMAND = "NONINTERACTIVE=1 CI=1 /bin/bash -c \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"";
5
+ export type FormulaCommandKey = 'ffmpegCommand' | 'pdftotextCommand' | 'whisperCommand';
6
+ export interface MacosToolRequirementSpec {
7
+ formula: string;
8
+ installDetail: string;
9
+ missingPlanDetail: string;
10
+ title: string;
11
+ }
12
+ export interface LinuxToolRequirementSpec {
13
+ completedDetail?: string;
14
+ installPackages: string[];
15
+ missingNoteDetail?: string;
16
+ missingPlanDetail: string;
17
+ missingStepDetail: string;
18
+ reuseDetail?: (command: string) => string;
19
+ title: string;
20
+ }
21
+ export interface ToolRequirementSpec {
22
+ commandCandidates: string[];
23
+ id: string;
24
+ key: FormulaCommandKey;
25
+ linux: LinuxToolRequirementSpec;
26
+ macos: MacosToolRequirementSpec;
27
+ }
28
+ export declare const modelFileNames: Record<WhisperModel, string>;
29
+ export declare function whisperModelDownloadUrl(model: WhisperModel): string;
30
+ export declare function resolveWhisperModelPath(toolchainRoot: string, model: WhisperModel): string;
31
+ export declare function buildBaseFormulaSpecs(): ToolRequirementSpec[];
32
+ export declare function createStep(input: {
33
+ id: string;
34
+ title: string;
35
+ kind: SetupStepKind;
36
+ status: SetupStepStatus;
37
+ detail: string;
38
+ }): SetupStepResult;
39
+ //# sourceMappingURL=steps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steps.d.ts","sourceRoot":"","sources":["../../src/setup-services/steps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,eAAe,EACf,YAAY,EACb,MAAM,6CAA6C,CAAA;AAEpD,eAAO,MAAM,2BAA2B,QAAmC,CAAA;AAC3E,eAAO,MAAM,0BAA0B,QAA6B,CAAA;AACpE,eAAO,MAAM,oBAAoB,4HACwF,CAAA;AAEzH,MAAM,MAAM,iBAAiB,GACzB,eAAe,GACf,kBAAkB,GAClB,gBAAgB,CAAA;AAEpB,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;IACrB,iBAAiB,EAAE,MAAM,CAAA;IACzB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,wBAAwB;IACvC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,EAAE,MAAM,CAAA;IACzB,iBAAiB,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;IACzC,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,iBAAiB,EAAE,MAAM,EAAE,CAAA;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,iBAAiB,CAAA;IACtB,KAAK,EAAE,wBAAwB,CAAA;IAC/B,KAAK,EAAE,wBAAwB,CAAA;CAChC;AAED,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAUvD,CAAA;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAEnE;AAED,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,YAAY,GAClB,MAAM,CAER;AAED,wBAAgB,qBAAqB,IAAI,mBAAmB,EAAE,CA+D7D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,aAAa,CAAA;IACnB,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;CACf,GAAG,eAAe,CAQlB"}
@@ -0,0 +1,86 @@
1
+ import path from 'node:path';
2
+ export const DEFAULT_TOOLCHAIN_DIRECTORY = path.join('.murph', 'toolchain');
3
+ export const DEFAULT_USER_BIN_DIRECTORY = path.join('.local', 'bin');
4
+ export const BREW_INSTALL_COMMAND = 'NONINTERACTIVE=1 CI=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"';
5
+ export const modelFileNames = {
6
+ tiny: 'ggml-tiny.bin',
7
+ 'tiny.en': 'ggml-tiny.en.bin',
8
+ base: 'ggml-base.bin',
9
+ 'base.en': 'ggml-base.en.bin',
10
+ small: 'ggml-small.bin',
11
+ 'small.en': 'ggml-small.en.bin',
12
+ medium: 'ggml-medium.bin',
13
+ 'medium.en': 'ggml-medium.en.bin',
14
+ 'large-v3-turbo': 'ggml-large-v3-turbo.bin',
15
+ };
16
+ export function whisperModelDownloadUrl(model) {
17
+ return `https://huggingface.co/ggerganov/whisper.cpp/resolve/main/${modelFileNames[model]}`;
18
+ }
19
+ export function resolveWhisperModelPath(toolchainRoot, model) {
20
+ return path.join(toolchainRoot, 'models', 'whisper', modelFileNames[model]);
21
+ }
22
+ export function buildBaseFormulaSpecs() {
23
+ return [
24
+ {
25
+ commandCandidates: ['ffmpeg'],
26
+ id: 'ffmpeg',
27
+ key: 'ffmpegCommand',
28
+ linux: {
29
+ installPackages: ['ffmpeg'],
30
+ missingPlanDetail: 'Would reuse ffmpeg from PATH when available, or install the ffmpeg package via apt-get for audio/video normalization.',
31
+ missingStepDetail: 'ffmpeg was not found on PATH and Murph could not install it automatically. Install ffmpeg manually or rerun setup with apt/sudo access.',
32
+ title: 'ffmpeg',
33
+ },
34
+ macos: {
35
+ formula: 'ffmpeg',
36
+ installDetail: 'Installed ffmpeg through Homebrew.',
37
+ missingPlanDetail: 'Would install ffmpeg through Homebrew for audio/video normalization.',
38
+ title: 'ffmpeg',
39
+ },
40
+ },
41
+ {
42
+ commandCandidates: ['pdftotext'],
43
+ id: 'pdftotext',
44
+ key: 'pdftotextCommand',
45
+ linux: {
46
+ installPackages: ['poppler-utils'],
47
+ missingPlanDetail: 'Would reuse pdftotext from PATH when available, or install poppler-utils via apt-get for PDF parsing.',
48
+ missingStepDetail: 'pdftotext was not found on PATH and Murph could not install it automatically. Install poppler-utils manually or rerun setup with apt/sudo access.',
49
+ title: 'pdftotext',
50
+ },
51
+ macos: {
52
+ formula: 'poppler',
53
+ installDetail: 'Installed poppler so pdftotext is available for PDF parsing.',
54
+ missingPlanDetail: 'Would install poppler through Homebrew so pdftotext is available for PDF parsing.',
55
+ title: 'pdftotext',
56
+ },
57
+ },
58
+ {
59
+ commandCandidates: ['whisper-cli', 'whisper-cpp'],
60
+ id: 'whisper-cpp',
61
+ key: 'whisperCommand',
62
+ linux: {
63
+ installPackages: ['whisper-cpp'],
64
+ missingPlanDetail: 'Would reuse whisper.cpp from PATH when available, or install the whisper-cpp package via apt-get for local transcription.',
65
+ missingStepDetail: 'whisper.cpp was not found on PATH and Murph could not install it automatically. Install whisper.cpp manually or rerun setup with apt/sudo access.',
66
+ title: 'whisper.cpp',
67
+ },
68
+ macos: {
69
+ formula: 'whisper-cpp',
70
+ installDetail: 'Installed whisper.cpp through Homebrew.',
71
+ missingPlanDetail: 'Would install whisper.cpp through Homebrew for local transcription.',
72
+ title: 'whisper.cpp',
73
+ },
74
+ },
75
+ ];
76
+ }
77
+ export function createStep(input) {
78
+ return {
79
+ detail: input.detail,
80
+ id: input.id,
81
+ kind: input.kind,
82
+ status: input.status,
83
+ title: input.title,
84
+ };
85
+ }
86
+ //# sourceMappingURL=steps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steps.js","sourceRoot":"","sources":["../../src/setup-services/steps.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAQ5B,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;AAC3E,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AACpE,MAAM,CAAC,MAAM,oBAAoB,GAC/B,uHAAuH,CAAA;AAgCzH,MAAM,CAAC,MAAM,cAAc,GAAiC;IAC1D,IAAI,EAAE,eAAe;IACrB,SAAS,EAAE,kBAAkB;IAC7B,IAAI,EAAE,eAAe;IACrB,SAAS,EAAE,kBAAkB;IAC7B,KAAK,EAAE,gBAAgB;IACvB,UAAU,EAAE,mBAAmB;IAC/B,MAAM,EAAE,iBAAiB;IACzB,WAAW,EAAE,oBAAoB;IACjC,gBAAgB,EAAE,yBAAyB;CAC5C,CAAA;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAmB;IACzD,OAAO,6DAA6D,cAAc,CAAC,KAAK,CAAC,EAAE,CAAA;AAC7F,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,aAAqB,EACrB,KAAmB;IAEnB,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAA;AAC7E,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL;YACE,iBAAiB,EAAE,CAAC,QAAQ,CAAC;YAC7B,EAAE,EAAE,QAAQ;YACZ,GAAG,EAAE,eAAe;YACpB,KAAK,EAAE;gBACL,eAAe,EAAE,CAAC,QAAQ,CAAC;gBAC3B,iBAAiB,EACf,uHAAuH;gBACzH,iBAAiB,EACf,yIAAyI;gBAC3I,KAAK,EAAE,QAAQ;aAChB;YACD,KAAK,EAAE;gBACL,OAAO,EAAE,QAAQ;gBACjB,aAAa,EAAE,oCAAoC;gBACnD,iBAAiB,EACf,sEAAsE;gBACxE,KAAK,EAAE,QAAQ;aAChB;SACF;QACD;YACE,iBAAiB,EAAE,CAAC,WAAW,CAAC;YAChC,EAAE,EAAE,WAAW;YACf,GAAG,EAAE,kBAAkB;YACvB,KAAK,EAAE;gBACL,eAAe,EAAE,CAAC,eAAe,CAAC;gBAClC,iBAAiB,EACf,uGAAuG;gBACzG,iBAAiB,EACf,mJAAmJ;gBACrJ,KAAK,EAAE,WAAW;aACnB;YACD,KAAK,EAAE;gBACL,OAAO,EAAE,SAAS;gBAClB,aAAa,EAAE,8DAA8D;gBAC7E,iBAAiB,EACf,mFAAmF;gBACrF,KAAK,EAAE,WAAW;aACnB;SACF;QACD;YACE,iBAAiB,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC;YACjD,EAAE,EAAE,aAAa;YACjB,GAAG,EAAE,gBAAgB;YACrB,KAAK,EAAE;gBACL,eAAe,EAAE,CAAC,aAAa,CAAC;gBAChC,iBAAiB,EACf,2HAA2H;gBAC7H,iBAAiB,EACf,mJAAmJ;gBACrJ,KAAK,EAAE,aAAa;aACrB;YACD,KAAK,EAAE;gBACL,OAAO,EAAE,aAAa;gBACtB,aAAa,EAAE,yCAAyC;gBACxD,iBAAiB,EACf,qEAAqE;gBACvE,KAAK,EAAE,aAAa;aACrB;SACF;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAM1B;IACC,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAA;AACH,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { SetupStepKind, SetupStepResult, WhisperModel } from '@murphai/assistant-core/setup-cli-contracts';
2
+ import { type CommandRunInput, type CommandRunResult } from './process.js';
3
+ export interface BrewState {
4
+ available: boolean;
5
+ brewCommand: string | null;
6
+ env: NodeJS.ProcessEnv;
7
+ }
8
+ export interface FormulaInstallResult {
9
+ command: string | null;
10
+ env: NodeJS.ProcessEnv;
11
+ }
12
+ export declare function ensureHomebrew(input: {
13
+ arch: string;
14
+ dryRun: boolean;
15
+ env: NodeJS.ProcessEnv;
16
+ log: (message: string) => void;
17
+ runCommand: (input: CommandRunInput) => Promise<CommandRunResult>;
18
+ steps: SetupStepResult[];
19
+ }): Promise<BrewState>;
20
+ export declare function ensureBrewFormula(input: {
21
+ brewState: BrewState;
22
+ commandCandidates: string[];
23
+ dryRun: boolean;
24
+ formula: string;
25
+ id: string;
26
+ installDetail: string;
27
+ kind: SetupStepKind;
28
+ missingPlanDetail: string;
29
+ runCommand: (input: CommandRunInput) => Promise<CommandRunResult>;
30
+ steps: SetupStepResult[];
31
+ title: string;
32
+ }): Promise<FormulaInstallResult>;
33
+ export declare function ensureWhisperModel(input: {
34
+ destinationPath: string;
35
+ dryRun: boolean;
36
+ downloadFile: (url: string, destinationPath: string) => Promise<void>;
37
+ downloadUrl: string;
38
+ fileExists: (absolutePath: string) => Promise<boolean>;
39
+ id: string;
40
+ model: WhisperModel;
41
+ steps: SetupStepResult[];
42
+ title: string;
43
+ }): Promise<void>;
44
+ export declare function resolveExecutablePath(candidates: string[], env: NodeJS.ProcessEnv, absoluteFallbacks?: string[]): Promise<string | null>;
45
+ export declare function withPrependedPath(env: NodeJS.ProcessEnv, entries: string[]): NodeJS.ProcessEnv;
46
+ //# sourceMappingURL=toolchain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolchain.d.ts","sourceRoot":"","sources":["../../src/setup-services/toolchain.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,YAAY,EACb,MAAM,6CAA6C,CAAA;AACpD,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,cAAc,CAAA;AAOrB,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;CACvB;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,OAAO,CAAA;IACf,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;IACtB,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,UAAU,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACjE,KAAK,EAAE,eAAe,EAAE,CAAA;CACzB,GAAG,OAAO,CAAC,SAAS,CAAC,CA+ErB;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAC7C,SAAS,EAAE,SAAS,CAAA;IACpB,iBAAiB,EAAE,MAAM,EAAE,CAAA;IAC3B,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,EAAE,EAAE,MAAM,CAAA;IACV,aAAa,EAAE,MAAM,CAAA;IACrB,IAAI,EAAE,aAAa,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;IACzB,UAAU,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACjE,KAAK,EAAE,eAAe,EAAE,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;CACd,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA0FhC;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAC9C,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,OAAO,CAAA;IACf,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrE,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACtD,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,YAAY,CAAA;IACnB,KAAK,EAAE,eAAe,EAAE,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;CACd,GAAG,OAAO,CAAC,IAAI,CAAC,CAwChB;AAwCD,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,EAAE,EACpB,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,iBAAiB,GAAE,MAAM,EAAO,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuBxB;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,OAAO,EAAE,MAAM,EAAE,GAChB,MAAM,CAAC,UAAU,CAmBnB"}