@mono-agent/agent-app 0.3.0 → 0.4.1

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 (186) hide show
  1. package/README.md +24 -10
  2. package/dist/adapter-send-tools-main.d.ts +3 -0
  3. package/dist/adapter-send-tools-main.d.ts.map +1 -0
  4. package/dist/adapter-send-tools-main.js +20 -0
  5. package/dist/adapter-send-tools-main.js.map +1 -0
  6. package/dist/adapter-send-tools.d.ts +125 -0
  7. package/dist/adapter-send-tools.d.ts.map +1 -0
  8. package/dist/adapter-send-tools.js +629 -0
  9. package/dist/adapter-send-tools.js.map +1 -0
  10. package/dist/app-config.d.ts +86 -26
  11. package/dist/app-config.d.ts.map +1 -1
  12. package/dist/app-config.js +284 -90
  13. package/dist/app-config.js.map +1 -1
  14. package/dist/app.d.ts +51 -20
  15. package/dist/app.d.ts.map +1 -1
  16. package/dist/app.js +889 -119
  17. package/dist/app.js.map +1 -1
  18. package/dist/artifact-retention.d.ts +32 -0
  19. package/dist/artifact-retention.d.ts.map +1 -0
  20. package/dist/artifact-retention.js +111 -0
  21. package/dist/artifact-retention.js.map +1 -0
  22. package/dist/audit-runs.d.ts +12 -0
  23. package/dist/audit-runs.d.ts.map +1 -0
  24. package/dist/audit-runs.js +68 -0
  25. package/dist/audit-runs.js.map +1 -0
  26. package/dist/backfill.d.ts +75 -0
  27. package/dist/backfill.d.ts.map +1 -0
  28. package/dist/backfill.js +350 -0
  29. package/dist/backfill.js.map +1 -0
  30. package/dist/background.d.ts +8 -5
  31. package/dist/background.d.ts.map +1 -1
  32. package/dist/background.js +279 -53
  33. package/dist/background.js.map +1 -1
  34. package/dist/broadcast-recorder.d.ts +27 -0
  35. package/dist/broadcast-recorder.d.ts.map +1 -0
  36. package/dist/broadcast-recorder.js +82 -0
  37. package/dist/broadcast-recorder.js.map +1 -0
  38. package/dist/channel-config-view.d.ts +28 -0
  39. package/dist/channel-config-view.d.ts.map +1 -0
  40. package/dist/channel-config-view.js +79 -0
  41. package/dist/channel-config-view.js.map +1 -0
  42. package/dist/channel-gate.d.ts +22 -0
  43. package/dist/channel-gate.d.ts.map +1 -0
  44. package/dist/channel-gate.js +35 -0
  45. package/dist/channel-gate.js.map +1 -0
  46. package/dist/channel-plugins.d.ts +39 -0
  47. package/dist/channel-plugins.d.ts.map +1 -0
  48. package/dist/channel-plugins.js +346 -0
  49. package/dist/channel-plugins.js.map +1 -0
  50. package/dist/channels.d.ts +62 -66
  51. package/dist/channels.d.ts.map +1 -1
  52. package/dist/channels.js +850 -120
  53. package/dist/channels.js.map +1 -1
  54. package/dist/cli.d.ts +103 -4
  55. package/dist/cli.d.ts.map +1 -1
  56. package/dist/cli.js +984 -112
  57. package/dist/cli.js.map +1 -1
  58. package/dist/config-reference.d.ts +24 -0
  59. package/dist/config-reference.d.ts.map +1 -0
  60. package/dist/config-reference.js +580 -0
  61. package/dist/config-reference.js.map +1 -0
  62. package/dist/configured-agent.d.ts +104 -0
  63. package/dist/configured-agent.d.ts.map +1 -0
  64. package/dist/configured-agent.js +578 -0
  65. package/dist/configured-agent.js.map +1 -0
  66. package/dist/consumer-contract.d.ts +36 -0
  67. package/dist/consumer-contract.d.ts.map +1 -0
  68. package/dist/consumer-contract.js +290 -0
  69. package/dist/consumer-contract.js.map +1 -0
  70. package/dist/doctor.d.ts +17 -0
  71. package/dist/doctor.d.ts.map +1 -1
  72. package/dist/doctor.js +392 -95
  73. package/dist/doctor.js.map +1 -1
  74. package/dist/index.d.ts +14 -6
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +7 -3
  77. package/dist/index.js.map +1 -1
  78. package/dist/init.d.ts +23 -7
  79. package/dist/init.d.ts.map +1 -1
  80. package/dist/init.js +91 -26
  81. package/dist/init.js.map +1 -1
  82. package/dist/install-skill.d.ts +1 -1
  83. package/dist/install-skill.js +2 -2
  84. package/dist/install-skill.js.map +1 -1
  85. package/dist/interaction-bridge.d.ts +72 -0
  86. package/dist/interaction-bridge.d.ts.map +1 -0
  87. package/dist/interaction-bridge.js +354 -0
  88. package/dist/interaction-bridge.js.map +1 -0
  89. package/dist/launchd.d.ts +0 -2
  90. package/dist/launchd.d.ts.map +1 -1
  91. package/dist/launchd.js +0 -2
  92. package/dist/launchd.js.map +1 -1
  93. package/dist/memory-command.d.ts +10 -0
  94. package/dist/memory-command.d.ts.map +1 -0
  95. package/dist/memory-command.js +649 -0
  96. package/dist/memory-command.js.map +1 -0
  97. package/dist/memory-recall-main.d.ts +3 -0
  98. package/dist/memory-recall-main.d.ts.map +1 -0
  99. package/dist/memory-recall-main.js +30 -0
  100. package/dist/memory-recall-main.js.map +1 -0
  101. package/dist/memory-recall.d.ts +147 -0
  102. package/dist/memory-recall.d.ts.map +1 -0
  103. package/dist/memory-recall.js +345 -0
  104. package/dist/memory-recall.js.map +1 -0
  105. package/dist/memory-rituals.d.ts +8 -11
  106. package/dist/memory-rituals.d.ts.map +1 -1
  107. package/dist/memory-rituals.js +26 -25
  108. package/dist/memory-rituals.js.map +1 -1
  109. package/dist/metrics.d.ts +13 -0
  110. package/dist/metrics.d.ts.map +1 -0
  111. package/dist/metrics.js +105 -0
  112. package/dist/metrics.js.map +1 -0
  113. package/dist/notify-destinations.d.ts +23 -0
  114. package/dist/notify-destinations.d.ts.map +1 -0
  115. package/dist/notify-destinations.js +79 -0
  116. package/dist/notify-destinations.js.map +1 -0
  117. package/dist/posted-message-index.d.ts +61 -0
  118. package/dist/posted-message-index.d.ts.map +1 -0
  119. package/dist/posted-message-index.js +178 -0
  120. package/dist/posted-message-index.js.map +1 -0
  121. package/dist/proactive-notify.d.ts +32 -0
  122. package/dist/proactive-notify.d.ts.map +1 -0
  123. package/dist/proactive-notify.js +62 -0
  124. package/dist/proactive-notify.js.map +1 -0
  125. package/dist/recipes/base.d.ts +15 -0
  126. package/dist/recipes/base.d.ts.map +1 -0
  127. package/dist/recipes/base.js +51 -0
  128. package/dist/recipes/base.js.map +1 -0
  129. package/dist/recipes/catalog.d.ts +4 -0
  130. package/dist/recipes/catalog.d.ts.map +1 -0
  131. package/dist/recipes/catalog.js +509 -0
  132. package/dist/recipes/catalog.js.map +1 -0
  133. package/dist/recipes/index.d.ts +11 -0
  134. package/dist/recipes/index.d.ts.map +1 -0
  135. package/dist/recipes/index.js +14 -0
  136. package/dist/recipes/index.js.map +1 -0
  137. package/dist/recipes/types.d.ts +70 -0
  138. package/dist/recipes/types.d.ts.map +1 -0
  139. package/dist/recipes/types.js +15 -0
  140. package/dist/recipes/types.js.map +1 -0
  141. package/dist/request-model-override.d.ts +67 -0
  142. package/dist/request-model-override.d.ts.map +1 -0
  143. package/dist/request-model-override.js +96 -0
  144. package/dist/request-model-override.js.map +1 -0
  145. package/dist/runs-health.d.ts +22 -0
  146. package/dist/runs-health.d.ts.map +1 -0
  147. package/dist/runs-health.js +144 -0
  148. package/dist/runs-health.js.map +1 -0
  149. package/dist/seen-conversations.d.ts +22 -0
  150. package/dist/seen-conversations.d.ts.map +1 -0
  151. package/dist/seen-conversations.js +120 -0
  152. package/dist/seen-conversations.js.map +1 -0
  153. package/dist/sessions.d.ts +21 -0
  154. package/dist/sessions.d.ts.map +1 -0
  155. package/dist/sessions.js +45 -0
  156. package/dist/sessions.js.map +1 -0
  157. package/dist/setup.d.ts +29 -0
  158. package/dist/setup.d.ts.map +1 -0
  159. package/dist/setup.js +97 -0
  160. package/dist/setup.js.map +1 -0
  161. package/dist/trigger-overrides.d.ts +17 -0
  162. package/dist/trigger-overrides.d.ts.map +1 -0
  163. package/dist/trigger-overrides.js +30 -0
  164. package/dist/trigger-overrides.js.map +1 -0
  165. package/dist/tui-command.d.ts +56 -0
  166. package/dist/tui-command.d.ts.map +1 -0
  167. package/dist/tui-command.js +160 -0
  168. package/dist/tui-command.js.map +1 -0
  169. package/dist/ui.d.ts +54 -0
  170. package/dist/ui.d.ts.map +1 -0
  171. package/dist/ui.js +157 -0
  172. package/dist/ui.js.map +1 -0
  173. package/dist/web-command.d.ts +39 -0
  174. package/dist/web-command.d.ts.map +1 -0
  175. package/dist/web-command.js +151 -0
  176. package/dist/web-command.js.map +1 -0
  177. package/package.json +22 -17
  178. package/schema/mono-agent.config.schema.json +1686 -0
  179. package/skills/mono-agent-composer/SKILL.md +38 -12
  180. package/skills/mono-agent-composer/agents/openai.yaml +4 -0
  181. package/skills/mono-agent-composer/references/config-blueprint.md +84 -31
  182. package/skills/mono-agent-composer/references/discovery-questions.md +49 -36
  183. package/skills/mono-agent-composer/references/feature-coverage.md +26 -19
  184. package/skills/mono-agent-composer/references/package-map.md +20 -22
  185. package/skills/mono-agent-composer/references/playbooks.md +209 -0
  186. package/skills/mono-agent-composer/references/validation.md +14 -5
