@jack200714/mafw 4.5.1 → 4.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (320) hide show
  1. package/README.md +5 -2
  2. package/bin/mafw.js +16 -14
  3. package/package.json +1 -7
  4. package/.opencode/mafw/.backup-v61/parametric/base-skill-manifest.yaml +0 -2
  5. package/.opencode/mafw/STATUS.md +0 -6
  6. package/.opencode/mafw/ledger.md +0 -20
  7. package/.opencode/mafw/memory/.harmonic_index.json +0 -28
  8. package/.opencode/mafw/memory/.review_queue.json +0 -1
  9. package/.opencode/mafw/memory/tier3/parametric.json +0 -13
  10. package/.opencode/mafw/memory/tier3/test-goal.json +0 -19
  11. package/.opencode/mafw/memory-index.json +0 -6
  12. package/.opencode/mafw/parametric/base-skill-manifest.yaml +0 -2
  13. package/.opencode/mafw/waves.json +0 -4
  14. package/.opencode/opencode.json +0 -3
  15. package/.opencode/plugins/mafw-plugin.ts +0 -8
  16. package/.opencode/skills/banner-design/SKILL.md +0 -196
  17. package/.opencode/skills/banner-design/references/banner-sizes-and-styles.md +0 -118
  18. package/.opencode/skills/brand/SKILL.md +0 -97
  19. package/.opencode/skills/brand/references/approval-checklist.md +0 -169
  20. package/.opencode/skills/brand/references/asset-organization.md +0 -157
  21. package/.opencode/skills/brand/references/brand-guideline-template.md +0 -140
  22. package/.opencode/skills/brand/references/color-palette-management.md +0 -186
  23. package/.opencode/skills/brand/references/consistency-checklist.md +0 -94
  24. package/.opencode/skills/brand/references/logo-usage-rules.md +0 -185
  25. package/.opencode/skills/brand/references/messaging-framework.md +0 -85
  26. package/.opencode/skills/brand/references/typography-specifications.md +0 -214
  27. package/.opencode/skills/brand/references/update.md +0 -118
  28. package/.opencode/skills/brand/references/visual-identity.md +0 -96
  29. package/.opencode/skills/brand/references/voice-framework.md +0 -88
  30. package/.opencode/skills/brand/scripts/extract-colors.cjs +0 -341
  31. package/.opencode/skills/brand/scripts/inject-brand-context.cjs +0 -349
  32. package/.opencode/skills/brand/scripts/sync-brand-to-tokens.cjs +0 -248
  33. package/.opencode/skills/brand/scripts/tests/test_sync_brand_to_tokens.py +0 -52
  34. package/.opencode/skills/brand/scripts/validate-asset.cjs +0 -387
  35. package/.opencode/skills/brand/templates/brand-guidelines-starter.md +0 -275
  36. package/.opencode/skills/design/SKILL.md +0 -313
  37. package/.opencode/skills/design/data/cip/deliverables.csv +0 -51
  38. package/.opencode/skills/design/data/cip/industries.csv +0 -21
  39. package/.opencode/skills/design/data/cip/mockup-contexts.csv +0 -21
  40. package/.opencode/skills/design/data/cip/styles.csv +0 -21
  41. package/.opencode/skills/design/data/icon/styles.csv +0 -16
  42. package/.opencode/skills/design/data/logo/colors.csv +0 -56
  43. package/.opencode/skills/design/data/logo/industries.csv +0 -56
  44. package/.opencode/skills/design/data/logo/styles.csv +0 -56
  45. package/.opencode/skills/design/references/banner-sizes-and-styles.md +0 -118
  46. package/.opencode/skills/design/references/cip-deliverable-guide.md +0 -95
  47. package/.opencode/skills/design/references/cip-design.md +0 -121
  48. package/.opencode/skills/design/references/cip-prompt-engineering.md +0 -84
  49. package/.opencode/skills/design/references/cip-style-guide.md +0 -68
  50. package/.opencode/skills/design/references/design-routing.md +0 -207
  51. package/.opencode/skills/design/references/icon-design.md +0 -122
  52. package/.opencode/skills/design/references/logo-color-psychology.md +0 -101
  53. package/.opencode/skills/design/references/logo-design.md +0 -92
  54. package/.opencode/skills/design/references/logo-prompt-engineering.md +0 -158
  55. package/.opencode/skills/design/references/logo-style-guide.md +0 -109
  56. package/.opencode/skills/design/references/slides-copywriting-formulas.md +0 -84
  57. package/.opencode/skills/design/references/slides-create.md +0 -4
  58. package/.opencode/skills/design/references/slides-html-template.md +0 -295
  59. package/.opencode/skills/design/references/slides-layout-patterns.md +0 -137
  60. package/.opencode/skills/design/references/slides-strategies.md +0 -94
  61. package/.opencode/skills/design/references/slides.md +0 -42
  62. package/.opencode/skills/design/references/social-photos-design.md +0 -329
  63. package/.opencode/skills/design/scripts/cip/core.py +0 -215
  64. package/.opencode/skills/design/scripts/cip/generate.py +0 -484
  65. package/.opencode/skills/design/scripts/cip/render-html.py +0 -424
  66. package/.opencode/skills/design/scripts/cip/search.py +0 -127
  67. package/.opencode/skills/design/scripts/icon/generate.py +0 -487
  68. package/.opencode/skills/design/scripts/logo/core.py +0 -175
  69. package/.opencode/skills/design/scripts/logo/generate.py +0 -362
  70. package/.opencode/skills/design/scripts/logo/search.py +0 -114
  71. package/.opencode/skills/design-system/SKILL.md +0 -244
  72. package/.opencode/skills/design-system/data/slide-backgrounds.csv +0 -11
  73. package/.opencode/skills/design-system/data/slide-charts.csv +0 -26
  74. package/.opencode/skills/design-system/data/slide-color-logic.csv +0 -14
  75. package/.opencode/skills/design-system/data/slide-copy.csv +0 -26
  76. package/.opencode/skills/design-system/data/slide-layout-logic.csv +0 -16
  77. package/.opencode/skills/design-system/data/slide-layouts.csv +0 -26
  78. package/.opencode/skills/design-system/data/slide-strategies.csv +0 -16
  79. package/.opencode/skills/design-system/data/slide-typography.csv +0 -15
  80. package/.opencode/skills/design-system/references/component-specs.md +0 -236
  81. package/.opencode/skills/design-system/references/component-tokens.md +0 -214
  82. package/.opencode/skills/design-system/references/primitive-tokens.md +0 -203
  83. package/.opencode/skills/design-system/references/semantic-tokens.md +0 -215
  84. package/.opencode/skills/design-system/references/states-and-variants.md +0 -241
  85. package/.opencode/skills/design-system/references/tailwind-integration.md +0 -251
  86. package/.opencode/skills/design-system/references/token-architecture.md +0 -224
  87. package/.opencode/skills/design-system/scripts/embed-tokens.cjs +0 -99
  88. package/.opencode/skills/design-system/scripts/fetch-background.py +0 -317
  89. package/.opencode/skills/design-system/scripts/generate-slide.py +0 -770
  90. package/.opencode/skills/design-system/scripts/generate-tokens.cjs +0 -205
  91. package/.opencode/skills/design-system/scripts/html-token-validator.py +0 -327
  92. package/.opencode/skills/design-system/scripts/search-slides.py +0 -218
  93. package/.opencode/skills/design-system/scripts/slide-token-validator.py +0 -35
  94. package/.opencode/skills/design-system/scripts/slide_search_core.py +0 -453
  95. package/.opencode/skills/design-system/scripts/tests/test_validate_tokens.py +0 -48
  96. package/.opencode/skills/design-system/scripts/validate-tokens.cjs +0 -246
  97. package/.opencode/skills/design-system/templates/design-tokens-starter.json +0 -143
  98. package/.opencode/skills/frontend-design/LICENSE.txt +0 -21
  99. package/.opencode/skills/frontend-design/SKILL.md +0 -115
  100. package/.opencode/skills/mafw-automation-interview/SKILL.md +0 -43
  101. package/.opencode/skills/mafw-cli-scanner/SKILL.md +0 -37
  102. package/.opencode/skills/mafw-compression-verifier/SKILL.md +0 -52
  103. package/.opencode/skills/mafw-desktop-inspector/SKILL.md +0 -170
  104. package/.opencode/skills/mafw-execute/SKILL.md +0 -62
  105. package/.opencode/skills/mafw-gateway-restart/SKILL.md +0 -87
  106. package/.opencode/skills/mafw-github-scanner/SKILL.md +0 -38
  107. package/.opencode/skills/mafw-goal/SKILL.md +0 -76
  108. package/.opencode/skills/mafw-interview/SKILL.md +0 -68
  109. package/.opencode/skills/mafw-memory-extractor/SKILL.md +0 -65
  110. package/.opencode/skills/mafw-plan/SKILL.md +0 -58
  111. package/.opencode/skills/mafw-review/SKILL.md +0 -85
  112. package/.opencode/skills/runtime-plugin-authoring/SKILL.md +0 -791
  113. package/.opencode/skills/slides/SKILL.md +0 -40
  114. package/.opencode/skills/slides/references/copywriting-formulas.md +0 -84
  115. package/.opencode/skills/slides/references/create.md +0 -4
  116. package/.opencode/skills/slides/references/html-template.md +0 -295
  117. package/.opencode/skills/slides/references/layout-patterns.md +0 -137
  118. package/.opencode/skills/slides/references/slide-strategies.md +0 -94
  119. package/.opencode/skills/ui-styling/LICENSE.txt +0 -202
  120. package/.opencode/skills/ui-styling/SKILL.md +0 -324
  121. package/.opencode/skills/ui-styling/references/canvas-design-system.md +0 -320
  122. package/.opencode/skills/ui-styling/references/shadcn-accessibility.md +0 -471
  123. package/.opencode/skills/ui-styling/references/shadcn-components.md +0 -424
  124. package/.opencode/skills/ui-styling/references/shadcn-theming.md +0 -373
  125. package/.opencode/skills/ui-styling/references/tailwind-customization.md +0 -483
  126. package/.opencode/skills/ui-styling/references/tailwind-responsive.md +0 -382
  127. package/.opencode/skills/ui-styling/references/tailwind-utilities.md +0 -455
  128. package/.opencode/skills/ui-styling/scripts/requirements.txt +0 -17
  129. package/.opencode/skills/ui-styling/scripts/shadcn_add.py +0 -308
  130. package/.opencode/skills/ui-styling/scripts/tailwind_config_gen.py +0 -473
  131. package/.opencode/skills/ui-styling/scripts/tests/coverage-ui.json +0 -1
  132. package/.opencode/skills/ui-styling/scripts/tests/requirements.txt +0 -3
  133. package/.opencode/skills/ui-styling/scripts/tests/test_shadcn_add.py +0 -266
  134. package/.opencode/skills/ui-styling/scripts/tests/test_tailwind_config_gen.py +0 -394
  135. package/.opencode/skills/ui-ux-pro-max/SKILL.md +0 -388
  136. package/.opencode/skills/ui-ux-pro-max/data/app-interface.csv +0 -31
  137. package/.opencode/skills/ui-ux-pro-max/data/charts.csv +0 -26
  138. package/.opencode/skills/ui-ux-pro-max/data/colors.csv +0 -193
  139. package/.opencode/skills/ui-ux-pro-max/data/google-fonts.csv +0 -1924
  140. package/.opencode/skills/ui-ux-pro-max/data/icons.csv +0 -106
  141. package/.opencode/skills/ui-ux-pro-max/data/landing.csv +0 -35
  142. package/.opencode/skills/ui-ux-pro-max/data/motion.csv +0 -17
  143. package/.opencode/skills/ui-ux-pro-max/data/products.csv +0 -193
  144. package/.opencode/skills/ui-ux-pro-max/data/react-performance.csv +0 -45
  145. package/.opencode/skills/ui-ux-pro-max/data/stacks/angular.csv +0 -51
  146. package/.opencode/skills/ui-ux-pro-max/data/stacks/astro.csv +0 -54
  147. package/.opencode/skills/ui-ux-pro-max/data/stacks/avalonia.csv +0 -57
  148. package/.opencode/skills/ui-ux-pro-max/data/stacks/flutter.csv +0 -53
  149. package/.opencode/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +0 -56
  150. package/.opencode/skills/ui-ux-pro-max/data/stacks/javafx.csv +0 -76
  151. package/.opencode/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +0 -53
  152. package/.opencode/skills/ui-ux-pro-max/data/stacks/laravel.csv +0 -51
  153. package/.opencode/skills/ui-ux-pro-max/data/stacks/nextjs.csv +0 -53
  154. package/.opencode/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +0 -71
  155. package/.opencode/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +0 -59
  156. package/.opencode/skills/ui-ux-pro-max/data/stacks/react-native.csv +0 -52
  157. package/.opencode/skills/ui-ux-pro-max/data/stacks/react.csv +0 -54
  158. package/.opencode/skills/ui-ux-pro-max/data/stacks/shadcn.csv +0 -61
  159. package/.opencode/skills/ui-ux-pro-max/data/stacks/svelte.csv +0 -54
  160. package/.opencode/skills/ui-ux-pro-max/data/stacks/swiftui.csv +0 -51
  161. package/.opencode/skills/ui-ux-pro-max/data/stacks/threejs.csv +0 -54
  162. package/.opencode/skills/ui-ux-pro-max/data/stacks/uno.csv +0 -60
  163. package/.opencode/skills/ui-ux-pro-max/data/stacks/uwp.csv +0 -56
  164. package/.opencode/skills/ui-ux-pro-max/data/stacks/vue.csv +0 -50
  165. package/.opencode/skills/ui-ux-pro-max/data/stacks/winui.csv +0 -60
  166. package/.opencode/skills/ui-ux-pro-max/data/stacks/wpf.csv +0 -57
  167. package/.opencode/skills/ui-ux-pro-max/data/styles.csv +0 -85
  168. package/.opencode/skills/ui-ux-pro-max/data/typography.csv +0 -75
  169. package/.opencode/skills/ui-ux-pro-max/data/ui-reasoning.csv +0 -162
  170. package/.opencode/skills/ui-ux-pro-max/data/ux-guidelines.csv +0 -100
  171. package/.opencode/skills/ui-ux-pro-max/scripts/core.py +0 -464
  172. package/.opencode/skills/ui-ux-pro-max/scripts/design_system.py +0 -1479
  173. package/.opencode/skills/ui-ux-pro-max/scripts/search.py +0 -162
  174. package/.opencode/skills/ui-ux-pro-max/scripts/tests/test_core.py +0 -134
  175. package/.opencode/skills/ui-ux-pro-max/scripts/tests/test_design_system_mode.py +0 -159
  176. package/.opencode/skills/ui-ux-pro-max/scripts/validate_data.py +0 -114
  177. package/dist/hooks/bash-python-guide.d.ts +0 -4
  178. package/dist/hooks/bash-python-guide.d.ts.map +0 -1
  179. package/dist/hooks/bash-python-guide.js +0 -67
  180. package/dist/hooks/bash-python-guide.js.map +0 -1
  181. package/dist/hooks/handoff.d.ts +0 -9
  182. package/dist/hooks/handoff.d.ts.map +0 -1
  183. package/dist/hooks/handoff.js +0 -8
  184. package/dist/hooks/handoff.js.map +0 -1
  185. package/dist/hooks/hook-manager.d.ts +0 -32
  186. package/dist/hooks/hook-manager.d.ts.map +0 -1
  187. package/dist/hooks/hook-manager.js +0 -91
  188. package/dist/hooks/hook-manager.js.map +0 -1
  189. package/dist/hooks/llm-after.d.ts +0 -8
  190. package/dist/hooks/llm-after.d.ts.map +0 -1
  191. package/dist/hooks/llm-after.js +0 -8
  192. package/dist/hooks/llm-after.js.map +0 -1
  193. package/dist/hooks/media-ingest.d.ts +0 -43
  194. package/dist/hooks/media-ingest.d.ts.map +0 -1
  195. package/dist/hooks/media-ingest.js +0 -269
  196. package/dist/hooks/media-ingest.js.map +0 -1
  197. package/dist/hooks/memory-guide.d.ts +0 -3
  198. package/dist/hooks/memory-guide.d.ts.map +0 -1
  199. package/dist/hooks/memory-guide.js +0 -47
  200. package/dist/hooks/memory-guide.js.map +0 -1
  201. package/dist/hooks/observation-capture.d.ts +0 -17
  202. package/dist/hooks/observation-capture.d.ts.map +0 -1
  203. package/dist/hooks/observation-capture.js +0 -20
  204. package/dist/hooks/observation-capture.js.map +0 -1
  205. package/dist/hooks/session-compacting.d.ts +0 -6
  206. package/dist/hooks/session-compacting.d.ts.map +0 -1
  207. package/dist/hooks/session-compacting.js +0 -6
  208. package/dist/hooks/session-compacting.js.map +0 -1
  209. package/dist/hooks/session-ending.d.ts +0 -20
  210. package/dist/hooks/session-ending.d.ts.map +0 -1
  211. package/dist/hooks/session-ending.js +0 -113
  212. package/dist/hooks/session-ending.js.map +0 -1
  213. package/dist/hooks/session-recall.d.ts +0 -2
  214. package/dist/hooks/session-recall.d.ts.map +0 -1
  215. package/dist/hooks/session-recall.js +0 -103
  216. package/dist/hooks/session-recall.js.map +0 -1
  217. package/dist/hooks/session-start.d.ts +0 -9
  218. package/dist/hooks/session-start.d.ts.map +0 -1
  219. package/dist/hooks/session-start.js +0 -42
  220. package/dist/hooks/session-start.js.map +0 -1
  221. package/dist/hooks/tool-before.d.ts +0 -10
  222. package/dist/hooks/tool-before.d.ts.map +0 -1
  223. package/dist/hooks/tool-before.js +0 -6
  224. package/dist/hooks/tool-before.js.map +0 -1
  225. package/dist/hooks/tool-executed.d.ts +0 -19
  226. package/dist/hooks/tool-executed.d.ts.map +0 -1
  227. package/dist/hooks/tool-executed.js +0 -12
  228. package/dist/hooks/tool-executed.js.map +0 -1
  229. package/dist/hooks/user-profile.d.ts +0 -2
  230. package/dist/hooks/user-profile.d.ts.map +0 -1
  231. package/dist/hooks/user-profile.js +0 -30
  232. package/dist/hooks/user-profile.js.map +0 -1
  233. package/dist/hooks/user-prompt.d.ts +0 -9
  234. package/dist/hooks/user-prompt.d.ts.map +0 -1
  235. package/dist/hooks/user-prompt.js +0 -8
  236. package/dist/hooks/user-prompt.js.map +0 -1
  237. package/dist/hooks/voice-guide.d.ts +0 -8
  238. package/dist/hooks/voice-guide.d.ts.map +0 -1
  239. package/dist/hooks/voice-guide.js +0 -101
  240. package/dist/hooks/voice-guide.js.map +0 -1
  241. package/dist/plugin.d.ts +0 -55
  242. package/dist/plugin.d.ts.map +0 -1
  243. package/dist/plugin.js +0 -342
  244. package/dist/plugin.js.map +0 -1
  245. package/dist/tools/add-memory.d.ts +0 -17
  246. package/dist/tools/add-memory.d.ts.map +0 -1
  247. package/dist/tools/add-memory.js +0 -60
  248. package/dist/tools/add-memory.js.map +0 -1
  249. package/dist/tools/media-ask.d.ts +0 -14
  250. package/dist/tools/media-ask.d.ts.map +0 -1
  251. package/dist/tools/media-ask.js +0 -224
  252. package/dist/tools/media-ask.js.map +0 -1
  253. package/dist/tools/media-speak.d.ts +0 -16
  254. package/dist/tools/media-speak.d.ts.map +0 -1
  255. package/dist/tools/media-speak.js +0 -78
  256. package/dist/tools/media-speak.js.map +0 -1
  257. package/dist/tools/media-upload.d.ts +0 -14
  258. package/dist/tools/media-upload.d.ts.map +0 -1
  259. package/dist/tools/media-upload.js +0 -155
  260. package/dist/tools/media-upload.js.map +0 -1
  261. package/dist/tools/python-exec.d.ts +0 -13
  262. package/dist/tools/python-exec.d.ts.map +0 -1
  263. package/dist/tools/python-exec.js +0 -99
  264. package/dist/tools/python-exec.js.map +0 -1
  265. package/dist/tools/python-restart.d.ts +0 -11
  266. package/dist/tools/python-restart.d.ts.map +0 -1
  267. package/dist/tools/python-restart.js +0 -33
  268. package/dist/tools/python-restart.js.map +0 -1
  269. package/dist/utils/circuit-breaker.d.ts +0 -23
  270. package/dist/utils/circuit-breaker.d.ts.map +0 -1
  271. package/dist/utils/circuit-breaker.js +0 -75
  272. package/dist/utils/circuit-breaker.js.map +0 -1
  273. package/dist/utils/config-loader.d.ts +0 -20
  274. package/dist/utils/config-loader.d.ts.map +0 -1
  275. package/dist/utils/config-loader.js +0 -194
  276. package/dist/utils/config-loader.js.map +0 -1
  277. package/dist/utils/fallback.d.ts +0 -7
  278. package/dist/utils/fallback.d.ts.map +0 -1
  279. package/dist/utils/fallback.js +0 -20
  280. package/dist/utils/fallback.js.map +0 -1
  281. package/dist/utils/git.d.ts +0 -24
  282. package/dist/utils/git.d.ts.map +0 -1
  283. package/dist/utils/git.js +0 -71
  284. package/dist/utils/git.js.map +0 -1
  285. package/dist/utils/github.d.ts +0 -37
  286. package/dist/utils/github.d.ts.map +0 -1
  287. package/dist/utils/github.js +0 -53
  288. package/dist/utils/github.js.map +0 -1
  289. package/dist/utils/global-path.d.ts +0 -2
  290. package/dist/utils/global-path.d.ts.map +0 -1
  291. package/dist/utils/global-path.js +0 -32
  292. package/dist/utils/global-path.js.map +0 -1
  293. package/dist/utils/logger.d.ts +0 -6
  294. package/dist/utils/logger.d.ts.map +0 -1
  295. package/dist/utils/logger.js +0 -69
  296. package/dist/utils/logger.js.map +0 -1
  297. package/dist/utils/obs-capture.d.ts +0 -7
  298. package/dist/utils/obs-capture.d.ts.map +0 -1
  299. package/dist/utils/obs-capture.js +0 -49
  300. package/dist/utils/obs-capture.js.map +0 -1
  301. package/dist/utils/retry.d.ts +0 -11
  302. package/dist/utils/retry.d.ts.map +0 -1
  303. package/dist/utils/retry.js +0 -45
  304. package/dist/utils/retry.js.map +0 -1
  305. package/dist/utils/self-wiring.d.ts +0 -13
  306. package/dist/utils/self-wiring.d.ts.map +0 -1
  307. package/dist/utils/self-wiring.js +0 -86
  308. package/dist/utils/self-wiring.js.map +0 -1
  309. package/dist/utils/state.d.ts +0 -106
  310. package/dist/utils/state.d.ts.map +0 -1
  311. package/dist/utils/state.js +0 -166
  312. package/dist/utils/state.js.map +0 -1
  313. package/dist/utils/status.d.ts +0 -47
  314. package/dist/utils/status.d.ts.map +0 -1
  315. package/dist/utils/status.js +0 -147
  316. package/dist/utils/status.js.map +0 -1
  317. package/dist/utils/ttl-map.d.ts +0 -17
  318. package/dist/utils/ttl-map.d.ts.map +0 -1
  319. package/dist/utils/ttl-map.js +0 -67
  320. 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