From 24cd0e1a3ad498dcfec229b084cd6948dc9ff471 Mon Sep 17 00:00:00 2001 From: mdheller <21163552+mdheller@users.noreply.github.com> Date: Sat, 2 May 2026 13:08:45 -0400 Subject: [PATCH 1/2] Add Network/BYOM/Native Assistant AgentTerm event guide --- .../network-native-assistant-events.md | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 docs/integration/network-native-assistant-events.md diff --git a/docs/integration/network-native-assistant-events.md b/docs/integration/network-native-assistant-events.md new file mode 100644 index 0000000..fdb2515 --- /dev/null +++ b/docs/integration/network-native-assistant-events.md @@ -0,0 +1,70 @@ +# Network Door, BYOM, and Native Assistant operator events + +AgentTerm is the operator-visible ChatOps surface for SourceOS work. The first Network Door / BYOM / Native Assistant integration slice uses existing AgentTerm event recording rather than invoking network, firewall, model-provider, or native assistant adapters directly. + +This keeps AgentTerm aligned with AgentPlane evidence contracts: + +- `NetworkDoorPlanEvidence` +- `ExternalModelProviderRouteEvidence` +- `NativeAssistantBridgeEvidence` + +## Operator event commands + +Network Door plan event: + +```bash +agent-term record agentplane network_door_plan '!sourceos-network' \ + 'Plan enterprise/user network route for models.enterprise.example' \ + --requires-approval \ + --metadata-json '{"networkAccessProfileRef":"urn:srcos:network-access-profile:enterprise-and-user-default","evidenceKind":"NetworkDoorPlanEvidence","delegatedExecutor":"sourceosctl network plan"}' +``` + +BYOM / external model provider event: + +```bash +agent-term record agentplane external_model_provider_route '!sourceos-network' \ + 'Plan BYOM OpenAI-compatible provider route' \ + --requires-approval \ + --metadata-json '{"providerRef":"urn:srcos:external-model-provider-profile:user-openai-compatible","evidenceKind":"ExternalModelProviderRouteEvidence","delegatedExecutor":"sourceosctl network provider"}' +``` + +Native assistant bridge event: + +```bash +agent-term record agentplane native_assistant_bridge '!sourceos-native' \ + 'Plan Apple App Intents bridge for Office artifact creation' \ + --requires-approval \ + --metadata-json '{"bridgeRef":"urn:srcos:native-assistant-bridge-profile:apple-app-intents-default","evidenceKind":"NativeAssistantBridgeEvidence","delegatedExecutor":"sourceosctl native-assistant plan"}' +``` + +## Boundary + +AgentTerm records operator intent and policy posture. It does not: + +- mutate firewall state; +- install or configure service mesh components; +- contact BYOM or enterprise model providers; +- store provider credentials; +- invoke Siri, Apple App Intents, Shortcuts, Android intents, Windows shell APIs, browser extensions, MCP/native transports, or other native assistant APIs; +- send prompt text or destination text; +- bypass Policy Fabric. + +## Event ownership + +| Event kind | Owning evidence contract | Delegated local plan surface | +|---|---|---| +| `network_door_plan` | `NetworkDoorPlanEvidence` | `sourceosctl network plan` | +| `external_model_provider_route` | `ExternalModelProviderRouteEvidence` | `sourceosctl network provider` | +| `native_assistant_bridge` | `NativeAssistantBridgeEvidence` | `sourceosctl native-assistant plan` | + +## Future slash command surface + +The future interactive shell should map these to: + +```text +/network plan +/byom provider +/native-assistant plan +``` + +Until those dedicated shell commands exist, `agent-term record ...` is the supported operator-visible event path. From ca5544bb63a057a2e5abac0efffb83d652068ca4 Mon Sep 17 00:00:00 2001 From: mdheller <21163552+mdheller@users.noreply.github.com> Date: Sat, 2 May 2026 13:09:35 -0400 Subject: [PATCH 2/2] Add AgentTerm Network/BYOM/Native Assistant event tests --- tests/test_network_native_assistant_events.py | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 tests/test_network_native_assistant_events.py diff --git a/tests/test_network_native_assistant_events.py b/tests/test_network_native_assistant_events.py new file mode 100644 index 0000000..ead8159 --- /dev/null +++ b/tests/test_network_native_assistant_events.py @@ -0,0 +1,76 @@ +from agent_term.cli import main + + +def test_record_network_door_plan_event(tmp_path, capsys): + db_path = tmp_path / "events.sqlite3" + + exit_code = main( + [ + "--db", + str(db_path), + "record", + "agentplane", + "network_door_plan", + "!sourceos-network", + "Plan enterprise/user network route", + "--requires-approval", + "--metadata-json", + '{"evidenceKind":"NetworkDoorPlanEvidence","delegatedExecutor":"sourceosctl network plan"}', + ] + ) + + captured = capsys.readouterr() + assert exit_code == 0 + assert "source=agentplane" in captured.out + assert "kind=network_door_plan" in captured.out + assert "pending Policy Fabric approval" in captured.out + + +def test_record_byom_provider_route_event(tmp_path, capsys): + db_path = tmp_path / "events.sqlite3" + + exit_code = main( + [ + "--db", + str(db_path), + "record", + "agentplane", + "external_model_provider_route", + "!sourceos-network", + "Plan BYOM provider route", + "--requires-approval", + "--metadata-json", + '{"evidenceKind":"ExternalModelProviderRouteEvidence","delegatedExecutor":"sourceosctl network provider"}', + ] + ) + + captured = capsys.readouterr() + assert exit_code == 0 + assert "source=agentplane" in captured.out + assert "kind=external_model_provider_route" in captured.out + assert "pending Policy Fabric approval" in captured.out + + +def test_record_native_assistant_bridge_event(tmp_path, capsys): + db_path = tmp_path / "events.sqlite3" + + exit_code = main( + [ + "--db", + str(db_path), + "record", + "agentplane", + "native_assistant_bridge", + "!sourceos-native", + "Plan native assistant bridge", + "--requires-approval", + "--metadata-json", + '{"evidenceKind":"NativeAssistantBridgeEvidence","delegatedExecutor":"sourceosctl native-assistant plan"}', + ] + ) + + captured = capsys.readouterr() + assert exit_code == 0 + assert "source=agentplane" in captured.out + assert "kind=native_assistant_bridge" in captured.out + assert "pending Policy Fabric approval" in captured.out