joonecli 0.1.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 (279) hide show
  1. package/AGENTS.md +56 -0
  2. package/Handover.md +115 -0
  3. package/LICENSE +201 -0
  4. package/PROGRESS.md +160 -0
  5. package/README.md +114 -0
  6. package/dist/__tests__/bootstrap.test.d.ts +1 -0
  7. package/dist/__tests__/bootstrap.test.js +76 -0
  8. package/dist/__tests__/bootstrap.test.js.map +1 -0
  9. package/dist/__tests__/config.test.d.ts +1 -0
  10. package/dist/__tests__/config.test.js +84 -0
  11. package/dist/__tests__/config.test.js.map +1 -0
  12. package/dist/__tests__/m55.test.d.ts +1 -0
  13. package/dist/__tests__/m55.test.js +160 -0
  14. package/dist/__tests__/m55.test.js.map +1 -0
  15. package/dist/__tests__/middleware.test.d.ts +1 -0
  16. package/dist/__tests__/middleware.test.js +169 -0
  17. package/dist/__tests__/middleware.test.js.map +1 -0
  18. package/dist/__tests__/modelFactory.test.d.ts +1 -0
  19. package/dist/__tests__/modelFactory.test.js +50 -0
  20. package/dist/__tests__/modelFactory.test.js.map +1 -0
  21. package/dist/__tests__/optimizations.test.d.ts +1 -0
  22. package/dist/__tests__/optimizations.test.js +136 -0
  23. package/dist/__tests__/optimizations.test.js.map +1 -0
  24. package/dist/__tests__/promptBuilder.test.d.ts +1 -0
  25. package/dist/__tests__/promptBuilder.test.js +108 -0
  26. package/dist/__tests__/promptBuilder.test.js.map +1 -0
  27. package/dist/__tests__/sandbox.test.d.ts +1 -0
  28. package/dist/__tests__/sandbox.test.js +78 -0
  29. package/dist/__tests__/sandbox.test.js.map +1 -0
  30. package/dist/__tests__/security.test.d.ts +1 -0
  31. package/dist/__tests__/security.test.js +86 -0
  32. package/dist/__tests__/security.test.js.map +1 -0
  33. package/dist/__tests__/streaming.test.d.ts +1 -0
  34. package/dist/__tests__/streaming.test.js +71 -0
  35. package/dist/__tests__/streaming.test.js.map +1 -0
  36. package/dist/__tests__/toolRouter.test.d.ts +1 -0
  37. package/dist/__tests__/toolRouter.test.js +37 -0
  38. package/dist/__tests__/toolRouter.test.js.map +1 -0
  39. package/dist/__tests__/tools.test.d.ts +1 -0
  40. package/dist/__tests__/tools.test.js +112 -0
  41. package/dist/__tests__/tools.test.js.map +1 -0
  42. package/dist/__tests__/tracing.test.d.ts +1 -0
  43. package/dist/__tests__/tracing.test.js +147 -0
  44. package/dist/__tests__/tracing.test.js.map +1 -0
  45. package/dist/cli/config.d.ts +49 -0
  46. package/dist/cli/config.js +86 -0
  47. package/dist/cli/config.js.map +1 -0
  48. package/dist/cli/index.d.ts +2 -0
  49. package/dist/cli/index.js +625 -0
  50. package/dist/cli/index.js.map +1 -0
  51. package/dist/cli/modelFactory.d.ts +9 -0
  52. package/dist/cli/modelFactory.js +154 -0
  53. package/dist/cli/modelFactory.js.map +1 -0
  54. package/dist/cli/providers.d.ts +18 -0
  55. package/dist/cli/providers.js +94 -0
  56. package/dist/cli/providers.js.map +1 -0
  57. package/dist/core/agentLoop.d.ts +43 -0
  58. package/dist/core/agentLoop.js +245 -0
  59. package/dist/core/agentLoop.js.map +1 -0
  60. package/dist/core/errors.d.ts +62 -0
  61. package/dist/core/errors.js +139 -0
  62. package/dist/core/errors.js.map +1 -0
  63. package/dist/core/promptBuilder.d.ts +49 -0
  64. package/dist/core/promptBuilder.js +84 -0
  65. package/dist/core/promptBuilder.js.map +1 -0
  66. package/dist/core/reasoningRouter.d.ts +62 -0
  67. package/dist/core/reasoningRouter.js +102 -0
  68. package/dist/core/reasoningRouter.js.map +1 -0
  69. package/dist/core/retry.d.ts +25 -0
  70. package/dist/core/retry.js +49 -0
  71. package/dist/core/retry.js.map +1 -0
  72. package/dist/core/sessionResumer.d.ts +17 -0
  73. package/dist/core/sessionResumer.js +78 -0
  74. package/dist/core/sessionResumer.js.map +1 -0
  75. package/dist/core/sessionStore.d.ts +45 -0
  76. package/dist/core/sessionStore.js +167 -0
  77. package/dist/core/sessionStore.js.map +1 -0
  78. package/dist/core/tokenCounter.d.ts +17 -0
  79. package/dist/core/tokenCounter.js +54 -0
  80. package/dist/core/tokenCounter.js.map +1 -0
  81. package/dist/evals/dataset.d.ts +4 -0
  82. package/dist/evals/dataset.js +61 -0
  83. package/dist/evals/dataset.js.map +1 -0
  84. package/dist/evals/evaluator.d.ts +21 -0
  85. package/dist/evals/evaluator.js +68 -0
  86. package/dist/evals/evaluator.js.map +1 -0
  87. package/dist/hitl/bridge.d.ts +65 -0
  88. package/dist/hitl/bridge.js +120 -0
  89. package/dist/hitl/bridge.js.map +1 -0
  90. package/dist/middleware/commandSanitizer.d.ts +18 -0
  91. package/dist/middleware/commandSanitizer.js +50 -0
  92. package/dist/middleware/commandSanitizer.js.map +1 -0
  93. package/dist/middleware/loopDetection.d.ts +28 -0
  94. package/dist/middleware/loopDetection.js +49 -0
  95. package/dist/middleware/loopDetection.js.map +1 -0
  96. package/dist/middleware/permission.d.ts +17 -0
  97. package/dist/middleware/permission.js +59 -0
  98. package/dist/middleware/permission.js.map +1 -0
  99. package/dist/middleware/pipeline.d.ts +31 -0
  100. package/dist/middleware/pipeline.js +62 -0
  101. package/dist/middleware/pipeline.js.map +1 -0
  102. package/dist/middleware/preCompletion.d.ts +29 -0
  103. package/dist/middleware/preCompletion.js +82 -0
  104. package/dist/middleware/preCompletion.js.map +1 -0
  105. package/dist/middleware/types.d.ts +40 -0
  106. package/dist/middleware/types.js +8 -0
  107. package/dist/middleware/types.js.map +1 -0
  108. package/dist/sandbox/bootstrap.d.ts +38 -0
  109. package/dist/sandbox/bootstrap.js +107 -0
  110. package/dist/sandbox/bootstrap.js.map +1 -0
  111. package/dist/sandbox/manager.d.ts +72 -0
  112. package/dist/sandbox/manager.js +180 -0
  113. package/dist/sandbox/manager.js.map +1 -0
  114. package/dist/sandbox/sync.d.ts +55 -0
  115. package/dist/sandbox/sync.js +135 -0
  116. package/dist/sandbox/sync.js.map +1 -0
  117. package/dist/skills/loader.d.ts +55 -0
  118. package/dist/skills/loader.js +132 -0
  119. package/dist/skills/loader.js.map +1 -0
  120. package/dist/skills/tools.d.ts +5 -0
  121. package/dist/skills/tools.js +78 -0
  122. package/dist/skills/tools.js.map +1 -0
  123. package/dist/skills/types.d.ts +13 -0
  124. package/dist/skills/types.js +2 -0
  125. package/dist/skills/types.js.map +1 -0
  126. package/dist/test_cache.d.ts +1 -0
  127. package/dist/test_cache.js +55 -0
  128. package/dist/test_cache.js.map +1 -0
  129. package/dist/test_google.js +93 -0
  130. package/dist/tools/askUser.d.ts +10 -0
  131. package/dist/tools/askUser.js +42 -0
  132. package/dist/tools/askUser.js.map +1 -0
  133. package/dist/tools/browser.d.ts +19 -0
  134. package/dist/tools/browser.js +111 -0
  135. package/dist/tools/browser.js.map +1 -0
  136. package/dist/tools/index.d.ts +27 -0
  137. package/dist/tools/index.js +184 -0
  138. package/dist/tools/index.js.map +1 -0
  139. package/dist/tools/registry.d.ts +31 -0
  140. package/dist/tools/registry.js +168 -0
  141. package/dist/tools/registry.js.map +1 -0
  142. package/dist/tools/router.d.ts +34 -0
  143. package/dist/tools/router.js +73 -0
  144. package/dist/tools/router.js.map +1 -0
  145. package/dist/tools/security.d.ts +28 -0
  146. package/dist/tools/security.js +183 -0
  147. package/dist/tools/security.js.map +1 -0
  148. package/dist/tools/webSearch.d.ts +6 -0
  149. package/dist/tools/webSearch.js +120 -0
  150. package/dist/tools/webSearch.js.map +1 -0
  151. package/dist/tracing/analyzer.d.ts +58 -0
  152. package/dist/tracing/analyzer.js +190 -0
  153. package/dist/tracing/analyzer.js.map +1 -0
  154. package/dist/tracing/langsmith.d.ts +38 -0
  155. package/dist/tracing/langsmith.js +50 -0
  156. package/dist/tracing/langsmith.js.map +1 -0
  157. package/dist/tracing/sessionTracer.d.ts +73 -0
  158. package/dist/tracing/sessionTracer.js +157 -0
  159. package/dist/tracing/sessionTracer.js.map +1 -0
  160. package/dist/tracing/types.d.ts +46 -0
  161. package/dist/tracing/types.js +5 -0
  162. package/dist/tracing/types.js.map +1 -0
  163. package/dist/ui/App.d.ts +24 -0
  164. package/dist/ui/App.js +172 -0
  165. package/dist/ui/App.js.map +1 -0
  166. package/dist/ui/components/HITLPrompt.d.ts +15 -0
  167. package/dist/ui/components/HITLPrompt.js +35 -0
  168. package/dist/ui/components/HITLPrompt.js.map +1 -0
  169. package/dist/ui/components/Header.d.ts +8 -0
  170. package/dist/ui/components/Header.js +6 -0
  171. package/dist/ui/components/Header.js.map +1 -0
  172. package/dist/ui/components/MessageBubble.d.ts +13 -0
  173. package/dist/ui/components/MessageBubble.js +17 -0
  174. package/dist/ui/components/MessageBubble.js.map +1 -0
  175. package/dist/ui/components/StatusBar.d.ts +21 -0
  176. package/dist/ui/components/StatusBar.js +34 -0
  177. package/dist/ui/components/StatusBar.js.map +1 -0
  178. package/dist/ui/components/StreamingText.d.ts +13 -0
  179. package/dist/ui/components/StreamingText.js +24 -0
  180. package/dist/ui/components/StreamingText.js.map +1 -0
  181. package/dist/ui/components/ToolCallPanel.d.ts +15 -0
  182. package/dist/ui/components/ToolCallPanel.js +18 -0
  183. package/dist/ui/components/ToolCallPanel.js.map +1 -0
  184. package/docs/01_insights_and_patterns.md +27 -0
  185. package/docs/02_edge_cases_and_mitigations.md +143 -0
  186. package/docs/03_initial_implementation_plan.md +66 -0
  187. package/docs/04_tech_stack_proposal.md +20 -0
  188. package/docs/05_prd.md +87 -0
  189. package/docs/06_user_stories.md +72 -0
  190. package/docs/07_system_architecture.md +138 -0
  191. package/docs/08_roadmap.md +200 -0
  192. package/e2b/Dockerfile +26 -0
  193. package/package.json +57 -0
  194. package/src/__tests__/bootstrap.test.ts +111 -0
  195. package/src/__tests__/config.test.ts +97 -0
  196. package/src/__tests__/m55.test.ts +238 -0
  197. package/src/__tests__/middleware.test.ts +219 -0
  198. package/src/__tests__/modelFactory.test.ts +63 -0
  199. package/src/__tests__/optimizations.test.ts +201 -0
  200. package/src/__tests__/promptBuilder.test.ts +141 -0
  201. package/src/__tests__/sandbox.test.ts +102 -0
  202. package/src/__tests__/security.test.ts +122 -0
  203. package/src/__tests__/streaming.test.ts +82 -0
  204. package/src/__tests__/toolRouter.test.ts +52 -0
  205. package/src/__tests__/tools.test.ts +146 -0
  206. package/src/__tests__/tracing.test.ts +196 -0
  207. package/src/agents/agentRegistry.ts +69 -0
  208. package/src/agents/agentSpec.ts +67 -0
  209. package/src/agents/builtinAgents.ts +142 -0
  210. package/src/cli/config.ts +124 -0
  211. package/src/cli/index.ts +730 -0
  212. package/src/cli/modelFactory.ts +174 -0
  213. package/src/cli/providers.ts +107 -0
  214. package/src/commands/builtinCommands.ts +293 -0
  215. package/src/commands/commandRegistry.ts +194 -0
  216. package/src/core/agentLoop.d.ts.map +1 -0
  217. package/src/core/agentLoop.ts +312 -0
  218. package/src/core/autoSave.ts +95 -0
  219. package/src/core/compactor.ts +252 -0
  220. package/src/core/contextGuard.ts +129 -0
  221. package/src/core/errors.ts +202 -0
  222. package/src/core/promptBuilder.d.ts.map +1 -0
  223. package/src/core/promptBuilder.ts +139 -0
  224. package/src/core/reasoningRouter.ts +121 -0
  225. package/src/core/retry.ts +75 -0
  226. package/src/core/sessionResumer.ts +90 -0
  227. package/src/core/sessionStore.ts +215 -0
  228. package/src/core/subAgent.ts +339 -0
  229. package/src/core/tokenCounter.ts +64 -0
  230. package/src/evals/dataset.ts +67 -0
  231. package/src/evals/evaluator.ts +81 -0
  232. package/src/hitl/bridge.ts +160 -0
  233. package/src/middleware/commandSanitizer.ts +60 -0
  234. package/src/middleware/loopDetection.ts +63 -0
  235. package/src/middleware/permission.ts +72 -0
  236. package/src/middleware/pipeline.ts +75 -0
  237. package/src/middleware/preCompletion.ts +94 -0
  238. package/src/middleware/types.ts +45 -0
  239. package/src/sandbox/bootstrap.ts +121 -0
  240. package/src/sandbox/manager.ts +239 -0
  241. package/src/sandbox/sync.ts +157 -0
  242. package/src/skills/loader.ts +143 -0
  243. package/src/skills/tools.ts +99 -0
  244. package/src/skills/types.ts +13 -0
  245. package/src/test_cache.ts +72 -0
  246. package/src/test_google.js +40 -0
  247. package/src/test_google.ts +40 -0
  248. package/src/tools/askUser.ts +47 -0
  249. package/src/tools/browser.ts +137 -0
  250. package/src/tools/index.d.ts.map +1 -0
  251. package/src/tools/index.ts +237 -0
  252. package/src/tools/registry.ts +198 -0
  253. package/src/tools/router.ts +78 -0
  254. package/src/tools/security.ts +220 -0
  255. package/src/tools/spawnAgent.ts +158 -0
  256. package/src/tools/webSearch.ts +142 -0
  257. package/src/tracing/analyzer.ts +265 -0
  258. package/src/tracing/langsmith.ts +63 -0
  259. package/src/tracing/sessionTracer.ts +202 -0
  260. package/src/tracing/types.ts +49 -0
  261. package/src/types/valyu.d.ts +37 -0
  262. package/src/ui/App.tsx +404 -0
  263. package/src/ui/components/HITLPrompt.tsx +119 -0
  264. package/src/ui/components/Header.tsx +51 -0
  265. package/src/ui/components/MessageBubble.tsx +46 -0
  266. package/src/ui/components/StatusBar.tsx +138 -0
  267. package/src/ui/components/StreamingText.tsx +48 -0
  268. package/src/ui/components/ToolCallPanel.tsx +80 -0
  269. package/tests/commands/commands.test.ts +356 -0
  270. package/tests/core/compactor.test.ts +217 -0
  271. package/tests/core/retryAndErrors.test.ts +164 -0
  272. package/tests/core/sessionResumer.test.ts +95 -0
  273. package/tests/core/sessionStore.test.ts +84 -0
  274. package/tests/core/stability.test.ts +165 -0
  275. package/tests/core/subAgent.test.ts +238 -0
  276. package/tests/hitl/hitlBridge.test.ts +115 -0
  277. package/tsconfig.json +16 -0
  278. package/vitest.config.ts +10 -0
  279. package/vitest.out +48 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { BaseChatModel } from "@langchain/core/language_models/chat_models";
