@mono-agent/agent-app 0.4.0 → 0.5.0

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 (173) hide show
  1. package/README.md +15 -5
  2. package/dist/adapter-send-tools-main.js +2 -2
  3. package/dist/adapter-send-tools-main.js.map +1 -1
  4. package/dist/adapter-send-tools.d.ts +72 -6
  5. package/dist/adapter-send-tools.d.ts.map +1 -1
  6. package/dist/adapter-send-tools.js +413 -38
  7. package/dist/adapter-send-tools.js.map +1 -1
  8. package/dist/app-config.d.ts +48 -11
  9. package/dist/app-config.d.ts.map +1 -1
  10. package/dist/app-config.js +98 -24
  11. package/dist/app-config.js.map +1 -1
  12. package/dist/app.d.ts +10 -0
  13. package/dist/app.d.ts.map +1 -1
  14. package/dist/app.js +659 -48
  15. package/dist/app.js.map +1 -1
  16. package/dist/artifact-retention.d.ts +32 -0
  17. package/dist/artifact-retention.d.ts.map +1 -0
  18. package/dist/artifact-retention.js +111 -0
  19. package/dist/artifact-retention.js.map +1 -0
  20. package/dist/audit-runs.d.ts +12 -0
  21. package/dist/audit-runs.d.ts.map +1 -0
  22. package/dist/audit-runs.js +68 -0
  23. package/dist/audit-runs.js.map +1 -0
  24. package/dist/backfill.d.ts +3 -7
  25. package/dist/backfill.d.ts.map +1 -1
  26. package/dist/backfill.js +115 -11
  27. package/dist/backfill.js.map +1 -1
  28. package/dist/background.d.ts +8 -1
  29. package/dist/background.d.ts.map +1 -1
  30. package/dist/background.js +202 -4
  31. package/dist/background.js.map +1 -1
  32. package/dist/broadcast-recorder.d.ts +27 -0
  33. package/dist/broadcast-recorder.d.ts.map +1 -0
  34. package/dist/broadcast-recorder.js +82 -0
  35. package/dist/broadcast-recorder.js.map +1 -0
  36. package/dist/channel-config-view.d.ts +28 -0
  37. package/dist/channel-config-view.d.ts.map +1 -0
  38. package/dist/channel-config-view.js +79 -0
  39. package/dist/channel-config-view.js.map +1 -0
  40. package/dist/channel-gate.d.ts +22 -0
  41. package/dist/channel-gate.d.ts.map +1 -0
  42. package/dist/channel-gate.js +35 -0
  43. package/dist/channel-gate.js.map +1 -0
  44. package/dist/channel-plugins.d.ts +39 -0
  45. package/dist/channel-plugins.d.ts.map +1 -0
  46. package/dist/channel-plugins.js +372 -0
  47. package/dist/channel-plugins.js.map +1 -0
  48. package/dist/channels.d.ts +62 -73
  49. package/dist/channels.d.ts.map +1 -1
  50. package/dist/channels.js +833 -126
  51. package/dist/channels.js.map +1 -1
  52. package/dist/cli.d.ts +65 -3
  53. package/dist/cli.d.ts.map +1 -1
  54. package/dist/cli.js +755 -30
  55. package/dist/cli.js.map +1 -1
  56. package/dist/config-reference.d.ts +24 -0
  57. package/dist/config-reference.d.ts.map +1 -0
  58. package/dist/config-reference.js +580 -0
  59. package/dist/config-reference.js.map +1 -0
  60. package/dist/configured-agent.d.ts +104 -0
  61. package/dist/configured-agent.d.ts.map +1 -0
  62. package/dist/configured-agent.js +578 -0
  63. package/dist/configured-agent.js.map +1 -0
  64. package/dist/consumer-contract.d.ts +36 -0
  65. package/dist/consumer-contract.d.ts.map +1 -0
  66. package/dist/consumer-contract.js +290 -0
  67. package/dist/consumer-contract.js.map +1 -0
  68. package/dist/doctor.d.ts +9 -0
  69. package/dist/doctor.d.ts.map +1 -1
  70. package/dist/doctor.js +352 -55
  71. package/dist/doctor.js.map +1 -1
  72. package/dist/index.d.ts +9 -3
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +5 -2
  75. package/dist/index.js.map +1 -1
  76. package/dist/init.d.ts +23 -7
  77. package/dist/init.d.ts.map +1 -1
  78. package/dist/init.js +91 -26
  79. package/dist/init.js.map +1 -1
  80. package/dist/install-skill.d.ts +1 -1
  81. package/dist/install-skill.js +2 -2
  82. package/dist/install-skill.js.map +1 -1
  83. package/dist/interaction-bridge.d.ts +72 -0
  84. package/dist/interaction-bridge.d.ts.map +1 -0
  85. package/dist/interaction-bridge.js +354 -0
  86. package/dist/interaction-bridge.js.map +1 -0
  87. package/dist/memory-command.d.ts +10 -0
  88. package/dist/memory-command.d.ts.map +1 -0
  89. package/dist/memory-command.js +649 -0
  90. package/dist/memory-command.js.map +1 -0
  91. package/dist/memory-recall-main.js +1 -1
  92. package/dist/memory-recall-main.js.map +1 -1
  93. package/dist/memory-recall.d.ts +41 -5
  94. package/dist/memory-recall.d.ts.map +1 -1
  95. package/dist/memory-recall.js +75 -5
  96. package/dist/memory-recall.js.map +1 -1
  97. package/dist/memory-rituals.d.ts +8 -11
  98. package/dist/memory-rituals.d.ts.map +1 -1
  99. package/dist/memory-rituals.js +26 -25
  100. package/dist/memory-rituals.js.map +1 -1
  101. package/dist/metrics.d.ts +13 -0
  102. package/dist/metrics.d.ts.map +1 -0
  103. package/dist/metrics.js +105 -0
  104. package/dist/metrics.js.map +1 -0
  105. package/dist/notify-destinations.d.ts +23 -0
  106. package/dist/notify-destinations.d.ts.map +1 -0
  107. package/dist/notify-destinations.js +79 -0
  108. package/dist/notify-destinations.js.map +1 -0
  109. package/dist/posted-message-index.d.ts +61 -0
  110. package/dist/posted-message-index.d.ts.map +1 -0
  111. package/dist/posted-message-index.js +178 -0
  112. package/dist/posted-message-index.js.map +1 -0
  113. package/dist/proactive-notify.d.ts +32 -0
  114. package/dist/proactive-notify.d.ts.map +1 -0
  115. package/dist/proactive-notify.js +62 -0
  116. package/dist/proactive-notify.js.map +1 -0
  117. package/dist/recipes/base.d.ts +15 -0
  118. package/dist/recipes/base.d.ts.map +1 -0
  119. package/dist/recipes/base.js +51 -0
  120. package/dist/recipes/base.js.map +1 -0
  121. package/dist/recipes/catalog.d.ts +4 -0
  122. package/dist/recipes/catalog.d.ts.map +1 -0
  123. package/dist/recipes/catalog.js +525 -0
  124. package/dist/recipes/catalog.js.map +1 -0
  125. package/dist/recipes/index.d.ts +11 -0
  126. package/dist/recipes/index.d.ts.map +1 -0
  127. package/dist/recipes/index.js +14 -0
  128. package/dist/recipes/index.js.map +1 -0
  129. package/dist/recipes/types.d.ts +70 -0
  130. package/dist/recipes/types.d.ts.map +1 -0
  131. package/dist/recipes/types.js +15 -0
  132. package/dist/recipes/types.js.map +1 -0
  133. package/dist/request-model-override.d.ts +67 -0
  134. package/dist/request-model-override.d.ts.map +1 -0
  135. package/dist/request-model-override.js +96 -0
  136. package/dist/request-model-override.js.map +1 -0
  137. package/dist/runs-health.d.ts +22 -0
  138. package/dist/runs-health.d.ts.map +1 -0
  139. package/dist/runs-health.js +144 -0
  140. package/dist/runs-health.js.map +1 -0
  141. package/dist/seen-conversations.d.ts +22 -0
  142. package/dist/seen-conversations.d.ts.map +1 -0
  143. package/dist/seen-conversations.js +120 -0
  144. package/dist/seen-conversations.js.map +1 -0
  145. package/dist/setup.d.ts +29 -0
  146. package/dist/setup.d.ts.map +1 -0
  147. package/dist/setup.js +97 -0
  148. package/dist/setup.js.map +1 -0
  149. package/dist/trigger-overrides.d.ts +17 -0
  150. package/dist/trigger-overrides.d.ts.map +1 -0
  151. package/dist/trigger-overrides.js +30 -0
  152. package/dist/trigger-overrides.js.map +1 -0
  153. package/dist/tui-command.d.ts +56 -0
  154. package/dist/tui-command.d.ts.map +1 -0
  155. package/dist/tui-command.js +160 -0
  156. package/dist/tui-command.js.map +1 -0
  157. package/dist/ui.d.ts.map +1 -1
  158. package/dist/ui.js +4 -0
  159. package/dist/ui.js.map +1 -1
  160. package/dist/web-command.d.ts +45 -0
  161. package/dist/web-command.d.ts.map +1 -0
  162. package/dist/web-command.js +152 -0
  163. package/dist/web-command.js.map +1 -0
  164. package/package.json +19 -18
  165. package/schema/mono-agent.config.schema.json +1686 -0
  166. package/skills/mono-agent-composer/SKILL.md +34 -9
  167. package/skills/mono-agent-composer/agents/openai.yaml +4 -0
  168. package/skills/mono-agent-composer/references/config-blueprint.md +92 -49
  169. package/skills/mono-agent-composer/references/discovery-questions.md +15 -17
  170. package/skills/mono-agent-composer/references/feature-coverage.md +22 -17
  171. package/skills/mono-agent-composer/references/package-map.md +19 -21
  172. package/skills/mono-agent-composer/references/playbooks.md +267 -0
  173. package/skills/mono-agent-composer/references/validation.md +9 -1
