@myagentroam/node 0.9.62 → 0.9.65

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 (161) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +4 -0
  3. package/dist/capabilities.js +110 -2
  4. package/dist/claude-agent-sdk.js +330 -2
  5. package/dist/claude-channel.js +44 -2
  6. package/dist/codex-app-server.js +510 -2
  7. package/dist/config.js +106 -2
  8. package/dist/connector/node-connector-options.js +1 -2
  9. package/dist/connector/node-operation-router.js +22 -2
  10. package/dist/connector.js +1736 -2
  11. package/dist/control-outbound-scheduler.js +153 -2
  12. package/dist/database.js +639 -2
  13. package/dist/fake-runner.js +129 -2
  14. package/dist/git-askpass.js +12 -0
  15. package/dist/git-execution-helper.js +266 -0
  16. package/dist/health.js +3 -2
  17. package/dist/main.js +57 -2
  18. package/dist/mcp-installation-model.js +1 -2
  19. package/dist/migrations/v004.js +55 -3
  20. package/dist/migrations/v005.js +13 -3
  21. package/dist/migrations/v006.js +90 -3
  22. package/dist/migrations/v007.js +22 -3
  23. package/dist/migrations/v008.js +18 -3
  24. package/dist/migrations/v009.js +70 -4
  25. package/dist/migrations/v010.js +43 -3
  26. package/dist/migrations/v011.js +20 -3
  27. package/dist/migrations/v012.js +8 -0
  28. package/dist/native-jsonl-reader.js +186 -2
  29. package/dist/native-session-history.js +1143 -2
  30. package/dist/opencode-runtime.js +80 -2
  31. package/dist/opencode-server.js +259 -2
  32. package/dist/operational.js +122 -2
  33. package/dist/process-tree.js +18 -2
  34. package/dist/ripgrep-binary.js +31 -2
  35. package/dist/rotating-log.js +67 -2
  36. package/dist/runner/abstract-runner.js +260 -2
  37. package/dist/runner/claude/managed-run-controller.js +355 -2
  38. package/dist/runner/claude/tool-normalizer.js +120 -2
  39. package/dist/runner/claude-code-runner.js +303 -2
  40. package/dist/runner/codex/composer-image-markers.js +8 -2
  41. package/dist/runner/codex/conversation-parser.js +913 -2
  42. package/dist/runner/codex/managed-run-controller.js +494 -2
  43. package/dist/runner/codex/tool-normalizer.js +214 -2
  44. package/dist/runner/codex-runner.js +585 -2
  45. package/dist/runner/fake-test-runner.js +47 -2
  46. package/dist/runner/mar-agent/conversation-normalizer.js +644 -2
  47. package/dist/runner/mar-agent/executor-stdio-client-transport.js +139 -2
  48. package/dist/runner/mar-agent/generated-images.js +41 -2
  49. package/dist/runner/mar-agent/history-projection.js +106 -2
  50. package/dist/runner/mar-agent/hosted-conversation-runtime.js +446 -2
  51. package/dist/runner/mar-agent/managed-run-controller.js +785 -2
  52. package/dist/runner/mar-agent/mcp-client-pool.js +233 -2
  53. package/dist/runner/mar-agent/runtime-model-factory.js +326 -2
  54. package/dist/runner/mar-agent-runner.js +458 -2
  55. package/dist/runner/opencode/conversation-parser.js +221 -2
  56. package/dist/runner/opencode/managed-run-controller.js +588 -2
  57. package/dist/runner/opencode/tool-normalizer.js +80 -2
  58. package/dist/runner/opencode-runner.js +426 -2
  59. package/dist/runner/runner-registry.js +87 -2
  60. package/dist/runner-command-engine.js +71 -2
  61. package/dist/runner-profiles.js +323 -2
  62. package/dist/runner-usage.js +190 -2
  63. package/dist/runtime-command-detector.js +73 -2
  64. package/dist/runtime-model.js +1 -2
  65. package/dist/runtime-state.js +1509 -2
  66. package/dist/service/attachment-domain-state.js +7 -2
  67. package/dist/service/bubblewrap-sandbox-executor.js +543 -2
  68. package/dist/service/continuous-run-coordinator.js +425 -2
  69. package/dist/service/conversation-history-service.js +552 -2
  70. package/dist/service/conversation-hosting-capability-service.js +61 -2
  71. package/dist/service/conversation-hosting-enablement-service.js +91 -2
  72. package/dist/service/conversation-hosting-maintenance-service.js +174 -2
  73. package/dist/service/conversation-segment-service.js +162 -2
  74. package/dist/service/conversation-template-node-service.js +992 -2
  75. package/dist/service/external-session-resume-service.js +152 -2
  76. package/dist/service/fake-managed-run-service.js +60 -2
  77. package/dist/service/git-execution-service.js +418 -0
  78. package/dist/service/git-operation-service.js +57 -0
  79. package/dist/service/hosted-conversation-node-service.js +1982 -2
  80. package/dist/service/hosted-conversation-store.js +1405 -2
  81. package/dist/service/managed-runner-session-service.js +35 -2
  82. package/dist/service/mar-agent-model-transport-test-service.js +88 -2
  83. package/dist/service/mcp-installation-verifier.js +87 -2
  84. package/dist/service/mcp-node-operation-service.js +90 -2
  85. package/dist/service/mission-mcp-server.js +124 -2
  86. package/dist/service/mission-mcp-stdio.js +40 -2
  87. package/dist/service/mission-runtime.js +142 -2
  88. package/dist/service/native-session-projection-service.js +274 -2
  89. package/dist/service/native-session-watch-service.js +683 -2
  90. package/dist/service/node-connection-lifecycle-service.js +88 -2
  91. package/dist/service/node-control-channel.js +85 -2
  92. package/dist/service/node-control-message-service.js +109 -2
  93. package/dist/service/node-request-service.js +62 -2
  94. package/dist/service/node-run-event-bridge.js +88 -2
  95. package/dist/service/node-terminal-channel.js +202 -2
  96. package/dist/service/node-upgrade-coordinator.js +137 -2
  97. package/dist/service/node-workspace-coordinator.js +97 -2
  98. package/dist/service/recent-run-projection-service.js +99 -2
  99. package/dist/service/run-attachment-service.js +321 -2
  100. package/dist/service/run-domain-state.js +4 -2
  101. package/dist/service/run-event-service.js +246 -2
  102. package/dist/service/run-ownership-policy.js +22 -2
  103. package/dist/service/run-workbench-service.js +120 -2
  104. package/dist/service/runner-channel-message-service.js +20 -2
  105. package/dist/service/runner-interaction-service.js +243 -2
  106. package/dist/service/runner-service.js +69 -2
  107. package/dist/service/runtime-credential-control-service.js +95 -2
  108. package/dist/service/session-catalog-service.js +404 -2
  109. package/dist/service/session-command-service.js +125 -2
  110. package/dist/service/session-context-service.js +128 -2
  111. package/dist/service/session-domain-state.js +9 -2
  112. package/dist/service/session-identity-service.js +86 -2
  113. package/dist/service/session-lifecycle-service.js +248 -2
  114. package/dist/service/session-message-service.js +270 -2
  115. package/dist/service/session-presentation-service.js +43 -2
  116. package/dist/service/session-query-service.js +82 -2
  117. package/dist/service/session-watch-slot-coordinator.js +21 -2
  118. package/dist/service/skill-directory-service.js +238 -2
  119. package/dist/service/skill-install-service.js +434 -2
  120. package/dist/service/skill-node-operation-service.js +206 -2
  121. package/dist/service/terminal-relay-state.js +3 -2
  122. package/dist/service/terminal-service.js +90 -2
  123. package/dist/service/web-search-error.js +40 -2
  124. package/dist/service/workbench-event-service.js +21 -2
  125. package/dist/service/workbench-manifest-service.js +69 -2
  126. package/dist/service/workspace-change-service.js +290 -2
  127. package/dist/service/workspace-content-search-service.js +457 -2
  128. package/dist/service/workspace-domain-state.js +41 -2
  129. package/dist/service/workspace-file-service.js +150 -2
  130. package/dist/service/workspace-git-exclude-service.js +119 -2
  131. package/dist/service/workspace-queue-workbench-service.js +176 -2
  132. package/dist/service/workspace-service.js +92 -2
  133. package/dist/service/workspace-session-service.js +154 -2
  134. package/dist/service/workspace-upload-service.js +262 -2
  135. package/dist/service/workspace-watch-controller.js +68 -2
  136. package/dist/service/workspace-watch-service.js +170 -2
  137. package/dist/service/workspace-watch-snapshot-service.js +218 -2
  138. package/dist/service/workspace-workbench-service.js +239 -2
  139. package/dist/service.js +91 -2
  140. package/dist/storage.js +32 -2
  141. package/dist/supervisor.js +136 -2
  142. package/dist/terminal.js +496 -2
  143. package/dist/util/git-credential-client.js +32 -0
  144. package/dist/util/node-operation-data.js +9 -2
  145. package/dist/util/node-operation-parsers.js +382 -2
  146. package/dist/util/personal-instructions.js +34 -2
  147. package/dist/util/runner-error.js +70 -2
  148. package/dist/util/runner-native-session-parsers.js +510 -2
  149. package/dist/util/safe-error.js +8 -2
  150. package/dist/util/secret-environment.js +25 -2
  151. package/dist/workspace.js +1793 -2
  152. package/package.json +11 -8
  153. package/vendor/ripgrep/darwin-arm64/rg +0 -0
  154. package/vendor/ripgrep/darwin-x64/rg +0 -0
  155. package/vendor/ripgrep/manifest.json +12 -0
  156. package/README.md +0 -42
  157. package/dist/event-buffer.js +0 -2
  158. package/dist/migrations/v001.js +0 -107
  159. package/dist/migrations/v002.js +0 -2
  160. package/dist/migrations/v003.js +0 -2
  161. package/dist/service/mcp-package-installer.js +0 -2
