praxis-agent 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (395) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +534 -0
  3. package/dist/application/background-agent-manager.d.ts +66 -0
  4. package/dist/application/background-agent-manager.d.ts.map +1 -0
  5. package/dist/application/background-agent-manager.js +362 -0
  6. package/dist/application/background-agent-manager.js.map +1 -0
  7. package/dist/application/background-bash-manager.d.ts +54 -0
  8. package/dist/application/background-bash-manager.d.ts.map +1 -0
  9. package/dist/application/background-bash-manager.js +354 -0
  10. package/dist/application/background-bash-manager.js.map +1 -0
  11. package/dist/application/background-task-id.d.ts +5 -0
  12. package/dist/application/background-task-id.d.ts.map +1 -0
  13. package/dist/application/background-task-id.js +25 -0
  14. package/dist/application/background-task-id.js.map +1 -0
  15. package/dist/application/claude-project-purge.d.ts +50 -0
  16. package/dist/application/claude-project-purge.d.ts.map +1 -0
  17. package/dist/application/claude-project-purge.js +459 -0
  18. package/dist/application/claude-project-purge.js.map +1 -0
  19. package/dist/application/managed-worktree.d.ts +15 -0
  20. package/dist/application/managed-worktree.d.ts.map +1 -0
  21. package/dist/application/managed-worktree.js +127 -0
  22. package/dist/application/managed-worktree.js.map +1 -0
  23. package/dist/application/model-compactor.d.ts +8 -0
  24. package/dist/application/model-compactor.d.ts.map +1 -0
  25. package/dist/application/model-compactor.js +70 -0
  26. package/dist/application/model-compactor.js.map +1 -0
  27. package/dist/application/scheduled-prompt-manager.d.ts +69 -0
  28. package/dist/application/scheduled-prompt-manager.d.ts.map +1 -0
  29. package/dist/application/scheduled-prompt-manager.js +387 -0
  30. package/dist/application/scheduled-prompt-manager.js.map +1 -0
  31. package/dist/application/session-service.d.ts +142 -0
  32. package/dist/application/session-service.d.ts.map +1 -0
  33. package/dist/application/session-service.js +1690 -0
  34. package/dist/application/session-service.js.map +1 -0
  35. package/dist/application/session-worktree.d.ts +55 -0
  36. package/dist/application/session-worktree.d.ts.map +1 -0
  37. package/dist/application/session-worktree.js +311 -0
  38. package/dist/application/session-worktree.js.map +1 -0
  39. package/dist/application/subagent-service.d.ts +98 -0
  40. package/dist/application/subagent-service.d.ts.map +1 -0
  41. package/dist/application/subagent-service.js +1305 -0
  42. package/dist/application/subagent-service.js.map +1 -0
  43. package/dist/application/tool-use-summary.d.ts +8 -0
  44. package/dist/application/tool-use-summary.d.ts.map +1 -0
  45. package/dist/application/tool-use-summary.js +53 -0
  46. package/dist/application/tool-use-summary.js.map +1 -0
  47. package/dist/application/top-level-agent-manager.d.ts +58 -0
  48. package/dist/application/top-level-agent-manager.d.ts.map +1 -0
  49. package/dist/application/top-level-agent-manager.js +907 -0
  50. package/dist/application/top-level-agent-manager.js.map +1 -0
  51. package/dist/application/workflow-manager.d.ts +61 -0
  52. package/dist/application/workflow-manager.d.ts.map +1 -0
  53. package/dist/application/workflow-manager.js +582 -0
  54. package/dist/application/workflow-manager.js.map +1 -0
  55. package/dist/application/workflow-meta.d.ts +18 -0
  56. package/dist/application/workflow-meta.d.ts.map +1 -0
  57. package/dist/application/workflow-meta.js +146 -0
  58. package/dist/application/workflow-meta.js.map +1 -0
  59. package/dist/application/workflow-runtime.d.ts +29 -0
  60. package/dist/application/workflow-runtime.d.ts.map +1 -0
  61. package/dist/application/workflow-runtime.js +176 -0
  62. package/dist/application/workflow-runtime.js.map +1 -0
  63. package/dist/application/workflow-worktree.d.ts +9 -0
  64. package/dist/application/workflow-worktree.d.ts.map +1 -0
  65. package/dist/application/workflow-worktree.js +11 -0
  66. package/dist/application/workflow-worktree.js.map +1 -0
  67. package/dist/cli/agents-dashboard.d.ts +37 -0
  68. package/dist/cli/agents-dashboard.d.ts.map +1 -0
  69. package/dist/cli/agents-dashboard.js +408 -0
  70. package/dist/cli/agents-dashboard.js.map +1 -0
  71. package/dist/cli/controls.d.ts +15 -0
  72. package/dist/cli/controls.d.ts.map +1 -0
  73. package/dist/cli/controls.js +219 -0
  74. package/dist/cli/controls.js.map +1 -0
  75. package/dist/cli/debug.d.ts +13 -0
  76. package/dist/cli/debug.d.ts.map +1 -0
  77. package/dist/cli/debug.js +37 -0
  78. package/dist/cli/debug.js.map +1 -0
  79. package/dist/cli/interactive.d.ts +63 -0
  80. package/dist/cli/interactive.d.ts.map +1 -0
  81. package/dist/cli/interactive.js +600 -0
  82. package/dist/cli/interactive.js.map +1 -0
  83. package/dist/cli/protocol.d.ts +251 -0
  84. package/dist/cli/protocol.d.ts.map +1 -0
  85. package/dist/cli/protocol.js +2146 -0
  86. package/dist/cli/protocol.js.map +1 -0
  87. package/dist/cli.d.ts +116 -0
  88. package/dist/cli.d.ts.map +1 -0
  89. package/dist/cli.js +3901 -0
  90. package/dist/cli.js.map +1 -0
  91. package/dist/compatibility/claude/compaction.d.ts +19 -0
  92. package/dist/compatibility/claude/compaction.d.ts.map +1 -0
  93. package/dist/compatibility/claude/compaction.js +82 -0
  94. package/dist/compatibility/claude/compaction.js.map +1 -0
  95. package/dist/compatibility/claude/context.d.ts +24 -0
  96. package/dist/compatibility/claude/context.d.ts.map +1 -0
  97. package/dist/compatibility/claude/context.js +92 -0
  98. package/dist/compatibility/claude/context.js.map +1 -0
  99. package/dist/compatibility/claude/dynamic-context.d.ts +20 -0
  100. package/dist/compatibility/claude/dynamic-context.d.ts.map +1 -0
  101. package/dist/compatibility/claude/dynamic-context.js +168 -0
  102. package/dist/compatibility/claude/dynamic-context.js.map +1 -0
  103. package/dist/compatibility/claude/file-history.d.ts +14 -0
  104. package/dist/compatibility/claude/file-history.d.ts.map +1 -0
  105. package/dist/compatibility/claude/file-history.js +340 -0
  106. package/dist/compatibility/claude/file-history.js.map +1 -0
  107. package/dist/compatibility/claude/file-resources.d.ts +28 -0
  108. package/dist/compatibility/claude/file-resources.d.ts.map +1 -0
  109. package/dist/compatibility/claude/file-resources.js +168 -0
  110. package/dist/compatibility/claude/file-resources.js.map +1 -0
  111. package/dist/compatibility/claude/fork.d.ts +9 -0
  112. package/dist/compatibility/claude/fork.d.ts.map +1 -0
  113. package/dist/compatibility/claude/fork.js +225 -0
  114. package/dist/compatibility/claude/fork.js.map +1 -0
  115. package/dist/compatibility/claude/history.d.ts +4 -0
  116. package/dist/compatibility/claude/history.d.ts.map +1 -0
  117. package/dist/compatibility/claude/history.js +86 -0
  118. package/dist/compatibility/claude/history.js.map +1 -0
  119. package/dist/compatibility/claude/ownership.d.ts +87 -0
  120. package/dist/compatibility/claude/ownership.d.ts.map +1 -0
  121. package/dist/compatibility/claude/ownership.js +100 -0
  122. package/dist/compatibility/claude/ownership.js.map +1 -0
  123. package/dist/compatibility/claude/paths.d.ts +17 -0
  124. package/dist/compatibility/claude/paths.d.ts.map +1 -0
  125. package/dist/compatibility/claude/paths.js +54 -0
  126. package/dist/compatibility/claude/paths.js.map +1 -0
  127. package/dist/compatibility/claude/pr-links.d.ts +25 -0
  128. package/dist/compatibility/claude/pr-links.d.ts.map +1 -0
  129. package/dist/compatibility/claude/pr-links.js +80 -0
  130. package/dist/compatibility/claude/pr-links.js.map +1 -0
  131. package/dist/compatibility/claude/projection.d.ts +11 -0
  132. package/dist/compatibility/claude/projection.d.ts.map +1 -0
  133. package/dist/compatibility/claude/projection.js +325 -0
  134. package/dist/compatibility/claude/projection.js.map +1 -0
  135. package/dist/compatibility/claude/schema.d.ts +18 -0
  136. package/dist/compatibility/claude/schema.d.ts.map +1 -0
  137. package/dist/compatibility/claude/schema.js +983 -0
  138. package/dist/compatibility/claude/schema.js.map +1 -0
  139. package/dist/compatibility/claude/shared-resources.d.ts +51 -0
  140. package/dist/compatibility/claude/shared-resources.d.ts.map +1 -0
  141. package/dist/compatibility/claude/shared-resources.js +382 -0
  142. package/dist/compatibility/claude/shared-resources.js.map +1 -0
  143. package/dist/compatibility/claude/sidechain.d.ts +50 -0
  144. package/dist/compatibility/claude/sidechain.d.ts.map +1 -0
  145. package/dist/compatibility/claude/sidechain.js +90 -0
  146. package/dist/compatibility/claude/sidechain.js.map +1 -0
  147. package/dist/compatibility/claude/tool-links.d.ts +13 -0
  148. package/dist/compatibility/claude/tool-links.d.ts.map +1 -0
  149. package/dist/compatibility/claude/tool-links.js +61 -0
  150. package/dist/compatibility/claude/tool-links.js.map +1 -0
  151. package/dist/compatibility/claude/translation.d.ts +71 -0
  152. package/dist/compatibility/claude/translation.d.ts.map +1 -0
  153. package/dist/compatibility/claude/translation.js +443 -0
  154. package/dist/compatibility/claude/translation.js.map +1 -0
  155. package/dist/compatibility/claude/workflow-replay.d.ts +10 -0
  156. package/dist/compatibility/claude/workflow-replay.d.ts.map +1 -0
  157. package/dist/compatibility/claude/workflow-replay.js +66 -0
  158. package/dist/compatibility/claude/workflow-replay.js.map +1 -0
  159. package/dist/compatibility/claude/workflow.d.ts +33 -0
  160. package/dist/compatibility/claude/workflow.d.ts.map +1 -0
  161. package/dist/compatibility/claude/workflow.js +76 -0
  162. package/dist/compatibility/claude/workflow.js.map +1 -0
  163. package/dist/core/compaction.d.ts +16 -0
  164. package/dist/core/compaction.d.ts.map +1 -0
  165. package/dist/core/compaction.js +2 -0
  166. package/dist/core/compaction.js.map +1 -0
  167. package/dist/core/context-budget.d.ts +28 -0
  168. package/dist/core/context-budget.d.ts.map +1 -0
  169. package/dist/core/context-budget.js +108 -0
  170. package/dist/core/context-budget.js.map +1 -0
  171. package/dist/core/context.d.ts +16 -0
  172. package/dist/core/context.d.ts.map +1 -0
  173. package/dist/core/context.js +13 -0
  174. package/dist/core/context.js.map +1 -0
  175. package/dist/core/runtime.d.ts +394 -0
  176. package/dist/core/runtime.d.ts.map +1 -0
  177. package/dist/core/runtime.js +507 -0
  178. package/dist/core/runtime.js.map +1 -0
  179. package/dist/core/usage.d.ts +26 -0
  180. package/dist/core/usage.d.ts.map +1 -0
  181. package/dist/core/usage.js +133 -0
  182. package/dist/core/usage.js.map +1 -0
  183. package/dist/extensions/claude-extension-tools.d.ts +16 -0
  184. package/dist/extensions/claude-extension-tools.d.ts.map +1 -0
  185. package/dist/extensions/claude-extension-tools.js +78 -0
  186. package/dist/extensions/claude-extension-tools.js.map +1 -0
  187. package/dist/extensions/claude-extensions.d.ts +41 -0
  188. package/dist/extensions/claude-extensions.d.ts.map +1 -0
  189. package/dist/extensions/claude-extensions.js +270 -0
  190. package/dist/extensions/claude-extensions.js.map +1 -0
  191. package/dist/hooks/claude-hook-tools.d.ts +26 -0
  192. package/dist/hooks/claude-hook-tools.d.ts.map +1 -0
  193. package/dist/hooks/claude-hook-tools.js +129 -0
  194. package/dist/hooks/claude-hook-tools.js.map +1 -0
  195. package/dist/hooks/claude-hooks.d.ts +87 -0
  196. package/dist/hooks/claude-hooks.d.ts.map +1 -0
  197. package/dist/hooks/claude-hooks.js +411 -0
  198. package/dist/hooks/claude-hooks.js.map +1 -0
  199. package/dist/maintenance/doctor.d.ts +33 -0
  200. package/dist/maintenance/doctor.d.ts.map +1 -0
  201. package/dist/maintenance/doctor.js +391 -0
  202. package/dist/maintenance/doctor.js.map +1 -0
  203. package/dist/maintenance/self-update.d.ts +31 -0
  204. package/dist/maintenance/self-update.d.ts.map +1 -0
  205. package/dist/maintenance/self-update.js +81 -0
  206. package/dist/maintenance/self-update.js.map +1 -0
  207. package/dist/mcp/claude-mcp-management.d.ts +28 -0
  208. package/dist/mcp/claude-mcp-management.d.ts.map +1 -0
  209. package/dist/mcp/claude-mcp-management.js +169 -0
  210. package/dist/mcp/claude-mcp-management.js.map +1 -0
  211. package/dist/mcp/claude-mcp-oauth.d.ts +113 -0
  212. package/dist/mcp/claude-mcp-oauth.d.ts.map +1 -0
  213. package/dist/mcp/claude-mcp-oauth.js +1053 -0
  214. package/dist/mcp/claude-mcp-oauth.js.map +1 -0
  215. package/dist/mcp/claude-mcp-tools.d.ts +98 -0
  216. package/dist/mcp/claude-mcp-tools.d.ts.map +1 -0
  217. package/dist/mcp/claude-mcp-tools.js +1246 -0
  218. package/dist/mcp/claude-mcp-tools.js.map +1 -0
  219. package/dist/mcp/praxis-mcp-server.d.ts +35 -0
  220. package/dist/mcp/praxis-mcp-server.d.ts.map +1 -0
  221. package/dist/mcp/praxis-mcp-server.js +520 -0
  222. package/dist/mcp/praxis-mcp-server.js.map +1 -0
  223. package/dist/permissions/claude-auto-classifier.d.ts +20 -0
  224. package/dist/permissions/claude-auto-classifier.d.ts.map +1 -0
  225. package/dist/permissions/claude-auto-classifier.js +140 -0
  226. package/dist/permissions/claude-auto-classifier.js.map +1 -0
  227. package/dist/permissions/claude-permission-resolver.d.ts +30 -0
  228. package/dist/permissions/claude-permission-resolver.d.ts.map +1 -0
  229. package/dist/permissions/claude-permission-resolver.js +334 -0
  230. package/dist/permissions/claude-permission-resolver.js.map +1 -0
  231. package/dist/persistence/claude-job-store.d.ts +68 -0
  232. package/dist/persistence/claude-job-store.d.ts.map +1 -0
  233. package/dist/persistence/claude-job-store.js +311 -0
  234. package/dist/persistence/claude-job-store.js.map +1 -0
  235. package/dist/persistence/claude-scheduled-task-store.d.ts +29 -0
  236. package/dist/persistence/claude-scheduled-task-store.d.ts.map +1 -0
  237. package/dist/persistence/claude-scheduled-task-store.js +163 -0
  238. package/dist/persistence/claude-scheduled-task-store.js.map +1 -0
  239. package/dist/persistence/claude-sidechain-store.d.ts +18 -0
  240. package/dist/persistence/claude-sidechain-store.d.ts.map +1 -0
  241. package/dist/persistence/claude-sidechain-store.js +107 -0
  242. package/dist/persistence/claude-sidechain-store.js.map +1 -0
  243. package/dist/persistence/claude-task-store.d.ts +72 -0
  244. package/dist/persistence/claude-task-store.d.ts.map +1 -0
  245. package/dist/persistence/claude-task-store.js +440 -0
  246. package/dist/persistence/claude-task-store.js.map +1 -0
  247. package/dist/persistence/claude-transcript-store.d.ts +85 -0
  248. package/dist/persistence/claude-transcript-store.d.ts.map +1 -0
  249. package/dist/persistence/claude-transcript-store.js +385 -0
  250. package/dist/persistence/claude-transcript-store.js.map +1 -0
  251. package/dist/persistence/claude-workflow-store.d.ts +41 -0
  252. package/dist/persistence/claude-workflow-store.d.ts.map +1 -0
  253. package/dist/persistence/claude-workflow-store.js +263 -0
  254. package/dist/persistence/claude-workflow-store.js.map +1 -0
  255. package/dist/persistence/in-memory-sidechain-store.d.ts +12 -0
  256. package/dist/persistence/in-memory-sidechain-store.d.ts.map +1 -0
  257. package/dist/persistence/in-memory-sidechain-store.js +30 -0
  258. package/dist/persistence/in-memory-sidechain-store.js.map +1 -0
  259. package/dist/persistence/in-memory-transcript-store.d.ts +15 -0
  260. package/dist/persistence/in-memory-transcript-store.d.ts.map +1 -0
  261. package/dist/persistence/in-memory-transcript-store.js +95 -0
  262. package/dist/persistence/in-memory-transcript-store.js.map +1 -0
  263. package/dist/platform/atomic-write.d.ts +5 -0
  264. package/dist/platform/atomic-write.d.ts.map +1 -0
  265. package/dist/platform/atomic-write.js +25 -0
  266. package/dist/platform/atomic-write.js.map +1 -0
  267. package/dist/platform/bounded-process-runner.d.ts +28 -0
  268. package/dist/platform/bounded-process-runner.d.ts.map +1 -0
  269. package/dist/platform/bounded-process-runner.js +209 -0
  270. package/dist/platform/bounded-process-runner.js.map +1 -0
  271. package/dist/platform/claude-version.d.ts +5 -0
  272. package/dist/platform/claude-version.d.ts.map +1 -0
  273. package/dist/platform/claude-version.js +17 -0
  274. package/dist/platform/claude-version.js.map +1 -0
  275. package/dist/platform/command-shell.d.ts +3 -0
  276. package/dist/platform/command-shell.d.ts.map +1 -0
  277. package/dist/platform/command-shell.js +15 -0
  278. package/dist/platform/command-shell.js.map +1 -0
  279. package/dist/platform/exclusive-file-lease.d.ts +15 -0
  280. package/dist/platform/exclusive-file-lease.d.ts.map +1 -0
  281. package/dist/platform/exclusive-file-lease.js +265 -0
  282. package/dist/platform/exclusive-file-lease.js.map +1 -0
  283. package/dist/platform/sensitive-data.d.ts +8 -0
  284. package/dist/platform/sensitive-data.d.ts.map +1 -0
  285. package/dist/platform/sensitive-data.js +138 -0
  286. package/dist/platform/sensitive-data.js.map +1 -0
  287. package/dist/platform/tmux-worktree.d.ts +30 -0
  288. package/dist/platform/tmux-worktree.d.ts.map +1 -0
  289. package/dist/platform/tmux-worktree.js +138 -0
  290. package/dist/platform/tmux-worktree.js.map +1 -0
  291. package/dist/plugins/claude-plugin-eval-discovery.d.ts +20 -0
  292. package/dist/plugins/claude-plugin-eval-discovery.d.ts.map +1 -0
  293. package/dist/plugins/claude-plugin-eval-discovery.js +128 -0
  294. package/dist/plugins/claude-plugin-eval-discovery.js.map +1 -0
  295. package/dist/plugins/claude-plugin-eval-graders.d.ts +49 -0
  296. package/dist/plugins/claude-plugin-eval-graders.d.ts.map +1 -0
  297. package/dist/plugins/claude-plugin-eval-graders.js +137 -0
  298. package/dist/plugins/claude-plugin-eval-graders.js.map +1 -0
  299. package/dist/plugins/claude-plugin-eval-runner.d.ts +50 -0
  300. package/dist/plugins/claude-plugin-eval-runner.d.ts.map +1 -0
  301. package/dist/plugins/claude-plugin-eval-runner.js +189 -0
  302. package/dist/plugins/claude-plugin-eval-runner.js.map +1 -0
  303. package/dist/plugins/claude-plugin-eval-schema.d.ts +80 -0
  304. package/dist/plugins/claude-plugin-eval-schema.d.ts.map +1 -0
  305. package/dist/plugins/claude-plugin-eval-schema.js +436 -0
  306. package/dist/plugins/claude-plugin-eval-schema.js.map +1 -0
  307. package/dist/plugins/claude-plugin-eval.d.ts +66 -0
  308. package/dist/plugins/claude-plugin-eval.d.ts.map +1 -0
  309. package/dist/plugins/claude-plugin-eval.js +438 -0
  310. package/dist/plugins/claude-plugin-eval.js.map +1 -0
  311. package/dist/plugins/claude-plugin-maintenance.d.ts +39 -0
  312. package/dist/plugins/claude-plugin-maintenance.d.ts.map +1 -0
  313. package/dist/plugins/claude-plugin-maintenance.js +336 -0
  314. package/dist/plugins/claude-plugin-maintenance.js.map +1 -0
  315. package/dist/plugins/claude-plugin-marketplace.d.ts +97 -0
  316. package/dist/plugins/claude-plugin-marketplace.d.ts.map +1 -0
  317. package/dist/plugins/claude-plugin-marketplace.js +1433 -0
  318. package/dist/plugins/claude-plugin-marketplace.js.map +1 -0
  319. package/dist/plugins/claude-plugin-mcpb.d.ts +71 -0
  320. package/dist/plugins/claude-plugin-mcpb.d.ts.map +1 -0
  321. package/dist/plugins/claude-plugin-mcpb.js +885 -0
  322. package/dist/plugins/claude-plugin-mcpb.js.map +1 -0
  323. package/dist/plugins/claude-plugin-runtime.d.ts +120 -0
  324. package/dist/plugins/claude-plugin-runtime.d.ts.map +1 -0
  325. package/dist/plugins/claude-plugin-runtime.js +1263 -0
  326. package/dist/plugins/claude-plugin-runtime.js.map +1 -0
  327. package/dist/providers/anthropic-compatible.d.ts +35 -0
  328. package/dist/providers/anthropic-compatible.d.ts.map +1 -0
  329. package/dist/providers/anthropic-compatible.js +733 -0
  330. package/dist/providers/anthropic-compatible.js.map +1 -0
  331. package/dist/providers/environment.d.ts +14 -0
  332. package/dist/providers/environment.d.ts.map +1 -0
  333. package/dist/providers/environment.js +67 -0
  334. package/dist/providers/environment.js.map +1 -0
  335. package/dist/providers/fallback-provider.d.ts +17 -0
  336. package/dist/providers/fallback-provider.d.ts.map +1 -0
  337. package/dist/providers/fallback-provider.js +70 -0
  338. package/dist/providers/fallback-provider.js.map +1 -0
  339. package/dist/providers/openai-compatible.d.ts +30 -0
  340. package/dist/providers/openai-compatible.d.ts.map +1 -0
  341. package/dist/providers/openai-compatible.js +409 -0
  342. package/dist/providers/openai-compatible.js.map +1 -0
  343. package/dist/tools/claude-interactive-tools.d.ts +58 -0
  344. package/dist/tools/claude-interactive-tools.d.ts.map +1 -0
  345. package/dist/tools/claude-interactive-tools.js +390 -0
  346. package/dist/tools/claude-interactive-tools.js.map +1 -0
  347. package/dist/tools/claude-lsp-formatters.d.ts +2 -0
  348. package/dist/tools/claude-lsp-formatters.d.ts.map +1 -0
  349. package/dist/tools/claude-lsp-formatters.js +291 -0
  350. package/dist/tools/claude-lsp-formatters.js.map +1 -0
  351. package/dist/tools/claude-lsp-tool.d.ts +22 -0
  352. package/dist/tools/claude-lsp-tool.d.ts.map +1 -0
  353. package/dist/tools/claude-lsp-tool.js +744 -0
  354. package/dist/tools/claude-lsp-tool.js.map +1 -0
  355. package/dist/tools/claude-scheduled-tools.d.ts +20 -0
  356. package/dist/tools/claude-scheduled-tools.d.ts.map +1 -0
  357. package/dist/tools/claude-scheduled-tools.js +344 -0
  358. package/dist/tools/claude-scheduled-tools.js.map +1 -0
  359. package/dist/tools/claude-task-tools.d.ts +30 -0
  360. package/dist/tools/claude-task-tools.d.ts.map +1 -0
  361. package/dist/tools/claude-task-tools.js +503 -0
  362. package/dist/tools/claude-task-tools.js.map +1 -0
  363. package/dist/tools/claude-user-message.d.ts +16 -0
  364. package/dist/tools/claude-user-message.d.ts.map +1 -0
  365. package/dist/tools/claude-user-message.js +98 -0
  366. package/dist/tools/claude-user-message.js.map +1 -0
  367. package/dist/tools/claude-workflow-tools.d.ts +27 -0
  368. package/dist/tools/claude-workflow-tools.d.ts.map +1 -0
  369. package/dist/tools/claude-workflow-tools.js +257 -0
  370. package/dist/tools/claude-workflow-tools.js.map +1 -0
  371. package/dist/tools/claude-worktree-tools.d.ts +17 -0
  372. package/dist/tools/claude-worktree-tools.d.ts.map +1 -0
  373. package/dist/tools/claude-worktree-tools.js +135 -0
  374. package/dist/tools/claude-worktree-tools.js.map +1 -0
  375. package/dist/tools/filtered-tool-registry.d.ts +16 -0
  376. package/dist/tools/filtered-tool-registry.d.ts.map +1 -0
  377. package/dist/tools/filtered-tool-registry.js +51 -0
  378. package/dist/tools/filtered-tool-registry.js.map +1 -0
  379. package/dist/tools/glob.d.ts +9 -0
  380. package/dist/tools/glob.d.ts.map +1 -0
  381. package/dist/tools/glob.js +88 -0
  382. package/dist/tools/glob.js.map +1 -0
  383. package/dist/tools/local-tools.d.ts +47 -0
  384. package/dist/tools/local-tools.d.ts.map +1 -0
  385. package/dist/tools/local-tools.js +1082 -0
  386. package/dist/tools/local-tools.js.map +1 -0
  387. package/dist/tools/notebook.d.ts +22 -0
  388. package/dist/tools/notebook.d.ts.map +1 -0
  389. package/dist/tools/notebook.js +154 -0
  390. package/dist/tools/notebook.js.map +1 -0
  391. package/dist/tools/web.d.ts +48 -0
  392. package/dist/tools/web.d.ts.map +1 -0
  393. package/dist/tools/web.js +726 -0
  394. package/dist/tools/web.js.map +1 -0
  395. package/package.json +145 -0
