@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,411 @@
1
+ import {} from '@murphai/contracts';
2
+ import { VaultCliError } from '@murphai/assistant-core/vault-cli-errors';
3
+ import { inferDurationMinutes, validateDurationMinutes, } from './text-duration.js';
4
+ import { deleteEventRecord, editEventRecord, } from '@murphai/assistant-core/usecases/event-record-mutations';
5
+ import { showEventRecord, upsertEventRecord, } from '@murphai/assistant-core/usecases/provider-event';
6
+ import { compactObject, normalizeOptionalText, } from '@murphai/assistant-core/usecases/vault-usecase-helpers';
7
+ const MILES_TO_KM = 1.609344;
8
+ const knownWorkoutTypes = [
9
+ {
10
+ activityType: 'running',
11
+ label: 'Run',
12
+ patterns: [/\brun(?:ning)?\b/iu, /\bjog(?:ging)?\b/iu],
13
+ },
14
+ {
15
+ activityType: 'walking',
16
+ label: 'Walk',
17
+ patterns: [/\bwalk(?:ing)?\b/iu],
18
+ },
19
+ {
20
+ activityType: 'hiking',
21
+ label: 'Hike',
22
+ patterns: [/\bhik(?:e|ing)\b/iu, /\btrail\b/iu],
23
+ },
24
+ {
25
+ activityType: 'cycling',
26
+ label: 'Ride',
27
+ patterns: [
28
+ /\bbik(?:e|ing)\b/iu,
29
+ /\bcycl(?:e|ing)\b/iu,
30
+ /\bspin(?:ning)?\b/iu,
31
+ /\bpeloton\b/iu,
32
+ ],
33
+ },
34
+ {
35
+ activityType: 'swimming',
36
+ label: 'Swim',
37
+ patterns: [/\bswim(?:ming)?\b/iu, /\bpool\b/iu],
38
+ },
39
+ {
40
+ activityType: 'rowing',
41
+ label: 'Row',
42
+ patterns: [/\brow(?:ing)?\b/iu, /\berg\b/iu],
43
+ },
44
+ {
45
+ activityType: 'yoga',
46
+ label: 'Yoga',
47
+ patterns: [/\byoga\b/iu],
48
+ },
49
+ {
50
+ activityType: 'pilates',
51
+ label: 'Pilates',
52
+ patterns: [/\bpilates\b/iu],
53
+ },
54
+ {
55
+ activityType: 'strength-training',
56
+ label: 'Strength training',
57
+ patterns: [
58
+ /\bstrength(?: training)?\b/iu,
59
+ /\bweight(?:s|lifting)?\b/iu,
60
+ /\blift(?:ing)?\b/iu,
61
+ /\bgym\b/iu,
62
+ /\breps?\b/iu,
63
+ /\bsets?\b/iu,
64
+ /\bpush-?ups?\b/iu,
65
+ /\bpull-?ups?\b/iu,
66
+ /\bbench(?: ?press)?\b/iu,
67
+ /\bsquats?\b/iu,
68
+ /\bdeadlifts?\b/iu,
69
+ /\bdumbbells?\b/iu,
70
+ /\bbarbells?\b/iu,
71
+ /\blb\b/iu,
72
+ /\bkg\b/iu,
73
+ ],
74
+ },
75
+ ];
76
+ const ambiguousDistancePattern = /\b\d+(?:\.\d+)?\s*(?:or|to|\/|-)\s*\d+(?:\.\d+)?\s*(?:km|kilometers?|kilometres?|mi|miles?|k)\b/iu;
77
+ const kilometerDistancePattern = /\b(\d+(?:\.\d+)?)\s*(?:km|kilometers?|kilometres?)\b/iu;
78
+ const kilometerShortDistancePattern = /\b(\d+(?:\.\d+)?)k\b/iu;
79
+ const mileDistancePattern = /\b(\d+(?:\.\d+)?)\s*(?:mi|miles?)\b/iu;
80
+ const strengthExercisePattern = /(?:^|[.;]\s*)(\d+)\s+sets?\s+of\s+(\d+)\s+([^.;]+?)(?=(?:[.;]|$))/giu;
81
+ const strengthBarbellLoadPattern = /(.+?)\s+with\s+(?:an?\s+)?(\d+(?:\.\d+)?)\s*(lb|lbs?|pounds?|kg|kgs?|kilograms?)\s+bar\s+plus\s+(\d+(?:\.\d+)?)\s*(lb|lbs?|pounds?|kg|kgs?|kilograms?)\s+plates?\s+on\s+both\s+sides$/iu;
82
+ const strengthSimpleLoadPattern = /(.+?)\s+(?:with|at)\s+(?:an?\s+)?(\d+(?:\.\d+)?)\s*(lb|lbs?|pounds?|kg|kgs?|kilograms?)$/iu;
83
+ export function resolveWorkoutCapture(input) {
84
+ const note = normalizeOptionalText(input.text);
85
+ if (!note) {
86
+ throw new VaultCliError('contract_invalid', 'Workout text is required.');
87
+ }
88
+ const activity = resolveWorkoutActivityDescriptor(note, input.activityType);
89
+ const durationMinutes = resolveDurationMinutes(note, input.durationMinutes);
90
+ const distanceKm = resolveDistanceKm(note, input.distanceKm);
91
+ const strengthExercises = input.strengthExercises ?? inferStrengthExercises(note, activity.activityType);
92
+ return {
93
+ note,
94
+ title: buildWorkoutTitle(activity.label, durationMinutes),
95
+ activityType: activity.activityType,
96
+ durationMinutes,
97
+ distanceKm: distanceKm ?? null,
98
+ strengthExercises: strengthExercises ?? null,
99
+ };
100
+ }
101
+ export async function addWorkoutRecord(input) {
102
+ const capture = resolveWorkoutCapture(input);
103
+ const occurredAt = input.occurredAt ?? new Date().toISOString();
104
+ const payload = {
105
+ kind: 'activity_session',
106
+ occurredAt,
107
+ source: input.source ?? 'manual',
108
+ title: capture.title,
109
+ activityType: capture.activityType,
110
+ durationMinutes: capture.durationMinutes,
111
+ ...(typeof capture.distanceKm === 'number'
112
+ ? { distanceKm: capture.distanceKm }
113
+ : {}),
114
+ ...(capture.strengthExercises
115
+ ? { strengthExercises: capture.strengthExercises }
116
+ : {}),
117
+ note: capture.note,
118
+ };
119
+ const result = await upsertEventRecord({
120
+ vault: input.vault,
121
+ payload,
122
+ });
123
+ return {
124
+ ...result,
125
+ occurredAt,
126
+ kind: 'activity_session',
127
+ title: capture.title,
128
+ activityType: capture.activityType,
129
+ durationMinutes: capture.durationMinutes,
130
+ distanceKm: capture.distanceKm,
131
+ strengthExercises: capture.strengthExercises,
132
+ note: capture.note,
133
+ };
134
+ }
135
+ export async function editWorkoutRecord(input) {
136
+ const result = await editEventRecord({
137
+ vault: input.vault,
138
+ lookup: input.lookup,
139
+ entityLabel: 'workout',
140
+ inputFile: input.inputFile,
141
+ set: input.set,
142
+ clear: input.clear,
143
+ dayKeyPolicy: input.dayKeyPolicy,
144
+ expectedKinds: ['activity_session'],
145
+ });
146
+ return showEventRecord(input.vault, result.lookupId);
147
+ }
148
+ export async function deleteWorkoutRecord(input) {
149
+ return deleteEventRecord({
150
+ vault: input.vault,
151
+ lookup: input.lookup,
152
+ entityLabel: 'workout',
153
+ expectedKinds: ['activity_session'],
154
+ });
155
+ }
156
+ function resolveWorkoutActivityDescriptor(text, requestedActivityType) {
157
+ const requested = normalizeOptionalText(requestedActivityType);
158
+ if (requested) {
159
+ const matched = inferKnownWorkoutType(requested);
160
+ if (matched) {
161
+ return matched;
162
+ }
163
+ const activityType = slugifyWorkoutType(requested);
164
+ if (!activityType) {
165
+ throw new VaultCliError('invalid_option', 'Workout type must include at least one letter or number.');
166
+ }
167
+ return {
168
+ activityType,
169
+ label: humanizeRequestedWorkoutType(requested),
170
+ };
171
+ }
172
+ return inferKnownWorkoutType(text) ?? {
173
+ activityType: 'workout',
174
+ label: 'Workout',
175
+ };
176
+ }
177
+ function inferKnownWorkoutType(text) {
178
+ for (const candidate of knownWorkoutTypes) {
179
+ if (candidate.patterns.some((pattern) => pattern.test(text))) {
180
+ return {
181
+ activityType: candidate.activityType,
182
+ label: candidate.label,
183
+ };
184
+ }
185
+ }
186
+ return null;
187
+ }
188
+ function resolveDurationMinutes(text, requestedDurationMinutes) {
189
+ if (typeof requestedDurationMinutes === 'number') {
190
+ return validateDurationMinutes(requestedDurationMinutes, 'Workout duration');
191
+ }
192
+ const inferred = inferDurationMinutes(text);
193
+ if (inferred === 'ambiguous') {
194
+ throw new VaultCliError('invalid_option', 'Workout duration is ambiguous in the note. Pass --duration <minutes> to record it explicitly.');
195
+ }
196
+ if (typeof inferred === 'number') {
197
+ return inferred;
198
+ }
199
+ throw new VaultCliError('invalid_option', 'Could not infer a workout duration from the note. Pass --duration <minutes> to record it explicitly.');
200
+ }
201
+ function resolveDistanceKm(text, requestedDistanceKm) {
202
+ if (typeof requestedDistanceKm === 'number') {
203
+ return validateDistanceKm(requestedDistanceKm);
204
+ }
205
+ return inferDistanceKm(text);
206
+ }
207
+ function inferDistanceKm(text) {
208
+ if (ambiguousDistancePattern.test(text)) {
209
+ return null;
210
+ }
211
+ const kilometerMatch = text.match(kilometerDistancePattern);
212
+ if (kilometerMatch) {
213
+ return validateDistanceKm(Number.parseFloat(kilometerMatch[1] ?? ''));
214
+ }
215
+ const kilometerShortMatch = text.match(kilometerShortDistancePattern);
216
+ if (kilometerShortMatch) {
217
+ return validateDistanceKm(Number.parseFloat(kilometerShortMatch[1] ?? ''));
218
+ }
219
+ const mileMatch = text.match(mileDistancePattern);
220
+ if (mileMatch) {
221
+ return validateDistanceKm(Number.parseFloat(mileMatch[1] ?? '') * MILES_TO_KM);
222
+ }
223
+ return null;
224
+ }
225
+ function inferStrengthExercises(text, activityType) {
226
+ if (activityType !== 'strength-training') {
227
+ return null;
228
+ }
229
+ const exercises = [];
230
+ for (const match of text.matchAll(strengthExercisePattern)) {
231
+ const setCount = Number.parseInt(match[1] ?? '', 10);
232
+ const repsPerSet = Number.parseInt(match[2] ?? '', 10);
233
+ const details = parseStrengthExerciseDetails(match[3] ?? '');
234
+ if (!details ||
235
+ !Number.isInteger(setCount) ||
236
+ setCount < 1 ||
237
+ !Number.isInteger(repsPerSet) ||
238
+ repsPerSet < 1) {
239
+ continue;
240
+ }
241
+ exercises.push(buildStrengthExerciseRecord(details, setCount, repsPerSet));
242
+ }
243
+ return exercises.length > 0 ? exercises : null;
244
+ }
245
+ function parseStrengthExerciseDetails(value) {
246
+ const normalized = normalizeExerciseFragment(value);
247
+ if (!normalized) {
248
+ return null;
249
+ }
250
+ const barbellLoadMatch = normalized.match(strengthBarbellLoadPattern);
251
+ if (barbellLoadMatch) {
252
+ const exercise = normalizeStrengthExerciseName(barbellLoadMatch[1] ?? '');
253
+ if (!exercise) {
254
+ return null;
255
+ }
256
+ const loadDescription = extractStrengthLoadDescription(normalized, barbellLoadMatch[1] ?? '');
257
+ const barUnit = normalizeStrengthLoadUnit(barbellLoadMatch[3] ?? '');
258
+ const plateUnit = normalizeStrengthLoadUnit(barbellLoadMatch[5] ?? '');
259
+ const barWeight = Number.parseFloat(barbellLoadMatch[2] ?? '');
260
+ const plateWeight = Number.parseFloat(barbellLoadMatch[4] ?? '');
261
+ if (barUnit &&
262
+ plateUnit &&
263
+ barUnit === plateUnit &&
264
+ Number.isFinite(barWeight) &&
265
+ Number.isFinite(plateWeight)) {
266
+ const load = normalizeStrengthLoadValue(barWeight + (plateWeight * 2));
267
+ return loadDescription
268
+ ? {
269
+ exercise,
270
+ load,
271
+ loadUnit: barUnit,
272
+ loadDescription,
273
+ }
274
+ : {
275
+ exercise,
276
+ load,
277
+ loadUnit: barUnit,
278
+ };
279
+ }
280
+ return loadDescription
281
+ ? {
282
+ exercise,
283
+ loadDescription,
284
+ }
285
+ : {
286
+ exercise,
287
+ };
288
+ }
289
+ const simpleLoadMatch = normalized.match(strengthSimpleLoadPattern);
290
+ if (simpleLoadMatch) {
291
+ const exercise = normalizeStrengthExerciseName(simpleLoadMatch[1] ?? '');
292
+ const loadUnit = normalizeStrengthLoadUnit(simpleLoadMatch[3] ?? '');
293
+ const load = Number.parseFloat(simpleLoadMatch[2] ?? '');
294
+ if (!exercise) {
295
+ return null;
296
+ }
297
+ if (loadUnit && Number.isFinite(load)) {
298
+ const normalizedLoad = normalizeStrengthLoadValue(load);
299
+ const loadDescription = extractStrengthLoadDescription(normalized, simpleLoadMatch[1] ?? '');
300
+ return loadDescription
301
+ ? {
302
+ exercise,
303
+ load: normalizedLoad,
304
+ loadUnit,
305
+ loadDescription,
306
+ }
307
+ : {
308
+ exercise,
309
+ load: normalizedLoad,
310
+ loadUnit,
311
+ };
312
+ }
313
+ const loadDescription = extractStrengthLoadDescription(normalized, simpleLoadMatch[1] ?? '');
314
+ return loadDescription
315
+ ? {
316
+ exercise,
317
+ loadDescription,
318
+ }
319
+ : {
320
+ exercise,
321
+ };
322
+ }
323
+ const exercise = normalizeStrengthExerciseName(normalized);
324
+ if (!exercise) {
325
+ return null;
326
+ }
327
+ return { exercise };
328
+ }
329
+ function buildStrengthExerciseRecord(details, setCount, repsPerSet) {
330
+ if (typeof details.load === 'number' && details.loadUnit) {
331
+ return compactObject({
332
+ exercise: details.exercise,
333
+ setCount,
334
+ repsPerSet,
335
+ load: details.load,
336
+ loadUnit: details.loadUnit,
337
+ loadDescription: details.loadDescription,
338
+ });
339
+ }
340
+ return compactObject({
341
+ exercise: details.exercise,
342
+ setCount,
343
+ repsPerSet,
344
+ loadDescription: details.loadDescription,
345
+ });
346
+ }
347
+ function normalizeExerciseFragment(value) {
348
+ return normalizeOptionalText(value.replace(/[.,;:!?]+$/gu, '').replace(/\s+/gu, ' '));
349
+ }
350
+ function normalizeStrengthExerciseName(value) {
351
+ const normalized = normalizeOptionalText(value
352
+ .replace(/[.,;:!?]+$/gu, '')
353
+ .replace(/^(?:an?|the)\s+/iu, '')
354
+ .replace(/\s+/gu, ' '));
355
+ return normalized ? normalized.toLowerCase() : null;
356
+ }
357
+ function extractStrengthLoadDescription(fragment, exerciseText) {
358
+ const exerciseLength = exerciseText.length;
359
+ if (exerciseLength <= 0 || exerciseLength >= fragment.length) {
360
+ return undefined;
361
+ }
362
+ return normalizeOptionalText(fragment
363
+ .slice(exerciseLength)
364
+ .replace(/^\s+(?:with|at)\s+/iu, '')
365
+ .replace(/^(?:an?\s+)/iu, ''));
366
+ }
367
+ function normalizeStrengthLoadUnit(value) {
368
+ const normalized = value.trim().toLowerCase();
369
+ if (normalized === 'lb' ||
370
+ normalized === 'lbs' ||
371
+ normalized === 'pound' ||
372
+ normalized === 'pounds') {
373
+ return 'lb';
374
+ }
375
+ if (normalized === 'kg' ||
376
+ normalized === 'kgs' ||
377
+ normalized === 'kilogram' ||
378
+ normalized === 'kilograms') {
379
+ return 'kg';
380
+ }
381
+ return undefined;
382
+ }
383
+ function normalizeStrengthLoadValue(value) {
384
+ return Number(value.toFixed(3));
385
+ }
386
+ function validateDistanceKm(value) {
387
+ if (!Number.isFinite(value) || value <= 0) {
388
+ throw new VaultCliError('invalid_option', 'Workout distance must be a positive number of kilometers.');
389
+ }
390
+ return Number(value.toFixed(3));
391
+ }
392
+ function buildWorkoutTitle(label, durationMinutes) {
393
+ const loweredLabel = label.trim().toLowerCase() || 'workout';
394
+ const title = `${durationMinutes}-minute ${loweredLabel}`;
395
+ return title.slice(0, 160);
396
+ }
397
+ function humanizeRequestedWorkoutType(value) {
398
+ const normalized = value.trim().replace(/\s+/gu, ' ');
399
+ if (normalized.length === 0) {
400
+ return 'Workout';
401
+ }
402
+ return normalized[0].toUpperCase() + normalized.slice(1);
403
+ }
404
+ function slugifyWorkoutType(value) {
405
+ return value
406
+ .trim()
407
+ .toLowerCase()
408
+ .replace(/[^a-z0-9]+/gu, '-')
409
+ .replace(/^-+|-+$/gu, '');
410
+ }
411
+ //# sourceMappingURL=workout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workout.js","sourceRoot":"","sources":["../../src/usecases/workout.ts"],"names":[],"mappings":"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"}