@a5c-ai/agent-runtime 5.0.1-staging.04ca6ab00d21 → 5.0.1-staging.19033314d476
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 +46 -0
- package/dist/background/state.d.ts +8 -2
- package/dist/background/state.d.ts.map +1 -1
- package/dist/background/state.js +30 -3
- package/dist/backgroundProcessRegistry.d.ts +60 -2
- package/dist/backgroundProcessRegistry.d.ts.map +1 -1
- package/dist/backgroundProcessRegistry.js +280 -55
- package/dist/daemon/config.d.ts.map +1 -1
- package/dist/daemon/config.js +36 -0
- package/dist/daemon/daemonLog.d.ts +18 -1
- package/dist/daemon/daemonLog.d.ts.map +1 -1
- package/dist/daemon/daemonLog.js +78 -2
- package/dist/daemon/durableQueue.d.ts +41 -0
- package/dist/daemon/durableQueue.d.ts.map +1 -0
- package/dist/daemon/durableQueue.js +183 -0
- package/dist/daemon/fileWatcher.d.ts.map +1 -1
- package/dist/daemon/fileWatcher.js +3 -0
- package/dist/daemon/index.d.ts +5 -3
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +4 -1
- package/dist/daemon/lifecycle.d.ts +2 -1
- package/dist/daemon/lifecycle.d.ts.map +1 -1
- package/dist/daemon/lifecycle.js +63 -0
- package/dist/daemon/loop.d.ts +6 -0
- package/dist/daemon/loop.d.ts.map +1 -1
- package/dist/daemon/loop.js +209 -18
- package/dist/daemon/timerScheduler.d.ts.map +1 -1
- package/dist/daemon/timerScheduler.js +111 -21
- package/dist/daemon/types.d.ts +30 -1
- package/dist/daemon/types.d.ts.map +1 -1
- package/dist/daemon/webhookListener.d.ts.map +1 -1
- package/dist/daemon/webhookListener.js +25 -3
- package/dist/execution/index.d.ts +3 -1
- package/dist/execution/index.d.ts.map +1 -1
- package/dist/execution/index.js +9 -1
- package/dist/execution/modes/docker.d.ts +5 -0
- package/dist/execution/modes/docker.d.ts.map +1 -1
- package/dist/execution/modes/docker.js +64 -6
- package/dist/execution/modes/kubernetes.d.ts +27 -10
- package/dist/execution/modes/kubernetes.d.ts.map +1 -1
- package/dist/execution/modes/kubernetes.js +251 -38
- package/dist/execution/modes/local.d.ts.map +1 -1
- package/dist/execution/modes/local.js +16 -1
- package/dist/execution/modes/ssh.d.ts.map +1 -1
- package/dist/execution/modes/ssh.js +14 -4
- package/dist/execution/policy.d.ts +15 -0
- package/dist/execution/policy.d.ts.map +1 -0
- package/dist/execution/policy.js +121 -0
- package/dist/execution/types.d.ts +84 -0
- package/dist/execution/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/observability/diagnostics.d.ts +25 -0
- package/dist/observability/diagnostics.d.ts.map +1 -0
- package/dist/observability/diagnostics.js +98 -0
- package/dist/observability/health.d.ts.map +1 -1
- package/dist/observability/health.js +17 -1
- package/dist/observability/index.d.ts +1 -0
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +6 -1
- package/dist/observability/types.d.ts +3 -0
- package/dist/observability/types.d.ts.map +1 -1
- package/dist/resources/index.d.ts +1 -1
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/manager.d.ts +4 -1
- package/dist/resources/manager.d.ts.map +1 -1
- package/dist/resources/manager.js +39 -0
- package/dist/resources/types.d.ts +22 -0
- package/dist/resources/types.d.ts.map +1 -1
- package/dist/shellInvocation.d.ts +6 -0
- package/dist/shellInvocation.d.ts.map +1 -0
- package/dist/shellInvocation.js +8 -0
- package/dist/shellInvocation.test.d.ts +2 -0
- package/dist/shellInvocation.test.d.ts.map +1 -0
- package/dist/shellInvocation.test.js +18 -0
- package/dist/telemetry/exporters.d.ts +35 -0
- package/dist/telemetry/exporters.d.ts.map +1 -0
- package/dist/telemetry/exporters.js +141 -0
- package/dist/telemetry/index.d.ts +5 -2
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +11 -1
- package/dist/telemetry/provider.d.ts +19 -1
- package/dist/telemetry/provider.d.ts.map +1 -1
- package/dist/telemetry/provider.js +176 -6
- package/dist/telemetry/traceContext.d.ts +10 -0
- package/dist/telemetry/traceContext.d.ts.map +1 -0
- package/dist/telemetry/traceContext.js +43 -0
- package/dist/telemetry/types.d.ts +24 -0
- package/dist/telemetry/types.d.ts.map +1 -1
- package/package.json +11 -3
package/README.md
CHANGED
|
@@ -4,6 +4,52 @@ Agent runtime layer (L5) for the Babysitter monorepo.
|
|
|
4
4
|
|
|
5
5
|
Provides daemon lifecycle, session management, resource management, and telemetry infrastructure.
|
|
6
6
|
|
|
7
|
+
The runtime observability surface includes compatible daemon JSONL logging policy
|
|
8
|
+
helpers, run-health latency percentiles, pure diagnostics renderers for health,
|
|
9
|
+
metrics, config, and queue state, and optional telemetry trace/export helpers.
|
|
10
|
+
Remote telemetry exporters are opt-in; local and no-op behavior remains the
|
|
11
|
+
default.
|
|
12
|
+
|
|
13
|
+
## Execution Policy
|
|
14
|
+
|
|
15
|
+
Execution configs accept an optional `policy` field that describes environment,
|
|
16
|
+
filesystem, network, resource, sandbox, Docker, SSH, and Kubernetes-compatible
|
|
17
|
+
execution constraints.
|
|
18
|
+
|
|
19
|
+
Secure defaults are intentionally conservative:
|
|
20
|
+
|
|
21
|
+
- Local and background execution do not inherit `process.env` by default.
|
|
22
|
+
Pass explicit `env` values, use `policy.environment.allow` for selected
|
|
23
|
+
parent variables, or set `policy.environment.inheritParentEnv: true` as an
|
|
24
|
+
explicit legacy opt-in.
|
|
25
|
+
- Local execution validates filesystem roots and fails fast when asked to
|
|
26
|
+
enforce network, namespace, chroot, seccomp, capability, CPU, memory, pids,
|
|
27
|
+
or open-file guarantees it cannot provide. Use Docker or Kubernetes for
|
|
28
|
+
enforceable isolation, or set `policy.sandbox.allowUnsupportedLocal: true`
|
|
29
|
+
only for trusted host-process execution.
|
|
30
|
+
- Docker execution emits hardened defaults: read-only root filesystem, `ALL`
|
|
31
|
+
capabilities dropped, `no-new-privileges`, a non-root user, and `--network
|
|
32
|
+
none` unless a network is explicitly configured. Host network and writable
|
|
33
|
+
root filesystem require `policy.docker.insecureAllowPrivilegedOptions: true`.
|
|
34
|
+
- SSH execution uses strict host-key checking by default. `StrictHostKeyChecking=no`
|
|
35
|
+
is emitted only when `policy.ssh.insecureSkipHostKeyChecking: true` is set.
|
|
36
|
+
- Kubernetes manifests include policy environment, resources, and a restricted
|
|
37
|
+
container `securityContext` where structurally supported by the manifest
|
|
38
|
+
builder.
|
|
39
|
+
- Background processes use the same environment and cwd policy semantics and
|
|
40
|
+
can cap retained stdout/stderr with `policy.resources.maxOutputBytes`.
|
|
41
|
+
Snapshots and completion events include retained and dropped byte counts so
|
|
42
|
+
truncation is explicit.
|
|
43
|
+
- Background process lifecycle controls support opt-in process-group signaling
|
|
44
|
+
on POSIX, direct-child fallback, grace-period SIGKILL escalation, timeout
|
|
45
|
+
status, platform-gated pause/resume, dependency queueing, and lifecycle hook
|
|
46
|
+
diagnostics. These controls are separate from daemon start/stop and session
|
|
47
|
+
pause policy.
|
|
48
|
+
|
|
49
|
+
The policy layer records OS resource intent through `ResourceManagerImpl` but
|
|
50
|
+
does not claim direct kernel enforcement. Concrete executors translate supported
|
|
51
|
+
limits into their own runtime arguments.
|
|
52
|
+
|
|
7
53
|
## Install
|
|
8
54
|
|
|
9
55
|
```bash
|
|
@@ -4,11 +4,17 @@ import { BackgroundProcessRegistry } from "../backgroundProcessRegistry";
|
|
|
4
4
|
* that state.ts actually consumes. Defined locally to avoid a circular
|
|
5
5
|
* dependency between agent-runtime and agent-core.
|
|
6
6
|
*/
|
|
7
|
-
interface BackgroundRegistryOwner {
|
|
7
|
+
export interface BackgroundRegistryOwner {
|
|
8
8
|
backgroundRegistry?: BackgroundProcessRegistry;
|
|
9
9
|
maxBackgroundProcesses?: number;
|
|
10
|
+
/**
|
|
11
|
+
* Stable identifier for the owner. When provided, the registry is stored
|
|
12
|
+
* in a string-keyed Map in addition to the WeakMap. This prevents orphaning
|
|
13
|
+
* when the caller recreates the options object (new object identity) but
|
|
14
|
+
* logically refers to the same owner.
|
|
15
|
+
*/
|
|
16
|
+
registryId?: string;
|
|
10
17
|
}
|
|
11
18
|
export declare function getBackgroundRegistry(options: BackgroundRegistryOwner): BackgroundProcessRegistry;
|
|
12
19
|
export declare function disposeBackgroundRegistry(options: BackgroundRegistryOwner): void;
|
|
13
|
-
export {};
|
|
14
20
|
//# sourceMappingURL=state.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/background/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAEzE;;;;GAIG;AACH,
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/background/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAEzE;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,kBAAkB,CAAC,EAAE,yBAAyB,CAAC;IAC/C,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAcD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,uBAAuB,GAAG,yBAAyB,CA8BjG;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAWhF"}
|
package/dist/background/state.js
CHANGED
|
@@ -3,15 +3,39 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getBackgroundRegistry = getBackgroundRegistry;
|
|
4
4
|
exports.disposeBackgroundRegistry = disposeBackgroundRegistry;
|
|
5
5
|
const backgroundProcessRegistry_1 = require("../backgroundProcessRegistry");
|
|
6
|
+
/**
|
|
7
|
+
* Primary store — keyed by object identity (auto-collected when owner is GC'd).
|
|
8
|
+
*/
|
|
6
9
|
const scopedRegistries = new WeakMap();
|
|
10
|
+
/**
|
|
11
|
+
* Secondary store — keyed by `registryId` string so that a new options object
|
|
12
|
+
* with the same registryId finds the existing registry instead of creating a
|
|
13
|
+
* new one (which would orphan any background processes tracked by the old one).
|
|
14
|
+
*/
|
|
15
|
+
const namedRegistries = new Map();
|
|
7
16
|
function getBackgroundRegistry(options) {
|
|
8
17
|
if (options.backgroundRegistry) {
|
|
9
18
|
return options.backgroundRegistry;
|
|
10
19
|
}
|
|
20
|
+
// Try the WeakMap first (cheapest path for stable object references).
|
|
11
21
|
let registry = scopedRegistries.get(options);
|
|
12
|
-
if (
|
|
13
|
-
registry
|
|
14
|
-
|
|
22
|
+
if (registry) {
|
|
23
|
+
return registry;
|
|
24
|
+
}
|
|
25
|
+
// Try the string-keyed secondary map when a registryId is provided.
|
|
26
|
+
if (options.registryId) {
|
|
27
|
+
registry = namedRegistries.get(options.registryId);
|
|
28
|
+
if (registry) {
|
|
29
|
+
// Re-attach to the WeakMap so subsequent lookups with this object are fast.
|
|
30
|
+
scopedRegistries.set(options, registry);
|
|
31
|
+
return registry;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// No existing registry found — create a new one.
|
|
35
|
+
registry = new backgroundProcessRegistry_1.BackgroundProcessRegistry({ maxConcurrent: options.maxBackgroundProcesses });
|
|
36
|
+
scopedRegistries.set(options, registry);
|
|
37
|
+
if (options.registryId) {
|
|
38
|
+
namedRegistries.set(options.registryId, registry);
|
|
15
39
|
}
|
|
16
40
|
return registry;
|
|
17
41
|
}
|
|
@@ -22,4 +46,7 @@ function disposeBackgroundRegistry(options) {
|
|
|
22
46
|
}
|
|
23
47
|
registry.dispose();
|
|
24
48
|
scopedRegistries.delete(options);
|
|
49
|
+
if (options.registryId) {
|
|
50
|
+
namedRegistries.delete(options.registryId);
|
|
51
|
+
}
|
|
25
52
|
}
|
|
@@ -5,17 +5,44 @@
|
|
|
5
5
|
* stdout/stderr, fires completion callbacks, and enforces a concurrency limit.
|
|
6
6
|
*/
|
|
7
7
|
import * as childProcess from "node:child_process";
|
|
8
|
+
import type { ExecutionPolicy } from "./execution";
|
|
8
9
|
/** Snapshot of a tracked background process. */
|
|
10
|
+
export type BackgroundTaskStatus = "queued" | "running" | "paused" | "completed" | "exited" | "cancelled" | "killed" | "timed_out" | "skipped" | "failed";
|
|
11
|
+
export interface BackgroundStreamMetadata {
|
|
12
|
+
retainedBytes: number;
|
|
13
|
+
droppedBytes: number;
|
|
14
|
+
truncated: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface BackgroundHookError {
|
|
17
|
+
hook: keyof BackgroundLifecycleHooks;
|
|
18
|
+
message: string;
|
|
19
|
+
}
|
|
20
|
+
export interface BackgroundLifecycleHooks {
|
|
21
|
+
preSpawn?: (record: BackgroundTaskRecord) => void;
|
|
22
|
+
postSpawn?: (record: BackgroundTaskRecord) => void;
|
|
23
|
+
preDestroy?: (record: BackgroundTaskRecord) => void;
|
|
24
|
+
postDestroy?: (record: BackgroundTaskRecord) => void;
|
|
25
|
+
onTimeout?: (record: BackgroundTaskRecord) => void;
|
|
26
|
+
}
|
|
9
27
|
export interface BackgroundTaskRecord {
|
|
10
28
|
backgroundTaskId: string;
|
|
11
29
|
pid: number;
|
|
12
30
|
command: string;
|
|
13
31
|
description?: string;
|
|
14
32
|
startedAt: string;
|
|
15
|
-
status:
|
|
33
|
+
status: BackgroundTaskStatus;
|
|
16
34
|
exitCode: number | null;
|
|
17
35
|
stdout: string;
|
|
18
36
|
stderr: string;
|
|
37
|
+
stdoutTruncated?: boolean;
|
|
38
|
+
stderrTruncated?: boolean;
|
|
39
|
+
stdoutRetainedBytes?: number;
|
|
40
|
+
stderrRetainedBytes?: number;
|
|
41
|
+
stdoutDroppedBytes?: number;
|
|
42
|
+
stderrDroppedBytes?: number;
|
|
43
|
+
dependsOn?: string[];
|
|
44
|
+
dependencyFailure?: string;
|
|
45
|
+
hookErrors?: BackgroundHookError[];
|
|
19
46
|
durationMs: number | null;
|
|
20
47
|
}
|
|
21
48
|
/** Payload delivered to `onComplete` callbacks. */
|
|
@@ -24,10 +51,19 @@ export interface BackgroundCompletionEvent {
|
|
|
24
51
|
pid: number;
|
|
25
52
|
command: string;
|
|
26
53
|
description?: string;
|
|
27
|
-
status:
|
|
54
|
+
status: BackgroundTaskStatus;
|
|
28
55
|
exitCode: number;
|
|
29
56
|
stdout: string;
|
|
30
57
|
stderr: string;
|
|
58
|
+
stdoutTruncated?: boolean;
|
|
59
|
+
stderrTruncated?: boolean;
|
|
60
|
+
stdoutRetainedBytes?: number;
|
|
61
|
+
stderrRetainedBytes?: number;
|
|
62
|
+
stdoutDroppedBytes?: number;
|
|
63
|
+
stderrDroppedBytes?: number;
|
|
64
|
+
dependsOn?: string[];
|
|
65
|
+
dependencyFailure?: string;
|
|
66
|
+
hookErrors?: BackgroundHookError[];
|
|
31
67
|
durationMs: number;
|
|
32
68
|
}
|
|
33
69
|
/** Options for spawning a background process. */
|
|
@@ -35,22 +71,33 @@ export interface SpawnOptions {
|
|
|
35
71
|
command: string;
|
|
36
72
|
cwd: string;
|
|
37
73
|
env?: Record<string, string>;
|
|
74
|
+
executionPolicy?: ExecutionPolicy;
|
|
38
75
|
description?: string;
|
|
76
|
+
dependsOn?: string[];
|
|
77
|
+
hooks?: BackgroundLifecycleHooks;
|
|
78
|
+
hookTimeoutMs?: number;
|
|
79
|
+
terminationGraceMs?: number;
|
|
80
|
+
terminateProcessGroup?: boolean;
|
|
39
81
|
onComplete?: (event: BackgroundCompletionEvent) => void;
|
|
40
82
|
}
|
|
41
83
|
export declare class BackgroundProcessRegistry {
|
|
42
84
|
private readonly processes;
|
|
43
85
|
private readonly maxConcurrent;
|
|
44
86
|
private readonly spawnFn;
|
|
87
|
+
private readonly processKillFn;
|
|
88
|
+
private readonly platform;
|
|
45
89
|
constructor(options?: {
|
|
46
90
|
maxConcurrent?: number;
|
|
47
91
|
spawnFn?: typeof childProcess.spawn;
|
|
92
|
+
processKillFn?: typeof process.kill;
|
|
93
|
+
platform?: NodeJS.Platform;
|
|
48
94
|
});
|
|
49
95
|
/**
|
|
50
96
|
* Spawn a command in the background and begin tracking it.
|
|
51
97
|
* Returns a snapshot of the initial record.
|
|
52
98
|
*/
|
|
53
99
|
spawn(opts: SpawnOptions): BackgroundTaskRecord;
|
|
100
|
+
private startTrackedProcess;
|
|
54
101
|
/** Get a snapshot of a tracked process by ID, or undefined. */
|
|
55
102
|
get(backgroundTaskId: string): BackgroundTaskRecord | undefined;
|
|
56
103
|
/** List snapshots of all tracked processes. */
|
|
@@ -61,6 +108,17 @@ export declare class BackgroundProcessRegistry {
|
|
|
61
108
|
killAll(): void;
|
|
62
109
|
/** Kill all processes and clear tracking state. */
|
|
63
110
|
dispose(): void;
|
|
111
|
+
pause(backgroundTaskId: string): boolean;
|
|
112
|
+
resume(backgroundTaskId: string): boolean;
|
|
64
113
|
private snapshot;
|
|
114
|
+
private completionEvent;
|
|
115
|
+
private terminate;
|
|
116
|
+
private canSignal;
|
|
117
|
+
private sendSignal;
|
|
118
|
+
private shouldSignalProcessGroup;
|
|
119
|
+
private isStillRunning;
|
|
120
|
+
private resolveDependents;
|
|
121
|
+
private resolveQueuedProcess;
|
|
122
|
+
private runHook;
|
|
65
123
|
}
|
|
66
124
|
//# sourceMappingURL=backgroundProcessRegistry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backgroundProcessRegistry.d.ts","sourceRoot":"","sources":["../src/backgroundProcessRegistry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"backgroundProcessRegistry.d.ts","sourceRoot":"","sources":["../src/backgroundProcessRegistry.ts"],"names":[],"mappings":"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"}
|