@murphai/murph 1.3.1 → 1.3.2
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.
- package/CHANGELOG.md +808 -0
- package/config.schema.json +91 -40
- package/dist/bin.js +6 -4
- package/dist/bin.js.map +1 -1
- package/dist/cli-entry.d.ts +8 -1
- package/dist/cli-entry.d.ts.map +1 -1
- package/dist/cli-entry.js +79 -3
- package/dist/cli-entry.js.map +1 -1
- package/dist/commands/audit-command-helpers.d.ts.map +1 -1
- package/dist/commands/audit-command-helpers.js +7 -5
- package/dist/commands/audit-command-helpers.js.map +1 -1
- package/dist/commands/batch.d.ts +5 -5
- package/dist/commands/batch.d.ts.map +1 -1
- package/dist/commands/batch.js +2 -21
- package/dist/commands/batch.js.map +1 -1
- package/dist/commands/commons.d.ts.map +1 -1
- package/dist/commands/commons.js +2 -4
- package/dist/commands/commons.js.map +1 -1
- package/dist/commands/exercise.d.ts.map +1 -1
- package/dist/commands/exercise.js +16 -3
- package/dist/commands/exercise.js.map +1 -1
- package/dist/commands/experiment-progress-card-image.d.ts.map +1 -1
- package/dist/commands/experiment-progress-card-image.js +63 -12
- package/dist/commands/experiment-progress-card-image.js.map +1 -1
- package/dist/commands/experiment.d.ts.map +1 -1
- package/dist/commands/experiment.js +45 -5
- package/dist/commands/experiment.js.map +1 -1
- package/dist/commands/export-intake-read-helpers.d.ts.map +1 -1
- package/dist/commands/export-intake-read-helpers.js +2 -3
- package/dist/commands/export-intake-read-helpers.js.map +1 -1
- package/dist/commands/food.d.ts.map +1 -1
- package/dist/commands/food.js +1 -7
- package/dist/commands/food.js.map +1 -1
- package/dist/commands/habitat.d.ts.map +1 -1
- package/dist/commands/habitat.js +120 -9
- package/dist/commands/habitat.js.map +1 -1
- package/dist/commands/health-blood-test-save.d.ts.map +1 -1
- package/dist/commands/health-blood-test-save.js +42 -8
- package/dist/commands/health-blood-test-save.js.map +1 -1
- package/dist/commands/meal.d.ts.map +1 -1
- package/dist/commands/meal.js +4 -1
- package/dist/commands/meal.js.map +1 -1
- package/dist/commands/measurement.d.ts.map +1 -1
- package/dist/commands/measurement.js +3 -0
- package/dist/commands/measurement.js.map +1 -1
- package/dist/commands/murph-age.d.ts +9 -1
- package/dist/commands/murph-age.d.ts.map +1 -1
- package/dist/commands/murph-age.js +132 -7
- package/dist/commands/murph-age.js.map +1 -1
- package/dist/commands/public-validation-issue.d.ts +7 -0
- package/dist/commands/public-validation-issue.d.ts.map +1 -0
- package/dist/commands/public-validation-issue.js +7 -0
- package/dist/commands/public-validation-issue.js.map +1 -0
- package/dist/commands/scheduled-log.d.ts +12 -0
- package/dist/commands/scheduled-log.d.ts.map +1 -1
- package/dist/commands/scheduled-log.js +456 -106
- package/dist/commands/scheduled-log.js.map +1 -1
- package/dist/commands/wearables.d.ts +286 -0
- package/dist/commands/wearables.d.ts.map +1 -1
- package/dist/commands/wearables.js +33 -1
- package/dist/commands/wearables.js.map +1 -1
- package/dist/commands/workout-live.d.ts.map +1 -1
- package/dist/commands/workout-live.js +123 -42
- package/dist/commands/workout-live.js.map +1 -1
- package/dist/commands/workout-typed-options.d.ts +38 -0
- package/dist/commands/workout-typed-options.d.ts.map +1 -0
- package/dist/commands/workout-typed-options.js +90 -0
- package/dist/commands/workout-typed-options.js.map +1 -0
- package/dist/commands/workout.d.ts.map +1 -1
- package/dist/commands/workout.js +80 -73
- package/dist/commands/workout.js.map +1 -1
- package/dist/hosted-data-api-labels.d.ts.map +1 -1
- package/dist/hosted-data-api-labels.js +161 -30
- package/dist/hosted-data-api-labels.js.map +1 -1
- package/dist/incur-error-bridge.d.ts.map +1 -1
- package/dist/incur-error-bridge.js +7 -15
- package/dist/incur-error-bridge.js.map +1 -1
- package/dist/incur.generated.d.ts +22 -13
- package/dist/incur.generated.d.ts.map +1 -1
- package/dist/mapbox-address.d.ts.map +1 -1
- package/dist/mapbox-address.js +3 -4
- package/dist/mapbox-address.js.map +1 -1
- package/dist/mapbox-route-client.d.ts +2 -2
- package/dist/mapbox-route-client.d.ts.map +1 -1
- package/dist/mapbox-route-client.js +49 -12
- package/dist/mapbox-route-client.js.map +1 -1
- package/dist/mapbox-route-directions.d.ts.map +1 -1
- package/dist/mapbox-route-directions.js +0 -1
- package/dist/mapbox-route-directions.js.map +1 -1
- package/dist/mapbox-route-elevation.js +0 -1
- package/dist/mapbox-route-elevation.js.map +1 -1
- package/dist/mapbox-route-points.js +0 -2
- package/dist/mapbox-route-points.js.map +1 -1
- package/dist/mapbox-route.d.ts.map +1 -1
- package/dist/mapbox-route.js +1 -1
- package/dist/mapbox-route.js.map +1 -1
- package/dist/vault-cli-command-manifest.d.ts +304 -6
- package/dist/vault-cli-command-manifest.d.ts.map +1 -1
- package/dist/vault-cli-skill-hash.generated.d.ts +1 -1
- package/dist/vault-cli-skill-hash.generated.js +1 -1
- package/node_modules/@murphai/assistant-cli/dist/assistant/ui/ink.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-cli/dist/assistant/ui/ink.js +6 -2
- package/node_modules/@murphai/assistant-cli/dist/assistant/ui/ink.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/README.md +4 -3
- package/node_modules/@murphai/assistant-engine/dist/assistant/active-turn-input-controller.d.ts +15 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/active-turn-input-controller.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/active-turn-input-controller.js +121 -24
- package/node_modules/@murphai/assistant-engine/dist/assistant/active-turn-input-controller.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/active-turn-input-journal.js +2 -2
- package/node_modules/@murphai/assistant-engine/dist/assistant/active-turn-input-journal.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/ask-continuation.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/ask-continuation.js +1 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/ask-continuation.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/automation/reply.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/automation/reply.js +55 -7
- package/node_modules/@murphai/assistant-engine/dist/assistant/automation/reply.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/automation/run-loop.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/automation/run-loop.js +9 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/automation/run-loop.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/automation/shared.d.ts +1 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/automation/shared.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/automation/shared.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/cli-surface-contract.generated.json +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/codex-base-instructions.d.ts +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/codex-base-instructions.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/codex-base-instructions.js +7 -7
- package/node_modules/@murphai/assistant-engine/dist/assistant/codex-base-instructions.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn/planning.d.ts +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn/planning.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn/planning.js +123 -22
- package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn/planning.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn-runner.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn-runner.js +48 -19
- package/node_modules/@murphai/assistant-engine/dist/assistant/codex-turn-runner.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/context-snapshot.js +3 -7
- package/node_modules/@murphai/assistant-engine/dist/assistant/context-snapshot.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/cron/execution.d.ts +5 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/cron/execution.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/cron/execution.js +24 -10
- package/node_modules/@murphai/assistant-engine/dist/assistant/cron/execution.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/cron/schedule.d.ts +2 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/cron/schedule.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/cron/schedule.js +12 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/cron/schedule.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/delivery-service.d.ts +5 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/delivery-service.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/delivery-service.js +9 -10
- package/node_modules/@murphai/assistant-engine/dist/assistant/delivery-service.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/execution-context.d.ts +41 -9
- package/node_modules/@murphai/assistant-engine/dist/assistant/execution-context.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/execution-context.js +9 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/execution-context.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/experiment-support-automations.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/experiment-support-automations.js +2 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/experiment-support-automations.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-tool-context.d.ts +3 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-tool-context.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-tool-context.js +8 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/hosted-tool-context.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/issue-reporting.d.ts +3 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/issue-reporting.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/issue-reporting.js +26 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/issue-reporting.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/local-service.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/local-service.js +687 -370
- package/node_modules/@murphai/assistant-engine/dist/assistant/local-service.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/managed-automations.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/managed-automations.js +54 -18
- package/node_modules/@murphai/assistant-engine/dist/assistant/managed-automations.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/model-behavior.d.ts +2 -3
- package/node_modules/@murphai/assistant-engine/dist/assistant/model-behavior.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/model-behavior.js +10 -9
- package/node_modules/@murphai/assistant-engine/dist/assistant/model-behavior.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/notification-turn.d.ts +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/notification-turn.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/notification-turn.js +146 -18
- package/node_modules/@murphai/assistant-engine/dist/assistant/notification-turn.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/onboarding-followup-seed.d.ts +25 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/onboarding-followup-seed.d.ts.map +1 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/onboarding-followup-seed.js +72 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/onboarding-followup-seed.js.map +1 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/onboarding-state.d.ts +4 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/onboarding-state.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/onboarding-state.js +14 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/onboarding-state.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/store.d.ts +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/store.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/store.js +8 -5
- package/node_modules/@murphai/assistant-engine/dist/assistant/outbox/store.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/outbox.d.ts +4 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/outbox.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/outbox.js +8 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/outbox.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/private-completion-continuity.js +1 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/private-completion-continuity.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/providers/codex-cli.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/providers/codex-cli.js +25 -2
- package/node_modules/@murphai/assistant-engine/dist/assistant/providers/codex-cli.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/providers/helpers.d.ts +11 -3
- package/node_modules/@murphai/assistant-engine/dist/assistant/providers/helpers.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/providers/helpers.js +67 -176
- package/node_modules/@murphai/assistant-engine/dist/assistant/providers/helpers.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/providers/types.d.ts +17 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/providers/types.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/providers/types.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/reply-delivery-context.d.ts +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/reply-delivery-context.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/reply-delivery-context.js +10 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/reply-delivery-context.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/runtime-residue.d.ts +19 -4
- package/node_modules/@murphai/assistant-engine/dist/assistant/runtime-residue.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/runtime-residue.js +76 -40
- package/node_modules/@murphai/assistant-engine/dist/assistant/runtime-residue.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/service-contracts.d.ts +3 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/service-contracts.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/service-usage.d.ts +4 -2
- package/node_modules/@murphai/assistant-engine/dist/assistant/service-usage.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/service-usage.js +8 -7
- package/node_modules/@murphai/assistant-engine/dist/assistant/service-usage.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/shared.d.ts +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/shared.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/shared.js +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/shared.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/store/types.d.ts +1 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/store/types.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/store.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/store.js +6 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/store.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/system-prompt.d.ts +3 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/system-prompt.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/system-prompt.js +57 -29
- package/node_modules/@murphai/assistant-engine/dist/assistant/system-prompt.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/tool-validation-digest.d.ts +1 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/tool-validation-digest.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/tool-validation-digest.js +17 -3
- package/node_modules/@murphai/assistant-engine/dist/assistant/tool-validation-digest.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/tool-validation-feedback.d.ts +4 -7
- package/node_modules/@murphai/assistant-engine/dist/assistant/tool-validation-feedback.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/tool-validation-feedback.js +21 -6
- package/node_modules/@murphai/assistant-engine/dist/assistant/tool-validation-feedback.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/turn-finalizer.d.ts +1 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/turn-finalizer.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/turn-finalizer.js +6 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant/turn-finalizer.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/turn-input.d.ts +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/turn-input.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/usage-attribution.d.ts +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/usage-attribution.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant/usage-attribution.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-ask.js +8 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-ask.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-cli-access.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-cli-access.js +1 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-cli-access.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/analyze-video-tool.d.ts +49 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/analyze-video-tool.d.ts.map +1 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/analyze-video-tool.js +387 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/analyze-video-tool.js.map +1 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-protocol.d.ts +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-protocol.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-protocol.js +12 -13
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-protocol.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-requests.d.ts +1 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-requests.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-requests.js +16 -5
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-requests.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-rpc.d.ts +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-rpc.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-rpc.js +2 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/app-server-rpc.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/command-family.d.ts +4 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/command-family.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/command-family.js +26 -13
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/command-family.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tool-catalog.d.ts +1024 -1091
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tool-catalog.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tool-catalog.js +354 -330
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tool-catalog.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/analyze-video.d.ts +50 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/analyze-video.d.ts.map +1 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/analyze-video.js +79 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/analyze-video.js.map +1 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/automation-model-input-schema.d.ts +4 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/automation-model-input-schema.d.ts.map +1 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/automation-model-input-schema.js +153 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/automation-model-input-schema.js.map +1 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/automation.d.ts +4 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/automation.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/automation.js +29 -35
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/automation.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/device.d.ts +4 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/device.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/device.js +43 -9
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/device.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/dynamic-tool-wrapper.d.ts +6 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/dynamic-tool-wrapper.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/dynamic-tool-wrapper.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/member-memory.d.ts +60 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/member-memory.d.ts.map +1 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/member-memory.js +91 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/member-memory.js.map +1 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/physical-notes.d.ts +41 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/physical-notes.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/physical-notes.js +85 -9
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools/physical-notes.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools.d.ts +25 -2
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools.js +280 -89
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/dynamic-tools.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/failures.js +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/response-card-validation-feedback.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/response-card-validation-feedback.js +1 -3
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/response-card-validation-feedback.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/workout-delivery-context.d.ts +19 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/workout-delivery-context.d.ts.map +1 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/workout-delivery-context.js +203 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex/workout-delivery-context.js.map +1 -0
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex.d.ts +9 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex.js +220 -130
- package/node_modules/@murphai/assistant-engine/dist/assistant-codex.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-runtime-residue.d.ts +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-runtime-residue.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-runtime-residue.js +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-runtime-residue.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-skill-assets.d.ts +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-skill-assets.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-skill-assets.js +1 -1
- package/node_modules/@murphai/assistant-engine/dist/assistant-skill-assets.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/index.d.ts +2 -1
- package/node_modules/@murphai/assistant-engine/dist/index.d.ts.map +1 -1
- package/node_modules/@murphai/assistant-engine/dist/index.js +1 -0
- package/node_modules/@murphai/assistant-engine/dist/index.js.map +1 -1
- package/node_modules/@murphai/assistant-engine/skills/automatic-meal-capture/SKILL.md +111 -68
- package/node_modules/@murphai/assistant-engine/skills/behavior-followthrough/SKILL.md +0 -2
- package/node_modules/@murphai/assistant-engine/skills/daily-activity/SKILL.md +11 -4
- package/node_modules/@murphai/assistant-engine/skills/food-journal/SKILL.md +83 -22
- package/node_modules/@murphai/assistant-engine/skills/hosted-low-usage/SKILL.md +3 -3
- package/node_modules/@murphai/assistant-engine/skills/murph-family/SKILL.md +1 -1
- package/node_modules/@murphai/assistant-engine/skills/nutrition-strategy/SKILL.md +17 -11
- package/node_modules/@murphai/assistant-engine/skills/nutrition-strategy/references/daily-nutrition-card-goals.md +62 -34
- package/node_modules/@murphai/assistant-engine/skills/physical-notes/SKILL.md +47 -0
- package/node_modules/@murphai/assistant-engine/skills/shared/exercise-catalog-runtime.md +6 -0
- package/node_modules/@murphai/assistant-engine/skills/signup-link/SKILL.md +1 -1
- package/node_modules/@murphai/assistant-engine/skills/strength-training/SKILL.md +12 -5
- package/node_modules/@murphai/assistant-engine/skills/tracked-table/SKILL.md +156 -66
- package/node_modules/@murphai/core/dist/automation.d.ts.map +1 -1
- package/node_modules/@murphai/core/dist/automation.js +17 -9
- package/node_modules/@murphai/core/dist/automation.js.map +1 -1
- package/node_modules/@murphai/core/dist/bank/habitat.d.ts +2 -0
- package/node_modules/@murphai/core/dist/bank/habitat.d.ts.map +1 -1
- package/node_modules/@murphai/core/dist/bank/habitat.js +27 -0
- package/node_modules/@murphai/core/dist/bank/habitat.js.map +1 -1
- package/node_modules/@murphai/core/dist/bank/regimens.js +1 -1
- package/node_modules/@murphai/core/dist/bank/regimens.js.map +1 -1
- package/node_modules/@murphai/core/dist/domains/events/ledger.d.ts +21 -0
- package/node_modules/@murphai/core/dist/domains/events/ledger.d.ts.map +1 -1
- package/node_modules/@murphai/core/dist/domains/events/ledger.js +102 -8
- package/node_modules/@murphai/core/dist/domains/events/ledger.js.map +1 -1
- package/node_modules/@murphai/core/dist/domains/events.d.ts +2 -2
- package/node_modules/@murphai/core/dist/domains/events.d.ts.map +1 -1
- package/node_modules/@murphai/core/dist/domains/events.js +1 -1
- package/node_modules/@murphai/core/dist/domains/events.js.map +1 -1
- package/node_modules/@murphai/core/dist/history/api.d.ts.map +1 -1
- package/node_modules/@murphai/core/dist/history/api.js +18 -3
- package/node_modules/@murphai/core/dist/history/api.js.map +1 -1
- package/node_modules/@murphai/core/dist/index.d.ts +4 -2
- package/node_modules/@murphai/core/dist/index.d.ts.map +1 -1
- package/node_modules/@murphai/core/dist/index.js +3 -1
- package/node_modules/@murphai/core/dist/index.js.map +1 -1
- package/node_modules/@murphai/core/dist/mutations.d.ts +25 -2
- package/node_modules/@murphai/core/dist/mutations.d.ts.map +1 -1
- package/node_modules/@murphai/core/dist/mutations.js +1588 -78
- package/node_modules/@murphai/core/dist/mutations.js.map +1 -1
- package/node_modules/@murphai/core/dist/operations/index.d.ts +1 -1
- package/node_modules/@murphai/core/dist/operations/index.d.ts.map +1 -1
- package/node_modules/@murphai/core/dist/operations/index.js +1 -1
- package/node_modules/@murphai/core/dist/operations/index.js.map +1 -1
- package/node_modules/@murphai/core/dist/operations/write-batch.d.ts +2 -0
- package/node_modules/@murphai/core/dist/operations/write-batch.d.ts.map +1 -1
- package/node_modules/@murphai/core/dist/operations/write-batch.js +7 -0
- package/node_modules/@murphai/core/dist/operations/write-batch.js.map +1 -1
- package/node_modules/@murphai/core/dist/protocols.d.ts.map +1 -1
- package/node_modules/@murphai/core/dist/protocols.js +52 -9
- package/node_modules/@murphai/core/dist/protocols.js.map +1 -1
- package/node_modules/@murphai/core/dist/public-mutations.d.ts +1 -1
- package/node_modules/@murphai/core/dist/public-mutations.d.ts.map +1 -1
- package/node_modules/@murphai/core/dist/public-mutations.js +2 -2
- package/node_modules/@murphai/core/dist/public-mutations.js.map +1 -1
- package/node_modules/@murphai/core/dist/scheduled-logs.d.ts +3 -0
- package/node_modules/@murphai/core/dist/scheduled-logs.d.ts.map +1 -1
- package/node_modules/@murphai/core/dist/scheduled-logs.js +65 -29
- package/node_modules/@murphai/core/dist/scheduled-logs.js.map +1 -1
- package/node_modules/@murphai/device-syncd/README.md +140 -46
- package/node_modules/@murphai/device-syncd/dist/client.d.ts +14 -0
- package/node_modules/@murphai/device-syncd/dist/client.d.ts.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/client.js.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/config/connect-routes.d.ts +4 -1
- package/node_modules/@murphai/device-syncd/dist/config/connect-routes.d.ts.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/config/connect-routes.js +24 -2
- package/node_modules/@murphai/device-syncd/dist/config/connect-routes.js.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/config/junction-connect-sources.js +2 -2
- package/node_modules/@murphai/device-syncd/dist/config/junction-connect-sources.js.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/config/provider-manifests.d.ts +53 -0
- package/node_modules/@murphai/device-syncd/dist/config/provider-manifests.d.ts.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/config/provider-manifests.js +13 -0
- package/node_modules/@murphai/device-syncd/dist/config/provider-manifests.js.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/connect-config.d.ts +1 -1
- package/node_modules/@murphai/device-syncd/dist/connect-config.d.ts.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/connect-config.js +1 -1
- package/node_modules/@murphai/device-syncd/dist/connect-config.js.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/fitbit-migration.d.ts +57 -0
- package/node_modules/@murphai/device-syncd/dist/fitbit-migration.d.ts.map +1 -0
- package/node_modules/@murphai/device-syncd/dist/fitbit-migration.js +166 -0
- package/node_modules/@murphai/device-syncd/dist/fitbit-migration.js.map +1 -0
- package/node_modules/@murphai/device-syncd/dist/hosted-runtime.d.ts +43 -0
- package/node_modules/@murphai/device-syncd/dist/hosted-runtime.d.ts.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/hosted-runtime.js +129 -5
- package/node_modules/@murphai/device-syncd/dist/hosted-runtime.js.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/junction-historical-backfill-progress.d.ts +3 -0
- package/node_modules/@murphai/device-syncd/dist/junction-historical-backfill-progress.d.ts.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/junction-historical-backfill-progress.js +36 -16
- package/node_modules/@murphai/device-syncd/dist/junction-historical-backfill-progress.js.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/junction-inline-authority.d.ts +17 -2
- package/node_modules/@murphai/device-syncd/dist/junction-inline-authority.d.ts.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/junction-inline-authority.js +99 -40
- package/node_modules/@murphai/device-syncd/dist/junction-inline-authority.js.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/junction-source-reconnect.d.ts +17 -0
- package/node_modules/@murphai/device-syncd/dist/junction-source-reconnect.d.ts.map +1 -0
- package/node_modules/@murphai/device-syncd/dist/junction-source-reconnect.js +45 -0
- package/node_modules/@murphai/device-syncd/dist/junction-source-reconnect.js.map +1 -0
- package/node_modules/@murphai/device-syncd/dist/junction-timeseries-progress.d.ts +8 -1
- package/node_modules/@murphai/device-syncd/dist/junction-timeseries-progress.d.ts.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/junction-timeseries-progress.js +12 -1
- package/node_modules/@murphai/device-syncd/dist/junction-timeseries-progress.js.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/providers/junction-client.d.ts +7 -0
- package/node_modules/@murphai/device-syncd/dist/providers/junction-client.d.ts.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/providers/junction-client.js +285 -46
- package/node_modules/@murphai/device-syncd/dist/providers/junction-client.js.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/providers/junction.d.ts +9 -0
- package/node_modules/@murphai/device-syncd/dist/providers/junction.d.ts.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/providers/junction.js +2045 -367
- package/node_modules/@murphai/device-syncd/dist/providers/junction.js.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/public-account.d.ts +2 -0
- package/node_modules/@murphai/device-syncd/dist/public-account.d.ts.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/public-account.js +96 -0
- package/node_modules/@murphai/device-syncd/dist/public-account.js.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/public-ingress.d.ts.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/public-ingress.js +6 -4
- package/node_modules/@murphai/device-syncd/dist/public-ingress.js.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/service.d.ts +6 -2
- package/node_modules/@murphai/device-syncd/dist/service.d.ts.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/service.js +385 -44
- package/node_modules/@murphai/device-syncd/dist/service.js.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/source-staleness.d.ts +15 -0
- package/node_modules/@murphai/device-syncd/dist/source-staleness.d.ts.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/source-staleness.js +25 -1
- package/node_modules/@murphai/device-syncd/dist/source-staleness.js.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/store/jobs.d.ts +10 -1
- package/node_modules/@murphai/device-syncd/dist/store/jobs.d.ts.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/store/jobs.js +95 -1
- package/node_modules/@murphai/device-syncd/dist/store/jobs.js.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/store/schema.d.ts +1 -1
- package/node_modules/@murphai/device-syncd/dist/store/schema.d.ts.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/store/schema.js +25 -3
- package/node_modules/@murphai/device-syncd/dist/store/schema.js.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/store/sources.d.ts +24 -2
- package/node_modules/@murphai/device-syncd/dist/store/sources.d.ts.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/store/sources.js +223 -14
- package/node_modules/@murphai/device-syncd/dist/store/sources.js.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/store.d.ts +13 -3
- package/node_modules/@murphai/device-syncd/dist/store.d.ts.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/store.js +104 -22
- package/node_modules/@murphai/device-syncd/dist/store.js.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/types.d.ts +96 -9
- package/node_modules/@murphai/device-syncd/dist/types.d.ts.map +1 -1
- package/node_modules/@murphai/device-syncd/dist/types.js +4 -0
- package/node_modules/@murphai/device-syncd/dist/types.js.map +1 -1
- package/node_modules/@murphai/device-syncd/package.json +8 -0
- package/node_modules/@murphai/health-metrics/dist/definitions/activity.d.ts.map +1 -1
- package/node_modules/@murphai/health-metrics/dist/definitions/activity.js +66 -0
- package/node_modules/@murphai/health-metrics/dist/definitions/activity.js.map +1 -1
- package/node_modules/@murphai/health-metrics/dist/definitions/body.js +2 -2
- package/node_modules/@murphai/health-metrics/dist/definitions/body.js.map +1 -1
- package/node_modules/@murphai/health-metrics/dist/normalize.d.ts.map +1 -1
- package/node_modules/@murphai/health-metrics/dist/normalize.js +3 -0
- package/node_modules/@murphai/health-metrics/dist/normalize.js.map +1 -1
- package/node_modules/@murphai/health-metrics/dist/wearable-metric-catalog.d.ts +3 -1
- package/node_modules/@murphai/health-metrics/dist/wearable-metric-catalog.d.ts.map +1 -1
- package/node_modules/@murphai/health-metrics/dist/wearable-metric-catalog.js +5 -1
- package/node_modules/@murphai/health-metrics/dist/wearable-metric-catalog.js.map +1 -1
- package/node_modules/@murphai/health-metrics/dist/wearable-provider-catalog.d.ts +79 -0
- package/node_modules/@murphai/health-metrics/dist/wearable-provider-catalog.d.ts.map +1 -1
- package/node_modules/@murphai/health-metrics/dist/wearable-provider-catalog.js +19 -0
- package/node_modules/@murphai/health-metrics/dist/wearable-provider-catalog.js.map +1 -1
- package/node_modules/@murphai/importers/dist/core-port.d.ts +15 -1
- package/node_modules/@murphai/importers/dist/core-port.d.ts.map +1 -1
- package/node_modules/@murphai/importers/dist/core-port.js.map +1 -1
- package/node_modules/@murphai/importers/dist/create-importers.d.ts +9 -1
- package/node_modules/@murphai/importers/dist/create-importers.d.ts.map +1 -1
- package/node_modules/@murphai/importers/dist/create-importers.js +12 -2
- package/node_modules/@murphai/importers/dist/create-importers.js.map +1 -1
- package/node_modules/@murphai/importers/dist/device-providers/import-device-provider-snapshot.d.ts +17 -3
- package/node_modules/@murphai/importers/dist/device-providers/import-device-provider-snapshot.d.ts.map +1 -1
- package/node_modules/@murphai/importers/dist/device-providers/import-device-provider-snapshot.js +102 -8
- package/node_modules/@murphai/importers/dist/device-providers/import-device-provider-snapshot.js.map +1 -1
- package/node_modules/@murphai/importers/dist/device-providers/index.d.ts +5 -4
- package/node_modules/@murphai/importers/dist/device-providers/index.d.ts.map +1 -1
- package/node_modules/@murphai/importers/dist/device-providers/index.js +4 -3
- package/node_modules/@murphai/importers/dist/device-providers/index.js.map +1 -1
- package/node_modules/@murphai/importers/dist/device-providers/junction-bounded-features.d.ts +11 -1
- package/node_modules/@murphai/importers/dist/device-providers/junction-bounded-features.d.ts.map +1 -1
- package/node_modules/@murphai/importers/dist/device-providers/junction-bounded-features.js +420 -27
- package/node_modules/@murphai/importers/dist/device-providers/junction-bounded-features.js.map +1 -1
- package/node_modules/@murphai/importers/dist/device-providers/junction-origin.d.ts +1 -0
- package/node_modules/@murphai/importers/dist/device-providers/junction-origin.d.ts.map +1 -1
- package/node_modules/@murphai/importers/dist/device-providers/junction-origin.js +7 -2
- package/node_modules/@murphai/importers/dist/device-providers/junction-origin.js.map +1 -1
- package/node_modules/@murphai/importers/dist/device-providers/junction-resources.d.ts +4 -1
- package/node_modules/@murphai/importers/dist/device-providers/junction-resources.d.ts.map +1 -1
- package/node_modules/@murphai/importers/dist/device-providers/junction-resources.js +42 -1
- package/node_modules/@murphai/importers/dist/device-providers/junction-resources.js.map +1 -1
- package/node_modules/@murphai/importers/dist/device-providers/junction-timeseries-features.d.ts +79 -0
- package/node_modules/@murphai/importers/dist/device-providers/junction-timeseries-features.d.ts.map +1 -0
- package/node_modules/@murphai/importers/dist/device-providers/junction-timeseries-features.js +356 -0
- package/node_modules/@murphai/importers/dist/device-providers/junction-timeseries-features.js.map +1 -0
- package/node_modules/@murphai/importers/dist/device-providers/junction.d.ts +76 -3
- package/node_modules/@murphai/importers/dist/device-providers/junction.d.ts.map +1 -1
- package/node_modules/@murphai/importers/dist/device-providers/junction.js +1676 -347
- package/node_modules/@murphai/importers/dist/device-providers/junction.js.map +1 -1
- package/node_modules/@murphai/importers/dist/device-providers/shared-normalization.d.ts.map +1 -1
- package/node_modules/@murphai/importers/dist/device-providers/shared-normalization.js +1 -0
- package/node_modules/@murphai/importers/dist/device-providers/shared-normalization.js.map +1 -1
- package/node_modules/@murphai/importers/dist/device-providers/types.d.ts +9 -1
- package/node_modules/@murphai/importers/dist/device-providers/types.d.ts.map +1 -1
- package/node_modules/@murphai/importers/dist/index.d.ts +2 -2
- package/node_modules/@murphai/importers/dist/index.d.ts.map +1 -1
- package/node_modules/@murphai/importers/dist/index.js +1 -1
- package/node_modules/@murphai/importers/dist/index.js.map +1 -1
- package/node_modules/@murphai/inboxd/README.md +1 -1
- package/node_modules/@murphai/inboxd/dist/indexing/retention.d.ts +6 -0
- package/node_modules/@murphai/inboxd/dist/indexing/retention.d.ts.map +1 -1
- package/node_modules/@murphai/inboxd/dist/indexing/retention.js +64 -18
- package/node_modules/@murphai/inboxd/dist/indexing/retention.js.map +1 -1
- package/node_modules/@murphai/inboxd/dist/retention.d.ts +1 -1
- package/node_modules/@murphai/inboxd/dist/retention.d.ts.map +1 -1
- package/node_modules/@murphai/inboxd/dist/retention.js +1 -1
- package/node_modules/@murphai/inboxd/dist/retention.js.map +1 -1
- package/node_modules/@murphai/operator-config/dist/assistant-cli-contracts.d.ts +1 -0
- package/node_modules/@murphai/operator-config/dist/assistant-cli-contracts.d.ts.map +1 -1
- package/node_modules/@murphai/operator-config/dist/assistant-cli-contracts.js +5 -0
- package/node_modules/@murphai/operator-config/dist/assistant-cli-contracts.js.map +1 -1
- package/node_modules/@murphai/operator-config/dist/assistant-response-cards.d.ts +175 -152
- package/node_modules/@murphai/operator-config/dist/assistant-response-cards.d.ts.map +1 -1
- package/node_modules/@murphai/operator-config/dist/assistant-response-cards.js +62 -41
- package/node_modules/@murphai/operator-config/dist/assistant-response-cards.js.map +1 -1
- package/node_modules/@murphai/operator-config/dist/device-sync-client.d.ts.map +1 -1
- package/node_modules/@murphai/operator-config/dist/device-sync-client.js +1 -5
- package/node_modules/@murphai/operator-config/dist/device-sync-client.js.map +1 -1
- package/node_modules/@murphai/operator-config/dist/vault-cli-contracts.d.ts +66 -0
- package/node_modules/@murphai/operator-config/dist/vault-cli-contracts.d.ts.map +1 -1
- package/node_modules/@murphai/operator-config/dist/vault-cli-contracts.js +58 -0
- package/node_modules/@murphai/operator-config/dist/vault-cli-contracts.js.map +1 -1
- package/node_modules/@murphai/operator-config/dist/vault-cli-error-projection.d.ts +24 -0
- package/node_modules/@murphai/operator-config/dist/vault-cli-error-projection.d.ts.map +1 -0
- package/node_modules/@murphai/operator-config/dist/vault-cli-error-projection.js +219 -0
- package/node_modules/@murphai/operator-config/dist/vault-cli-error-projection.js.map +1 -0
- package/node_modules/@murphai/operator-config/dist/vault-cli-errors.d.ts.map +1 -1
- package/node_modules/@murphai/operator-config/dist/vault-cli-errors.js.map +1 -1
- package/node_modules/@murphai/operator-config/dist/workout-action-binding.d.ts +9 -0
- package/node_modules/@murphai/operator-config/dist/workout-action-binding.d.ts.map +1 -1
- package/node_modules/@murphai/operator-config/dist/workout-action-binding.js +48 -5
- package/node_modules/@murphai/operator-config/dist/workout-action-binding.js.map +1 -1
- package/node_modules/@murphai/operator-config/package.json +5 -0
- package/node_modules/@murphai/query/README.md +20 -5
- package/node_modules/@murphai/query/dist/browser-replica/build.d.ts +1 -1
- package/node_modules/@murphai/query/dist/browser-replica/build.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/browser-replica/build.js +25 -16
- package/node_modules/@murphai/query/dist/browser-replica/build.js.map +1 -1
- package/node_modules/@murphai/query/dist/browser-replica/json.d.ts +6 -0
- package/node_modules/@murphai/query/dist/browser-replica/json.d.ts.map +1 -0
- package/node_modules/@murphai/query/dist/browser-replica/json.js +103 -0
- package/node_modules/@murphai/query/dist/browser-replica/json.js.map +1 -0
- package/node_modules/@murphai/query/dist/browser-replica/shared.d.ts +1 -0
- package/node_modules/@murphai/query/dist/browser-replica/shared.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/browser-replica/source.d.ts +13 -0
- package/node_modules/@murphai/query/dist/browser-replica/source.d.ts.map +1 -0
- package/node_modules/@murphai/query/dist/browser-replica/source.js +45 -0
- package/node_modules/@murphai/query/dist/browser-replica/source.js.map +1 -0
- package/node_modules/@murphai/query/dist/browser-replica-server.d.ts +2 -0
- package/node_modules/@murphai/query/dist/browser-replica-server.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/browser-replica-server.js +2 -0
- package/node_modules/@murphai/query/dist/browser-replica-server.js.map +1 -1
- package/node_modules/@murphai/query/dist/health/blood-tests.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/health/blood-tests.js +3 -2
- package/node_modules/@murphai/query/dist/health/blood-tests.js.map +1 -1
- package/node_modules/@murphai/query/dist/health/canonical-collector.d.ts +11 -1
- package/node_modules/@murphai/query/dist/health/canonical-collector.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/health/canonical-collector.js +39 -16
- package/node_modules/@murphai/query/dist/health/canonical-collector.js.map +1 -1
- package/node_modules/@murphai/query/dist/health/entity-slices.d.ts +9 -3
- package/node_modules/@murphai/query/dist/health/entity-slices.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/health/entity-slices.js +6 -6
- package/node_modules/@murphai/query/dist/health/entity-slices.js.map +1 -1
- package/node_modules/@murphai/query/dist/health/immunizations.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/health/immunizations.js +14 -11
- package/node_modules/@murphai/query/dist/health/immunizations.js.map +1 -1
- package/node_modules/@murphai/query/dist/health/loaders.d.ts +21 -7
- package/node_modules/@murphai/query/dist/health/loaders.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/health/loaders.js +53 -15
- package/node_modules/@murphai/query/dist/health/loaders.js.map +1 -1
- package/node_modules/@murphai/query/dist/health/registries.d.ts +1 -0
- package/node_modules/@murphai/query/dist/health/registries.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/health/registries.js.map +1 -1
- package/node_modules/@murphai/query/dist/index.d.ts +4 -3
- package/node_modules/@murphai/query/dist/index.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/index.js +4 -3
- package/node_modules/@murphai/query/dist/index.js.map +1 -1
- package/node_modules/@murphai/query/dist/meal-nutrition.d.ts +1 -1
- package/node_modules/@murphai/query/dist/meal-nutrition.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/meal-nutrition.js +10 -3
- package/node_modules/@murphai/query/dist/meal-nutrition.js.map +1 -1
- package/node_modules/@murphai/query/dist/metrics/projection.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/metrics/projection.js +19 -6
- package/node_modules/@murphai/query/dist/metrics/projection.js.map +1 -1
- package/node_modules/@murphai/query/dist/murph-age.d.ts +5 -1
- package/node_modules/@murphai/query/dist/murph-age.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/murph-age.js +22 -8
- package/node_modules/@murphai/query/dist/murph-age.js.map +1 -1
- package/node_modules/@murphai/query/dist/projection/entity-store.js +4 -4
- package/node_modules/@murphai/query/dist/projection/entity-store.js.map +1 -1
- package/node_modules/@murphai/query/dist/projection/schema.d.ts +1 -1
- package/node_modules/@murphai/query/dist/projection/schema.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/projection/schema.js +3 -1
- package/node_modules/@murphai/query/dist/projection/schema.js.map +1 -1
- package/node_modules/@murphai/query/dist/projection/wearable-summary-compose.js +4 -0
- package/node_modules/@murphai/query/dist/projection/wearable-summary-compose.js.map +1 -1
- package/node_modules/@murphai/query/dist/projection/wearable-summary-projector.js +4 -0
- package/node_modules/@murphai/query/dist/projection/wearable-summary-projector.js.map +1 -1
- package/node_modules/@murphai/query/dist/query-visibility.d.ts +5 -0
- package/node_modules/@murphai/query/dist/query-visibility.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/query-visibility.js +11 -5
- package/node_modules/@murphai/query/dist/query-visibility.js.map +1 -1
- package/node_modules/@murphai/query/dist/read-model.d.ts +8 -0
- package/node_modules/@murphai/query/dist/read-model.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/read-model.js +11 -1
- package/node_modules/@murphai/query/dist/read-model.js.map +1 -1
- package/node_modules/@murphai/query/dist/scheduled-logs.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/scheduled-logs.js +55 -79
- package/node_modules/@murphai/query/dist/scheduled-logs.js.map +1 -1
- package/node_modules/@murphai/query/dist/vault-source.d.ts +22 -4
- package/node_modules/@murphai/query/dist/vault-source.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/vault-source.js +188 -59
- package/node_modules/@murphai/query/dist/vault-source.js.map +1 -1
- package/node_modules/@murphai/query/dist/wearables/candidates.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/wearables/candidates.js +26 -15
- package/node_modules/@murphai/query/dist/wearables/candidates.js.map +1 -1
- package/node_modules/@murphai/query/dist/wearables/public-output.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/wearables/public-output.js +6 -0
- package/node_modules/@murphai/query/dist/wearables/public-output.js.map +1 -1
- package/node_modules/@murphai/query/dist/wearables/source-health.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/wearables/source-health.js +4 -0
- package/node_modules/@murphai/query/dist/wearables/source-health.js.map +1 -1
- package/node_modules/@murphai/query/dist/wearables/types.d.ts +41 -4
- package/node_modules/@murphai/query/dist/wearables/types.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/wearables/types.js +2 -0
- package/node_modules/@murphai/query/dist/wearables/types.js.map +1 -1
- package/node_modules/@murphai/query/dist/wearables/workout-features.d.ts +5 -0
- package/node_modules/@murphai/query/dist/wearables/workout-features.d.ts.map +1 -0
- package/node_modules/@murphai/query/dist/wearables/workout-features.js +179 -0
- package/node_modules/@murphai/query/dist/wearables/workout-features.js.map +1 -0
- package/node_modules/@murphai/query/dist/wearables.d.ts.map +1 -1
- package/node_modules/@murphai/query/dist/wearables.js +23 -6
- package/node_modules/@murphai/query/dist/wearables.js.map +1 -1
- package/node_modules/@murphai/query/package.json +5 -0
- package/node_modules/@murphai/runtime-state/README.md +1 -1
- package/node_modules/@murphai/runtime-state/dist/assistant-runtime-issues.d.ts +4 -0
- package/node_modules/@murphai/runtime-state/dist/assistant-runtime-issues.d.ts.map +1 -1
- package/node_modules/@murphai/runtime-state/dist/assistant-runtime-issues.js +16 -3
- package/node_modules/@murphai/runtime-state/dist/assistant-runtime-issues.js.map +1 -1
- package/node_modules/@murphai/runtime-state/dist/hosted-bundles.d.ts +1 -0
- package/node_modules/@murphai/runtime-state/dist/hosted-bundles.d.ts.map +1 -1
- package/node_modules/@murphai/runtime-state/dist/hosted-bundles.js +31 -0
- package/node_modules/@murphai/runtime-state/dist/hosted-bundles.js.map +1 -1
- package/node_modules/@murphai/runtime-state/dist/hosted-email.d.ts +5 -0
- package/node_modules/@murphai/runtime-state/dist/hosted-email.d.ts.map +1 -1
- package/node_modules/@murphai/runtime-state/dist/hosted-email.js +10 -0
- package/node_modules/@murphai/runtime-state/dist/hosted-email.js.map +1 -1
- package/node_modules/@murphai/setup-cli/dist/incur-error-bridge.d.ts.map +1 -1
- package/node_modules/@murphai/setup-cli/dist/incur-error-bridge.js +6 -15
- package/node_modules/@murphai/setup-cli/dist/incur-error-bridge.js.map +1 -1
- package/node_modules/@murphai/vault-usecases/README.md +9 -0
- package/node_modules/@murphai/vault-usecases/dist/commands/query-record-command-helpers.d.ts +6 -0
- package/node_modules/@murphai/vault-usecases/dist/commands/query-record-command-helpers.d.ts.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/commands/query-record-command-helpers.js +49 -1
- package/node_modules/@murphai/vault-usecases/dist/commands/query-record-command-helpers.js.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/capture.d.ts.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/capture.js +22 -12
- package/node_modules/@murphai/vault-usecases/dist/usecases/capture.js.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/clinical-imports.d.ts.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/clinical-imports.js +1 -3
- package/node_modules/@murphai/vault-usecases/dist/usecases/clinical-imports.js.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/document-meal-read.d.ts.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/document-meal-read.js +24 -18
- package/node_modules/@murphai/vault-usecases/dist/usecases/document-meal-read.js.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/encounter.d.ts.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/encounter.js +1 -3
- package/node_modules/@murphai/vault-usecases/dist/usecases/encounter.js.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/event-record-mutations.d.ts +8 -0
- package/node_modules/@murphai/vault-usecases/dist/usecases/event-record-mutations.d.ts.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/event-record-mutations.js +56 -5
- package/node_modules/@murphai/vault-usecases/dist/usecases/event-record-mutations.js.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/exact-event-record.d.ts +20 -0
- package/node_modules/@murphai/vault-usecases/dist/usecases/exact-event-record.d.ts.map +1 -0
- package/node_modules/@murphai/vault-usecases/dist/usecases/exact-event-record.js +72 -0
- package/node_modules/@murphai/vault-usecases/dist/usecases/exact-event-record.js.map +1 -0
- package/node_modules/@murphai/vault-usecases/dist/usecases/experiment-journal-vault.d.ts +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/experiment-journal-vault.d.ts.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/experiment-journal-vault.js +42 -9
- package/node_modules/@murphai/vault-usecases/dist/usecases/experiment-journal-vault.js.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/explicit-health-family-services.d.ts.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/explicit-health-family-services.js +158 -24
- package/node_modules/@murphai/vault-usecases/dist/usecases/explicit-health-family-services.js.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/food.d.ts.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/food.js +98 -5
- package/node_modules/@murphai/vault-usecases/dist/usecases/food.js.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/integrated-services.d.ts.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/integrated-services.js +20 -4
- package/node_modules/@murphai/vault-usecases/dist/usecases/integrated-services.js.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/intervention-experiment-link.d.ts.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/intervention-experiment-link.js +49 -24
- package/node_modules/@murphai/vault-usecases/dist/usecases/intervention-experiment-link.js.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/measurement-read.d.ts.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/measurement-read.js +13 -11
- package/node_modules/@murphai/vault-usecases/dist/usecases/measurement-read.js.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/provider-event.d.ts.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/provider-event.js +18 -11
- package/node_modules/@murphai/vault-usecases/dist/usecases/provider-event.js.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/recipe.d.ts.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/recipe.js +43 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/recipe.js.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/shared.d.ts.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/shared.js +1 -3
- package/node_modules/@murphai/vault-usecases/dist/usecases/shared.js.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/vault-usecase-helpers.d.ts +2 -0
- package/node_modules/@murphai/vault-usecases/dist/usecases/vault-usecase-helpers.d.ts.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/vault-usecase-helpers.js +24 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/vault-usecase-helpers.js.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/workout-format.d.ts +2 -0
- package/node_modules/@murphai/vault-usecases/dist/usecases/workout-format.d.ts.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live-model.d.ts +36 -4
- package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live-model.d.ts.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live-model.js +48 -12
- package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live-model.js.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live-state.d.ts +14 -14
- package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live-state.d.ts.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live-state.js +84 -82
- package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live-state.js.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live.d.ts +16 -4
- package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live.d.ts.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live.js +316 -79
- package/node_modules/@murphai/vault-usecases/dist/usecases/workout-live.js.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/workout-read.d.ts.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/workout-read.js +19 -17
- package/node_modules/@murphai/vault-usecases/dist/usecases/workout-read.js.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/workout.d.ts +20 -7
- package/node_modules/@murphai/vault-usecases/dist/usecases/workout.d.ts.map +1 -1
- package/node_modules/@murphai/vault-usecases/dist/usecases/workout.js +56 -31
- package/node_modules/@murphai/vault-usecases/dist/usecases/workout.js.map +1 -1
- package/node_modules/incur/dist/Cli.js +7 -32
- package/node_modules/incur/dist/Errors.d.ts +17 -0
- package/node_modules/incur/dist/Errors.js +23 -0
- package/node_modules/incur/dist/internal/command.d.ts +2 -0
- package/node_modules/incur/dist/internal/command.js +2 -6
- package/node_modules/incur/src/Cli.ts +11 -32
- package/node_modules/incur/src/Errors.ts +36 -0
- package/node_modules/incur/src/internal/command.ts +4 -6
- package/package.json +4 -4
- package/node_modules/@murphai/assistant-engine/skills/nutrition-strategy/references/daily-nutrition-card-safety.md +0 -211
|
@@ -12,8 +12,8 @@ import { UserClient, } from "@junction-api/sdk/user";
|
|
|
12
12
|
import { VitalsClient } from "@junction-api/sdk/vitals";
|
|
13
13
|
import { WorkoutsClient } from "@junction-api/sdk/workouts";
|
|
14
14
|
import { resolveJunctionTimeseriesResourcePolicy } from "@murphai/contracts";
|
|
15
|
-
import { resolveJunctionOrigin } from "@murphai/importers/device-providers/junction-origin";
|
|
16
|
-
import { normalizeJunctionProviderSlug, resolveJunctionDeviceConnectRouteByProviderSlug, } from "../config/connect-routes.js";
|
|
15
|
+
import { normalizeJunctionSourceProviderSlug, resolveJunctionOrigin, } from "@murphai/importers/device-providers/junction-origin";
|
|
16
|
+
import { canonicalizeJunctionProviderSlug, normalizeJunctionProviderSlug, resolveJunctionDeviceConnectRouteByProviderSlug, } from "../config/connect-routes.js";
|
|
17
17
|
import { deviceSyncError, isDeviceSyncError } from "../errors.js";
|
|
18
18
|
import { normalizeString } from "../shared.js";
|
|
19
19
|
import { buildProviderApiError as buildProviderApiErrorBase } from "./shared-oauth.js";
|
|
@@ -43,6 +43,7 @@ const MAX_COLLECTION_PAGES = 100;
|
|
|
43
43
|
const MAX_COLLECTION_RECORDS = 25_000;
|
|
44
44
|
export const JUNCTION_MAX_USER_PROVIDERS = 64;
|
|
45
45
|
const MAX_SDK_COMPAT_RESPONSE_BYTES = 32 * 1_024 * 1_024;
|
|
46
|
+
export const JUNCTION_WORKOUT_STREAM_MAX_RESPONSE_BYTES = 8 * 1_024 * 1_024;
|
|
46
47
|
// These summary endpoints declare `start_date`/`end_date` as YYYY-MM-DD dates
|
|
47
48
|
// (not datetimes) in the Junction API reference.
|
|
48
49
|
const JUNCTION_DATE_ONLY_SUMMARY_RESOURCES = new Set(["electrocardiogram", "menstrual_cycle", "sleep_cycle"]);
|
|
@@ -100,8 +101,20 @@ export class JunctionClient {
|
|
|
100
101
|
}
|
|
101
102
|
async createLinkToken(input) {
|
|
102
103
|
const provider = normalizeJunctionProviderSlug(input.provider);
|
|
103
|
-
const
|
|
104
|
-
|
|
104
|
+
const providerTransport = provider
|
|
105
|
+
? requireJunctionSdkProviderTransport(provider)
|
|
106
|
+
: undefined;
|
|
107
|
+
const sdkProvider = providerTransport?.provider;
|
|
108
|
+
const providerFilterTransports = input.providerFilter?.map((candidate) => requireJunctionSdkProviderTransport(normalizeRequiredProviderSlug(candidate)));
|
|
109
|
+
const providerFilterRewrite = providerFilterTransports
|
|
110
|
+
?.find((candidate) => candidate.providerSlugRewrite)
|
|
111
|
+
?.providerSlugRewrite;
|
|
112
|
+
if (providerFilterRewrite
|
|
113
|
+
&& providerFilterTransports?.some((candidate) => candidate.provider === providerFilterRewrite.from
|
|
114
|
+
&& candidate.providerSlugRewrite === undefined)) {
|
|
115
|
+
throw new TypeError("Junction provider filters cannot combine a compatibility provider with its legacy transport placeholder.");
|
|
116
|
+
}
|
|
117
|
+
const providerFilter = providerFilterTransports?.map((candidate) => candidate.provider);
|
|
105
118
|
const bodyFieldNames = ["user_id", "redirect_url"];
|
|
106
119
|
if (sdkProvider) {
|
|
107
120
|
bodyFieldNames.push("provider");
|
|
@@ -112,6 +125,7 @@ export class JunctionClient {
|
|
|
112
125
|
const payload = await this.requestSdkResource("POST", {
|
|
113
126
|
bodyFieldNames,
|
|
114
127
|
endpointKind: "junction_link_token_create",
|
|
128
|
+
providerSlugRewrite: providerTransport?.providerSlugRewrite ?? providerFilterRewrite,
|
|
115
129
|
signal: input.signal ?? null,
|
|
116
130
|
}, (clientOptions, requestOptions) => {
|
|
117
131
|
const request = {
|
|
@@ -186,8 +200,13 @@ export class JunctionClient {
|
|
|
186
200
|
if (!userId) {
|
|
187
201
|
throw new TypeError("Junction provider deregistration requires a Junction user id.");
|
|
188
202
|
}
|
|
189
|
-
|
|
190
|
-
|
|
203
|
+
const providerTransport = requireJunctionSdkProviderTransport(providerSlug);
|
|
204
|
+
await this.requestSdkResource("DELETE", {
|
|
205
|
+
endpointKind: "junction_user_provider_deregister",
|
|
206
|
+
providerSlugRewrite: providerTransport.providerSlugRewrite,
|
|
207
|
+
signal: input.signal ?? null,
|
|
208
|
+
}, (clientOptions, requestOptions) => new UserClient(clientOptions).deregisterProvider({
|
|
209
|
+
provider: providerTransport.provider,
|
|
191
210
|
userId,
|
|
192
211
|
}, requestOptions));
|
|
193
212
|
}
|
|
@@ -203,9 +222,11 @@ export class JunctionClient {
|
|
|
203
222
|
return this.fetchWindowedCollection({ ...input, dateQueryFormat: resolveJunctionSummaryDateQueryFormat(input) }, extractCollectionRecords, (cursor) => this.requestSummaryPage(input, cursor));
|
|
204
223
|
}
|
|
205
224
|
async listProfileSummary(input) {
|
|
206
|
-
const
|
|
225
|
+
const providerTransport = optionalJunctionSdkProviderTransport(input.sourceProviderSlug);
|
|
226
|
+
const provider = providerTransport?.provider;
|
|
207
227
|
const payload = await this.requestSdkResource("GET", {
|
|
208
228
|
endpointKind: "junction_summary_collection",
|
|
229
|
+
providerSlugRewrite: providerTransport?.providerSlugRewrite,
|
|
209
230
|
queryParameterNames: provider ? ["provider"] : [],
|
|
210
231
|
signal: input.signal ?? null,
|
|
211
232
|
...(input.collectionWorkLimit
|
|
@@ -228,6 +249,9 @@ export class JunctionClient {
|
|
|
228
249
|
if (policy?.fetchMode === "workout_stream") {
|
|
229
250
|
throw new TypeError("Junction workout_stream uses the dedicated workout stream endpoint.");
|
|
230
251
|
}
|
|
252
|
+
if (policy?.normalizationMode === "ecg_recording_feature") {
|
|
253
|
+
throw new TypeError("Junction electrocardiogram_voltage uses its dedicated identity-bound fetch path.");
|
|
254
|
+
}
|
|
231
255
|
return this.fetchWindowedCollection({
|
|
232
256
|
...input,
|
|
233
257
|
maxRecords: policy?.maxSamplesPerWindow === undefined
|
|
@@ -237,6 +261,29 @@ export class JunctionClient {
|
|
|
237
261
|
? (payload, resource) => extractStructurallyCompleteTimeseriesRecords(payload, resource, normalizeSourceSlug(input.sourceProviderSlug))
|
|
238
262
|
: extractTimeseriesRecords, (cursor) => this.requestTimeseriesPage(input, cursor));
|
|
239
263
|
}
|
|
264
|
+
async listElectrocardiogramVoltage(input) {
|
|
265
|
+
const recordingId = normalizeString(input.recordingId);
|
|
266
|
+
const sourceProviderSlug = normalizeJunctionSourceProviderSlug(canonicalizeJunctionProviderSlug(input.sourceProviderSlug));
|
|
267
|
+
if (!recordingId || !sourceProviderSlug) {
|
|
268
|
+
throw new TypeError("Junction ECG voltage requires summary recording and source identity.");
|
|
269
|
+
}
|
|
270
|
+
const requestInput = {
|
|
271
|
+
...input,
|
|
272
|
+
dateQueryFormat: "datetime",
|
|
273
|
+
resource: "electrocardiogram_voltage",
|
|
274
|
+
sourceProviderSlug,
|
|
275
|
+
};
|
|
276
|
+
const records = await this.fetchWindowedCollection(requestInput, (payload) => extractBoundElectrocardiogramVoltageRecords(payload, {
|
|
277
|
+
recordingId,
|
|
278
|
+
sessionEnd: input.windowEnd,
|
|
279
|
+
sessionStart: input.windowStart,
|
|
280
|
+
sourceInstanceId: normalizeString(input.sourceInstanceId),
|
|
281
|
+
sourceProviderSlug,
|
|
282
|
+
sourceType: normalizeString(input.sourceType),
|
|
283
|
+
}), (cursor) => this.requestTimeseriesPage(requestInput, cursor));
|
|
284
|
+
assertSingleElectrocardiogramCollectionSource(records);
|
|
285
|
+
return records;
|
|
286
|
+
}
|
|
240
287
|
async getWorkoutStream(input) {
|
|
241
288
|
const workoutId = normalizeString(input.workoutId);
|
|
242
289
|
if (!workoutId) {
|
|
@@ -244,6 +291,7 @@ export class JunctionClient {
|
|
|
244
291
|
}
|
|
245
292
|
return this.requestSdkResource("GET", {
|
|
246
293
|
endpointKind: "junction_workout_stream",
|
|
294
|
+
maxResponseBytes: JUNCTION_WORKOUT_STREAM_MAX_RESPONSE_BYTES,
|
|
247
295
|
signal: input.signal ?? null,
|
|
248
296
|
...(input.collectionWorkLimit
|
|
249
297
|
? {
|
|
@@ -255,9 +303,11 @@ export class JunctionClient {
|
|
|
255
303
|
.getByWorkoutId({ workoutId }, requestOptions));
|
|
256
304
|
}
|
|
257
305
|
async introspectResources(input) {
|
|
258
|
-
const
|
|
306
|
+
const providerTransport = optionalJunctionSdkProviderTransport(input.sourceProviderSlug);
|
|
307
|
+
const provider = providerTransport?.provider;
|
|
259
308
|
return this.requestSdkResource("GET", {
|
|
260
309
|
endpointKind: "junction_introspect_resources",
|
|
310
|
+
providerSlugRewrite: providerTransport?.providerSlugRewrite,
|
|
261
311
|
queryParameterNames: ["user_id", "user_limit", ...(provider ? ["provider"] : [])],
|
|
262
312
|
signal: input.signal ?? null,
|
|
263
313
|
}, (clientOptions, requestOptions) => {
|
|
@@ -272,9 +322,11 @@ export class JunctionClient {
|
|
|
272
322
|
});
|
|
273
323
|
}
|
|
274
324
|
async introspectHistoricalPull(input) {
|
|
275
|
-
const
|
|
325
|
+
const providerTransport = optionalJunctionSdkProviderTransport(input.sourceProviderSlug);
|
|
326
|
+
const provider = providerTransport?.provider;
|
|
276
327
|
const payload = await this.requestSdkResource("GET", {
|
|
277
328
|
endpointKind: "junction_introspect_historical_pull",
|
|
329
|
+
providerSlugRewrite: providerTransport?.providerSlugRewrite,
|
|
278
330
|
queryParameterNames: ["user_id", "user_limit", ...(provider ? ["provider"] : [])],
|
|
279
331
|
signal: input.signal ?? null,
|
|
280
332
|
}, (clientOptions, requestOptions) => {
|
|
@@ -312,12 +364,14 @@ export class JunctionClient {
|
|
|
312
364
|
throw new TypeError("Junction historical pull triggers require at least one user id.");
|
|
313
365
|
}
|
|
314
366
|
try {
|
|
367
|
+
const providerTransport = requireJunctionSdkOAuthProviderTransport(sourceProviderSlug);
|
|
315
368
|
await this.requestSdkResource("POST", {
|
|
316
369
|
bodyFieldNames: ["provider", "user_ids"],
|
|
317
370
|
endpointKind: "junction_bulk_trigger_historical_pull",
|
|
371
|
+
providerSlugRewrite: providerTransport.providerSlugRewrite,
|
|
318
372
|
signal: input.signal ?? null,
|
|
319
373
|
}, (clientOptions, requestOptions) => new LinkClient(clientOptions).bulkTriggerHistoricalPull({
|
|
320
|
-
provider:
|
|
374
|
+
provider: providerTransport.provider,
|
|
321
375
|
userIds,
|
|
322
376
|
}, requestOptions));
|
|
323
377
|
return { accepted: true, endpointUnavailable: false };
|
|
@@ -382,7 +436,8 @@ export class JunctionClient {
|
|
|
382
436
|
}
|
|
383
437
|
requestSummaryPage(input, cursor) {
|
|
384
438
|
const format = resolveJunctionSummaryDateQueryFormat(input);
|
|
385
|
-
const
|
|
439
|
+
const providerTransport = optionalJunctionSdkProviderTransport(input.sourceProviderSlug);
|
|
440
|
+
const provider = providerTransport?.provider;
|
|
386
441
|
const request = {
|
|
387
442
|
userId: input.userId,
|
|
388
443
|
startDate: toDateParameter(input.windowStart, format, "start"),
|
|
@@ -399,6 +454,7 @@ export class JunctionClient {
|
|
|
399
454
|
];
|
|
400
455
|
return this.requestSdkResource("GET", {
|
|
401
456
|
endpointKind: "junction_summary_collection",
|
|
457
|
+
providerSlugRewrite: providerTransport?.providerSlugRewrite,
|
|
402
458
|
queryParameterNames,
|
|
403
459
|
signal: input.signal ?? null,
|
|
404
460
|
...(input.collectionWorkLimit
|
|
@@ -425,7 +481,8 @@ export class JunctionClient {
|
|
|
425
481
|
});
|
|
426
482
|
}
|
|
427
483
|
requestTimeseriesPage(input, cursor) {
|
|
428
|
-
const
|
|
484
|
+
const providerTransport = optionalJunctionSdkProviderTransport(input.sourceProviderSlug);
|
|
485
|
+
const provider = providerTransport?.provider;
|
|
429
486
|
const request = {
|
|
430
487
|
userId: input.userId,
|
|
431
488
|
startDate: toDateParameter(input.windowStart, input.dateQueryFormat ?? "datetime", "start"),
|
|
@@ -445,8 +502,15 @@ export class JunctionClient {
|
|
|
445
502
|
];
|
|
446
503
|
return this.requestSdkResource("GET", {
|
|
447
504
|
endpointKind: "junction_timeseries_collection",
|
|
505
|
+
providerSlugRewrite: providerTransport?.providerSlugRewrite,
|
|
448
506
|
queryParameterNames,
|
|
449
507
|
signal: input.signal ?? null,
|
|
508
|
+
...(input.resource === "electrocardiogram_voltage" && input.collectionWorkLimit
|
|
509
|
+
? {
|
|
510
|
+
maxAttempts: input.collectionWorkLimit.maxAttemptsPerPage,
|
|
511
|
+
timeoutMs: input.collectionWorkLimit.requestTimeoutMs,
|
|
512
|
+
}
|
|
513
|
+
: {}),
|
|
450
514
|
}, (clientOptions, requestOptions) => {
|
|
451
515
|
const client = new VitalsClient(clientOptions);
|
|
452
516
|
switch (input.resource) {
|
|
@@ -527,8 +591,9 @@ export class JunctionClient {
|
|
|
527
591
|
let capturedResponse = null;
|
|
528
592
|
let observedOptionalNotFound = false;
|
|
529
593
|
const sdkFetch = async (input, init) => {
|
|
530
|
-
const
|
|
531
|
-
|
|
594
|
+
const rewrittenRequest = rewriteJunctionSdkProviderRequest(input, init, options.providerSlugRewrite);
|
|
595
|
+
const response = await this.fetchImpl(rewrittenRequest.input, {
|
|
596
|
+
...rewrittenRequest.init,
|
|
532
597
|
signal: requestAbort.signal,
|
|
533
598
|
});
|
|
534
599
|
if (options.optional404 && response.status === 404) {
|
|
@@ -543,13 +608,14 @@ export class JunctionClient {
|
|
|
543
608
|
if (!response.body) {
|
|
544
609
|
return response;
|
|
545
610
|
}
|
|
546
|
-
|
|
611
|
+
const maxResponseBytes = options.maxResponseBytes ?? MAX_SDK_COMPAT_RESPONSE_BYTES;
|
|
612
|
+
if (junctionSdkResponseExceedsDeclaredLimit(response, maxResponseBytes)) {
|
|
547
613
|
await response.body.cancel().catch(() => undefined);
|
|
548
614
|
throw junctionSdkResponseTooLargeError();
|
|
549
615
|
}
|
|
550
616
|
const capture = createJunctionSdkResponseCapture(response);
|
|
551
617
|
capturedResponse = capture;
|
|
552
|
-
return new Response(createJunctionSdkBoundedBodyStream(response.body, capture), {
|
|
618
|
+
return new Response(createJunctionSdkBoundedBodyStream(response.body, capture, maxResponseBytes), {
|
|
553
619
|
headers: response.headers,
|
|
554
620
|
status: response.status,
|
|
555
621
|
statusText: response.statusText,
|
|
@@ -693,7 +759,7 @@ function createJunctionSdkResponseCapture(response) {
|
|
|
693
759
|
totalBytes: 0,
|
|
694
760
|
};
|
|
695
761
|
}
|
|
696
|
-
function createJunctionSdkBoundedBodyStream(body, capture) {
|
|
762
|
+
function createJunctionSdkBoundedBodyStream(body, capture, maxResponseBytes) {
|
|
697
763
|
const reader = body.getReader();
|
|
698
764
|
return new ReadableStream({
|
|
699
765
|
async pull(controller) {
|
|
@@ -706,7 +772,7 @@ function createJunctionSdkBoundedBodyStream(body, capture) {
|
|
|
706
772
|
}
|
|
707
773
|
const chunk = value;
|
|
708
774
|
capture.totalBytes += chunk.byteLength;
|
|
709
|
-
if (capture.totalBytes >
|
|
775
|
+
if (capture.totalBytes > maxResponseBytes) {
|
|
710
776
|
capture.exceededLimit = true;
|
|
711
777
|
capture.chunks = [];
|
|
712
778
|
const error = junctionSdkResponseTooLargeError();
|
|
@@ -724,13 +790,13 @@ function createJunctionSdkBoundedBodyStream(body, capture) {
|
|
|
724
790
|
},
|
|
725
791
|
});
|
|
726
792
|
}
|
|
727
|
-
function junctionSdkResponseExceedsDeclaredLimit(response) {
|
|
793
|
+
function junctionSdkResponseExceedsDeclaredLimit(response, maxResponseBytes) {
|
|
728
794
|
const contentLength = response.headers.get("content-length");
|
|
729
795
|
if (contentLength === null || !/^\d+$/u.test(contentLength.trim())) {
|
|
730
796
|
return false;
|
|
731
797
|
}
|
|
732
798
|
const parsedLength = Number(contentLength);
|
|
733
|
-
return Number.isSafeInteger(parsedLength) && parsedLength >
|
|
799
|
+
return Number.isSafeInteger(parsedLength) && parsedLength > maxResponseBytes;
|
|
734
800
|
}
|
|
735
801
|
function junctionSdkResponseTooLargeError() {
|
|
736
802
|
return deviceSyncError({
|
|
@@ -894,6 +960,47 @@ function normalizeJunctionRefreshTimeoutSeconds(value) {
|
|
|
894
960
|
}
|
|
895
961
|
return Math.max(5, Math.min(60, Math.trunc(value)));
|
|
896
962
|
}
|
|
963
|
+
function rewriteJunctionSdkProviderRequest(input, init, rewrite) {
|
|
964
|
+
if (!rewrite) {
|
|
965
|
+
return { init, input };
|
|
966
|
+
}
|
|
967
|
+
const url = new URL(input instanceof Request ? input.url : input.toString());
|
|
968
|
+
if (url.searchParams.get("provider") === rewrite.from) {
|
|
969
|
+
url.searchParams.set("provider", rewrite.to);
|
|
970
|
+
}
|
|
971
|
+
url.pathname = url.pathname
|
|
972
|
+
.split("/")
|
|
973
|
+
.map((segment) => segment === rewrite.from ? rewrite.to : segment)
|
|
974
|
+
.join("/");
|
|
975
|
+
let body = init?.body;
|
|
976
|
+
if (typeof body === "string") {
|
|
977
|
+
try {
|
|
978
|
+
const parsed = readPlainObject(JSON.parse(body));
|
|
979
|
+
if (parsed) {
|
|
980
|
+
const filterOnProviders = Array.isArray(parsed.filter_on_providers)
|
|
981
|
+
? parsed.filter_on_providers.map((provider) => provider === rewrite.from ? rewrite.to : provider)
|
|
982
|
+
: parsed.filter_on_providers;
|
|
983
|
+
if (parsed.provider === rewrite.from
|
|
984
|
+
|| filterOnProviders !== parsed.filter_on_providers) {
|
|
985
|
+
body = JSON.stringify({
|
|
986
|
+
...parsed,
|
|
987
|
+
...(parsed.provider === rewrite.from
|
|
988
|
+
? { provider: rewrite.to }
|
|
989
|
+
: {}),
|
|
990
|
+
...(filterOnProviders === undefined ? {} : { filter_on_providers: filterOnProviders }),
|
|
991
|
+
});
|
|
992
|
+
}
|
|
993
|
+
}
|
|
994
|
+
}
|
|
995
|
+
catch {
|
|
996
|
+
// The generated SDK owns body validation; leave non-JSON bodies intact.
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
return {
|
|
1000
|
+
init: body === init?.body ? init : { ...init, body },
|
|
1001
|
+
input: input instanceof Request ? new Request(url, input) : url,
|
|
1002
|
+
};
|
|
1003
|
+
}
|
|
897
1004
|
function normalizeRequiredProviderSlug(value) {
|
|
898
1005
|
const provider = normalizeJunctionProviderSlug(value);
|
|
899
1006
|
if (!provider) {
|
|
@@ -901,9 +1008,27 @@ function normalizeRequiredProviderSlug(value) {
|
|
|
901
1008
|
}
|
|
902
1009
|
return provider;
|
|
903
1010
|
}
|
|
904
|
-
function
|
|
1011
|
+
function optionalJunctionSdkProviderTransport(value) {
|
|
905
1012
|
const normalized = normalizeJunctionProviderSlug(value);
|
|
906
|
-
return normalized ?
|
|
1013
|
+
return normalized ? requireJunctionSdkProviderTransport(normalized) : undefined;
|
|
1014
|
+
}
|
|
1015
|
+
function requireJunctionSdkProviderTransport(value) {
|
|
1016
|
+
if (value === "google_health") {
|
|
1017
|
+
return {
|
|
1018
|
+
provider: "fitbit",
|
|
1019
|
+
providerSlugRewrite: { from: "fitbit", to: value },
|
|
1020
|
+
};
|
|
1021
|
+
}
|
|
1022
|
+
return { provider: requireJunctionSdkProvider(value) };
|
|
1023
|
+
}
|
|
1024
|
+
function requireJunctionSdkOAuthProviderTransport(value) {
|
|
1025
|
+
if (value === "google_health") {
|
|
1026
|
+
return {
|
|
1027
|
+
provider: "fitbit",
|
|
1028
|
+
providerSlugRewrite: { from: "fitbit", to: value },
|
|
1029
|
+
};
|
|
1030
|
+
}
|
|
1031
|
+
return { provider: requireJunctionSdkOAuthProvider(value) };
|
|
907
1032
|
}
|
|
908
1033
|
function requireJunctionSdkProvider(value) {
|
|
909
1034
|
const route = resolveJunctionDeviceConnectRouteByProviderSlug(value);
|
|
@@ -1222,15 +1347,134 @@ function extractTimeseriesRecords(payload, resource) {
|
|
|
1222
1347
|
const groupedRecords = flattenGroupedTimeseries(resource, payload);
|
|
1223
1348
|
return groupedRecords ?? extractCollectionRecords(payload, resource);
|
|
1224
1349
|
}
|
|
1350
|
+
function extractBoundElectrocardiogramVoltageRecords(payload, identity) {
|
|
1351
|
+
const envelope = readPlainObject(payload);
|
|
1352
|
+
const groups = readPlainObject(envelope?.groups);
|
|
1353
|
+
if (!groups) {
|
|
1354
|
+
throw junctionElectrocardiogramBindingError("group_envelope_invalid");
|
|
1355
|
+
}
|
|
1356
|
+
const sessionStartMs = Date.parse(identity.sessionStart);
|
|
1357
|
+
const sessionEndMs = Date.parse(identity.sessionEnd);
|
|
1358
|
+
if (!Number.isFinite(sessionStartMs)
|
|
1359
|
+
|| !Number.isFinite(sessionEndMs)
|
|
1360
|
+
|| sessionEndMs < sessionStartMs) {
|
|
1361
|
+
throw new TypeError("Junction ECG summary window was invalid.");
|
|
1362
|
+
}
|
|
1363
|
+
const records = [];
|
|
1364
|
+
let matchingGroupCount = 0;
|
|
1365
|
+
for (const [sourceSlug, rawGroups] of Object.entries(groups)) {
|
|
1366
|
+
if (!Array.isArray(rawGroups)) {
|
|
1367
|
+
throw junctionElectrocardiogramBindingError("group_collection_invalid");
|
|
1368
|
+
}
|
|
1369
|
+
for (const rawGroup of rawGroups) {
|
|
1370
|
+
const group = readPlainObject(rawGroup);
|
|
1371
|
+
if (!group || !Array.isArray(group.data)) {
|
|
1372
|
+
throw junctionElectrocardiogramBindingError("group_invalid");
|
|
1373
|
+
}
|
|
1374
|
+
const unresolvedOrigin = resolveJunctionOrigin(group, {
|
|
1375
|
+
groupedSourceSlug: sourceSlug,
|
|
1376
|
+
});
|
|
1377
|
+
const canonicalSourceProviderSlug = canonicalizeJunctionProviderSlug(unresolvedOrigin.sourceProviderSlug);
|
|
1378
|
+
const origin = resolveJunctionOrigin({
|
|
1379
|
+
...group,
|
|
1380
|
+
sourceProviderSlug: canonicalSourceProviderSlug
|
|
1381
|
+
?? unresolvedOrigin.sourceProviderSlug,
|
|
1382
|
+
}, {
|
|
1383
|
+
groupedSourceSlug: canonicalSourceProviderSlug ?? sourceSlug,
|
|
1384
|
+
});
|
|
1385
|
+
if (normalizeJunctionSourceProviderSlug(origin.sourceProviderSlug)
|
|
1386
|
+
!== identity.sourceProviderSlug) {
|
|
1387
|
+
continue;
|
|
1388
|
+
}
|
|
1389
|
+
if (identity.sourceInstanceId
|
|
1390
|
+
&& origin.sourceInstanceId !== identity.sourceInstanceId) {
|
|
1391
|
+
continue;
|
|
1392
|
+
}
|
|
1393
|
+
if (identity.sourceType && origin.sourceType !== identity.sourceType) {
|
|
1394
|
+
continue;
|
|
1395
|
+
}
|
|
1396
|
+
matchingGroupCount += 1;
|
|
1397
|
+
if (matchingGroupCount > 1) {
|
|
1398
|
+
throw junctionElectrocardiogramBindingError("group_ambiguous");
|
|
1399
|
+
}
|
|
1400
|
+
const groupId = firstDefinedString(group, [
|
|
1401
|
+
"id",
|
|
1402
|
+
"recordingId",
|
|
1403
|
+
"recording_id",
|
|
1404
|
+
]);
|
|
1405
|
+
if (groupId && groupId !== identity.recordingId) {
|
|
1406
|
+
throw junctionElectrocardiogramBindingError("group_identity_conflict");
|
|
1407
|
+
}
|
|
1408
|
+
for (const rawSample of group.data) {
|
|
1409
|
+
const sample = readPlainObject(rawSample);
|
|
1410
|
+
if (!sample) {
|
|
1411
|
+
throw junctionElectrocardiogramBindingError("sample_invalid");
|
|
1412
|
+
}
|
|
1413
|
+
const sampleRecordingId = firstDefinedString(sample, [
|
|
1414
|
+
"recordingId",
|
|
1415
|
+
"recording_id",
|
|
1416
|
+
]);
|
|
1417
|
+
if (sampleRecordingId && sampleRecordingId !== identity.recordingId) {
|
|
1418
|
+
throw junctionElectrocardiogramBindingError("sample_identity_conflict");
|
|
1419
|
+
}
|
|
1420
|
+
const sampleTimestamp = firstDefinedValue(sample, ["timestamp"]);
|
|
1421
|
+
const sampleTimestampMs = sampleTimestamp instanceof Date
|
|
1422
|
+
? sampleTimestamp.getTime()
|
|
1423
|
+
: typeof sampleTimestamp === "string"
|
|
1424
|
+
? Date.parse(sampleTimestamp)
|
|
1425
|
+
: Number.NaN;
|
|
1426
|
+
if (!Number.isFinite(sampleTimestampMs)
|
|
1427
|
+
|| sampleTimestampMs < sessionStartMs
|
|
1428
|
+
|| sampleTimestampMs > sessionEndMs) {
|
|
1429
|
+
throw junctionElectrocardiogramBindingError("sample_outside_summary_window");
|
|
1430
|
+
}
|
|
1431
|
+
records.push(stripUndefinedRecord({
|
|
1432
|
+
...sample,
|
|
1433
|
+
// Junction documents the numeric sample `id` as deprecated. It is
|
|
1434
|
+
// not recording identity and must not escape this transient buffer.
|
|
1435
|
+
id: undefined,
|
|
1436
|
+
junctionGroupId: identity.recordingId,
|
|
1437
|
+
junctionResource: "electrocardiogram_voltage",
|
|
1438
|
+
sourceInstanceId: identity.sourceInstanceId ?? origin.sourceInstanceId,
|
|
1439
|
+
sourceProviderSlug: identity.sourceProviderSlug,
|
|
1440
|
+
sourceType: identity.sourceType ?? origin.sourceType,
|
|
1441
|
+
timestamp: new Date(sampleTimestampMs).toISOString(),
|
|
1442
|
+
}));
|
|
1443
|
+
}
|
|
1444
|
+
}
|
|
1445
|
+
}
|
|
1446
|
+
return records;
|
|
1447
|
+
}
|
|
1448
|
+
function assertSingleElectrocardiogramCollectionSource(records) {
|
|
1449
|
+
let collectionSource = null;
|
|
1450
|
+
for (const rawRecord of records) {
|
|
1451
|
+
const record = readPlainObject(rawRecord);
|
|
1452
|
+
if (!record) {
|
|
1453
|
+
throw junctionElectrocardiogramBindingError("sample_invalid");
|
|
1454
|
+
}
|
|
1455
|
+
const source = JSON.stringify([
|
|
1456
|
+
normalizeString(record.sourceProviderSlug),
|
|
1457
|
+
normalizeString(record.sourceType),
|
|
1458
|
+
normalizeString(record.sourceInstanceId),
|
|
1459
|
+
]);
|
|
1460
|
+
collectionSource ??= source;
|
|
1461
|
+
if (source !== collectionSource) {
|
|
1462
|
+
throw junctionElectrocardiogramBindingError("collection_source_ambiguous");
|
|
1463
|
+
}
|
|
1464
|
+
}
|
|
1465
|
+
}
|
|
1225
1466
|
function extractStructurallyCompleteTimeseriesRecords(payload, resource, requestedSourceProviderSlug) {
|
|
1226
1467
|
const groupedRecords = flattenGroupedTimeseries(resource, payload, {
|
|
1227
1468
|
strict: true,
|
|
1228
1469
|
});
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1470
|
+
// A structurally complete collection requires grouped proof. Generic and
|
|
1471
|
+
// legacy envelopes (arrays, data/results wrappers, resource-keyed bodies,
|
|
1472
|
+
// raw SDK-parse fallbacks) stay parseable for ordinary ingestion but can
|
|
1473
|
+
// never certify a complete source day.
|
|
1474
|
+
if (groupedRecords === null) {
|
|
1232
1475
|
throw incompleteJunctionCalendarCollectionError();
|
|
1233
1476
|
}
|
|
1477
|
+
const records = groupedRecords;
|
|
1234
1478
|
for (const record of records) {
|
|
1235
1479
|
const entry = readPlainObject(record);
|
|
1236
1480
|
const sourceProviderSlug = entry
|
|
@@ -1260,27 +1504,25 @@ function flattenGroupedTimeseries(resource, payload, options = {}) {
|
|
|
1260
1504
|
if (options.strict && (rawGroups === undefined || rawGroups === null)) {
|
|
1261
1505
|
throw incompleteJunctionCalendarCollectionError();
|
|
1262
1506
|
}
|
|
1507
|
+
// A complete collection proof requires real arrays: a schema-drifted
|
|
1508
|
+
// singleton object must fail retryably rather than certify the day.
|
|
1509
|
+
if (options.strict && !Array.isArray(rawGroups)) {
|
|
1510
|
+
throw incompleteJunctionCalendarCollectionError();
|
|
1511
|
+
}
|
|
1263
1512
|
for (const rawGroup of asArray(rawGroups)) {
|
|
1264
1513
|
const group = readPlainObject(rawGroup);
|
|
1265
1514
|
if (!group) {
|
|
1266
1515
|
if (options.strict) {
|
|
1267
1516
|
throw incompleteJunctionCalendarCollectionError();
|
|
1268
1517
|
}
|
|
1269
|
-
if (resource === "electrocardiogram_voltage") {
|
|
1270
|
-
throw new TypeError("Junction ECG group must be an object.");
|
|
1271
|
-
}
|
|
1272
1518
|
continue;
|
|
1273
1519
|
}
|
|
1274
1520
|
if (options.strict
|
|
1275
1521
|
&& (!("data" in group) || group.data === undefined || group.data === null)) {
|
|
1276
1522
|
throw incompleteJunctionCalendarCollectionError();
|
|
1277
1523
|
}
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
throw new TypeError("Junction ECG group lacked a stable recording id.");
|
|
1281
|
-
}
|
|
1282
|
-
if (resource === "electrocardiogram_voltage" && !Array.isArray(group.data)) {
|
|
1283
|
-
throw new TypeError("Junction ECG group data must be an array.");
|
|
1524
|
+
if (options.strict && !Array.isArray(group.data)) {
|
|
1525
|
+
throw incompleteJunctionCalendarCollectionError();
|
|
1284
1526
|
}
|
|
1285
1527
|
for (const rawSample of asArray(group.data)) {
|
|
1286
1528
|
const sample = readPlainObject(rawSample);
|
|
@@ -1288,17 +1530,8 @@ function flattenGroupedTimeseries(resource, payload, options = {}) {
|
|
|
1288
1530
|
if (options.strict) {
|
|
1289
1531
|
throw incompleteJunctionCalendarCollectionError();
|
|
1290
1532
|
}
|
|
1291
|
-
if (resource === "electrocardiogram_voltage") {
|
|
1292
|
-
throw new TypeError("Junction ECG sample must be an object.");
|
|
1293
|
-
}
|
|
1294
1533
|
continue;
|
|
1295
1534
|
}
|
|
1296
|
-
const sampleId = firstDefinedString(sample, ["recordingId", "recording_id"]);
|
|
1297
|
-
if (resource === "electrocardiogram_voltage"
|
|
1298
|
-
&& sampleId
|
|
1299
|
-
&& sampleId !== groupId) {
|
|
1300
|
-
throw new TypeError("Junction ECG sample conflicted with its group recording id.");
|
|
1301
|
-
}
|
|
1302
1535
|
const origin = resolveJunctionOrigin(sample, {
|
|
1303
1536
|
...group,
|
|
1304
1537
|
groupedSourceSlug: normalizedGroupedSourceSlug ?? sourceSlug,
|
|
@@ -1310,9 +1543,6 @@ function flattenGroupedTimeseries(resource, payload, options = {}) {
|
|
|
1310
1543
|
records.push(stripUndefinedRecord({
|
|
1311
1544
|
...sample,
|
|
1312
1545
|
sourceProviderSlug: sourceProviderSlug ?? undefined,
|
|
1313
|
-
junctionGroupId: resource === "electrocardiogram_voltage"
|
|
1314
|
-
? groupId
|
|
1315
|
-
: undefined,
|
|
1316
1546
|
sourceType: origin.sourceType,
|
|
1317
1547
|
sourceInstanceId: origin.sourceInstanceId,
|
|
1318
1548
|
junctionResource: resource,
|
|
@@ -1330,6 +1560,15 @@ function incompleteJunctionCalendarCollectionError() {
|
|
|
1330
1560
|
httpStatus: 502,
|
|
1331
1561
|
});
|
|
1332
1562
|
}
|
|
1563
|
+
function junctionElectrocardiogramBindingError(reason) {
|
|
1564
|
+
return deviceSyncError({
|
|
1565
|
+
code: "JUNCTION_ECG_RECORDING_BINDING_INCOMPLETE",
|
|
1566
|
+
details: { reason },
|
|
1567
|
+
message: "Junction ECG summary and voltage response were inconsistent.",
|
|
1568
|
+
retryable: true,
|
|
1569
|
+
httpStatus: 502,
|
|
1570
|
+
});
|
|
1571
|
+
}
|
|
1333
1572
|
function firstDefinedValue(record, keys) {
|
|
1334
1573
|
for (const key of keys) {
|
|
1335
1574
|
if (record[key] !== undefined && record[key] !== null) {
|