@mono-agent/agent-app 0.14.0 → 0.15.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 +3 -7
- package/dist/app-config.d.ts.map +1 -1
- package/dist/app-config.js +3 -0
- package/dist/app-config.js.map +1 -1
- package/dist/app-controller-channels.d.ts +41 -7
- package/dist/app-controller-channels.d.ts.map +1 -1
- package/dist/app-controller-channels.js +2 -3
- package/dist/app-controller-channels.js.map +1 -1
- package/dist/app-controller-continuation.d.ts +43 -11
- package/dist/app-controller-continuation.d.ts.map +1 -1
- package/dist/app-controller-continuation.js.map +1 -1
- package/dist/app-controller-lifecycle.d.ts +34 -5
- package/dist/app-controller-lifecycle.d.ts.map +1 -1
- package/dist/app-controller-lifecycle.js.map +1 -1
- package/dist/app-controller-maintenance.d.ts +45 -8
- package/dist/app-controller-maintenance.d.ts.map +1 -1
- package/dist/app-controller-maintenance.js.map +1 -1
- package/dist/app-controller-memory-health.d.ts +39 -10
- package/dist/app-controller-memory-health.d.ts.map +1 -1
- package/dist/app-controller-memory-health.js.map +1 -1
- package/dist/app-controller-memory.d.ts +27 -5
- package/dist/app-controller-memory.d.ts.map +1 -1
- package/dist/app-controller-memory.js +0 -1
- package/dist/app-controller-memory.js.map +1 -1
- package/dist/app-controller-responder.d.ts +53 -7
- package/dist/app-controller-responder.d.ts.map +1 -1
- package/dist/app-controller-responder.js +1 -4
- package/dist/app-controller-responder.js.map +1 -1
- package/dist/app-controller-traceability.d.ts +63 -14
- package/dist/app-controller-traceability.d.ts.map +1 -1
- package/dist/app-controller-traceability.js.map +1 -1
- package/dist/app-controller-types.d.ts +63 -0
- package/dist/app-controller-types.d.ts.map +1 -0
- package/dist/app-controller-types.js +2 -0
- package/dist/app-controller-types.js.map +1 -0
- package/dist/app-controller-utils.d.ts +1 -1
- package/dist/app-controller-utils.d.ts.map +1 -1
- package/dist/app-controller.d.ts +5 -62
- package/dist/app-controller.d.ts.map +1 -1
- package/dist/app-controller.js +0 -6
- package/dist/app-controller.js.map +1 -1
- package/dist/background-lifecycle-utils.d.ts +27 -0
- package/dist/background-lifecycle-utils.d.ts.map +1 -0
- package/dist/background-lifecycle-utils.js +69 -0
- package/dist/background-lifecycle-utils.js.map +1 -0
- package/dist/background-log-maintenance.d.ts +6 -0
- package/dist/background-log-maintenance.d.ts.map +1 -0
- package/dist/background-log-maintenance.js +185 -0
- package/dist/background-log-maintenance.js.map +1 -0
- package/dist/background.d.ts +2 -4
- package/dist/background.d.ts.map +1 -1
- package/dist/background.js +3 -263
- package/dist/background.js.map +1 -1
- package/dist/channel-plugins.d.ts +2 -11
- package/dist/channel-plugins.d.ts.map +1 -1
- package/dist/channel-plugins.js +63 -60
- package/dist/channel-plugins.js.map +1 -1
- package/dist/channel-status-display.js +2 -6
- package/dist/channel-status-display.js.map +1 -1
- package/dist/channels.d.ts +5 -6
- package/dist/channels.d.ts.map +1 -1
- package/dist/channels.js +7 -5
- package/dist/channels.js.map +1 -1
- package/dist/cli-args.d.ts.map +1 -1
- package/dist/cli-args.js +50 -0
- package/dist/cli-args.js.map +1 -1
- package/dist/cli-background-command.js +1 -1
- package/dist/cli-background-command.js.map +1 -1
- package/dist/cli-validate-config-command.d.ts.map +1 -1
- package/dist/cli-validate-config-command.js +12 -8
- package/dist/cli-validate-config-command.js.map +1 -1
- package/dist/config-reference.d.ts +4 -1
- package/dist/config-reference.d.ts.map +1 -1
- package/dist/config-reference.js +242 -65
- package/dist/config-reference.js.map +1 -1
- package/dist/configured-agent.d.ts +2 -8
- package/dist/configured-agent.d.ts.map +1 -1
- package/dist/configured-agent.js +3 -25
- package/dist/configured-agent.js.map +1 -1
- package/dist/consumer-contract.d.ts.map +1 -1
- package/dist/consumer-contract.js +2 -4
- package/dist/consumer-contract.js.map +1 -1
- package/dist/doctor-observability.d.ts +7 -0
- package/dist/doctor-observability.d.ts.map +1 -0
- package/dist/doctor-observability.js +80 -0
- package/dist/doctor-observability.js.map +1 -0
- package/dist/doctor-types.d.ts +17 -0
- package/dist/doctor-types.d.ts.map +1 -0
- package/dist/doctor-types.js +2 -0
- package/dist/doctor-types.js.map +1 -0
- package/dist/doctor.d.ts +2 -12
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +7 -106
- package/dist/doctor.js.map +1 -1
- package/dist/first-run-readiness.d.ts +1 -1
- package/dist/first-run-readiness.d.ts.map +1 -1
- package/dist/first-run-readiness.js +1 -1
- package/dist/first-run-readiness.js.map +1 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/managed-web-logs.d.ts +16 -0
- package/dist/managed-web-logs.d.ts.map +1 -0
- package/dist/managed-web-logs.js +153 -0
- package/dist/managed-web-logs.js.map +1 -0
- package/dist/posted-reply-history.d.ts.map +1 -1
- package/dist/posted-reply-history.js +3 -0
- package/dist/posted-reply-history.js.map +1 -1
- package/dist/web-command.d.ts +4 -1
- package/dist/web-command.d.ts.map +1 -1
- package/dist/web-command.js +31 -1
- package/dist/web-command.js.map +1 -1
- package/package.json +16 -16
- package/schema/mono-agent.config.schema.json +280 -162
- package/skills/mono-agent-composer/references/config-blueprint.md +4 -11
- package/skills/mono-agent-composer/references/discovery-questions.md +1 -1
- package/skills/mono-agent-composer/references/feature-coverage.md +4 -5
- package/skills/mono-agent-composer/references/package-map.md +4 -5
- package/skills/mono-agent-composer/references/playbooks.md +2 -2
- package/skills/mono-agent-composer/references/validation.md +1 -1
package/dist/doctor.js
CHANGED
|
@@ -7,18 +7,15 @@ import { join } from "node:path";
|
|
|
7
7
|
import { promisify } from "node:util";
|
|
8
8
|
import { getBuiltinModels as getPiBuiltinModels, getBuiltinProviders as getPiBuiltinProviders, } from "@earendil-works/pi-ai/providers/all";
|
|
9
9
|
import { validateCronExpression } from "@mono-agent/cron-adapter";
|
|
10
|
-
import { listRecordedRuns } from "@mono-agent/observability";
|
|
11
|
-
import { serializeTraceSpans } from "@mono-agent/observability/otel";
|
|
12
10
|
import { classifyContinuationMcpServerTransport, isStdioMcpServerSpec, loadToolPolicyFromJsonFile, } from "@mono-agent/agent-harness";
|
|
13
11
|
import { defaultExecutionModeForModel, describeMonoRuntimeSupport, isValidMcpServerName, modelReferenceKey, networkPolicyAllowsUrl, parseMonoRuntimeModelReference, resolveModelEffortLevels, } from "@mono-agent/runtime-adapter";
|
|
14
12
|
import { buildMonoAgentConfigView, findJsonSecretConfigWarnings, findRemovedConfigWarnings, readMonoAgentConfigJson, redactMonoAgentConfig, resolveSupermemoryContainer, } from "@mono-agent/config";
|
|
15
13
|
import { describeSandboxEffectiveState, resolveSandboxEffectiveState, sandboxEffectiveStateWarning, } from "@mono-agent/runtime-adapter";
|
|
16
|
-
import {
|
|
14
|
+
import { isAppCoreConfigError, loadAppCoreConfig, } from "./app-config.js";
|
|
17
15
|
import { adapterSendToolNames, isAdapterSendToolAllowed, resolveAdapterSendToolsSettings } from "./adapter-send-tools.js";
|
|
18
16
|
import { canonicalToolName, isAllowAllTools, isKnownToolName, isMcpToolName, suggestToolName } from "./modules/known-tools.js";
|
|
19
17
|
import { collectChannelConfigViews } from "./channel-config-view.js";
|
|
20
18
|
import { resolveChannelDrivers } from "./channels.js";
|
|
21
|
-
import { findUnknownAppConfigWarnings } from "./config-reference.js";
|
|
22
19
|
import { loadContinuationSettings } from "./continuation-config.js";
|
|
23
20
|
import { applyOriginContextGroupCommit } from "./continuation-origin-store.js";
|
|
24
21
|
import { readBoundedOwnerOnlyFile } from "./continuation-store-fs.js";
|
|
@@ -30,7 +27,6 @@ import { CONTINUATION_STATES, continuationDigest } from "./continuations.js";
|
|
|
30
27
|
import { formatInteractionBridgeUrl, loadInteractionSettings } from "./interaction-bridge.js";
|
|
31
28
|
import { FIRST_RUN_MEMORY_INITIALIZING_MARKER } from "./first-run-managed-memory.js";
|
|
32
29
|
import { DEFAULT_MEMORY_EMBEDDING_ENDPOINTS, probeMemoryEmbeddingSelection, } from "./memory-embedding-service.js";
|
|
33
|
-
import { buildRunsHealthDisplay, RUNS_HEALTH_MAX_RUNS } from "./runs-health.js";
|
|
34
30
|
import { piAuthRecoveryCommand } from "./provider-setup.js";
|
|
35
31
|
import { inspectPiAuthStore } from "./pi-auth-store-inspection.js";
|
|
36
32
|
import { checkManagedProjectSkills, managedProjectSkillsExist } from "./project-skills.js";
|
|
@@ -38,6 +34,7 @@ import { configuredRuntimeFallbackModels, configuredRuntimeModels } from "./runt
|
|
|
38
34
|
import { runtimeProvenanceDetail } from "./runtime-provenance.js";
|
|
39
35
|
import { loadSupermemoryPlugin } from "./supermemory-plugin.js";
|
|
40
36
|
import { DEFAULT_LAUNCHD_LOG_POLICY, inspectLaunchdLogs, LAUNCHD_LOG_MAINTENANCE_INTERVAL_SECONDS, launchdLogPathsForConfig, } from "./launchd-logs.js";
|
|
37
|
+
import { exporterSection, runsSection } from "./doctor-observability.js";
|
|
41
38
|
const execFile = promisify(execFileCallback);
|
|
42
39
|
const CONTINUATION_V2_ROLLBACK_GUARD = "UPGRADED-TO-RECORDS-V3";
|
|
43
40
|
const CONTINUATION_V2_ROLLBACK_GUARD_CONTENT = "This state directory uses continuation records v3. Older runtimes must not open records-v2.\n";
|
|
@@ -69,7 +66,6 @@ export async function validateMonoAgentFolder(options) {
|
|
|
69
66
|
// Channel secrets (bot tokens, API keys) live outside the core view, so the
|
|
70
67
|
// placement check spans both: core sections + every channel's config view.
|
|
71
68
|
const configWarnings = [
|
|
72
|
-
...findUnknownAppConfigWarnings(jsonResult.json),
|
|
73
69
|
...findJsonSecretConfigWarnings([
|
|
74
70
|
...buildMonoAgentConfigView({
|
|
75
71
|
redacted: redactMonoAgentConfig(coreConfig),
|
|
@@ -107,9 +103,13 @@ export async function validateMonoAgentFolder(options) {
|
|
|
107
103
|
if (coreConfig !== undefined) {
|
|
108
104
|
applyToolChannelCrossChecks(sections, coreConfig.tools.allowedTools, coreConfig.tools.disallowedTools);
|
|
109
105
|
}
|
|
106
|
+
const structurallyValid = sections.every((section) => section.status !== "error");
|
|
107
|
+
const operationallyReady = structurallyValid && sections.every((section) => section.status !== "waiting");
|
|
110
108
|
return {
|
|
111
109
|
sections,
|
|
112
|
-
|
|
110
|
+
structurallyValid,
|
|
111
|
+
operationallyReady,
|
|
112
|
+
ok: structurallyValid,
|
|
113
113
|
};
|
|
114
114
|
}
|
|
115
115
|
/** Read-only launchd log inventory used by both `validate` and its `doctor` alias. */
|
|
@@ -2856,105 +2856,6 @@ function directCodexSandboxPosture(permissionMode) {
|
|
|
2856
2856
|
detail: "Direct Codex default/acceptEdits mode uses its native workspace-write sandbox with network disabled; unattended escalation requests are denied.",
|
|
2857
2857
|
};
|
|
2858
2858
|
}
|
|
2859
|
-
async function runsSection(input, config) {
|
|
2860
|
-
const artifactDir = await resolveAppArtifactDir(input);
|
|
2861
|
-
const { totalRuns, runs, warnings } = await listRecordedRuns({ artifactDir, maxRuns: RUNS_HEALTH_MAX_RUNS, scope: "agent" });
|
|
2862
|
-
const display = buildRunsHealthDisplay({ artifactDir, totalRuns, runs, warnings });
|
|
2863
|
-
const retentionDetails = config === undefined
|
|
2864
|
-
? []
|
|
2865
|
-
: [
|
|
2866
|
-
`Artifact retention: maxAgeDays=${config.artifacts.retention.maxAgeDays}, maxCount=${config.artifacts.retention.maxCount}, dryRun=${config.artifacts.retention.dryRun ? "true" : "false"}.`,
|
|
2867
|
-
`Memory artifact retention: maxAgeDays=${config.artifacts.memoryRetention.maxAgeDays}, maxCount=${config.artifacts.memoryRetention.maxCount}, dryRun=${config.artifacts.memoryRetention.dryRun ? "true" : "false"}.`,
|
|
2868
|
-
];
|
|
2869
|
-
return { id: "runs", label: "Runs health", status: display.status, details: [...retentionDetails, ...display.details] };
|
|
2870
|
-
}
|
|
2871
|
-
const LOCAL_ARTIFACTS_NOTE = "JSONL artifacts remain local (the exporter is additive; export failures never affect them).";
|
|
2872
|
-
/**
|
|
2873
|
-
* Reports observability exporter state and, uniquely among the validation
|
|
2874
|
-
* sections, performs a LIVE reachability probe of the Phoenix endpoint. An
|
|
2875
|
-
* invalid exporter shape is a hard `error` (fails the report) so bad config is
|
|
2876
|
-
* caught before startup, but an unreachable endpoint is only `waiting` — Phoenix
|
|
2877
|
-
* may start after the agent, mirroring the Ollama-unreachable precedent so
|
|
2878
|
-
* `validate` still passes. Probe failures are swallowed into a warning.
|
|
2879
|
-
*/
|
|
2880
|
-
async function exporterSection(input, liveness) {
|
|
2881
|
-
let exporters;
|
|
2882
|
-
try {
|
|
2883
|
-
exporters = await resolveAppObservabilityExporters(input);
|
|
2884
|
-
}
|
|
2885
|
-
catch (error) {
|
|
2886
|
-
if (!isAppCoreConfigError(error)) {
|
|
2887
|
-
throw error;
|
|
2888
|
-
}
|
|
2889
|
-
return { id: "observability", label: "Observability exporter", status: "error", details: [error.message] };
|
|
2890
|
-
}
|
|
2891
|
-
if (exporters.length === 0) {
|
|
2892
|
-
return {
|
|
2893
|
-
id: "observability",
|
|
2894
|
-
label: "Observability exporter",
|
|
2895
|
-
status: "disabled",
|
|
2896
|
-
details: ["No observability exporter configured."],
|
|
2897
|
-
};
|
|
2898
|
-
}
|
|
2899
|
-
const exporter = exporters[0];
|
|
2900
|
-
const details = [`Exporter: ${exporter.type} -> ${exporter.endpoint}`];
|
|
2901
|
-
const appUrl = phoenixAppBaseUrl(exporter.endpoint);
|
|
2902
|
-
if (appUrl !== undefined) {
|
|
2903
|
-
details.push(`Phoenix app: ${appUrl}`);
|
|
2904
|
-
}
|
|
2905
|
-
if (exporter.includeSensitiveData) {
|
|
2906
|
-
details.push(describeSensitiveDataExportWarning(exporter.endpoint));
|
|
2907
|
-
}
|
|
2908
|
-
// The reachability probe only ever yields `waiting`, so the start preflight
|
|
2909
|
-
// skips it (liveness=false): the exporter shape is valid, and Phoenix may
|
|
2910
|
-
// legitimately come up after the agent.
|
|
2911
|
-
if (!liveness) {
|
|
2912
|
-
details.push(LOCAL_ARTIFACTS_NOTE);
|
|
2913
|
-
return { id: "observability", label: "Observability exporter", status: "ok", details };
|
|
2914
|
-
}
|
|
2915
|
-
const probeError = await probeExporterEndpoint(exporter.endpoint);
|
|
2916
|
-
if (probeError !== undefined) {
|
|
2917
|
-
details.push(`[WARN] Phoenix export not confirmed at ${exporter.endpoint} (${probeError}); exports will fail until it accepts OTLP protobuf. This is non-fatal.`);
|
|
2918
|
-
details.push(LOCAL_ARTIFACTS_NOTE);
|
|
2919
|
-
return { id: "observability", label: "Observability exporter", status: "waiting", details };
|
|
2920
|
-
}
|
|
2921
|
-
details.push(LOCAL_ARTIFACTS_NOTE);
|
|
2922
|
-
return { id: "observability", label: "Observability exporter", status: "ok", details };
|
|
2923
|
-
}
|
|
2924
|
-
/**
|
|
2925
|
-
* Live export-compatibility probe: POSTs a tiny but VALID empty OTLP protobuf
|
|
2926
|
-
* `ExportTraceServiceRequest` (zero spans, so nothing is recorded) with
|
|
2927
|
-
* `content-type: application/x-protobuf` — exactly the wire format a real export
|
|
2928
|
-
* uses. Returns undefined when the endpoint accepts it (2xx), else an error
|
|
2929
|
-
* string. This catches what the old OPTIONS reachability probe missed: a server
|
|
2930
|
-
* that is listening but rejects the export (e.g. Phoenix returns 415 for the
|
|
2931
|
-
* wrong content type), so `validate` no longer reports `[ok]` for an endpoint
|
|
2932
|
-
* that every real export would 415. A throw (refused / DNS / timeout) means
|
|
2933
|
-
* nothing is listening. Kept non-fatal upstream (`waiting`, not `error`): Phoenix
|
|
2934
|
-
* may start after the agent.
|
|
2935
|
-
*/
|
|
2936
|
-
async function probeExporterEndpoint(endpoint) {
|
|
2937
|
-
const ctrl = new AbortController();
|
|
2938
|
-
const timer = setTimeout(() => { ctrl.abort(); }, LIVENESS_PROBE_TIMEOUT_MS);
|
|
2939
|
-
try {
|
|
2940
|
-
const response = await fetch(endpoint, {
|
|
2941
|
-
method: "POST",
|
|
2942
|
-
headers: { "content-type": "application/x-protobuf" },
|
|
2943
|
-
body: serializeTraceSpans([]),
|
|
2944
|
-
signal: ctrl.signal,
|
|
2945
|
-
});
|
|
2946
|
-
if (!response.ok) {
|
|
2947
|
-
return `HTTP ${response.status}`;
|
|
2948
|
-
}
|
|
2949
|
-
return undefined;
|
|
2950
|
-
}
|
|
2951
|
-
catch (err) {
|
|
2952
|
-
return err instanceof Error ? err.message : String(err);
|
|
2953
|
-
}
|
|
2954
|
-
finally {
|
|
2955
|
-
clearTimeout(timer);
|
|
2956
|
-
}
|
|
2957
|
-
}
|
|
2958
2859
|
async function channelSection(driver, input) {
|
|
2959
2860
|
const id = `channel:${driver.id}`;
|
|
2960
2861
|
try {
|