@marifold/core 0.60.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 (310) hide show
  1. package/LICENSE +674 -0
  2. package/dist/agent/AgentEvents.d.ts +106 -0
  3. package/dist/agent/AgentEvents.d.ts.map +1 -0
  4. package/dist/agent/AgentEvents.js +3 -0
  5. package/dist/agent/AgentEvents.js.map +1 -0
  6. package/dist/agent/AgentHistory.d.ts +27 -0
  7. package/dist/agent/AgentHistory.d.ts.map +1 -0
  8. package/dist/agent/AgentHistory.js +42 -0
  9. package/dist/agent/AgentHistory.js.map +1 -0
  10. package/dist/agent/AgentRunner.d.ts +149 -0
  11. package/dist/agent/AgentRunner.d.ts.map +1 -0
  12. package/dist/agent/AgentRunner.js +727 -0
  13. package/dist/agent/AgentRunner.js.map +1 -0
  14. package/dist/agent/ApprovalPolicy.d.ts +71 -0
  15. package/dist/agent/ApprovalPolicy.d.ts.map +1 -0
  16. package/dist/agent/ApprovalPolicy.js +29 -0
  17. package/dist/agent/ApprovalPolicy.js.map +1 -0
  18. package/dist/agent/ControlBlockTools.d.ts +9 -0
  19. package/dist/agent/ControlBlockTools.d.ts.map +1 -0
  20. package/dist/agent/ControlBlockTools.js +49 -0
  21. package/dist/agent/ControlBlockTools.js.map +1 -0
  22. package/dist/agent/RunWorkspace.d.ts +92 -0
  23. package/dist/agent/RunWorkspace.d.ts.map +1 -0
  24. package/dist/agent/RunWorkspace.js +328 -0
  25. package/dist/agent/RunWorkspace.js.map +1 -0
  26. package/dist/agent/ScopedProcess.d.ts +35 -0
  27. package/dist/agent/ScopedProcess.d.ts.map +1 -0
  28. package/dist/agent/ScopedProcess.js +280 -0
  29. package/dist/agent/ScopedProcess.js.map +1 -0
  30. package/dist/agent/ToolRegistry.d.ts +80 -0
  31. package/dist/agent/ToolRegistry.d.ts.map +1 -0
  32. package/dist/agent/ToolRegistry.js +45 -0
  33. package/dist/agent/ToolRegistry.js.map +1 -0
  34. package/dist/agent/UserInput.d.ts +59 -0
  35. package/dist/agent/UserInput.d.ts.map +1 -0
  36. package/dist/agent/UserInput.js +203 -0
  37. package/dist/agent/UserInput.js.map +1 -0
  38. package/dist/agent/tools/AskUserTool.d.ts +71 -0
  39. package/dist/agent/tools/AskUserTool.d.ts.map +1 -0
  40. package/dist/agent/tools/AskUserTool.js +70 -0
  41. package/dist/agent/tools/AskUserTool.js.map +1 -0
  42. package/dist/agent/tools/DelegateTool.d.ts +49 -0
  43. package/dist/agent/tools/DelegateTool.d.ts.map +1 -0
  44. package/dist/agent/tools/DelegateTool.js +62 -0
  45. package/dist/agent/tools/DelegateTool.js.map +1 -0
  46. package/dist/agent/tools/InspectAttachmentTool.d.ts +25 -0
  47. package/dist/agent/tools/InspectAttachmentTool.d.ts.map +1 -0
  48. package/dist/agent/tools/InspectAttachmentTool.js +129 -0
  49. package/dist/agent/tools/InspectAttachmentTool.js.map +1 -0
  50. package/dist/agent/tools/PythonPackageTool.d.ts +26 -0
  51. package/dist/agent/tools/PythonPackageTool.d.ts.map +1 -0
  52. package/dist/agent/tools/PythonPackageTool.js +105 -0
  53. package/dist/agent/tools/PythonPackageTool.js.map +1 -0
  54. package/dist/agent/tools/ReadFileTool.d.ts +24 -0
  55. package/dist/agent/tools/ReadFileTool.d.ts.map +1 -0
  56. package/dist/agent/tools/ReadFileTool.js +112 -0
  57. package/dist/agent/tools/ReadFileTool.js.map +1 -0
  58. package/dist/agent/tools/ShellExecTool.d.ts +23 -0
  59. package/dist/agent/tools/ShellExecTool.d.ts.map +1 -0
  60. package/dist/agent/tools/ShellExecTool.js +75 -0
  61. package/dist/agent/tools/ShellExecTool.js.map +1 -0
  62. package/dist/agent/tools/WebSearchTool.d.ts +26 -0
  63. package/dist/agent/tools/WebSearchTool.d.ts.map +1 -0
  64. package/dist/agent/tools/WebSearchTool.js +52 -0
  65. package/dist/agent/tools/WebSearchTool.js.map +1 -0
  66. package/dist/agent/tools/WriteFileTool.d.ts +30 -0
  67. package/dist/agent/tools/WriteFileTool.d.ts.map +1 -0
  68. package/dist/agent/tools/WriteFileTool.js +155 -0
  69. package/dist/agent/tools/WriteFileTool.js.map +1 -0
  70. package/dist/app/AppActionResolver.d.ts +15 -0
  71. package/dist/app/AppActionResolver.d.ts.map +1 -0
  72. package/dist/app/AppActionResolver.js +98 -0
  73. package/dist/app/AppActionResolver.js.map +1 -0
  74. package/dist/app/AppSchema.d.ts +83 -0
  75. package/dist/app/AppSchema.d.ts.map +1 -0
  76. package/dist/app/AppSchema.js +17 -0
  77. package/dist/app/AppSchema.js.map +1 -0
  78. package/dist/app/AppStore.d.ts +14 -0
  79. package/dist/app/AppStore.d.ts.map +1 -0
  80. package/dist/app/AppStore.js +146 -0
  81. package/dist/app/AppStore.js.map +1 -0
  82. package/dist/app/AppValidator.d.ts +10 -0
  83. package/dist/app/AppValidator.d.ts.map +1 -0
  84. package/dist/app/AppValidator.js +503 -0
  85. package/dist/app/AppValidator.js.map +1 -0
  86. package/dist/app/SkillAppCompiler.d.ts +5 -0
  87. package/dist/app/SkillAppCompiler.d.ts.map +1 -0
  88. package/dist/app/SkillAppCompiler.js +632 -0
  89. package/dist/app/SkillAppCompiler.js.map +1 -0
  90. package/dist/app/SkillAppDsl.d.ts +93 -0
  91. package/dist/app/SkillAppDsl.d.ts.map +1 -0
  92. package/dist/app/SkillAppDsl.js +72 -0
  93. package/dist/app/SkillAppDsl.js.map +1 -0
  94. package/dist/app/SkillAppInstanceRegistry.d.ts +25 -0
  95. package/dist/app/SkillAppInstanceRegistry.d.ts.map +1 -0
  96. package/dist/app/SkillAppInstanceRegistry.js +218 -0
  97. package/dist/app/SkillAppInstanceRegistry.js.map +1 -0
  98. package/dist/app/SkillAppResolver.d.ts +12 -0
  99. package/dist/app/SkillAppResolver.d.ts.map +1 -0
  100. package/dist/app/SkillAppResolver.js +89 -0
  101. package/dist/app/SkillAppResolver.js.map +1 -0
  102. package/dist/app/SkillAppSchema.d.ts +116 -0
  103. package/dist/app/SkillAppSchema.d.ts.map +1 -0
  104. package/dist/app/SkillAppSchema.js +5 -0
  105. package/dist/app/SkillAppSchema.js.map +1 -0
  106. package/dist/channels/TelegramBridge.d.ts +103 -0
  107. package/dist/channels/TelegramBridge.d.ts.map +1 -0
  108. package/dist/channels/TelegramBridge.js +565 -0
  109. package/dist/channels/TelegramBridge.js.map +1 -0
  110. package/dist/channels/respond.d.ts +46 -0
  111. package/dist/channels/respond.d.ts.map +1 -0
  112. package/dist/channels/respond.js +41 -0
  113. package/dist/channels/respond.js.map +1 -0
  114. package/dist/config/ChatGptTokenRefresh.d.ts +18 -0
  115. package/dist/config/ChatGptTokenRefresh.d.ts.map +1 -0
  116. package/dist/config/ChatGptTokenRefresh.js +63 -0
  117. package/dist/config/ChatGptTokenRefresh.js.map +1 -0
  118. package/dist/config/ConfigBackup.d.ts +20 -0
  119. package/dist/config/ConfigBackup.d.ts.map +1 -0
  120. package/dist/config/ConfigBackup.js +197 -0
  121. package/dist/config/ConfigBackup.js.map +1 -0
  122. package/dist/config/ConfigLoader.d.ts +28 -0
  123. package/dist/config/ConfigLoader.d.ts.map +1 -0
  124. package/dist/config/ConfigLoader.js +335 -0
  125. package/dist/config/ConfigLoader.js.map +1 -0
  126. package/dist/config/ConfigManager.d.ts +55 -0
  127. package/dist/config/ConfigManager.d.ts.map +1 -0
  128. package/dist/config/ConfigManager.js +707 -0
  129. package/dist/config/ConfigManager.js.map +1 -0
  130. package/dist/config/ConfigSchema.d.ts +231 -0
  131. package/dist/config/ConfigSchema.d.ts.map +1 -0
  132. package/dist/config/ConfigSchema.js +15 -0
  133. package/dist/config/ConfigSchema.js.map +1 -0
  134. package/dist/config/GitHubCopilotAuth.d.ts +7 -0
  135. package/dist/config/GitHubCopilotAuth.d.ts.map +1 -0
  136. package/dist/config/GitHubCopilotAuth.js +40 -0
  137. package/dist/config/GitHubCopilotAuth.js.map +1 -0
  138. package/dist/config/MarifoldOpenAICompatProvider.d.ts +39 -0
  139. package/dist/config/MarifoldOpenAICompatProvider.d.ts.map +1 -0
  140. package/dist/config/MarifoldOpenAICompatProvider.js +158 -0
  141. package/dist/config/MarifoldOpenAICompatProvider.js.map +1 -0
  142. package/dist/config/OpenAICompatUrls.d.ts +7 -0
  143. package/dist/config/OpenAICompatUrls.d.ts.map +1 -0
  144. package/dist/config/OpenAICompatUrls.js +47 -0
  145. package/dist/config/OpenAICompatUrls.js.map +1 -0
  146. package/dist/config/ProviderFactory.d.ts +12 -0
  147. package/dist/config/ProviderFactory.d.ts.map +1 -0
  148. package/dist/config/ProviderFactory.js +61 -0
  149. package/dist/config/ProviderFactory.js.map +1 -0
  150. package/dist/config/ProviderInspector.d.ts +46 -0
  151. package/dist/config/ProviderInspector.d.ts.map +1 -0
  152. package/dist/config/ProviderInspector.js +356 -0
  153. package/dist/config/ProviderInspector.js.map +1 -0
  154. package/dist/config/ProviderRegistry.d.ts +19 -0
  155. package/dist/config/ProviderRegistry.d.ts.map +1 -0
  156. package/dist/config/ProviderRegistry.js +301 -0
  157. package/dist/config/ProviderRegistry.js.map +1 -0
  158. package/dist/config/XaiTokenRefresh.d.ts +15 -0
  159. package/dist/config/XaiTokenRefresh.d.ts.map +1 -0
  160. package/dist/config/XaiTokenRefresh.js +73 -0
  161. package/dist/config/XaiTokenRefresh.js.map +1 -0
  162. package/dist/errors/MarifoldError.d.ts +34 -0
  163. package/dist/errors/MarifoldError.d.ts.map +1 -0
  164. package/dist/errors/MarifoldError.js +100 -0
  165. package/dist/errors/MarifoldError.js.map +1 -0
  166. package/dist/images/ImageOptimizer.d.ts +34 -0
  167. package/dist/images/ImageOptimizer.d.ts.map +1 -0
  168. package/dist/images/ImageOptimizer.js +225 -0
  169. package/dist/images/ImageOptimizer.js.map +1 -0
  170. package/dist/index.d.ts +96 -0
  171. package/dist/index.d.ts.map +1 -0
  172. package/dist/index.js +193 -0
  173. package/dist/index.js.map +1 -0
  174. package/dist/memory/MemoryControls.d.ts +26 -0
  175. package/dist/memory/MemoryControls.d.ts.map +1 -0
  176. package/dist/memory/MemoryControls.js +388 -0
  177. package/dist/memory/MemoryControls.js.map +1 -0
  178. package/dist/memory/MemoryStore.d.ts +122 -0
  179. package/dist/memory/MemoryStore.d.ts.map +1 -0
  180. package/dist/memory/MemoryStore.js +1096 -0
  181. package/dist/memory/MemoryStore.js.map +1 -0
  182. package/dist/profiles/ProfileManager.d.ts +139 -0
  183. package/dist/profiles/ProfileManager.d.ts.map +1 -0
  184. package/dist/profiles/ProfileManager.js +475 -0
  185. package/dist/profiles/ProfileManager.js.map +1 -0
  186. package/dist/profiles/ProfileResolver.d.ts +18 -0
  187. package/dist/profiles/ProfileResolver.d.ts.map +1 -0
  188. package/dist/profiles/ProfileResolver.js +280 -0
  189. package/dist/profiles/ProfileResolver.js.map +1 -0
  190. package/dist/runs/RunRegistry.d.ts +140 -0
  191. package/dist/runs/RunRegistry.d.ts.map +1 -0
  192. package/dist/runs/RunRegistry.js +432 -0
  193. package/dist/runs/RunRegistry.js.map +1 -0
  194. package/dist/runtime/MarifoldRuntime.d.ts +244 -0
  195. package/dist/runtime/MarifoldRuntime.d.ts.map +1 -0
  196. package/dist/runtime/MarifoldRuntime.js +1099 -0
  197. package/dist/runtime/MarifoldRuntime.js.map +1 -0
  198. package/dist/runtime/MarifoldTypes.d.ts +70 -0
  199. package/dist/runtime/MarifoldTypes.d.ts.map +1 -0
  200. package/dist/runtime/MarifoldTypes.js +3 -0
  201. package/dist/runtime/MarifoldTypes.js.map +1 -0
  202. package/dist/schedule/ScheduleStore.d.ts +60 -0
  203. package/dist/schedule/ScheduleStore.d.ts.map +1 -0
  204. package/dist/schedule/ScheduleStore.js +212 -0
  205. package/dist/schedule/ScheduleStore.js.map +1 -0
  206. package/dist/schedule/Scheduler.d.ts +28 -0
  207. package/dist/schedule/Scheduler.d.ts.map +1 -0
  208. package/dist/schedule/Scheduler.js +65 -0
  209. package/dist/schedule/Scheduler.js.map +1 -0
  210. package/dist/search/DuckDuckGoBackend.d.ts +18 -0
  211. package/dist/search/DuckDuckGoBackend.d.ts.map +1 -0
  212. package/dist/search/DuckDuckGoBackend.js +37 -0
  213. package/dist/search/DuckDuckGoBackend.js.map +1 -0
  214. package/dist/search/FirecrawlBackend.d.ts +28 -0
  215. package/dist/search/FirecrawlBackend.d.ts.map +1 -0
  216. package/dist/search/FirecrawlBackend.js +76 -0
  217. package/dist/search/FirecrawlBackend.js.map +1 -0
  218. package/dist/search/SearchBackend.d.ts +18 -0
  219. package/dist/search/SearchBackend.d.ts.map +1 -0
  220. package/dist/search/SearchBackend.js +24 -0
  221. package/dist/search/SearchBackend.js.map +1 -0
  222. package/dist/search/createSearchBackend.d.ts +16 -0
  223. package/dist/search/createSearchBackend.d.ts.map +1 -0
  224. package/dist/search/createSearchBackend.js +30 -0
  225. package/dist/search/createSearchBackend.js.map +1 -0
  226. package/dist/sessions/ResponseMetrics.d.ts +17 -0
  227. package/dist/sessions/ResponseMetrics.d.ts.map +1 -0
  228. package/dist/sessions/ResponseMetrics.js +3 -0
  229. package/dist/sessions/ResponseMetrics.js.map +1 -0
  230. package/dist/sessions/SessionResolver.d.ts +135 -0
  231. package/dist/sessions/SessionResolver.d.ts.map +1 -0
  232. package/dist/sessions/SessionResolver.js +1173 -0
  233. package/dist/sessions/SessionResolver.js.map +1 -0
  234. package/dist/skill/BuiltInSkillManager.d.ts +11 -0
  235. package/dist/skill/BuiltInSkillManager.d.ts.map +1 -0
  236. package/dist/skill/BuiltInSkillManager.js +98 -0
  237. package/dist/skill/BuiltInSkillManager.js.map +1 -0
  238. package/dist/skill/SkillInvocation.d.ts +30 -0
  239. package/dist/skill/SkillInvocation.d.ts.map +1 -0
  240. package/dist/skill/SkillInvocation.js +135 -0
  241. package/dist/skill/SkillInvocation.js.map +1 -0
  242. package/dist/skill/SkillSchema.d.ts +37 -0
  243. package/dist/skill/SkillSchema.d.ts.map +1 -0
  244. package/dist/skill/SkillSchema.js +26 -0
  245. package/dist/skill/SkillSchema.js.map +1 -0
  246. package/dist/skill/SkillStore.d.ts +41 -0
  247. package/dist/skill/SkillStore.d.ts.map +1 -0
  248. package/dist/skill/SkillStore.js +184 -0
  249. package/dist/skill/SkillStore.js.map +1 -0
  250. package/dist/skill/SkillTemplater.d.ts +19 -0
  251. package/dist/skill/SkillTemplater.d.ts.map +1 -0
  252. package/dist/skill/SkillTemplater.js +36 -0
  253. package/dist/skill/SkillTemplater.js.map +1 -0
  254. package/dist/skill/SkillValidator.d.ts +10 -0
  255. package/dist/skill/SkillValidator.d.ts.map +1 -0
  256. package/dist/skill/SkillValidator.js +131 -0
  257. package/dist/skill/SkillValidator.js.map +1 -0
  258. package/dist/skill/SkillVars.d.ts +10 -0
  259. package/dist/skill/SkillVars.d.ts.map +1 -0
  260. package/dist/skill/SkillVars.js +65 -0
  261. package/dist/skill/SkillVars.js.map +1 -0
  262. package/dist/skill/index.d.ts +10 -0
  263. package/dist/skill/index.d.ts.map +1 -0
  264. package/dist/skill/index.js +22 -0
  265. package/dist/skill/index.js.map +1 -0
  266. package/dist/skillapp/SkillAppActionResolver.d.ts +13 -0
  267. package/dist/skillapp/SkillAppActionResolver.d.ts.map +1 -0
  268. package/dist/skillapp/SkillAppActionResolver.js +95 -0
  269. package/dist/skillapp/SkillAppActionResolver.js.map +1 -0
  270. package/dist/skillapp/SkillAppSchema.d.ts +79 -0
  271. package/dist/skillapp/SkillAppSchema.d.ts.map +1 -0
  272. package/dist/skillapp/SkillAppSchema.js +20 -0
  273. package/dist/skillapp/SkillAppSchema.js.map +1 -0
  274. package/dist/skillapp/SkillAppStore.d.ts +11 -0
  275. package/dist/skillapp/SkillAppStore.d.ts.map +1 -0
  276. package/dist/skillapp/SkillAppStore.js +98 -0
  277. package/dist/skillapp/SkillAppStore.js.map +1 -0
  278. package/dist/skillapp/SkillAppValidator.d.ts +10 -0
  279. package/dist/skillapp/SkillAppValidator.d.ts.map +1 -0
  280. package/dist/skillapp/SkillAppValidator.js +522 -0
  281. package/dist/skillapp/SkillAppValidator.js.map +1 -0
  282. package/dist/tasks/TaskStore.d.ts +110 -0
  283. package/dist/tasks/TaskStore.d.ts.map +1 -0
  284. package/dist/tasks/TaskStore.js +371 -0
  285. package/dist/tasks/TaskStore.js.map +1 -0
  286. package/dist/util/fetchRetry.d.ts +11 -0
  287. package/dist/util/fetchRetry.d.ts.map +1 -0
  288. package/dist/util/fetchRetry.js +48 -0
  289. package/dist/util/fetchRetry.js.map +1 -0
  290. package/dist/util/idToken.d.ts +12 -0
  291. package/dist/util/idToken.d.ts.map +1 -0
  292. package/dist/util/idToken.js +32 -0
  293. package/dist/util/idToken.js.map +1 -0
  294. package/dist/util/proxy.d.ts +18 -0
  295. package/dist/util/proxy.d.ts.map +1 -0
  296. package/dist/util/proxy.js +28 -0
  297. package/dist/util/proxy.js.map +1 -0
  298. package/dist/workspace/Workspace.d.ts +9 -0
  299. package/dist/workspace/Workspace.d.ts.map +1 -0
  300. package/dist/workspace/Workspace.js +55 -0
  301. package/dist/workspace/Workspace.js.map +1 -0
  302. package/dist/workspace/WorkspaceInitializer.d.ts +40 -0
  303. package/dist/workspace/WorkspaceInitializer.d.ts.map +1 -0
  304. package/dist/workspace/WorkspaceInitializer.js +212 -0
  305. package/dist/workspace/WorkspaceInitializer.js.map +1 -0
  306. package/dist/workspace/WorkspacePaths.d.ts +11 -0
  307. package/dist/workspace/WorkspacePaths.d.ts.map +1 -0
  308. package/dist/workspace/WorkspacePaths.js +82 -0
  309. package/dist/workspace/WorkspacePaths.js.map +1 -0
  310. package/package.json +36 -0
