@jack200714/mafw 4.5.1 → 4.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (330) hide show
  1. package/README.md +5 -2
  2. package/bin/mafw.js +16 -14
  3. package/gateway/dist/index.js +52 -38
  4. package/gateway/dist/media/media-plugin-loader.js +0 -12
  5. package/gateway/dist/plugins/hub.js +153 -19
  6. package/gateway/dist/routes/plugins.js +15 -5
  7. package/gateway/dist/runtime/event-broadcast.js +33 -0
  8. package/gateway/dist/runtime/loader.js +23 -13
  9. package/gateway/dist/usage/builtin-plugins/gateway.js +25 -3
  10. package/gateway/dist/usage/plugin-loader.js +0 -11
  11. package/gateway/package.json +2 -2
  12. package/package.json +1 -7
  13. package/packages/tui/dist/cli.js +8 -3
  14. package/.opencode/mafw/.backup-v61/parametric/base-skill-manifest.yaml +0 -2
  15. package/.opencode/mafw/STATUS.md +0 -6
  16. package/.opencode/mafw/ledger.md +0 -20
  17. package/.opencode/mafw/memory/.harmonic_index.json +0 -28
  18. package/.opencode/mafw/memory/.review_queue.json +0 -1
  19. package/.opencode/mafw/memory/tier3/parametric.json +0 -13
  20. package/.opencode/mafw/memory/tier3/test-goal.json +0 -19
  21. package/.opencode/mafw/memory-index.json +0 -6
  22. package/.opencode/mafw/parametric/base-skill-manifest.yaml +0 -2
  23. package/.opencode/mafw/waves.json +0 -4
  24. package/.opencode/opencode.json +0 -3
  25. package/.opencode/plugins/mafw-plugin.ts +0 -8
  26. package/.opencode/skills/banner-design/SKILL.md +0 -196
  27. package/.opencode/skills/banner-design/references/banner-sizes-and-styles.md +0 -118
  28. package/.opencode/skills/brand/SKILL.md +0 -97
  29. package/.opencode/skills/brand/references/approval-checklist.md +0 -169
  30. package/.opencode/skills/brand/references/asset-organization.md +0 -157
  31. package/.opencode/skills/brand/references/brand-guideline-template.md +0 -140
  32. package/.opencode/skills/brand/references/color-palette-management.md +0 -186
  33. package/.opencode/skills/brand/references/consistency-checklist.md +0 -94
  34. package/.opencode/skills/brand/references/logo-usage-rules.md +0 -185
  35. package/.opencode/skills/brand/references/messaging-framework.md +0 -85
  36. package/.opencode/skills/brand/references/typography-specifications.md +0 -214
  37. package/.opencode/skills/brand/references/update.md +0 -118
  38. package/.opencode/skills/brand/references/visual-identity.md +0 -96
  39. package/.opencode/skills/brand/references/voice-framework.md +0 -88
  40. package/.opencode/skills/brand/scripts/extract-colors.cjs +0 -341
  41. package/.opencode/skills/brand/scripts/inject-brand-context.cjs +0 -349
  42. package/.opencode/skills/brand/scripts/sync-brand-to-tokens.cjs +0 -248
  43. package/.opencode/skills/brand/scripts/tests/test_sync_brand_to_tokens.py +0 -52
  44. package/.opencode/skills/brand/scripts/validate-asset.cjs +0 -387
  45. package/.opencode/skills/brand/templates/brand-guidelines-starter.md +0 -275
  46. package/.opencode/skills/design/SKILL.md +0 -313
  47. package/.opencode/skills/design/data/cip/deliverables.csv +0 -51
  48. package/.opencode/skills/design/data/cip/industries.csv +0 -21
  49. package/.opencode/skills/design/data/cip/mockup-contexts.csv +0 -21
  50. package/.opencode/skills/design/data/cip/styles.csv +0 -21
  51. package/.opencode/skills/design/data/icon/styles.csv +0 -16
  52. package/.opencode/skills/design/data/logo/colors.csv +0 -56
  53. package/.opencode/skills/design/data/logo/industries.csv +0 -56
  54. package/.opencode/skills/design/data/logo/styles.csv +0 -56
  55. package/.opencode/skills/design/references/banner-sizes-and-styles.md +0 -118
  56. package/.opencode/skills/design/references/cip-deliverable-guide.md +0 -95
  57. package/.opencode/skills/design/references/cip-design.md +0 -121
  58. package/.opencode/skills/design/references/cip-prompt-engineering.md +0 -84
  59. package/.opencode/skills/design/references/cip-style-guide.md +0 -68
  60. package/.opencode/skills/design/references/design-routing.md +0 -207
  61. package/.opencode/skills/design/references/icon-design.md +0 -122
  62. package/.opencode/skills/design/references/logo-color-psychology.md +0 -101
  63. package/.opencode/skills/design/references/logo-design.md +0 -92
  64. package/.opencode/skills/design/references/logo-prompt-engineering.md +0 -158
  65. package/.opencode/skills/design/references/logo-style-guide.md +0 -109
  66. package/.opencode/skills/design/references/slides-copywriting-formulas.md +0 -84
  67. package/.opencode/skills/design/references/slides-create.md +0 -4
  68. package/.opencode/skills/design/references/slides-html-template.md +0 -295
  69. package/.opencode/skills/design/references/slides-layout-patterns.md +0 -137
  70. package/.opencode/skills/design/references/slides-strategies.md +0 -94
  71. package/.opencode/skills/design/references/slides.md +0 -42
  72. package/.opencode/skills/design/references/social-photos-design.md +0 -329
  73. package/.opencode/skills/design/scripts/cip/core.py +0 -215
  74. package/.opencode/skills/design/scripts/cip/generate.py +0 -484
  75. package/.opencode/skills/design/scripts/cip/render-html.py +0 -424
  76. package/.opencode/skills/design/scripts/cip/search.py +0 -127
  77. package/.opencode/skills/design/scripts/icon/generate.py +0 -487
  78. package/.opencode/skills/design/scripts/logo/core.py +0 -175
  79. package/.opencode/skills/design/scripts/logo/generate.py +0 -362
  80. package/.opencode/skills/design/scripts/logo/search.py +0 -114
  81. package/.opencode/skills/design-system/SKILL.md +0 -244
  82. package/.opencode/skills/design-system/data/slide-backgrounds.csv +0 -11
  83. package/.opencode/skills/design-system/data/slide-charts.csv +0 -26
  84. package/.opencode/skills/design-system/data/slide-color-logic.csv +0 -14
  85. package/.opencode/skills/design-system/data/slide-copy.csv +0 -26
  86. package/.opencode/skills/design-system/data/slide-layout-logic.csv +0 -16
  87. package/.opencode/skills/design-system/data/slide-layouts.csv +0 -26
  88. package/.opencode/skills/design-system/data/slide-strategies.csv +0 -16
  89. package/.opencode/skills/design-system/data/slide-typography.csv +0 -15
  90. package/.opencode/skills/design-system/references/component-specs.md +0 -236
  91. package/.opencode/skills/design-system/references/component-tokens.md +0 -214
  92. package/.opencode/skills/design-system/references/primitive-tokens.md +0 -203
  93. package/.opencode/skills/design-system/references/semantic-tokens.md +0 -215
  94. package/.opencode/skills/design-system/references/states-and-variants.md +0 -241
  95. package/.opencode/skills/design-system/references/tailwind-integration.md +0 -251
  96. package/.opencode/skills/design-system/references/token-architecture.md +0 -224
  97. package/.opencode/skills/design-system/scripts/embed-tokens.cjs +0 -99
  98. package/.opencode/skills/design-system/scripts/fetch-background.py +0 -317
  99. package/.opencode/skills/design-system/scripts/generate-slide.py +0 -770
  100. package/.opencode/skills/design-system/scripts/generate-tokens.cjs +0 -205
  101. package/.opencode/skills/design-system/scripts/html-token-validator.py +0 -327
  102. package/.opencode/skills/design-system/scripts/search-slides.py +0 -218
  103. package/.opencode/skills/design-system/scripts/slide-token-validator.py +0 -35
  104. package/.opencode/skills/design-system/scripts/slide_search_core.py +0 -453
  105. package/.opencode/skills/design-system/scripts/tests/test_validate_tokens.py +0 -48
  106. package/.opencode/skills/design-system/scripts/validate-tokens.cjs +0 -246
  107. package/.opencode/skills/design-system/templates/design-tokens-starter.json +0 -143
  108. package/.opencode/skills/frontend-design/LICENSE.txt +0 -21
  109. package/.opencode/skills/frontend-design/SKILL.md +0 -115
  110. package/.opencode/skills/mafw-automation-interview/SKILL.md +0 -43
  111. package/.opencode/skills/mafw-cli-scanner/SKILL.md +0 -37
  112. package/.opencode/skills/mafw-compression-verifier/SKILL.md +0 -52
  113. package/.opencode/skills/mafw-desktop-inspector/SKILL.md +0 -170
  114. package/.opencode/skills/mafw-execute/SKILL.md +0 -62
  115. package/.opencode/skills/mafw-gateway-restart/SKILL.md +0 -87
  116. package/.opencode/skills/mafw-github-scanner/SKILL.md +0 -38
  117. package/.opencode/skills/mafw-goal/SKILL.md +0 -76
  118. package/.opencode/skills/mafw-interview/SKILL.md +0 -68
  119. package/.opencode/skills/mafw-memory-extractor/SKILL.md +0 -65
  120. package/.opencode/skills/mafw-plan/SKILL.md +0 -58
  121. package/.opencode/skills/mafw-review/SKILL.md +0 -85
  122. package/.opencode/skills/runtime-plugin-authoring/SKILL.md +0 -791
  123. package/.opencode/skills/slides/SKILL.md +0 -40
  124. package/.opencode/skills/slides/references/copywriting-formulas.md +0 -84
  125. package/.opencode/skills/slides/references/create.md +0 -4
  126. package/.opencode/skills/slides/references/html-template.md +0 -295
  127. package/.opencode/skills/slides/references/layout-patterns.md +0 -137
  128. package/.opencode/skills/slides/references/slide-strategies.md +0 -94
  129. package/.opencode/skills/ui-styling/LICENSE.txt +0 -202
  130. package/.opencode/skills/ui-styling/SKILL.md +0 -324
  131. package/.opencode/skills/ui-styling/references/canvas-design-system.md +0 -320
  132. package/.opencode/skills/ui-styling/references/shadcn-accessibility.md +0 -471
  133. package/.opencode/skills/ui-styling/references/shadcn-components.md +0 -424
  134. package/.opencode/skills/ui-styling/references/shadcn-theming.md +0 -373
  135. package/.opencode/skills/ui-styling/references/tailwind-customization.md +0 -483
  136. package/.opencode/skills/ui-styling/references/tailwind-responsive.md +0 -382
  137. package/.opencode/skills/ui-styling/references/tailwind-utilities.md +0 -455
  138. package/.opencode/skills/ui-styling/scripts/requirements.txt +0 -17
  139. package/.opencode/skills/ui-styling/scripts/shadcn_add.py +0 -308
  140. package/.opencode/skills/ui-styling/scripts/tailwind_config_gen.py +0 -473
  141. package/.opencode/skills/ui-styling/scripts/tests/coverage-ui.json +0 -1
  142. package/.opencode/skills/ui-styling/scripts/tests/requirements.txt +0 -3
  143. package/.opencode/skills/ui-styling/scripts/tests/test_shadcn_add.py +0 -266
  144. package/.opencode/skills/ui-styling/scripts/tests/test_tailwind_config_gen.py +0 -394
  145. package/.opencode/skills/ui-ux-pro-max/SKILL.md +0 -388
  146. package/.opencode/skills/ui-ux-pro-max/data/app-interface.csv +0 -31
  147. package/.opencode/skills/ui-ux-pro-max/data/charts.csv +0 -26
  148. package/.opencode/skills/ui-ux-pro-max/data/colors.csv +0 -193
  149. package/.opencode/skills/ui-ux-pro-max/data/google-fonts.csv +0 -1924
  150. package/.opencode/skills/ui-ux-pro-max/data/icons.csv +0 -106
  151. package/.opencode/skills/ui-ux-pro-max/data/landing.csv +0 -35
  152. package/.opencode/skills/ui-ux-pro-max/data/motion.csv +0 -17
  153. package/.opencode/skills/ui-ux-pro-max/data/products.csv +0 -193
  154. package/.opencode/skills/ui-ux-pro-max/data/react-performance.csv +0 -45
  155. package/.opencode/skills/ui-ux-pro-max/data/stacks/angular.csv +0 -51
  156. package/.opencode/skills/ui-ux-pro-max/data/stacks/astro.csv +0 -54
  157. package/.opencode/skills/ui-ux-pro-max/data/stacks/avalonia.csv +0 -57
  158. package/.opencode/skills/ui-ux-pro-max/data/stacks/flutter.csv +0 -53
  159. package/.opencode/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +0 -56
  160. package/.opencode/skills/ui-ux-pro-max/data/stacks/javafx.csv +0 -76
  161. package/.opencode/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +0 -53
  162. package/.opencode/skills/ui-ux-pro-max/data/stacks/laravel.csv +0 -51
  163. package/.opencode/skills/ui-ux-pro-max/data/stacks/nextjs.csv +0 -53
  164. package/.opencode/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +0 -71
  165. package/.opencode/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +0 -59
  166. package/.opencode/skills/ui-ux-pro-max/data/stacks/react-native.csv +0 -52
  167. package/.opencode/skills/ui-ux-pro-max/data/stacks/react.csv +0 -54
  168. package/.opencode/skills/ui-ux-pro-max/data/stacks/shadcn.csv +0 -61
  169. package/.opencode/skills/ui-ux-pro-max/data/stacks/svelte.csv +0 -54
  170. package/.opencode/skills/ui-ux-pro-max/data/stacks/swiftui.csv +0 -51
  171. package/.opencode/skills/ui-ux-pro-max/data/stacks/threejs.csv +0 -54
  172. package/.opencode/skills/ui-ux-pro-max/data/stacks/uno.csv +0 -60
  173. package/.opencode/skills/ui-ux-pro-max/data/stacks/uwp.csv +0 -56
  174. package/.opencode/skills/ui-ux-pro-max/data/stacks/vue.csv +0 -50
  175. package/.opencode/skills/ui-ux-pro-max/data/stacks/winui.csv +0 -60
  176. package/.opencode/skills/ui-ux-pro-max/data/stacks/wpf.csv +0 -57
  177. package/.opencode/skills/ui-ux-pro-max/data/styles.csv +0 -85
  178. package/.opencode/skills/ui-ux-pro-max/data/typography.csv +0 -75
  179. package/.opencode/skills/ui-ux-pro-max/data/ui-reasoning.csv +0 -162
  180. package/.opencode/skills/ui-ux-pro-max/data/ux-guidelines.csv +0 -100
  181. package/.opencode/skills/ui-ux-pro-max/scripts/core.py +0 -464
  182. package/.opencode/skills/ui-ux-pro-max/scripts/design_system.py +0 -1479
  183. package/.opencode/skills/ui-ux-pro-max/scripts/search.py +0 -162
  184. package/.opencode/skills/ui-ux-pro-max/scripts/tests/test_core.py +0 -134
  185. package/.opencode/skills/ui-ux-pro-max/scripts/tests/test_design_system_mode.py +0 -159
  186. package/.opencode/skills/ui-ux-pro-max/scripts/validate_data.py +0 -114
  187. package/dist/hooks/bash-python-guide.d.ts +0 -4
  188. package/dist/hooks/bash-python-guide.d.ts.map +0 -1
  189. package/dist/hooks/bash-python-guide.js +0 -67
  190. package/dist/hooks/bash-python-guide.js.map +0 -1
  191. package/dist/hooks/handoff.d.ts +0 -9
  192. package/dist/hooks/handoff.d.ts.map +0 -1
  193. package/dist/hooks/handoff.js +0 -8
  194. package/dist/hooks/handoff.js.map +0 -1
  195. package/dist/hooks/hook-manager.d.ts +0 -32
  196. package/dist/hooks/hook-manager.d.ts.map +0 -1
  197. package/dist/hooks/hook-manager.js +0 -91
  198. package/dist/hooks/hook-manager.js.map +0 -1
  199. package/dist/hooks/llm-after.d.ts +0 -8
  200. package/dist/hooks/llm-after.d.ts.map +0 -1
  201. package/dist/hooks/llm-after.js +0 -8
  202. package/dist/hooks/llm-after.js.map +0 -1
  203. package/dist/hooks/media-ingest.d.ts +0 -43
  204. package/dist/hooks/media-ingest.d.ts.map +0 -1
  205. package/dist/hooks/media-ingest.js +0 -269
  206. package/dist/hooks/media-ingest.js.map +0 -1
  207. package/dist/hooks/memory-guide.d.ts +0 -3
  208. package/dist/hooks/memory-guide.d.ts.map +0 -1
  209. package/dist/hooks/memory-guide.js +0 -47
  210. package/dist/hooks/memory-guide.js.map +0 -1
  211. package/dist/hooks/observation-capture.d.ts +0 -17
  212. package/dist/hooks/observation-capture.d.ts.map +0 -1
  213. package/dist/hooks/observation-capture.js +0 -20
  214. package/dist/hooks/observation-capture.js.map +0 -1
  215. package/dist/hooks/session-compacting.d.ts +0 -6
  216. package/dist/hooks/session-compacting.d.ts.map +0 -1
  217. package/dist/hooks/session-compacting.js +0 -6
  218. package/dist/hooks/session-compacting.js.map +0 -1
  219. package/dist/hooks/session-ending.d.ts +0 -20
  220. package/dist/hooks/session-ending.d.ts.map +0 -1
  221. package/dist/hooks/session-ending.js +0 -113
  222. package/dist/hooks/session-ending.js.map +0 -1
  223. package/dist/hooks/session-recall.d.ts +0 -2
  224. package/dist/hooks/session-recall.d.ts.map +0 -1
  225. package/dist/hooks/session-recall.js +0 -103
  226. package/dist/hooks/session-recall.js.map +0 -1
  227. package/dist/hooks/session-start.d.ts +0 -9
  228. package/dist/hooks/session-start.d.ts.map +0 -1
  229. package/dist/hooks/session-start.js +0 -42
  230. package/dist/hooks/session-start.js.map +0 -1
  231. package/dist/hooks/tool-before.d.ts +0 -10
  232. package/dist/hooks/tool-before.d.ts.map +0 -1
  233. package/dist/hooks/tool-before.js +0 -6
  234. package/dist/hooks/tool-before.js.map +0 -1
  235. package/dist/hooks/tool-executed.d.ts +0 -19
  236. package/dist/hooks/tool-executed.d.ts.map +0 -1
  237. package/dist/hooks/tool-executed.js +0 -12
  238. package/dist/hooks/tool-executed.js.map +0 -1
  239. package/dist/hooks/user-profile.d.ts +0 -2
  240. package/dist/hooks/user-profile.d.ts.map +0 -1
  241. package/dist/hooks/user-profile.js +0 -30
  242. package/dist/hooks/user-profile.js.map +0 -1
  243. package/dist/hooks/user-prompt.d.ts +0 -9
  244. package/dist/hooks/user-prompt.d.ts.map +0 -1
  245. package/dist/hooks/user-prompt.js +0 -8
  246. package/dist/hooks/user-prompt.js.map +0 -1
  247. package/dist/hooks/voice-guide.d.ts +0 -8
  248. package/dist/hooks/voice-guide.d.ts.map +0 -1
  249. package/dist/hooks/voice-guide.js +0 -101
  250. package/dist/hooks/voice-guide.js.map +0 -1
  251. package/dist/plugin.d.ts +0 -55
  252. package/dist/plugin.d.ts.map +0 -1
  253. package/dist/plugin.js +0 -342
  254. package/dist/plugin.js.map +0 -1
  255. package/dist/tools/add-memory.d.ts +0 -17
  256. package/dist/tools/add-memory.d.ts.map +0 -1
  257. package/dist/tools/add-memory.js +0 -60
  258. package/dist/tools/add-memory.js.map +0 -1
  259. package/dist/tools/media-ask.d.ts +0 -14
  260. package/dist/tools/media-ask.d.ts.map +0 -1
  261. package/dist/tools/media-ask.js +0 -224
  262. package/dist/tools/media-ask.js.map +0 -1
  263. package/dist/tools/media-speak.d.ts +0 -16
  264. package/dist/tools/media-speak.d.ts.map +0 -1
  265. package/dist/tools/media-speak.js +0 -78
  266. package/dist/tools/media-speak.js.map +0 -1
  267. package/dist/tools/media-upload.d.ts +0 -14
  268. package/dist/tools/media-upload.d.ts.map +0 -1
  269. package/dist/tools/media-upload.js +0 -155
  270. package/dist/tools/media-upload.js.map +0 -1
  271. package/dist/tools/python-exec.d.ts +0 -13
  272. package/dist/tools/python-exec.d.ts.map +0 -1
  273. package/dist/tools/python-exec.js +0 -99
  274. package/dist/tools/python-exec.js.map +0 -1
  275. package/dist/tools/python-restart.d.ts +0 -11
  276. package/dist/tools/python-restart.d.ts.map +0 -1
  277. package/dist/tools/python-restart.js +0 -33
  278. package/dist/tools/python-restart.js.map +0 -1
  279. package/dist/utils/circuit-breaker.d.ts +0 -23
  280. package/dist/utils/circuit-breaker.d.ts.map +0 -1
  281. package/dist/utils/circuit-breaker.js +0 -75
  282. package/dist/utils/circuit-breaker.js.map +0 -1
  283. package/dist/utils/config-loader.d.ts +0 -20
  284. package/dist/utils/config-loader.d.ts.map +0 -1
  285. package/dist/utils/config-loader.js +0 -194
  286. package/dist/utils/config-loader.js.map +0 -1
  287. package/dist/utils/fallback.d.ts +0 -7
  288. package/dist/utils/fallback.d.ts.map +0 -1
  289. package/dist/utils/fallback.js +0 -20
  290. package/dist/utils/fallback.js.map +0 -1
  291. package/dist/utils/git.d.ts +0 -24
  292. package/dist/utils/git.d.ts.map +0 -1
  293. package/dist/utils/git.js +0 -71
  294. package/dist/utils/git.js.map +0 -1
  295. package/dist/utils/github.d.ts +0 -37
  296. package/dist/utils/github.d.ts.map +0 -1
  297. package/dist/utils/github.js +0 -53
  298. package/dist/utils/github.js.map +0 -1
  299. package/dist/utils/global-path.d.ts +0 -2
  300. package/dist/utils/global-path.d.ts.map +0 -1
  301. package/dist/utils/global-path.js +0 -32
  302. package/dist/utils/global-path.js.map +0 -1
  303. package/dist/utils/logger.d.ts +0 -6
  304. package/dist/utils/logger.d.ts.map +0 -1
  305. package/dist/utils/logger.js +0 -69
  306. package/dist/utils/logger.js.map +0 -1
  307. package/dist/utils/obs-capture.d.ts +0 -7
  308. package/dist/utils/obs-capture.d.ts.map +0 -1
  309. package/dist/utils/obs-capture.js +0 -49
  310. package/dist/utils/obs-capture.js.map +0 -1
  311. package/dist/utils/retry.d.ts +0 -11
  312. package/dist/utils/retry.d.ts.map +0 -1
  313. package/dist/utils/retry.js +0 -45
  314. package/dist/utils/retry.js.map +0 -1
  315. package/dist/utils/self-wiring.d.ts +0 -13
  316. package/dist/utils/self-wiring.d.ts.map +0 -1
  317. package/dist/utils/self-wiring.js +0 -86
  318. package/dist/utils/self-wiring.js.map +0 -1
  319. package/dist/utils/state.d.ts +0 -106
  320. package/dist/utils/state.d.ts.map +0 -1
  321. package/dist/utils/state.js +0 -166
  322. package/dist/utils/state.js.map +0 -1
  323. package/dist/utils/status.d.ts +0 -47
  324. package/dist/utils/status.d.ts.map +0 -1
  325. package/dist/utils/status.js +0 -147
  326. package/dist/utils/status.js.map +0 -1
  327. package/dist/utils/ttl-map.d.ts +0 -17
  328. package/dist/utils/ttl-map.d.ts.map +0 -1
  329. package/dist/utils/ttl-map.js +0 -67
  330. package/dist/utils/ttl-map.js.map +0 -1