@@ -1,5 +1,6 @@
1
- /* mar-release-protected */
2
- const _0x31fb0d=_0x3fa8;(function(_0x4c57ca,_0x56554d){const _0xfb5c96=_0x3fa8,_0x24144b=_0x4c57ca();while(!![]){try{const _0x5c0c99=-parseInt(_0xfb5c96(0x1f6))/(0x172c+0x1*0x2fb+-0x1a26)+-parseInt(_0xfb5c96(0x1f1))/(0x1924+0xa9f+-0x23c1)*(parseInt(_0xfb5c96(0x21c))/(-0x11d4+0xb65+-0x6*-0x113))+-parseInt(_0xfb5c96(0x20f))/(-0x12d1*-0x2+0x1376+-0x3914)+-parseInt(_0xfb5c96(0x233))/(0x219e+-0x2*-0x10d6+-0x4345)*(-parseInt(_0xfb5c96(0x226))/(0x3*0x5ba+-0x7*-0x339+-0x27b7))+-parseInt(_0xfb5c96(0x22e))/(-0x319*0xa+0x2a4+0x1c5d)*(-parseInt(_0xfb5c96(0x225))/(0x1*0x490+0x6*0x629+-0x297e))+parseInt(_0xfb5c96(0x207))/(0x6c*-0x3d+-0x151*0x1+0x1b16)*(-parseInt(_0xfb5c96(0x209))/(0xf9a+0x1ed0+-0x2*0x1730))+-parseInt(_0xfb5c96(0x21e))/(0x10ec+-0x22e*0xd+0xb75)*(-parseInt(_0xfb5c96(0x213))/(0x8dd*-0x2+0xc3a+0xa*0x8e));if(_0x5c0c99===_0x56554d)break;else _0x24144b['push'](_0x24144b['shift']());}catch(_0x52a98d){_0x24144b['push'](_0x24144b['shift']());}}}(_0x5c58,0x31*-0x229f+0x633fb*-0x4+-0x1717eb*-0x2));export const NODE_SCHEMA_VERSION_V6=-0x1cd0+0xdde+0xef8;function _0x5c58(){const _0x3b9a5d=['zw50CMLLCW','otK0EuLVuxHf','zMLSzv9JB3vUDa','BgfZDf9Hy3rPDML0Ev9HDa','C3rHz2u','DMvYC2LVBL9Pza','nvDfs29JzG','C291CMnL','CMvHC29UAw5Nx2vMzM9YDa','CMvMzxjLBMnLx2nVDw50','DhvYBL9Pza','CMvSyxrPDMvFCgf0Aa','mJyYotaXogXQDNHhBW','zhjHzNrFCMv2AxnPB24','CMf3','CNvUx2LK','BMfTzq','otqXnZm4rLbmEuPq','y2f0zwDVCNK','y29UDMvYC2f0Aw9Ux3n0B3jHz2vFA2v5','DgL0Bgu','C3rHDhvZ','y3jLyxrLzf9HDa','ywXS','AxrLBv9Pza','Aw5JBhvKzxm','C29Tzq','Bw9KzwXFAwq','zxjYB3jFy29Kzq','CMvXDwvZDgvKx2j5x3vZzxjFAwq','DMvYC2LVBL9UDw1Izxi','ChjLCgfYzq','C2L6zq','zhjHzNq','mtmWmJG0y3HLrvPl','BwfUAwzLC3q','mJiWEgTIzKzR','C3rVCMfNzv9RzxK','DgvTCgXHDgvFAwq','ufjbr01bihrHyMXLx2LUzM8O','zxjYB3jFC3vTBwfYEq','DgvTCgXHDgvFzgvSzxrLza','mJy4otq0mevoD3nvCq','y2XPzw50x21LC3nHz2vFAwq','ChvIBgLZAgvKx2f0','zgLZCgXHEv9Uyw1L','nJyWmZz1ANPMwfO','Ag9ZDf9WB2XPy3LFDMvYC2LVBG','BgvUz3rO','tK9erv9eqvrbqKftrv9tq0HftufFsu5wquXjrdO','y2XPzw50x3jLCxvLC3rFAwq','DgvTCgXHDgvFBMfTzq','CMvJB3zLCMfIBgvFDw50AwW','Dg90ywXFyNL0zxm','Bwf4x2j5DgvZ','m2jJCLjKuq','ywn0AxzLx3zLCNnPB25FAwq','ntuXmuvkrKHNEa','DxbKyxrLzf9HDa','BwfW','DxnLCL9ZDg9YywDLx2TLEq','y29UDgvUDf9OyxnO','C2vZC2LVBL9Pza','BwfUAwzLC3rFAgfZAa','mty5mdrRAvvHzgO','nJKZotmXohDPz1nMyW','DxnLzf9IExrLCW','y29UDMvYC2f0Aw9Ux2LK','ChvIBgLZAgvKx2j5x3vZzxjFAwq','BM9Kzv9Pza','CgvUzgLUz192zxjZAw9Ux2LK','BwLTzv90ExbL'];_0x5c58=function(){return _0x3b9a5d;};return _0x5c58();}export const NODE_SCHEMA_MIGRATION_V6=String[_0x31fb0d(0x1f3)]`
1
+ export const NODE_SCHEMA_VERSION_V6 = 6;
2
+ /** Adds rebuildable hosted-conversation indexes and immutable template publication metadata. */
3
+ export const NODE_SCHEMA_MIGRATION_V6 = String.raw `
3
4
  CREATE TABLE conversation_template_versions (
4
5
  id TEXT PRIMARY KEY,
5
6
  template_id TEXT NOT NULL,
@@ -101,4 +102,90 @@ const _0x31fb0d=_0x3fa8;(function(_0x4c57ca,_0x56554d){const _0xfb5c96=_0x3fa8,_
101
102
  updated_at INTEGER NOT NULL CHECK (updated_at >= 0),
102
103
  PRIMARY KEY (conversation_id, client_message_id)
103
104
  ) STRICT;
104
- `;function _0x3fa8(_0x6e578d,_0x11c184){_0x6e578d=_0x6e578d-(0x3*-0x347+-0x1c2b+0x27ee);const _0x46915c=_0x5c58();let _0x2b6ed0=_0x46915c[_0x6e578d];if(_0x3fa8['SlmjQF']===undefined){var _0x7bc51a=function(_0x423c41){const _0x2b375d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1395d1='',_0x284aea='';for(let _0x965541=-0x293*0xa+-0x34a+-0x1d08*-0x1,_0x38ea18,_0x12f11e,_0x370866=0x185b*-0x1+-0xca4+0x24ff;_0x12f11e=_0x423c41['charAt'](_0x370866++);~_0x12f11e&&(_0x38ea18=_0x965541%(0x1c7+0xa82*-0x1+0x8bf)?_0x38ea18*(0x1*-0x1a91+-0xd96+0x2867)+_0x12f11e:_0x12f11e,_0x965541++%(0x99+-0x1*0x1d62+-0x49*-0x65))?_0x1395d1+=String['fromCharCode'](-0x13*-0x1df+0x577*0x6+-0x2*0x21ac&_0x38ea18>>(-(0xe91+0x17a9+-0x2638)*_0x965541&-0x32c+0xa3e+-0x70c)):-0xca0+0x4*0x6a7+-0x2*0x6fe){_0x12f11e=_0x2b375d['indexOf'](_0x12f11e);}for(let _0x40d5bb=-0xaad+0x2*0xf32+-0x31*0x67,_0x390aea=_0x1395d1['length'];_0x40d5bb<_0x390aea;_0x40d5bb++){_0x284aea+='%'+('00'+_0x1395d1['charCodeAt'](_0x40d5bb)['toString'](-0x2357+-0x1e6e+0x41d5))['slice'](-(0x1c2e+-0x1ec6+-0x12*-0x25));}return decodeURIComponent(_0x284aea);};_0x3fa8['GMUdEM']=_0x7bc51a,_0x3fa8['pKNPdj']={},_0x3fa8['SlmjQF']=!![];}const _0x382ac9=_0x46915c[-0xef*-0x1b+-0x318+-0x161d*0x1];_0x3fa8['XUohSU']!==_0x382ac9&&(_0x3fa8['pKNPdj']={},_0x3fa8['XUohSU']=_0x382ac9);const _0x5e1c62=_0x3fa8['pKNPdj'][_0x6e578d];return _0x5e1c62===undefined?(_0x2b6ed0=_0x3fa8['GMUdEM'](_0x2b6ed0),_0x3fa8['pKNPdj'][_0x6e578d]=_0x2b6ed0):_0x2b6ed0=_0x5e1c62,_0x2b6ed0;}export function assertNodeSchemaV6(_0x3883ef){const _0x78a4e7=_0x31fb0d,_0x5c7c01={'conversation_template_versions':['id',_0x78a4e7(0x20b),_0x78a4e7(0x203),_0x78a4e7(0x1f2),_0x78a4e7(0x1fa),_0x78a4e7(0x20a),_0x78a4e7(0x208),_0x78a4e7(0x222),_0x78a4e7(0x224),_0x78a4e7(0x22f),_0x78a4e7(0x21a),_0x78a4e7(0x214),_0x78a4e7(0x229),_0x78a4e7(0x211),_0x78a4e7(0x1ee)],'conversation_template_publish_jobs':['id',_0x78a4e7(0x20b),_0x78a4e7(0x1f2),_0x78a4e7(0x231),_0x78a4e7(0x1fa),_0x78a4e7(0x232),_0x78a4e7(0x201),_0x78a4e7(0x20d),_0x78a4e7(0x202),_0x78a4e7(0x206),_0x78a4e7(0x1fb),_0x78a4e7(0x21f)],'hosted_conversations':['id',_0x78a4e7(0x221),_0x78a4e7(0x1f8),_0x78a4e7(0x217),_0x78a4e7(0x22a),_0x78a4e7(0x223),_0x78a4e7(0x20b),_0x78a4e7(0x218),_0x78a4e7(0x21d),_0x78a4e7(0x22b),_0x78a4e7(0x1f9),_0x78a4e7(0x1fa),_0x78a4e7(0x200),_0x78a4e7(0x235),_0x78a4e7(0x20e),_0x78a4e7(0x219),_0x78a4e7(0x227),_0x78a4e7(0x21b),_0x78a4e7(0x1fb),_0x78a4e7(0x21f),_0x78a4e7(0x230)],'conversation_files':['id',_0x78a4e7(0x228),_0x78a4e7(0x1f7),_0x78a4e7(0x1f0),_0x78a4e7(0x212),_0x78a4e7(0x22c),_0x78a4e7(0x205),_0x78a4e7(0x234),_0x78a4e7(0x1ef),_0x78a4e7(0x1fd),_0x78a4e7(0x1fb),_0x78a4e7(0x21f)],'hosted_conversation_messages':[_0x78a4e7(0x228),_0x78a4e7(0x210),_0x78a4e7(0x1f4),_0x78a4e7(0x1fa),_0x78a4e7(0x1fb),_0x78a4e7(0x21f)]};for(const [_0x1e74dc,_0xd3d153]of Object[_0x78a4e7(0x22d)](_0x5c7c01)){const _0x31dbed=_0x3883ef[_0x78a4e7(0x204)](_0x78a4e7(0x20c)+_0x1e74dc+')')[_0x78a4e7(0x1fc)](),_0x22dcb9=_0x31dbed[_0x78a4e7(0x220)](_0x18b757=>_0x18b757[_0x78a4e7(0x1f5)]);if(_0x22dcb9[_0x78a4e7(0x215)]!==_0xd3d153[_0x78a4e7(0x215)]||_0xd3d153[_0x78a4e7(0x1ff)](_0x5cb9b1=>!_0x22dcb9[_0x78a4e7(0x1fe)](_0x5cb9b1)))throw new Error(_0x78a4e7(0x216)+_0x1e74dc);}}
105
+ `;
106
+ export function assertNodeSchemaV6(database) {
107
+ const required = {
108
+ conversation_template_versions: [
109
+ 'id',
110
+ 'template_id',
111
+ 'version_number',
112
+ 'draft_revision',
113
+ 'status',
114
+ 'storage_key',
115
+ 'manifest',
116
+ 'content_hash',
117
+ 'manifest_hash',
118
+ 'file_count',
119
+ 'total_bytes',
120
+ 'host_policy_version',
121
+ 'published_by_user_id',
122
+ 'published_at',
123
+ 'reference_count'
124
+ ],
125
+ conversation_template_publish_jobs: [
126
+ 'id',
127
+ 'template_id',
128
+ 'draft_revision',
129
+ 'stage',
130
+ 'status',
131
+ 'version_id',
132
+ 'error_code',
133
+ 'error_summary',
134
+ 'requested_by_user_id',
135
+ 'draft',
136
+ 'created_at',
137
+ 'updated_at'
138
+ ],
139
+ hosted_conversations: [
140
+ 'id',
141
+ 'user_storage_key',
142
+ 'conversation_storage_key',
143
+ 'client_request_id',
144
+ 'node_id',
145
+ 'session_id',
146
+ 'template_id',
147
+ 'template_name',
148
+ 'active_version_id',
149
+ 'pending_version_id',
150
+ 'title',
151
+ 'status',
152
+ 'model_id',
153
+ 'reasoning_effort',
154
+ 'template_deleted',
155
+ 'recoverable_until',
156
+ 'used_bytes',
157
+ 'max_bytes',
158
+ 'created_at',
159
+ 'updated_at',
160
+ 'last_activity_at'
161
+ ],
162
+ conversation_files: [
163
+ 'id',
164
+ 'conversation_id',
165
+ 'category',
166
+ 'relative_path',
167
+ 'display_name',
168
+ 'mime_type',
169
+ 'size',
170
+ 'source',
171
+ 'turn_id',
172
+ 'item_id',
173
+ 'created_at',
174
+ 'updated_at'
175
+ ],
176
+ hosted_conversation_messages: [
177
+ 'conversation_id',
178
+ 'client_message_id',
179
+ 'run_id',
180
+ 'status',
181
+ 'created_at',
182
+ 'updated_at'
183
+ ]
184
+ };
185
+ for (const [table, expected] of Object.entries(required)) {
186
+ const columns = database.prepare(`PRAGMA table_info(${table})`).all();
187
+ const actual = columns.map((column) => column.name);
188
+ if (actual.length !== expected.length || expected.some((name) => !actual.includes(name)))
189
+ throw new Error(`NODE_DATABASE_SCHEMA_INVALID:${table}`);
190
+ }
191
+ }
@@ -1,5 +1,7 @@
1
- /* mar-release-protected */
2
- const _0x201d71=_0x3969;(function(_0x3b271f,_0x43efcb){const _0x34ac54=_0x3969,_0x582681=_0x3b271f();while(!![]){try{const _0x263c3c=parseInt(_0x34ac54(0x130))/(0x5be+-0x7*-0x551+0x157a*-0x2)+-parseInt(_0x34ac54(0x12e))/(-0x2*0xc01+-0xc06+0x240a)+parseInt(_0x34ac54(0x13d))/(0x15a9+-0x17f6+-0x94*-0x4)*(-parseInt(_0x34ac54(0x139))/(-0x26f*-0x2+-0x1d68*0x1+0x188e))+parseInt(_0x34ac54(0x13e))/(-0x387+0x1a13+-0x1687)*(parseInt(_0x34ac54(0x135))/(0xe5f+0x1*0x1788+-0x1*0x25e1))+-parseInt(_0x34ac54(0x131))/(-0x1*-0x34e+-0x2cf*0x3+0x526)+-parseInt(_0x34ac54(0x141))/(0x1d18+0x7*0x281+-0x1*0x2e97)+parseInt(_0x34ac54(0x13a))/(-0x1b*-0x39+0x295+-0x88f)*(parseInt(_0x34ac54(0x126))/(-0x2*0x2f4+0x212f*-0x1+0x2721));if(_0x263c3c===_0x43efcb)break;else _0x582681['push'](_0x582681['shift']());}catch(_0x4952b4){_0x582681['push'](_0x582681['shift']());}}}(_0x52f1,0x82b5e+-0x1b7d*-0xf+-0x441f5));export const NODE_SCHEMA_VERSION_V7=-0x2507+-0x7c2+0x2cd0;function _0x3969(_0x5d8e48,_0x16f309){_0x5d8e48=_0x5d8e48-(0x2*-0xc4c+0x1*0x3b9+0x1604);const _0xca1e23=_0x52f1();let _0x681dae=_0xca1e23[_0x5d8e48];if(_0x3969['iPcHyc']===undefined){var _0x518040=function(_0x415d52){const _0x13c36f='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1aab4b='',_0x202279='';for(let _0x47571d=0x1183+0x895+-0x1a18,_0x36b1df,_0x5d1bd9,_0xdf1c1c=-0x19ab+-0x1f*0xaf+0x2*0x176e;_0x5d1bd9=_0x415d52['charAt'](_0xdf1c1c++);~_0x5d1bd9&&(_0x36b1df=_0x47571d%(0x16a4+-0x9d3*0x3+0x6d9)?_0x36b1df*(0x25f7+-0x1e15+-0x7a2)+_0x5d1bd9:_0x5d1bd9,_0x47571d++%(0x1*0x45f+0x1693+-0x1aee))?_0x1aab4b+=String['fromCharCode'](-0x1346*-0x1+0x1d79+-0x2fc0&_0x36b1df>>(-(0x11*-0x68+-0x268b+0x1*0x2d75)*_0x47571d&0x7*-0x4c6+0x1*0xcd1+0x149f)):-0x1a2d+-0x15a3*-0x1+0xa6*0x7){_0x5d1bd9=_0x13c36f['indexOf'](_0x5d1bd9);}for(let _0x448ed6=-0x983+0x233c+-0x19b9,_0x1ac358=_0x1aab4b['length'];_0x448ed6<_0x1ac358;_0x448ed6++){_0x202279+='%'+('00'+_0x1aab4b['charCodeAt'](_0x448ed6)['toString'](-0xb6a+0xb83+0x1*-0x9))['slice'](-(0x6*0x31a+-0x82+-0x1218));}return decodeURIComponent(_0x202279);};_0x3969['nBbKRF']=_0x518040,_0x3969['XUFYrq']={},_0x3969['iPcHyc']=!![];}const _0x1c5130=_0xca1e23[-0x3*0x7f4+-0x10e0+0x28bc];_0x3969['JMIsJR']!==_0x1c5130&&(_0x3969['XUFYrq']={},_0x3969['JMIsJR']=_0x1c5130);const _0x57c791=_0x3969['XUFYrq'][_0x5d8e48];return _0x57c791===undefined?(_0x681dae=_0x3969['nBbKRF'](_0x681dae),_0x3969['XUFYrq'][_0x5d8e48]=_0x681dae):_0x681dae=_0x57c791,_0x681dae;}export const EMPTY_MCP_CONFIG_HASH=_0x201d71(0x137);export const NODE_SCHEMA_MIGRATION_V7=String[_0x201d71(0x127)]`
1
+ export const NODE_SCHEMA_VERSION_V7 = 7;
2
+ export const EMPTY_MCP_CONFIG_HASH = '4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945';
3
+ /** Adds immutable MCP fingerprints and removes the retired hosted reasoning preference. */
4
+ export const NODE_SCHEMA_MIGRATION_V7 = String.raw `
3
5
  ALTER TABLE conversation_template_versions
4
6
  ADD COLUMN mcp_config_hash TEXT NOT NULL DEFAULT '${EMPTY_MCP_CONFIG_HASH}'
5
7
  CHECK (length(mcp_config_hash) = 64);
@@ -30,4 +32,21 @@ const _0x201d71=_0x3969;(function(_0x3b271f,_0x43efcb){const _0x34ac54=_0x3969,_
30
32
  ALTER TABLE conversation_files_v7 RENAME TO conversation_files;
31
33
  CREATE INDEX conversation_files_conversation_updated
32
34
  ON conversation_files(conversation_id, updated_at DESC, id);
33
- `;export function assertNodeSchemaV7(_0x5d1fc7){const _0x3e5738=_0x201d71,_0x1e7120=_0x5d1fc7[_0x3e5738(0x133)](_0x3e5738(0x13b))[_0x3e5738(0x138)]();if(!_0x1e7120[_0x3e5738(0x129)](_0x4b52aa=>_0x4b52aa[_0x3e5738(0x12a)]===_0x3e5738(0x13f)))throw new Error(_0x3e5738(0x128));const _0x52775d=_0x5d1fc7[_0x3e5738(0x133)](_0x3e5738(0x132))[_0x3e5738(0x138)]();if(_0x52775d===undefined||_0x52775d[_0x3e5738(0x129)](_0xbb6e68=>_0xbb6e68[_0x3e5738(0x12a)]===_0x3e5738(0x136)))throw new Error(_0x3e5738(0x12c));const _0x3a8c10=_0x5d1fc7[_0x3e5738(0x133)](_0x3e5738(0x12b))[_0x3e5738(0x13c)]();if(typeof _0x3a8c10?.[_0x3e5738(0x12d)]!==_0x3e5738(0x125)||!_0x3a8c10[_0x3e5738(0x12d)][_0x3e5738(0x12f)](_0x3e5738(0x134)))throw new Error(_0x3e5738(0x140));}function _0x52f1(){const _0x58330c=['ChjLCgfYzq','y2f0zwDVCNKGsu4GkcDvueXpquqNlcDpvvrqvvqNkq','ndiYmdG2mNniB2zvqq','CMvHC29UAw5Nx2vMzM9YDa','ngy1m2nKyte4yZjIyweWyZaZntrIyJvMoweZzwnIztvLzdeYywi0zdHLmtfIytG3m2mYzJeXmtyXmJaYyJK0nq','ywXS','ntzPt3Lqzva','odC4nJqZwM1NzfnW','ufjbr01bihrHyMXLx2LUzM8Oy29UDMvYC2f0Aw9Ux3rLBxbSyxrLx3zLCNnPB25Zkq','z2v0','mtm0nZuXsuXfwenQ','nvj0wgzRDa','BwnWx2nVBMzPz19OyxnO','tK9erv9eqvrbqKftrv9tq0HftufFsu5wquXjrdPJB252zxjZyxrPB25FzMLSzxm','mZGWotmYmgTVvNzRDG','C3rYAw5N','mtmWvKPRB3jn','CMf3','tK9erv9eqvrbqKftrv9tq0HftufFsu5wquXjrdPJB252zxjZyxrPB25FDgvTCgXHDgvFDMvYC2LVBNm','C29Tzq','BMfTzq','u0vmrunuihnXBcbguK9nihnXBgL0zv9Tyxn0zxiGv0HfuKuGDhLWzt0NDgfIBguNieforcbUyw1LpsDJB252zxjZyxrPB25FzMLSzxmN','tK9erv9eqvrbqKftrv9tq0HftufFsu5wquXjrdPOB3n0zwrFy29UDMvYC2f0Aw9UCW','C3fS','mta5ntG2nLjjEK9bza','Aw5JBhvKzxm','ntK5nJm1rMfIENzH','mZKWmtG3n016rKTPyq','ufjbr01bihrHyMXLx2LUzM8OAg9ZDgvKx2nVBNzLCNnHDgLVBNmP'];_0x52f1=function(){return _0x58330c;};return _0x52f1();}
35
+ `;
36
+ export function assertNodeSchemaV7(database) {
37
+ const templateColumns = database
38
+ .prepare('PRAGMA table_info(conversation_template_versions)')
39
+ .all();
40
+ if (!templateColumns.some((column) => column.name === 'mcp_config_hash'))
41
+ throw new Error('NODE_DATABASE_SCHEMA_INVALID:conversation_template_versions');
42
+ const conversationColumns = database.prepare('PRAGMA table_info(hosted_conversations)').all();
43
+ if (conversationColumns === undefined ||
44
+ conversationColumns.some((column) => column.name === 'reasoning_effort'))
45
+ throw new Error('NODE_DATABASE_SCHEMA_INVALID:hosted_conversations');
46
+ const conversationFiles = database
47
+ .prepare("SELECT sql FROM sqlite_master WHERE type='table' AND name='conversation_files'")
48
+ .get();
49
+ if (typeof conversationFiles?.sql !== 'string' ||
50
+ !conversationFiles.sql.includes("category IN ('UPLOAD','OUTPUT')"))
51
+ throw new Error('NODE_DATABASE_SCHEMA_INVALID:conversation_files');
52
+ }
@@ -1,5 +1,6 @@
1
- /* mar-release-protected */
2
- const _0x6b3905=_0xd039;(function(_0x81287e,_0x24e40a){const _0x2f4ba8=_0xd039,_0x502850=_0x81287e();while(!![]){try{const _0x39f322=-parseInt(_0x2f4ba8(0x1da))/(0x6ea+-0xc2+-0x627)*(-parseInt(_0x2f4ba8(0x1df))/(0x1741+0x5*-0x1d5+-0xe16))+parseInt(_0x2f4ba8(0x1ec))/(-0x1067+0x6a+0x1000)*(parseInt(_0x2f4ba8(0x1d4))/(0x132f+-0xe0*0x7+-0xd0b))+parseInt(_0x2f4ba8(0x1dc))/(0x175c+-0xa*-0x3d7+0x1d*-0x221)+-parseInt(_0x2f4ba8(0x1e1))/(0x1774+0xb63*0x1+-0x3*0xb9b)*(parseInt(_0x2f4ba8(0x1dd))/(-0xf10*0x2+-0x3*0xc7b+0x4398))+parseInt(_0x2f4ba8(0x1db))/(0x1*0xc62+0x4be+-0x2*0x88c)*(parseInt(_0x2f4ba8(0x1e2))/(-0xb08*-0x1+-0xa1*0xb+-0x414))+parseInt(_0x2f4ba8(0x1e9))/(-0x60b+0x103a+-0xa25)+-parseInt(_0x2f4ba8(0x1d8))/(0x4*-0x751+-0xf1*0x29+0x43e8);if(_0x39f322===_0x24e40a)break;else _0x502850['push'](_0x502850['shift']());}catch(_0x527cd0){_0x502850['push'](_0x502850['shift']());}}}(_0x11d2,0x18*0x42db+-0x17*0x378d+0x2a720));export const NODE_SCHEMA_VERSION_V8=0xc9*0x1b+-0x2f4+-0x1*0x1237;function _0x11d2(){const _0x27bb07=['BgfZDf9Hy3rPDML0Ev9HDcbervnd','ntDere5uu1i','CgLUBMvKx2f0','oduYmZzTwKvlBeG','Aw5JBhvKzxm','z2v0','u0vmrunuihnXBcbguK9nihnXBgL0zv9Tyxn0zxiGv0HfuKuGDhLWzt0NAw5KzxGNieforcbUyw1LpsDOB3n0zwrFy29UDMvYC2f0Aw9UC191C2vYx3bPBL9Hy3rPDML0EsC','ntGWmtC0mvrTB21LyW','ChjLCgfYzq','mMv1q1Lotq','mtmXmLPowxfnBW','mtC2nJa4nwnbt1zXDG','mta4mJGZn3z1wMTHEa','C3fS','mtqYodi2C1HXzhnH','khbPBM5Lzf9HDcbjuYbot1qGtLvmtcKGrevtqW','mtH3ugrMze8','mteWnZLyEhndz0m','BMfTzq','ywXS','C3rYAw5N','CMf3','tK9erv9eqvrbqKftrv9tq0HftufFsu5wquXjrdPOB3n0zwrFy29UDMvYC2f0Aw9UCW','C29Tzq','mtq2mJm5mfveD0TbBW','ufjbr01bihrHyMXLx2LUzM8OAg9ZDgvKx2nVBNzLCNnHDgLVBNmP'];_0x11d2=function(){return _0x27bb07;};return _0x11d2();}function _0xd039(_0x36f0f0,_0x29d0a5){_0x36f0f0=_0x36f0f0-(-0x1853+-0x121c+0x2c42);const _0x431428=_0x11d2();let _0x30a963=_0x431428[_0x36f0f0];if(_0xd039['SSnkHv']===undefined){var _0x1ad0de=function(_0x1ae859){const _0x167559='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x901f51='',_0x520513='';for(let _0x3820fa=0x2012+-0x243f+0x42d*0x1,_0x2ec3c0,_0x1627d7,_0x12dbc3=-0x2a*0x12+-0x1e*-0x7b+-0xb76;_0x1627d7=_0x1ae859['charAt'](_0x12dbc3++);~_0x1627d7&&(_0x2ec3c0=_0x3820fa%(0x1463+0xa00+0x613*-0x5)?_0x2ec3c0*(0x9*0x2fa+-0x55*0x6a+0x4*0x22a)+_0x1627d7:_0x1627d7,_0x3820fa++%(-0xde1+0x2e*0x73+-0x6c5))?_0x901f51+=String['fromCharCode'](-0x1307+0x1fc0*-0x1+0x5e*0x8d&_0x2ec3c0>>(-(-0xbef+0x233b+-0x174a)*_0x3820fa&0xb5*-0x37+0x49d*0x1+-0x1b7*-0x14)):-0xc89*-0x3+-0x6d7*-0x1+0x1639*-0x2){_0x1627d7=_0x167559['indexOf'](_0x1627d7);}for(let _0x424419=0x2024+-0xdfe+-0x913*0x2,_0x4c1268=_0x901f51['length'];_0x424419<_0x4c1268;_0x424419++){_0x520513+='%'+('00'+_0x901f51['charCodeAt'](_0x424419)['toString'](-0xa*0x325+-0x2187+-0x4109*-0x1))['slice'](-(0x7cf*-0x5+-0x3*0x16f+-0x3e*-0xb3));}return decodeURIComponent(_0x520513);};_0xd039['NiwKpX']=_0x1ad0de,_0xd039['xXZpwY']={},_0xd039['SSnkHv']=!![];}const _0x534cfa=_0x431428[0x23ae+-0xb7*0x5+0x201b*-0x1];_0xd039['OMgPjq']!==_0x534cfa&&(_0xd039['xXZpwY']={},_0xd039['OMgPjq']=_0x534cfa);const _0x17ca8e=_0xd039['xXZpwY'][_0x36f0f0];return _0x17ca8e===undefined?(_0x30a963=_0xd039['NiwKpX'](_0x30a963),_0xd039['xXZpwY'][_0x36f0f0]=_0x30a963):_0x30a963=_0x17ca8e,_0x30a963;}export const NODE_SCHEMA_MIGRATION_V8=String[_0x6b3905(0x1e6)]`
1
+ export const NODE_SCHEMA_VERSION_V8 = 8;
2
+ /** Adds hosted conversation pin metadata and its authoritative list order. */
3
+ export const NODE_SCHEMA_MIGRATION_V8 = String.raw `
3
4
  ALTER TABLE hosted_conversations
4
5
  ADD COLUMN pinned_at INTEGER CHECK (pinned_at IS NULL OR pinned_at >= 0);
5
6
  DROP INDEX hosted_conversations_user_activity;
@@ -10,4 +11,18 @@ const _0x6b3905=_0xd039;(function(_0x81287e,_0x24e40a){const _0x2f4ba8=_0xd039,_
10
11
  last_activity_at DESC,
11
12
  id DESC
12
13
  );
13
- `;export function assertNodeSchemaV8(_0x288247){const _0xa7590b=_0x6b3905,_0x4892ac=_0x288247[_0xa7590b(0x1d9)](_0xa7590b(0x1ea))[_0xa7590b(0x1e4)]();if(!_0x4892ac[_0xa7590b(0x1e8)](_0x2485a1=>_0x2485a1[_0xa7590b(0x1e3)]===_0xa7590b(0x1d3)))throw new Error(_0xa7590b(0x1e7));const _0x3be443=_0x288247[_0xa7590b(0x1d9)](_0xa7590b(0x1d7))[_0xa7590b(0x1d6)]();if(typeof _0x3be443?.[_0xa7590b(0x1de)]!==_0xa7590b(0x1e5)||!_0x3be443[_0xa7590b(0x1de)][_0xa7590b(0x1d5)](_0xa7590b(0x1e0))||!_0x3be443[_0xa7590b(0x1de)][_0xa7590b(0x1d5)](_0xa7590b(0x1eb)))throw new Error(_0xa7590b(0x1e7));}
14
+ `;
15
+ export function assertNodeSchemaV8(database) {
16
+ const conversationColumns = database
17
+ .prepare('PRAGMA table_info(hosted_conversations)')
18
+ .all();
19
+ if (!conversationColumns.some((column) => column.name === 'pinned_at'))
20
+ throw new Error('NODE_DATABASE_SCHEMA_INVALID:hosted_conversations');
21
+ const index = database
22
+ .prepare("SELECT sql FROM sqlite_master WHERE type='index' AND name='hosted_conversations_user_pin_activity'")
23
+ .get();
24
+ if (typeof index?.sql !== 'string' ||
25
+ !index.sql.includes('(pinned_at IS NOT NULL) DESC') ||
26
+ !index.sql.includes('last_activity_at DESC'))
27
+ throw new Error('NODE_DATABASE_SCHEMA_INVALID:hosted_conversations');
28
+ }
@@ -1,5 +1,9 @@
1
- /* mar-release-protected */
2
- function _0x2940(){const _0x21346e=['ufjbr01bigzVCMvPz25FA2v5CW','uKvdt1zfuKfctevFrevmrvrfra','tK9erv9eqvrbqKftrv9tq0HftufFsu5wquXjrdPOB3n0zwrFy29UDMvYC2f0Aw9Ux21LC3nHz2vZ','CgLUBMvKx2f0','otm0nZyWve1vqwLz','Ag9ZDgvKx2nVBNzLCNnHDgLVBNm','u0vmrunuihnXBcbguK9nihnXBgL0zv9Tyxn0zxiGv0HfuKuGDhLWzt0NDgfIBguNieforcbUyw1LpsDOB3n0zwrFy29UDMvYC2f0Aw9UCYC','ywXS','CMvHC29UAw5Nx2vMzM9YDa','y29UDMvYC2f0Aw9Ux2LK','ufjbr01bigzVCMvPz25FA2v5x2nOzwnRkgHVC3rLzf9JB252zxjZyxrPB25Zkq','q0ftq0ferq','nJG5ntrNAM1OuKq','C3rHDhvZieLoicGNqunusvzfjYWNvvbhuKferv9qru5esu5hjYK','C3rYAw5N','BM90BNvSBa','C3fS','zMLUza','CMf3','Ag9ZDgvKx2nVBNzLCNnHDgLVBL9TzxnZywDLCW','y29UDMvYC2f0Aw9Ux2zPBgvZ','oxnSCwP1Ca','ufjbr01bigzVCMvPz25FA2v5x2XPC3qO','ChjLCgfYzq','j0nvu1rptsC','vvbhuKferv9gquLmruq','CMvJB3zLCMfIBgvFDw50AwW','DgL0BgvFC291CMnL','BMfTzq','B25FzgvSzxrL','zM9YzwLNBL9RzxLZ','DgfIBgu','DxnLCL90zxH0x3bYzxnLBNq','tK9erv9eqvrbqKftrv9tq0HftufFsu5wquXjrdO','tK9erv9eqvrbqKftrv9tq0HftufFsu5wquXjrdPMB3jLAwDUx2TLExm','mZqWnZK3oefmvuXRtW','mtm2odK0mgXkEfPlrW','C3rHDhvZieLoicGNqunusvzfjYWNvvbhuKferv9qru5esu5hjYWNvvbhuKferv9gquLmruqNlcDsrunpvKvsqujmrv9eruXfvevejYWNrevmrvrjtKCNkq','ufjbr01bihrHyMXLx2LUzM8OAg9ZDgvKx2nVBNzLCNnHDgLVBNmP','C29Tzq','mK1HqNzSqW','z2v0','ufjbr01bihrHyMXLx2LUzM8OAg9ZDgvKx2nVBNzLCNnHDgLVBL9TzxnZywDLCYK','Aw5JBhvKzxm','mtC0nZeWneTry2vTta','revmrvrjtKC','mJuWntm3nu5XAfHyta','zgzSDf92ywX1zq','oduZodqYyMLyEffq','m2nYswjZza','zNjVBq','tK9erv9eqvrbqKftrv9tq0HftufFsu5wquXjrdPOB3n0zwrFy29UDMvYC2f0Aw9UCW'];_0x2940=function(){return _0x21346e;};return _0x2940();}const _0x18fc4d=_0x35a7;(function(_0xf2b66b,_0x2ffbd8){const _0x4cb71e=_0x35a7,_0x19ab9f=_0xf2b66b();while(!![]){try{const _0x363a65=-parseInt(_0x4cb71e(0x134))/(0xcb+0x3b*-0x6a+0x17a4)*(parseInt(_0x4cb71e(0x150))/(-0x11*-0x169+0x1a91+-0x3288))+parseInt(_0x4cb71e(0x159))/(0x43c*-0x4+0x1*-0x30a+0x13fd)*(parseInt(_0x4cb71e(0x14c))/(-0x910+-0xf95+-0x18a9*-0x1))+parseInt(_0x4cb71e(0x156))/(-0xc81*-0x3+0x14*0x106+-0x39f6)+parseInt(_0x4cb71e(0x158))/(0x4*0x7cc+0x1f2a+-0x3e54)+-parseInt(_0x4cb71e(0x14b))/(0x6b+-0x3*-0x833+-0x18fd)+-parseInt(_0x4cb71e(0x154))/(-0x1c7c+0x1d63+-0x1*0xdf)+parseInt(_0x4cb71e(0x13d))/(0x367*-0x1+0x1*0x26ed+-0x5*0x719)*(parseInt(_0x4cb71e(0x12c))/(0x232e+-0x18cb*-0x1+-0x3bef));if(_0x363a65===_0x2ffbd8)break;else _0x19ab9f['push'](_0x19ab9f['shift']());}catch(_0x52136f){_0x19ab9f['push'](_0x19ab9f['shift']());}}}(_0x2940,-0x5b36a+-0xe6b9+0xb4124));export const NODE_SCHEMA_VERSION_V9=0x23f7+-0xa*-0xbb+0x159e*-0x2;const NODE_SCHEMA_MIGRATION_V9_METADATA=String[_0x18fc4d(0x13a)]`
1
+ export const NODE_SCHEMA_VERSION_V9 = 9;
2
+ /**
3
+ * Persists title/message metadata, removes recovery states, and restores failed upgrades to the
4
+ * active version. This unreleased migration is the single boundary from v8.
5
+ */
6
+ const NODE_SCHEMA_MIGRATION_V9_METADATA = String.raw `
3
7
  ALTER TABLE hosted_conversations
4
8
  ADD COLUMN title_source TEXT NOT NULL DEFAULT 'CUSTOM'
5
9
  CHECK (title_source IN ('AUTO','CUSTOM'));
@@ -7,7 +11,8 @@ function _0x2940(){const _0x21346e=['ufjbr01bigzVCMvPz25FA2v5CW','uKvdt1zfuKfcte
7
11
  ALTER TABLE hosted_conversation_messages
8
12
  ADD COLUMN user_text_present INTEGER NOT NULL DEFAULT 1
9
13
  CHECK (user_text_present IN (0,1));
10
- `;export const NODE_SCHEMA_MIGRATION_V9_FINALIZE=String[_0x18fc4d(0x13a)]`
14
+ `;
15
+ export const NODE_SCHEMA_MIGRATION_V9_FINALIZE = String.raw `
11
16
  DELETE FROM conversation_files
12
17
  WHERE conversation_id IN (
13
18
  SELECT id
@@ -94,4 +99,65 @@ function _0x2940(){const _0x21346e=['ufjbr01bigzVCMvPz25FA2v5CW','uKvdt1zfuKfcte
94
99
  );
95
100
  CREATE INDEX hosted_conversations_template
96
101
  ON hosted_conversations(template_id, status, id);
97
- `;export const NODE_SCHEMA_MIGRATION_V9=NODE_SCHEMA_MIGRATION_V9_METADATA+'\x0a'+NODE_SCHEMA_MIGRATION_V9_FINALIZE;export function isDraftNodeSchemaV9(_0x524220){const _0x306b01=_0x18fc4d,_0x45f1ea=_0x524220[_0x306b01(0x13f)](_0x306b01(0x14e))[_0x306b01(0x12f)](),_0x1d088c=_0x45f1ea[_0x306b01(0x139)](_0x2b1967=>_0x2b1967[_0x306b01(0x144)]===_0x306b01(0x143)),_0x46a01f=_0x524220[_0x306b01(0x13f)](_0x306b01(0x12e))[_0x306b01(0x151)](),_0x2294ea=_0x524220[_0x306b01(0x13f)](_0x306b01(0x152))[_0x306b01(0x12f)](),_0x4369eb=_0x2294ea[_0x306b01(0x139)](_0x194a2d=>_0x194a2d[_0x306b01(0x144)]===_0x306b01(0x148));return _0x1d088c?.[_0x306b01(0x137)]===0x1*0x131b+-0x314+-0x1006&&_0x1d088c[_0x306b01(0x157)]===_0x306b01(0x140)&&_0x45f1ea[_0x306b01(0x14f)](_0x4f49f0=>_0x4f49f0[_0x306b01(0x144)]===_0x306b01(0x142))&&_0x45f1ea[_0x306b01(0x14f)](_0x5a6e84=>_0x5a6e84[_0x306b01(0x144)]===_0x306b01(0x12b))&&!_0x45f1ea[_0x306b01(0x14f)](_0x8016cf=>_0x8016cf[_0x306b01(0x144)]===_0x306b01(0x130))&&typeof _0x46a01f?.[_0x306b01(0x138)]===_0x306b01(0x136)&&_0x46a01f[_0x306b01(0x138)][_0x306b01(0x153)](_0x306b01(0x14d))&&_0x4369eb?.[_0x306b01(0x137)]===0xc7*-0x1+-0x90b+0x9d3&&_0x4369eb[_0x306b01(0x157)]==='1';}function _0x35a7(_0x82f6d0,_0x4c6f17){_0x82f6d0=_0x82f6d0-(0x1b0c+-0x226*-0x2+-0x1e2e);const _0x33946d=_0x2940();let _0xb3ea5a=_0x33946d[_0x82f6d0];if(_0x35a7['znAWex']===undefined){var _0x10b3a5=function(_0x4ef469){const _0x36f61e='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x476abc='',_0x78bc3='';for(let _0x32f2f6=0x1d15+0x1264+0x1*-0x2f79,_0x276f00,_0x15f010,_0x33d433=-0x499+0x22c*0xb+-0x1*0x134b;_0x15f010=_0x4ef469['charAt'](_0x33d433++);~_0x15f010&&(_0x276f00=_0x32f2f6%(0x170+0x926+-0xa92)?_0x276f00*(-0x1*0x90b+0x1db1+-0x1466)+_0x15f010:_0x15f010,_0x32f2f6++%(-0x1fc6+0xc17+0x29*0x7b))?_0x476abc+=String['fromCharCode'](-0x1b3a+-0x5a2+0x21db&_0x276f00>>(-(0xb2+-0x3*0x547+0xf25)*_0x32f2f6&0x1c53+-0x4*-0x48f+-0x3*0xf83)):-0x30f*0x6+0x19e4+-0x182*0x5){_0x15f010=_0x36f61e['indexOf'](_0x15f010);}for(let _0x570809=-0x2*0x853+0x86e+0x4*0x20e,_0x20ec36=_0x476abc['length'];_0x570809<_0x20ec36;_0x570809++){_0x78bc3+='%'+('00'+_0x476abc['charCodeAt'](_0x570809)['toString'](0x1f9c+-0x2503+0x577))['slice'](-(-0x15ed*-0x1+0x201a+-0x3605*0x1));}return decodeURIComponent(_0x78bc3);};_0x35a7['jKhZcr']=_0x10b3a5,_0x35a7['Ydcqdy']={},_0x35a7['znAWex']=!![];}const _0x16f68d=_0x33946d[0x25fd+0x971+-0x2f6e];_0x35a7['NYJXje']!==_0x16f68d&&(_0x35a7['Ydcqdy']={},_0x35a7['NYJXje']=_0x16f68d);const _0xe74932=_0x35a7['Ydcqdy'][_0x82f6d0];return _0xe74932===undefined?(_0xb3ea5a=_0x35a7['jKhZcr'](_0xb3ea5a),_0x35a7['Ydcqdy'][_0x82f6d0]=_0xb3ea5a):_0xb3ea5a=_0xe74932,_0xb3ea5a;}export function assertNodeSchemaV9(_0x50c869){const _0x582d78=_0x18fc4d,_0x4ed942=_0x50c869[_0x582d78(0x13f)](_0x582d78(0x14e))[_0x582d78(0x12f)](),_0xfa3271=_0x4ed942[_0x582d78(0x139)](_0x8adfae=>_0x8adfae[_0x582d78(0x144)]===_0x582d78(0x143));if(_0xfa3271?.[_0x582d78(0x137)]!==-0x13d9*0x1+-0x1fc6+0x70*0x76||_0xfa3271[_0x582d78(0x157)]!==_0x582d78(0x140)||_0x4ed942[_0x582d78(0x14f)](_0x57d828=>_0x57d828[_0x582d78(0x144)]===_0x582d78(0x142)))throw new Error(_0x582d78(0x15b));const _0x1b5ea0=_0x50c869[_0x582d78(0x13f)](_0x582d78(0x12e))[_0x582d78(0x151)]();if(typeof _0x1b5ea0?.[_0x582d78(0x138)]!==_0x582d78(0x136)||!_0x1b5ea0[_0x582d78(0x138)][_0x582d78(0x153)](_0x582d78(0x135))||_0x1b5ea0[_0x582d78(0x138)][_0x582d78(0x153)](_0x582d78(0x141))||_0x1b5ea0[_0x582d78(0x138)][_0x582d78(0x153)](_0x582d78(0x15d))||_0x1b5ea0[_0x582d78(0x138)][_0x582d78(0x153)](_0x582d78(0x155)))throw new Error(_0x582d78(0x15b));const _0x39fa81=_0x50c869[_0x582d78(0x13f)](_0x582d78(0x152))[_0x582d78(0x12f)](),_0x5dad7e=_0x39fa81[_0x582d78(0x139)](_0x3bdd47=>_0x3bdd47[_0x582d78(0x144)]===_0x582d78(0x148));if(_0x5dad7e?.[_0x582d78(0x137)]!==-0x1b3a+-0x5a2+0x20dd||_0x5dad7e[_0x582d78(0x157)]!=='1')throw new Error(_0x582d78(0x12a));const _0x1df56b=_0x50c869[_0x582d78(0x13f)](_0x582d78(0x15c))[_0x582d78(0x151)]();if(_0x1df56b?.[_0x582d78(0x146)]!==0xb2+-0x3*0x547+0xf24)throw new Error(_0x582d78(0x14a));if(_0x50c869[_0x582d78(0x13f)](_0x582d78(0x132))[_0x582d78(0x151)]()!==undefined)throw new Error(_0x582d78(0x14a));for(const _0x5644c3 of[_0x582d78(0x13c),_0x582d78(0x13b)]){const _0x283884=_0x50c869[_0x582d78(0x13f)](_0x582d78(0x13e)+_0x5644c3+')')[_0x582d78(0x12f)]();if(!_0x283884[_0x582d78(0x14f)](_0x2b551d=>_0x2b551d[_0x582d78(0x147)]===_0x582d78(0x12d)&&_0x2b551d[_0x582d78(0x15a)]===_0x582d78(0x131)&&_0x2b551d['to']==='id'&&_0x2b551d[_0x582d78(0x145)]===_0x582d78(0x133)))throw new Error(_0x582d78(0x149)+_0x5644c3);}}
102
+ `;
103
+ export const NODE_SCHEMA_MIGRATION_V9 = `${NODE_SCHEMA_MIGRATION_V9_METADATA}\n${NODE_SCHEMA_MIGRATION_V9_FINALIZE}`;
104
+ export function isDraftNodeSchemaV9(database) {
105
+ const conversationColumns = database
106
+ .prepare('PRAGMA table_info(hosted_conversations)')
107
+ .all();
108
+ const titleSource = conversationColumns.find((column) => column.name === 'title_source');
109
+ const conversationTable = database
110
+ .prepare("SELECT sql FROM sqlite_master WHERE type='table' AND name='hosted_conversations'")
111
+ .get();
112
+ const messageColumns = database
113
+ .prepare('PRAGMA table_info(hosted_conversation_messages)')
114
+ .all();
115
+ const userTextPresent = messageColumns.find((column) => column.name === 'user_text_present');
116
+ return (titleSource?.notnull === 1 &&
117
+ titleSource.dflt_value === "'CUSTOM'" &&
118
+ conversationColumns.some((column) => column.name === 'recoverable_until') &&
119
+ conversationColumns.some((column) => column.name === 'pinned_at') &&
120
+ !conversationColumns.some((column) => column.name === 'reasoning_effort') &&
121
+ typeof conversationTable?.sql === 'string' &&
122
+ conversationTable.sql.includes("status IN ('ACTIVE','UPGRADE_PENDING','UPGRADE_FAILED','RECOVERABLE_DELETED','DELETING')") &&
123
+ userTextPresent?.notnull === 1 &&
124
+ userTextPresent.dflt_value === '1');
125
+ }
126
+ export function assertNodeSchemaV9(database) {
127
+ const conversationColumns = database
128
+ .prepare('PRAGMA table_info(hosted_conversations)')
129
+ .all();
130
+ const titleSource = conversationColumns.find((column) => column.name === 'title_source');
131
+ if (titleSource?.notnull !== 1 ||
132
+ titleSource.dflt_value !== "'CUSTOM'" ||
133
+ conversationColumns.some((column) => column.name === 'recoverable_until'))
134
+ throw new Error('NODE_DATABASE_SCHEMA_INVALID:hosted_conversations');
135
+ const conversationTable = database
136
+ .prepare("SELECT sql FROM sqlite_master WHERE type='table' AND name='hosted_conversations'")
137
+ .get();
138
+ if (typeof conversationTable?.sql !== 'string' ||
139
+ !conversationTable.sql.includes("status IN ('ACTIVE','UPGRADE_PENDING')") ||
140
+ conversationTable.sql.includes('UPGRADE_FAILED') ||
141
+ conversationTable.sql.includes('RECOVERABLE_DELETED') ||
142
+ conversationTable.sql.includes('DELETING'))
143
+ throw new Error('NODE_DATABASE_SCHEMA_INVALID:hosted_conversations');
144
+ const messageColumns = database
145
+ .prepare('PRAGMA table_info(hosted_conversation_messages)')
146
+ .all();
147
+ const userTextPresent = messageColumns.find((column) => column.name === 'user_text_present');
148
+ if (userTextPresent?.notnull !== 1 || userTextPresent.dflt_value !== '1')
149
+ throw new Error('NODE_DATABASE_SCHEMA_INVALID:hosted_conversation_messages');
150
+ const foreignKeys = database.prepare('PRAGMA foreign_keys').get();
151
+ if (foreignKeys?.foreign_keys !== 1)
152
+ throw new Error('NODE_DATABASE_SCHEMA_INVALID:foreign_keys');
153
+ if (database.prepare('PRAGMA foreign_key_check(hosted_conversations)').get() !== undefined)
154
+ throw new Error('NODE_DATABASE_SCHEMA_INVALID:foreign_keys');
155
+ for (const table of ['conversation_files', 'hosted_conversation_messages']) {
156
+ const foreignKeys = database.prepare(`PRAGMA foreign_key_list(${table})`).all();
157
+ if (!foreignKeys.some((foreignKey) => foreignKey.table === 'hosted_conversations' &&
158
+ foreignKey.from === 'conversation_id' &&
159
+ foreignKey.to === 'id' &&
160
+ foreignKey.on_delete === 'CASCADE'))
161
+ throw new Error(`NODE_DATABASE_SCHEMA_INVALID:${table}`);
162
+ }
163
+ }
@@ -1,5 +1,6 @@
1
- /* mar-release-protected */
2
- const _0x49a32c=_0x53fb;(function(_0x4af5a2,_0x4dc189){const _0xe730c7=_0x53fb,_0x54e3aa=_0x4af5a2();while(!![]){try{const _0x5aced8=-parseInt(_0xe730c7(0xba))/(-0xad*0x2c+0x35c+0x3*0x8cb)+parseInt(_0xe730c7(0xac))/(-0x55*0x5+0x1*-0x1d5+0x8*0x70)*(-parseInt(_0xe730c7(0xab))/(0x14e6+0x6a0*-0x4+0x59d))+parseInt(_0xe730c7(0x91))/(0xe*0x43+0xc5*0x14+0x2*-0x985)*(parseInt(_0xe730c7(0xb8))/(-0x5*0x59e+0x6*-0x32b+-0x1*-0x2f1d))+-parseInt(_0xe730c7(0xb4))/(-0xf04+0x4*0x367+-0x3*-0x7a)+-parseInt(_0xe730c7(0x8f))/(-0x24c4+-0xd6c+-0x10bd*-0x3)*(-parseInt(_0xe730c7(0xb2))/(-0x7af+-0x1*-0x2335+-0x3*0x92a))+-parseInt(_0xe730c7(0x99))/(0x126a+0x211*0x3+-0x11e*0x16)+parseInt(_0xe730c7(0xb0))/(0xa6a+-0x1c31+-0x11d1*-0x1)*(parseInt(_0xe730c7(0x9b))/(0x525+-0x162d+0x1113));if(_0x5aced8===_0x4dc189)break;else _0x54e3aa['push'](_0x54e3aa['shift']());}catch(_0x409304){_0x54e3aa['push'](_0x54e3aa['shift']());}}}(_0x303a,-0x1*-0x10c6d+-0x455*0xcd+0x2*0x2b471));export const NODE_SCHEMA_VERSION_V10=0x22df+0x231d+-0x45f2*0x1;function _0x303a(){const _0x203d44=['mty0odHjBLn5A2O','revmrvrjtKC','Ag9ZDgvKx2nVBNzLCNnHDgLVBL9TzxnZywDLCW','C29Tzq','CMvJB3zLCMfIBgvFDw50AwW','ufjbr01bihrHyMXLx2LUzM8OAg9ZDgvKx2nVBNzLCNnHDgLVBL9TzxnZywDLCYK','ChjLCgfYzq','B25FzgvSzxrL','mJeXndG1nMDuwKPMDG','vvbhuKferv9gquLmruq','ntCZmwPRvfzcra','Ag9ZDgvKx2nVBNzLCNnHDgLVBNm','DgL0BgvFC291CMnL','DxnLCL90zxH0x3bYzxnLBNq','j0nvu1rptsC','y29UDMvYC2f0Aw9Ux2zPBgvZ','ufjbr01bigzVCMvPz25FA2v5CW','Aw5JBhvKzxm','C3rYAw5N','vvbhuKferv9qru5esu5h','zgzSDf92ywX1zq','y29UDMvYC2f0Aw9Ux2LK','BM90BNvSBa','CgvUzgLUz192zxjZAw9Ux2LK','u0vmrunuihnXBcbguK9nihnXBgL0zv9Tyxn0zxiGv0HfuKuGDhLWzt0NDgfIBguNieforcbUyw1LpsDOB3n0zwrFy29UDMvYC2f0Aw9UCYC','CMf3','mJaWn0jRsxzSCG','mtC4AgLNEeH3','tK9erv9eqvrbqKftrv9tq0HftufFsu5wquXjrdPMB3jLAwDUx2TLExm','BMfTzq','uKvdt1zfuKfctevFrevmrvrfra','mta5mtbttNLQDLC','ufjbr01bihrHyMXLx2LUzM8OAg9ZDgvKx2nVBNzLCNnHDgLVBNmP','mZKYANriv1z4','tK9erv9eqvrbqKftrv9tq0HftufFsu5wquXjrdPOB3n0zwrFy29UDMvYC2f0Aw9Ux21LC3nHz2vZ','mtuZotu4mNjXq3j4sG','ufjbr01bigzVCMvPz25FA2v5x2XPC3qO','C3fS','zNjVBq','mtC1tKzou2DZ','C3rHDhvZieLoicGNqunusvzfjYK','mJa3mZC0q1bMCvvR','q0ftq0ferq','tK9erv9eqvrbqKftrv9tq0HftufFsu5wquXjrdO','ufjbr01bigzVCMvPz25FA2v5x2nOzwnRkgHVC3rLzf9JB252zxjZyxrPB25Zkq','z2v0','zM9YzwLNBL9RzxLZ','tK9erv9eqvrbqKftrv9tq0HftufFsu5wquXjrdPOB3n0zwrFy29UDMvYC2f0Aw9UCW','zMLUza','DgfIBgu','mZq1mZfKqNDRDKW','ywXS'];_0x303a=function(){return _0x203d44;};return _0x303a();}export const NODE_SCHEMA_MIGRATION_V10=String[_0x49a32c(0xaa)]`
1
+ export const NODE_SCHEMA_VERSION_V10 = 10;
2
+ /** Removes persistent hosted-conversation upgrade scheduling state. */
3
+ export const NODE_SCHEMA_MIGRATION_V10 = String.raw `
3
4
  UPDATE conversation_template_versions
4
5
  SET reference_count = (
5
6
  SELECT COUNT(*)
@@ -53,4 +54,43 @@ const _0x49a32c=_0x53fb;(function(_0x4af5a2,_0x4dc189){const _0xe730c7=_0x53fb,_
53
54
  );
54
55
  CREATE INDEX hosted_conversations_template
55
56
  ON hosted_conversations(template_id, status, id);
56
- `;function _0x53fb(_0x124795,_0x481286){_0x124795=_0x124795-(0x43e*0x5+-0x45e+-0x104f);const _0x398b85=_0x303a();let _0x49060b=_0x398b85[_0x124795];if(_0x53fb['ZtqsGI']===undefined){var _0x522a61=function(_0x1fdf3c){const _0x1ebb38='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x34eb87='',_0x201c2c='';for(let _0x2bb81f=-0x63*-0x2a+0xe91*0x2+-0x2d60,_0x412382,_0x6a2e36,_0x33087b=-0x2419+-0x6*-0x5b+0x21f7;_0x6a2e36=_0x1fdf3c['charAt'](_0x33087b++);~_0x6a2e36&&(_0x412382=_0x2bb81f%(0x483*0x7+0x2464+0x9*-0x78d)?_0x412382*(-0x65*-0x41+-0x53b*0x1+-0x142a)+_0x6a2e36:_0x6a2e36,_0x2bb81f++%(-0x100a*-0x2+0x2*0xf4f+-0x3eae))?_0x34eb87+=String['fromCharCode'](-0x12*-0x58+0xcda+0x95*-0x1f&_0x412382>>(-(-0x11e7*-0x1+-0x26e9+0x1504)*_0x2bb81f&-0x107*-0xe+-0x1995+0xd*0xdd)):0x17b7+-0x40f*-0x7+-0x3420){_0x6a2e36=_0x1ebb38['indexOf'](_0x6a2e36);}for(let _0x29b57f=0x329*0x6+0x18c7+-0x2bbd,_0x13dd26=_0x34eb87['length'];_0x29b57f<_0x13dd26;_0x29b57f++){_0x201c2c+='%'+('00'+_0x34eb87['charCodeAt'](_0x29b57f)['toString'](0x1e83+-0x17c4+-0x6af))['slice'](-(-0x343+-0xab5*-0x1+-0x7*0x110));}return decodeURIComponent(_0x201c2c);};_0x53fb['izvsiU']=_0x522a61,_0x53fb['lZgGxG']={},_0x53fb['ZtqsGI']=!![];}const _0xb45447=_0x398b85[-0x42*0x57+-0x1*0xc26+0x2294];_0x53fb['CiIdls']!==_0xb45447&&(_0x53fb['lZgGxG']={},_0x53fb['CiIdls']=_0xb45447);const _0x22d4af=_0x53fb['lZgGxG'][_0x124795];return _0x22d4af===undefined?(_0x49060b=_0x53fb['izvsiU'](_0x49060b),_0x53fb['lZgGxG'][_0x124795]=_0x49060b):_0x49060b=_0x22d4af,_0x49060b;}export function assertNodeSchemaV10(_0x485919){const _0x69e804=_0x49a32c,_0x46e5ec=_0x485919[_0x69e804(0x97)](_0x69e804(0xb1))[_0x69e804(0x90)](),_0x21afcd=_0x46e5ec[_0x69e804(0x8d)](_0x1b073d=>_0x1b073d[_0x69e804(0xae)]===_0x69e804(0x9d));if(_0x21afcd?.[_0x69e804(0xa7)]!==0x19fe+0x92b*-0x1+0x10d2*-0x1||_0x21afcd[_0x69e804(0xa5)]!==_0x69e804(0x9f)||_0x46e5ec[_0x69e804(0x94)](_0x56e9f6=>_0x56e9f6[_0x69e804(0xae)]===_0x69e804(0xa8)||_0x56e9f6[_0x69e804(0xae)]===_0x69e804(0x95)))throw new Error(_0x69e804(0x8c));const _0x373ded=_0x485919[_0x69e804(0x97)](_0x69e804(0xa9))[_0x69e804(0x8a)]();if(typeof _0x373ded?.[_0x69e804(0xb6)]!==_0x69e804(0xa3)||!_0x373ded[_0x69e804(0xb6)][_0x69e804(0xa2)](_0x69e804(0xb9))||_0x373ded[_0x69e804(0xb6)][_0x69e804(0xa2)](_0x69e804(0xa4))||_0x373ded[_0x69e804(0xb6)][_0x69e804(0xa2)](_0x69e804(0x9a))||_0x373ded[_0x69e804(0xb6)][_0x69e804(0xa2)](_0x69e804(0xaf))||_0x373ded[_0x69e804(0xb6)][_0x69e804(0xa2)](_0x69e804(0x92)))throw new Error(_0x69e804(0x8c));const _0x3f5f4a=_0x485919[_0x69e804(0x97)](_0x69e804(0x96))[_0x69e804(0x90)](),_0x5b648e=_0x3f5f4a[_0x69e804(0x8d)](_0x5319c8=>_0x5319c8[_0x69e804(0xae)]===_0x69e804(0x9e));if(_0x5b648e?.[_0x69e804(0xa7)]!==0x109*-0x13+0xe12+-0xef*-0x6||_0x5b648e[_0x69e804(0xa5)]!=='1')throw new Error(_0x69e804(0xb3));const _0x1f0db5=_0x485919[_0x69e804(0x97)](_0x69e804(0xa1))[_0x69e804(0x8a)]();if(_0x1f0db5?.[_0x69e804(0x8b)]!==0x2283+0x222a*-0x1+-0x16*0x4)throw new Error(_0x69e804(0xad));if(_0x485919[_0x69e804(0x97)](_0x69e804(0x89))[_0x69e804(0x8a)]()!==undefined)throw new Error(_0x69e804(0xad));for(const _0x458a2f of[_0x69e804(0xa0),_0x69e804(0x93)]){const _0x3323b=_0x485919[_0x69e804(0x97)](_0x69e804(0xb5)+_0x458a2f+')')[_0x69e804(0x90)]();if(!_0x3323b[_0x69e804(0x94)](_0x463e67=>_0x463e67[_0x69e804(0x8e)]===_0x69e804(0x9c)&&_0x463e67[_0x69e804(0xb7)]===_0x69e804(0xa6)&&_0x463e67['to']==='id'&&_0x463e67[_0x69e804(0x98)]===_0x69e804(0xbb)))throw new Error(_0x69e804(0xbc)+_0x458a2f);}}
57
+ `;
58
+ export function assertNodeSchemaV10(database) {
59
+ const conversationColumns = database
60
+ .prepare('PRAGMA table_info(hosted_conversations)')
61
+ .all();
62
+ const titleSource = conversationColumns.find((column) => column.name === 'title_source');
63
+ if (titleSource?.notnull !== 1 ||
64
+ titleSource.dflt_value !== "'CUSTOM'" ||
65
+ conversationColumns.some((column) => column.name === 'pending_version_id' || column.name === 'recoverable_until'))
66
+ throw new Error('NODE_DATABASE_SCHEMA_INVALID:hosted_conversations');
67
+ const conversationTable = database
68
+ .prepare("SELECT sql FROM sqlite_master WHERE type='table' AND name='hosted_conversations'")
69
+ .get();
70
+ if (typeof conversationTable?.sql !== 'string' ||
71
+ !conversationTable.sql.includes("status IN ('ACTIVE')") ||
72
+ conversationTable.sql.includes('UPGRADE_PENDING') ||
73
+ conversationTable.sql.includes('UPGRADE_FAILED') ||
74
+ conversationTable.sql.includes('RECOVERABLE_DELETED') ||
75
+ conversationTable.sql.includes('DELETING'))
76
+ throw new Error('NODE_DATABASE_SCHEMA_INVALID:hosted_conversations');
77
+ const messageColumns = database
78
+ .prepare('PRAGMA table_info(hosted_conversation_messages)')
79
+ .all();
80
+ const userTextPresent = messageColumns.find((column) => column.name === 'user_text_present');
81
+ if (userTextPresent?.notnull !== 1 || userTextPresent.dflt_value !== '1')
82
+ throw new Error('NODE_DATABASE_SCHEMA_INVALID:hosted_conversation_messages');
83
+ const foreignKeys = database.prepare('PRAGMA foreign_keys').get();
84
+ if (foreignKeys?.foreign_keys !== 1)
85
+ throw new Error('NODE_DATABASE_SCHEMA_INVALID:foreign_keys');
86
+ if (database.prepare('PRAGMA foreign_key_check(hosted_conversations)').get() !== undefined)
87
+ throw new Error('NODE_DATABASE_SCHEMA_INVALID:foreign_keys');
88
+ for (const table of ['conversation_files', 'hosted_conversation_messages']) {
89
+ const foreignKeys = database.prepare(`PRAGMA foreign_key_list(${table})`).all();
90
+ if (!foreignKeys.some((foreignKey) => foreignKey.table === 'hosted_conversations' &&
91
+ foreignKey.from === 'conversation_id' &&
92
+ foreignKey.to === 'id' &&
93
+ foreignKey.on_delete === 'CASCADE'))
94
+ throw new Error(`NODE_DATABASE_SCHEMA_INVALID:${table}`);
95
+ }
96
+ }
@@ -1,5 +1,6 @@
1
- /* mar-release-protected */
2
- const _0x403d69=_0x4b15;(function(_0x511a6e,_0xb02a3b){const _0x38de64=_0x4b15,_0x309cae=_0x511a6e();while(!![]){try{const _0x1bcb90=parseInt(_0x38de64(0x7c))/(0xe76+-0x12ac*0x2+0x3*0x7a1)+parseInt(_0x38de64(0x79))/(0x1710+0xde7+0x1*-0x24f5)+parseInt(_0x38de64(0x7f))/(0x3bb+0xc1*0x33+-0x2a2b)+-parseInt(_0x38de64(0x8e))/(0x215*0x7+-0x353*-0x8+-0x2927)*(parseInt(_0x38de64(0x7e))/(-0xe5b+-0x661*-0x3+0x17*-0x35))+parseInt(_0x38de64(0x89))/(-0xe5*-0x9+0x460+-0xc67)*(-parseInt(_0x38de64(0x78))/(-0x1*-0xc2f+0x16a*-0x13+0xeb6))+-parseInt(_0x38de64(0x85))/(0x1c38+0x3db+-0x277*0xd)+parseInt(_0x38de64(0x86))/(-0x220a+0x22cf+-0xbc);if(_0x1bcb90===_0xb02a3b)break;else _0x309cae['push'](_0x309cae['shift']());}catch(_0x1f29c1){_0x309cae['push'](_0x309cae['shift']());}}}(_0xe532,-0x2664+0x1b5d9+-0x17*-0x964));function _0x4b15(_0x21bd99,_0x204385){_0x21bd99=_0x21bd99-(-0x1b74+0x8d*0x21+0x9bd);const _0x2ba59f=_0xe532();let _0xb8cf39=_0x2ba59f[_0x21bd99];if(_0x4b15['cpWcbr']===undefined){var _0x2d6abd=function(_0x292eeb){const _0x531ddc='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5aeb88='',_0x4156d7='';for(let _0x21cabf=0x2511+0x1*0x1a12+-0x3f23,_0x2ef6b2,_0x5cd816,_0x5d67cd=0x254d+0x26f5+-0x4c42;_0x5cd816=_0x292eeb['charAt'](_0x5d67cd++);~_0x5cd816&&(_0x2ef6b2=_0x21cabf%(-0x2273+-0x1688+0x38ff)?_0x2ef6b2*(-0x250*0x8+0x108d+0x233*0x1)+_0x5cd816:_0x5cd816,_0x21cabf++%(0x10dd+-0x879+-0x860))?_0x5aeb88+=String['fromCharCode'](-0x18c2*0x1+0x4*-0x557+0x2f1d&_0x2ef6b2>>(-(-0x2*0x69d+-0x20f+0x519*0x3)*_0x21cabf&0x3*-0x407+-0x666+0x1281)):0xd*0x14c+-0x1cc2+0xbe6){_0x5cd816=_0x531ddc['indexOf'](_0x5cd816);}for(let _0x5f230a=0x1cbc+0x99e+-0x265a,_0x338609=_0x5aeb88['length'];_0x5f230a<_0x338609;_0x5f230a++){_0x4156d7+='%'+('00'+_0x5aeb88['charCodeAt'](_0x5f230a)['toString'](-0x1110+0x19*-0x16d+-0x5dd*-0x9))['slice'](-(0x734+-0x1*0x18b3+0x1*0x1181));}return decodeURIComponent(_0x4156d7);};_0x4b15['aYklsL']=_0x2d6abd,_0x4b15['IWNnsT']={},_0x4b15['cpWcbr']=!![];}const _0x5055fd=_0x2ba59f[-0x1a4a+-0xcc8*0x2+-0x19ed*-0x2];_0x4b15['WhooYN']!==_0x5055fd&&(_0x4b15['IWNnsT']={},_0x4b15['WhooYN']=_0x5055fd);const _0x323b25=_0x4b15['IWNnsT'][_0x21bd99];return _0x323b25===undefined?(_0xb8cf39=_0x4b15['aYklsL'](_0xb8cf39),_0x4b15['IWNnsT'][_0x21bd99]=_0xb8cf39):_0xb8cf39=_0x323b25,_0xb8cf39;}function _0xe532(){const _0x5276bc=['C3rYAw5N','DgL0BgvFC291CMnL','ntu3odv5txjQsfG','Aw5JBhvKzxm','nwnPq0PqzG','nda4mta1tgDyshPQ','ywXS','DgL0BgvFC291CMnLieLoicGNrevgqvvmvcCSj0fvve8NlcDdvvnut00Nkq','C3fS','zgzSDf92ywX1zq','u0vmrunuihnXBcbguK9nihnXBgL0zv9Tyxn0zxiGv0HfuKuGDhLWzt0NDgfIBguNieforcbUyw1LpsDOB3n0zwrFy29UDMvYC2f0Aw9UCYC','mJi4ntq3mLLOC3jIzW','mJe0ndm5nhLsqNDuwa','BMfTzq','CMf3','mtaZoevQAenVqq','ChjLCgfYzq','zMLUza','ufjbr01bihrHyMXLx2LUzM8OAg9ZDgvKx2nVBNzLCNnHDgLVBNmP','tK9erv9eqvrbqKftrv9tq0HftufFsu5wquXjrdPMB3jLAwDUx2TLExm','mJCZndi4veDPBgPV','j0nvu1rptsC','BM90BNvSBa','tK9erv9eqvrbqKftrv9tq0HftufFsu5wquXjrdPOB3n0zwrFy29UDMvYC2f0Aw9UCW','z2v0','ufjbr01bigzVCMvPz25FA2v5x2nOzwnRkgHVC3rLzf9JB252zxjZyxrPB25Zkq','mZe4nuzPAxbszq','mZiWndq2CNzntwL3'];_0xe532=function(){return _0x5276bc;};return _0xe532();}export const NODE_SCHEMA_VERSION_V11=0x18c*0x1+-0x4a2+0x321;export const NODE_SCHEMA_MIGRATION_V11=String[_0x403d69(0x88)]`
1
+ export const NODE_SCHEMA_VERSION_V11 = 11;
2
+ /** Adds the fixed localized-display marker for new hosted conversations. */
3
+ export const NODE_SCHEMA_MIGRATION_V11 = String.raw `
3
4
  CREATE TABLE hosted_conversations_v11 (
4
5
  id TEXT PRIMARY KEY,
5
6
  user_storage_key TEXT NOT NULL,
@@ -47,4 +48,20 @@ const _0x403d69=_0x4b15;(function(_0x511a6e,_0xb02a3b){const _0x38de64=_0x4b15,_
47
48
  );
48
49
  CREATE INDEX hosted_conversations_template
49
50
  ON hosted_conversations(template_id, status, id);
50
- `;export function assertNodeSchemaV11(_0xbbe248){const _0x260606=_0x403d69,_0x191c56=_0xbbe248[_0x260606(0x8a)](_0x260606(0x8c))[_0x260606(0x80)](),_0x43e31d=_0x191c56[_0x260606(0x8b)](_0xaf2a7b=>_0xaf2a7b[_0x260606(0x87)]===_0x260606(0x7b)),_0x53cc3a=_0xbbe248[_0x260606(0x8a)](_0x260606(0x84))[_0x260606(0x76)]();if(_0x43e31d?.[_0x260606(0x90)]!==-0x233a+-0x2273+0x45ae||_0x43e31d[_0x260606(0x83)]!==_0x260606(0x8f)||typeof _0x53cc3a?.[_0x260606(0x82)]!==_0x260606(0x7a)||!_0x53cc3a[_0x260606(0x82)][_0x260606(0x7d)](_0x260606(0x81)))throw new Error(_0x260606(0x91));if(_0xbbe248[_0x260606(0x8a)](_0x260606(0x77))[_0x260606(0x76)]()!==undefined)throw new Error(_0x260606(0x8d));}
51
+ `;
52
+ export function assertNodeSchemaV11(database) {
53
+ const conversationColumns = database
54
+ .prepare('PRAGMA table_info(hosted_conversations)')
55
+ .all();
56
+ const titleSource = conversationColumns.find((column) => column.name === 'title_source');
57
+ const conversationTable = database
58
+ .prepare("SELECT sql FROM sqlite_master WHERE type='table' AND name='hosted_conversations'")
59
+ .get();
60
+ if (titleSource?.notnull !== 1 ||
61
+ titleSource.dflt_value !== "'CUSTOM'" ||
62
+ typeof conversationTable?.sql !== 'string' ||
63
+ !conversationTable.sql.includes("title_source IN ('DEFAULT','AUTO','CUSTOM')"))
64
+ throw new Error('NODE_DATABASE_SCHEMA_INVALID:hosted_conversations');
65
+ if (database.prepare('PRAGMA foreign_key_check(hosted_conversations)').get() !== undefined)
66
+ throw new Error('NODE_DATABASE_SCHEMA_INVALID:foreign_keys');
67
+ }
@@ -0,0 +1,8 @@
1
+ export const NODE_SCHEMA_VERSION_V12 = 12;
2
+ export const NODE_SCHEMA_MIGRATION_V12 = 'ALTER TABLE workspaces ADD COLUMN preserve_git_config INTEGER NOT NULL DEFAULT 1 CHECK (preserve_git_config IN (0,1));';
3
+ export function assertNodeSchemaV12(database) {
4
+ const columns = database.prepare('PRAGMA table_info(workspaces)').all();
5
+ const column = columns.find((value) => value.name === 'preserve_git_config');
6
+ if (column?.notnull !== 1 || column.dflt_value !== '1')
7
+ throw new Error('NODE_DATABASE_SCHEMA_INVALID:workspaces');
8
+ }
@@ -1,2 +1,186 @@
1
- /* mar-release-protected */
2
- function _0xb187(){const _0x144535=['C3rHDa','BMfTzq','AxneAxjLy3rVCNK','yMfZzty0DxjS','C2HHmJu2','CgfYC2u','ndyZnJb1te9WCue','BgvUz3rO','mZqZotuXnK9NBNz4ua','ywXSB2nvBNnHzMu','DgfYz2v0tgLUzxm','yw5JAg9YqNL0zxm','zw5KC1DPDgG','y2XVC2u','mtq0u3P1y1Hj','C2L6zq','CgfNzq','CMvHza','ywXS','Bwf4','lMPZB25S','nujsrfDfta','B2jQzwn0','zgLNzxn0','C2XPy2u','BMv4DevUza','C3vIyxjYyxK','C25HChnOB3rfBMq','nJC5ota4uxLntM1R','zNjVBq','mJeWmZCZog5RqvHJyW','DxbKyxrL','ndG4otm1meXZD2Thzq','Dg9tDhjPBMC','y29Uy2f0','Aw5KzxHpzG','BwLU','DgfPBej5DgvZ','ywXSB2m','Bwf4qNL0zxm','zMLSzufUy2HVCG','m1rAseTPza','DxrMoa','ndG5mJGYB01mrLbw','AgvHzej5DgvZ','ndiYoda3tM5jq0zQ','AxnbCNjHEq','AxngAwXL','ndrSEgPHy3K','ChvZAa'];_0xb187=function(){return _0x144535;};return _0xb187();}(function(_0x2beeb7,_0x47ba6a){const _0x32814e=_0x394e,_0x42be97=_0x2beeb7();while(!![]){try{const _0x50ff66=-parseInt(_0x32814e(0x189))/(0x1382+-0x13f0*-0x1+-0x2771)+parseInt(_0x32814e(0x198))/(-0x1970+-0x1*-0xab7+0x1a3*0x9)*(parseInt(_0x32814e(0x196))/(-0x1c2c+0x6*0xe1+-0x73*-0x33))+-parseInt(_0x32814e(0x175))/(0xe1f+0x2471+-0x328c)*(parseInt(_0x32814e(0x182))/(0x753+-0x113c+0x1f*0x52))+-parseInt(_0x32814e(0x18b))/(-0x9*-0x38b+-0x4b*-0xe+-0x9*0x3ff)+parseInt(_0x32814e(0x19a))/(0x415+0x1*-0x3fa+-0x14)+parseInt(_0x32814e(0x173))/(-0x1*0x1c4f+0x2026+0x145*-0x3)*(parseInt(_0x32814e(0x17b))/(-0x1dcd+-0xd9b*-0x1+0x103b))+parseInt(_0x32814e(0x18d))/(0x3b2+0x4*-0x171+0x21c)*(parseInt(_0x32814e(0x19d))/(-0x147a*0x1+0x1361+0x49*0x4));if(_0x50ff66===_0x47ba6a)break;else _0x42be97['push'](_0x42be97['shift']());}catch(_0x574621){_0x42be97['push'](_0x42be97['shift']());}}}(_0xb187,-0xc9adf+-0x2*-0x249d+0x136299));import{createHash}from'node:crypto';import{open,readdir}from'node:fs/promises';import{join}from'node:path';export async function readJsonlFileAnchor(_0x5a0e22,_0x3b84b7){const _0xd883f0=_0x394e;try{const _0x11f917=await open(_0x5a0e22,'r');try{const _0x215a0d=await _0x11f917[_0xd883f0(0x19f)]();if(_0x3b84b7<0x7*0xca+0x1e80+-0x9f*0x3a||_0x3b84b7>_0x215a0d[_0xd883f0(0x17c)])return undefined;return createHash(_0xd883f0(0x171))[_0xd883f0(0x18c)](await readAt(_0x11f917,_0x3b84b7,0xe52+-0x1671*0x1+-0x129*-0x7))[_0xd883f0(0x184)](_0xd883f0(0x170));}finally{await _0x11f917[_0xd883f0(0x17a)]();}}catch{return undefined;}}export async function readJsonlBackwardWindow(_0x5b770d,_0x50878e){const _0x20d312=_0x394e;try{const _0x5e3962=await open(_0x5b770d,'r');try{const _0x455ef8=await _0x5e3962[_0x20d312(0x19f)](),_0x397d79=_0x50878e[_0x20d312(0x17d)]?.[_0x20d312(0x188)]??_0x455ef8[_0x20d312(0x17c)];if(_0x397d79>_0x455ef8[_0x20d312(0x17c)])return undefined;const _0x48679b=_0x50878e[_0x20d312(0x17d)]?.[_0x20d312(0x178)]??Math[_0x20d312(0x191)](0x2279+0x1dc+-0x1455,_0x397d79);if(_0x48679b<-0x1*0x5f5+0x1f9d*-0x1+0x2592||_0x48679b>_0x397d79)return undefined;const _0x49dde2=await readAt(_0x5e3962,_0x48679b,0x1b91+-0xb3a+-0x1057*0x1),_0x457333=createHash(_0x20d312(0x171))[_0x20d312(0x18c)](_0x49dde2)[_0x20d312(0x184)](_0x20d312(0x170));if(_0x50878e[_0x20d312(0x17d)]!==undefined&&_0x50878e[_0x20d312(0x17d)][_0x20d312(0x195)]!==_0x457333)return undefined;const _0x4f1f9b=Math[_0x20d312(0x191)](_0x50878e[_0x20d312(0x199)],_0x397d79),_0x14321a=Math[_0x20d312(0x191)](Math[_0x20d312(0x180)](_0x50878e[_0x20d312(0x17d)]?.[_0x20d312(0x186)]??_0x397d79,_0x4f1f9b),_0x397d79),_0x1e79d5=Math[_0x20d312(0x180)](_0x4f1f9b,_0x14321a-_0x50878e[_0x20d312(0x194)]),_0x1df7e7=await readAt(_0x5e3962,_0x4f1f9b,-0x1558+0xf5b+0x5fd);let _0x32d11f=await readAt(_0x5e3962,_0x14321a-_0x1e79d5,_0x1e79d5),_0x592ccc=_0x1e79d5;if(_0x1e79d5>_0x4f1f9b){const _0x597851=_0x32d11f[_0x20d312(0x190)](-0x4c7+-0x25bb+0x2a8c);_0x597851<0x5*0x329+0x525+-0x14f2?(_0x32d11f=Buffer[_0x20d312(0x193)](-0x19db+-0xe*0x95+-0x5*-0x6cd),_0x592ccc=_0x14321a):(_0x592ccc+=_0x597851+(-0xcc2*-0x1+-0x1b47+0xe86),_0x32d11f=_0x32d11f[_0x20d312(0x187)](_0x597851+(-0x2fe*-0x1+0x315*0x6+0x729*-0x3)));}if(_0x32d11f[_0x20d312(0x174)]>-0x65e*-0x1+-0x6c9+0x6b){let _0x4c7774=_0x32d11f['at'](-(-0x2581+0x247+0x233b))===0x2615+-0x9cb+-0x1c40?-0x1*0x174e+0x2335+-0x115*0xb:-0x1837*-0x1+0x1*-0x1c3d+0x407*0x1;for(let _0x419562=_0x32d11f[_0x20d312(0x174)]-(-0x4d*0x59+-0xb35+0x25fb);_0x419562>=0x2e6+-0x2*-0x827+-0x1334*0x1;_0x419562-=0x12ab*0x1+-0x23e9+0x113f){if(_0x32d11f[_0x419562]!==-0x8*0x79+0x7c3*-0x2+-0x1358*-0x1)continue;_0x4c7774+=-0xb*-0x3b+0xb56*-0x2+0x2*0xa12;if(_0x4c7774<=_0x50878e[_0x20d312(0x177)])continue;_0x592ccc+=_0x419562+(0x3c2+-0x2225+0x1e64),_0x32d11f=_0x32d11f[_0x20d312(0x187)](_0x419562+(-0x25c7+-0x176c+0x3d34*0x1));break;}}const _0x295a57=_0x592ccc===_0x4f1f9b;return{'content':_0x295a57?Buffer[_0x20d312(0x18f)]([_0x1df7e7,_0x32d11f])[_0x20d312(0x18e)](_0x20d312(0x197)):''+_0x1df7e7[_0x20d312(0x18e)](_0x20d312(0x197))+(_0x4f1f9b>0xba6*-0x1+0x2031+0x1*-0x148b&&_0x32d11f[_0x20d312(0x174)]>0x15c5*-0x1+-0x15e1+0x1*0x2ba6?'\x0a':'')+_0x32d11f[_0x20d312(0x18e)](_0x20d312(0x197)),'truncated':_0x592ccc>_0x4f1f9b,'pageContent':_0x32d11f[_0x20d312(0x18e)](_0x20d312(0x197)),'size':_0x455ef8[_0x20d312(0x17c)],'start':_0x592ccc,'end':_0x14321a,'snapshotEnd':_0x397d79,'fileAnchor':_0x457333,'anchorBytes':_0x48679b};}finally{await _0x5e3962[_0x20d312(0x17a)]();}}catch{return undefined;}}export async function readJsonlWindow(_0x38d274,_0x124a15){const _0x1a981f=_0x394e;try{const _0x4530fd=await open(_0x38d274,'r');try{const _0x3f79dc=await _0x4530fd[_0x1a981f(0x19f)](),_0x20853b=Math[_0x1a981f(0x191)](_0x124a15[_0x1a981f(0x199)]??-0x15b3+0x4*-0x58f+-0xa3*-0x45,_0x3f79dc[_0x1a981f(0x17c)]),_0x104c42=_0x3f79dc[_0x1a981f(0x17c)]-_0x20853b,_0x55e988=Math[_0x1a981f(0x191)](_0x124a15[_0x1a981f(0x192)]??0x412*0x1+0x23*0x59+-0x1*0x103d,_0x104c42),_0x4f7938=await readAt(_0x4530fd,_0x20853b,0x253f+-0xbb9+-0x1986),_0x3843d5=_0x3f79dc[_0x1a981f(0x17c)]-_0x55e988,_0x525288=await readAt(_0x4530fd,_0x55e988,_0x3843d5),_0x2bba06=_0x20853b>-0x2605*-0x1+-0x1*-0x10fc+0x3701*-0x1&&_0x55e988>0x1*-0x1cc9+0x189c+0x1*0x42d&&_0x3843d5===_0x20853b;return{'content':_0x2bba06?Buffer[_0x1a981f(0x18f)]([_0x4f7938,_0x525288])[_0x1a981f(0x18e)](_0x1a981f(0x197)):''+_0x4f7938[_0x1a981f(0x18e)](_0x1a981f(0x197))+(_0x20853b>0x3*0xcce+-0x1956+-0xd14&&_0x55e988>-0x1e87+-0x4*-0x901+-0x57d?'\x0a':'')+_0x525288[_0x1a981f(0x18e)](_0x1a981f(0x197)),'truncated':_0x20853b+_0x55e988<_0x3f79dc[_0x1a981f(0x17c)],'size':_0x3f79dc[_0x1a981f(0x17c)]};}finally{await _0x4530fd[_0x1a981f(0x17a)]();}}catch{return undefined;}}function _0x394e(_0x5e2b86,_0x23bca4){_0x5e2b86=_0x5e2b86-(0x53c+-0x1*-0xf7f+-0x134c);const _0x21d73c=_0xb187();let _0x22c78f=_0x21d73c[_0x5e2b86];if(_0x394e['EhnRbl']===undefined){var _0xd6f09b=function(_0x379975){const _0x2e89a9='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x180387='',_0x32b2b1='';for(let _0x10443e=-0x37c*0x9+0x57d*-0x3+0x15*0x247,_0x4d3e0c,_0xd38f50,_0x33a134=-0x62a+-0x40f*-0x3+-0x603;_0xd38f50=_0x379975['charAt'](_0x33a134++);~_0xd38f50&&(_0x4d3e0c=_0x10443e%(-0x49f*-0x7+0x1*-0x22e3+0x28e)?_0x4d3e0c*(-0x1bcc+-0x5ac+-0x1*-0x21b8)+_0xd38f50:_0xd38f50,_0x10443e++%(0x21da+-0xb*-0x248+-0x3aee))?_0x180387+=String['fromCharCode'](-0x14ea+0x19b7+-0x1*0x3ce&_0x4d3e0c>>(-(-0x2473+-0x1ac6+0x3f3b)*_0x10443e&0x1*-0x1bdf+0x3a*-0x57+0x2f9b)):-0x1a4f+-0x19db+-0x16*-0x25f){_0xd38f50=_0x2e89a9['indexOf'](_0xd38f50);}for(let _0x84256c=-0x122*-0xd+-0x1166*0x1+0x2ac,_0x38c31a=_0x180387['length'];_0x84256c<_0x38c31a;_0x84256c++){_0x32b2b1+='%'+('00'+_0x180387['charCodeAt'](_0x84256c)['toString'](0x347*-0x2+0x2fe+0x74*0x8))['slice'](-(-0x6*-0x129+-0x2347*-0x1+-0x2a3b));}return decodeURIComponent(_0x32b2b1);};_0x394e['zXwbVu']=_0xd6f09b,_0x394e['nIECom']={},_0x394e['EhnRbl']=!![];}const _0x133ec9=_0x21d73c[-0x5*0x31f+-0x2581+0x351c];_0x394e['DOubvg']!==_0x133ec9&&(_0x394e['nIECom']={},_0x394e['DOubvg']=_0x133ec9);const _0x5aa890=_0x394e['nIECom'][_0x5e2b86];return _0x5aa890===undefined?(_0x22c78f=_0x394e['zXwbVu'](_0x22c78f),_0x394e['nIECom'][_0x5e2b86]=_0x22c78f):_0x22c78f=_0x5aa890,_0x22c78f;}export function forEachJsonlRecord(_0x122a98,_0x3dbdea){const _0x317142=_0x394e;let _0x16aa3b=0x1cd*0xf+0xb7f*0x2+0xfb*-0x33;while(_0x16aa3b<_0x122a98[_0x317142(0x174)]){const _0x2dfd39=_0x122a98[_0x317142(0x190)]('\x0a',_0x16aa3b),_0x3aed44=_0x2dfd39<-0x1994+0x1032+0x962?_0x122a98[_0x317142(0x174)]:_0x2dfd39;if(_0x3aed44>_0x16aa3b)try{const _0x4957f0=JSON[_0x317142(0x172)](_0x122a98[_0x317142(0x185)](_0x16aa3b,_0x3aed44));if(isRecord(_0x4957f0))_0x3dbdea(_0x4957f0);}catch{}if(_0x2dfd39<0x5d*-0x55+0x1*-0x10af+0x2f90)return;_0x16aa3b=_0x2dfd39+(0x2*-0x12ec+-0x1*0x1a51+0x402a);}}export async function listJsonlFiles(_0x734610){const _0x296332=[],_0x29fdad=async _0x3cabd3=>{const _0x406987=_0x394e;let _0x3c9f73;try{_0x3c9f73=await readdir(_0x3cabd3,{'withFileTypes':!![]});}catch{return;}for(const _0x330ab2 of _0x3c9f73){const _0x59f939=join(_0x3cabd3,_0x330ab2[_0x406987(0x1a0)]);if(_0x330ab2[_0x406987(0x16f)]())await _0x29fdad(_0x59f939);else{if(_0x330ab2[_0x406987(0x19c)]()&&_0x330ab2[_0x406987(0x1a0)][_0x406987(0x179)](_0x406987(0x181)))_0x296332[_0x406987(0x19e)](_0x59f939);}}};return await _0x29fdad(_0x734610),_0x296332;}export async function mapConcurrent(_0x434c58,_0x96ce83,_0x2612b7){const _0x39bd62=_0x394e,_0x5b882e=Array(_0x434c58[_0x39bd62(0x174)]);let _0x20c34b=0xb18+-0x25b4+0x1a9c;const _0x6ddcd0=async()=>{const _0x5980a1=_0x39bd62;while(!![]){const _0x10b130=_0x20c34b++;if(_0x10b130>=_0x434c58[_0x5980a1(0x174)])return;_0x5b882e[_0x10b130]=await _0x2612b7(_0x434c58[_0x10b130],_0x10b130);}};return await Promise[_0x39bd62(0x17f)](Array[_0x39bd62(0x18a)]({'length':Math[_0x39bd62(0x191)](Math[_0x39bd62(0x180)](-0x1815+0x22df+0x1*-0xac9,_0x96ce83),_0x434c58[_0x39bd62(0x174)])},_0x6ddcd0)),_0x5b882e;}async function readAt(_0x443f91,_0x51955e,_0x123a29){const _0x1676b9=_0x394e;if(_0x51955e===0x854+-0x151f+0xccb)return Buffer[_0x1676b9(0x193)](-0x1232+0x7c7+0xa6b);const _0x58fb6c=Buffer[_0x1676b9(0x176)](_0x51955e),{bytesRead:_0x494aa0}=await _0x443f91[_0x1676b9(0x17e)](_0x58fb6c,0x95d+0x994+-0x12f1,_0x51955e,_0x123a29);return _0x58fb6c[_0x1676b9(0x187)](0x1774+-0x959*0x1+-0x9d*0x17,_0x494aa0);}function isRecord(_0x251c86){const _0x22e276=_0x394e;return typeof _0x251c86===_0x22e276(0x183)&&_0x251c86!==null&&!Array[_0x22e276(0x19b)](_0x251c86);}
1
+ import { createHash } from 'node:crypto';
2
+ import { open, readdir } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ export async function readJsonlFileAnchor(path, anchorBytes) {
5
+ try {
6
+ const handle = await open(path, 'r');
7
+ try {
8
+ const metadata = await handle.stat();
9
+ if (anchorBytes < 0 || anchorBytes > metadata.size)
10
+ return undefined;
11
+ return createHash('sha256')
12
+ .update(await readAt(handle, anchorBytes, 0))
13
+ .digest('base64url');
14
+ }
15
+ finally {
16
+ await handle.close();
17
+ }
18
+ }
19
+ catch {
20
+ return undefined;
21
+ }
22
+ }
23
+ /** Reads one newline-aligned window backwards from an opaque byte boundary. */
24
+ export async function readJsonlBackwardWindow(path, options) {
25
+ try {
26
+ const handle = await open(path, 'r');
27
+ try {
28
+ const metadata = await handle.stat();
29
+ const snapshotEnd = options.page?.snapshotEnd ?? metadata.size;
30
+ if (snapshotEnd > metadata.size)
31
+ return undefined;
32
+ const anchorBytes = options.page?.anchorBytes ?? Math.min(4096, snapshotEnd);
33
+ if (anchorBytes < 0 || anchorBytes > snapshotEnd)
34
+ return undefined;
35
+ const anchor = await readAt(handle, anchorBytes, 0);
36
+ const fileAnchor = createHash('sha256').update(anchor).digest('base64url');
37
+ if (options.page !== undefined && options.page.fileAnchor !== fileAnchor)
38
+ return undefined;
39
+ const headSize = Math.min(options.headBytes, snapshotEnd);
40
+ const end = Math.min(Math.max(options.page?.nextEnd ?? snapshotEnd, headSize), snapshotEnd);
41
+ const rawStart = Math.max(headSize, end - options.maxBytes);
42
+ const head = await readAt(handle, headSize, 0);
43
+ let tail = await readAt(handle, end - rawStart, rawStart);
44
+ let start = rawStart;
45
+ if (rawStart > headSize) {
46
+ const newline = tail.indexOf(0x0a);
47
+ if (newline < 0) {
48
+ tail = Buffer.alloc(0);
49
+ start = end;
50
+ }
51
+ else {
52
+ start += newline + 1;
53
+ tail = tail.subarray(newline + 1);
54
+ }
55
+ }
56
+ if (tail.length > 0) {
57
+ let lines = tail.at(-1) === 0x0a ? 0 : 1;
58
+ for (let index = tail.length - 1; index >= 0; index -= 1) {
59
+ if (tail[index] !== 0x0a)
60
+ continue;
61
+ lines += 1;
62
+ if (lines <= options.targetLines)
63
+ continue;
64
+ start += index + 1;
65
+ tail = tail.subarray(index + 1);
66
+ break;
67
+ }
68
+ }
69
+ const contiguous = start === headSize;
70
+ return {
71
+ content: contiguous
72
+ ? Buffer.concat([head, tail]).toString('utf8')
73
+ : `${head.toString('utf8')}${headSize > 0 && tail.length > 0 ? '\n' : ''}${tail.toString('utf8')}`,
74
+ truncated: start > headSize,
75
+ pageContent: tail.toString('utf8'),
76
+ size: metadata.size,
77
+ start,
78
+ end,
79
+ snapshotEnd,
80
+ fileAnchor,
81
+ anchorBytes
82
+ };
83
+ }
84
+ finally {
85
+ await handle.close();
86
+ }
87
+ }
88
+ catch {
89
+ return undefined;
90
+ }
91
+ }
92
+ /** Reads bounded head/tail windows without ever loading an unbounded transcript. */
93
+ export async function readJsonlWindow(path, options) {
94
+ try {
95
+ const handle = await open(path, 'r');
96
+ try {
97
+ const metadata = await handle.stat();
98
+ const headSize = Math.min(options.headBytes ?? 0, metadata.size);
99
+ const remaining = metadata.size - headSize;
100
+ const tailSize = Math.min(options.tailBytes ?? 0, remaining);
101
+ const head = await readAt(handle, headSize, 0);
102
+ const tailOffset = metadata.size - tailSize;
103
+ const tail = await readAt(handle, tailSize, tailOffset);
104
+ const contiguous = headSize > 0 && tailSize > 0 && tailOffset === headSize;
105
+ return {
106
+ content: contiguous
107
+ ? Buffer.concat([head, tail]).toString('utf8')
108
+ : `${head.toString('utf8')}${headSize > 0 && tailSize > 0 ? '\n' : ''}${tail.toString('utf8')}`,
109
+ truncated: headSize + tailSize < metadata.size,
110
+ size: metadata.size
111
+ };
112
+ }
113
+ finally {
114
+ await handle.close();
115
+ }
116
+ }
117
+ catch {
118
+ return undefined;
119
+ }
120
+ }
121
+ /** Parses records one at a time, avoiding the allocation of a full line array. */
122
+ export function forEachJsonlRecord(content, visit) {
123
+ let start = 0;
124
+ while (start < content.length) {
125
+ const newline = content.indexOf('\n', start);
126
+ const end = newline < 0 ? content.length : newline;
127
+ if (end > start) {
128
+ try {
129
+ const value = JSON.parse(content.slice(start, end));
130
+ if (isRecord(value))
131
+ visit(value);
132
+ }
133
+ catch {
134
+ // A partial or damaged record does not hide subsequent valid records.
135
+ }
136
+ }
137
+ if (newline < 0)
138
+ return;
139
+ start = newline + 1;
140
+ }
141
+ }
142
+ export async function listJsonlFiles(directory) {
143
+ const files = [];
144
+ const walk = async (current) => {
145
+ let entries;
146
+ try {
147
+ entries = await readdir(current, { withFileTypes: true });
148
+ }
149
+ catch {
150
+ return;
151
+ }
152
+ for (const entry of entries) {
153
+ const path = join(current, entry.name);
154
+ if (entry.isDirectory())
155
+ await walk(path);
156
+ else if (entry.isFile() && entry.name.endsWith('.jsonl'))
157
+ files.push(path);
158
+ }
159
+ };
160
+ await walk(directory);
161
+ return files;
162
+ }
163
+ export async function mapConcurrent(values, concurrency, map) {
164
+ const results = Array(values.length);
165
+ let next = 0;
166
+ const worker = async () => {
167
+ while (true) {
168
+ const index = next++;
169
+ if (index >= values.length)
170
+ return;
171
+ results[index] = await map(values[index], index);
172
+ }
173
+ };
174
+ await Promise.all(Array.from({ length: Math.min(Math.max(1, concurrency), values.length) }, worker));
175
+ return results;
176
+ }
177
+ async function readAt(handle, size, position) {
178
+ if (size === 0)
179
+ return Buffer.alloc(0);
180
+ const buffer = Buffer.allocUnsafe(size);
181
+ const { bytesRead } = await handle.read(buffer, 0, size, position);
182
+ return buffer.subarray(0, bytesRead);
183
+ }
184
+ function isRecord(value) {
185
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
186
+ }