@wowok/agent-mcp 2.7.2 → 2.7.4

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 (383) hide show
  1. package/dist/config/runtime.js +1 -1
  2. package/dist/customer/account-events.d.ts +32 -0
  3. package/dist/customer/account-events.js +1 -0
  4. package/dist/customer/customer-advice.d.ts +1 -0
  5. package/dist/customer/customer-advice.js +1 -1
  6. package/dist/customer/info-puzzle.js +1 -1
  7. package/dist/customer/order-strategy.d.ts +1 -1
  8. package/dist/customer/reminder-system.d.ts +2 -0
  9. package/dist/customer/reminder-system.js +1 -1
  10. package/dist/customer/risk-assessment.d.ts +1 -0
  11. package/dist/customer/risk-assessment.js +1 -1
  12. package/dist/customer/types.d.ts +2 -0
  13. package/dist/evaluation/builtins/arbitration-score.d.ts +41 -0
  14. package/dist/evaluation/builtins/arbitration-score.js +1 -0
  15. package/dist/evaluation/builtins/index.d.ts +1 -0
  16. package/dist/evaluation/builtins/index.js +1 -1
  17. package/dist/evaluation/category-match-rules.d.ts +30 -0
  18. package/dist/evaluation/category-match-rules.js +1 -0
  19. package/dist/evaluation/engine.js +1 -1
  20. package/dist/evaluation/extract.js +1 -1
  21. package/dist/evaluation/index.d.ts +1 -0
  22. package/dist/evaluation/index.js +1 -1
  23. package/dist/evaluation/location-match.d.ts +42 -0
  24. package/dist/evaluation/location-match.js +1 -0
  25. package/dist/evaluation/path-reasoning.d.ts +35 -0
  26. package/dist/evaluation/path-reasoning.js +1 -0
  27. package/dist/evaluation/region.d.ts +6 -0
  28. package/dist/evaluation/region.js +1 -1
  29. package/dist/evaluation/types.d.ts +17 -0
  30. package/dist/experience/realtime-feedback.js +1 -1
  31. package/dist/experience/user-profile.d.ts +1 -1
  32. package/dist/extensions/index.d.ts +6 -0
  33. package/dist/extensions/index.js +1 -1
  34. package/dist/extensions/industry-layers.d.ts +75 -0
  35. package/dist/extensions/industry-layers.js +1 -0
  36. package/dist/extensions/industry-pack.d.ts +105 -0
  37. package/dist/extensions/industry-pack.js +1 -0
  38. package/dist/extensions/metric-registry.js +1 -1
  39. package/dist/extensions/mode-evaluator.d.ts +1 -1
  40. package/dist/extensions/registry.d.ts +1 -0
  41. package/dist/extensions/registry.js +1 -1
  42. package/dist/graph/base.d.ts +8 -0
  43. package/dist/graph/base.js +1 -0
  44. package/dist/harness/index.d.ts +1 -0
  45. package/dist/harness/index.js +1 -1
  46. package/dist/harness/plan.d.ts +2 -0
  47. package/dist/harness/plan.js +1 -1
  48. package/dist/harness/recover.d.ts +1 -1
  49. package/dist/harness/types.d.ts +2 -3
  50. package/dist/index.js +1 -1
  51. package/dist/knowledge/allocation-confirm.js +1 -1
  52. package/dist/knowledge/anti-cheat.d.ts +37 -0
  53. package/dist/knowledge/anti-cheat.js +1 -0
  54. package/dist/knowledge/arb-confirm.d.ts +28 -0
  55. package/dist/knowledge/arb-confirm.js +1 -0
  56. package/dist/knowledge/arb-translation.d.ts +48 -0
  57. package/dist/knowledge/arb-translation.js +1 -0
  58. package/dist/knowledge/arbitration-context.js +1 -1
  59. package/dist/knowledge/arbitration-ledger.js +1 -1
  60. package/dist/knowledge/bridge-confirm.d.ts +26 -0
  61. package/dist/knowledge/bridge-confirm.js +1 -0
  62. package/dist/knowledge/bridge-translation.d.ts +37 -0
  63. package/dist/knowledge/bridge-translation.js +1 -0
  64. package/dist/knowledge/contact-confirm.d.ts +27 -0
  65. package/dist/knowledge/contact-confirm.js +1 -0
  66. package/dist/knowledge/contact-translation.d.ts +39 -0
  67. package/dist/knowledge/contact-translation.js +1 -0
  68. package/dist/knowledge/demand-confirm.js +1 -1
  69. package/dist/knowledge/demand-context.d.ts +17 -0
  70. package/dist/knowledge/demand-context.js +1 -0
  71. package/dist/knowledge/demand-ledger.d.ts +26 -0
  72. package/dist/knowledge/demand-ledger.js +1 -0
  73. package/dist/knowledge/demand-puzzle.d.ts +29 -0
  74. package/dist/knowledge/demand-puzzle.js +1 -0
  75. package/dist/knowledge/demand-risk.js +1 -1
  76. package/dist/knowledge/demand-templates.d.ts +12 -0
  77. package/dist/knowledge/demand-templates.js +1 -0
  78. package/dist/knowledge/demand-translation.js +1 -1
  79. package/dist/knowledge/deployment-scanner.js +1 -1
  80. package/dist/knowledge/evidence-review.d.ts +12 -0
  81. package/dist/knowledge/evidence-review.js +1 -0
  82. package/dist/knowledge/examples-scanner-cli.js +1 -1
  83. package/dist/knowledge/examples-scanner.js +1 -1
  84. package/dist/knowledge/flywheel-loop.d.ts +0 -1
  85. package/dist/knowledge/flywheel-loop.js +1 -1
  86. package/dist/knowledge/guard-design-patterns.js +1 -1
  87. package/dist/knowledge/guard-migration.d.ts +1 -1
  88. package/dist/knowledge/index.d.ts +71 -3
  89. package/dist/knowledge/index.js +1 -1
  90. package/dist/knowledge/industry-registry.js +1 -1
  91. package/dist/knowledge/machine-render.js +1 -1
  92. package/dist/knowledge/market-metrics.d.ts +12 -0
  93. package/dist/knowledge/market-metrics.js +1 -0
  94. package/dist/knowledge/market-operations.d.ts +46 -0
  95. package/dist/knowledge/market-operations.js +1 -0
  96. package/dist/knowledge/mcp-schema-audit-cli.js +1 -1
  97. package/dist/knowledge/mcp-schema-audit.d.ts +22 -22
  98. package/dist/knowledge/mcp-schema-audit.js +1 -1
  99. package/dist/knowledge/onchain-constants.d.ts +2 -2
  100. package/dist/knowledge/onchain-constants.js +1 -1
  101. package/dist/knowledge/payment-confirm.d.ts +26 -0
  102. package/dist/knowledge/payment-confirm.js +1 -0
  103. package/dist/knowledge/payment-risk.js +1 -1
  104. package/dist/knowledge/payment-translation.d.ts +37 -0
  105. package/dist/knowledge/payment-translation.js +1 -0
  106. package/dist/knowledge/permission-context.d.ts +11 -0
  107. package/dist/knowledge/permission-context.js +1 -1
  108. package/dist/knowledge/permission-ledger.d.ts +11 -0
  109. package/dist/knowledge/permission-ledger.js +1 -1
  110. package/dist/knowledge/personal-confirm.d.ts +29 -0
  111. package/dist/knowledge/personal-confirm.js +1 -0
  112. package/dist/knowledge/personal-risk.js +1 -1
  113. package/dist/knowledge/personal-translation.d.ts +37 -0
  114. package/dist/knowledge/personal-translation.js +1 -0
  115. package/dist/knowledge/process-model.d.ts +1 -11
  116. package/dist/knowledge/process-model.js +1 -1
  117. package/dist/knowledge/progress-ledger.js +1 -1
  118. package/dist/knowledge/progress-risk.js +1 -1
  119. package/dist/knowledge/progress-templates.js +1 -1
  120. package/dist/knowledge/progress-translation.js +1 -1
  121. package/dist/knowledge/proof-context.d.ts +17 -0
  122. package/dist/knowledge/proof-context.js +1 -0
  123. package/dist/knowledge/proof-ledger.d.ts +34 -0
  124. package/dist/knowledge/proof-ledger.js +1 -0
  125. package/dist/knowledge/proof-puzzle.d.ts +35 -0
  126. package/dist/knowledge/proof-puzzle.js +1 -0
  127. package/dist/knowledge/proof-templates.d.ts +22 -0
  128. package/dist/knowledge/proof-templates.js +1 -0
  129. package/dist/knowledge/registrar-confirm.d.ts +26 -0
  130. package/dist/knowledge/registrar-confirm.js +1 -0
  131. package/dist/knowledge/registrar-risk.js +1 -1
  132. package/dist/knowledge/registrar-translation.d.ts +37 -0
  133. package/dist/knowledge/registrar-translation.js +1 -0
  134. package/dist/knowledge/repository-context.d.ts +12 -0
  135. package/dist/knowledge/repository-context.js +1 -0
  136. package/dist/knowledge/repository-ledger.d.ts +25 -0
  137. package/dist/knowledge/repository-ledger.js +1 -0
  138. package/dist/knowledge/repository-puzzle.d.ts +30 -0
  139. package/dist/knowledge/repository-puzzle.js +1 -0
  140. package/dist/knowledge/repository-templates.d.ts +14 -0
  141. package/dist/knowledge/repository-templates.js +1 -0
  142. package/dist/knowledge/resource-confirm.d.ts +25 -0
  143. package/dist/knowledge/resource-confirm.js +1 -0
  144. package/dist/knowledge/resource-translation.d.ts +37 -0
  145. package/dist/knowledge/resource-translation.js +1 -0
  146. package/dist/knowledge/reward-context.d.ts +2 -2
  147. package/dist/knowledge/reward-ledger.js +1 -1
  148. package/dist/knowledge/reward-translation.js +1 -1
  149. package/dist/knowledge/safety-rules.d.ts +1 -0
  150. package/dist/knowledge/safety-rules.js +1 -1
  151. package/dist/knowledge/service-risk.d.ts +1 -1
  152. package/dist/knowledge/service-risk.js +1 -1
  153. package/dist/knowledge/template-registry.js +1 -1
  154. package/dist/knowledge/tools-reference.js +1 -1
  155. package/dist/knowledge/treasury-context.d.ts +1 -1
  156. package/dist/knowledge/treasury-context.js +1 -1
  157. package/dist/knowledge/treasury-ledger.js +1 -1
  158. package/dist/knowledge/treasury-risk.js +1 -1
  159. package/dist/knowledge/universal-template.d.ts +22 -0
  160. package/dist/knowledge/universal-template.js +1 -0
  161. package/dist/knowledge/util-confirm.d.ts +24 -0
  162. package/dist/knowledge/util-confirm.js +1 -0
  163. package/dist/knowledge/util-risk.js +1 -1
  164. package/dist/knowledge/util-translation.d.ts +39 -0
  165. package/dist/knowledge/util-translation.js +1 -0
  166. package/dist/knowledge/workflow-guidance.d.ts +180 -0
  167. package/dist/knowledge/workflow-guidance.js +1 -0
  168. package/dist/participation/employee-kpi.d.ts +25 -0
  169. package/dist/participation/employee-kpi.js +1 -0
  170. package/dist/participation/employee-store.d.ts +16 -0
  171. package/dist/participation/employee-store.js +1 -0
  172. package/dist/participation/index.d.ts +2 -0
  173. package/dist/participation/index.js +1 -0
  174. package/dist/persona/defaults.js +1 -1
  175. package/dist/persona/index.d.ts +9 -2
  176. package/dist/persona/index.js +1 -1
  177. package/dist/persona/local-region.d.ts +20 -0
  178. package/dist/persona/local-region.js +1 -0
  179. package/dist/persona/model.js +1 -1
  180. package/dist/persona/overrides.d.ts +10 -0
  181. package/dist/persona/overrides.js +1 -0
  182. package/dist/persona/pack-personae.d.ts +11 -0
  183. package/dist/persona/pack-personae.js +1 -0
  184. package/dist/persona/strategy-intent.d.ts +20 -0
  185. package/dist/persona/strategy-intent.js +1 -0
  186. package/dist/persona/types.d.ts +3 -1
  187. package/dist/project/business-puzzle.d.ts +1 -1
  188. package/dist/project/business-puzzle.js +1 -1
  189. package/dist/project/deployment-doc.js +1 -1
  190. package/dist/project/edit-planner.js +1 -1
  191. package/dist/project/evaluation.d.ts +37 -1
  192. package/dist/project/evaluation.js +1 -1
  193. package/dist/project/graph-builder.d.ts +2 -2
  194. package/dist/project/graph-builder.js +1 -1
  195. package/dist/project/graph.d.ts +3 -6
  196. package/dist/project/handlers.d.ts +33 -2
  197. package/dist/project/handlers.js +1 -1
  198. package/dist/project/index.d.ts +1 -0
  199. package/dist/project/index.js +1 -1
  200. package/dist/project/merchant-guide.d.ts +19 -0
  201. package/dist/project/merchant-guide.js +1 -1
  202. package/dist/project/mode-actions.js +1 -1
  203. package/dist/project/rollback-policy.js +1 -1
  204. package/dist/project/semantic-assembler.d.ts +2 -2
  205. package/dist/project/semantic-assembler.js +1 -1
  206. package/dist/project/semantic-graph.d.ts +3 -5
  207. package/dist/project/workflow-design-assessment.d.ts +24 -0
  208. package/dist/project/workflow-design-assessment.js +1 -0
  209. package/dist/safety/confirm-gate.d.ts +1 -1
  210. package/dist/safety/confirm-gate.js +1 -1
  211. package/dist/schema/call/allocation.d.ts +186 -1385
  212. package/dist/schema/call/arbitration.d.ts +272 -1871
  213. package/dist/schema/call/base.d.ts +1831 -9076
  214. package/dist/schema/call/base.js +1 -1
  215. package/dist/schema/call/bridge.d.ts +911 -3171
  216. package/dist/schema/call/contact.d.ts +135 -931
  217. package/dist/schema/call/demand.d.ts +164 -1194
  218. package/dist/schema/call/guard.d.ts +298 -1140
  219. package/dist/schema/call/guard.js +1 -1
  220. package/dist/schema/call/machine.d.ts +459 -5403
  221. package/dist/schema/call/machine.js +1 -1
  222. package/dist/schema/call/order.d.ts +137 -844
  223. package/dist/schema/call/payment.d.ts +74 -561
  224. package/dist/schema/call/permission.d.ts +335 -2791
  225. package/dist/schema/call/personal.d.ts +227 -1814
  226. package/dist/schema/call/progress.d.ts +140 -843
  227. package/dist/schema/call/proof.d.ts +42 -258
  228. package/dist/schema/call/repository.d.ts +324 -2222
  229. package/dist/schema/call/reward.d.ts +153 -1183
  230. package/dist/schema/call/semantic.js +1 -1
  231. package/dist/schema/call/service.d.ts +376 -3431
  232. package/dist/schema/call/treasury.d.ts +252 -2158
  233. package/dist/schema/common/index.d.ts +222 -697
  234. package/dist/schema/common/index.js +1 -1
  235. package/dist/schema/config/index.d.ts +18 -161
  236. package/dist/schema/employee/index.d.ts +99 -0
  237. package/dist/schema/employee/index.js +1 -0
  238. package/dist/schema/evaluation/index.d.ts +1035 -3918
  239. package/dist/schema/evaluation/index.js +1 -1
  240. package/dist/schema/index.d.ts +5 -0
  241. package/dist/schema/index.js +1 -1
  242. package/dist/schema/industry-pack/index.d.ts +132 -0
  243. package/dist/schema/industry-pack/index.js +1 -0
  244. package/dist/schema/intent-radar/index.d.ts +92 -245
  245. package/dist/schema/intent-radar/index.js +1 -1
  246. package/dist/schema/local/index.d.ts +2045 -18080
  247. package/dist/schema/local/index.js +1 -1
  248. package/dist/schema/local/wip.d.ts +61 -651
  249. package/dist/schema/local/wip.js +1 -1
  250. package/dist/schema/messenger/index.d.ts +949 -5557
  251. package/dist/schema/messenger/index.js +1 -1
  252. package/dist/schema/operations.d.ts +3168 -26468
  253. package/dist/schema/operations.js +1 -1
  254. package/dist/schema/permission/index.d.ts +121 -0
  255. package/dist/schema/permission/index.js +1 -0
  256. package/dist/schema/persona/index.d.ts +469 -1820
  257. package/dist/schema/persona/index.js +1 -1
  258. package/dist/schema/project/index.d.ts +1023 -8450
  259. package/dist/schema/project/index.js +1 -1
  260. package/dist/schema/query/index.d.ts +12121 -75556
  261. package/dist/schema/query/index.js +1 -1
  262. package/dist/schema/schema-query/index.d.ts +35 -98
  263. package/dist/schema/schema-query/index.js +1 -1
  264. package/dist/schema/schema-version.js +1 -1
  265. package/dist/schema/task-status.d.ts +26 -132
  266. package/dist/schema/trust/index.d.ts +194 -1290
  267. package/dist/schema/utils/guard-parser.js +1 -1
  268. package/dist/schema/utils/node-parser.js +1 -1
  269. package/dist/schema/utils/skills-recommendation.d.ts +1 -0
  270. package/dist/schema/utils/skills-recommendation.js +1 -1
  271. package/dist/schema/workflow/index.d.ts +161 -0
  272. package/dist/schema/workflow/index.js +1 -0
  273. package/dist/schema/workspace/index.d.ts +69 -0
  274. package/dist/schema/workspace/index.js +1 -0
  275. package/dist/{schema-query → schema-query-impl}/index.js +1 -1
  276. package/dist/schemas/account_operation.output.json +3147 -1655
  277. package/dist/schemas/account_operation.schema.json +225 -218
  278. package/dist/schemas/bridge_operation.output.json +1168 -653
  279. package/dist/schemas/bridge_operation.schema.json +736 -504
  280. package/dist/schemas/config_operation.output.json +185 -179
  281. package/dist/schemas/config_operation.schema.json +21 -26
  282. package/dist/schemas/employee_operation.output.json +207 -0
  283. package/dist/schemas/employee_operation.schema.json +176 -0
  284. package/dist/schemas/evaluation_operation.output.json +2268 -601
  285. package/dist/schemas/evaluation_operation.schema.json +2919 -787
  286. package/dist/schemas/guard2file.output.json +58 -64
  287. package/dist/schemas/guard2file.schema.json +79 -81
  288. package/dist/schemas/index.json +41 -11
  289. package/dist/schemas/industry_pack_operation.output.json +594 -0
  290. package/dist/schemas/industry_pack_operation.schema.json +55 -0
  291. package/dist/schemas/intent_radar.output.json +275 -203
  292. package/dist/schemas/intent_radar.schema.json +124 -126
  293. package/dist/schemas/local_info_operation.output.json +1174 -660
  294. package/dist/schemas/local_info_operation.schema.json +119 -125
  295. package/dist/schemas/local_mark_operation.output.json +1239 -692
  296. package/dist/schemas/local_mark_operation.schema.json +91 -96
  297. package/dist/schemas/machineNode2file.output.json +63 -69
  298. package/dist/schemas/machineNode2file.schema.json +79 -81
  299. package/dist/schemas/messenger_operation.output.json +2722 -1531
  300. package/dist/schemas/messenger_operation.schema.json +1482 -1264
  301. package/dist/schemas/onchain_events.output.json +2590 -978
  302. package/dist/schemas/onchain_events.schema.json +117 -99
  303. package/dist/schemas/onchain_operations.output.json +3957 -2312
  304. package/dist/schemas/onchain_operations.schema.json +20799 -9285
  305. package/dist/schemas/onchain_operations_allocation.schema.json +171 -107
  306. package/dist/schemas/onchain_operations_arbitration.schema.json +233 -146
  307. package/dist/schemas/onchain_operations_contact.schema.json +129 -90
  308. package/dist/schemas/onchain_operations_demand.schema.json +170 -112
  309. package/dist/schemas/onchain_operations_gen_passport.schema.json +61 -646
  310. package/dist/schemas/onchain_operations_gen_proof.schema.json +40 -172
  311. package/dist/schemas/onchain_operations_guard.schema.json +3765 -294
  312. package/dist/schemas/onchain_operations_machine.schema.json +536 -163
  313. package/dist/schemas/onchain_operations_order.schema.json +126 -96
  314. package/dist/schemas/onchain_operations_payment.schema.json +82 -67
  315. package/dist/schemas/onchain_operations_permission.schema.json +331 -93
  316. package/dist/schemas/onchain_operations_personal.schema.json +636 -96
  317. package/dist/schemas/onchain_operations_progress.schema.json +125 -92
  318. package/dist/schemas/onchain_operations_proof.schema.json +76 -69
  319. package/dist/schemas/onchain_operations_repository.schema.json +636 -249
  320. package/dist/schemas/onchain_operations_reward.schema.json +218 -108
  321. package/dist/schemas/onchain_operations_service.schema.json +678 -220
  322. package/dist/schemas/onchain_operations_treasury.schema.json +401 -135
  323. package/dist/schemas/onchain_table_data.output.json +6833 -2432
  324. package/dist/schemas/onchain_table_data.schema.json +684 -417
  325. package/dist/schemas/permission_operation.output.json +173 -0
  326. package/dist/schemas/permission_operation.schema.json +39 -0
  327. package/dist/schemas/persona_operation.output.json +1568 -268
  328. package/dist/schemas/persona_operation.schema.json +346 -205
  329. package/dist/schemas/project_operation.output.json +6922 -5132
  330. package/dist/schemas/project_operation.schema.json +1050 -1020
  331. package/dist/schemas/query_task_status.output.json +195 -99
  332. package/dist/schemas/query_task_status.schema.json +12 -18
  333. package/dist/schemas/query_toolkit.output.json +18862 -14561
  334. package/dist/schemas/query_toolkit.schema.json +614 -522
  335. package/dist/schemas/schema_query.output.json +127 -129
  336. package/dist/schemas/schema_query.schema.json +64 -69
  337. package/dist/schemas/trust_score.output.json +678 -587
  338. package/dist/schemas/trust_score.schema.json +289 -277
  339. package/dist/schemas/wip_file.output.json +116 -124
  340. package/dist/schemas/wip_file.schema.json +142 -143
  341. package/dist/schemas/workflow_operation.output.json +164 -0
  342. package/dist/schemas/workflow_operation.schema.json +116 -0
  343. package/dist/schemas/workspace_operation.output.json +277 -0
  344. package/dist/schemas/workspace_operation.schema.json +45 -0
  345. package/dist/schemas/wowok_buildin_info.output.json +1682 -844
  346. package/dist/schemas/wowok_buildin_info.schema.json +576 -526
  347. package/dist/tools/handlers/bridge.d.ts +8 -1
  348. package/dist/tools/handlers/bridge.js +1 -1
  349. package/dist/tools/handlers/config.js +1 -1
  350. package/dist/tools/handlers/employee.d.ts +2 -0
  351. package/dist/tools/handlers/employee.js +1 -0
  352. package/dist/tools/handlers/evaluation.js +1 -1
  353. package/dist/tools/handlers/file-export.js +1 -1
  354. package/dist/tools/handlers/industry-pack.d.ts +2 -0
  355. package/dist/tools/handlers/industry-pack.js +1 -0
  356. package/dist/tools/handlers/onchain.js +1 -1
  357. package/dist/tools/handlers/permission.d.ts +2 -0
  358. package/dist/tools/handlers/permission.js +1 -0
  359. package/dist/tools/handlers/persona.js +1 -1
  360. package/dist/tools/handlers/project.js +1 -1
  361. package/dist/tools/handlers/query.js +1 -1
  362. package/dist/tools/handlers/schema-query.js +1 -1
  363. package/dist/tools/handlers/trust.js +1 -1
  364. package/dist/tools/handlers/wip.js +1 -1
  365. package/dist/tools/handlers/workflow.d.ts +2 -0
  366. package/dist/tools/handlers/workflow.js +1 -0
  367. package/dist/tools/handlers/workspace.d.ts +4 -0
  368. package/dist/tools/handlers/workspace.js +1 -0
  369. package/dist/tools/index.d.ts +2 -1
  370. package/dist/tools/index.js +1 -1
  371. package/dist/tools/rules-hook.d.ts +1 -1
  372. package/dist/tools/rules-hook.js +1 -1
  373. package/dist/tools/shared.d.ts +1 -1
  374. package/dist/tools/shared.js +1 -1
  375. package/dist/tools/types.d.ts +2 -1
  376. package/package.json +4 -5
  377. package/dist/knowledge/arbitration-trust.d.ts +0 -24
  378. package/dist/knowledge/arbitration-trust.js +0 -1
  379. package/dist/schema/call/bridge-handler.d.ts +0 -8
  380. package/dist/schema/call/bridge-handler.js +0 -1
  381. package/dist/schema/sync-layer4.d.ts +0 -21
  382. package/dist/schema/sync-layer4.js +0 -1
  383. /package/dist/{schema-query → schema-query-impl}/index.d.ts +0 -0
