@a5c-ai/agent-runtime 5.0.1-staging.07d877d5a3d1 → 5.0.1-staging.40aef9d16aae

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.
Files changed (91) hide show
  1. package/README.md +46 -0
  2. package/dist/background/state.d.ts +8 -2
  3. package/dist/background/state.d.ts.map +1 -1
  4. package/dist/background/state.js +30 -3
  5. package/dist/backgroundProcessRegistry.d.ts +60 -2
  6. package/dist/backgroundProcessRegistry.d.ts.map +1 -1
  7. package/dist/backgroundProcessRegistry.js +280 -55
  8. package/dist/daemon/config.d.ts.map +1 -1
  9. package/dist/daemon/config.js +36 -0
  10. package/dist/daemon/daemonLog.d.ts +18 -1
  11. package/dist/daemon/daemonLog.d.ts.map +1 -1
  12. package/dist/daemon/daemonLog.js +78 -2
  13. package/dist/daemon/durableQueue.d.ts +41 -0
  14. package/dist/daemon/durableQueue.d.ts.map +1 -0
  15. package/dist/daemon/durableQueue.js +183 -0
  16. package/dist/daemon/fileWatcher.d.ts.map +1 -1
  17. package/dist/daemon/fileWatcher.js +3 -0
  18. package/dist/daemon/index.d.ts +5 -3
  19. package/dist/daemon/index.d.ts.map +1 -1
  20. package/dist/daemon/index.js +4 -1
  21. package/dist/daemon/lifecycle.d.ts +2 -1
  22. package/dist/daemon/lifecycle.d.ts.map +1 -1
  23. package/dist/daemon/lifecycle.js +63 -0
  24. package/dist/daemon/loop.d.ts +6 -0
  25. package/dist/daemon/loop.d.ts.map +1 -1
  26. package/dist/daemon/loop.js +209 -18
  27. package/dist/daemon/timerScheduler.d.ts.map +1 -1
  28. package/dist/daemon/timerScheduler.js +111 -21
  29. package/dist/daemon/types.d.ts +30 -1
  30. package/dist/daemon/types.d.ts.map +1 -1
  31. package/dist/daemon/webhookListener.d.ts.map +1 -1
  32. package/dist/daemon/webhookListener.js +25 -3
  33. package/dist/execution/index.d.ts +3 -1
  34. package/dist/execution/index.d.ts.map +1 -1
  35. package/dist/execution/index.js +9 -1
  36. package/dist/execution/modes/docker.d.ts +5 -0
  37. package/dist/execution/modes/docker.d.ts.map +1 -1
  38. package/dist/execution/modes/docker.js +64 -6
  39. package/dist/execution/modes/kubernetes.d.ts +27 -10
  40. package/dist/execution/modes/kubernetes.d.ts.map +1 -1
  41. package/dist/execution/modes/kubernetes.js +251 -38
  42. package/dist/execution/modes/local.d.ts.map +1 -1
  43. package/dist/execution/modes/local.js +16 -1
  44. package/dist/execution/modes/ssh.d.ts.map +1 -1
  45. package/dist/execution/modes/ssh.js +14 -4
  46. package/dist/execution/policy.d.ts +15 -0
  47. package/dist/execution/policy.d.ts.map +1 -0
  48. package/dist/execution/policy.js +121 -0
  49. package/dist/execution/types.d.ts +84 -0
  50. package/dist/execution/types.d.ts.map +1 -1
  51. package/dist/index.d.ts +1 -0
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +3 -1
  54. package/dist/observability/diagnostics.d.ts +25 -0
  55. package/dist/observability/diagnostics.d.ts.map +1 -0
  56. package/dist/observability/diagnostics.js +98 -0
  57. package/dist/observability/health.d.ts.map +1 -1
  58. package/dist/observability/health.js +17 -1
  59. package/dist/observability/index.d.ts +1 -0
  60. package/dist/observability/index.d.ts.map +1 -1
  61. package/dist/observability/index.js +6 -1
  62. package/dist/observability/types.d.ts +3 -0
  63. package/dist/observability/types.d.ts.map +1 -1
  64. package/dist/resources/index.d.ts +1 -1
  65. package/dist/resources/index.d.ts.map +1 -1
  66. package/dist/resources/manager.d.ts +4 -1
  67. package/dist/resources/manager.d.ts.map +1 -1
  68. package/dist/resources/manager.js +39 -0
  69. package/dist/resources/types.d.ts +22 -0
  70. package/dist/resources/types.d.ts.map +1 -1
  71. package/dist/shellInvocation.d.ts +6 -0
  72. package/dist/shellInvocation.d.ts.map +1 -0
  73. package/dist/shellInvocation.js +8 -0
  74. package/dist/shellInvocation.test.d.ts +2 -0
  75. package/dist/shellInvocation.test.d.ts.map +1 -0
  76. package/dist/shellInvocation.test.js +18 -0
  77. package/dist/telemetry/exporters.d.ts +35 -0
  78. package/dist/telemetry/exporters.d.ts.map +1 -0
  79. package/dist/telemetry/exporters.js +141 -0
  80. package/dist/telemetry/index.d.ts +5 -2
  81. package/dist/telemetry/index.d.ts.map +1 -1
  82. package/dist/telemetry/index.js +11 -1
  83. package/dist/telemetry/provider.d.ts +19 -1
  84. package/dist/telemetry/provider.d.ts.map +1 -1
  85. package/dist/telemetry/provider.js +176 -6
  86. package/dist/telemetry/traceContext.d.ts +10 -0
  87. package/dist/telemetry/traceContext.d.ts.map +1 -0
  88. package/dist/telemetry/traceContext.js +43 -0
  89. package/dist/telemetry/types.d.ts +24 -0
  90. package/dist/telemetry/types.d.ts.map +1 -1
  91. 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,UAAU,uBAAuB;IAC/B,kBAAkB,CAAC,EAAE,yBAAyB,CAAC;IAC/C,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAID,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,uBAAuB,GAAG,yBAAyB,CAWjG;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAOhF"}
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"}
@@ -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 (!registry) {
13
- registry = new backgroundProcessRegistry_1.BackgroundProcessRegistry({ maxConcurrent: options.maxBackgroundProcesses });
14
- scopedRegistries.set(options, registry);
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: "running" | "completed" | "exited" | "cancelled" | "killed";
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: "completed" | "exited";
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;AAOnD,gDAAgD;AAChD,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;IACpE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,mDAAmD;AACnD,MAAM,WAAW,yBAAyB;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,iDAAiD;AACjD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;CACzD;AA4BD,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqC;IAC/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;gBAExC,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,YAAY,CAAC,KAAK,CAAA;KAAE;IAKrF;;;OAGG;IACH,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,oBAAoB;IAuF/C,+DAA+D;IAC/D,GAAG,CAAC,gBAAgB,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAM/D,+CAA+C;IAC/C,IAAI,IAAI,oBAAoB,EAAE;IAI9B,4EAA4E;IAC5E,MAAM,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO;IAczC,kCAAkC;IAClC,OAAO,IAAI,IAAI;IAcf,mDAAmD;IACnD,OAAO,IAAI,IAAI;IASf,OAAO,CAAC,QAAQ;CAcjB"}
1
+ {"version":3,"file":"backgroundProcessRegistry.d.ts","sourceRoot":"","sources":["../src/backgroundProcessRegistry.ts"],"names":[],"mappings":"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"}