@easynet/agent-runtime 1.0.3 → 1.0.4

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 (205) hide show
  1. package/.github/workflows/ci.yml +9 -24
  2. package/.github/workflows/release.yml +14 -35
  3. package/agent-runtime/.github/workflows/ci.yml +69 -0
  4. package/agent-runtime/.github/workflows/release.yml +118 -0
  5. package/agent-runtime/.releaserc.cjs +26 -0
  6. package/agent-runtime/config/agent.deep.yaml +25 -0
  7. package/agent-runtime/config/agent.react.yaml +24 -0
  8. package/agent-runtime/example/basic-usage.ts +49 -0
  9. package/agent-runtime/package-lock.json +7740 -0
  10. package/agent-runtime/package.json +49 -0
  11. package/agent-runtime/pnpm-lock.yaml +3712 -0
  12. package/agent-runtime/scripts/resolve-deps.js +54 -0
  13. package/agent-runtime/src/agents/deep-agent.ts +165 -0
  14. package/agent-runtime/src/agents/react-agent.helpers.ts +227 -0
  15. package/agent-runtime/src/agents/react-agent.ts +584 -0
  16. package/{src → agent-runtime/src/agents}/sub-agent.ts +2 -2
  17. package/agent-runtime/src/cli/args.ts +15 -0
  18. package/agent-runtime/src/cli/event-listener.ts +162 -0
  19. package/agent-runtime/src/cli/interactive.ts +144 -0
  20. package/agent-runtime/src/cli/runtime.ts +31 -0
  21. package/agent-runtime/src/cli/spinner.ts +23 -0
  22. package/agent-runtime/src/cli/terminal-render.ts +322 -0
  23. package/agent-runtime/src/cli/types.ts +33 -0
  24. package/agent-runtime/src/cli.ts +134 -0
  25. package/agent-runtime/src/config/helpers.ts +179 -0
  26. package/agent-runtime/src/config/index.ts +245 -0
  27. package/agent-runtime/src/config/types.ts +62 -0
  28. package/agent-runtime/src/core/context.ts +266 -0
  29. package/agent-runtime/src/index.ts +55 -0
  30. package/agent-runtime/tsconfig.json +18 -0
  31. package/apps/imessagebot/README.md +38 -0
  32. package/apps/imessagebot/config/.agent/cache/easynet/agent-tool-buildin/0.0.45/README.md +33 -0
  33. package/apps/imessagebot/config/.agent/cache/easynet/agent-tool-buildin/0.0.45/package-lock.json +15257 -0
  34. package/apps/imessagebot/config/.agent/cache/easynet/agent-tool-buildin/0.0.45/package.json +55 -0
  35. package/apps/imessagebot/config/agents/deep/agent.yaml +31 -0
  36. package/apps/imessagebot/config/agents/react/agent.yaml +58 -0
  37. package/apps/imessagebot/config/agents/shared/.agent/cache/easynet/agent-tool-buildin/0.0.43/README.md +33 -0
  38. package/apps/imessagebot/config/agents/shared/.agent/cache/easynet/agent-tool-buildin/0.0.43/package-lock.json +15457 -0
  39. package/apps/imessagebot/config/agents/shared/.agent/cache/easynet/agent-tool-buildin/0.0.43/package.json +55 -0
  40. package/apps/imessagebot/config/agents/shared/.agent/cache/easynet/agent-tool-buildin/0.0.46/README.md +33 -0
  41. package/apps/imessagebot/config/agents/shared/.agent/cache/easynet/agent-tool-buildin/0.0.46/package-lock.json +15257 -0
  42. package/apps/imessagebot/config/agents/shared/.agent/cache/easynet/agent-tool-buildin/0.0.46/package.json +62 -0
  43. package/apps/imessagebot/config/agents/shared/memory.yaml +31 -0
  44. package/apps/imessagebot/config/agents/shared/model.yaml +23 -0
  45. package/apps/imessagebot/config/agents/shared/tool.yaml +13 -0
  46. package/apps/imessagebot/config/app.yaml +14 -0
  47. package/apps/imessagebot/package-lock.json +53695 -0
  48. package/apps/imessagebot/package.json +41 -0
  49. package/apps/imessagebot/pnpm-lock.yaml +1589 -0
  50. package/apps/imessagebot/scripts/resolve-deps.js +41 -0
  51. package/apps/imessagebot/scripts/test-llm.mjs +27 -0
  52. package/apps/imessagebot/scripts/validate-tools-config.mjs +174 -0
  53. package/apps/imessagebot/src/config.ts +76 -0
  54. package/apps/imessagebot/src/context.ts +35 -0
  55. package/apps/imessagebot/src/index.ts +17 -0
  56. package/apps/imessagebot/tsconfig.json +18 -0
  57. package/apps/itermbot/.github/workflows/ci.yml +61 -0
  58. package/apps/itermbot/.github/workflows/release.yml +80 -0
  59. package/apps/itermbot/.releaserc.cjs +26 -0
  60. package/apps/itermbot/README.md +82 -0
  61. package/apps/itermbot/config/app.yaml +29 -0
  62. package/apps/itermbot/config/tsconfig.json +18 -0
  63. package/apps/itermbot/macos_disk_usage_agent_plan.md +244 -0
  64. package/apps/itermbot/package-lock.json +53697 -0
  65. package/apps/itermbot/package.json +57 -0
  66. package/apps/itermbot/pnpm-lock.yaml +3966 -0
  67. package/apps/itermbot/scripts/patch-buildin-cache.sh +25 -0
  68. package/apps/itermbot/scripts/resolve-deps.js +41 -0
  69. package/apps/itermbot/scripts/test-llm.mjs +32 -0
  70. package/apps/itermbot/skills/command-explain-and-guard/SKILL.md +39 -0
  71. package/apps/itermbot/skills/command-explain-and-guard/handler.js +86 -0
  72. package/apps/itermbot/skills/disk-usage-investigate/SKILL.md +44 -0
  73. package/apps/itermbot/skills/disk-usage-investigate/handler.js +12 -0
  74. package/apps/itermbot/skills/gpu-ssh-monitor/SKILL.md +64 -0
  75. package/apps/itermbot/skills/repo-triage/SKILL.md +40 -0
  76. package/apps/itermbot/skills/repo-triage/handler.js +56 -0
  77. package/apps/itermbot/skills/test-failure-diagnose/SKILL.md +43 -0
  78. package/apps/itermbot/skills/test-failure-diagnose/handler.js +107 -0
  79. package/apps/itermbot/src/config.ts +95 -0
  80. package/apps/itermbot/src/context.ts +35 -0
  81. package/apps/itermbot/src/index.ts +223 -0
  82. package/apps/itermbot/src/iterm/session-hint.ts +40 -0
  83. package/apps/itermbot/src/iterm/target-routing.ts +419 -0
  84. package/apps/itermbot/src/startup/colors.ts +317 -0
  85. package/apps/itermbot/src/startup/diagnostics.ts +97 -0
  86. package/apps/itermbot/src/startup/ui.ts +141 -0
  87. package/config/agent.deep.yaml +25 -0
  88. package/config/agent.react.yaml +24 -0
  89. package/dist/agents/deep-agent.d.ts +37 -0
  90. package/dist/agents/deep-agent.d.ts.map +1 -0
  91. package/dist/agents/deep-agent.js +115 -0
  92. package/dist/agents/deep-agent.js.map +1 -0
  93. package/dist/agents/react-agent.d.ts +40 -0
  94. package/dist/agents/react-agent.d.ts.map +1 -0
  95. package/dist/agents/react-agent.helpers.d.ts +40 -0
  96. package/dist/agents/react-agent.helpers.d.ts.map +1 -0
  97. package/dist/agents/react-agent.helpers.js +196 -0
  98. package/dist/agents/react-agent.helpers.js.map +1 -0
  99. package/dist/agents/react-agent.js +400 -0
  100. package/dist/agents/react-agent.js.map +1 -0
  101. package/dist/agents/sub-agent.d.ts +34 -0
  102. package/dist/agents/sub-agent.d.ts.map +1 -0
  103. package/dist/agents/sub-agent.js +53 -0
  104. package/dist/agents/sub-agent.js.map +1 -0
  105. package/dist/cli/args.d.ts +8 -0
  106. package/dist/cli/args.d.ts.map +1 -0
  107. package/dist/cli/args.js +9 -0
  108. package/dist/cli/args.js.map +1 -0
  109. package/dist/cli/event-listener.d.ts +3 -0
  110. package/dist/cli/event-listener.d.ts.map +1 -0
  111. package/dist/cli/event-listener.js +131 -0
  112. package/dist/cli/event-listener.js.map +1 -0
  113. package/dist/cli/interactive.d.ts +4 -0
  114. package/dist/cli/interactive.d.ts.map +1 -0
  115. package/dist/cli/interactive.js +118 -0
  116. package/dist/cli/interactive.js.map +1 -0
  117. package/dist/cli/runtime.d.ts +8 -0
  118. package/dist/cli/runtime.d.ts.map +1 -0
  119. package/dist/cli/runtime.js +27 -0
  120. package/dist/cli/runtime.js.map +1 -0
  121. package/dist/cli/spinner.d.ts +2 -0
  122. package/dist/cli/spinner.d.ts.map +1 -0
  123. package/dist/cli/spinner.js +22 -0
  124. package/dist/cli/spinner.js.map +1 -0
  125. package/dist/cli/terminal-render.d.ts +7 -0
  126. package/dist/cli/terminal-render.d.ts.map +1 -0
  127. package/dist/cli/terminal-render.js +282 -0
  128. package/dist/cli/terminal-render.js.map +1 -0
  129. package/dist/cli/types.d.ts +29 -0
  130. package/dist/cli/types.d.ts.map +1 -0
  131. package/dist/cli/types.js +3 -0
  132. package/dist/cli/types.js.map +1 -0
  133. package/dist/cli.d.ts +4 -41
  134. package/dist/cli.d.ts.map +1 -1
  135. package/dist/cli.js +84 -588
  136. package/dist/cli.js.map +1 -1
  137. package/dist/config/helpers.d.ts +6 -0
  138. package/dist/config/helpers.d.ts.map +1 -0
  139. package/dist/config/helpers.js +164 -0
  140. package/dist/config/helpers.js.map +1 -0
  141. package/dist/config/index.d.ts +15 -0
  142. package/dist/config/index.d.ts.map +1 -0
  143. package/dist/config/index.js +160 -0
  144. package/dist/config/index.js.map +1 -0
  145. package/dist/config/types.d.ts +57 -0
  146. package/dist/config/types.d.ts.map +1 -0
  147. package/dist/config/types.js +2 -0
  148. package/dist/config/types.js.map +1 -0
  149. package/dist/context.d.ts +8 -69
  150. package/dist/context.d.ts.map +1 -1
  151. package/dist/context.js +44 -24
  152. package/dist/context.js.map +1 -1
  153. package/dist/core/context.d.ts +66 -0
  154. package/dist/core/context.d.ts.map +1 -0
  155. package/dist/core/context.js +149 -0
  156. package/dist/core/context.js.map +1 -0
  157. package/dist/deep-agent.d.ts +5 -2
  158. package/dist/deep-agent.d.ts.map +1 -1
  159. package/dist/deep-agent.js +44 -11
  160. package/dist/deep-agent.js.map +1 -1
  161. package/dist/index.d.ts +6 -6
  162. package/dist/index.d.ts.map +1 -1
  163. package/dist/index.js +6 -6
  164. package/dist/index.js.map +1 -1
  165. package/dist/middleware/malformed-tool-call-middleware.d.ts +8 -0
  166. package/dist/middleware/malformed-tool-call-middleware.d.ts.map +1 -0
  167. package/dist/middleware/malformed-tool-call-middleware.js +191 -0
  168. package/dist/middleware/malformed-tool-call-middleware.js.map +1 -0
  169. package/dist/react-agent.d.ts +2 -2
  170. package/dist/react-agent.d.ts.map +1 -1
  171. package/dist/react-agent.js +28 -9
  172. package/dist/react-agent.js.map +1 -1
  173. package/package.json +1 -1
  174. package/scripts/resolve-deps.js +54 -0
  175. package/src/agents/deep-agent.ts +165 -0
  176. package/src/agents/react-agent.helpers.ts +227 -0
  177. package/src/agents/react-agent.ts +584 -0
  178. package/src/agents/sub-agent.ts +82 -0
  179. package/src/cli/args.ts +15 -0
  180. package/src/cli/event-listener.ts +162 -0
  181. package/src/cli/interactive.ts +144 -0
  182. package/src/cli/runtime.ts +31 -0
  183. package/src/cli/spinner.ts +23 -0
  184. package/src/cli/terminal-render.ts +322 -0
  185. package/src/cli/types.ts +33 -0
  186. package/src/cli.ts +91 -702
  187. package/src/config/helpers.ts +179 -0
  188. package/src/config/index.ts +245 -0
  189. package/src/config/types.ts +62 -0
  190. package/src/core/context.ts +266 -0
  191. package/src/index.ts +13 -11
  192. package/src/middleware/malformed-tool-call-middleware.ts +239 -0
  193. package/src/types/markdown-it-terminal.d.ts +4 -0
  194. package/src/types/marked-terminal.d.ts +16 -0
  195. package/dist/config.d.ts +0 -86
  196. package/dist/config.d.ts.map +0 -1
  197. package/dist/config.js +0 -84
  198. package/dist/config.js.map +0 -1
  199. package/src/config.ts +0 -177
  200. package/src/context.ts +0 -247
  201. package/src/deep-agent.ts +0 -104
  202. package/src/react-agent.ts +0 -576
  203. /package/{src → agent-runtime/src/middleware}/malformed-tool-call-middleware.ts +0 -0
  204. /package/{src → agent-runtime/src/types}/markdown-it-terminal.d.ts +0 -0
  205. /package/{src → agent-runtime/src/types}/marked-terminal.d.ts +0 -0
