rcourtman
8439ce6e6b
Dedupe AI runtime guest-family, tool-pipeline, and provider clones
...
Clears the ten dupl pairs across internal/ai:
- patrol_intelligence.go, tools_query.go, tools_storage.go: VM and LXC
system-container paths collapse into generics over read-state view
method subsets (gatherGuestIntelligenceFromViews, canonicalGuestGetResult
+ guestViewGetResult, addCanonicalGuestSearchMatches +
addGuestViewSearchMatches, appendGuestDiskSummaries).
- tools_file.go: append/write share executeFileMutation driven by
fileMutationSpec (approval-command text, shell redirect, verification
strategy stay per-action and verbatim).
- tools_kubernetes.go: deployment restart / pod delete share
executeKubernetesResourceAction driven by kubernetesResourceAction.
- providers/anthropic.go + anthropic_oauth.go: message conversion shared
via convertMessagesToAnthropic (the OAuth copy was annotated 'same as
regular client').
- memory/changes.go + memory/remediation.go: history loading shared via
the generic loadMemoryHistory in memory/paths.go (10 MiB cap, sort,
missing-file semantics preserved via a found flag).
- findings.go and unified/alerts.go: Finding/findingJSON and
UnifiedFinding/unifiedFindingJSON are deliberate marshal-mirror twins
(AlertIdentifier json:"-" vs alert_identifier round-trip); merging
would break every public literal. Suppressed with nolint:dupl and
enforced instead by new reflect-based mirror-sync tests.
Contract Extension Points name the shared helpers and the mirror
invariant. Full ./internal/ai/... test tree passes.
2026-06-10 09:38:52 +01:00
..
2026-03-18 16:06:30 +00:00
2026-05-09 21:31:45 +01:00
2026-03-18 16:06:30 +00:00
2026-06-09 21:19:25 +01:00
2026-03-18 16:06:30 +00:00
2026-05-21 15:15:23 +01:00
2026-06-04 14:07:14 +01:00
2026-06-04 21:56:36 +01:00
2026-05-15 12:22:52 +01:00
2026-06-03 12:29:37 +01:00
2026-05-25 18:02:28 +01:00
2026-03-29 14:18:20 +01:00
2026-03-18 16:06:30 +00:00
2026-06-10 09:38:52 +01:00
2026-06-09 09:43:21 +01:00
2026-06-08 07:21:38 +01:00
2026-03-18 16:06:30 +00:00
2026-06-10 09:38:52 +01:00
2026-04-01 14:47:58 +01:00
2026-05-13 13:03:40 +01:00
2026-06-10 09:38:52 +01:00
2026-06-10 09:38:52 +01:00
2026-05-01 20:28:11 +01:00
2026-03-30 13:34:08 +01:00
2026-03-30 13:34:08 +01:00
2026-01-25 21:08:44 +00:00
2026-05-07 01:24:57 +01:00
2026-05-07 01:24:57 +01:00
2025-12-29 13:49:04 +00:00
2026-03-18 16:06:30 +00:00
2025-12-29 13:49:04 +00:00
2026-01-01 22:29:15 +00:00
2025-12-12 11:29:47 +00:00
2026-03-18 16:06:30 +00:00
2025-12-12 14:26:10 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-05-10 21:57:39 +01:00
2026-06-03 12:29:37 +01:00
2026-05-13 05:42:25 +01:00
2026-06-09 21:42:21 +01:00
2026-05-17 21:59:39 +01:00
2026-06-03 12:29:37 +01:00
2026-04-09 20:15:17 +01:00
2026-01-25 21:08:44 +00:00
2026-05-12 22:23:55 +01:00
2026-05-12 22:23:55 +01:00
2026-01-30 19:02:14 +00:00
2026-05-11 11:40:07 +01:00
2026-01-30 19:02:14 +00:00
2026-01-30 19:02:14 +00:00
2026-06-09 22:03:20 +01:00
2026-06-10 09:38:52 +01:00
2026-06-09 21:42:21 +01:00
2026-05-13 11:35:24 +01:00
2026-05-13 05:42:25 +01:00
2026-05-13 11:35:24 +01:00
2026-05-13 11:35:24 +01:00
2026-03-18 16:06:30 +00:00
2026-05-13 01:13:38 +01:00
2026-06-09 21:42:21 +01:00
2026-05-13 01:13:38 +01:00
2026-03-30 13:34:08 +01:00
2026-05-13 02:41:45 +01:00
2026-05-13 02:41:45 +01:00
2026-05-13 02:41:45 +01:00
2026-03-18 16:06:30 +00:00
2026-05-09 21:03:15 +01:00
2026-02-01 10:12:23 +00:00
2026-01-19 19:20:49 +00:00
2026-01-19 19:20:49 +00:00
2026-06-09 21:42:21 +01:00
2026-05-13 04:18:27 +01:00
2026-05-13 04:18:27 +01:00
2026-06-10 09:38:52 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-06-08 15:21:51 +01:00
2026-03-19 04:15:26 +00:00
2026-06-03 12:29:37 +01:00
2026-05-08 18:17:19 +01:00
2026-05-08 18:17:19 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 17:22:24 +00:00
2025-12-12 13:49:37 +00:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2025-12-29 13:49:04 +00:00
2025-12-12 09:45:57 +00:00
2026-03-18 16:06:30 +00:00
2026-06-08 07:21:38 +01:00
2026-06-05 22:54:44 +01:00
2026-05-21 15:15:23 +01:00
2026-03-18 16:06:30 +00:00
2026-06-04 14:07:14 +01:00
2026-04-28 15:49:18 +01:00
2026-05-15 23:11:59 +01:00
2026-02-01 18:07:41 +00:00
2026-06-09 21:47:14 +01:00
2026-05-15 12:22:52 +01:00
2026-05-15 16:57:25 +01:00
2026-05-15 16:57:25 +01:00
2026-03-18 16:06:30 +00:00
2026-05-07 18:24:47 +01:00
2026-06-09 21:47:14 +01:00
2026-06-09 21:47:14 +01:00
2026-02-04 19:56:12 +00:00
2026-05-08 11:08:53 +01:00
2026-05-08 11:08:53 +01:00
2026-03-18 16:06:30 +00:00
2026-05-15 14:51:15 +01:00
2026-06-09 21:47:14 +01:00
2026-05-01 20:28:11 +01:00
2026-06-10 09:38:52 +01:00
2026-02-01 16:27:25 +00:00
2026-03-18 16:06:30 +00:00
2026-05-15 14:51:15 +01:00
2026-05-15 11:27:15 +01:00
2026-05-15 11:27:15 +01:00
2026-05-01 20:28:11 +01:00
2026-05-01 20:28:11 +01:00
2026-05-08 11:34:07 +01:00
2026-05-10 17:14:47 +01:00
2026-06-09 21:47:14 +01:00
2026-03-30 13:34:08 +01:00
2026-05-07 16:15:07 +01:00
2026-05-15 12:22:52 +01:00
2026-05-15 12:22:52 +01:00
2026-06-05 12:50:02 +01:00
2026-06-05 12:50:02 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2026-05-10 21:33:41 +01:00
2026-03-18 16:06:30 +00:00
2026-05-10 21:33:41 +01:00
2026-06-03 12:29:37 +01:00
2026-03-18 16:06:30 +00:00
2026-06-09 21:47:14 +01:00
2026-01-24 22:41:43 +00:00
2026-05-17 18:24:13 +01:00
2026-03-30 13:34:08 +01:00
2026-04-01 23:09:32 +01:00
2026-05-13 00:28:24 +01:00
2026-03-30 13:34:08 +01:00
2026-05-28 22:42:32 +01:00
2026-06-09 21:47:14 +01:00
2025-12-12 14:11:28 +00:00
2026-05-10 19:30:54 +01:00
2026-05-10 19:30:54 +01:00
2026-05-10 21:23:12 +01:00
2026-05-10 22:02:10 +01:00
2026-05-10 21:08:51 +01:00
2026-05-10 22:02:10 +01:00
2026-06-09 09:43:21 +01:00
2026-06-09 09:43:21 +01:00
2026-06-08 15:21:51 +01:00
2026-06-09 09:43:21 +01:00
2026-03-19 04:07:47 +00:00
2026-03-19 04:07:47 +00:00
2026-03-18 16:06:30 +00:00
2026-03-30 13:34:08 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00
2025-12-10 08:35:24 +00:00
2026-06-08 03:48:33 +01:00
2026-06-07 18:13:21 +01:00
2026-05-15 16:28:17 +01:00
2026-05-21 15:15:23 +01:00
2026-03-18 16:06:30 +00:00
2026-06-09 09:43:21 +01:00
2026-03-18 16:06:30 +00:00
2026-03-18 16:06:30 +00:00