@@ -1 +1 @@
1
- import*as a82a from'fs';import{MAX_NODE_COUNT,USER_DEFINED_PERM_INDEX_START}from'./onchain-constants.js';import{traceSubsteps}from'../project/substep-trace.js';import{aggregateProjectRisks}from'../project/risk-aggregator.js';function add(a,b,c,d,e,f){a['push']({'check_id':b,'severity':c,'message':d,'location':e,'suggestion':f});}function fromDeploymentDocInput(a){const b=a['version']??'v1',c=a['project_prefix']+'_'+b,d=a['steps']['map'](k=>k['entry_id']),e=[],f=[];for(const k of a['steps']){const l=k['network_phase'];if(l==='both'||l==='testnet')e['push'](synthesizeBlock(k,a,'testnet'));if(l==='both'||l==='mainnet')f['push'](synthesizeBlock(k,a,'mainnet'));}const g=new Map();for(let m=0x1;m<=0xb;m++)g['set']('V-T-'+String(m)['padStart'](0x2,'0'),![]);const h=new Map();for(let n=0x1;n<=0x5;n++)h['set']('V-M-'+String(n)['padStart'](0x2,'0'),![]);const j=new Map();for(let o=0x1;o<=0x14;o++)j['set']('D-'+String(o)['padStart'](0x2,'0'),![]);return{'project_name':a['project_prefix'],'version':b,'namespace_tag':c,'objects':a['objects']??[],'edges':a['edges']??[],'steps':a['steps']??[],'scenarios':a['scenarios']??[],'testnet_blocks':e,'mainnet_blocks':f,'testnet_verification':g,'mainnet_verification':h,'completeness_checklist':j,'topological_order':d};}function synthesizeBlock(a,b,c){const d=b['objects']['find'](h=>h['entry_id']===a['entry_id']),e=d?.['name']??a['object_type']+'_'+a['step'],f=c==='testnet',g=c==='testnet'?'T':'M';return{'step':a['step'],'operation_type':a['object_type'],'data':{'object':{'name':e,'replaceExistName':f},'description':a['operation']+'\x20'+a['object_type']+'\x20(step\x20'+a['step']+')'},'env':{'account':b['project_prefix']+'_merchant_'+c,'network':c,'replaceExistName':f,'confirmed':!![]},'substeps':[{'id':''+g+a['step']+'.1','name':a['operation']+'\x20'+a['object_type'],'inputs':[],'outputs':[''+g+a['step']+'.output']}]};}function parseDeploymentMarkdown(a){const c=a82a['readFileSync'](a,'utf-8'),d=c['split']('\x0a'),e=parseTable(d,'Object\x20List',t=>({'entry_id':t['entry_id']??'','object_type':t['object_type'],'name':t['name']??'','reused_from':t['reused_from']||undefined,'publish_required':t['publish_required']==='true','description':t['description']||undefined}))['filter'](t=>t['entry_id']&&t['name']),f=parseTable(d,'Dependency\x20Edges',t=>({'from':t['from']??'','to':t['to']??'','edge_kind':t['edge_kind']??'','field_path':t['field_path']??'','required_at_publish':t['required_at_publish']==='true'}))['filter'](t=>t['from']&&t['to']),g=parseTable(d,'Scenario\x20Matrix',t=>({'scenario_id':t['scenario_id']??'','description':t['description']??'','primary_object':t['primary_object']??'','supporting_objects':(t['supporting_objects']??'')['split'](',')['map'](u=>u['trim']())['filter'](Boolean),'test_step_refs':t['test_step_refs']?t['test_step_refs']['split'](',')['map'](u=>u['trim']())['filter'](Boolean):undefined}))['filter'](t=>t['scenario_id']),h=parseTable(d,'Topological\x20Execution\x20Plan',t=>{const u=t['network_phase']==='testnet'||t['network_phase']==='mainnet'||t['network_phase']==='both'?t['network_phase']:'both';return{'step':parseInt(t['step']??'0',0xa)||0x0,'object_type':t['object_type'],'operation':t['operation']??'','substep_count':parseInt(t['substep_count']??'0',0xa)||0x0,'depends_on':(t['depends_on']??'')['replace'](/[\[\]]/g,'')['split'](',')['map'](v=>v['trim']())['filter'](Boolean)['map'](v=>parseInt(v,0xa)||0x0),'entry_id':t['entry_id']??'','network_phase':u};})['filter'](t=>t['step']>0x0),i=extractJsonBlocks(d),j=[],k=[];for(const t of i){if(t['env']?.['network']==='mainnet')k['push'](t);else j['push'](t);}const l=parseStatusMap(d,'V-T-'),m=parseStatusMap(d,'V-M-'),n=parseStatusMap(d,'D-','Completeness\x20Checklist'),o=parseMetaTable(d),p=o['get']('project_name')??deriveProjectFromPath(a),q=o['get']('version')??'v1',r=o['get']('namespace\x20tag')??o['get']('namespace_tag')??p+'_'+q,s=h['map'](u=>u['entry_id']);return{'project_name':p,'version':q,'namespace_tag':r,'objects':e,'edges':f,'steps':h,'scenarios':g,'testnet_blocks':j,'mainnet_blocks':k,'testnet_verification':l,'mainnet_verification':m,'completeness_checklist':n,'topological_order':s};}function parseTable(a,b,c){return parseMarkdownTable(a,b)['map'](c);}function parseMarkdownTable(a,b){const c=[];for(let d=0x0;d<a['length'];d++){if(!a[d]['includes'](b))continue;let e=-0x1;for(let j=d;j<Math['min'](d+0xa,a['length']);j++){if(a[j]['trim']()['startsWith']('|')&&a[j]['includes']('|')){e=j;break;}}if(e===-0x1)break;const f=splitTableRow(a[e]);let g=e+0x1;if(g<a['length']&&/^\s*\|[\s-:|]+\|\s*$/['test'](a[g]))g++;while(g<a['length']&&a[g]['trim']()['startsWith']('|')){const l=splitTableRow(a[g]);if(l['length']===0x0)break;const m={};for(let n=0x0;n<f['length'];n++)m[f[n]['trim']()]=(l[n]??'')['trim']();c['push'](m),g++;}break;}return c;}function splitTableRow(a){const b=a['trim']();if(!b['startsWith']('|'))return[];return b['slice'](0x1,b['endsWith']('|')?-0x1:undefined)['split']('|');}function parseStatusMap(a,b,c){const d=new Map(),e=c?parseMarkdownTable(a,c):parseMarkdownTable(a,'Verification\x20Checklist');for(const f of e){const g=f['verification_id']??f['check_id']??'';if(!g['startsWith'](b))continue;const h=(f['status']??'')['trim']();d['set'](g,h['includes']('✅')||h['toLowerCase']()['includes']('pass'));}return d;}function parseMetaTable(a){const b=new Map();for(const c of parseMarkdownTable(a,'Project\x20Metadata')){const d=c['field']??'',e=c['value']??'';if(d)b['set'](d['trim'](),e['trim']());}return b;}function extractJsonBlocks(a){const b=[];let c=0x0;while(c<a['length']){if(a[c]['trim']()['startsWith']('```json')){const d=[];let e=c+0x1;while(e<a['length']&&!a[e]['trim']()['startsWith']('```')){d['push'](a[e]),e++;}try{const f=JSON['parse'](d['join']('\x0a'));if(f&&typeof f==='object'&&'operation_type'in f){const g=f['env']??{},h=f['data']??{},k=f['substeps'],l=Array['isArray'](k)?k['map'](normalizeSubstep):undefined;b['push']({'step':typeof f['step']==='number'?f['step']:0x0,'operation_type':String(f['operation_type']??''),'data':h,'env':{'network':typeof g['network']==='string'?g['network']:undefined,'replaceExistName':typeof g['replaceExistName']==='boolean'?g['replaceExistName']:undefined,'forceClaim':typeof g['forceClaim']==='boolean'?g['forceClaim']:undefined,'confirmed':typeof g['confirmed']==='boolean'?g['confirmed']:undefined,...g},'substeps':l});}}catch{}c=e+0x1;}else c++;}return b;}function normalizeSubstep(a){if(!a||typeof a!=='object')return{'id':'','inputs':[],'outputs':[]};const b=a;return{'id':String(b['id']??''),'name':typeof b['name']==='string'?b['name']:undefined,'inputs':Array['isArray'](b['inputs'])?b['inputs']['map'](String):[],'outputs':Array['isArray'](b['outputs'])?b['outputs']['map'](String):[]};}function deriveProjectFromPath(a){const b=a['split'](/[\\/]/)['pop']()??'project';return b['replace'](/_v\d+_deployment\.md$/i,'')['replace'](/\.md$/i,'');}function*walkPermissionIndices(a){if(a===null||a===undefined||typeof a!=='object')return;if(Array['isArray'](a)){for(const c of a)yield*walkPermissionIndices(c);return;}const b=a;if(typeof b['permissionIndex']==='number')yield b['permissionIndex'];if(typeof b['permission_index']==='number')yield b['permission_index'];if(typeof b['index']==='number'&&b['__isPermission']===!![])yield b['index'];for(const d of Object['values'](b))yield*walkPermissionIndices(d);}function countMachineNodes(a){const b=a['data']?.['node'],c=b?.['nodes'];return Array['isArray'](c)?c['length']:0x0;}function deriveEntryIdFromBlock(a,b){const c=a['data']['object'];let d;if(typeof c==='string')d=c;else{if(c&&typeof c==='object'){const e=c;if(typeof e['name']==='string')d=e['name'];}}if(!d)return undefined;return b['objects']['find'](f=>f['name']===d)?.['entry_id'];}export function analyzeObjectDependencyCompleteness(a){const b=[];try{const c=normalizeInput(a);if(!c)return add(b,'D-01','critical','No\x20deployment\x20document\x20provided\x20(need\x20document_path\x20or\x20deployment_doc)'),b;const d=new Set(c['objects']['map'](h=>h['entry_id'])),f=new Set();for(const h of c['edges']){f['add'](h['from']),f['add'](h['to']);}for(const i of f){if(i['endsWith'](':*'))continue;!d['has'](i)&&add(b,'D-01','critical','Object\x20\x27'+i+'\x27\x20is\x20referenced\x20in\x20§1.2\x20but\x20not\x20defined\x20in\x20§1.1','§1.2\x20Dependency\x20Edges','Add\x20\x27'+i+'\x27\x20to\x20§1.1\x20Object\x20List\x20or\x20remove\x20the\x20reference.');}for(const j of c['edges']){const k=d['has'](j['from'])||j['from']['endsWith'](':*'),l=d['has'](j['to'])||j['to']['endsWith'](':*');(!k||!l)&&add(b,'D-02','critical','Dangling\x20dependency:\x20'+j['from']+'\x20→\x20'+j['to']+'\x20(edge_kind=\x27'+j['edge_kind']+'\x27)','§1.2\x20Dependency\x20Edges','Create\x20the\x20missing\x20object\x20or\x20remove\x20the\x20edge.');}for(const m of c['objects']['filter'](n=>n['object_type']==='guard')){const n=c['testnet_blocks']['some'](p=>p['operation_type']==='guard'&&p['data']['object']?.['name']===m['name']),o=c['testnet_blocks']['some'](p=>p['operation_type']==='passport'||p['data']['gen_passport']===!![]||p['data']['object']===m['name']);if(!n)add(b,'D-08','critical','Guard\x20\x27'+m['entry_id']+'\x27\x20has\x20no\x20create\x20step\x20in\x20§3.2','§3.2\x20(guard:\x20'+m['name']+')','Add\x20a\x20guard\x20creation\x20JSON\x20block\x20for\x20\x27'+m['name']+'\x27.');if(!o)add(b,'D-08','critical','Guard\x20\x27'+m['entry_id']+'\x27\x20has\x20no\x20gen_passport\x20step\x20in\x20§3.2','§3.2\x20(guard:\x20'+m['name']+')','Add\x20a\x20passport/gen_passport\x20JSON\x20block\x20after\x20the\x20guard\x20creation\x20step.');}}catch(p){add(b,'D-01','warning','analyzeObjectDependencyCompleteness\x20failed:\x20'+p['message']);}return b;}export function analyzeSubstepCoherence(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];for(const d of['testnet','mainnet']){const e=collectSubsteps(d==='testnet'?c['testnet_blocks']:c['mainnet_blocks'],d),f=traceSubsteps({'project_prefix':c['project_name'],'version':c['version'],'network':d,'substeps':e});emitCoherenceFindings(f,d,b);}}catch(g){add(b,'D-10','warning','analyzeSubstepCoherence\x20failed:\x20'+g['message']);}return b;}function collectSubsteps(a,b){const c=[],d=b==='testnet'?'T':'M';for(const e of a){if(!e['substeps'])continue;const f=''+d+e['step'];for(const g of e['substeps']){if(!g['id'])continue;c['push']({'step_id':g['id'],'parent_step':f,'object_type':e['operation_type'],'entry_id':'','operation_type':e['operation_type'],'network':b,'input':{'data':e['data'],'input_refs':g['inputs']},'timestamp':0x0,'status':'PENDING','dependencies':{'input_refs':g['inputs'],'output_refs':g['outputs']['map'](h=>({'substep_id':g['id'],'field_path':h}))}});}}return c;}function emitCoherenceFindings(a,e,f){for(const g of a['dangling_inputs']){add(f,'D-10','critical','['+e+']\x20Dangling\x20input:\x20substep\x20\x27'+g['substep_id']+'\x27\x20references\x20missing\x20\x27'+g['missing_ref']+'\x27',e+'\x20§substeps','Ensure\x20\x27'+g['missing_ref']+'\x27\x20is\x20produced\x20by\x20an\x20earlier\x20substep.');}for(const h of a['circular_refs']){add(f,'D-10','critical','['+e+']\x20Circular\x20reference:\x20'+h['cycle']['join']('\x20→\x20'),e+'\x20§substeps','Break\x20the\x20cycle\x20by\x20removing\x20one\x20dependency.');}for(const i of a['missing_outputs']){add(f,'D-10','warning','['+e+']\x20Missing\x20output:\x20substep\x20\x27'+i['substep_id']+'\x27\x20did\x20not\x20produce\x20\x27'+i['expected_field']+'\x27',e+'\x20§substeps','Ensure\x20\x27'+i['substep_id']+'\x27\x20produces\x20\x27'+i['expected_field']+'\x27.');}for(const j of a['cross_step_breaks']){add(f,'D-10','critical','['+e+']\x20Cross-step\x20break:\x20failed\x20step\x20\x27'+j['source_step']+'\x27\x20blocks\x20\x27'+j['target_step']+'\x27',e+'\x20§substeps','Fix\x20step\x20\x27'+j['source_step']+'\x27\x20or\x20adjust\x20the\x20dependency.');}}export function analyzeNetworkConsistency(a){const c=[];try{const d=normalizeInput(a);if(!d)return[];const e=d['testnet_blocks'],f=d['mainnet_blocks'],g=d['topological_order'];if(g['length']>0x0&&e['length']>0x0)for(let h=0x0;h<e['length'];h++){const j=g[h];if(!j)break;const k=deriveEntryIdFromBlock(e[h],d);if(k&&k!==j){add(c,'D-04','critical','testnet\x20step\x20'+e[h]['step']+'\x20order\x20mismatch:\x20expected\x20\x27'+j+'\x27,\x20got\x20\x27'+k+'\x27','§3.2\x20testnet\x20JSON\x20Operation\x20Sequence','Reorder\x20testnet\x20JSON\x20blocks\x20to\x20match\x20§2\x20topological\x20order.');break;}}for(const l of e){if(l['env']['network']!=='testnet')add(c,'D-05','critical','testnet\x20step\x20'+l['step']+'\x20env.network\x20is\x20\x27'+(l['env']['network']??'(missing)')+'\x27,\x20expected\x20\x27testnet\x27','§3.2\x20step\x20'+l['step'],'Set\x20env.network\x20=\x20\x27testnet\x27\x20on\x20all\x20§3.2\x20JSON\x20blocks.');}for(const n of e){if(n['env']['replaceExistName']!==!![])add(c,'D-06','critical','testnet\x20step\x20'+n['step']+'\x20env.replaceExistName\x20is\x20\x27'+(n['env']['replaceExistName']??'(missing)')+'\x27,\x20expected\x20true','§3.2\x20step\x20'+n['step'],'Set\x20env.replaceExistName\x20=\x20true\x20on\x20all\x20§3.2\x20JSON\x20blocks\x20(testnet\x20allows\x20overwrite).');}if(e['length']!==f['length'])add(c,'D-11','critical','mainnet\x20step\x20count\x20('+f['length']+')\x20!=\x20testnet\x20step\x20count\x20('+e['length']+')','§3.2\x20vs\x20§4.2','Ensure\x20mainnet\x20JSON\x20blocks\x20correspond\x201:1\x20with\x20testnet\x20blocks.');else for(let o=0x0;o<f['length'];o++){const p=e[o],q=f[o];if(p['step']!==q['step'])add(c,'D-11','critical','mainnet\x20step\x20'+q['step']+'\x20does\x20not\x20match\x20testnet\x20step\x20'+p['step'],'§4.2\x20step\x20'+q['step'],'Ensure\x20mainnet\x20step\x20numbers\x20match\x20testnet.');if(p['operation_type']!==q['operation_type'])add(c,'D-11','critical','step\x20'+q['step']+'\x20operation_type\x20mismatch:\x20testnet=\x27'+p['operation_type']+'\x27,\x20mainnet=\x27'+q['operation_type']+'\x27','§4.2\x20step\x20'+q['step'],'Align\x20mainnet\x20operation_type\x20with\x20testnet.');}for(const r of f){if(r['env']['network']!=='mainnet')add(c,'D-12','critical','mainnet\x20step\x20'+r['step']+'\x20env.network\x20is\x20\x27'+(r['env']['network']??'(missing)')+'\x27,\x20expected\x20\x27mainnet\x27','§4.2\x20step\x20'+r['step'],'Set\x20env.network\x20=\x20\x27mainnet\x27\x20on\x20all\x20§4.2\x20JSON\x20blocks.');}for(const s of f){if(s['env']['replaceExistName']!==![]&&!s['env']['forceClaim'])add(c,'D-13','critical','mainnet\x20step\x20'+s['step']+'\x20env.replaceExistName\x20is\x20\x27'+(s['env']['replaceExistName']??'(missing)')+'\x27,\x20expected\x20false\x20(or\x20set\x20forceClaim=true)','§4.2\x20step\x20'+s['step'],'Set\x20env.replaceExistName\x20=\x20false\x20on\x20all\x20§4.2\x20JSON\x20blocks\x20(mainnet\x20must\x20not\x20overwrite).');}}catch(u){add(c,'D-04','warning','analyzeNetworkConsistency\x20failed:\x20'+u['message']);}return c;}const NAME_REGEX=/^[a-z][a-z0-9_]{2,63}$/;export function analyzeNamingConvention(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];const d=c['project_name'],e='_'+c['version'];for(const f of c['objects']){if(f['reused_from'])continue;if(!NAME_REGEX['test'](f['name']))add(b,'NAMING-01','warning','Object\x20\x27'+f['entry_id']+'\x27\x20name\x20\x27'+f['name']+'\x27\x20does\x20not\x20match\x20'+NAME_REGEX,'§1.1\x20('+f['entry_id']+')','Rename\x20to\x20match\x20^[a-z][a-z0-9_]{2,63}$\x20and\x20start\x20with\x20project\x20prefix\x20\x27'+d+'\x27.');else d&&!f['name']['startsWith'](d+'_')&&add(b,'NAMING-01','warning','Object\x20\x27'+f['entry_id']+'\x27\x20name\x20\x27'+f['name']+'\x27\x20does\x20not\x20start\x20with\x20project\x20prefix\x20\x27'+d+'_\x27','§1.1\x20('+f['entry_id']+')','Rename\x20to\x20start\x20with\x20\x27'+d+'_\x27.');e&&!f['name']['endsWith'](e)&&add(b,'NAMING-02','warning','Object\x20\x27'+f['entry_id']+'\x27\x20name\x20\x27'+f['name']+'\x27\x20is\x20missing\x20version\x20suffix\x20\x27'+e+'\x27','§1.1\x20('+f['entry_id']+')','Append\x20\x27'+e+'\x27\x20to\x20the\x20name.');}}catch(g){add(b,'NAMING-01','warning','analyzeNamingConvention\x20failed:\x20'+g['message']);}return b;}export function analyzePermissionIndexRange(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];const d=[...c['testnet_blocks'],...c['mainnet_blocks']];for(const e of d){for(const f of walkPermissionIndices(e['data'])){if(f<USER_DEFINED_PERM_INDEX_START)add(b,'D-07','critical','permissionIndex\x20'+f+'\x20<\x20'+USER_DEFINED_PERM_INDEX_START+'\x20(USER_DEFINED_PERM_INDEX_START)\x20in\x20step\x20'+e['step']+'\x20('+e['operation_type']+')',(e['env']['network']??'?')+'\x20step\x20'+e['step'],'Use\x20a\x20permissionIndex\x20>=\x20'+USER_DEFINED_PERM_INDEX_START+'.');}}for(const g of d){if(g['operation_type']!=='machine')continue;const h=countMachineNodes(g);if(h>MAX_NODE_COUNT)add(b,'D-09','critical','Machine\x20in\x20step\x20'+g['step']+'\x20has\x20'+h+'\x20nodes\x20>\x20MAX_NODE_COUNT\x20('+MAX_NODE_COUNT+')',(g['env']['network']??'?')+'\x20step\x20'+g['step'],'Reduce\x20node\x20count\x20to\x20<=\x20'+MAX_NODE_COUNT+'\x20or\x20split\x20into\x20multiple\x20Machines.');}}catch(i){add(b,'D-07','warning','analyzePermissionIndexRange\x20failed:\x20'+i['message']);}return b;}const REQUIRED_SCENARIO_KEYWORDS=['normal_order','refund','dispute','machine_publish','service_publish'];export function analyzeScenarioCoverage(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];const d=new Set();for(const f of c['scenarios']){const g=(f['scenario_id']+'\x20'+f['description'])['toLowerCase']();for(const h of REQUIRED_SCENARIO_KEYWORDS){if(g['includes'](h['toLowerCase']()))d['add'](h);}}if(d['size']<0x3){const i=REQUIRED_SCENARIO_KEYWORDS['filter'](j=>!d['has'](j));add(b,'D-03','warning','Scenario\x20matrix\x20covers\x20'+d['size']+'/'+REQUIRED_SCENARIO_KEYWORDS['length']+'\x20required\x20keywords;\x20missing:\x20'+i['join'](',\x20'),'§1.3\x20Scenario\x20Matrix','Add\x20scenarios\x20covering\x20the\x20missing\x20keywords\x20(normal_order,\x20refund,\x20dispute,\x20machine_publish,\x20service_publish).');}const e=new Set(c['objects']['map'](j=>j['entry_id']));for(const j of c['scenarios']){const k=[j['primary_object'],...j['supporting_objects']];for(const l of k){if(l['endsWith'](':*'))continue;if(!e['has'](l))add(b,'D-03','warning','Scenario\x20\x27'+j['scenario_id']+'\x27\x20references\x20undefined\x20object\x20\x27'+l+'\x27','§1.3\x20('+j['scenario_id']+')','Add\x20\x27'+l+'\x27\x20to\x20§1.1\x20or\x20fix\x20the\x20scenario\x20reference.');}}}catch(m){add(b,'D-03','warning','analyzeScenarioCoverage\x20failed:\x20'+m['message']);}return b;}const TESTNET_VERIFICATION_ITEMS=['V-T-01','V-T-02','V-T-03','V-T-04','V-T-05','V-T-06','V-T-07','V-T-08','V-T-09','V-T-10','V-T-11'],MAINNET_VERIFICATION_ITEMS=['V-M-01','V-M-02','V-M-03','V-M-04','V-M-05'],COMPLETENESS_CHECK_IDS=Array['from']({'length':0x14},(a,b)=>'D-'+String(b+0x1)['padStart'](0x2,'0'));export function analyzeVerificationChecklist(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];for(const d of TESTNET_VERIFICATION_ITEMS){if(!c['testnet_verification']['has'](d))add(b,'D-14','warning','testnet\x20verification\x20item\x20\x27'+d+'\x27\x20is\x20missing\x20from\x20§3.3','§3.3\x20testnet\x20Verification\x20Checklist','Add\x20row\x20\x27'+d+'\x27\x20to\x20§3.3.');}for(const e of MAINNET_VERIFICATION_ITEMS){if(!c['mainnet_verification']['has'](e))add(b,'D-15','warning','mainnet\x20verification\x20item\x20\x27'+e+'\x27\x20is\x20missing\x20from\x20§4.3','§4.3\x20mainnet\x20Verification\x20Checklist','Add\x20row\x20\x27'+e+'\x27\x20to\x20§4.3.');}for(const f of COMPLETENESS_CHECK_IDS){if(!c['completeness_checklist']['has'](f))add(b,'D-18','warning','completeness\x20checklist\x20item\x20\x27'+f+'\x27\x20is\x20missing\x20from\x20§6','§6\x20Completeness\x20Checklist','Add\x20row\x20\x27'+f+'\x27\x20to\x20§6.');}}catch(g){add(b,'D-14','warning','analyzeVerificationChecklist\x20failed:\x20'+g['message']);}return b;}export function analyzeDeployableReadiness(a){const b=[];try{const c=resolveRiskResult(a);if(!c)return add(b,'D-16','info','Risk\x20aggregation\x20result\x20not\x20available;\x20D-16/D-17\x20skipped\x20(provide\x20project_graph\x20with\x20puzzles,\x20or\x20set\x20deployment_doc.risk_status).',undefined,'Run\x20C2\x20risk-aggregator\x20first,\x20or\x20provide\x20deployment_doc.risk_status.'),b;const d=c['severity_summary']['CRITICAL']??0x0;if(d>0x0){const g=c['findings']['filter'](h=>h['severity']==='CRITICAL')['map'](h=>h['risk_rule_id'])['join'](',\x20');add(b,'D-16','critical',d+'\x20CRITICAL\x20risk(s)\x20remain:\x20'+g,'C2\x20risk-aggregator\x20output','Return\x20to\x20stage\x202\x20(business\x20puzzle)\x20and\x20fix\x20all\x20CRITICAL\x20risks\x20before\x20deploying.');}const e=new Set(a['user_confirmed_high_risks']??[]),f=c['findings']['filter'](h=>h['severity']==='HIGH'&&!e['has'](h['risk_rule_id']));if(f['length']>0x0){const h=f['map'](i=>i['risk_rule_id'])['join'](',\x20');add(b,'D-17','critical',f['length']+'\x20unconfirmed\x20HIGH\x20risk(s):\x20'+h,'C2\x20risk-aggregator\x20output','User\x20must\x20confirm\x20each\x20HIGH\x20risk\x20(ACCEPT_AND_PROCEED)\x20or\x20fix\x20them.');}}catch(i){add(b,'D-16','warning','analyzeDeployableReadiness\x20failed:\x20'+i['message']);}return b;}function resolveRiskResult(a){const b=a['project_graph'];if(b&&typeof b==='object'){const d=b;if(typeof d['severity_summary']==='object'&&Array['isArray'](d['findings']))return b;if(typeof d['project_prefix']==='string'&&typeof d['puzzles']==='object')try{return aggregateProjectRisks(b);}catch{}}const c=a['deployment_doc'];if(c&&c['risk_status']){const e=c['risk_critical_count']??0x0,f=c['risk_high_count']??0x0,g=[];for(let h=0x0;h<e;h++)g['push']({'risk_rule_id':'R-CRITICAL-'+h,'object_type':'service','entry_id':'*','severity':'CRITICAL','message':'(synthesized\x20from\x20deployment_doc.risk_critical_count)','fix_suggestion':'See\x20C2\x20risk-aggregator\x20report\x20for\x20details.'});for(let j=0x0;j<f;j++)g['push']({'risk_rule_id':'R-HIGH-'+j,'object_type':'service','entry_id':'*','severity':'HIGH','message':'(synthesized\x20from\x20deployment_doc.risk_high_count)','fix_suggestion':'See\x20C2\x20risk-aggregator\x20report\x20for\x20details.'});return{'namespace':{'prefix':c['project_prefix'],'version':c['version'],'industry':c['industry']},'findings':g,'severity_summary':{'CRITICAL':e,'HIGH':f,'MEDIUM':0x0,'LOW':0x0,'INFO':0x0},'status':c['risk_status'],'calibrated_at':Date['now'](),'warnings':[]};}return undefined;}function extractMachinePairs(a){const b=a['data'];if(!b)return[];const c=b['node'];if(!c||typeof c!=='object')return[];const d=c['nodes'];if(!Array['isArray'](d))return[];return d['filter'](e=>{if(!e||typeof e!=='object')return![];const f=e['pairs'];return Array['isArray'](f);})['flatMap'](e=>e['pairs']??[]);}export function analyzeMachineAndServiceReadiness(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];const d=[...c['testnet_blocks'],...c['mainnet_blocks']];for(const f of d){if(f['operation_type']!=='machine')continue;const g=extractMachinePairs(f);if(g['length']===0x0)continue;const h=g['filter'](i=>i['prev_node']==='');for(const i of h){const j=Array['isArray'](i['forwards'])?i['forwards']['length']:0x0;j===0x0&&add(b,'D-19','critical','Machine\x20in\x20step\x20'+f['step']+'\x20('+(f['env']['network']??'?')+')\x20has\x20an\x20entry\x20node\x20(prev_node=\x22\x22)\x20with\x20no\x20forwards.\x20'+'Progress\x20created\x20from\x20this\x20Machine\x20will\x20be\x20permanently\x20stuck\x20at\x20current=\x22\x22\x20(P0-2\x20root\x20cause).',(f['env']['network']??'?')+'\x20step\x20'+f['step'],'Add\x20at\x20least\x20one\x20forward\x20to\x20the\x20entry\x20node\x27s\x20pairs.\x20Example:\x20pairs:\x20[{prev_node:\x20\x22\x22,\x20forwards:\x20[{next_node:\x20\x22Ordered\x22,\x20...}]}]');}}const e=d['filter'](k=>k['operation_type']==='service');if(e['length']>0x0){const k=e['filter'](l=>{const m=l['data'];return m?.['compensation_fund_add']!=null;});k['length']===0x0&&add(b,'D-20','warning','No\x20Service\x20block\x20in\x20the\x20deployment\x20doc\x20includes\x20a\x20compensation_fund_add\x20step.\x20'+'Without\x20deposit,\x20arbitration\x20rulings\x20that\x20award\x20refunds\x20to\x20buyers\x20cannot\x20be\x20paid\x20out\x20from\x20the\x20Service.\x20'+'Industries\x20like\x20freelance\x20may\x20not\x20require\x20this\x20(info),\x20but\x20rental/travel/education\x20typically\x20do.','§3.2\x20/\x20§4.2\x20Service\x20blocks','Add\x20a\x20compensation_fund_add\x20step\x20for\x20the\x20Service\x20(e.g.,\x20data.compensation_fund_add\x20=\x20{balance:\x20<amount>}).\x20'+'Recommended:\x203-10×\x20the\x20max\x20single-order\x20amount,\x20depending\x20on\x20industry\x20(subscription:\x203×,\x20retail:\x205×,\x20rental:\x2010×).\x20See\x20P1-1\x20evaluation\x20rule.');}}catch(l){add(b,'D-19','warning','analyzeMachineAndServiceReadiness\x20failed:\x20'+l['message']);}return b;}export function scanDeployment(a){const b=[...analyzeObjectDependencyCompleteness(a),...analyzeSubstepCoherence(a),...analyzeNetworkConsistency(a),...analyzeNamingConvention(a),...analyzePermissionIndexRange(a),...analyzeScenarioCoverage(a),...analyzeVerificationChecklist(a),...analyzeDeployableReadiness(a),...analyzeMachineAndServiceReadiness(a)];return{'project_name':a['project_name'],'document_path':a['document_path'],'overall_readiness':computeReadiness(b),'findings':b,'coverage':computeCoverage(a),'checks':computeChecks(b),'scanned_at':Date['now'](),'scanner_version':DEPLOYMENT_SCANNER_VERSION};}function computeChecks(a){const b=c=>a['some'](d=>d['check_id']===c);return{'D01_object_defined':b('D-01')?'fail':'pass','D02_dependency_complete':b('D-02')?'fail':'pass','D03_scenario_covered':b('D-03')?'fail':'pass','D04_testnet_topo_order':b('D-04')?'fail':'pass','D05_testnet_network':b('D-05')?'fail':'pass','D06_testnet_replace':b('D-06')?'fail':'pass','D07_permission_index':b('D-07')?'fail':'pass','D08_guard_gen_passport':b('D-08')?'fail':'pass','D09_machine_node_count':b('D-09')?'fail':'pass','D10_substep_coherence':b('D-10')?'fail':'pass','D11_mainnet_testnet_match':b('D-11')?'fail':'pass','D12_mainnet_network':b('D-12')?'fail':'pass','D13_mainnet_replace':b('D-13')?'fail':'pass','D14_testnet_verification':b('D-14')?'fail':'pass','D15_mainnet_verification':b('D-15')?'fail':'pass','D16_no_critical_risk':b('D-16')?'fail':'pass','D17_no_high_risk':b('D-17')?'fail':'pass','D18_completeness_checklist':b('D-18')?'fail':'pass','D19_machine_entry_forward':b('D-19')?'fail':'pass','D20_service_compensation_fund':b('D-20')?'fail':'pass'};}function computeCoverage(a){const b=normalizeInput(a);if(!b)return{'objects_defined':0x0,'objects_with_scenario':0x0,'testnet_steps':0x0,'mainnet_steps':0x0,'verification_items':0x0};const c=new Set();for(const e of b['scenarios']){c['add'](e['primary_object']);for(const f of e['supporting_objects'])c['add'](f);}const d=b['objects']['filter'](g=>c['has'](g['entry_id'])||c['has'](g['object_type']+':*'))['length'];return{'objects_defined':b['objects']['length'],'objects_with_scenario':d,'testnet_steps':b['testnet_blocks']['length'],'mainnet_steps':b['mainnet_blocks']['length'],'verification_items':b['testnet_verification']['size']+b['mainnet_verification']['size']};}function computeReadiness(a){const b=a['filter'](c=>c['check_id']['startsWith']('D-'));if(b['some'](c=>c['severity']==='critical'))return'blocked';if(b['some'](c=>c['severity']==='warning'))return'warnings';return'ready';}function normalizeInput(a){if(a['deployment_doc'])return fromDeploymentDocInput(a['deployment_doc']);if(a['document_path']){if(!a82a['existsSync'](a['document_path']))return undefined;return parseDeploymentMarkdown(a['document_path']);}return undefined;}export function isReady(a){return a['overall_readiness']==='ready';}export function isBlocked(a){return a['overall_readiness']==='blocked';}export function summarizeScan(a){const b=[];b['push']('#\x20Deployment\x20Scan\x20Report\x20—\x20'+a['project_name'],''),b['push']('-\x20**Overall\x20readiness**:\x20'+a['overall_readiness']),b['push']('-\x20**Scanned\x20at**:\x20'+new Date(a['scanned_at'])['toISOString']()),b['push']('-\x20**Scanner\x20version**:\x20'+a['scanner_version']);if(a['document_path'])b['push']('-\x20**Document**:\x20'+a['document_path']);b['push']('','##\x20Coverage','','|\x20Metric\x20|\x20Count\x20|','|--------|-------|'),b['push']('|\x20Objects\x20defined\x20|\x20'+a['coverage']['objects_defined']+'\x20|'),b['push']('|\x20Objects\x20with\x20scenario\x20|\x20'+a['coverage']['objects_with_scenario']+'\x20|'),b['push']('|\x20testnet\x20steps\x20|\x20'+a['coverage']['testnet_steps']+'\x20|'),b['push']('|\x20mainnet\x20steps\x20|\x20'+a['coverage']['mainnet_steps']+'\x20|'),b['push']('|\x20verification\x20items\x20|\x20'+a['coverage']['verification_items']+'\x20|',''),b['push']('##\x20Checks\x20(D-01\x20~\x20D-20)','','|\x20Check\x20ID\x20|\x20Status\x20|','|----------|--------|');const c=Object['entries'](a['checks']);for(const [d,e]of c)b['push']('|\x20'+d+'\x20|\x20'+(e==='pass'?'✅\x20pass':'❌\x20fail')+'\x20|');b['push']('','##\x20Findings\x20('+a['findings']['length']+')','');if(a['findings']['length']===0x0)b['push']('✅\x20No\x20issues\x20detected.','');else{const g=new Map();for(const h of a['findings']){const i=g['get'](h['severity'])??[];i['push'](h),g['set'](h['severity'],i);}for(const j of['critical','warning','info']){const k=g['get'](j);if(!k||k['length']===0x0)continue;b['push']('###\x20'+j['toUpperCase']()+'\x20('+k['length']+')','');for(const l of k){b['push']('-\x20**['+l['check_id']+']**\x20'+l['message']);if(l['location'])b['push']('\x20\x20-\x20Location:\x20'+l['location']);if(l['suggestion'])b['push']('\x20\x20-\x20Suggestion:\x20'+l['suggestion']);b['push']('');}}}return b['push']('---','','*End\x20of\x20report.*'),b['join']('\x0a');}export const DEPLOYMENT_SCANNER_VERSION='2.0.0';
1
+ import*as a100a from'fs';import{MAX_NODE_COUNT,USER_DEFINED_PERM_INDEX_START}from'./onchain-constants.js';import{traceSubsteps}from'../project/substep-trace.js';import{aggregateProjectRisks}from'../project/risk-aggregator.js';function add(a,b,c,d,e,f){a['push']({'check_id':b,'severity':c,'message':d,'location':e,'suggestion':f});}function fromDeploymentDocInput(a){const b=a['version']??'v1',c=a['project_prefix']+'_'+b,d=a['steps']['map'](k=>k['entry_id']),e=[],f=[];for(const k of a['steps']){const l=k['network_phase'];if(l==='both'||l==='testnet')e['push'](synthesizeBlock(k,a,'testnet'));if(l==='both'||l==='mainnet')f['push'](synthesizeBlock(k,a,'mainnet'));}const g=new Map();for(let m=0x1;m<=0xb;m++)g['set']('V-T-'+String(m)['padStart'](0x2,'0'),![]);const h=new Map();for(let n=0x1;n<=0x5;n++)h['set']('V-M-'+String(n)['padStart'](0x2,'0'),![]);const j=new Map();for(let o=0x1;o<=0x14;o++)j['set']('D-'+String(o)['padStart'](0x2,'0'),![]);return{'project_name':a['project_prefix'],'version':b,'namespace_tag':c,'objects':a['objects']??[],'edges':a['edges']??[],'steps':a['steps']??[],'scenarios':a['scenarios']??[],'testnet_blocks':e,'mainnet_blocks':f,'testnet_verification':g,'mainnet_verification':h,'completeness_checklist':j,'topological_order':d};}function synthesizeBlock(a,b,c){const d=b['objects']['find'](h=>h['entry_id']===a['entry_id']),e=d?.['name']??a['object_type']+'_'+a['step'],f=c==='testnet',g=c==='testnet'?'T':'M';return{'step':a['step'],'operation_type':a['object_type'],'data':{'object':{'name':e,'replaceExistName':f},'description':a['operation']+'\x20'+a['object_type']+'\x20(step\x20'+a['step']+')'},'env':{'account':b['project_prefix']+'_merchant_'+c,'network':c,'replaceExistName':f,'confirmed':!![]},'substeps':[{'id':''+g+a['step']+'.1','name':a['operation']+'\x20'+a['object_type'],'inputs':[],'outputs':[''+g+a['step']+'.output']}]};}function parseDeploymentMarkdown(a){const c=a100a['readFileSync'](a,'utf-8'),d=c['split']('\x0a'),e=parseTable(d,'Object\x20List',t=>({'entry_id':t['entry_id']??'','object_type':t['object_type'],'name':t['name']??'','reused_from':t['reused_from']||undefined,'publish_required':t['publish_required']==='true','description':t['description']||undefined}))['filter'](t=>t['entry_id']&&t['name']),f=parseTable(d,'Dependency\x20Edges',t=>({'from':t['from']??'','to':t['to']??'','edge_kind':t['edge_kind']??'','field_path':t['field_path']??'','required_at_publish':t['required_at_publish']==='true'}))['filter'](t=>t['from']&&t['to']),g=parseTable(d,'Scenario\x20Matrix',t=>({'scenario_id':t['scenario_id']??'','description':t['description']??'','primary_object':t['primary_object']??'','supporting_objects':(t['supporting_objects']??'')['split'](',')['map'](u=>u['trim']())['filter'](Boolean),'test_step_refs':t['test_step_refs']?t['test_step_refs']['split'](',')['map'](u=>u['trim']())['filter'](Boolean):undefined}))['filter'](t=>t['scenario_id']),h=parseTable(d,'Topological\x20Execution\x20Plan',t=>{const u=t['network_phase']==='testnet'||t['network_phase']==='mainnet'||t['network_phase']==='both'?t['network_phase']:'both';return{'step':parseInt(t['step']??'0',0xa)||0x0,'object_type':t['object_type'],'operation':t['operation']??'','substep_count':parseInt(t['substep_count']??'0',0xa)||0x0,'depends_on':(t['depends_on']??'')['replace'](/[\[\]]/g,'')['split'](',')['map'](v=>v['trim']())['filter'](Boolean)['map'](v=>parseInt(v,0xa)||0x0),'entry_id':t['entry_id']??'','network_phase':u};})['filter'](t=>t['step']>0x0),i=extractJsonBlocks(d),j=[],k=[];for(const t of i){if(t['env']?.['network']==='mainnet')k['push'](t);else j['push'](t);}const l=parseStatusMap(d,'V-T-'),m=parseStatusMap(d,'V-M-'),n=parseStatusMap(d,'D-','Completeness\x20Checklist'),o=parseMetaTable(d),p=o['get']('project_name')??deriveProjectFromPath(a),q=o['get']('version')??'v1',r=o['get']('namespace\x20tag')??o['get']('namespace_tag')??p+'_'+q,s=h['map'](u=>u['entry_id']);return{'project_name':p,'version':q,'namespace_tag':r,'objects':e,'edges':f,'steps':h,'scenarios':g,'testnet_blocks':j,'mainnet_blocks':k,'testnet_verification':l,'mainnet_verification':m,'completeness_checklist':n,'topological_order':s};}function parseTable(a,b,c){return parseMarkdownTable(a,b)['map'](c);}function parseMarkdownTable(a,b){const c=[];for(let d=0x0;d<a['length'];d++){if(!a[d]['includes'](b))continue;let e=-0x1;for(let j=d;j<Math['min'](d+0xa,a['length']);j++){if(a[j]['trim']()['startsWith']('|')&&a[j]['includes']('|')){e=j;break;}}if(e===-0x1)break;const f=splitTableRow(a[e]);let g=e+0x1;if(g<a['length']&&/^\s*\|[\s-:|]+\|\s*$/['test'](a[g]))g++;while(g<a['length']&&a[g]['trim']()['startsWith']('|')){const l=splitTableRow(a[g]);if(l['length']===0x0)break;const m={};for(let n=0x0;n<f['length'];n++)m[f[n]['trim']()]=(l[n]??'')['trim']();c['push'](m),g++;}break;}return c;}function splitTableRow(a){const b=a['trim']();if(!b['startsWith']('|'))return[];return b['slice'](0x1,b['endsWith']('|')?-0x1:undefined)['split']('|');}function parseStatusMap(a,b,c){const d=new Map(),e=c?parseMarkdownTable(a,c):parseMarkdownTable(a,'Verification\x20Checklist');for(const f of e){const g=f['verification_id']??f['check_id']??'';if(!g['startsWith'](b))continue;const h=(f['status']??'')['trim']();d['set'](g,h['includes']('✅')||h['toLowerCase']()['includes']('pass'));}return d;}function parseMetaTable(a){const b=new Map();for(const c of parseMarkdownTable(a,'Project\x20Metadata')){const d=c['field']??'',e=c['value']??'';if(d)b['set'](d['trim'](),e['trim']());}return b;}function extractJsonBlocks(a){const b=[];let c=0x0;while(c<a['length']){if(a[c]['trim']()['startsWith']('```json')){const d=[];let e=c+0x1;while(e<a['length']&&!a[e]['trim']()['startsWith']('```')){d['push'](a[e]),e++;}try{const f=JSON['parse'](d['join']('\x0a'));if(f&&typeof f==='object'&&'operation_type'in f){const g=f['env']??{},h=f['data']??{},k=f['substeps'],l=Array['isArray'](k)?k['map'](normalizeSubstep):undefined;b['push']({'step':typeof f['step']==='number'?f['step']:0x0,'operation_type':String(f['operation_type']??''),'data':h,'env':{'network':typeof g['network']==='string'?g['network']:undefined,'replaceExistName':typeof g['replaceExistName']==='boolean'?g['replaceExistName']:undefined,'forceClaim':typeof g['forceClaim']==='boolean'?g['forceClaim']:undefined,'confirmed':typeof g['confirmed']==='boolean'?g['confirmed']:undefined,...g},'substeps':l});}}catch{}c=e+0x1;}else c++;}return b;}function normalizeSubstep(a){if(!a||typeof a!=='object')return{'id':'','inputs':[],'outputs':[]};const b=a;return{'id':String(b['id']??''),'name':typeof b['name']==='string'?b['name']:undefined,'inputs':Array['isArray'](b['inputs'])?b['inputs']['map'](String):[],'outputs':Array['isArray'](b['outputs'])?b['outputs']['map'](String):[]};}function deriveProjectFromPath(a){const b=a['split'](/[\\/]/)['pop']()??'project';return b['replace'](/_v\d+_deployment\.md$/i,'')['replace'](/\.md$/i,'');}function*walkPermissionIndices(a){if(a===null||a===undefined||typeof a!=='object')return;if(Array['isArray'](a)){for(const c of a)yield*walkPermissionIndices(c);return;}const b=a;if(typeof b['permissionIndex']==='number')yield b['permissionIndex'];if(typeof b['permission_index']==='number')yield b['permission_index'];if(typeof b['index']==='number'&&b['__isPermission']===!![])yield b['index'];for(const d of Object['values'](b))yield*walkPermissionIndices(d);}function countMachineNodes(a){const b=a['data']?.['node'],c=b?.['nodes'];return Array['isArray'](c)?c['length']:0x0;}function deriveEntryIdFromBlock(a,b){const c=a['data']['object'];let d;if(typeof c==='string')d=c;else{if(c&&typeof c==='object'){const e=c;if(typeof e['name']==='string')d=e['name'];}}if(!d)return undefined;return b['objects']['find'](f=>f['name']===d)?.['entry_id'];}export function analyzeObjectDependencyCompleteness(a){const b=[];try{const c=normalizeInput(a);if(!c)return add(b,'D-01','critical','No\x20deployment\x20document\x20provided\x20(need\x20document_path\x20or\x20deployment_doc)'),b;const d=new Set(c['objects']['map'](h=>h['entry_id'])),f=new Set();for(const h of c['edges']){f['add'](h['from']),f['add'](h['to']);}for(const i of f){if(i['endsWith'](':*'))continue;!d['has'](i)&&add(b,'D-01','critical','Object\x20\x27'+i+'\x27\x20is\x20referenced\x20in\x20§1.2\x20but\x20not\x20defined\x20in\x20§1.1','§1.2\x20Dependency\x20Edges','Add\x20\x27'+i+'\x27\x20to\x20§1.1\x20Object\x20List\x20or\x20remove\x20the\x20reference.');}for(const j of c['edges']){const k=d['has'](j['from'])||j['from']['endsWith'](':*'),l=d['has'](j['to'])||j['to']['endsWith'](':*');(!k||!l)&&add(b,'D-02','critical','Dangling\x20dependency:\x20'+j['from']+'\x20→\x20'+j['to']+'\x20(edge_kind=\x27'+j['edge_kind']+'\x27)','§1.2\x20Dependency\x20Edges','Create\x20the\x20missing\x20object\x20or\x20remove\x20the\x20edge.');}for(const m of c['objects']['filter'](n=>n['object_type']==='guard')){const n=c['testnet_blocks']['some'](p=>p['operation_type']==='guard'&&p['data']['object']?.['name']===m['name']),o=c['testnet_blocks']['some'](p=>p['operation_type']==='passport'||p['data']['gen_passport']===!![]||p['data']['object']===m['name']);if(!n)add(b,'D-08','critical','Guard\x20\x27'+m['entry_id']+'\x27\x20has\x20no\x20create\x20step\x20in\x20§3.2','§3.2\x20(guard:\x20'+m['name']+')','Add\x20a\x20guard\x20creation\x20JSON\x20block\x20for\x20\x27'+m['name']+'\x27.');if(!o)add(b,'D-08','critical','Guard\x20\x27'+m['entry_id']+'\x27\x20has\x20no\x20gen_passport\x20step\x20in\x20§3.2','§3.2\x20(guard:\x20'+m['name']+')','Add\x20a\x20passport/gen_passport\x20JSON\x20block\x20after\x20the\x20guard\x20creation\x20step.');}}catch(p){add(b,'D-01','warning','analyzeObjectDependencyCompleteness\x20failed:\x20'+p['message']);}return b;}export function analyzeSubstepCoherence(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];for(const d of['testnet','mainnet']){const e=collectSubsteps(d==='testnet'?c['testnet_blocks']:c['mainnet_blocks'],d),f=traceSubsteps({'project_prefix':c['project_name'],'version':c['version'],'network':d,'substeps':e});emitCoherenceFindings(f,d,b);}}catch(g){add(b,'D-10','warning','analyzeSubstepCoherence\x20failed:\x20'+g['message']);}return b;}function collectSubsteps(a,b){const c=[],d=b==='testnet'?'T':'M';for(const e of a){if(!e['substeps'])continue;const f=''+d+e['step'];for(const g of e['substeps']){if(!g['id'])continue;c['push']({'step_id':g['id'],'parent_step':f,'object_type':e['operation_type'],'entry_id':'','operation_type':e['operation_type'],'network':b,'input':{'data':e['data'],'input_refs':g['inputs']},'timestamp':0x0,'status':'PENDING','dependencies':{'input_refs':g['inputs'],'output_refs':g['outputs']['map'](h=>({'substep_id':g['id'],'field_path':h}))}});}}return c;}function emitCoherenceFindings(a,e,f){for(const g of a['dangling_inputs']){add(f,'D-10','critical','['+e+']\x20Dangling\x20input:\x20substep\x20\x27'+g['substep_id']+'\x27\x20references\x20missing\x20\x27'+g['missing_ref']+'\x27',e+'\x20§substeps','Ensure\x20\x27'+g['missing_ref']+'\x27\x20is\x20produced\x20by\x20an\x20earlier\x20substep.');}for(const h of a['circular_refs']){add(f,'D-10','critical','['+e+']\x20Circular\x20reference:\x20'+h['cycle']['join']('\x20→\x20'),e+'\x20§substeps','Break\x20the\x20cycle\x20by\x20removing\x20one\x20dependency.');}for(const i of a['missing_outputs']){add(f,'D-10','warning','['+e+']\x20Missing\x20output:\x20substep\x20\x27'+i['substep_id']+'\x27\x20did\x20not\x20produce\x20\x27'+i['expected_field']+'\x27',e+'\x20§substeps','Ensure\x20\x27'+i['substep_id']+'\x27\x20produces\x20\x27'+i['expected_field']+'\x27.');}for(const j of a['cross_step_breaks']){add(f,'D-10','critical','['+e+']\x20Cross-step\x20break:\x20failed\x20step\x20\x27'+j['source_step']+'\x27\x20blocks\x20\x27'+j['target_step']+'\x27',e+'\x20§substeps','Fix\x20step\x20\x27'+j['source_step']+'\x27\x20or\x20adjust\x20the\x20dependency.');}}export function analyzeNetworkConsistency(a){const c=[];try{const d=normalizeInput(a);if(!d)return[];const e=d['testnet_blocks'],f=d['mainnet_blocks'],g=d['topological_order'];if(g['length']>0x0&&e['length']>0x0)for(let h=0x0;h<e['length'];h++){const j=g[h];if(!j)break;const k=deriveEntryIdFromBlock(e[h],d);if(k&&k!==j){add(c,'D-04','critical','testnet\x20step\x20'+e[h]['step']+'\x20order\x20mismatch:\x20expected\x20\x27'+j+'\x27,\x20got\x20\x27'+k+'\x27','§3.2\x20testnet\x20JSON\x20Operation\x20Sequence','Reorder\x20testnet\x20JSON\x20blocks\x20to\x20match\x20§2\x20topological\x20order.');break;}}for(const l of e){if(l['env']['network']!=='testnet')add(c,'D-05','critical','testnet\x20step\x20'+l['step']+'\x20env.network\x20is\x20\x27'+(l['env']['network']??'(missing)')+'\x27,\x20expected\x20\x27testnet\x27','§3.2\x20step\x20'+l['step'],'Set\x20env.network\x20=\x20\x27testnet\x27\x20on\x20all\x20§3.2\x20JSON\x20blocks.');}for(const n of e){if(n['env']['replaceExistName']!==!![])add(c,'D-06','critical','testnet\x20step\x20'+n['step']+'\x20env.replaceExistName\x20is\x20\x27'+(n['env']['replaceExistName']??'(missing)')+'\x27,\x20expected\x20true','§3.2\x20step\x20'+n['step'],'Set\x20env.replaceExistName\x20=\x20true\x20on\x20all\x20§3.2\x20JSON\x20blocks\x20(testnet\x20allows\x20overwrite).');}if(e['length']!==f['length'])add(c,'D-11','critical','mainnet\x20step\x20count\x20('+f['length']+')\x20!=\x20testnet\x20step\x20count\x20('+e['length']+')','§3.2\x20vs\x20§4.2','Ensure\x20mainnet\x20JSON\x20blocks\x20correspond\x201:1\x20with\x20testnet\x20blocks.');else for(let o=0x0;o<f['length'];o++){const p=e[o],q=f[o];if(p['step']!==q['step'])add(c,'D-11','critical','mainnet\x20step\x20'+q['step']+'\x20does\x20not\x20match\x20testnet\x20step\x20'+p['step'],'§4.2\x20step\x20'+q['step'],'Ensure\x20mainnet\x20step\x20numbers\x20match\x20testnet.');if(p['operation_type']!==q['operation_type'])add(c,'D-11','critical','step\x20'+q['step']+'\x20operation_type\x20mismatch:\x20testnet=\x27'+p['operation_type']+'\x27,\x20mainnet=\x27'+q['operation_type']+'\x27','§4.2\x20step\x20'+q['step'],'Align\x20mainnet\x20operation_type\x20with\x20testnet.');}for(const r of f){if(r['env']['network']!=='mainnet')add(c,'D-12','critical','mainnet\x20step\x20'+r['step']+'\x20env.network\x20is\x20\x27'+(r['env']['network']??'(missing)')+'\x27,\x20expected\x20\x27mainnet\x27','§4.2\x20step\x20'+r['step'],'Set\x20env.network\x20=\x20\x27mainnet\x27\x20on\x20all\x20§4.2\x20JSON\x20blocks.');}for(const s of f){if(s['env']['replaceExistName']!==![]&&!s['env']['forceClaim'])add(c,'D-13','critical','mainnet\x20step\x20'+s['step']+'\x20env.replaceExistName\x20is\x20\x27'+(s['env']['replaceExistName']??'(missing)')+'\x27,\x20expected\x20false\x20(or\x20set\x20forceClaim=true)','§4.2\x20step\x20'+s['step'],'Set\x20env.replaceExistName\x20=\x20false\x20on\x20all\x20§4.2\x20JSON\x20blocks\x20(mainnet\x20must\x20not\x20overwrite).');}}catch(u){add(c,'D-04','warning','analyzeNetworkConsistency\x20failed:\x20'+u['message']);}return c;}const NAME_REGEX=/^[a-z][a-z0-9_]{2,63}$/;export function analyzeNamingConvention(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];const d=c['project_name'],e='_'+c['version'];for(const f of c['objects']){if(f['reused_from'])continue;if(!NAME_REGEX['test'](f['name']))add(b,'NAMING-01','warning','Object\x20\x27'+f['entry_id']+'\x27\x20name\x20\x27'+f['name']+'\x27\x20does\x20not\x20match\x20'+NAME_REGEX,'§1.1\x20('+f['entry_id']+')','Rename\x20to\x20match\x20^[a-z][a-z0-9_]{2,63}$\x20and\x20start\x20with\x20project\x20prefix\x20\x27'+d+'\x27.');else d&&!f['name']['startsWith'](d+'_')&&add(b,'NAMING-01','warning','Object\x20\x27'+f['entry_id']+'\x27\x20name\x20\x27'+f['name']+'\x27\x20does\x20not\x20start\x20with\x20project\x20prefix\x20\x27'+d+'_\x27','§1.1\x20('+f['entry_id']+')','Rename\x20to\x20start\x20with\x20\x27'+d+'_\x27.');e&&!f['name']['endsWith'](e)&&add(b,'NAMING-02','warning','Object\x20\x27'+f['entry_id']+'\x27\x20name\x20\x27'+f['name']+'\x27\x20is\x20missing\x20version\x20suffix\x20\x27'+e+'\x27','§1.1\x20('+f['entry_id']+')','Append\x20\x27'+e+'\x27\x20to\x20the\x20name.');}}catch(g){add(b,'NAMING-01','warning','analyzeNamingConvention\x20failed:\x20'+g['message']);}return b;}export function analyzePermissionIndexRange(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];const d=[...c['testnet_blocks'],...c['mainnet_blocks']];for(const e of d){for(const f of walkPermissionIndices(e['data'])){if(f<USER_DEFINED_PERM_INDEX_START)add(b,'D-07','critical','permissionIndex\x20'+f+'\x20<\x20'+USER_DEFINED_PERM_INDEX_START+'\x20(USER_DEFINED_PERM_INDEX_START)\x20in\x20step\x20'+e['step']+'\x20('+e['operation_type']+')',(e['env']['network']??'?')+'\x20step\x20'+e['step'],'Use\x20a\x20permissionIndex\x20>=\x20'+USER_DEFINED_PERM_INDEX_START+'.');}}for(const g of d){if(g['operation_type']!=='machine')continue;const h=countMachineNodes(g);if(h>MAX_NODE_COUNT)add(b,'D-09','critical','Machine\x20in\x20step\x20'+g['step']+'\x20has\x20'+h+'\x20nodes\x20>\x20MAX_NODE_COUNT\x20('+MAX_NODE_COUNT+')',(g['env']['network']??'?')+'\x20step\x20'+g['step'],'Reduce\x20node\x20count\x20to\x20<=\x20'+MAX_NODE_COUNT+'\x20or\x20split\x20into\x20multiple\x20Machines.');}}catch(i){add(b,'D-07','warning','analyzePermissionIndexRange\x20failed:\x20'+i['message']);}return b;}const REQUIRED_SCENARIO_KEYWORDS=['normal_order','refund','dispute','machine_publish','service_publish'];export function analyzeScenarioCoverage(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];const d=new Set();for(const f of c['scenarios']){const g=(f['scenario_id']+'\x20'+f['description'])['toLowerCase']();for(const h of REQUIRED_SCENARIO_KEYWORDS){if(g['includes'](h['toLowerCase']()))d['add'](h);}}if(d['size']<0x3){const i=REQUIRED_SCENARIO_KEYWORDS['filter'](j=>!d['has'](j));add(b,'D-03','warning','Scenario\x20matrix\x20covers\x20'+d['size']+'/'+REQUIRED_SCENARIO_KEYWORDS['length']+'\x20required\x20keywords;\x20missing:\x20'+i['join'](',\x20'),'§1.3\x20Scenario\x20Matrix','Add\x20scenarios\x20covering\x20the\x20missing\x20keywords\x20(normal_order,\x20refund,\x20dispute,\x20machine_publish,\x20service_publish).');}const e=new Set(c['objects']['map'](j=>j['entry_id']));for(const j of c['scenarios']){const k=[j['primary_object'],...j['supporting_objects']];for(const l of k){if(l['endsWith'](':*'))continue;if(!e['has'](l))add(b,'D-03','warning','Scenario\x20\x27'+j['scenario_id']+'\x27\x20references\x20undefined\x20object\x20\x27'+l+'\x27','§1.3\x20('+j['scenario_id']+')','Add\x20\x27'+l+'\x27\x20to\x20§1.1\x20or\x20fix\x20the\x20scenario\x20reference.');}}}catch(m){add(b,'D-03','warning','analyzeScenarioCoverage\x20failed:\x20'+m['message']);}return b;}const TESTNET_VERIFICATION_ITEMS=['V-T-01','V-T-02','V-T-03','V-T-04','V-T-05','V-T-06','V-T-07','V-T-08','V-T-09','V-T-10','V-T-11'],MAINNET_VERIFICATION_ITEMS=['V-M-01','V-M-02','V-M-03','V-M-04','V-M-05'],COMPLETENESS_CHECK_IDS=Array['from']({'length':0x14},(a,b)=>'D-'+String(b+0x1)['padStart'](0x2,'0'));export function analyzeVerificationChecklist(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];for(const d of TESTNET_VERIFICATION_ITEMS){if(!c['testnet_verification']['has'](d))add(b,'D-14','warning','testnet\x20verification\x20item\x20\x27'+d+'\x27\x20is\x20missing\x20from\x20§3.3','§3.3\x20testnet\x20Verification\x20Checklist','Add\x20row\x20\x27'+d+'\x27\x20to\x20§3.3.');}for(const e of MAINNET_VERIFICATION_ITEMS){if(!c['mainnet_verification']['has'](e))add(b,'D-15','warning','mainnet\x20verification\x20item\x20\x27'+e+'\x27\x20is\x20missing\x20from\x20§4.3','§4.3\x20mainnet\x20Verification\x20Checklist','Add\x20row\x20\x27'+e+'\x27\x20to\x20§4.3.');}for(const f of COMPLETENESS_CHECK_IDS){if(!c['completeness_checklist']['has'](f))add(b,'D-18','warning','completeness\x20checklist\x20item\x20\x27'+f+'\x27\x20is\x20missing\x20from\x20§6','§6\x20Completeness\x20Checklist','Add\x20row\x20\x27'+f+'\x27\x20to\x20§6.');}}catch(g){add(b,'D-14','warning','analyzeVerificationChecklist\x20failed:\x20'+g['message']);}return b;}export function analyzeDeployableReadiness(a){const b=[];try{const c=resolveRiskResult(a);if(!c)return add(b,'D-16','info','Risk\x20aggregation\x20result\x20not\x20available;\x20D-16/D-17\x20skipped\x20(provide\x20project_graph\x20with\x20puzzles,\x20or\x20set\x20deployment_doc.risk_status).',undefined,'Run\x20C2\x20risk-aggregator\x20first,\x20or\x20provide\x20deployment_doc.risk_status.'),b;const d=c['severity_summary']['CRITICAL']??0x0;if(d>0x0){const g=c['findings']['filter'](h=>h['severity']==='CRITICAL')['map'](h=>h['risk_rule_id'])['join'](',\x20');add(b,'D-16','critical',d+'\x20CRITICAL\x20risk(s)\x20remain:\x20'+g,'C2\x20risk-aggregator\x20output','Return\x20to\x20stage\x202\x20(business\x20puzzle)\x20and\x20fix\x20all\x20CRITICAL\x20risks\x20before\x20deploying.');}const e=new Set(a['user_confirmed_high_risks']??[]),f=c['findings']['filter'](h=>h['severity']==='HIGH'&&!e['has'](h['risk_rule_id']));if(f['length']>0x0){const h=f['map'](i=>i['risk_rule_id'])['join'](',\x20');add(b,'D-17','critical',f['length']+'\x20unconfirmed\x20HIGH\x20risk(s):\x20'+h,'C2\x20risk-aggregator\x20output','User\x20must\x20confirm\x20each\x20HIGH\x20risk\x20(ACCEPT_AND_PROCEED)\x20or\x20fix\x20them.');}}catch(i){add(b,'D-16','warning','analyzeDeployableReadiness\x20failed:\x20'+i['message']);}return b;}function resolveRiskResult(a){const b=a['project_graph'];if(b&&typeof b==='object'){const d=b;if(typeof d['severity_summary']==='object'&&Array['isArray'](d['findings']))return b;if(typeof d['project_prefix']==='string'&&typeof d['puzzles']==='object')try{return aggregateProjectRisks(b);}catch{}}const c=a['deployment_doc'];if(c&&c['risk_status']){const e=c['risk_critical_count']??0x0,f=c['risk_high_count']??0x0,g=[];for(let h=0x0;h<e;h++)g['push']({'risk_rule_id':'R-CRITICAL-'+h,'object_type':'service','entry_id':'*','severity':'CRITICAL','message':'(synthesized\x20from\x20deployment_doc.risk_critical_count)','fix_suggestion':'See\x20C2\x20risk-aggregator\x20report\x20for\x20details.'});for(let j=0x0;j<f;j++)g['push']({'risk_rule_id':'R-HIGH-'+j,'object_type':'service','entry_id':'*','severity':'HIGH','message':'(synthesized\x20from\x20deployment_doc.risk_high_count)','fix_suggestion':'See\x20C2\x20risk-aggregator\x20report\x20for\x20details.'});return{'namespace':{'prefix':c['project_prefix'],'version':c['version'],'industry':c['industry']},'findings':g,'severity_summary':{'CRITICAL':e,'HIGH':f,'MEDIUM':0x0,'LOW':0x0,'INFO':0x0},'status':c['risk_status'],'calibrated_at':Date['now'](),'warnings':[]};}return undefined;}function extractMachinePairs(a){const b=a['data'];if(!b)return[];const c=b['node'];if(!c||typeof c!=='object')return[];const d=c['nodes'];if(!Array['isArray'](d))return[];return d['filter'](e=>{if(!e||typeof e!=='object')return![];const f=e['pairs'];return Array['isArray'](f);})['flatMap'](e=>e['pairs']??[]);}export function analyzeMachineAndServiceReadiness(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];const d=[...c['testnet_blocks'],...c['mainnet_blocks']];for(const f of d){if(f['operation_type']!=='machine')continue;const g=extractMachinePairs(f);if(g['length']===0x0)continue;const h=g['filter'](i=>i['prev_node']==='');for(const i of h){const j=Array['isArray'](i['forwards'])?i['forwards']['length']:0x0;j===0x0&&add(b,'D-19','critical','Machine\x20in\x20step\x20'+f['step']+'\x20('+(f['env']['network']??'?')+')\x20has\x20an\x20entry\x20node\x20(prev_node=\x22\x22)\x20with\x20no\x20forwards.\x20'+'Progress\x20created\x20from\x20this\x20Machine\x20will\x20be\x20permanently\x20stuck\x20at\x20current=\x22\x22\x20(P0-2\x20root\x20cause).',(f['env']['network']??'?')+'\x20step\x20'+f['step'],'Add\x20at\x20least\x20one\x20forward\x20to\x20the\x20entry\x20node\x27s\x20pairs.\x20Example:\x20pairs:\x20[{prev_node:\x20\x22\x22,\x20forwards:\x20[{next_node:\x20\x22Ordered\x22,\x20...}]}]');}}const e=d['filter'](k=>k['operation_type']==='service');if(e['length']>0x0){const k=e['filter'](l=>{const m=l['data'];return m?.['compensation_fund_add']!=null;});k['length']===0x0&&add(b,'D-20','warning','No\x20Service\x20block\x20in\x20the\x20deployment\x20doc\x20includes\x20a\x20compensation_fund_add\x20step.\x20'+'Without\x20deposit,\x20arbitration\x20rulings\x20that\x20award\x20refunds\x20to\x20buyers\x20cannot\x20be\x20paid\x20out\x20from\x20the\x20Service.\x20'+'Industries\x20like\x20freelance\x20may\x20not\x20require\x20this\x20(info),\x20but\x20rental/travel/education\x20typically\x20do.','§3.2\x20/\x20§4.2\x20Service\x20blocks','Add\x20a\x20compensation_fund_add\x20step\x20for\x20the\x20Service\x20(e.g.,\x20data.compensation_fund_add\x20=\x20{balance:\x20<amount>}).\x20'+'Recommended:\x203-10×\x20the\x20max\x20single-order\x20amount,\x20depending\x20on\x20industry\x20(subscription:\x203×,\x20retail:\x205×,\x20rental:\x2010×).\x20See\x20P1-1\x20evaluation\x20rule.');}}catch(l){add(b,'D-19','warning','analyzeMachineAndServiceReadiness\x20failed:\x20'+l['message']);}return b;}export function scanDeployment(a){const b=[...analyzeObjectDependencyCompleteness(a),...analyzeSubstepCoherence(a),...analyzeNetworkConsistency(a),...analyzeNamingConvention(a),...analyzePermissionIndexRange(a),...analyzeScenarioCoverage(a),...analyzeVerificationChecklist(a),...analyzeDeployableReadiness(a),...analyzeMachineAndServiceReadiness(a)];return{'project_name':a['project_name'],'document_path':a['document_path'],'overall_readiness':computeReadiness(b),'findings':b,'coverage':computeCoverage(a),'checks':computeChecks(b),'scanned_at':Date['now'](),'scanner_version':DEPLOYMENT_SCANNER_VERSION};}function computeChecks(a){const b=c=>a['some'](d=>d['check_id']===c);return{'D01_object_defined':b('D-01')?'fail':'pass','D02_dependency_complete':b('D-02')?'fail':'pass','D03_scenario_covered':b('D-03')?'fail':'pass','D04_testnet_topo_order':b('D-04')?'fail':'pass','D05_testnet_network':b('D-05')?'fail':'pass','D06_testnet_replace':b('D-06')?'fail':'pass','D07_permission_index':b('D-07')?'fail':'pass','D08_guard_gen_passport':b('D-08')?'fail':'pass','D09_machine_node_count':b('D-09')?'fail':'pass','D10_substep_coherence':b('D-10')?'fail':'pass','D11_mainnet_testnet_match':b('D-11')?'fail':'pass','D12_mainnet_network':b('D-12')?'fail':'pass','D13_mainnet_replace':b('D-13')?'fail':'pass','D14_testnet_verification':b('D-14')?'fail':'pass','D15_mainnet_verification':b('D-15')?'fail':'pass','D16_no_critical_risk':b('D-16')?'fail':'pass','D17_no_high_risk':b('D-17')?'fail':'pass','D18_completeness_checklist':b('D-18')?'fail':'pass','D19_machine_entry_forward':b('D-19')?'fail':'pass','D20_service_compensation_fund':b('D-20')?'fail':'pass'};}function computeCoverage(a){const b=normalizeInput(a);if(!b)return{'objects_defined':0x0,'objects_with_scenario':0x0,'testnet_steps':0x0,'mainnet_steps':0x0,'verification_items':0x0};const c=new Set();for(const e of b['scenarios']){c['add'](e['primary_object']);for(const f of e['supporting_objects'])c['add'](f);}const d=b['objects']['filter'](g=>c['has'](g['entry_id'])||c['has'](g['object_type']+':*'))['length'];return{'objects_defined':b['objects']['length'],'objects_with_scenario':d,'testnet_steps':b['testnet_blocks']['length'],'mainnet_steps':b['mainnet_blocks']['length'],'verification_items':b['testnet_verification']['size']+b['mainnet_verification']['size']};}function computeReadiness(a){const b=a['filter'](c=>c['check_id']['startsWith']('D-'));if(b['some'](c=>c['severity']==='critical'))return'blocked';if(b['some'](c=>c['severity']==='warning'))return'warnings';return'ready';}function normalizeInput(a){if(a['deployment_doc'])return fromDeploymentDocInput(a['deployment_doc']);if(a['document_path']){if(!a100a['existsSync'](a['document_path']))return undefined;return parseDeploymentMarkdown(a['document_path']);}return undefined;}export function isReady(a){return a['overall_readiness']==='ready';}export function isBlocked(a){return a['overall_readiness']==='blocked';}export function summarizeScan(a){const b=[];b['push']('#\x20Deployment\x20Scan\x20Report\x20—\x20'+a['project_name'],''),b['push']('-\x20**Overall\x20readiness**:\x20'+a['overall_readiness']),b['push']('-\x20**Scanned\x20at**:\x20'+new Date(a['scanned_at'])['toISOString']()),b['push']('-\x20**Scanner\x20version**:\x20'+a['scanner_version']);if(a['document_path'])b['push']('-\x20**Document**:\x20'+a['document_path']);b['push']('','##\x20Coverage','','|\x20Metric\x20|\x20Count\x20|','|--------|-------|'),b['push']('|\x20Objects\x20defined\x20|\x20'+a['coverage']['objects_defined']+'\x20|'),b['push']('|\x20Objects\x20with\x20scenario\x20|\x20'+a['coverage']['objects_with_scenario']+'\x20|'),b['push']('|\x20testnet\x20steps\x20|\x20'+a['coverage']['testnet_steps']+'\x20|'),b['push']('|\x20mainnet\x20steps\x20|\x20'+a['coverage']['mainnet_steps']+'\x20|'),b['push']('|\x20verification\x20items\x20|\x20'+a['coverage']['verification_items']+'\x20|',''),b['push']('##\x20Checks\x20(D-01\x20~\x20D-20)','','|\x20Check\x20ID\x20|\x20Status\x20|','|----------|--------|');const c=Object['entries'](a['checks']);for(const [d,e]of c)b['push']('|\x20'+d+'\x20|\x20'+(e==='pass'?'✅\x20pass':'❌\x20fail')+'\x20|');b['push']('','##\x20Findings\x20('+a['findings']['length']+')','');if(a['findings']['length']===0x0)b['push']('✅\x20No\x20issues\x20detected.','');else{const g=new Map();for(const h of a['findings']){const i=g['get'](h['severity'])??[];i['push'](h),g['set'](h['severity'],i);}for(const j of['critical','warning','info']){const k=g['get'](j);if(!k||k['length']===0x0)continue;b['push']('###\x20'+j['toUpperCase']()+'\x20('+k['length']+')','');for(const l of k){b['push']('-\x20**['+l['check_id']+']**\x20'+l['message']);if(l['location'])b['push']('\x20\x20-\x20Location:\x20'+l['location']);if(l['suggestion'])b['push']('\x20\x20-\x20Suggestion:\x20'+l['suggestion']);b['push']('');}}}return b['push']('---','','*End\x20of\x20report.*'),b['join']('\x0a');}export const DEPLOYMENT_SCANNER_VERSION='2.0.0';
@@ -0,0 +1,12 @@
1
+ export type EvidenceKind = "signature_photo" | "voice_recording" | "delivery_proof" | "weather_data";
2
+ export interface EvidenceReviewInput {
3
+ kind: EvidenceKind;
4
+ hash_committed: boolean;
5
+ digital_check_passed?: boolean;
6
+ contradiction?: boolean;
7
+ }
8
+ export interface EvidenceReviewResult {
9
+ status: "auto_pass" | "auto_reject" | "manual_review";
10
+ reason: string;
11
+ }
12
+ export declare function assessEvidenceReview(input: EvidenceReviewInput): EvidenceReviewResult;
@@ -0,0 +1 @@
1
+ export function assessEvidenceReview(a){if(a['contradiction'])return{'status':'auto_reject','reason':'Contradicting\x20signal\x20detected\x20—\x20evidence\x20fails\x20trust.'};if(!a['hash_committed'])return{'status':'auto_reject','reason':'Evidence\x20hash\x20is\x20not\x20committed\x20on-chain\x20—\x20no\x20authenticity\x20anchor.'};if(a['digital_check_passed']===!![])return{'status':'auto_pass','reason':'Hash\x20anchored\x20+\x20digital\x20check\x20passed\x20—\x20evidence\x20auto-accepted.'};return{'status':'manual_review','reason':'Hash\x20anchored\x20but\x20digital\x20check\x20inconclusive\x20—\x20route\x20to\x20manual\x20review.'};}
@@ -1 +1 @@
1
- import{scanAllExamples,formatScanReport,EXAMPLES_SCANNER_VERSION}from'./examples-scanner.js';import*as a84a from'fs';import*as a84b from'path';console['log']('Examples\x20Scanner\x20v'+EXAMPLES_SCANNER_VERSION),console['log']('Scanning\x20d:/wowok/docs/examples\x20...');const result=scanAllExamples();console['log']('Loaded\x20'+result['examples']['length']+'\x20examples,\x20found\x20'+result['total_findings']+'\x20findings.');const report=formatScanReport(result),outputPath=a84b['resolve']('d:/wowok/wiki/market/GLM3/examples-scan-report.md');a84a['writeFileSync'](outputPath,report,'utf-8'),console['log']('Report\x20written\x20to\x20'+outputPath),console['log']('\x0a===\x20Per-Example\x20Summary\x20===');for(const example of result['examples']){const findings=result['findings_by_example']['get'](example['relative_path'])??[],critical=findings['filter'](a=>a['severity']==='critical')['length'],high=findings['filter'](a=>a['severity']==='high')['length'],medium=findings['filter'](a=>a['severity']==='medium')['length'];console['log'](example['relative_path']['padEnd'](0x32)+'\x20machines='+example['machine_ops']['length']+'\x20'+('progress='+example['progress_ops']['length']+'\x20guards='+example['defined_guard_names']['size']+'\x20')+('findings='+findings['length']+'\x20(C:'+critical+'\x20H:'+high+'\x20M:'+medium+')'));}console['log']('\x0a===\x20Risk\x20Rule\x20Coverage\x20===');const sortedRules=[...result['risk_rule_coverage']['entries']()]['sort']((c,d)=>c[0x0]['localeCompare'](d[0x0]));for(const [ruleId,count]of sortedRules){console['log']('\x20\x20'+ruleId['padEnd'](0xf)+'\x20'+count);}
1
+ import{scanAllExamples,formatScanReport,EXAMPLES_SCANNER_VERSION}from'./examples-scanner.js';import*as a103a from'fs';import*as a103b from'path';console['log']('Examples\x20Scanner\x20v'+EXAMPLES_SCANNER_VERSION),console['log']('Scanning\x20d:/wowok/docs/examples\x20...');const result=scanAllExamples();console['log']('Loaded\x20'+result['examples']['length']+'\x20examples,\x20found\x20'+result['total_findings']+'\x20findings.');const report=formatScanReport(result),outputPath=a103b['resolve']('d:/wowok/wiki/market/GLM3/examples-scan-report.md');a103a['writeFileSync'](outputPath,report,'utf-8'),console['log']('Report\x20written\x20to\x20'+outputPath),console['log']('\x0a===\x20Per-Example\x20Summary\x20===');for(const example of result['examples']){const findings=result['findings_by_example']['get'](example['relative_path'])??[],critical=findings['filter'](a=>a['severity']==='critical')['length'],high=findings['filter'](a=>a['severity']==='high')['length'],medium=findings['filter'](a=>a['severity']==='medium')['length'];console['log'](example['relative_path']['padEnd'](0x32)+'\x20machines='+example['machine_ops']['length']+'\x20'+('progress='+example['progress_ops']['length']+'\x20guards='+example['defined_guard_names']['size']+'\x20')+('findings='+findings['length']+'\x20(C:'+critical+'\x20H:'+high+'\x20M:'+medium+')'));}console['log']('\x0a===\x20Risk\x20Rule\x20Coverage\x20===');const sortedRules=[...result['risk_rule_coverage']['entries']()]['sort']((c,d)=>c[0x0]['localeCompare'](d[0x0]));for(const [ruleId,count]of sortedRules){console['log']('\x20\x20'+ruleId['padEnd'](0xf)+'\x20'+count);}
@@ -1 +1 @@
1
- import*as a85a from'fs';import*as a85b from'path';import{analyzeTopology}from'./machine-topology.js';import{assessMachineRisks}from'./machine-risk.js';import{runStaticChecklist}from'./machine-confirm.js';import{explainNode}from'./machine-translation.js';import{identifyCrossMachineDependency,detectCrossMachineCycle}from'./machine-context.js';export function getMachineName(a){if(typeof a['data']['object']==='string')return a['data']['object'];return a['data']['object']['name'];}const EXAMPLES_DIR=a85b['resolve']('d:/wowok/docs/examples');export function nodeDefsToMachine(a){const b=[],c=[],d=new Set();for(const e of a){!d['has'](e['name'])&&(b['push']({'name':e['name']}),d['add'](e['name']));for(const f of e['pairs']){c['push']({'prev_node':f['prev_node'],'next_node':e['name'],'threshold':f['threshold'],'forwards':f['forwards']['map'](g=>normalizeForward(g))});}}return{'nodes':b,'pairs':c};}function normalizeForward(a){const b=a['named_operator']??a['namedOperator'],c=a['permission_index']??a['permissionIndex'];let d;if(typeof a['guard']==='string')d=a['guard'];else{if(a['guard']&&typeof a['guard']==='object'){const h=a['guard'];if(typeof h['guard']==='string')d=h['guard'];}}let e;if(a['retained_submission']!==undefined&&a['retained_submission']!==null){if(typeof a['retained_submission']==='string')e=a['retained_submission'];else{if(Array['isArray'](a['retained_submission']))e=a['retained_submission'];else{if(typeof a['retained_submission']==='object'){const i=a['retained_submission'];i['retained_submission']!==undefined&&(e=i['retained_submission']);}}}}else{if(a['guard']&&typeof a['guard']==='object'){const j=a['guard'];if(j['retained_submission']!==undefined&&j['retained_submission']!==null){if(Array['isArray'](j['retained_submission']))e=j['retained_submission'];else typeof j['retained_submission']==='string'&&(e=j['retained_submission']);}}}return{'name':a['name'],'weight':a['weight'],'named_operator':b,'permission_index':c,'guard':d,'retained_submission':e};}function extractJsonBlocks(a){const b=a85a['readFileSync'](a,'utf-8'),c=b['split']('\x0a'),d=[];let e=0x0;while(e<c['length']){const f=c[e];if(f['trim']()['startsWith']('```json')){const g=[];let h=e+0x1;while(h<c['length']&&!c[h]['trim']()['startsWith']('```')){g['push'](c[h]),h++;}const k=g['join']('\x0a');try{const l=JSON['parse'](k);let m=null;if(l&&typeof l==='object'&&!Array['isArray'](l)){const n=l;if(n['tool']==='onchain_operations'&&n['data']&&typeof n['data']==='object'&&!Array['isArray'](n['data'])){const o=n['data'];typeof o['operation_type']==='string'&&(m={'operation_type':o['operation_type'],'data':o['data'],...o['env']!==undefined?{'env':o['env']}:{}});}else typeof n['operation_type']==='string'&&(m=n);}m&&typeof m['operation_type']==='string'&&d['push']({'lineStart':e+0x1,'raw':k,'json':m});}catch{}e=h+0x1;}else e++;}return d;}function extractDefinedGuardNames(a){const c=extractJsonBlocks(a),d=new Set();for(const e of c){if(e['json']['operation_type']!=='guard')continue;const f=e['json']['data'];if(!f)continue;const g=f['namedNew'],h=g?.['name'];if(h)d['add'](h);}return d;}export function loadAllExamples(a=EXAMPLES_DIR){const b=[];if(!a85a['existsSync'](a))return b;const c=a85a['readdirSync'](a,{'withFileTypes':!![]});for(const d of c){if(!d['isDirectory']())continue;const e=a85b['join'](a,d['name']),f=a85a['readdirSync'](e,{'withFileTypes':!![]});for(const g of f){if(!g['isFile']())continue;const h=a85b['join'](e,g['name']),i=d['name']+'/'+g['name'];if(g['name']['endsWith']('.md')){const j=extractMachineOpsFromMarkdown(h),k=extractProgressOpsFromMarkdown(h),l=extractDefinedGuardNames(h);if(j['length']===0x0&&k['length']===0x0&&l['size']===0x0)continue;const m=j[0x0]?.['op']['data']['description'];b['push']({'example_name':d['name'],'relative_path':i,'absolute_path':h,'machine_ops':j,'progress_ops':k,'defined_guard_names':l,'business_description':m});}else{if(g['name']['endsWith']('.json')&&g['name']['includes']('machine')){const n=a85a['readFileSync'](h,'utf-8');try{const o=JSON['parse'](n);if(!Array['isArray'](o)||o['length']===0x0)continue;const p=a85b['basename'](g['name'],'.json');b['push']({'example_name':d['name'],'relative_path':i,'absolute_path':h,'machine_ops':[{'op':{'operation_type':'machine','data':{'object':{'name':p,'replaceExistName':![]},'node':{'op':'add','nodes':o},'publish':![]},'env':{'network':'testnet'}},'line_start':0x0}],'progress_ops':[],'defined_guard_names':new Set(),'business_description':'(standalone\x20JSON:\x20'+p+')'});}catch{}}}}}return b;}function extractMachineOpsFromMarkdown(a){const c=extractJsonBlocks(a),d=[];for(const e of c){if(e['json']['operation_type']!=='machine')continue;try{const f=e['json'];if(!f['data'])continue;const g=f['data']['node']?.['nodes']&&Array['isArray'](f['data']['node']['nodes']),h=f['data']['publish']===!![];if(!g&&!h)continue;d['push']({'op':f,'line_start':e['lineStart']});}catch{}}return d;}function extractProgressOpsFromMarkdown(a){const c=extractJsonBlocks(a),d=[];for(const e of c){const f=e['json'],g=f['data'];if(!g)continue;const h=g['progress'];if(!h)continue;const i=h['operation'];if(!i||!i['next_node_name']||!i['forward'])continue;try{d['push']({'operation_type':f['operation_type'],'data':{'object':g['object'],'progress':{'operation':{'next_node_name':i['next_node_name'],'forward':i['forward']}},'submission':g['submission']},'env':{'account':f['env']?.['account'],'network':f['env']?.['network']},'_source_line':e['lineStart']});}catch{}}return d;}export function analyzeSchemaConsistency(a){return[];}export function analyzeThresholdIssues(a){const b=[];for(const {op:c,line_start:d}of a['machine_ops']){if(!c['data']['node']?.['nodes'])continue;const {nodes:e,pairs:f}=nodeDefsToMachine(c['data']['node']['nodes']),g=getMachineName(c),h=f['filter'](j=>j['prev_node']===''),i=h['length']>0x1;for(const j of f){if(j['prev_node']===''&&j['threshold']===0x0){const k=j['forwards']['length'],l=k===0x1||i;if(l)continue;b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':g,'category':'design','severity':'medium','title':'Entry\x20pair\x20with\x20threshold=0\x20and\x20multiple\x20Forwards\x20(potential\x20permission\x20bypass)','detail':'Pair\x20(prev=\x22\x22,\x20next=\x22'+j['next_node']+'\x22)\x20has\x20threshold=0\x20with\x20'+k+'\x20Forwards.\x20'+'With\x20threshold=0,\x20ANY\x20single\x20Forward\x20fires\x20→\x20migration,\x20potentially\x20bypassing\x20other\x20Forwards\x27\x20'+'permission\x20checks.\x20Set\x20threshold\x20≥\x201\x20so\x20ALL\x20intended\x20Forwards\x20must\x20agree.\x20'+'(Note:\x20single-Forward\x20Pairs\x20and\x20competing-OR\x20Pairs\x20with\x20threshold=0\x20are\x20NOT\x20flagged\x20—\x20they\x20are\x20legitimate.)','rule_id':'R-M3-09','fix':'Set\x20threshold=1\x20(or\x20higher)\x20on\x20entry\x20pair\x20targeting\x20\x22'+j['next_node']+'\x22\x20if\x20Forwards\x20represent\x20AND\x20semantics;\x20keep\x20threshold=0\x20if\x20OR\x20semantics\x20is\x20intended\x20(then\x20consider\x20splitting\x20into\x20competing\x20Pairs).'});}}for(const m of f){const n=m['forwards']['reduce']((o,p)=>o+p['weight'],0x0);m['threshold']>n&&b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':g,'category':'design','severity':'critical','title':'Threshold\x20exceeds\x20total\x20forward\x20weight\x20(unreachable)','detail':'Pair\x20(prev=\x22'+m['prev_node']+'\x22,\x20next=\x22'+m['next_node']+'\x22)\x20has\x20threshold='+m['threshold']+'\x20but\x20total\x20forward\x20weight='+n+'.\x20This\x20pair\x20can\x20NEVER\x20be\x20satisfied\x20—\x20workflow\x20dead-ends\x20here.','rule_id':'R-M2-06','fix':'Reduce\x20threshold\x20to\x20≤\x20'+n+'\x20or\x20add\x20more\x20forwards\x20with\x20weight.'});}}return b;}export function analyzeNetworkSafety(a){const b=[];for(const {op:c,line_start:d}of a['machine_ops']){const e=getMachineName(c),f=c['data']['publish']===!![],g=c['env']['network'];f&&g==='mainnet'&&b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':e,'category':'runtime','severity':'critical','title':'Direct\x20mainnet\x20publish\x20without\x20testnet\x20test','detail':'Machine\x20\x22'+e+'\x22\x20is\x20published\x20directly\x20to\x20mainnet.\x20Per\x20R-M4-02,\x20must\x20test\x20on\x20testnet\x20first.','rule_id':'R-M4-02','fix':'Set\x20env.network\x20to\x20\x22testnet\x22\x20for\x20first\x20publish,\x20run\x20end-to-end\x20test,\x20then\x20re-publish\x20on\x20mainnet.'});}return b;}export function analyzeConfirmationBypass(a){const b=[];for(const {op:c,line_start:d}of a['machine_ops']){const e=getMachineName(c),f=c['data']['publish']===!![],g=c['env']['confirmed']===!![];f&&g&&b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':e,'category':'runtime','severity':'medium','title':'confirmed=true\x20bypasses\x20user\x20confirmation\x20prompt','detail':'Machine\x20\x22'+e+'\x22\x20is\x20published\x20with\x20env.confirmed=true.\x20This\x20bypasses\x20the\x20ConfirmGate\x20user-confirmation\x20step.\x20Examples\x20should\x20demonstrate\x20the\x20two-step\x20confirmation\x20flow\x20(Phase\x201\x20prompt\x20→\x20Phase\x202\x20confirmed=true).','rule_id':'R-M4-04','fix':'Show\x20Phase\x201\x20(without\x20confirmed=true)\x20and\x20Phase\x202\x20(with\x20confirmed=true)\x20as\x20separate\x20steps\x20in\x20the\x20example.'});}return b;}export function analyzeGuardReferences(a){const b=[],c=a['defined_guard_names'];for(const {op:d,line_start:e}of a['machine_ops']){if(!d['data']['node']?.['nodes'])continue;const f=getMachineName(d),h=d['data']['publish']===!![];for(const i of d['data']['node']['nodes']){for(const j of i['pairs']){for(const k of j['forwards']){let l;if(typeof k['guard']==='string')l=k['guard'];else{if(k['guard']&&typeof k['guard']==='object'){const m=k['guard'];if(typeof m['guard']==='string')l=m['guard'];}}if(!l)continue;!c['has'](l)&&b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':e,'machine_name':f,'category':'runtime','severity':h?'critical':'high','title':'Guard\x20\x22'+l+'\x22\x20referenced\x20but\x20not\x20defined\x20in\x20example','detail':'Forward\x20\x22'+k['name']+'\x22\x20references\x20Guard\x20\x22'+l+'\x22\x20but\x20no\x20operation_type=\x22guard\x22\x20with\x20name=\x22'+l+'\x22\x20appears\x20earlier\x20in\x20'+a['relative_path']+'.\x20'+(h?'Publishing\x20will\x20fail\x20at\x20runtime.':'Will\x20fail\x20at\x20machine\x20creation.'),'rule_id':h?'R-M4-03':'R-M2-01','fix':'Add\x20a\x20guard\x20creation\x20step\x20(operation_type=\x22guard\x22)\x20with\x20name=\x22'+l+'\x22\x20BEFORE\x20the\x20machine\x20creation\x20step.'});}}}}return b;}export function analyzeCrossMachineDeps(a,b=new Map()){const c=[],d=[];for(const {op:f,line_start:g}of a['machine_ops']){if(!f['data']['node']?.['nodes'])continue;const {nodes:h,pairs:i}=nodeDefsToMachine(f['data']['node']['nodes']),j=getMachineName(f),k=identifyCrossMachineDependency(j,{'nodes':h,'pairs':i},b);d['push'](...k),k['length']>0x0&&c['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':g,'machine_name':j,'category':'cross_machine','severity':'info','title':'Machine\x20declares\x20'+k['length']+'\x20cross-Machine\x20dependencies','detail':k['map'](l=>'Forward\x20\x22'+l['dependency']['machine_a_forward']+'\x22\x20depends\x20on\x20Machine\x20\x22'+l['machine_b_id']+'\x22\x20reaching\x20node\x20\x22'+l['dependency']['machine_b_node']+'\x22')['join'](';\x20'),'rule_id':'P-M3'});}const e=detectCrossMachineCycle(d);for(const l of e){c['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':0x0,'machine_name':'(project-level)','category':'cross_machine','severity':'critical','title':'Cross-Machine\x20dependency\x20cycle\x20detected','detail':'Cycle:\x20'+l['join']('\x20→\x20'),'rule_id':'R-M2-07','fix':'Break\x20the\x20cycle\x20by\x20removing\x20one\x20of\x20the\x20dependencies\x20in\x20the\x20cycle.'});}return{'deps':d,'cycles':e,'findings':c};}export function analyzeRoundTrip(a){const b=[];for(const {op:c,line_start:d}of a['machine_ops']){if(!c['data']['node']?.['nodes'])continue;const {nodes:e,pairs:f}=nodeDefsToMachine(c['data']['node']['nodes']),g=getMachineName(c),h=analyzeTopology(e,f);h['has_cycles']&&b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':g,'category':'round_trip','severity':'critical','title':'Topology\x20analysis:\x20cycle\x20detected\x20(DAG\x20violation)','detail':'Machine\x20\x22'+g+'\x22\x20has\x20cycles:\x20'+JSON['stringify'](h['cycle_nodes']),'rule_id':'R-M1-03','fix':'Remove\x20cycles\x20—\x20Machine\x20must\x20be\x20a\x20DAG.'});const i={'network':c['env']['network']==='mainnet'?'mainnet':'testnet','testnet_test_passed':c['env']['network']!=='mainnet','published_services':new Set(),'published_guards':new Set(),'published_permissions':new Set(),'published_machines':new Set(),'published_arbitrations':new Set(),'published_rewards':new Set(),'published_allocators':new Set(),'published_repositories':new Set()};for(const p of f){for(const q of p['forwards']){if(q['guard'])i['published_guards']['add'](q['guard']);}}const j={'nodes':e,'pairs':f,'b_published':c['data']['publish']===!![]},k=assessMachineRisks(j,i),l=k['detected_risks']['filter'](s=>s['severity']==='critical');if(l['length']>0x0)for(const s of l){b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':g,'category':'round_trip','severity':'critical','title':'Risk\x20assessment:\x20'+s['rule_id']+'\x20('+s['severity']+')','detail':s['detail'],'rule_id':s['rule_id']});}const m={'nodes':e,'pairs':f,'name':g},n=runStaticChecklist(m),o=n['failed_items']['filter'](t=>['C-01','C-03','C-06','C-10']['includes'](t['id']));for(const t of o){b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':g,'category':'round_trip','severity':'high','title':'Checklist\x20'+t['id']+'\x20failed:\x20'+t['description'],'detail':t['detail']??'(no\x20detail)','rule_id':t['id']});}for(const u of e){const v=f['filter'](y=>y['prev_node']===u['name']),w={'name':u['name'],'pairs':v,'all_pairs':f},x=explainNode(w);(!x['name']||x['pairs']['length']!==v['length'])&&b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':g,'category':'round_trip','severity':'medium','title':'Round-trip\x20mismatch\x20for\x20node\x20\x22'+u['name']+'\x22','detail':'explainNode\x20produced\x20inconsistent\x20output:\x20name=\x22'+x['name']+'\x22,\x20pairs_count='+x['pairs']['length']+'\x20(expected\x20'+v['length']+')','rule_id':'RT-001'});}}return b;}export function analyzeProgressOps(a){const b=[],c=new Set();let d='(none)';for(const {op:e}of a['machine_ops']){if(!e['data']['node']?.['nodes'])continue;d=getMachineName(e);const {pairs:f}=nodeDefsToMachine(e['data']['node']['nodes']);for(const g of f){c['add'](g['next_node']+'::'+g['forwards']['map'](h=>h['name'])['join']('|'));for(const h of g['forwards']){c['add'](g['next_node']+'::'+h['name']);}}}for(const i of a['progress_ops']){const j=i['data']['progress']?.['operation'];if(!j)continue;const k=j['next_node_name']+'::'+j['forward'],l=c['has'](k);if(!l){const m=[...c]['some'](n=>n['endsWith']('::'+j['forward']));!m?b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':i['_source_line']??0x0,'machine_name':d,'category':'progress','severity':'high','title':'Progress\x20references\x20unknown\x20forward\x20\x22'+j['forward']+'\x22','detail':'Progress\x20op\x20references\x20forward\x20\x22'+j['forward']+'\x22\x20but\x20no\x20such\x20forward\x20exists\x20in\x20machine\x20\x22'+d+'\x22.','rule_id':'R-M3-04','fix':'Verify\x20forward\x20name\x20matches\x20one\x20defined\x20in\x20the\x20Machine.'}):b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':i['_source_line']??0x0,'machine_name':d,'category':'progress','severity':'medium','title':'Progress\x20forward\x20\x22'+j['forward']+'\x22\x20doesn\x27t\x20lead\x20to\x20\x22'+j['next_node_name']+'\x22','detail':'Forward\x20\x22'+j['forward']+'\x22\x20exists\x20but\x20doesn\x27t\x20target\x20node\x20\x22'+j['next_node_name']+'\x22.','rule_id':'R-M3-05','fix':'Correct\x20next_node_name\x20to\x20match\x20the\x20forward\x27s\x20target.'});}}return b;}export function analyzePublishStep(a){const b=[],c=a['machine_ops']['some'](({op:e})=>e['data']['publish']===!![]),d=a['progress_ops']['length']>0x0;return d&&!c&&b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':0x0,'machine_name':'(file-level)','category':'runtime','severity':'high','title':'Progress\x20operations\x20present\x20but\x20no\x20`publish:\x20true`\x20step','detail':'Example\x20has\x20'+a['progress_ops']['length']+'\x20progress\x20operations\x20but\x20no\x20machine\x20operation\x20with\x20publish=true.\x20Progress::new\x20will\x20fail\x20at\x20runtime\x20(machine\x20not\x20published).','rule_id':'R-M4-01','fix':'Add\x20a\x20publish\x20step\x20(or\x20set\x20data.publish=true\x20on\x20the\x20machine\x20creation\x20operation).'}),b;}export function analyzeRiskRuleCoverage(a){const b=new Map();let c=0x0;const d=[...analyzeSchemaConsistency(a),...analyzeThresholdIssues(a),...analyzeNetworkSafety(a),...analyzeConfirmationBypass(a),...analyzeGuardReferences(a),...analyzeRoundTrip(a),...analyzeProgressOps(a),...analyzePublishStep(a)];for(const e of d){e['rule_id']&&(b['set'](e['rule_id'],(b['get'](e['rule_id'])??0x0)+0x1),c++);}return{'ruleCounts':b,'totalFindings':c};}export function scanAllExamples(a=EXAMPLES_DIR){const b=loadAllExamples(a),c=new Map(),d=new Map(),e=new Map(),g=new Map();let h=0x0;for(const i of b){const j=[];j['push'](...analyzeSchemaConsistency(i)),j['push'](...analyzeThresholdIssues(i)),j['push'](...analyzeNetworkSafety(i)),j['push'](...analyzeConfirmationBypass(i)),j['push'](...analyzeGuardReferences(i));const k=analyzeCrossMachineDeps(i);j['push'](...k['findings']),j['push'](...analyzeRoundTrip(i)),j['push'](...analyzeProgressOps(i)),j['push'](...analyzePublishStep(i)),c['set'](i['relative_path'],j);for(const l of j){const m=d['get'](l['category'])??[];m['push'](l),d['set'](l['category'],m);const n=e['get'](l['severity'])??[];n['push'](l),e['set'](l['severity'],n),l['rule_id']&&g['set'](l['rule_id'],(g['get'](l['rule_id'])??0x0)+0x1),h++;}}return{'examples':b,'findings_by_example':c,'findings_by_category':d,'findings_by_severity':e,'total_findings':h,'risk_rule_coverage':g};}export function formatScanReport(a){const b=[];b['push']('#\x20Examples\x20Scan\x20Report\x20—\x20d:\x5cwowok\x5cdocs\x5cexamples'),b['push'](''),b['push']('>\x20Auto-generated\x20by\x20`examples-scanner.ts`\x20—\x20comprehensive\x20scan\x20of\x20all'),b['push']('>\x20machine/progress\x20JSON\x20in\x205\x20example\x20directories\x20for\x20design\x20and\x20runtime\x20problems.'),b['push'](''),b['push']('##\x20Summary'),b['push'](''),b['push']('-\x20**Examples\x20scanned**:\x20'+a['examples']['length']),b['push']('-\x20**Total\x20findings**:\x20'+a['total_findings']),b['push'](''),b['push']('###\x20Findings\x20by\x20Severity'),b['push'](''),b['push']('|\x20Severity\x20|\x20Count\x20|'),b['push']('|----------|-------|');const c=['critical','high','medium','low','info'];for(const j of c){const k=a['findings_by_severity']['get'](j)?.['length']??0x0;b['push']('|\x20'+j+'\x20|\x20'+k+'\x20|');}b['push'](''),b['push']('###\x20Findings\x20by\x20Category'),b['push'](''),b['push']('|\x20Category\x20|\x20Count\x20|'),b['push']('|----------|-------|');const d=['schema_consistency','design','runtime','cross_machine','round_trip','progress','risk_rule'];for(const l of d){const m=a['findings_by_category']['get'](l)?.['length']??0x0;b['push']('|\x20'+l+'\x20|\x20'+m+'\x20|');}b['push'](''),b['push']('###\x20Risk\x20Rule\x20Coverage\x20(which\x20rules\x20fired\x20across\x20examples)'),b['push'](''),b['push']('|\x20Rule\x20ID\x20|\x20Total\x20Hits\x20|'),b['push']('|---------|-----------|');const e=[...a['risk_rule_coverage']['entries']()]['sort']((n,o)=>n[0x0]['localeCompare'](o[0x0]));for(const [n,o]of e){b['push']('|\x20'+n+'\x20|\x20'+o+'\x20|');}b['push'](''),b['push']('##\x20Per-Example\x20Findings'),b['push']('');for(const p of a['examples']){const q=a['findings_by_example']['get'](p['relative_path'])??[];b['push']('###\x20'+p['example_name']+'\x20—\x20`'+p['relative_path']+'`'),b['push'](''),b['push']('-\x20**Source**:\x20`'+p['relative_path']+'`'),b['push']('-\x20**Machine\x20operations**:\x20'+p['machine_ops']['length']),b['push']('-\x20**Progress\x20operations**:\x20'+p['progress_ops']['length']),b['push']('-\x20**Defined\x20guards**:\x20'+p['defined_guard_names']['size']);p['business_description']&&b['push']('-\x20**Business\x20description**:\x20'+p['business_description']);b['push']('-\x20**Findings**:\x20'+q['length']),b['push']('');if(q['length']===0x0){b['push']('✅\x20No\x20issues\x20detected.'),b['push']('');continue;}const r=new Map();for(const s of q){const t=r['get'](s['severity'])??[];t['push'](s),r['set'](s['severity'],t);}for(const u of c){const v=r['get'](u)??[];if(v['length']===0x0)continue;b['push']('####\x20'+u['toUpperCase']()+'\x20('+v['length']+')'),b['push']('');for(const w of v){b['push']('-\x20**['+(w['rule_id']??'—')+']\x20'+w['title']+'**\x20(line\x20'+w['line']+')'),b['push']('\x20\x20-\x20'+w['detail']),w['fix']&&b['push']('\x20\x20-\x20**Fix**:\x20'+w['fix']),b['push']('');}}}b['push']('##\x20Cross-Cutting\x20Patterns'),b['push']('');const g=a['findings_by_category']['get']('schema_consistency')??[];g['length']===0x0&&(b['push']('###\x20Schema\x20Consistency\x20—\x20No\x20Issues\x20(camelCase\x20is\x20canonical)'),b['push'](''),b['push']('The\x20previous\x20SCHEMA-001/002/003/004\x20rules\x20have\x20been\x20REMOVED\x20(2026-07-19).'),b['push'](''),b['push']('**Reason**:\x20Verification\x20against\x20MCP\x20schema\x20(`d:\x5cwowok\x5cagent\x5cmcp\x5csrc`)\x20confirmed\x20that:'),b['push']('-\x20`MachineForwardSchema`\x20accepts\x20`namedOperator`,\x20`permissionIndex`\x20(camelCase)'),b['push']('-\x20`MachineForwardGuardSchema`\x20is\x20an\x20OBJECT\x20`{\x20guard:\x20string,\x20retained_submission?:\x20number[]\x20}`\x20(NOT\x20a\x20flat\x20string)'),b['push']('-\x20`NamedObjectSchema`\x20accepts\x20`replaceExistName`,\x20`onChain`\x20(camelCase)'),b['push'](''),b['push']('Source\x20examples\x20using\x20camelCase\x20are\x20therefore\x20CORRECT\x20per\x20MCP\x20schema\x20—\x20the\x20previous\x20rules\x20were\x20false\x20positives.'),b['push'](''));const h=(a['findings_by_category']['get']('design')??[])['filter'](x=>x['rule_id']==='R-M3-09');if(h['length']>0x0){b['push']('###\x20Threshold=0\x20on\x20Multi-Forward\x20Entry\x20Pairs\x20(R-M3-09)'),b['push'](''),b['push']('Found\x20'+h['length']+'\x20multi-Forward\x20entry\x20pairs\x20with\x20threshold=0\x20across\x20examples.'),b['push'](''),b['push']('**Detection\x20logic**\x20(refined\x202026-07-19):'),b['push']('-\x20Single-Forward\x20Pair\x20with\x20threshold=0\x20→\x20**NOT\x20flagged**\x20(legitimate:\x20single\x20execution\x20triggers\x20migration\x20regardless\x20of\x20threshold)'),b['push']('-\x20Competing-OR\x20Pairs\x20(multiple\x20Pairs\x20share\x20prev_node=\x22\x22)\x20with\x20threshold=0\x20→\x20**NOT\x20flagged**\x20(legitimate\x20OR\x20semantics)'),b['push']('-\x20Multi-Forward\x20Pair\x20with\x20threshold=0\x20AND\x20no\x20competing\x20siblings\x20→\x20**FLAGGED**\x20(potential\x20permission\x20bypass:\x20any\x20single\x20Forward\x20fires\x20→\x20migration)'),b['push']('');const x=[...new Set(h['map'](y=>y['source_file']))];b['push']('**Affected\x20source\x20files**:\x20'+x['map'](y=>'`'+y+'`')['join'](',\x20')+'.'),b['push'](''),b['push']('**Fix**:\x20Set\x20threshold=1\x20(or\x20higher)\x20if\x20Forwards\x20represent\x20AND\x20semantics;\x20keep\x20threshold=0\x20only\x20if\x20OR\x20semantics\x20is\x20intended\x20(then\x20consider\x20splitting\x20into\x20competing\x20Pairs).'),b['push']('');}else b['push']('###\x20Threshold=0\x20on\x20Entry\x20Pairs\x20—\x20No\x20Issues'),b['push'](''),b['push']('All\x20entry\x20pairs\x20with\x20threshold=0\x20fall\x20into\x20legitimate\x20categories\x20(single-Forward\x20or\x20competing-OR).'),b['push']('');const i=(a['findings_by_category']['get']('runtime')??[])['filter'](y=>y['rule_id']==='R-M4-02');return i['length']>0x0&&(b['push']('###\x20Direct\x20Mainnet\x20Publish\x20(R-M4-02)'),b['push'](''),b['push']('Found\x20'+i['length']+'\x20examples\x20publishing\x20directly\x20to\x20mainnet\x20without\x20testnet\x20test.'),b['push'](''),b['push']('**Affected\x20examples**:\x20MyShop,\x20MyShop_Advanced.'),b['push'](''),b['push']('**Fix**:\x20Add\x20a\x20testnet\x20publish\x20step\x20before\x20mainnet,\x20or\x20change\x20the\x20network\x20to\x20testnet\x20for\x20examples.'),b['push']('')),b['push']('##\x20Recommendations\x20for\x20Linter\x20&\x20Cognition\x20Closure'),b['push'](''),b['push']('Based\x20on\x20the\x20findings,\x20the\x20following\x20linter\x20rules\x20and\x20cognition\x20improvements\x20are\x20recommended:'),b['push'](''),b['push']('1.\x20**REMOVED\x20SCHEMA-001/002/003/004**\x20(2026-07-19):\x20These\x20rules\x20incorrectly\x20assumed\x20SDK\x20snake_case\x20as\x20the\x20standard.\x20MCP\x20schema\x20actually\x20accepts\x20camelCase\x20(`namedOperator`,\x20`permissionIndex`,\x20`replaceExistName`)\x20and\x20nested\x20Guard\x20object\x20form.\x20Examples\x20are\x20correct\x20as-is.'),b['push']('2.\x20**REFACTORED\x20R-M3-02\x20→\x20R-M3-09**\x20(2026-07-19,\x20then\x202026-07-20):\x20Original\x20R-M3-02\x20(threshold=0)\x20conflicted\x20with\x20machine-risk.ts\x27s\x20R-M3-02\x20(permissionIndex\x20out\x20of\x20bounds).\x20Initially\x20renamed\x20to\x20R-M3-06,\x20but\x20that\x20also\x20collided\x20with\x20machine-risk.ts\x27s\x20R-M3-06\x20(Permission\x20game\x20imbalance).\x20Final\x20rename:\x20R-M3-09.\x20Logic\x20also\x20refined:\x20single-Forward\x20and\x20competing-OR\x20threshold=0\x20cases\x20are\x20now\x20exempt.'),b['push']('3.\x20**Reinforce\x20R-M4-03**:\x20Guard\x20must\x20be\x20created\x20before\x20Machine\x20publish.\x20Examples\x20should\x20include\x20guard\x20creation\x20step\x20(operation_type=\x22guard\x22)\x20with\x20matching\x20name\x20before\x20machine\x20creation.'),b['push']('4.\x20**Add\x20lint\x20rule**\x20for\x20`confirmed:\x20true`\x20+\x20`publish:\x20true`\x20combination\x20without\x20showing\x20the\x20Phase\x201\x20confirmation\x20prompt\x20first.'),b['push']('5.\x20**IMPLEMENTED**:\x20R-M3-08\x20(permissionIndex\x20<\x201000)\x20rule\x20added\x20to\x20machine-risk.ts,\x20and\x20C-11\x20checklist\x20item\x20added\x20to\x20machine-confirm.ts\x20(2026-07-20).\x20Both\x20enforce\x20the\x20on-chain\x20USER_DEFINED_PERM_INDEX_START\x20=\x201000\x20hard\x20constraint\x20(see\x20doc\x2006\x20§4.4).'),b['push'](''),b['push']('---'),b['push'](''),b['push']('*End\x20of\x20report.*'),b['join']('\x0a');}export const EXAMPLES_SCANNER_VERSION='1.0.0';
1
+ import*as a104a from'fs';import*as a104b from'path';import{analyzeTopology}from'./machine-topology.js';import{assessMachineRisks}from'./machine-risk.js';import{runStaticChecklist}from'./machine-confirm.js';import{explainNode}from'./machine-translation.js';import{identifyCrossMachineDependency,detectCrossMachineCycle}from'./machine-context.js';export function getMachineName(a){if(typeof a['data']['object']==='string')return a['data']['object'];return a['data']['object']['name'];}const EXAMPLES_DIR=a104b['resolve']('d:/wowok/docs/examples');export function nodeDefsToMachine(a){const b=[],c=[],d=new Set();for(const e of a){!d['has'](e['name'])&&(b['push']({'name':e['name']}),d['add'](e['name']));for(const f of e['pairs']){c['push']({'prev_node':f['prev_node'],'next_node':e['name'],'threshold':f['threshold'],'forwards':f['forwards']['map'](g=>normalizeForward(g))});}}return{'nodes':b,'pairs':c};}function normalizeForward(a){const b=a['named_operator']??a['namedOperator'],c=a['permission_index']??a['permissionIndex'];let d;if(typeof a['guard']==='string')d=a['guard'];else{if(a['guard']&&typeof a['guard']==='object'){const h=a['guard'];if(typeof h['guard']==='string')d=h['guard'];}}let e;if(a['retained_submission']!==undefined&&a['retained_submission']!==null){if(typeof a['retained_submission']==='string')e=a['retained_submission'];else{if(Array['isArray'](a['retained_submission']))e=a['retained_submission'];else{if(typeof a['retained_submission']==='object'){const i=a['retained_submission'];i['retained_submission']!==undefined&&(e=i['retained_submission']);}}}}else{if(a['guard']&&typeof a['guard']==='object'){const j=a['guard'];if(j['retained_submission']!==undefined&&j['retained_submission']!==null){if(Array['isArray'](j['retained_submission']))e=j['retained_submission'];else typeof j['retained_submission']==='string'&&(e=j['retained_submission']);}}}return{'name':a['name'],'weight':a['weight'],'named_operator':b,'permission_index':c,'guard':d,'retained_submission':e};}function extractJsonBlocks(a){const b=a104a['readFileSync'](a,'utf-8'),c=b['split']('\x0a'),d=[];let e=0x0;while(e<c['length']){const f=c[e];if(f['trim']()['startsWith']('```json')){const g=[];let h=e+0x1;while(h<c['length']&&!c[h]['trim']()['startsWith']('```')){g['push'](c[h]),h++;}const k=g['join']('\x0a');try{const l=JSON['parse'](k);let m=null;if(l&&typeof l==='object'&&!Array['isArray'](l)){const n=l;if(n['tool']==='onchain_operations'&&n['data']&&typeof n['data']==='object'&&!Array['isArray'](n['data'])){const o=n['data'];typeof o['operation_type']==='string'&&(m={'operation_type':o['operation_type'],'data':o['data'],...o['env']!==undefined?{'env':o['env']}:{}});}else typeof n['operation_type']==='string'&&(m=n);}m&&typeof m['operation_type']==='string'&&d['push']({'lineStart':e+0x1,'raw':k,'json':m});}catch{}e=h+0x1;}else e++;}return d;}function extractDefinedGuardNames(a){const c=extractJsonBlocks(a),d=new Set();for(const e of c){if(e['json']['operation_type']!=='guard')continue;const f=e['json']['data'];if(!f)continue;const g=f['namedNew'],h=g?.['name'];if(h)d['add'](h);}return d;}export function loadAllExamples(a=EXAMPLES_DIR){const b=[];if(!a104a['existsSync'](a))return b;const c=a104a['readdirSync'](a,{'withFileTypes':!![]});for(const d of c){if(!d['isDirectory']())continue;const e=a104b['join'](a,d['name']),f=a104a['readdirSync'](e,{'withFileTypes':!![]});for(const g of f){if(!g['isFile']())continue;const h=a104b['join'](e,g['name']),i=d['name']+'/'+g['name'];if(g['name']['endsWith']('.md')){const j=extractMachineOpsFromMarkdown(h),k=extractProgressOpsFromMarkdown(h),l=extractDefinedGuardNames(h);if(j['length']===0x0&&k['length']===0x0&&l['size']===0x0)continue;const m=j[0x0]?.['op']['data']['description'];b['push']({'example_name':d['name'],'relative_path':i,'absolute_path':h,'machine_ops':j,'progress_ops':k,'defined_guard_names':l,'business_description':m});}else{if(g['name']['endsWith']('.json')&&g['name']['includes']('machine')){const n=a104a['readFileSync'](h,'utf-8');try{const o=JSON['parse'](n);if(!Array['isArray'](o)||o['length']===0x0)continue;const p=a104b['basename'](g['name'],'.json');b['push']({'example_name':d['name'],'relative_path':i,'absolute_path':h,'machine_ops':[{'op':{'operation_type':'machine','data':{'object':{'name':p,'replaceExistName':![]},'node':{'op':'add','nodes':o},'publish':![]},'env':{'network':'testnet'}},'line_start':0x0}],'progress_ops':[],'defined_guard_names':new Set(),'business_description':'(standalone\x20JSON:\x20'+p+')'});}catch{}}}}}return b;}function extractMachineOpsFromMarkdown(a){const c=extractJsonBlocks(a),d=[];for(const e of c){if(e['json']['operation_type']!=='machine')continue;try{const f=e['json'];if(!f['data'])continue;const g=f['data']['node']?.['nodes']&&Array['isArray'](f['data']['node']['nodes']),h=f['data']['publish']===!![];if(!g&&!h)continue;d['push']({'op':f,'line_start':e['lineStart']});}catch{}}return d;}function extractProgressOpsFromMarkdown(a){const c=extractJsonBlocks(a),d=[];for(const e of c){const f=e['json'],g=f['data'];if(!g)continue;const h=g['progress'];if(!h)continue;const i=h['operation'];if(!i||!i['next_node_name']||!i['forward'])continue;try{d['push']({'operation_type':f['operation_type'],'data':{'object':g['object'],'progress':{'operation':{'next_node_name':i['next_node_name'],'forward':i['forward']}},'submission':g['submission']},'env':{'account':f['env']?.['account'],'network':f['env']?.['network']},'_source_line':e['lineStart']});}catch{}}return d;}export function analyzeSchemaConsistency(a){return[];}export function analyzeThresholdIssues(a){const b=[];for(const {op:c,line_start:d}of a['machine_ops']){if(!c['data']['node']?.['nodes'])continue;const {nodes:e,pairs:f}=nodeDefsToMachine(c['data']['node']['nodes']),g=getMachineName(c),h=f['filter'](j=>j['prev_node']===''),i=h['length']>0x1;for(const j of f){if(j['prev_node']===''&&j['threshold']===0x0){const k=j['forwards']['length'],l=k===0x1||i;if(l)continue;b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':g,'category':'design','severity':'medium','title':'Entry\x20pair\x20with\x20threshold=0\x20and\x20multiple\x20Forwards\x20(potential\x20permission\x20bypass)','detail':'Pair\x20(prev=\x22\x22,\x20next=\x22'+j['next_node']+'\x22)\x20has\x20threshold=0\x20with\x20'+k+'\x20Forwards.\x20'+'With\x20threshold=0,\x20ANY\x20single\x20Forward\x20fires\x20→\x20migration,\x20potentially\x20bypassing\x20other\x20Forwards\x27\x20'+'permission\x20checks.\x20Set\x20threshold\x20≥\x201\x20so\x20ALL\x20intended\x20Forwards\x20must\x20agree.\x20'+'(Note:\x20single-Forward\x20Pairs\x20and\x20competing-OR\x20Pairs\x20with\x20threshold=0\x20are\x20NOT\x20flagged\x20—\x20they\x20are\x20legitimate.)','rule_id':'R-M3-09','fix':'Set\x20threshold=1\x20(or\x20higher)\x20on\x20entry\x20pair\x20targeting\x20\x22'+j['next_node']+'\x22\x20if\x20Forwards\x20represent\x20AND\x20semantics;\x20keep\x20threshold=0\x20if\x20OR\x20semantics\x20is\x20intended\x20(then\x20consider\x20splitting\x20into\x20competing\x20Pairs).'});}}for(const m of f){const n=m['forwards']['reduce']((o,p)=>o+p['weight'],0x0);m['threshold']>n&&b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':g,'category':'design','severity':'critical','title':'Threshold\x20exceeds\x20total\x20forward\x20weight\x20(unreachable)','detail':'Pair\x20(prev=\x22'+m['prev_node']+'\x22,\x20next=\x22'+m['next_node']+'\x22)\x20has\x20threshold='+m['threshold']+'\x20but\x20total\x20forward\x20weight='+n+'.\x20This\x20pair\x20can\x20NEVER\x20be\x20satisfied\x20—\x20workflow\x20dead-ends\x20here.','rule_id':'R-M2-06','fix':'Reduce\x20threshold\x20to\x20≤\x20'+n+'\x20or\x20add\x20more\x20forwards\x20with\x20weight.'});}}return b;}export function analyzeNetworkSafety(a){const b=[];for(const {op:c,line_start:d}of a['machine_ops']){const e=getMachineName(c),f=c['data']['publish']===!![],g=c['env']['network'];f&&g==='mainnet'&&b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':e,'category':'runtime','severity':'critical','title':'Direct\x20mainnet\x20publish\x20without\x20testnet\x20test','detail':'Machine\x20\x22'+e+'\x22\x20is\x20published\x20directly\x20to\x20mainnet.\x20Per\x20R-M4-02,\x20must\x20test\x20on\x20testnet\x20first.','rule_id':'R-M4-02','fix':'Set\x20env.network\x20to\x20\x22testnet\x22\x20for\x20first\x20publish,\x20run\x20end-to-end\x20test,\x20then\x20re-publish\x20on\x20mainnet.'});}return b;}export function analyzeConfirmationBypass(a){const b=[];for(const {op:c,line_start:d}of a['machine_ops']){const e=getMachineName(c),f=c['data']['publish']===!![],g=c['env']['confirmed']===!![];f&&g&&b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':e,'category':'runtime','severity':'medium','title':'confirmed=true\x20bypasses\x20user\x20confirmation\x20prompt','detail':'Machine\x20\x22'+e+'\x22\x20is\x20published\x20with\x20env.confirmed=true.\x20This\x20bypasses\x20the\x20ConfirmGate\x20user-confirmation\x20step.\x20Examples\x20should\x20demonstrate\x20the\x20two-step\x20confirmation\x20flow\x20(Phase\x201\x20prompt\x20→\x20Phase\x202\x20confirmed=true).','rule_id':'R-M4-04','fix':'Show\x20Phase\x201\x20(without\x20confirmed=true)\x20and\x20Phase\x202\x20(with\x20confirmed=true)\x20as\x20separate\x20steps\x20in\x20the\x20example.'});}return b;}export function analyzeGuardReferences(a){const b=[],c=a['defined_guard_names'];for(const {op:d,line_start:e}of a['machine_ops']){if(!d['data']['node']?.['nodes'])continue;const f=getMachineName(d),h=d['data']['publish']===!![];for(const i of d['data']['node']['nodes']){for(const j of i['pairs']){for(const k of j['forwards']){let l;if(typeof k['guard']==='string')l=k['guard'];else{if(k['guard']&&typeof k['guard']==='object'){const m=k['guard'];if(typeof m['guard']==='string')l=m['guard'];}}if(!l)continue;!c['has'](l)&&b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':e,'machine_name':f,'category':'runtime','severity':h?'critical':'high','title':'Guard\x20\x22'+l+'\x22\x20referenced\x20but\x20not\x20defined\x20in\x20example','detail':'Forward\x20\x22'+k['name']+'\x22\x20references\x20Guard\x20\x22'+l+'\x22\x20but\x20no\x20operation_type=\x22guard\x22\x20with\x20name=\x22'+l+'\x22\x20appears\x20earlier\x20in\x20'+a['relative_path']+'.\x20'+(h?'Publishing\x20will\x20fail\x20at\x20runtime.':'Will\x20fail\x20at\x20machine\x20creation.'),'rule_id':h?'R-M4-03':'R-M2-01','fix':'Add\x20a\x20guard\x20creation\x20step\x20(operation_type=\x22guard\x22)\x20with\x20name=\x22'+l+'\x22\x20BEFORE\x20the\x20machine\x20creation\x20step.'});}}}}return b;}export function analyzeCrossMachineDeps(a,b=new Map()){const c=[],d=[];for(const {op:f,line_start:g}of a['machine_ops']){if(!f['data']['node']?.['nodes'])continue;const {nodes:h,pairs:i}=nodeDefsToMachine(f['data']['node']['nodes']),j=getMachineName(f),k=identifyCrossMachineDependency(j,{'nodes':h,'pairs':i},b);d['push'](...k),k['length']>0x0&&c['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':g,'machine_name':j,'category':'cross_machine','severity':'info','title':'Machine\x20declares\x20'+k['length']+'\x20cross-Machine\x20dependencies','detail':k['map'](l=>'Forward\x20\x22'+l['dependency']['machine_a_forward']+'\x22\x20depends\x20on\x20Machine\x20\x22'+l['machine_b_id']+'\x22\x20reaching\x20node\x20\x22'+l['dependency']['machine_b_node']+'\x22')['join'](';\x20'),'rule_id':'P-M3'});}const e=detectCrossMachineCycle(d);for(const l of e){c['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':0x0,'machine_name':'(project-level)','category':'cross_machine','severity':'critical','title':'Cross-Machine\x20dependency\x20cycle\x20detected','detail':'Cycle:\x20'+l['join']('\x20→\x20'),'rule_id':'R-M2-07','fix':'Break\x20the\x20cycle\x20by\x20removing\x20one\x20of\x20the\x20dependencies\x20in\x20the\x20cycle.'});}return{'deps':d,'cycles':e,'findings':c};}export function analyzeRoundTrip(a){const b=[];for(const {op:c,line_start:d}of a['machine_ops']){if(!c['data']['node']?.['nodes'])continue;const {nodes:e,pairs:f}=nodeDefsToMachine(c['data']['node']['nodes']),g=getMachineName(c),h=analyzeTopology(e,f);h['has_cycles']&&b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':g,'category':'round_trip','severity':'critical','title':'Topology\x20analysis:\x20cycle\x20detected\x20(DAG\x20violation)','detail':'Machine\x20\x22'+g+'\x22\x20has\x20cycles:\x20'+JSON['stringify'](h['cycle_nodes']),'rule_id':'R-M1-03','fix':'Remove\x20cycles\x20—\x20Machine\x20must\x20be\x20a\x20DAG.'});const i={'network':c['env']['network']==='mainnet'?'mainnet':'testnet','testnet_test_passed':c['env']['network']!=='mainnet','published_services':new Set(),'published_guards':new Set(),'published_permissions':new Set(),'published_machines':new Set(),'published_arbitrations':new Set(),'published_rewards':new Set(),'published_allocators':new Set(),'published_repositories':new Set()};for(const p of f){for(const q of p['forwards']){if(q['guard'])i['published_guards']['add'](q['guard']);}}const j={'nodes':e,'pairs':f,'b_published':c['data']['publish']===!![]},k=assessMachineRisks(j,i),l=k['detected_risks']['filter'](s=>s['severity']==='critical');if(l['length']>0x0)for(const s of l){b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':g,'category':'round_trip','severity':'critical','title':'Risk\x20assessment:\x20'+s['rule_id']+'\x20('+s['severity']+')','detail':s['detail'],'rule_id':s['rule_id']});}const m={'nodes':e,'pairs':f,'name':g},n=runStaticChecklist(m),o=n['failed_items']['filter'](t=>['C-01','C-03','C-06','C-10']['includes'](t['id']));for(const t of o){b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':g,'category':'round_trip','severity':'high','title':'Checklist\x20'+t['id']+'\x20failed:\x20'+t['description'],'detail':t['detail']??'(no\x20detail)','rule_id':t['id']});}for(const u of e){const v=f['filter'](y=>y['prev_node']===u['name']),w={'name':u['name'],'pairs':v,'all_pairs':f},x=explainNode(w);(!x['name']||x['pairs']['length']!==v['length'])&&b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':g,'category':'round_trip','severity':'medium','title':'Round-trip\x20mismatch\x20for\x20node\x20\x22'+u['name']+'\x22','detail':'explainNode\x20produced\x20inconsistent\x20output:\x20name=\x22'+x['name']+'\x22,\x20pairs_count='+x['pairs']['length']+'\x20(expected\x20'+v['length']+')','rule_id':'RT-001'});}}return b;}export function analyzeProgressOps(a){const b=[],c=new Set();let d='(none)';for(const {op:e}of a['machine_ops']){if(!e['data']['node']?.['nodes'])continue;d=getMachineName(e);const {pairs:f}=nodeDefsToMachine(e['data']['node']['nodes']);for(const g of f){c['add'](g['next_node']+'::'+g['forwards']['map'](h=>h['name'])['join']('|'));for(const h of g['forwards']){c['add'](g['next_node']+'::'+h['name']);}}}for(const i of a['progress_ops']){const j=i['data']['progress']?.['operation'];if(!j)continue;const k=j['next_node_name']+'::'+j['forward'],l=c['has'](k);if(!l){const m=[...c]['some'](n=>n['endsWith']('::'+j['forward']));!m?b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':i['_source_line']??0x0,'machine_name':d,'category':'progress','severity':'high','title':'Progress\x20references\x20unknown\x20forward\x20\x22'+j['forward']+'\x22','detail':'Progress\x20op\x20references\x20forward\x20\x22'+j['forward']+'\x22\x20but\x20no\x20such\x20forward\x20exists\x20in\x20machine\x20\x22'+d+'\x22.','rule_id':'R-M3-04','fix':'Verify\x20forward\x20name\x20matches\x20one\x20defined\x20in\x20the\x20Machine.'}):b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':i['_source_line']??0x0,'machine_name':d,'category':'progress','severity':'medium','title':'Progress\x20forward\x20\x22'+j['forward']+'\x22\x20doesn\x27t\x20lead\x20to\x20\x22'+j['next_node_name']+'\x22','detail':'Forward\x20\x22'+j['forward']+'\x22\x20exists\x20but\x20doesn\x27t\x20target\x20node\x20\x22'+j['next_node_name']+'\x22.','rule_id':'R-M3-05','fix':'Correct\x20next_node_name\x20to\x20match\x20the\x20forward\x27s\x20target.'});}}return b;}export function analyzePublishStep(a){const b=[],c=a['machine_ops']['some'](({op:e})=>e['data']['publish']===!![]),d=a['progress_ops']['length']>0x0;return d&&!c&&b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':0x0,'machine_name':'(file-level)','category':'runtime','severity':'high','title':'Progress\x20operations\x20present\x20but\x20no\x20`publish:\x20true`\x20step','detail':'Example\x20has\x20'+a['progress_ops']['length']+'\x20progress\x20operations\x20but\x20no\x20machine\x20operation\x20with\x20publish=true.\x20Progress::new\x20will\x20fail\x20at\x20runtime\x20(machine\x20not\x20published).','rule_id':'R-M4-01','fix':'Add\x20a\x20publish\x20step\x20(or\x20set\x20data.publish=true\x20on\x20the\x20machine\x20creation\x20operation).'}),b;}export function analyzeRiskRuleCoverage(a){const b=new Map();let c=0x0;const d=[...analyzeSchemaConsistency(a),...analyzeThresholdIssues(a),...analyzeNetworkSafety(a),...analyzeConfirmationBypass(a),...analyzeGuardReferences(a),...analyzeRoundTrip(a),...analyzeProgressOps(a),...analyzePublishStep(a)];for(const e of d){e['rule_id']&&(b['set'](e['rule_id'],(b['get'](e['rule_id'])??0x0)+0x1),c++);}return{'ruleCounts':b,'totalFindings':c};}export function scanAllExamples(a=EXAMPLES_DIR){const b=loadAllExamples(a),c=new Map(),d=new Map(),e=new Map(),g=new Map();let h=0x0;for(const i of b){const j=[];j['push'](...analyzeSchemaConsistency(i)),j['push'](...analyzeThresholdIssues(i)),j['push'](...analyzeNetworkSafety(i)),j['push'](...analyzeConfirmationBypass(i)),j['push'](...analyzeGuardReferences(i));const k=analyzeCrossMachineDeps(i);j['push'](...k['findings']),j['push'](...analyzeRoundTrip(i)),j['push'](...analyzeProgressOps(i)),j['push'](...analyzePublishStep(i)),c['set'](i['relative_path'],j);for(const l of j){const m=d['get'](l['category'])??[];m['push'](l),d['set'](l['category'],m);const n=e['get'](l['severity'])??[];n['push'](l),e['set'](l['severity'],n),l['rule_id']&&g['set'](l['rule_id'],(g['get'](l['rule_id'])??0x0)+0x1),h++;}}return{'examples':b,'findings_by_example':c,'findings_by_category':d,'findings_by_severity':e,'total_findings':h,'risk_rule_coverage':g};}export function formatScanReport(a){const b=[];b['push']('#\x20Examples\x20Scan\x20Report\x20—\x20d:\x5cwowok\x5cdocs\x5cexamples'),b['push'](''),b['push']('>\x20Auto-generated\x20by\x20`examples-scanner.ts`\x20—\x20comprehensive\x20scan\x20of\x20all'),b['push']('>\x20machine/progress\x20JSON\x20in\x205\x20example\x20directories\x20for\x20design\x20and\x20runtime\x20problems.'),b['push'](''),b['push']('##\x20Summary'),b['push'](''),b['push']('-\x20**Examples\x20scanned**:\x20'+a['examples']['length']),b['push']('-\x20**Total\x20findings**:\x20'+a['total_findings']),b['push'](''),b['push']('###\x20Findings\x20by\x20Severity'),b['push'](''),b['push']('|\x20Severity\x20|\x20Count\x20|'),b['push']('|----------|-------|');const c=['critical','high','medium','low','info'];for(const j of c){const k=a['findings_by_severity']['get'](j)?.['length']??0x0;b['push']('|\x20'+j+'\x20|\x20'+k+'\x20|');}b['push'](''),b['push']('###\x20Findings\x20by\x20Category'),b['push'](''),b['push']('|\x20Category\x20|\x20Count\x20|'),b['push']('|----------|-------|');const d=['schema_consistency','design','runtime','cross_machine','round_trip','progress','risk_rule'];for(const l of d){const m=a['findings_by_category']['get'](l)?.['length']??0x0;b['push']('|\x20'+l+'\x20|\x20'+m+'\x20|');}b['push'](''),b['push']('###\x20Risk\x20Rule\x20Coverage\x20(which\x20rules\x20fired\x20across\x20examples)'),b['push'](''),b['push']('|\x20Rule\x20ID\x20|\x20Total\x20Hits\x20|'),b['push']('|---------|-----------|');const e=[...a['risk_rule_coverage']['entries']()]['sort']((n,o)=>n[0x0]['localeCompare'](o[0x0]));for(const [n,o]of e){b['push']('|\x20'+n+'\x20|\x20'+o+'\x20|');}b['push'](''),b['push']('##\x20Per-Example\x20Findings'),b['push']('');for(const p of a['examples']){const q=a['findings_by_example']['get'](p['relative_path'])??[];b['push']('###\x20'+p['example_name']+'\x20—\x20`'+p['relative_path']+'`'),b['push'](''),b['push']('-\x20**Source**:\x20`'+p['relative_path']+'`'),b['push']('-\x20**Machine\x20operations**:\x20'+p['machine_ops']['length']),b['push']('-\x20**Progress\x20operations**:\x20'+p['progress_ops']['length']),b['push']('-\x20**Defined\x20guards**:\x20'+p['defined_guard_names']['size']);p['business_description']&&b['push']('-\x20**Business\x20description**:\x20'+p['business_description']);b['push']('-\x20**Findings**:\x20'+q['length']),b['push']('');if(q['length']===0x0){b['push']('✅\x20No\x20issues\x20detected.'),b['push']('');continue;}const r=new Map();for(const s of q){const t=r['get'](s['severity'])??[];t['push'](s),r['set'](s['severity'],t);}for(const u of c){const v=r['get'](u)??[];if(v['length']===0x0)continue;b['push']('####\x20'+u['toUpperCase']()+'\x20('+v['length']+')'),b['push']('');for(const w of v){b['push']('-\x20**['+(w['rule_id']??'—')+']\x20'+w['title']+'**\x20(line\x20'+w['line']+')'),b['push']('\x20\x20-\x20'+w['detail']),w['fix']&&b['push']('\x20\x20-\x20**Fix**:\x20'+w['fix']),b['push']('');}}}b['push']('##\x20Cross-Cutting\x20Patterns'),b['push']('');const g=a['findings_by_category']['get']('schema_consistency')??[];g['length']===0x0&&(b['push']('###\x20Schema\x20Consistency\x20—\x20No\x20Issues\x20(camelCase\x20is\x20canonical)'),b['push'](''),b['push']('The\x20previous\x20SCHEMA-001/002/003/004\x20rules\x20have\x20been\x20REMOVED\x20(2026-07-19).'),b['push'](''),b['push']('**Reason**:\x20Verification\x20against\x20MCP\x20schema\x20(`d:\x5cwowok\x5cagent\x5cmcp\x5csrc`)\x20confirmed\x20that:'),b['push']('-\x20`MachineForwardSchema`\x20accepts\x20`namedOperator`,\x20`permissionIndex`\x20(camelCase)'),b['push']('-\x20`MachineForwardGuardSchema`\x20is\x20an\x20OBJECT\x20`{\x20guard:\x20string,\x20retained_submission?:\x20number[]\x20}`\x20(NOT\x20a\x20flat\x20string)'),b['push']('-\x20`NamedObjectSchema`\x20accepts\x20`replaceExistName`,\x20`onChain`\x20(camelCase)'),b['push'](''),b['push']('Source\x20examples\x20using\x20camelCase\x20are\x20therefore\x20CORRECT\x20per\x20MCP\x20schema\x20—\x20the\x20previous\x20rules\x20were\x20false\x20positives.'),b['push'](''));const h=(a['findings_by_category']['get']('design')??[])['filter'](x=>x['rule_id']==='R-M3-09');if(h['length']>0x0){b['push']('###\x20Threshold=0\x20on\x20Multi-Forward\x20Entry\x20Pairs\x20(R-M3-09)'),b['push'](''),b['push']('Found\x20'+h['length']+'\x20multi-Forward\x20entry\x20pairs\x20with\x20threshold=0\x20across\x20examples.'),b['push'](''),b['push']('**Detection\x20logic**\x20(refined\x202026-07-19):'),b['push']('-\x20Single-Forward\x20Pair\x20with\x20threshold=0\x20→\x20**NOT\x20flagged**\x20(legitimate:\x20single\x20execution\x20triggers\x20migration\x20regardless\x20of\x20threshold)'),b['push']('-\x20Competing-OR\x20Pairs\x20(multiple\x20Pairs\x20share\x20prev_node=\x22\x22)\x20with\x20threshold=0\x20→\x20**NOT\x20flagged**\x20(legitimate\x20OR\x20semantics)'),b['push']('-\x20Multi-Forward\x20Pair\x20with\x20threshold=0\x20AND\x20no\x20competing\x20siblings\x20→\x20**FLAGGED**\x20(potential\x20permission\x20bypass:\x20any\x20single\x20Forward\x20fires\x20→\x20migration)'),b['push']('');const x=[...new Set(h['map'](y=>y['source_file']))];b['push']('**Affected\x20source\x20files**:\x20'+x['map'](y=>'`'+y+'`')['join'](',\x20')+'.'),b['push'](''),b['push']('**Fix**:\x20Set\x20threshold=1\x20(or\x20higher)\x20if\x20Forwards\x20represent\x20AND\x20semantics;\x20keep\x20threshold=0\x20only\x20if\x20OR\x20semantics\x20is\x20intended\x20(then\x20consider\x20splitting\x20into\x20competing\x20Pairs).'),b['push']('');}else b['push']('###\x20Threshold=0\x20on\x20Entry\x20Pairs\x20—\x20No\x20Issues'),b['push'](''),b['push']('All\x20entry\x20pairs\x20with\x20threshold=0\x20fall\x20into\x20legitimate\x20categories\x20(single-Forward\x20or\x20competing-OR).'),b['push']('');const i=(a['findings_by_category']['get']('runtime')??[])['filter'](y=>y['rule_id']==='R-M4-02');return i['length']>0x0&&(b['push']('###\x20Direct\x20Mainnet\x20Publish\x20(R-M4-02)'),b['push'](''),b['push']('Found\x20'+i['length']+'\x20examples\x20publishing\x20directly\x20to\x20mainnet\x20without\x20testnet\x20test.'),b['push'](''),b['push']('**Affected\x20examples**:\x20MyShop,\x20MyShop_Advanced.'),b['push'](''),b['push']('**Fix**:\x20Add\x20a\x20testnet\x20publish\x20step\x20before\x20mainnet,\x20or\x20change\x20the\x20network\x20to\x20testnet\x20for\x20examples.'),b['push']('')),b['push']('##\x20Recommendations\x20for\x20Linter\x20&\x20Cognition\x20Closure'),b['push'](''),b['push']('Based\x20on\x20the\x20findings,\x20the\x20following\x20linter\x20rules\x20and\x20cognition\x20improvements\x20are\x20recommended:'),b['push'](''),b['push']('1.\x20**REMOVED\x20SCHEMA-001/002/003/004**\x20(2026-07-19):\x20These\x20rules\x20incorrectly\x20assumed\x20SDK\x20snake_case\x20as\x20the\x20standard.\x20MCP\x20schema\x20actually\x20accepts\x20camelCase\x20(`namedOperator`,\x20`permissionIndex`,\x20`replaceExistName`)\x20and\x20nested\x20Guard\x20object\x20form.\x20Examples\x20are\x20correct\x20as-is.'),b['push']('2.\x20**REFACTORED\x20R-M3-02\x20→\x20R-M3-09**\x20(2026-07-19,\x20then\x202026-07-20):\x20Original\x20R-M3-02\x20(threshold=0)\x20conflicted\x20with\x20machine-risk.ts\x27s\x20R-M3-02\x20(permissionIndex\x20out\x20of\x20bounds).\x20Initially\x20renamed\x20to\x20R-M3-06,\x20but\x20that\x20also\x20collided\x20with\x20machine-risk.ts\x27s\x20R-M3-06\x20(Permission\x20game\x20imbalance).\x20Final\x20rename:\x20R-M3-09.\x20Logic\x20also\x20refined:\x20single-Forward\x20and\x20competing-OR\x20threshold=0\x20cases\x20are\x20now\x20exempt.'),b['push']('3.\x20**Reinforce\x20R-M4-03**:\x20Guard\x20must\x20be\x20created\x20before\x20Machine\x20publish.\x20Examples\x20should\x20include\x20guard\x20creation\x20step\x20(operation_type=\x22guard\x22)\x20with\x20matching\x20name\x20before\x20machine\x20creation.'),b['push']('4.\x20**Add\x20lint\x20rule**\x20for\x20`confirmed:\x20true`\x20+\x20`publish:\x20true`\x20combination\x20without\x20showing\x20the\x20Phase\x201\x20confirmation\x20prompt\x20first.'),b['push']('5.\x20**IMPLEMENTED**:\x20R-M3-08\x20(permissionIndex\x20<\x201000)\x20rule\x20added\x20to\x20machine-risk.ts,\x20and\x20C-11\x20checklist\x20item\x20added\x20to\x20machine-confirm.ts\x20(2026-07-20).\x20Both\x20enforce\x20the\x20on-chain\x20USER_DEFINED_PERM_INDEX_START\x20=\x201000\x20hard\x20constraint\x20(see\x20doc\x2006\x20§4.4).'),b['push'](''),b['push']('---'),b['push'](''),b['push']('*End\x20of\x20report.*'),b['join']('\x0a');}export const EXAMPLES_SCANNER_VERSION='1.0.0';
@@ -83,7 +83,6 @@ export declare function saveEvolutionState(): string;
83
83
  export declare function loadEvolutionState(): boolean;
