@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
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { resolveJunctionTimeseriesResourcePolicy } from "@murphai/contracts";
|
|
2
|
-
import { createImporters, JunctionSparseCalendarRepairNormalizationError, } from "@murphai/importers";
|
|
2
|
+
import { createDeviceProviderSnapshotImportSession, createImporters, JunctionSparseCalendarRepairNormalizationError, normalizeKnownJunctionSourceProviderSlug, } from "@murphai/importers";
|
|
3
|
+
import { JunctionWorkoutStreamTimestampCardinalityError } from "@murphai/importers/device-providers/junction";
|
|
4
|
+
import { normalizeJunctionCanonicalCoverageBoundary } from "@murphai/importers/device-providers/junction-resources";
|
|
3
5
|
import { normalizeConfiguredDeviceSyncJobInput, normalizeConfiguredDeviceSyncJobRecord, } from "./provider-job-definitions.js";
|
|
4
6
|
import { buildDeviceSyncTokenCipherOptions, createSecretCodec } from "./local-secret-codec.js";
|
|
5
7
|
import { deviceSyncError, isDeviceSyncError } from "./errors.js";
|
|
@@ -12,7 +14,7 @@ import { isDeviceSyncConnectionSetupPending, isDeviceSyncSourceDisconnectFenced,
|
|
|
12
14
|
import { createDeviceSyncRegistry } from "./registry.js";
|
|
13
15
|
import { addMilliseconds, computeRetryDelayMs, defaultStateDatabasePath, generatePrefixedId, normalizeString, normalizeOriginList, normalizePublicBaseUrl, sha256Text, stringifyJson, toIsoTimestamp, } from "./shared.js";
|
|
14
16
|
import { SqliteDeviceSyncStore } from "./store.js";
|
|
15
|
-
import { DEVICE_SYNC_WEBHOOK_TRACE_COMPLETED, } from "./types.js";
|
|
17
|
+
import { DEVICE_SYNC_CANONICAL_IMPORT_RECEIPT_LIMIT, DEVICE_SYNC_WEBHOOK_TRACE_COMPLETED, } from "./types.js";
|
|
16
18
|
export { SqliteDeviceSyncStore } from "./store.js";
|
|
17
19
|
export function resolveDeviceSyncStoreNextJobWakeAt(input) {
|
|
18
20
|
const store = new SqliteDeviceSyncStore(input.stateDatabasePath ?? defaultStateDatabasePath(input.vaultRoot));
|
|
@@ -38,12 +40,35 @@ const DEVICE_SYNC_JOB_YIELD_POLL_MS = 100;
|
|
|
38
40
|
// Never retain fewer diagnostics than one hosted pass can produce, and never
|
|
39
41
|
// regress below the established 100-attempt observability window.
|
|
40
42
|
export const DEVICE_SYNC_JOB_FAILURE_DIAGNOSTIC_LIMIT = Math.max(100, HOSTED_EXECUTION_DEVICE_SYNC_PASS_JOB_LIMIT);
|
|
43
|
+
export const DEVICE_SYNC_JOB_TIMING_DIAGNOSTIC_LIMIT = Math.max(100, HOSTED_EXECUTION_DEVICE_SYNC_PASS_JOB_LIMIT);
|
|
41
44
|
const DEVICE_SYNC_CONNECTION_MUTATION_MAX_PENDING = 1;
|
|
42
45
|
const DEVICE_SYNC_CONNECTION_MUTATION_WAIT_TIMEOUT_MS = 15_000;
|
|
43
46
|
const DEFAULT_PROVIDER_JOB_BATCH_MAX_JOBS = 50;
|
|
44
47
|
const DEFAULT_PROVIDER_JOB_BATCH_MAX_ESTIMATED_BYTES = 2 * 1024 * 1024;
|
|
45
48
|
const DEFAULT_PROVIDER_JOB_BATCH_CANDIDATE_SCAN_LIMIT = 200;
|
|
46
49
|
const JUNCTION_WORKOUT_STREAM_CANDIDATE_DIAGNOSTIC_LIMIT = resolveJunctionTimeseriesResourcePolicy("workout_stream")?.maxRecordsPerWindow ?? 0;
|
|
50
|
+
const JUNCTION_ECG_DIAGNOSTIC_COUNT_LIMIT = (resolveJunctionTimeseriesResourcePolicy("electrocardiogram_voltage")?.maxSamplesPerWindow ?? 0) + 1;
|
|
51
|
+
const JUNCTION_ECG_BINDING_REASONS = new Set([
|
|
52
|
+
"collection_source_ambiguous",
|
|
53
|
+
"feature_cardinality_mismatch",
|
|
54
|
+
"group_ambiguous",
|
|
55
|
+
"group_collection_invalid",
|
|
56
|
+
"group_envelope_invalid",
|
|
57
|
+
"group_identity_conflict",
|
|
58
|
+
"group_invalid",
|
|
59
|
+
"recording_limit_exceeded",
|
|
60
|
+
"sample_count_mismatch",
|
|
61
|
+
"sample_identity_conflict",
|
|
62
|
+
"sample_invalid",
|
|
63
|
+
"sample_limit_exceeded",
|
|
64
|
+
"sample_normalization_invalid",
|
|
65
|
+
"sample_outside_summary_window",
|
|
66
|
+
"summary_identity_conflict",
|
|
67
|
+
"summary_identity_incomplete",
|
|
68
|
+
"summary_source_inconsistent",
|
|
69
|
+
"summary_window_invalid",
|
|
70
|
+
"summary_windows_ambiguous",
|
|
71
|
+
]);
|
|
47
72
|
const DEVICE_SYNC_VALIDATION_SENSITIVE_FIELD_PATTERN = /(?:authorization|bearer|cookie|password|secret|token|api[-_]?key|client[-_]?secret|access[-_]?token|refresh[-_]?token|id[-_]?token|email|phone|address|user(?:name)?|owner|account(?:id)?|external(?:id)?)/iu;
|
|
48
73
|
const DEVICE_SYNC_VALIDATION_METADATA_FIELDS = Object.freeze([
|
|
49
74
|
"expected",
|
|
@@ -116,6 +141,7 @@ class DeviceSyncServiceController {
|
|
|
116
141
|
workerTimer = null;
|
|
117
142
|
schedulerTimer = null;
|
|
118
143
|
jobFailureDiagnostics = [];
|
|
144
|
+
jobTimingDiagnostics = [];
|
|
119
145
|
connectionMutationStates = new Map();
|
|
120
146
|
constructor(input) {
|
|
121
147
|
this.vaultRoot = input.config.vaultRoot;
|
|
@@ -210,7 +236,7 @@ class DeviceSyncServiceController {
|
|
|
210
236
|
}
|
|
211
237
|
: null;
|
|
212
238
|
},
|
|
213
|
-
upsertConnectionSource: (input) => this.store.upsertConnectionSource(input),
|
|
239
|
+
upsertConnectionSource: (input, options) => this.store.upsertConnectionSource(input, options),
|
|
214
240
|
listConnectionSources: (input) => this.store.listConnectionSources(input),
|
|
215
241
|
resolveConnectionSourceAdmissionCandidate: (input) => this.store.listConnectionSources(input)
|
|
216
242
|
.sort((left, right) => {
|
|
@@ -236,15 +262,16 @@ class DeviceSyncServiceController {
|
|
|
236
262
|
},
|
|
237
263
|
hooks: {
|
|
238
264
|
runConnectionMutation: ({ provider }, operation) => this.runProviderConnectionMutation(provider, operation),
|
|
239
|
-
onConnectionEstablished: async ({ account, connection, now, provider, sourceProviderSlug, }) => {
|
|
265
|
+
onConnectionEstablished: async ({ account, connection, connectionStartedAt, now, provider, sourceProviderSlug, }) => {
|
|
240
266
|
const sourceInstanceKey = provider.provider === "junction" && sourceProviderSlug
|
|
241
267
|
? buildJunctionProviderSourceInstanceKey({
|
|
242
268
|
connectionId: account.id,
|
|
243
269
|
sourceProviderSlug,
|
|
244
270
|
})
|
|
245
271
|
: null;
|
|
246
|
-
this.store.commitConnectionEstablished({
|
|
272
|
+
const committed = this.store.commitConnectionEstablished({
|
|
247
273
|
accountId: account.id,
|
|
274
|
+
expectedSourceLastSeenAt: connectionStartedAt,
|
|
248
275
|
jobs: this.normalizeJobsForEnqueue(account, connection.initialJobs ?? []),
|
|
249
276
|
provider: account.provider,
|
|
250
277
|
source: sourceInstanceKey && sourceProviderSlug
|
|
@@ -258,6 +285,14 @@ class DeviceSyncServiceController {
|
|
|
258
285
|
}
|
|
259
286
|
: null,
|
|
260
287
|
});
|
|
288
|
+
if (sourceInstanceKey && committed === null) {
|
|
289
|
+
throw deviceSyncError({
|
|
290
|
+
code: "CONNECTION_SOURCE_START_STALE",
|
|
291
|
+
message: "Device source state changed while its connection link was starting. Start again.",
|
|
292
|
+
retryable: false,
|
|
293
|
+
httpStatus: 409,
|
|
294
|
+
});
|
|
295
|
+
}
|
|
261
296
|
await this.ensureWebhookAdminUpkeepAfterConnectionEstablished(provider);
|
|
262
297
|
return {
|
|
263
298
|
sourceAdmissionCommitted: true,
|
|
@@ -347,6 +382,9 @@ class DeviceSyncServiceController {
|
|
|
347
382
|
details: { ...entry.details },
|
|
348
383
|
}));
|
|
349
384
|
}
|
|
385
|
+
listJobTimingDiagnostics() {
|
|
386
|
+
return this.jobTimingDiagnostics.map((entry) => ({ ...entry }));
|
|
387
|
+
}
|
|
350
388
|
start() {
|
|
351
389
|
if (!this.workerTimer) {
|
|
352
390
|
void this.runWorkerBatchOnce();
|
|
@@ -418,7 +456,13 @@ class DeviceSyncServiceController {
|
|
|
418
456
|
}
|
|
419
457
|
const provider = this.requireProvider(account.provider);
|
|
420
458
|
const now = this.nowIso();
|
|
421
|
-
const scheduledJobs = resolveProviderJobExecutor(provider)?.createScheduledJobs?.(account, now
|
|
459
|
+
const scheduledJobs = resolveProviderJobExecutor(provider)?.createScheduledJobs?.(account, now, {
|
|
460
|
+
findActiveDedupeKeys: (dedupeKeys) => this.store.findActiveJobDedupeKeys({
|
|
461
|
+
accountId: account.id,
|
|
462
|
+
dedupeKeys,
|
|
463
|
+
provider: account.provider,
|
|
464
|
+
}),
|
|
465
|
+
}).jobs ?? [];
|
|
422
466
|
const jobs = scheduledJobs.length > 0 ? scheduledJobs : [{ kind: "reconcile", priority: 80 }];
|
|
423
467
|
const queuedJobs = this.enqueueJobs(account, jobs.map((job) => ({
|
|
424
468
|
...job,
|
|
@@ -513,7 +557,13 @@ class DeviceSyncServiceController {
|
|
|
513
557
|
if (!jobExecutor?.createScheduledJobs) {
|
|
514
558
|
continue;
|
|
515
559
|
}
|
|
516
|
-
const schedule = jobExecutor.createScheduledJobs(account, now
|
|
560
|
+
const schedule = jobExecutor.createScheduledJobs(account, now, {
|
|
561
|
+
findActiveDedupeKeys: (dedupeKeys) => this.store.findActiveJobDedupeKeys({
|
|
562
|
+
accountId: account.id,
|
|
563
|
+
dedupeKeys,
|
|
564
|
+
provider: account.provider,
|
|
565
|
+
}),
|
|
566
|
+
});
|
|
517
567
|
queuedJobs.push(...this.enqueueJobs(account, schedule.jobs));
|
|
518
568
|
this.store.patchAccount(account.id, {
|
|
519
569
|
nextReconcileAt: schedule.nextReconcileAt ?? null,
|
|
@@ -532,6 +582,7 @@ class DeviceSyncServiceController {
|
|
|
532
582
|
async runWorkerOnce(accountId) {
|
|
533
583
|
const result = await this.runWorkerPassOnce({
|
|
534
584
|
accountId,
|
|
585
|
+
importSession: createDeviceProviderSnapshotImportSession(),
|
|
535
586
|
maxJobRows: Number.POSITIVE_INFINITY,
|
|
536
587
|
});
|
|
537
588
|
return result?.job ?? null;
|
|
@@ -551,10 +602,67 @@ class DeviceSyncServiceController {
|
|
|
551
602
|
return null;
|
|
552
603
|
}
|
|
553
604
|
let activeJobs = [job];
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
605
|
+
let connectionSourceReadCount = 0;
|
|
606
|
+
let connectionSourceReadElapsedMs = 0;
|
|
607
|
+
let credentialRefreshCount = 0;
|
|
608
|
+
let credentialRefreshElapsedMs = 0;
|
|
609
|
+
let durableProgressCommitted = false;
|
|
610
|
+
let outcome = "cancelled";
|
|
611
|
+
let providerExecutionElapsedMs = null;
|
|
612
|
+
let providerInventoryRequestCount = 0;
|
|
613
|
+
let providerInventoryRequestElapsedMs = 0;
|
|
614
|
+
let providerResourceRequestCount = 0;
|
|
615
|
+
let providerResourceRequestElapsedMs = 0;
|
|
616
|
+
let snapshotImportCount = 0;
|
|
617
|
+
let snapshotImportElapsedMs = 0;
|
|
618
|
+
let snapshotCanonicalCoreElapsedMs = 0;
|
|
619
|
+
let snapshotCanonicalWriteElapsedMs = 0;
|
|
620
|
+
let snapshotEventIdentityIndexCacheHitCount = 0;
|
|
621
|
+
let snapshotEventIdentityIndexElapsedMs = 0;
|
|
622
|
+
let snapshotNormalizationElapsedMs = 0;
|
|
623
|
+
const finishPass = () => {
|
|
624
|
+
const finishedAt = currentNow();
|
|
625
|
+
const resource = readSafeDiagnosticToken(job.payload.resource);
|
|
626
|
+
this.recordJobTimingDiagnostic({
|
|
627
|
+
at: finishedAt,
|
|
628
|
+
attempts: job.attempts,
|
|
629
|
+
connectionSourceReadCount,
|
|
630
|
+
connectionSourceReadElapsedMs,
|
|
631
|
+
credentialRefreshCount,
|
|
632
|
+
credentialRefreshElapsedMs,
|
|
633
|
+
durableProgressCommitted,
|
|
634
|
+
elapsedMs: nonnegativeDeviceSyncDurationMs(now, finishedAt),
|
|
635
|
+
jobCount: Math.max(1, activeJobs.length),
|
|
636
|
+
jobKind: job.kind,
|
|
637
|
+
outcome,
|
|
638
|
+
provider: job.provider,
|
|
639
|
+
providerExecutionElapsedMs,
|
|
640
|
+
providerInventoryRequestCount,
|
|
641
|
+
providerInventoryRequestElapsedMs,
|
|
642
|
+
providerResourceRequestCount,
|
|
643
|
+
providerResourceRequestElapsedMs,
|
|
644
|
+
providerUnattributedElapsedMs: providerExecutionElapsedMs === null
|
|
645
|
+
? null
|
|
646
|
+
: Math.max(0, providerExecutionElapsedMs
|
|
647
|
+
- connectionSourceReadElapsedMs
|
|
648
|
+
- credentialRefreshElapsedMs
|
|
649
|
+
- providerInventoryRequestElapsedMs
|
|
650
|
+
- providerResourceRequestElapsedMs
|
|
651
|
+
- snapshotImportElapsedMs),
|
|
652
|
+
...(resource ? { resource } : {}),
|
|
653
|
+
snapshotImportCount,
|
|
654
|
+
snapshotImportElapsedMs,
|
|
655
|
+
snapshotCanonicalCoreElapsedMs,
|
|
656
|
+
snapshotCanonicalWriteElapsedMs,
|
|
657
|
+
snapshotEventIdentityIndexCacheHitCount,
|
|
658
|
+
snapshotEventIdentityIndexElapsedMs,
|
|
659
|
+
snapshotNormalizationElapsedMs,
|
|
660
|
+
});
|
|
661
|
+
return {
|
|
662
|
+
job,
|
|
663
|
+
processedJobRows: Math.max(1, activeJobs.length),
|
|
664
|
+
};
|
|
665
|
+
};
|
|
558
666
|
const failClaimedJob = (code, message, retryAt, retryable) => {
|
|
559
667
|
const failedAt = currentNow();
|
|
560
668
|
const failureTransition = this.store.failJobIfOwned(job.id, this.workerId, failedAt, code, message, retryAt, retryable);
|
|
@@ -566,6 +674,7 @@ class DeviceSyncServiceController {
|
|
|
566
674
|
});
|
|
567
675
|
return false;
|
|
568
676
|
}
|
|
677
|
+
outcome = "failed";
|
|
569
678
|
// No summary here: these repo-authored messages can embed the local
|
|
570
679
|
// account id, and the failure code already names the cause.
|
|
571
680
|
const failedJobResource = readSafeDiagnosticToken(job.payload.resource);
|
|
@@ -601,7 +710,8 @@ class DeviceSyncServiceController {
|
|
|
601
710
|
const retainsAcceptedWork = preservesAcceptedCompanionHrv || retainsAcceptedCalendarRefresh;
|
|
602
711
|
const delayRetainedJobUntilAuthorityReturns = (code, message) => {
|
|
603
712
|
const delayedAt = currentNow();
|
|
604
|
-
this.store.failJobIfOwned(job.id, this.workerId, delayedAt, code, message, addMilliseconds(delayedAt, computeRetryDelayMs(job.attempts)), true, true);
|
|
713
|
+
const transition = this.store.failJobIfOwned(job.id, this.workerId, delayedAt, code, message, addMilliseconds(delayedAt, computeRetryDelayMs(job.attempts)), true, true);
|
|
714
|
+
outcome = transition ? "deferred" : "cancelled";
|
|
605
715
|
};
|
|
606
716
|
if (retainsAcceptedCalendarRefresh
|
|
607
717
|
&& !isJunctionSparseCalendarRefreshPayloadValid(job.payload)) {
|
|
@@ -633,6 +743,10 @@ class DeviceSyncServiceController {
|
|
|
633
743
|
jobId: job.id,
|
|
634
744
|
});
|
|
635
745
|
}
|
|
746
|
+
else {
|
|
747
|
+
outcome = "completed";
|
|
748
|
+
durableProgressCommitted = true;
|
|
749
|
+
}
|
|
636
750
|
return finishPass();
|
|
637
751
|
}
|
|
638
752
|
if (storedAccount.status === "reauthorization_required" && retainsAcceptedCalendarRefresh) {
|
|
@@ -744,9 +858,26 @@ class DeviceSyncServiceController {
|
|
|
744
858
|
const normalizedJobs = activeJobs.map((activeJob) => activeJob.id === normalizedJob.id
|
|
745
859
|
? normalizedJob
|
|
746
860
|
: normalizeConfiguredDeviceSyncJobRecord(provider.provider, activeJob, "execution"));
|
|
861
|
+
let vaultTimeZone;
|
|
862
|
+
if (provider.provider === "junction"
|
|
863
|
+
&& this.importer.resolveDeviceProviderSnapshotDefaultTimeZone) {
|
|
864
|
+
try {
|
|
865
|
+
vaultTimeZone = await this.importer.resolveDeviceProviderSnapshotDefaultTimeZone({
|
|
866
|
+
vaultRoot: this.vaultRoot,
|
|
867
|
+
});
|
|
868
|
+
}
|
|
869
|
+
catch {
|
|
870
|
+
// Timezone-dependent authority fails closed; ordinary provider
|
|
871
|
+
// ingestion remains available when vault metadata cannot be read.
|
|
872
|
+
vaultTimeZone = undefined;
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
ensureExecutionActive();
|
|
876
|
+
const canonicalImportReceipts = new Map();
|
|
747
877
|
const jobContext = {
|
|
748
878
|
account: currentAccount,
|
|
749
879
|
now,
|
|
880
|
+
...(vaultTimeZone ? { vaultTimeZone } : {}),
|
|
750
881
|
signal: jobAbortController.signal,
|
|
751
882
|
connectionSourceAdmissionMode: this.listConnectionSourcesForJob
|
|
752
883
|
? "listed_only"
|
|
@@ -755,45 +886,101 @@ class DeviceSyncServiceController {
|
|
|
755
886
|
? { shouldYield: this.shouldYieldJobExecution }
|
|
756
887
|
: {}),
|
|
757
888
|
throwIfAborted: assertJobExecutionNotYielded,
|
|
758
|
-
|
|
889
|
+
recordProviderRequestTiming: (category, elapsedMs) => {
|
|
890
|
+
if (!Number.isFinite(elapsedMs) || elapsedMs < 0) {
|
|
891
|
+
return;
|
|
892
|
+
}
|
|
893
|
+
if (category === "inventory") {
|
|
894
|
+
providerInventoryRequestCount += 1;
|
|
895
|
+
providerInventoryRequestElapsedMs += elapsedMs;
|
|
896
|
+
}
|
|
897
|
+
else {
|
|
898
|
+
providerResourceRequestCount += 1;
|
|
899
|
+
providerResourceRequestElapsedMs += elapsedMs;
|
|
900
|
+
}
|
|
901
|
+
},
|
|
902
|
+
importSnapshot: async (snapshot, options) => {
|
|
759
903
|
ensureExecutionActive();
|
|
760
|
-
const
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
904
|
+
const importStartedAt = currentNow();
|
|
905
|
+
snapshotImportCount += 1;
|
|
906
|
+
let importResult;
|
|
907
|
+
try {
|
|
908
|
+
importResult = await this.importer.importDeviceProviderSnapshot({
|
|
909
|
+
provider: provider.provider,
|
|
910
|
+
snapshot,
|
|
911
|
+
vaultRoot: this.vaultRoot,
|
|
912
|
+
...options,
|
|
913
|
+
}, { importSession: input.importSession });
|
|
914
|
+
}
|
|
915
|
+
finally {
|
|
916
|
+
snapshotImportElapsedMs += nonnegativeDeviceSyncDurationMs(importStartedAt, currentNow());
|
|
917
|
+
}
|
|
918
|
+
const importTiming = readDeviceProviderSnapshotImportTiming(importResult);
|
|
919
|
+
if (importTiming) {
|
|
920
|
+
snapshotCanonicalCoreElapsedMs += importTiming.canonicalCoreElapsedMs;
|
|
921
|
+
snapshotCanonicalWriteElapsedMs += importTiming.canonicalWriteElapsedMs;
|
|
922
|
+
snapshotEventIdentityIndexCacheHitCount += importTiming.eventIdentityIndexCacheHit
|
|
923
|
+
? 1
|
|
924
|
+
: 0;
|
|
925
|
+
snapshotEventIdentityIndexElapsedMs += importTiming.eventIdentityIndexElapsedMs;
|
|
926
|
+
snapshotNormalizationElapsedMs += importTiming.normalizationElapsedMs;
|
|
927
|
+
}
|
|
928
|
+
const canonicalEventCount = readCanonicalDeviceImportEventCount(importResult);
|
|
929
|
+
const junctionCanonicalCoverage = readCanonicalDeviceImportJunctionCoverage(importResult);
|
|
930
|
+
if (junctionCanonicalCoverage && junctionCanonicalCoverage.length > 0) {
|
|
931
|
+
const importCompletedAt = currentNow();
|
|
932
|
+
for (const evidence of junctionCanonicalCoverage) {
|
|
933
|
+
const key = `${evidence.sourceProviderSlug}\u0000${evidence.resource}`;
|
|
934
|
+
if (canonicalImportReceipts.has(key)
|
|
935
|
+
|| canonicalImportReceipts.size < DEVICE_SYNC_CANONICAL_IMPORT_RECEIPT_LIMIT) {
|
|
936
|
+
canonicalImportReceipts.set(key, {
|
|
937
|
+
importCompletedAt,
|
|
938
|
+
resource: evidence.resource,
|
|
939
|
+
sourceProviderSlug: evidence.sourceProviderSlug,
|
|
940
|
+
});
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
}
|
|
765
944
|
const canonicalSparseCalendarTargets = readCanonicalDeviceImportSparseCalendarTargets(importResult);
|
|
766
945
|
const receipt = {
|
|
767
|
-
canonicalEventCount
|
|
946
|
+
canonicalEventCount,
|
|
768
947
|
canonicalEventDayKeys: readCanonicalDeviceImportEventDayKeys(importResult),
|
|
769
948
|
canonicalEventExternalRefResourceIds: readCanonicalDeviceImportEventExternalRefResourceIds(importResult),
|
|
770
949
|
...(canonicalSparseCalendarTargets.length > 0
|
|
771
950
|
? { canonicalSparseCalendarTargets }
|
|
772
951
|
: {}),
|
|
773
952
|
durableDeliveryAccepted: true,
|
|
953
|
+
...(junctionCanonicalCoverage === undefined
|
|
954
|
+
? {}
|
|
955
|
+
: { junctionCanonicalCoverage }),
|
|
774
956
|
};
|
|
775
957
|
return receipt;
|
|
776
958
|
},
|
|
777
959
|
upsertConnectionSource: (input) => {
|
|
778
960
|
ensureExecutionActive();
|
|
779
|
-
return this.store.upsertConnectionSource({
|
|
780
|
-
...input,
|
|
781
|
-
connectionId: currentAccount.id,
|
|
782
|
-
});
|
|
961
|
+
return this.store.upsertConnectionSource({ ...input, connectionId: currentAccount.id }, { preserveDisconnected: provider.provider === "junction" });
|
|
783
962
|
},
|
|
784
963
|
listConnectionSources: async (input = {}) => {
|
|
785
964
|
ensureExecutionActive();
|
|
786
|
-
const
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
965
|
+
const sourceReadStartedAt = currentNow();
|
|
966
|
+
connectionSourceReadCount += 1;
|
|
967
|
+
let sources;
|
|
968
|
+
try {
|
|
969
|
+
sources = this.listConnectionSourcesForJob
|
|
970
|
+
? await this.listConnectionSourcesForJob({
|
|
971
|
+
accountId: currentAccount.id,
|
|
972
|
+
provider: currentAccount.provider,
|
|
973
|
+
signal: jobAbortController.signal,
|
|
974
|
+
...input,
|
|
975
|
+
})
|
|
976
|
+
: this.store.listConnectionSources({
|
|
977
|
+
...input,
|
|
978
|
+
connectionId: currentAccount.id,
|
|
979
|
+
});
|
|
980
|
+
}
|
|
981
|
+
finally {
|
|
982
|
+
connectionSourceReadElapsedMs += nonnegativeDeviceSyncDurationMs(sourceReadStartedAt, currentNow());
|
|
983
|
+
}
|
|
797
984
|
ensureExecutionActive();
|
|
798
985
|
return sources;
|
|
799
986
|
},
|
|
@@ -816,7 +1003,15 @@ class DeviceSyncServiceController {
|
|
|
816
1003
|
httpStatus: 409,
|
|
817
1004
|
});
|
|
818
1005
|
}
|
|
819
|
-
const
|
|
1006
|
+
const credentialRefreshStartedAt = currentNow();
|
|
1007
|
+
credentialRefreshCount += 1;
|
|
1008
|
+
let refreshed;
|
|
1009
|
+
try {
|
|
1010
|
+
refreshed = await refreshTokens(currentAccount);
|
|
1011
|
+
}
|
|
1012
|
+
finally {
|
|
1013
|
+
credentialRefreshElapsedMs += nonnegativeDeviceSyncDurationMs(credentialRefreshStartedAt, currentNow());
|
|
1014
|
+
}
|
|
820
1015
|
ensureJobLeasesOwned();
|
|
821
1016
|
ensureAccountActive();
|
|
822
1017
|
const updated = this.store.updateAccountTokens(currentAccount.id, this.encryptTokens(currentAccount, refreshed), disconnectGeneration);
|
|
@@ -844,13 +1039,22 @@ class DeviceSyncServiceController {
|
|
|
844
1039
|
},
|
|
845
1040
|
logger: this.logger,
|
|
846
1041
|
};
|
|
847
|
-
const
|
|
848
|
-
|
|
849
|
-
|
|
1042
|
+
const providerExecutionStartedAt = currentNow();
|
|
1043
|
+
let result;
|
|
1044
|
+
try {
|
|
1045
|
+
result = normalizedJobs.length > 1 && jobExecutor.batch
|
|
1046
|
+
? await jobExecutor.batch.execute(jobContext, normalizedJobs)
|
|
1047
|
+
: await jobExecutor.executeJob(jobContext, normalizedJob);
|
|
1048
|
+
}
|
|
1049
|
+
finally {
|
|
1050
|
+
providerExecutionElapsedMs = nonnegativeDeviceSyncDurationMs(providerExecutionStartedAt, currentNow());
|
|
1051
|
+
}
|
|
850
1052
|
ensureJobLeasesOwned();
|
|
851
1053
|
ensureAccountActive();
|
|
852
1054
|
if (preservesAcceptedCompanionHrv && !isOriginalActiveAccountExecutionCurrent()) {
|
|
853
|
-
this.store.completeJobsIfOwned(activeJobs.map((activeJob) => activeJob.id), this.workerId, currentNow());
|
|
1055
|
+
const completed = this.store.completeJobsIfOwned(activeJobs.map((activeJob) => activeJob.id), this.workerId, currentNow());
|
|
1056
|
+
outcome = completed ? "completed" : "cancelled";
|
|
1057
|
+
durableProgressCommitted = completed;
|
|
854
1058
|
return finishPass();
|
|
855
1059
|
}
|
|
856
1060
|
const successOptions = {
|
|
@@ -873,6 +1077,8 @@ class DeviceSyncServiceController {
|
|
|
873
1077
|
const scheduledJobs = this.normalizeJobsForEnqueue(storedAccount, result.scheduledJobs ?? []);
|
|
874
1078
|
const completed = this.store.completeJobsMarkSyncSucceededAndEnqueueJobs({
|
|
875
1079
|
accountId: storedAccount.id,
|
|
1080
|
+
canonicalImportReceipts: [...canonicalImportReceipts.values()].sort((left, right) => left.sourceProviderSlug.localeCompare(right.sourceProviderSlug)
|
|
1081
|
+
|| left.resource.localeCompare(right.resource)),
|
|
876
1082
|
completedAt: currentNow(),
|
|
877
1083
|
disconnectGeneration,
|
|
878
1084
|
jobIds: activeJobs.map((activeJob) => activeJob.id),
|
|
@@ -886,6 +1092,8 @@ class DeviceSyncServiceController {
|
|
|
886
1092
|
releaseActiveJobsIfCurrentAccountActive(currentNow());
|
|
887
1093
|
return finishPass();
|
|
888
1094
|
}
|
|
1095
|
+
outcome = "completed";
|
|
1096
|
+
durableProgressCommitted = true;
|
|
889
1097
|
return finishPass();
|
|
890
1098
|
}
|
|
891
1099
|
catch (error) {
|
|
@@ -898,6 +1106,7 @@ class DeviceSyncServiceController {
|
|
|
898
1106
|
jobCount: activeJobs.length,
|
|
899
1107
|
released,
|
|
900
1108
|
});
|
|
1109
|
+
outcome = "yielded";
|
|
901
1110
|
return finishPass();
|
|
902
1111
|
}
|
|
903
1112
|
if (error instanceof DeviceSyncJobExecutionCancelledError) {
|
|
@@ -909,6 +1118,7 @@ class DeviceSyncServiceController {
|
|
|
909
1118
|
jobId: job.id,
|
|
910
1119
|
...(released > 0 ? { released } : {}),
|
|
911
1120
|
});
|
|
1121
|
+
outcome = "cancelled";
|
|
912
1122
|
return finishPass();
|
|
913
1123
|
}
|
|
914
1124
|
const timeseriesProgress = error instanceof JunctionTimeseriesProgressError
|
|
@@ -921,6 +1131,7 @@ class DeviceSyncServiceController {
|
|
|
921
1131
|
payload: {
|
|
922
1132
|
...job.payload,
|
|
923
1133
|
windowStart: timeseriesProgress.windowStart,
|
|
1134
|
+
workoutStreamEmptySeen: timeseriesProgress.workoutStreamEmptySeen || undefined,
|
|
924
1135
|
workoutStreamCursor: timeseriesProgress.workoutStreamCursor ?? undefined,
|
|
925
1136
|
},
|
|
926
1137
|
}, "retry progress").payload
|
|
@@ -956,6 +1167,8 @@ class DeviceSyncServiceController {
|
|
|
956
1167
|
if (failureTransitions.length === 0) {
|
|
957
1168
|
return finishPass();
|
|
958
1169
|
}
|
|
1170
|
+
outcome = "failed";
|
|
1171
|
+
durableProgressCommitted = timeseriesProgress !== null;
|
|
959
1172
|
const diagnosticTransition = failureTransitions.find(({ activeJob }) => activeJob.id === job.id)
|
|
960
1173
|
?? failureTransitions[0];
|
|
961
1174
|
if (!diagnosticTransition) {
|
|
@@ -1020,18 +1233,21 @@ class DeviceSyncServiceController {
|
|
|
1020
1233
|
stopYieldPolling();
|
|
1021
1234
|
}
|
|
1022
1235
|
}
|
|
1023
|
-
async drainWorker(limit = this.workerBatchSize, accountId) {
|
|
1236
|
+
async drainWorker(limit = this.workerBatchSize, accountId, options = {}) {
|
|
1024
1237
|
const maxJobRows = normalizeProviderJobBatchLimit(limit, this.workerBatchSize);
|
|
1025
1238
|
let processedJobRows = 0;
|
|
1239
|
+
const importSession = createDeviceProviderSnapshotImportSession();
|
|
1026
1240
|
while (processedJobRows < maxJobRows) {
|
|
1027
1241
|
const result = await this.runWorkerPassOnce({
|
|
1028
1242
|
accountId,
|
|
1243
|
+
importSession,
|
|
1029
1244
|
maxJobRows: maxJobRows - processedJobRows,
|
|
1030
1245
|
});
|
|
1031
1246
|
if (!result) {
|
|
1032
1247
|
break;
|
|
1033
1248
|
}
|
|
1034
1249
|
processedJobRows += result.processedJobRows;
|
|
1250
|
+
options.onProcessedJobRows?.(processedJobRows);
|
|
1035
1251
|
}
|
|
1036
1252
|
return processedJobRows;
|
|
1037
1253
|
}
|
|
@@ -1144,6 +1360,12 @@ class DeviceSyncServiceController {
|
|
|
1144
1360
|
this.jobFailureDiagnostics.splice(0, this.jobFailureDiagnostics.length - DEVICE_SYNC_JOB_FAILURE_DIAGNOSTIC_LIMIT);
|
|
1145
1361
|
}
|
|
1146
1362
|
}
|
|
1363
|
+
recordJobTimingDiagnostic(entry) {
|
|
1364
|
+
this.jobTimingDiagnostics.push({ ...entry });
|
|
1365
|
+
if (this.jobTimingDiagnostics.length > DEVICE_SYNC_JOB_TIMING_DIAGNOSTIC_LIMIT) {
|
|
1366
|
+
this.jobTimingDiagnostics.splice(0, this.jobTimingDiagnostics.length - DEVICE_SYNC_JOB_TIMING_DIAGNOSTIC_LIMIT);
|
|
1367
|
+
}
|
|
1368
|
+
}
|
|
1147
1369
|
requireStoredAccount(accountId) {
|
|
1148
1370
|
const account = this.store.getAccountById(accountId);
|
|
1149
1371
|
if (!account) {
|
|
@@ -1296,8 +1518,11 @@ class DeviceSyncServiceController {
|
|
|
1296
1518
|
export function createDefaultImporterPort() {
|
|
1297
1519
|
const importers = createImporters();
|
|
1298
1520
|
return {
|
|
1299
|
-
importDeviceProviderSnapshot(input) {
|
|
1300
|
-
return importers.importDeviceProviderSnapshot(input);
|
|
1521
|
+
importDeviceProviderSnapshot(input, options) {
|
|
1522
|
+
return importers.importDeviceProviderSnapshot(input, options);
|
|
1523
|
+
},
|
|
1524
|
+
resolveDeviceProviderSnapshotDefaultTimeZone(input) {
|
|
1525
|
+
return importers.resolveDeviceProviderSnapshotDefaultTimeZone(input);
|
|
1301
1526
|
},
|
|
1302
1527
|
};
|
|
1303
1528
|
}
|
|
@@ -1314,6 +1539,7 @@ export function createDeviceSyncService(input) {
|
|
|
1314
1539
|
listAccounts: (input) => controller.listAccounts(input),
|
|
1315
1540
|
getAccount: (accountId) => controller.getAccount(accountId),
|
|
1316
1541
|
listJobFailureDiagnostics: () => controller.listJobFailureDiagnostics(),
|
|
1542
|
+
listJobTimingDiagnostics: () => controller.listJobTimingDiagnostics(),
|
|
1317
1543
|
start: () => controller.start(),
|
|
1318
1544
|
stop: () => controller.stop(),
|
|
1319
1545
|
close: () => controller.close(),
|
|
@@ -1327,10 +1553,18 @@ export function createDeviceSyncService(input) {
|
|
|
1327
1553
|
getNextWakeAt: (now) => controller.getNextWakeAt(now),
|
|
1328
1554
|
runSchedulerOnce: (accountId) => controller.runSchedulerOnce(accountId),
|
|
1329
1555
|
runWorkerOnce: (accountId) => controller.runWorkerOnce(accountId),
|
|
1330
|
-
drainWorker: (limit, accountId) => controller.drainWorker(limit, accountId),
|
|
1556
|
+
drainWorker: (limit, accountId, options) => controller.drainWorker(limit, accountId, options),
|
|
1331
1557
|
});
|
|
1332
1558
|
return service;
|
|
1333
1559
|
}
|
|
1560
|
+
function nonnegativeDeviceSyncDurationMs(startAt, endAt) {
|
|
1561
|
+
const startMs = Date.parse(startAt);
|
|
1562
|
+
const endMs = Date.parse(endAt);
|
|
1563
|
+
if (!Number.isFinite(startMs) || !Number.isFinite(endMs) || endMs < startMs) {
|
|
1564
|
+
return 0;
|
|
1565
|
+
}
|
|
1566
|
+
return endMs - startMs;
|
|
1567
|
+
}
|
|
1334
1568
|
function earliestIsoTimestamp(...values) {
|
|
1335
1569
|
return values
|
|
1336
1570
|
.filter((value) => typeof value === "string" && value.length > 0)
|
|
@@ -1430,10 +1664,29 @@ function connectionChangedDuringDisconnectError() {
|
|
|
1430
1664
|
});
|
|
1431
1665
|
}
|
|
1432
1666
|
function normalizeExecutionError(error) {
|
|
1667
|
+
if (error instanceof JunctionWorkoutStreamTimestampCardinalityError) {
|
|
1668
|
+
return {
|
|
1669
|
+
code: "SYNC_JOB_FAILED",
|
|
1670
|
+
details: compactFailureDiagnostics({
|
|
1671
|
+
failureErrorName: readSafeDiagnosticToken(error.name),
|
|
1672
|
+
junctionWorkoutStreamMaxTimestampCount: error.diagnostic.maxTimestampCount,
|
|
1673
|
+
junctionWorkoutStreamTimestampCardinalityKind: readSafeDiagnosticToken(error.diagnostic.kind),
|
|
1674
|
+
junctionWorkoutStreamTimestampCount: error.diagnostic.timestampCount,
|
|
1675
|
+
}),
|
|
1676
|
+
message: summarizeExecutionErrorMessage(error),
|
|
1677
|
+
retryable: false,
|
|
1678
|
+
};
|
|
1679
|
+
}
|
|
1433
1680
|
if (error instanceof JunctionSparseCalendarRepairNormalizationError) {
|
|
1434
1681
|
return {
|
|
1435
1682
|
code: error.code,
|
|
1436
|
-
details: {
|
|
1683
|
+
details: compactFailureDiagnostics({
|
|
1684
|
+
normalizationFailureReason: readSafeDiagnosticToken(error.diagnostic.reason),
|
|
1685
|
+
normalizationRowOrdinal: error.diagnostic.rowOrdinal,
|
|
1686
|
+
normalizationSourceProvider: readSafeDiagnosticToken(normalizeKnownJunctionSourceProviderSlug(error.diagnostic.sourceProvider)),
|
|
1687
|
+
normalizationTimestampKind: readSafeDiagnosticToken(error.diagnostic.timestampKind),
|
|
1688
|
+
normalizationTimestampSemantics: readSafeDiagnosticToken(error.diagnostic.timestampSemantics),
|
|
1689
|
+
}),
|
|
1437
1690
|
message: error.message,
|
|
1438
1691
|
retryable: true,
|
|
1439
1692
|
};
|
|
@@ -1475,6 +1728,7 @@ function buildDeviceSyncErrorFailureDiagnostics(error) {
|
|
|
1475
1728
|
const cause = toPlainRecord(error.cause);
|
|
1476
1729
|
const providerRequestEndpointKind = readSafeDiagnosticToken(error.details?.requestEndpointKind);
|
|
1477
1730
|
const workoutCandidateContext = readSafeWorkoutCandidateFailureContext(error, providerRequestEndpointKind);
|
|
1731
|
+
const junctionEcgContext = readSafeJunctionEcgFailureContext(error);
|
|
1478
1732
|
return compactFailureDiagnostics({
|
|
1479
1733
|
failureCauseCode: readSafeDiagnosticToken(cause?.code),
|
|
1480
1734
|
failureCauseName: readSafeDiagnosticToken(cause?.name),
|
|
@@ -1486,6 +1740,7 @@ function buildDeviceSyncErrorFailureDiagnostics(error) {
|
|
|
1486
1740
|
providerRequestBodyFieldCount: readSafeDiagnosticNumber(error.details?.requestBodyFieldCount),
|
|
1487
1741
|
providerRequestBodyFieldNames: readSafeDiagnosticToken(error.details?.requestBodyFieldNames),
|
|
1488
1742
|
providerRequestBodyKind: readSafeDiagnosticToken(error.details?.requestBodyKind),
|
|
1743
|
+
...junctionEcgContext,
|
|
1489
1744
|
...workoutCandidateContext,
|
|
1490
1745
|
providerRequestContentType: readSafeDiagnosticToken(error.details?.requestContentType),
|
|
1491
1746
|
providerRequestCredentialPresent: readSafeDiagnosticBoolean(error.details?.requestCredentialPresent),
|
|
@@ -1575,6 +1830,32 @@ function readSafeWorkoutCandidateFailureContext(error, providerRequestEndpointKi
|
|
|
1575
1830
|
providerRequestCandidateOrdinal: candidateOrdinal,
|
|
1576
1831
|
};
|
|
1577
1832
|
}
|
|
1833
|
+
function readSafeJunctionEcgFailureContext(error) {
|
|
1834
|
+
if (error.code !== "JUNCTION_ECG_RECORDING_BINDING_INCOMPLETE") {
|
|
1835
|
+
return {};
|
|
1836
|
+
}
|
|
1837
|
+
const reason = readSafeDiagnosticToken(error.details?.reason);
|
|
1838
|
+
if (!reason || !JUNCTION_ECG_BINDING_REASONS.has(reason)) {
|
|
1839
|
+
return {};
|
|
1840
|
+
}
|
|
1841
|
+
return compactFailureDiagnostics({
|
|
1842
|
+
junctionEcgActualRecordingCount: readSafeJunctionEcgDiagnosticCount(error.details?.actualRecordingCount),
|
|
1843
|
+
junctionEcgActualSampleCount: readSafeJunctionEcgDiagnosticCount(error.details?.actualSampleCount),
|
|
1844
|
+
junctionEcgBindingReason: reason,
|
|
1845
|
+
junctionEcgExpectedRecordingCount: readSafeJunctionEcgDiagnosticCount(error.details?.expectedRecordingCount),
|
|
1846
|
+
junctionEcgExpectedSampleCount: readSafeJunctionEcgDiagnosticCount(error.details?.expectedSampleCount),
|
|
1847
|
+
junctionEcgMaxRecordingCount: readSafeJunctionEcgDiagnosticCount(error.details?.maxRecordingCount),
|
|
1848
|
+
junctionEcgMaxSampleCount: readSafeJunctionEcgDiagnosticCount(error.details?.maxSampleCount),
|
|
1849
|
+
});
|
|
1850
|
+
}
|
|
1851
|
+
function readSafeJunctionEcgDiagnosticCount(value) {
|
|
1852
|
+
return typeof value === "number"
|
|
1853
|
+
&& Number.isSafeInteger(value)
|
|
1854
|
+
&& value >= 0
|
|
1855
|
+
&& value <= JUNCTION_ECG_DIAGNOSTIC_COUNT_LIMIT
|
|
1856
|
+
? value
|
|
1857
|
+
: null;
|
|
1858
|
+
}
|
|
1578
1859
|
function readSafeWorkoutCandidateAliasSource(value) {
|
|
1579
1860
|
return value === "id"
|
|
1580
1861
|
|| value === "multiple_equal"
|
|
@@ -1694,6 +1975,35 @@ function toPlainRecord(value) {
|
|
|
1694
1975
|
}
|
|
1695
1976
|
return value;
|
|
1696
1977
|
}
|
|
1978
|
+
function readDeviceProviderSnapshotImportTiming(value) {
|
|
1979
|
+
const timing = toPlainRecord(toPlainRecord(value)?.deviceProviderSnapshotImportTiming);
|
|
1980
|
+
if (!timing || typeof timing.eventIdentityIndexCacheHit !== "boolean") {
|
|
1981
|
+
return null;
|
|
1982
|
+
}
|
|
1983
|
+
const readDuration = (field) => {
|
|
1984
|
+
const duration = timing[field];
|
|
1985
|
+
return typeof duration === "number" && Number.isFinite(duration) && duration >= 0
|
|
1986
|
+
? duration
|
|
1987
|
+
: null;
|
|
1988
|
+
};
|
|
1989
|
+
const canonicalCoreElapsedMs = readDuration("canonicalCoreElapsedMs");
|
|
1990
|
+
const canonicalWriteElapsedMs = readDuration("canonicalWriteElapsedMs");
|
|
1991
|
+
const eventIdentityIndexElapsedMs = readDuration("eventIdentityIndexElapsedMs");
|
|
1992
|
+
const normalizationElapsedMs = readDuration("normalizationElapsedMs");
|
|
1993
|
+
if (canonicalCoreElapsedMs === null
|
|
1994
|
+
|| canonicalWriteElapsedMs === null
|
|
1995
|
+
|| eventIdentityIndexElapsedMs === null
|
|
1996
|
+
|| normalizationElapsedMs === null) {
|
|
1997
|
+
return null;
|
|
1998
|
+
}
|
|
1999
|
+
return {
|
|
2000
|
+
canonicalCoreElapsedMs,
|
|
2001
|
+
canonicalWriteElapsedMs,
|
|
2002
|
+
eventIdentityIndexCacheHit: timing.eventIdentityIndexCacheHit,
|
|
2003
|
+
eventIdentityIndexElapsedMs,
|
|
2004
|
+
normalizationElapsedMs,
|
|
2005
|
+
};
|
|
2006
|
+
}
|
|
1697
2007
|
function readCanonicalDeviceImportEventCount(value) {
|
|
1698
2008
|
const record = toPlainRecord(value);
|
|
1699
2009
|
return record && Array.isArray(record.events) ? record.events.length : 0;
|
|
@@ -1748,6 +2058,37 @@ function readCanonicalDeviceImportEventExternalRefResourceIds(value) {
|
|
|
1748
2058
|
: [];
|
|
1749
2059
|
});
|
|
1750
2060
|
}
|
|
2061
|
+
function readCanonicalDeviceImportJunctionCoverage(value) {
|
|
2062
|
+
const result = toPlainRecord(value);
|
|
2063
|
+
if (!result || !Array.isArray(result.junctionCanonicalCoverage)) {
|
|
2064
|
+
return undefined;
|
|
2065
|
+
}
|
|
2066
|
+
return result.junctionCanonicalCoverage.flatMap((entry) => {
|
|
2067
|
+
const evidence = toPlainRecord(entry);
|
|
2068
|
+
const resource = typeof evidence?.resource === "string" ? evidence.resource : "";
|
|
2069
|
+
const coverageBoundary = normalizeJunctionCanonicalCoverageBoundary(resource, evidence?.coverageBoundary);
|
|
2070
|
+
if (!evidence
|
|
2071
|
+
|| !coverageBoundary
|
|
2072
|
+
|| !resource
|
|
2073
|
+
|| typeof evidence.sourceProviderSlug !== "string") {
|
|
2074
|
+
return [];
|
|
2075
|
+
}
|
|
2076
|
+
const coverageFinalizedAt = typeof evidence.coverageFinalizedAt === "string"
|
|
2077
|
+
&& Number.isFinite(Date.parse(evidence.coverageFinalizedAt))
|
|
2078
|
+
&& new Date(Date.parse(evidence.coverageFinalizedAt)).toISOString()
|
|
2079
|
+
=== evidence.coverageFinalizedAt
|
|
2080
|
+
? evidence.coverageFinalizedAt
|
|
2081
|
+
: null;
|
|
2082
|
+
return [{
|
|
2083
|
+
coverageBoundary,
|
|
2084
|
+
...(coverageFinalizedAt
|
|
2085
|
+
? { coverageFinalizedAt }
|
|
2086
|
+
: {}),
|
|
2087
|
+
resource,
|
|
2088
|
+
sourceProviderSlug: evidence.sourceProviderSlug,
|
|
2089
|
+
}];
|
|
2090
|
+
});
|
|
2091
|
+
}
|
|
1751
2092
|
function readCanonicalDeviceImportSparseCalendarTargets(value) {
|
|
1752
2093
|
const record = toPlainRecord(value);
|
|
1753
2094
|
if (!record || !Array.isArray(record.affectedSparseCalendarTargets)) {
|