@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,475 @@
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.ProfileManager = exports.PROFILE_TOML_STUB = void 0;
37
+ exports.findProfileAvatar = findProfileAvatar;
38
+ exports.normalizeProfileDisplayName = normalizeProfileDisplayName;
39
+ const fs = __importStar(require("fs"));
40
+ const os = __importStar(require("os"));
41
+ const path = __importStar(require("path"));
42
+ const smol_toml_1 = require("smol-toml");
43
+ const MarifoldError_1 = require("../errors/MarifoldError");
44
+ const MemoryStore_1 = require("../memory/MemoryStore");
45
+ const WorkspacePaths_1 = require("../workspace/WorkspacePaths");
46
+ const SAFE_PROFILE_NAME = /^[A-Za-z0-9_-]+$/;
47
+ /** Accepted avatar media types → the stored file extension. */
48
+ const AVATAR_MEDIA_TYPES = {
49
+ 'image/png': 'png',
50
+ 'image/jpeg': 'jpg',
51
+ 'image/webp': 'webp',
52
+ };
53
+ /** Media assets (avatars, and future banners/exports) live under this subdir
54
+ * so binaries don't clutter the profile root next to profile.md/rules.md. */
55
+ const ASSETS_DIR = 'assets';
56
+ // The web client crops + downscales to 512² and re-encodes lossless PNG before
57
+ // upload, so the stored file stays small; this ceiling guards the processed
58
+ // output (a lossless 512² PNG can exceed 1 MB for detailed images).
59
+ const MAX_AVATAR_BYTES = 2 * 1024 * 1024;
60
+ const PROFILE_MD_STUB = `# {name}
61
+
62
+ You are a helpful assistant.
63
+ `;
64
+ const RULES_MD_STUB = `# RULES.md
65
+
66
+ Be honest. Do not make things up.
67
+ Be concise unless the user asks for depth.
68
+
69
+ Replace this content with specific guidance for this profile's role.
70
+ `;
71
+ /** Documented per-profile config template. Shared by `profile create` and the
72
+ * default profile scaffolded at `marifold init`, so both list every option. */
73
+ exports.PROFILE_TOML_STUB = `# profile.toml — per-profile overrides. Every key is optional; uncomment to set.
74
+ # Anything left commented falls back to the global [default] in config.toml.
75
+
76
+ # Human-readable name shown by clients. Blank or absent = profile name.
77
+ # display_name = "Writing Assistant"
78
+
79
+ # Provider + model override (set BOTH or NEITHER). Blank = use [default].
80
+ # provider = "ollama"
81
+ # model = "gemma4:e4b"
82
+
83
+ # Default TUI mode for this profile: "agent" or "chat" (default "agent").
84
+ # mode = "agent"
85
+
86
+ # Load this profile's structured memory into context (default true).
87
+ # memories = true
88
+
89
+ # Thinking for this profile (default off). On = stronger reasoning, slower and
90
+ # more expensive. Toggle per session with /think on|off.
91
+ # think = false
92
+
93
+ # Conversation-context budget in tokens; enables compaction past ~80%.
94
+ # Falls back to default.max_context_tokens.
95
+ # max_context_tokens = 16000
96
+
97
+ # Hard cap on recent session turns replayed each request: "all" = no cap,
98
+ # N = last N, 0 = none. Falls back to default.session_context_turns.
99
+ # session_context_turns = "all"
100
+
101
+ # Per-profile agent tool permissions — override the global [agent.approval].
102
+ # Kinds: read | write | shell | network | delegate. Modes: "allow" | "ask" | "deny".
103
+ # Unset kinds inherit the global default; "ask" with no interactive handler
104
+ # (e.g. an unattended/messaging context) safely degrades to deny.
105
+ # agent.approval.shell = "allow"
106
+ # agent.approval.write = "ask"
107
+
108
+ # Folders (outside the project) where this profile may write files without
109
+ # asking — a flat allowlist. Add with /trust-folder or the "Always" approval
110
+ # button. e.g. a profile that writes a daily blog:
111
+ # agent.trusted_folders = ["~/my_docs/blog"]
112
+ `;
113
+ const PROFILE_FILE_NAMES = {
114
+ profile: 'PROFILE.md',
115
+ rules: 'RULES.md',
116
+ custom: 'CUSTOM.md',
117
+ };
118
+ class ProfileManager {
119
+ profilesDir;
120
+ constructor(profilesDir) {
121
+ this.profilesDir = profilesDir;
122
+ }
123
+ init(name) {
124
+ assertSafeName(name);
125
+ const profileDir = path.join(this.profilesDir, name);
126
+ if (fs.existsSync(profileDir)) {
127
+ throw MarifoldError_1.MarifoldError.profileInvalid(`Profile '${name}' already exists at ${profileDir}.`, name);
128
+ }
129
+ fs.mkdirSync(profileDir, { recursive: true });
130
+ const files = [
131
+ writeFile(path.join(profileDir, 'PROFILE.md'), PROFILE_MD_STUB.replace('{name}', name)),
132
+ writeFile(path.join(profileDir, 'RULES.md'), RULES_MD_STUB),
133
+ writeFile(path.join(profileDir, 'CUSTOM.md'), ''),
134
+ writeFile(path.join(profileDir, 'profile.toml'), exports.PROFILE_TOML_STUB),
135
+ ...(0, MemoryStore_1.ensureProfileMemoryFiles)(profileDir).map(file => file.path),
136
+ ];
137
+ return { name, path: profileDir, files };
138
+ }
139
+ /** Persist a human-readable profile label. Blank/undefined clears the
140
+ * override so clients fall back to the stable profile name. */
141
+ setDisplayName(name, displayName) {
142
+ const normalized = normalizeProfileDisplayName(displayName, name);
143
+ return this.upsertSetting(name, 'display_name', normalized === undefined ? undefined : tomlString(normalized), normalized === undefined ? {} : { displayName: normalized });
144
+ }
145
+ setModelOverride(name, provider, model) {
146
+ assertSafeName(name);
147
+ if (!provider || !model) {
148
+ throw MarifoldError_1.MarifoldError.profileInvalid('Profile model overrides require both provider and model.', name);
149
+ }
150
+ const profileDir = this.requireProfileDir(name);
151
+ const profileToml = path.join(profileDir, 'profile.toml');
152
+ const next = upsertProfileToml(fs.existsSync(profileToml) ? fs.readFileSync(profileToml, 'utf-8') : '', provider, model);
153
+ fs.writeFileSync(profileToml, next);
154
+ return { name, path: profileToml, provider, model, cleared: false };
155
+ }
156
+ clearModelOverride(name) {
157
+ assertSafeName(name);
158
+ const profileDir = this.requireProfileDir(name);
159
+ const profileToml = path.join(profileDir, 'profile.toml');
160
+ if (!fs.existsSync(profileToml)) {
161
+ fs.writeFileSync(profileToml, exports.PROFILE_TOML_STUB);
162
+ }
163
+ else {
164
+ fs.writeFileSync(profileToml, removeModelOverride(fs.readFileSync(profileToml, 'utf-8')));
165
+ }
166
+ return { name, path: profileToml, cleared: true };
167
+ }
168
+ /** Persist the profile's default TUI mode into its profile.toml, preserving
169
+ * every other key. Used by the TUI's `/agent default` / `/chat default`. */
170
+ setMode(name, mode) {
171
+ assertSafeName(name);
172
+ const profileDir = this.requireProfileDir(name);
173
+ const profileToml = path.join(profileDir, 'profile.toml');
174
+ const current = fs.existsSync(profileToml) ? fs.readFileSync(profileToml, 'utf-8') : exports.PROFILE_TOML_STUB;
175
+ fs.writeFileSync(profileToml, upsertMode(current, mode));
176
+ return { name, path: profileToml, mode };
177
+ }
178
+ /** Persist (or clear, when tokens is undefined/0) the profile's context budget. */
179
+ setMaxContextTokens(name, tokens) {
180
+ assertSafeName(name);
181
+ const profileDir = this.requireProfileDir(name);
182
+ const profileToml = path.join(profileDir, 'profile.toml');
183
+ const current = fs.existsSync(profileToml) ? fs.readFileSync(profileToml, 'utf-8') : exports.PROFILE_TOML_STUB;
184
+ fs.writeFileSync(profileToml, upsertMaxContextTokens(current, tokens));
185
+ return { name, path: profileToml, maxContextTokens: tokens && tokens > 0 ? tokens : undefined };
186
+ }
187
+ /** Persist a per-profile approval decision into profile.toml as a dotted key
188
+ * (e.g. `agent.approval.shell = "allow"`), overriding the global `[agent]`.
189
+ * `mode: undefined` removes the override so the kind inherits again. */
190
+ setAgentApproval(name, kind, mode) {
191
+ assertSafeName(name);
192
+ // Create the profile dir if absent — the built-in `default` profile is served
193
+ // without one, and "always allow" must still persist there (mirrors setModelOverride).
194
+ const profileDir = path.join(this.profilesDir, name);
195
+ fs.mkdirSync(profileDir, { recursive: true });
196
+ const profileToml = path.join(profileDir, 'profile.toml');
197
+ const current = fs.existsSync(profileToml) ? fs.readFileSync(profileToml, 'utf-8') : exports.PROFILE_TOML_STUB;
198
+ fs.writeFileSync(profileToml, upsertFlatLine(current, `agent.approval.${kind}`, mode === undefined ? undefined : tomlString(mode)));
199
+ return { name, path: profileToml, kind, ...(mode !== undefined ? { mode } : {}) };
200
+ }
201
+ /** Overwrite one of the profile's markdown files (PROFILE/RULES/CUSTOM.md). */
202
+ writeProfileFile(name, file, content) {
203
+ assertSafeName(name);
204
+ const fileName = PROFILE_FILE_NAMES[file];
205
+ if (!fileName) {
206
+ throw MarifoldError_1.MarifoldError.profileInvalid(`Unknown profile file '${String(file)}'. Use profile, rules, or custom.`, name);
207
+ }
208
+ const profileDir = path.join(this.profilesDir, name);
209
+ fs.mkdirSync(profileDir, { recursive: true });
210
+ const filePath = path.join(profileDir, fileName);
211
+ fs.writeFileSync(filePath, content);
212
+ return { name, path: filePath, file };
213
+ }
214
+ /** Persist (or clear, when undefined) whether this profile loads its memory. */
215
+ setMemories(name, memories) {
216
+ return this.upsertSetting(name, 'memories', memories === undefined ? undefined : String(memories), { memories });
217
+ }
218
+ /** Persist (or clear, when undefined) the profile's thinking-mode default. */
219
+ setThink(name, think) {
220
+ return this.upsertSetting(name, 'think', think === undefined ? undefined : String(think), { think });
221
+ }
222
+ /** Persist the profile's recent-turn window. `undefined` or `'all'` removes the
223
+ * key (inherit `default.session_context_turns`); an integer ≥ 0 caps replay. */
224
+ setSessionContextTurns(name, turns) {
225
+ if (typeof turns === 'number' && (!Number.isInteger(turns) || turns < 0)) {
226
+ throw MarifoldError_1.MarifoldError.profileInvalid('session_context_turns must be a non-negative integer or "all".', name);
227
+ }
228
+ const cleared = turns === undefined || turns === 'all';
229
+ return this.upsertSetting(name, 'session_context_turns', cleared ? undefined : String(turns), cleared ? {} : { sessionContextTurns: turns });
230
+ }
231
+ upsertSetting(name, key, rendered, result) {
232
+ assertSafeName(name);
233
+ const profileDir = path.join(this.profilesDir, name);
234
+ fs.mkdirSync(profileDir, { recursive: true });
235
+ const profileToml = path.join(profileDir, 'profile.toml');
236
+ const current = fs.existsSync(profileToml) ? fs.readFileSync(profileToml, 'utf-8') : exports.PROFILE_TOML_STUB;
237
+ fs.writeFileSync(profileToml, upsertFlatLine(current, key, rendered));
238
+ return { name, path: profileToml, ...result };
239
+ }
240
+ /** Add a trusted folder capability to profile.toml. In-home writes may be
241
+ * silent; external folders still prompt. Refuses broad/sensitive roots. */
242
+ addTrustedFolder(name, folder) {
243
+ assertSafeName(name);
244
+ const resolved = path.resolve((0, WorkspacePaths_1.expandHome)(folder));
245
+ assertSafeTrustedFolder(resolved);
246
+ const profileDir = path.join(this.profilesDir, name);
247
+ fs.mkdirSync(profileDir, { recursive: true });
248
+ const profileToml = path.join(profileDir, 'profile.toml');
249
+ const current = fs.existsSync(profileToml) ? fs.readFileSync(profileToml, 'utf-8') : exports.PROFILE_TOML_STUB;
250
+ fs.writeFileSync(profileToml, upsertTrustedFolder(current, resolved));
251
+ return { name, path: profileToml, folder: resolved };
252
+ }
253
+ /** Remove a trusted folder from the profile's profile.toml. Compares against
254
+ * the resolved absolute path (same normalization addTrustedFolder applies). */
255
+ removeTrustedFolder(name, folder) {
256
+ assertSafeName(name);
257
+ const resolved = path.resolve((0, WorkspacePaths_1.expandHome)(folder));
258
+ const profileDir = this.requireProfileDir(name);
259
+ const profileToml = path.join(profileDir, 'profile.toml');
260
+ const current = fs.existsSync(profileToml) ? fs.readFileSync(profileToml, 'utf-8') : exports.PROFILE_TOML_STUB;
261
+ const folders = parseTrustedFolders(current);
262
+ const next = folders.filter(entry => entry !== resolved);
263
+ fs.writeFileSync(profileToml, renderTrustedFolders(current, next));
264
+ return { name, path: profileToml, folder: resolved, removed: next.length !== folders.length };
265
+ }
266
+ rename(from, to) {
267
+ assertSafeName(from);
268
+ assertSafeName(to);
269
+ if (from === to)
270
+ throw MarifoldError_1.MarifoldError.profileInvalid('New profile name must be different from the current name.', from);
271
+ if (from === 'default' || to === 'default') {
272
+ throw MarifoldError_1.MarifoldError.profileInvalid('Profile rename does not support the built-in default profile.', from);
273
+ }
274
+ const existing = this.requireStoredProfile(from);
275
+ const targetPath = existing.type === 'directory'
276
+ ? path.join(this.profilesDir, to)
277
+ : path.join(this.profilesDir, `${to}.json`);
278
+ if (fs.existsSync(path.join(this.profilesDir, to)) || fs.existsSync(path.join(this.profilesDir, `${to}.json`))) {
279
+ throw MarifoldError_1.MarifoldError.profileInvalid(`Profile '${to}' already exists in ${this.profilesDir}.`, to);
280
+ }
281
+ fs.renameSync(existing.path, targetPath);
282
+ return { from, to, fromPath: existing.path, toPath: targetPath };
283
+ }
284
+ delete(name) {
285
+ assertSafeName(name);
286
+ if (name === 'default') {
287
+ throw MarifoldError_1.MarifoldError.profileInvalid('The built-in default profile cannot be deleted.', name);
288
+ }
289
+ const existing = this.requireStoredProfile(name);
290
+ if (existing.type === 'directory') {
291
+ fs.rmSync(existing.path, { recursive: true, force: true });
292
+ }
293
+ else {
294
+ fs.rmSync(existing.path, { force: true });
295
+ }
296
+ return { name, path: existing.path };
297
+ }
298
+ exists(name) {
299
+ assertSafeName(name);
300
+ return name === 'default'
301
+ || fs.existsSync(path.join(this.profilesDir, name))
302
+ || fs.existsSync(path.join(this.profilesDir, `${name}.json`));
303
+ }
304
+ /** The profile's stored avatar image, if any (`assets/avatar.<ext>`). */
305
+ avatar(name) {
306
+ assertSafeName(name);
307
+ return findProfileAvatar(this.profilesDir, name);
308
+ }
309
+ /** Store the avatar (PNG/JPEG/WebP, ≤2 MB) under assets/, replacing any
310
+ * previous one — including one of a different extension. Creates the profile
311
+ * dir if absent (the built-in default is served without one; mirrors
312
+ * setAgentApproval). */
313
+ setAvatar(name, image, mediaType) {
314
+ assertSafeName(name);
315
+ const ext = AVATAR_MEDIA_TYPES[mediaType];
316
+ if (!ext) {
317
+ throw MarifoldError_1.MarifoldError.profileInvalid(`Unsupported avatar type '${mediaType}'. Use image/png, image/jpeg, or image/webp.`, name);
318
+ }
319
+ if (image.length === 0 || image.length > MAX_AVATAR_BYTES) {
320
+ throw MarifoldError_1.MarifoldError.profileInvalid(`Avatar images must be between 1 byte and ${MAX_AVATAR_BYTES / 1024} KB.`, name);
321
+ }
322
+ const profileDir = path.join(this.profilesDir, name);
323
+ const assetsDir = path.join(profileDir, ASSETS_DIR);
324
+ fs.mkdirSync(assetsDir, { recursive: true });
325
+ this.removeAvatarFiles(profileDir); // clears both assets/ and any legacy root avatar
326
+ const filePath = path.join(assetsDir, `avatar.${ext}`);
327
+ fs.writeFileSync(filePath, image);
328
+ return { name, path: filePath, mediaType };
329
+ }
330
+ deleteAvatar(name) {
331
+ assertSafeName(name);
332
+ const profileDir = path.join(this.profilesDir, name);
333
+ if (!fs.existsSync(profileDir))
334
+ return { name, removed: false };
335
+ return { name, removed: this.removeAvatarFiles(profileDir) };
336
+ }
337
+ removeAvatarFiles(profileDir) {
338
+ let removed = false;
339
+ const assetsDir = path.join(profileDir, ASSETS_DIR);
340
+ for (const ext of Object.values(AVATAR_MEDIA_TYPES)) {
341
+ const filePath = path.join(assetsDir, `avatar.${ext}`);
342
+ if (fs.existsSync(filePath)) {
343
+ fs.rmSync(filePath, { force: true });
344
+ removed = true;
345
+ }
346
+ }
347
+ return removed;
348
+ }
349
+ requireProfileDir(name) {
350
+ const profileDir = path.join(this.profilesDir, name);
351
+ if (!fs.existsSync(profileDir) || !fs.statSync(profileDir).isDirectory()) {
352
+ throw MarifoldError_1.MarifoldError.profileInvalid(`Profile '${name}' was not found in ${this.profilesDir}.`, name);
353
+ }
354
+ return profileDir;
355
+ }
356
+ requireStoredProfile(name) {
357
+ const profileDir = path.join(this.profilesDir, name);
358
+ if (fs.existsSync(profileDir) && fs.statSync(profileDir).isDirectory()) {
359
+ return { type: 'directory', path: profileDir };
360
+ }
361
+ const jsonPath = path.join(this.profilesDir, `${name}.json`);
362
+ if (fs.existsSync(jsonPath) && fs.statSync(jsonPath).isFile()) {
363
+ return { type: 'json', path: jsonPath };
364
+ }
365
+ throw MarifoldError_1.MarifoldError.profileInvalid(`Profile '${name}' was not found in ${this.profilesDir}.`, name);
366
+ }
367
+ }
368
+ exports.ProfileManager = ProfileManager;
369
+ /** Locate a profile's avatar file. Shared with ProfileResolver so summaries
370
+ * can flag avatars without duplicating the media-type mapping. */
371
+ function findProfileAvatar(profilesDir, name) {
372
+ const assetsDir = path.join(profilesDir, name, ASSETS_DIR);
373
+ for (const [mediaType, ext] of Object.entries(AVATAR_MEDIA_TYPES)) {
374
+ const filePath = path.join(assetsDir, `avatar.${ext}`);
375
+ if (fs.existsSync(filePath))
376
+ return { path: filePath, mediaType };
377
+ }
378
+ return undefined;
379
+ }
380
+ function writeFile(filePath, content) {
381
+ fs.writeFileSync(filePath, content);
382
+ return filePath;
383
+ }
384
+ function upsertProfileToml(text, provider, model) {
385
+ const cleaned = removeModelOverride(text).trimEnd();
386
+ const prefix = cleaned ? `${cleaned}\n\n` : '';
387
+ return `${prefix}provider = ${tomlString(provider)}\nmodel = ${tomlString(model)}\n`;
388
+ }
389
+ function upsertMode(text, mode) {
390
+ const lines = text.split(/\r?\n/).filter(line => !line.trimStart().startsWith('mode ='));
391
+ const cleaned = lines.join('\n').trimEnd();
392
+ const prefix = cleaned ? `${cleaned}\n\n` : '';
393
+ return `${prefix}mode = ${tomlString(mode)}\n`;
394
+ }
395
+ /** Replace (or, when rendered is undefined, remove) one flat `key = value` line,
396
+ * preserving every other line. Dotted keys (not tables) keep profile.toml a flat
397
+ * list — no table header that would strand later flat-key writes. */
398
+ function upsertFlatLine(text, key, rendered) {
399
+ const lines = text.split(/\r?\n/).filter(line => !line.trimStart().startsWith(`${key} =`));
400
+ const cleaned = lines.join('\n').trimEnd();
401
+ if (rendered === undefined)
402
+ return cleaned ? `${cleaned}\n` : exports.PROFILE_TOML_STUB;
403
+ const prefix = cleaned ? `${cleaned}\n\n` : '';
404
+ return `${prefix}${key} = ${rendered}\n`;
405
+ }
406
+ /** Read the profile's trusted_folders (dotted or table form parses the same). */
407
+ function parseTrustedFolders(text) {
408
+ try {
409
+ const parsed = (0, smol_toml_1.parse)(text);
410
+ const existing = parsed.agent?.trusted_folders;
411
+ if (Array.isArray(existing))
412
+ return existing.filter((v) => typeof v === 'string');
413
+ }
414
+ catch { /* unparseable — start fresh */ }
415
+ return [];
416
+ }
417
+ /** Rewrite the trusted_folders line for the given list (empty list removes it). */
418
+ function renderTrustedFolders(text, folders) {
419
+ return upsertFlatLine(text, 'agent.trusted_folders', folders.length > 0 ? `[${folders.map(tomlString).join(', ')}]` : undefined);
420
+ }
421
+ function upsertTrustedFolder(text, folder) {
422
+ const folders = parseTrustedFolders(text);
423
+ if (!folders.includes(folder))
424
+ folders.push(folder);
425
+ return renderTrustedFolders(text, folders);
426
+ }
427
+ /** Refuse trusting roots that would grant the agent far too much. */
428
+ function assertSafeTrustedFolder(resolved) {
429
+ const home = os.homedir();
430
+ const sensitive = [path.join(home, '.ssh'), path.join(home, '.marifold')];
431
+ const tooBroad = resolved === path.parse(resolved).root // filesystem root
432
+ || resolved === home
433
+ // an ancestor of (or equal to) a sensitive dir.
434
+ || sensitive.some(s => s === resolved || !path.relative(resolved, s).startsWith('..'));
435
+ if (tooBroad) {
436
+ throw MarifoldError_1.MarifoldError.profileInvalid(`Refusing to trust '${resolved}' — too broad or sensitive a folder.`, resolved);
437
+ }
438
+ }
439
+ function upsertMaxContextTokens(text, tokens) {
440
+ const lines = text.split(/\r?\n/).filter(line => !line.trimStart().startsWith('max_context_tokens ='));
441
+ const cleaned = lines.join('\n').trimEnd();
442
+ if (tokens == null || tokens <= 0)
443
+ return cleaned ? `${cleaned}\n` : exports.PROFILE_TOML_STUB;
444
+ const prefix = cleaned ? `${cleaned}\n\n` : '';
445
+ return `${prefix}max_context_tokens = ${Math.round(tokens)}\n`;
446
+ }
447
+ function removeModelOverride(text) {
448
+ const lines = text.split(/\r?\n/).filter(line => {
449
+ const trimmed = line.trimStart();
450
+ return !trimmed.startsWith('provider =') && !trimmed.startsWith('model =');
451
+ });
452
+ const next = lines.join('\n').trimEnd();
453
+ return next ? `${next}\n` : exports.PROFILE_TOML_STUB;
454
+ }
455
+ function assertSafeName(name) {
456
+ if (!SAFE_PROFILE_NAME.test(name)) {
457
+ throw MarifoldError_1.MarifoldError.profileInvalid(`Invalid profile name '${name}'. Use letters, numbers, underscores, or hyphens.`, name);
458
+ }
459
+ }
460
+ function normalizeProfileDisplayName(value, profileName) {
461
+ const normalized = value?.trim();
462
+ if (!normalized)
463
+ return undefined;
464
+ if (/\r|\n/.test(normalized)) {
465
+ throw MarifoldError_1.MarifoldError.profileInvalid('Profile display name must be a single line.', profileName);
466
+ }
467
+ if (normalized.length > 100) {
468
+ throw MarifoldError_1.MarifoldError.profileInvalid('Profile display name must be 100 characters or fewer.', profileName);
469
+ }
470
+ return normalized;
471
+ }
472
+ function tomlString(value) {
473
+ return JSON.stringify(value);
474
+ }
475
+ //# sourceMappingURL=ProfileManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfileManager.js","sourceRoot":"","sources":["../../src/profiles/ProfileManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { Profile, ProfileLoader } from '@priest-ai/core';
2
+ import { ProfileDetail, ProfileSettings, ProfileSummary } from '../config/ConfigSchema';
3
+ export declare class ProfileResolver implements ProfileLoader {
4
+ private readonly profilesDir;
5
+ constructor(profilesDir: string);
6
+ load(name: string): Profile;
7
+ loadSettings(name: string): ProfileSettings;
8
+ list(): ProfileSummary[];
9
+ detail(name: string): ProfileDetail;
10
+ private loadDirectoryProfile;
11
+ private loadJsonProfile;
12
+ private readToml;
13
+ /** Keep profile listing resilient to unrelated invalid settings; opening the
14
+ * profile detail still reports the underlying profile.toml error. */
15
+ private resolveDisplayName;
16
+ private assertSafeName;
17
+ }
18
+ //# sourceMappingURL=ProfileResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfileResolver.d.ts","sourceRoot":"","sources":["../../src/profiles/ProfileResolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAmC,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAgBzH,qBAAa,eAAgB,YAAW,aAAa;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAAxC,YAA6B,WAAW,EAAE,MAAM,EAAI;IAEpD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAU1B;IAED,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CA+B1C;IAED,IAAI,IAAI,cAAc,EAAE,CAwCvB;IAED,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CA4ClC;IAED,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,QAAQ;IAYhB;yEACqE;IACrE,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,cAAc;CAQvB"}