@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.
Files changed (121) hide show
  1. package/README.md +3 -7
  2. package/dist/app-config.d.ts.map +1 -1
  3. package/dist/app-config.js +3 -0
  4. package/dist/app-config.js.map +1 -1
  5. package/dist/app-controller-channels.d.ts +41 -7
  6. package/dist/app-controller-channels.d.ts.map +1 -1
  7. package/dist/app-controller-channels.js +2 -3
  8. package/dist/app-controller-channels.js.map +1 -1
  9. package/dist/app-controller-continuation.d.ts +43 -11
  10. package/dist/app-controller-continuation.d.ts.map +1 -1
  11. package/dist/app-controller-continuation.js.map +1 -1
  12. package/dist/app-controller-lifecycle.d.ts +34 -5
  13. package/dist/app-controller-lifecycle.d.ts.map +1 -1
  14. package/dist/app-controller-lifecycle.js.map +1 -1
  15. package/dist/app-controller-maintenance.d.ts +45 -8
  16. package/dist/app-controller-maintenance.d.ts.map +1 -1
  17. package/dist/app-controller-maintenance.js.map +1 -1
  18. package/dist/app-controller-memory-health.d.ts +39 -10
  19. package/dist/app-controller-memory-health.d.ts.map +1 -1
  20. package/dist/app-controller-memory-health.js.map +1 -1
  21. package/dist/app-controller-memory.d.ts +27 -5
  22. package/dist/app-controller-memory.d.ts.map +1 -1
  23. package/dist/app-controller-memory.js +0 -1
  24. package/dist/app-controller-memory.js.map +1 -1
  25. package/dist/app-controller-responder.d.ts +53 -7
  26. package/dist/app-controller-responder.d.ts.map +1 -1
  27. package/dist/app-controller-responder.js +1 -4
  28. package/dist/app-controller-responder.js.map +1 -1
  29. package/dist/app-controller-traceability.d.ts +63 -14
  30. package/dist/app-controller-traceability.d.ts.map +1 -1
  31. package/dist/app-controller-traceability.js.map +1 -1
  32. package/dist/app-controller-types.d.ts +63 -0
  33. package/dist/app-controller-types.d.ts.map +1 -0
  34. package/dist/app-controller-types.js +2 -0
  35. package/dist/app-controller-types.js.map +1 -0
  36. package/dist/app-controller-utils.d.ts +1 -1
  37. package/dist/app-controller-utils.d.ts.map +1 -1
  38. package/dist/app-controller.d.ts +5 -62
  39. package/dist/app-controller.d.ts.map +1 -1
  40. package/dist/app-controller.js +0 -6
  41. package/dist/app-controller.js.map +1 -1
  42. package/dist/background-lifecycle-utils.d.ts +27 -0
  43. package/dist/background-lifecycle-utils.d.ts.map +1 -0
  44. package/dist/background-lifecycle-utils.js +69 -0
  45. package/dist/background-lifecycle-utils.js.map +1 -0
  46. package/dist/background-log-maintenance.d.ts +6 -0
  47. package/dist/background-log-maintenance.d.ts.map +1 -0
  48. package/dist/background-log-maintenance.js +185 -0
  49. package/dist/background-log-maintenance.js.map +1 -0
  50. package/dist/background.d.ts +2 -4
  51. package/dist/background.d.ts.map +1 -1
  52. package/dist/background.js +3 -263
  53. package/dist/background.js.map +1 -1
  54. package/dist/channel-plugins.d.ts +2 -11
  55. package/dist/channel-plugins.d.ts.map +1 -1
  56. package/dist/channel-plugins.js +63 -60
  57. package/dist/channel-plugins.js.map +1 -1
  58. package/dist/channel-status-display.js +2 -6
  59. package/dist/channel-status-display.js.map +1 -1
  60. package/dist/channels.d.ts +5 -6
  61. package/dist/channels.d.ts.map +1 -1
  62. package/dist/channels.js +7 -5
  63. package/dist/channels.js.map +1 -1
  64. package/dist/cli-args.d.ts.map +1 -1
  65. package/dist/cli-args.js +50 -0
  66. package/dist/cli-args.js.map +1 -1
  67. package/dist/cli-background-command.js +1 -1
  68. package/dist/cli-background-command.js.map +1 -1
  69. package/dist/cli-validate-config-command.d.ts.map +1 -1
  70. package/dist/cli-validate-config-command.js +12 -8
  71. package/dist/cli-validate-config-command.js.map +1 -1
  72. package/dist/config-reference.d.ts +4 -1
  73. package/dist/config-reference.d.ts.map +1 -1
  74. package/dist/config-reference.js +242 -65
  75. package/dist/config-reference.js.map +1 -1
  76. package/dist/configured-agent.d.ts +2 -8
  77. package/dist/configured-agent.d.ts.map +1 -1
  78. package/dist/configured-agent.js +3 -25
  79. package/dist/configured-agent.js.map +1 -1
  80. package/dist/consumer-contract.d.ts.map +1 -1
  81. package/dist/consumer-contract.js +2 -4
  82. package/dist/consumer-contract.js.map +1 -1
  83. package/dist/doctor-observability.d.ts +7 -0
  84. package/dist/doctor-observability.d.ts.map +1 -0
  85. package/dist/doctor-observability.js +80 -0
  86. package/dist/doctor-observability.js.map +1 -0
  87. package/dist/doctor-types.d.ts +17 -0
  88. package/dist/doctor-types.d.ts.map +1 -0
  89. package/dist/doctor-types.js +2 -0
  90. package/dist/doctor-types.js.map +1 -0
  91. package/dist/doctor.d.ts +2 -12
  92. package/dist/doctor.d.ts.map +1 -1
  93. package/dist/doctor.js +7 -106
  94. package/dist/doctor.js.map +1 -1
  95. package/dist/first-run-readiness.d.ts +1 -1
  96. package/dist/first-run-readiness.d.ts.map +1 -1
  97. package/dist/first-run-readiness.js +1 -1
  98. package/dist/first-run-readiness.js.map +1 -1
  99. package/dist/index.d.ts +0 -2
  100. package/dist/index.d.ts.map +1 -1
  101. package/dist/index.js +0 -1
  102. package/dist/index.js.map +1 -1
  103. package/dist/managed-web-logs.d.ts +16 -0
  104. package/dist/managed-web-logs.d.ts.map +1 -0
  105. package/dist/managed-web-logs.js +153 -0
  106. package/dist/managed-web-logs.js.map +1 -0
  107. package/dist/posted-reply-history.d.ts.map +1 -1
  108. package/dist/posted-reply-history.js +3 -0
  109. package/dist/posted-reply-history.js.map +1 -1
  110. package/dist/web-command.d.ts +4 -1
  111. package/dist/web-command.d.ts.map +1 -1
  112. package/dist/web-command.js +31 -1
  113. package/dist/web-command.js.map +1 -1
  114. package/package.json +16 -16
  115. package/schema/mono-agent.config.schema.json +280 -162
  116. package/skills/mono-agent-composer/references/config-blueprint.md +4 -11
  117. package/skills/mono-agent-composer/references/discovery-questions.md +1 -1
  118. package/skills/mono-agent-composer/references/feature-coverage.md +4 -5
  119. package/skills/mono-agent-composer/references/package-map.md +4 -5
  120. package/skills/mono-agent-composer/references/playbooks.md +2 -2
  121. 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 { describeSensitiveDataExportWarning, isAppCoreConfigError, loadAppCoreConfig, phoenixAppBaseUrl, resolveAppArtifactDir, resolveAppObservabilityExporters, } from "./app-config.js";
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
- ok: sections.every((section) => section.status !== "error"),
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 {