@panorama-ai/gateway 2.29.14 → 2.30.176
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 +167 -10
- package/dist/child-process-env.d.ts.map +1 -1
- package/dist/child-process-env.js +1 -0
- package/dist/child-process-env.js.map +1 -1
- package/dist/cli-args.d.ts +11 -0
- package/dist/cli-args.d.ts.map +1 -0
- package/dist/cli-args.js +72 -0
- package/dist/cli-args.js.map +1 -0
- package/dist/cli-command-discovery.d.ts +17 -0
- package/dist/cli-command-discovery.d.ts.map +1 -0
- package/dist/cli-command-discovery.js +229 -0
- package/dist/cli-command-discovery.js.map +1 -0
- package/dist/cli-env.d.ts +7 -0
- package/dist/cli-env.d.ts.map +1 -0
- package/dist/cli-env.js +82 -0
- package/dist/cli-env.js.map +1 -0
- package/dist/cli-output.d.ts +23 -0
- package/dist/cli-output.d.ts.map +1 -0
- package/dist/cli-output.js +86 -0
- package/dist/cli-output.js.map +1 -0
- package/dist/cli-provider-commands.d.ts +59 -0
- package/dist/cli-provider-commands.d.ts.map +1 -0
- package/dist/cli-provider-commands.js +157 -0
- package/dist/cli-provider-commands.js.map +1 -0
- package/dist/cli-providers/claude.d.ts.map +1 -1
- package/dist/cli-providers/claude.js +11 -110
- package/dist/cli-providers/claude.js.map +1 -1
- package/dist/cli-providers/codex.d.ts.map +1 -1
- package/dist/cli-providers/codex.js +13 -53
- package/dist/cli-providers/codex.js.map +1 -1
- package/dist/cli-providers/gemini.d.ts.map +1 -1
- package/dist/cli-providers/gemini.js +18 -88
- package/dist/cli-providers/gemini.js.map +1 -1
- package/dist/cli-providers/types.d.ts +3 -1
- package/dist/cli-providers/types.d.ts.map +1 -1
- package/dist/cli-providers/types.js.map +1 -1
- package/dist/database.types.d.ts +4169 -725
- package/dist/database.types.d.ts.map +1 -1
- package/dist/database.types.js.map +1 -1
- package/dist/debug-redaction.d.ts +11 -0
- package/dist/debug-redaction.d.ts.map +1 -1
- package/dist/debug-redaction.js +33 -4
- package/dist/debug-redaction.js.map +1 -1
- package/dist/finalize-subagent-run.d.ts +28 -0
- package/dist/finalize-subagent-run.d.ts.map +1 -0
- package/dist/finalize-subagent-run.js +34 -0
- package/dist/finalize-subagent-run.js.map +1 -0
- package/dist/gateway-capability-services.d.ts +10 -0
- package/dist/gateway-capability-services.d.ts.map +1 -0
- package/dist/gateway-capability-services.js +40 -0
- package/dist/gateway-capability-services.js.map +1 -0
- package/dist/gateway-cli-commands.d.ts +25 -0
- package/dist/gateway-cli-commands.d.ts.map +1 -0
- package/dist/gateway-cli-commands.js +202 -0
- package/dist/gateway-cli-commands.js.map +1 -0
- package/dist/gateway-command-runner.d.ts +48 -0
- package/dist/gateway-command-runner.d.ts.map +1 -0
- package/dist/gateway-command-runner.js +154 -0
- package/dist/gateway-command-runner.js.map +1 -0
- package/dist/gateway-control-plane.d.ts +44 -0
- package/dist/gateway-control-plane.d.ts.map +1 -0
- package/dist/gateway-control-plane.js +147 -0
- package/dist/gateway-control-plane.js.map +1 -0
- package/dist/gateway-daemon.d.ts +41 -0
- package/dist/gateway-daemon.d.ts.map +1 -0
- package/dist/gateway-daemon.js +69 -0
- package/dist/gateway-daemon.js.map +1 -0
- package/dist/gateway-doctor.d.ts +45 -0
- package/dist/gateway-doctor.d.ts.map +1 -0
- package/dist/gateway-doctor.js +81 -0
- package/dist/gateway-doctor.js.map +1 -0
- package/dist/gateway-execution-support.d.ts +56 -0
- package/dist/gateway-execution-support.d.ts.map +1 -0
- package/dist/gateway-execution-support.js +135 -0
- package/dist/gateway-execution-support.js.map +1 -0
- package/dist/gateway-job-controller.d.ts +68 -0
- package/dist/gateway-job-controller.d.ts.map +1 -0
- package/dist/gateway-job-controller.js +266 -0
- package/dist/gateway-job-controller.js.map +1 -0
- package/dist/gateway-job-handlers.d.ts +76 -0
- package/dist/gateway-job-handlers.d.ts.map +1 -0
- package/dist/gateway-job-handlers.js +235 -0
- package/dist/gateway-job-handlers.js.map +1 -0
- package/dist/gateway-job-processor.d.ts +24 -0
- package/dist/gateway-job-processor.d.ts.map +1 -0
- package/dist/gateway-job-processor.js +90 -0
- package/dist/gateway-job-processor.js.map +1 -0
- package/dist/gateway-job-store.d.ts +13 -0
- package/dist/gateway-job-store.d.ts.map +1 -0
- package/dist/gateway-job-store.js +106 -0
- package/dist/gateway-job-store.js.map +1 -0
- package/dist/gateway-jobs.d.ts +31 -0
- package/dist/gateway-jobs.d.ts.map +1 -0
- package/dist/gateway-jobs.js +52 -0
- package/dist/gateway-jobs.js.map +1 -0
- package/dist/gateway-lifecycle.d.ts +43 -0
- package/dist/gateway-lifecycle.d.ts.map +1 -0
- package/dist/gateway-lifecycle.js +62 -0
- package/dist/gateway-lifecycle.js.map +1 -0
- package/dist/gateway-local-runtime.d.ts +68 -0
- package/dist/gateway-local-runtime.d.ts.map +1 -0
- package/dist/gateway-local-runtime.js +208 -0
- package/dist/gateway-local-runtime.js.map +1 -0
- package/dist/gateway-model-run.d.ts +48 -0
- package/dist/gateway-model-run.d.ts.map +1 -0
- package/dist/gateway-model-run.js +205 -0
- package/dist/gateway-model-run.js.map +1 -0
- package/dist/gateway-operational-status.d.ts +1 -1
- package/dist/gateway-operational-status.d.ts.map +1 -1
- package/dist/gateway-operational-status.js +7 -14
- package/dist/gateway-operational-status.js.map +1 -1
- package/dist/gateway-pairing.d.ts +58 -0
- package/dist/gateway-pairing.d.ts.map +1 -0
- package/dist/gateway-pairing.js +151 -0
- package/dist/gateway-pairing.js.map +1 -0
- package/dist/gateway-provider-capabilities.d.ts +59 -0
- package/dist/gateway-provider-capabilities.d.ts.map +1 -0
- package/dist/gateway-provider-capabilities.js +231 -0
- package/dist/gateway-provider-capabilities.js.map +1 -0
- package/dist/gateway-provider-health.d.ts +19 -0
- package/dist/gateway-provider-health.d.ts.map +1 -0
- package/dist/gateway-provider-health.js +75 -0
- package/dist/gateway-provider-health.js.map +1 -0
- package/dist/gateway-provider-runtime.d.ts +72 -0
- package/dist/gateway-provider-runtime.d.ts.map +1 -0
- package/dist/gateway-provider-runtime.js +169 -0
- package/dist/gateway-provider-runtime.js.map +1 -0
- package/dist/gateway-restart.d.ts +8 -0
- package/dist/gateway-restart.d.ts.map +1 -0
- package/dist/gateway-restart.js +129 -0
- package/dist/gateway-restart.js.map +1 -0
- package/dist/gateway-run-helpers.d.ts +35 -0
- package/dist/gateway-run-helpers.d.ts.map +1 -0
- package/dist/gateway-run-helpers.js +203 -0
- package/dist/gateway-run-helpers.js.map +1 -0
- package/dist/gateway-runtime-provider-health.d.ts +31 -0
- package/dist/gateway-runtime-provider-health.d.ts.map +1 -0
- package/dist/gateway-runtime-provider-health.js +99 -0
- package/dist/gateway-runtime-provider-health.js.map +1 -0
- package/dist/gateway-runtime-state.d.ts +35 -0
- package/dist/gateway-runtime-state.d.ts.map +1 -0
- package/dist/gateway-runtime-state.js +18 -0
- package/dist/gateway-runtime-state.js.map +1 -0
- package/dist/gateway-shell-exec.d.ts +46 -0
- package/dist/gateway-shell-exec.d.ts.map +1 -0
- package/dist/gateway-shell-exec.js +130 -0
- package/dist/gateway-shell-exec.js.map +1 -0
- package/dist/gateway-start-command.d.ts +28 -0
- package/dist/gateway-start-command.d.ts.map +1 -0
- package/dist/gateway-start-command.js +101 -0
- package/dist/gateway-start-command.js.map +1 -0
- package/dist/gateway-state.d.ts +29 -0
- package/dist/gateway-state.d.ts.map +1 -0
- package/dist/gateway-state.js +97 -0
- package/dist/gateway-state.js.map +1 -0
- package/dist/gateway-subagent-run-finalizer.d.ts +27 -0
- package/dist/gateway-subagent-run-finalizer.d.ts.map +1 -0
- package/dist/gateway-subagent-run-finalizer.js +196 -0
- package/dist/gateway-subagent-run-finalizer.js.map +1 -0
- package/dist/gateway-subagent-run-job.d.ts +4 -0
- package/dist/gateway-subagent-run-job.d.ts.map +1 -0
- package/dist/gateway-subagent-run-job.js +430 -0
- package/dist/gateway-subagent-run-job.js.map +1 -0
- package/dist/gateway-subagent-run-target.d.ts +16 -0
- package/dist/gateway-subagent-run-target.d.ts.map +1 -0
- package/dist/gateway-subagent-run-target.js +239 -0
- package/dist/gateway-subagent-run-target.js.map +1 -0
- package/dist/gateway-subagent-run-types.d.ts +110 -0
- package/dist/gateway-subagent-run-types.d.ts.map +1 -0
- package/dist/gateway-subagent-run-types.js +2 -0
- package/dist/gateway-subagent-run-types.js.map +1 -0
- package/dist/index.js +11671 -5503
- package/dist/index.js.map +7 -1
- package/dist/local-runtime/heartbeat-supervisor.d.ts +39 -0
- package/dist/local-runtime/heartbeat-supervisor.d.ts.map +1 -0
- package/dist/local-runtime/heartbeat-supervisor.js +96 -0
- package/dist/local-runtime/heartbeat-supervisor.js.map +1 -0
- package/dist/local-runtime/restart-supervisor.d.ts +27 -0
- package/dist/local-runtime/restart-supervisor.d.ts.map +1 -0
- package/dist/local-runtime/restart-supervisor.js +169 -0
- package/dist/local-runtime/restart-supervisor.js.map +1 -0
- package/dist/local-runtime/runtime-utils.d.ts +20 -0
- package/dist/local-runtime/runtime-utils.d.ts.map +1 -0
- package/dist/local-runtime/runtime-utils.js +54 -0
- package/dist/local-runtime/runtime-utils.js.map +1 -0
- package/dist/local-runtime/shutdown-supervisor.d.ts +32 -0
- package/dist/local-runtime/shutdown-supervisor.d.ts.map +1 -0
- package/dist/local-runtime/shutdown-supervisor.js +110 -0
- package/dist/local-runtime/shutdown-supervisor.js.map +1 -0
- package/dist/local-runtime/types.d.ts +26 -0
- package/dist/local-runtime/types.d.ts.map +1 -0
- package/dist/local-runtime/types.js +2 -0
- package/dist/local-runtime/types.js.map +1 -0
- package/dist/managed-runtime/config.d.ts +20 -0
- package/dist/managed-runtime/config.d.ts.map +1 -0
- package/dist/managed-runtime/config.js +80 -0
- package/dist/managed-runtime/config.js.map +1 -0
- package/dist/managed-runtime/control-client.d.ts +66 -0
- package/dist/managed-runtime/control-client.d.ts.map +1 -0
- package/dist/managed-runtime/control-client.js +142 -0
- package/dist/managed-runtime/control-client.js.map +1 -0
- package/dist/managed-runtime/dependencies.d.ts +17 -0
- package/dist/managed-runtime/dependencies.d.ts.map +1 -0
- package/dist/managed-runtime/dependencies.js +28 -0
- package/dist/managed-runtime/dependencies.js.map +1 -0
- package/dist/managed-runtime/execution-dispatcher.d.ts +25 -0
- package/dist/managed-runtime/execution-dispatcher.d.ts.map +1 -0
- package/dist/managed-runtime/execution-dispatcher.js +155 -0
- package/dist/managed-runtime/execution-dispatcher.js.map +1 -0
- package/dist/managed-runtime/heartbeat.d.ts +7 -0
- package/dist/managed-runtime/heartbeat.d.ts.map +1 -0
- package/dist/managed-runtime/heartbeat.js +44 -0
- package/dist/managed-runtime/heartbeat.js.map +1 -0
- package/dist/managed-runtime/host-state.d.ts +15 -0
- package/dist/managed-runtime/host-state.d.ts.map +1 -0
- package/dist/managed-runtime/host-state.js +50 -0
- package/dist/managed-runtime/host-state.js.map +1 -0
- package/dist/managed-runtime/realtime.d.ts +25 -0
- package/dist/managed-runtime/realtime.d.ts.map +1 -0
- package/dist/managed-runtime/realtime.js +189 -0
- package/dist/managed-runtime/realtime.js.map +1 -0
- package/dist/managed-runtime/runtime-utils.d.ts +8 -0
- package/dist/managed-runtime/runtime-utils.d.ts.map +1 -0
- package/dist/managed-runtime/runtime-utils.js +39 -0
- package/dist/managed-runtime/runtime-utils.js.map +1 -0
- package/dist/managed-runtime/shell-execution.d.ts +33 -0
- package/dist/managed-runtime/shell-execution.d.ts.map +1 -0
- package/dist/managed-runtime/shell-execution.js +186 -0
- package/dist/managed-runtime/shell-execution.js.map +1 -0
- package/dist/managed-runtime/step-result.d.ts +22 -0
- package/dist/managed-runtime/step-result.d.ts.map +1 -0
- package/dist/managed-runtime/step-result.js +252 -0
- package/dist/managed-runtime/step-result.js.map +1 -0
- package/dist/managed-runtime/wake-signal.d.ts +5 -0
- package/dist/managed-runtime/wake-signal.d.ts.map +1 -0
- package/dist/managed-runtime/wake-signal.js +29 -0
- package/dist/managed-runtime/wake-signal.js.map +1 -0
- package/dist/managed-runtime.d.ts +8 -0
- package/dist/managed-runtime.d.ts.map +1 -0
- package/dist/managed-runtime.js +224 -0
- package/dist/managed-runtime.js.map +1 -0
- package/dist/{subagent-process-control.d.ts → process-control.d.ts} +1 -1
- package/dist/process-control.d.ts.map +1 -0
- package/dist/{subagent-process-control.js → process-control.js} +1 -1
- package/dist/process-control.js.map +1 -0
- package/dist/process-output-capture.d.ts +21 -0
- package/dist/process-output-capture.d.ts.map +1 -0
- package/dist/process-output-capture.js +47 -0
- package/dist/process-output-capture.js.map +1 -0
- package/dist/provider-runtime-utils.d.ts +24 -0
- package/dist/provider-runtime-utils.d.ts.map +1 -0
- package/dist/provider-runtime-utils.js +97 -0
- package/dist/provider-runtime-utils.js.map +1 -0
- package/dist/remote-shell-resource.d.ts +11 -0
- package/dist/remote-shell-resource.d.ts.map +1 -1
- package/dist/remote-shell-resource.js +66 -12
- package/dist/remote-shell-resource.js.map +1 -1
- package/dist/stream-json-collector.d.ts +1 -2
- package/dist/stream-json-collector.d.ts.map +1 -1
- package/dist/stream-json-collector.js +7 -18
- package/dist/stream-json-collector.js.map +1 -1
- package/dist/subagent-adapters/claude-code.d.ts.map +1 -1
- package/dist/subagent-adapters/claude-code.js +1 -5
- package/dist/subagent-adapters/claude-code.js.map +1 -1
- package/dist/subagent-adapters/codex.d.ts.map +1 -1
- package/dist/subagent-adapters/codex.js +5 -22
- package/dist/subagent-adapters/codex.js.map +1 -1
- package/dist/subagent-adapters/gemini.d.ts.map +1 -1
- package/dist/subagent-adapters/gemini.js +9 -56
- package/dist/subagent-adapters/gemini.js.map +1 -1
- package/dist/subagent-adapters/output-format.d.ts +3 -0
- package/dist/subagent-adapters/output-format.d.ts.map +1 -0
- package/dist/subagent-adapters/output-format.js +12 -0
- package/dist/subagent-adapters/output-format.js.map +1 -0
- package/dist/subagent-adapters/types.d.ts +4 -1
- package/dist/subagent-adapters/types.d.ts.map +1 -1
- package/dist/subagent-adapters/types.js.map +1 -1
- package/dist/subagent-cancel-job.d.ts +25 -0
- package/dist/subagent-cancel-job.d.ts.map +1 -0
- package/dist/subagent-cancel-job.js +295 -0
- package/dist/subagent-cancel-job.js.map +1 -0
- package/dist/subagent-failure.d.ts +11 -0
- package/dist/subagent-failure.d.ts.map +1 -0
- package/dist/subagent-failure.js +99 -0
- package/dist/subagent-failure.js.map +1 -0
- package/dist/subagent-full-control.d.ts.map +1 -1
- package/dist/subagent-full-control.js +7 -4
- package/dist/subagent-full-control.js.map +1 -1
- package/dist/subagent-output-persistence.d.ts +12 -0
- package/dist/subagent-output-persistence.d.ts.map +1 -0
- package/dist/subagent-output-persistence.js +15 -0
- package/dist/subagent-output-persistence.js.map +1 -0
- package/dist/subagent-run-events.d.ts +17 -0
- package/dist/subagent-run-events.d.ts.map +1 -0
- package/dist/subagent-run-events.js +60 -0
- package/dist/subagent-run-events.js.map +1 -0
- package/dist/subagent-run-execution.d.ts +39 -0
- package/dist/subagent-run-execution.d.ts.map +1 -0
- package/dist/subagent-run-execution.js +145 -0
- package/dist/subagent-run-execution.js.map +1 -0
- package/dist/subagent-run-helpers.d.ts +35 -0
- package/dist/subagent-run-helpers.d.ts.map +1 -0
- package/dist/subagent-run-helpers.js +88 -0
- package/dist/subagent-run-helpers.js.map +1 -0
- package/dist/subagent-run-job.d.ts +33 -0
- package/dist/subagent-run-job.d.ts.map +1 -0
- package/dist/subagent-run-job.js +74 -0
- package/dist/subagent-run-job.js.map +1 -0
- package/dist/subagent-run-store.d.ts +6 -0
- package/dist/subagent-run-store.d.ts.map +1 -0
- package/dist/subagent-run-store.js +22 -0
- package/dist/subagent-run-store.js.map +1 -0
- package/dist/subagent-shutdown-cancellation.d.ts +22 -0
- package/dist/subagent-shutdown-cancellation.d.ts.map +1 -0
- package/dist/subagent-shutdown-cancellation.js +127 -0
- package/dist/subagent-shutdown-cancellation.js.map +1 -0
- package/package.json +6 -3
- package/dist/subagent-process-control.d.ts.map +0 -1
- package/dist/subagent-process-control.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/local-runtime/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type ManagedGatewayRuntimeConfig = {
|
|
2
|
+
agentId: string;
|
|
3
|
+
hostId: string;
|
|
4
|
+
hostAttemptGeneration: number;
|
|
5
|
+
runtimeId: string;
|
|
6
|
+
supabaseUrl: string;
|
|
7
|
+
supabaseAnonKey: string;
|
|
8
|
+
hostControlUrl: string;
|
|
9
|
+
hostControlToken: string;
|
|
10
|
+
toolExecutionUrl: string;
|
|
11
|
+
toolExecutionToken: string;
|
|
12
|
+
retryBackoffMs: number;
|
|
13
|
+
controlTimeoutMs: number;
|
|
14
|
+
execTimeoutMs: number;
|
|
15
|
+
outputCaptureBytes: number;
|
|
16
|
+
heartbeatIntervalMs: number;
|
|
17
|
+
maxConsecutiveHeartbeatFailures: number;
|
|
18
|
+
};
|
|
19
|
+
export declare function resolveManagedGatewayRuntimeConfig(env?: NodeJS.ProcessEnv): ManagedGatewayRuntimeConfig;
|
|
20
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/managed-runtime/config.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,qBAAqB,EAAE,MAAM,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,MAAM,CAAA;IACxB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,cAAc,EAAE,MAAM,CAAA;IACtB,gBAAgB,EAAE,MAAM,CAAA;IACxB,aAAa,EAAE,MAAM,CAAA;IACrB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,mBAAmB,EAAE,MAAM,CAAA;IAC3B,+BAA+B,EAAE,MAAM,CAAA;CACxC,CAAA;AAiCD,wBAAgB,kCAAkC,CAChD,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,2BAA2B,CAsE7B"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { buildLinuxHostControlUrl } from '@panorama/shared/linux-host-control/contract';
|
|
2
|
+
import { buildToolExecutionUrl } from '@panorama/shared/tools/execution-contract';
|
|
3
|
+
import { hostname } from 'node:os';
|
|
4
|
+
import process from 'node:process';
|
|
5
|
+
const DEFAULT_RETRY_BACKOFF_MS = 2_000;
|
|
6
|
+
const DEFAULT_CONTROL_TIMEOUT_MS = 30_000;
|
|
7
|
+
const DEFAULT_EXEC_TIMEOUT_MS = 300_000;
|
|
8
|
+
const DEFAULT_HEARTBEAT_INTERVAL_MS = 15_000;
|
|
9
|
+
const DEFAULT_MAX_CONSECUTIVE_HEARTBEAT_FAILURES = 3;
|
|
10
|
+
const DEFAULT_OUTPUT_CAPTURE_BYTES = 5_000_000;
|
|
11
|
+
function requireEnv(name, env = process.env) {
|
|
12
|
+
const value = env[name]?.trim();
|
|
13
|
+
if (!value) {
|
|
14
|
+
throw new Error(`${name} is required`);
|
|
15
|
+
}
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
function readPositiveInt(name, fallback, env = process.env) {
|
|
19
|
+
const raw = env[name]?.trim();
|
|
20
|
+
if (!raw)
|
|
21
|
+
return fallback;
|
|
22
|
+
const parsed = Number(raw);
|
|
23
|
+
if (!Number.isFinite(parsed) || parsed <= 0) {
|
|
24
|
+
throw new Error(`${name} must be a positive number`);
|
|
25
|
+
}
|
|
26
|
+
return Math.floor(parsed);
|
|
27
|
+
}
|
|
28
|
+
function requirePositiveInt(name, env = process.env) {
|
|
29
|
+
const raw = requireEnv(name, env);
|
|
30
|
+
const parsed = Number(raw);
|
|
31
|
+
if (!Number.isFinite(parsed) || parsed <= 0) {
|
|
32
|
+
throw new Error(`${name} must be a positive number`);
|
|
33
|
+
}
|
|
34
|
+
return Math.floor(parsed);
|
|
35
|
+
}
|
|
36
|
+
export function resolveManagedGatewayRuntimeConfig(env = process.env) {
|
|
37
|
+
const agentId = requireEnv('PANORAMA_AGENT_ID', env);
|
|
38
|
+
const hostId = requireEnv('PANORAMA_LINUX_HOST_ID', env);
|
|
39
|
+
const hostAttemptGeneration = requirePositiveInt('PANORAMA_LINUX_HOST_ATTEMPT_GENERATION', env);
|
|
40
|
+
const supabaseUrl = env.PANORAMA_SUPABASE_URL?.trim() || env.SUPABASE_URL?.trim() || null;
|
|
41
|
+
const supabaseAnonKey = env.PANORAMA_SUPABASE_ANON_KEY?.trim() ||
|
|
42
|
+
env.SUPABASE_ANON_KEY?.trim() ||
|
|
43
|
+
env.SUPABASE_PUBLISHABLE_KEY?.trim() ||
|
|
44
|
+
null;
|
|
45
|
+
const hostControlUrl = env.PANORAMA_LINUX_HOST_CONTROL_URL?.trim() ||
|
|
46
|
+
(supabaseUrl ? buildLinuxHostControlUrl(supabaseUrl) : null);
|
|
47
|
+
const toolExecutionUrl = env.PANORAMA_TOOL_EXECUTION_URL?.trim() ||
|
|
48
|
+
(supabaseUrl ? buildToolExecutionUrl(supabaseUrl) : null);
|
|
49
|
+
if (!hostControlUrl) {
|
|
50
|
+
throw new Error('PANORAMA_LINUX_HOST_CONTROL_URL is required');
|
|
51
|
+
}
|
|
52
|
+
if (!toolExecutionUrl) {
|
|
53
|
+
throw new Error('PANORAMA_TOOL_EXECUTION_URL is required');
|
|
54
|
+
}
|
|
55
|
+
if (!supabaseUrl) {
|
|
56
|
+
throw new Error('PANORAMA_SUPABASE_URL or SUPABASE_URL is required');
|
|
57
|
+
}
|
|
58
|
+
if (!supabaseAnonKey) {
|
|
59
|
+
throw new Error('PANORAMA_SUPABASE_ANON_KEY, SUPABASE_ANON_KEY, or SUPABASE_PUBLISHABLE_KEY is required');
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
agentId,
|
|
63
|
+
hostId,
|
|
64
|
+
hostAttemptGeneration,
|
|
65
|
+
runtimeId: env.PANORAMA_MANAGED_RUNTIME_ID?.trim() || `${hostname()}:${process.pid}`,
|
|
66
|
+
supabaseUrl,
|
|
67
|
+
supabaseAnonKey,
|
|
68
|
+
hostControlUrl,
|
|
69
|
+
hostControlToken: requireEnv('PANORAMA_LINUX_HOST_CONTROL_TOKEN', env),
|
|
70
|
+
toolExecutionUrl,
|
|
71
|
+
toolExecutionToken: requireEnv('PANORAMA_TOOL_EXECUTION_TOKEN', env),
|
|
72
|
+
retryBackoffMs: readPositiveInt('PANORAMA_MANAGED_RUNTIME_RETRY_BACKOFF_MS', DEFAULT_RETRY_BACKOFF_MS, env),
|
|
73
|
+
controlTimeoutMs: readPositiveInt('PANORAMA_MANAGED_RUNTIME_CONTROL_TIMEOUT_MS', DEFAULT_CONTROL_TIMEOUT_MS, env),
|
|
74
|
+
execTimeoutMs: readPositiveInt('PANORAMA_AGENT_EXEC_TIMEOUT_MS', DEFAULT_EXEC_TIMEOUT_MS, env),
|
|
75
|
+
outputCaptureBytes: readPositiveInt('PANORAMA_MANAGED_RUNTIME_OUTPUT_CAPTURE_BYTES', DEFAULT_OUTPUT_CAPTURE_BYTES, env),
|
|
76
|
+
heartbeatIntervalMs: readPositiveInt('PANORAMA_MANAGED_RUNTIME_HEARTBEAT_INTERVAL_MS', DEFAULT_HEARTBEAT_INTERVAL_MS, env),
|
|
77
|
+
maxConsecutiveHeartbeatFailures: readPositiveInt('PANORAMA_MANAGED_RUNTIME_MAX_CONSECUTIVE_HEARTBEAT_FAILURES', DEFAULT_MAX_CONSECUTIVE_HEARTBEAT_FAILURES, env),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/managed-runtime/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { type LinuxHostSessionExchangeResponse } from '@panorama/shared/linux-host-session/contract';
|
|
2
|
+
import type { LinuxHostClaimedExecution, LinuxHostControlHostEnvelope, LinuxHostControlRequest, LinuxHostControlResponse } from '@panorama/shared/linux-host-control/contract';
|
|
3
|
+
export declare function postLinuxHostControlRequest(params: {
|
|
4
|
+
controlUrl: string;
|
|
5
|
+
controlToken: string;
|
|
6
|
+
body: LinuxHostControlRequest;
|
|
7
|
+
timeoutMs: number;
|
|
8
|
+
signal?: AbortSignal;
|
|
9
|
+
}): Promise<LinuxHostControlResponse>;
|
|
10
|
+
export declare function exchangeLinuxHostSession(params: {
|
|
11
|
+
supabaseUrl: string;
|
|
12
|
+
supabaseAnonKey: string;
|
|
13
|
+
hostControlToken: string;
|
|
14
|
+
timeoutMs: number;
|
|
15
|
+
}): Promise<LinuxHostSessionExchangeResponse>;
|
|
16
|
+
export declare function heartbeatLinuxHost(params: {
|
|
17
|
+
controlUrl: string;
|
|
18
|
+
controlToken: string;
|
|
19
|
+
runtimeId: string;
|
|
20
|
+
controlTimeoutMs: number;
|
|
21
|
+
}): Promise<LinuxHostControlHostEnvelope>;
|
|
22
|
+
export declare function dispatchLinuxExecution(params: {
|
|
23
|
+
controlUrl: string;
|
|
24
|
+
controlToken: string;
|
|
25
|
+
runtimeId: string;
|
|
26
|
+
claimToken: string;
|
|
27
|
+
controlTimeoutMs: number;
|
|
28
|
+
}): Promise<LinuxHostClaimedExecution | null>;
|
|
29
|
+
export declare function startLinuxExecution(params: {
|
|
30
|
+
controlUrl: string;
|
|
31
|
+
controlToken: string;
|
|
32
|
+
runtimeId: string;
|
|
33
|
+
executionId: string;
|
|
34
|
+
claimToken: string;
|
|
35
|
+
controlTimeoutMs: number;
|
|
36
|
+
}): Promise<LinuxHostClaimedExecution | null>;
|
|
37
|
+
export declare function completeLinuxExecution(params: {
|
|
38
|
+
controlUrl: string;
|
|
39
|
+
controlToken: string;
|
|
40
|
+
runtimeId: string;
|
|
41
|
+
executionId: string;
|
|
42
|
+
claimToken: string;
|
|
43
|
+
executionStatus: 'succeeded' | 'failed' | 'timed_out' | 'cancelled';
|
|
44
|
+
exitCode?: number | null;
|
|
45
|
+
durationMs?: number | null;
|
|
46
|
+
stdout?: string | null;
|
|
47
|
+
stderr?: string | null;
|
|
48
|
+
error?: string | null;
|
|
49
|
+
executionMetadata?: Record<string, unknown> | null;
|
|
50
|
+
stepStatus?: 'completed' | 'failed' | 'skipped' | 'uncertain' | null;
|
|
51
|
+
stepResult?: Record<string, unknown> | null;
|
|
52
|
+
stepError?: string | null;
|
|
53
|
+
stepUncertaintyReason?: string | null;
|
|
54
|
+
controlSignal?: 'continue' | 'pause' | 'stop' | null;
|
|
55
|
+
controlTimeoutMs: number;
|
|
56
|
+
}): Promise<LinuxHostControlResponse['completion']>;
|
|
57
|
+
export declare function reconcileExecutionLifecycle(params: {
|
|
58
|
+
controlUrl: string;
|
|
59
|
+
controlToken: string;
|
|
60
|
+
runtimeId: string;
|
|
61
|
+
controlTimeoutMs: number;
|
|
62
|
+
}): Promise<{
|
|
63
|
+
recoveredCount: number;
|
|
64
|
+
requeuedCount: number;
|
|
65
|
+
}>;
|
|
66
|
+
//# sourceMappingURL=control-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control-client.d.ts","sourceRoot":"","sources":["../../src/managed-runtime/control-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { buildLinuxHostSessionExchangeUrl, } from '@panorama/shared/linux-host-session/contract';
|
|
2
|
+
import { withAbortTimeout } from './runtime-utils.js';
|
|
3
|
+
export async function postLinuxHostControlRequest(params) {
|
|
4
|
+
return await withAbortTimeout(params.timeoutMs, `Linux host control request timed out after ${params.timeoutMs}ms`, async (signal) => {
|
|
5
|
+
const response = await fetch(params.controlUrl, {
|
|
6
|
+
method: 'POST',
|
|
7
|
+
headers: {
|
|
8
|
+
Authorization: `Bearer ${params.controlToken}`,
|
|
9
|
+
'Content-Type': 'application/json',
|
|
10
|
+
'X-Request-Source': 'gateway_managed',
|
|
11
|
+
},
|
|
12
|
+
body: JSON.stringify(params.body),
|
|
13
|
+
signal,
|
|
14
|
+
});
|
|
15
|
+
let payload;
|
|
16
|
+
try {
|
|
17
|
+
payload = await response.json();
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
payload = null;
|
|
21
|
+
}
|
|
22
|
+
if (!response.ok) {
|
|
23
|
+
const message = payload && typeof payload === 'object' && 'error' in payload
|
|
24
|
+
? String(payload.error ?? 'Linux host control request failed')
|
|
25
|
+
: `Linux host control request failed with status ${response.status}`;
|
|
26
|
+
throw new Error(message);
|
|
27
|
+
}
|
|
28
|
+
return payload;
|
|
29
|
+
}, params.signal);
|
|
30
|
+
}
|
|
31
|
+
export async function exchangeLinuxHostSession(params) {
|
|
32
|
+
return await withAbortTimeout(params.timeoutMs, `Linux host session exchange timed out after ${params.timeoutMs}ms`, async (signal) => {
|
|
33
|
+
const response = await fetch(buildLinuxHostSessionExchangeUrl(params.supabaseUrl), {
|
|
34
|
+
method: 'POST',
|
|
35
|
+
headers: {
|
|
36
|
+
apikey: params.supabaseAnonKey,
|
|
37
|
+
Authorization: `Bearer ${params.supabaseAnonKey}`,
|
|
38
|
+
'Content-Type': 'application/json',
|
|
39
|
+
'X-Request-Source': 'gateway_managed',
|
|
40
|
+
},
|
|
41
|
+
body: JSON.stringify({
|
|
42
|
+
host_control_token: params.hostControlToken,
|
|
43
|
+
}),
|
|
44
|
+
signal,
|
|
45
|
+
});
|
|
46
|
+
let payload;
|
|
47
|
+
try {
|
|
48
|
+
payload = await response.json();
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
payload = null;
|
|
52
|
+
}
|
|
53
|
+
if (!response.ok) {
|
|
54
|
+
const message = payload && typeof payload === 'object' && 'error' in payload
|
|
55
|
+
? String(payload.error ?? 'Linux host session exchange failed')
|
|
56
|
+
: `Linux host session exchange failed with status ${response.status}`;
|
|
57
|
+
throw new Error(message);
|
|
58
|
+
}
|
|
59
|
+
return payload;
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
export async function heartbeatLinuxHost(params) {
|
|
63
|
+
const response = await postLinuxHostControlRequest({
|
|
64
|
+
controlUrl: params.controlUrl,
|
|
65
|
+
controlToken: params.controlToken,
|
|
66
|
+
timeoutMs: params.controlTimeoutMs,
|
|
67
|
+
body: {
|
|
68
|
+
action: 'heartbeat',
|
|
69
|
+
runtime_id: params.runtimeId,
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
return response.host;
|
|
73
|
+
}
|
|
74
|
+
export async function dispatchLinuxExecution(params) {
|
|
75
|
+
const response = await postLinuxHostControlRequest({
|
|
76
|
+
controlUrl: params.controlUrl,
|
|
77
|
+
controlToken: params.controlToken,
|
|
78
|
+
timeoutMs: params.controlTimeoutMs,
|
|
79
|
+
body: {
|
|
80
|
+
action: 'claim_execution',
|
|
81
|
+
runtime_id: params.runtimeId,
|
|
82
|
+
claim_token: params.claimToken,
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
return response.execution ?? null;
|
|
86
|
+
}
|
|
87
|
+
export async function startLinuxExecution(params) {
|
|
88
|
+
const response = await postLinuxHostControlRequest({
|
|
89
|
+
controlUrl: params.controlUrl,
|
|
90
|
+
controlToken: params.controlToken,
|
|
91
|
+
timeoutMs: params.controlTimeoutMs,
|
|
92
|
+
body: {
|
|
93
|
+
action: 'start_execution',
|
|
94
|
+
runtime_id: params.runtimeId,
|
|
95
|
+
execution_id: params.executionId,
|
|
96
|
+
claim_token: params.claimToken,
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
return response.execution ?? null;
|
|
100
|
+
}
|
|
101
|
+
export async function completeLinuxExecution(params) {
|
|
102
|
+
const response = await postLinuxHostControlRequest({
|
|
103
|
+
controlUrl: params.controlUrl,
|
|
104
|
+
controlToken: params.controlToken,
|
|
105
|
+
timeoutMs: params.controlTimeoutMs,
|
|
106
|
+
body: {
|
|
107
|
+
action: 'complete_execution',
|
|
108
|
+
runtime_id: params.runtimeId,
|
|
109
|
+
execution_id: params.executionId,
|
|
110
|
+
claim_token: params.claimToken,
|
|
111
|
+
execution_status: params.executionStatus,
|
|
112
|
+
exit_code: params.exitCode ?? null,
|
|
113
|
+
duration_ms: params.durationMs ?? null,
|
|
114
|
+
stdout: params.stdout ?? null,
|
|
115
|
+
stderr: params.stderr ?? null,
|
|
116
|
+
error: params.error ?? null,
|
|
117
|
+
execution_metadata: params.executionMetadata ?? undefined,
|
|
118
|
+
step_status: params.stepStatus ?? null,
|
|
119
|
+
step_result: params.stepResult ?? undefined,
|
|
120
|
+
step_error: params.stepError ?? null,
|
|
121
|
+
step_uncertainty_reason: params.stepUncertaintyReason ?? null,
|
|
122
|
+
control_signal: params.controlSignal ?? null,
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
return response.completion ?? null;
|
|
126
|
+
}
|
|
127
|
+
export async function reconcileExecutionLifecycle(params) {
|
|
128
|
+
const response = await postLinuxHostControlRequest({
|
|
129
|
+
controlUrl: params.controlUrl,
|
|
130
|
+
controlToken: params.controlToken,
|
|
131
|
+
timeoutMs: params.controlTimeoutMs,
|
|
132
|
+
body: {
|
|
133
|
+
action: 'reconcile_execution_lifecycle',
|
|
134
|
+
runtime_id: params.runtimeId,
|
|
135
|
+
},
|
|
136
|
+
});
|
|
137
|
+
return {
|
|
138
|
+
recoveredCount: response.recovered_count ?? 0,
|
|
139
|
+
requeuedCount: response.requeued_count ?? 0,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=control-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control-client.js","sourceRoot":"","sources":["../../src/managed-runtime/control-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { completeLinuxExecution, dispatchLinuxExecution, heartbeatLinuxHost, reconcileExecutionLifecycle, startLinuxExecution } from './control-client.js';
|
|
2
|
+
import { createManagedRealtimeClient, startManagedRealtimeWakeLoop } from './realtime.js';
|
|
3
|
+
import { executeCommand } from './shell-execution.js';
|
|
4
|
+
export type ResolvedManagedGatewayRuntimeDependencies = {
|
|
5
|
+
heartbeatLinuxHost: typeof heartbeatLinuxHost;
|
|
6
|
+
dispatchLinuxExecution: typeof dispatchLinuxExecution;
|
|
7
|
+
startLinuxExecution: typeof startLinuxExecution;
|
|
8
|
+
completeLinuxExecution: typeof completeLinuxExecution;
|
|
9
|
+
reconcileExecutionLifecycle: typeof reconcileExecutionLifecycle;
|
|
10
|
+
executeCommand: typeof executeCommand;
|
|
11
|
+
createRealtimeClient: typeof createManagedRealtimeClient;
|
|
12
|
+
startRealtimeWakeLoop: typeof startManagedRealtimeWakeLoop;
|
|
13
|
+
registerSignalHandlers: (onSignal: (signal: NodeJS.Signals) => void) => () => void;
|
|
14
|
+
};
|
|
15
|
+
export type ManagedGatewayRuntimeDependencies = Partial<ResolvedManagedGatewayRuntimeDependencies>;
|
|
16
|
+
export declare function resolveManagedGatewayRuntimeDependencies(dependencies?: ManagedGatewayRuntimeDependencies): ResolvedManagedGatewayRuntimeDependencies;
|
|
17
|
+
//# sourceMappingURL=dependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../src/managed-runtime/dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,2BAA2B,EAC3B,mBAAmB,EACpB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,2BAA2B,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAA;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,MAAM,MAAM,yCAAyC,GAAG;IACtD,kBAAkB,EAAE,OAAO,kBAAkB,CAAA;IAC7C,sBAAsB,EAAE,OAAO,sBAAsB,CAAA;IACrD,mBAAmB,EAAE,OAAO,mBAAmB,CAAA;IAC/C,sBAAsB,EAAE,OAAO,sBAAsB,CAAA;IACrD,2BAA2B,EAAE,OAAO,2BAA2B,CAAA;IAC/D,cAAc,EAAE,OAAO,cAAc,CAAA;IACrC,oBAAoB,EAAE,OAAO,2BAA2B,CAAA;IACxD,qBAAqB,EAAE,OAAO,4BAA4B,CAAA;IAC1D,sBAAsB,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI,KAAK,MAAM,IAAI,CAAA;CACnF,CAAA;AAED,MAAM,MAAM,iCAAiC,GAAG,OAAO,CAAC,yCAAyC,CAAC,CAAA;AAqBlG,wBAAgB,wCAAwC,CACtD,YAAY,GAAE,iCAAsC,GACnD,yCAAyC,CAK3C"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { completeLinuxExecution, dispatchLinuxExecution, heartbeatLinuxHost, reconcileExecutionLifecycle, startLinuxExecution, } from './control-client.js';
|
|
2
|
+
import { createManagedRealtimeClient, startManagedRealtimeWakeLoop } from './realtime.js';
|
|
3
|
+
import { executeCommand } from './shell-execution.js';
|
|
4
|
+
const defaultManagedGatewayRuntimeDependencies = {
|
|
5
|
+
heartbeatLinuxHost,
|
|
6
|
+
dispatchLinuxExecution,
|
|
7
|
+
startLinuxExecution,
|
|
8
|
+
completeLinuxExecution,
|
|
9
|
+
reconcileExecutionLifecycle,
|
|
10
|
+
executeCommand,
|
|
11
|
+
createRealtimeClient: createManagedRealtimeClient,
|
|
12
|
+
startRealtimeWakeLoop: startManagedRealtimeWakeLoop,
|
|
13
|
+
registerSignalHandlers(onSignal) {
|
|
14
|
+
process.once('SIGINT', onSignal);
|
|
15
|
+
process.once('SIGTERM', onSignal);
|
|
16
|
+
return () => {
|
|
17
|
+
process.off('SIGINT', onSignal);
|
|
18
|
+
process.off('SIGTERM', onSignal);
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
export function resolveManagedGatewayRuntimeDependencies(dependencies = {}) {
|
|
23
|
+
return {
|
|
24
|
+
...defaultManagedGatewayRuntimeDependencies,
|
|
25
|
+
...dependencies,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/managed-runtime/dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,2BAA2B,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAA;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAgBrD,MAAM,wCAAwC,GAA8C;IAC1F,kBAAkB;IAClB,sBAAsB;IACtB,mBAAmB;IACnB,sBAAsB;IACtB,2BAA2B;IAC3B,cAAc;IACd,oBAAoB,EAAE,2BAA2B;IACjD,qBAAqB,EAAE,4BAA4B;IACnD,sBAAsB,CAAC,QAAQ;QAC7B,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAChC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;QACjC,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;YAC/B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;QAClC,CAAC,CAAA;IACH,CAAC;CACF,CAAA;AAED,MAAM,UAAU,wCAAwC,CACtD,eAAkD,EAAE;IAEpD,OAAO;QACL,GAAG,wCAAwC;QAC3C,GAAG,YAAY;KAChB,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ControlSignal } from '@panorama/shared/control-signals';
|
|
2
|
+
import type { LinuxHostClaimedExecution } from '@panorama/shared/linux-host-control/contract';
|
|
3
|
+
import type { ManagedGatewayRuntimeConfig } from './config.js';
|
|
4
|
+
import type { completeLinuxExecution, startLinuxExecution } from './control-client.js';
|
|
5
|
+
import { executeCommand, type CommandExecutionResult } from './shell-execution.js';
|
|
6
|
+
import { type LinuxExecutionCompletion } from './step-result.js';
|
|
7
|
+
export type ManagedExecutionOutcome = {
|
|
8
|
+
reconciliationRequired: boolean;
|
|
9
|
+
wakeReason?: string;
|
|
10
|
+
};
|
|
11
|
+
export interface ExecuteManagedLinuxExecutionDependencies {
|
|
12
|
+
startLinuxExecution: typeof startLinuxExecution;
|
|
13
|
+
completeLinuxExecution: typeof completeLinuxExecution;
|
|
14
|
+
executeCommand: typeof executeCommand;
|
|
15
|
+
}
|
|
16
|
+
export declare function resolveLinuxExecutionCompletion(result: CommandExecutionResult, controlSignal: ControlSignal | null): LinuxExecutionCompletion;
|
|
17
|
+
export declare function executeManagedLinuxExecution(params: {
|
|
18
|
+
config: ManagedGatewayRuntimeConfig;
|
|
19
|
+
execution: LinuxHostClaimedExecution;
|
|
20
|
+
registerCancellation: (cancel: (() => void) | null) => void;
|
|
21
|
+
onExecutionStarted?: (executionId: string) => void;
|
|
22
|
+
onExecutionFinished?: () => void;
|
|
23
|
+
dependencies: ExecuteManagedLinuxExecutionDependencies;
|
|
24
|
+
}): Promise<ManagedExecutionOutcome>;
|
|
25
|
+
//# sourceMappingURL=execution-dispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-dispatcher.d.ts","sourceRoot":"","sources":["../../src/managed-runtime/execution-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAA;AACrE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAA;AAE7F,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,KAAK,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACtF,OAAO,EAGL,cAAc,EAEd,KAAK,sBAAsB,EAC5B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAIL,KAAK,wBAAwB,EAC9B,MAAM,kBAAkB,CAAA;AAGzB,MAAM,MAAM,uBAAuB,GAAG;IACpC,sBAAsB,EAAE,OAAO,CAAA;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,WAAW,wCAAwC;IACvD,mBAAmB,EAAE,OAAO,mBAAmB,CAAA;IAC/C,sBAAsB,EAAE,OAAO,sBAAsB,CAAA;IACrD,cAAc,EAAE,OAAO,cAAc,CAAA;CACtC;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,sBAAsB,EAC9B,aAAa,EAAE,aAAa,GAAG,IAAI,GAClC,wBAAwB,CAiC1B;AAED,wBAAsB,4BAA4B,CAAC,MAAM,EAAE;IACzD,MAAM,EAAE,2BAA2B,CAAA;IACnC,SAAS,EAAE,yBAAyB,CAAA;IACpC,oBAAoB,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,CAAA;IAC3D,kBAAkB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;IAClD,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAA;IAChC,YAAY,EAAE,wCAAwC,CAAA;CACvD,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAqInC"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import process from 'node:process';
|
|
2
|
+
import { buildControlSignalPath, buildManagedShellExecutionEnv, readCommandControlSignal, } from './shell-execution.js';
|
|
3
|
+
import { buildLinuxStepResultPayload, buildOutputCaptureMetadata, buildPreview, } from './step-result.js';
|
|
4
|
+
import { normalizeRecord, MANAGED_GATEWAY_LOG_PREFIX } from './runtime-utils.js';
|
|
5
|
+
export function resolveLinuxExecutionCompletion(result, controlSignal) {
|
|
6
|
+
if (result.status === 'succeeded') {
|
|
7
|
+
return {
|
|
8
|
+
stepStatus: 'completed',
|
|
9
|
+
toolCallStatus: 'completed',
|
|
10
|
+
controlSignal: controlSignal?.nextAction ?? 'continue',
|
|
11
|
+
pauseDuration: controlSignal?.nextAction === 'pause' ? controlSignal.pauseDuration : undefined,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
if (result.status === 'failed') {
|
|
15
|
+
return {
|
|
16
|
+
stepStatus: 'failed',
|
|
17
|
+
toolCallStatus: 'failed',
|
|
18
|
+
controlSignal: 'continue',
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
if (result.status === 'cancelled') {
|
|
22
|
+
return {
|
|
23
|
+
stepStatus: 'uncertain',
|
|
24
|
+
toolCallStatus: 'failed',
|
|
25
|
+
controlSignal: 'stop',
|
|
26
|
+
uncertaintyReason: 'linux_execution_cancelled_after_start',
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
stepStatus: 'uncertain',
|
|
31
|
+
toolCallStatus: 'failed',
|
|
32
|
+
controlSignal: 'stop',
|
|
33
|
+
uncertaintyReason: 'linux_execution_timed_out_after_start',
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export async function executeManagedLinuxExecution(params) {
|
|
37
|
+
const { config } = params;
|
|
38
|
+
const { dependencies } = params;
|
|
39
|
+
const claimToken = params.execution.claim_token;
|
|
40
|
+
if (!claimToken) {
|
|
41
|
+
throw new Error(`Managed execution ${params.execution.id} is missing claim token`);
|
|
42
|
+
}
|
|
43
|
+
const startedExecution = await dependencies.startLinuxExecution({
|
|
44
|
+
controlUrl: config.hostControlUrl,
|
|
45
|
+
controlToken: config.hostControlToken,
|
|
46
|
+
runtimeId: config.runtimeId,
|
|
47
|
+
executionId: params.execution.id,
|
|
48
|
+
claimToken,
|
|
49
|
+
controlTimeoutMs: config.controlTimeoutMs,
|
|
50
|
+
});
|
|
51
|
+
if (!startedExecution?.id) {
|
|
52
|
+
console.warn(`${MANAGED_GATEWAY_LOG_PREFIX} managed execution disappeared before start acknowledgement`, {
|
|
53
|
+
executionId: params.execution.id,
|
|
54
|
+
});
|
|
55
|
+
return {
|
|
56
|
+
reconciliationRequired: true,
|
|
57
|
+
wakeReason: 'start_ack_missing',
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const command = startedExecution.command;
|
|
61
|
+
const controlSignalPath = buildControlSignalPath(startedExecution.id);
|
|
62
|
+
params.onExecutionStarted?.(startedExecution.id);
|
|
63
|
+
let result;
|
|
64
|
+
try {
|
|
65
|
+
result = await dependencies.executeCommand(command, config.execTimeoutMs, {
|
|
66
|
+
env: buildManagedShellExecutionEnv({
|
|
67
|
+
baseEnv: process.env,
|
|
68
|
+
agentId: config.agentId,
|
|
69
|
+
cycleId: startedExecution.cycle_id,
|
|
70
|
+
toolExecutionUrl: config.toolExecutionUrl,
|
|
71
|
+
toolExecutionToken: config.toolExecutionToken,
|
|
72
|
+
controlSignalPath,
|
|
73
|
+
}),
|
|
74
|
+
outputCaptureBytes: config.outputCaptureBytes,
|
|
75
|
+
registerCancellation: (cancel) => {
|
|
76
|
+
params.registerCancellation(cancel);
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
params.registerCancellation(null);
|
|
82
|
+
params.onExecutionFinished?.();
|
|
83
|
+
}
|
|
84
|
+
const controlSignal = await readCommandControlSignal(controlSignalPath);
|
|
85
|
+
const stdoutPreview = buildPreview(result.stdout);
|
|
86
|
+
const stderrPreview = buildPreview(result.stderr);
|
|
87
|
+
const stdoutCaptureMetadata = buildOutputCaptureMetadata('stdout', result);
|
|
88
|
+
const stderrCaptureMetadata = buildOutputCaptureMetadata('stderr', result);
|
|
89
|
+
const executionCompletion = resolveLinuxExecutionCompletion(result, controlSignal);
|
|
90
|
+
const stepResult = buildLinuxStepResultPayload({
|
|
91
|
+
executionId: startedExecution.id,
|
|
92
|
+
command,
|
|
93
|
+
result,
|
|
94
|
+
completion: executionCompletion,
|
|
95
|
+
executionMetadata: startedExecution.metadata,
|
|
96
|
+
});
|
|
97
|
+
const completion = await dependencies.completeLinuxExecution({
|
|
98
|
+
controlUrl: config.hostControlUrl,
|
|
99
|
+
controlToken: config.hostControlToken,
|
|
100
|
+
runtimeId: config.runtimeId,
|
|
101
|
+
executionId: startedExecution.id,
|
|
102
|
+
claimToken,
|
|
103
|
+
executionStatus: result.status,
|
|
104
|
+
exitCode: result.exitCode,
|
|
105
|
+
durationMs: result.durationMs,
|
|
106
|
+
stdout: result.stdout,
|
|
107
|
+
stderr: result.stderr,
|
|
108
|
+
error: result.error,
|
|
109
|
+
executionMetadata: {
|
|
110
|
+
...normalizeRecord(startedExecution.metadata),
|
|
111
|
+
runtime_id: config.runtimeId,
|
|
112
|
+
claim_token: claimToken,
|
|
113
|
+
started_by_gateway_mode: 'managed',
|
|
114
|
+
stdout_preview_truncated: stdoutPreview.truncated,
|
|
115
|
+
stderr_preview_truncated: stderrPreview.truncated,
|
|
116
|
+
...stdoutCaptureMetadata,
|
|
117
|
+
...stderrCaptureMetadata,
|
|
118
|
+
},
|
|
119
|
+
stepStatus: executionCompletion.stepStatus,
|
|
120
|
+
stepResult,
|
|
121
|
+
stepError: result.error,
|
|
122
|
+
stepUncertaintyReason: executionCompletion.uncertaintyReason ?? null,
|
|
123
|
+
controlSignal: executionCompletion.controlSignal,
|
|
124
|
+
controlTimeoutMs: config.controlTimeoutMs,
|
|
125
|
+
});
|
|
126
|
+
if (!completion?.run_id) {
|
|
127
|
+
console.warn(`${MANAGED_GATEWAY_LOG_PREFIX} execution was no longer active for this gateway when finalizing step; skipping follow-up`, {
|
|
128
|
+
executionId: startedExecution.id,
|
|
129
|
+
runId: completion?.run_id ?? null,
|
|
130
|
+
stepUpdated: completion?.step_updated ?? null,
|
|
131
|
+
});
|
|
132
|
+
return {
|
|
133
|
+
reconciliationRequired: true,
|
|
134
|
+
wakeReason: 'completion_followup_reconcile',
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
if (completion.step_updated === false) {
|
|
138
|
+
console.warn(`${MANAGED_GATEWAY_LOG_PREFIX} execution completed but the linked step was not updated; control plane recovery was queued`, {
|
|
139
|
+
executionId: startedExecution.id,
|
|
140
|
+
runId: completion.run_id,
|
|
141
|
+
stepUpdated: completion.step_updated,
|
|
142
|
+
});
|
|
143
|
+
return {
|
|
144
|
+
reconciliationRequired: true,
|
|
145
|
+
wakeReason: 'completion_step_reconcile',
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
console.log(`${MANAGED_GATEWAY_LOG_PREFIX} completed managed command`, {
|
|
149
|
+
executionId: startedExecution.id,
|
|
150
|
+
status: result.status,
|
|
151
|
+
runId: completion.run_id,
|
|
152
|
+
});
|
|
153
|
+
return { reconciliationRequired: false };
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=execution-dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-dispatcher.js","sourceRoot":"","sources":["../../src/managed-runtime/execution-dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../../src/managed-runtime/heartbeat.ts"],"names":[],"mappings":"AAGA,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,UAAU,EAAE,MAAM,CAAA;IAClB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;CACvC,GAAG,MAAM,IAAI,CA2Cb"}
|