@@ -0,0 +1,280 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ProfileResolver = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const smol_toml_1 = require("smol-toml");
40
+ const MarifoldError_1 = require("../errors/MarifoldError");
41
+ const ConfigLoader_1 = require("../config/ConfigLoader");
42
+ const ProfileManager_1 = require("./ProfileManager");
43
+ const SAFE_PROFILE_NAME = /^[A-Za-z0-9_-]+$/;
44
+ const BUILT_IN_DEFAULT_PROFILE = {
45
+ name: 'default',
46
+ identity: 'You are Marifold, a local-first personal AI workspace assistant.',
47
+ rules: 'Answer clearly and practically. Do not claim unsupported capabilities.',
48
+ custom: '',
49
+ memories: [],
50
+ };
51
+ class ProfileResolver {
52
+ profilesDir;
53
+ constructor(profilesDir) {
54
+ this.profilesDir = profilesDir;
55
+ }
56
+ load(name) {
57
+ this.assertSafeName(name);
58
+ const directoryProfile = this.loadDirectoryProfile(name);
59
+ if (directoryProfile)
60
+ return directoryProfile;
61
+ const jsonProfile = this.loadJsonProfile(name);
62
+ if (jsonProfile)
63
+ return jsonProfile;
64
+ if (name === 'default')
65
+ return { ...BUILT_IN_DEFAULT_PROFILE };
66
+ throw MarifoldError_1.MarifoldError.profileInvalid(`Profile '${name}' was not found in ${this.profilesDir}.`, name);
67
+ }
68
+ loadSettings(name) {
69
+ this.assertSafeName(name);
70
+ const profileToml = path.join(this.profilesDir, name, 'profile.toml');
71
+ if (!fs.existsSync(profileToml))
72
+ return { memories: true };
73
+ const raw = this.readToml(profileToml);
74
+ const displayName = (0, ProfileManager_1.normalizeProfileDisplayName)(optionalString(raw.display_name, `${name}.profile.toml display_name`), name);
75
+ const provider = optionalString(raw.provider, `${name}.profile.toml provider`);
76
+ const model = optionalString(raw.model, `${name}.profile.toml model`);
77
+ const memories = optionalBoolean(raw.memories, `${name}.profile.toml memories`) ?? true;
78
+ const maxContextTokens = optionalNumber(raw.max_context_tokens, `${name}.profile.toml max_context_tokens`);
79
+ const sessionContextTurns = optionalTurnWindow(raw.session_context_turns, `${name}.profile.toml session_context_turns`);
80
+ const think = optionalBoolean(raw.think, `${name}.profile.toml think`);
81
+ const agent = raw.agent !== undefined ? (0, ConfigLoader_1.parsePartialAgentConfig)(raw.agent, `${name}.profile.toml [agent]`) : undefined;
82
+ const rawMode = optionalString(raw.mode, `${name}.profile.toml mode`);
83
+ if (rawMode !== undefined && rawMode !== 'agent' && rawMode !== 'chat') {
84
+ throw MarifoldError_1.MarifoldError.profileInvalid(`Profile '${name}' has an invalid mode '${rawMode}' in profile.toml; use "agent" or "chat".`, name);
85
+ }
86
+ if ((provider && !model) || (!provider && model)) {
87
+ throw MarifoldError_1.MarifoldError.profileInvalid(`Profile '${name}' must set both provider and model in profile.toml, or neither.`, name);
88
+ }
89
+ return { displayName, provider, model, memories, mode: rawMode, maxContextTokens, sessionContextTurns, think, agent };
90
+ }
91
+ list() {
92
+ const profiles = new Map();
93
+ if (fs.existsSync(this.profilesDir)) {
94
+ for (const entry of fs.readdirSync(this.profilesDir, { withFileTypes: true })) {
95
+ if (entry.isDirectory() && SAFE_PROFILE_NAME.test(entry.name)) {
96
+ const profilePath = path.join(this.profilesDir, entry.name);
97
+ if (isProfileDirectory(profilePath)) {
98
+ profiles.set(entry.name, {
99
+ name: entry.name,
100
+ displayName: this.resolveDisplayName(entry.name),
101
+ source: 'directory',
102
+ path: profilePath,
103
+ });
104
+ }
105
+ }
106
+ else if (entry.isFile() && entry.name.endsWith('.json')) {
107
+ const name = entry.name.slice(0, -'.json'.length);
108
+ if (SAFE_PROFILE_NAME.test(name) && !profiles.has(name)) {
109
+ profiles.set(name, {
110
+ name,
111
+ displayName: name,
112
+ source: 'json',
113
+ path: path.join(this.profilesDir, entry.name),
114
+ });
115
+ }
116
+ }
117
+ }
118
+ }
119
+ if (!profiles.has('default')) {
120
+ profiles.set('default', { name: 'default', displayName: 'default', source: 'built-in' });
121
+ }
122
+ // Avatars live in the profile dir regardless of source — even the built-in
123
+ // default can carry one (setAvatar scaffolds the dir without md/toml files).
124
+ for (const summary of profiles.values()) {
125
+ const avatar = (0, ProfileManager_1.findProfileAvatar)(this.profilesDir, summary.name);
126
+ if (avatar)
127
+ summary.avatar = { mediaType: avatar.mediaType };
128
+ }
129
+ return [...profiles.values()].sort((a, b) => a.name.localeCompare(b.name));
130
+ }
131
+ detail(name) {
132
+ this.assertSafeName(name);
133
+ const summary = this.list().find(profile => profile.name === name);
134
+ if (!summary) {
135
+ throw MarifoldError_1.MarifoldError.profileInvalid(`Profile '${name}' was not found in ${this.profilesDir}.`, name);
136
+ }
137
+ if (summary.source === 'directory' && summary.path) {
138
+ return {
139
+ ...summary,
140
+ settings: this.loadSettings(name),
141
+ files: {
142
+ profile: readProfileFile(path.join(summary.path, 'PROFILE.md')),
143
+ rules: readProfileFile(path.join(summary.path, 'RULES.md')),
144
+ custom: readProfileFile(path.join(summary.path, 'CUSTOM.md')),
145
+ profileToml: readProfileFile(path.join(summary.path, 'profile.toml')),
146
+ },
147
+ };
148
+ }
149
+ if (summary.source === 'json' && summary.path) {
150
+ const profile = this.loadJsonProfile(name);
151
+ return {
152
+ ...summary,
153
+ settings: { memories: true },
154
+ files: {
155
+ profile: { path: summary.path, content: profile?.identity ?? '' },
156
+ rules: { path: summary.path, content: profile?.rules ?? '' },
157
+ custom: { path: summary.path, content: profile?.custom ?? '' },
158
+ profileToml: { content: '' },
159
+ },
160
+ };
161
+ }
162
+ return {
163
+ ...summary,
164
+ settings: { memories: true },
165
+ files: {
166
+ profile: { content: BUILT_IN_DEFAULT_PROFILE.identity },
167
+ rules: { content: BUILT_IN_DEFAULT_PROFILE.rules },
168
+ custom: { content: BUILT_IN_DEFAULT_PROFILE.custom ?? '' },
169
+ profileToml: { content: '' },
170
+ },
171
+ };
172
+ }
173
+ loadDirectoryProfile(name) {
174
+ const profileDir = path.join(this.profilesDir, name);
175
+ if (!isProfileDirectory(profileDir))
176
+ return undefined;
177
+ return {
178
+ name,
179
+ identity: readOptional(path.join(profileDir, 'PROFILE.md')),
180
+ rules: readOptional(path.join(profileDir, 'RULES.md')),
181
+ custom: readOptional(path.join(profileDir, 'CUSTOM.md')),
182
+ memories: [],
183
+ };
184
+ }
185
+ loadJsonProfile(name) {
186
+ const filePath = path.join(this.profilesDir, `${name}.json`);
187
+ if (!fs.existsSync(filePath))
188
+ return undefined;
189
+ try {
190
+ const raw = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
191
+ return {
192
+ name,
193
+ identity: raw.identity ?? '',
194
+ rules: raw.rules ?? '',
195
+ custom: raw.custom,
196
+ memories: raw.memories ?? [],
197
+ };
198
+ }
199
+ catch (error) {
200
+ throw MarifoldError_1.MarifoldError.profileInvalid(`Profile '${name}' JSON is invalid: ${String(error)}`, name);
201
+ }
202
+ }
203
+ readToml(filePath) {
204
+ try {
205
+ const value = (0, smol_toml_1.parse)(fs.readFileSync(filePath, 'utf-8'));
206
+ if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
207
+ return value;
208
+ }
209
+ throw new Error('TOML root must be an object.');
210
+ }
211
+ catch (error) {
212
+ throw MarifoldError_1.MarifoldError.profileInvalid(`Could not read profile config ${filePath}: ${String(error)}`, path.basename(path.dirname(filePath)));
213
+ }
214
+ }
215
+ /** Keep profile listing resilient to unrelated invalid settings; opening the
216
+ * profile detail still reports the underlying profile.toml error. */
217
+ resolveDisplayName(name) {
218
+ try {
219
+ return this.loadSettings(name).displayName ?? name;
220
+ }
221
+ catch {
222
+ return name;
223
+ }
224
+ }
225
+ assertSafeName(name) {
226
+ if (!SAFE_PROFILE_NAME.test(name)) {
227
+ throw MarifoldError_1.MarifoldError.profileInvalid(`Invalid profile name '${name}'. Use letters, numbers, underscores, or hyphens.`, name);
228
+ }
229
+ }
230
+ }
231
+ exports.ProfileResolver = ProfileResolver;
232
+ function isProfileDirectory(profileDir) {
233
+ return fs.existsSync(profileDir) && fs.statSync(profileDir).isDirectory()
234
+ && (fs.existsSync(path.join(profileDir, 'PROFILE.md'))
235
+ || fs.existsSync(path.join(profileDir, 'RULES.md'))
236
+ || fs.existsSync(path.join(profileDir, 'CUSTOM.md'))
237
+ || fs.existsSync(path.join(profileDir, 'profile.toml')));
238
+ }
239
+ function readOptional(filePath) {
240
+ return fs.existsSync(filePath) ? fs.readFileSync(filePath, 'utf-8') : '';
241
+ }
242
+ function readProfileFile(filePath) {
243
+ return {
244
+ path: filePath,
245
+ content: readOptional(filePath),
246
+ };
247
+ }
248
+ function optionalString(value, label) {
249
+ if (value === undefined)
250
+ return undefined;
251
+ if (typeof value === 'string')
252
+ return value;
253
+ throw MarifoldError_1.MarifoldError.configInvalid(`Expected ${label} to be a string.`);
254
+ }
255
+ function optionalBoolean(value, label) {
256
+ if (value === undefined)
257
+ return undefined;
258
+ if (typeof value === 'boolean')
259
+ return value;
260
+ throw MarifoldError_1.MarifoldError.configInvalid(`Expected ${label} to be a boolean.`);
261
+ }
262
+ function optionalNumber(value, label) {
263
+ if (value === undefined)
264
+ return undefined;
265
+ if (typeof value === 'number' && Number.isFinite(value))
266
+ return value;
267
+ throw MarifoldError_1.MarifoldError.configInvalid(`Expected ${label} to be a number.`);
268
+ }
269
+ /** Parse `session_context_turns`: `"all"` (or unset) → undefined (no cap),
270
+ * a non-negative integer → that many recent turns. */
271
+ function optionalTurnWindow(value, label) {
272
+ if (value === undefined)
273
+ return undefined;
274
+ if (typeof value === 'string' && value.trim().toLowerCase() === 'all')
275
+ return undefined;
276
+ if (typeof value === 'number' && Number.isInteger(value) && value >= 0)
277
+ return value;
278
+ throw MarifoldError_1.MarifoldError.configInvalid(`Expected ${label} to be a non-negative integer or "all".`);
279
+ }
280
+ //# sourceMappingURL=ProfileResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfileResolver.js","sourceRoot":"","sources":["../../src/profiles/ProfileResolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ import type { ImageInput } from '@priest-ai/core';
2
+ import { AgentEvent, AgentUsage } from '../agent/AgentEvents';
3
+ import { AgentRunner } from '../agent/AgentRunner';
4
+ import { ApprovalMode, ApprovalRequest, ToolKind } from '../agent/ApprovalPolicy';
5
+ import type { RunFileInput } from '../agent/RunWorkspace';
6
+ import { TaskStatus } from '../tasks/TaskStore';
7
+ import { type UserInputRequest } from '../agent/UserInput';
8
+ /** The narrow runtime slice the registry needs, so tests can fake it without a
9
+ * full MarifoldRuntime. `MarifoldRuntime.createRunRegistry()` binds the real one. */
10
+ export interface RunRegistryRuntime {
11
+ createAgentRunner(profile?: string): AgentRunner;
12
+ setProfileAgentApproval(profile: string, kind: ToolKind, mode: ApprovalMode): void;
13
+ addProfileTrustedFolder(profile: string, folder: string): string;
14
+ defaultProfile(): string;
15
+ }
16
+ export interface RunRegistryOptions {
17
+ runtime: RunRegistryRuntime;
18
+ /** How long an approval prompt waits for an answer before auto-denying.
19
+ * Matches the Telegram bridge's five-minute window by default. */
20
+ approvalTimeoutMs?: number;
21
+ /** How long a clarification card may remain unanswered before the tool is
22
+ * returned to the model as unavailable. */
23
+ userInputTimeoutMs?: number;
24
+ /** How long a finished run (and its event buffer) stays queryable for
25
+ * late/reconnecting clients before eviction. */
26
+ finishedRunTtlMs?: number;
27
+ maxActiveRuns?: number;
28
+ /** Per-run event buffer cap; oldest events drop first (clients can backfill
29
+ * from the run's durable task record). */
30
+ maxBufferedEvents?: number;
31
+ log?: (message: string) => void;
32
+ }
33
+ /** What a client may pass when starting a run. Mirrors the AgentRunOptions
34
+ * surface that is safe to accept over the service boundary. */
35
+ export interface RunStartInput {
36
+ objective: string;
37
+ profile?: string;
38
+ provider?: string;
39
+ model?: string;
40
+ sessionId?: string;
41
+ /** Display text persisted for the user turn when `objective` is an expanded
42
+ * skill prompt. */
43
+ userTurn?: string;
44
+ /** Replace a persisted exchange instead of appending a new one. */
45
+ replaceUserTurnIndex?: number;
46
+ think?: boolean;
47
+ /** Staged for lazy inspect_attachment access during the agent run. */
48
+ images?: ImageInput[];
49
+ /** Preserve attached images' original encoded bytes for this run. */
50
+ originalImages?: boolean;
51
+ /** Binary files staged read-only inside this run's isolated input folder. */
52
+ files?: RunFileInput[];
53
+ instructions?: string[];
54
+ maxIterations?: number;
55
+ forcePlan?: boolean;
56
+ lean?: boolean;
57
+ cwd?: string;
58
+ }
59
+ /** Snapshot view of a run for list/get responses. `status` is the TaskStatus
60
+ * verbatim — `running` until the terminal `done` event lands. */
61
+ export interface RunRecord {
62
+ id: string;
63
+ objective: string;
64
+ profile: string;
65
+ status: TaskStatus;
66
+ taskId?: string;
67
+ sessionId?: string;
68
+ createdAt: string;
69
+ finishedAt?: string;
70
+ summary?: string;
71
+ usage?: AgentUsage;
72
+ /** Sequence number of the newest buffered event (0 = none yet). */
73
+ eventCount: number;
74
+ pendingApprovals: ApprovalRequest[];
75
+ pendingUserInputs: UserInputRequest[];
76
+ }
77
+ export interface SequencedEvent {
78
+ seq: number;
79
+ event: AgentEvent;
80
+ }
81
+ export type RunApprovalAction = 'once' | 'always' | 'trust' | 'deny';
82
+ /**
83
+ * In-memory session state for agent runs driven across separate requests
84
+ * (start → event stream → approval answer → cancel). The durable record lives
85
+ * in TaskStore (`run.taskId`); this registry adds the live layer TaskStore
86
+ * cannot hold: the abort handle, pending-approval resolution, the steering
87
+ * queue, and a sequenced event buffer for (re)connecting subscribers.
88
+ */
89
+ export declare class RunRegistry {
90
+ private readonly runs;
91
+ private readonly pending;
92
+ private readonly pendingUserInputs;
93
+ private readonly runtime;
94
+ private readonly approvalTimeoutMs;
95
+ private readonly userInputTimeoutMs;
96
+ private readonly finishedRunTtlMs;
97
+ private readonly maxActiveRuns;
98
+ private readonly maxBufferedEvents;
99
+ private readonly log?;
100
+ private closed;
101
+ constructor(options: RunRegistryOptions);
102
+ start(input: RunStartInput): RunRecord;
103
+ get(runId: string): RunRecord | undefined;
104
+ require(runId: string): RunRecord;
105
+ list(): RunRecord[];
106
+ /** Replay buffered events past `afterSeq`, then follow live ones. Returns
107
+ * after yielding the terminal `done` event (or immediately after replay when
108
+ * the run already finished). `signal` detaches the subscriber early. */
109
+ events(runId: string, afterSeq?: number, signal?: AbortSignal): AsyncGenerator<SequencedEvent, void, unknown>;
110
+ answerApproval(runId: string, requestId: string, action: RunApprovalAction): {
111
+ requestId: string;
112
+ approved: boolean;
113
+ };
114
+ answerUserInput(runId: string, requestId: string, value: unknown): {
115
+ requestId: string;
116
+ accepted: true;
117
+ };
118
+ /** Queue mid-run guidance; the runner drains it before its next iteration
119
+ * and emits a `steering` event so attached clients see it land. */
120
+ steer(runId: string, text: string): void;
121
+ /** Idempotent: aborts an active run (resolving any pending approval so the
122
+ * loop unblocks immediately) and reports the current status either way. */
123
+ cancel(runId: string): TaskStatus;
124
+ close(): void;
125
+ private pump;
126
+ private append;
127
+ private finish;
128
+ /** ApprovalHandler for the run: short-circuit on this run's session grants,
129
+ * otherwise park the request until a client answers, the timeout fires, or
130
+ * the run is cancelled. Mirrors TelegramBridge.requestApproval. */
131
+ private handleApproval;
132
+ private handleUserInput;
133
+ private waitForChange;
134
+ private notify;
135
+ private sweepFinished;
136
+ private toRecord;
137
+ private userInputKey;
138
+ private createRunId;
139
+ }
140
+ //# sourceMappingURL=RunRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunRegistry.d.ts","sourceRoot":"","sources":["../../src/runs/RunRegistry.ts"],"names":[],"mappings":"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"}