Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
2768 commits
Select commit Hold shift + click to select a range
d407de7
feat: clarifying-questions picker in the chat transcript (PR-2)
philmerrell Sep 14, 2026
1419a0a
Merge pull request #1101 from Boise-State-Development/fix/document-do…
philmerrell Sep 14, 2026
2e1f566
Merge pull request #1102 from Boise-State-Development/feature/ask-use…
philmerrell Sep 14, 2026
1790f6f
feat: rehydrate the clarifying-questions picker after a refresh (PR-3)
philmerrell Sep 14, 2026
2507a5f
Merge pull request #1103 from Boise-State-Development/feature/ask-use…
philmerrell Sep 14, 2026
de53f21
docs(kb): close out the KB specs and record NEW_DEFAULT armed in dev …
DerrickF Sep 14, 2026
bd92871
style: full-width, softer clarifying-questions picker
philmerrell Sep 14, 2026
a2d09ea
style: single stroke on a selected option
philmerrell Sep 14, 2026
86edd8a
Merge pull request #1098 from Boise-State-Development/fix/log-injecti…
philmerrell Sep 14, 2026
2a03d33
Merge pull request #1105 from Boise-State-Development/feature/ask-use…
philmerrell Sep 14, 2026
0f36520
Merge pull request #1094 from Boise-State-Development/feature/admin-c…
philmerrell Sep 14, 2026
c48aebf
feat: make the clarifying-questions tool actually fire (PR-4)
philmerrell Sep 14, 2026
a0aa0a9
docs(spec): authenticated web assessment via browser takeover
philmerrell Sep 14, 2026
78df431
Merge pull request #1106 from Boise-State-Development/feature/ask-use…
philmerrell Sep 14, 2026
8fb4f8f
feat(kb): show storage usage bar with byte cap on the KB card
DerrickF Sep 14, 2026
9987469
Merge pull request #1108 from Boise-State-Development/feat/kb-usage-bar
DerrickF Sep 14, 2026
f5b4e61
fix(kb): born-managed must not provision over an established legacy a…
DerrickF Sep 14, 2026
6832929
fix(kb): hide the storage usage bar for legacy (Classic) KBs (#1110)
DerrickF Sep 14, 2026
356e11c
perf(ci): parallelize backend pytest with xdist (#1111)
DerrickF Sep 14, 2026
d26f7ea
perf(ci): infra jest transpile-only + shared tsc type-check (#1113)
DerrickF Sep 15, 2026
51fdbc7
Merge pull request #1107 from Boise-State-Development/feature/authent…
philmerrell Sep 15, 2026
4e2f247
fix(agents): an @-mention binds the conversation instead of borrowing…
philmerrell Sep 15, 2026
72a0d80
feat(chat): use up arrow instead of paper airplane for send button
philmerrell Sep 15, 2026
2052540
Merge pull request #1114 from Boise-State-Development/claude/chat-com…
philmerrell Sep 15, 2026
9eeee27
Merge pull request #1115 from Boise-State-Development/feature/agent-m…
philmerrell Sep 15, 2026
ab29498
fix(branding): keep every greeting on one line in the chat empty state
philmerrell Sep 15, 2026
deeddbf
Merge pull request #1116 from Boise-State-Development/feature/greetin…
philmerrell Sep 15, 2026
efb1f6e
Merge remote-tracking branch 'origin/main' into backmerge/main-into-d…
philmerrell Sep 15, 2026
9a203be
Merge pull request #1118 from Boise-State-Development/backmerge/main-…
philmerrell Sep 15, 2026
26089ea
fix(skills): align description cap with the 1024-char Agent Skills spec
philmerrell Sep 15, 2026
1ee75bc
fix(prompts): point tool-enablement guidance at Customize → Tools
philmerrell Sep 15, 2026
0d89678
Merge pull request #1119 from Boise-State-Development/feature/skill-d…
philmerrell Sep 15, 2026
14fdb8f
Merge pull request #1120 from Boise-State-Development/claude/outdated…
philmerrell Sep 15, 2026
d2cc6dd
refactor(session): extract DockedPaneService from ArtifactStateService
philmerrell Sep 15, 2026
76e022a
feat(files): preview .docx in a docked pane
philmerrell Sep 15, 2026
6498ad7
fix(word-tool): document page breaks and header bolding
philmerrell Sep 15, 2026
ea385d1
fix(excel-tool): document freeze panes, number formats and formula ca…
philmerrell Sep 15, 2026
e818f44
fix(pptx-tool): document speaker notes on the create tool
philmerrell Sep 15, 2026
285d621
chore(deps): add pptx-preview 1.0.7 with echarts stubbed out
philmerrell Sep 15, 2026
a2d4110
feat(files): preview .pptx in the docked pane
philmerrell Sep 15, 2026
9ab491e
feat(files): preview an uploaded .docx or .pptx, not just a generated…
philmerrell Sep 15, 2026
2036cc1
fix(prompts): point "show me this file" at the viewer, and stop escap…
philmerrell Sep 15, 2026
48b97bc
fix(prompts): trim the preview clause to the part that prevents waste
philmerrell Sep 15, 2026
7a21fe8
fix(files): make the attachment card say it previews
philmerrell Sep 15, 2026
1dd237a
fix(files): colour the file-type icon, and match PREVIEW to it
philmerrell Sep 15, 2026
139a040
fix(a11y): raise file-type chip text to -700 so it meets AA in light …
philmerrell Sep 15, 2026
afbffcd
feat(files): open the preview pane on a file the turn just created
philmerrell Sep 15, 2026
fbbb847
perf(frontend): lazy-load mermaid out of the eager scripts bundle
philmerrell Sep 16, 2026
222e1d2
Merge pull request #1121 from Boise-State-Development/claude/docx-art…
philmerrell Sep 16, 2026
5da3968
fix(a11y): move success-state text to the AA-passing ramp step
philmerrell Sep 16, 2026
745c381
Merge pull request #1124 from Boise-State-Development/claude/sweet-fe…
philmerrell Sep 16, 2026
e8fc8c2
Merge pull request #1123 from Boise-State-Development/claude/priceles…
philmerrell Sep 16, 2026
bc61808
feat(compaction): model-relative thresholds, floor-seeking cut, hyste…
philmerrell Sep 16, 2026
9f246cb
fix(agent): drop the hour from the system-prompt date line to keep th…
philmerrell Sep 16, 2026
d818603
Merge pull request #1122 from Boise-State-Development/feature/pptx-pr…
philmerrell Sep 16, 2026
30d91ca
fix(admin-costs): list a user's deleted conversations in the cost dri…
philmerrell Sep 16, 2026
9dda307
fix(compaction): "forced" means a cut that ran while disarmed
philmerrell Sep 16, 2026
442e574
test(spa): reset DocxViewerComponent's memoized import between docx s…
philmerrell Sep 16, 2026
12464f8
feat(cost-diagnostics): per-call context ledger — prefix split, windo…
philmerrell Sep 16, 2026
dc6ea4b
feat(compaction): hand forced / floor-unreachable decisions to the co…
philmerrell Sep 16, 2026
667d43c
feat(compaction): bound the summary at 8k tokens and emit per-cut met…
philmerrell Sep 16, 2026
94ac152
feat(compaction): park cuts post-turn, apply in place when the re-wri…
philmerrell Sep 16, 2026
eab5119
feat(compaction): record the in-place apply on the compaction ledger
philmerrell Sep 16, 2026
e5d4517
feat(compaction): mark the head-of-turn apply as promoted on the ledger
philmerrell Sep 16, 2026
6e9a88a
feat(compaction): offload oversized tool results at intake (PR-4)
philmerrell Sep 16, 2026
49e610f
docs(compaction): record the over-100k cohort split PR-4 targets
philmerrell Sep 16, 2026
ac2ac1a
Merge pull request #1126: fix(agent): drop the hour from the system-p…
philmerrell Sep 16, 2026
5c4093f
feat(cache): selective 1h TTL on the static prefix, behind a flag, pr…
philmerrell Sep 16, 2026
73017ec
feat(files): preview a .csv as a data grid in the docked pane
philmerrell Sep 15, 2026
e89923b
feat(files): preview an .xlsx by reading it server-side with openpyxl
philmerrell Sep 16, 2026
740f5c8
fix(files): show ten times the spreadsheet rows, and unfreeze the scr…
philmerrell Sep 16, 2026
c03a64a
fix(probe): reuse the first call's exact request on the second call
philmerrell Sep 16, 2026
a18b2d6
feat(app-api): gzip JSON responses, passing SSE through un-buffered
philmerrell Sep 16, 2026
a4e5e48
fix(inference-api): stop gzip middleware delaying SSE response headers
philmerrell Sep 16, 2026
cfe3588
docs(cache): record the 420s static-prefix TTL probe baseline
philmerrell Sep 16, 2026
16d299a
docs(cache): record the 60s static-prefix TTL probe result
philmerrell Sep 16, 2026
27c593c
Merge pull request #1134 from Boise-State-Development/claude/spreadsh…
philmerrell Sep 16, 2026
5602a3f
Merge pull request #1133 from Boise-State-Development/claude/bold-mor…
philmerrell Sep 16, 2026
311cde3
Merge pull request #1127 from Boise-State-Development/feature/admin-c…
philmerrell Sep 16, 2026
6043a15
Merge pull request #1125 from Boise-State-Development/feature/compact…
philmerrell Sep 16, 2026
dab0eee
Merge pull request #1129 from Boise-State-Development/feature/compact…
philmerrell Sep 16, 2026
34e4c80
Merge pull request #1131 from Boise-State-Development/feature/compact…
philmerrell Sep 16, 2026
65a7122
Merge pull request #1132 from Boise-State-Development/feature/compact…
philmerrell Sep 16, 2026
bc45ba0
Merge develop into feature/cost-diagnostics-prefix-window-compaction
philmerrell Sep 16, 2026
c28ccdb
Merge pull request #1130 from Boise-State-Development/feature/cost-di…
philmerrell Sep 16, 2026
500150f
fix(spa): stop KaTeX swallowing the prose between two currency amounts
philmerrell Sep 16, 2026
d461c6c
fix(agent): drop the HTML-entity dollar rule, which never worked
philmerrell Sep 16, 2026
a56c77e
docs(kaizen): queue the compaction-stack follow-ups for Friday review
philmerrell Sep 16, 2026
f088877
feat(documents): document_read tool + document-context analytics (off…
philmerrell Sep 16, 2026
da122dd
Merge pull request #1135 from Boise-State-Development/claude/katex-ma…
philmerrell Sep 16, 2026
ef9dad9
Merge pull request #1136 from Boise-State-Development/docs/kaizen-com…
philmerrell Sep 16, 2026
aa8a999
feat(documents): DocumentDigest built at upload and persisted on File…
philmerrell Sep 16, 2026
54e18b9
feat(documents): restore rehydrates stripped documents as digests (of…
philmerrell Sep 16, 2026
dfdd67b
feat(documents): offload unpinned documents to their digests when the…
philmerrell Sep 16, 2026
f9983d1
feat(compaction): record the truncation anchor's cache gap on the led…
philmerrell Sep 16, 2026
d8afd0f
feat(feedback): content-free thumbs on assistant messages joined to c…
philmerrell Sep 16, 2026
8d5739c
test(admin): profile dataCoverage now carries feedback
philmerrell Sep 16, 2026
5c21406
feat(attachments): hold a turn's inline attachments to the Memory eve…
philmerrell Sep 16, 2026
be1c186
feat(spa): share artifacts from the library and the owner view page
philmerrell Sep 16, 2026
5992539
feat(feedback): align with response-feedback spec — flag name, six re…
philmerrell Sep 16, 2026
c7dda9b
feat(feedback): retry-with-correction — the consequence behind a thum…
philmerrell Sep 17, 2026
38faabc
fix(admin-costs): expect formatGap's minute-only form in the offload …
philmerrell Sep 17, 2026
cdc70c7
Merge pull request #1137 from Boise-State-Development/feature/documen…
philmerrell Sep 17, 2026
ef34aca
Merge pull request #1138 from Boise-State-Development/feature/documen…
philmerrell Sep 17, 2026
73ca66e
Merge pull request #1139 from Boise-State-Development/feature/documen…
philmerrell Sep 17, 2026
2b9d381
Merge pull request #1140 from Boise-State-Development/feature/documen…
philmerrell Sep 17, 2026
8409a2e
Merge pull request #1141 from Boise-State-Development/feature/documen…
philmerrell Sep 17, 2026
b577d29
Merge pull request #1143 from Boise-State-Development/feature/documen…
philmerrell Sep 17, 2026
d3c21f5
Merge develop into feature/message-feedback-pr7
philmerrell Sep 17, 2026
9f51443
fix(admin-costs): keep DataCoverage.documents on DataCoverage
philmerrell Sep 17, 2026
69eeabb
Merge pull request #1142 from Boise-State-Development/feature/message…
philmerrell Sep 17, 2026
8c7056f
Merge remote-tracking branch 'origin/develop' into sync1145
philmerrell Sep 17, 2026
8911d85
Merge pull request #1145 from Boise-State-Development/feature/feedbac…
philmerrell Sep 17, 2026
0e39fbe
feat(feedback): implicit signals — copy and continue (response-feedba…
philmerrell Sep 17, 2026
82e0587
fix(documents): count PDF pages, not bytes, in documentTokens
philmerrell Sep 17, 2026
10e511e
fix(documents): couple DOCUMENT_READ_ENABLED to the paths that promis…
philmerrell Sep 17, 2026
98e1291
feat(feedback): eval sampling — down-thumbs feed AgentCore Evaluation…
philmerrell Sep 17, 2026
c72e46e
Agent Templates: create-form prefill + admin-managed backend (#1149)
DerrickF Sep 17, 2026
85226ab
Merge pull request #1144 from Boise-State-Development/feature/artifac…
philmerrell Sep 18, 2026
c92f0c8
docs(kaizen): queue the document-offload prod readout, and mark the e…
philmerrell Sep 18, 2026
7cea180
docs(kaizen): correct the rollout-percent entry — the bucket gates PR…
philmerrell Sep 18, 2026
d941a4f
chore(kaizen): weekly research scan 2026-09-18
philmerrell Sep 18, 2026
80aff47
chore(kaizen): weekly review prep 2026-09-18
philmerrell Sep 18, 2026
71b0fdf
fix(documents): bound document_read pattern mode against ReDoS
philmerrell Sep 18, 2026
1b855ad
docs(kaizen): mark the document_read ReDoS fixed, and record what is …
philmerrell Sep 18, 2026
e196a00
fix(documents): close the last three findings from the offload valida…
philmerrell Sep 18, 2026
bcd6022
docs(kaizen): mark the last three offload findings fixed
philmerrell Sep 18, 2026
c7d4456
Merge pull request #1146 from Boise-State-Development/feature/feedbac…
philmerrell Sep 18, 2026
d4b718e
Merge pull request #1147 from Boise-State-Development/claude/document…
philmerrell Sep 18, 2026
02f3b79
Merge remote-tracking branch 'origin/develop' into kaizen/research-20…
philmerrell Sep 18, 2026
564f02c
feat(feedback): fleet-level attribution — down-thumb rate by config a…
philmerrell Sep 18, 2026
82568a4
Merge pull request #1150 from Boise-State-Development/kaizen/research…
philmerrell Sep 18, 2026
fc5ee7f
Merge remote-tracking branch 'origin/develop' into kaizen/review-2026…
philmerrell Sep 18, 2026
cf162a1
Merge pull request #1151 from Boise-State-Development/kaizen/review-2…
philmerrell Sep 18, 2026
9ae962e
Merge remote-tracking branch 'origin/develop' into feature/feedback-e…
philmerrell Sep 18, 2026
ea0c8a8
Merge pull request #1148 from Boise-State-Development/feature/feedbac…
philmerrell Sep 18, 2026
a4c7fee
Merge remote-tracking branch 'origin/develop' into feature/feedback-f…
philmerrell Sep 18, 2026
ca3e8d2
Merge pull request #1152 from Boise-State-Development/feature/feedbac…
philmerrell Sep 18, 2026
cbd12d0
feat(admin-costs): down-thumb reason split on the per-session profile
philmerrell Sep 18, 2026
d9ad3ee
docs(kaizen): diagnose the live-AWS test calls — 25 cases, hidden by …
philmerrell Sep 18, 2026
76bedf0
test: block off-box sockets, and fix the tests that were calling real…
philmerrell Sep 18, 2026
3d0c5cd
docs(kaizen): guard landed; record the burn-down list and the two traps
philmerrell Sep 18, 2026
195f70e
docs(specs): assess the AuraX load-test A/B and plan the fixes
philmerrell Sep 18, 2026
32a990a
fix(infra): fail synth when the uploads bucket would have no CORS rule
philmerrell Sep 18, 2026
8ec2f3a
perf(inference-api): precompile bytecode and warm the first turn at s…
philmerrell Sep 18, 2026
949b0bc
perf(agents): bound CountTokens on the reply path, stop swapping the …
philmerrell Sep 18, 2026
b290b2d
perf(agents): memoise the attribution split per session; cache four m…
philmerrell Sep 18, 2026
6dad15e
test(admin-costs): pin the cache-bypass diagnosis to fixed sets, not …
philmerrell Sep 18, 2026
f17ac9f
Merge pull request #1154 from Boise-State-Development/claude/load-tes…
philmerrell Sep 18, 2026
b342b8c
perf(agents): cache spreadsheet-analysis sessions by carrying assista…
philmerrell Sep 18, 2026
9c5124b
Merge pull request #1155 from Boise-State-Development/feature/spreads…
philmerrell Sep 18, 2026
f15b237
test: burn down the off-box quarantine — no test reaches AWS, and the…
philmerrell Sep 18, 2026
99fa698
docs(kaizen): close the live-AWS entry — quarantine burned down, suit…
philmerrell Sep 18, 2026
7205027
test: warm tiktoken before the guard arms, and write the rule into CL…
philmerrell Sep 18, 2026
22e0dae
docs(spec): plan the agent state feedback refinement
philmerrell Sep 18, 2026
22b60f4
feat(chat): report how long the model spent thinking
philmerrell Sep 18, 2026
bf8002e
Merge pull request #1153 from Boise-State-Development/feature/fleet-f…
philmerrell Sep 18, 2026
a3e8f02
feat(attachments): auto-enable Spreadsheet Analysis for a session tha…
philmerrell Sep 18, 2026
18df1d8
fix(agents): count the system prompt against a probe message, not an …
philmerrell Sep 18, 2026
1ee9f7f
perf(memory): retrieve long-term memory through a bounded client, and…
philmerrell Sep 18, 2026
da9abca
Merge pull request #1159 from Boise-State-Development/feature/reasoni…
philmerrell Sep 19, 2026
a6a616f
feat(agents): drain agent_status while the agent stream is silent
philmerrell Sep 18, 2026
f945088
docs(spec): mark PR-1 shipped and record the loader-mount finding
philmerrell Sep 19, 2026
7d58b20
Merge pull request #1156 from Boise-State-Development/feature/attribu…
philmerrell Sep 19, 2026
bef554b
Merge pull request #1157 from Boise-State-Development/feature/memory-…
philmerrell Sep 19, 2026
7dd2375
Merge pull request #1158 from Boise-State-Development/feature/attachm…
philmerrell Sep 19, 2026
0dc343d
Merge pull request #1160 from Boise-State-Development/feature/agent-s…
philmerrell Sep 19, 2026
16ca9c5
docs: respond to the AuraX load-test report, finding by finding
philmerrell Sep 19, 2026
cb0ebd7
docs: scope the deployment claim to what is verified in dev
philmerrell Sep 19, 2026
03858a4
fix(files): start the pattern-scan budget after the document is opened
philmerrell Sep 19, 2026
9310640
fix(chat): remove the parallel-batch count as dead code
philmerrell Sep 19, 2026
f23953e
feat(browser): hand the browser to the user so they can sign in
philmerrell Sep 19, 2026
c09aed4
Merge pull request #1161 from Boise-State-Development/docs/load-test-…
philmerrell Sep 19, 2026
d192aa1
feat(inference-api): measure where the pre-stream time goes
philmerrell Sep 19, 2026
8dda0d1
Merge pull request #1162 from Boise-State-Development/feature/pattern…
philmerrell Sep 19, 2026
dccf1c8
Merge pull request #1163 from Boise-State-Development/feature/agent-s…
philmerrell Sep 19, 2026
ac692db
docs(spec): rescope PR-3 from the dev measurement
philmerrell Sep 19, 2026
6f97116
feat(inference-api): narrate the cold agent build
philmerrell Sep 19, 2026
67ca5e2
feat(browser): mint a live view for a browser takeover
philmerrell Sep 19, 2026
dd775fa
Merge pull request #1165 from Boise-State-Development/feature/agent-s…
philmerrell Sep 19, 2026
75a46cb
fix(chat): move the preparing-phase delay to the client
philmerrell Sep 19, 2026
39fe649
Merge pull request #1167 from Boise-State-Development/feature/prepari…
philmerrell Sep 19, 2026
8969f3b
fix(spa): wait for the tool/skill lists before assembling a chat turn
philmerrell Sep 18, 2026
19552a1
Merge pull request #1168 from Boise-State-Development/feature/spa-fir…
philmerrell Sep 19, 2026
5a311be
perf(backend): precompile bytecode in the app-api and Lambda images
philmerrell Sep 19, 2026
624d8ef
perf(app-api): stop shipping /app twice by moving ownership into the …
philmerrell Sep 19, 2026
76948e4
fix(chat): stop the preparing label stepping backwards on exit
philmerrell Sep 19, 2026
1a1664b
docs(spec): block institutional sites per session, not a second browser
philmerrell Sep 19, 2026
2e47b23
Merge pull request #1164 from Boise-State-Development/feature/browser…
philmerrell Sep 19, 2026
2799c8f
fix(infra): gate the uploads CORS guard on the filtered origin list
philmerrell Sep 19, 2026
f9eb626
feat(browser): block institutional sites with a MANAGED Chromium policy
philmerrell Sep 19, 2026
394e2b9
Merge remote-tracking branch 'origin/develop' into feature/browser-li…
philmerrell Sep 19, 2026
ea1f3f5
Merge branch 'feature/browser-live-view-route' into feature/browser-e…
philmerrell Sep 19, 2026
6f6363e
Merge pull request #1172 from Boise-State-Development/feature/cors-gu…
philmerrell Sep 19, 2026
3e200f2
Merge pull request #1169 from Boise-State-Development/feature/precomp…
philmerrell Sep 19, 2026
1a537ce
feat(chat): show how long a finished turn took
philmerrell Sep 19, 2026
c554b25
Merge pull request #1166 from Boise-State-Development/feature/browser…
philmerrell Sep 19, 2026
726b9ab
Merge remote-tracking branch 'origin/develop' into feature/browser-en…
philmerrell Sep 19, 2026
7c5f7c1
Merge pull request #1170 from Boise-State-Development/fix/preparing-p…
philmerrell Sep 19, 2026
d7284a4
Merge pull request #1173 from Boise-State-Development/feature/turn-recap
philmerrell Sep 19, 2026
39c268b
Merge pull request #1174 from Boise-State-Development/feature/browser…
philmerrell Sep 19, 2026
f68ac9e
fix(chat): measure the turn recap from the turn, not the stream
philmerrell Sep 19, 2026
0ad1e75
Merge pull request #1176 from Boise-State-Development/fix/turn-durati…
philmerrell Sep 19, 2026
573e766
refactor(backend): delete the dead local-output mechanism
philmerrell Sep 19, 2026
ecc7e7a
perf(images): ship app-api and inference-api code root-owned
philmerrell Sep 19, 2026
2ac548f
chore(infra): retire the dead directory env vars and refresh the cap …
philmerrell Sep 19, 2026
5aa0ab2
feat(browser): add the sign-in viewer, with no third-party code
philmerrell Sep 19, 2026
55d172d
Merge pull request #1175 from Boise-State-Development/feature/read-on…
philmerrell Sep 19, 2026
c1b0a4e
Merge pull request #1177 from Boise-State-Development/feature/browser…
philmerrell Sep 19, 2026
e9bc17d
fix(browser): stop sending MANAGED at session level, which broke ever…
philmerrell Sep 19, 2026
9cefdd8
Merge pull request #1179 from Boise-State-Development/fix/browser-ses…
philmerrell Sep 19, 2026
9142608
fix(chat): end the preparing phase explicitly
philmerrell Sep 19, 2026
a2e59fd
fix(browser): stop double-prefixing the browser policy object key
philmerrell Sep 19, 2026
3d3d559
Merge pull request #1181 from Boise-State-Development/fix/browser-pol…
philmerrell Sep 19, 2026
bbe2027
Merge pull request #1180 from Boise-State-Development/fix/preparing-p…
philmerrell Sep 19, 2026
9ed753d
docs(spec): correct the turn-recap shortfall, and record the validation
philmerrell Sep 19, 2026
df4ba34
Merge pull request #1178 from Boise-State-Development/docs/turn-recap…
philmerrell Sep 19, 2026
c3d6eb3
docs(spec): close the agent state feedback epic
philmerrell Sep 19, 2026
4ed9fc3
fix(browser): grant the CALLER read on the policy object, not just th…
philmerrell Sep 19, 2026
616e9fc
feat(session): reveal copy and thumbs on response hover
philmerrell Sep 19, 2026
c6e327e
Merge pull request #1185 from Boise-State-Development/feature/respons…
philmerrell Sep 19, 2026
f89bd70
fix(browser): connect the live view once, not once per postMessage (#…
philmerrell Sep 19, 2026
9e6cf82
feat(ui): give the agent-state orb a halo, and settle it on finished …
philmerrell Sep 19, 2026
d2e3eb0
Merge pull request #1188 from Boise-State-Development/claude/tool-sta…
philmerrell Sep 19, 2026
d9fab05
fix(ci): trigger the Platform Stack deploy on the assets it deploys (…
philmerrell Sep 19, 2026
2fda1dd
fix(browser): stop sending every SigV4 parameter twice to the live vi…
philmerrell Sep 19, 2026
d6910cb
perf(inference-api): open the preamble stage, and make a fix to it pr…
philmerrell Sep 19, 2026
734a8a7
fix(browser): sign the live-view stream socket, not just the auth soc…
philmerrell Sep 19, 2026
7bd2745
perf(inference-api): read the session row once, not eight times (#1191)
philmerrell Sep 19, 2026
d4712ef
fix(sandbox): allow data:/blob: in connect-src so DCV can load its de…
philmerrell Sep 19, 2026
aff4c26
perf(quota): take the session cost from the row the preamble already …
philmerrell Sep 19, 2026
09fa893
fix(browser): grant ConnectBrowserLiveViewStream on *, as AWS require…
philmerrell Sep 19, 2026
1fe4d79
fix(ui): show the turn recap only on the latest turn, in the loader's…
philmerrell Sep 19, 2026
0281c04
Merge pull request #1195 from Boise-State-Development/fix/turn-recap-…
philmerrell Sep 19, 2026
d97c229
fix(frontend): send Cache-Control on deploy so a new build is actuall…
philmerrell Sep 19, 2026
7232975
Merge pull request #1197 from Boise-State-Development/fix/spa-index-c…
philmerrell Sep 19, 2026
8d784c4
fix(browser): size the display on firstFrame, not when connect resolv…
philmerrell Sep 19, 2026
ed3f85e
perf(aws): cache the boto3 clients the session path rebuilds per call…
philmerrell Sep 19, 2026
966b381
fix(browser): mint one live-view URL per open, not two (#1199)
philmerrell Sep 19, 2026
6cf58d2
fix(browser): don't paint an error over a live stream (#1200)
philmerrell Sep 19, 2026
7b3c877
perf(observability): decompose the agent build, and correct what PR-3…
philmerrell Sep 19, 2026
6088af1
fix(browser): broaden the Canvas blocklist entry to instructure.com (…
philmerrell Sep 20, 2026
81b920f
feat(browser): full-screen the sign-in viewer, and say it can be driv…
philmerrell Sep 20, 2026
0c8f3c1
docs(spec): record what the agent-build decomposition found
philmerrell Sep 20, 2026
facd329
Merge pull request #1182 from Boise-State-Development/docs/agent-stat…
philmerrell Sep 20, 2026
c172c6e
Merge pull request #1204 from Boise-State-Development/docs/turn-laten…
philmerrell Sep 20, 2026
8f189aa
fix(infrastructure): make the browser URL blocklist configurable per …
philmerrell Sep 20, 2026
93bc597
fix(seed): add the spreadsheet analysis tools to the bootstrap catalog
philmerrell Sep 20, 2026
56afff4
Merge pull request #1205 from Boise-State-Development/feature/fork-ne…
philmerrell Sep 20, 2026
2591d52
Release/1.23.0
philmerrell Sep 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
29 changes: 29 additions & 0 deletions .github/workflows/platform.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,13 @@ on:
- 'infrastructure/cdk.context.json'
- 'infrastructure/bin/infrastructure.ts'
- 'infrastructure/bootstrap-assets/**'
# Staged into the mcp-sandbox bucket at synth (mcp-sandbox-bucket-construct).
# Without this a viewer change deploys NOWHERE: frontend-deploy.yml does not
# ship it, so the push goes green and the old asset stays live.
- 'infrastructure/assets/**'
- 'scripts/platform/**'
# fetch-dcv-sdk.sh runs in THIS workflow, before synth.
- 'scripts/build/**'
- '.github/workflows/platform.yml'

permissions:
Expand Down Expand Up @@ -128,6 +134,20 @@ jobs:
# backfill.
CDK_ARTIFACT_SHARE_INBOX_ENABLED: ${{ vars.CDK_ARTIFACT_SHARE_INBOX_ENABLED }}
CDK_FRONTEND_CERTIFICATE_ARN: ${{ vars.CDK_FRONTEND_CERTIFICATE_ARN }}
# Hostnames Chromium refuses to navigate to during a browser session —
# the control that stops a human in a browser takeover reaching a system
# the agent must not act inside. Comma-separated, e.g.
# "instructure.com,vendor.example.com".
#
# ⚠️ There is NO built-in default: unset resolves to an empty string,
# which config.ts treats as "not configured" and leaves the list EMPTY,
# so browser sessions can reach any host and RBAC on browse_web /
# request_user_login becomes the only control. The stack ships
# fork-neutral on purpose (the hosts that matter are a per-institution
# policy call), so every environment that needs a blocklist must set
# this variable. The synth log prints the list, or warns when it is
# empty — check it after a deploy.
CDK_BROWSER_URL_BLOCKLIST: ${{ vars.CDK_BROWSER_URL_BLOCKLIST }}
# MCP Apps sandbox-proxy origin (mcp-sandbox.{domain}). Without the
# cert ARN the construct silently falls back to the CloudFront default
# domain and creates no Route53 ALIAS — the SPA then frames a
Expand Down Expand Up @@ -295,5 +315,14 @@ jobs:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

# The browser sign-in live view is served from the mcp-sandbox origin and
# needs the Amazon DCV Web Client SDK deployed alongside it. The SDK is a
# EULA-licensed AWS download and this repo is PUBLIC, so it is fetched and
# verified here rather than committed. Must run BEFORE the deploy: CDK
# stages assets/mcp-sandbox at synth time, so an absent SDK silently ships
# a viewer that cannot load. See docs/specs/authenticated-web-assessment.md.
- name: Fetch Amazon DCV Web Client SDK
run: bash scripts/build/fetch-dcv-sdk.sh

- name: Deploy PlatformStack
run: bash scripts/platform/deploy.sh
88 changes: 88 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,94 @@ 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.23.0] - 2026-09-20

The agent stops working in silence, and stops paying to re-read what it already knows. **Live turn narration** replaces the cycling placeholder with what the agent is actually doing — thinking, which tool is running, how long it took, and a one-line model-written summary of each tool batch — drained concurrently so "Using list_assignments" arrives *while* that tool runs rather than after it. **Document context offload** stops an attached PDF being re-sent on every turn: a digest replaces the bytes and a `document_read` tool pulls back the pages the model actually asks for, measured on a 60-page canary at a **109.1K → ~15K prefix drop**. A five-part **compaction overhaul** makes thresholds model-relative, bounds the summary at 8k tokens, parks cuts until the re-write is free, and offloads oversized tool results at intake. **Browser sign-in handover** lets the agent pause and hand the user a live, interactive browser to sign in to a site it cannot reach, then continue in the authenticated session — gated behind its own RBAC tool id and a MANAGED Chromium URL blocklist. **Response feedback** ships thumbs, retry-with-correction, implicit copy/continue signals and fleet-level attribution by config arm. Plus **.docx / .pptx / .csv / .xlsx previews** in a docked pane, **Agent Templates**, and a performance pass worth ~500ms off the pre-stream window. **A CDK deploy is required**, and operators who use the browser tool must set `CDK_BROWSER_URL_BLOCKLIST`.

### 🚀 Added

- **Browser sign-in handover (`request_user_login`)** — the agent pauses the turn and hands the user a live, interactive browser to sign in to a site it cannot reach, then continues in the authenticated session. New `browser_login_required` SSE event; the interrupt is raised by the tool itself via `ToolContext`, so the `PausedTurnSnapshot`, resume route and `PendingInterrupt` breadcrumb need no special case. While the user holds the browser the automation stream is `DISABLED` at the service, so the agent provably cannot act. Gated by `BROWSER_TAKEOVER_ENABLED` **and** its own catalog entry (`enabledByDefault: false`) (#1177, #1183)
- **Live-view viewer with no third-party code** — DCV streamed into a first-party viewer page. The event deliberately carries **no URL**: `generate_live_view_url` signs with SigV4 query auth and caps at 300s, so app-api mints one per request instead, and `assert_no_url` enforces that on the interrupt, the event and the persisted row (#1178, #1186, #1189, #1190, #1196, #1199, #1200, #1203)
- **MANAGED Chromium URL blocklist** — a per-environment hostname blocklist applied as a browser-session policy, so a human holding the browser cannot navigate to a system the agent must not act inside (#1180, #1181, #1202)
- **Document context offload** — `document_read` tool, `DocumentDigest` built at upload and persisted on `FileMetadata`, restore rehydrating stripped documents as digests, and live offload of unpinned documents once the re-write is free. Gated by `DOCUMENT_READ_ENABLED` / `DOCUMENT_OFFLOAD_ENABLED`, bucketed by `DOCUMENT_OFFLOAD_ROLLOUT_PERCENT` (#1137, #1138, #1139, #1140, #1143)
- **Per-call context ledger** — prefix split (system / tools / messages), window trims and compaction events on every `C#` cost row, surfaced through the admin cost drill-down (#1130)
- **Model-relative compaction thresholds** — floor-seeking cut with hysteresis, replacing fixed token ceilings that scaled wrong across models (#1129)
- **Bounded compaction summary + per-cut metrics** — summary capped at 8k tokens (#1131)
- **Deferred compaction apply** — cuts are parked post-turn and applied in place when the prefix re-write is free (#1132)
- **Tool-result offload at intake** — oversized tool results go to S3 with a text preview in context, `document_read` exempt (#1133)
- **Selective 1h prompt-cache TTL on the static prefix**, behind a flag and priced honestly against the 2× write premium (#1134)
- **Live turn narration (`agent_status`)** — `thinking` / `tool_start` / `tool_end` phases with Strands' own measured durations, drained concurrently with the agent stream so a status line lands while its tool is running. Deliberately no "responding" phase, and durations are live-only, never persisted (#1160, #1165)
- **Model-written tool-batch summaries (`tool_group_summary`)** — a Nova Micro side-channel task, structured like `session_title`: its own call on its own messages, so it never appends to the conversation or the cacheable prefix. Persisted as `TSUM#` rows and replayed on `GET /messages` (#1161)
- **Thinking time and turn recap** — how long the model spent thinking, and how long a finished turn took, shown in the loader's slot on the latest turn only (#1157, #1170, #1174)
- **Response feedback** — content-free thumbs on assistant messages joined to cost rows (`F#` rows), six reason buckets, and an explicit/implicit signal discriminator (#1142, #1146)
- **Retry-with-correction** — the consequence behind a thumbs down (#1148)
- **Implicit feedback signals** — copy and continue as unweighted positive signals (#1151)
- **Eval sampling** — down-thumbed turns feed AgentCore Evaluations. Opt-in at both CDK and runtime (`FEEDBACK_EVAL_SAMPLING_ENABLED`), because it sends real conversations to an AWS-managed judge (#1153)
- **Fleet-level feedback attribution** — down-thumb rate by config arm (model, tools, skills), plus a down-thumb reason split on the per-session profile (#1152, #1159)
- **File previews in a docked pane** — `.docx` and `.pptx` (uploaded or generated), `.csv` as a data grid, and `.xlsx` read server-side with openpyxl. The preview pane opens on a file the turn just created (#1119, #1121, #1122, #1123, #1136)
- **Agent Templates** — create-form prefill backed by an admin-managed template store (#1149)
- **Spreadsheet Analysis auto-enables** for a session that holds a spreadsheet, so an uploaded `.xlsx` is answerable without the user finding the toggle (#1163)
- **Turn-latency observability construct** — EMF metrics decomposing the pre-stream window into named stages (#1184, #1201)

### ✨ Improved

- **gzip on app-api JSON responses**, with SSE passed through un-buffered (#1125, #1127)
- **Spreadsheet previews show ten times the rows** and the scroller is no longer frozen (#1124)
- **Copy and thumbs reveal on response hover** rather than occupying the transcript permanently (#1179)
- **Agent-state orb** gains a halo and settles on finished turns (#1182)
- **Attachment turn guard** holds a turn's inline attachments to the AgentCore Memory event quota (#1145)

### 🐛 Fixed

- **KaTeX swallowed the prose between two currency amounts** — `$4.50 … $9.00` rendered as math. The earlier HTML-entity workaround never worked and leaked `$` into generated files; both are removed (#1128, #1135)
- **A new frontend build was not actually served** — the deploy sent no `Cache-Control`, so CloudFront served the old bundle from cache. Hashed filenames do not save you when `index.html` itself is stale (#1197)
- **The system-prompt date line carried the hour**, re-writing the prompt-cache prefix every hour for the life of every session (#1126)
- **Deleted conversations were invisible to the admin cost drill-down**, so a user's costs did not reconcile (#1120)
- **`documentTokens` understated PDFs by ~14×** — `bytes/4` ignores that Bedrock dual-encodes each PDF page as an image on top of the text layer. Every analytic built on it was low by that factor (#1144)
- **`DOCUMENT_READ_ENABLED=false` left the other two paths running**, so pulling the kill switch still evicted bytes and emitted handles for a tool that was not injected (#1147)
- **ReDoS in `document_read` pattern mode** — a valid but catastrophic regex ran unbounded. Two defences: a structural `catastrophic_pattern` check that degrades to literal search, and a scan budget (#1147)
- **Synth now fails when the uploads bucket would have no CORS rule** — a truthy-but-empty origin list synthesised green with no rule at all (#1166, #1172)
- **The tool/skill lists are awaited before a chat turn is assembled**, closing a first-turn race that re-wrote the prompt-cache prefix (#1168)
- **Browser policy fixes** — MANAGED was being sent at session level (breaking every session), the policy object key was double-prefixed, and the caller needed read on the policy object (#1173, #1175, #1176, #1183)
- **`state-*` colour steps that failed AA** in light mode for file-type chips and success text (#1118, #1119)

### ⚠️ Changed

- **The browser URL blocklist ships empty and is supplied per environment.** It was hardcoded to `instructure.com`, and `platform.yml` never forwarded `CDK_BROWSER_URL_BLOCKLIST` — so the list was effectively unconfigurable through the deploy pipeline and every fork inherited one institution's policy. **Set the variable for any environment that needs a blocklist**; the synth log prints the list or warns when it is empty (#1205)
- **`list_spreadsheets` and `analyze_spreadsheet` are now seeded.** They were catalogued but never written to the tool-catalog table, so a fresh deployment could not grant them to any role (#1205)

### ⚡ Performance

- **~500ms off the pre-stream window.** The session row was read **eight times** per turn — 445ms of a 455ms stage (#1191). boto3 clients rebuilt per call cost 21ms, ~20% of the remaining warm preamble (#1198). Quota now takes session cost from the row the preamble already read (#1193)
- **Bytecode precompiled in the app-api, inference-api and Lambda images** — `uv` does not compile by default, unlike `pip`, so first-touch import was paid at runtime (#1155, #1169)
- **CountTokens bounded on the reply path**, and the model id is no longer swapped mid-call; a throttle now costs one failed request instead of a 5.8s stall (#1158)
- **Long-term memory retrieved through a bounded client**, and the session's own summary is no longer re-fetched per message (#1164)
- **Agent cache extended to four more tool families**, and spreadsheet-analysis sessions are cached by carrying `assistant_id` in the key (#1156, #1162)
- **mermaid lazy-loaded** out of the eager scripts bundle (#1119)
- **app-api and inference-api ship code root-owned**, and app-api no longer ships `/app` twice (#1167, #1171)

### 🔒 Security

- **No test reaches AWS.** 25 test cases across 6 files were making real authenticated AWS calls, hidden by fail-open error handling. An off-box socket guard now blocks them, and the quarantine is burned down — the suite also runs in half the time (#1154, #1157)

### 🏗️ Infrastructure

- **New `browser-policy-construct`** — S3-backed MANAGED Chromium policy object for browser sessions, with `ConnectBrowserLiveViewStream` granted on `*` as AWS requires (#1180, #1194)
- **New `turn-latency-observability-construct`** — EMF metrics for the decomposed pre-stream stages (#1184)
- **New `agent-templates` table** — no GSIs (#1149)
- **`connect-src` allows `data:`/`blob:` in the MCP sandbox CSP** so DCV can load its decoder (#1192)
- **The Platform Stack deploy triggers on the assets it actually deploys** (#1187)

### 📦 Dependencies

- Backend: `openpyxl` 3.1.5 (new — server-side `.xlsx` reading)
- Frontend: `docx-preview` 0.4.0, `pptx-preview` 1.0.7 (new), `echarts` stubbed via a local shim

### 🔧 CI/CD

- **Off-box socket guard** in `tests/conftest.py`, with tiktoken warmed before the guard arms (#1154, #1157)
- **Seed/catalog parity test** — every tool in `TOOL_CATALOG` must have a row in `seed_bootstrap_data.py` (#1205)

## [1.22.0] - 2026-09-14

The agent can stop guessing. **Clarifying questions** ship end to end: when a request is genuinely ambiguous the agent pauses the turn, the SPA renders a multiple-choice picker in the transcript, and the answer resumes that same tool call — surviving a page refresh. The tool worked from PR-2 but the model reached for it 4 times in 24 ambiguous requests; a measured system-prompt clause takes that to 24/24 while leaving clear requests at 0/18. On the admin side, the **cost drill-down** closes the gap between "top users by cost" and the per-session anatomy: an admin walks user → conversations → session profile with 15 diagnosis rules, a context trajectory chart and a copyable diagnostic JSON — all **content-free by construction**, enforced by a denylist test and a moto test that seeds content and proves none returns. Two silent data bugs are fixed: deleting a knowledge-base document mid-upload **permanently leaked its byte reservation**, and born-managed provisioning **mistook an established legacy agent for a new one** and stranded its corpus. And an `@`-mention now **binds the conversation** instead of borrowing one turn — measured on prod, 247 of 247 mentions started the conversation, so the borrow was paying an invisible tool-loss failure for a case that has never occurred. **No CDK deploy required.** One operator step: enable the Clarifying Questions tool in each existing environment's catalog — the seed skips a tool row that already exists.
Expand Down
Loading
Loading