@@ -0,0 +1,168 @@
1
+ import { mkdir, rename, rm, writeFile } from 'node:fs/promises';
2
+ import { dirname, isAbsolute, normalize, relative, resolve } from 'node:path';
3
+ const DEFAULT_CONCURRENCY = 5;
4
+ const DEFAULT_MAX_FILE_SIZE_BYTES = 500 * 1024 * 1024;
5
+ const MAX_RETRIES = 3;
6
+ const RETRY_DELAY_MS = 500;
7
+ const DEFAULT_TIMEOUT_MS = 60_000;
8
+ function validFileId(fileId) {
9
+ return fileId.length > 0 && !/[\\/\s\0]/u.test(fileId);
10
+ }
11
+ function safeRelativePath(relativePath) {
12
+ if (!relativePath ||
13
+ relativePath.includes('\0') ||
14
+ isAbsolute(relativePath)) {
15
+ throw new Error(`Invalid file resource path: ${relativePath || '<empty>'}`);
16
+ }
17
+ const cleaned = relativePath.replaceAll('\\', '/');
18
+ const normalized = normalize(cleaned);
19
+ if (normalized === '.' ||
20
+ normalized === '..' ||
21
+ normalized.startsWith('../')) {
22
+ throw new Error(`File resource path escapes the session uploads directory: ${relativePath}`);
23
+ }
24
+ return normalized;
25
+ }
26
+ export function parseClaudeFileSpecs(values) {
27
+ const resources = [];
28
+ for (const value of values) {
29
+ for (const spec of value.split(/\s+/u).filter(Boolean)) {
30
+ const separator = spec.indexOf(':');
31
+ if (separator <= 0 || separator === spec.length - 1) {
32
+ throw new Error(`Invalid --file spec ${spec}; expected file_id:relative_path`);
33
+ }
34
+ const fileId = spec.slice(0, separator);
35
+ if (!validFileId(fileId)) {
36
+ throw new Error(`Invalid --file file ID: ${fileId}`);
37
+ }
38
+ const path = safeRelativePath(spec.slice(separator + 1));
39
+ resources.push({ fileId, relativePath: path });
40
+ }
41
+ }
42
+ return resources;
43
+ }
44
+ export function buildClaudeFileResourcePath(cwd, sessionId, relativePath) {
45
+ const path = safeRelativePath(relativePath);
46
+ const uploads = resolve(cwd, sessionId, 'uploads');
47
+ const target = resolve(uploads, path);
48
+ const escape = relative(uploads, target);
49
+ if (escape === '..' || escape.startsWith('../') || isAbsolute(escape)) {
50
+ throw new Error(`File resource path escapes the session uploads directory: ${relativePath}`);
51
+ }
52
+ return target;
53
+ }
54
+ function filesEndpoint(baseUrl, fileId) {
55
+ const base = baseUrl.replace(/\/+$/u, '');
56
+ const path = base.endsWith('/v1') ? `${base}/files` : `${base}/v1/files`;
57
+ return `${path}/${encodeURIComponent(fileId)}/content`;
58
+ }
59
+ function retryableStatus(status) {
60
+ return status >= 500 || status === 408 || status === 429;
61
+ }
62
+ async function delay(milliseconds, signal) {
63
+ await new Promise((resolveDelay, reject) => {
64
+ const timer = setTimeout(resolveDelay, milliseconds);
65
+ if (!signal)
66
+ return;
67
+ if (signal.aborted) {
68
+ clearTimeout(timer);
69
+ reject(signal.reason ?? new Error('File download aborted'));
70
+ return;
71
+ }
72
+ signal.addEventListener('abort', () => {
73
+ clearTimeout(timer);
74
+ reject(signal.reason ?? new Error('File download aborted'));
75
+ }, { once: true });
76
+ });
77
+ }
78
+ async function downloadOne(resource, config) {
79
+ const path = buildClaudeFileResourcePath(config.cwd, config.sessionId, resource.relativePath);
80
+ const fetcher = config.fetchImpl ?? fetch;
81
+ const maxSize = config.maxFileSizeBytes ?? DEFAULT_MAX_FILE_SIZE_BYTES;
82
+ let lastError = 'download failed';
83
+ for (let attempt = 1; attempt <= MAX_RETRIES; attempt += 1) {
84
+ try {
85
+ const timeoutSignal = AbortSignal.timeout(config.timeoutMs ?? DEFAULT_TIMEOUT_MS);
86
+ const requestSignal = config.signal
87
+ ? AbortSignal.any([config.signal, timeoutSignal])
88
+ : timeoutSignal;
89
+ const response = await fetcher(filesEndpoint(config.baseUrl, resource.fileId), {
90
+ headers: config.headers ?? {
91
+ Authorization: `Bearer ${config.apiKey}`,
92
+ },
93
+ signal: requestSignal,
94
+ });
95
+ if (!response.ok) {
96
+ lastError = `HTTP ${response.status}`;
97
+ if (!retryableStatus(response.status) || attempt === MAX_RETRIES) {
98
+ return { ...resource, path, success: false, error: lastError };
99
+ }
100
+ }
101
+ else {
102
+ const contentLength = response.headers.get('content-length');
103
+ if (contentLength && Number(contentLength) > maxSize) {
104
+ return {
105
+ ...resource,
106
+ path,
107
+ success: false,
108
+ error: `file exceeds ${maxSize} bytes`,
109
+ };
110
+ }
111
+ const content = Buffer.from(await response.arrayBuffer());
112
+ if (content.length > maxSize) {
113
+ return {
114
+ ...resource,
115
+ path,
116
+ success: false,
117
+ error: `file exceeds ${maxSize} bytes`,
118
+ };
119
+ }
120
+ const temporary = `${path}.praxis-${process.pid}-${Math.random().toString(16).slice(2)}.tmp`;
121
+ await mkdir(dirname(path), { recursive: true });
122
+ try {
123
+ await writeFile(temporary, content, { flag: 'wx' });
124
+ await rename(temporary, path);
125
+ }
126
+ finally {
127
+ await rm(temporary, { force: true });
128
+ }
129
+ return {
130
+ ...resource,
131
+ path,
132
+ success: true,
133
+ bytesWritten: content.length,
134
+ };
135
+ }
136
+ }
137
+ catch (error) {
138
+ if (config.signal?.aborted)
139
+ throw error;
140
+ lastError = error instanceof Error ? error.message : String(error);
141
+ if (attempt === MAX_RETRIES) {
142
+ return { ...resource, path, success: false, error: lastError };
143
+ }
144
+ }
145
+ await delay(RETRY_DELAY_MS * 2 ** (attempt - 1), config.signal);
146
+ }
147
+ return { ...resource, path, success: false, error: lastError };
148
+ }
149
+ export async function downloadClaudeFileResources(resources, config) {
150
+ if (resources.length === 0)
151
+ return [];
152
+ const concurrency = Math.max(1, Math.floor(config.concurrency ?? DEFAULT_CONCURRENCY));
153
+ const results = new Array(resources.length);
154
+ let next = 0;
155
+ const worker = async () => {
156
+ while (true) {
157
+ const index = next;
158
+ next += 1;
159
+ const resource = resources[index];
160
+ if (!resource)
161
+ return;
162
+ results[index] = await downloadOne(resource, config);
163
+ }
164
+ };
165
+ await Promise.all(Array.from({ length: Math.min(concurrency, resources.length) }, worker));
166
+ return results;
167
+ }
168
+ //# sourceMappingURL=file-resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-resources.js","sourceRoot":"","sources":["../../../src/compatibility/claude/file-resources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type ClaudeTranscriptEntry } from './schema.js';
2
+ export interface ClaudeNativeForkOptions {
3
+ source: readonly ClaudeTranscriptEntry[];
4
+ sourceSessionId: string;
5
+ sessionId: string;
6
+ resumeSessionAt?: string;
7
+ }
8
+ export declare function createClaudeNativeFork({ source, sourceSessionId, sessionId, resumeSessionAt, }: ClaudeNativeForkOptions): ClaudeTranscriptEntry[];
9
+ //# sourceMappingURL=fork.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fork.d.ts","sourceRoot":"","sources":["../../../src/compatibility/claude/fork.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,aAAa,CAAA;AAEpB,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,SAAS,qBAAqB,EAAE,CAAA;IACxC,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AA0JD,wBAAgB,sBAAsB,CAAC,EACrC,MAAM,EACN,eAAe,EACf,SAAS,EACT,eAAe,GAChB,EAAE,uBAAuB,GAAG,qBAAqB,EAAE,CAmFnD"}
@@ -0,0 +1,225 @@
1
+ import { getClaudeContentBlocks } from './tool-links.js';
2
+ import { selectClaudeTranscriptAtMessage } from './history.js';
3
+ import { copyClaudeEntryWithSessionId, isClaudeForkableEntryType, } from './schema.js';
4
+ const TRANSIENT_ENTRY_TYPES = new Set([
5
+ 'file-history-delta',
6
+ 'file-history-snapshot',
7
+ 'queue-operation',
8
+ ]);
9
+ function advancesLogicalTail(entry) {
10
+ if (entry.type === 'system' && entry.subtype === 'compact_boundary') {
11
+ return false;
12
+ }
13
+ if (entry.type !== 'attachment')
14
+ return true;
15
+ const attachment = entry.attachment;
16
+ if (typeof attachment !== 'object' || attachment === null)
17
+ return true;
18
+ const attachmentType = attachment.type;
19
+ return (attachmentType !== 'hook_success' &&
20
+ attachmentType !== 'hook_error' &&
21
+ attachmentType !== 'hook_additional_context');
22
+ }
23
+ function validateNativeHistory(entries) {
24
+ const entriesByUuid = new Map();
25
+ const toolCalls = new Map();
26
+ for (const entry of entries) {
27
+ if (typeof entry.uuid !== 'string')
28
+ continue;
29
+ if (entriesByUuid.has(entry.uuid)) {
30
+ throw new Error(`Claude fork source has duplicate UUID ${entry.uuid}`);
31
+ }
32
+ entriesByUuid.set(entry.uuid, entry);
33
+ if (entry.type !== 'assistant')
34
+ continue;
35
+ for (const block of getClaudeContentBlocks(entry)) {
36
+ if (block.type !== 'tool_use')
37
+ continue;
38
+ const id = block.id;
39
+ if (typeof id !== 'string')
40
+ continue;
41
+ if (toolCalls.has(id)) {
42
+ throw new Error(`Claude fork source has duplicate tool_use ${id}`);
43
+ }
44
+ toolCalls.set(id, entry.uuid);
45
+ }
46
+ }
47
+ const childParentUuids = new Set();
48
+ const externalParentUuids = new Set();
49
+ const completedToolCalls = new Set();
50
+ let ordinaryRootCount = 0;
51
+ let compactBoundary;
52
+ let logicalTailUuid;
53
+ for (const entry of entries) {
54
+ const isCompactSummary = entry.isCompactSummary === true;
55
+ if (compactBoundary && !isCompactSummary) {
56
+ throw new Error('Claude compact boundary has no adjacent summary');
57
+ }
58
+ if (isCompactSummary) {
59
+ if (!compactBoundary || entry.parentUuid !== compactBoundary.uuid) {
60
+ throw new Error('Claude compact summary has no matching boundary');
61
+ }
62
+ compactBoundary = undefined;
63
+ }
64
+ else if (entry.type === 'system' &&
65
+ entry.subtype === 'compact_boundary') {
66
+ const metadata = entry.compactMetadata;
67
+ const preservedSegment = typeof metadata === 'object' && metadata !== null
68
+ ? metadata.preservedSegment
69
+ : undefined;
70
+ if (typeof preservedSegment !== 'object' ||
71
+ preservedSegment === null ||
72
+ entry.logicalParentUuid !== logicalTailUuid ||
73
+ preservedSegment.headUuid !==
74
+ logicalTailUuid ||
75
+ preservedSegment.tailUuid !==
76
+ logicalTailUuid) {
77
+ throw new Error('Claude compact boundary has invalid logical parent');
78
+ }
79
+ compactBoundary = entry;
80
+ }
81
+ if (typeof entry.uuid === 'string') {
82
+ if (entry.parentUuid === null &&
83
+ !(entry.type === 'system' && entry.subtype === 'compact_boundary')) {
84
+ ordinaryRootCount += 1;
85
+ }
86
+ else if (typeof entry.parentUuid === 'string') {
87
+ if (entriesByUuid.has(entry.parentUuid)) {
88
+ childParentUuids.add(entry.parentUuid);
89
+ }
90
+ else {
91
+ externalParentUuids.add(entry.parentUuid);
92
+ }
93
+ }
94
+ }
95
+ if (typeof entry.uuid === 'string' && advancesLogicalTail(entry)) {
96
+ logicalTailUuid = entry.uuid;
97
+ }
98
+ for (const block of getClaudeContentBlocks(entry)) {
99
+ if (entry.type !== 'user' || block.type !== 'tool_result')
100
+ continue;
101
+ const id = block.tool_use_id;
102
+ if (typeof id !== 'string' ||
103
+ typeof entry.sourceToolAssistantUUID !== 'string' ||
104
+ toolCalls.get(id) !== entry.sourceToolAssistantUUID) {
105
+ throw new Error('Claude fork source has an unmatched tool_result');
106
+ }
107
+ if (completedToolCalls.has(id)) {
108
+ throw new Error(`Claude fork source has duplicate tool_result ${id}`);
109
+ }
110
+ completedToolCalls.add(id);
111
+ }
112
+ }
113
+ if (compactBoundary) {
114
+ throw new Error('Claude compact boundary has no adjacent summary');
115
+ }
116
+ if (externalParentUuids.size > 0 || ordinaryRootCount > 1) {
117
+ throw new Error('Claude fork source has a dangling parentUuid');
118
+ }
119
+ const states = new Map();
120
+ for (const startUuid of entriesByUuid.keys()) {
121
+ if (states.get(startUuid) === 'visited')
122
+ continue;
123
+ const path = [];
124
+ let uuid = startUuid;
125
+ while (uuid !== undefined && entriesByUuid.has(uuid)) {
126
+ const state = states.get(uuid);
127
+ if (state === 'visiting') {
128
+ throw new Error('Claude fork source parentUuid graph has a cycle');
129
+ }
130
+ if (state === 'visited')
131
+ break;
132
+ states.set(uuid, 'visiting');
133
+ path.push(uuid);
134
+ const parentUuid = entriesByUuid.get(uuid)?.parentUuid;
135
+ uuid = typeof parentUuid === 'string' ? parentUuid : undefined;
136
+ }
137
+ for (const pathUuid of path)
138
+ states.set(pathUuid, 'visited');
139
+ }
140
+ for (let index = entries.length - 1; index >= 0; index -= 1) {
141
+ const uuid = entries[index]?.uuid;
142
+ if (typeof uuid === 'string' && !childParentUuids.has(uuid))
143
+ return uuid;
144
+ }
145
+ return undefined;
146
+ }
147
+ export function createClaudeNativeFork({ source, sourceSessionId, sessionId, resumeSessionAt, }) {
148
+ const titles = [];
149
+ const modes = [];
150
+ const permissionModes = [];
151
+ const prLinks = [];
152
+ const history = [];
153
+ const nativeHistory = [];
154
+ let lastPrompt;
155
+ let nativeLastPrompt;
156
+ const activeSource = resumeSessionAt === undefined
157
+ ? source
158
+ : selectClaudeTranscriptAtMessage(source, resumeSessionAt);
159
+ for (const entry of activeSource) {
160
+ if (TRANSIENT_ENTRY_TYPES.has(entry.type)) {
161
+ if ((entry.type === 'queue-operation' &&
162
+ entry.sessionId !== sourceSessionId) ||
163
+ (entry.type !== 'queue-operation' &&
164
+ entry.sessionId !== undefined &&
165
+ entry.sessionId !== sourceSessionId)) {
166
+ throw new Error('Claude fork source entry has the wrong sessionId');
167
+ }
168
+ continue;
169
+ }
170
+ if (entry.isSidechain === true) {
171
+ if (!isClaudeForkableEntryType(entry.type)) {
172
+ throw new Error(`Claude transcript entry type ${entry.type} is not forkable by Praxis`);
173
+ }
174
+ if (typeof entry.sessionId !== 'string' || entry.sessionId.length === 0) {
175
+ throw new Error('Claude fork entry has no sessionId');
176
+ }
177
+ continue;
178
+ }
179
+ if (!isClaudeForkableEntryType(entry.type)) {
180
+ throw new Error(`Claude transcript entry type ${entry.type} is not forkable by Praxis`);
181
+ }
182
+ if (typeof entry.sessionId !== 'string' || entry.sessionId.length === 0) {
183
+ throw new Error('Claude fork entry has no sessionId');
184
+ }
185
+ if (entry.sessionId !== sourceSessionId) {
186
+ throw new Error('Claude fork source entry has the wrong sessionId');
187
+ }
188
+ const copied = copyClaudeEntryWithSessionId(entry, sessionId);
189
+ if (entry.type === 'ai-title')
190
+ titles.push(copied);
191
+ else if (entry.type === 'mode')
192
+ modes.push(copied);
193
+ else if (entry.type === 'permission-mode')
194
+ permissionModes.push(copied);
195
+ else if (entry.type === 'pr-link')
196
+ prLinks.push(copied);
197
+ else if (entry.type === 'last-prompt') {
198
+ lastPrompt = copied;
199
+ nativeLastPrompt = entry;
200
+ }
201
+ else {
202
+ history.push(copied);
203
+ nativeHistory.push(entry);
204
+ }
205
+ }
206
+ if (!nativeHistory.some((entry) => typeof entry.uuid === 'string')) {
207
+ throw new Error('Claude session has no native history to fork');
208
+ }
209
+ const logicalTailUuid = validateNativeHistory(nativeHistory);
210
+ if (nativeLastPrompt &&
211
+ (typeof nativeLastPrompt.leafUuid !== 'string' ||
212
+ nativeLastPrompt.leafUuid !== logicalTailUuid)) {
213
+ nativeLastPrompt = undefined;
214
+ lastPrompt = undefined;
215
+ }
216
+ return [
217
+ ...titles.slice(-1),
218
+ ...modes.slice(-1),
219
+ ...permissionModes.slice(-1),
220
+ ...prLinks.slice(-1),
221
+ ...history,
222
+ ...(lastPrompt ? [lastPrompt] : []),
223
+ ];
224
+ }
225
+ //# sourceMappingURL=fork.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fork.js","sourceRoot":"","sources":["../../../src/compatibility/claude/fork.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,EACL,4BAA4B,EAC5B,yBAAyB,GAE1B,MAAM,aAAa,CAAA;AASpB,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,oBAAoB;IACpB,uBAAuB;IACvB,iBAAiB;CAClB,CAAC,CAAA;AAEF,SAAS,mBAAmB,CAAC,KAA4B;IACvD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,kBAAkB,EAAE,CAAC;QACpE,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,IAAI,CAAA;IAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAA;IACnC,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IACtE,MAAM,cAAc,GAAI,UAAsC,CAAC,IAAI,CAAA;IACnE,OAAO,CACL,cAAc,KAAK,cAAc;QACjC,cAAc,KAAK,YAAY;QAC/B,cAAc,KAAK,yBAAyB,CAC7C,CAAA;AACH,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAAyC;IAEzC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAiC,CAAA;IAC9D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC3C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAQ;QAC5C,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,yCAAyC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;QACxE,CAAC;QACD,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACpC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;YAAE,SAAQ;QACxC,KAAK,MAAM,KAAK,IAAI,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;YAClD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;gBAAE,SAAQ;YACvC,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAA;YACnB,IAAI,OAAO,EAAE,KAAK,QAAQ;gBAAE,SAAQ;YACpC,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,6CAA6C,EAAE,EAAE,CAAC,CAAA;YACpE,CAAC;YACD,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAA;IAC1C,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAA;IAC7C,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAA;IAC5C,IAAI,iBAAiB,GAAG,CAAC,CAAA;IACzB,IAAI,eAAkD,CAAA;IACtD,IAAI,eAAmC,CAAA;IAEvC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,KAAK,IAAI,CAAA;QACxD,IAAI,eAAe,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;QACpE,CAAC;QACD,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,UAAU,KAAK,eAAe,CAAC,IAAI,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;YACpE,CAAC;YACD,eAAe,GAAG,SAAS,CAAA;QAC7B,CAAC;aAAM,IACL,KAAK,CAAC,IAAI,KAAK,QAAQ;YACvB,KAAK,CAAC,OAAO,KAAK,kBAAkB,EACpC,CAAC;YACD,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,CAAA;YACtC,MAAM,gBAAgB,GACpB,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI;gBAC/C,CAAC,CAAE,QAAoC,CAAC,gBAAgB;gBACxD,CAAC,CAAC,SAAS,CAAA;YACf,IACE,OAAO,gBAAgB,KAAK,QAAQ;gBACpC,gBAAgB,KAAK,IAAI;gBACzB,KAAK,CAAC,iBAAiB,KAAK,eAAe;gBAC1C,gBAA4C,CAAC,QAAQ;oBACpD,eAAe;gBAChB,gBAA4C,CAAC,QAAQ;oBACpD,eAAe,EACjB,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;YACvE,CAAC;YACD,eAAe,GAAG,KAAK,CAAA;QACzB,CAAC;QAED,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnC,IACE,KAAK,CAAC,UAAU,KAAK,IAAI;gBACzB,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,kBAAkB,CAAC,EAClE,CAAC;gBACD,iBAAiB,IAAI,CAAC,CAAA;YACxB,CAAC;iBAAM,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;gBAChD,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;oBACxC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;gBACxC,CAAC;qBAAM,CAAC;oBACN,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;YACjE,eAAe,GAAG,KAAK,CAAC,IAAI,CAAA;QAC9B,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;YAClD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;gBAAE,SAAQ;YACnE,MAAM,EAAE,GAAG,KAAK,CAAC,WAAW,CAAA;YAC5B,IACE,OAAO,EAAE,KAAK,QAAQ;gBACtB,OAAO,KAAK,CAAC,uBAAuB,KAAK,QAAQ;gBACjD,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,uBAAuB,EACnD,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;YACpE,CAAC;YACD,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,gDAAgD,EAAE,EAAE,CAAC,CAAA;YACvE,CAAC;YACD,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;IACpE,CAAC;IACD,IAAI,mBAAmB,CAAC,IAAI,GAAG,CAAC,IAAI,iBAAiB,GAAG,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACjE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkC,CAAA;IACxD,KAAK,MAAM,SAAS,IAAI,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC;QAC7C,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,SAAS;YAAE,SAAQ;QACjD,MAAM,IAAI,GAAa,EAAE,CAAA;QACzB,IAAI,IAAI,GAAuB,SAAS,CAAA;QACxC,OAAO,IAAI,KAAK,SAAS,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC9B,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;YACpE,CAAC;YACD,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAK;YAC9B,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;YAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACf,MAAM,UAAU,GAAY,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,CAAA;YAC/D,IAAI,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAA;QAChE,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,IAAI;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IAC9D,CAAC;IAED,KAAK,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAA;QACjC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAA;IAC1E,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,EACrC,MAAM,EACN,eAAe,EACf,SAAS,EACT,eAAe,GACS;IACxB,MAAM,MAAM,GAA4B,EAAE,CAAA;IAC1C,MAAM,KAAK,GAA4B,EAAE,CAAA;IACzC,MAAM,eAAe,GAA4B,EAAE,CAAA;IACnD,MAAM,OAAO,GAA4B,EAAE,CAAA;IAC3C,MAAM,OAAO,GAA4B,EAAE,CAAA;IAC3C,MAAM,aAAa,GAA4B,EAAE,CAAA;IACjD,IAAI,UAA6C,CAAA;IACjD,IAAI,gBAAmD,CAAA;IAEvD,MAAM,YAAY,GAChB,eAAe,KAAK,SAAS;QAC3B,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,+BAA+B,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC9D,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,IAAI,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,IACE,CAAC,KAAK,CAAC,IAAI,KAAK,iBAAiB;gBAC/B,KAAK,CAAC,SAAS,KAAK,eAAe,CAAC;gBACtC,CAAC,KAAK,CAAC,IAAI,KAAK,iBAAiB;oBAC/B,KAAK,CAAC,SAAS,KAAK,SAAS;oBAC7B,KAAK,CAAC,SAAS,KAAK,eAAe,CAAC,EACtC,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;YACrE,CAAC;YACD,SAAQ;QACV,CAAC;QACD,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC/B,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,MAAM,IAAI,KAAK,CACb,gCAAgC,KAAK,CAAC,IAAI,4BAA4B,CACvE,CAAA;YACH,CAAC;YACD,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;YACvD,CAAC;YACD,SAAQ;QACV,CAAC;QACD,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CACb,gCAAgC,KAAK,CAAC,IAAI,4BAA4B,CACvE,CAAA;QACH,CAAC;QACD,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;QACvD,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,KAAK,eAAe,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;QACrE,CAAC;QACD,MAAM,MAAM,GAAG,4BAA4B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QAC7D,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;YAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;aAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;aAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB;YAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;aAClE,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;aAClD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACtC,UAAU,GAAG,MAAM,CAAA;YACnB,gBAAgB,GAAG,KAAK,CAAA;QAC1B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACpB,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACjE,CAAC;IACD,MAAM,eAAe,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAA;IAC5D,IACE,gBAAgB;QAChB,CAAC,OAAO,gBAAgB,CAAC,QAAQ,KAAK,QAAQ;YAC5C,gBAAgB,CAAC,QAAQ,KAAK,eAAe,CAAC,EAChD,CAAC;QACD,gBAAgB,GAAG,SAAS,CAAA;QAC5B,UAAU,GAAG,SAAS,CAAA;IACxB,CAAC;IACD,OAAO;QACL,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB,GAAG,OAAO;QACV,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACpC,CAAA;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ClaudeTranscriptEntry } from './schema.js';
2
+ export declare function selectClaudeActiveTranscript(entries: readonly ClaudeTranscriptEntry[]): ClaudeTranscriptEntry[];
3
+ export declare function selectClaudeTranscriptAtMessage(entries: readonly ClaudeTranscriptEntry[], messageUuid: string): ClaudeTranscriptEntry[];
4
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../../src/compatibility/claude/history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AA2ExD,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,SAAS,qBAAqB,EAAE,GACxC,qBAAqB,EAAE,CAWzB;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,SAAS,qBAAqB,EAAE,EACzC,WAAW,EAAE,MAAM,GAClB,qBAAqB,EAAE,CAgBzB"}
@@ -0,0 +1,86 @@
1
+ function entryUuid(entry) {
2
+ return typeof entry.uuid === 'string' ? entry.uuid : null;
3
+ }
4
+ function latestLeafUuid(entries) {
5
+ for (let index = entries.length - 1; index >= 0; index -= 1) {
6
+ const entry = entries[index];
7
+ if (!entry || entry.isSidechain === true)
8
+ continue;
9
+ if (entry.type === 'last-prompt' && typeof entry.leafUuid === 'string') {
10
+ return entry.leafUuid;
11
+ }
12
+ const uuid = entryUuid(entry);
13
+ if (uuid)
14
+ return uuid;
15
+ }
16
+ return null;
17
+ }
18
+ function ancestryUuids(entries, leafUuid) {
19
+ const byUuid = new Map();
20
+ for (const entry of entries) {
21
+ const uuid = entryUuid(entry);
22
+ if (uuid && entry.isSidechain !== true)
23
+ byUuid.set(uuid, entry);
24
+ }
25
+ const active = new Set();
26
+ let uuid = leafUuid;
27
+ while (uuid !== null) {
28
+ if (active.has(uuid)) {
29
+ throw new Error('Claude transcript parentUuid graph has a cycle');
30
+ }
31
+ const entry = byUuid.get(uuid);
32
+ if (!entry) {
33
+ if (active.size > 0)
34
+ break;
35
+ throw new Error(`Claude transcript has dangling parentUuid ${uuid}`);
36
+ }
37
+ active.add(uuid);
38
+ uuid =
39
+ entry.type === 'system' &&
40
+ entry.subtype === 'compact_boundary' &&
41
+ typeof entry.logicalParentUuid === 'string'
42
+ ? entry.logicalParentUuid
43
+ : typeof entry.parentUuid === 'string'
44
+ ? entry.parentUuid
45
+ : null;
46
+ }
47
+ return active;
48
+ }
49
+ function selectAncestry(entries, leafUuid) {
50
+ const active = ancestryUuids(entries, leafUuid);
51
+ return entries.filter((entry) => {
52
+ if (entry.isSidechain === true)
53
+ return false;
54
+ const uuid = entryUuid(entry);
55
+ if (uuid) {
56
+ return (active.has(uuid) ||
57
+ (entry.type === 'user' &&
58
+ typeof entry.sourceToolAssistantUUID === 'string' &&
59
+ active.has(entry.sourceToolAssistantUUID)));
60
+ }
61
+ return entry.type !== 'last-prompt' || entry.leafUuid === leafUuid;
62
+ });
63
+ }
64
+ export function selectClaudeActiveTranscript(entries) {
65
+ const leafUuid = latestLeafUuid(entries);
66
+ if (leafUuid === null ||
67
+ !entries.some((entry) => entry.uuid === leafUuid && entry.isSidechain !== true)) {
68
+ return [...entries];
69
+ }
70
+ return selectAncestry(entries, leafUuid);
71
+ }
72
+ export function selectClaudeTranscriptAtMessage(entries, messageUuid) {
73
+ const active = selectClaudeActiveTranscript(entries);
74
+ const target = active.find((entry) => entry.uuid === messageUuid &&
75
+ (entry.type === 'user' || entry.type === 'assistant') &&
76
+ typeof entry.message === 'object' &&
77
+ entry.message !== null &&
78
+ !Array.isArray(entry.message) &&
79
+ (entry.message.role === 'user' ||
80
+ entry.message.role === 'assistant'));
81
+ if (!target) {
82
+ throw new Error(`No message found with message.uuid of: ${messageUuid}`);
83
+ }
84
+ return selectAncestry(entries, messageUuid);
85
+ }
86
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/compatibility/claude/history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ export type ClaudeDataResource = 'agents' | 'auto-memory' | 'commands' | 'durable-task-graph' | 'file-history' | 'hooks' | 'instructions' | 'mcp' | 'provider-payload' | 'search-index' | 'scheduled-prompts' | 'session-lock' | 'settings' | 'skills' | 'transcript';
2
+ export type DataPlane = 'praxis-sidecar' | 'shared';
3
+ export type PraxisAccess = 'append-only' | 'read-only' | 'read-write';
4
+ export interface DataOwnershipPolicy {
5
+ resource: ClaudeDataResource;
6
+ plane: DataPlane;
7
+ praxisAccess: PraxisAccess;
8
+ location: string;
9
+ }
10
+ export declare const CLAUDE_DATA_OWNERSHIP: readonly [{
11
+ readonly resource: "transcript";
12
+ readonly plane: "shared";
13
+ readonly praxisAccess: "append-only";
14
+ readonly location: "projects/<project-key>/<session-id>.jsonl";
15
+ }, {
16
+ readonly resource: "auto-memory";
17
+ readonly plane: "shared";
18
+ readonly praxisAccess: "read-write";
19
+ readonly location: "projects/<project-key>/memory/";
20
+ }, {
21
+ readonly resource: "durable-task-graph";
22
+ readonly plane: "shared";
23
+ readonly praxisAccess: "read-write";
24
+ readonly location: "tasks/<session-id>/";
25
+ }, {
26
+ readonly resource: "scheduled-prompts";
27
+ readonly plane: "shared";
28
+ readonly praxisAccess: "read-write";
29
+ readonly location: ".claude/scheduled_tasks.json";
30
+ }, {
31
+ readonly resource: "file-history";
32
+ readonly plane: "shared";
33
+ readonly praxisAccess: "read-write";
34
+ readonly location: "file-history/<session-id>/ and transcript snapshot/delta records";
35
+ }, {
36
+ readonly resource: "instructions";
37
+ readonly plane: "shared";
38
+ readonly praxisAccess: "read-only";
39
+ readonly location: "CLAUDE.md and .claude rules";
40
+ }, {
41
+ readonly resource: "skills";
42
+ readonly plane: "shared";
43
+ readonly praxisAccess: "read-only";
44
+ readonly location: "skills/ and .claude/skills/";
45
+ }, {
46
+ readonly resource: "commands";
47
+ readonly plane: "shared";
48
+ readonly praxisAccess: "read-only";
49
+ readonly location: "commands/ and .claude/commands/";
50
+ }, {
51
+ readonly resource: "agents";
52
+ readonly plane: "shared";
53
+ readonly praxisAccess: "read-only";
54
+ readonly location: "agents/ and .claude/agents/";
55
+ }, {
56
+ readonly resource: "settings";
57
+ readonly plane: "shared";
58
+ readonly praxisAccess: "read-only";
59
+ readonly location: "settings.json and .claude/settings*.json";
60
+ }, {
61
+ readonly resource: "hooks";
62
+ readonly plane: "shared";
63
+ readonly praxisAccess: "read-only";
64
+ readonly location: "hooks declared by Claude settings";
65
+ }, {
66
+ readonly resource: "mcp";
67
+ readonly plane: "shared";
68
+ readonly praxisAccess: "read-only";
69
+ readonly location: ".mcp.json and Claude-compatible settings";
70
+ }, {
71
+ readonly resource: "provider-payload";
72
+ readonly plane: "praxis-sidecar";
73
+ readonly praxisAccess: "read-write";
74
+ readonly location: "praxis/providers/";
75
+ }, {
76
+ readonly resource: "search-index";
77
+ readonly plane: "praxis-sidecar";
78
+ readonly praxisAccess: "read-write";
79
+ readonly location: "praxis/indexes/";
80
+ }, {
81
+ readonly resource: "session-lock";
82
+ readonly plane: "praxis-sidecar";
83
+ readonly praxisAccess: "read-write";
84
+ readonly location: "praxis/locks/";
85
+ }];
86
+ export declare function getDataOwnership(resource: ClaudeDataResource): DataOwnershipPolicy;
87
+ //# sourceMappingURL=ownership.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ownership.d.ts","sourceRoot":"","sources":["../../../src/compatibility/claude/ownership.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAC1B,QAAQ,GACR,aAAa,GACb,UAAU,GACV,oBAAoB,GACpB,cAAc,GACd,OAAO,GACP,cAAc,GACd,KAAK,GACL,kBAAkB,GAClB,cAAc,GACd,mBAAmB,GACnB,cAAc,GACd,UAAU,GACV,QAAQ,GACR,YAAY,CAAA;AAEhB,MAAM,MAAM,SAAS,GAAG,gBAAgB,GAAG,QAAQ,CAAA;AACnD,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,WAAW,GAAG,YAAY,CAAA;AAErE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,KAAK,EAAE,SAAS,CAAA;IAChB,YAAY,EAAE,YAAY,CAAA;IAC1B,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4FiB,CAAA;AAEnD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,kBAAkB,GAC3B,mBAAmB,CASrB"}