@phigon/observer 8.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +303 -0
- package/dist/bin/guardian-runner-darwin-amd64 +0 -0
- package/dist/bin/guardian-runner-darwin-arm64 +0 -0
- package/dist/bin/guardian-runner-linux-amd64 +0 -0
- package/dist/bin/guardian-runner-linux-arm64 +0 -0
- package/dist/bin/guardian-runner-windows-amd64.exe +0 -0
- package/dist/bin/guardian-runner-windows-arm64.exe +0 -0
- package/dist/src/action-policy.d.ts +38 -0
- package/dist/src/action-policy.d.ts.map +1 -0
- package/dist/src/action-policy.js +269 -0
- package/dist/src/action-policy.js.map +1 -0
- package/dist/src/activity/adapters/claude.d.ts +3 -0
- package/dist/src/activity/adapters/claude.d.ts.map +1 -0
- package/dist/src/activity/adapters/claude.js +89 -0
- package/dist/src/activity/adapters/claude.js.map +1 -0
- package/dist/src/activity/adapters/codex.d.ts +3 -0
- package/dist/src/activity/adapters/codex.d.ts.map +1 -0
- package/dist/src/activity/adapters/codex.js +277 -0
- package/dist/src/activity/adapters/codex.js.map +1 -0
- package/dist/src/activity/adapters/copilot.d.ts +2 -0
- package/dist/src/activity/adapters/copilot.d.ts.map +1 -0
- package/dist/src/activity/adapters/copilot.js +4 -0
- package/dist/src/activity/adapters/copilot.js.map +1 -0
- package/dist/src/activity/adapters/generic.d.ts +2 -0
- package/dist/src/activity/adapters/generic.d.ts.map +1 -0
- package/dist/src/activity/adapters/generic.js +4 -0
- package/dist/src/activity/adapters/generic.js.map +1 -0
- package/dist/src/activity/adapters/hermes.d.ts +2 -0
- package/dist/src/activity/adapters/hermes.d.ts.map +1 -0
- package/dist/src/activity/adapters/hermes.js +4 -0
- package/dist/src/activity/adapters/hermes.js.map +1 -0
- package/dist/src/activity/adapters/openai-compatible.d.ts +4 -0
- package/dist/src/activity/adapters/openai-compatible.d.ts.map +1 -0
- package/dist/src/activity/adapters/openai-compatible.js +116 -0
- package/dist/src/activity/adapters/openai-compatible.js.map +1 -0
- package/dist/src/activity/adapters/openclaw.d.ts +2 -0
- package/dist/src/activity/adapters/openclaw.d.ts.map +1 -0
- package/dist/src/activity/adapters/openclaw.js +4 -0
- package/dist/src/activity/adapters/openclaw.js.map +1 -0
- package/dist/src/activity/adapters/opencode.d.ts +3 -0
- package/dist/src/activity/adapters/opencode.d.ts.map +1 -0
- package/dist/src/activity/adapters/opencode.js +137 -0
- package/dist/src/activity/adapters/opencode.js.map +1 -0
- package/dist/src/activity/bridges.d.ts +7 -0
- package/dist/src/activity/bridges.d.ts.map +1 -0
- package/dist/src/activity/bridges.js +17 -0
- package/dist/src/activity/bridges.js.map +1 -0
- package/dist/src/activity/collector.d.ts +90 -0
- package/dist/src/activity/collector.d.ts.map +1 -0
- package/dist/src/activity/collector.js +706 -0
- package/dist/src/activity/collector.js.map +1 -0
- package/dist/src/activity/index.d.ts +14 -0
- package/dist/src/activity/index.d.ts.map +1 -0
- package/dist/src/activity/index.js +14 -0
- package/dist/src/activity/index.js.map +1 -0
- package/dist/src/activity/ingest.d.ts +15 -0
- package/dist/src/activity/ingest.d.ts.map +1 -0
- package/dist/src/activity/ingest.js +103 -0
- package/dist/src/activity/ingest.js.map +1 -0
- package/dist/src/activity/native-capabilities.d.ts +14 -0
- package/dist/src/activity/native-capabilities.d.ts.map +1 -0
- package/dist/src/activity/native-capabilities.js +85 -0
- package/dist/src/activity/native-capabilities.js.map +1 -0
- package/dist/src/activity/normalize.d.ts +17 -0
- package/dist/src/activity/normalize.d.ts.map +1 -0
- package/dist/src/activity/normalize.js +416 -0
- package/dist/src/activity/normalize.js.map +1 -0
- package/dist/src/activity/opencode-sqlite-source.d.ts +19 -0
- package/dist/src/activity/opencode-sqlite-source.d.ts.map +1 -0
- package/dist/src/activity/opencode-sqlite-source.js +305 -0
- package/dist/src/activity/opencode-sqlite-source.js.map +1 -0
- package/dist/src/activity/policy.d.ts +48 -0
- package/dist/src/activity/policy.d.ts.map +1 -0
- package/dist/src/activity/policy.js +436 -0
- package/dist/src/activity/policy.js.map +1 -0
- package/dist/src/activity/record.d.ts +7 -0
- package/dist/src/activity/record.d.ts.map +1 -0
- package/dist/src/activity/record.js +61 -0
- package/dist/src/activity/record.js.map +1 -0
- package/dist/src/activity/source-reader.d.ts +46 -0
- package/dist/src/activity/source-reader.d.ts.map +1 -0
- package/dist/src/activity/source-reader.js +594 -0
- package/dist/src/activity/source-reader.js.map +1 -0
- package/dist/src/activity/types.d.ts +21 -0
- package/dist/src/activity/types.d.ts.map +1 -0
- package/dist/src/activity/types.js +2 -0
- package/dist/src/activity/types.js.map +1 -0
- package/dist/src/agent-action-executor.d.ts +21 -0
- package/dist/src/agent-action-executor.d.ts.map +1 -0
- package/dist/src/agent-action-executor.js +248 -0
- package/dist/src/agent-action-executor.js.map +1 -0
- package/dist/src/agentic-guardian.d.ts +50 -0
- package/dist/src/agentic-guardian.d.ts.map +1 -0
- package/dist/src/agentic-guardian.js +220 -0
- package/dist/src/agentic-guardian.js.map +1 -0
- package/dist/src/atomic-replace.d.ts +4 -0
- package/dist/src/atomic-replace.d.ts.map +1 -0
- package/dist/src/atomic-replace.js +18 -0
- package/dist/src/atomic-replace.js.map +1 -0
- package/dist/src/cli.d.ts +11 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +1244 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/config.d.ts +68 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +260 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/credential-store.d.ts +22 -0
- package/dist/src/credential-store.d.ts.map +1 -0
- package/dist/src/credential-store.js +91 -0
- package/dist/src/credential-store.js.map +1 -0
- package/dist/src/custom-agent-registry.d.ts +26 -0
- package/dist/src/custom-agent-registry.d.ts.map +1 -0
- package/dist/src/custom-agent-registry.js +288 -0
- package/dist/src/custom-agent-registry.js.map +1 -0
- package/dist/src/discovery/adapters/claude.d.ts +3 -0
- package/dist/src/discovery/adapters/claude.d.ts.map +1 -0
- package/dist/src/discovery/adapters/claude.js +26 -0
- package/dist/src/discovery/adapters/claude.js.map +1 -0
- package/dist/src/discovery/adapters/codex.d.ts +3 -0
- package/dist/src/discovery/adapters/codex.d.ts.map +1 -0
- package/dist/src/discovery/adapters/codex.js +23 -0
- package/dist/src/discovery/adapters/codex.js.map +1 -0
- package/dist/src/discovery/adapters/custom.d.ts +4 -0
- package/dist/src/discovery/adapters/custom.d.ts.map +1 -0
- package/dist/src/discovery/adapters/custom.js +24 -0
- package/dist/src/discovery/adapters/custom.js.map +1 -0
- package/dist/src/discovery/adapters/generic.d.ts +3 -0
- package/dist/src/discovery/adapters/generic.d.ts.map +1 -0
- package/dist/src/discovery/adapters/generic.js +126 -0
- package/dist/src/discovery/adapters/generic.js.map +1 -0
- package/dist/src/discovery/adapters/hermes.d.ts +3 -0
- package/dist/src/discovery/adapters/hermes.d.ts.map +1 -0
- package/dist/src/discovery/adapters/hermes.js +22 -0
- package/dist/src/discovery/adapters/hermes.js.map +1 -0
- package/dist/src/discovery/adapters/openclaw.d.ts +3 -0
- package/dist/src/discovery/adapters/openclaw.d.ts.map +1 -0
- package/dist/src/discovery/adapters/openclaw.js +22 -0
- package/dist/src/discovery/adapters/openclaw.js.map +1 -0
- package/dist/src/discovery/engine.d.ts +17 -0
- package/dist/src/discovery/engine.d.ts.map +1 -0
- package/dist/src/discovery/engine.js +164 -0
- package/dist/src/discovery/engine.js.map +1 -0
- package/dist/src/discovery/evidence.d.ts +29 -0
- package/dist/src/discovery/evidence.d.ts.map +1 -0
- package/dist/src/discovery/evidence.js +2 -0
- package/dist/src/discovery/evidence.js.map +1 -0
- package/dist/src/discovery/index.d.ts +11 -0
- package/dist/src/discovery/index.d.ts.map +1 -0
- package/dist/src/discovery/index.js +11 -0
- package/dist/src/discovery/index.js.map +1 -0
- package/dist/src/discovery/known-agent.d.ts +17 -0
- package/dist/src/discovery/known-agent.d.ts.map +1 -0
- package/dist/src/discovery/known-agent.js +193 -0
- package/dist/src/discovery/known-agent.js.map +1 -0
- package/dist/src/discovery/process-identity.d.ts +19 -0
- package/dist/src/discovery/process-identity.d.ts.map +1 -0
- package/dist/src/discovery/process-identity.js +73 -0
- package/dist/src/discovery/process-identity.js.map +1 -0
- package/dist/src/discovery/system-evidence.d.ts +9 -0
- package/dist/src/discovery/system-evidence.d.ts.map +1 -0
- package/dist/src/discovery/system-evidence.js +270 -0
- package/dist/src/discovery/system-evidence.js.map +1 -0
- package/dist/src/discovery/types.d.ts +21 -0
- package/dist/src/discovery/types.d.ts.map +1 -0
- package/dist/src/discovery/types.js +2 -0
- package/dist/src/discovery/types.js.map +1 -0
- package/dist/src/event-queue.d.ts +32 -0
- package/dist/src/event-queue.d.ts.map +1 -0
- package/dist/src/event-queue.js +125 -0
- package/dist/src/event-queue.js.map +1 -0
- package/dist/src/event-spool.d.ts +19 -0
- package/dist/src/event-spool.d.ts.map +1 -0
- package/dist/src/event-spool.js +350 -0
- package/dist/src/event-spool.js.map +1 -0
- package/dist/src/generated/phigon/v1/action_pb.d.ts +223 -0
- package/dist/src/generated/phigon/v1/action_pb.d.ts.map +1 -0
- package/dist/src/generated/phigon/v1/action_pb.js +96 -0
- package/dist/src/generated/phigon/v1/action_pb.js.map +1 -0
- package/dist/src/generated/phigon/v1/common_pb.d.ts +255 -0
- package/dist/src/generated/phigon/v1/common_pb.d.ts.map +1 -0
- package/dist/src/generated/phigon/v1/common_pb.js +242 -0
- package/dist/src/generated/phigon/v1/common_pb.js.map +1 -0
- package/dist/src/generated/phigon/v1/history_sync_pb.d.ts +119 -0
- package/dist/src/generated/phigon/v1/history_sync_pb.d.ts.map +1 -0
- package/dist/src/generated/phigon/v1/history_sync_pb.js +46 -0
- package/dist/src/generated/phigon/v1/history_sync_pb.js.map +1 -0
- package/dist/src/generated/phigon/v1/identity_pb.d.ts +235 -0
- package/dist/src/generated/phigon/v1/identity_pb.d.ts.map +1 -0
- package/dist/src/generated/phigon/v1/identity_pb.js +31 -0
- package/dist/src/generated/phigon/v1/identity_pb.js.map +1 -0
- package/dist/src/generated/phigon/v1/observer_service_pb.d.ts +362 -0
- package/dist/src/generated/phigon/v1/observer_service_pb.d.ts.map +1 -0
- package/dist/src/generated/phigon/v1/observer_service_pb.js +120 -0
- package/dist/src/generated/phigon/v1/observer_service_pb.js.map +1 -0
- package/dist/src/generated/phigon/v1/policy_pb.d.ts +456 -0
- package/dist/src/generated/phigon/v1/policy_pb.d.ts.map +1 -0
- package/dist/src/generated/phigon/v1/policy_pb.js +161 -0
- package/dist/src/generated/phigon/v1/policy_pb.js.map +1 -0
- package/dist/src/generated/phigon/v1/supervision_pb.d.ts +849 -0
- package/dist/src/generated/phigon/v1/supervision_pb.d.ts.map +1 -0
- package/dist/src/generated/phigon/v1/supervision_pb.js +384 -0
- package/dist/src/generated/phigon/v1/supervision_pb.js.map +1 -0
- package/dist/src/generated/phigon/v1/telemetry_pb.d.ts +761 -0
- package/dist/src/generated/phigon/v1/telemetry_pb.d.ts.map +1 -0
- package/dist/src/generated/phigon/v1/telemetry_pb.js +309 -0
- package/dist/src/generated/phigon/v1/telemetry_pb.js.map +1 -0
- package/dist/src/guardian-containment.d.ts +30 -0
- package/dist/src/guardian-containment.d.ts.map +1 -0
- package/dist/src/guardian-containment.js +113 -0
- package/dist/src/guardian-containment.js.map +1 -0
- package/dist/src/guardian-decision-journal.d.ts +29 -0
- package/dist/src/guardian-decision-journal.d.ts.map +1 -0
- package/dist/src/guardian-decision-journal.js +55 -0
- package/dist/src/guardian-decision-journal.js.map +1 -0
- package/dist/src/guardian-execution-manifest.d.ts +29 -0
- package/dist/src/guardian-execution-manifest.d.ts.map +1 -0
- package/dist/src/guardian-execution-manifest.js +95 -0
- package/dist/src/guardian-execution-manifest.js.map +1 -0
- package/dist/src/guardian-hosted-client.d.ts +10 -0
- package/dist/src/guardian-hosted-client.d.ts.map +1 -0
- package/dist/src/guardian-hosted-client.js +45 -0
- package/dist/src/guardian-hosted-client.js.map +1 -0
- package/dist/src/guardian-managed-exec.d.ts +21 -0
- package/dist/src/guardian-managed-exec.d.ts.map +1 -0
- package/dist/src/guardian-managed-exec.js +249 -0
- package/dist/src/guardian-managed-exec.js.map +1 -0
- package/dist/src/guardian-model-bridge.d.ts +13 -0
- package/dist/src/guardian-model-bridge.d.ts.map +1 -0
- package/dist/src/guardian-model-bridge.js +87 -0
- package/dist/src/guardian-model-bridge.js.map +1 -0
- package/dist/src/guardian-native.d.ts +3 -0
- package/dist/src/guardian-native.d.ts.map +1 -0
- package/dist/src/guardian-native.js +13 -0
- package/dist/src/guardian-native.js.map +1 -0
- package/dist/src/guardian-process-monitor.d.ts +20 -0
- package/dist/src/guardian-process-monitor.d.ts.map +1 -0
- package/dist/src/guardian-process-monitor.js +98 -0
- package/dist/src/guardian-process-monitor.js.map +1 -0
- package/dist/src/health.d.ts +35 -0
- package/dist/src/health.d.ts.map +1 -0
- package/dist/src/health.js +41 -0
- package/dist/src/health.js.map +1 -0
- package/dist/src/historical-identity-store.d.ts +20 -0
- package/dist/src/historical-identity-store.d.ts.map +1 -0
- package/dist/src/historical-identity-store.js +391 -0
- package/dist/src/historical-identity-store.js.map +1 -0
- package/dist/src/index.d.ts +14 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +14 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/installation.d.ts +2 -0
- package/dist/src/installation.d.ts.map +1 -0
- package/dist/src/installation.js +44 -0
- package/dist/src/installation.js.map +1 -0
- package/dist/src/machine-command-executor.d.ts +28 -0
- package/dist/src/machine-command-executor.d.ts.map +1 -0
- package/dist/src/machine-command-executor.js +166 -0
- package/dist/src/machine-command-executor.js.map +1 -0
- package/dist/src/pair.d.ts +21 -0
- package/dist/src/pair.d.ts.map +1 -0
- package/dist/src/pair.js +125 -0
- package/dist/src/pair.js.map +1 -0
- package/dist/src/remove-machine.d.ts +15 -0
- package/dist/src/remove-machine.d.ts.map +1 -0
- package/dist/src/remove-machine.js +77 -0
- package/dist/src/remove-machine.js.map +1 -0
- package/dist/src/stream-client.d.ts +42 -0
- package/dist/src/stream-client.d.ts.map +1 -0
- package/dist/src/stream-client.js +867 -0
- package/dist/src/stream-client.js.map +1 -0
- package/dist/src/stream-state.d.ts +13 -0
- package/dist/src/stream-state.d.ts.map +1 -0
- package/dist/src/stream-state.js +128 -0
- package/dist/src/stream-state.js.map +1 -0
- package/dist/src/windows-process.d.ts +7 -0
- package/dist/src/windows-process.d.ts.map +1 -0
- package/dist/src/windows-process.js +17 -0
- package/dist/src/windows-process.js.map +1 -0
- package/package.json +78 -0
- package/scripts/install.mjs +308 -0
- package/scripts/managed-service.mjs +132 -0
- package/scripts/verify-guardian-release.mjs +42 -0
- package/scripts/windows-app-control.mjs +117 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type AgentInventory } from "../generated/phigon/v1/identity_pb.js";
|
|
2
|
+
import type { HostEvidenceProvider } from "./evidence.js";
|
|
3
|
+
import type { AgentDiscoveryAdapter, DiscoverySnapshot } from "./types.js";
|
|
4
|
+
import type { CustomAgentRegistry } from "../custom-agent-registry.js";
|
|
5
|
+
export type DiscoveryEngineOptions = Readonly<{
|
|
6
|
+
adapters?: readonly AgentDiscoveryAdapter[];
|
|
7
|
+
customAgentRegistry?: CustomAgentRegistry;
|
|
8
|
+
evidenceFactory?: () => HostEvidenceProvider;
|
|
9
|
+
clock?: () => Date;
|
|
10
|
+
}>;
|
|
11
|
+
export declare class DiscoveryEngine {
|
|
12
|
+
#private;
|
|
13
|
+
constructor(options?: DiscoveryEngineOptions);
|
|
14
|
+
discover(machineId?: string): Promise<DiscoverySnapshot>;
|
|
15
|
+
}
|
|
16
|
+
export declare function runDiscoveryLoop(engine: DiscoveryEngine, machineId: string, intervalMs: number, signal: AbortSignal, publish: (inventory: AgentInventory) => void | Promise<void>): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/discovery/engine.ts"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,uCAAuC,CAAC;AAO/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAG1D,OAAO,KAAK,EACV,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAUvE,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC5C,QAAQ,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC5C,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,eAAe,CAAC,EAAE,MAAM,oBAAoB,CAAC;IAC7C,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC,CAAC;AAEH,qBAAa,eAAe;;gBAOd,OAAO,GAAE,sBAA2B;IAY1C,QAAQ,CAAC,SAAS,SAAK,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAgH3D;AA+CD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,CAAC,SAAS,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAC3D,OAAO,CAAC,IAAI,CAAC,CAMf"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { create } from "@bufbuild/protobuf";
|
|
2
|
+
import { timestampDate, timestampFromDate, } from "@bufbuild/protobuf/wkt";
|
|
3
|
+
import { AgentState } from "../generated/phigon/v1/common_pb.js";
|
|
4
|
+
import { AgentIdentitySchema, AgentInventorySchema, } from "../generated/phigon/v1/identity_pb.js";
|
|
5
|
+
import { claudeAdapter } from "./adapters/claude.js";
|
|
6
|
+
import { codexAdapter } from "./adapters/codex.js";
|
|
7
|
+
import { customAgentAdapter } from "./adapters/custom.js";
|
|
8
|
+
import { genericAdapter } from "./adapters/generic.js";
|
|
9
|
+
import { hermesAdapter } from "./adapters/hermes.js";
|
|
10
|
+
import { openClawAdapter } from "./adapters/openclaw.js";
|
|
11
|
+
import { sortAgentIdentities } from "./known-agent.js";
|
|
12
|
+
import { SystemEvidenceProvider } from "./system-evidence.js";
|
|
13
|
+
const defaultAdapters = [
|
|
14
|
+
claudeAdapter,
|
|
15
|
+
codexAdapter,
|
|
16
|
+
hermesAdapter,
|
|
17
|
+
openClawAdapter,
|
|
18
|
+
genericAdapter,
|
|
19
|
+
];
|
|
20
|
+
export class DiscoveryEngine {
|
|
21
|
+
#adapters;
|
|
22
|
+
#evidenceFactory;
|
|
23
|
+
#clock;
|
|
24
|
+
#retainedMachineID;
|
|
25
|
+
#retainedRuntimes = new Map();
|
|
26
|
+
constructor(options = {}) {
|
|
27
|
+
this.#adapters = options.adapters ?? [
|
|
28
|
+
...defaultAdapters,
|
|
29
|
+
...(options.customAgentRegistry === undefined
|
|
30
|
+
? []
|
|
31
|
+
: [customAgentAdapter(options.customAgentRegistry)]),
|
|
32
|
+
];
|
|
33
|
+
this.#evidenceFactory =
|
|
34
|
+
options.evidenceFactory ?? (() => new SystemEvidenceProvider());
|
|
35
|
+
this.#clock = options.clock ?? (() => new Date());
|
|
36
|
+
}
|
|
37
|
+
async discover(machineId = "") {
|
|
38
|
+
const observedAt = this.#clock();
|
|
39
|
+
const evidence = this.#evidenceFactory();
|
|
40
|
+
const results = await Promise.all(this.#adapters.map((adapter) => adapter.discover(evidence, observedAt)));
|
|
41
|
+
const discoveredAgents = results.flatMap((result) => result.agents);
|
|
42
|
+
const conflictingProcessClaims = processClaimConflicts(discoveredAgents);
|
|
43
|
+
const adapterHealth = [
|
|
44
|
+
...results.map((result) => result.health),
|
|
45
|
+
...(conflictingProcessClaims.size === 0
|
|
46
|
+
? []
|
|
47
|
+
: [{
|
|
48
|
+
adapterId: "attribution",
|
|
49
|
+
status: "error",
|
|
50
|
+
notices: [
|
|
51
|
+
`${conflictingProcessClaims.size} process-lifetime ` +
|
|
52
|
+
"claim(s) matched multiple agent identities; affected " +
|
|
53
|
+
"runtimes were not attributed.",
|
|
54
|
+
],
|
|
55
|
+
}]),
|
|
56
|
+
];
|
|
57
|
+
const notices = adapterHealth
|
|
58
|
+
.flatMap((health) => [
|
|
59
|
+
`adapter=${health.adapterId};status=${health.status}`,
|
|
60
|
+
...health.notices,
|
|
61
|
+
])
|
|
62
|
+
.slice(0, 32)
|
|
63
|
+
.map((notice) => notice.slice(0, 256));
|
|
64
|
+
const partial = adapterHealth.some((health) => health.status === "permission_denied" ||
|
|
65
|
+
health.status === "error");
|
|
66
|
+
const currentAgents = sortAgentIdentities(discoveredAgents.filter((agent) => !agent.capabilities.some((capability) => conflictingProcessClaims.has(capability))));
|
|
67
|
+
const agents = this.#retainRuntimeHistory(machineId, currentAgents, !partial);
|
|
68
|
+
const inventory = create(AgentInventorySchema, {
|
|
69
|
+
machineId,
|
|
70
|
+
observedAt: timestampFromDate(observedAt),
|
|
71
|
+
agents,
|
|
72
|
+
partial,
|
|
73
|
+
notices,
|
|
74
|
+
});
|
|
75
|
+
return Object.freeze({ inventory, adapterHealth });
|
|
76
|
+
}
|
|
77
|
+
#retainRuntimeHistory(machineID, currentAgents, coverageComplete) {
|
|
78
|
+
if (this.#retainedMachineID !== undefined &&
|
|
79
|
+
this.#retainedMachineID !== machineID) {
|
|
80
|
+
this.#retainedRuntimes.clear();
|
|
81
|
+
}
|
|
82
|
+
this.#retainedMachineID = machineID;
|
|
83
|
+
const currentByID = new Map(currentAgents.map((agent) => [agent.agentId, agent]));
|
|
84
|
+
for (const agent of currentAgents) {
|
|
85
|
+
if (isRuntimeIdentity(agent)) {
|
|
86
|
+
this.#retainedRuntimes.set(agent.agentId, agent);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
for (const [agentID, prior] of this.#retainedRuntimes) {
|
|
90
|
+
if (currentByID.has(agentID))
|
|
91
|
+
continue;
|
|
92
|
+
this.#retainedRuntimes.set(agentID, create(AgentIdentitySchema, {
|
|
93
|
+
...prior,
|
|
94
|
+
state: coverageComplete
|
|
95
|
+
? AgentState.STOPPED
|
|
96
|
+
: AgentState.UNKNOWN,
|
|
97
|
+
}));
|
|
98
|
+
}
|
|
99
|
+
const runtimes = [...this.#retainedRuntimes.values()].sort(compareRuntimeRetention);
|
|
100
|
+
const runtimeProducts = new Set(runtimes.flatMap((agent) => agentProductCapabilities(agent)));
|
|
101
|
+
const products = currentAgents.filter((agent) => !isRuntimeIdentity(agent) &&
|
|
102
|
+
!agentProductCapabilities(agent).some((capability) => runtimeProducts.has(capability)));
|
|
103
|
+
const selected = [...runtimes, ...products].slice(0, 256);
|
|
104
|
+
const selectedIDs = new Set(selected.map((agent) => agent.agentId));
|
|
105
|
+
for (const agentID of this.#retainedRuntimes.keys()) {
|
|
106
|
+
if (!selectedIDs.has(agentID))
|
|
107
|
+
this.#retainedRuntimes.delete(agentID);
|
|
108
|
+
}
|
|
109
|
+
return sortAgentIdentities(selected);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function processClaimConflicts(agents) {
|
|
113
|
+
const identitiesByClaim = new Map();
|
|
114
|
+
for (const agent of agents) {
|
|
115
|
+
for (const capability of agent.capabilities) {
|
|
116
|
+
if (!capability.startsWith("process-key-sha256:"))
|
|
117
|
+
continue;
|
|
118
|
+
const identities = identitiesByClaim.get(capability) ?? new Set();
|
|
119
|
+
identities.add(agent.agentId);
|
|
120
|
+
identitiesByClaim.set(capability, identities);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return new Set([...identitiesByClaim.entries()]
|
|
124
|
+
.filter(([, identities]) => identities.size > 1)
|
|
125
|
+
.map(([claim]) => claim));
|
|
126
|
+
}
|
|
127
|
+
function isRuntimeIdentity(agent) {
|
|
128
|
+
return agent.capabilities.includes("process-instance");
|
|
129
|
+
}
|
|
130
|
+
function agentProductCapabilities(agent) {
|
|
131
|
+
return agent.capabilities.filter((capability) => capability.startsWith("agent-product:"));
|
|
132
|
+
}
|
|
133
|
+
function compareRuntimeRetention(left, right) {
|
|
134
|
+
const leftRunning = left.state === AgentState.RUNNING ? 1 : 0;
|
|
135
|
+
const rightRunning = right.state === AgentState.RUNNING ? 1 : 0;
|
|
136
|
+
if (leftRunning !== rightRunning)
|
|
137
|
+
return rightRunning - leftRunning;
|
|
138
|
+
const leftObserved = left.lastObservedAt === undefined
|
|
139
|
+
? 0
|
|
140
|
+
: timestampDate(left.lastObservedAt).getTime();
|
|
141
|
+
const rightObserved = right.lastObservedAt === undefined
|
|
142
|
+
? 0
|
|
143
|
+
: timestampDate(right.lastObservedAt).getTime();
|
|
144
|
+
return rightObserved - leftObserved || left.agentId.localeCompare(right.agentId);
|
|
145
|
+
}
|
|
146
|
+
export async function runDiscoveryLoop(engine, machineId, intervalMs, signal, publish) {
|
|
147
|
+
while (!signal.aborted) {
|
|
148
|
+
const snapshot = await engine.discover(machineId);
|
|
149
|
+
await publish(snapshot.inventory);
|
|
150
|
+
await abortableDelay(intervalMs, signal);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
async function abortableDelay(milliseconds, signal) {
|
|
154
|
+
if (signal.aborted)
|
|
155
|
+
return;
|
|
156
|
+
await new Promise((resolve) => {
|
|
157
|
+
const timeout = setTimeout(resolve, milliseconds);
|
|
158
|
+
signal.addEventListener("abort", () => {
|
|
159
|
+
clearTimeout(timeout);
|
|
160
|
+
resolve();
|
|
161
|
+
}, { once: true });
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/discovery/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EACL,aAAa,EACb,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,EACL,mBAAmB,EACnB,oBAAoB,GAGrB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAO9D,MAAM,eAAe,GAAqC;IACxD,aAAa;IACb,YAAY;IACZ,aAAa;IACb,eAAe;IACf,cAAc;CACf,CAAC;AASF,MAAM,OAAO,eAAe;IACjB,SAAS,CAAmC;IAC5C,gBAAgB,CAA6B;IAC7C,MAAM,CAAa;IAC5B,kBAAkB,CAAqB;IAC9B,iBAAiB,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE9D,YAAY,UAAkC,EAAE;QAC9C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,IAAI;YACnC,GAAG,eAAe;YAClB,GAAG,CAAC,OAAO,CAAC,mBAAmB,KAAK,SAAS;gBAC3C,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;SACvD,CAAC;QACF,IAAI,CAAC,gBAAgB;YACnB,OAAO,CAAC,eAAe,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAAS,GAAG,EAAE;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CACvC,CACF,CAAC;QACF,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpE,MAAM,wBAAwB,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;QACzE,MAAM,aAAa,GAAG;YACpB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;YACzC,GAAG,CAAC,wBAAwB,CAAC,IAAI,KAAK,CAAC;gBACrC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,CAAC;wBACC,SAAS,EAAE,aAAa;wBACxB,MAAM,EAAE,OAAgB;wBACxB,OAAO,EAAE;4BACP,GAAG,wBAAwB,CAAC,IAAI,oBAAoB;gCACpD,uDAAuD;gCACvD,+BAA+B;yBAChC;qBACF,CAAC,CAAC;SACR,CAAC;QACF,MAAM,OAAO,GAAG,aAAa;aAC1B,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YACnB,WAAW,MAAM,CAAC,SAAS,WAAW,MAAM,CAAC,MAAM,EAAE;YACrD,GAAG,MAAM,CAAC,OAAO;SAClB,CAAC;aACD,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;aACZ,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAChC,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,MAAM,KAAK,mBAAmB;YACrC,MAAM,CAAC,MAAM,KAAK,OAAO,CAC5B,CAAC;QACF,MAAM,aAAa,GAAG,mBAAmB,CACvC,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAChC,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CACtC,wBAAwB,CAAC,GAAG,CAAC,UAAU,CAAC,CACzC,CACF,CACF,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CACvC,SAAS,EACT,aAAa,EACb,CAAC,OAAO,CACT,CAAC;QACF,MAAM,SAAS,GAAmB,MAAM,CAAC,oBAAoB,EAAE;YAC7D,SAAS;YACT,UAAU,EAAE,iBAAiB,CAAC,UAAU,CAAC;YACzC,MAAM;YACN,OAAO;YACP,OAAO;SACR,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,qBAAqB,CACnB,SAAiB,EACjB,aAAuC,EACvC,gBAAyB;QAEzB,IACE,IAAI,CAAC,kBAAkB,KAAK,SAAS;YACrC,IAAI,CAAC,kBAAkB,KAAK,SAAS,EACrC,CAAC;YACD,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;QAEpC,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CACrD,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACtD,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,SAAS;YACvC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CACxB,OAAO,EACP,MAAM,CAAC,mBAAmB,EAAE;gBAC1B,GAAG,KAAK;gBACR,KAAK,EAAE,gBAAgB;oBACrB,CAAC,CAAC,UAAU,CAAC,OAAO;oBACpB,CAAC,CAAC,UAAU,CAAC,OAAO;aACvB,CAAC,CACH,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CACxD,uBAAuB,CACxB,CAAC;QACF,MAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAC7D,CAAC;QACF,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CACnC,CAAC,KAAK,EAAE,EAAE,CACR,CAAC,iBAAiB,CAAC,KAAK,CAAC;YACzB,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CACnD,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAChC,CACJ,CAAC;QACF,MAAM,QAAQ,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACpE,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC;YACpD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;CACF;AAED,SAAS,qBAAqB,CAC5B,MAAgC;IAEhC,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAuB,CAAC;IACzD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YAC5C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,qBAAqB,CAAC;gBAAE,SAAS;YAC5D,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;YAClE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9B,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,GAAG,CACZ,CAAC,GAAG,iBAAiB,CAAC,OAAO,EAAE,CAAC;SAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;SAC/C,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAC3B,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAoB;IAC7C,OAAO,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAoB;IACpD,OAAO,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAC9C,UAAU,CAAC,UAAU,CAAC,gBAAgB,CAAC,CACxC,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,IAAmB,EACnB,KAAoB;IAEpB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,IAAI,WAAW,KAAK,YAAY;QAAE,OAAO,YAAY,GAAG,WAAW,CAAC;IACpE,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,KAAK,SAAS;QACpD,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,CAAC;IACjD,MAAM,aAAa,GAAG,KAAK,CAAC,cAAc,KAAK,SAAS;QACtD,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,CAAC;IAClD,OAAO,aAAa,GAAG,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAuB,EACvB,SAAiB,EACjB,UAAkB,EAClB,MAAmB,EACnB,OAA4D;IAE5D,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,YAAoB,EACpB,MAAmB;IAEnB,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO;IAC3B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAClD,MAAM,CAAC,gBAAgB,CACrB,OAAO,EACP,GAAG,EAAE;YACH,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,EAAE,CAAC;QACZ,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type ProbeStatus = "ok" | "permission_denied" | "unknown";
|
|
2
|
+
export type ProbeResult<T> = Readonly<{
|
|
3
|
+
status: "ok";
|
|
4
|
+
value: T;
|
|
5
|
+
}> | Readonly<{
|
|
6
|
+
status: "permission_denied" | "unknown";
|
|
7
|
+
notice: string;
|
|
8
|
+
}>;
|
|
9
|
+
export type ProcessEvidence = Readonly<{
|
|
10
|
+
processKey: string;
|
|
11
|
+
processId: number;
|
|
12
|
+
startedAt: Date;
|
|
13
|
+
executableName: string;
|
|
14
|
+
executablePathDigest: string;
|
|
15
|
+
}>;
|
|
16
|
+
export type ExecutableEvidence = Readonly<{
|
|
17
|
+
executableName: string;
|
|
18
|
+
executablePathDigest: string;
|
|
19
|
+
version: string;
|
|
20
|
+
}>;
|
|
21
|
+
export type ConfigurationEvidence = Readonly<{
|
|
22
|
+
identifierDigest: string;
|
|
23
|
+
}>;
|
|
24
|
+
export interface HostEvidenceProvider {
|
|
25
|
+
listProcesses(): Promise<ProbeResult<readonly ProcessEvidence[]>>;
|
|
26
|
+
inspectExecutable(candidates: readonly string[]): Promise<ProbeResult<ExecutableEvidence | null>>;
|
|
27
|
+
inspectConfiguration(candidates: readonly string[]): Promise<ProbeResult<readonly ConfigurationEvidence[]>>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=evidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../../src/discovery/evidence.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,mBAAmB,GAAG,SAAS,CAAC;AAEjE,MAAM,MAAM,WAAW,CAAC,CAAC,IACrB,QAAQ,CAAC;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC,GACpC,QAAQ,CAAC;IACP,MAAM,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEP,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IAGrC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC,CAAC;AAEH,MAAM,WAAW,oBAAoB;IACnC,aAAa,IAAI,OAAO,CAAC,WAAW,CAAC,SAAS,eAAe,EAAE,CAAC,CAAC,CAAC;IAClE,iBAAiB,CACf,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,OAAO,CAAC,WAAW,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC,CAAC;IACnD,oBAAoB,CAClB,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,OAAO,CAAC,WAAW,CAAC,SAAS,qBAAqB,EAAE,CAAC,CAAC,CAAC;CAC3D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../../src/discovery/evidence.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from "./engine.js";
|
|
2
|
+
export * from "./evidence.js";
|
|
3
|
+
export * from "./system-evidence.js";
|
|
4
|
+
export * from "./types.js";
|
|
5
|
+
export { claudeAdapter } from "./adapters/claude.js";
|
|
6
|
+
export { codexAdapter } from "./adapters/codex.js";
|
|
7
|
+
export { customAgentAdapter } from "./adapters/custom.js";
|
|
8
|
+
export { genericAdapter } from "./adapters/generic.js";
|
|
9
|
+
export { hermesAdapter } from "./adapters/hermes.js";
|
|
10
|
+
export { openClawAdapter } from "./adapters/openclaw.js";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/discovery/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from "./engine.js";
|
|
2
|
+
export * from "./evidence.js";
|
|
3
|
+
export * from "./system-evidence.js";
|
|
4
|
+
export * from "./types.js";
|
|
5
|
+
export { claudeAdapter } from "./adapters/claude.js";
|
|
6
|
+
export { codexAdapter } from "./adapters/codex.js";
|
|
7
|
+
export { customAgentAdapter } from "./adapters/custom.js";
|
|
8
|
+
export { genericAdapter } from "./adapters/generic.js";
|
|
9
|
+
export { hermesAdapter } from "./adapters/hermes.js";
|
|
10
|
+
export { openClawAdapter } from "./adapters/openclaw.js";
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/discovery/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type AgentKind } from "../generated/phigon/v1/common_pb.js";
|
|
2
|
+
import { type AgentIdentity } from "../generated/phigon/v1/identity_pb.js";
|
|
3
|
+
import type { HostEvidenceProvider } from "./evidence.js";
|
|
4
|
+
import type { AdapterResult } from "./types.js";
|
|
5
|
+
export type KnownAgentSpec = Readonly<{
|
|
6
|
+
id: string;
|
|
7
|
+
kind: AgentKind;
|
|
8
|
+
displayName: string;
|
|
9
|
+
executableNames: readonly string[];
|
|
10
|
+
processNames: readonly string[];
|
|
11
|
+
configurationPaths: readonly string[];
|
|
12
|
+
capabilities: readonly string[];
|
|
13
|
+
}>;
|
|
14
|
+
export declare function discoverKnownAgent(spec: KnownAgentSpec, evidence: HostEvidenceProvider, observedAt: Date): Promise<AdapterResult>;
|
|
15
|
+
export declare function combineAdapterResults(adapterId: string, results: readonly AdapterResult[]): AdapterResult;
|
|
16
|
+
export declare function sortAgentIdentities(agents: readonly AgentIdentity[]): AgentIdentity[];
|
|
17
|
+
//# sourceMappingURL=known-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"known-agent.d.ts","sourceRoot":"","sources":["../../../src/discovery/known-agent.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,SAAS,EACf,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EACV,oBAAoB,EAGrB,MAAM,eAAe,CAAC;AAMvB,OAAO,KAAK,EAEV,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC,CAAC,CAAC;AAEH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE,oBAAoB,EAC9B,UAAU,EAAE,IAAI,GACf,OAAO,CAAC,aAAa,CAAC,CA8IxB;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,SAAS,aAAa,EAAE,GAChC,aAAa,CAkBf;AA6DD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,aAAa,EAAE,GAC/B,aAAa,EAAE,CAIjB"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { create } from "@bufbuild/protobuf";
|
|
3
|
+
import { timestampFromDate } from "@bufbuild/protobuf/wkt";
|
|
4
|
+
import { AgentState, } from "../generated/phigon/v1/common_pb.js";
|
|
5
|
+
import { AgentIdentitySchema, } from "../generated/phigon/v1/identity_pb.js";
|
|
6
|
+
import { normalizedProcessKey, processKeyCapability, stableRuntimeAgentID, } from "./process-identity.js";
|
|
7
|
+
export async function discoverKnownAgent(spec, evidence, observedAt) {
|
|
8
|
+
// Finish the passive process snapshot before launching a bounded
|
|
9
|
+
// `--version` probe so discovery never observes its own child process.
|
|
10
|
+
const processProbe = await evidence.listProcesses();
|
|
11
|
+
const [executableProbe, configurationProbe] = await Promise.all([
|
|
12
|
+
evidence.inspectExecutable(spec.executableNames),
|
|
13
|
+
evidence.inspectConfiguration(spec.configurationPaths),
|
|
14
|
+
]);
|
|
15
|
+
const notices = [];
|
|
16
|
+
collectProbeNotice(processProbe, notices);
|
|
17
|
+
collectProbeNotice(executableProbe, notices);
|
|
18
|
+
collectProbeNotice(configurationProbe, notices);
|
|
19
|
+
const processMatches = processProbe.status === "ok"
|
|
20
|
+
? processProbe.value
|
|
21
|
+
.filter((process) => spec.processNames.includes(process.executableName))
|
|
22
|
+
.sort((left, right) => left.processId - right.processId)
|
|
23
|
+
: [];
|
|
24
|
+
const processKeyCounts = new Map();
|
|
25
|
+
for (const process of processMatches) {
|
|
26
|
+
const processKey = normalizedProcessKey(process.processKey);
|
|
27
|
+
if (processKey !== undefined) {
|
|
28
|
+
processKeyCounts.set(processKey, (processKeyCounts.get(processKey) ?? 0) + 1);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const runtimeMatches = processMatches.filter((process) => {
|
|
32
|
+
const processKey = normalizedProcessKey(process.processKey);
|
|
33
|
+
return (processKey !== undefined &&
|
|
34
|
+
processKeyCounts.get(processKey) === 1 &&
|
|
35
|
+
Number.isSafeInteger(process.processId) &&
|
|
36
|
+
process.processId > 0 &&
|
|
37
|
+
process.startedAt instanceof Date &&
|
|
38
|
+
!Number.isNaN(process.startedAt.getTime()) &&
|
|
39
|
+
process.startedAt.getTime() <= observedAt.getTime() + 5 * 60_000);
|
|
40
|
+
});
|
|
41
|
+
const processEvidenceIncomplete = runtimeMatches.length !== processMatches.length;
|
|
42
|
+
const executable = executableProbe.status === "ok" ? executableProbe.value : null;
|
|
43
|
+
const configurations = configurationProbe.status === "ok"
|
|
44
|
+
? configurationProbe.value
|
|
45
|
+
: [];
|
|
46
|
+
const detected = processMatches.length > 0 ||
|
|
47
|
+
executable !== null ||
|
|
48
|
+
configurations.length > 0;
|
|
49
|
+
if (!detected) {
|
|
50
|
+
return {
|
|
51
|
+
agents: [],
|
|
52
|
+
health: health(spec.id, [
|
|
53
|
+
processProbe,
|
|
54
|
+
executableProbe,
|
|
55
|
+
configurationProbe,
|
|
56
|
+
], notices),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
if (executable !== null && executable.version.length === 0) {
|
|
60
|
+
notices.push(`${spec.displayName} version is unknown.`);
|
|
61
|
+
}
|
|
62
|
+
if (processEvidenceIncomplete) {
|
|
63
|
+
notices.push(`${spec.displayName} process-lifetime evidence was incomplete; ` +
|
|
64
|
+
"affected runtimes were not attributed.");
|
|
65
|
+
}
|
|
66
|
+
const processMatch = processMatches[0];
|
|
67
|
+
const state = agentState(runtimeMatches[0], executable !== null, configurations.length > 0, [processProbe, executableProbe, configurationProbe]);
|
|
68
|
+
const executablePathDigest = executable?.executablePathDigest ??
|
|
69
|
+
configurations[0]?.identifierDigest ??
|
|
70
|
+
processMatch?.executablePathDigest ??
|
|
71
|
+
"";
|
|
72
|
+
const productCapability = `agent-product:${spec.id}`;
|
|
73
|
+
const processIdentities = runtimeMatches.flatMap((process) => {
|
|
74
|
+
const agentID = stableRuntimeAgentID(spec.id, process.processKey);
|
|
75
|
+
const keyCapability = processKeyCapability(process.processKey);
|
|
76
|
+
if (agentID === undefined || keyCapability === undefined)
|
|
77
|
+
return [];
|
|
78
|
+
return [create(AgentIdentitySchema, {
|
|
79
|
+
agentId: agentID,
|
|
80
|
+
kind: spec.kind,
|
|
81
|
+
displayName: `${spec.displayName} · PID ${process.processId}`,
|
|
82
|
+
version: executable?.version ?? "",
|
|
83
|
+
runtime: "",
|
|
84
|
+
state: AgentState.RUNNING,
|
|
85
|
+
processId: BigInt(process.processId),
|
|
86
|
+
startedAt: timestampFromDate(process.startedAt),
|
|
87
|
+
lastObservedAt: timestampFromDate(observedAt),
|
|
88
|
+
capabilities: [
|
|
89
|
+
...new Set([
|
|
90
|
+
...spec.capabilities,
|
|
91
|
+
productCapability,
|
|
92
|
+
"process-instance",
|
|
93
|
+
keyCapability,
|
|
94
|
+
]),
|
|
95
|
+
].sort(),
|
|
96
|
+
executablePathDigest: process.executablePathDigest || executablePathDigest,
|
|
97
|
+
})];
|
|
98
|
+
});
|
|
99
|
+
const productIdentity = processIdentities.length === 0
|
|
100
|
+
? [create(AgentIdentitySchema, {
|
|
101
|
+
agentId: stableAgentID(spec.id, executablePathDigest),
|
|
102
|
+
kind: spec.kind,
|
|
103
|
+
displayName: spec.displayName,
|
|
104
|
+
version: executable?.version ?? "",
|
|
105
|
+
runtime: "",
|
|
106
|
+
state: processMatches.length > 0 ? AgentState.UNKNOWN : state,
|
|
107
|
+
processId: 0n,
|
|
108
|
+
lastObservedAt: timestampFromDate(observedAt),
|
|
109
|
+
capabilities: [...spec.capabilities, productCapability].sort(),
|
|
110
|
+
executablePathDigest,
|
|
111
|
+
})]
|
|
112
|
+
: [];
|
|
113
|
+
const measuredHealth = health(spec.id, [processProbe, executableProbe, configurationProbe], notices);
|
|
114
|
+
const adapterHealth = processEvidenceIncomplete
|
|
115
|
+
? { ...measuredHealth, status: "error" }
|
|
116
|
+
: measuredHealth;
|
|
117
|
+
return {
|
|
118
|
+
agents: [...productIdentity, ...processIdentities],
|
|
119
|
+
health: adapterHealth,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
export function combineAdapterResults(adapterId, results) {
|
|
123
|
+
const notices = results.flatMap((result) => result.health.notices);
|
|
124
|
+
const statuses = results.map((result) => result.health.status);
|
|
125
|
+
let status = "healthy";
|
|
126
|
+
if (statuses.includes("error"))
|
|
127
|
+
status = "error";
|
|
128
|
+
else if (statuses.includes("permission_denied")) {
|
|
129
|
+
status = "permission_denied";
|
|
130
|
+
}
|
|
131
|
+
else if (statuses.includes("degraded")) {
|
|
132
|
+
status = "degraded";
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
agents: results.flatMap((result) => result.agents),
|
|
136
|
+
health: {
|
|
137
|
+
adapterId,
|
|
138
|
+
status,
|
|
139
|
+
notices: notices.slice(0, 32),
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
function agentState(process, hasExecutable, hasConfiguration, probes) {
|
|
144
|
+
if (process !== undefined)
|
|
145
|
+
return AgentState.RUNNING;
|
|
146
|
+
if (probes.some((probe) => probe.status === "permission_denied")) {
|
|
147
|
+
return AgentState.PERMISSION_DENIED;
|
|
148
|
+
}
|
|
149
|
+
if (probes.some((probe) => probe.status === "unknown")) {
|
|
150
|
+
return AgentState.UNKNOWN;
|
|
151
|
+
}
|
|
152
|
+
if (hasExecutable)
|
|
153
|
+
return AgentState.STOPPED;
|
|
154
|
+
if (hasConfiguration)
|
|
155
|
+
return AgentState.INSTALLED;
|
|
156
|
+
return AgentState.UNKNOWN;
|
|
157
|
+
}
|
|
158
|
+
function health(adapterId, probes, notices) {
|
|
159
|
+
let status = "healthy";
|
|
160
|
+
if (probes.some((probe) => probe.status === "unknown")) {
|
|
161
|
+
status = "error";
|
|
162
|
+
}
|
|
163
|
+
else if (probes.some((probe) => probe.status === "permission_denied")) {
|
|
164
|
+
status = "permission_denied";
|
|
165
|
+
}
|
|
166
|
+
else if (notices.length > 0) {
|
|
167
|
+
status = "degraded";
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
adapterId,
|
|
171
|
+
status,
|
|
172
|
+
notices: notices.slice(0, 32),
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
function collectProbeNotice(probe, notices) {
|
|
176
|
+
if (probe.status !== "ok")
|
|
177
|
+
notices.push(probe.notice.slice(0, 256));
|
|
178
|
+
}
|
|
179
|
+
function stableAgentID(adapterID, evidenceDigest) {
|
|
180
|
+
const digest = createHash("sha256")
|
|
181
|
+
.update("phigon-agent-v1")
|
|
182
|
+
.update("\0")
|
|
183
|
+
.update(adapterID)
|
|
184
|
+
.update("\0")
|
|
185
|
+
.update(evidenceDigest)
|
|
186
|
+
.digest("hex")
|
|
187
|
+
.slice(0, 32);
|
|
188
|
+
return `agt_${digest}`;
|
|
189
|
+
}
|
|
190
|
+
export function sortAgentIdentities(agents) {
|
|
191
|
+
return [...agents].sort((left, right) => left.agentId.localeCompare(right.agentId));
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=known-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"known-agent.js","sourceRoot":"","sources":["../../../src/discovery/known-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Accepts only opaque, bounded process-lifetime keys. Raw native start
|
|
3
|
+
* material never leaves the local evidence provider.
|
|
4
|
+
*/
|
|
5
|
+
export declare function normalizedProcessKey(value: unknown): string | undefined;
|
|
6
|
+
/**
|
|
7
|
+
* Inventory carries only a short fingerprint of the process key. This lets
|
|
8
|
+
* activity claims be compared with OS evidence without exposing native
|
|
9
|
+
* process-lifetime material or treating a PID as identity.
|
|
10
|
+
*/
|
|
11
|
+
export declare function processKeyCapability(processKey: unknown): string | undefined;
|
|
12
|
+
export declare function stableRuntimeAgentID(adapterID: string, processKey: unknown): string | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Converts complete local process-lifetime evidence into an opaque key. The
|
|
15
|
+
* start identity, not the PID, prevents a reused PID from inheriting an old
|
|
16
|
+
* runtime identity.
|
|
17
|
+
*/
|
|
18
|
+
export declare function observedProcessKey(platform: NodeJS.Platform, processID: number, nativeStartIdentity: string, executablePathDigest: string): string | undefined;
|
|
19
|
+
//# sourceMappingURL=process-identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-identity.d.ts","sourceRoot":"","sources":["../../../src/discovery/process-identity.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAWvE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,OAAO,GAClB,MAAM,GAAG,SAAS,CAQpB;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,OAAO,GAClB,MAAM,GAAG,SAAS,CAWpB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,SAAS,EAAE,MAAM,EACjB,mBAAmB,EAAE,MAAM,EAC3B,oBAAoB,EAAE,MAAM,GAC3B,MAAM,GAAG,SAAS,CAuBpB"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
const maxProcessKeyBytes = 256;
|
|
3
|
+
const processKeyCapabilityPrefix = "process-key-sha256:";
|
|
4
|
+
/**
|
|
5
|
+
* Accepts only opaque, bounded process-lifetime keys. Raw native start
|
|
6
|
+
* material never leaves the local evidence provider.
|
|
7
|
+
*/
|
|
8
|
+
export function normalizedProcessKey(value) {
|
|
9
|
+
if (typeof value !== "string" ||
|
|
10
|
+
value.length === 0 ||
|
|
11
|
+
value !== value.trim() ||
|
|
12
|
+
Buffer.byteLength(value, "utf8") > maxProcessKeyBytes ||
|
|
13
|
+
/[\u0000-\u001f\u007f]/u.test(value)) {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Inventory carries only a short fingerprint of the process key. This lets
|
|
20
|
+
* activity claims be compared with OS evidence without exposing native
|
|
21
|
+
* process-lifetime material or treating a PID as identity.
|
|
22
|
+
*/
|
|
23
|
+
export function processKeyCapability(processKey) {
|
|
24
|
+
const normalized = normalizedProcessKey(processKey);
|
|
25
|
+
if (normalized === undefined)
|
|
26
|
+
return undefined;
|
|
27
|
+
return `${processKeyCapabilityPrefix}${createHash("sha256")
|
|
28
|
+
.update("phigon-process-key-capability-v1\0")
|
|
29
|
+
.update(normalized)
|
|
30
|
+
.digest("hex")
|
|
31
|
+
.slice(0, 32)}`;
|
|
32
|
+
}
|
|
33
|
+
export function stableRuntimeAgentID(adapterID, processKey) {
|
|
34
|
+
const normalized = normalizedProcessKey(processKey);
|
|
35
|
+
if (normalized === undefined || adapterID.length === 0)
|
|
36
|
+
return undefined;
|
|
37
|
+
const digest = createHash("sha256")
|
|
38
|
+
.update("phigon-agent-process-v2\0")
|
|
39
|
+
.update(adapterID)
|
|
40
|
+
.update("\0")
|
|
41
|
+
.update(normalized)
|
|
42
|
+
.digest("hex")
|
|
43
|
+
.slice(0, 32);
|
|
44
|
+
return `agt_${digest}`;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Converts complete local process-lifetime evidence into an opaque key. The
|
|
48
|
+
* start identity, not the PID, prevents a reused PID from inheriting an old
|
|
49
|
+
* runtime identity.
|
|
50
|
+
*/
|
|
51
|
+
export function observedProcessKey(platform, processID, nativeStartIdentity, executablePathDigest) {
|
|
52
|
+
if (!Number.isSafeInteger(processID) ||
|
|
53
|
+
processID < 1 ||
|
|
54
|
+
nativeStartIdentity.length === 0 ||
|
|
55
|
+
executablePathDigest.length === 0) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
const hash = createHash("sha256");
|
|
59
|
+
hash.update("phigon-observer-process-key-v1\0");
|
|
60
|
+
for (const value of [
|
|
61
|
+
platform,
|
|
62
|
+
String(processID),
|
|
63
|
+
nativeStartIdentity,
|
|
64
|
+
executablePathDigest,
|
|
65
|
+
]) {
|
|
66
|
+
hash.update(String(Buffer.byteLength(value, "utf8")));
|
|
67
|
+
hash.update(":");
|
|
68
|
+
hash.update(value);
|
|
69
|
+
hash.update("\0");
|
|
70
|
+
}
|
|
71
|
+
return `prc_${hash.digest("hex")}`;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=process-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-identity.js","sourceRoot":"","sources":["../../../src/discovery/process-identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,0BAA0B,GAAG,qBAAqB,CAAC;AAEzD;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,MAAM,KAAK,CAAC;QAClB,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE;QACtB,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,kBAAkB;QACrD,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,EACpC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAmB;IAEnB,MAAM,UAAU,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACpD,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC/C,OAAO,GAAG,0BAA0B,GAAG,UAAU,CAAC,QAAQ,CAAC;SACxD,MAAM,CAAC,oCAAoC,CAAC;SAC5C,MAAM,CAAC,UAAU,CAAC;SAClB,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,SAAiB,EACjB,UAAmB;IAEnB,MAAM,UAAU,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACpD,IAAI,UAAU,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACzE,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC;SAChC,MAAM,CAAC,2BAA2B,CAAC;SACnC,MAAM,CAAC,SAAS,CAAC;SACjB,MAAM,CAAC,IAAI,CAAC;SACZ,MAAM,CAAC,UAAU,CAAC;SAClB,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,OAAO,OAAO,MAAM,EAAE,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAyB,EACzB,SAAiB,EACjB,mBAA2B,EAC3B,oBAA4B;IAE5B,IACE,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC;QAChC,SAAS,GAAG,CAAC;QACb,mBAAmB,CAAC,MAAM,KAAK,CAAC;QAChC,oBAAoB,CAAC,MAAM,KAAK,CAAC,EACjC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;IAChD,KAAK,MAAM,KAAK,IAAI;QAClB,QAAQ;QACR,MAAM,CAAC,SAAS,CAAC;QACjB,mBAAmB;QACnB,oBAAoB;KACrB,EAAE,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ConfigurationEvidence, ExecutableEvidence, HostEvidenceProvider, ProbeResult, ProcessEvidence } from "./evidence.js";
|
|
2
|
+
export declare class SystemEvidenceProvider implements HostEvidenceProvider {
|
|
3
|
+
#private;
|
|
4
|
+
constructor(platform?: NodeJS.Platform, environment?: NodeJS.ProcessEnv);
|
|
5
|
+
listProcesses(): Promise<ProbeResult<readonly ProcessEvidence[]>>;
|
|
6
|
+
inspectExecutable(candidates: readonly string[]): Promise<ProbeResult<ExecutableEvidence | null>>;
|
|
7
|
+
inspectConfiguration(candidates: readonly string[]): Promise<ProbeResult<readonly ConfigurationEvidence[]>>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=system-evidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-evidence.d.ts","sourceRoot":"","sources":["../../../src/discovery/system-evidence.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,WAAW,EACX,eAAe,EAChB,MAAM,eAAe,CAAC;AAQvB,qBAAa,sBAAuB,YAAW,oBAAoB;;gBAQ/D,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,WAAW,GAAE,MAAM,CAAC,UAAwB;IAM9C,aAAa,IAAI,OAAO,CAAC,WAAW,CAAC,SAAS,eAAe,EAAE,CAAC,CAAC;IAK3D,iBAAiB,CACrB,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,OAAO,CAAC,WAAW,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IA4B5C,oBAAoB,CACxB,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,OAAO,CAAC,WAAW,CAAC,SAAS,qBAAqB,EAAE,CAAC,CAAC;CAuH1D"}
|