@jack200714/mafw 4.5.1

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 (631) hide show
  1. package/.opencode/mafw/.backup-v61/parametric/base-skill-manifest.yaml +2 -0
  2. package/.opencode/mafw/STATUS.md +6 -0
  3. package/.opencode/mafw/ledger.md +20 -0
  4. package/.opencode/mafw/memory/.harmonic_index.json +28 -0
  5. package/.opencode/mafw/memory/.review_queue.json +1 -0
  6. package/.opencode/mafw/memory/tier3/parametric.json +13 -0
  7. package/.opencode/mafw/memory/tier3/test-goal.json +19 -0
  8. package/.opencode/mafw/memory-index.json +6 -0
  9. package/.opencode/mafw/parametric/base-skill-manifest.yaml +2 -0
  10. package/.opencode/mafw/waves.json +4 -0
  11. package/.opencode/opencode.json +3 -0
  12. package/.opencode/plugins/mafw-plugin.ts +8 -0
  13. package/.opencode/skills/banner-design/SKILL.md +196 -0
  14. package/.opencode/skills/banner-design/references/banner-sizes-and-styles.md +118 -0
  15. package/.opencode/skills/brand/SKILL.md +97 -0
  16. package/.opencode/skills/brand/references/approval-checklist.md +169 -0
  17. package/.opencode/skills/brand/references/asset-organization.md +157 -0
  18. package/.opencode/skills/brand/references/brand-guideline-template.md +140 -0
  19. package/.opencode/skills/brand/references/color-palette-management.md +186 -0
  20. package/.opencode/skills/brand/references/consistency-checklist.md +94 -0
  21. package/.opencode/skills/brand/references/logo-usage-rules.md +185 -0
  22. package/.opencode/skills/brand/references/messaging-framework.md +85 -0
  23. package/.opencode/skills/brand/references/typography-specifications.md +214 -0
  24. package/.opencode/skills/brand/references/update.md +118 -0
  25. package/.opencode/skills/brand/references/visual-identity.md +96 -0
  26. package/.opencode/skills/brand/references/voice-framework.md +88 -0
  27. package/.opencode/skills/brand/scripts/extract-colors.cjs +341 -0
  28. package/.opencode/skills/brand/scripts/inject-brand-context.cjs +349 -0
  29. package/.opencode/skills/brand/scripts/sync-brand-to-tokens.cjs +248 -0
  30. package/.opencode/skills/brand/scripts/tests/test_sync_brand_to_tokens.py +52 -0
  31. package/.opencode/skills/brand/scripts/validate-asset.cjs +387 -0
  32. package/.opencode/skills/brand/templates/brand-guidelines-starter.md +275 -0
  33. package/.opencode/skills/design/SKILL.md +313 -0
  34. package/.opencode/skills/design/data/cip/deliverables.csv +51 -0
  35. package/.opencode/skills/design/data/cip/industries.csv +21 -0
  36. package/.opencode/skills/design/data/cip/mockup-contexts.csv +21 -0
  37. package/.opencode/skills/design/data/cip/styles.csv +21 -0
  38. package/.opencode/skills/design/data/icon/styles.csv +16 -0
  39. package/.opencode/skills/design/data/logo/colors.csv +56 -0
  40. package/.opencode/skills/design/data/logo/industries.csv +56 -0
  41. package/.opencode/skills/design/data/logo/styles.csv +56 -0
  42. package/.opencode/skills/design/references/banner-sizes-and-styles.md +118 -0
  43. package/.opencode/skills/design/references/cip-deliverable-guide.md +95 -0
  44. package/.opencode/skills/design/references/cip-design.md +121 -0
  45. package/.opencode/skills/design/references/cip-prompt-engineering.md +84 -0
  46. package/.opencode/skills/design/references/cip-style-guide.md +68 -0
  47. package/.opencode/skills/design/references/design-routing.md +207 -0
  48. package/.opencode/skills/design/references/icon-design.md +122 -0
  49. package/.opencode/skills/design/references/logo-color-psychology.md +101 -0
  50. package/.opencode/skills/design/references/logo-design.md +92 -0
  51. package/.opencode/skills/design/references/logo-prompt-engineering.md +158 -0
  52. package/.opencode/skills/design/references/logo-style-guide.md +109 -0
  53. package/.opencode/skills/design/references/slides-copywriting-formulas.md +84 -0
  54. package/.opencode/skills/design/references/slides-create.md +4 -0
  55. package/.opencode/skills/design/references/slides-html-template.md +295 -0
  56. package/.opencode/skills/design/references/slides-layout-patterns.md +137 -0
  57. package/.opencode/skills/design/references/slides-strategies.md +94 -0
  58. package/.opencode/skills/design/references/slides.md +42 -0
  59. package/.opencode/skills/design/references/social-photos-design.md +329 -0
  60. package/.opencode/skills/design/scripts/cip/core.py +215 -0
  61. package/.opencode/skills/design/scripts/cip/generate.py +484 -0
  62. package/.opencode/skills/design/scripts/cip/render-html.py +424 -0
  63. package/.opencode/skills/design/scripts/cip/search.py +127 -0
  64. package/.opencode/skills/design/scripts/icon/generate.py +487 -0
  65. package/.opencode/skills/design/scripts/logo/core.py +175 -0
  66. package/.opencode/skills/design/scripts/logo/generate.py +362 -0
  67. package/.opencode/skills/design/scripts/logo/search.py +114 -0
  68. package/.opencode/skills/design-system/SKILL.md +244 -0
  69. package/.opencode/skills/design-system/data/slide-backgrounds.csv +11 -0
  70. package/.opencode/skills/design-system/data/slide-charts.csv +26 -0
  71. package/.opencode/skills/design-system/data/slide-color-logic.csv +14 -0
  72. package/.opencode/skills/design-system/data/slide-copy.csv +26 -0
  73. package/.opencode/skills/design-system/data/slide-layout-logic.csv +16 -0
  74. package/.opencode/skills/design-system/data/slide-layouts.csv +26 -0
  75. package/.opencode/skills/design-system/data/slide-strategies.csv +16 -0
  76. package/.opencode/skills/design-system/data/slide-typography.csv +15 -0
  77. package/.opencode/skills/design-system/references/component-specs.md +236 -0
  78. package/.opencode/skills/design-system/references/component-tokens.md +214 -0
  79. package/.opencode/skills/design-system/references/primitive-tokens.md +203 -0
  80. package/.opencode/skills/design-system/references/semantic-tokens.md +215 -0
  81. package/.opencode/skills/design-system/references/states-and-variants.md +241 -0
  82. package/.opencode/skills/design-system/references/tailwind-integration.md +251 -0
  83. package/.opencode/skills/design-system/references/token-architecture.md +224 -0
  84. package/.opencode/skills/design-system/scripts/embed-tokens.cjs +99 -0
  85. package/.opencode/skills/design-system/scripts/fetch-background.py +317 -0
  86. package/.opencode/skills/design-system/scripts/generate-slide.py +770 -0
  87. package/.opencode/skills/design-system/scripts/generate-tokens.cjs +205 -0
  88. package/.opencode/skills/design-system/scripts/html-token-validator.py +327 -0
  89. package/.opencode/skills/design-system/scripts/search-slides.py +218 -0
  90. package/.opencode/skills/design-system/scripts/slide-token-validator.py +35 -0
  91. package/.opencode/skills/design-system/scripts/slide_search_core.py +453 -0
  92. package/.opencode/skills/design-system/scripts/tests/test_validate_tokens.py +48 -0
  93. package/.opencode/skills/design-system/scripts/validate-tokens.cjs +246 -0
  94. package/.opencode/skills/design-system/templates/design-tokens-starter.json +143 -0
  95. package/.opencode/skills/frontend-design/LICENSE.txt +21 -0
  96. package/.opencode/skills/frontend-design/SKILL.md +115 -0
  97. package/.opencode/skills/mafw-automation-interview/SKILL.md +43 -0
  98. package/.opencode/skills/mafw-cli-scanner/SKILL.md +37 -0
  99. package/.opencode/skills/mafw-compression-verifier/SKILL.md +52 -0
  100. package/.opencode/skills/mafw-desktop-inspector/SKILL.md +170 -0
  101. package/.opencode/skills/mafw-execute/SKILL.md +62 -0
  102. package/.opencode/skills/mafw-gateway-restart/SKILL.md +87 -0
  103. package/.opencode/skills/mafw-github-scanner/SKILL.md +38 -0
  104. package/.opencode/skills/mafw-goal/SKILL.md +76 -0
  105. package/.opencode/skills/mafw-interview/SKILL.md +68 -0
  106. package/.opencode/skills/mafw-memory-extractor/SKILL.md +65 -0
  107. package/.opencode/skills/mafw-plan/SKILL.md +58 -0
  108. package/.opencode/skills/mafw-review/SKILL.md +85 -0
  109. package/.opencode/skills/runtime-plugin-authoring/SKILL.md +791 -0
  110. package/.opencode/skills/slides/SKILL.md +40 -0
  111. package/.opencode/skills/slides/references/copywriting-formulas.md +84 -0
  112. package/.opencode/skills/slides/references/create.md +4 -0
  113. package/.opencode/skills/slides/references/html-template.md +295 -0
  114. package/.opencode/skills/slides/references/layout-patterns.md +137 -0
  115. package/.opencode/skills/slides/references/slide-strategies.md +94 -0
  116. package/.opencode/skills/ui-styling/LICENSE.txt +202 -0
  117. package/.opencode/skills/ui-styling/SKILL.md +324 -0
  118. package/.opencode/skills/ui-styling/references/canvas-design-system.md +320 -0
  119. package/.opencode/skills/ui-styling/references/shadcn-accessibility.md +471 -0
  120. package/.opencode/skills/ui-styling/references/shadcn-components.md +424 -0
  121. package/.opencode/skills/ui-styling/references/shadcn-theming.md +373 -0
  122. package/.opencode/skills/ui-styling/references/tailwind-customization.md +483 -0
  123. package/.opencode/skills/ui-styling/references/tailwind-responsive.md +382 -0
  124. package/.opencode/skills/ui-styling/references/tailwind-utilities.md +455 -0
  125. package/.opencode/skills/ui-styling/scripts/requirements.txt +17 -0
  126. package/.opencode/skills/ui-styling/scripts/shadcn_add.py +308 -0
  127. package/.opencode/skills/ui-styling/scripts/tailwind_config_gen.py +473 -0
  128. package/.opencode/skills/ui-styling/scripts/tests/coverage-ui.json +1 -0
  129. package/.opencode/skills/ui-styling/scripts/tests/requirements.txt +3 -0
  130. package/.opencode/skills/ui-styling/scripts/tests/test_shadcn_add.py +266 -0
  131. package/.opencode/skills/ui-styling/scripts/tests/test_tailwind_config_gen.py +394 -0
  132. package/.opencode/skills/ui-ux-pro-max/SKILL.md +388 -0
  133. package/.opencode/skills/ui-ux-pro-max/data/app-interface.csv +31 -0
  134. package/.opencode/skills/ui-ux-pro-max/data/charts.csv +26 -0
  135. package/.opencode/skills/ui-ux-pro-max/data/colors.csv +193 -0
  136. package/.opencode/skills/ui-ux-pro-max/data/google-fonts.csv +1924 -0
  137. package/.opencode/skills/ui-ux-pro-max/data/icons.csv +106 -0
  138. package/.opencode/skills/ui-ux-pro-max/data/landing.csv +35 -0
  139. package/.opencode/skills/ui-ux-pro-max/data/motion.csv +17 -0
  140. package/.opencode/skills/ui-ux-pro-max/data/products.csv +193 -0
  141. package/.opencode/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
  142. package/.opencode/skills/ui-ux-pro-max/data/stacks/angular.csv +51 -0
  143. package/.opencode/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  144. package/.opencode/skills/ui-ux-pro-max/data/stacks/avalonia.csv +57 -0
  145. package/.opencode/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  146. package/.opencode/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  147. package/.opencode/skills/ui-ux-pro-max/data/stacks/javafx.csv +76 -0
  148. package/.opencode/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  149. package/.opencode/skills/ui-ux-pro-max/data/stacks/laravel.csv +51 -0
  150. package/.opencode/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  151. package/.opencode/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +71 -0
  152. package/.opencode/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  153. package/.opencode/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  154. package/.opencode/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
  155. package/.opencode/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  156. package/.opencode/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  157. package/.opencode/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  158. package/.opencode/skills/ui-ux-pro-max/data/stacks/threejs.csv +54 -0
  159. package/.opencode/skills/ui-ux-pro-max/data/stacks/uno.csv +60 -0
  160. package/.opencode/skills/ui-ux-pro-max/data/stacks/uwp.csv +56 -0
  161. package/.opencode/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  162. package/.opencode/skills/ui-ux-pro-max/data/stacks/winui.csv +60 -0
  163. package/.opencode/skills/ui-ux-pro-max/data/stacks/wpf.csv +57 -0
  164. package/.opencode/skills/ui-ux-pro-max/data/styles.csv +85 -0
  165. package/.opencode/skills/ui-ux-pro-max/data/typography.csv +75 -0
  166. package/.opencode/skills/ui-ux-pro-max/data/ui-reasoning.csv +162 -0
  167. package/.opencode/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  168. package/.opencode/skills/ui-ux-pro-max/scripts/core.py +464 -0
  169. package/.opencode/skills/ui-ux-pro-max/scripts/design_system.py +1479 -0
  170. package/.opencode/skills/ui-ux-pro-max/scripts/search.py +162 -0
  171. package/.opencode/skills/ui-ux-pro-max/scripts/tests/test_core.py +134 -0
  172. package/.opencode/skills/ui-ux-pro-max/scripts/tests/test_design_system_mode.py +159 -0
  173. package/.opencode/skills/ui-ux-pro-max/scripts/validate_data.py +114 -0
  174. package/LICENSE +21 -0
  175. package/README.md +199 -0
  176. package/bin/mafw.js +436 -0
  177. package/dist/hooks/bash-python-guide.d.ts +4 -0
  178. package/dist/hooks/bash-python-guide.d.ts.map +1 -0
  179. package/dist/hooks/bash-python-guide.js +67 -0
  180. package/dist/hooks/bash-python-guide.js.map +1 -0
  181. package/dist/hooks/handoff.d.ts +9 -0
  182. package/dist/hooks/handoff.d.ts.map +1 -0
  183. package/dist/hooks/handoff.js +8 -0
  184. package/dist/hooks/handoff.js.map +1 -0
  185. package/dist/hooks/hook-manager.d.ts +32 -0
  186. package/dist/hooks/hook-manager.d.ts.map +1 -0
  187. package/dist/hooks/hook-manager.js +91 -0
  188. package/dist/hooks/hook-manager.js.map +1 -0
  189. package/dist/hooks/llm-after.d.ts +8 -0
  190. package/dist/hooks/llm-after.d.ts.map +1 -0
  191. package/dist/hooks/llm-after.js +8 -0
  192. package/dist/hooks/llm-after.js.map +1 -0
  193. package/dist/hooks/media-ingest.d.ts +43 -0
  194. package/dist/hooks/media-ingest.d.ts.map +1 -0
  195. package/dist/hooks/media-ingest.js +269 -0
  196. package/dist/hooks/media-ingest.js.map +1 -0
  197. package/dist/hooks/memory-guide.d.ts +3 -0
  198. package/dist/hooks/memory-guide.d.ts.map +1 -0
  199. package/dist/hooks/memory-guide.js +47 -0
  200. package/dist/hooks/memory-guide.js.map +1 -0
  201. package/dist/hooks/observation-capture.d.ts +17 -0
  202. package/dist/hooks/observation-capture.d.ts.map +1 -0
  203. package/dist/hooks/observation-capture.js +20 -0
  204. package/dist/hooks/observation-capture.js.map +1 -0
  205. package/dist/hooks/session-compacting.d.ts +6 -0
  206. package/dist/hooks/session-compacting.d.ts.map +1 -0
  207. package/dist/hooks/session-compacting.js +6 -0
  208. package/dist/hooks/session-compacting.js.map +1 -0
  209. package/dist/hooks/session-ending.d.ts +20 -0
  210. package/dist/hooks/session-ending.d.ts.map +1 -0
  211. package/dist/hooks/session-ending.js +113 -0
  212. package/dist/hooks/session-ending.js.map +1 -0
  213. package/dist/hooks/session-recall.d.ts +2 -0
  214. package/dist/hooks/session-recall.d.ts.map +1 -0
  215. package/dist/hooks/session-recall.js +103 -0
  216. package/dist/hooks/session-recall.js.map +1 -0
  217. package/dist/hooks/session-start.d.ts +9 -0
  218. package/dist/hooks/session-start.d.ts.map +1 -0
  219. package/dist/hooks/session-start.js +42 -0
  220. package/dist/hooks/session-start.js.map +1 -0
  221. package/dist/hooks/tool-before.d.ts +10 -0
  222. package/dist/hooks/tool-before.d.ts.map +1 -0
  223. package/dist/hooks/tool-before.js +6 -0
  224. package/dist/hooks/tool-before.js.map +1 -0
  225. package/dist/hooks/tool-executed.d.ts +19 -0
  226. package/dist/hooks/tool-executed.d.ts.map +1 -0
  227. package/dist/hooks/tool-executed.js +12 -0
  228. package/dist/hooks/tool-executed.js.map +1 -0
  229. package/dist/hooks/user-profile.d.ts +2 -0
  230. package/dist/hooks/user-profile.d.ts.map +1 -0
  231. package/dist/hooks/user-profile.js +30 -0
  232. package/dist/hooks/user-profile.js.map +1 -0
  233. package/dist/hooks/user-prompt.d.ts +9 -0
  234. package/dist/hooks/user-prompt.d.ts.map +1 -0
  235. package/dist/hooks/user-prompt.js +8 -0
  236. package/dist/hooks/user-prompt.js.map +1 -0
  237. package/dist/hooks/voice-guide.d.ts +8 -0
  238. package/dist/hooks/voice-guide.d.ts.map +1 -0
  239. package/dist/hooks/voice-guide.js +101 -0
  240. package/dist/hooks/voice-guide.js.map +1 -0
  241. package/dist/plugin.d.ts +55 -0
  242. package/dist/plugin.d.ts.map +1 -0
  243. package/dist/plugin.js +342 -0
  244. package/dist/plugin.js.map +1 -0
  245. package/dist/tools/add-memory.d.ts +17 -0
  246. package/dist/tools/add-memory.d.ts.map +1 -0
  247. package/dist/tools/add-memory.js +60 -0
  248. package/dist/tools/add-memory.js.map +1 -0
  249. package/dist/tools/media-ask.d.ts +14 -0
  250. package/dist/tools/media-ask.d.ts.map +1 -0
  251. package/dist/tools/media-ask.js +224 -0
  252. package/dist/tools/media-ask.js.map +1 -0
  253. package/dist/tools/media-speak.d.ts +16 -0
  254. package/dist/tools/media-speak.d.ts.map +1 -0
  255. package/dist/tools/media-speak.js +78 -0
  256. package/dist/tools/media-speak.js.map +1 -0
  257. package/dist/tools/media-upload.d.ts +14 -0
  258. package/dist/tools/media-upload.d.ts.map +1 -0
  259. package/dist/tools/media-upload.js +155 -0
  260. package/dist/tools/media-upload.js.map +1 -0
  261. package/dist/tools/python-exec.d.ts +13 -0
  262. package/dist/tools/python-exec.d.ts.map +1 -0
  263. package/dist/tools/python-exec.js +99 -0
  264. package/dist/tools/python-exec.js.map +1 -0
  265. package/dist/tools/python-restart.d.ts +11 -0
  266. package/dist/tools/python-restart.d.ts.map +1 -0
  267. package/dist/tools/python-restart.js +33 -0
  268. package/dist/tools/python-restart.js.map +1 -0
  269. package/dist/utils/circuit-breaker.d.ts +23 -0
  270. package/dist/utils/circuit-breaker.d.ts.map +1 -0
  271. package/dist/utils/circuit-breaker.js +75 -0
  272. package/dist/utils/circuit-breaker.js.map +1 -0
  273. package/dist/utils/config-loader.d.ts +20 -0
  274. package/dist/utils/config-loader.d.ts.map +1 -0
  275. package/dist/utils/config-loader.js +194 -0
  276. package/dist/utils/config-loader.js.map +1 -0
  277. package/dist/utils/fallback.d.ts +7 -0
  278. package/dist/utils/fallback.d.ts.map +1 -0
  279. package/dist/utils/fallback.js +20 -0
  280. package/dist/utils/fallback.js.map +1 -0
  281. package/dist/utils/git.d.ts +24 -0
  282. package/dist/utils/git.d.ts.map +1 -0
  283. package/dist/utils/git.js +71 -0
  284. package/dist/utils/git.js.map +1 -0
  285. package/dist/utils/github.d.ts +37 -0
  286. package/dist/utils/github.d.ts.map +1 -0
  287. package/dist/utils/github.js +53 -0
  288. package/dist/utils/github.js.map +1 -0
  289. package/dist/utils/global-path.d.ts +2 -0
  290. package/dist/utils/global-path.d.ts.map +1 -0
  291. package/dist/utils/global-path.js +32 -0
  292. package/dist/utils/global-path.js.map +1 -0
  293. package/dist/utils/logger.d.ts +6 -0
  294. package/dist/utils/logger.d.ts.map +1 -0
  295. package/dist/utils/logger.js +69 -0
  296. package/dist/utils/logger.js.map +1 -0
  297. package/dist/utils/obs-capture.d.ts +7 -0
  298. package/dist/utils/obs-capture.d.ts.map +1 -0
  299. package/dist/utils/obs-capture.js +49 -0
  300. package/dist/utils/obs-capture.js.map +1 -0
  301. package/dist/utils/retry.d.ts +11 -0
  302. package/dist/utils/retry.d.ts.map +1 -0
  303. package/dist/utils/retry.js +45 -0
  304. package/dist/utils/retry.js.map +1 -0
  305. package/dist/utils/self-wiring.d.ts +13 -0
  306. package/dist/utils/self-wiring.d.ts.map +1 -0
  307. package/dist/utils/self-wiring.js +86 -0
  308. package/dist/utils/self-wiring.js.map +1 -0
  309. package/dist/utils/state.d.ts +106 -0
  310. package/dist/utils/state.d.ts.map +1 -0
  311. package/dist/utils/state.js +166 -0
  312. package/dist/utils/state.js.map +1 -0
  313. package/dist/utils/status.d.ts +47 -0
  314. package/dist/utils/status.d.ts.map +1 -0
  315. package/dist/utils/status.js +147 -0
  316. package/dist/utils/status.js.map +1 -0
  317. package/dist/utils/ttl-map.d.ts +17 -0
  318. package/dist/utils/ttl-map.d.ts.map +1 -0
  319. package/dist/utils/ttl-map.js +67 -0
  320. package/dist/utils/ttl-map.js.map +1 -0
  321. package/gateway/dist/automation-engine.js +729 -0
  322. package/gateway/dist/chat/chat-sessions.js +95 -0
  323. package/gateway/dist/chat/graph-runner.js +76 -0
  324. package/gateway/dist/chat/index.js +7 -0
  325. package/gateway/dist/chat/intent-classifier.js +23 -0
  326. package/gateway/dist/config.js +416 -0
  327. package/gateway/dist/core/auth.js +96 -0
  328. package/gateway/dist/core/budget-guard.js +52 -0
  329. package/gateway/dist/core/compression/bm25-index.js +176 -0
  330. package/gateway/dist/core/compression/compression-pipeline.js +157 -0
  331. package/gateway/dist/core/compression/compression-strategy-selector.js +32 -0
  332. package/gateway/dist/core/compression/compression-verifier.js +79 -0
  333. package/gateway/dist/core/compression/diff-compressor.js +69 -0
  334. package/gateway/dist/core/compression/hybrid-compressor.js +104 -0
  335. package/gateway/dist/core/compression/lesson-compactor.js +114 -0
  336. package/gateway/dist/core/compression/memory-index.js +190 -0
  337. package/gateway/dist/core/compression/observation-classifier.js +41 -0
  338. package/gateway/dist/core/compression/observation-deduplicator.js +43 -0
  339. package/gateway/dist/core/compression/rrf-fusion.js +63 -0
  340. package/gateway/dist/core/compression/session-pruner.js +137 -0
  341. package/gateway/dist/core/compression/token-budget-allocator.js +141 -0
  342. package/gateway/dist/core/compression/vector-index.js +117 -0
  343. package/gateway/dist/core/compression/zero-token-compressor.js +80 -0
  344. package/gateway/dist/core/cost/cognitive-router.js +41 -0
  345. package/gateway/dist/core/cost/cost-estimator.js +63 -0
  346. package/gateway/dist/core/cost/types.js +19 -0
  347. package/gateway/dist/core/engine/degradation.js +159 -0
  348. package/gateway/dist/core/engine/goal-worktree-manager.js +131 -0
  349. package/gateway/dist/core/engine/lesson-manager.js +222 -0
  350. package/gateway/dist/core/engine/optimistic-sync.js +100 -0
  351. package/gateway/dist/core/engine/phase-orchestrator.js +153 -0
  352. package/gateway/dist/core/engine/report-generator.js +131 -0
  353. package/gateway/dist/core/engine/state-lock.js +91 -0
  354. package/gateway/dist/core/engine/task-branch-manager.js +102 -0
  355. package/gateway/dist/core/engine/wave-dependency.js +67 -0
  356. package/gateway/dist/core/engine/wave-executor.js +112 -0
  357. package/gateway/dist/core/goal-budget.js +63 -0
  358. package/gateway/dist/core/graph/entity-extractor.js +53 -0
  359. package/gateway/dist/core/graph/graph-searcher.js +120 -0
  360. package/gateway/dist/core/graph/knowledge-graph-manager.js +138 -0
  361. package/gateway/dist/core/graph/relation-inferencer.js +67 -0
  362. package/gateway/dist/core/graph/types.js +2 -0
  363. package/gateway/dist/core/hooks/handoff.js +7 -0
  364. package/gateway/dist/core/hooks/hook-manager.js +91 -0
  365. package/gateway/dist/core/hooks/llm-after.js +7 -0
  366. package/gateway/dist/core/hooks/observation-capture.js +19 -0
  367. package/gateway/dist/core/hooks/session-compacting.js +5 -0
  368. package/gateway/dist/core/hooks/session-ending.js +123 -0
  369. package/gateway/dist/core/hooks/session-start.js +51 -0
  370. package/gateway/dist/core/hooks/tool-before.js +5 -0
  371. package/gateway/dist/core/hooks/tool-executed.js +11 -0
  372. package/gateway/dist/core/hooks/user-prompt.js +7 -0
  373. package/gateway/dist/core/index.js +119 -0
  374. package/gateway/dist/core/langchain/agent-adapter.js +39 -0
  375. package/gateway/dist/core/langchain/index.js +12 -0
  376. package/gateway/dist/core/langchain/memory.js +35 -0
  377. package/gateway/dist/core/langchain/node-runner.js +115 -0
  378. package/gateway/dist/core/langchain/retriever.js +28 -0
  379. package/gateway/dist/core/langgraph/checkpointer.js +200 -0
  380. package/gateway/dist/core/langgraph/graph.js +57 -0
  381. package/gateway/dist/core/langgraph/index.js +25 -0
  382. package/gateway/dist/core/langgraph/loop-state.js +71 -0
  383. package/gateway/dist/core/langgraph/nodes/archive.node.js +27 -0
  384. package/gateway/dist/core/langgraph/nodes/execute.node.js +5 -0
  385. package/gateway/dist/core/langgraph/nodes/plan.node.js +101 -0
  386. package/gateway/dist/core/langgraph/nodes/review.node.js +89 -0
  387. package/gateway/dist/core/langgraph/nodes/sync.node.js +70 -0
  388. package/gateway/dist/core/langgraph/review-parser.js +35 -0
  389. package/gateway/dist/core/langgraph/signature-detector.js +23 -0
  390. package/gateway/dist/core/manager/goal-snapshot.js +73 -0
  391. package/gateway/dist/core/manager/milestone-push.js +81 -0
  392. package/gateway/dist/core/manager/question-ledger.js +121 -0
  393. package/gateway/dist/core/manager/system-rule-templates.js +76 -0
  394. package/gateway/dist/core/mcp/tools.js +562 -0
  395. package/gateway/dist/core/mcp/validator.js +165 -0
  396. package/gateway/dist/core/mcp-server.js +86 -0
  397. package/gateway/dist/core/memory/abstraction-distiller.js +44 -0
  398. package/gateway/dist/core/memory/cognitive-graph.js +103 -0
  399. package/gateway/dist/core/memory/energy-system.js +69 -0
  400. package/gateway/dist/core/memory/extractor.js +164 -0
  401. package/gateway/dist/core/memory/harmonic-index.js +530 -0
  402. package/gateway/dist/core/memory/harmonic-types.js +6 -0
  403. package/gateway/dist/core/memory/injector.js +111 -0
  404. package/gateway/dist/core/memory/l5-store.js +141 -0
  405. package/gateway/dist/core/memory/matcher.js +66 -0
  406. package/gateway/dist/core/memory/merger.js +95 -0
  407. package/gateway/dist/core/memory/migrate-v6.1.js +133 -0
  408. package/gateway/dist/core/memory/minhash-merger.js +195 -0
  409. package/gateway/dist/core/memory/observation-service.js +87 -0
  410. package/gateway/dist/core/memory/privacy-filter.js +163 -0
  411. package/gateway/dist/core/memory/reranker.js +208 -0
  412. package/gateway/dist/core/memory/review-scheduler.js +100 -0
  413. package/gateway/dist/core/memory/salience-perceptor.js +24 -0
  414. package/gateway/dist/core/memory/store.js +284 -0
  415. package/gateway/dist/core/memory/t1-store.js +183 -0
  416. package/gateway/dist/core/memory/t1-to-t2-compressor.js +119 -0
  417. package/gateway/dist/core/memory/validator.js +66 -0
  418. package/gateway/dist/core/plugin.js +902 -0
  419. package/gateway/dist/core/skills/mafw-execute/entry.js +226 -0
  420. package/gateway/dist/core/skills/mafw-goal/entry.js +203 -0
  421. package/gateway/dist/core/skills/mafw-plan/entry.js +184 -0
  422. package/gateway/dist/core/skills/mafw-review/entry.js +200 -0
  423. package/gateway/dist/core/storage/file-storage.js +120 -0
  424. package/gateway/dist/core/storage/sqlite-storage.js +205 -0
  425. package/gateway/dist/core/storage/types.js +2 -0
  426. package/gateway/dist/core/tools/archive-worktree.js +208 -0
  427. package/gateway/dist/core/tools/remote-cli.js +106 -0
  428. package/gateway/dist/core/tools/run-ask-user.js +79 -0
  429. package/gateway/dist/core/tools/run-execute-wave.js +32 -0
  430. package/gateway/dist/core/tools/run-plan.js +42 -0
  431. package/gateway/dist/core/tools/run-record-feedback.js +55 -0
  432. package/gateway/dist/core/tools/run-review.js +46 -0
  433. package/gateway/dist/core/tools/write-lesson.js +97 -0
  434. package/gateway/dist/core/utils/circuit-breaker.js +74 -0
  435. package/gateway/dist/core/utils/config-loader.js +203 -0
  436. package/gateway/dist/core/utils/fallback.js +19 -0
  437. package/gateway/dist/core/utils/git.js +70 -0
  438. package/gateway/dist/core/utils/github.js +52 -0
  439. package/gateway/dist/core/utils/global-path.js +41 -0
  440. package/gateway/dist/core/utils/logger.js +71 -0
  441. package/gateway/dist/core/utils/retry.js +44 -0
  442. package/gateway/dist/core/utils/state.js +175 -0
  443. package/gateway/dist/core/utils/status.js +156 -0
  444. package/gateway/dist/cost/service.js +17 -0
  445. package/gateway/dist/dashboard/api.js +1156 -0
  446. package/gateway/dist/dashboard/public/assets/index-DOXm39dm.css +1 -0
  447. package/gateway/dist/dashboard/public/index.html +13 -0
  448. package/gateway/dist/dashboard/server.js +140 -0
  449. package/gateway/dist/dashboard/types.js +2 -0
  450. package/gateway/dist/desktop-client.js +124 -0
  451. package/gateway/dist/eval-endpoint.js +219 -0
  452. package/gateway/dist/event-bus.js +7 -0
  453. package/gateway/dist/feedback/anchor-promotion.js +99 -0
  454. package/gateway/dist/feedback/deferred-memory.js +13 -0
  455. package/gateway/dist/feedback/miss-attribution.js +20 -0
  456. package/gateway/dist/graph/anchor-graph-store.js +113 -0
  457. package/gateway/dist/graph/anchor-graph.js +48 -0
  458. package/gateway/dist/health.js +53 -0
  459. package/gateway/dist/heartbeat.js +109 -0
  460. package/gateway/dist/index.js +6377 -0
  461. package/gateway/dist/interceptors/memory-injector.js +79 -0
  462. package/gateway/dist/ledger.js +121 -0
  463. package/gateway/dist/loop-monitor.js +74 -0
  464. package/gateway/dist/mcp/handlers/add-memory.js +113 -0
  465. package/gateway/dist/mcp/handlers/ask-user.js +63 -0
  466. package/gateway/dist/mcp/handlers/commit-heuristic.js +19 -0
  467. package/gateway/dist/mcp/handlers/create-goal.js +83 -0
  468. package/gateway/dist/mcp/handlers/desktop-click.js +18 -0
  469. package/gateway/dist/mcp/handlers/desktop-get-state.js +15 -0
  470. package/gateway/dist/mcp/handlers/desktop-navigate.js +18 -0
  471. package/gateway/dist/mcp/handlers/desktop-screenshot.js +16 -0
  472. package/gateway/dist/mcp/handlers/desktop-scroll.js +19 -0
  473. package/gateway/dist/mcp/handlers/desktop-type.js +19 -0
  474. package/gateway/dist/mcp/handlers/draft-automation-rule.js +45 -0
  475. package/gateway/dist/mcp/handlers/get-automation-history.js +15 -0
  476. package/gateway/dist/mcp/handlers/get-automation-rule.js +26 -0
  477. package/gateway/dist/mcp/handlers/get-axioms.js +14 -0
  478. package/gateway/dist/mcp/handlers/get-deltas.js +77 -0
  479. package/gateway/dist/mcp/handlers/get-memory.js +67 -0
  480. package/gateway/dist/mcp/handlers/get-model-route.js +16 -0
  481. package/gateway/dist/mcp/handlers/get-triage-item.js +17 -0
  482. package/gateway/dist/mcp/handlers/list-automation-rules.js +24 -0
  483. package/gateway/dist/mcp/handlers/list-triage-items.js +14 -0
  484. package/gateway/dist/mcp/handlers/load-state.js +54 -0
  485. package/gateway/dist/mcp/handlers/manager-answer-question.js +67 -0
  486. package/gateway/dist/mcp/handlers/manager-cancel-goal.js +58 -0
  487. package/gateway/dist/mcp/handlers/manager-get-evidence.js +57 -0
  488. package/gateway/dist/mcp/handlers/manager-get-goal-status.js +58 -0
  489. package/gateway/dist/mcp/handlers/manager-list-goals.js +60 -0
  490. package/gateway/dist/mcp/handlers/manager-list-pending-questions.js +67 -0
  491. package/gateway/dist/mcp/handlers/manager-set-goal.js +78 -0
  492. package/gateway/dist/mcp/handlers/merge-memory.js +184 -0
  493. package/gateway/dist/mcp/handlers/pin-memory.js +53 -0
  494. package/gateway/dist/mcp/handlers/propose-triage-decision.js +38 -0
  495. package/gateway/dist/mcp/handlers/record-feedback.js +59 -0
  496. package/gateway/dist/mcp/handlers/resolve-merge.js +92 -0
  497. package/gateway/dist/mcp/handlers/restart-agent.js +22 -0
  498. package/gateway/dist/mcp/handlers/run-automation.js +28 -0
  499. package/gateway/dist/mcp/handlers/search-hybrid.js +181 -0
  500. package/gateway/dist/mcp/handlers/supersede-memory.js +47 -0
  501. package/gateway/dist/mcp/handlers/update-state.js +59 -0
  502. package/gateway/dist/mcp/handlers/validate-rule.js +39 -0
  503. package/gateway/dist/mcp/sse-transport.js +97 -0
  504. package/gateway/dist/mcp/streamable-endpoint.js +98 -0
  505. package/gateway/dist/mcp/tool-registry.js +630 -0
  506. package/gateway/dist/media/media-agent.js +755 -0
  507. package/gateway/dist/media/media-plugin-loader.js +254 -0
  508. package/gateway/dist/media/media-runtime-executor.js +227 -0
  509. package/gateway/dist/media/media-service.js +199 -0
  510. package/gateway/dist/media/pi-adapter.js +159 -0
  511. package/gateway/dist/media/plugin-context.js +14 -0
  512. package/gateway/dist/media/tts-service.js +173 -0
  513. package/gateway/dist/memory/abstraction-matcher.js +28 -0
  514. package/gateway/dist/memory/consolidation-service.js +209 -0
  515. package/gateway/dist/memory/derived-terms.js +50 -0
  516. package/gateway/dist/memory/embedding-provider.js +330 -0
  517. package/gateway/dist/memory/embedding-runtime.js +174 -0
  518. package/gateway/dist/memory/event-log.js +84 -0
  519. package/gateway/dist/memory/gateway-db.js +465 -0
  520. package/gateway/dist/memory/harmonic-file-store.js +338 -0
  521. package/gateway/dist/memory/llamacpp-provider.js +370 -0
  522. package/gateway/dist/memory/okf-index-renderer.js +61 -0
  523. package/gateway/dist/memory/okf-migrator.js +71 -0
  524. package/gateway/dist/memory/okf-parser.js +57 -0
  525. package/gateway/dist/memory/okf-writer.js +107 -0
  526. package/gateway/dist/memory/service.js +81 -0
  527. package/gateway/dist/memory/t1-db.js +139 -0
  528. package/gateway/dist/memory/unmerge-cleanup.js +82 -0
  529. package/gateway/dist/memory/vector-store.js +246 -0
  530. package/gateway/dist/memory/write-queue.js +31 -0
  531. package/gateway/dist/metrics/collector.js +28 -0
  532. package/gateway/dist/mobile/device-store.js +123 -0
  533. package/gateway/dist/mobile/mdns-advertiser.js +55 -0
  534. package/gateway/dist/mobile/media-proxy.js +292 -0
  535. package/gateway/dist/mobile/pairing.js +139 -0
  536. package/gateway/dist/mobile/push-gateway.js +126 -0
  537. package/gateway/dist/mobile/tts-artifact.js +43 -0
  538. package/gateway/dist/opencode-adapter.js +241 -0
  539. package/gateway/dist/orchestration/outcome-recorder.js +218 -0
  540. package/gateway/dist/orchestration/policy.js +57 -0
  541. package/gateway/dist/orchestration/registry.js +47 -0
  542. package/gateway/dist/plugins/hub.js +188 -0
  543. package/gateway/dist/poll.js +110 -0
  544. package/gateway/dist/python/kernel-service.js +762 -0
  545. package/gateway/dist/recall/constraints-migrate.js +108 -0
  546. package/gateway/dist/recall/data-dir-migrate.js +120 -0
  547. package/gateway/dist/recall/gateway-db-migrate.js +134 -0
  548. package/gateway/dist/recall/index-scan.js +437 -0
  549. package/gateway/dist/recall/inject-format.js +222 -0
  550. package/gateway/dist/recall/legacy-t1-archive.js +86 -0
  551. package/gateway/dist/recall/memory-worker.js +128 -0
  552. package/gateway/dist/recall/pipeline-rules.js +76 -0
  553. package/gateway/dist/recall/recall-context.js +297 -0
  554. package/gateway/dist/recall/reflect-cursor.js +50 -0
  555. package/gateway/dist/recall/reflection.js +318 -0
  556. package/gateway/dist/recall/session-worker-pool.js +100 -0
  557. package/gateway/dist/recall/stale-verify.js +72 -0
  558. package/gateway/dist/recall/step-inject.js +173 -0
  559. package/gateway/dist/recall/time-anchor.js +143 -0
  560. package/gateway/dist/recall/ttl-map.js +72 -0
  561. package/gateway/dist/recall/turn-completion.js +44 -0
  562. package/gateway/dist/recall/turn-pipeline.js +150 -0
  563. package/gateway/dist/recovery.js +158 -0
  564. package/gateway/dist/resources/sdk-session.js +202 -0
  565. package/gateway/dist/retrieval/guided-retriever.js +131 -0
  566. package/gateway/dist/retrieval/idf-stats.js +31 -0
  567. package/gateway/dist/routes/embedding-config.js +100 -0
  568. package/gateway/dist/routes/goal-sessions.js +45 -0
  569. package/gateway/dist/routes/manager-rotate.js +55 -0
  570. package/gateway/dist/routes/media-switch.js +78 -0
  571. package/gateway/dist/routes/model-config.js +132 -0
  572. package/gateway/dist/routes/note-board.js +51 -0
  573. package/gateway/dist/routes/permission.js +43 -0
  574. package/gateway/dist/routes/pinned-recall.js +36 -0
  575. package/gateway/dist/routes/plugins.js +77 -0
  576. package/gateway/dist/routes/restart-agent.js +28 -0
  577. package/gateway/dist/routes/runtime-switch.js +80 -0
  578. package/gateway/dist/routes/session-branch.js +63 -0
  579. package/gateway/dist/routes/session-mutations.js +58 -0
  580. package/gateway/dist/routes/session-summarize.js +49 -0
  581. package/gateway/dist/routes/usage-plugins.js +251 -0
  582. package/gateway/dist/runtime/agent-definition.js +2 -0
  583. package/gateway/dist/runtime/auth.js +80 -0
  584. package/gateway/dist/runtime/completion-http.js +97 -0
  585. package/gateway/dist/runtime/contract.js +37 -0
  586. package/gateway/dist/runtime/loader.js +240 -0
  587. package/gateway/dist/runtime/normalize.js +59 -0
  588. package/gateway/dist/runtime/opencode-runtime.js +336 -0
  589. package/gateway/dist/runtime/pi/pi-agent-config.js +294 -0
  590. package/gateway/dist/runtime/pi/pi-approval-bridge.js +44 -0
  591. package/gateway/dist/runtime/pi/pi-approval-extension.js +62 -0
  592. package/gateway/dist/runtime/pi/pi-events.js +122 -0
  593. package/gateway/dist/runtime/pi/pi-messages.js +20 -0
  594. package/gateway/dist/runtime/pi/pi-provider.js +19 -0
  595. package/gateway/dist/runtime/pi/pi-session-storage.js +44 -0
  596. package/gateway/dist/runtime/pi/pi-session.js +328 -0
  597. package/gateway/dist/runtime/plugins/pi-runtime.js +285 -0
  598. package/gateway/dist/runtime/serve-for-runtime.js +22 -0
  599. package/gateway/dist/runtime/serve-sidecar.js +164 -0
  600. package/gateway/dist/runtime/serve-supervisor.js +80 -0
  601. package/gateway/dist/self-update.js +309 -0
  602. package/gateway/dist/skills/manager-agent-config.js +37 -0
  603. package/gateway/dist/skills/manager-identity.js +11 -0
  604. package/gateway/dist/skills/memory-curator-agent.js +55 -0
  605. package/gateway/dist/trajectory/api.js +154 -0
  606. package/gateway/dist/trajectory/backfill-provider.js +41 -0
  607. package/gateway/dist/trajectory/collector.js +337 -0
  608. package/gateway/dist/trajectory/trajectory-store.js +336 -0
  609. package/gateway/dist/trajectory/types.js +17 -0
  610. package/gateway/dist/tray/index.js +131 -0
  611. package/gateway/dist/tray/tray.ps1 +96 -0
  612. package/gateway/dist/types.js +2 -0
  613. package/gateway/dist/usage/builtin-plugins/commandcode.js +71 -0
  614. package/gateway/dist/usage/builtin-plugins/deepseek.js +56 -0
  615. package/gateway/dist/usage/builtin-plugins/gateway.js +127 -0
  616. package/gateway/dist/usage/builtin-plugins/kimi-for-coding.js +93 -0
  617. package/gateway/dist/usage/builtin-plugins/kimi.js +48 -0
  618. package/gateway/dist/usage/builtin-plugins/opencode-go.js +54 -0
  619. package/gateway/dist/usage/builtin-plugins/openrouter.js +48 -0
  620. package/gateway/dist/usage/builtin-plugins/siliconflow-cn.js +49 -0
  621. package/gateway/dist/usage/builtin-plugins/zhipuai-coding-plan.js +44 -0
  622. package/gateway/dist/usage/model-prices.js +39 -0
  623. package/gateway/dist/usage/model-stats.js +21 -0
  624. package/gateway/dist/usage/plugin-context.js +79 -0
  625. package/gateway/dist/usage/plugin-loader.js +280 -0
  626. package/gateway/dist/usage/templates.js +227 -0
  627. package/gateway/dist/usage/types.js +2 -0
  628. package/gateway/dist/usage/usage-poller.js +216 -0
  629. package/gateway/package.json +37 -0
  630. package/package.json +78 -0
  631. package/packages/tui/dist/cli.js +4664 -0
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionPruner = void 0;
4
+ /**
5
+ * Session Pruner — L1 实时剪枝器
6
+ *
7
+ * 职责:Session 过长时自动压缩历史内容,保留当前 Wave 完整上下文。
8
+ *
9
+ * 策略(从文档 §3.1 提取):
10
+ * ┌──────────────┬─────────────┬──────────────┬────────────┐
11
+ * │ 内容类型 │ 当前 Wave │ 已完成 Wave │ 处理方式 │
12
+ * ├──────────────┼─────────────┼──────────────┼────────────┤
13
+ * │ System Prompt │ 完整保留 │ 完整保留 │ 不可压缩 │
14
+ * │ Parametric Δ │ 完整保留 │ 完整保留 │ 不可压缩 │
15
+ * │ Task 定义 │ 完整保留 │ 摘要 │ 保留ID+状态│
16
+ * │ 代码编辑 │ 完整保留 │ 摘要 │ 保留路径 │
17
+ * │ 工具输出 │ 完整保留 │ 截断 │ 最后10行 │
18
+ * │ 对话历史 │ 完整保留 │ 压缩 │ Wave摘要 │
19
+ * │ 成功测试日志 │ 完整保留 │ 丢弃 │ 只保留标记 │
20
+ * │ 失败测试日志 │ 完整保留 │ 完整保留 │ 不压缩 │
21
+ * └──────────────┴─────────────┴──────────────┴────────────┘
22
+ *
23
+ * 触发条件:Session 达到 6000 tokens (75% 压缩阈值) 时触发
24
+ */
25
+ class SessionPruner {
26
+ config;
27
+ constructor(config = {}) {
28
+ this.config = {
29
+ maxContextTokens: 8000,
30
+ compressionThreshold: 0.6, // 4800 tokens
31
+ currentWaveReserve: 2000,
32
+ toolOutputReserve: 10,
33
+ ...config
34
+ };
35
+ }
36
+ /**
37
+ * 检查是否需要剪枝
38
+ */
39
+ shouldPrune(currentTokens) {
40
+ return currentTokens >= this.config.maxContextTokens * this.config.compressionThreshold;
41
+ }
42
+ /**
43
+ * 执行剪枝:将已完成 Wave 的内容压缩为摘要
44
+ */
45
+ prune(session, currentWaveId, completedDigests) {
46
+ const pruned = [];
47
+ let currentTokens = 0;
48
+ for (const item of session) {
49
+ // 当前 Wave 的内容完整保留
50
+ if (item.waveId === currentWaveId) {
51
+ pruned.push(item);
52
+ currentTokens += this.estimateTokens(item);
53
+ continue;
54
+ }
55
+ // 已完成 Wave 的内容按类型压缩
56
+ const compressed = this.compressItem(item);
57
+ if (compressed) {
58
+ pruned.push(compressed);
59
+ currentTokens += this.estimateTokens(compressed);
60
+ }
61
+ }
62
+ // 在 Session 开头插入已完成 Wave 的摘要卡片
63
+ if (completedDigests.length > 0) {
64
+ const digestBlock = this.renderDigests(completedDigests);
65
+ pruned.unshift({ type: 'wave_digests', content: digestBlock });
66
+ }
67
+ return pruned;
68
+ }
69
+ /**
70
+ * 压缩单个 Session 条目
71
+ */
72
+ compressItem(item) {
73
+ switch (item.type) {
74
+ case 'system_prompt':
75
+ case 'parametric_delta':
76
+ case 'test_log_fail':
77
+ // 不可压缩
78
+ return item;
79
+ case 'task_definition':
80
+ return {
81
+ ...item,
82
+ content: `[SUMMARY] Task ${item.taskId}: ${item.status || 'completed'}`,
83
+ _compressed: true
84
+ };
85
+ case 'code_edit':
86
+ return {
87
+ ...item,
88
+ content: `[SUMMARY] ${item.filePath}: ${item.linesChanged || 'changed'}`,
89
+ _compressed: true
90
+ };
91
+ case 'tool_output':
92
+ return {
93
+ ...item,
94
+ content: this.truncateToolOutput(item.content),
95
+ _compressed: true
96
+ };
97
+ case 'dialogue':
98
+ // 丢弃对话历史,已包含在 Wave 摘要中
99
+ return null;
100
+ case 'test_log_success':
101
+ // 只保留标记
102
+ return { type: 'test_log_success', status: 'PASS', _compressed: true };
103
+ default:
104
+ return item;
105
+ }
106
+ }
107
+ /**
108
+ * 工具输出截断:保留最后 N 行
109
+ */
110
+ truncateToolOutput(output) {
111
+ const lines = output.split('\n');
112
+ if (lines.length <= this.config.toolOutputReserve)
113
+ return output;
114
+ const lastLines = lines.slice(-this.config.toolOutputReserve);
115
+ return `[TRUNCATED: ${lines.length} lines → last ${this.config.toolOutputReserve}]\n${lastLines.join('\n')}`;
116
+ }
117
+ /**
118
+ * 渲染 Wave 摘要卡片
119
+ */
120
+ renderDigests(digests) {
121
+ const lines = ['[WAVE_DIGESTS COMPLETED]'];
122
+ for (const d of digests) {
123
+ lines.push(`[WAVE_DIGEST id=${d.id} status=${d.status} tokens_saved=${d.tokens_saved}]`, ` domain: ${d.domain}`, ` completed_tasks: [${d.completed_tasks.join(', ')}]`, ` key_decisions: [${d.key_decisions.join(', ')}]`, ` blockers: [${d.blockers.join(', ')}]`, ` files_changed: [${d.files_changed.join(', ')}]`);
124
+ }
125
+ return lines.join('\n');
126
+ }
127
+ /**
128
+ * 粗略 token 估算
129
+ */
130
+ estimateTokens(item) {
131
+ const text = typeof item === 'string' ? item : JSON.stringify(item);
132
+ const chineseChars = (text.match(/[\u4e00-\u9fff]/g) || []).length;
133
+ const englishWords = text.split(/\s+/).filter(w => /[a-zA-Z]/.test(w)).length;
134
+ return Math.ceil(chineseChars + englishWords * 0.75);
135
+ }
136
+ }
137
+ exports.SessionPruner = SessionPruner;
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TokenBudgetAllocator = void 0;
4
+ class TokenBudgetAllocator {
5
+ defaultBudget;
6
+ allocations;
7
+ useWatermark;
8
+ constructor(config) {
9
+ this.defaultBudget = config?.defaultBudget ?? 8000;
10
+ this.useWatermark = !config?.allocations;
11
+ this.allocations = {
12
+ parametric: 0.25,
13
+ procedural: 0.20,
14
+ semantic: 0.30,
15
+ episodic: 0.15,
16
+ buffer: 0.10,
17
+ ...config?.allocations
18
+ };
19
+ }
20
+ allocate(memories, totalBudget, model) {
21
+ const budget = totalBudget ?? this.defaultBudget;
22
+ const compressPct = model === 'haiku' ? 0.5 : 1.0;
23
+ const order = ['parametric', 'procedural', 'semantic', 'episodic'];
24
+ const selected = { parametric: [], procedural: [], semantic: [], episodic: [] };
25
+ let totalUsed = 0;
26
+ const unselected = [];
27
+ if (!this.useWatermark) {
28
+ // Legacy percentage-based allocation
29
+ for (const category of order) {
30
+ const catBudget = Math.floor(budget * (this.allocations[category] ?? 0));
31
+ const items = [...(memories[category] ?? [])];
32
+ items.sort((a, b) => {
33
+ const ea = typeof a.energy === 'number' ? a.energy : 0;
34
+ const eb = typeof b.energy === 'number' ? b.energy : 0;
35
+ return eb - ea;
36
+ });
37
+ let remaining = catBudget;
38
+ for (const item of items) {
39
+ const tokens = this.estimateItemTokens(item, category);
40
+ if (tokens <= remaining) {
41
+ selected[category].push(item);
42
+ remaining -= tokens;
43
+ }
44
+ else {
45
+ unselected.push({ item, category });
46
+ }
47
+ }
48
+ totalUsed += catBudget - remaining;
49
+ }
50
+ // Buffer fill: recycle unused budget across all categories
51
+ let buf = Math.floor(budget * (this.allocations.buffer ?? 0));
52
+ for (const category of order) {
53
+ const catBudget = Math.floor(budget * (this.allocations[category] ?? 0));
54
+ const catUsed = selected[category].reduce((sum, item) => sum + this.estimateItemTokens(item, category), 0);
55
+ buf += catBudget - catUsed;
56
+ }
57
+ unselected.sort((a, b) => {
58
+ const ea = typeof a.item.energy === 'number' ? a.item.energy : 0;
59
+ const eb = typeof b.item.energy === 'number' ? b.item.energy : 0;
60
+ return eb - ea;
61
+ });
62
+ for (const { item, category } of unselected) {
63
+ const tokens = this.estimateItemTokens(item, category);
64
+ if (tokens <= buf) {
65
+ selected[category].push(item);
66
+ buf -= tokens;
67
+ totalUsed += tokens;
68
+ }
69
+ }
70
+ return {
71
+ parametric: selected.parametric,
72
+ procedural: selected.procedural,
73
+ semantic: selected.semantic,
74
+ episodic: selected.episodic,
75
+ totalTokens: totalUsed
76
+ };
77
+ }
78
+ // Dynamic watermark mode
79
+ const watermark = {
80
+ p0: { budget: Math.min(3000, budget * 0.20), key: 'parametric' },
81
+ p1: { budget: Math.min(5000, budget * 0.35), key: 'procedural' },
82
+ p2: { budget: Math.min(4000, budget * 0.30) * compressPct, key: 'semantic' },
83
+ p3: { budget: Math.min(2000, budget * 0.15) * compressPct, key: 'episodic' }
84
+ };
85
+ for (const cat of order) {
86
+ let catItems = [...(memories[cat] ?? [])];
87
+ catItems.sort((a, b) => {
88
+ const ea = typeof a.energy === 'number' ? a.energy : 0;
89
+ const eb = typeof b.energy === 'number' ? b.energy : 0;
90
+ return eb - ea;
91
+ });
92
+ const catBudget = this.getWatermarkBudget(watermark, cat);
93
+ let remaining = catBudget;
94
+ for (const item of catItems) {
95
+ const tokens = this.estimateItemTokens(item, cat);
96
+ if (tokens <= remaining) {
97
+ selected[cat].push(item);
98
+ remaining -= tokens;
99
+ }
100
+ }
101
+ totalUsed += catBudget - remaining;
102
+ }
103
+ return {
104
+ parametric: selected.parametric,
105
+ procedural: selected.procedural,
106
+ semantic: selected.semantic,
107
+ episodic: selected.episodic,
108
+ totalTokens: totalUsed,
109
+ p0Budget: watermark.p0.budget,
110
+ p1Budget: watermark.p1.budget,
111
+ p2Budget: watermark.p2.budget,
112
+ p3Budget: watermark.p3.budget
113
+ };
114
+ }
115
+ getWatermarkBudget(watermark, category) {
116
+ for (const [, v] of Object.entries(watermark)) {
117
+ const entry = v;
118
+ if (entry.key === category)
119
+ return entry.budget;
120
+ }
121
+ return 0;
122
+ }
123
+ estimateItemTokens(item, category) {
124
+ switch (category) {
125
+ case 'parametric':
126
+ return Math.ceil((item.content || item.rule || '').length / 4) + 10;
127
+ case 'procedural':
128
+ return Math.ceil((item.pattern || '').length / 4) + 15;
129
+ case 'semantic':
130
+ return Math.ceil((item.facts || []).join(' ').length / 4) + 20;
131
+ case 'episodic':
132
+ return Math.ceil((item.summary || item.content || '').length / 4) + 10;
133
+ default:
134
+ return 50;
135
+ }
136
+ }
137
+ setDefaultBudget(budget) {
138
+ this.defaultBudget = budget;
139
+ }
140
+ }
141
+ exports.TokenBudgetAllocator = TokenBudgetAllocator;
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.VectorIndex = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const transformers_1 = require("@huggingface/transformers");
39
+ class VectorIndex {
40
+ embedder = null;
41
+ vectors = new Map();
42
+ initialized = false;
43
+ modelName;
44
+ constructor(modelName) {
45
+ this.modelName = modelName || 'Xenova/all-MiniLM-L6-v2';
46
+ }
47
+ async init() {
48
+ this.embedder = await (0, transformers_1.pipeline)('feature-extraction', this.modelName);
49
+ this.initialized = true;
50
+ }
51
+ async addDocument(id, text, metadata) {
52
+ if (!this.initialized)
53
+ await this.init();
54
+ const vector = await this.embed(text);
55
+ this.vectors.set(id, { vector, text, metadata });
56
+ }
57
+ async addDocuments(entries) {
58
+ for (const entry of entries) {
59
+ await this.addDocument(entry.id, entry.text, entry.metadata);
60
+ }
61
+ }
62
+ async search(query, topK) {
63
+ if (!this.initialized)
64
+ await this.init();
65
+ topK = topK || 10;
66
+ if (this.vectors.size === 0)
67
+ return [];
68
+ const queryVector = await this.embed(query);
69
+ const scored = [];
70
+ for (const [id, entry] of this.vectors) {
71
+ const score = this.cosineSimilarity(queryVector, entry.vector);
72
+ scored.push({ id, score, text: entry.text, metadata: entry.metadata });
73
+ }
74
+ scored.sort((a, b) => b.score - a.score);
75
+ return scored.slice(0, topK);
76
+ }
77
+ removeDocument(id) {
78
+ this.vectors.delete(id);
79
+ }
80
+ clear() {
81
+ this.vectors.clear();
82
+ }
83
+ get size() {
84
+ return this.vectors.size;
85
+ }
86
+ save(path) {
87
+ const obj = {};
88
+ for (const [id, entry] of this.vectors) {
89
+ obj[id] = { vector: entry.vector, text: entry.text, metadata: entry.metadata };
90
+ }
91
+ fs.writeFileSync(path, JSON.stringify(obj, null, 2), 'utf-8');
92
+ }
93
+ load(path) {
94
+ const raw = fs.readFileSync(path, 'utf-8');
95
+ const obj = JSON.parse(raw);
96
+ this.vectors.clear();
97
+ for (const [id, data] of Object.entries(obj)) {
98
+ this.vectors.set(id, data);
99
+ }
100
+ }
101
+ async embed(text) {
102
+ const output = await this.embedder(text, { pooling: 'mean', normalize: true });
103
+ return Array.from(output.data);
104
+ }
105
+ cosineSimilarity(a, b) {
106
+ let dot = 0;
107
+ let normA = 0;
108
+ let normB = 0;
109
+ for (let i = 0; i < a.length; i++) {
110
+ dot += a[i] * b[i];
111
+ normA += a[i] * a[i];
112
+ normB += b[i] * b[i];
113
+ }
114
+ return dot / (Math.sqrt(normA) * Math.sqrt(normB));
115
+ }
116
+ }
117
+ exports.VectorIndex = VectorIndex;
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ZeroTokenCompressor = void 0;
4
+ class ZeroTokenCompressor {
5
+ rules;
6
+ constructor() {
7
+ this.rules = [
8
+ {
9
+ pattern: /coverage\s+([\d.]+)%/i,
10
+ extractor: (match) => ({
11
+ type: 'metric',
12
+ fact: `coverage ${match[1]}%`,
13
+ concept: 'coverage',
14
+ }),
15
+ },
16
+ {
17
+ pattern: /Error:\s+(.+)/,
18
+ extractor: (match) => ({
19
+ type: 'error',
20
+ fact: `Error: ${match[1]}`,
21
+ concept: 'error',
22
+ }),
23
+ },
24
+ {
25
+ pattern: /modified\s+(.+?):\s+(.+)/i,
26
+ extractor: (match) => ({
27
+ type: 'file_change',
28
+ fact: `Modified ${match[1]}: ${match[2]}`,
29
+ concept: 'file-edit',
30
+ }),
31
+ },
32
+ {
33
+ pattern: /Tool\s+(\w+)\s+executed/i,
34
+ extractor: (match) => ({
35
+ type: 'tool_use',
36
+ fact: `Tool used: ${match[1]}`,
37
+ concept: match[1].toLowerCase(),
38
+ }),
39
+ },
40
+ ];
41
+ }
42
+ compress(observations) {
43
+ const results = [];
44
+ let idCounter = 0;
45
+ for (const obs of observations) {
46
+ const content = typeof obs.content === 'string' ? obs.content : '';
47
+ let matched = false;
48
+ for (const rule of this.rules) {
49
+ const match = content.match(rule.pattern);
50
+ if (match) {
51
+ const extracted = rule.extractor(match);
52
+ results.push({
53
+ id: `compressed_${idCounter++}`,
54
+ type: extracted.type,
55
+ fact: extracted.fact,
56
+ concept: extracted.concept,
57
+ energy: 0.5,
58
+ timestamp: obs.timestamp || Date.now(),
59
+ loopNum: obs.loopNum || 0,
60
+ });
61
+ matched = true;
62
+ break;
63
+ }
64
+ }
65
+ if (!matched) {
66
+ results.push({
67
+ id: `compressed_${idCounter++}`,
68
+ type: 'observation',
69
+ fact: content.substring(0, 100),
70
+ concept: 'misc',
71
+ energy: 0.3,
72
+ timestamp: obs.timestamp || Date.now(),
73
+ loopNum: obs.loopNum || 0,
74
+ });
75
+ }
76
+ }
77
+ return results;
78
+ }
79
+ }
80
+ exports.ZeroTokenCompressor = ZeroTokenCompressor;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CognitiveRouter = exports.defaultRouterConfig = void 0;
4
+ exports.defaultRouterConfig = {
5
+ agents: {
6
+ plan: { model: 'claude-sonnet-4-20250514', priority: 'quality' },
7
+ execute: { model: 'claude-sonnet-4-20250514', priority: 'quality' },
8
+ review: { model: 'claude-haiku-3-5-20241022', priority: 'cost' }
9
+ },
10
+ budget: { total: 1000000, perGoal: 200000, threshold: 0.8 }
11
+ };
12
+ class CognitiveRouter {
13
+ config;
14
+ constructor(config) {
15
+ this.config = this.mergeConfig(exports.defaultRouterConfig, config);
16
+ }
17
+ selectModel(agentType, remainingBudget, totalBudget) {
18
+ const usage = 1 - (remainingBudget / totalBudget);
19
+ const agentConfig = this.config.agents[agentType];
20
+ if (usage > this.config.budget.threshold && agentType === 'execute') {
21
+ return { model: 'haiku', reason: 'budget_threshold' };
22
+ }
23
+ return { model: agentConfig.model, reason: 'default' };
24
+ }
25
+ getConfig() {
26
+ return { ...this.config };
27
+ }
28
+ mergeConfig(base, override) {
29
+ if (!override)
30
+ return base;
31
+ return {
32
+ agents: {
33
+ plan: { ...base.agents.plan, ...override.agents?.plan },
34
+ execute: { ...base.agents.execute, ...override.agents?.execute },
35
+ review: { ...base.agents.review, ...override.agents?.review }
36
+ },
37
+ budget: { ...base.budget, ...override.budget }
38
+ };
39
+ }
40
+ }
41
+ exports.CognitiveRouter = CognitiveRouter;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CostEstimator = void 0;
4
+ const types_1 = require("./types");
5
+ class CostEstimator {
6
+ records = [];
7
+ recordToolCall(call) {
8
+ const tokens = (0, types_1.estimateTokens)(call.toolName, call.input);
9
+ const cost = (0, types_1.estimateCost)(tokens, call.model);
10
+ const record = {
11
+ id: (0, types_1.generateCostId)(),
12
+ goalId: call.goalId,
13
+ loopNum: call.loopNum,
14
+ waveNum: call.waveNum,
15
+ toolName: call.toolName,
16
+ estimatedTokens: tokens,
17
+ estimatedCost: cost,
18
+ timestamp: new Date().toISOString()
19
+ };
20
+ this.records.push(record);
21
+ return record;
22
+ }
23
+ getAllRecords() {
24
+ return [...this.records];
25
+ }
26
+ getSummary(goalId, loopNum) {
27
+ const filtered = this.records.filter(r => {
28
+ if (goalId && r.goalId !== goalId)
29
+ return false;
30
+ if (loopNum !== undefined && r.loopNum !== loopNum)
31
+ return false;
32
+ return true;
33
+ });
34
+ if (filtered.length === 0) {
35
+ return { totalTokens: 0, totalCost: 0, byWave: [], byTool: [] };
36
+ }
37
+ const waveMap = new Map();
38
+ for (const r of filtered) {
39
+ const wn = r.waveNum ?? 0;
40
+ const entry = waveMap.get(wn) || { tokens: 0, cost: 0 };
41
+ entry.tokens += r.estimatedTokens;
42
+ entry.cost += r.estimatedCost;
43
+ waveMap.set(wn, entry);
44
+ }
45
+ const toolMap = new Map();
46
+ for (const r of filtered) {
47
+ const entry = toolMap.get(r.toolName) || { tokens: 0, cost: 0 };
48
+ entry.tokens += r.estimatedTokens;
49
+ entry.cost += r.estimatedCost;
50
+ toolMap.set(r.toolName, entry);
51
+ }
52
+ return {
53
+ totalTokens: filtered.reduce((s, r) => s + r.estimatedTokens, 0),
54
+ totalCost: filtered.reduce((s, r) => s + r.estimatedCost, 0),
55
+ byWave: Array.from(waveMap.entries()).map(([waveNum, data]) => ({ waveNum, ...data })),
56
+ byTool: Array.from(toolMap.entries()).map(([toolName, data]) => ({ toolName, ...data }))
57
+ };
58
+ }
59
+ clear() {
60
+ this.records = [];
61
+ }
62
+ }
63
+ exports.CostEstimator = CostEstimator;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateCostId = generateCostId;
4
+ exports.estimateTokens = estimateTokens;
5
+ exports.estimateCost = estimateCost;
6
+ function generateCostId() {
7
+ return `cost_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
8
+ }
9
+ function estimateTokens(toolName, input) {
10
+ if (['file_edit', 'file_write', 'mafw_observe', 'mafw_search_hybrid'].includes(toolName)) {
11
+ return 0;
12
+ }
13
+ return Math.ceil(input.length / 4);
14
+ }
15
+ function estimateCost(tokens, model = 'sonnet') {
16
+ const RATES = { sonnet: 0.003, haiku: 0.0015 };
17
+ const rate = RATES[model] ?? RATES.sonnet;
18
+ return (tokens / 1000) * rate;
19
+ }