package/dist/config.js DELETED
@@ -1,84 +0,0 @@
1
- /**
2
- * Shared app config: YAML loading, path resolution.
3
- * Apps supply only their defaults (e.g. tool file paths).
4
- */
5
- import { join } from "node:path";
6
- import { loadYamlFile } from "@easynet/agent-common";
7
- const APP_ROOT = process.cwd();
8
- const DEFAULT_MODELS_PATH = "config/agents/shared/models.yaml";
9
- const DEFAULT_MEMORY_PATH = "config/agents/shared/memory.yaml";
10
- const DEFAULT_TOOL_PATH = "config/agents/shared/tool.yaml";
11
- export async function loadAppConfig(configPath) {
12
- const path = configPath ?? join(APP_ROOT, "config", "app.yaml");
13
- const loaded = (await loadYamlFile(path)) ?? {};
14
- const agents = loaded.app?.agent;
15
- if (!agents)
16
- return loaded;
17
- const mergedAgents = Object.fromEntries(await Promise.all(Object.entries(agents).map(async ([agentName, agentConfig]) => {
18
- const filePath = agentConfig?.path;
19
- if (!filePath)
20
- return [agentName, agentConfig];
21
- const resolved = filePath.startsWith("/") ? filePath : join(APP_ROOT, filePath);
22
- const loadedAgent = (await loadYamlFile(resolved)) ?? {};
23
- return [agentName, { ...loadedAgent, ...agentConfig, path: filePath }];
24
- })));
25
- return {
26
- ...loaded,
27
- app: {
28
- ...loaded.app,
29
- agent: mergedAgents,
30
- },
31
- };
32
- }
33
- export function getModelsConfigPath(config, agentName = "react", defaults) {
34
- const agent = config?.app?.agent?.[agentName];
35
- const p = agent?.models?.path ?? agent?.llm?.path ?? defaults?.modelsPath ?? DEFAULT_MODELS_PATH;
36
- return p.startsWith("/") ? p : join(APP_ROOT, p);
37
- }
38
- export function getMemoryConfigPath(config, agentName = "react", defaults) {
39
- const p = config?.app?.agent?.[agentName]?.memory?.path ?? defaults?.memoryPath ?? DEFAULT_MEMORY_PATH;
40
- return p.startsWith("/") ? p : join(APP_ROOT, p);
41
- }
42
- export function getToolConfigPath(config, agentName, defaults) {
43
- const name = agentName ?? "react";
44
- const envFromProcess = (process.env.APP_ENV ?? process.env.NODE_ENV ?? "").trim().toLowerCase();
45
- const envFromConfig = (config?.app?.env ?? "").trim().toLowerCase();
46
- const env = envFromProcess || envFromConfig || "development";
47
- const isProd = env === "production" || env === "prod";
48
- const tools = config?.app?.agent?.[name]?.tools;
49
- const fallback = defaults?.toolPath ?? DEFAULT_TOOL_PATH;
50
- const p = isProd
51
- ? (tools?.production ?? tools?.path ?? defaults?.toolProdPath ?? fallback)
52
- : (tools?.development ?? tools?.path ?? defaults?.toolDevPath ?? fallback);
53
- return p.startsWith("/") ? p : join(APP_ROOT, p);
54
- }
55
- /**
56
- * Create a ConfigApi suitable for `createContextBuilders`.
57
- * Apps can supply defaults (e.g. custom tool paths) or use the built-in ones.
58
- */
59
- export function createConfigApi(defaults) {
60
- return {
61
- loadAppConfig,
62
- getModelsConfigPath: (config, agentName) => getModelsConfigPath(config, agentName, defaults),
63
- getMemoryConfigPath: (config, agentName) => getMemoryConfigPath(config, agentName, defaults),
64
- getToolConfigPath: (config, agentName) => getToolConfigPath(config, agentName, defaults),
65
- };
66
- }
67
- /**
68
- * Resolve the SkillsConfig for a given agent, if configured.
69
- * Resolves relative `path` to absolute using APP_ROOT.
70
- */
71
- export function getSkillsConfig(config, agentName = "react") {
72
- const raw = config?.app?.agent?.[agentName]?.skills;
73
- if (!raw?.path)
74
- return undefined;
75
- const resolved = raw.path.startsWith("/") ? raw.path : join(APP_ROOT, raw.path);
76
- return {
77
- path: resolved,
78
- mode: raw.mode,
79
- inject_metadata: raw.inject_metadata,
80
- embedding_threshold: raw.embedding_threshold,
81
- keyword_threshold: raw.keyword_threshold,
82
- };
83
- }
84
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAYrD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AA2D/B,MAAM,mBAAmB,GAAG,kCAAkC,CAAC;AAC/D,MAAM,mBAAmB,GAAG,kCAAkC,CAAC;AAC/D,MAAM,iBAAiB,GAAG,gCAAgC,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAmB;IACrD,MAAM,IAAI,GAAG,UAAU,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAChE,MAAM,MAAM,GAAI,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,CAAe,IAAI,EAAE,CAAC;IAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;IACjC,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IAE3B,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CACrC,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,EAAE;QAC5D,MAAM,QAAQ,GAAG,WAAW,EAAE,IAAI,CAAC;QACnC,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,SAAS,EAAE,WAAW,CAAU,CAAC;QACxD,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAChF,MAAM,WAAW,GAAI,CAAC,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAwB,IAAI,EAAE,CAAC;QACjF,OAAO,CAAC,SAAS,EAAE,EAAE,GAAG,WAAW,EAAE,GAAG,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAU,CAAC;IAClF,CAAC,CAAC,CACH,CACoC,CAAC;IAExC,OAAO;QACL,GAAG,MAAM;QACT,GAAG,EAAE;YACH,GAAG,MAAM,CAAC,GAAG;YACb,KAAK,EAAE,YAAY;SACpB;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAkB,EAClB,SAAS,GAAG,OAAO,EACnB,QAA4B;IAE5B,MAAM,KAAK,GAAG,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,IAAI,IAAI,KAAK,EAAE,GAAG,EAAE,IAAI,IAAI,QAAQ,EAAE,UAAU,IAAI,mBAAmB,CAAC;IACjG,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAkB,EAClB,SAAS,GAAG,OAAO,EACnB,QAA4B;IAE5B,MAAM,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,IAAI,QAAQ,EAAE,UAAU,IAAI,mBAAmB,CAAC;IACvG,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAA6B,EAC7B,SAA6B,EAC7B,QAA4B;IAE5B,MAAM,IAAI,GAAG,SAAS,IAAI,OAAO,CAAC;IAClC,MAAM,cAAc,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChG,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACpE,MAAM,GAAG,GAAG,cAAc,IAAI,aAAa,IAAI,aAAa,CAAC;IAC7D,MAAM,MAAM,GAAG,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK,MAAM,CAAC;IACtD,MAAM,KAAK,GAAG,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;IAEhD,MAAM,QAAQ,GAAG,QAAQ,EAAE,QAAQ,IAAI,iBAAiB,CAAC;IACzD,MAAM,CAAC,GAAG,MAAM;QACd,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,IAAI,KAAK,EAAE,IAAI,IAAI,QAAQ,EAAE,YAAY,IAAI,QAAQ,CAAC;QAC1E,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,IAAI,KAAK,EAAE,IAAI,IAAI,QAAQ,EAAE,WAAW,IAAI,QAAQ,CAAC,CAAC;IAC7E,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,QAA4B;IAC1D,OAAO;QACL,aAAa;QACb,mBAAmB,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC;QAC5F,mBAAmB,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC;QAC5F,iBAAiB,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC;KACzF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,MAA6B,EAC7B,SAAS,GAAG,OAAO;IAEnB,MAAM,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IACpD,IAAI,CAAC,GAAG,EAAE,IAAI;QAAE,OAAO,SAAS,CAAC;IACjC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAChF,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,eAAe,EAAE,GAAG,CAAC,eAAe;QACpC,mBAAmB,EAAE,GAAG,CAAC,mBAAmB;QAC5C,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;KACzC,CAAC;AACJ,CAAC"}
package/src/config.ts DELETED
@@ -1,177 +0,0 @@
1
- /**
2
- * Shared app config: YAML loading, path resolution.
3
- * Apps supply only their defaults (e.g. tool file paths).
4
- */
5
- import { join } from "node:path";
6
- import { loadYamlFile } from "@easynet/agent-common";
7
- import type { ConfigApi, BaseAppConfig } from "./context.js";
8
-
9
- /** Resolved skills configuration for an agent. */
10
- export interface SkillsConfig {
11
- path: string;
12
- mode?: "prompt" | "subagent";
13
- inject_metadata?: boolean;
14
- embedding_threshold?: number;
15
- keyword_threshold?: number;
16
- }
17
-
18
- const APP_ROOT = process.cwd();
19
-
20
- export type AgentProfileConfig = {
21
- path?: string;
22
- models?: { path?: string };
23
- llm?: { path?: string };
24
- memory?: {
25
- path?: string;
26
- namespace?: string;
27
- top_k?: number;
28
- budget_tokens?: number;
29
- auto_write?: boolean;
30
- auto_write_scope?: "thread" | "cross_thread" | "knowledge" | "auto";
31
- auto_write_max_chars?: number;
32
- auto_write_user?: boolean;
33
- auto_write_assistant?: boolean;
34
- };
35
- tools?: { path?: string; development?: string; production?: string };
36
- skills?: {
37
- path?: string;
38
- mode?: "prompt" | "subagent";
39
- inject_metadata?: boolean;
40
- embedding_threshold?: number;
41
- keyword_threshold?: number;
42
- };
43
- system_prompt?: string;
44
- max_steps?: number;
45
- print_steps?: boolean;
46
- fallback_text?: string;
47
- command_window_label?: string;
48
- recursion_limit?: number;
49
- memories_path?: string;
50
- };
51
-
52
- export interface AppConfig extends BaseAppConfig {
53
- app?: {
54
- name?: string;
55
- env?: string;
56
- memory?: {
57
- namespace_mode?: "thread" | "fixed";
58
- namespace?: string;
59
- };
60
- agent?: Record<string, AgentProfileConfig>;
61
- };
62
- }
63
-
64
- export interface AppConfigDefaults {
65
- /** Default models config path, e.g. "config/agents/shared/models.yaml" */
66
- modelsPath?: string;
67
- /** Default memory config path, e.g. "config/agents/shared/memory.yaml" */
68
- memoryPath?: string;
69
- /** Default tool config path, e.g. "config/agents/shared/tool.yaml" */
70
- toolPath?: string;
71
- /** Default tool config path for development */
72
- toolDevPath?: string;
73
- /** Default tool config path for production */
74
- toolProdPath?: string;
75
- }
76
-
77
- const DEFAULT_MODELS_PATH = "config/agents/shared/models.yaml";
78
- const DEFAULT_MEMORY_PATH = "config/agents/shared/memory.yaml";
79
- const DEFAULT_TOOL_PATH = "config/agents/shared/tool.yaml";
80
-
81
- export async function loadAppConfig(configPath?: string): Promise<AppConfig> {
82
- const path = configPath ?? join(APP_ROOT, "config", "app.yaml");
83
- const loaded = ((await loadYamlFile(path)) as AppConfig) ?? {};
84
- const agents = loaded.app?.agent;
85
- if (!agents) return loaded;
86
-
87
- const mergedAgents = Object.fromEntries(
88
- await Promise.all(
89
- Object.entries(agents).map(async ([agentName, agentConfig]) => {
90
- const filePath = agentConfig?.path;
91
- if (!filePath) return [agentName, agentConfig] as const;
92
- const resolved = filePath.startsWith("/") ? filePath : join(APP_ROOT, filePath);
93
- const loadedAgent = ((await loadYamlFile(resolved)) as AgentProfileConfig) ?? {};
94
- return [agentName, { ...loadedAgent, ...agentConfig, path: filePath }] as const;
95
- })
96
- )
97
- ) as Record<string, AgentProfileConfig>;
98
-
99
- return {
100
- ...loaded,
101
- app: {
102
- ...loaded.app,
103
- agent: mergedAgents,
104
- },
105
- };
106
- }
107
-
108
- export function getModelsConfigPath(
109
- config?: AppConfig,
110
- agentName = "react",
111
- defaults?: AppConfigDefaults
112
- ): string {
113
- const agent = config?.app?.agent?.[agentName];
114
- const p = agent?.models?.path ?? agent?.llm?.path ?? defaults?.modelsPath ?? DEFAULT_MODELS_PATH;
115
- return p.startsWith("/") ? p : join(APP_ROOT, p);
116
- }
117
-
118
- export function getMemoryConfigPath(
119
- config?: AppConfig,
120
- agentName = "react",
121
- defaults?: AppConfigDefaults
122
- ): string {
123
- const p = config?.app?.agent?.[agentName]?.memory?.path ?? defaults?.memoryPath ?? DEFAULT_MEMORY_PATH;
124
- return p.startsWith("/") ? p : join(APP_ROOT, p);
125
- }
126
-
127
- export function getToolConfigPath(
128
- config: AppConfig | undefined,
129
- agentName: string | undefined,
130
- defaults?: AppConfigDefaults
131
- ): string {
132
- const name = agentName ?? "react";
133
- const envFromProcess = (process.env.APP_ENV ?? process.env.NODE_ENV ?? "").trim().toLowerCase();
134
- const envFromConfig = (config?.app?.env ?? "").trim().toLowerCase();
135
- const env = envFromProcess || envFromConfig || "development";
136
- const isProd = env === "production" || env === "prod";
137
- const tools = config?.app?.agent?.[name]?.tools;
138
-
139
- const fallback = defaults?.toolPath ?? DEFAULT_TOOL_PATH;
140
- const p = isProd
141
- ? (tools?.production ?? tools?.path ?? defaults?.toolProdPath ?? fallback)
142
- : (tools?.development ?? tools?.path ?? defaults?.toolDevPath ?? fallback);
143
- return p.startsWith("/") ? p : join(APP_ROOT, p);
144
- }
145
-
146
- /**
147
- * Create a ConfigApi suitable for `createContextBuilders`.
148
- * Apps can supply defaults (e.g. custom tool paths) or use the built-in ones.
149
- */
150
- export function createConfigApi(defaults?: AppConfigDefaults): ConfigApi<AppConfig> {
151
- return {
152
- loadAppConfig,
153
- getModelsConfigPath: (config, agentName) => getModelsConfigPath(config, agentName, defaults),
154
- getMemoryConfigPath: (config, agentName) => getMemoryConfigPath(config, agentName, defaults),
155
- getToolConfigPath: (config, agentName) => getToolConfigPath(config, agentName, defaults),
156
- };
157
- }
158
-
159
- /**
160
- * Resolve the SkillsConfig for a given agent, if configured.
161
- * Resolves relative `path` to absolute using APP_ROOT.
162
- */
163
- export function getSkillsConfig(
164
- config: AppConfig | undefined,
165
- agentName = "react",
166
- ): SkillsConfig | undefined {
167
- const raw = config?.app?.agent?.[agentName]?.skills;
168
- if (!raw?.path) return undefined;
169
- const resolved = raw.path.startsWith("/") ? raw.path : join(APP_ROOT, raw.path);
170
- return {
171
- path: resolved,
172
- mode: raw.mode,
173
- inject_metadata: raw.inject_metadata,
174
- embedding_threshold: raw.embedding_threshold,
175
- keyword_threshold: raw.keyword_threshold,
176
- };
177
- }
package/src/context.ts DELETED
@@ -1,247 +0,0 @@
1
- import { createAgentLlm as createModelLlm, applyToolChoiceAuto, createEmbedFnFromModelsConfig } from "@easynet/agent-model";
2
- import { createAgentMemory as createMemoryClient } from "@easynet/agent-memory";
3
- import { createLangChainToolsAsync as createToolsClient } from "@easynet/agent-tool/api";
4
- import type { BaseChatModel } from "@langchain/core/language_models/chat_models";
5
- import type { AgentMemoryClient } from "@easynet/agent-memory";
6
- import {
7
- createAgentEventBus,
8
- loadYamlFile,
9
- type AgentEventBus,
10
- } from "@easynet/agent-common";
11
- import type { EmbedFn } from "@easynet/agent-skill";
12
- import { createSkills, type SkillSet } from "@easynet/agent-skill";
13
- import { createConfigApi, getSkillsConfig, type AppConfigDefaults, type AppConfig } from "./config.js";
14
- import { resolve, dirname } from "node:path";
15
-
16
- export interface BaseAppConfig {
17
- app?: {
18
- name?: string;
19
- env?: string;
20
- memory?: {
21
- namespace_mode?: "thread" | "fixed";
22
- namespace?: string;
23
- };
24
- agent?: Record<string, {
25
- models?: { path?: string };
26
- llm?: { path?: string };
27
- memory?: {
28
- path?: string;
29
- namespace?: string;
30
- top_k?: number;
31
- budget_tokens?: number;
32
- auto_write?: boolean;
33
- auto_write_scope?: "thread" | "cross_thread" | "knowledge" | "auto";
34
- auto_write_max_chars?: number;
35
- auto_write_user?: boolean;
36
- auto_write_assistant?: boolean;
37
- };
38
- tools?: { path?: string; development?: string; production?: string };
39
- skills?: {
40
- path?: string;
41
- mode?: "prompt" | "subagent";
42
- inject_metadata?: boolean;
43
- embedding_threshold?: number;
44
- keyword_threshold?: number;
45
- };
46
- system_prompt?: string;
47
- max_steps?: number;
48
- print_steps?: boolean;
49
- fallback_text?: string;
50
- command_window_label?: string;
51
- recursion_limit?: number;
52
- memories_path?: string;
53
- }>;
54
- };
55
- }
56
-
57
- export type AgentName = string;
58
-
59
- export type BotTool = Awaited<ReturnType<typeof createToolsClient>>[number];
60
-
61
- export interface BotContext<TConfig extends BaseAppConfig = BaseAppConfig, TTool = BotTool> {
62
- llm: BaseChatModel;
63
- memory: AgentMemoryClient;
64
- tools: TTool[];
65
- config: TConfig;
66
- events: AgentEventBus;
67
- skillSet?: SkillSet;
68
- }
69
-
70
- export interface CreateContextOptions<TTool = BotTool> {
71
- configPath?: string;
72
- agentName?: AgentName;
73
- events?: AgentEventBus;
74
- llm?: BaseChatModel;
75
- memory?: AgentMemoryClient;
76
- tools?: TTool[];
77
- }
78
-
79
- export interface ConfigApi<TConfig> {
80
- loadAppConfig: (configPath?: string) => Promise<TConfig>;
81
- getModelsConfigPath: (config: TConfig, agentName?: AgentName) => string;
82
- getMemoryConfigPath: (config: TConfig, agentName?: AgentName) => string;
83
- getToolConfigPath: (config: TConfig, agentName?: AgentName) => string;
84
- }
85
-
86
- function publishEvent(
87
- events: AgentEventBus,
88
- name: string,
89
- from: string,
90
- to: string,
91
- payload?: unknown
92
- ): void {
93
- events.publish({ name, from, to, payload });
94
- }
95
-
96
- export function createContextBuilders<TConfig extends BaseAppConfig>(params: {
97
- configApi: ConfigApi<TConfig>;
98
- }) {
99
- const {
100
- loadAppConfig,
101
- getModelsConfigPath,
102
- getMemoryConfigPath,
103
- getToolConfigPath,
104
- } = params.configApi;
105
-
106
- async function createAgentLlm(
107
- config: TConfig,
108
- events: AgentEventBus,
109
- agentName: AgentName = "react"
110
- ): Promise<BaseChatModel> {
111
- const modelsPath = getModelsConfigPath(config, agentName);
112
- publishEvent(events, "llm.init.start", "app", "llm", { configPath: modelsPath });
113
- const llm = await createModelLlm({ configPath: modelsPath });
114
- applyToolChoiceAuto(llm as Parameters<typeof applyToolChoiceAuto>[0]);
115
- publishEvent(events, "llm.init.done", "llm", "app");
116
- return llm;
117
- }
118
-
119
- async function createAgentMemory(
120
- config: TConfig,
121
- events: AgentEventBus,
122
- agentName: AgentName = "react"
123
- ): Promise<AgentMemoryClient> {
124
- const memoryPath = getMemoryConfigPath(config, agentName);
125
- publishEvent(events, "memory.init.start", "app", "memory", { configPath: memoryPath });
126
- const memory = await createMemoryClient({ configPath: memoryPath });
127
- publishEvent(events, "memory.init.done", "memory", "app");
128
- return memory;
129
- }
130
-
131
- async function createAgentTools(
132
- config: TConfig,
133
- events: AgentEventBus,
134
- agentName: AgentName = "react"
135
- ): Promise<BotTool[]> {
136
- const toolPath = getToolConfigPath(config, agentName);
137
- publishEvent(events, "tools.init.start", "app", "tools", { configPath: toolPath });
138
- const tools = await createToolsClient({ configFilePath: toolPath });
139
- publishEvent(events, "tools.init.done", "tools", "app", { count: tools.length });
140
- return tools;
141
- }
142
-
143
- async function createAgent(options: CreateContextOptions<BotTool> = {}): Promise<BotContext<TConfig, BotTool>> {
144
- const config = await loadAppConfig(options.configPath);
145
- const agentName = options.agentName ?? "react";
146
- const events = options.events ?? createAgentEventBus();
147
- publishEvent(events, "agent.context.init.start", "app", "runtime");
148
-
149
- const [llm, memory, tools] = await Promise.all([
150
- options.llm ?? createAgentLlm(config, events, agentName),
151
- options.memory ?? createAgentMemory(config, events, agentName),
152
- options.tools ?? createAgentTools(config, events, agentName),
153
- ]);
154
-
155
- // Load skills via createSkills (scans directory, builds index)
156
- let skillSet: SkillSet | undefined;
157
- const skillsConfig = getSkillsConfig(config as unknown as AppConfig, agentName);
158
- if (skillsConfig) {
159
- publishEvent(events, "skills.init.start", "app", "skills", { path: skillsConfig.path });
160
-
161
- // Build embedFn from models.yaml embed section (unified source)
162
- let embedFn: EmbedFn | undefined;
163
- try {
164
- const modelsPath = getModelsConfigPath(config, agentName);
165
- embedFn = createEmbedFnFromModelsConfig(modelsPath);
166
- } catch {
167
- // Embedding is optional; skill matching falls back to keywords
168
- }
169
-
170
- // Resolve skills directory path (from YAML or direct path)
171
- const skillsDir = await resolveSkillsDir(skillsConfig.path);
172
- skillSet = await createSkills({ path: skillsDir, embed: embedFn });
173
-
174
- // Inject skill metadata into system prompt (prompt mode)
175
- const mode = skillsConfig.mode ?? "prompt";
176
- if (mode === "prompt" && skillsConfig.inject_metadata !== false) {
177
- const section = skillSet.promptSection();
178
- if (section) {
179
- const agentConfig = config.app?.agent?.[agentName];
180
- if (agentConfig) {
181
- const currentPrompt = agentConfig.system_prompt ?? "";
182
- agentConfig.system_prompt = currentPrompt.trimEnd() + "\n\n" + section;
183
- }
184
- }
185
- }
186
-
187
- publishEvent(events, "skills.init.done", "skills", "app", {
188
- count: skillSet.list().length,
189
- mode,
190
- });
191
- }
192
-
193
- publishEvent(events, "agent.context.init.done", "runtime", "app");
194
- return { llm, memory, tools, config, events, skillSet };
195
- }
196
-
197
- async function createBotContext(
198
- configPath?: string,
199
- agentName: AgentName = "react"
200
- ): Promise<BotContext<TConfig, BotTool>> {
201
- return createAgent({ configPath, agentName });
202
- }
203
-
204
- return {
205
- createAgentLlm,
206
- createAgentMemory,
207
- createAgentTools,
208
- createAgent,
209
- createBotContext,
210
- };
211
- }
212
-
213
- /**
214
- * High-level factory: creates context builders from config defaults.
215
- * Apps call this once and destructure the helpers they need.
216
- *
217
- * ```ts
218
- * const { createBotContext, createAgent } = createAppContext();
219
- * ```
220
- */
221
- export interface AppContextBuilders {
222
- createAgentLlm: (config: BaseAppConfig, events: AgentEventBus, agentName?: AgentName) => Promise<BaseChatModel>;
223
- createAgentMemory: (config: BaseAppConfig, events: AgentEventBus, agentName?: AgentName) => Promise<AgentMemoryClient>;
224
- createAgentTools: (config: BaseAppConfig, events: AgentEventBus, agentName?: AgentName) => Promise<BotTool[]>;
225
- createAgent: (options?: CreateContextOptions<BotTool>) => Promise<BotContext>;
226
- createBotContext: (configPath?: string, agentName?: AgentName) => Promise<BotContext>;
227
- }
228
-
229
- /**
230
- * Resolve skills directory path from either a YAML config file or a direct path.
231
- * If the path ends with .yaml/.yml, loads the YAML and extracts the `path:` field.
232
- */
233
- async function resolveSkillsDir(skillsPath: string): Promise<string> {
234
- if (/\.ya?ml$/i.test(skillsPath)) {
235
- const raw = await loadYamlFile<{ path?: string }>(skillsPath);
236
- if (!raw?.path) {
237
- throw new Error(`skills config missing "path" field: ${skillsPath}`);
238
- }
239
- return resolve(dirname(skillsPath), raw.path);
240
- }
241
- return skillsPath;
242
- }
243
-
244
- export function createAppContext(defaults?: AppConfigDefaults): AppContextBuilders {
245
- const configApi = createConfigApi(defaults);
246
- return createContextBuilders<AppConfig>({ configApi }) as unknown as AppContextBuilders;
247
- }
package/src/deep-agent.ts DELETED
@@ -1,104 +0,0 @@
1
- import {
2
- createDeepAgent as createDeepAgentRuntime,
3
- StateBackend,
4
- } from "deepagents";
5
- import { extractLastMessageText } from "@easynet/agent-common";
6
- import type { BaseAppConfig, BotContext } from "./context.js";
7
-
8
- export interface DeepAgentRuntime {
9
- agent: unknown;
10
- run: (userMessage: string) => Promise<{ text: string; messages?: unknown }>;
11
- }
12
-
13
- export interface DeepAgentOptions {
14
- agentName?: string;
15
- systemPrompt?: string;
16
- recursionLimit?: number;
17
- autoWriteMemory?: boolean;
18
- }
19
-
20
- export async function createDeepAgent<TConfig extends BaseAppConfig>(
21
- ctx: BotContext<TConfig>,
22
- options: DeepAgentOptions = {}
23
- ) {
24
- const publish = (name: string, from: string, to: string, payload?: unknown) => {
25
- ctx.events.publish({ name, from, to, payload });
26
- };
27
-
28
- publish("agent.deep.init.start", "app", "deep-agent");
29
- const agentName = options.agentName ?? "deep";
30
- const configDeep = ctx.config.app?.agent?.[agentName];
31
- const promptFromConfig = configDeep?.system_prompt;
32
- const systemPrompt = options.systemPrompt ?? promptFromConfig;
33
- const recursionLimit = options.recursionLimit ?? configDeep?.recursion_limit;
34
- const namespace = configDeep?.memory?.namespace;
35
- const autoWriteMemory = options.autoWriteMemory ?? (configDeep?.memory?.auto_write ?? true);
36
- const autoWriteScope = configDeep?.memory?.auto_write_scope ?? "thread";
37
- const autoWriteMaxChars = configDeep?.memory?.auto_write_max_chars ?? 2400;
38
- const autoWriteUser = configDeep?.memory?.auto_write_user ?? true;
39
- const autoWriteAssistant = configDeep?.memory?.auto_write_assistant ?? true;
40
-
41
- type BackendConfig = { state: unknown };
42
- const agent = createDeepAgentRuntime({
43
- model: ctx.llm,
44
- tools: ctx.tools as unknown as Array<Record<string, unknown>>,
45
- backend: (config: BackendConfig) => new StateBackend(config),
46
- systemPrompt,
47
- } as never) as unknown as {
48
- invoke: (input: {
49
- messages: Array<{ role: "user" | "assistant"; content: string }>;
50
- }) => Promise<unknown>;
51
- };
52
- const conversationHistory: Array<{ role: "user" | "assistant"; content: string }> = [];
53
- const maxHistoryMessages = 24;
54
-
55
- publish("agent.deep.init.done", "deep-agent", "app");
56
-
57
- return {
58
- agent,
59
- async run(userMessage: string): Promise<{ text: string; messages?: unknown }> {
60
- publish("agent.deep.run.start", "user", "deep-agent", { userMessage });
61
- const runnable = typeof recursionLimit === "number"
62
- ? ((agent as { withConfig?: (config: { recursionLimit: number }) => { invoke: (input: unknown) => Promise<unknown> } })
63
- .withConfig?.({ recursionLimit }) ?? agent)
64
- : agent;
65
- const result: unknown = await runnable.invoke({
66
- messages: [...conversationHistory, { role: "user" as const, content: userMessage }],
67
- });
68
- const messages = (result as { messages?: unknown } | null | undefined)?.messages ?? result;
69
- const text = extractLastMessageText(result);
70
- conversationHistory.push({ role: "user", content: userMessage });
71
- if (text.trim().length > 0) {
72
- conversationHistory.push({ role: "assistant", content: text });
73
- }
74
- if (conversationHistory.length > maxHistoryMessages) {
75
- conversationHistory.splice(0, conversationHistory.length - maxHistoryMessages);
76
- }
77
- if (namespace && autoWriteMemory) {
78
- const scope = autoWriteScope === "auto" ? "thread" : autoWriteScope;
79
- const writeItems: string[] = [];
80
- if (autoWriteUser && userMessage.trim().length > 0) {
81
- writeItems.push(`[user]\n${userMessage.trim()}`);
82
- }
83
- if (autoWriteAssistant && text.trim().length > 0) {
84
- writeItems.push(`[assistant]\n${text.trim()}`);
85
- }
86
- const content = writeItems.join("\n\n").slice(0, Math.max(0, autoWriteMaxChars));
87
- if (content.length > 0) {
88
- try {
89
- publish("agent.deep.memory.write.start", "deep-agent", "memory", { type: scope, auto: true });
90
- await ctx.memory.memorize(namespace, scope, content);
91
- publish("agent.deep.memory.write.done", "memory", "deep-agent", { type: scope, auto: true });
92
- } catch (err) {
93
- publish("agent.deep.memory.write.error", "memory", "deep-agent", {
94
- auto: true,
95
- error: err instanceof Error ? err.message : String(err),
96
- });
97
- }
98
- }
99
- }
100
- publish("agent.deep.run.done", "deep-agent", "user", { text });
101
- return { text, messages };
102
- },
103
- };
104
- }