@a1hvdy/cc-openclaw 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (491) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +207 -0
  3. package/configs/.gitkeep +0 -0
  4. package/configs/council-reviewer-prompt.md +82 -0
  5. package/configs/council-system-prompt.md +141 -0
  6. package/dist/scripts/bench/ab-harness.d.ts +58 -0
  7. package/dist/scripts/bench/ab-harness.d.ts.map +1 -0
  8. package/dist/scripts/bench/ab-harness.js +78 -0
  9. package/dist/scripts/bench/ab-harness.js.map +1 -0
  10. package/dist/src/channels/adapter.d.ts +103 -0
  11. package/dist/src/channels/adapter.d.ts.map +1 -0
  12. package/dist/src/channels/adapter.js +38 -0
  13. package/dist/src/channels/adapter.js.map +1 -0
  14. package/dist/src/channels/telegram/completion-summary.d.ts +22 -0
  15. package/dist/src/channels/telegram/completion-summary.d.ts.map +1 -0
  16. package/dist/src/channels/telegram/completion-summary.js +186 -0
  17. package/dist/src/channels/telegram/completion-summary.js.map +1 -0
  18. package/dist/src/channels/telegram/error-renderer.d.ts +30 -0
  19. package/dist/src/channels/telegram/error-renderer.d.ts.map +1 -0
  20. package/dist/src/channels/telegram/error-renderer.js +133 -0
  21. package/dist/src/channels/telegram/error-renderer.js.map +1 -0
  22. package/dist/src/channels/telegram/event-reducer.d.ts +34 -0
  23. package/dist/src/channels/telegram/event-reducer.d.ts.map +1 -0
  24. package/dist/src/channels/telegram/event-reducer.js +579 -0
  25. package/dist/src/channels/telegram/event-reducer.js.map +1 -0
  26. package/dist/src/channels/telegram/index.d.ts +14 -0
  27. package/dist/src/channels/telegram/index.d.ts.map +1 -0
  28. package/dist/src/channels/telegram/index.js +14 -0
  29. package/dist/src/channels/telegram/index.js.map +1 -0
  30. package/dist/src/channels/telegram/injector.d.ts +54 -0
  31. package/dist/src/channels/telegram/injector.d.ts.map +1 -0
  32. package/dist/src/channels/telegram/injector.js +200 -0
  33. package/dist/src/channels/telegram/injector.js.map +1 -0
  34. package/dist/src/channels/telegram/live-card.d.ts +230 -0
  35. package/dist/src/channels/telegram/live-card.d.ts.map +1 -0
  36. package/dist/src/channels/telegram/live-card.js +916 -0
  37. package/dist/src/channels/telegram/live-card.js.map +1 -0
  38. package/dist/src/channels/telegram/state-machine.d.ts +23 -0
  39. package/dist/src/channels/telegram/state-machine.d.ts.map +1 -0
  40. package/dist/src/channels/telegram/state-machine.js +72 -0
  41. package/dist/src/channels/telegram/state-machine.js.map +1 -0
  42. package/dist/src/channels/telegram/tool-tracker.d.ts +147 -0
  43. package/dist/src/channels/telegram/tool-tracker.d.ts.map +1 -0
  44. package/dist/src/channels/telegram/tool-tracker.js +520 -0
  45. package/dist/src/channels/telegram/tool-tracker.js.map +1 -0
  46. package/dist/src/circuit-breaker.d.ts +22 -0
  47. package/dist/src/circuit-breaker.d.ts.map +1 -0
  48. package/dist/src/circuit-breaker.js +47 -0
  49. package/dist/src/circuit-breaker.js.map +1 -0
  50. package/dist/src/command-router/cc-handler.d.ts +67 -0
  51. package/dist/src/command-router/cc-handler.d.ts.map +1 -0
  52. package/dist/src/command-router/cc-handler.js +980 -0
  53. package/dist/src/command-router/cc-handler.js.map +1 -0
  54. package/dist/src/command-router/index.d.ts +3 -0
  55. package/dist/src/command-router/index.d.ts.map +1 -0
  56. package/dist/src/command-router/index.js +2 -0
  57. package/dist/src/command-router/index.js.map +1 -0
  58. package/dist/src/constants.d.ts +132 -0
  59. package/dist/src/constants.d.ts.map +1 -0
  60. package/dist/src/constants.js +140 -0
  61. package/dist/src/constants.js.map +1 -0
  62. package/dist/src/council/consensus.d.ts +21 -0
  63. package/dist/src/council/consensus.d.ts.map +1 -0
  64. package/dist/src/council/consensus.js +52 -0
  65. package/dist/src/council/consensus.js.map +1 -0
  66. package/dist/src/council/council.d.ts +68 -0
  67. package/dist/src/council/council.d.ts.map +1 -0
  68. package/dist/src/council/council.js +914 -0
  69. package/dist/src/council/council.js.map +1 -0
  70. package/dist/src/council/index.d.ts +3 -0
  71. package/dist/src/council/index.d.ts.map +1 -0
  72. package/dist/src/council/index.js +3 -0
  73. package/dist/src/council/index.js.map +1 -0
  74. package/dist/src/engines/base-oneshot-session.d.ts +88 -0
  75. package/dist/src/engines/base-oneshot-session.d.ts.map +1 -0
  76. package/dist/src/engines/base-oneshot-session.js +228 -0
  77. package/dist/src/engines/base-oneshot-session.js.map +1 -0
  78. package/dist/src/engines/index.d.ts +7 -0
  79. package/dist/src/engines/index.d.ts.map +1 -0
  80. package/dist/src/engines/index.js +7 -0
  81. package/dist/src/engines/index.js.map +1 -0
  82. package/dist/src/engines/persistent-codex-session.d.ts +17 -0
  83. package/dist/src/engines/persistent-codex-session.d.ts.map +1 -0
  84. package/dist/src/engines/persistent-codex-session.js +106 -0
  85. package/dist/src/engines/persistent-codex-session.js.map +1 -0
  86. package/dist/src/engines/persistent-cursor-session.d.ts +22 -0
  87. package/dist/src/engines/persistent-cursor-session.d.ts.map +1 -0
  88. package/dist/src/engines/persistent-cursor-session.js +242 -0
  89. package/dist/src/engines/persistent-cursor-session.js.map +1 -0
  90. package/dist/src/engines/persistent-custom-session.d.ts +79 -0
  91. package/dist/src/engines/persistent-custom-session.d.ts.map +1 -0
  92. package/dist/src/engines/persistent-custom-session.js +939 -0
  93. package/dist/src/engines/persistent-custom-session.js.map +1 -0
  94. package/dist/src/engines/persistent-gemini-session.d.ts +22 -0
  95. package/dist/src/engines/persistent-gemini-session.d.ts.map +1 -0
  96. package/dist/src/engines/persistent-gemini-session.js +217 -0
  97. package/dist/src/engines/persistent-gemini-session.js.map +1 -0
  98. package/dist/src/engines/persistent-session.d.ts +77 -0
  99. package/dist/src/engines/persistent-session.d.ts.map +1 -0
  100. package/dist/src/engines/persistent-session.js +730 -0
  101. package/dist/src/engines/persistent-session.js.map +1 -0
  102. package/dist/src/health/handler.d.ts +40 -0
  103. package/dist/src/health/handler.d.ts.map +1 -0
  104. package/dist/src/health/handler.js +70 -0
  105. package/dist/src/health/handler.js.map +1 -0
  106. package/dist/src/health/index.d.ts +2 -0
  107. package/dist/src/health/index.d.ts.map +1 -0
  108. package/dist/src/health/index.js +2 -0
  109. package/dist/src/health/index.js.map +1 -0
  110. package/dist/src/index.d.ts +49 -0
  111. package/dist/src/index.d.ts.map +1 -0
  112. package/dist/src/index.js +84 -0
  113. package/dist/src/index.js.map +1 -0
  114. package/dist/src/lib/auto-recovery.d.ts +45 -0
  115. package/dist/src/lib/auto-recovery.d.ts.map +1 -0
  116. package/dist/src/lib/auto-recovery.js +217 -0
  117. package/dist/src/lib/auto-recovery.js.map +1 -0
  118. package/dist/src/lib/cache-parity.d.ts +39 -0
  119. package/dist/src/lib/cache-parity.d.ts.map +1 -0
  120. package/dist/src/lib/cache-parity.js +92 -0
  121. package/dist/src/lib/cache-parity.js.map +1 -0
  122. package/dist/src/lib/circuit-breaker.d.ts +22 -0
  123. package/dist/src/lib/circuit-breaker.d.ts.map +1 -0
  124. package/dist/src/lib/circuit-breaker.js +47 -0
  125. package/dist/src/lib/circuit-breaker.js.map +1 -0
  126. package/dist/src/lib/config.d.ts +74 -0
  127. package/dist/src/lib/config.d.ts.map +1 -0
  128. package/dist/src/lib/config.js +244 -0
  129. package/dist/src/lib/config.js.map +1 -0
  130. package/dist/src/lib/drift-detector.d.ts +47 -0
  131. package/dist/src/lib/drift-detector.d.ts.map +1 -0
  132. package/dist/src/lib/drift-detector.js +192 -0
  133. package/dist/src/lib/drift-detector.js.map +1 -0
  134. package/dist/src/lib/error-formatter.d.ts +78 -0
  135. package/dist/src/lib/error-formatter.d.ts.map +1 -0
  136. package/dist/src/lib/error-formatter.js +149 -0
  137. package/dist/src/lib/error-formatter.js.map +1 -0
  138. package/dist/src/lib/heartbeat-workaround.d.ts +45 -0
  139. package/dist/src/lib/heartbeat-workaround.d.ts.map +1 -0
  140. package/dist/src/lib/heartbeat-workaround.js +61 -0
  141. package/dist/src/lib/heartbeat-workaround.js.map +1 -0
  142. package/dist/src/lib/index.d.ts +8 -0
  143. package/dist/src/lib/index.d.ts.map +1 -0
  144. package/dist/src/lib/index.js +8 -0
  145. package/dist/src/lib/index.js.map +1 -0
  146. package/dist/src/lib/register-guard.d.ts +49 -0
  147. package/dist/src/lib/register-guard.d.ts.map +1 -0
  148. package/dist/src/lib/register-guard.js +73 -0
  149. package/dist/src/lib/register-guard.js.map +1 -0
  150. package/dist/src/lib/route-flag.d.ts +50 -0
  151. package/dist/src/lib/route-flag.d.ts.map +1 -0
  152. package/dist/src/lib/route-flag.js +52 -0
  153. package/dist/src/lib/route-flag.js.map +1 -0
  154. package/dist/src/lib/sysprompt-strip.d.ts +54 -0
  155. package/dist/src/lib/sysprompt-strip.d.ts.map +1 -0
  156. package/dist/src/lib/sysprompt-strip.js +75 -0
  157. package/dist/src/lib/sysprompt-strip.js.map +1 -0
  158. package/dist/src/lib/telemetry.d.ts +39 -0
  159. package/dist/src/lib/telemetry.d.ts.map +1 -0
  160. package/dist/src/lib/telemetry.js +73 -0
  161. package/dist/src/lib/telemetry.js.map +1 -0
  162. package/dist/src/lib/test-mode.d.ts +27 -0
  163. package/dist/src/lib/test-mode.d.ts.map +1 -0
  164. package/dist/src/lib/test-mode.js +38 -0
  165. package/dist/src/lib/test-mode.js.map +1 -0
  166. package/dist/src/lib/vendor-paths.d.ts +15 -0
  167. package/dist/src/lib/vendor-paths.d.ts.map +1 -0
  168. package/dist/src/lib/vendor-paths.js +32 -0
  169. package/dist/src/lib/vendor-paths.js.map +1 -0
  170. package/dist/src/logger.d.ts +17 -0
  171. package/dist/src/logger.d.ts.map +1 -0
  172. package/dist/src/logger.js +46 -0
  173. package/dist/src/logger.js.map +1 -0
  174. package/dist/src/mcp/bridge.d.ts +22 -0
  175. package/dist/src/mcp/bridge.d.ts.map +1 -0
  176. package/dist/src/mcp/bridge.js +78 -0
  177. package/dist/src/mcp/bridge.js.map +1 -0
  178. package/dist/src/mcp/index.d.ts +3 -0
  179. package/dist/src/mcp/index.d.ts.map +1 -0
  180. package/dist/src/mcp/index.js +2 -0
  181. package/dist/src/mcp/index.js.map +1 -0
  182. package/dist/src/models.d.ts +70 -0
  183. package/dist/src/models.d.ts.map +1 -0
  184. package/dist/src/models.js +289 -0
  185. package/dist/src/models.js.map +1 -0
  186. package/dist/src/openai-compat/cli-stream-parser.d.ts +135 -0
  187. package/dist/src/openai-compat/cli-stream-parser.d.ts.map +1 -0
  188. package/dist/src/openai-compat/cli-stream-parser.js +195 -0
  189. package/dist/src/openai-compat/cli-stream-parser.js.map +1 -0
  190. package/dist/src/openai-compat/index.d.ts +2 -0
  191. package/dist/src/openai-compat/index.d.ts.map +1 -0
  192. package/dist/src/openai-compat/index.js +2 -0
  193. package/dist/src/openai-compat/index.js.map +1 -0
  194. package/dist/src/openai-compat/openai-compat.d.ts +281 -0
  195. package/dist/src/openai-compat/openai-compat.d.ts.map +1 -0
  196. package/dist/src/openai-compat/openai-compat.js +939 -0
  197. package/dist/src/openai-compat/openai-compat.js.map +1 -0
  198. package/dist/src/openai-compat/skill-resolver.d.ts +36 -0
  199. package/dist/src/openai-compat/skill-resolver.d.ts.map +1 -0
  200. package/dist/src/openai-compat/skill-resolver.js +134 -0
  201. package/dist/src/openai-compat/skill-resolver.js.map +1 -0
  202. package/dist/src/openai-compat/sse-translator.d.ts +32 -0
  203. package/dist/src/openai-compat/sse-translator.d.ts.map +1 -0
  204. package/dist/src/openai-compat/sse-translator.js +155 -0
  205. package/dist/src/openai-compat/sse-translator.js.map +1 -0
  206. package/dist/src/proxy/anthropic-adapter.d.ts +137 -0
  207. package/dist/src/proxy/anthropic-adapter.d.ts.map +1 -0
  208. package/dist/src/proxy/anthropic-adapter.js +392 -0
  209. package/dist/src/proxy/anthropic-adapter.js.map +1 -0
  210. package/dist/src/proxy/handler.d.ts +40 -0
  211. package/dist/src/proxy/handler.d.ts.map +1 -0
  212. package/dist/src/proxy/handler.js +378 -0
  213. package/dist/src/proxy/handler.js.map +1 -0
  214. package/dist/src/proxy/index.d.ts +5 -0
  215. package/dist/src/proxy/index.d.ts.map +1 -0
  216. package/dist/src/proxy/index.js +5 -0
  217. package/dist/src/proxy/index.js.map +1 -0
  218. package/dist/src/proxy/schema-cleaner.d.ts +12 -0
  219. package/dist/src/proxy/schema-cleaner.d.ts.map +1 -0
  220. package/dist/src/proxy/schema-cleaner.js +34 -0
  221. package/dist/src/proxy/schema-cleaner.js.map +1 -0
  222. package/dist/src/proxy/thought-cache.d.ts +20 -0
  223. package/dist/src/proxy/thought-cache.d.ts.map +1 -0
  224. package/dist/src/proxy/thought-cache.js +53 -0
  225. package/dist/src/proxy/thought-cache.js.map +1 -0
  226. package/dist/src/session/embedded-server.d.ts +26 -0
  227. package/dist/src/session/embedded-server.d.ts.map +1 -0
  228. package/dist/src/session/embedded-server.js +367 -0
  229. package/dist/src/session/embedded-server.js.map +1 -0
  230. package/dist/src/session/inbox-manager.d.ts +39 -0
  231. package/dist/src/session/inbox-manager.d.ts.map +1 -0
  232. package/dist/src/session/inbox-manager.js +111 -0
  233. package/dist/src/session/inbox-manager.js.map +1 -0
  234. package/dist/src/session/index.d.ts +4 -0
  235. package/dist/src/session/index.d.ts.map +1 -0
  236. package/dist/src/session/index.js +4 -0
  237. package/dist/src/session/index.js.map +1 -0
  238. package/dist/src/session/session-manager.d.ts +212 -0
  239. package/dist/src/session/session-manager.d.ts.map +1 -0
  240. package/dist/src/session/session-manager.js +1351 -0
  241. package/dist/src/session/session-manager.js.map +1 -0
  242. package/dist/src/session-bootstrap/cwd-patch.d.ts +51 -0
  243. package/dist/src/session-bootstrap/cwd-patch.d.ts.map +1 -0
  244. package/dist/src/session-bootstrap/cwd-patch.js +955 -0
  245. package/dist/src/session-bootstrap/cwd-patch.js.map +1 -0
  246. package/dist/src/session-bootstrap/index.d.ts +4 -0
  247. package/dist/src/session-bootstrap/index.d.ts.map +1 -0
  248. package/dist/src/session-bootstrap/index.js +4 -0
  249. package/dist/src/session-bootstrap/index.js.map +1 -0
  250. package/dist/src/session-bootstrap/sysprompt-strip.d.ts +26 -0
  251. package/dist/src/session-bootstrap/sysprompt-strip.d.ts.map +1 -0
  252. package/dist/src/session-bootstrap/sysprompt-strip.js +57 -0
  253. package/dist/src/session-bootstrap/sysprompt-strip.js.map +1 -0
  254. package/dist/src/session-bootstrap/think-conflict-resolver.d.ts +33 -0
  255. package/dist/src/session-bootstrap/think-conflict-resolver.d.ts.map +1 -0
  256. package/dist/src/session-bootstrap/think-conflict-resolver.js +234 -0
  257. package/dist/src/session-bootstrap/think-conflict-resolver.js.map +1 -0
  258. package/dist/src/types.d.ts +489 -0
  259. package/dist/src/types.d.ts.map +1 -0
  260. package/dist/src/types.js +8 -0
  261. package/dist/src/types.js.map +1 -0
  262. package/dist/src/validation.d.ts +32 -0
  263. package/dist/src/validation.d.ts.map +1 -0
  264. package/dist/src/validation.js +104 -0
  265. package/dist/src/validation.js.map +1 -0
  266. package/dist/tests/_helpers/subprocess-mock.d.ts +35 -0
  267. package/dist/tests/_helpers/subprocess-mock.d.ts.map +1 -0
  268. package/dist/tests/_helpers/subprocess-mock.js +136 -0
  269. package/dist/tests/_helpers/subprocess-mock.js.map +1 -0
  270. package/dist/tests/auto-recovery.test.d.ts +2 -0
  271. package/dist/tests/auto-recovery.test.d.ts.map +1 -0
  272. package/dist/tests/auto-recovery.test.js +189 -0
  273. package/dist/tests/auto-recovery.test.js.map +1 -0
  274. package/dist/tests/bench-harness.test.d.ts +2 -0
  275. package/dist/tests/bench-harness.test.d.ts.map +1 -0
  276. package/dist/tests/bench-harness.test.js +21 -0
  277. package/dist/tests/bench-harness.test.js.map +1 -0
  278. package/dist/tests/cache-parity.test.d.ts +2 -0
  279. package/dist/tests/cache-parity.test.d.ts.map +1 -0
  280. package/dist/tests/cache-parity.test.js +401 -0
  281. package/dist/tests/cache-parity.test.js.map +1 -0
  282. package/dist/tests/command-router.test.d.ts +2 -0
  283. package/dist/tests/command-router.test.d.ts.map +1 -0
  284. package/dist/tests/command-router.test.js +60 -0
  285. package/dist/tests/command-router.test.js.map +1 -0
  286. package/dist/tests/council.test.d.ts +2 -0
  287. package/dist/tests/council.test.d.ts.map +1 -0
  288. package/dist/tests/council.test.js +20 -0
  289. package/dist/tests/council.test.js.map +1 -0
  290. package/dist/tests/drift-detector.test.d.ts +2 -0
  291. package/dist/tests/drift-detector.test.d.ts.map +1 -0
  292. package/dist/tests/drift-detector.test.js +268 -0
  293. package/dist/tests/drift-detector.test.js.map +1 -0
  294. package/dist/tests/eager-bootstrap-gating.test.d.ts +9 -0
  295. package/dist/tests/eager-bootstrap-gating.test.d.ts.map +1 -0
  296. package/dist/tests/eager-bootstrap-gating.test.js +97 -0
  297. package/dist/tests/eager-bootstrap-gating.test.js.map +1 -0
  298. package/dist/tests/engines.test.d.ts +2 -0
  299. package/dist/tests/engines.test.d.ts.map +1 -0
  300. package/dist/tests/engines.test.js +8 -0
  301. package/dist/tests/engines.test.js.map +1 -0
  302. package/dist/tests/error-formatter.test.d.ts +2 -0
  303. package/dist/tests/error-formatter.test.d.ts.map +1 -0
  304. package/dist/tests/error-formatter.test.js +220 -0
  305. package/dist/tests/error-formatter.test.js.map +1 -0
  306. package/dist/tests/health.test.d.ts +2 -0
  307. package/dist/tests/health.test.d.ts.map +1 -0
  308. package/dist/tests/health.test.js +110 -0
  309. package/dist/tests/health.test.js.map +1 -0
  310. package/dist/tests/heartbeat-workaround.test.d.ts +2 -0
  311. package/dist/tests/heartbeat-workaround.test.d.ts.map +1 -0
  312. package/dist/tests/heartbeat-workaround.test.js +90 -0
  313. package/dist/tests/heartbeat-workaround.test.js.map +1 -0
  314. package/dist/tests/index.test.d.ts +2 -0
  315. package/dist/tests/index.test.d.ts.map +1 -0
  316. package/dist/tests/index.test.js +7 -0
  317. package/dist/tests/index.test.js.map +1 -0
  318. package/dist/tests/lib-sysprompt-strip.test.d.ts +2 -0
  319. package/dist/tests/lib-sysprompt-strip.test.d.ts.map +1 -0
  320. package/dist/tests/lib-sysprompt-strip.test.js +145 -0
  321. package/dist/tests/lib-sysprompt-strip.test.js.map +1 -0
  322. package/dist/tests/listener-activation.test.d.ts +2 -0
  323. package/dist/tests/listener-activation.test.d.ts.map +1 -0
  324. package/dist/tests/listener-activation.test.js +87 -0
  325. package/dist/tests/listener-activation.test.js.map +1 -0
  326. package/dist/tests/mcp-bridge.test.d.ts +2 -0
  327. package/dist/tests/mcp-bridge.test.d.ts.map +1 -0
  328. package/dist/tests/mcp-bridge.test.js +137 -0
  329. package/dist/tests/mcp-bridge.test.js.map +1 -0
  330. package/dist/tests/openai-compat.test.d.ts +2 -0
  331. package/dist/tests/openai-compat.test.d.ts.map +1 -0
  332. package/dist/tests/openai-compat.test.js +8 -0
  333. package/dist/tests/openai-compat.test.js.map +1 -0
  334. package/dist/tests/proxy-heartbeat-integration.test.d.ts +15 -0
  335. package/dist/tests/proxy-heartbeat-integration.test.d.ts.map +1 -0
  336. package/dist/tests/proxy-heartbeat-integration.test.js +122 -0
  337. package/dist/tests/proxy-heartbeat-integration.test.js.map +1 -0
  338. package/dist/tests/proxy.test.d.ts +2 -0
  339. package/dist/tests/proxy.test.d.ts.map +1 -0
  340. package/dist/tests/proxy.test.js +8 -0
  341. package/dist/tests/proxy.test.js.map +1 -0
  342. package/dist/tests/register-guard-stacking.test.d.ts +2 -0
  343. package/dist/tests/register-guard-stacking.test.d.ts.map +1 -0
  344. package/dist/tests/register-guard-stacking.test.js +61 -0
  345. package/dist/tests/register-guard-stacking.test.js.map +1 -0
  346. package/dist/tests/register-guard.test.d.ts +2 -0
  347. package/dist/tests/register-guard.test.d.ts.map +1 -0
  348. package/dist/tests/register-guard.test.js +129 -0
  349. package/dist/tests/register-guard.test.js.map +1 -0
  350. package/dist/tests/route-flag-rollback.test.d.ts +2 -0
  351. package/dist/tests/route-flag-rollback.test.d.ts.map +1 -0
  352. package/dist/tests/route-flag-rollback.test.js +70 -0
  353. package/dist/tests/route-flag-rollback.test.js.map +1 -0
  354. package/dist/tests/route-flag.test.d.ts +2 -0
  355. package/dist/tests/route-flag.test.d.ts.map +1 -0
  356. package/dist/tests/route-flag.test.js +101 -0
  357. package/dist/tests/route-flag.test.js.map +1 -0
  358. package/dist/tests/session-bootstrap.test.d.ts +2 -0
  359. package/dist/tests/session-bootstrap.test.d.ts.map +1 -0
  360. package/dist/tests/session-bootstrap.test.js +183 -0
  361. package/dist/tests/session-bootstrap.test.js.map +1 -0
  362. package/dist/tests/session.test.d.ts +2 -0
  363. package/dist/tests/session.test.d.ts.map +1 -0
  364. package/dist/tests/session.test.js +17 -0
  365. package/dist/tests/session.test.js.map +1 -0
  366. package/dist/tests/state-machine.test.d.ts +2 -0
  367. package/dist/tests/state-machine.test.d.ts.map +1 -0
  368. package/dist/tests/state-machine.test.js +133 -0
  369. package/dist/tests/state-machine.test.js.map +1 -0
  370. package/dist/tests/streaming/cli-stream-parser.test.d.ts +2 -0
  371. package/dist/tests/streaming/cli-stream-parser.test.d.ts.map +1 -0
  372. package/dist/tests/streaming/cli-stream-parser.test.js +233 -0
  373. package/dist/tests/streaming/cli-stream-parser.test.js.map +1 -0
  374. package/dist/tests/streaming/feature-flag.test.d.ts +14 -0
  375. package/dist/tests/streaming/feature-flag.test.d.ts.map +1 -0
  376. package/dist/tests/streaming/feature-flag.test.js +163 -0
  377. package/dist/tests/streaming/feature-flag.test.js.map +1 -0
  378. package/dist/tests/streaming/no-tools-prompt.test.d.ts +17 -0
  379. package/dist/tests/streaming/no-tools-prompt.test.d.ts.map +1 -0
  380. package/dist/tests/streaming/no-tools-prompt.test.js +229 -0
  381. package/dist/tests/streaming/no-tools-prompt.test.js.map +1 -0
  382. package/dist/tests/streaming/skill-plus-tools.test.d.ts +14 -0
  383. package/dist/tests/streaming/skill-plus-tools.test.d.ts.map +1 -0
  384. package/dist/tests/streaming/skill-plus-tools.test.js +234 -0
  385. package/dist/tests/streaming/skill-plus-tools.test.js.map +1 -0
  386. package/dist/tests/streaming/sse-translator.test.d.ts +2 -0
  387. package/dist/tests/streaming/sse-translator.test.d.ts.map +1 -0
  388. package/dist/tests/streaming/sse-translator.test.js +227 -0
  389. package/dist/tests/streaming/sse-translator.test.js.map +1 -0
  390. package/dist/tests/streaming/tool-result-roundtrip.test.d.ts +11 -0
  391. package/dist/tests/streaming/tool-result-roundtrip.test.d.ts.map +1 -0
  392. package/dist/tests/streaming/tool-result-roundtrip.test.js +215 -0
  393. package/dist/tests/streaming/tool-result-roundtrip.test.js.map +1 -0
  394. package/dist/tests/streaming/tool-use-translation.test.d.ts +10 -0
  395. package/dist/tests/streaming/tool-use-translation.test.d.ts.map +1 -0
  396. package/dist/tests/streaming/tool-use-translation.test.js +251 -0
  397. package/dist/tests/streaming/tool-use-translation.test.js.map +1 -0
  398. package/dist/tests/telegram-bridge.test.d.ts +2 -0
  399. package/dist/tests/telegram-bridge.test.d.ts.map +1 -0
  400. package/dist/tests/telegram-bridge.test.js +17 -0
  401. package/dist/tests/telegram-bridge.test.js.map +1 -0
  402. package/dist/tests/telegram-injector.test.d.ts +2 -0
  403. package/dist/tests/telegram-injector.test.d.ts.map +1 -0
  404. package/dist/tests/telegram-injector.test.js +74 -0
  405. package/dist/tests/telegram-injector.test.js.map +1 -0
  406. package/dist/tests/telemetry.test.d.ts +2 -0
  407. package/dist/tests/telemetry.test.d.ts.map +1 -0
  408. package/dist/tests/telemetry.test.js +405 -0
  409. package/dist/tests/telemetry.test.js.map +1 -0
  410. package/dist/tests/test-mode.test.d.ts +2 -0
  411. package/dist/tests/test-mode.test.d.ts.map +1 -0
  412. package/dist/tests/test-mode.test.js +39 -0
  413. package/dist/tests/test-mode.test.js.map +1 -0
  414. package/mcp-config.template.json +13 -0
  415. package/mcp-tools.json +1 -0
  416. package/openclaw-mcp-bridge.cjs +152 -0
  417. package/openclaw.plugin.json +30 -0
  418. package/package.json +45 -0
  419. package/skills/.gitkeep +0 -0
  420. package/stubs/commands-status-deps.runtime.js +10 -0
  421. package/stubs/status.runtime.js +149 -0
  422. package/vendor/base-oneshot-session.d.ts +87 -0
  423. package/vendor/base-oneshot-session.js +227 -0
  424. package/vendor/base-oneshot-session.js.map +1 -0
  425. package/vendor/circuit-breaker.d.ts +21 -0
  426. package/vendor/circuit-breaker.js +47 -0
  427. package/vendor/circuit-breaker.js.map +1 -0
  428. package/vendor/consensus.d.ts +20 -0
  429. package/vendor/consensus.js +52 -0
  430. package/vendor/consensus.js.map +1 -0
  431. package/vendor/constants.d.ts +130 -0
  432. package/vendor/constants.js +139 -0
  433. package/vendor/constants.js.map +1 -0
  434. package/vendor/council.d.ts +67 -0
  435. package/vendor/council.js +913 -0
  436. package/vendor/council.js.map +1 -0
  437. package/vendor/embedded-server.d.ts +25 -0
  438. package/vendor/embedded-server.js +360 -0
  439. package/vendor/embedded-server.js.map +1 -0
  440. package/vendor/inbox-manager.d.ts +38 -0
  441. package/vendor/inbox-manager.js +111 -0
  442. package/vendor/inbox-manager.js.map +1 -0
  443. package/vendor/index.d.ts +63 -0
  444. package/vendor/index.js +705 -0
  445. package/vendor/index.js.map +1 -0
  446. package/vendor/logger.d.ts +16 -0
  447. package/vendor/logger.js +44 -0
  448. package/vendor/logger.js.map +1 -0
  449. package/vendor/models.d.ts +69 -0
  450. package/vendor/models.js +289 -0
  451. package/vendor/models.js.map +1 -0
  452. package/vendor/openai-compat.d.ts +197 -0
  453. package/vendor/openai-compat.js +721 -0
  454. package/vendor/openai-compat.js.map +1 -0
  455. package/vendor/persistent-codex-session.d.ts +16 -0
  456. package/vendor/persistent-codex-session.js +105 -0
  457. package/vendor/persistent-codex-session.js.map +1 -0
  458. package/vendor/persistent-cursor-session.d.ts +21 -0
  459. package/vendor/persistent-cursor-session.js +241 -0
  460. package/vendor/persistent-cursor-session.js.map +1 -0
  461. package/vendor/persistent-custom-session.d.ts +78 -0
  462. package/vendor/persistent-custom-session.js +937 -0
  463. package/vendor/persistent-custom-session.js.map +1 -0
  464. package/vendor/persistent-gemini-session.d.ts +21 -0
  465. package/vendor/persistent-gemini-session.js +216 -0
  466. package/vendor/persistent-gemini-session.js.map +1 -0
  467. package/vendor/persistent-session.d.ts +74 -0
  468. package/vendor/persistent-session.js +684 -0
  469. package/vendor/persistent-session.js.map +1 -0
  470. package/vendor/proxy/anthropic-adapter.d.ts +136 -0
  471. package/vendor/proxy/anthropic-adapter.js +392 -0
  472. package/vendor/proxy/anthropic-adapter.js.map +1 -0
  473. package/vendor/proxy/handler.d.ts +39 -0
  474. package/vendor/proxy/handler.js +323 -0
  475. package/vendor/proxy/handler.js.map +1 -0
  476. package/vendor/proxy/schema-cleaner.d.ts +11 -0
  477. package/vendor/proxy/schema-cleaner.js +34 -0
  478. package/vendor/proxy/schema-cleaner.js.map +1 -0
  479. package/vendor/proxy/thought-cache.d.ts +19 -0
  480. package/vendor/proxy/thought-cache.js +53 -0
  481. package/vendor/proxy/thought-cache.js.map +1 -0
  482. package/vendor/session-manager.d.ts +211 -0
  483. package/vendor/session-manager.js +1345 -0
  484. package/vendor/session-manager.js.map +1 -0
  485. package/vendor/skill-resolver.js +107 -0
  486. package/vendor/types.d.ts +466 -0
  487. package/vendor/types.js +8 -0
  488. package/vendor/types.js.map +1 -0
  489. package/vendor/validation.d.ts +31 -0
  490. package/vendor/validation.js +104 -0
  491. package/vendor/validation.js.map +1 -0
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Centralized register-guard — eliminates listener stacking systemwide.
3
+ * Each plugin module gets its own guard instance via createRegisterGuard().
4
+ * Multiple register() calls with same id → no-op (regardless of api identity).
5
+ *
6
+ * Rationale (revised 2026-04-29 after observed production stacking):
7
+ * The openclaw gateway calls plugin register() multiple times per process —
8
+ * once per plugin context (gateway thread, per-agent thread). Each context
9
+ * passes a different `api` instance, but every api wraps the SAME shared
10
+ * event bus. Calling `api.on('event', fn)` from any api instance adds `fn`
11
+ * to that shared bus. So if we re-fire register body on each "new api",
12
+ * listeners stack N× → duplicate emissions (e.g. doubled-greeting on /new
13
+ * with 3 register cycles producing 3 sendMessage calls per reply).
14
+ *
15
+ * Previous behavior: tracked by (id, api) pair — re-fired on new api.
16
+ * Rationale was "hot-reload should re-wire" but that's not what happens
17
+ * in production; production gets multi-context registration in one process.
18
+ *
19
+ * Current behavior: track by id only. First register fires body; subsequent
20
+ * registers (any api) skip. Use `_resetForTests()` to clear between tests.
21
+ *
22
+ * Telemetry: when OPENCLAW_REGISTER_DEBUG=1, emits a structured event per
23
+ * register call (id, registered_before, timestamp). Sibling agent
24
+ * cco-hardening-B implements telemetry.ts which consumes these events.
25
+ */
26
+ import { isRegisterDebugEnabled } from './config.js';
27
+ export function createRegisterGuard() {
28
+ const state = new Set();
29
+ return {
30
+ guard(id, _api, body) {
31
+ if (state.has(id)) {
32
+ // Already registered → no-op regardless of api identity
33
+ if (isRegisterDebugEnabled()) {
34
+ process.stderr.write(JSON.stringify({
35
+ ts: new Date().toISOString(),
36
+ type: 'register-guard.skip',
37
+ id,
38
+ reason: 'already-registered',
39
+ }) + '\n');
40
+ }
41
+ return;
42
+ }
43
+ state.add(id);
44
+ if (isRegisterDebugEnabled()) {
45
+ process.stderr.write(JSON.stringify({
46
+ ts: new Date().toISOString(),
47
+ type: 'register-guard.fire',
48
+ id,
49
+ }) + '\n');
50
+ }
51
+ body();
52
+ },
53
+ _resetForTests() { state.clear(); },
54
+ isRegistered(id) { return state.has(id); },
55
+ };
56
+ }
57
+ /** Default singleton — most modules import this directly for simplicity. */
58
+ export const defaultRegisterGuard = createRegisterGuard();
59
+ /**
60
+ * `registerOnce(id, api, body)` — preferred shorthand for the v3 §5 hard-rule
61
+ * contract: every `api.on(...)` call site must live inside an idempotency
62
+ * wrapper. Delegates to `defaultRegisterGuard.guard(id, api, body)` —
63
+ * semantically identical, just shorter at call sites.
64
+ *
65
+ * The CI check `scripts/check-register-once.sh` greps for any `api.on(`
66
+ * line whose containing module does NOT also reference `registerOnce` or
67
+ * `defaultRegisterGuard.guard`. Either form passes; bare `api.on()` calls
68
+ * (no idempotency wrapper) fail.
69
+ */
70
+ export function registerOnce(id, api, body) {
71
+ defaultRegisterGuard.guard(id, api, body);
72
+ }
73
+ //# sourceMappingURL=register-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-guard.js","sourceRoot":"","sources":["../../../src/lib/register-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAWrD,MAAM,UAAU,mBAAmB;IACjC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,OAAO;QACL,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI;YAClB,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAClB,wDAAwD;gBACxD,IAAI,sBAAsB,EAAE,EAAE,CAAC;oBAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;wBAClC,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;wBAC5B,IAAI,EAAE,qBAAqB;wBAC3B,EAAE;wBACF,MAAM,EAAE,oBAAoB;qBAC7B,CAAC,GAAG,IAAI,CAAC,CAAC;gBACb,CAAC;gBACD,OAAO;YACT,CAAC;YACD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACd,IAAI,sBAAsB,EAAE,EAAE,CAAC;gBAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;oBAClC,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBAC5B,IAAI,EAAE,qBAAqB;oBAC3B,EAAE;iBACH,CAAC,GAAG,IAAI,CAAC,CAAC;YACb,CAAC;YACD,IAAI,EAAE,CAAC;QACT,CAAC;QACD,cAAc,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACnC,YAAY,CAAC,EAAE,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,MAAM,CAAC,MAAM,oBAAoB,GAAG,mBAAmB,EAAE,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,EAAU,EAAE,GAAY,EAAE,IAAgB;IACrE,oBAAoB,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Route flag — selects which engine handles new sessions.
3
+ *
4
+ * Primary env var (per PRP_v3 §10):
5
+ * `OPENCLAW_CC_OPENCLAW_ACTIVE=1` → 'cc-openclaw'
6
+ * `OPENCLAW_CC_OPENCLAW_ACTIVE=0` (or unset) → 'claude-local'
7
+ *
8
+ * Deprecated alias (maintained for one minor version):
9
+ * `OPENCLAW_USE_CC_OPENCLAW` — read iff ACTIVE name is unset.
10
+ * Will be removed in v0.2.0.
11
+ *
12
+ * Each call to selectEngine() observes the env AT CALL TIME — no caching.
13
+ * This satisfies PRP backward-compat contract #4: env-flag rollback works
14
+ * in both directions within session boundary, no restart needed.
15
+ *
16
+ * In-flight sessions stay on their original engine — that's a gateway-level
17
+ * property (each session captures its engine at session start). This module
18
+ * only decides routing for NEW session starts.
19
+ *
20
+ * Default 'claude-local' during the parallel period (P0–P5). Cutover at P6
21
+ * flips the default by setting OPENCLAW_CC_OPENCLAW_ACTIVE=1 in the runtime env.
22
+ */
23
+ export type Engine = 'cc-openclaw' | 'claude-local';
24
+ /** Primary env var name (PRP_v3 §10). */
25
+ export declare const ACTIVE_FLAG_ENV = "OPENCLAW_CC_OPENCLAW_ACTIVE";
26
+ /**
27
+ * @deprecated Use `ACTIVE_FLAG_ENV`. Read for one minor version as a
28
+ * fallback when the new name is unset. Removed in v0.2.0.
29
+ */
30
+ export declare const ROUTE_FLAG_ENV = "OPENCLAW_USE_CC_OPENCLAW";
31
+ /**
32
+ * Read env at call time. Prefers `OPENCLAW_CC_OPENCLAW_ACTIVE`; falls back to
33
+ * deprecated `OPENCLAW_USE_CC_OPENCLAW` only when the new name is unset.
34
+ * Returns true when value is '1', 'true', or 'on' (case-insensitive).
35
+ */
36
+ export declare function isCcOpenclawEnabled(): boolean;
37
+ /** Select the engine for a new session. Default 'claude-local'. */
38
+ export declare function selectEngine(): Engine;
39
+ /**
40
+ * Capture the engine for a session at start time. Returns a frozen snapshot —
41
+ * subsequent calls to its current() method always return the captured value
42
+ * even if env later changes. This is what makes "in-flight sessions stay on
43
+ * original engine" architecturally true at the route-flag layer.
44
+ */
45
+ export interface SessionRoute {
46
+ readonly engine: Engine;
47
+ readonly capturedAt: string;
48
+ }
49
+ export declare function captureSessionRoute(): SessionRoute;
50
+ //# sourceMappingURL=route-flag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-flag.d.ts","sourceRoot":"","sources":["../../../src/lib/route-flag.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,MAAM,MAAM,GAAG,aAAa,GAAG,cAAc,CAAC;AAEpD,yCAAyC;AACzC,eAAO,MAAM,eAAe,gCAAgC,CAAC;AAE7D;;;GAGG;AACH,eAAO,MAAM,cAAc,6BAA6B,CAAC;AAEzD;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAK7C;AAED,mEAAmE;AACnE,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,mBAAmB,IAAI,YAAY,CAKlD"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Route flag — selects which engine handles new sessions.
3
+ *
4
+ * Primary env var (per PRP_v3 §10):
5
+ * `OPENCLAW_CC_OPENCLAW_ACTIVE=1` → 'cc-openclaw'
6
+ * `OPENCLAW_CC_OPENCLAW_ACTIVE=0` (or unset) → 'claude-local'
7
+ *
8
+ * Deprecated alias (maintained for one minor version):
9
+ * `OPENCLAW_USE_CC_OPENCLAW` — read iff ACTIVE name is unset.
10
+ * Will be removed in v0.2.0.
11
+ *
12
+ * Each call to selectEngine() observes the env AT CALL TIME — no caching.
13
+ * This satisfies PRP backward-compat contract #4: env-flag rollback works
14
+ * in both directions within session boundary, no restart needed.
15
+ *
16
+ * In-flight sessions stay on their original engine — that's a gateway-level
17
+ * property (each session captures its engine at session start). This module
18
+ * only decides routing for NEW session starts.
19
+ *
20
+ * Default 'claude-local' during the parallel period (P0–P5). Cutover at P6
21
+ * flips the default by setting OPENCLAW_CC_OPENCLAW_ACTIVE=1 in the runtime env.
22
+ */
23
+ /** Primary env var name (PRP_v3 §10). */
24
+ export const ACTIVE_FLAG_ENV = 'OPENCLAW_CC_OPENCLAW_ACTIVE';
25
+ /**
26
+ * @deprecated Use `ACTIVE_FLAG_ENV`. Read for one minor version as a
27
+ * fallback when the new name is unset. Removed in v0.2.0.
28
+ */
29
+ export const ROUTE_FLAG_ENV = 'OPENCLAW_USE_CC_OPENCLAW';
30
+ /**
31
+ * Read env at call time. Prefers `OPENCLAW_CC_OPENCLAW_ACTIVE`; falls back to
32
+ * deprecated `OPENCLAW_USE_CC_OPENCLAW` only when the new name is unset.
33
+ * Returns true when value is '1', 'true', or 'on' (case-insensitive).
34
+ */
35
+ export function isCcOpenclawEnabled() {
36
+ const v = process.env[ACTIVE_FLAG_ENV] ?? process.env[ROUTE_FLAG_ENV];
37
+ if (!v)
38
+ return false;
39
+ const norm = v.toLowerCase();
40
+ return norm === '1' || norm === 'true' || norm === 'on';
41
+ }
42
+ /** Select the engine for a new session. Default 'claude-local'. */
43
+ export function selectEngine() {
44
+ return isCcOpenclawEnabled() ? 'cc-openclaw' : 'claude-local';
45
+ }
46
+ export function captureSessionRoute() {
47
+ return Object.freeze({
48
+ engine: selectEngine(),
49
+ capturedAt: new Date().toISOString(),
50
+ });
51
+ }
52
+ //# sourceMappingURL=route-flag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-flag.js","sourceRoot":"","sources":["../../../src/lib/route-flag.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,yCAAyC;AACzC,MAAM,CAAC,MAAM,eAAe,GAAG,6BAA6B,CAAC;AAE7D;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,0BAA0B,CAAC;AAEzD;;;;GAIG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACtE,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrB,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7B,OAAO,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,CAAC;AAC1D,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,YAAY;IAC1B,OAAO,mBAAmB,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC;AAChE,CAAC;AAaD,MAAM,UAAU,mBAAmB;IACjC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,EAAE,YAAY,EAAE;QACtB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACrC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Sysprompt aggressive strip — canonical pure function.
3
+ *
4
+ * Default-on in cc-openclaw (vs upstream's opt-in OPENCLAW_AGGRESSIVE_STRIP=1).
5
+ * Env semantic FLIPPED: OPENCLAW_AGGRESSIVE_STRIP=0 explicitly OPTS OUT;
6
+ * any other value (including unset) keeps strip ENABLED.
7
+ *
8
+ * Cuts cold-turn sysprompt overhead from ~12,001 tok baseline / 6,100 tok
9
+ * (upstream-strip-on) to target ≤4,000 tok (PRP NFR target).
10
+ *
11
+ * Called by src/session-bootstrap/sysprompt-strip.ts which adds the env
12
+ * resolution + plugin lifecycle wiring on top.
13
+ *
14
+ * Source: savvy-claude-code/cwd-enhancer.js lines 800–856 (inside applyRoutePatch)
15
+ * Original P1 port: src/session-bootstrap/sysprompt-strip.ts
16
+ */
17
+ export interface StripOptions {
18
+ /** Override env detection — force strip enabled. Used by tests + lifecycle wiring. */
19
+ forceEnabled?: boolean;
20
+ /** Override env detection to disable — used by tests. */
21
+ forceDisabled?: boolean;
22
+ }
23
+ export interface StripResult {
24
+ content: string;
25
+ /** true if any stripping was applied */
26
+ changed: boolean;
27
+ /** true if aggressive strip made additional changes (always true when enabled) */
28
+ aggressiveStripped: boolean;
29
+ }
30
+ /**
31
+ * Resolve whether strip should run based on env + options.
32
+ *
33
+ * Default: ENABLED. Opt-out by setting OPENCLAW_AGGRESSIVE_STRIP=0, 'false', or 'off'.
34
+ * Explicit OPENCLAW_AGGRESSIVE_STRIP=1 (upstream convention) also enables (backward compat).
35
+ */
36
+ export declare function isStripEnabled(opts?: StripOptions): boolean;
37
+ /**
38
+ * Strip volatile / redundant sections from an OpenClaw system prompt string.
39
+ *
40
+ * Strips (always when enabled):
41
+ * - SELF_IMPROVEMENT_REMINDER.md filename-marker headers
42
+ * - ## Self-Improvement Reminder blocks (through next heading or EOF)
43
+ * - <location>…</location> lines inside the skills catalog
44
+ * (~7,000 chars / ~1,750 tokens per cold turn — pure dead weight for model)
45
+ * - F2.1: **Tool escalation:** numbered cheat-sheet block (~600 chars / ~150 tokens)
46
+ * (F2.2 was removed 2026-04-25: the 45-bullet list no longer appears)
47
+ *
48
+ * Pure function — no side effects, no env reads (use isStripEnabled() for that).
49
+ * Returns input unchanged when disabled via opts.
50
+ *
51
+ * Source: cwd-enhancer.js lines 800–856; P1 port: session-bootstrap/sysprompt-strip.ts
52
+ */
53
+ export declare function stripSysprompt(content: string, opts?: StripOptions): StripResult;
54
+ //# sourceMappingURL=sysprompt-strip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sysprompt-strip.d.ts","sourceRoot":"","sources":["../../../src/lib/sysprompt-strip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,MAAM,WAAW,YAAY;IAC3B,sFAAsF;IACtF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yDAAyD;IACzD,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,kFAAkF;IAClF,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAK/D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiB,GAAG,WAAW,CA+BpF"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Sysprompt aggressive strip — canonical pure function.
3
+ *
4
+ * Default-on in cc-openclaw (vs upstream's opt-in OPENCLAW_AGGRESSIVE_STRIP=1).
5
+ * Env semantic FLIPPED: OPENCLAW_AGGRESSIVE_STRIP=0 explicitly OPTS OUT;
6
+ * any other value (including unset) keeps strip ENABLED.
7
+ *
8
+ * Cuts cold-turn sysprompt overhead from ~12,001 tok baseline / 6,100 tok
9
+ * (upstream-strip-on) to target ≤4,000 tok (PRP NFR target).
10
+ *
11
+ * Called by src/session-bootstrap/sysprompt-strip.ts which adds the env
12
+ * resolution + plugin lifecycle wiring on top.
13
+ *
14
+ * Source: savvy-claude-code/cwd-enhancer.js lines 800–856 (inside applyRoutePatch)
15
+ * Original P1 port: src/session-bootstrap/sysprompt-strip.ts
16
+ */
17
+ import { getAggressiveStripEnabled } from './config.js';
18
+ /**
19
+ * Resolve whether strip should run based on env + options.
20
+ *
21
+ * Default: ENABLED. Opt-out by setting OPENCLAW_AGGRESSIVE_STRIP=0, 'false', or 'off'.
22
+ * Explicit OPENCLAW_AGGRESSIVE_STRIP=1 (upstream convention) also enables (backward compat).
23
+ */
24
+ export function isStripEnabled(opts = {}) {
25
+ if (opts.forceDisabled === true)
26
+ return false;
27
+ if (opts.forceEnabled === true)
28
+ return true;
29
+ // Env read centralized in src/lib/config.ts (PRP_v3 §5 hard rule).
30
+ return getAggressiveStripEnabled();
31
+ }
32
+ /**
33
+ * Strip volatile / redundant sections from an OpenClaw system prompt string.
34
+ *
35
+ * Strips (always when enabled):
36
+ * - SELF_IMPROVEMENT_REMINDER.md filename-marker headers
37
+ * - ## Self-Improvement Reminder blocks (through next heading or EOF)
38
+ * - <location>…</location> lines inside the skills catalog
39
+ * (~7,000 chars / ~1,750 tokens per cold turn — pure dead weight for model)
40
+ * - F2.1: **Tool escalation:** numbered cheat-sheet block (~600 chars / ~150 tokens)
41
+ * (F2.2 was removed 2026-04-25: the 45-bullet list no longer appears)
42
+ *
43
+ * Pure function — no side effects, no env reads (use isStripEnabled() for that).
44
+ * Returns input unchanged when disabled via opts.
45
+ *
46
+ * Source: cwd-enhancer.js lines 800–856; P1 port: session-bootstrap/sysprompt-strip.ts
47
+ */
48
+ export function stripSysprompt(content, opts = {}) {
49
+ if (!isStripEnabled(opts)) {
50
+ return { content, changed: false, aggressiveStripped: false };
51
+ }
52
+ const original = content;
53
+ // Always-on strips ────────────────────────────────────────────────────────
54
+ let stripped = content
55
+ // Filename marker line (e.g. "## SELF_IMPROVEMENT_REMINDER.md")
56
+ .replace(/\n?##\s+SELF_IMPROVEMENT_REMINDER\.md(?=\n|$)/g, '')
57
+ // The actual block: "## Self-Improvement Reminder" through next heading or EOF
58
+ .replace(/\n?##\s+Self-Improvement Reminder[\s\S]*?(?=\n##\s|\n?$)/g, '')
59
+ // Skills catalog <location>...</location> lines
60
+ .replace(/\n\s*<location>[^<]*<\/location>/g, '');
61
+ // Aggressive strip (now default-on in cc-openclaw) ───────────────────────
62
+ // F2.1 — Strip **Tool escalation:** numbered cheat-sheet block.
63
+ // Keeps intro paragraph (tool names), conflict-handling, contradictions, scope-selection rule.
64
+ // Anchor updated 2026-04-25: lossless-claw restructured header from
65
+ // "**lcm_grep routing guidance:**" → "**Tool escalation:**"
66
+ const beforeAggr = stripped;
67
+ stripped = stripped
68
+ .replace(/\n\*\*Tool escalation:\*\*\n[\s\S]*?(?=\n\*\*Scope selection rule:\*\*)/g, '\n');
69
+ // F2.2 (REMOVED 2026-04-25) — The 45-bullet tool-name enumeration no longer appears.
70
+ // Re-add only if bullets reappear in a future runtime.
71
+ const aggressiveStripped = stripped !== beforeAggr;
72
+ const changed = stripped !== original;
73
+ return { content: stripped, changed, aggressiveStripped };
74
+ }
75
+ //# sourceMappingURL=sysprompt-strip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sysprompt-strip.js","sourceRoot":"","sources":["../../../src/lib/sysprompt-strip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAiBxD;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,OAAqB,EAAE;IACpD,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9C,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC5C,mEAAmE;IACnE,OAAO,yBAAyB,EAAE,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,OAAqB,EAAE;IACrE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;IAChE,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC;IAEzB,4EAA4E;IAC5E,IAAI,QAAQ,GAAG,OAAO;QACpB,gEAAgE;SAC/D,OAAO,CAAC,gDAAgD,EAAE,EAAE,CAAC;QAC9D,+EAA+E;SAC9E,OAAO,CAAC,2DAA2D,EAAE,EAAE,CAAC;QACzE,gDAAgD;SAC/C,OAAO,CAAC,mCAAmC,EAAE,EAAE,CAAC,CAAC;IAEpD,2EAA2E;IAC3E,gEAAgE;IAChE,+FAA+F;IAC/F,oEAAoE;IACpE,4DAA4D;IAC5D,MAAM,UAAU,GAAG,QAAQ,CAAC;IAC5B,QAAQ,GAAG,QAAQ;SAChB,OAAO,CAAC,0EAA0E,EAAE,IAAI,CAAC,CAAC;IAC7F,qFAAqF;IACrF,uDAAuD;IACvD,MAAM,kBAAkB,GAAG,QAAQ,KAAK,UAAU,CAAC;IAEnD,MAAM,OAAO,GAAG,QAAQ,KAAK,QAAQ,CAAC;IAEtC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * cc-openclaw telemetry — append-only jsonl writers for per-turn metrics.
3
+ *
4
+ * Two streams:
5
+ * - cost: per-turn token cost (input/output/cache) — for A/B comparison
6
+ * against claude-local + future dashboards
7
+ * - register: register-guard events for stacking detection (PRP NFR target:
8
+ * 0 stacking events per 1k starts)
9
+ *
10
+ * Defaults default-on (per PRP). Disabled when OPENCLAW_TOKEN_TELEMETRY=0
11
+ * (cost) or OPENCLAW_REGISTER_DEBUG=0 (register).
12
+ */
13
+ export declare const COST_PATH: string;
14
+ export declare const REGISTER_PATH: string;
15
+ export interface CostEvent {
16
+ ts: string;
17
+ sessionId: string;
18
+ turn: number;
19
+ model: string;
20
+ inputTokens: number;
21
+ outputTokens: number;
22
+ cacheCreationTokens?: number;
23
+ cacheReadTokens?: number;
24
+ durationMs: number;
25
+ channel?: string;
26
+ }
27
+ export interface RegisterEvent {
28
+ ts: string;
29
+ type: 'register-guard.fire' | 'register-guard.skip';
30
+ id: string;
31
+ apiChanged?: boolean;
32
+ reason?: 'first' | 'same-api' | 'new-api';
33
+ }
34
+ export declare function recordCost(event: Omit<CostEvent, 'ts'>): void;
35
+ export declare function recordRegister(event: Omit<RegisterEvent, 'ts'>): void;
36
+ export declare function _setCostWriterForTests(writer: (event: CostEvent) => void): void;
37
+ export declare function _setRegisterWriterForTests(writer: (event: RegisterEvent) => void): void;
38
+ export declare function _restoreDefaultsForTests(): void;
39
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../../src/lib/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAcH,eAAO,MAAM,SAAS,QAAgD,CAAC;AACvE,eAAO,MAAM,aAAa,QAAoD,CAAC;AAS/E,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,qBAAqB,GAAG,qBAAqB,CAAC;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;CAC3C;AAgCD,wBAAgB,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,IAAI,CAE7D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,IAAI,CAErE;AAID,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,IAAI,CAE/E;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI,CAEvF;AAED,wBAAgB,wBAAwB,IAAI,IAAI,CAG/C"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * cc-openclaw telemetry — append-only jsonl writers for per-turn metrics.
3
+ *
4
+ * Two streams:
5
+ * - cost: per-turn token cost (input/output/cache) — for A/B comparison
6
+ * against claude-local + future dashboards
7
+ * - register: register-guard events for stacking detection (PRP NFR target:
8
+ * 0 stacking events per 1k starts)
9
+ *
10
+ * Defaults default-on (per PRP). Disabled when OPENCLAW_TOKEN_TELEMETRY=0
11
+ * (cost) or OPENCLAW_REGISTER_DEBUG=0 (register).
12
+ */
13
+ import { appendFileSync, mkdirSync, existsSync } from 'node:fs';
14
+ import { dirname, join } from 'node:path';
15
+ import { homedir } from 'node:os';
16
+ import { isTokenTelemetryWriterEnabled, isRegisterDebugEnabled, isLogLevelDebug, } from './config.js';
17
+ // ─── Paths ───────────────────────────────────────────────────────────────────
18
+ const TELEMETRY_DIR = join(homedir(), '.openclaw', 'workspace', 'memory');
19
+ export const COST_PATH = join(TELEMETRY_DIR, 'cc-openclaw-cost.jsonl');
20
+ export const REGISTER_PATH = join(TELEMETRY_DIR, 'cc-openclaw-register.jsonl');
21
+ function ensureDir(filePath) {
22
+ const dir = dirname(filePath);
23
+ if (!existsSync(dir))
24
+ mkdirSync(dir, { recursive: true });
25
+ }
26
+ // ─── Writers ─────────────────────────────────────────────────────────────────
27
+ let costWriter = defaultCostWriter;
28
+ let registerWriter = defaultRegisterWriter;
29
+ function defaultCostWriter(event) {
30
+ if (!isTokenTelemetryWriterEnabled())
31
+ return;
32
+ try {
33
+ ensureDir(COST_PATH);
34
+ appendFileSync(COST_PATH, JSON.stringify(event) + '\n');
35
+ }
36
+ catch (err) {
37
+ // Telemetry must NEVER crash the plugin — silent failure is correct here
38
+ if (isLogLevelDebug()) {
39
+ process.stderr.write(`[telemetry] cost write failed: ${err.message}\n`);
40
+ }
41
+ }
42
+ }
43
+ function defaultRegisterWriter(event) {
44
+ if (!isRegisterDebugEnabled())
45
+ return;
46
+ try {
47
+ ensureDir(REGISTER_PATH);
48
+ appendFileSync(REGISTER_PATH, JSON.stringify(event) + '\n');
49
+ }
50
+ catch (err) {
51
+ if (isLogLevelDebug()) {
52
+ process.stderr.write(`[telemetry] register write failed: ${err.message}\n`);
53
+ }
54
+ }
55
+ }
56
+ export function recordCost(event) {
57
+ costWriter({ ts: new Date().toISOString(), ...event });
58
+ }
59
+ export function recordRegister(event) {
60
+ registerWriter({ ts: new Date().toISOString(), ...event });
61
+ }
62
+ // ─── Test hooks ──────────────────────────────────────────────────────────────
63
+ export function _setCostWriterForTests(writer) {
64
+ costWriter = writer;
65
+ }
66
+ export function _setRegisterWriterForTests(writer) {
67
+ registerWriter = writer;
68
+ }
69
+ export function _restoreDefaultsForTests() {
70
+ costWriter = defaultCostWriter;
71
+ registerWriter = defaultRegisterWriter;
72
+ }
73
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../../src/lib/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EACL,6BAA6B,EAC7B,sBAAsB,EACtB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,gFAAgF;AAEhF,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AAC1E,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,wBAAwB,CAAC,CAAC;AACvE,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,4BAA4B,CAAC,CAAC;AAE/E,SAAS,SAAS,CAAC,QAAgB;IACjC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5D,CAAC;AAyBD,gFAAgF;AAEhF,IAAI,UAAU,GAA+B,iBAAiB,CAAC;AAC/D,IAAI,cAAc,GAAmC,qBAAqB,CAAC;AAE3E,SAAS,iBAAiB,CAAC,KAAgB;IACzC,IAAI,CAAC,6BAA6B,EAAE;QAAE,OAAO;IAC7C,IAAI,CAAC;QACH,SAAS,CAAC,SAAS,CAAC,CAAC;QACrB,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,yEAAyE;QACzE,IAAI,eAAe,EAAE,EAAE,CAAC;YACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAmC,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAoB;IACjD,IAAI,CAAC,sBAAsB,EAAE;QAAE,OAAO;IACtC,IAAI,CAAC;QACH,SAAS,CAAC,aAAa,CAAC,CAAC;QACzB,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAI,eAAe,EAAE,EAAE,CAAC;YACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAuC,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAA4B;IACrD,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAgC;IAC7D,cAAc,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,gFAAgF;AAEhF,MAAM,UAAU,sBAAsB,CAAC,MAAkC;IACvE,UAAU,GAAG,MAAM,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAsC;IAC/E,cAAc,GAAG,MAAM,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,UAAU,GAAG,iBAAiB,CAAC;IAC/B,cAAc,GAAG,qBAAqB,CAAC;AACzC,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Test-mode flag — gates eager-bootstrap side effects in plugin modules.
3
+ *
4
+ * When OPENCLAW_PLUGIN_TEST_MODE=1, eager bootstrap (process killing,
5
+ * globalThis monkey-patches, file writes, gateway health checks, env
6
+ * mutations) is skipped. api.on() listener wiring still happens — so
7
+ * idempotency + register-guard + listener-stacking tests remain valid.
8
+ *
9
+ * Default off — production behavior unchanged when env unset / 0.
10
+ *
11
+ * Usage in eager-bootstrap blocks:
12
+ * if (isTestMode()) {
13
+ * // log skip + return early from the eager-bootstrap section,
14
+ * // but DO NOT skip api.on() wiring elsewhere in the same register()
15
+ * }
16
+ *
17
+ * Reason: A1's smoke test on 2026-04-27 revealed that running register()
18
+ * outside of OpenClaw boot inadvertently touched live production state
19
+ * (killed processes, patched globalThis.SessionManager, wrote shared
20
+ * registry files). This flag preserves register-guard test ergonomics
21
+ * while keeping production behavior intact.
22
+ */
23
+ export declare const TEST_MODE_ENV = "OPENCLAW_PLUGIN_TEST_MODE";
24
+ export declare function isTestMode(): boolean;
25
+ /** For tests — explicit set/unset (operates on process.env). */
26
+ export declare function _setTestModeForTests(on: boolean): void;
27
+ //# sourceMappingURL=test-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-mode.d.ts","sourceRoot":"","sources":["../../../src/lib/test-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,eAAO,MAAM,aAAa,8BAA8B,CAAC;AAEzD,wBAAgB,UAAU,IAAI,OAAO,CAKpC;AAED,gEAAgE;AAChE,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAGtD"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Test-mode flag — gates eager-bootstrap side effects in plugin modules.
3
+ *
4
+ * When OPENCLAW_PLUGIN_TEST_MODE=1, eager bootstrap (process killing,
5
+ * globalThis monkey-patches, file writes, gateway health checks, env
6
+ * mutations) is skipped. api.on() listener wiring still happens — so
7
+ * idempotency + register-guard + listener-stacking tests remain valid.
8
+ *
9
+ * Default off — production behavior unchanged when env unset / 0.
10
+ *
11
+ * Usage in eager-bootstrap blocks:
12
+ * if (isTestMode()) {
13
+ * // log skip + return early from the eager-bootstrap section,
14
+ * // but DO NOT skip api.on() wiring elsewhere in the same register()
15
+ * }
16
+ *
17
+ * Reason: A1's smoke test on 2026-04-27 revealed that running register()
18
+ * outside of OpenClaw boot inadvertently touched live production state
19
+ * (killed processes, patched globalThis.SessionManager, wrote shared
20
+ * registry files). This flag preserves register-guard test ergonomics
21
+ * while keeping production behavior intact.
22
+ */
23
+ export const TEST_MODE_ENV = 'OPENCLAW_PLUGIN_TEST_MODE';
24
+ export function isTestMode() {
25
+ const v = process.env[TEST_MODE_ENV];
26
+ if (!v)
27
+ return false;
28
+ const norm = v.toLowerCase();
29
+ return norm === '1' || norm === 'true' || norm === 'on';
30
+ }
31
+ /** For tests — explicit set/unset (operates on process.env). */
32
+ export function _setTestModeForTests(on) {
33
+ if (on)
34
+ process.env[TEST_MODE_ENV] = '1';
35
+ else
36
+ delete process.env[TEST_MODE_ENV];
37
+ }
38
+ //# sourceMappingURL=test-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-mode.js","sourceRoot":"","sources":["../../../src/lib/test-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,2BAA2B,CAAC;AAEzD,MAAM,UAAU,UAAU;IACxB,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACrC,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrB,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7B,OAAO,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,CAAC;AAC1D,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,oBAAoB,CAAC,EAAW;IAC9C,IAAI,EAAE;QAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;;QACpC,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,15 @@
1
+ /** Package root — `<install>/extensions/cc-openclaw/`. */
2
+ export declare const PACKAGE_ROOT: string;
3
+ /** Vendored legacy-engine directory. */
4
+ export declare const VENDOR_DIR: string;
5
+ /**
6
+ * Vendored legacy-engine file paths. These three files come from
7
+ * `@enderfga/openclaw-claude-code` (the upstream plugin cc-openclaw was
8
+ * forked from). They are the engine library cc-openclaw wraps.
9
+ */
10
+ export declare const VENDOR_FILES: {
11
+ readonly sessionManager: string;
12
+ readonly embeddedServer: string;
13
+ readonly models: string;
14
+ };
15
+ //# sourceMappingURL=vendor-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendor-paths.d.ts","sourceRoot":"","sources":["../../../src/lib/vendor-paths.ts"],"names":[],"mappings":"AAmBA,0DAA0D;AAC1D,eAAO,MAAM,YAAY,QAAoC,CAAC;AAE9D,wCAAwC;AACxC,eAAO,MAAM,UAAU,QAA+B,CAAC;AAEvD;;;;GAIG;AACH,eAAO,MAAM,YAAY;;;;CAIf,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Vendor paths — resolve runtime paths to vendored legacy-engine files.
3
+ *
4
+ * cc-openclaw was originally a delta-overlay plugin that imported its engine
5
+ * library from the upstream `openclaw-claude-code` plugin's filesystem
6
+ * install (`extensions/openclaw-claude-code/dist/src/...`). Post-cutover,
7
+ * we vendor those three files into our own `vendor/` directory so cc-openclaw
8
+ * is self-contained and the upstream plugin can be archived.
9
+ *
10
+ * Resolution: at runtime this module lives at
11
+ * `<install>/dist/src/lib/vendor-paths.js`. The package root is three levels
12
+ * up. `vendor/` sits next to `dist/` at the package root.
13
+ */
14
+ import { fileURLToPath } from 'url';
15
+ import { dirname, join } from 'path';
16
+ const __filename = fileURLToPath(import.meta.url);
17
+ const __dirname = dirname(__filename);
18
+ /** Package root — `<install>/extensions/cc-openclaw/`. */
19
+ export const PACKAGE_ROOT = join(__dirname, '..', '..', '..');
20
+ /** Vendored legacy-engine directory. */
21
+ export const VENDOR_DIR = join(PACKAGE_ROOT, 'vendor');
22
+ /**
23
+ * Vendored legacy-engine file paths. These three files come from
24
+ * `@enderfga/openclaw-claude-code` (the upstream plugin cc-openclaw was
25
+ * forked from). They are the engine library cc-openclaw wraps.
26
+ */
27
+ export const VENDOR_FILES = {
28
+ sessionManager: join(VENDOR_DIR, 'session-manager.js'),
29
+ embeddedServer: join(VENDOR_DIR, 'embedded-server.js'),
30
+ models: join(VENDOR_DIR, 'models.js'),
31
+ };
32
+ //# sourceMappingURL=vendor-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendor-paths.js","sourceRoot":"","sources":["../../../src/lib/vendor-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,0DAA0D;AAC1D,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE9D,wCAAwC;AACxC,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AAEvD;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,cAAc,EAAE,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC;IACtD,cAAc,EAAE,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC;IACtD,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC;CAC7B,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Structured logging interface with level control.
3
+ *
4
+ * Default implementation logs to console, filtered by OPENCLAW_LOG_LEVEL env var.
5
+ * Valid levels: debug, info, warn, error. Default: info.
6
+ */
7
+ export interface Logger {
8
+ debug(msg: string, ...args: unknown[]): void;
9
+ info(msg: string, ...args: unknown[]): void;
10
+ warn(msg: string, ...args: unknown[]): void;
11
+ error(msg: string, ...args: unknown[]): void;
12
+ }
13
+ /** Create a console-backed logger with optional prefix and env-var level control. */
14
+ export declare function createConsoleLogger(prefix?: string): Logger;
15
+ /** No-op logger — useful in tests to suppress output. */
16
+ export declare const nullLogger: Logger;
17
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC7C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC5C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC5C,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAC9C;AAUD,qFAAqF;AACrF,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAoB3D;AAED,yDAAyD;AACzD,eAAO,MAAM,UAAU,EAAE,MAKxB,CAAC"}