Commit Graph

8213 Commits

Author SHA1 Message Date
rcourtman 8ffb56946e chore: seal Pulse Intelligence release gate 2026-07-13 01:14:19 +01:00
rcourtman a63b3eae2b Require independent evidence for verified findings 2026-07-12 23:15:54 +01:00
rcourtman 7d772acff3 feat(assistant): mid-turn steering of the running response
A follow-up sent during an active run now offers itself to the running
agentic loop via POST /api/ai/sessions/{id}/steer. Accepted steers join
the loop at its next turn boundary (the abort-check site) as plain user
messages, are announced with a steer_applied stream event so the drawer
settles the pending row, and persist through the end-of-run save. A
steer carries prompt text only: no route, control-level, or autonomy
changes, no turn-budget extension, system sessions rejected, and the
per-session inbox is bounded (steer_backlog overflow). Delivery is not
guaranteed by acceptance: a run that ends first discards the inbox and
the row drains as an ordinary queued turn, so pre-steering queue
semantics remain the fallback. Steering rows lose edit/remove once
accepted.
2026-07-12 23:01:40 +01:00
rcourtman 8676e5d5b9 Keep RG09 cache fixture across restart 2026-07-12 22:31:29 +01:00
rcourtman 42fe61493c feat(assistant): show estimated session cost in the last-turn summary
Chat turns, compaction, and title calls now stamp session_id on their
cost.UsageEvent, and the done event carries session_cost_usd summed from
the operator ledger (cost.Store.SessionCostUSD). The drawer's last-turn
summary appends '$0.12 session' with a sub-cent floor. The figure is
omitted whenever any of the session's models has unknown pricing, and
free local models price known-at-zero, so no figure is ever partial.
2026-07-12 22:13:23 +01:00
rcourtman 329039354d Use Development SSD for RG09 Go cache 2026-07-12 22:13:04 +01:00
rcourtman 373b491484 Fix durable APT drift receipts 2026-07-12 21:53:52 +01:00
rcourtman abcf7ec6ba test(coverage): harvest 20 stranded branch-coverage tests from 13:30 wave
Harvests the 13:30 c-wave's completed-but-unlanded branch-coverage tests
(315 cases across 20 PURE modules): url, settingsFeatureGates, alertDestinations,
storageAlertState, commandPalette, guestDrawer, nodeDrawer, navigation,
actionAuditPresentation, workloadTypePresentation, upgradeNavigation, and others.
Verified against current HEAD: vitest 20/20 green, full type-check clean, eslint
clean, GLM adversarial review 20 KEEP / 0 REJECT (no source edits).
2026-07-12 21:40:32 +01:00
rcourtman 8a0c6fc9a8 feat(assistant): collapse long pastes into composer chips
Pasting a log or config into the composer flooded the textarea. Pastes
over 8 lines or 800 chars now collapse into a removable chip; the full
text rejoins the prompt after the typed question at send time. Clicking
the chip body expands it back into the textarea for inline editing, and
a chip-only send is allowed.
2026-07-12 21:27:08 +01:00
rcourtman 1ff4c29cf7 Add Debian and Ubuntu APT certification 2026-07-12 21:25:48 +01:00
rcourtman 120c80239d feat(assistant): edit-and-resend pencil on the latest user prompt
The undo flow already restores the removed prompt into the composer for
editing, but the only entry points were the header undo button and /undo.
Surface it where users look for it: a hover pencil on the latest
non-queued user prompt that undoes the turn and prefills the composer,
riding the same last-turn undo boundary as regenerate.
2026-07-12 21:15:38 +01:00
rcourtman 6d1dced727 docs(readme): surface the Pulse MCP bring-your-own-agent path
The MCP server and its Settings setup panel existed but the README never
mentioned them, so users who prefer their own agent (Claude Code,
OpenCode) had no pointer to the supported path.
2026-07-12 21:05:25 +01:00
rcourtman 44e29e8e98 Merge branch 'main' of https://github.com/rcourtman/Pulse 2026-07-12 21:02:34 +01:00
rcourtman 60ce8924bb feat(assistant): retry re-runs the turn in place and the last answer gains regenerate
Retrying a failed turn re-sent the prompt without removing the persisted
turn, so session history double-recorded the prompt. Session undo now
accepts an expected-prompt guard (a stale retry can never remove a
different turn); retry drops the replaced turn server-side before
re-sending. The latest settled assistant answer gains a hover-revealed
Regenerate button that reuses the same path.
2026-07-12 20:58:20 +01:00
rcourtman b8df758ede Preserve RG06 evidence trust boundaries 2026-07-12 20:49:18 +01:00
rcourtman 8b2eef10b4 Normalize bounded APT agent clock skew 2026-07-12 20:44:21 +01:00
rcourtman 9981e370bb Align RG06 operator lock reason 2026-07-12 20:39:14 +01:00
rcourtman 399745fde5 Plan RG06 stale barrier explicitly 2026-07-12 20:35:47 +01:00
rcourtman 03cb85d85a Measure RG06 stale plan at dispatch 2026-07-12 20:30:28 +01:00
rcourtman 43accc722e Project RG06 resource staleness fully 2026-07-12 20:26:19 +01:00
rcourtman 4334535291 Invalidate RG06 registry on staleness 2026-07-12 20:22:53 +01:00
rcourtman 912f131cd0 Measure RG06 barriers before teardown 2026-07-12 20:19:03 +01:00
rcourtman 1ad813c2e7 Align RG06 emergency barrier reason 2026-07-12 20:15:25 +01:00
rcourtman 322f4fc50d Bind RG06 agent and host identity 2026-07-12 20:12:00 +01:00
rcourtman d518e7d33d Use canonical default tenant in RG06 2026-07-12 20:08:10 +01:00
rcourtman fedc77ef62 Route RG06 through canonical registry 2026-07-12 20:04:40 +01:00
rcourtman 06dcd59121 Bind RG06 report projection identity 2026-07-12 19:59:35 +01:00
rcourtman e0e6842cb5 Fix RG06 ext4 pressure fixture 2026-07-12 19:56:47 +01:00
rcourtman 7fd7e2b160 fix(frontend): key drawer guest web-interface URLs by the canonical workload id
The infrastructure resource drawer saved guest metadata (web interface
URLs) under the unified resource hash or the discovery resource id, a
keyspace no workloads table reads: the tables and the workloads drawer
resolve metadata by the canonical id (instance:node:vmid for PVE guests,
resource id otherwise), which is also the key v5 upgrades carry over in
guest_metadata.json. A URL saved from that drawer was stranded where
only the same drawer could read it back.

