Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1608 commits
Select commit Hold shift + click to select a range
8355e85
fix(deps): remediate 6 open Dependabot alerts (#520)
colinmxs Jun 29, 2026
536e08d
fix(security): remediate CodeQL alerts (HIGH/MEDIUM + NOTE cleanups) …
colinmxs Jun 29, 2026
72dcb66
Release/1.0.2 (#522) (#523)
colinmxs Jun 30, 2026
43a8e40
chore: prune dead workflow tracks, dedupe test gates, fix/fork-gate d…
colinmxs Jun 30, 2026
333468b
ci: serialize platform + backend deploys via shared concurrency group…
colinmxs Jun 30, 2026
e333e37
Chore/cleanup dependabot codeql 2026 06 (#526)
colinmxs Jun 30, 2026
3e3b706
Release/1.0.3
colinmxs Jun 30, 2026
23ad173
Merge remote-tracking branch 'origin/main' into release/1.0.3
colinmxs Jun 30, 2026
4132c03
Merge pull request #528 from Boise-State-Development/release/1.0.3
colinmxs Jun 30, 2026
0b680b3
Merge pull request #529 from Boise-State-Development/main
colinmxs Jun 30, 2026
9b437ee
fix: add missing iam permission for agent core gateway
DerrickF Jul 1, 2026
5b08fe4
fix: add lambda:InvokeFunction to gateway role for MCP targets
DerrickF Jul 1, 2026
960a284
fix(iam): grant bedrock-agentcore:GetMemory to app-api + runtime roles
colinmxs Jul 1, 2026
5d677e3
Merge pull request #530 from Boise-State-Development/hotfix/agentcore…
colinmxs Jul 1, 2026
398c960
fix: keep tool card after OAuth/tool-approval resume
philmerrell Jul 1, 2026
0206f0a
Merge pull request #532 from Boise-State-Development/feature/fix-inte…
philmerrell Jul 1, 2026
5ef730d
chore(kaizen): weekly research scan 2026-07-03
philmerrell Jul 3, 2026
cb41e1c
chore(kaizen): weekly review prep 2026-07-03
philmerrell Jul 3, 2026
9ac71fa
feat: isolate chat streaming per conversation
philmerrell Jul 3, 2026
4d4edf5
Merge pull request #535 from Boise-State-Development/feature/concurre…
philmerrell Jul 3, 2026
4271778
feat: default export to messages only
philmerrell Jul 3, 2026
1a9a6be
Merge pull request #537 from Boise-State-Development/feature/export-d…
philmerrell Jul 3, 2026
cad96dc
feat: expose session options menu on top-nav title
philmerrell Jul 3, 2026
62302a8
test: update onSessionClick spec for optimistic currentSession set
philmerrell Jul 3, 2026
122b2f9
Merge pull request #538 from Boise-State-Development/feature/topnav-s…
philmerrell Jul 3, 2026
33fbd40
fix: clear OAuth consent state on session switch
philmerrell Jul 3, 2026
9160973
Merge pull request #539 from Boise-State-Development/fix/oauth-consen…
philmerrell Jul 3, 2026
8af2d2b
feat: push session title mid-stream via session_title SSE event
philmerrell Jul 3, 2026
8ed1e03
feat: skeleton + fallback for pending session titles in sidebar and t…
philmerrell Jul 3, 2026
80403d3
Merge pull request #540 from Boise-State-Development/feature/parallel…
philmerrell Jul 3, 2026
fc6ac22
feat: persist interrupted-turn context so aborted responses aren't or…
philmerrell Jul 3, 2026
1d36fba
feat(spa): surface interrupted-turn state — stop signal + reload chip
philmerrell Jul 3, 2026
7ea27bc
Merge pull request #541 from Boise-State-Development/feature/interrup…
philmerrell Jul 3, 2026
a510606
docs: add assistant KB sync (scheduled re-index) design spec
philmerrell Jul 3, 2026
c5b3e25
feat(kb-sync): add SyncPolicy data layer, DueSyncIndex GSI, delete ca…
philmerrell Jul 3, 2026
71a67a6
Merge pull request #542 from Boise-State-Development/feature/kb-sync-…
philmerrell Jul 3, 2026
6d1ba1c
feat(kb-sync): dispatcher + worker Lambdas, EventBridge sweep, kb-syn…
philmerrell Jul 4, 2026
8a0fcf5
Merge pull request #543 from Boise-State-Development/feature/kb-sync-…
philmerrell Jul 4, 2026
2660994
feat(kb-sync): Drive-file sync path — vault token, change detection, …
philmerrell Jul 4, 2026
aef5c31
Merge pull request #544 from Boise-State-Development/feature/kb-sync-…
philmerrell Jul 4, 2026
78a8f2b
feat(kb-sync): web re-crawl path — refresh/upsert crawls, miss accoun…
philmerrell Jul 4, 2026
e3d657c
Merge pull request #545 from Boise-State-Development/feature/kb-sync-…
philmerrell Jul 4, 2026
fcdbf8e
feat(kb-sync): sync-policy API + resume hooks — CRUD routes, run-now,…
philmerrell Jul 4, 2026
721bce1
Merge pull request #546 from Boise-State-Development/feature/kb-sync-api
philmerrell Jul 4, 2026
25a4be4
feat(kb-sync): SPA sync-policy controls on assistant knowledge page
philmerrell Jul 4, 2026
b74404a
Merge pull request #547 from Boise-State-Development/feature/kb-sync-spa
philmerrell Jul 4, 2026
ffcd420
feat(interrupted-turn): persist stopped-turn metadata so cost + messa…
philmerrell Jul 4, 2026
a256242
Merge pull request #548 from Boise-State-Development/feature/interrup…
philmerrell Jul 4, 2026
d37be38
fix(kb-sync): grant worker read on the vault's backing OAuth secrets
philmerrell Jul 4, 2026
babd972
Merge pull request #549 from Boise-State-Development/fix/kb-sync-work…
philmerrell Jul 4, 2026
50d08bd
refactor(oauth): forward admin customParameters, drop hardcoded vendo…
philmerrell Jul 4, 2026
e75830c
docs: add tool-search token-bloat + per-user markdown memory specs
philmerrell Jul 4, 2026
1a04730
Merge pull request #550 from Boise-State-Development/refactor/oauth-a…
philmerrell Jul 4, 2026
4ef7119
Merge pull request #551 from Boise-State-Development/docs/tool-search…
philmerrell Jul 4, 2026
3349c93
feat(kb-sync): log workload identity + userId on a reauth pause
philmerrell Jul 4, 2026
00e821e
Merge pull request #552 from Boise-State-Development/feature/kb-sync-…
philmerrell Jul 4, 2026
3b32a27
chore(kb-sync): plumb CDK_KB_SYNC_ENABLED into the platform deploy
philmerrell Jul 4, 2026
0eb6984
Merge pull request #553 from Boise-State-Development/chore/kb-sync-en…
philmerrell Jul 4, 2026
7ea6ec2
chore(kb-sync): default the feature ON with a kill switch
philmerrell Jul 4, 2026
570ce2e
Merge pull request #554 from Boise-State-Development/chore/kb-sync-de…
philmerrell Jul 4, 2026
0b0acfe
feat(kb-sync): clarify the auto-sync control and always show last-synced
philmerrell Jul 5, 2026
2244571
fix(kb-sync): tidy the sync row layout and repair blank sync timestamps
philmerrell Jul 5, 2026
7e37329
fix(kb-sync): give web sources the same sync treatment as documents
philmerrell Jul 5, 2026
682a6c0
feat(kb-sync): unified skeleton loading for the knowledge base lists
philmerrell Jul 5, 2026
be5e0f0
feat(kb-sync): show a "Saving…" indicator while a sync change applies
philmerrell Jul 5, 2026
690848c
Merge pull request #555 from Boise-State-Development/feature/kb-sync-…
philmerrell Jul 5, 2026
5e7116e
fix(users): normalize sync timestamps to strict ISO 8601 (single Z)
philmerrell Jul 5, 2026
2206007
Merge pull request #556 from Boise-State-Development/fix/user-sync-ti…
philmerrell Jul 5, 2026
5af1a28
feat(assistant-editor): group knowledge base into a contrasted inset …
philmerrell Jul 5, 2026
7a5c86d
feat(connectors): add Google connector logo SVGs
philmerrell Jul 5, 2026
dc39623
Merge feature/connector-logos into develop
philmerrell Jul 5, 2026
7f35dae
docs(specs): agentic platform primitives plan + scheduled-runs design…
philmerrell Jul 5, 2026
289e26c
Merge pull request #558 from Boise-State-Development/feature/agentic-…
philmerrell Jul 5, 2026
9111a83
feat(harness): spike headless agent-run entrypoint (F1) — proven in d…
philmerrell Jul 5, 2026
e1a0090
docs(specs): record F1 spike findings + lock decision-gate calls
philmerrell Jul 5, 2026
0cd8000
feat(harness): headless-grant record + production hardening of the F1…
philmerrell Jul 6, 2026
3137cad
feat(runs): cookie-authed "Run now" surface behind flag + RBAC capabi…
philmerrell Jul 6, 2026
664e987
feat(infra): SCHEDULED_RUNS_ENABLED flag + HeadlessGrantUserIndex GSI
philmerrell Jul 6, 2026
8a6af42
Merge pull request #560 from Boise-State-Development/docs/harness-spi…
philmerrell Jul 6, 2026
e945316
Merge pull request #561 from Boise-State-Development/feature/harness-…
philmerrell Jul 6, 2026
a7c65ab
docs(specs): Phase B scoping brief — scheduler + PII-ordering prerequ…
philmerrell Jul 6, 2026
49806f5
docs(specs): governance for scheduled runs is role/auth-based; drop B…
philmerrell Jul 6, 2026
dea7ba9
feat(schedules): B1 — schedule data model + CRUD (inert)
philmerrell Jul 6, 2026
7dc7d38
Merge pull request #562 from Boise-State-Development/docs/phase-b-brief
philmerrell Jul 6, 2026
b329748
Merge pull request #563 from Boise-State-Development/feature/schedule…
philmerrell Jul 6, 2026
bafd5e1
feat(schedules): B3 — schedule management SPA + enablement
philmerrell Jul 6, 2026
c72eb9c
feat(schedules): B2 — scheduler dispatcher + worker
philmerrell Jul 6, 2026
3355dcc
fix(schedules): register nav routes in specs to fix CI NG04002
philmerrell Jul 6, 2026
d4c47b7
Merge pull request #564 from Boise-State-Development/feature/schedule…
philmerrell Jul 6, 2026
02e6e02
Merge pull request #565 from Boise-State-Development/feature/schedule…
philmerrell Jul 6, 2026
af6dfc6
fix(schedules): make scheduled-runs worker image importable
philmerrell Jul 6, 2026
b53dc30
Merge pull request #566 from Boise-State-Development/fix/scheduled-ru…
philmerrell Jul 6, 2026
3ff3b50
fix(schedules): make preview-session check importable in lean worker …
philmerrell Jul 6, 2026
9f0afeb
Merge pull request #567 from Boise-State-Development/fix/scheduled-ru…
philmerrell Jul 6, 2026
e707184
fix(scheduled-runs): intersect client enabled_tools with RBAC on head…
philmerrell Jul 6, 2026
6cd0c11
Merge pull request #568 from Boise-State-Development/fix/scheduled-ru…
philmerrell Jul 6, 2026
4e6e3c3
test(schedules): guard the scheduled-runs lean image against agents/s…
philmerrell Jul 6, 2026
0ebce7f
docs(kaizen): scope managed-Harness build-vs-adopt spike for the head…
philmerrell Jul 6, 2026
794014e
feat(schedules): let schedule edits clear assistantId/enabledTools
philmerrell Jul 6, 2026
64246f8
fix(app-api): grant bedrock:ListFoundationModels to task role
philmerrell Jul 6, 2026
209e0cf
Merge pull request #557 from Boise-State-Development/feature/kb-secti…
philmerrell Jul 6, 2026
567b5d2
Merge pull request #571 from Boise-State-Development/fix/app-api-bedr…
philmerrell Jul 6, 2026
0dd0cda
Merge pull request #569 from Boise-State-Development/feature/schedule…
philmerrell Jul 6, 2026
1a5717d
Merge pull request #533 from Boise-State-Development/kaizen/review-20…
philmerrell Jul 6, 2026
ea22f21
Merge pull request #570 from Boise-State-Development/docs/kaizen-mana…
philmerrell Jul 6, 2026
6f3dc2b
feat(sessions): unread indicator for scheduled-run deliveries
philmerrell Jul 6, 2026
68502ee
Merge pull request #572 from Boise-State-Development/feature/sessions…
philmerrell Jul 6, 2026
72fed49
docs(kaizen): queue Bedrock Mantle endpoint watchlist item
philmerrell Jul 6, 2026
6165ee7
Merge pull request #573 from Boise-State-Development/docs/kaizen-mant…
philmerrell Jul 6, 2026
f3d28be
docs(kaizen): managed-Harness spike findings — 3 gating questions ans…
philmerrell Jul 6, 2026
9fd2e62
feat(sidenav): gate Scheduled Runs nav entry to system_admin
philmerrell Jul 6, 2026
099c27b
Merge pull request #574 from Boise-State-Development/feature/schedule…
philmerrell Jul 6, 2026
32eef0d
Merge pull request #575 from Boise-State-Development/docs/managed-har…
philmerrell Jul 6, 2026
0ac9a4f
docs(kaizen): managed-Harness Q2 live-probe result — GO-with-boundary
philmerrell Jul 6, 2026
989e4c2
feat(sessions): add mark-as-read/unread toggle with sidebar dot fixes
philmerrell Jul 6, 2026
f20a012
Merge pull request #577 from Boise-State-Development/feature/session-…
philmerrell Jul 7, 2026
9a60daf
feat(schedules): interval cadence + "Run now" with background-task to…
philmerrell Jul 7, 2026
6e3d5ac
Merge pull request #578 from Boise-State-Development/feature/schedule…
philmerrell Jul 7, 2026
e13bac1
Merge remote-tracking branch 'origin/develop' into kaizen/research-20…
philmerrell Jul 7, 2026
25fa40a
Merge pull request #534 from Boise-State-Development/kaizen/research-…
philmerrell Jul 7, 2026
46903b2
Merge pull request #576 from Boise-State-Development/docs/managed-har…
philmerrell Jul 7, 2026
67744d6
docs(memory): reframe spec as Memory Spaces — bindable, templated, sh…
philmerrell Jul 7, 2026
bdcc6f7
Merge pull request #579 from Boise-State-Development/feature/memory-s…
philmerrell Jul 7, 2026
f310684
docs(kaizen): recover resourceOauth2ReturnUrl shape section into harn…
philmerrell Jul 7, 2026
0cc1a31
Merge pull request #580 from Boise-State-Development/fix/harness-retu…
philmerrell Jul 7, 2026
ab91ae2
docs(memory): bake in full-ownership zip export of a Memory Space
philmerrell Jul 7, 2026
b6ce474
Merge pull request #581 from Boise-State-Development/feature/memory-s…
philmerrell Jul 7, 2026
eb578e0
feat(memory): Memory Spaces data layer (PR-1)
philmerrell Jul 7, 2026
ca34bc1
Merge pull request #582 from Boise-State-Development/feature/memory-s…
philmerrell Jul 7, 2026
e6d9299
docs(memory): re-slice phasing into primitive vs. agent-consumption w…
philmerrell Jul 7, 2026
4301555
Merge pull request #583 from Boise-State-Development/feature/memory-r…
philmerrell Jul 7, 2026
6f34352
feat(memory): Memory Spaces user surface — /memory/spaces CRUD (A2)
philmerrell Jul 7, 2026
3aa5e8f
Merge pull request #584 from Boise-State-Development/feature/memory-a…
philmerrell Jul 7, 2026
79f79d9
feat(memory): Memory Space zip export — /memory/spaces/{id}/export (A3)
philmerrell Jul 7, 2026
8eaa1ea
Merge pull request #585 from Boise-State-Development/feature/memory-a…
philmerrell Jul 7, 2026
8e581a2
feat(memory): Memory Space sharing + optimistic manifest concurrency …
philmerrell Jul 7, 2026
a7a1f67
Merge pull request #586 from Boise-State-Development/feature/memory-a…
philmerrell Jul 7, 2026
2d39e72
feat(memory): Memory Spaces SPA panel — list/detail/create/share/expo…
philmerrell Jul 7, 2026
2012b92
test(memory): mock MemorySpaceService in sidenav spec (fix unhandled …
philmerrell Jul 7, 2026
e1d9a8b
Merge pull request #587 from Boise-State-Development/feature/memory-a…
philmerrell Jul 7, 2026
0590f0b
fix(memory): wire memory-spaces table/bucket names onto app-api
philmerrell Jul 7, 2026
e2fcad8
docs(cdk): capture the "wire resource name to every compute" rule
philmerrell Jul 7, 2026
0944e73
Merge pull request #588 from Boise-State-Development/fix/memory-space…
philmerrell Jul 7, 2026
aabc32b
feat(memory): deterministic consolidation health pass (A6)
philmerrell Jul 7, 2026
2c0cbd4
Merge pull request #589 from Boise-State-Development/feature/memory-a…
philmerrell Jul 7, 2026
4ff2a55
docs(agent): Agent Designer spec — unified primitive-binding surface
philmerrell Jul 7, 2026
03b5209
Merge pull request #590 from Boise-State-Development/feature/agent-de…
philmerrell Jul 8, 2026
f94073d
feat(agents): Agent contract + compat mapping in shared assistants mo…
philmerrell Jul 8, 2026
8580e34
feat(agents): persist bindings + modelConfig with design-time validation
philmerrell Jul 8, 2026
c2329f8
Merge pull request #591 from Boise-State-Development/feature/agent-de…
philmerrell Jul 8, 2026
58ce8b8
feat(agents): /agents alias router behind AGENTS_API_ENABLED (dark)
philmerrell Jul 8, 2026
4403040
Merge pull request #592 from Boise-State-Development/feature/agent-de…
philmerrell Jul 8, 2026
c963fa8
feat(agents): wire AGENTS_API_ENABLED through CDK + Phase 1 docs
philmerrell Jul 8, 2026
20ded48
Merge pull request #593 from Boise-State-Development/feature/agent-de…
philmerrell Jul 8, 2026
0a963f3
feat(agents): thread AGENTS_API_ENABLED to the inference runtime (Pha…
philmerrell Jul 8, 2026
6801911
feat(agents): resolve Agent modelConfig at invocation, per invoker (P…
philmerrell Jul 8, 2026
9b576a3
feat(agents): Memory-Space hydration helper for prompt injection (Pha…
philmerrell Jul 8, 2026
2e69cab
feat(agents): inject bound Memory Space into the prompt, per invoker …
philmerrell Jul 8, 2026
3344e17
Merge pull request #594 from Boise-State-Development/feature/agent-de…
philmerrell Jul 8, 2026
0cd772b
fix(agents): rename app_api.agents package to avoid shadowing top-lev…
philmerrell Jul 8, 2026
e3ac783
Merge pull request #595 from Boise-State-Development/fix/agents-packa…
philmerrell Jul 8, 2026
6837c33
feat(agents): memory_* tools scoped to an Agent's bound Memory Space …
philmerrell Jul 8, 2026
0e4d55b
chore(memory): default Memory Spaces ON with a kill switch
philmerrell Jul 8, 2026
a875cce
Merge pull request #596 from Boise-State-Development/feature/agent-me…
philmerrell Jul 8, 2026
780b736
Merge pull request #597 from Boise-State-Development/feature/memory-s…
philmerrell Jul 8, 2026
6c26f32
feat(agent-designer): Phase 4 — Agent Designer UI + bindable catalog API
philmerrell Jul 8, 2026
31141bf
test(sidenav): stub AgentService probe to fix unhandled HTTP rejection
philmerrell Jul 8, 2026
7694afd
Merge pull request #598 from Boise-State-Development/claude/agent-des…
philmerrell Jul 8, 2026
128729a
fix(agent-designer): align model write-check with the bindable catalog
philmerrell Jul 8, 2026
5857457
Merge pull request #599 from Boise-State-Development/claude/agent-des…
philmerrell Jul 8, 2026
e393281
feat(sidenav): gate Memory Spaces + Agents to system-admin, add Previ…
philmerrell Jul 8, 2026
eb2bae8
Merge pull request #600 from Boise-State-Development/claude/preview-n…
philmerrell Jul 8, 2026
0b9b039
feat(agent-designer): resolve tool bindings at invocation (replace + …
philmerrell Jul 8, 2026
ebdcb47
feat(topnav): surface active assistant in the top nav
philmerrell Jul 8, 2026
290f9c3
Merge pull request #601 from Boise-State-Development/feature/agent-to…
philmerrell Jul 8, 2026
6dae289
feat(agent-designer): resolve skill bindings at invocation (replace +…
philmerrell Jul 8, 2026
470dfa8
feat(agent-designer): reflect governed agent bindings in the chat-inp…
philmerrell Jul 8, 2026
80d9a1c
Backmerge/main into develop
colinmxs Jul 8, 2026
c51b02e
Merge pull request #605 from Boise-State-Development/backmerge/main-i…
colinmxs Jul 8, 2026
fee9b1c
Merge pull request #602 from Boise-State-Development/feature/agent-sk…
philmerrell Jul 9, 2026
02680a8
Merge pull request #603 from Boise-State-Development/feature/agent-ch…
philmerrell Jul 9, 2026
6a9be1e
fix(agent-designer): release chat-input picker locks on new conversation
philmerrell Jul 9, 2026
098101a
feat(agent-designer): show only the bound tools/skills when an agent …
philmerrell Jul 9, 2026
360ea31
Merge pull request #606 from Boise-State-Development/fix/agent-lock-r…
philmerrell Jul 9, 2026
f16785f
chore(agent-designer): default AGENTS_API_ENABLED on with a kill switch
philmerrell Jul 9, 2026
df5e754
Merge pull request #607 from Boise-State-Development/chore/agents-api…
philmerrell Jul 9, 2026
35e7033
feat(agent-designer): manage an agent's knowledge base from the Agent…
philmerrell Jul 9, 2026
24a9f38
test(scheduled-runs): freeze dispatcher clock to de-flake cadence rea…
philmerrell Jul 9, 2026
be2e253
Merge pull request #608 from Boise-State-Development/feature/agent-kn…
philmerrell Jul 9, 2026
c5efe99
feat(agent-designer): govern model params + live editor preview
philmerrell Jul 9, 2026
c859e7d
Merge remote-tracking branch 'origin/develop' into feature/agent-desi…
philmerrell Jul 9, 2026
e35e645
Merge pull request #609 from Boise-State-Development/feature/agent-de…
philmerrell Jul 9, 2026
eeb5683
feat(agent-designer): lock preview model picker; trim preview nav
philmerrell Jul 9, 2026
897353f
Merge pull request #611 from Boise-State-Development/feature/agent-pr…
philmerrell Jul 9, 2026
93d999d
Merge remote-tracking branch 'origin/main' into backmerge/main-into-d…
colinmxs Jul 9, 2026
f640d32
Merge pull request #613 from Boise-State-Development/backmerge/main-i…
colinmxs Jul 9, 2026
92a6ca7
fix(memory-spaces): route namespaced entry slugs via :path converter
philmerrell Jul 9, 2026
5774ea7
feat(memory-spaces): let the agent read/write MEMORY.md via reserved …
philmerrell Jul 9, 2026
dd3f4c7
Merge pull request #614 from Boise-State-Development/feature/memory-s…
philmerrell Jul 9, 2026
cd77e7e
feat(schedules): target Agents instead of Assistants on scheduled runs
philmerrell Jul 9, 2026
42e69bc
chore(deps): upgrade Strands to 1.47.0 and add aws-bedrock-token-gene…
philmerrell Jul 10, 2026
3fce83c
fix(scheduled-runs): remove RBAC gate causing prod 403 "Access Denied"
philmerrell Jul 10, 2026
6ded296
docs: consolidate release workflow into one auto-invoked steering doc…
colinmxs Jul 10, 2026
93aeb65
Merge pull request #618 from Boise-State-Development/docs/consolidate…
colinmxs Jul 10, 2026
67e2653
feat(models): Mantle Responses API + per-model region; drop endpoint-…
philmerrell Jul 10, 2026
45f5de4
Merge pull request #617 from Boise-State-Development/claude/prod-erro…
philmerrell Jul 10, 2026
5ac91d1
Merge pull request #615 from Boise-State-Development/feature/schedule…
philmerrell Jul 10, 2026
a8c323e
Merge pull request #619 from Boise-State-Development/feature/strands-…
philmerrell Jul 10, 2026
ac54a4d
Merge pull request #620 from Boise-State-Development/feature/mantle-r…
philmerrell Jul 10, 2026
f3ebd72
fix(api-converse): serve /chat/api-converse from app-api, not via inf…
philmerrell Jul 10, 2026
e6d46a8
fix(app-api): grant Bedrock streaming + inference-profile invoke
philmerrell Jul 10, 2026
82d7348
fix(settings): point API-key snippets at /api/chat/api-converse
philmerrell Jul 10, 2026
9192892
feat(api-converse): route Bedrock Mantle models via a shared builder
philmerrell Jul 10, 2026
154f55c
feat(app-api): grant bedrock-mantle:CreateInference for api-converse
philmerrell Jul 10, 2026
3833f74
Merge pull request #621 from Boise-State-Development/claude/api-key-b…
philmerrell Jul 10, 2026
d033279
Merge remote-tracking branch 'origin/main' into backmerge/main-into-d…
philmerrell Jul 10, 2026
46a3df9
Merge pull request #623 from Boise-State-Development/backmerge/main-i…
philmerrell Jul 10, 2026
f1e361a
feat(identity): MCP user identity forwarding via access-token enrichment
DerrickF Jul 10, 2026
1de3dca
Merge pull request #627 from Boise-State-Development/feature/mcp-user…
DerrickF Jul 10, 2026
a565cec
fix(app-api): grant bedrock-agentcore:CreateTokenVault for OAuth prov…
philmerrell Jul 10, 2026
8ae1dfe
Merge pull request #628 from Boise-State-Development/fix/app-api-crea…
philmerrell Jul 10, 2026
0d1406b
Merge remote-tracking branch 'origin/main' into backmerge/main-into-d…
philmerrell Jul 10, 2026
330e55a
Merge pull request #630 from Boise-State-Development/backmerge/main-i…
philmerrell Jul 11, 2026
3cca87a
fix(scripts): make sync-version.sh portable across GNU and BSD tools
philmerrell Jul 11, 2026
c1ea34a
Merge pull request #631 from Boise-State-Development/feature/portable…
philmerrell Jul 11, 2026
4ed5470
feat(admin): make admin sidebar nav sticky on desktop
philmerrell Jul 11, 2026
1bf847e
feat(frontend): redesign 404 page to match auth screens
philmerrell Jul 11, 2026
5c9510e
Merge pull request #632 from Boise-State-Development/claude/sticky-as…
philmerrell Jul 11, 2026
7b71880
Merge pull request #633 from Boise-State-Development/claude/404-page-…
philmerrell Jul 11, 2026
44fa167
fix(frontend): make shell scroll container real so sticky nav engages
philmerrell Jul 11, 2026
5500a62
Merge pull request #634 from Boise-State-Development/feature/frosted-…
philmerrell Jul 11, 2026
f5e9473
docs(specs): quota cooldown windows + platform ceiling spec and commi…
philmerrell Jul 11, 2026
acf27af
Merge pull request #635 from Boise-State-Development/claude/quota-coo…
philmerrell Jul 11, 2026
318edf0
fix(frontend): guarantee JIT compiler in vitest runs to stop Platform…
philmerrell Jul 11, 2026
18935a3
fix(frontend): size chat scroll space to the response, adapt to shell…
philmerrell Jul 11, 2026
b0e87c8
Merge pull request #637 from Boise-State-Development/feature/dynamic-…
philmerrell Jul 11, 2026
389e0dd
Merge pull request #636 from Boise-State-Development/fix/vitest-jit-c…
philmerrell Jul 11, 2026
1126d3d
feat(settings): make user settings sidebar nav sticky on desktop
philmerrell Jul 11, 2026
3539079
Merge pull request #638 from Boise-State-Development/claude/sticky-as…
philmerrell Jul 11, 2026
4aabdff
feat(admin-tools): discover OAuth-gated MCP servers with the admin's …
philmerrell Jul 11, 2026
ef70323
Merge pull request #639 from Boise-State-Development/feature/discover…
philmerrell Jul 11, 2026
62b0e54
feat(manage-models): add Sonnet 5 + GPT-5.4 curated cards, order by c…
philmerrell Jul 11, 2026
eb74b62
Merge pull request #641 from Boise-State-Development/feature/curated-…
philmerrell Jul 12, 2026
8e31b33
fix(mantle): route google.gemma-4-* to /openai/v1 base path
philmerrell Jul 13, 2026
cac3a59
Merge pull request #643 from Boise-State-Development/feature/curated-…
philmerrell Jul 13, 2026
b3f8b85
feat(manage-models): make max output tokens optional
philmerrell Jul 13, 2026
ae4dfd8
Merge pull request #644 from Boise-State-Development/feature/optional…
philmerrell Jul 13, 2026
74cd7b0
fix(docker): float curl security patch to survive Debian mirror purges
philmerrell Jul 14, 2026
dfba9f8
Merge pull request #645 from Boise-State-Development/feature/optional…
philmerrell Jul 14, 2026
964637e
Release/1.5.0
philmerrell Jul 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,40 @@ All notable changes to this project are documented in this file. Format follows

For narrative release notes written for operators and product owners, see [RELEASE_NOTES.md](RELEASE_NOTES.md).

## [1.5.0] - 2026-07-13

Model-catalog and MCP-admin expansion, plus UI polish. Admins can now discover the tools behind OAuth-gated MCP servers (e.g. the GitHub remote MCP server) using their own vaulted 3LO token, two new curated model cards land (Claude Sonnet 5, GPT-5.4), and the max-output-tokens field goes optional so reasoning/Responses-API models without a fixed cap can be added. Alongside: sticky admin/settings sidebars, a redesigned 404 page, chat-scroll and sticky-nav fixes, a vitest flake fix, and a Docker curl security patch. No CDK deploy, no data migration, no breaking changes — ships via the backend and frontend pipelines.

### 🚀 Added

- Admin tool "Discover" now works against OAuth-gated MCP servers: pass the OAuth provider id and discovery connects with the admin's own vaulted 3LO token (fetched via AgentCore Identity `get_token_for_user`, injected as a bearer), validating the admin's connection and listing the tools their token can see. Previously OAuth-gated servers were refused outright (400) or connected unauthenticated and 401'd. `requires_consent` → 409; unknown provider / forward-auth conflict / oauth2-without-provider → 400 (#639)
- Two curated model catalog cards: **Claude Sonnet 5** (Bedrock, `global.anthropic.claude-sonnet-5`, 1M context, effort-based reasoning, caching on) and **GPT-5.4** (Mantle, `openai.gpt-5.4`, Responses API). Bedrock Claude cards now order most-capable-first and the "Bedrock Mantle" tab sits next to "Bedrock" (#641)

### ✨ Improved

- Max output tokens is now optional on the admin model form — reasoning / Responses-API models (GPT-5.x, adaptive-thinking Claude) that share output with reasoning budget have no fixed cap to enter. `max_output_tokens` is `Optional[int]` end to end; it was only ever a ceiling for the admin-configured `max_tokens` param and is never sent to the provider, so leaving it unset is safe (#643, #644)
- Admin and user-settings sidebar navs are now sticky on desktop, staying in view as the content column scrolls (#632, #638)
- The 404 page was redesigned to match the auth/first-boot screens (frosted glass, animated blobs, graph-paper grid) (#633)
- Chat scroll space is now sized to the pending response and adapts to the shell scroll container, so the last turn spaces correctly (#637)

### 🐛 Fixed

- Mantle `google.gemma-4-*` models 401'd with `access_denied` because Gemma 4 is served only on Mantle's `/openai/v1` path but the Strands SDK routed it to `/v1`. The SDK's OpenAI-path prefix table is now extended with `google.gemma-4-` at build time (lazy, idempotent, guarded); Gemma 3 stays on `/v1` (#641)
- The admin/settings sticky sidebars needed a real shell scroll container to anchor against — the app shell now scrolls on the correct element so `position: sticky` engages (#634)
- Vitest runs now guarantee the Angular JIT compiler is present, stopping the intermittent `PlatformLocation` provider flake in the SPA unit suite (#636)

### 🔒 Security

- Dockerfiles pin curl to `+deb13u*` instead of an exact point release, so the security patch floats with Debian's mirror (which purges superseded point versions on each CVE update) and builds don't break; the digest-pinned base image still provides reproducibility (#645)

### 🔧 CI/CD

- `scripts/common/sync-version.sh` is now portable across GNU and BSD userlands (macOS `sed`/`grep`), so the version bump runs outside the dev container (#631)

### 📚 Docs

- Added the quota cooldown-windows + platform-ceiling spec and committee one-pager (`docs/specs/`) (#635); added a design note proposing `mantleEndpointPath` as a live admin setting (#641)

## [1.4.0] - 2026-07-10

Opt-in MCP user-identity forwarding, plus an admin OAuth-provider repair. A new Cognito Pre-Token-Generation Lambda can copy configured user-pool attributes into namespaced claims on the access token — the only token forwarded end-to-end to MCP servers — so personalized MCP tools can identify the caller. It ships disabled by default (a fork that configures nothing gets zero resources). Also fixes a 502 when adding the first admin OAuth provider. A platform (CDK) deploy is required for the OAuth-provider IAM fix.
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
**An open-source, production-ready Generative AI platform for institutions**
*Built by Boise State University, designed for everyone.*

[![Release](https://img.shields.io/badge/Release-v1.4.0-6366f1?style=flat&logo=github&logoColor=white)](RELEASE_NOTES.md)
[![Release](https://img.shields.io/badge/Release-v1.5.0-6366f1?style=flat&logo=github&logoColor=white)](RELEASE_NOTES.md)
[![Nightly](https://github.com/Boise-State-Development/agentcore-public-stack/actions/workflows/nightly.yml/badge.svg)](https://github.com/Boise-State-Development/agentcore-public-stack/actions/workflows/nightly.yml)

![Python](https://img.shields.io/badge/Python-3.13+-3776AB?style=flat&logo=python&logoColor=white)
Expand Down Expand Up @@ -296,7 +296,7 @@ agentcore-public-stack/

See [RELEASE_NOTES.md](RELEASE_NOTES.md) for the full changelog, including new features, bug fixes, platform upgrades, and deployment notes for each release.

**Current release:** v1.4.0
**Current release:** v1.5.0

---

Expand Down
69 changes: 69 additions & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,72 @@
# Release Notes — v1.5.0

**Release Date:** July 13, 2026
**Previous Release:** v1.4.0 (July 10, 2026)

---

> ✅ **No platform (CDK) deploy required.** This release is application code and frontend only — it ships through the `backend.yml` (app-api / inference-api image rebuild) and `frontend-deploy.yml` pipelines. No new AWS resources, no IAM changes, no data migration, no breaking changes.

---

## Highlights

v1.5.0 expands the **model catalog** and the **MCP admin** surface, then rounds out the UI. Admins can now run tool **Discovery against OAuth-gated MCP servers** — such as the GitHub remote MCP server — using their own vaulted 3LO token, rather than being refused outright. Two curated model cards land — **Claude Sonnet 5** and **GPT-5.4** — and the **max-output-tokens** field becomes optional so reasoning / Responses-API models that have no fixed output cap can be added at all. The remainder is polish and hardening: sticky admin/settings sidebars, a redesigned 404 page, chat-scroll and sticky-nav fixes, a vitest flake fix, a Mantle Gemma-4 routing fix, and a Docker curl security patch.

## Discover OAuth-gated MCP servers with the admin's token

Admins configuring a tool couldn't see what an OAuth-gated MCP server actually offered: the "Discover" flow refused `auth_type=oauth2` outright (400) or connected unauthenticated and got a 401 (wrapped to a 400), so servers like the GitHub remote MCP server (`api.githubcopilot.com/mcp/`) were undiscoverable. Discovery now connects with the admin's *own* vaulted token for the provider and lists the tools that token can see.

### Backend

- **Provider-aware discovery (#639)** — `MCPDiscoverRequest` gains `requires_oauth_provider` (alias `requiresOauthProvider`). The handler loads the provider, fetches the admin's vaulted 3LO token via AgentCore Identity (`get_token_for_user`) and injects it as `oauth_token` into `create_external_mcp_client` — mirroring how the agent loop attaches the end-user's provider token at runtime, and reusing the exact path `connector_status` already uses. It fetches the **admin's own** token only; it cannot mint an arbitrary end-user's token. Providers such as GitHub scope-filter the tool list to the token's grants, so the result reflects what the admin's connection can actually reach. `requires_consent` → 409; unknown provider / conflict with `forward_auth` / oauth2-without-provider → 400.

### Frontend

- The discover payload now sends `requiresOauthProvider` (the form control already existed) and the `OAuth2CallbackUrl` header (bare `/oauth-complete`, no query string) so the backend can resolve the admin's token.

### Test Coverage

5 backend tests for the OAuth-provider discovery path; 2 SPA specs for the discover payload.

## Model catalog — Sonnet 5, GPT-5.4, and optional output caps

Two new curated cards and one form change together let admins add the current generation of frontier models with a single click.

### Frontend

- **New curated cards (#641)** — **Claude Sonnet 5** (`global.anthropic.claude-sonnet-5`, 1M context, effort-based reasoning, caching on) and **GPT-5.4** (Mantle, `openai.gpt-5.4`, Responses API surface — its `openai.gpt-5.*` id matches the SDK's `/openai/v1` routing prefixes so one-click create routes correctly). The Bedrock Claude list now orders most-capable-first (Opus 4.7, Sonnet 5, Sonnet 4.6, Haiku 4.5), GPT-5.4 sits ahead of Qwen in the Mantle list, and the "Bedrock Mantle" tab moves next to "Bedrock" in the catalog selector.
- **Optional max output tokens (#643, #644)** — newer reasoning / Responses-API models don't publish a discrete max-output-tokens value (output shares the context budget with reasoning tokens), so the admin form field is now optional. `max_output_tokens` becomes `Optional[int]` across `ManagedModelCreate` / `ManagedModel` and the SPA interfaces (`number | null`); the DynamoDB write omits it when absent, the form drops `Validators.required`, and the catalog card null-guards to show "— out". It was only ever a ceiling for the admin-configured `max_tokens` param and is never sent to the provider, so an unset value is safe at inference time.

## 🐛 Bug fixes

- **Mantle Gemma 4 models returned `access_denied` (#641).** Gemma 4 is served only on Mantle's `/openai/v1` path (per its AWS model card), but the Strands SDK's `_OPENAI_PATH_MODEL_PREFIXES` shipped only `openai.gpt-5.`, so `google.gemma-4-*` fell through to `/v1` and inference 401'd. The SDK's prefix table is now extended with `google.gemma-4-` at build time (`_ensure_gemma4_openai_v1_routing`: lazy, idempotent, guarded) until it lands upstream — scoped to the 4.x family so Gemma 3 stays on `/v1`. Covered by guard tests.
- **Sticky sidebars didn't engage (#634).** The redesigned admin/settings sticky sidebars need a real scroll container to anchor against; the app shell now scrolls on the correct element so `position: sticky` takes effect and the chat scroll space sizes to the pending response (#637).
- **Intermittent SPA unit-test flake (#636).** Vitest runs now guarantee the Angular JIT compiler is present, eliminating the sporadic `PlatformLocation` provider error in the unit suite.

## 🔒 Security

- **Docker curl patch floats with the mirror (#645).** Debian removes the superseded point version of curl from the trixie mirror on each security update, so an exact `+deb13uN` pin broke every build once the next CVE landed. Both Dockerfiles now pin `+deb13u*` — tracking the live security patch while keeping the minor version fixed. The digest-pinned base image is what actually provides reproducibility.

## ✨ UI polish

- **Sticky navigation (#632, #638)** — the admin and user-settings sidebar navs stay in view on desktop as the content column scrolls.
- **Redesigned 404 page (#633)** — the not-found page now matches the auth / first-boot screens (frosted glass, animated blobs, graph-paper grid in Boise blue).

## 🔧 CI/CD

- **Portable version sync (#631)** — `scripts/common/sync-version.sh` now runs across GNU and BSD userlands (macOS `sed`/`grep`), so the release bump works outside the dev container.

## 📚 Docs

- Added the quota cooldown-windows + platform-ceiling spec and committee one-pager under `docs/specs/` (#635), and a design note proposing `mantleEndpointPath` as a live admin setting as the durable alternative to patching the SDK's hardcoded routing table (#641).

## 🚀 Deployment notes

- **No special steps.** No CDK deploy, no IAM changes, no data migration, no breaking changes. The backend changes (Mantle Gemma-4 routing, optional `max_output_tokens`, Docker curl pin) ship on the next `backend.yml` image rebuild; the SPA changes ship via `frontend-deploy.yml`.

---

# Release Notes — v1.4.0

**Release Date:** July 10, 2026
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.4.0
1.5.0
2 changes: 1 addition & 1 deletion backend/Dockerfile.app-api
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ WORKDIR /app

# Install runtime dependencies (curl required for HEALTHCHECK)
RUN apt-get update && apt-get install -y \
curl=8.14.1-2+deb13u3 \
curl=8.14.1-2+deb13u* \
&& rm -rf /var/lib/apt/lists/*

# Copy the virtual environment from builder
Expand Down
2 changes: 1 addition & 1 deletion backend/Dockerfile.inference-api
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ WORKDIR /app

# Install runtime dependencies (curl required for HEALTHCHECK)
RUN apt-get update && apt-get install -y \
curl=8.14.1-2+deb13u3 \
curl=8.14.1-2+deb13u* \
&& rm -rf /var/lib/apt/lists/*

# Copy the virtual environment from builder
Expand Down
2 changes: 1 addition & 1 deletion backend/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "agentcore-stack"
version = "1.4.0"
version = "1.5.0"
requires-python = ">=3.10"
description = "Multi-agent conversational AI system with AWS Bedrock AgentCore"
readme = "README.md"
Expand Down
64 changes: 59 additions & 5 deletions backend/src/apis/app_api/admin/tools/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,16 @@
from fastapi import APIRouter, Depends, HTTPException, Query

from apis.shared.auth import User, require_admin
from apis.shared.oauth.agentcore_identity import (
CallbackUrlUnavailableError,
WorkloadTokenUnavailableError,
custom_parameters_for,
get_agentcore_identity_client,
)
from apis.shared.oauth.provider_repository import (
OAuthProviderRepository,
get_provider_repository,
)
from apis.app_api.tools.service import get_tool_catalog_service
from apis.app_api.tools.discovery import discover_tools_for_saved_tool
from apis.shared.tools.gateway_target_service import (
Expand Down Expand Up @@ -358,6 +368,7 @@ def _discovery_failure_detail(status: int) -> str:
async def admin_discover_mcp_tools(
request: MCPDiscoverRequest,
admin: User = Depends(require_admin),
provider_repo: OAuthProviderRepository = Depends(get_provider_repository),
):
"""Connect to an MCP server with the given config and return its tool list.

Expand Down Expand Up @@ -385,11 +396,55 @@ async def admin_discover_mcp_tools(
create_external_mcp_client,
)

if request.auth_type in (MCPAuthType.OAUTH2.value, MCPAuthType.OAUTH2):
# An OAuth (3LO) gated server is discovered using the admin's *own* vaulted
# token for the named provider — mirroring how the agent loop attaches the
# end-user's provider token at runtime. This validates the admin's own
# connection and returns the tools their token can see (providers such as
# GitHub scope-filter the tool list to the token's grants). It fetches the
# admin's token only; it can't mint an arbitrary end-user's token, so the
# discovered list reflects the admin's connection, not every user's.
oauth_token: Optional[str] = None
if request.requires_oauth_provider:
if request.forward_auth_token:
raise HTTPException(
status_code=400,
detail="Choose either an OAuth provider or forwarded-auth "
"discovery, not both.",
)
provider = await provider_repo.get_provider(request.requires_oauth_provider)
if provider is None:
raise HTTPException(
status_code=400,
detail=f"Unknown OAuth provider "
f"'{request.requires_oauth_provider}'.",
)
identity = get_agentcore_identity_client()
try:
result = await identity.get_token_for_user(
provider_name=provider.provider_id,
scopes=provider.scopes,
user_id=admin.user_id,
# Match the customParameters used at consent time — AgentCore
# factors them into the vault key, so omitting them would
# falsely report consent-required for a vaulted token.
custom_parameters=custom_parameters_for(provider.custom_parameters),
)
except (WorkloadTokenUnavailableError, CallbackUrlUnavailableError) as err:
logger.warning("OAuth discovery token unavailable: %s", err)
raise HTTPException(status_code=503, detail=str(err))
if result.requires_consent or not result.access_token:
raise HTTPException(
status_code=409,
detail=f"You haven't connected '{provider.display_name}' yet. "
"Connect it in your connector settings, then retry discovery.",
)
oauth_token = result.access_token

elif request.auth_type in (MCPAuthType.OAUTH2.value, MCPAuthType.OAUTH2):
raise HTTPException(
status_code=400,
detail="OAuth-gated MCP servers can't be discovered server-side; "
"list the tool names manually.",
detail="Select the OAuth provider for this server to discover its "
"tools, or list the tool names manually.",
)

# Forward-auth servers (same-team MCP that validates a forwarded JWT, behind
Expand All @@ -400,8 +455,7 @@ async def admin_discover_mcp_tools(
# trust-boundary note above); forwarding their own session token to that URL
# is a strictly lower bar than the end-user token forwarding they're
# configuring for the tool.
oauth_token: Optional[str] = None
if request.forward_auth_token:
elif request.forward_auth_token:
if not admin.raw_token:
raise HTTPException(
status_code=400,
Expand Down
3 changes: 2 additions & 1 deletion backend/src/apis/shared/models/managed_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,6 @@ async def _create_managed_model_cloud(model_data: ManagedModelCreate, table_name
'inputModalities': model_data.input_modalities,
'outputModalities': model_data.output_modalities,
'maxInputTokens': model_data.max_input_tokens,
'maxOutputTokens': model_data.max_output_tokens,
'allowedAppRoles': model_data.allowed_app_roles,
'availableToRoles': model_data.available_to_roles,
'enabled': model_data.enabled,
Expand All @@ -278,6 +277,8 @@ async def _create_managed_model_cloud(model_data: ManagedModelCreate, table_name
}

# Add optional fields
if model_data.max_output_tokens is not None:
item['maxOutputTokens'] = model_data.max_output_tokens
if model_data.cache_write_price_per_million_tokens is not None:
item['cacheWritePricePerMillionTokens'] = model_data.cache_write_price_per_million_tokens
if model_data.cache_read_price_per_million_tokens is not None:
Expand Down
26 changes: 26 additions & 0 deletions backend/src/apis/shared/models/mantle.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,29 @@ def param_map_for(api_mode: MantleApiMode) -> Dict[str, str]:
)


def _ensure_gemma4_openai_v1_routing() -> None:
"""Teach the Strands SDK to route ``google.gemma-4-*`` to ``/openai/v1``.

Per its AWS model card, Gemma 4 is served *only* on the Mantle
``/openai/v1`` base path — "different from the ``v1`` path used by other
models." But the SDK's ``_OPENAI_PATH_MODEL_PREFIXES`` only lists
``openai.gpt-5.``, so ``google.gemma-4-*`` falls through to ``/v1`` and the
endpoint 401s ("... is not enabled for this account"). Append the family
prefix at build time until it lands upstream (strands-agents/sdk-python).

``google.gemma-4-`` specifically — NOT ``google.gemma-``: Gemma 3 is served
on ``/v1`` and must not be rerouted. Idempotent; safe to call on every build.
"""
from strands.models import _openai_bedrock as _sdk

prefix = "google.gemma-4-"
if prefix not in _sdk._OPENAI_PATH_MODEL_PREFIXES:
_sdk._OPENAI_PATH_MODEL_PREFIXES = (
*_sdk._OPENAI_PATH_MODEL_PREFIXES,
prefix,
)


def build_mantle_model(
model_id: str,
api_mode: MantleApiMode,
Expand All @@ -88,6 +111,9 @@ def build_mantle_model(
from strands.models import OpenAIResponsesModel
from strands.models.openai import OpenAIModel

# Bridge until google.gemma-4- lands in the SDK's base-path prefix table.
_ensure_gemma4_openai_v1_routing()

bedrock_mantle_config: Dict[str, Any] = {}
if region:
bedrock_mantle_config["region"] = region
Expand Down
Loading