agentvault 1.0.1 → 1.0.2

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 (292) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/dist/cli/commands/approve.js +5 -5
  3. package/dist/cli/commands/archive.js +5 -5
  4. package/dist/cli/commands/backup.js +5 -5
  5. package/dist/cli/commands/cloud-backup.js +12 -12
  6. package/dist/cli/commands/decrypt.js +2 -2
  7. package/dist/cli/commands/deploy.js +1 -1
  8. package/dist/cli/commands/exec.js +2 -2
  9. package/dist/cli/commands/fetch.js +4 -4
  10. package/dist/cli/commands/inference.js +5 -5
  11. package/dist/cli/commands/init.d.ts +1 -1
  12. package/dist/cli/commands/init.js +16 -16
  13. package/dist/cli/commands/list.js +4 -4
  14. package/dist/cli/commands/package.js +2 -2
  15. package/dist/cli/commands/profile.js +1 -1
  16. package/dist/cli/commands/rebuild.js +2 -2
  17. package/dist/cli/commands/show.js +1 -1
  18. package/dist/cli/commands/status.d.ts +1 -1
  19. package/dist/cli/commands/status.js +8 -8
  20. package/dist/cli/commands/trace.js +1 -1
  21. package/dist/cli/commands/wallet-export.js +1 -1
  22. package/dist/cli/commands/wallet-sign.js +1 -1
  23. package/dist/cli/commands/wallet.d.ts +1 -1
  24. package/dist/cli/commands/wallet.js +1 -1
  25. package/dist/cli/index.d.ts +2 -2
  26. package/dist/cli/index.js +3 -3
  27. package/dist/src/archival/archive-manager.d.ts +85 -0
  28. package/dist/src/archival/archive-manager.js +294 -0
  29. package/dist/src/archival/arweave-client.d.ts +88 -0
  30. package/dist/src/archival/arweave-client.js +223 -0
  31. package/dist/src/archival/index.d.ts +8 -0
  32. package/{src/archival/index.ts → dist/src/archival/index.js} +1 -1
  33. package/dist/src/backup/backup.d.ts +67 -0
  34. package/dist/src/backup/backup.js +231 -0
  35. package/dist/src/backup/index.d.ts +7 -0
  36. package/{src/backup/index.ts → dist/src/backup/index.js} +1 -1
  37. package/dist/src/cloud-storage/cloud-sync.d.ts +49 -0
  38. package/dist/src/cloud-storage/cloud-sync.js +372 -0
  39. package/dist/src/cloud-storage/index.d.ts +11 -0
  40. package/{src/cloud-storage/index.ts → dist/src/cloud-storage/index.js} +1 -1
  41. package/dist/src/cloud-storage/provider-detector.d.ts +34 -0
  42. package/dist/src/cloud-storage/provider-detector.js +158 -0
  43. package/{src/cloud-storage/types.ts → dist/src/cloud-storage/types.d.ts} +40 -53
  44. package/dist/src/cloud-storage/types.js +10 -0
  45. package/dist/src/debugging/index.d.ts +6 -0
  46. package/{src/debugging/index.ts → dist/src/debugging/index.js} +1 -1
  47. package/dist/src/debugging/logs.d.ts +32 -0
  48. package/dist/src/debugging/logs.js +158 -0
  49. package/dist/src/debugging/types.d.ts +91 -0
  50. package/dist/src/debugging/types.js +5 -0
  51. package/dist/src/deployment/deployer.d.ts +52 -0
  52. package/dist/src/deployment/deployer.js +211 -0
  53. package/dist/src/deployment/icpClient.d.ts +144 -0
  54. package/dist/src/deployment/icpClient.js +545 -0
  55. package/dist/src/deployment/index.d.ts +11 -0
  56. package/dist/src/deployment/index.js +14 -0
  57. package/dist/src/deployment/promotion.d.ts +32 -0
  58. package/dist/src/deployment/promotion.js +114 -0
  59. package/dist/src/deployment/types.d.ts +101 -0
  60. package/dist/src/deployment/types.js +5 -0
  61. package/dist/src/icp/batch.d.ts +112 -0
  62. package/dist/src/icp/batch.js +273 -0
  63. package/dist/src/icp/cycles.d.ts +29 -0
  64. package/{src/icp/cycles.ts → dist/src/icp/cycles.js} +8 -22
  65. package/dist/src/icp/environment.d.ts +60 -0
  66. package/dist/src/icp/environment.js +183 -0
  67. package/dist/src/icp/icpcli.d.ts +204 -0
  68. package/dist/src/icp/icpcli.js +374 -0
  69. package/dist/src/icp/icwasm.d.ts +94 -0
  70. package/dist/src/icp/icwasm.js +197 -0
  71. package/dist/src/icp/identity.d.ts +50 -0
  72. package/{src/icp/identity.ts → dist/src/icp/identity.js} +15 -28
  73. package/dist/src/icp/index.d.ts +16 -0
  74. package/dist/src/icp/index.js +20 -0
  75. package/dist/src/icp/optimization.d.ts +16 -0
  76. package/dist/src/icp/optimization.js +225 -0
  77. package/dist/src/icp/tokens.d.ts +24 -0
  78. package/{src/icp/tokens.ts → dist/src/icp/tokens.js} +5 -12
  79. package/dist/src/icp/tool-detector.d.ts +31 -0
  80. package/dist/src/icp/tool-detector.js +104 -0
  81. package/dist/src/icp/types.d.ts +493 -0
  82. package/dist/src/icp/types.js +7 -0
  83. package/dist/src/index.d.ts +12 -0
  84. package/dist/src/index.js +18 -0
  85. package/dist/src/inference/bittensor-client.d.ts +108 -0
  86. package/dist/src/inference/bittensor-client.js +224 -0
  87. package/dist/src/inference/index.d.ts +8 -0
  88. package/{src/inference/index.ts → dist/src/inference/index.js} +1 -1
  89. package/dist/src/inference/inference-manager.d.ts +76 -0
  90. package/dist/src/inference/inference-manager.js +228 -0
  91. package/dist/src/metrics/index.d.ts +7 -0
  92. package/{src/metrics/index.ts → dist/src/metrics/index.js} +1 -1
  93. package/dist/src/metrics/metrics.d.ts +39 -0
  94. package/dist/src/metrics/metrics.js +129 -0
  95. package/dist/src/monitoring/alerting.d.ts +51 -0
  96. package/dist/src/monitoring/alerting.js +169 -0
  97. package/dist/src/monitoring/health.d.ts +40 -0
  98. package/dist/src/monitoring/health.js +164 -0
  99. package/dist/src/monitoring/index.d.ts +10 -0
  100. package/dist/src/monitoring/index.js +12 -0
  101. package/dist/src/monitoring/info.d.ts +15 -0
  102. package/dist/src/monitoring/info.js +109 -0
  103. package/dist/src/monitoring/types.d.ts +93 -0
  104. package/dist/src/monitoring/types.js +7 -0
  105. package/dist/src/network/index.d.ts +5 -0
  106. package/{src/network/index.ts → dist/src/network/index.js} +1 -1
  107. package/dist/src/network/network-config.d.ts +31 -0
  108. package/dist/src/network/network-config.js +109 -0
  109. package/dist/src/packaging/compiler.d.ts +61 -0
  110. package/dist/src/packaging/compiler.js +562 -0
  111. package/dist/src/packaging/config-persistence.d.ts +46 -0
  112. package/dist/src/packaging/config-persistence.js +108 -0
  113. package/dist/src/packaging/config-schemas.d.ts +115 -0
  114. package/dist/src/packaging/config-schemas.js +43 -0
  115. package/dist/src/packaging/detector.d.ts +26 -0
  116. package/dist/src/packaging/detector.js +193 -0
  117. package/dist/src/packaging/index.d.ts +16 -0
  118. package/dist/src/packaging/index.js +22 -0
  119. package/dist/src/packaging/packager.d.ts +31 -0
  120. package/dist/src/packaging/packager.js +90 -0
  121. package/dist/src/packaging/parsers/clawdbot.d.ts +19 -0
  122. package/dist/src/packaging/parsers/clawdbot.js +231 -0
  123. package/dist/src/packaging/parsers/cline.d.ts +26 -0
  124. package/dist/src/packaging/parsers/cline.js +185 -0
  125. package/dist/src/packaging/parsers/generic.d.ts +27 -0
  126. package/dist/src/packaging/parsers/generic.js +228 -0
  127. package/dist/src/packaging/parsers/goose.d.ts +26 -0
  128. package/dist/src/packaging/parsers/goose.js +175 -0
  129. package/dist/src/packaging/parsers/index.d.ts +11 -0
  130. package/{src/packaging/parsers/index.ts → dist/src/packaging/parsers/index.js} +1 -1
  131. package/dist/src/packaging/serializer.d.ts +108 -0
  132. package/dist/src/packaging/serializer.js +153 -0
  133. package/dist/src/packaging/types.d.ts +131 -0
  134. package/dist/src/packaging/types.js +5 -0
  135. package/dist/src/packaging/wasmedge-compiler.d.ts +76 -0
  136. package/dist/src/packaging/wasmedge-compiler.js +349 -0
  137. package/dist/src/security/index.d.ts +11 -0
  138. package/{src/security/index.ts → dist/src/security/index.js} +1 -4
  139. package/dist/src/security/multisig.d.ts +102 -0
  140. package/dist/src/security/multisig.js +283 -0
  141. package/dist/src/security/types.d.ts +207 -0
  142. package/dist/src/security/types.js +217 -0
  143. package/dist/src/security/vetkeys.d.ts +179 -0
  144. package/dist/src/security/vetkeys.js +499 -0
  145. package/dist/src/testing/index.d.ts +6 -0
  146. package/{src/testing/index.ts → dist/src/testing/index.js} +1 -1
  147. package/dist/src/testing/local-runner.d.ts +23 -0
  148. package/dist/src/testing/local-runner.js +226 -0
  149. package/dist/src/testing/types.d.ts +98 -0
  150. package/dist/src/testing/types.js +5 -0
  151. package/dist/src/wallet/cbor-serializer.d.ts +82 -0
  152. package/dist/src/wallet/cbor-serializer.js +282 -0
  153. package/dist/src/wallet/chain-dispatcher.d.ts +112 -0
  154. package/dist/src/wallet/chain-dispatcher.js +241 -0
  155. package/dist/src/wallet/cross-chain-aggregator.d.ts +119 -0
  156. package/dist/src/wallet/cross-chain-aggregator.js +235 -0
  157. package/dist/src/wallet/index.d.ts +16 -0
  158. package/dist/src/wallet/index.js +22 -0
  159. package/dist/src/wallet/key-derivation.d.ts +117 -0
  160. package/dist/src/wallet/key-derivation.js +325 -0
  161. package/dist/src/wallet/providers/base-provider.d.ts +111 -0
  162. package/dist/src/wallet/providers/base-provider.js +58 -0
  163. package/dist/src/wallet/providers/cketh-provider.d.ts +104 -0
  164. package/dist/src/wallet/providers/cketh-provider.js +343 -0
  165. package/dist/src/wallet/providers/polkadot-provider.d.ts +115 -0
  166. package/dist/src/wallet/providers/polkadot-provider.js +407 -0
  167. package/dist/src/wallet/providers/solana-provider.d.ts +102 -0
  168. package/dist/src/wallet/providers/solana-provider.js +393 -0
  169. package/dist/src/wallet/transaction-queue.d.ts +133 -0
  170. package/dist/src/wallet/transaction-queue.js +195 -0
  171. package/dist/src/wallet/types.d.ts +167 -0
  172. package/dist/src/wallet/types.js +5 -0
  173. package/dist/src/wallet/vetkeys-adapter.d.ts +134 -0
  174. package/dist/src/wallet/vetkeys-adapter.js +313 -0
  175. package/dist/src/wallet/wallet-manager.d.ts +202 -0
  176. package/dist/src/wallet/wallet-manager.js +451 -0
  177. package/dist/src/wallet/wallet-storage.d.ts +131 -0
  178. package/dist/src/wallet/wallet-storage.js +274 -0
  179. package/macos-wallet-app/AgentVaultWallet/App/AgentVaultWalletApp.swift +54 -0
  180. package/macos-wallet-app/AgentVaultWallet/Models/AppState.swift +102 -0
  181. package/macos-wallet-app/AgentVaultWallet/Models/Chain.swift +121 -0
  182. package/macos-wallet-app/AgentVaultWallet/Models/Wallet.swift +98 -0
  183. package/macos-wallet-app/AgentVaultWallet/Resources/AgentVaultWallet.entitlements +27 -0
  184. package/macos-wallet-app/AgentVaultWallet/Resources/Info.plist +69 -0
  185. package/macos-wallet-app/AgentVaultWallet/Services/BackupService.swift +270 -0
  186. package/macos-wallet-app/AgentVaultWallet/Services/CLIBridge.swift +367 -0
  187. package/macos-wallet-app/AgentVaultWallet/Services/CryptoService.swift +157 -0
  188. package/macos-wallet-app/AgentVaultWallet/Services/FileService.swift +120 -0
  189. package/macos-wallet-app/AgentVaultWallet/Services/KeychainService.swift +219 -0
  190. package/macos-wallet-app/AgentVaultWallet/Utilities/Constants.swift +44 -0
  191. package/macos-wallet-app/AgentVaultWallet/Utilities/Extensions.swift +115 -0
  192. package/macos-wallet-app/AgentVaultWallet/ViewModels/BackupViewModel.swift +237 -0
  193. package/macos-wallet-app/AgentVaultWallet/ViewModels/CreateWalletViewModel.swift +137 -0
  194. package/macos-wallet-app/AgentVaultWallet/ViewModels/ImportWalletViewModel.swift +179 -0
  195. package/macos-wallet-app/AgentVaultWallet/ViewModels/WalletStore.swift +286 -0
  196. package/macos-wallet-app/AgentVaultWallet/Views/Backup/BackupView.swift +235 -0
  197. package/macos-wallet-app/AgentVaultWallet/Views/Backup/RestoreView.swift +316 -0
  198. package/macos-wallet-app/AgentVaultWallet/Views/Create/CreateWalletFlow.swift +438 -0
  199. package/macos-wallet-app/AgentVaultWallet/Views/Import/ImportWalletFlow.swift +399 -0
  200. package/macos-wallet-app/AgentVaultWallet/Views/MainView.swift +134 -0
  201. package/macos-wallet-app/AgentVaultWallet/Views/Settings/SettingsView.swift +276 -0
  202. package/macos-wallet-app/AgentVaultWallet/Views/Sidebar/SidebarView.swift +133 -0
  203. package/macos-wallet-app/AgentVaultWallet/Views/Wallet/DashboardView.swift +233 -0
  204. package/macos-wallet-app/AgentVaultWallet/Views/Wallet/WalletDetailView.swift +281 -0
  205. package/macos-wallet-app/AgentVaultWallet/Views/Wallet/WalletListView.swift +280 -0
  206. package/macos-wallet-app/AgentVaultWallet/Views/Welcome/WelcomeView.swift +176 -0
  207. package/macos-wallet-app/Makefile +47 -0
  208. package/macos-wallet-app/project.yml +40 -0
  209. package/macos-wallet-app/setup.sh +73 -0
  210. package/package.json +10 -2
  211. package/backups/agentvault-backup-test-agent-2026-02-12T17-54-28-967Z.json +0 -28
  212. package/backups/agentvault-backup-test-agent-2026-02-12T17-54-29-032Z.backup +0 -1
  213. package/backups/agentvault-backup-test-agent-2026-02-12T17-57-42-373Z.json +0 -28
  214. package/backups/agentvault-backup-test-agent-2026-02-12T17-57-42-428Z.backup +0 -1
  215. package/backups/agentvault-backup-test-agent-2026-02-12T18-52-25-132Z.json +0 -28
  216. package/backups/agentvault-backup-test-agent-2026-02-12T18-52-25-247Z.backup +0 -1
  217. package/backups/agentvault-backup-test-agent-2026-02-12T18-54-09-216Z.json +0 -28
  218. package/backups/agentvault-backup-test-agent-2026-02-12T18-54-09-283Z.backup +0 -1
  219. package/backups/agentvault-backup-test-agent-2026-02-12T22-18-22-772Z.backup +0 -1
  220. package/backups/agentvault-backup-test-agent-2026-02-12T22-18-22-793Z.json +0 -28
  221. package/backups/test-backup.json +0 -28
  222. package/scripts/dev-dashboard.mjs +0 -84
  223. package/site/README.md +0 -63
  224. package/site/docusaurus.config.ts +0 -148
  225. package/site/package-lock.json +0 -18383
  226. package/site/package.json +0 -47
  227. package/site/sidebars.ts +0 -86
  228. package/site/static/.gitkeep +0 -0
  229. package/site/static/img/logo.svg +0 -28
  230. package/site/static/img/og-image.svg +0 -35
  231. package/src/archival/archive-manager.ts +0 -372
  232. package/src/archival/arweave-client.ts +0 -289
  233. package/src/backup/backup.ts +0 -315
  234. package/src/cloud-storage/cloud-sync.ts +0 -461
  235. package/src/cloud-storage/provider-detector.ts +0 -198
  236. package/src/debugging/logs.ts +0 -193
  237. package/src/debugging/types.ts +0 -100
  238. package/src/deployment/deployer.ts +0 -274
  239. package/src/deployment/icpClient.ts +0 -620
  240. package/src/deployment/index.ts +0 -46
  241. package/src/deployment/promotion.ts +0 -161
  242. package/src/deployment/types.ts +0 -111
  243. package/src/icp/batch.ts +0 -374
  244. package/src/icp/environment.ts +0 -215
  245. package/src/icp/icpcli.ts +0 -438
  246. package/src/icp/icwasm.ts +0 -222
  247. package/src/icp/index.ts +0 -94
  248. package/src/icp/optimization.ts +0 -242
  249. package/src/icp/tool-detector.ts +0 -110
  250. package/src/icp/types.ts +0 -574
  251. package/src/index.ts +0 -25
  252. package/src/inference/bittensor-client.ts +0 -304
  253. package/src/inference/inference-manager.ts +0 -327
  254. package/src/metrics/metrics.ts +0 -186
  255. package/src/monitoring/alerting.ts +0 -190
  256. package/src/monitoring/health.ts +0 -197
  257. package/src/monitoring/index.ts +0 -38
  258. package/src/monitoring/info.ts +0 -114
  259. package/src/monitoring/types.ts +0 -99
  260. package/src/network/network-config.ts +0 -129
  261. package/src/packaging/compiler.ts +0 -647
  262. package/src/packaging/config-persistence.ts +0 -135
  263. package/src/packaging/config-schemas.ts +0 -156
  264. package/src/packaging/detector.ts +0 -220
  265. package/src/packaging/index.ts +0 -90
  266. package/src/packaging/packager.ts +0 -118
  267. package/src/packaging/parsers/clawdbot.ts +0 -278
  268. package/src/packaging/parsers/cline.ts +0 -223
  269. package/src/packaging/parsers/generic.ts +0 -266
  270. package/src/packaging/parsers/goose.ts +0 -214
  271. package/src/packaging/serializer.ts +0 -260
  272. package/src/packaging/types.ts +0 -144
  273. package/src/packaging/wasmedge-compiler.ts +0 -406
  274. package/src/security/multisig.ts +0 -415
  275. package/src/security/types.ts +0 -416
  276. package/src/security/vetkeys.ts +0 -655
  277. package/src/testing/local-runner.ts +0 -264
  278. package/src/testing/types.ts +0 -104
  279. package/src/wallet/cbor-serializer.ts +0 -323
  280. package/src/wallet/chain-dispatcher.ts +0 -313
  281. package/src/wallet/cross-chain-aggregator.ts +0 -346
  282. package/src/wallet/index.ts +0 -76
  283. package/src/wallet/key-derivation.ts +0 -425
  284. package/src/wallet/providers/base-provider.ts +0 -154
  285. package/src/wallet/providers/cketh-provider.ts +0 -434
  286. package/src/wallet/providers/polkadot-provider.ts +0 -503
  287. package/src/wallet/providers/solana-provider.ts +0 -490
  288. package/src/wallet/transaction-queue.ts +0 -284
  289. package/src/wallet/types.ts +0 -178
  290. package/src/wallet/vetkeys-adapter.ts +0 -431
  291. package/src/wallet/wallet-manager.ts +0 -597
  292. package/src/wallet/wallet-storage.ts +0 -380