84
84
  export declare function hasPersistedEvolutionState(): boolean;
85
85
  export declare function sanitizeSignal(signal: IndustrySignal): IndustrySignal;
86
- export declare function sanitizeDecisionContext(ctx: DecisionContext): DecisionContext;
87
86
  export declare function checkAndTriggerCognitionUpdate(industry: string): CognitionUpdateResult;
88
87
  export declare function _resetFlywheelLoopForTest(): void;
89
88
  export declare function _snapshotSignalBuffer(): Record<string, IndustrySignal[]>;
@@ -1 +1 @@
1
- import{aggregateIndustryMetrics,evaluateIndustryHealth,suggestIndustryUpdate}from'./industry-evolution.js';import{getIndustryProfile,resolveIndustryName}from'./industry-registry.js';import{evaluateIndustryHealthByIntent,suggestIndustryUpdateByIntent,getRoleAdvice,filterSuggestionsByRole,getIntentProfile}from'./intent-metrics.js';import{existsSync,mkdirSync,readFileSync,writeFileSync}from'fs';import{dirname,join}from'path';import{getWowMcpDir}from'@wowok/wowok';export const FLYWHEEL_LOOP_VERSION=0x2;const MIN_SIGNALS_FOR_EVOLUTION=0xa,DEFAULT_SCHEDULE={'mode':'semi_realtime','signal_threshold':0x14,'time_interval_ms':0x5*0x3c*0x3e8,'auto_apply':![]},industrySchedules=new Map(),industryLastUpdate=new Map(),industryIntent=new Map(),signalBuffer=new Map(),decisionContexts=new Map(),latestMetrics=new Map(),latestHealth=new Map(),pendingSuggestions=new Map();export function recordIndustrySignal(a,b,c){if(!a)return;const d=resolveIndustryName(a)??a,e={'industry':d,'operation_type':b['type'],'success':c['success'],'error_code':c['error_code'],'timestamp':Date['now']()},f=sanitizeSignal(e),g=signalBuffer['get'](d)??[];g['push'](f),signalBuffer['set'](d,g),tryMaybeAutoTrigger(d,g['length']);}function tryMaybeAutoTrigger(a,b){const c=industrySchedules['get'](a)??DEFAULT_SCHEDULE;if(c['mode']==='manual')return;const d=Date['now'](),e=industryLastUpdate['get'](a)??0x0;if(c['mode']==='realtime'){b>=MIN_SIGNALS_FOR_EVOLUTION&&b%MIN_SIGNALS_FOR_EVOLUTION===0x0&&doAutoUpdate(a,c);return;}if(c['mode']==='semi_realtime'){const f=c['signal_threshold']??0x14,g=c['time_interval_ms']??0x5*0x3c*0x3e8,h=b>=f&&b%f===0x0,i=e>0x0&&d-e>=g;(h||i)&&doAutoUpdate(a,c);}}function doAutoUpdate(a,b){try{const c=updateIndustryCognition(a);industryLastUpdate['set'](a,Date['now']());if(b['auto_apply']&&c['suggestions_generated']>0x0){const d=pendingSuggestions['get'](a)??[],{applyIndustryUpdate:e}=require('./industry-evolution.js');for(const f of d){try{e(a,f);}catch{}}}}catch{}}export function setEvolutionSchedule(a,b){if(!a)return;const c=resolveIndustryName(a)??a;industrySchedules['set'](c,b);}export function getEvolutionSchedule(a){const b=resolveIndustryName(a)??a;return industrySchedules['get'](b)??DEFAULT_SCHEDULE;}export function setIndustryIntent(a,b){if(!a)return;const c=resolveIndustryName(a)??a;industryIntent['set'](c,b);}export function getIndustryIntent(a){const b=resolveIndustryName(a)??a;return industryIntent['get'](b)??'default';}export function getIndustrySignalCount(a){const b=resolveIndustryName(a)??a;return signalBuffer['get'](b)?.['length']??0x0;}export function getIndustrySignals(a){const b=resolveIndustryName(a)??a;return[...signalBuffer['get'](b)??[]];}export function listIndustriesWithSignals(){return Array['from'](signalBuffer['keys']());}export function getPendingSuggestions(a){const b=resolveIndustryName(a)??a;return[...pendingSuggestions['get'](b)??[]];}export function recordDecisionContext(a,b){if(!a['id']||!a['node_id'])return;const c=sanitizeDecisionContext(a);decisionContexts['set'](a['id'],c);if(b)try{b['attachDecisionContext'](a['node_id'],{'id':a['id'],'decided_at':a['decided_at'],'decider':a['decider'],'industry':a['industry'],'intent':a['intent'],'alternatives':a['alternatives'],'rationale':a['rationale'],'outcome':a['outcome']});}catch{}}export function queryDecisionsByIndustry(a){const b=resolveIndustryName(a)??a;return Array['from'](decisionContexts['values']())['filter'](c=>c['industry']===b)['sort']((c,d)=>d['decided_at']-c['decided_at']);}export function queryDecisionsByNode(a){return Array['from'](decisionContexts['values']())['filter'](b=>b['node_id']===a)['sort']((c,d)=>d['decided_at']-c['decided_at']);}export function backfillDecisionOutcome(a,b){const c=decisionContexts['get'](a);if(!c)return![];return c['outcome']=b,!![];}export function updateIndustryCognition(a,b){const c=resolveIndustryName(a)??a,d=signalBuffer['get'](c)??[],e={'industry':c,'metrics_updated':![],'health_recomputed':![],'suggestions_generated':0x0,'evolution_ready':d['length']>=MIN_SIGNALS_FOR_EVOLUTION};if(d['length']<MIN_SIGNALS_FOR_EVOLUTION&&(!b||b['length']===0x0))return e;let f;if(b&&b['length']>0x0)f=aggregateIndustryMetrics(c,b);else{const j=d['map'](k=>({'industry':c,'completed':k['success'],'has_dispute':!!k['error_code']&&k['error_code']['includes']('dispute'),'has_refund':!!k['error_code']&&k['error_code']['includes']('refund'),'ticket_size':0x0n,'timestamp':k['timestamp']}));f=aggregateIndustryMetrics(c,j);}latestMetrics['set'](c,f),e['metrics_updated']=!![];const g=industryIntent['get'](c)??'default';let h,i;return g!=='default'?(h=evaluateIndustryHealthByIntent(c,f,g),i=suggestIndustryUpdateByIntent(c,f,g)):(h=evaluateIndustryHealth(c,f),i=suggestIndustryUpdate(c,f)),latestHealth['set'](c,h),e['health_recomputed']=!![],pendingSuggestions['set'](c,i),e['suggestions_generated']=i['length'],e;}export function injectEvolutionContext(a,b,c){if(!b)return{'confidence':0x0};const d=resolveIndustryName(b)??b,e=getIndustryProfile(d);if(!e)return{'confidence':0x0,'industry_signal':'Industry\x20'+d+'\x20is\x20not\x20yet\x20registered;\x20recommend\x20synthesizing\x20a\x20profile\x20via\x20the\x20generalizer\x20engine'};const f=latestHealth['get'](d),g=latestMetrics['get'](d),h=pendingSuggestions['get'](d)??[],i=signalBuffer['get'](d)?.['length']??0x0,j=industryIntent['get'](d)??'default',k=[];let l,m=0.5;f&&(k['push']('Industry\x20health\x20'+f['health_score']+'/100\x20('+f['level']+')'),m=Math['max'](m,0.7),f['weaknesses']['length']>0x0&&(l='Weakness:\x20'+f['weaknesses'][0x0]),f['recommendations']['length']>0x0&&(l=l?l+';\x20recommendation:\x20'+f['recommendations'][0x0]:'Recommendation:\x20'+f['recommendations'][0x0]));g&&g['anomalies']['length']>0x0&&(k['push']('Anomaly:\x20'+g['anomalies'][0x0]),m=Math['max'](m,0.8));i>0x0&&k['push']('Accumulated\x20'+i+'\x20industry\x20signals');j!=='default'&&k['push']('Current\x20intent:\x20'+j);if(!l&&h['length']>0x0){const p=h['find'](q=>q['priority']==='high')??h[0x0];l=p['suggestion_type']+':\x20'+p['evidence'],m=Math['max'](m,p['confidence']);}let n,o=h;if(c){const q=getIntentProfile(j);q&&(n=getRoleAdvice(j,c));const r=q?.['suggestion_triggers']??[];o=filterSuggestionsByRole(h,c,r);if(o['length']>0x0){const s=o['find'](t=>t['priority']==='high')??o[0x0];l=s['suggestion_type']+'\x20('+c+'):\x20'+s['evidence'];}}return{'industry_signal':k['length']>0x0?k['join'](';\x20'):undefined,'evolution_advice':l,'confidence':m,'health_score':f?.['health_score'],'pending_suggestions':o['length'],'intent':j!=='default'?j:undefined,'role_advice':n&&n['length']>0x0?n:undefined,'role':c};}export function getIndustryEvolutionStatus(a){const b=resolveIndustryName(a)??a,c=getIndustryProfile(b);return{'industry':b,'version':c?.['version']??'v0','last_updated':c?.['evolution']?.['last_updated']??0x0,'signal_count':signalBuffer['get'](b)?.['length']??0x0,'health':latestHealth['get'](b),'pending_suggestions':pendingSuggestions['get'](b)?.['length']??0x0,'evolution_ready':(signalBuffer['get'](b)?.['length']??0x0)>=MIN_SIGNALS_FOR_EVOLUTION};}export const EVOLUTION_STATE_VERSION=0x1;function evolutionStateFilePath(){return join(getWowMcpDir(),'evolution-state.json');}export function saveEvolutionState(){const a=evolutionStateFilePath(),b=dirname(a);if(!existsSync(b))mkdirSync(b,{'recursive':!![]});const c={'version':EVOLUTION_STATE_VERSION,'saved_at':Date['now'](),'signal_buffer':Object['fromEntries'](signalBuffer),'decision_contexts':Object['fromEntries'](decisionContexts),'latest_metrics':Object['fromEntries'](latestMetrics),'latest_health':Object['fromEntries'](latestHealth),'pending_suggestions':Object['fromEntries'](pendingSuggestions),'industry_schedules':Object['fromEntries'](industrySchedules),'industry_last_update':Object['fromEntries'](industryLastUpdate),'industry_intent':Object['fromEntries'](industryIntent)},d=(e,f)=>{if(typeof f==='bigint')return{'__bigint__':f['toString']()};return f;};return writeFileSync(a,JSON['stringify'](c,d,0x2),'utf-8'),a;}export function loadEvolutionState(){const a=evolutionStateFilePath();if(!existsSync(a))return![];try{const b=readFileSync(a,'utf-8'),c=(e,f)=>{if(f&&typeof f==='object'&&'__bigint__'in f)return BigInt(f['__bigint__']);return f;},d=JSON['parse'](b,c);if(!d||d['version']!==EVOLUTION_STATE_VERSION)return![];_resetFlywheelLoopForTest();for(const [e,f]of Object['entries'](d['signal_buffer'])){signalBuffer['set'](e,f);}for(const [g,h]of Object['entries'](d['decision_contexts'])){decisionContexts['set'](g,h);}for(const [i,j]of Object['entries'](d['latest_metrics'])){latestMetrics['set'](i,j);}for(const [l,m]of Object['entries'](d['latest_health'])){latestHealth['set'](l,m);}for(const [n,o]of Object['entries'](d['pending_suggestions'])){pendingSuggestions['set'](n,o);}for(const [p,q]of Object['entries'](d['industry_schedules'])){industrySchedules['set'](p,q);}for(const [r,s]of Object['entries'](d['industry_last_update'])){industryLastUpdate['set'](r,s);}for(const [t,u]of Object['entries'](d['industry_intent'])){industryIntent['set'](t,u);}return!![];}catch{return![];}}export function hasPersistedEvolutionState(){return existsSync(evolutionStateFilePath());}export function sanitizeSignal(a){return{'industry':a['industry'],'operation_type':a['operation_type'],'success':a['success'],'error_code':a['error_code'],'timestamp':a['timestamp'],'decision_context_id':a['decision_context_id']};}export function sanitizeDecisionContext(a){return{'id':a['id'],'node_id':a['node_id'],'decided_at':a['decided_at'],'decider':a['decider'],'industry':a['industry'],'intent':a['intent'],'outcome':a['outcome']};}export function checkAndTriggerCognitionUpdate(a){return updateIndustryCognition(a);}export function _resetFlywheelLoopForTest(){signalBuffer['clear'](),decisionContexts['clear'](),latestMetrics['clear'](),latestHealth['clear'](),pendingSuggestions['clear'](),industrySchedules['clear'](),industryLastUpdate['clear'](),industryIntent['clear']();}export function _snapshotSignalBuffer(){return Object['fromEntries'](signalBuffer);}export{MIN_SIGNALS_FOR_EVOLUTION as FLYWHEEL_LOOP_MIN_SIGNALS};
1
+ import{aggregateIndustryMetrics,evaluateIndustryHealth,suggestIndustryUpdate}from'./industry-evolution.js';import{getIndustryProfile,resolveIndustryName}from'./industry-registry.js';import{evaluateIndustryHealthByIntent,suggestIndustryUpdateByIntent,getRoleAdvice,filterSuggestionsByRole,getIntentProfile}from'./intent-metrics.js';import{existsSync,mkdirSync,readFileSync,writeFileSync}from'fs';import{dirname,join}from'path';import{getWowMcpDir}from'@wowok/wowok';export const FLYWHEEL_LOOP_VERSION=0x2;const MIN_SIGNALS_FOR_EVOLUTION=0xa,DEFAULT_SCHEDULE={'mode':'semi_realtime','signal_threshold':0x14,'time_interval_ms':0x5*0x3c*0x3e8,'auto_apply':![]},industrySchedules=new Map(),industryLastUpdate=new Map(),industryIntent=new Map(),signalBuffer=new Map(),decisionContexts=new Map(),latestMetrics=new Map(),latestHealth=new Map(),pendingSuggestions=new Map();export function recordIndustrySignal(a,b,c){if(!a)return;const d=resolveIndustryName(a)??a,e={'industry':d,'operation_type':b['type'],'success':c['success'],'error_code':c['error_code'],'timestamp':Date['now']()},f=sanitizeSignal(e),g=signalBuffer['get'](d)??[];g['push'](f),signalBuffer['set'](d,g),tryMaybeAutoTrigger(d,g['length']);}function tryMaybeAutoTrigger(a,b){const c=industrySchedules['get'](a)??DEFAULT_SCHEDULE;if(c['mode']==='manual')return;const d=Date['now'](),e=industryLastUpdate['get'](a)??0x0;if(c['mode']==='realtime'){b>=MIN_SIGNALS_FOR_EVOLUTION&&b%MIN_SIGNALS_FOR_EVOLUTION===0x0&&doAutoUpdate(a,c);return;}if(c['mode']==='semi_realtime'){const f=c['signal_threshold']??0x14,g=c['time_interval_ms']??0x5*0x3c*0x3e8,h=b>=f&&b%f===0x0,i=e>0x0&&d-e>=g;(h||i)&&doAutoUpdate(a,c);}}function doAutoUpdate(a,b){try{const c=updateIndustryCognition(a);industryLastUpdate['set'](a,Date['now']());if(b['auto_apply']&&c['suggestions_generated']>0x0){const d=pendingSuggestions['get'](a)??[],{applyIndustryUpdate:e}=require('./industry-evolution.js');for(const f of d){try{e(a,f);}catch{}}}}catch{}}export function setEvolutionSchedule(a,b){if(!a)return;const c=resolveIndustryName(a)??a;industrySchedules['set'](c,b);}export function getEvolutionSchedule(a){const b=resolveIndustryName(a)??a;return industrySchedules['get'](b)??DEFAULT_SCHEDULE;}export function setIndustryIntent(a,b){if(!a)return;const c=resolveIndustryName(a)??a;industryIntent['set'](c,b);}export function getIndustryIntent(a){const b=resolveIndustryName(a)??a;return industryIntent['get'](b)??'default';}export function getIndustrySignalCount(a){const b=resolveIndustryName(a)??a;return signalBuffer['get'](b)?.['length']??0x0;}export function getIndustrySignals(a){const b=resolveIndustryName(a)??a;return[...signalBuffer['get'](b)??[]];}export function listIndustriesWithSignals(){return Array['from'](signalBuffer['keys']());}export function getPendingSuggestions(a){const b=resolveIndustryName(a)??a;return[...pendingSuggestions['get'](b)??[]];}export function recordDecisionContext(a,b){if(!a['id']||!a['node_id'])return;decisionContexts['set'](a['id'],a);if(b)try{b['attachDecisionContext'](a['node_id'],{'id':a['id'],'decided_at':a['decided_at'],'decider':a['decider'],'industry':a['industry'],'intent':a['intent'],'alternatives':a['alternatives'],'rationale':a['rationale'],'outcome':a['outcome']});}catch{}}export function queryDecisionsByIndustry(a){const b=resolveIndustryName(a)??a;return Array['from'](decisionContexts['values']())['filter'](c=>c['industry']===b)['sort']((c,d)=>d['decided_at']-c['decided_at']);}export function queryDecisionsByNode(a){return Array['from'](decisionContexts['values']())['filter'](b=>b['node_id']===a)['sort']((c,d)=>d['decided_at']-c['decided_at']);}export function backfillDecisionOutcome(a,b){const c=decisionContexts['get'](a);if(!c)return![];return c['outcome']=b,!![];}export function updateIndustryCognition(a,b){const c=resolveIndustryName(a)??a,d=signalBuffer['get'](c)??[],e={'industry':c,'metrics_updated':![],'health_recomputed':![],'suggestions_generated':0x0,'evolution_ready':d['length']>=MIN_SIGNALS_FOR_EVOLUTION};if(d['length']<MIN_SIGNALS_FOR_EVOLUTION&&(!b||b['length']===0x0))return e;let f;if(b&&b['length']>0x0)f=aggregateIndustryMetrics(c,b);else{const j=d['map'](k=>({'industry':c,'completed':k['success'],'has_dispute':!!k['error_code']&&k['error_code']['includes']('dispute'),'has_refund':!!k['error_code']&&k['error_code']['includes']('refund'),'ticket_size':0x0n,'timestamp':k['timestamp']}));f=aggregateIndustryMetrics(c,j);}latestMetrics['set'](c,f),e['metrics_updated']=!![];const g=industryIntent['get'](c)??'default';let h,i;return g!=='default'?(h=evaluateIndustryHealthByIntent(c,f,g),i=suggestIndustryUpdateByIntent(c,f,g)):(h=evaluateIndustryHealth(c,f),i=suggestIndustryUpdate(c,f)),latestHealth['set'](c,h),e['health_recomputed']=!![],pendingSuggestions['set'](c,i),e['suggestions_generated']=i['length'],e;}export function injectEvolutionContext(a,b,c){if(!b)return{'confidence':0x0};const d=resolveIndustryName(b)??b,e=getIndustryProfile(d);if(!e)return{'confidence':0x0,'industry_signal':'Industry\x20'+d+'\x20is\x20not\x20yet\x20registered;\x20recommend\x20synthesizing\x20a\x20profile\x20via\x20the\x20generalizer\x20engine'};const f=latestHealth['get'](d),g=latestMetrics['get'](d),h=pendingSuggestions['get'](d)??[],i=signalBuffer['get'](d)?.['length']??0x0,j=industryIntent['get'](d)??'default',k=[];let l,m=0.5;f&&(k['push']('Industry\x20health\x20'+f['health_score']+'/100\x20('+f['level']+')'),m=Math['max'](m,0.7),f['weaknesses']['length']>0x0&&(l='Weakness:\x20'+f['weaknesses'][0x0]),f['recommendations']['length']>0x0&&(l=l?l+';\x20recommendation:\x20'+f['recommendations'][0x0]:'Recommendation:\x20'+f['recommendations'][0x0]));g&&g['anomalies']['length']>0x0&&(k['push']('Anomaly:\x20'+g['anomalies'][0x0]),m=Math['max'](m,0.8));i>0x0&&k['push']('Accumulated\x20'+i+'\x20industry\x20signals');j!=='default'&&k['push']('Current\x20intent:\x20'+j);if(!l&&h['length']>0x0){const p=h['find'](q=>q['priority']==='high')??h[0x0];l=p['suggestion_type']+':\x20'+p['evidence'],m=Math['max'](m,p['confidence']);}let n,o=h;if(c){const q=getIntentProfile(j);q&&(n=getRoleAdvice(j,c));const r=q?.['suggestion_triggers']??[];o=filterSuggestionsByRole(h,c,r);if(o['length']>0x0){const s=o['find'](t=>t['priority']==='high')??o[0x0];l=s['suggestion_type']+'\x20('+c+'):\x20'+s['evidence'];}}return{'industry_signal':k['length']>0x0?k['join'](';\x20'):undefined,'evolution_advice':l,'confidence':m,'health_score':f?.['health_score'],'pending_suggestions':o['length'],'intent':j!=='default'?j:undefined,'role_advice':n&&n['length']>0x0?n:undefined,'role':c};}export function getIndustryEvolutionStatus(a){const b=resolveIndustryName(a)??a,c=getIndustryProfile(b);return{'industry':b,'version':c?.['version']??'v0','last_updated':c?.['evolution']?.['last_updated']??0x0,'signal_count':signalBuffer['get'](b)?.['length']??0x0,'health':latestHealth['get'](b),'pending_suggestions':pendingSuggestions['get'](b)?.['length']??0x0,'evolution_ready':(signalBuffer['get'](b)?.['length']??0x0)>=MIN_SIGNALS_FOR_EVOLUTION};}export const EVOLUTION_STATE_VERSION=0x1;function evolutionStateFilePath(){return join(getWowMcpDir(),'evolution-state.json');}export function saveEvolutionState(){const a=evolutionStateFilePath(),b=dirname(a);if(!existsSync(b))mkdirSync(b,{'recursive':!![]});const c={'version':EVOLUTION_STATE_VERSION,'saved_at':Date['now'](),'signal_buffer':Object['fromEntries'](signalBuffer),'decision_contexts':Object['fromEntries'](decisionContexts),'latest_metrics':Object['fromEntries'](latestMetrics),'latest_health':Object['fromEntries'](latestHealth),'pending_suggestions':Object['fromEntries'](pendingSuggestions),'industry_schedules':Object['fromEntries'](industrySchedules),'industry_last_update':Object['fromEntries'](industryLastUpdate),'industry_intent':Object['fromEntries'](industryIntent)},d=(e,f)=>{if(typeof f==='bigint')return{'__bigint__':f['toString']()};return f;};return writeFileSync(a,JSON['stringify'](c,d,0x2),'utf-8'),a;}export function loadEvolutionState(){const a=evolutionStateFilePath();if(!existsSync(a))return![];try{const b=readFileSync(a,'utf-8'),c=(e,f)=>{if(f&&typeof f==='object'&&'__bigint__'in f)return BigInt(f['__bigint__']);return f;},d=JSON['parse'](b,c);if(!d||d['version']!==EVOLUTION_STATE_VERSION)return![];_resetFlywheelLoopForTest();for(const [e,f]of Object['entries'](d['signal_buffer'])){signalBuffer['set'](e,f);}for(const [g,h]of Object['entries'](d['decision_contexts'])){decisionContexts['set'](g,h);}for(const [i,j]of Object['entries'](d['latest_metrics'])){latestMetrics['set'](i,j);}for(const [l,m]of Object['entries'](d['latest_health'])){latestHealth['set'](l,m);}for(const [n,o]of Object['entries'](d['pending_suggestions'])){pendingSuggestions['set'](n,o);}for(const [p,q]of Object['entries'](d['industry_schedules'])){industrySchedules['set'](p,q);}for(const [r,s]of Object['entries'](d['industry_last_update'])){industryLastUpdate['set'](r,s);}for(const [t,u]of Object['entries'](d['industry_intent'])){industryIntent['set'](t,u);}return!![];}catch{return![];}}export function hasPersistedEvolutionState(){return existsSync(evolutionStateFilePath());}export function sanitizeSignal(a){return{'industry':a['industry'],'operation_type':a['operation_type'],'success':a['success'],'error_code':a['error_code'],'timestamp':a['timestamp'],'decision_context_id':a['decision_context_id']};}export function checkAndTriggerCognitionUpdate(a){return updateIndustryCognition(a);}export function _resetFlywheelLoopForTest(){signalBuffer['clear'](),decisionContexts['clear'](),latestMetrics['clear'](),latestHealth['clear'](),pendingSuggestions['clear'](),industrySchedules['clear'](),industryLastUpdate['clear'](),industryIntent['clear']();}export function _snapshotSignalBuffer(){return Object['fromEntries'](signalBuffer);}export{MIN_SIGNALS_FOR_EVOLUTION as FLYWHEEL_LOOP_MIN_SIGNALS};