2
+ import { JooneConfig } from "./config.js";
3
+ /**
4
+ * Model Factory
5
+ *
6
+ * Creates a LangChain BaseChatModel based on the JooneConfig.
7
+ * Uses dynamic imports so only the selected provider's package is loaded.
8
+ */
9
+ export declare function createModel(config: JooneConfig): Promise<BaseChatModel>;
@@ -0,0 +1,154 @@
1
+ import { pathToFileURL } from "node:url";
2
+ import * as path from "node:path";
3
+ import { getProviderDir, PROVIDER_PACKAGE_MAP } from "./providers.js";
4
+ /**
5
+ * Providers that do NOT require an API key (e.g. local models).
6
+ */
7
+ const NO_KEY_PROVIDERS = new Set(["ollama"]);
8
+ import { createRequire } from "node:module";
9
+ /**
10
+ * Attempts to dynamically import a provider package.
11
+ * First tries the user-local ~/.joone/providers/node_modules directory.
12
+ * If that fails, falls back to a standard require/import for bundled setups.
13
+ */
14
+ async function loadProviderPackage(provider) {
15
+ const packageName = PROVIDER_PACKAGE_MAP[provider];
16
+ if (!packageName) {
17
+ throw new Error(`Unknown package name for provider: ${provider}`);
18
+ }
19
+ // 1. Try user-local plugin directory
20
+ const localPluginPath = path.join(getProviderDir(), "node_modules", packageName);
21
+ try {
22
+ // Node.js ESM cannot import absolute directories (ERR_UNSUPPORTED_DIR_IMPORT).
23
+ // We must use createRequire to resolve the actual package.json "main" or "exports" entry point.
24
+ const require = createRequire(import.meta.url);
25
+ const resolvedPath = require.resolve(localPluginPath);
26
+ return await import(pathToFileURL(resolvedPath).href);
27
+ }
28
+ catch (err) {
29
+ // Ignore MODULE_NOT_FOUND or similar errors and fallback
30
+ if (err.code !== "ERR_MODULE_NOT_FOUND" && !err.message.includes("Cannot find module")) {
31
+ // console.debug(`Failed to load from plugin dir:`, err.message);
32
+ }
33
+ }
34
+ // 2. Fallback to standard resolution (for npx, bundled versions, etc)
35
+ try {
36
+ return await import(packageName);
37
+ }
38
+ catch (err) {
39
+ throw new Error(`Provider "${provider}" requires the ${packageName} package.\nRun: joone provider add ${provider}`);
40
+ }
41
+ }
42
+ /**
43
+ * Model Factory
44
+ *
45
+ * Creates a LangChain BaseChatModel based on the JooneConfig.
46
+ * Uses dynamic imports so only the selected provider's package is loaded.
47
+ */
48
+ export async function createModel(config) {
49
+ const { provider, model, apiKey, maxTokens, temperature } = config;
50
+ // API key validation for cloud providers
51
+ if (!NO_KEY_PROVIDERS.has(provider) && !apiKey) {
52
+ throw new Error(`API key is required for provider "${provider}". Run: joone config`);
53
+ }
54
+ try {
55
+ switch (provider) {
56
+ case "anthropic": {
57
+ const pkg = await loadProviderPackage(provider);
58
+ const ChatAnthropic = pkg.ChatAnthropic || pkg.default?.ChatAnthropic;
59
+ return new ChatAnthropic({
60
+ modelName: model,
61
+ anthropicApiKey: apiKey,
62
+ maxTokens,
63
+ temperature,
64
+ });
65
+ }
66
+ case "openai": {
67
+ const pkg = await loadProviderPackage(provider);
68
+ const ChatOpenAI = pkg.ChatOpenAI || pkg.default?.ChatOpenAI;
69
+ return new ChatOpenAI({
70
+ modelName: model,
71
+ openAIApiKey: apiKey,
72
+ maxTokens,
73
+ temperature,
74
+ });
75
+ }
76
+ case "google": {
77
+ const pkg = await loadProviderPackage(provider);
78
+ // Specifically for Google, LangChain frequently uses ChatGoogleGenerativeAI
79
+ const ChatGoogle = pkg.ChatGoogleGenerativeAI || pkg.default?.ChatGoogleGenerativeAI || pkg.ChatGoogleGenAI || pkg.default?.ChatGoogleGenAI;
80
+ if (!apiKey) {
81
+ throw new Error("API key is required for provider \"google\". Run: joone config");
82
+ }
83
+ return new ChatGoogle({
84
+ model: model,
85
+ apiKey: apiKey,
86
+ maxOutputTokens: maxTokens,
87
+ temperature,
88
+ });
89
+ }
90
+ case "mistral": {
91
+ const { ChatMistralAI } = await loadProviderPackage(provider);
92
+ return new ChatMistralAI({
93
+ modelName: model,
94
+ apiKey: apiKey,
95
+ maxTokens,
96
+ temperature,
97
+ });
98
+ }
99
+ case "groq": {
100
+ const { ChatGroq } = await loadProviderPackage(provider);
101
+ return new ChatGroq({
102
+ modelName: model,
103
+ apiKey: apiKey,
104
+ maxTokens,
105
+ temperature,
106
+ });
107
+ }
108
+ case "deepseek": {
109
+ const { ChatDeepSeek } = await loadProviderPackage(provider);
110
+ return new ChatDeepSeek({
111
+ modelName: model,
112
+ apiKey: apiKey,
113
+ maxTokens,
114
+ temperature,
115
+ });
116
+ }
117
+ case "fireworks": {
118
+ const { ChatFireworks } = await loadProviderPackage(provider);
119
+ return new ChatFireworks({
120
+ modelName: model,
121
+ fireworksApiKey: apiKey,
122
+ maxTokens,
123
+ temperature,
124
+ });
125
+ }
126
+ case "together": {
127
+ const { ChatTogetherAI } = await loadProviderPackage(provider);
128
+ return new ChatTogetherAI({
129
+ modelName: model,
130
+ togetherAIApiKey: apiKey,
131
+ maxTokens,
132
+ temperature,
133
+ });
134
+ }
135
+ case "ollama": {
136
+ const { ChatOllama } = await loadProviderPackage(provider);
137
+ return new ChatOllama({
138
+ model: model,
139
+ maxTokens,
140
+ temperature,
141
+ });
142
+ }
143
+ default:
144
+ throw new Error(`Unsupported provider: "${provider}". Supported providers: anthropic, openai, google, mistral, groq, deepseek, fireworks, together, ollama.`);
145
+ }
146
+ }
147
+ catch (e) {
148
+ // If LangChain itself throws an API key error (sometimes they do runtime checks)
149
+ if (e instanceof Error && e.message.includes("API key"))
150
+ throw e;
151
+ throw e; // Rethrow the loadProviderPackage message or other unexpected errors
152
+ }
153
+ }
154
+ //# sourceMappingURL=modelFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelFactory.js","sourceRoot":"","sources":["../../src/cli/modelFactory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Returns the absolute path to the user-local providers directory.
3
+ */
4
+ export declare function getProviderDir(): string;
5
+ /**
6
+ * Maps the internal Joone provider name to the official LangChain NPM package name.
7
+ */
8
+ export declare const PROVIDER_PACKAGE_MAP: Record<string, string>;
9
+ /**
10
+ * Installs the NPM package for the given provider into the user-local `~/.joone/providers` directory.
11
+ * @param provider The internal Joone provider name (e.g., "google")
12
+ */
13
+ export declare function installProvider(provider: string): Promise<void>;
14
+ /**
15
+ * Uninstalls the NPM package for the given provider from the user-local `~/.joone/providers` directory.
16
+ * @param provider The internal Joone provider name (e.g., "google")
17
+ */
18
+ export declare function uninstallProvider(provider: string): Promise<void>;
@@ -0,0 +1,94 @@
1
+ import spawn from "cross-spawn";
2
+ import * as path from "node:path";
3
+ import * as os from "node:os";
4
+ import * as fs from "node:fs";
5
+ /**
6
+ * Returns the absolute path to the user-local providers directory.
7
+ */
8
+ export function getProviderDir() {
9
+ return path.join(os.homedir(), ".joone", "providers");
10
+ }
11
+ /**
12
+ * Maps the internal Joone provider name to the official LangChain NPM package name.
13
+ */
14
+ export const PROVIDER_PACKAGE_MAP = {
15
+ anthropic: "@langchain/anthropic",
16
+ openai: "@langchain/openai",
17
+ google: "@langchain/google-genai",
18
+ mistral: "@langchain/mistralai",
19
+ groq: "@langchain/groq",
20
+ deepseek: "@langchain/deepseek",
21
+ fireworks: "@langchain/community",
22
+ together: "@langchain/community",
23
+ ollama: "@langchain/ollama"
24
+ };
25
+ /**
26
+ * Installs the NPM package for the given provider into the user-local `~/.joone/providers` directory.
27
+ * @param provider The internal Joone provider name (e.g., "google")
28
+ */
29
+ export async function installProvider(provider) {
30
+ const packageName = PROVIDER_PACKAGE_MAP[provider];
31
+ if (!packageName) {
32
+ throw new Error(`Unknown provider: "${provider}"`);
33
+ }
34
+ const providerDir = getProviderDir();
35
+ // Ensure the directory exists
36
+ if (!fs.existsSync(providerDir)) {
37
+ fs.mkdirSync(providerDir, { recursive: true });
38
+ }
39
+ return new Promise((resolve, reject) => {
40
+ // We use --no-save to avoid creating a package.json and --no-package-lock to avoid lockfiles
41
+ // in this isolated directory, keeping it clean and fast.
42
+ const npmCmd = process.platform === "win32" ? "npm.cmd" : "npm";
43
+ const args = ["install", packageName, "--prefix", providerDir, "--no-save", "--no-package-lock"];
44
+ // Using cross-spawn automatically handles Windows command resolution securely without shell:true
45
+ const child = spawn(npmCmd, args, {
46
+ stdio: "ignore", // Suppress NPM's verbose output during install
47
+ });
48
+ child.on("close", (code) => {
49
+ if (code === 0) {
50
+ resolve();
51
+ }
52
+ else {
53
+ reject(new Error(`Failed to install ${packageName} (npm install exited with code ${code})`));
54
+ }
55
+ });
56
+ child.on("error", (err) => {
57
+ reject(new Error(`Failed to spawn npm install: ${err.message}`));
58
+ });
59
+ });
60
+ }
61
+ /**
62
+ * Uninstalls the NPM package for the given provider from the user-local `~/.joone/providers` directory.
63
+ * @param provider The internal Joone provider name (e.g., "google")
64
+ */
65
+ export async function uninstallProvider(provider) {
66
+ const packageName = PROVIDER_PACKAGE_MAP[provider];
67
+ if (!packageName) {
68
+ throw new Error(`Unknown provider: "${provider}"`);
69
+ }
70
+ const providerDir = getProviderDir();
71
+ // If the directory doesn't exist, it's already uninstalled implicitly
72
+ if (!fs.existsSync(providerDir)) {
73
+ return;
74
+ }
75
+ return new Promise((resolve, reject) => {
76
+ const npmCmd = process.platform === "win32" ? "npm.cmd" : "npm";
77
+ const args = ["uninstall", packageName, "--prefix", providerDir, "--no-save", "--no-package-lock"];
78
+ const child = spawn(npmCmd, args, {
79
+ stdio: "ignore",
80
+ });
81
+ child.on("close", (code) => {
82
+ if (code === 0) {
83
+ resolve();
84
+ }
85
+ else {
86
+ reject(new Error(`Failed to uninstall ${packageName} (npm uninstall exited with code ${code})`));
87
+ }
88
+ });
89
+ child.on("error", (err) => {
90
+ reject(new Error(`Failed to spawn npm uninstall: ${err.message}`));
91
+ });
92
+ });
93
+ }
94
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/cli/providers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { BaseChatModel } from "@langchain/core/language_models/chat_models";
2
+ import { AIMessage, ToolMessage, AIMessageChunk, HumanMessage } from "@langchain/core/messages";
3
+ import { Runnable } from "@langchain/core/runnables";
4
+ import { ContextState } from "./promptBuilder.js";
5
+ import { DynamicToolInterface } from "../tools/index.js";
6
+ import { MiddlewarePipeline } from "../middleware/pipeline.js";
7
+ import { SessionTracer } from "../tracing/sessionTracer.js";
8
+ export interface StreamStepOptions {
9
+ /** Called for each text token received from the stream. */
10
+ onToken?: (token: string) => void;
11
+ }
12
+ export declare class ExecutionHarness {
13
+ private llm;
14
+ private promptBuilder;
15
+ private availableTools;
16
+ private pipeline;
17
+ tracer: SessionTracer;
18
+ private sessionStore;
19
+ sessionId: string;
20
+ private provider;
21
+ private model;
22
+ /**
23
+ * Initializes the harness with a pre-configured, tool-bound LLM instance.
24
+ * This allows swapping between Anthropic Claude, OpenAI GPT-4, Google Gemini, etc.
25
+ */
26
+ constructor(boundLlm: Runnable<any, AIMessageChunk> | BaseChatModel, tools?: DynamicToolInterface[], pipeline?: MiddlewarePipeline, tracer?: SessionTracer, provider?: string, model?: string, sessionId?: string);
27
+ /**
28
+ * The main execution engine (non-streaming).
29
+ * Takes the context state, builds the cache-optimized prompt, and queries the LLM.
30
+ */
31
+ step(state: ContextState): Promise<AIMessage>;
32
+ /**
33
+ * Streaming execution engine.
34
+ * Streams text tokens via the onToken callback and buffers tool call chunks
35
+ * until the full call is received. Returns a complete AIMessage for history.
36
+ */
37
+ streamStep(state: ContextState, options: StreamStepOptions): Promise<AIMessage>;
38
+ /**
39
+ * Executes tool calls from an AI response, routing through the middleware pipeline.
40
+ * Each call passes through all registered before-hooks, then the tool, then after-hooks.
41
+ */
42
+ executeToolCalls(aiMessage: AIMessage, state: ContextState): Promise<(ToolMessage | HumanMessage)[]>;
43
+ }
@@ -0,0 +1,245 @@
1
+ import { AIMessage, ToolMessage, HumanMessage } from "@langchain/core/messages";
2
+ import { CacheOptimizedPromptBuilder } from "./promptBuilder.js";
3
+ import { MiddlewarePipeline } from "../middleware/pipeline.js";
4
+ import { SessionTracer } from "../tracing/sessionTracer.js";
5
+ import { countMessageTokens } from "./tokenCounter.js";
6
+ import { SessionStore } from "./sessionStore.js";
7
+ import { retryWithBackoff } from "./retry.js";
8
+ import { wrapLLMError, JooneError, ToolExecutionError } from "./errors.js";
9
+ import { SystemMessage } from "@langchain/core/messages";
10
+ export class ExecutionHarness {
11
+ llm;
12
+ promptBuilder;
13
+ availableTools;
14
+ pipeline;
15
+ tracer;
16
+ sessionStore;
17
+ sessionId;
18
+ provider;
19
+ model;
20
+ /**
21
+ * Initializes the harness with a pre-configured, tool-bound LLM instance.
22
+ * This allows swapping between Anthropic Claude, OpenAI GPT-4, Google Gemini, etc.
23
+ */
24
+ constructor(boundLlm, tools = [], pipeline, tracer, provider = "unknown", model = "unknown", sessionId) {
25
+ this.llm = boundLlm;
26
+ this.promptBuilder = new CacheOptimizedPromptBuilder();
27
+ this.availableTools = tools;
28
+ this.pipeline = pipeline ?? new MiddlewarePipeline();
29
+ this.tracer = tracer ?? new SessionTracer();
30
+ this.sessionStore = new SessionStore();
31
+ this.sessionId = sessionId ?? this.tracer.getSessionId();
32
+ this.provider = provider;
33
+ this.model = model;
34
+ }
35
+ /**
36
+ * The main execution engine (non-streaming).
37
+ * Takes the context state, builds the cache-optimized prompt, and queries the LLM.
38
+ */
39
+ async step(state) {
40
+ const start = Date.now();
41
+ const messages = this.promptBuilder.buildPrompt(state);
42
+ try {
43
+ const response = await retryWithBackoff(() => this.llm.invoke(messages).catch((e) => { throw wrapLLMError(e, this.provider); }), {
44
+ onRetry: (attempt, error, delay) => {
45
+ this.tracer.recordError({ message: `LLM retry #${attempt}: ${error.message} (waiting ${delay}ms)` });
46
+ },
47
+ });
48
+ const promptTokens = countMessageTokens(messages);
49
+ const completionTokens = countMessageTokens([response]);
50
+ this.tracer.recordLLMCall({
51
+ promptTokens,
52
+ completionTokens,
53
+ cached: false,
54
+ duration: Date.now() - start
55
+ });
56
+ await this.sessionStore.saveSession(this.sessionId, state, this.provider, this.model);
57
+ return response;
58
+ }
59
+ catch (error) {
60
+ // Self-recovery: inject the error hint and let the agent adapt
61
+ if (error instanceof JooneError && error.retryable) {
62
+ this.tracer.recordError({ message: `LLM retries exhausted: ${error.message}` });
63
+ state.conversationHistory.push(new SystemMessage(error.toRecoveryHint()));
64
+ await this.sessionStore.saveSession(this.sessionId, state, this.provider, this.model);
65
+ // Return a synthetic AI message so the turn doesn't crash
66
+ return new AIMessage(error.toRecoveryHint());
67
+ }
68
+ throw error; // Fatal (auth, config) — propagate to TUI
69
+ }
70
+ }
71
+ /**
72
+ * Streaming execution engine.
73
+ * Streams text tokens via the onToken callback and buffers tool call chunks
74
+ * until the full call is received. Returns a complete AIMessage for history.
75
+ */
76
+ async streamStep(state, options) {
77
+ const start = Date.now();
78
+ const messages = this.promptBuilder.buildPrompt(state);
79
+ try {
80
+ const result = await retryWithBackoff(async () => {
81
+ let fullContent = "";
82
+ const toolCallBuffers = new Map();
83
+ let stream;
84
+ try {
85
+ stream = await this.llm.stream(messages);
86
+ }
87
+ catch (e) {
88
+ throw wrapLLMError(e, this.provider);
89
+ }
90
+ for await (const chunk of stream) {
91
+ if (chunk.content && typeof chunk.content === "string") {
92
+ fullContent += chunk.content;
93
+ if (options.onToken) {
94
+ options.onToken(chunk.content);
95
+ }
96
+ }
97
+ if (chunk.tool_call_chunks && chunk.tool_call_chunks.length > 0) {
98
+ for (const tc of chunk.tool_call_chunks) {
99
+ const idx = tc.index ?? 0;
100
+ if (!toolCallBuffers.has(idx)) {
101
+ toolCallBuffers.set(idx, {
102
+ id: tc.id || "",
103
+ name: tc.name || "",
104
+ argsJson: "",
105
+ });
106
+ }
107
+ const buf = toolCallBuffers.get(idx);
108
+ if (tc.id)
109
+ buf.id = tc.id;
110
+ if (tc.name)
111
+ buf.name = tc.name;
112
+ if (tc.args)
113
+ buf.argsJson += tc.args;
114
+ }
115
+ }
116
+ }
117
+ const toolCalls = Array.from(toolCallBuffers.values()).map((buf) => ({
118
+ id: buf.id,
119
+ name: buf.name,
120
+ args: (() => {
121
+ try {
122
+ return JSON.parse(buf.argsJson || "{}");
123
+ }
124
+ catch {
125
+ return { _parseError: true, rawArgs: buf.argsJson };
126
+ }
127
+ })(),
128
+ type: "tool_call",
129
+ }));
130
+ return new AIMessage({
131
+ content: fullContent,
132
+ tool_calls: toolCalls.length > 0 ? toolCalls : undefined,
133
+ });
134
+ }, {
135
+ onRetry: (attempt, error, delay) => {
136
+ this.tracer.recordError({ message: `LLM stream retry #${attempt}: ${error.message} (waiting ${delay}ms)` });
137
+ },
138
+ });
139
+ const promptTokens = countMessageTokens(messages);
140
+ const completionTokens = countMessageTokens([result]);
141
+ this.tracer.recordLLMCall({
142
+ promptTokens,
143
+ completionTokens,
144
+ cached: false,
145
+ duration: Date.now() - start
146
+ });
147
+ await this.sessionStore.saveSession(this.sessionId, state, this.provider, this.model);
148
+ return result;
149
+ }
150
+ catch (error) {
151
+ // Self-recovery for streaming
152
+ if (error instanceof JooneError && error.retryable) {
153
+ this.tracer.recordError({ message: `LLM stream retries exhausted: ${error.message}` });
154
+ state.conversationHistory.push(new SystemMessage(error.toRecoveryHint()));
155
+ await this.sessionStore.saveSession(this.sessionId, state, this.provider, this.model);
156
+ return new AIMessage(error.toRecoveryHint());
157
+ }
158
+ throw error;
159
+ }
160
+ }
161
+ /**
162
+ * Executes tool calls from an AI response, routing through the middleware pipeline.
163
+ * Each call passes through all registered before-hooks, then the tool, then after-hooks.
164
+ */
165
+ async executeToolCalls(aiMessage, state) {
166
+ const results = [];
167
+ if (!aiMessage.tool_calls || aiMessage.tool_calls.length === 0) {
168
+ return results;
169
+ }
170
+ for (const call of aiMessage.tool_calls) {
171
+ // Soft-Fail Edge Case: If the LLM omits the tool_call_id, do not execute the tool.
172
+ // Return a HumanMessage prompting correction instead of a malformed ToolMessage.
173
+ if (!call.id) {
174
+ this.tracer.recordError({ message: `Malformed tool call: Missing ID for ${call.name}`, tool: call.name });
175
+ results.push(new HumanMessage(`You attempted to call the tool '${call.name}', but you did not provide a tool_call_id. ` +
176
+ `This is a malformed request. Please try again and ensure you provide a valid ID.`));
177
+ continue;
178
+ }
179
+ const safeCallId = call.id;
180
+ // Handle malformed args from streaming parse errors
181
+ if (call.args && call.args._parseError) {
182
+ this.tracer.recordError({ message: `Failed to parse tool arguments`, tool: call.name });
183
+ results.push(new ToolMessage({
184
+ content: `Error: Failed to parse tool arguments. The JSON provided was malformed:\n${call.args.rawArgs}\nPlease correct the JSON format and try again.`,
185
+ tool_call_id: safeCallId
186
+ }));
187
+ continue;
188
+ }
189
+ const tool = this.availableTools.find(t => t.name === call.name);
190
+ if (!tool) {
191
+ this.tracer.recordError({ message: `Tool ${call.name} not found`, tool: call.name });
192
+ results.push(new ToolMessage({
193
+ content: `Error: Tool ${call.name} not found.`,
194
+ tool_call_id: safeCallId
195
+ }));
196
+ continue;
197
+ }
198
+ const ctx = {
199
+ toolName: call.name,
200
+ args: call.args,
201
+ callId: safeCallId,
202
+ };
203
+ const start = Date.now();
204
+ try {
205
+ const output = await this.pipeline.run(ctx, async (c) => tool.execute(c.args));
206
+ this.tracer.recordToolCall({
207
+ name: call.name,
208
+ args: call.args,
209
+ result: typeof output === "string" ? output : JSON.stringify(output).substring(0, 100),
210
+ duration: Date.now() - start,
211
+ success: true
212
+ });
213
+ const stringifiedOutput = typeof output === "string" ? output : JSON.stringify(output);
214
+ results.push(new ToolMessage({
215
+ content: stringifiedOutput,
216
+ tool_call_id: safeCallId
217
+ }));
218
+ }
219
+ catch (error) {
220
+ const toolError = new ToolExecutionError(error.message, {
221
+ toolName: call.name,
222
+ args: call.args,
223
+ retryable: false,
224
+ cause: error,
225
+ });
226
+ this.tracer.recordToolCall({
227
+ name: call.name,
228
+ args: call.args,
229
+ duration: Date.now() - start,
230
+ success: false
231
+ });
232
+ this.tracer.recordError({ message: toolError.message, tool: call.name });
233
+ results.push(new ToolMessage({
234
+ content: toolError.toRecoveryHint(),
235
+ tool_call_id: safeCallId
236
+ }));
237
+ }
238
+ }
239
+ // Add the tool results to the state immediately before saving
240
+ state.conversationHistory.push(...results);
241
+ await this.sessionStore.saveSession(this.sessionId, state, this.provider, this.model);
242
+ return results;
243
+ }
244
+ }
245
+ //# sourceMappingURL=agentLoop.js.map