@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.
- package/README.md +15 -5
- package/dist/adapter-send-tools-main.js +2 -2
- package/dist/adapter-send-tools-main.js.map +1 -1
- package/dist/adapter-send-tools.d.ts +72 -6
- package/dist/adapter-send-tools.d.ts.map +1 -1
- package/dist/adapter-send-tools.js +413 -38
- package/dist/adapter-send-tools.js.map +1 -1
- package/dist/app-config.d.ts +48 -11
- package/dist/app-config.d.ts.map +1 -1
- package/dist/app-config.js +98 -24
- package/dist/app-config.js.map +1 -1
- package/dist/app.d.ts +10 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +659 -48
- package/dist/app.js.map +1 -1
- package/dist/artifact-retention.d.ts +32 -0
- package/dist/artifact-retention.d.ts.map +1 -0
- package/dist/artifact-retention.js +111 -0
- package/dist/artifact-retention.js.map +1 -0
- package/dist/audit-runs.d.ts +12 -0
- package/dist/audit-runs.d.ts.map +1 -0
- package/dist/audit-runs.js +68 -0
- package/dist/audit-runs.js.map +1 -0
- package/dist/backfill.d.ts +3 -7
- package/dist/backfill.d.ts.map +1 -1
- package/dist/backfill.js +115 -11
- package/dist/backfill.js.map +1 -1
- package/dist/background.d.ts +8 -1
- package/dist/background.d.ts.map +1 -1
- package/dist/background.js +202 -4
- package/dist/background.js.map +1 -1
- package/dist/broadcast-recorder.d.ts +27 -0
- package/dist/broadcast-recorder.d.ts.map +1 -0
- package/dist/broadcast-recorder.js +82 -0
- package/dist/broadcast-recorder.js.map +1 -0
- package/dist/channel-config-view.d.ts +28 -0
- package/dist/channel-config-view.d.ts.map +1 -0
- package/dist/channel-config-view.js +79 -0
- package/dist/channel-config-view.js.map +1 -0
- package/dist/channel-gate.d.ts +22 -0
- package/dist/channel-gate.d.ts.map +1 -0
- package/dist/channel-gate.js +35 -0
- package/dist/channel-gate.js.map +1 -0
- package/dist/channel-plugins.d.ts +39 -0
- package/dist/channel-plugins.d.ts.map +1 -0
- package/dist/channel-plugins.js +372 -0
- package/dist/channel-plugins.js.map +1 -0
- package/dist/channels.d.ts +62 -73
- package/dist/channels.d.ts.map +1 -1
- package/dist/channels.js +833 -126
- package/dist/channels.js.map +1 -1
- package/dist/cli.d.ts +65 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +755 -30
- package/dist/cli.js.map +1 -1
- package/dist/config-reference.d.ts +24 -0
- package/dist/config-reference.d.ts.map +1 -0
- package/dist/config-reference.js +580 -0
- package/dist/config-reference.js.map +1 -0
- package/dist/configured-agent.d.ts +104 -0
- package/dist/configured-agent.d.ts.map +1 -0
- package/dist/configured-agent.js +578 -0
- package/dist/configured-agent.js.map +1 -0
- package/dist/consumer-contract.d.ts +36 -0
- package/dist/consumer-contract.d.ts.map +1 -0
- package/dist/consumer-contract.js +290 -0
- package/dist/consumer-contract.js.map +1 -0
- package/dist/doctor.d.ts +9 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +352 -55
- package/dist/doctor.js.map +1 -1
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +23 -7
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +91 -26
- package/dist/init.js.map +1 -1
- package/dist/install-skill.d.ts +1 -1
- package/dist/install-skill.js +2 -2
- package/dist/install-skill.js.map +1 -1
- package/dist/interaction-bridge.d.ts +72 -0
- package/dist/interaction-bridge.d.ts.map +1 -0
- package/dist/interaction-bridge.js +354 -0
- package/dist/interaction-bridge.js.map +1 -0
- package/dist/memory-command.d.ts +10 -0
- package/dist/memory-command.d.ts.map +1 -0
- package/dist/memory-command.js +649 -0
- package/dist/memory-command.js.map +1 -0
- package/dist/memory-recall-main.js +1 -1
- package/dist/memory-recall-main.js.map +1 -1
- package/dist/memory-recall.d.ts +41 -5
- package/dist/memory-recall.d.ts.map +1 -1
- package/dist/memory-recall.js +75 -5
- package/dist/memory-recall.js.map +1 -1
- package/dist/memory-rituals.d.ts +8 -11
- package/dist/memory-rituals.d.ts.map +1 -1
- package/dist/memory-rituals.js +26 -25
- package/dist/memory-rituals.js.map +1 -1
- package/dist/metrics.d.ts +13 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +105 -0
- package/dist/metrics.js.map +1 -0
- package/dist/notify-destinations.d.ts +23 -0
- package/dist/notify-destinations.d.ts.map +1 -0
- package/dist/notify-destinations.js +79 -0
- package/dist/notify-destinations.js.map +1 -0
- package/dist/posted-message-index.d.ts +61 -0
- package/dist/posted-message-index.d.ts.map +1 -0
- package/dist/posted-message-index.js +178 -0
- package/dist/posted-message-index.js.map +1 -0
- package/dist/proactive-notify.d.ts +32 -0
- package/dist/proactive-notify.d.ts.map +1 -0
- package/dist/proactive-notify.js +62 -0
- package/dist/proactive-notify.js.map +1 -0
- package/dist/recipes/base.d.ts +15 -0
- package/dist/recipes/base.d.ts.map +1 -0
- package/dist/recipes/base.js +51 -0
- package/dist/recipes/base.js.map +1 -0
- package/dist/recipes/catalog.d.ts +4 -0
- package/dist/recipes/catalog.d.ts.map +1 -0
- package/dist/recipes/catalog.js +525 -0
- package/dist/recipes/catalog.js.map +1 -0
- package/dist/recipes/index.d.ts +11 -0
- package/dist/recipes/index.d.ts.map +1 -0
- package/dist/recipes/index.js +14 -0
- package/dist/recipes/index.js.map +1 -0
- package/dist/recipes/types.d.ts +70 -0
- package/dist/recipes/types.d.ts.map +1 -0
- package/dist/recipes/types.js +15 -0
- package/dist/recipes/types.js.map +1 -0
- package/dist/request-model-override.d.ts +67 -0
- package/dist/request-model-override.d.ts.map +1 -0
- package/dist/request-model-override.js +96 -0
- package/dist/request-model-override.js.map +1 -0
- package/dist/runs-health.d.ts +22 -0
- package/dist/runs-health.d.ts.map +1 -0
- package/dist/runs-health.js +144 -0
- package/dist/runs-health.js.map +1 -0
- package/dist/seen-conversations.d.ts +22 -0
- package/dist/seen-conversations.d.ts.map +1 -0
- package/dist/seen-conversations.js +120 -0
- package/dist/seen-conversations.js.map +1 -0
- package/dist/setup.d.ts +29 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +97 -0
- package/dist/setup.js.map +1 -0
- package/dist/trigger-overrides.d.ts +17 -0
- package/dist/trigger-overrides.d.ts.map +1 -0
- package/dist/trigger-overrides.js +30 -0
- package/dist/trigger-overrides.js.map +1 -0
- package/dist/tui-command.d.ts +56 -0
- package/dist/tui-command.d.ts.map +1 -0
- package/dist/tui-command.js +160 -0
- package/dist/tui-command.js.map +1 -0
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +4 -0
- package/dist/ui.js.map +1 -1
- package/dist/web-command.d.ts +45 -0
- package/dist/web-command.d.ts.map +1 -0
- package/dist/web-command.js +152 -0
- package/dist/web-command.js.map +1 -0
- package/package.json +19 -18
- package/schema/mono-agent.config.schema.json +1686 -0
- package/skills/mono-agent-composer/SKILL.md +34 -9
- package/skills/mono-agent-composer/agents/openai.yaml +4 -0
- package/skills/mono-agent-composer/references/config-blueprint.md +92 -49
- package/skills/mono-agent-composer/references/discovery-questions.md +15 -17
- package/skills/mono-agent-composer/references/feature-coverage.md +22 -17
- package/skills/mono-agent-composer/references/package-map.md +19 -21
- package/skills/mono-agent-composer/references/playbooks.md +267 -0
- 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
|
|
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
|
|
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(
|
|
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
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
.
|
|
120
|
-
|
|
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
|
|
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) {
|
package/dist/backfill.js.map
CHANGED
|
@@ -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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"}
|
package/dist/background.d.ts
CHANGED
|
@@ -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>;
|
package/dist/background.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":"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"}
|
package/dist/background.js
CHANGED
|
@@ -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(
|
|
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");
|