@@ -1,278 +0,0 @@
1
- /**
2
- * Clawdbot Configuration Parser
3
- *
4
- * Parses Clawdbot agent configuration from .clawdbot directory.
5
- * Reads JSON files and constructs full configuration object.
6
- */
7
-
8
- import * as fs from 'node:fs';
9
- import * as path from 'node:path';
10
- import type {
11
- ClawdbotConfig,
12
- ConfigLocation,
13
- ConfigValidationResult,
14
- } from '../config-schemas.js';
15
- import {
16
- DEFAULT_CLAWDBOT_SETTINGS,
17
- type ClawdbotProject,
18
- type ClawdbotTask,
19
- type ClawdbotSettings,
20
- } from '../config-schemas.js';
21
-
22
- /**
23
- * Find Clawdbot directory or configuration file
24
- */
25
- function findClawdbotConfig(sourcePath: string): ConfigLocation | null {
26
- const absolutePath = path.resolve(sourcePath);
27
-
28
- // Check for .clawdbot directory
29
- const clawdbotDir = path.join(absolutePath, '.clawdbot');
30
- if (fs.existsSync(clawdbotDir)) {
31
- return {
32
- path: clawdbotDir,
33
- type: 'directory',
34
- };
35
- }
36
-
37
- // Check for clawdbot.json or clawdbot.config.json
38
- const configFiles = ['clawdbot.json', 'clawdbot.config.json'];
39
- for (const file of configFiles) {
40
- const filePath = path.join(absolutePath, file);
41
- if (fs.existsSync(filePath)) {
42
- return {
43
- path: filePath,
44
- type: 'json',
45
- };
46
- }
47
- }
48
-
49
- return null;
50
- }
51
-
52
- /**
53
- * Read and parse .clawdbot directory structure
54
- */
55
- function readClawdbotDirectory(dirPath: string): ClawdbotConfig {
56
- try {
57
- // Read projects
58
- const projectsPath = path.join(dirPath, 'projects.json');
59
- let projects: ClawdbotProject[] = [];
60
- if (fs.existsSync(projectsPath)) {
61
- const projectsContent = fs.readFileSync(projectsPath, 'utf-8');
62
- projects = JSON.parse(projectsContent);
63
- }
64
-
65
- // Read tasks
66
- const tasksPath = path.join(dirPath, 'tasks.json');
67
- let tasks: ClawdbotTask[] = [];
68
- if (fs.existsSync(tasksPath)) {
69
- const tasksContent = fs.readFileSync(tasksPath, 'utf-8');
70
- tasks = JSON.parse(tasksContent);
71
- }
72
-
73
- // Read context
74
- const contextPath = path.join(dirPath, 'context.json');
75
- let context: Record<string, unknown> = {};
76
- if (fs.existsSync(contextPath)) {
77
- const contextContent = fs.readFileSync(contextPath, 'utf-8');
78
- context = JSON.parse(contextContent);
79
- }
80
-
81
- // Read settings
82
- const settingsPath = path.join(dirPath, 'settings.json');
83
- let settings: ClawdbotSettings = { ...DEFAULT_CLAWDBOT_SETTINGS };
84
- if (fs.existsSync(settingsPath)) {
85
- const settingsContent = fs.readFileSync(settingsPath, 'utf-8');
86
- const parsedSettings = JSON.parse(settingsContent);
87
- settings = { ...DEFAULT_CLAWDBOT_SETTINGS, ...parsedSettings };
88
- }
89
-
90
- // Read main config file if exists
91
- let name = 'clawdbot-agent';
92
- let version = '1.0.0';
93
- let description = '';
94
-
95
- const configPath = path.join(dirPath, 'config.json');
96
- if (fs.existsSync(configPath)) {
97
- const configContent = fs.readFileSync(configPath, 'utf-8');
98
- const configFile = JSON.parse(configContent);
99
- name = configFile.name || name;
100
- version = configFile.version || version;
101
- description = configFile.description || description;
102
- }
103
-
104
- const parsedConfig: ClawdbotConfig = {
105
- type: 'clawdbot',
106
- name,
107
- version,
108
- description,
109
- projects,
110
- tasks,
111
- context,
112
- settings,
113
- };
114
-
115
- return parsedConfig;
116
- } catch (error) {
117
- const message = error instanceof Error ? error.message : 'Unknown error';
118
- throw new Error(`Failed to parse Clawdbot config: ${message}`);
119
- }
120
- }
121
-
122
- /**
123
- * Validate Clawdbot configuration
124
- */
125
- function validateClawdbotConfig(config: ClawdbotConfig): ConfigValidationResult {
126
- const errors: string[] = [];
127
- const warnings: string[] = [];
128
-
129
- // Validate name
130
- if (!config.name || config.name.trim() === '') {
131
- errors.push('Agent name is required');
132
- }
133
-
134
- // Validate version format
135
- if (config.version) {
136
- const versionRegex = /^\d+\.\d+\.\d+$/;
137
- if (!versionRegex.test(config.version)) {
138
- errors.push(`Invalid version format: ${config.version}. Expected: X.Y.Z`);
139
- }
140
- }
141
-
142
- // Validate settings
143
- if (config.settings) {
144
- // Validate temperature (must be between 0 and 2)
145
- if (config.settings.temperature !== undefined) {
146
- if (config.settings.temperature < 0 || config.settings.temperature > 2) {
147
- errors.push(`Temperature must be between 0 and 2, got: ${config.settings.temperature}`);
148
- }
149
- }
150
-
151
- // Validate maxTokens (must be positive)
152
- if (config.settings.maxTokens !== undefined) {
153
- if (config.settings.maxTokens <= 0) {
154
- errors.push(`maxTokens must be positive, got: ${config.settings.maxTokens}`);
155
- }
156
- }
157
- }
158
-
159
- // Validate projects
160
- if (config.projects && config.projects.length === 0) {
161
- warnings.push('No projects defined in configuration');
162
- }
163
-
164
- // Validate tasks
165
- if (config.tasks && config.tasks.length === 0) {
166
- warnings.push('No tasks defined in configuration');
167
- }
168
-
169
- return {
170
- valid: errors.length === 0,
171
- errors,
172
- warnings,
173
- };
174
- }
175
-
176
- /**
177
- * Parse Clawdbot agent configuration
178
- *
179
- * This function reads .clawdbot directory or clawdbot.json file
180
- * and returns a fully validated configuration object.
181
- */
182
- export async function parseClawdbotConfig(
183
- sourcePath: string,
184
- verbose: boolean = false
185
- ): Promise<ClawdbotConfig> {
186
- if (verbose) {
187
- console.log(`[Clawdbot] Parsing configuration from: ${sourcePath}`);
188
- }
189
-
190
- const configLocation = findClawdbotConfig(sourcePath);
191
-
192
- if (configLocation === null) {
193
- throw new Error(
194
- 'No Clawdbot configuration found. ' +
195
- 'Expected .clawdbot directory or clawdbot.json file in the agent source path.'
196
- );
197
- }
198
-
199
- let config: ClawdbotConfig;
200
-
201
- if (configLocation.type === 'json') {
202
- if (verbose) {
203
- console.log(`[Clawdbot] Found JSON config: ${configLocation.path}`);
204
- }
205
- const content = fs.readFileSync(configLocation.path, 'utf-8');
206
- const parsed = JSON.parse(content);
207
- const settings = { ...DEFAULT_CLAWDBOT_SETTINGS, ...parsed.settings };
208
- config = {
209
- type: 'clawdbot',
210
- name: parsed.name || 'clawdbot-agent',
211
- version: parsed.version || '1.0.0',
212
- description: parsed.description || '',
213
- settings,
214
- projects: parsed.projects || [],
215
- tasks: parsed.tasks || [],
216
- context: parsed.context || {},
217
- };
218
- } else {
219
- if (verbose) {
220
- console.log(`[Clawdbot] Found directory: ${configLocation.path}`);
221
- }
222
- config = readClawdbotDirectory(configLocation.path);
223
- if (verbose) {
224
- console.log(`[Clawdbot] Parsed projects: ${config.projects?.length || 0}`);
225
- console.log(`[Clawdbot] Parsed tasks: ${config.tasks?.length || 0}`);
226
- console.log(`[Clawdbot] Parsed context keys: ${Object.keys(config.context || {}).length}`);
227
- if (config.settings) {
228
- console.log(`[Clawdbot] Model: ${config.settings.model}`);
229
- console.log(`[Clawdbot] Temperature: ${config.settings.temperature}`);
230
- console.log(`[Clawdbot] Max Tokens: ${config.settings.maxTokens}`);
231
- }
232
- }
233
- }
234
-
235
- const validation = validateClawdbotConfig(config);
236
-
237
- if (verbose || !validation.valid) {
238
- if (validation.errors.length > 0) {
239
- console.error('[Clawdbot] Validation errors:');
240
- validation.errors.forEach((error) => console.error(` - ${error}`));
241
- }
242
- if (validation.warnings.length > 0) {
243
- console.warn('[Clawdbot] Warnings:');
244
- validation.warnings.forEach((warning) => console.warn(` - ${warning}`));
245
- }
246
- }
247
-
248
- if (!validation.valid) {
249
- throw new Error(
250
- `Clawdbot configuration validation failed: ${validation.errors.join('; ')}`
251
- );
252
- }
253
-
254
- return config;
255
- }
256
-
257
- /**
258
- * Find all Clawdbot configurations in a directory
259
- */
260
- export async function findClawdbotConfigs(dir: string): Promise<string[]> {
261
- const results: string[] = [];
262
-
263
- const entries = fs.readdirSync(dir, { withFileTypes: true });
264
- for (const entry of entries) {
265
- const entryPath = path.join(dir, entry.name);
266
-
267
- if (entry.isDirectory()) {
268
- try {
269
- await parseClawdbotConfig(entryPath);
270
- results.push(entry.name);
271
- } catch {
272
- // Skip directories that aren't valid Clawdbot configs
273
- }
274
- }
275
- }
276
-
277
- return results;
278
- }
@@ -1,223 +0,0 @@
1
- /**
2
- * Cline Configuration Parser
3
- *
4
- * Parses Cline agent configuration from JSON files.
5
- * Reads cline.json, cline.config.json, or .cline file and constructs configuration object.
6
- */
7
-
8
- import * as fs from 'node:fs';
9
- import * as path from 'node:path';
10
- import type {
11
- ClineConfig,
12
- ConfigLocation,
13
- ConfigValidationResult,
14
- } from '../config-schemas.js';
15
- import {
16
- DEFAULT_CLINE_CONFIG,
17
- } from '../config-schemas.js';
18
-
19
- /**
20
- * Find Cline configuration file
21
- */
22
- function findClineConfig(sourcePath: string): ConfigLocation | null {
23
- const absolutePath = path.resolve(sourcePath);
24
-
25
- // Check for JSON config files
26
- const configFiles = ['cline.json', 'cline.config.json', '.cline'];
27
- for (const file of configFiles) {
28
- const filePath = path.join(absolutePath, file);
29
- if (fs.existsSync(filePath)) {
30
- return {
31
- path: filePath,
32
- type: 'json',
33
- };
34
- }
35
- }
36
-
37
- return null;
38
- }
39
-
40
- /**
41
- * Validate Cline configuration
42
- */
43
- function validateClineConfig(config: ClineConfig): ConfigValidationResult {
44
- const errors: string[] = [];
45
- const warnings: string[] = [];
46
-
47
- // Validate name
48
- if (!config.name || config.name.trim() === '') {
49
- errors.push('Agent name is required');
50
- }
51
-
52
- // Validate mode
53
- if (config.mode && !['auto', 'request'].includes(config.mode)) {
54
- errors.push(`Invalid mode: ${config.mode}. Must be 'auto' or 'request'`);
55
- }
56
-
57
- // Validate claudeVersion format if specified
58
- if (config.claudeVersion) {
59
- // Basic version format validation
60
- const versionRegex = /^\d+\.\d+/;
61
- if (!versionRegex.test(config.claudeVersion)) {
62
- warnings.push(`Unusual claudeVersion format: ${config.claudeVersion}`);
63
- }
64
- }
65
-
66
- // Validate version format
67
- if (config.version) {
68
- const versionRegex = /^\d+\.\d+\.\d+$/;
69
- if (!versionRegex.test(config.version)) {
70
- errors.push(`Invalid version format: ${config.version}. Expected: X.Y.Z`);
71
- }
72
- }
73
-
74
- // Validate working directory exists (if specified)
75
- if (config.workingDirectory) {
76
- const workingDirPath = path.resolve(process.cwd(), config.workingDirectory);
77
- if (!fs.existsSync(workingDirPath)) {
78
- warnings.push(`Working directory does not exist: ${config.workingDirectory}`);
79
- }
80
- }
81
-
82
- // Validate allowedCommands format if specified
83
- if (config.allowedCommands) {
84
- if (!Array.isArray(config.allowedCommands)) {
85
- errors.push('allowedCommands must be an array');
86
- } else {
87
- for (const cmd of config.allowedCommands) {
88
- if (typeof cmd !== 'string' || cmd.trim() === '') {
89
- errors.push(`Invalid command in allowedCommands: ${cmd}`);
90
- }
91
- }
92
- }
93
- }
94
-
95
- // Warn if no allowedCommands defined in auto mode
96
- if (config.mode === 'auto' && (!config.allowedCommands || config.allowedCommands.length === 0)) {
97
- warnings.push('Auto mode without allowedCommands may execute dangerous commands');
98
- }
99
-
100
- return {
101
- valid: errors.length === 0,
102
- errors,
103
- warnings,
104
- };
105
- }
106
-
107
- /**
108
- * Parse Cline agent configuration
109
- *
110
- * This function reads cline.json, cline.config.json, or .cline file
111
- * and returns a fully validated configuration object.
112
- *
113
- * @param sourcePath - Path to agent source directory
114
- * @param verbose - Enable verbose logging
115
- * @returns Parsed and validated Cline configuration
116
- */
117
- export async function parseClineConfig(
118
- sourcePath: string,
119
- verbose: boolean = false
120
- ): Promise<ClineConfig> {
121
- if (verbose) {
122
- console.log(`[Cline] Parsing configuration from: ${sourcePath}`);
123
- }
124
-
125
- const configLocation = findClineConfig(sourcePath);
126
-
127
- if (configLocation === null) {
128
- throw new Error(
129
- 'No Cline configuration found. ' +
130
- 'Expected cline.json, cline.config.json, or .cline file in the agent source path.'
131
- );
132
- }
133
-
134
- if (verbose) {
135
- console.log(`[Cline] Found JSON config: ${configLocation.path}`);
136
- }
137
-
138
- let config: ClineConfig;
139
-
140
- try {
141
- const content = fs.readFileSync(configLocation.path, 'utf-8');
142
- const parsed = JSON.parse(content);
143
-
144
- // Merge with defaults
145
- config = {
146
- type: 'cline',
147
- name: parsed.name || DEFAULT_CLINE_CONFIG.name,
148
- version: parsed.version || DEFAULT_CLINE_CONFIG.version,
149
- description: parsed.description || DEFAULT_CLINE_CONFIG.description,
150
- mode: parsed.mode || DEFAULT_CLINE_CONFIG.mode,
151
- claudeVersion: parsed.claudeVersion,
152
- workingDirectory: parsed.workingDirectory || DEFAULT_CLINE_CONFIG.workingDirectory,
153
- autoConfirm: parsed.autoConfirm !== undefined ? parsed.autoConfirm : DEFAULT_CLINE_CONFIG.autoConfirm,
154
- useReadline: parsed.useReadline !== undefined ? parsed.useReadline : DEFAULT_CLINE_CONFIG.useReadline,
155
- allowedCommands: parsed.allowedCommands || [],
156
- };
157
-
158
- if (verbose) {
159
- console.log(`[Cline] Parsed name: ${config.name}`);
160
- console.log(`[Cline] Parsed version: ${config.version}`);
161
- console.log(`[Cline] Parsed mode: ${config.mode}`);
162
- console.log(`[Cline] Parsed claudeVersion: ${config.claudeVersion || 'default'}`);
163
- console.log(`[Cline] Parsed workingDirectory: ${config.workingDirectory}`);
164
- console.log(`[Cline] Parsed autoConfirm: ${config.autoConfirm}`);
165
- console.log(`[Cline] Parsed useReadline: ${config.useReadline}`);
166
- console.log(`[Cline] Parsed allowedCommands: ${config.allowedCommands?.length || 0}`);
167
- }
168
- } catch (error) {
169
- const message = error instanceof Error ? error.message : 'Unknown error';
170
- throw new Error(`Failed to parse Cline config: ${message}`);
171
- }
172
-
173
- // Validate configuration
174
- const validation = validateClineConfig(config);
175
-
176
- if (!validation.valid) {
177
- const errorMessage = `Cline configuration validation failed:\n${validation.errors.map(e => ` - ${e}`).join('\n')}`;
178
- throw new Error(errorMessage);
179
- }
180
-
181
- // Display warnings if verbose
182
- if (verbose && validation.warnings.length > 0) {
183
- console.log(`[Cline] Warnings:`);
184
- for (const warning of validation.warnings) {
185
- console.log(`[Cline] - ${warning}`);
186
- }
187
- }
188
-
189
- return config;
190
- }
191
-
192
- /**
193
- * Find all Cline configurations in a directory tree
194
- *
195
- * @param rootPath - Root directory to search
196
- * @returns Array of paths to Cline configuration files
197
- */
198
- export function findClineConfigs(rootPath: string): string[] {
199
- const configs: string[] = [];
200
-
201
- function searchDirectory(dirPath: string): void {
202
- const entries = fs.readdirSync(dirPath, { withFileTypes: true });
203
-
204
- for (const entry of entries) {
205
- const fullPath = path.join(dirPath, entry.name);
206
-
207
- if (entry.isDirectory()) {
208
- // Skip node_modules and .git
209
- if (entry.name !== 'node_modules' && entry.name !== '.git') {
210
- searchDirectory(fullPath);
211
- }
212
- } else if (entry.isFile()) {
213
- // Check for Cline config files
214
- if (entry.name === 'cline.json' || entry.name === 'cline.config.json' || entry.name === '.cline') {
215
- configs.push(fullPath);
216
- }
217
- }
218
- }
219
- }
220
-
221
- searchDirectory(rootPath);
222
- return configs;
223
- }