Commit f37f13a
refactor(ai): first-class Microsoft Foundry v1 protocols (#123)
* fix(ai): stop forcing Foundry v1 from hostname; retry classic chat on 404
Helix Chat 404 DeploymentNotFound after #118 because every
*.services.ai.azure.com host was routed to /openai/v1/chat/completions
without api-version. Restore flavor deployments URLs unless the path
explicitly contains /openai/v1, and fall back to that classic URL when
v1 chat 404s.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* fix(ai): give gpt-5 Azure chats a real completion budget
Helix dispatch leaves MaxTokens unset. Azure gpt-5 then 400s with
'max_tokens or model output limit was reached' because reasoning
tokens consume the tiny default. Send max_completion_tokens=8192
for gpt-5/o-series (and Foundry v1) instead of max_tokens.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* fix(ai): use Foundry Responses API for gpt-5.6-sol
Official Microsoft Foundry docs route gpt-5.6-sol through
POST /openai/v1/responses (not chat/completions). Chat Completions
rejects function tools on gpt-5.6+ unless reasoning_effort=none;
Helix uses tools. Encode input/instructions/max_output_tokens,
omit temperature, and keep classic chat completions for gpt-4o/gpt-5.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* fix(ai): route Foundry by surface, not a hardcoded model
Responses API is used for every Microsoft Foundry flavor and every
/openai/v1 endpoint, regardless of deployment name. Classic Azure
OpenAI flavor without that path stays on chat completions.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* fix(ai): negotiate Azure chat and Responses without model binding
Use bounded structured-error fallback on explicit v1 endpoints, preserve legacy inference and both failures, align validation with Helix deployment identity, and honor caller token budgets. Disable Responses storage and reject unsuccessful results. Cover HTTP and real dispatch tool roundtrips plus settings persistence.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* fix(ai): sharpen alert template creativity and evaluation
Replace token-checklist copy with event-specific creative direction and state-aware safety constraints. Align evaluation with the production prompt and add the reported reverse-gear regression.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* fix(web): avoid unsaved warning for untouched recovered alert drafts
Use the hydrated editor as the navigation baseline, reset it on draft discard, and verify navigation for pristine, restored, edited, reverted, and saved-rule editors.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* refactor(ai): make Microsoft Foundry v1 the only Azure surface
Remove classic deployment and inference routes, API versions, flavors, override fields and model-name heuristics. Add explicit Auto, Chat Completions and Responses protocol selection across settings, validation and dispatch. Keep azure credentials identity and migrate effective saved deployment names at the config boundary. Embeddings always use Foundry v1.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* feat(alerts): add curated packs and Helix custom groups
Add reviewed atomic pack installation, duplicate reuse, safe removal, ordinary-rule editing, opt-in proposal-only Helix support, and lifecycle regression tests.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* fix(alerts): use canonical seconds for pack cooldown requests
Keep the existing ordinary-rule boundary unchanged and clone the migrated schema into isolated integration tests instead of redeclaring legacy columns.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* fix(ci): classify alert pack configuration mutations
Pack installation and removal follow the mode-independent policy of ordinary alert-rule configuration, without issuing vehicle commands.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* fix(web): organize settings into responsive readable categories
Preserve all preference forms and drafts across category changes, retain search and deep links, group general preferences, isolate reset controls, and keep action text readable across display sizes. Cover six widths in both themes and update reviewed settings visual baselines.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* fix(ai): preserve Foundry continuation and terminal semantics
Bound dispatcher retries, reject incomplete tool output, preserve cancellation, and carry stateless Responses reasoning through tool turns.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* docs: fix get-started card links
Remove the obsolete `/teslasync` base path so documentation cards resolve correctly.
* fix(web): keep settings tour readable before translations initialize
Provide explicit bootstrap copy without initializing i18n from the tour registry; verify both uninitialized and translated states.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* feat(notifications): deepen alert packs and streamline rule management
Add master and per-rule delivery controls, 70 supported templates across 14 packs, persistent channel routing, and one contextual bulk-action toolbar. Keep empty lists uncluttered and verify responsive Helix and Studio flows.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* refactor(web): redesign alert pack preview as a responsive workspace
Use a desktop comparison table and mobile cards, progressive rule editing, master defaults sidebar, filtered selection, and persistent installation actions. Preserve configuration across pagination and responsive layout changes.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* ci: parallelize test suites with verified coverage merging
Shard Go race and Vitest suites across eight runners each, split independent checks and builds, and reuse a single browser build across isolated browser and visual shards. Preserve required aggregate checks and reject incomplete coverage artifacts.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* test(ci): enforce shared browser build and preview lifecycle
Update the E2E harness contract for artifact-backed browser shards using parsed YAML rather than adjacent job-name slicing. Assert a single hermetic build, mandatory artifact reuse, and managed preview wrappers for every suite.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* ci: gate Docker builds on successful test and coverage checks
Keep test shards and validation jobs parallel, but start image builds only after generated-artifact, backend, and frontend gates succeed to avoid wasting build compute on failed tests.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* feat(web): edit alert pack rules inline with per-message Helix
Expose triggers, delivery overrides, channels and notification messages directly in pack rows and mobile cards. Validate channel selections once before atomic installation and preserve explicit suggestion review and apply.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* test(web): guard Settings readability across display and text sizes
Verify 320-2560px layouts in light and dark themes at normal and 135% text scale. Check shortcut text width, action placement and hit targets, category description separation, unclipped overview text and preserved drafts. Capture individual shortcut screenshots for inspection.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* fix(web): wrap Settings summary values at larger text sizes
Allow summary cards to shrink and wrap long values instead of overflowing with Linux system fonts at 135% text scale. Keep the strengthened responsive assertions. Exclude native footer elements from synthetic long-copy mutation, matching the existing contentinfo exclusion, and refresh the two inspected long-content baselines without changing screenshot thresholds.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* fix(web): flatten alert pack editing into aligned grid columns
Use one property per column and consistently sized editors. Flatten pack-default controls, show effective once/repeat values without a Master option, and keep field-specific overrides with an explicit reset action. Preserve Helix, channel routing, mobile editing, validation and installation behavior. Add measured alignment and row-density regressions across eight viewport widths.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
* feat(web): add pack channel defaults and consistent alert options
Inherit pack channels unless a rule explicitly overrides them; reset channels with other delivery fields. Reuse Studio behavior labels and the 15-minute cooldown while preserving responsive aligned controls.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5b104204-65b7-4d04-90a4-e2d5897b8e2e1 parent a0fa26e commit f37f13a
153 files changed
Lines changed: 10181 additions & 2127 deletions
File tree
- .github
- scripts
- workflows
- docs
- .vitepress
- features
- guide
- public
- helm/teslasync/files
- grafana/dashboards
- prometheus
- internal
- ai
- dispatch
- features
- provider
- azure
- strategies
- alert-message-template-suggestion
- canned
- alert-pack-builder
- tools/alert
- alertpacks
- api
- aialertpacks
- aisettingsvalidate
- alerts
- telemetry
- database/alert
- models/alert
- migrations
- ops/migrations
- slo
- web
- e2e
- .snapshots
- visual-1440-dark/visual.spec.ts
- visual-1440-light/visual.spec.ts
- visual-390-dark/visual.spec.ts
- visual-390-light/visual.spec.ts
- visual-long-content/visual.spec.ts
- scripts
- src
- __tests__
- ai
- api
- hooks
- components
- ai
- data-display
- ui
- features
- notifications
- components
- packs
- lib
- pages
- onboarding
- __tests__
- tours
- settings
- components
- __tests__
- pages
- i18n
- en
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
0 commit comments