package/dist/backfill.js CHANGED
@@ -1,10 +1,11 @@
1
- import { readFile, readdir } from "node:fs/promises";
1
+ import { readFile, readdir, stat } from "node:fs/promises";
2
2
  import { join, resolve } from "node:path";
3
3
  import process from "node:process";
4
- import { buildRunReadableSpans, createDeterministicIdFactory, postOtlpProtobuf, serializeTraceSpans, } from "@mono-agent/observability-otel";
4
+ import { buildRunReadableSpans, createDeterministicIdFactory, postOtlpProtobuf, serializeTraceSpans, } from "@mono-agent/observability/otel";
5
5
  import { resolveAppArtifactDir, resolveAppObservabilityExporters, resolveAppTraceSourceId, resolveAppTraceSourceLabel, } from "./app-config.js";
6
6
  const SUMMARY_SUFFIX = ".summary.json";
7
7
  const EVENTS_SUFFIX = ".events.jsonl";
8
+ const MEMORY_ARTIFACT_NAMESPACE = "memory";
8
9
  // Backfill is a deliberate foreground batch (not the live best-effort path), so
9
10
  // a single very large run gets a generous POST budget regardless of the live
10
11
  // exporter's small default timeout.
@@ -39,11 +40,12 @@ export function isRetryable(error) {
39
40
  */
40
41
  export async function readRunArtifacts(artifactDir, runId) {
41
42
  const warnings = [];
42
- const summaryRaw = await readFile(join(artifactDir, `${runId}${SUMMARY_SUFFIX}`), "utf8");
43
+ const runArtifactDir = await resolveRunArtifactDir(artifactDir, runId);
44
+ const summaryRaw = await readFile(join(runArtifactDir, `${runId}${SUMMARY_SUFFIX}`), "utf8");
43
45
  const summary = JSON.parse(summaryRaw);
44
46
  let events = [];
45
47
  try {
46
- const eventsRaw = await readFile(join(artifactDir, `${runId}${EVENTS_SUFFIX}`), "utf8");
48
+ const eventsRaw = await readFile(join(runArtifactDir, `${runId}${EVENTS_SUFFIX}`), "utf8");
47
49
  events = parseEventsJsonl(eventsRaw, warnings);
48
50
  }
49
51
  catch {
@@ -51,6 +53,17 @@ export async function readRunArtifacts(artifactDir, runId) {
51
53
  }
52
54
  return { summary, events, warnings };
53
55
  }
56
+ async function resolveRunArtifactDir(artifactDir, runId) {
57
+ const topLevel = resolve(artifactDir);
58
+ if (await fileExists(join(topLevel, `${runId}${SUMMARY_SUFFIX}`))) {
59
+ return topLevel;
60
+ }
61
+ const memoryDir = join(topLevel, MEMORY_ARTIFACT_NAMESPACE);
62
+ if (await fileExists(join(memoryDir, `${runId}${SUMMARY_SUFFIX}`))) {
63
+ return memoryDir;
64
+ }
65
+ return topLevel;
66
+ }
54
67
  function parseEventsJsonl(raw, warnings) {
55
68
  const events = [];
56
69
  const lines = raw.split("\n");
@@ -75,6 +88,20 @@ function parseEventsJsonl(raw, warnings) {
75
88
  * `endedAt` is missing for runs that never finished (≈crashed/running) — fall
76
89
  * back to `startedAt + durationMs`.
77
90
  */
91
+ /**
92
+ * Recover a run's kind + memory operation from its persisted conversationId.
93
+ * Memory runs use `memory:<label>` (e.g. `memory:capture:distill`); the operation
94
+ * is the trailing label segment (`distill`), excluding the bare `memory:bujo` fallback.
95
+ */
96
+ function memoryRunInfo(conversationId) {
97
+ if (!conversationId.startsWith("memory:")) {
98
+ return { runKind: "channel" };
99
+ }
100
+ const tail = conversationId.split(":").pop();
101
+ return tail === undefined || tail.length === 0 || tail === "bujo"
102
+ ? { runKind: "memory" }
103
+ : { runKind: "memory", operation: tail };
104
+ }
78
105
  export function runStartEndNanos(summary) {
79
106
  const startMs = summary.startedAt !== undefined ? Date.parse(summary.startedAt) : Number.NaN;
80
107
  const safeStartMs = Number.isNaN(startMs) ? 0 : startMs;
@@ -112,12 +139,80 @@ async function postWithRetry(exporter, projectName, body) {
112
139
  throw lastError;
113
140
  }
114
141
  /** List run ids (base names) present in an artifact dir, sorted oldest-first by id. */
115
- async function listRunIds(artifactDir) {
116
- const entries = await readdir(artifactDir, { withFileTypes: true });
117
- return entries
118
- .filter((entry) => entry.isFile() && entry.name.endsWith(SUMMARY_SUFFIX))
119
- .map((entry) => entry.name.slice(0, -SUMMARY_SUFFIX.length))
120
- .sort();
142
+ async function listRunIds(artifactDir, scope) {
143
+ const root = resolve(artifactDir);
144
+ const ids = new Set();
145
+ for (const runId of await listRunIdsFromDir(root, "agent", scope)) {
146
+ ids.add(runId);
147
+ }
148
+ if (scope === "memory" || scope === "all") {
149
+ for (const runId of await listRunIdsFromDir(join(root, MEMORY_ARTIFACT_NAMESPACE), "memory", scope)) {
150
+ ids.add(runId);
151
+ }
152
+ }
153
+ return [...ids].sort();
154
+ }
155
+ async function listRunIdsFromDir(artifactDir, namespaceKind, scope) {
156
+ let entries;
157
+ try {
158
+ entries = await readdir(artifactDir, { withFileTypes: true });
159
+ }
160
+ catch (error) {
161
+ if (isMissingPath(error)) {
162
+ return [];
163
+ }
164
+ throw error;
165
+ }
166
+ const ids = [];
167
+ for (const entry of entries) {
168
+ if (!entry.isFile() || !entry.name.endsWith(SUMMARY_SUFFIX)) {
169
+ continue;
170
+ }
171
+ const runId = entry.name.slice(0, -SUMMARY_SUFFIX.length);
172
+ if (scope === "all" || namespaceKind === "memory") {
173
+ ids.push(runId);
174
+ continue;
175
+ }
176
+ const raw = await readSummaryJson(join(artifactDir, entry.name));
177
+ const memoryRun = raw === undefined ? runId.startsWith("mem-") : isMemoryRunSummary(raw);
178
+ if (scope === "agent" ? !memoryRun : memoryRun) {
179
+ ids.push(runId);
180
+ }
181
+ }
182
+ return ids;
183
+ }
184
+ async function readSummaryJson(path) {
185
+ try {
186
+ const parsed = JSON.parse(await readFile(path, "utf8"));
187
+ return parsed !== null && typeof parsed === "object" && !Array.isArray(parsed)
188
+ ? parsed
189
+ : undefined;
190
+ }
191
+ catch {
192
+ return undefined;
193
+ }
194
+ }
195
+ function isMemoryRunSummary(summary) {
196
+ return summary.source === "memory" ||
197
+ (typeof summary.conversationId === "string" && summary.conversationId.startsWith("memory:")) ||
198
+ (typeof summary.runId === "string" && summary.runId.startsWith("mem-"));
199
+ }
200
+ async function fileExists(path) {
201
+ try {
202
+ return (await stat(path)).isFile();
203
+ }
204
+ catch (error) {
205
+ if (isMissingPath(error)) {
206
+ return false;
207
+ }
208
+ throw error;
209
+ }
210
+ }
211
+ function isMissingPath(error) {
212
+ return error !== null &&
213
+ typeof error === "object" &&
214
+ "code" in error &&
215
+ error.code === "ENOENT";
121
216
  }
122
217
  function withinWindow(summary, since, until) {
123
218
  if (since === undefined && until === undefined) {
@@ -153,7 +248,8 @@ export async function backfillRuns(input, options) {
153
248
  const sourceLabel = await resolveAppTraceSourceLabel(input);
154
249
  const projectName = resolveProjectName(exporter, sourceLabel, sourceId);
155
250
  const includeSensitiveData = exporter.includeSensitiveData ?? false;
156
- const runIds = options.run !== undefined ? [options.run] : await listRunIds(artifactDir);
251
+ const scope = options.run !== undefined ? "all" : options.includeMemory === true ? "all" : "agent";
252
+ const runIds = options.run !== undefined ? [options.run] : await listRunIds(artifactDir, scope);
157
253
  const outcomes = [];
158
254
  for (const runId of runIds) {
159
255
  try {
@@ -162,6 +258,11 @@ export async function backfillRuns(input, options) {
162
258
  outcomes.push({ runId, status: "skip", reason: "outside --since/--until window" });
163
259
  continue;
164
260
  }
261
+ // Live runs thread runKind/memoryOperation through the export context, but
262
+ // the artifact only persists conversationId — so recover them from it
263
+ // (`memory:<label>` for memory runs) to keep backfilled traces' kind + memory
264
+ // operation consistent with live exports.
265
+ const memInfo = memoryRunInfo(summary.conversationId);
165
266
  const context = {
166
267
  runId: summary.runId,
167
268
  conversationId: summary.conversationId,
@@ -170,6 +271,8 @@ export async function backfillRuns(input, options) {
170
271
  configPath: input.configPath,
171
272
  artifactDir,
172
273
  includeSensitiveData,
274
+ runKind: memInfo.runKind,
275
+ ...(memInfo.operation === undefined ? {} : { memoryOperation: memInfo.operation }),
173
276
  // Recorded since this feature shipped; absent for older runs (input then
174
277
  // falls back to the run descriptor on the root span).
175
278
  ...(typeof summary.userInput === "string" ? { userInput: summary.userInput } : {}),
@@ -216,6 +319,7 @@ export async function runBackfill(args) {
216
319
  ...(args.since === undefined ? {} : { since: args.since }),
217
320
  ...(args.until === undefined ? {} : { until: args.until }),
218
321
  dryRun: args.dryRun,
322
+ ...(args.includeMemory === undefined ? {} : { includeMemory: args.includeMemory }),
219
323
  });
220
324
  }
221
325
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"backfill.js","sourceRoot":"","sources":["../src/backfill.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backfill.js","sourceRoot":"","sources":["../src/backfill.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { listTraceSources } from "@mono-agent/observability";
1
+ import { listRecordedRuns, listTraceSources } from "@mono-agent/observability";
2
2
  import type { TraceSourceListItem } from "@mono-agent/observability";
3
3
  import type { LaunchctlRunner, LaunchdPaths } from "./launchd.js";
4
4
  /**
@@ -42,10 +42,15 @@ export interface BackgroundDeps {
42
42
  readonly getuid: () => number;
43
43
  readonly now: () => number;
44
44
  readonly sleep: (ms: number) => Promise<void>;
45
+ readonly listRecordedRuns: typeof listRecordedRuns;
45
46
  readonly listTraceSources: typeof listTraceSources;
46
47
  readonly writeFile: (path: string, data: string) => Promise<void>;
47
48
  readonly mkdir: (path: string) => Promise<void>;
48
49
  readonly rm: (path: string) => Promise<void>;
50
+ readonly stat: (path: string) => Promise<{
51
+ readonly size: number;
52
+ }>;
53
+ readonly rename: (oldPath: string, newPath: string) => Promise<void>;
49
54
  /** True when a pid is still alive (or alive but owned by another user). */
50
55
  readonly isAlive: (pid: number) => boolean;
51
56
  readonly stdout: (text: string) => void;
@@ -62,6 +67,8 @@ export interface ReadyPollOptions extends PollOptions {
62
67
  /** Only accept a worker that started at or after this time (restart safety). */
63
68
  readonly sinceMs: number;
64
69
  }
70
+ export declare const LAUNCHD_LOG_MAX_BYTES: number;
71
+ export declare const LAUNCHD_LOG_ROTATION_COUNT = 3;
65
72
  export declare function startBackground(target: InstanceTarget, deps: BackgroundDeps, poll?: PollOptions): Promise<number>;
66
73
  /** Restart is behaviourally identical: ensure a single fresh running instance. */
67
74
  export declare function restartBackground(target: InstanceTarget, deps: BackgroundDeps, poll?: PollOptions): Promise<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  import { spawn } from "node:child_process";
2
- import { mkdir, rm, writeFile } from "node:fs/promises";
2
+ import { mkdir, rename, rm, stat, writeFile } from "node:fs/promises";
3
3
  import { resolve } from "node:path";
4
4
  import process from "node:process";
5
- import { listTraceSources } from "@mono-agent/observability";
6
- import { phoenixAppBaseUrl, resolveAppTraceRegistryDir, resolveAppTraceStaleAfterMs } from "./app-config.js";
5
+ import { listRecordedRuns, listTraceSources } from "@mono-agent/observability";
6
+ import { describeSensitiveDataExportWarning, phoenixAppBaseUrl, resolveAppTraceRegistryDir, resolveAppTraceStaleAfterMs, } from "./app-config.js";
7
7
  import { bootout, bootstrap, buildPlistXml, defaultPathEnv, deriveLaunchdLabel, isLoaded, kickstartRestart, launchdPathsFor, makeLaunchctlRunner, } from "./launchd.js";
8
+ import { buildRunsHealthDisplay, RUNS_HEALTH_MAX_RUNS } from "./runs-health.js";
8
9
  import * as ui from "./ui.js";
9
10
  /**
10
11
  * Resolve everything the control commands need from CLI args. The registry dir
@@ -41,10 +42,13 @@ export function defaultBackgroundDeps() {
41
42
  getuid: () => process.getuid?.() ?? 0,
42
43
  now: () => Date.now(),
43
44
  sleep: (ms) => new Promise((resolvePromise) => setTimeout(resolvePromise, ms)),
45
+ listRecordedRuns,
44
46
  listTraceSources,
45
47
  writeFile: (path, data) => writeFile(path, data, "utf8"),
46
48
  mkdir: (path) => mkdir(path, { recursive: true }).then(() => undefined),
47
49
  rm: (path) => rm(path, { force: true }),
50
+ stat,
51
+ rename,
48
52
  isAlive: (pid) => {
49
53
  try {
50
54
  process.kill(pid, 0);
@@ -66,6 +70,8 @@ export function defaultBackgroundDeps() {
66
70
  }
67
71
  const DEFAULT_POLL = { timeoutMs: 18_000, intervalMs: 400 };
68
72
  const SINCE_SKEW_MS = 2_000;
73
+ export const LAUNCHD_LOG_MAX_BYTES = 5 * 1024 * 1024;
74
+ export const LAUNCHD_LOG_ROTATION_COUNT = 3;
69
75
  export async function startBackground(target, deps, poll = DEFAULT_POLL) {
70
76
  return await launchBackground(target, deps, poll);
71
77
  }
@@ -76,6 +82,7 @@ export async function restartBackground(target, deps, poll = DEFAULT_POLL) {
76
82
  async function launchBackground(target, deps, poll) {
77
83
  const uid = deps.getuid();
78
84
  await writePlist(target, deps);
85
+ await rotateLaunchdLogs(target.paths, deps);
79
86
  const sinceMs = deps.now();
80
87
  const outcome = await bootstrapOrRestart(target, deps, uid);
81
88
  if (!outcome.ok) {
@@ -107,6 +114,35 @@ async function writePlist(target, deps) {
107
114
  });
108
115
  await deps.writeFile(target.paths.plistPath, xml);
109
116
  }
117
+ async function rotateLaunchdLogs(paths, deps) {
118
+ await Promise.all([
119
+ rotateLaunchdLog(paths.stdoutPath, deps),
120
+ rotateLaunchdLog(paths.stderrPath, deps),
121
+ ]);
122
+ }
123
+ async function rotateLaunchdLog(path, deps) {
124
+ let size;
125
+ try {
126
+ size = (await deps.stat(path)).size;
127
+ }
128
+ catch {
129
+ return;
130
+ }
131
+ if (size <= LAUNCHD_LOG_MAX_BYTES) {
132
+ return;
133
+ }
134
+ await deps.rm(`${path}.${LAUNCHD_LOG_ROTATION_COUNT}`);
135
+ for (let index = LAUNCHD_LOG_ROTATION_COUNT; index >= 1; index -= 1) {
136
+ const source = index === 1 ? path : `${path}.${index - 1}`;
137
+ const destination = `${path}.${index}`;
138
+ try {
139
+ await deps.rename(source, destination);
140
+ }
141
+ catch {
142
+ // Missing or locked rotation segment: leave it for the next launch cycle.
143
+ }
144
+ }
145
+ }
110
146
  /**
111
147
  * Idempotent: bootstrap when not loaded, otherwise `kickstart -k` to restart.
112
148
  * `bootstrap` reporting "already bootstrapped" (or any non-zero) is tolerated as
@@ -167,6 +203,7 @@ export async function statusBackground(target, deps) {
167
203
  }
168
204
  else {
169
205
  writeInstanceDetail(current, target, deps);
206
+ await writeRunsHealthDetail(current, deps);
170
207
  }
171
208
  // Only surface other instances that are live or crashed — cleanly stopped
172
209
  // manifests linger in the registry and would just be noise.
@@ -257,6 +294,20 @@ function writeInstanceDetail(source, target, deps) {
257
294
  deps.stdout(ui.rule("observability"));
258
295
  deps.stdout(` ${observability}\n`);
259
296
  }
297
+ const sandboxLines = describeSandboxMetadata(source);
298
+ if (sandboxLines.length > 0) {
299
+ deps.stdout(ui.rule("sandbox"));
300
+ for (const line of sandboxLines) {
301
+ deps.stdout(` ${line}\n`);
302
+ }
303
+ }
304
+ const sessionLines = describeSessionMetadata(source, deps.now());
305
+ if (sessionLines.length > 0) {
306
+ deps.stdout(ui.rule("session"));
307
+ for (const line of sessionLines) {
308
+ deps.stdout(` ${line}\n`);
309
+ }
310
+ }
260
311
  const channelLines = formatChannels(source);
261
312
  if (channelLines.length > 0) {
262
313
  deps.stdout(ui.rule("channels"));
@@ -265,6 +316,44 @@ function writeInstanceDetail(source, target, deps) {
265
316
  }
266
317
  }
267
318
  }
319
+ async function writeRunsHealthDetail(source, deps) {
320
+ if (source.artifactDir === undefined || source.artifactDir.trim().length === 0) {
321
+ return;
322
+ }
323
+ const { totalRuns, runs, warnings } = await deps.listRecordedRuns({
324
+ artifactDir: source.artifactDir,
325
+ maxRuns: RUNS_HEALTH_MAX_RUNS,
326
+ scope: "agent",
327
+ });
328
+ const selectedSkills = selectedSkillsFromMetadata(source.metadata);
329
+ const runOwnerAlive = source.pid === undefined ? undefined : deps.isAlive(source.pid);
330
+ const display = buildRunsHealthDisplay({
331
+ artifactDir: source.artifactDir,
332
+ totalRuns,
333
+ runs,
334
+ warnings,
335
+ includeSelectedSkills: true,
336
+ nowMs: deps.now(),
337
+ maxRuns: RUNS_HEALTH_MAX_RUNS,
338
+ ...(selectedSkills === undefined ? {} : { selectedSkills }),
339
+ ...(runOwnerAlive === undefined ? {} : { runOwnerAlive }),
340
+ });
341
+ deps.stdout(ui.rule("runs health"));
342
+ for (const detail of display.details) {
343
+ deps.stdout(` ${detail}\n`);
344
+ }
345
+ }
346
+ function selectedSkillsFromMetadata(metadata) {
347
+ const context = metadata?.context;
348
+ if (context === null || typeof context !== "object") {
349
+ return undefined;
350
+ }
351
+ const selectedSkills = context.selectedSkills;
352
+ if (!Array.isArray(selectedSkills)) {
353
+ return undefined;
354
+ }
355
+ return selectedSkills.flatMap((skill) => typeof skill === "string" ? [skill] : []);
356
+ }
268
357
  function formatOtherInstance(source) {
269
358
  const pid = source.pid === undefined ? "?" : String(source.pid);
270
359
  const config = source.configPath ?? "(unknown config)";
@@ -306,7 +395,7 @@ function describeObservabilityMetadata(source) {
306
395
  parts.push(`app ${appUrl}`);
307
396
  }
308
397
  if (record.includeSensitiveData === true) {
309
- parts.push("includeSensitiveData=true");
398
+ parts.push(ui.style.yellow(describeSensitiveDataExportWarning(endpoint)));
310
399
  }
311
400
  if (typeof record.lastWarning === "string" && record.lastWarning.length > 0) {
312
401
  parts.push(`last warning: ${record.lastWarning}`);
@@ -317,6 +406,115 @@ function describeObservabilityMetadata(source) {
317
406
  parts.push("JSONL artifacts remain local");
318
407
  return parts.join("; ");
319
408
  }
409
+ function describeSandboxMetadata(source) {
410
+ const sandbox = source.metadata?.sandbox;
411
+ if (sandbox === null || typeof sandbox !== "object") {
412
+ return [];
413
+ }
414
+ const record = sandbox;
415
+ const effective = stringField(record, "effective") ?? "unknown";
416
+ const engine = stringField(record, "engine") ?? "none";
417
+ const engineAvailability = record.engineAvailable === true
418
+ ? "present"
419
+ : record.engineAvailable === false
420
+ ? "absent"
421
+ : "not checked";
422
+ const fallback = stringField(record, "fallback");
423
+ const fallbackActive = record.fallbackActive === true ? "yes" : "no";
424
+ const summary = [
425
+ `effective: ${effective}`,
426
+ `engine: ${engine} (${engineAvailability})`,
427
+ ...(fallback === undefined ? [] : [`fallback: ${fallback}`]),
428
+ `fallback active: ${fallbackActive}`,
429
+ ].join("; ");
430
+ return [
431
+ summary,
432
+ ...stringFieldAsList(record, "detail"),
433
+ ...stringFieldAsList(record, "warning").map((warning) => ui.style.yellow(warning)),
434
+ ];
435
+ }
436
+ function describeSessionMetadata(source, nowMs) {
437
+ const session = source.metadata?.session;
438
+ if (session === null || typeof session !== "object") {
439
+ return [];
440
+ }
441
+ const record = session;
442
+ const bucket = stringField(record, "currentBucketId");
443
+ if (bucket === undefined) {
444
+ return [];
445
+ }
446
+ const current = sessionSnapshotRecord(record, bucket);
447
+ const hasSnapshot = Array.isArray(record.snapshot);
448
+ const state = current === undefined
449
+ ? hasSnapshot ? "cold" : stringField(record, "state") ?? stringField(record, "status") ?? "cold"
450
+ : "warm";
451
+ const event = stringField(record, "event");
452
+ const providerSessionId = current?.providerSessionId ?? stringField(record, "providerSessionId");
453
+ const nextRolloverAt = stringField(record, "nextRolloverAt");
454
+ const reason = stringField(record, "reason");
455
+ const createdAt = current?.createdAt ?? numberField(record, "createdAt");
456
+ const summary = [
457
+ `bucket: ${bucket}`,
458
+ `state: ${state}`,
459
+ `age: ${formatSessionAge(createdAt, nowMs)}`,
460
+ ...(event === undefined ? [] : [`event: ${event}`]),
461
+ ...(providerSessionId === undefined ? [] : [`provider: ${providerSessionId}`]),
462
+ ...(nextRolloverAt === undefined ? [] : [`next rollover: ${nextRolloverAt}`]),
463
+ ...(reason === undefined ? [] : [`reason: ${reason}`]),
464
+ ];
465
+ return [summary.join("; ")];
466
+ }
467
+ function sessionSnapshotRecord(record, bucket) {
468
+ const snapshot = record.snapshot;
469
+ if (!Array.isArray(snapshot)) {
470
+ return undefined;
471
+ }
472
+ for (const item of snapshot) {
473
+ if (item === null || typeof item !== "object") {
474
+ continue;
475
+ }
476
+ const entry = item;
477
+ if (stringField(entry, "conversationId") !== bucket) {
478
+ continue;
479
+ }
480
+ const providerSessionId = stringField(entry, "providerSessionId");
481
+ const createdAt = numberField(entry, "createdAt");
482
+ if (providerSessionId !== undefined && createdAt !== undefined) {
483
+ return { providerSessionId, createdAt };
484
+ }
485
+ }
486
+ return undefined;
487
+ }
488
+ function stringField(record, key) {
489
+ const value = record[key];
490
+ return typeof value === "string" && value.length > 0 ? value : undefined;
491
+ }
492
+ function numberField(record, key) {
493
+ const value = record[key];
494
+ return typeof value === "number" && Number.isFinite(value) ? value : undefined;
495
+ }
496
+ function formatSessionAge(createdAt, nowMs) {
497
+ if (createdAt === undefined) {
498
+ return "unknown";
499
+ }
500
+ const elapsedSeconds = Math.max(0, Math.floor((nowMs - createdAt) / 1000));
501
+ if (elapsedSeconds < 60) {
502
+ return `${elapsedSeconds}s`;
503
+ }
504
+ const elapsedMinutes = Math.floor(elapsedSeconds / 60);
505
+ if (elapsedMinutes < 60) {
506
+ return `${elapsedMinutes}m`;
507
+ }
508
+ const elapsedHours = Math.floor(elapsedMinutes / 60);
509
+ if (elapsedHours < 48) {
510
+ return `${elapsedHours}h`;
511
+ }
512
+ return `${Math.floor(elapsedHours / 24)}d`;
513
+ }
514
+ function stringFieldAsList(record, key) {
515
+ const value = stringField(record, key);
516
+ return value === undefined ? [] : [value];
517
+ }
320
518
  /** ` --config <path>` when a non-default config is in play, else empty. */
321
519
  function configFlag(target) {
322
520
  const defaultPath = resolve(target.cwd, "mono-agent.config.json");