@@ -0,0 +1,104 @@
1
+ import type { AgentHarness, AgentHarnessOptions, AgentHarnessRuntimeOptionsExtension, AgentHarnessRuntimeOptionsInput, ConversationHistoryStore } from "@mono-agent/agent-harness";
2
+ import type { AgentResponder, MemoryStore, RunEventSink } from "@mono-agent/agent-contracts";
3
+ import type { MonoAgentConfig } from "@mono-agent/config";
4
+ import type { PhoenixExporterConfig, RunExporter } from "@mono-agent/observability";
5
+ import type { MonoRuntimeLike, RuntimeModelReference } from "@mono-agent/runtime-adapter";
6
+ import type { SandboxEngine } from "@mono-agent/runtime-adapter";
7
+ export interface ConfiguredAgentRuntimeOptions {
8
+ readonly config: MonoAgentConfig;
9
+ readonly model?: RuntimeModelReference;
10
+ readonly executionMode?: string;
11
+ readonly sandboxEngine?: SandboxEngine;
12
+ }
13
+ export type ConfiguredAgentSessionEventKind = "acquired" | "released" | "saved" | "evicted" | "isolated" | "cold";
14
+ export interface ConfiguredAgentSessionSnapshot {
15
+ readonly conversationId: string;
16
+ readonly providerSessionId: string;
17
+ readonly createdAt: number;
18
+ readonly lastActivityAt: number;
19
+ readonly busy: boolean;
20
+ }
21
+ export interface ConfiguredAgentSessionEvent {
22
+ readonly kind: ConfiguredAgentSessionEventKind;
23
+ readonly conversationId: string;
24
+ readonly providerSessionId?: string;
25
+ readonly createdAt?: number;
26
+ readonly lastActivityAt?: number;
27
+ readonly busy?: boolean;
28
+ readonly reason?: string;
29
+ readonly snapshot?: readonly ConfiguredAgentSessionSnapshot[];
30
+ }
31
+ type ConfiguredAgentSessionEventHandler = (event: ConfiguredAgentSessionEvent) => void | Promise<void>;
32
+ export interface ConfiguredAgentHarnessOptions {
33
+ readonly config: MonoAgentConfig;
34
+ readonly runtime?: MonoRuntimeLike;
35
+ readonly model?: RuntimeModelReference;
36
+ readonly executionMode?: string;
37
+ readonly memory?: MemoryStore;
38
+ readonly historyStore?: ConversationHistoryStore;
39
+ readonly createRunId?: AgentHarnessOptions["createRunId"];
40
+ readonly now?: AgentHarnessOptions["now"];
41
+ readonly runtimeOptions?: AgentHarnessOptions["runtimeOptions"];
42
+ readonly sandboxEngine?: SandboxEngine;
43
+ readonly runtimeOptionsForRequest?: (input: AgentHarnessRuntimeOptionsInput) => AgentHarnessRuntimeOptionsExtension | Promise<AgentHarnessRuntimeOptionsExtension>;
44
+ readonly onSessionEvent?: ConfiguredAgentSessionEventHandler;
45
+ /**
46
+ * Factory for a runtime bound to a per-request override model (cron/webhook
47
+ * per-trigger model). Wired by the app so override runtimes share the
48
+ * configured fallback chain and participate in config-reload disposal.
49
+ */
50
+ readonly runtimeForModel?: AgentHarnessOptions["runtimeForModel"];
51
+ /**
52
+ * Exporter-context fields the factory input cannot supply. Surfaced on the
53
+ * exported root span so Phoenix traces map back to the running host and its
54
+ * local artifacts.
55
+ */
56
+ readonly observabilityContext?: {
57
+ readonly sourceId?: string;
58
+ readonly sourceLabel?: string;
59
+ readonly configPath?: string;
60
+ };
61
+ /** Best-effort exporter warnings (timeouts, transport failures). */
62
+ readonly exporterWarn?: (warning: {
63
+ phase: string;
64
+ message: string;
65
+ }) => void;
66
+ /** Injection seam (tests); defaults to createPhoenixRunExporter. */
67
+ readonly exporterFactory?: (config: PhoenixExporterConfig) => RunExporter;
68
+ /**
69
+ * In-process live run-event bus. When present, every run's start/event/finish
70
+ * is ALSO published here (best-effort, additive) so a live operator surface can
71
+ * observe runs mid-flight. Wired by the app from its shared bus.
72
+ */
73
+ readonly runEventSink?: RunEventSink;
74
+ }
75
+ export interface ConfiguredAgentResponderOptions extends ConfiguredAgentHarnessOptions {
76
+ }
77
+ export declare function createConfiguredAgentRuntime(config: MonoAgentConfig): MonoRuntimeLike;
78
+ export declare function createConfiguredAgentRuntime(options: ConfiguredAgentRuntimeOptions): MonoRuntimeLike;
79
+ export declare function createConfiguredAgentHarness(options: ConfiguredAgentHarnessOptions): Promise<AgentHarness>;
80
+ export declare function createConfiguredAgentResponder(options: ConfiguredAgentResponderOptions): Promise<AgentResponder>;
81
+ export declare function createConfiguredMemory(config: MonoAgentConfig, deps?: {
82
+ logger?: {
83
+ warn(message: string): void;
84
+ };
85
+ /**
86
+ * Injection seam for the bujo memory LLM's runtime (tests). This runtime MUST
87
+ * NOT carry the channel runtime's fallback chain: the agent-runtime fallback
88
+ * router overrides each run's per-call `model` with the chain's primary entry,
89
+ * so a memory LLM riding the channel runtime would silently execute on
90
+ * `config.runtime.model` instead of `config.memory.llm.model`. When omitted the
91
+ * memory LLM builds its OWN fallback-free runtime from
92
+ * `runtimeHostOptionsForConfig(config)` (preserving the pi auth resolver) so the
93
+ * per-call `config.memory.llm.model` is the sole, effective primary.
94
+ */
95
+ memoryRuntime?: MonoRuntimeLike;
96
+ /**
97
+ * When supplied, the bujo memory LLM records each `complete()` as a run via
98
+ * the same JSONL + Phoenix pipeline as channel runs (subject to the
99
+ * `memory.llm.trace` toggle). Omitted → memory LLM runs unrecorded.
100
+ */
101
+ observability?: Pick<ConfiguredAgentHarnessOptions, "observabilityContext" | "exporterWarn" | "exporterFactory" | "runEventSink">;
102
+ }): Promise<MemoryStore | undefined>;
103
+ export {};
104
+ //# sourceMappingURL=configured-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configured-agent.d.ts","sourceRoot":"","sources":["../src/configured-agent.ts"],"names":[],"mappings":"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"}