@@ -1,2 +0,0 @@
1
- export declare function findGlobalMafwDir(): string;
2
- //# sourceMappingURL=global-path.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"global-path.d.ts","sourceRoot":"","sources":["../../src/utils/global-path.ts"],"names":[],"mappings":"AAGA,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C"}
@@ -1,32 +0,0 @@
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 (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.findGlobalMafwDir = findGlobalMafwDir;
27
- const os = __importStar(require("os"));
28
- const path = __importStar(require("path"));
29
- function findGlobalMafwDir() {
30
- return path.join(os.homedir(), '.mafw');
31
- }
32
- //# sourceMappingURL=global-path.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"global-path.js","sourceRoot":"","sources":["../../src/utils/global-path.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAGA,8CAEC;AALD,uCAAyB;AACzB,2CAA6B;AAE7B,SAAgB,iBAAiB;IAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC"}
@@ -1,6 +0,0 @@
1
- /**
2
- * Tees console.log/warn/error to both the original console and a log file.
3
- * Once installed, ALL existing console.* calls automatically go to both.
4
- */
5
- export declare function installFileLogging(logDir: string, maxFileSize?: number): void;
6
- //# sourceMappingURL=logger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,SAAkB,GAAG,IAAI,CAwCtF"}
@@ -1,69 +0,0 @@
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 (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.installFileLogging = installFileLogging;
27
- const fs = __importStar(require("fs"));
28
- const path = __importStar(require("path"));
29
- /**
30
- * Tees console.log/warn/error to both the original console and a log file.
31
- * Once installed, ALL existing console.* calls automatically go to both.
32
- */
33
- function installFileLogging(logDir, maxFileSize = 5 * 1024 * 1024) {
34
- if (!fs.existsSync(logDir)) {
35
- fs.mkdirSync(logDir, { recursive: true });
36
- }
37
- const logFilePath = path.join(logDir, 'mafw.log');
38
- function appendToFile(text) {
39
- try {
40
- if (fs.existsSync(logFilePath)) {
41
- const stat = fs.statSync(logFilePath);
42
- if (stat.size >= maxFileSize) {
43
- fs.renameSync(logFilePath, `${logFilePath}.${Date.now()}`);
44
- }
45
- }
46
- fs.appendFileSync(logFilePath, text, 'utf-8');
47
- }
48
- catch { /* non-fatal */ }
49
- }
50
- const origLog = console.log.bind(console);
51
- const origWarn = console.warn.bind(console);
52
- const origError = console.error.bind(console);
53
- console.log = (...args) => {
54
- origLog(...args);
55
- const line = args.map(a => typeof a === 'object' ? JSON.stringify(a) : String(a)).join(' ');
56
- appendToFile(`[${new Date().toISOString()}] [INFO] ${line}\n`);
57
- };
58
- console.warn = (...args) => {
59
- origWarn(...args);
60
- const line = args.map(a => typeof a === 'object' ? JSON.stringify(a) : String(a)).join(' ');
61
- appendToFile(`[${new Date().toISOString()}] [WARN] ${line}\n`);
62
- };
63
- console.error = (...args) => {
64
- origError(...args);
65
- const line = args.map(a => typeof a === 'object' ? JSON.stringify(a) : String(a)).join(' ');
66
- appendToFile(`[${new Date().toISOString()}] [ERROR] ${line}\n`);
67
- };
68
- }
69
- //# sourceMappingURL=logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- export type ObservationSource = 'user_input' | 'assistant_reply' | 'tool_result' | 'reasoning';
2
- export declare function pushObservation(sessionID: string, source: ObservationSource, content: string, failure?: boolean): Promise<void>;
3
- /** Extract plain text from an opencode message parts array. */
4
- export declare function extractTextFromParts(parts: any[] | undefined | null): string;
5
- /** Tool failure signal from the event stream (session.next.tool.failed). */
6
- export declare function toolFailureText(props: any): string;
7
- //# sourceMappingURL=obs-capture.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"obs-capture.d.ts","sourceRoot":"","sources":["../../src/utils/obs-capture.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,iBAAiB,GAAG,aAAa,GAAG,WAAW,CAAC;AAM/F,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,UAAQ,GACd,OAAO,CAAC,IAAI,CAAC,CAef;AAED,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAM5E;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAQlD"}
@@ -1,49 +0,0 @@
1
- "use strict";
2
- // Observation capture client (plugin side). Pushes user/tool/assistant/
3
- // reasoning observations to the gateway's T1 SQLite store via HTTP.
4
- // Fail-open: gateway unreachable → observation silently dropped (never throw
5
- // into the hook pipeline).
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.pushObservation = pushObservation;
8
- exports.extractTextFromParts = extractTextFromParts;
9
- exports.toolFailureText = toolFailureText;
10
- const GATEWAY_PORT = process.env.MAFW_SERVER_API_PORT || process.env.MAFW_GATEWAY_PORT || '3000';
11
- const CAPTURE_URL = `http://127.0.0.1:${GATEWAY_PORT}/api/obs/capture`;
12
- const MAX_CONTENT = 100_000;
13
- async function pushObservation(sessionID, source, content, failure = false) {
14
- if (!sessionID || !content || !content.trim())
15
- return;
16
- try {
17
- const controller = new AbortController();
18
- const timeout = setTimeout(() => controller.abort(), 5000);
19
- await fetch(CAPTURE_URL, {
20
- method: 'POST',
21
- headers: { 'Content-Type': 'application/json' },
22
- body: JSON.stringify({ sessionID, source, content: content.slice(0, MAX_CONTENT), failure }),
23
- signal: controller.signal,
24
- });
25
- clearTimeout(timeout);
26
- }
27
- catch {
28
- // fail-open
29
- }
30
- }
31
- /** Extract plain text from an opencode message parts array. */
32
- function extractTextFromParts(parts) {
33
- if (!Array.isArray(parts))
34
- return '';
35
- return parts
36
- .filter((p) => p?.type === 'text' && typeof p?.text === 'string')
37
- .map((p) => p.text)
38
- .join('\n');
39
- }
40
- /** Tool failure signal from the event stream (session.next.tool.failed). */
41
- function toolFailureText(props) {
42
- const tool = props?.tool || '';
43
- const err = props?.error;
44
- const message = typeof err === 'string'
45
- ? err
46
- : err?.message || (err && Object.keys(err).length > 0 ? JSON.stringify(err) : 'tool failed');
47
- return tool ? `[${tool}] ${message}` : message;
48
- }
49
- //# sourceMappingURL=obs-capture.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"obs-capture.js","sourceRoot":"","sources":["../../src/utils/obs-capture.ts"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,oEAAoE;AACpE,6EAA6E;AAC7E,2BAA2B;;AAQ3B,0CAoBC;AAGD,oDAMC;AAGD,0CAQC;AA5CD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,MAAM,CAAC;AACjG,MAAM,WAAW,GAAG,oBAAoB,YAAY,kBAAkB,CAAC;AACvE,MAAM,WAAW,GAAG,OAAO,CAAC;AAErB,KAAK,UAAU,eAAe,CACnC,SAAiB,EACjB,MAAyB,EACzB,OAAe,EACf,OAAO,GAAG,KAAK;IAEf,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QAAE,OAAO;IACtD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3D,MAAM,KAAK,CAAC,WAAW,EAAE;YACvB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;YAC5F,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,SAAgB,oBAAoB,CAAC,KAA+B;IAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,EAAE,IAAI,KAAK,QAAQ,CAAC;SACrE,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SACvB,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,4EAA4E;AAC5E,SAAgB,eAAe,CAAC,KAAU;IACxC,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,KAAK,EAAE,KAAK,CAAC;IACzB,MAAM,OAAO,GACX,OAAO,GAAG,KAAK,QAAQ;QACrB,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,GAAG,EAAE,OAAO,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IACjG,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AACjD,CAAC"}
@@ -1,11 +0,0 @@
1
- export interface RetryPolicy {
2
- maxRetries: number;
3
- baseDelay: number;
4
- maxDelay: number;
5
- backoffMultiplier: number;
6
- retryableErrors: string[];
7
- onRetry?: (attempt: number, error: Error) => void;
8
- onExhausted?: (error: Error) => void;
9
- }
10
- export declare function withRetry<T>(fn: () => Promise<T>, policy?: Partial<RetryPolicy>): Promise<T>;
11
- //# sourceMappingURL=retry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAClD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACtC;AAoBD,wBAAgB,SAAS,CAAC,CAAC,EACzB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAC5B,OAAO,CAAC,CAAC,CAAC,CAyBZ"}
@@ -1,45 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.withRetry = withRetry;
4
- const DEFAULT_POLICY = {
5
- maxRetries: 3,
6
- baseDelay: 1000,
7
- maxDelay: 30000,
8
- backoffMultiplier: 2,
9
- retryableErrors: ['ETIMEDOUT', 'ECONNRESET', 'ECONNREFUSED', 'EAI_AGAIN', 'RATE_LIMITED', '429'],
10
- };
11
- function isRetryable(error, retryableErrors) {
12
- const code = error.code;
13
- const message = error.message;
14
- return retryableErrors.some(pattern => {
15
- if (code && code === pattern)
16
- return true;
17
- if (message && message.includes(pattern))
18
- return true;
19
- return false;
20
- });
21
- }
22
- function withRetry(fn, policy) {
23
- const fullPolicy = { ...DEFAULT_POLICY, ...policy };
24
- return (async function attempt(attemptCount) {
25
- try {
26
- return await fn();
27
- }
28
- catch (error) {
29
- if (attemptCount < fullPolicy.maxRetries && isRetryable(error, fullPolicy.retryableErrors)) {
30
- if (fullPolicy.onRetry) {
31
- fullPolicy.onRetry(attemptCount + 1, error);
32
- }
33
- const delay = Math.min(fullPolicy.baseDelay * Math.pow(fullPolicy.backoffMultiplier, attemptCount), fullPolicy.maxDelay);
34
- const jitteredDelay = delay * (0.5 + Math.random() * 0.5);
35
- await new Promise(resolve => setTimeout(resolve, jitteredDelay));
36
- return attempt(attemptCount + 1);
37
- }
38
- if (fullPolicy.onExhausted && attemptCount >= fullPolicy.maxRetries) {
39
- fullPolicy.onExhausted(error);
40
- }
41
- throw error;
42
- }
43
- })(0);
44
- }
45
- //# sourceMappingURL=retry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":";;AA4BA,8BA4BC;AA9CD,MAAM,cAAc,GAAgB;IAClC,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,KAAK;IACf,iBAAiB,EAAE,CAAC;IACpB,eAAe,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,CAAC;CACjG,CAAC;AAEF,SAAS,WAAW,CAAC,KAAY,EAAE,eAAyB;IAC1D,MAAM,IAAI,GAAI,KAAa,CAAC,IAAI,CAAC;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,OAAO,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QACpC,IAAI,IAAI,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1C,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,SAAS,CACvB,EAAoB,EACpB,MAA6B;IAE7B,MAAM,UAAU,GAAgB,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;IAEjE,OAAO,CAAC,KAAK,UAAU,OAAO,CAAC,YAAoB;QACjD,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,YAAY,GAAG,UAAU,CAAC,UAAU,IAAI,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC3F,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;oBACvB,UAAU,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC9C,CAAC;gBACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,iBAAiB,EAAE,YAAY,CAAC,EAC3E,UAAU,CAAC,QAAQ,CACpB,CAAC;gBACF,MAAM,aAAa,GAAG,KAAK,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;gBAC1D,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;gBACjE,OAAO,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,UAAU,CAAC,WAAW,IAAI,YAAY,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;gBACpE,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACR,CAAC"}
@@ -1,13 +0,0 @@
1
- export type WiringResult = 'wired' | 'present' | 'skipped' | 'failed';
2
- export declare function resolveGatewayApiUrl(): string;
3
- /**
4
- * Self-wiring: ensure the global opencode config has an `mcp.mafw` section so
5
- * gateway MCP tools are mounted in every session. Opencode reads global config
6
- * from ~/.config/opencode/opencode.jsonc (or opencode.json). The plugin config
7
- * hook cannot inject mcp (notification-only), so we patch the file directly.
8
- *
9
- * Fail-open: any error leaves the config untouched (returns 'failed'); callers
10
- * must not let this block plugin activation.
11
- */
12
- export declare function ensureMcpWiring(gatewayUrl: string, configPath?: string): WiringResult;
13
- //# sourceMappingURL=self-wiring.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"self-wiring.d.ts","sourceRoot":"","sources":["../../src/utils/self-wiring.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEtE,wBAAgB,oBAAoB,IAAI,MAAM,CAG7C;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,CAwCrF"}
@@ -1,86 +0,0 @@
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 (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.resolveGatewayApiUrl = resolveGatewayApiUrl;
27
- exports.ensureMcpWiring = ensureMcpWiring;
28
- const fs = __importStar(require("fs"));
29
- const os = __importStar(require("os"));
30
- const path = __importStar(require("path"));
31
- function resolveGatewayApiUrl() {
32
- const port = process.env.MAFW_SERVER_API_PORT || process.env.MAFW_GATEWAY_PORT || '3000';
33
- return `http://127.0.0.1:${port}`;
34
- }
35
- /**
36
- * Self-wiring: ensure the global opencode config has an `mcp.mafw` section so
37
- * gateway MCP tools are mounted in every session. Opencode reads global config
38
- * from ~/.config/opencode/opencode.jsonc (or opencode.json). The plugin config
39
- * hook cannot inject mcp (notification-only), so we patch the file directly.
40
- *
41
- * Fail-open: any error leaves the config untouched (returns 'failed'); callers
42
- * must not let this block plugin activation.
43
- */
44
- function ensureMcpWiring(gatewayUrl, configPath) {
45
- try {
46
- const dir = configPath
47
- ? path.dirname(configPath)
48
- : path.join(process.env.XDG_CONFIG_HOME || path.join(os.homedir(), '.config'), 'opencode');
49
- const candidates = configPath
50
- ? [configPath]
51
- : ['opencode.jsonc', 'opencode.json'].map((f) => path.join(dir, f));
52
- const target = candidates.find((p) => fs.existsSync(p));
53
- // No global config file — skip silently rather than create one the user never had.
54
- if (!target)
55
- return 'skipped';
56
- const raw = fs.readFileSync(target, 'utf-8');
57
- // Any existing "mcp" key (ours or the user's) — leave the file alone.
58
- if (/"mcp"\s*:/.test(raw))
59
- return 'present';
60
- const backup = `${target}.bak-mafw-${Date.now()}`;
61
- fs.writeFileSync(backup, raw, 'utf-8');
62
- const block = [
63
- ' "mcp": {',
64
- ' "mafw": {',
65
- ' "type": "remote",',
66
- ` "url": "${gatewayUrl}/mcp",`,
67
- ' "enabled": true,',
68
- ' "oauth": false',
69
- ' }',
70
- ' },',
71
- ].join('\n');
72
- const open = raw.indexOf('{');
73
- if (open < 0)
74
- return 'failed';
75
- const wired = raw.slice(0, open + 1) + '\n' + block + raw.slice(open + 1);
76
- // Sanity: insertion must only add our block (length grows by block size).
77
- if (wired.length !== raw.length + block.length + 1)
78
- return 'failed';
79
- fs.writeFileSync(target, wired, 'utf-8');
80
- return 'wired';
81
- }
82
- catch {
83
- return 'failed';
84
- }
85
- }
86
- //# sourceMappingURL=self-wiring.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"self-wiring.js","sourceRoot":"","sources":["../../src/utils/self-wiring.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAMA,oDAGC;AAWD,0CAwCC;AA5DD,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAI7B,SAAgB,oBAAoB;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,MAAM,CAAC;IACzF,OAAO,oBAAoB,IAAI,EAAE,CAAC;AACpC,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,eAAe,CAAC,UAAkB,EAAE,UAAmB;IACrE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,UAAU;YACpB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YAC1B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,EAAE,UAAU,CAAC,CAAC;QAC7F,MAAM,UAAU,GAAG,UAAU;YAC3B,CAAC,CAAC,CAAC,UAAU,CAAC;YACd,CAAC,CAAC,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,mFAAmF;QACnF,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAE9B,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7C,sEAAsE;QACtE,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAE5C,MAAM,MAAM,GAAG,GAAG,MAAM,aAAa,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAClD,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAEvC,MAAM,KAAK,GAAG;YACZ,YAAY;YACZ,eAAe;YACf,yBAAyB;YACzB,iBAAiB,UAAU,QAAQ;YACnC,wBAAwB;YACxB,sBAAsB;YACtB,OAAO;YACP,MAAM;SACP,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,IAAI,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAC;QAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAE1E,0EAA0E;QAC1E,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAC;QACpE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1,106 +0,0 @@
1
- /**
2
- * State Machine Utilities — v3.5
3
- *
4
- * 核心职责:
5
- * - updateState: Skill Entry 末尾显式更新 state.json
6
- * - loadState: 读取当前状态
7
- * - loadRequest: 读取请求配置
8
- * - loadGoal: 读取 Goal Charter
9
- * - loadWaves: 读取 Plan 产出
10
- * - loadReceipts: 读取 Execute 产出
11
- * - loadReview: 读取 Review 产出
12
- *
13
- * 设计原则:
14
- * - 所有状态写入必须是原子操作(先写文件,再返回)
15
- * - 所有读取必须验证文件存在性
16
- * - 所有路径基于 projectDir 解析,避免硬编码
17
- */
18
- export interface StateFile {
19
- version: string;
20
- goalId: string;
21
- loop: number;
22
- phase: string | null;
23
- lastPhase: string | null;
24
- currentWave: number;
25
- totalWaves: number | null;
26
- sessions: Record<string, SessionInfo>;
27
- nextAction: string;
28
- artifacts: Record<string, string>;
29
- metrics?: Record<string, number>;
30
- error?: string;
31
- updatedAt: string;
32
- }
33
- export interface SessionInfo {
34
- id: string;
35
- createdAt: string;
36
- destroyedAt?: string;
37
- active: boolean;
38
- }
39
- export interface GoalRequest {
40
- version: string;
41
- goalId: string;
42
- title: string;
43
- state: string;
44
- createdAt: string;
45
- confirmedAt: string;
46
- source: string;
47
- projectDir: string;
48
- mafwDir: string;
49
- goalCharter: string;
50
- metrics: Record<string, {
51
- target: number;
52
- unit: string;
53
- }>;
54
- boundaries: string[];
55
- priority: string;
56
- maxLoops: number;
57
- parallel: boolean;
58
- degradeOnLoop: number;
59
- remoteCli?: {
60
- host: string;
61
- projectDir: string;
62
- syncOnExecute: boolean;
63
- testCommand: string;
64
- };
65
- }
66
- /**
67
- * 更新状态文件(主路径,Skill Entry 末尾调用)
68
- */
69
- export declare function updateState(goalId: string, patch: Partial<StateFile>, projectDir?: string): Promise<StateFile>;
70
- /**
71
- * 加载状态文件
72
- */
73
- export declare function loadState(goalId: string, projectDir?: string): Promise<StateFile>;
74
- /**
75
- * 加载请求配置
76
- */
77
- export declare function loadRequest(goalId: string, projectDir?: string): Promise<GoalRequest>;
78
- /**
79
- * 加载 Goal Charter
80
- */
81
- export declare function loadGoal(goalId: string, projectDir?: string): Promise<string>;
82
- /**
83
- * 加载 Waves 配置
84
- */
85
- export declare function loadWaves(goalId: string, projectDir?: string): Promise<any[]>;
86
- /**
87
- * 加载 Receipts
88
- */
89
- export declare function loadReceipts(goalId: string, projectDir?: string): Promise<any[]>;
90
- /**
91
- * 加载 Review 文件
92
- */
93
- export declare function loadReview(goalId: string, loop: number, projectDir?: string): Promise<any>;
94
- /**
95
- * 提取 Goal ID 从消息
96
- */
97
- export declare function extractGoalId(message: string): string;
98
- /**
99
- * 检查状态文件是否存在
100
- */
101
- export declare function stateExists(goalId: string, projectDir?: string): boolean;
102
- /**
103
- * 初始化新 Goal 的状态文件
104
- */
105
- export declare function initState(goalId: string, projectDir?: string): void;
106
- //# sourceMappingURL=state.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/utils/state.ts"],"names":[],"mappings":"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"}
@@ -1,166 +0,0 @@
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 (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.updateState = updateState;
27
- exports.loadState = loadState;
28
- exports.loadRequest = loadRequest;
29
- exports.loadGoal = loadGoal;
30
- exports.loadWaves = loadWaves;
31
- exports.loadReceipts = loadReceipts;
32
- exports.loadReview = loadReview;
33
- exports.extractGoalId = extractGoalId;
34
- exports.stateExists = stateExists;
35
- exports.initState = initState;
36
- const fs = __importStar(require("fs"));
37
- const path = __importStar(require("path"));
38
- /**
39
- * 更新状态文件(主路径,Skill Entry 末尾调用)
40
- */
41
- async function updateState(goalId, patch, projectDir = '.') {
42
- const statePath = path.join(projectDir, '.mafw/state', `${goalId}.json`);
43
- if (!fs.existsSync(statePath)) {
44
- throw new Error(`State file not found: ${statePath}`);
45
- }
46
- const current = safeJsonParse(statePath);
47
- const updated = {
48
- ...current,
49
- ...patch,
50
- updatedAt: new Date().toISOString()
51
- };
52
- // 原子写入:先写临时文件,再重命名
53
- const tmpPath = `${statePath}.tmp`;
54
- fs.writeFileSync(tmpPath, JSON.stringify(updated, null, 2), 'utf-8');
55
- fs.renameSync(tmpPath, statePath);
56
- return updated;
57
- }
58
- function safeJsonParse(filePath) {
59
- try {
60
- return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
61
- }
62
- catch (err) {
63
- throw new Error(`Failed to parse ${filePath}: ${err.message}`);
64
- }
65
- }
66
- /**
67
- * 加载状态文件
68
- */
69
- async function loadState(goalId, projectDir = '.') {
70
- const statePath = path.join(projectDir, '.mafw/state', `${goalId}.json`);
71
- if (!fs.existsSync(statePath)) {
72
- throw new Error(`State file not found: ${statePath}`);
73
- }
74
- return safeJsonParse(statePath);
75
- }
76
- /**
77
- * 加载请求配置
78
- */
79
- async function loadRequest(goalId, projectDir = '.') {
80
- const reqPath = path.join(projectDir, '.mafw/requests', `${goalId}.json`);
81
- if (!fs.existsSync(reqPath)) {
82
- throw new Error(`Request file not found: ${reqPath}`);
83
- }
84
- return safeJsonParse(reqPath);
85
- }
86
- /**
87
- * 加载 Goal Charter
88
- */
89
- async function loadGoal(goalId, projectDir = '.') {
90
- const goalPath = path.join(projectDir, '.mafw/goals', `${goalId}.md`);
91
- if (!fs.existsSync(goalPath)) {
92
- throw new Error(`Goal Charter not found: ${goalPath}`);
93
- }
94
- return fs.readFileSync(goalPath, 'utf-8');
95
- }
96
- /**
97
- * 加载 Waves 配置
98
- */
99
- async function loadWaves(goalId, projectDir = '.') {
100
- const wavesPath = path.join(projectDir, '.mafw/waves.json');
101
- if (!fs.existsSync(wavesPath)) {
102
- return [];
103
- }
104
- const data = safeJsonParse(wavesPath);
105
- return data.waves || [];
106
- }
107
- /**
108
- * 加载 Receipts
109
- */
110
- async function loadReceipts(goalId, projectDir = '.') {
111
- const receiptsDir = path.join(projectDir, '.mafw/receipts', goalId);
112
- if (!fs.existsSync(receiptsDir)) {
113
- return [];
114
- }
115
- const files = fs.readdirSync(receiptsDir).filter(f => f.endsWith('.json'));
116
- return files.map(f => safeJsonParse(path.join(receiptsDir, f)));
117
- }
118
- /**
119
- * 加载 Review 文件
120
- */
121
- async function loadReview(goalId, loop, projectDir = '.') {
122
- const reviewPath = path.join(projectDir, '.mafw/reviews', `${goalId}-loop${loop}.md`);
123
- if (!fs.existsSync(reviewPath)) {
124
- return null;
125
- }
126
- return fs.readFileSync(reviewPath, 'utf-8');
127
- }
128
- /**
129
- * 提取 Goal ID 从消息
130
- */
131
- function extractGoalId(message) {
132
- const parts = message.trim().split(/\s+/).filter(Boolean);
133
- // 支持格式: /skill mafw-plan 001-auth
134
- return parts[parts.length - 1] || '';
135
- }
136
- /**
137
- * 检查状态文件是否存在
138
- */
139
- function stateExists(goalId, projectDir = '.') {
140
- const statePath = path.join(projectDir, '.mafw/state', `${goalId}.json`);
141
- return fs.existsSync(statePath);
142
- }
143
- /**
144
- * 初始化新 Goal 的状态文件
145
- */
146
- function initState(goalId, projectDir = '.') {
147
- const stateDir = path.join(projectDir, '.mafw/state');
148
- if (!fs.existsSync(stateDir)) {
149
- fs.mkdirSync(stateDir, { recursive: true });
150
- }
151
- const state = {
152
- version: '2',
153
- goalId,
154
- loop: 1,
155
- phase: 'PLANNING',
156
- lastPhase: null,
157
- currentWave: 0,
158
- totalWaves: null,
159
- sessions: {},
160
- nextAction: 'CREATE_PLAN_SESSION',
161
- artifacts: {},
162
- updatedAt: new Date().toISOString()
163
- };
164
- fs.writeFileSync(path.join(stateDir, `${goalId}.json`), JSON.stringify(state, null, 2), 'utf-8');
165
- }
166
- //# sourceMappingURL=state.js.map