Route the drawer's guest metadata id through
getCanonicalWorkloadIdForResource, and canonicalize the resource type
inside that helper so lxc/oci-container/qemu spellings build the same
node-scoped id the workloads surfaces use.

Refs #1556
2026-07-12 19:52:21 +01:00
rcourtman 4eb7715171 fix(frontend): key drawer guest web-interface URLs by the canonical workload id
The infrastructure resource drawer saved guest metadata (web interface
URLs) under the unified resource hash or the discovery resource id, a
keyspace no workloads table reads: the tables and the workloads drawer
resolve metadata by the canonical id (instance:node:vmid for PVE guests,
resource id otherwise), which is also the key v5 upgrades carry over in
guest_metadata.json. A URL saved from that drawer was stranded where
only the same drawer could read it back.

Route the drawer's guest metadata id through
getCanonicalWorkloadIdForResource, and canonicalize the resource type
inside that helper so lxc/oci-container/qemu spellings build the same
node-scoped id the workloads surfaces use.

Refs #1556
2026-07-12 19:50:09 +01:00
rcourtman 10b73e1964 fix(docker-agent): preserve shared network namespaces through container updates
One-click updates recreated containers from the raw inspected config, so
Docker rejected the create for any container using network_mode:
container:<id> (compose service:<x>) or host with "conflicting options:
hostname and the network mode", leaving the workload stopped under its
_pulse_backup_ name until the rollback rename restored it. Docker fills
Config.Hostname with the namespace owner's ID on such containers, so the
verbatim copy always tripped the daemon validation (verified against a
real Docker 29.5.2 daemon: verbatim create 409s, sanitized create
succeeds and the replacement starts in the shared namespace).

Strip the namespace-owned settings before ContainerCreate: hostname and
domainname for container:/host modes, plus exposed/published ports,
links, DNS options, and extra hosts for container: mode, all of which
the daemon derives from the owning namespace. Bridge and user-defined
networks are untouched.

Refs #1564
2026-07-12 19:48:18 +01:00
rcourtman 99aa2bd6eb Add Colima autonomy release proof 2026-07-12 19:47:56 +01:00
rcourtman 2d47c12e6d Normalize Pulse Intelligence release gates 2026-07-12 14:42:07 +01:00
rcourtman c07927adbd Classify action routes and operation transports 2026-07-12 13:55:19 +01:00
rcourtman e6d40f3c11 fix: bound denied model tool loops 2026-07-12 13:29:21 +01:00
rcourtman 90edcfe017 Fix strict APT lifecycle fixture 2026-07-12 13:00:02 +01:00
rcourtman 0062128414 Add durable Docker restart lifecycle proof 2026-07-12 12:11:16 +01:00
rcourtman 906d4823aa test(frontend): branch coverage for 7 pure modules (GLM wave 0712 tier 2d) 2026-07-12 10:49:05 +01:00
rcourtman 48ecb93848 test(frontend): branch coverage for 8 pure modules (GLM wave 0712 tier 2c) 2026-07-12 10:07:06 +01:00
rcourtman 353c5c63a4 test(frontend): branch coverage for 12 pure modules (GLM wave 0712 tier 2b) 2026-07-12 09:49:55 +01:00
rcourtman 00ff2e805c test(frontend): branch coverage for 6 pure modules (GLM wave 0712 tier 2a) 2026-07-12 09:19:35 +01:00
rcourtman 243f10f3c0 test(frontend): branch coverage for 5 pure modules (GLM wave 0712 batch 3b) 2026-07-12 08:19:49 +01:00
rcourtman 8f6888b7a4 test(frontend): branch coverage for 9 pure modules (GLM wave 0712 batch 3) 2026-07-12 08:05:51 +01:00
rcourtman 512606c40b test(frontend): branch coverage for 16 pure modules (GLM wave 0712 batch 2) 2026-07-12 07:34:44 +01:00
rcourtman 8321ed55c5 test(frontend): branch coverage for 7 pure modules (GLM wave 0712) 2026-07-12 06:36:22 +01:00
rcourtman b0ee11e162 Add trusted APT action review
Refs #1491
2026-07-12 06:33:42 +01:00
rcourtman d6838d3a25 Complete durable APT workflow continuity 2026-07-12 05:23:02 +01:00
rcourtman 71ad92ef71 test(frontend): branch-coverage tests for 10 more pure presentation/model modules 2026-07-12 04:39:10 +01:00
rcourtman 4aac79dc72 Add durable agent operation receipts 2026-07-12 04:16:22 +01:00
rcourtman 516179e5fa test(frontend): branch-coverage tests for 16 more pure model/presentation modules 2026-07-12 03:30:26 +01:00