@wowok/agent-mcp 3.1.2 → 3.1.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 (544) hide show
  1. package/dist/config/config-audit.spec.d.ts +1 -0
  2. package/dist/config/config-audit.spec.js +1 -0
  3. package/dist/config/exposure.d.ts +108 -0
  4. package/dist/config/exposure.js +1 -0
  5. package/dist/config/index.d.ts +2 -0
  6. package/dist/config/index.js +1 -1
  7. package/dist/config/judgment.d.ts +1228 -0
  8. package/dist/config/judgment.js +1 -0
  9. package/dist/config/judgment.spec.d.ts +1 -0
  10. package/dist/config/judgment.spec.js +1 -0
  11. package/dist/config/rule-engine.d.ts +299 -0
  12. package/dist/config/rule-engine.js +1 -0
  13. package/dist/config/rule-engine.spec.d.ts +1 -0
  14. package/dist/config/rule-engine.spec.js +1 -0
  15. package/dist/config/runtime.js +1 -1
  16. package/dist/config/severity.d.ts +7 -0
  17. package/dist/config/severity.js +1 -0
  18. package/dist/customer/index.d.ts +3 -9
  19. package/dist/customer/index.js +1 -1
  20. package/dist/customer/industry-risks.d.ts +3 -17
  21. package/dist/customer/industry-risks.js +1 -1
  22. package/dist/customer/order-monitor.d.ts +3 -1
  23. package/dist/customer/order-monitor.js +1 -1
  24. package/dist/customer/types.d.ts +1 -165
  25. package/dist/customer/types.js +1 -1
  26. package/dist/customer/user-preferences.d.ts +0 -49
  27. package/dist/customer/user-preferences.js +1 -1
  28. package/dist/evaluation/acceptance.d.ts +1 -0
  29. package/dist/evaluation/acceptance.js +1 -1
  30. package/dist/evaluation/arbitration-game.js +1 -1
  31. package/dist/evaluation/architecture.spec.d.ts +1 -0
  32. package/dist/evaluation/architecture.spec.js +1 -0
  33. package/dist/evaluation/builtins/demand-match.js +1 -1
  34. package/dist/evaluation/builtins/graph-service.d.ts +16 -0
  35. package/dist/evaluation/builtins/graph-service.js +1 -0
  36. package/dist/evaluation/builtins/graph-service.spec.d.ts +1 -0
  37. package/dist/evaluation/builtins/graph-service.spec.js +1 -0
  38. package/dist/evaluation/builtins/index.d.ts +1 -1
  39. package/dist/evaluation/builtins/index.js +1 -1
  40. package/dist/evaluation/builtins/purity.spec.d.ts +1 -0
  41. package/dist/evaluation/builtins/purity.spec.js +1 -0
  42. package/dist/evaluation/engine.js +1 -1
  43. package/dist/evaluation/facets/catalog.d.ts +19 -0
  44. package/dist/evaluation/facets/catalog.js +1 -0
  45. package/dist/evaluation/game-strategy.d.ts +2 -2
  46. package/dist/evaluation/game-strategy.js +1 -1
  47. package/dist/evaluation/guard-scan.d.ts +10 -0
  48. package/dist/evaluation/guard-scan.js +1 -0
  49. package/dist/evaluation/match-operation.d.ts +2 -2
  50. package/dist/evaluation/match-operation.js +1 -1
  51. package/dist/evaluation/standards.d.ts +9 -0
  52. package/dist/evaluation/standards.js +1 -0
  53. package/dist/evaluation/standards.spec.d.ts +1 -0
  54. package/dist/evaluation/standards.spec.js +1 -0
  55. package/dist/evaluation/types.d.ts +11 -1
  56. package/dist/experience/realtime-feedback.js +1 -1
  57. package/dist/extensions/business-modules.js +1 -1
  58. package/dist/extensions/custom-registry-file.js +1 -1
  59. package/dist/extensions/index.d.ts +1 -1
  60. package/dist/extensions/index.js +1 -1
  61. package/dist/extensions/industry-audit.spec.d.ts +1 -0
  62. package/dist/extensions/industry-audit.spec.js +1 -0
  63. package/dist/extensions/industry-layers.d.ts +14 -5
  64. package/dist/extensions/industry-layers.js +1 -1
  65. package/dist/extensions/industry-pack.d.ts +2 -0
  66. package/dist/extensions/industry-pack.js +1 -1
  67. package/dist/extensions/mode-evaluator.js +1 -1
  68. package/dist/extensions/modes.js +1 -1
  69. package/dist/graph/onchain/analyze.d.ts +16 -1
  70. package/dist/graph/onchain/analyze.js +1 -1
  71. package/dist/graph/onchain/analyze.spec.js +1 -1
  72. package/dist/graph/onchain/dataplane.d.ts +1 -1
  73. package/dist/graph/onchain/dataplane.js +1 -1
  74. package/dist/graph/onchain/edge-batch.spec.d.ts +1 -0
  75. package/dist/graph/onchain/edge-batch.spec.js +1 -0
  76. package/dist/graph/onchain/edge-schema.d.ts +11 -2
  77. package/dist/graph/onchain/edge-schema.js +1 -1
  78. package/dist/graph/onchain/entity-profile.spec.d.ts +1 -0
  79. package/dist/graph/onchain/entity-profile.spec.js +1 -0
  80. package/dist/graph/onchain/event-history.spec.d.ts +1 -0
  81. package/dist/graph/onchain/event-history.spec.js +1 -0
  82. package/dist/graph/onchain/expand.js +1 -1
  83. package/dist/graph/onchain/exploration.d.ts +28 -0
  84. package/dist/graph/onchain/exploration.js +1 -0
  85. package/dist/graph/onchain/exploration.spec.d.ts +1 -0
  86. package/dist/graph/onchain/exploration.spec.js +1 -0
  87. package/dist/graph/onchain/exposure.d.ts +18 -0
  88. package/dist/graph/onchain/exposure.js +1 -0
  89. package/dist/graph/onchain/exposure.spec.d.ts +1 -0
  90. package/dist/graph/onchain/exposure.spec.js +1 -0
  91. package/dist/graph/onchain/extract-deep.spec.d.ts +1 -0
  92. package/dist/graph/onchain/extract-deep.spec.js +1 -0
  93. package/dist/graph/onchain/extract.d.ts +11 -3
  94. package/dist/graph/onchain/extract.js +1 -1
  95. package/dist/graph/onchain/facet-projection.d.ts +99 -0
  96. package/dist/graph/onchain/facet-projection.js +1 -0
  97. package/dist/graph/onchain/facet-projection.spec.d.ts +1 -0
  98. package/dist/graph/onchain/facet-projection.spec.js +1 -0
  99. package/dist/graph/onchain/facts.d.ts +103 -0
  100. package/dist/graph/onchain/facts.js +1 -0
  101. package/dist/graph/onchain/facts.spec.d.ts +1 -0
  102. package/dist/graph/onchain/facts.spec.js +1 -0
  103. package/dist/graph/onchain/field-manifest.d.ts +29 -0
  104. package/dist/graph/onchain/field-manifest.js +1 -0
  105. package/dist/graph/onchain/field-manifest.spec.d.ts +1 -0
  106. package/dist/graph/onchain/field-manifest.spec.js +1 -0
  107. package/dist/graph/onchain/fixtures.d.ts +80 -0
  108. package/dist/graph/onchain/fixtures.js +1 -0
  109. package/dist/graph/onchain/fixtures.spec.d.ts +1 -0
  110. package/dist/graph/onchain/fixtures.spec.js +1 -0
  111. package/dist/graph/onchain/graph-policy.spec.d.ts +1 -0
  112. package/dist/graph/onchain/graph-policy.spec.js +1 -0
  113. package/dist/graph/onchain/index.d.ts +14 -2
  114. package/dist/graph/onchain/index.js +1 -1
  115. package/dist/graph/onchain/interest.js +1 -1
  116. package/dist/graph/onchain/interest.spec.js +1 -1
  117. package/dist/graph/onchain/label-lint.spec.d.ts +1 -0
  118. package/dist/graph/onchain/label-lint.spec.js +1 -0
  119. package/dist/graph/onchain/names.d.ts +23 -0
  120. package/dist/graph/onchain/names.js +1 -0
  121. package/dist/graph/onchain/names.spec.d.ts +1 -0
  122. package/dist/graph/onchain/names.spec.js +1 -0
  123. package/dist/graph/onchain/onchain.spec.js +1 -1
  124. package/dist/graph/onchain/policy.d.ts +8 -0
  125. package/dist/graph/onchain/policy.js +1 -0
  126. package/dist/graph/onchain/proposal-graph.d.ts +11 -0
  127. package/dist/graph/onchain/proposal-graph.js +1 -0
  128. package/dist/graph/onchain/proposal-graph.spec.d.ts +1 -0
  129. package/dist/graph/onchain/proposal-graph.spec.js +1 -0
  130. package/dist/graph/onchain/sdk-batch.d.ts +5 -1
  131. package/dist/graph/onchain/sdk-batch.js +1 -1
  132. package/dist/graph/onchain/strategy.d.ts +16 -0
  133. package/dist/graph/onchain/strategy.js +1 -1
  134. package/dist/graph/onchain/strategy.spec.js +1 -1
  135. package/dist/graph/onchain/synthesis.d.ts +20 -0
  136. package/dist/graph/onchain/synthesis.js +1 -0
  137. package/dist/graph/onchain/synthesis.spec.d.ts +1 -0
  138. package/dist/graph/onchain/synthesis.spec.js +1 -0
  139. package/dist/graph/onchain/table-ledger.spec.d.ts +1 -0
  140. package/dist/graph/onchain/table-ledger.spec.js +1 -0
  141. package/dist/graph/onchain/types.d.ts +57 -7
  142. package/dist/graph/onchain/viewport.d.ts +1 -0
  143. package/dist/graph/onchain/viewport.js +1 -1
  144. package/dist/harness/index.d.ts +1 -5
  145. package/dist/harness/index.js +1 -1
  146. package/dist/harness/verify.d.ts +6 -1
  147. package/dist/harness/verify.js +1 -1
  148. package/dist/index.js +1 -1
  149. package/dist/keeper/keeper.spec.js +1 -1
  150. package/dist/knowledge/alloc-audit-policy.spec.d.ts +1 -0
  151. package/dist/knowledge/alloc-audit-policy.spec.js +1 -0
  152. package/dist/knowledge/allocation-ledger.js +1 -1
  153. package/dist/knowledge/allocation-puzzle.d.ts +1 -1
  154. package/dist/knowledge/allocation-puzzle.js +1 -1
  155. package/dist/knowledge/allocation-risk.d.ts +4 -3
  156. package/dist/knowledge/allocation-risk.js +1 -1
  157. package/dist/knowledge/allocation-templates.js +1 -1
  158. package/dist/knowledge/arb-risk.d.ts +6 -6
  159. package/dist/knowledge/arb-risk.js +1 -1
  160. package/dist/knowledge/arbitration-ledger.d.ts +4 -4
  161. package/dist/knowledge/arbitration-ledger.js +1 -1
  162. package/dist/knowledge/arbitration-puzzle.d.ts +1 -1
  163. package/dist/knowledge/arbitration-puzzle.js +1 -1
  164. package/dist/knowledge/arbitration-risk.d.ts +4 -3
  165. package/dist/knowledge/arbitration-risk.js +1 -1
  166. package/dist/knowledge/arbitration-templates.js +1 -1
  167. package/dist/knowledge/baselines/guard-lint-baseline.spec.d.ts +1 -0
  168. package/dist/knowledge/baselines/guard-lint-baseline.spec.js +1 -0
  169. package/dist/knowledge/baselines/judgment-baselines.json +289 -0
  170. package/dist/knowledge/baselines/risk-baselines.spec.d.ts +1 -0
  171. package/dist/knowledge/baselines/risk-baselines.spec.js +1 -0
  172. package/dist/knowledge/baselines/risk-cases.d.ts +8 -0
  173. package/dist/knowledge/baselines/risk-cases.js +1 -0
  174. package/dist/knowledge/baselines/rules/alloc_audit.json +290 -0
  175. package/dist/knowledge/baselines/rules/allocation.json +492 -0
  176. package/dist/knowledge/baselines/rules/arb.json +155 -0
  177. package/dist/knowledge/baselines/rules/arbitration.json +366 -0
  178. package/dist/knowledge/baselines/rules/bridge.json +197 -0
  179. package/dist/knowledge/baselines/rules/contact.json +152 -0
  180. package/dist/knowledge/baselines/rules/demand.json +158 -0
  181. package/dist/knowledge/baselines/rules/graph.json +453 -0
  182. package/dist/knowledge/baselines/rules/guard.json +981 -0
  183. package/dist/knowledge/baselines/rules/machine.json +706 -0
  184. package/dist/knowledge/baselines/rules/order.json +549 -0
  185. package/dist/knowledge/baselines/rules/payment.json +205 -0
  186. package/dist/knowledge/baselines/rules/permission.json +330 -0
  187. package/dist/knowledge/baselines/rules/personal.json +139 -0
  188. package/dist/knowledge/baselines/rules/progress.json +346 -0
  189. package/dist/knowledge/baselines/rules/proof.json +158 -0
  190. package/dist/knowledge/baselines/rules/registrar.json +159 -0
  191. package/dist/knowledge/baselines/rules/repository.json +244 -0
  192. package/dist/knowledge/baselines/rules/resource.json +117 -0
  193. package/dist/knowledge/baselines/rules/reward.json +471 -0
  194. package/dist/knowledge/baselines/rules/service.json +595 -0
  195. package/dist/knowledge/baselines/rules/treasury.json +440 -0
  196. package/dist/knowledge/baselines/rules/util.json +101 -0
  197. package/dist/knowledge/bridge-risk.d.ts +6 -6
  198. package/dist/knowledge/bridge-risk.js +1 -1
  199. package/dist/knowledge/builtin-templates.d.ts +26 -0
  200. package/dist/knowledge/builtin-templates.js +1 -0
  201. package/dist/knowledge/contact-risk.d.ts +6 -6
  202. package/dist/knowledge/contact-risk.js +1 -1
  203. package/dist/knowledge/contract-invariants.d.ts +1 -0
  204. package/dist/knowledge/contract-invariants.js +1 -1
  205. package/dist/knowledge/demand-risk.d.ts +6 -6
  206. package/dist/knowledge/demand-risk.js +1 -1
  207. package/dist/knowledge/event-semantics.js +1 -1
  208. package/dist/knowledge/facts-sync.spec.d.ts +1 -0
  209. package/dist/knowledge/facts-sync.spec.js +1 -0
  210. package/dist/knowledge/getting-started.js +1 -1
  211. package/dist/knowledge/guard-design-patterns.js +1 -1
  212. package/dist/knowledge/guard-eval.d.ts +15 -0
  213. package/dist/knowledge/guard-eval.js +1 -0
  214. package/dist/knowledge/guard-eval.spec.d.ts +1 -0
  215. package/dist/knowledge/guard-eval.spec.js +1 -0
  216. package/dist/knowledge/guard-field-cognition.d.ts +1 -1
  217. package/dist/knowledge/guard-field-cognition.js +1 -1
  218. package/dist/knowledge/guard-ledger.js +1 -1
  219. package/dist/knowledge/guard-lint.d.ts +1 -1
  220. package/dist/knowledge/guard-lint.js +1 -1
  221. package/dist/knowledge/guard-risk.d.ts +7 -19
  222. package/dist/knowledge/guard-risk.js +1 -1
  223. package/dist/knowledge/guard-templates.js +1 -1
  224. package/dist/knowledge/guard-translation.js +1 -1
  225. package/dist/knowledge/index.d.ts +51 -45
  226. package/dist/knowledge/index.js +1 -1
  227. package/dist/knowledge/industry-registry.js +1 -1
  228. package/dist/knowledge/industry-rule-node.d.ts +7 -0
  229. package/dist/knowledge/industry-rule-node.js +1 -0
  230. package/dist/knowledge/industry-strategy.js +1 -1
  231. package/dist/knowledge/jsonrpc-enum.js +1 -1
  232. package/dist/knowledge/machine-ledger.js +1 -1
  233. package/dist/knowledge/machine-risk.d.ts +4 -7
  234. package/dist/knowledge/machine-risk.js +1 -1
  235. package/dist/knowledge/machine-templates.js +1 -1
  236. package/dist/knowledge/machine-translation.js +1 -1
  237. package/dist/knowledge/migration-preflight.js +1 -1
  238. package/dist/knowledge/operation-dictionary.js +1 -1
  239. package/dist/knowledge/order-ledger.js +1 -1
  240. package/dist/knowledge/order-puzzle.d.ts +3 -3
  241. package/dist/knowledge/order-puzzle.js +1 -1
  242. package/dist/knowledge/order-risk.d.ts +7 -12
  243. package/dist/knowledge/order-risk.js +1 -1
  244. package/dist/knowledge/order-templates.js +1 -1
  245. package/dist/knowledge/passport-ledger.js +1 -1
  246. package/dist/knowledge/passport-templates.js +1 -1
  247. package/dist/knowledge/payment-risk.d.ts +8 -7
  248. package/dist/knowledge/payment-risk.js +1 -1
  249. package/dist/knowledge/payment-tracker.js +1 -1
  250. package/dist/knowledge/permission-ledger.js +1 -1
  251. package/dist/knowledge/permission-puzzle.d.ts +12 -12
  252. package/dist/knowledge/permission-puzzle.js +1 -1
  253. package/dist/knowledge/permission-risk.d.ts +4 -10
  254. package/dist/knowledge/permission-risk.js +1 -1
  255. package/dist/knowledge/permission-templates.js +1 -1
  256. package/dist/knowledge/personal-risk.d.ts +6 -6
  257. package/dist/knowledge/personal-risk.js +1 -1
  258. package/dist/knowledge/progress-ledger.js +1 -1
  259. package/dist/knowledge/progress-puzzle.d.ts +2 -2
  260. package/dist/knowledge/progress-puzzle.js +1 -1
  261. package/dist/knowledge/progress-risk.d.ts +4 -3
  262. package/dist/knowledge/progress-risk.js +1 -1
  263. package/dist/knowledge/progress-templates.js +1 -1
  264. package/dist/knowledge/proof-risk.d.ts +6 -6
  265. package/dist/knowledge/proof-risk.js +1 -1
  266. package/dist/knowledge/puzzle-projections.d.ts +11 -0
  267. package/dist/knowledge/puzzle-projections.js +1 -0
  268. package/dist/knowledge/recipient-constraint.d.ts +20 -1
  269. package/dist/knowledge/recipient-constraint.js +1 -1
  270. package/dist/knowledge/registrar-risk.d.ts +6 -6
  271. package/dist/knowledge/registrar-risk.js +1 -1
  272. package/dist/knowledge/repository-risk.d.ts +7 -7
  273. package/dist/knowledge/repository-risk.js +1 -1
  274. package/dist/knowledge/resource-risk.d.ts +6 -6
  275. package/dist/knowledge/resource-risk.js +1 -1
  276. package/dist/knowledge/reward-ledger.d.ts +1 -1
  277. package/dist/knowledge/reward-ledger.js +1 -1
  278. package/dist/knowledge/reward-puzzle.d.ts +2 -2
  279. package/dist/knowledge/reward-puzzle.js +1 -1
  280. package/dist/knowledge/reward-risk.d.ts +5 -6
  281. package/dist/knowledge/reward-risk.js +1 -1
  282. package/dist/knowledge/rule-node-analyzers.d.ts +43 -0
  283. package/dist/knowledge/rule-node-analyzers.js +1 -0
  284. package/dist/knowledge/rule-node-analyzers.spec.d.ts +1 -0
  285. package/dist/knowledge/rule-node-analyzers.spec.js +1 -0
  286. package/dist/knowledge/rule-outcome.d.ts +5 -0
  287. package/dist/knowledge/rule-outcome.js +1 -0
  288. package/dist/knowledge/safety-rules.js +1 -1
  289. package/dist/knowledge/scenario-modes.d.ts +2 -2
  290. package/dist/knowledge/scenario-modes.js +1 -1
  291. package/dist/knowledge/scenario-topology.js +1 -1
  292. package/dist/knowledge/service-allocator-audit-node.js +1 -1
  293. package/dist/knowledge/service-ledger.js +1 -1
  294. package/dist/knowledge/service-puzzle.d.ts +2 -2
  295. package/dist/knowledge/service-puzzle.js +1 -1
  296. package/dist/knowledge/service-risk-node.js +1 -1
  297. package/dist/knowledge/service-risk.d.ts +4 -4
  298. package/dist/knowledge/service-risk.js +1 -1
  299. package/dist/knowledge/service-templates.js +1 -1
  300. package/dist/knowledge/strategy-manuals.d.ts +1 -1
  301. package/dist/knowledge/strategy-manuals.js +1 -1
  302. package/dist/knowledge/template-loader.d.ts +84 -0
  303. package/dist/knowledge/template-loader.js +1 -0
  304. package/dist/knowledge/template-loader.spec.d.ts +1 -0
  305. package/dist/knowledge/template-loader.spec.js +1 -0
  306. package/dist/knowledge/template-registry.js +1 -1
  307. package/dist/knowledge/template-scanner.d.ts +17 -0
  308. package/dist/knowledge/template-scanner.js +1 -0
  309. package/dist/knowledge/template-scanner.spec.d.ts +1 -0
  310. package/dist/knowledge/template-scanner.spec.js +1 -0
  311. package/dist/knowledge/tools-reference.js +1 -1
  312. package/dist/knowledge/treasury-ledger.d.ts +1 -1
  313. package/dist/knowledge/treasury-ledger.js +1 -1
  314. package/dist/knowledge/treasury-puzzle.d.ts +3 -3
  315. package/dist/knowledge/treasury-puzzle.js +1 -1
  316. package/dist/knowledge/treasury-risk.d.ts +6 -4
  317. package/dist/knowledge/treasury-risk.js +1 -1
  318. package/dist/knowledge/treasury-templates.js +1 -1
  319. package/dist/knowledge/util-risk.d.ts +6 -6
  320. package/dist/knowledge/util-risk.js +1 -1
  321. package/dist/knowledge/workflow-guidance.d.ts +4 -0
  322. package/dist/knowledge/workflow-guidance.js +1 -1
  323. package/dist/knowledge/workspace-lists.js +1 -1
  324. package/dist/monitor/MonitorLoop.js +1 -1
  325. package/dist/participation/arbitrator-interest.js +1 -1
  326. package/dist/participation/radar-core.js +1 -1
  327. package/dist/persona/analyzer.js +1 -1
  328. package/dist/persona/bridge.js +1 -1
  329. package/dist/persona/facet-profile.d.ts +33 -0
  330. package/dist/persona/facet-profile.js +1 -0
  331. package/dist/persona/index.js +1 -1
  332. package/dist/persona/model.d.ts +2 -1
  333. package/dist/persona/model.js +1 -1
  334. package/dist/persona/persona-audit.spec.d.ts +1 -0
  335. package/dist/persona/persona-audit.spec.js +1 -0
  336. package/dist/persona/topology-focus.d.ts +2 -2
  337. package/dist/persona/topology-focus.js +1 -1
  338. package/dist/persona/types.d.ts +14 -0
  339. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  340. package/dist/playbooks/service-build/facet-money.d.ts +33 -0
  341. package/dist/playbooks/service-build/facet-money.js +1 -0
  342. package/dist/playbooks/service-build/facet-money.spec.d.ts +1 -0
  343. package/dist/playbooks/service-build/facet-money.spec.js +1 -0
  344. package/dist/playbooks/service-build/machine-panorama.d.ts +20 -0
  345. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  346. package/dist/playbooks/service-build/merchant-guide.d.ts +2 -2
  347. package/dist/playbooks/service-build/migration-planner.d.ts +43 -0
  348. package/dist/playbooks/service-build/migration-planner.js +1 -0
  349. package/dist/playbooks/service-build/object-panorama.d.ts +65 -24
  350. package/dist/playbooks/service-build/object-panorama.js +1 -1
  351. package/dist/playbooks/service-build/participation-radar.js +1 -1
  352. package/dist/playbooks/service-build/pipeline-actions.d.ts +3 -3
  353. package/dist/playbooks/service-build/pipeline-actions.js +1 -1
  354. package/dist/playbooks/service-build/reverse-mapping.d.ts +1 -0
  355. package/dist/playbooks/service-build/reverse-mapping.js +1 -1
  356. package/dist/playbooks/service-build/risk-aggregator.d.ts +4 -2
  357. package/dist/playbooks/service-build/risk-aggregator.js +1 -1
  358. package/dist/playbooks/service-build/semantic-graph.js +1 -1
  359. package/dist/playbooks/service-build/service-panorama.d.ts +56 -9
  360. package/dist/playbooks/service-build/service-panorama.js +1 -1
  361. package/dist/playbooks/service-build/topology-evaluation.spec.d.ts +1 -0
  362. package/dist/playbooks/service-build/topology-evaluation.spec.js +1 -0
  363. package/dist/playbooks/service-build/topology-query.d.ts +13 -2
  364. package/dist/playbooks/service-build/topology-query.js +1 -1
  365. package/dist/playbooks/service-build/workflow-design-assessment.d.ts +2 -2
  366. package/dist/playbooks/service-build/workflow-design-assessment.js +1 -1
  367. package/dist/relationship/registry.js +1 -1
  368. package/dist/review/arb.d.ts +0 -2
  369. package/dist/review/arb.js +1 -1
  370. package/dist/review/machine.js +1 -1
  371. package/dist/review/order.d.ts +0 -1
  372. package/dist/review/order.js +1 -1
  373. package/dist/review/service.js +1 -1
  374. package/dist/review/types.d.ts +7 -0
  375. package/dist/role/profiles.js +1 -1
  376. package/dist/rules.d.ts +1 -2
  377. package/dist/rules.js +1 -1
  378. package/dist/safety/confirm-gate.js +1 -1
  379. package/dist/schema/benchmark-migration/index.d.ts +207 -0
  380. package/dist/schema/benchmark-migration/index.js +1 -0
  381. package/dist/schema/call/allocation.d.ts +1 -1
  382. package/dist/schema/call/allocation.js +1 -1
  383. package/dist/schema/call/arbitration.d.ts +1 -1
  384. package/dist/schema/call/arbitration.js +1 -1
  385. package/dist/schema/call/base.d.ts +3374 -670
  386. package/dist/schema/call/base.js +1 -1
  387. package/dist/schema/call/contact.d.ts +1 -1
  388. package/dist/schema/call/demand.d.ts +1 -1
  389. package/dist/schema/call/guard.d.ts +3 -3
  390. package/dist/schema/call/handler.js +1 -1
  391. package/dist/schema/call/machine.d.ts +5 -5
  392. package/dist/schema/call/order.d.ts +3 -3
  393. package/dist/schema/call/payment.js +1 -1
  394. package/dist/schema/call/permission-handler.d.ts +1 -1
  395. package/dist/schema/call/permission-handler.js +1 -1
  396. package/dist/schema/call/permission.d.ts +16 -16
  397. package/dist/schema/call/permission.js +1 -1
  398. package/dist/schema/call/personal.d.ts +8 -8
  399. package/dist/schema/call/personal.js +1 -1
  400. package/dist/schema/call/progress.d.ts +3 -3
  401. package/dist/schema/call/receipt.d.ts +28 -0
  402. package/dist/schema/call/receipt.js +1 -0
  403. package/dist/schema/call/repository.d.ts +11 -11
  404. package/dist/schema/call/repository.js +1 -1
  405. package/dist/schema/call/reward.d.ts +1 -1
  406. package/dist/schema/call/semantic-customer-advice.spec.d.ts +1 -0
  407. package/dist/schema/call/semantic-customer-advice.spec.js +1 -0
  408. package/dist/schema/call/semantic.d.ts +5 -2
  409. package/dist/schema/call/semantic.js +1 -1
  410. package/dist/schema/call/service.d.ts +7 -7
  411. package/dist/schema/call/service.js +1 -1
  412. package/dist/schema/call/treasury.d.ts +1 -1
  413. package/dist/schema/call/treasury.js +1 -1
  414. package/dist/schema/common/index.d.ts +6 -6
  415. package/dist/schema/common/index.js +1 -1
  416. package/dist/schema/config/index.d.ts +50 -1
  417. package/dist/schema/config/index.js +1 -1
  418. package/dist/schema/evaluation/index.d.ts +307 -213
  419. package/dist/schema/evaluation/index.js +1 -1
  420. package/dist/schema/goal/index.d.ts +6 -6
  421. package/dist/schema/goal/planning.d.ts +17 -17
  422. package/dist/schema/goal/planning.js +1 -1
  423. package/dist/schema/index.d.ts +1 -1
  424. package/dist/schema/index.js +1 -1
  425. package/dist/schema/industry-pack/index.d.ts +1 -1
  426. package/dist/schema/interaction/index.d.ts +1 -1
  427. package/dist/schema/keeper/index.d.ts +1 -1
  428. package/dist/schema/local/index.js +1 -1
  429. package/dist/schema/messenger/index.d.ts +26 -26
  430. package/dist/schema/operations.d.ts +59 -43
  431. package/dist/schema/operations.js +1 -1
  432. package/dist/schema/persona/index.d.ts +4732 -24
  433. package/dist/schema/persona/index.js +1 -1
  434. package/dist/schema/query/bi.d.ts +830 -10
  435. package/dist/schema/query/bi.js +1 -1
  436. package/dist/schema/query/index.d.ts +44 -44
  437. package/dist/schema/query/index.js +1 -1
  438. package/dist/schema/schema-version.js +1 -1
  439. package/dist/schema/workflow/index.d.ts +1 -1
  440. package/dist/schema/workspace/index.d.ts +2 -2
  441. package/dist/schema-query-impl/index.d.ts +9 -0
  442. package/dist/schema-query-impl/index.js +1 -1
  443. package/dist/schemas/account_operation.output.json +1 -1
  444. package/dist/schemas/benchmark_migration_operation.output.json +793 -0
  445. package/dist/schemas/benchmark_migration_operation.schema.json +83 -0
  446. package/dist/schemas/bridge_operation.output.json +1 -1
  447. package/dist/schemas/bridge_operation.schema.json +5 -5
  448. package/dist/schemas/config_operation.output.json +252 -0
  449. package/dist/schemas/config_operation.schema.json +21 -1
  450. package/dist/schemas/evaluation_operation.output.json +702 -162
  451. package/dist/schemas/evaluation_operation.schema.json +0 -429
  452. package/dist/schemas/goal_operation.schema.json +8 -8
  453. package/dist/schemas/guard2file.schema.json +1 -1
  454. package/dist/schemas/index.json +7 -7
  455. package/dist/schemas/keeper_operation.output.json +1 -1
  456. package/dist/schemas/local_history_operation.output.json +1 -1
  457. package/dist/schemas/local_info_operation.output.json +1 -1
  458. package/dist/schemas/local_mark_operation.output.json +1 -1
  459. package/dist/schemas/machineNode2file.schema.json +1 -1
  460. package/dist/schemas/messenger_operation.output.json +1 -1
  461. package/dist/schemas/messenger_operation.schema.json +24 -12
  462. package/dist/schemas/monitor_events.output.json +1 -1
  463. package/dist/schemas/monitor_subscription.output.json +1 -1
  464. package/dist/schemas/onchain_events.output.json +2 -2
  465. package/dist/schemas/onchain_operations.output.json +6359 -3724
  466. package/dist/schemas/onchain_operations.schema.json +191 -141
  467. package/dist/schemas/onchain_operations_allocation.schema.json +13 -11
  468. package/dist/schemas/onchain_operations_arbitration.schema.json +10 -8
  469. package/dist/schemas/onchain_operations_contact.schema.json +7 -5
  470. package/dist/schemas/onchain_operations_demand.schema.json +7 -5
  471. package/dist/schemas/onchain_operations_gen_passport.schema.json +5 -3
  472. package/dist/schemas/onchain_operations_gen_proof.schema.json +1 -1
  473. package/dist/schemas/onchain_operations_guard.schema.json +5 -3
  474. package/dist/schemas/onchain_operations_machine.schema.json +22 -18
  475. package/dist/schemas/onchain_operations_order.schema.json +11 -7
  476. package/dist/schemas/onchain_operations_payment.schema.json +3 -3
  477. package/dist/schemas/onchain_operations_permission.schema.json +19 -11
  478. package/dist/schemas/onchain_operations_personal.schema.json +16 -10
  479. package/dist/schemas/onchain_operations_progress.schema.json +11 -7
  480. package/dist/schemas/onchain_operations_proof.schema.json +5 -3
  481. package/dist/schemas/onchain_operations_repository.schema.json +12 -8
  482. package/dist/schemas/onchain_operations_reward.schema.json +11 -9
  483. package/dist/schemas/onchain_operations_service.schema.json +28 -22
  484. package/dist/schemas/onchain_operations_treasury.schema.json +13 -11
  485. package/dist/schemas/onchain_table_data.output.json +88 -88
  486. package/dist/schemas/persona_operation.output.json +15875 -1
  487. package/dist/schemas/persona_operation.schema.json +3056 -478
  488. package/dist/schemas/query_toolkit.output.json +1325 -212
  489. package/dist/schemas/query_toolkit.schema.json +60 -2
  490. package/dist/schemas/workflow_operation.schema.json +4 -2
  491. package/dist/strategy/metrics.js +1 -1
  492. package/dist/strategy/scorecard.js +1 -1
  493. package/dist/tools/handlers/benchmark-migration.d.ts +2 -0
  494. package/dist/tools/handlers/benchmark-migration.js +1 -0
  495. package/dist/tools/handlers/bridge.js +1 -1
  496. package/dist/tools/handlers/config.js +1 -1
  497. package/dist/tools/handlers/dispatch-expectations.d.ts +3 -0
  498. package/dist/tools/handlers/dispatch-expectations.js +1 -0
  499. package/dist/tools/handlers/evaluation.js +1 -1
  500. package/dist/tools/handlers/industry-pack.js +1 -1
  501. package/dist/tools/handlers/onchain.js +1 -1
  502. package/dist/tools/handlers/query.js +1 -1
  503. package/dist/tools/handlers/schema-query.js +1 -1
  504. package/dist/tools/index.js +1 -1
  505. package/dist/tools/move-fn-index.gen.d.ts +3 -0
  506. package/dist/tools/move-fn-index.gen.js +1 -0
  507. package/dist/tools/registry/business.js +1 -1
  508. package/dist/tools/registry/config.js +1 -1
  509. package/dist/tools/registry/evaluation.d.ts +2 -0
  510. package/dist/tools/registry/evaluation.js +1 -0
  511. package/dist/tools/registry/onchain.js +1 -1
  512. package/dist/tools/registry/query.js +1 -1
  513. package/dist/tools/sanitize-output.d.ts +3 -0
  514. package/dist/tools/sanitize-output.js +1 -0
  515. package/dist/tools/sanitize-output.spec.d.ts +1 -0
  516. package/dist/tools/sanitize-output.spec.js +1 -0
  517. package/dist/tools/shared.d.ts +0 -1
  518. package/dist/tools/shared.js +1 -1
  519. package/dist/tools/wrap.js +1 -1
  520. package/package.json +9 -3
  521. package/dist/customer/customer-advice.d.ts +0 -32
  522. package/dist/customer/customer-advice.js +0 -1
  523. package/dist/customer/info-puzzle.d.ts +0 -146
  524. package/dist/customer/info-puzzle.js +0 -1
  525. package/dist/customer/order-strategy.d.ts +0 -17
  526. package/dist/customer/order-strategy.js +0 -1
  527. package/dist/customer/preorder-compare.d.ts +0 -24
  528. package/dist/customer/preorder-compare.js +0 -1
  529. package/dist/customer/reminder-system.d.ts +0 -42
  530. package/dist/customer/reminder-system.js +0 -1
  531. package/dist/customer/risk-assessment.d.ts +0 -13
  532. package/dist/customer/risk-assessment.js +0 -1
  533. package/dist/evaluation/builtins/service-risk.d.ts +0 -7
  534. package/dist/evaluation/builtins/service-risk.js +0 -1
  535. package/dist/knowledge/trust-metrics.d.ts +0 -66
  536. package/dist/knowledge/trust-metrics.js +0 -1
  537. package/dist/schema/trust/index.d.ts +0 -334
  538. package/dist/schema/trust/index.js +0 -1
  539. package/dist/schemas/trust_score.output.json +0 -847
  540. package/dist/schemas/trust_score.schema.json +0 -364
  541. package/dist/tools/handlers/trust.d.ts +0 -16
  542. package/dist/tools/handlers/trust.js +0 -1
  543. package/dist/tools/registry/trust.d.ts +0 -2
  544. package/dist/tools/registry/trust.js +0 -1
@@ -1 +1 @@
1
- export{CapabilityRegistry,getCapabilityRegistry,CAPABILITY_MANIFEST_VERSION}from'./capability-manifest.js';export{IndustryModeRegistry,getIndustryModeRegistry,INDUSTRY_MODE_REGISTRY_VERSION}from'./registry.js';export{CustomRegistryFile}from'./custom-registry-file.js';export{MetricRegistry,getMetricRegistry,BUILTIN_METRICS_COUNT}from'./metric-registry.js';export{ConstraintRegistry,getConstraintRegistry,BUILTIN_CONSTRAINTS_COUNT}from'./constraint-registry.js';export{ModeEvaluator}from'./mode-evaluator.js';export{BUILTIN_MODES}from'./modes.js';export{registerIndustryPack,validatePackManifest,listRegisteredPacks,unregisterIndustryPack,scanPacks,rescanPack,resolveIndustryPackDir,scanDefaultIndustryPacks,scaffoldIndustryPack,seedBuiltinIndustryTemplates,seedBuiltinStrategyManuals,diffIndustryPack,resetIndustryPath,readMergedPackIfPresent,buildPristineMergedPack,locatePackAndRemainder,ensureIndustryReadme,industryReadmeContent}from'./industry-pack.js';export{registerDisputeRules,registerComplianceRules,registerSupplyRules,registerIndustryRules,registerIndustryPlaybook,resolveDisputeRules,resolveComplianceRules,resolveSupplyRules,resolveIndustryRules,resolveIndustryPlaybook,listRegisteredDisputeCategories,listRegisteredComplianceCategories,listRegisteredSupplyCategories,listRegisteredIndustryRuleCategories,listRegisteredPlaybookCategories,compileIndustryRule,compileIndustryRules,registerIndustryRulesToEngine,unregisterIndustryRulesFromEngine}from'./industry-layers.js';export{registerIndustryPersonae,getIndustryPersona,listPersonaeIndustries,unregisterIndustryPersonae}from'../persona/pack-personae.js';
1
+ export{CapabilityRegistry,getCapabilityRegistry,CAPABILITY_MANIFEST_VERSION}from'./capability-manifest.js';export{IndustryModeRegistry,getIndustryModeRegistry,INDUSTRY_MODE_REGISTRY_VERSION}from'./registry.js';export{CustomRegistryFile}from'./custom-registry-file.js';export{MetricRegistry,getMetricRegistry,BUILTIN_METRICS_COUNT}from'./metric-registry.js';export{ConstraintRegistry,getConstraintRegistry,BUILTIN_CONSTRAINTS_COUNT}from'./constraint-registry.js';export{ModeEvaluator}from'./mode-evaluator.js';export{BUILTIN_MODES}from'./modes.js';export{registerIndustryPack,validatePackManifest,listRegisteredPacks,unregisterIndustryPack,scanPacks,rescanPack,resolveIndustryPackDir,scanDefaultIndustryPacks,scaffoldIndustryPack,seedBuiltinIndustryTemplates,seedBuiltinStrategyManuals,diffIndustryPack,resetIndustryPath,readMergedPackIfPresent,buildPristineMergedPack,locatePackAndRemainder,ensureIndustryReadme,industryReadmeContent}from'./industry-pack.js';export{registerDisputeRules,registerComplianceRules,registerSupplyRules,registerIndustryRules,registerIndustryPlaybook,resolveDisputeRules,resolveComplianceRules,resolveSupplyRules,resolveIndustryRules,resolveIndustryPlaybook,listRegisteredDisputeCategories,listRegisteredComplianceCategories,listRegisteredSupplyCategories,listRegisteredIndustryRuleCategories,listRegisteredPlaybookCategories}from'./industry-layers.js';export{registerIndustryPersonae,getIndustryPersona,listPersonaeIndustries,unregisterIndustryPersonae}from'../persona/pack-personae.js';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ import{afterEach,beforeEach,describe,expect,it}from'vitest';import{existsSync,mkdirSync,mkdtempSync,readFileSync,rmSync,writeFileSync}from'node:fs';import{tmpdir}from'node:os';import{join}from'node:path';import{buildPristineMergedPack,industryReadmeContent,registerIndustryPack,scaffoldIndustryPack,scanPacks}from'./industry-pack.js';import{evaluateIndustryCondition,mergedBaselinesOverlay,resolveComplianceRules,resolveDisputeRules,resolveIndustryBaselines,resolveIndustryPlaybook,resolveIndustryRules,resolveSupplyRules}from'./industry-layers.js';import{applyHardConstraints,resolveCategoryMatchRules}from'../evaluation/category-match-rules.js';import{setJudgmentIndustryOverlay,getJudgmentDoc,clearJudgmentLayers}from'../config/judgment.js';import{PERSONA_ROLES}from'../persona/types.js';let root;beforeEach(()=>{root=mkdtempSync(join(tmpdir(),'wowok-industry-audit-'));}),afterEach(()=>{if(existsSync(root))rmSync(root,{'recursive':!![],'force':!![]});clearJudgmentLayers();});function manifest(a,b){return{'pack':'industry-pack','name':a,'display_name':a,'version':'1.0.0','layers':b};}describe('industry\x20audit\x20—\x20scaffold\x20shape',()=>{it('14.\x20scaffold\x20writes\x20pack.json\x20(all\x20sections;\x20baselines/mode\x20null)\x20+\x20template\x20playbook.md',()=>{const a=scaffoldIndustryPack('audit_scaffold',root);expect(a['ok'])['toBe'](!![]),expect(a['files'])['toEqual'](['pack.json','playbook.md']);const b=JSON['parse'](readFileSync(join(a['dir'],'pack.json'),'utf-8'));expect(b['manifest']['pack'])['toBe']('industry-pack'),expect(b['manifest']['layers'])['toContain']('playbook');for(const d of['match','personae','dispute','compliance','supply','rules']){expect(b[d])['not']['toBeNull']();}expect(b['match']?.['category'])['toBe']('audit_scaffold'),expect(b['baselines'])['toBeNull'](),expect(b['mode'])['toBeNull'](),expect(b['compliance']?.['refund_window'])['toEqual']({'not_applicable':!![]}),expect(b['personae'])['toHaveLength'](PERSONA_ROLES['length']);const c=readFileSync(join(a['dir'],'playbook.md'),'utf-8');expect(c)['toContain']('Industry\x20Playbook'),expect(c)['toContain']('(Example)');}),it('14b.\x20industry\x20README\x20documents\x20the\x20baselines\x20layer\x20and\x20legal\x20layer\x20names',()=>{const a=industryReadmeContent();expect(a)['toContain']('##\x20baselines\x20—\x20judgment\x20baselines\x20overlay'),expect(a)['toContain']('factory\x20<\x20pack\x20baselines\x20<\x20persona\x20fragment\x20<\x20user\x20document\x20<\x20session\x20overrides'),expect(a)['toContain']('\x22severity_deduction\x22:\x20{\x20\x22critical\x22:\x2040\x20}'),expect(a)['toContain']('\x22rule_id\x22:\x20\x22R-UTIL-03\x22,\x20\x22enabled\x22:\x20false'),expect(a)['toContain']('Legal'),expect(a)['toContain']('`baselines`,\x20`playbook`');});}),describe('industry\x20audit\x20—\x20meaningful-content\x20gates',()=>{it('15.\x20a\x20pristine\x20(placeholder-only)\x20pack\x20registers\x20NOTHING:\x20every\x20resolve*\x20stays\x20undefined',()=>{const a=buildPristineMergedPack('audit_pristine');a['manifest']['layers']=['match','personae','dispute','compliance','supply','rules'];const b=registerIndustryPack(a);expect(b['ok'])['toBe'](!![]),expect(b['registered'])['toEqual']([]),expect(resolveCategoryMatchRules('audit_pristine'))['toBeUndefined'](),expect(resolveDisputeRules('audit_pristine'))['toBeUndefined'](),expect(resolveComplianceRules('audit_pristine'))['toBeUndefined'](),expect(resolveSupplyRules('audit_pristine'))['toBeUndefined'](),expect(resolveIndustryRules('audit_pristine'))['toBeUndefined'](),expect(resolveIndustryBaselines('audit_pristine'))['toBeUndefined']();const c=buildPristineMergedPack('audit_pristine2');c['manifest']['layers']=['compliance'],c['compliance']={'category':'audit_pristine2','refund_window':{'days':0xe}},expect(registerIndustryPack(c)['registered'])['toEqual'](['compliance']),expect(resolveComplianceRules('audit_pristine2')?.['refund_window']?.['days'])['toBe'](0xe);});}),describe('industry\x20audit\x20—\x20data\x20layers\x20(dispute/compliance/supply/rules)',()=>{it('16.\x20meaningful\x20dispute/compliance/supply/rules\x20register\x20and\x20resolve;\x20structured\x20conditions\x20evaluate',()=>{const a='audit_data',b=registerIndustryPack({'manifest':manifest(a,['dispute','compliance','supply','rules']),'dispute':{'category':a,'sla_tiers':[{'level':'L1','timeout':'72h','description':'standard\x20tier'}],'fault_rules':['late\x20delivery\x20without\x20evidence\x20->\x20merchant']},'compliance':{'category':a,'refund_window':{'days':0xe},'qualification':['Trade\x20License']},'supply':{'category':a,'supplier_qualification':['ISO-9001'],'first_order_policy':'sample-only','redundancy_required':!![]},'rules':{'category':a,'rules':[{'rule_id':'audit_r1','dimension':'risk','description':'must\x20have\x20arbitration','severity':'hard','red_flag':!![],'condition':{'field':'has_arbitration','op':'eq','value':!![]}},{'rule_id':'audit_r2','description':'counterfeit\x20suspicion','condition_hint':'buyer\x20reports\x20counterfeit'}]}});expect(b['ok'])['toBe'](!![]),expect(b['registered'])['toEqual'](['dispute','compliance','supply','rules']),expect(resolveDisputeRules(a)?.['sla_tiers']?.[0x0]?.['level'])['toBe']('L1'),expect(resolveComplianceRules(a)?.['refund_window']?.['days'])['toBe'](0xe),expect(resolveSupplyRules(a)?.['first_order_policy'])['toBe']('sample-only');const c=resolveIndustryRules(a)?.['rules']??[];expect(c)['toHaveLength'](0x2),expect(c[0x1]?.['condition'])['toBeUndefined'](),expect(evaluateIndustryCondition(c[0x0]['condition'],{'facts':{'has_arbitration':!![]},'entities':{}}))['toBe'](!![]),expect(evaluateIndustryCondition(c[0x0]['condition'],{'facts':{'has_arbitration':![]},'entities':{}}))['toBe'](![]);}),it('17.\x20a\x20meaningful\x20match\x20layer\x20is\x20queryable:\x20constraints\x20apply,\x20modes/weights\x20visible',()=>{const a='audit_match',b=registerIndustryPack({'manifest':manifest(a,['match']),'match':{'category':a,'hard_constraints':[{'field':'bPublished','kind':'truthy','description':'service\x20must\x20be\x20published'}],'soft_weights':{'trust':0x28,'price':0xa},'highlight_fields':['wip_hash'],'calendar_mode':'slot','geo_mode':'near','pricing_rules':['time_slot']}});expect(b['ok'])['toBe'](!![]),expect(b['registered'])['toEqual'](['match']);const c=resolveCategoryMatchRules(a);expect(c?.['geo_mode'])['toBe']('near'),expect(c?.['calendar_mode'])['toBe']('slot'),expect(c?.['soft_weights'])['toEqual']({'trust':0x28,'price':0xa});const d=applyHardConstraints(c,[{'bPublished':![]},{'bPublished':!![]}]);expect(d['passed'])['toHaveLength'](0x1),expect(d['dropped'][0x0]?.['candidate'])['toEqual']({'bPublished':![]});}),it('18a.\x20a\x20legal\x20baselines\x20fragment\x20registers\x20and\x20drives\x20mergedBaselinesOverlay\x20into\x20the\x20judgment\x20chain',()=>{const a='audit_base_ok',b={'monitor':{'thresholds':{'messenger_timeout_hours':0x3}}},c=registerIndustryPack({'manifest':manifest(a,['baselines']),'baselines':b});expect(c['ok'])['toBe'](!![]),expect(c['registered'])['toEqual'](['baselines']),expect(resolveIndustryBaselines(a)?.['fragment'])['toEqual'](b);const d=mergedBaselinesOverlay([a]);expect(d)['toEqual'](b),expect(setJudgmentIndustryOverlay(d)['ok'])['toBe'](!![]),expect(getJudgmentDoc()['monitor']['thresholds']['messenger_timeout_hours'])['toBe'](0x3);}),it('18b.\x20a\x20misspelled-dimension\x20baselines\x20fragment\x20is\x20rejected\x20with\x20a\x20visible\x20error\x20(register\x20+\x20scan)',()=>{const a={'evaluation':{'weights':{'trust_revews':0x32}}},b=registerIndustryPack({'manifest':manifest('audit_base_bad',['baselines']),'baselines':a});expect(b['ok'])['toBe'](![]),expect(b['errors']['join']('\x20'))['toContain']('unknown\x20dimension\x20\x27trust_revews\x27'),expect(resolveIndustryBaselines('audit_base_bad'))['toBeUndefined']();const c=join(root,'audit_base_scan');mkdirSync(c,{'recursive':!![]}),writeFileSync(join(c,'pack.json'),JSON['stringify']({'manifest':manifest('audit_base_scan',['baselines']),'baselines':a}),'utf-8');const [d]=scanPacks(root);expect(d['ok'])['toBe'](![]),expect(d['errors']['join']('\x20'))['toContain']('trust_revews');});}),describe('industry\x20audit\x20—\x20playbook\x20layer',()=>{it('19a.\x20real\x20playbook\x20content\x20registers\x20and\x20resolves',()=>{const a='audit_play',b=join(root,a);mkdirSync(b,{'recursive':!![]}),writeFileSync(join(b,'pack.json'),JSON['stringify']({'manifest':manifest(a,['playbook'])}),'utf-8'),writeFileSync(join(b,'playbook.md'),'#\x20audit_play\x20playbook\x0a\x0aAUDIT-REAL:\x20always\x20answer\x20complaint\x20threads\x20within\x204\x20hours.\x0a','utf-8');const [c]=scanPacks(root);expect(c['ok'])['toBe'](!![]),expect(c['registered'])['toContain']('playbook'),expect(resolveIndustryPlaybook(a)?.['content'])['toContain']('AUDIT-REAL');}),it('19b.\x20the\x20scaffolded\x20TEMPLATE\x20playbook\x20is\x20SKIPPED\x20(placeholder\x20bullets\x20carry\x20no\x20registerable\x20content)',()=>{scaffoldIndustryPack('audit_play_tmpl',root);const [a]=scanPacks(root);expect(a['ok'])['toBe'](!![]),expect(a['registered'])['toEqual']([]),expect(resolveIndustryPlaybook('audit_play_tmpl'))['toBeUndefined']();}),it('19c.\x20template\x20+\x20ONE\x20real\x20user\x20line\x20IS\x20meaningful\x20(no\x20false\x20negative\x20on\x20real\x20content)',()=>{scaffoldIndustryPack('audit_play_mix',root);const a=join(root,'audit_play_mix','playbook.md');writeFileSync(a,readFileSync(a,'utf-8')+'\x0a-\x20AUDIT-REAL:\x20answer\x20complaint\x20threads\x20within\x204\x20hours.\x0a','utf-8');const [b]=scanPacks(root);expect(b['ok'])['toBe'](!![]),expect(b['registered'])['toContain']('playbook'),expect(resolveIndustryPlaybook('audit_play_mix')?.['content'])['toContain']('AUDIT-REAL');});}),describe('industry\x20audit\x20—\x20manifest.layers\x20enable\x20flags',()=>{it('20.\x20a\x20layer\x20removed\x20from\x20manifest.layers\x20is\x20ignored\x20even\x20when\x20its\x20section\x20carries\x20real\x20content',()=>{const a='audit_off',b=registerIndustryPack({'manifest':manifest(a,['compliance']),'dispute':{'category':a,'sla_tiers':[{'level':'L1','timeout':'1h'}]},'compliance':{'category':a,'refund_window':{'days':0x7}}});expect(b['ok'])['toBe'](!![]),expect(b['registered'])['toEqual'](['compliance']),expect(resolveComplianceRules(a)?.['refund_window']?.['days'])['toBe'](0x7),expect(resolveDisputeRules(a))['toBeUndefined']();});});
@@ -1,4 +1,3 @@
1
- import type { EvaluationRule } from "../evaluation/types.js";
2
1
  export interface DisputeSlaTier {
3
2
  level: string;
4
3
  timeout?: string;
@@ -54,22 +53,32 @@ export interface IndustryPlaybook {
54
53
  category: string;
55
54
  content: string;
56
55
  }
56
+ export interface IndustryBaselines {
57
+ category: string;
58
+ fragment: unknown;
59
+ }
57
60
  export declare function registerDisputeRules(rules: IndustryDisputeRules, replace?: boolean): boolean;
58
61
  export declare function registerComplianceRules(rules: ComplianceRules, replace?: boolean): boolean;
59
62
  export declare function registerSupplyRules(rules: SupplyRules, replace?: boolean): boolean;
60
63
  export declare function registerIndustryRules(rules: IndustryRules, replace?: boolean): boolean;
61
64
  export declare function registerIndustryPlaybook(playbook: IndustryPlaybook, replace?: boolean): boolean;
65
+ export declare function registerIndustryBaselines(entry: IndustryBaselines, replace?: boolean): boolean;
62
66
  export declare function resolveDisputeRules(category?: string): IndustryDisputeRules | undefined;
63
67
  export declare function resolveComplianceRules(category?: string): ComplianceRules | undefined;
64
68
  export declare function resolveSupplyRules(category?: string): SupplyRules | undefined;
65
69
  export declare function resolveIndustryRules(category?: string): IndustryRules | undefined;
66
70
  export declare function resolveIndustryPlaybook(category?: string): IndustryPlaybook | undefined;
71
+ export declare function resolveIndustryBaselines(category?: string): IndustryBaselines | undefined;
67
72
  export declare function listRegisteredDisputeCategories(): string[];
68
73
  export declare function listRegisteredComplianceCategories(): string[];
69
74
  export declare function listRegisteredSupplyCategories(): string[];
70
75
  export declare function listRegisteredIndustryRuleCategories(): string[];
71
76
  export declare function listRegisteredPlaybookCategories(): string[];
72
- export declare function compileIndustryRule(category: string, rule: IndustryRule): EvaluationRule | null;
73
- export declare function compileIndustryRules(rules: IndustryRules): EvaluationRule[];
74
- export declare function registerIndustryRulesToEngine(rules: IndustryRules): number;
75
- export declare function unregisterIndustryRulesFromEngine(category: string): number;
77
+ export declare function listRegisteredBaselinesCategories(): string[];
78
+ export declare function mergedBaselinesOverlay(industries: readonly string[]): unknown;
79
+ export interface IndustryFactContext {
80
+ facts: Record<string, unknown>;
81
+ entities: Record<string, unknown>;
82
+ }
83
+ export declare function evaluateIndustryCondition(cond: IndustryRuleCondition, ctx: IndustryFactContext): boolean;
84
+ export declare function listAllIndustryRules(): IndustryRules[];
@@ -1 +1 @@
1
- import{getEvaluationEngine}from'../evaluation/engine.js';const disputeRules=new Map(),complianceRules=new Map(),supplyRules=new Map(),industryRules=new Map(),playbooks=new Map();function keyOf(a){return a['toLowerCase']();}export function registerDisputeRules(a,b=![]){const c=keyOf(a['category']);if(!c)return![];if(disputeRules['has'](c)&&!b)return![];return disputeRules['set'](c,a),!![];}export function registerComplianceRules(a,b=![]){const c=keyOf(a['category']);if(!c)return![];if(complianceRules['has'](c)&&!b)return![];return complianceRules['set'](c,a),!![];}export function registerSupplyRules(a,b=![]){const c=keyOf(a['category']);if(!c)return![];if(supplyRules['has'](c)&&!b)return![];return supplyRules['set'](c,a),!![];}export function registerIndustryRules(a,b=![]){const c=keyOf(a['category']);if(!c)return![];if(industryRules['has'](c)&&!b)return![];return industryRules['set'](c,a),!![];}export function registerIndustryPlaybook(a,b=![]){const c=keyOf(a['category']);if(!c)return![];if(playbooks['has'](c)&&!b)return![];return playbooks['set'](c,a),!![];}export function resolveDisputeRules(a){if(!a)return undefined;return disputeRules['get'](keyOf(a));}export function resolveComplianceRules(a){if(!a)return undefined;return complianceRules['get'](keyOf(a));}export function resolveSupplyRules(a){if(!a)return undefined;return supplyRules['get'](keyOf(a));}export function resolveIndustryRules(a){if(!a)return undefined;return industryRules['get'](keyOf(a));}export function resolveIndustryPlaybook(a){if(!a)return undefined;return playbooks['get'](keyOf(a));}export function listRegisteredDisputeCategories(){return Array['from'](disputeRules['keys']());}export function listRegisteredComplianceCategories(){return Array['from'](complianceRules['keys']());}export function listRegisteredSupplyCategories(){return Array['from'](supplyRules['keys']());}export function listRegisteredIndustryRuleCategories(){return Array['from'](industryRules['keys']());}export function listRegisteredPlaybookCategories(){return Array['from'](playbooks['keys']());}function lookupFact(a,b){if(b in a['facts'])return a['facts'][b];if(b in a['entities'])return a['entities'][b];return undefined;}function evaluateCondition(a,b){const c=lookupFact(b,a['field']);switch(a['op']){case'truthy':return!!c;case'falsy':return!c;case'missing':return c===undefined||c===null;case'present':return c!==undefined&&c!==null;case'eq':return c===a['value'];case'neq':return c!==a['value'];default:return![];}}export function compileIndustryRule(a,b){if(!b['condition'])return null;const c='pack.'+a+'.'+b['rule_id'],d=b['severity']==='hard'?0xa:0x5,e=b['condition'];return{'id':c,'description':b['description'],'dimension':b['dimension']??'industry','weight':d,'evaluate'(f){const g=evaluateCondition(e,f);if(g)return{'score':0x64,'weight':d,'reason':b['description'],'matched':[b['description']]};return{'score':0x0,'weight':d,'reason':b['description'],'mismatched':[b['description']],'red_flag':b['red_flag']===!![]};}};}export function compileIndustryRules(a){const b=[];for(const c of a['rules']){const d=compileIndustryRule(a['category'],c);if(d)b['push'](d);}return b;}export function registerIndustryRulesToEngine(a){const b=getEvaluationEngine();let c=0x0;for(const d of compileIndustryRules(a)){b['unregisterRule'](d['id']);if(b['registerRule'](d))c++;}return c;}export function unregisterIndustryRulesFromEngine(a){const b=getEvaluationEngine(),c='pack.'+a+'.';let d=0x0;for(const e of b['listRules']()){e['id']['startsWith'](c)&&b['unregisterRule'](e['id'])&&d++;}return d;}
1
+ import{mergeJudgmentValues}from'../config/judgment.js';const disputeRules=new Map(),complianceRules=new Map(),supplyRules=new Map(),industryRules=new Map(),playbooks=new Map(),baselines=new Map();function keyOf(a){return a['toLowerCase']();}export function registerDisputeRules(a,b=![]){const c=keyOf(a['category']);if(!c)return![];if(disputeRules['has'](c)&&!b)return![];return disputeRules['set'](c,a),!![];}export function registerComplianceRules(a,b=![]){const c=keyOf(a['category']);if(!c)return![];if(complianceRules['has'](c)&&!b)return![];return complianceRules['set'](c,a),!![];}export function registerSupplyRules(a,b=![]){const c=keyOf(a['category']);if(!c)return![];if(supplyRules['has'](c)&&!b)return![];return supplyRules['set'](c,a),!![];}export function registerIndustryRules(a,b=![]){const c=keyOf(a['category']);if(!c)return![];if(industryRules['has'](c)&&!b)return![];return industryRules['set'](c,a),!![];}export function registerIndustryPlaybook(a,b=![]){const c=keyOf(a['category']);if(!c)return![];if(playbooks['has'](c)&&!b)return![];return playbooks['set'](c,a),!![];}export function registerIndustryBaselines(a,b=![]){const c=keyOf(a['category']);if(!c)return![];if(baselines['has'](c)&&!b)return![];return baselines['set'](c,a),!![];}export function resolveDisputeRules(a){if(!a)return undefined;return disputeRules['get'](keyOf(a));}export function resolveComplianceRules(a){if(!a)return undefined;return complianceRules['get'](keyOf(a));}export function resolveSupplyRules(a){if(!a)return undefined;return supplyRules['get'](keyOf(a));}export function resolveIndustryRules(a){if(!a)return undefined;return industryRules['get'](keyOf(a));}export function resolveIndustryPlaybook(a){if(!a)return undefined;return playbooks['get'](keyOf(a));}export function resolveIndustryBaselines(a){if(!a)return undefined;return baselines['get'](keyOf(a));}export function listRegisteredDisputeCategories(){return Array['from'](disputeRules['keys']());}export function listRegisteredComplianceCategories(){return Array['from'](complianceRules['keys']());}export function listRegisteredSupplyCategories(){return Array['from'](supplyRules['keys']());}export function listRegisteredIndustryRuleCategories(){return Array['from'](industryRules['keys']());}export function listRegisteredPlaybookCategories(){return Array['from'](playbooks['keys']());}export function listRegisteredBaselinesCategories(){return Array['from'](baselines['keys']());}export function mergedBaselinesOverlay(a){let b=null;for(const c of a){const d=baselines['get'](keyOf(c));if(!d)continue;b=b===null?d['fragment']:mergedBaselinesMerge(b,d['fragment']);}return b;}function mergedBaselinesMerge(a,b){return mergeJudgmentValues(a,b);}function lookupFact(a,b){if(b in a['facts'])return a['facts'][b];if(b in a['entities'])return a['entities'][b];return undefined;}export function evaluateIndustryCondition(a,b){const c=lookupFact(b,a['field']);switch(a['op']){case'truthy':return!!c;case'falsy':return!c;case'missing':return c===undefined||c===null;case'present':return c!==undefined&&c!==null;case'eq':return c===a['value'];case'neq':return c!==a['value'];default:return![];}}export function listAllIndustryRules(){return Array['from'](industryRules['values']());}
@@ -22,6 +22,7 @@ export interface MergedIndustryPack {
22
22
  compliance?: ComplianceRules | null;
23
23
  supply?: SupplyRules | null;
24
24
  rules?: IndustryRules | null;
25
+ baselines?: unknown | null;
25
26
  }
26
27
  export interface IndustryPack {
27
28
  layout?: IndustryPackLayout;
@@ -33,6 +34,7 @@ export interface IndustryPack {
33
34
  compliance?: ComplianceRules;
34
35
  supply?: SupplyRules;
35
36
  rules?: IndustryRules;
37
+ baselines?: unknown;
36
38
  playbook?: IndustryPlaybook;
37
39
  }
38
40
  export interface PackValidation {
@@ -1 +1 @@
1
- import{readdirSync,readFileSync,existsSync,mkdirSync,writeFileSync}from'node:fs';import{join}from'node:path';import{getWowokIndustryDir}from'@wowok/wowok';import{getIndustryModeRegistry}from'./registry.js';import{BUILTIN_MODES}from'./modes.js';import{registerCategoryMatchRules}from'../evaluation/category-match-rules.js';import{registerIndustryPersonae,unregisterIndustryPersonae}from'../persona/pack-personae.js';import{PERSONA_ROLES,SUPPORTED_INDUSTRIES}from'../persona/types.js';import{UNIVERSAL_TEMPLATE}from'../knowledge/universal-template.js';import{STRATEGY_MANUAL_FILENAME,renderStrategyManual,classifyManualFile}from'../knowledge/strategy-manuals.js';import{registerDisputeRules,registerComplianceRules,registerSupplyRules,registerIndustryRules,registerIndustryPlaybook,registerIndustryRulesToEngine}from'./industry-layers.js';const FORBIDDEN_PRICING_MODES=new Set(UNIVERSAL_TEMPLATE['pricing_redlines']),packRegistry=new Map();export function validatePackManifest(a){const b=[];return(!a||a['pack']!=='industry-pack')&&b['push']('manifest.pack\x20must\x20be\x20\x27industry-pack\x27'),(!a['name']||typeof a['name']!=='string')&&b['push']('manifest.name\x20is\x20required'),(!a['version']||typeof a['version']!=='string')&&b['push']('manifest.version\x20is\x20required'),(!Array['isArray'](a['layers'])||a['layers']['length']===0x0)&&b['push']('manifest.layers\x20must\x20be\x20a\x20non-empty\x20array'),{'valid':b['length']===0x0,'errors':b};}function isMeaningfulMatch(a){if(!a)return![];return(a['hard_constraints']?.['length']??0x0)>0x0||Object['keys'](a['soft_weights']??{})['length']>0x0||(a['pricing_rules']?.['length']??0x0)>0x0||(a['highlight_fields']?.['length']??0x0)>0x0;}function isMeaningfulPersona(a){const b=a['long_term']??{},c=a['current']??{};return(c['strategy']?.['length']??0x0)>0x0||(c['requirements']?.['length']??0x0)>0x0||(c['rules']?.['length']??0x0)>0x0||(c['spec']?.['length']??0x0)>0x0||Object['keys'](c['preferences']??{})['length']>0x0||Object['keys'](b['preferences']??{})['length']>0x0||(b['identity']?.['region']?.['length']??0x0)>0x0||(b['identity']?.['languages']?.['length']??0x0)>0x0;}function isMeaningfulDispute(a){return(a?.['sla_tiers']?.['length']??0x0)>0x0||(a?.['fault_rules']?.['length']??0x0)>0x0;}function isMeaningfulCompliance(a){return!!a?.['prepay_mode']||(a?.['qualification']?.['length']??0x0)>0x0||(a?.['disclosure']?.['length']??0x0)>0x0||a?.['refund_window']?.['days']!==undefined&&!a?.['refund_window']?.['not_applicable'];}function isMeaningfulSupply(a){return(a?.['supplier_qualification']?.['length']??0x0)>0x0||!!a?.['first_order_policy']||a?.['redundancy_required']===!![];}function isMeaningfulRules(a){return(a?.['rules']?.['length']??0x0)>0x0;}function isMeaningfulPlaybook(a){if(!a)return![];const b=a['content']??'',c=b['replace'](/# .*Industry Playbook/g,'')['replace'](/> .*/g,'')['replace'](/## (Experience|Strategy|Personalization)/g,'')['replace'](/- \(Add .*\)/g,'')['trim']();return c['length']>0x0;}export function registerIndustryPack(a,b=![]){const c=[],d=[],e=a['manifest'],f=validatePackManifest(e);c['push'](...f['errors']);if(!f['valid'])return{'ok':![],'errors':c,'registered':d};const g=packRegistry['get'](e['name']),h=g!==undefined&&g['version']!==e['version'],i=h||b;if(e['layers']['includes']('mode')){if(!a['mode'])c['push']('pack\x20\x27'+e['name']+'\x27\x20declares\x20layer\x20\x27mode\x27\x20but\x20mode.json\x20is\x20missing');else{const j=getIndustryModeRegistry();i&&j['hasMode'](a['mode']['name'])&&j['unregisterMode'](a['mode']['name']),!j['registerMode'](a['mode'])?c['push']('mode\x20\x27'+a['mode']['name']+'\x27\x20failed\x20to\x20register\x20(already\x20registered?).\x20'+'Unregister\x20first\x20or\x20upgrade\x20with\x20a\x20different\x20version.'):d['push']('mode');}}if(e['layers']['includes']('match')){if(!a['match'])c['push']('pack\x20\x27'+e['name']+'\x27\x20declares\x20layer\x20\x27match\x27\x20but\x20match.json\x20is\x20missing');else{if(!isMeaningfulMatch(a['match'])){}else{const k=a['match']['pricing_rules']['filter'](l=>FORBIDDEN_PRICING_MODES['has'](l));if(k['length']>0x0)c['push']('match.pricing_rules\x20contains\x20forbidden\x20modes:\x20'+k['join'](',\x20')+'\x20'+'(violates\x20upper-layer\x20pricing\x20red\x20lines,\x20K3\x2015\x20§4.2)');else!registerCategoryMatchRules(a['match'],i)?c['push']('match\x20rules\x20for\x20\x27'+a['match']['category']+'\x27\x20already\x20registered'):d['push']('match');}}}if(e['layers']['includes']('personae')){if(!a['personae']||a['personae']['length']===0x0)c['push']('pack\x20\x27'+e['name']+'\x27\x20declares\x20layer\x20\x27personae\x27\x20but\x20personae\x20are\x20missing');else{const l=a['personae']['filter'](isMeaningfulPersona);if(l['length']===0x0){}else registerIndustryPersonae(e['name'],l),d['push']('personae');}}if(e['layers']['includes']('dispute')){if(!a['dispute'])c['push']('pack\x20\x27'+e['name']+'\x27\x20declares\x20layer\x20\x27dispute\x27\x20but\x20dispute.json\x20is\x20missing');else{if(!isMeaningfulDispute(a['dispute'])){}else!registerDisputeRules(a['dispute'],i)?c['push']('dispute\x20rules\x20for\x20\x27'+a['dispute']['category']+'\x27\x20already\x20registered'):d['push']('dispute');}}if(e['layers']['includes']('compliance')){if(!a['compliance'])c['push']('pack\x20\x27'+e['name']+'\x27\x20declares\x20layer\x20\x27compliance\x27\x20but\x20compliance.json\x20is\x20missing');else{if(!isMeaningfulCompliance(a['compliance'])){}else!registerComplianceRules(a['compliance'],i)?c['push']('compliance\x20rules\x20for\x20\x27'+a['compliance']['category']+'\x27\x20already\x20registered'):d['push']('compliance');}}if(e['layers']['includes']('supply')){if(!a['supply'])c['push']('pack\x20\x27'+e['name']+'\x27\x20declares\x20layer\x20\x27supply\x27\x20but\x20supply.json\x20is\x20missing');else{if(!isMeaningfulSupply(a['supply'])){}else!registerSupplyRules(a['supply'],i)?c['push']('supply\x20rules\x20for\x20\x27'+a['supply']['category']+'\x27\x20already\x20registered'):d['push']('supply');}}if(e['layers']['includes']('rules')){if(!a['rules'])c['push']('pack\x20\x27'+e['name']+'\x27\x20declares\x20layer\x20\x27rules\x27\x20but\x20rules.json\x20is\x20missing');else{if(!isMeaningfulRules(a['rules'])){}else!registerIndustryRules(a['rules'],i)?c['push']('industry\x20rules\x20for\x20\x27'+a['rules']['category']+'\x27\x20already\x20registered'):(d['push']('rules'),registerIndustryRulesToEngine(a['rules']));}}if(e['layers']['includes']('playbook')){if(!a['playbook'])c['push']('pack\x20\x27'+e['name']+'\x27\x20declares\x20layer\x20\x27playbook\x27\x20but\x20playbook.md\x20is\x20missing');else{if(!isMeaningfulPlaybook(a['playbook'])){}else!registerIndustryPlaybook(a['playbook'],i)?c['push']('playbook\x20for\x20\x27'+a['playbook']['category']+'\x27\x20already\x20registered'):d['push']('playbook');}}return c['length']===0x0&&packRegistry['set'](e['name'],{'version':e['version'],'layers':[...e['layers']],'registered_at':Date['now']()}),{'ok':c['length']===0x0,'errors':c,'registered':d};}let builtinModesAsPacksRegistered=![];function ensureBuiltinModesAsPacks(){if(builtinModesAsPacksRegistered)return;builtinModesAsPacksRegistered=!![];for(const a of BUILTIN_MODES){if(packRegistry['has'](a['name']))continue;packRegistry['set'](a['name'],{'version':a['version'],'layers':['mode','match'],'registered_at':Date['now']()});}}export function listRegisteredPacks(){return ensureBuiltinModesAsPacks(),Array['from'](packRegistry['entries']())['map'](([a,b])=>({'name':a,...b}));}export function unregisterIndustryPack(a){const b=new Set(BUILTIN_MODES['map'](c=>c['name']));if(b['has'](a))return![];if(!packRegistry['has'](a))return![];return packRegistry['delete'](a),unregisterIndustryPersonae(a),!![];}export function diffIndustryPack(a){const b=packRegistry['get'](a)??null,c=resolveIndustryPackDir(),d=join(c,a),e=readMergedPackIfPresent(d);let f=null;try{if(e&&e['manifest'])f={'version':e['manifest']['version'],'layers':e['manifest']['layers']??[]};else{const l=join(d,'manifest.json');if(existsSync(l)){const m=JSON['parse'](readFileSync(l,'utf-8'));f={'version':m['version'],'layers':m['layers']??[]};}}}catch{f=null;}const g=b?.['layers']??[],h=f?.['layers']??[],i=h['filter'](n=>!g['includes'](n)),j=g['filter'](n=>!h['includes'](n)),k=!!b&&!!f&&(b['version']!==f['version']||i['length']>0x0||j['length']>0x0);return{'name':a,'registered':b?{...b,'layers':[...b['layers']]}:null,'disk':f,'upgradable':k,'layer_diff':{'added':i,'removed':j}};}export function scanPacks(a){const b=[];if(!existsSync(a))return b;for(const c of readdirSync(a,{'withFileTypes':!![]})){if(!c['isDirectory']())continue;const d=join(a,c['name']);try{const e=loadPackFromDir(d);if(!e)continue;b['push'](registerIndustryPack(e));}catch(f){b['push']({'ok':![],'errors':['failed\x20to\x20load\x20pack\x20\x27'+c['name']+'\x27:\x20'+f['message']],'registered':[]});}}return b;}function loadPackFromDir(a){const b=readMergedPackIfPresent(a),c=join(a,'manifest.json'),d=existsSync(c);if(!b&&!d)return null;if(b){const p=b['manifest'],q={'layout':'merged','manifest':p};if(b['mode'])q['mode']=b['mode'];if(b['match'])q['match']=b['match'];b['personae']&&Array['isArray'](b['personae'])&&(q['personae']=b['personae']);if(b['dispute'])q['dispute']=b['dispute'];if(b['compliance'])q['compliance']=b['compliance'];if(b['supply'])q['supply']=b['supply'];if(b['rules'])q['rules']=b['rules'];const r=join(a,'playbook.md');return existsSync(r)&&(q['playbook']={'category':p['name'],'content':readFileSync(r,'utf-8')}),q;}const e=JSON['parse'](readFileSync(c,'utf-8')),g={'layout':'legacy','manifest':e},h=join(a,'mode.json'),i=join(a,'match.json');existsSync(h)&&(g['mode']=JSON['parse'](readFileSync(h,'utf-8')));existsSync(i)&&(g['match']=JSON['parse'](readFileSync(i,'utf-8')));const j=join(a,'personae');if(existsSync(j)){const s=[];for(const t of readdirSync(j)){if(!t['endsWith']('.json'))continue;s['push'](JSON['parse'](readFileSync(join(j,t),'utf-8')));}if(s['length']>0x0)g['personae']=s;}const k=join(a,'dispute.json');existsSync(k)&&(g['dispute']=JSON['parse'](readFileSync(k,'utf-8')));const l=join(a,'compliance.json');existsSync(l)&&(g['compliance']=JSON['parse'](readFileSync(l,'utf-8')));const m=join(a,'supply.json');existsSync(m)&&(g['supply']=JSON['parse'](readFileSync(m,'utf-8')));const n=join(a,'rules.json');existsSync(n)&&(g['rules']=JSON['parse'](readFileSync(n,'utf-8')));const o=join(a,'playbook.md');return existsSync(o)&&(g['playbook']={'category':e['name'],'content':readFileSync(o,'utf-8')}),g;}export function rescanPack(a){const b=join(resolveIndustryPackDir(),a);try{const c=loadPackFromDir(b);if(!c)return{'ok':![],'errors':['no\x20pack\x20found\x20for\x20\x27'+a+'\x27'],'registered':[]};return registerIndustryPack(c,!![]);}catch(d){return{'ok':![],'errors':['failed\x20to\x20rescan\x20pack\x20\x27'+a+'\x27:\x20'+d['message']],'registered':[]};}}export function resolveIndustryPackDir(){return process['env']['WOWOK_INDUSTRY_DIR']||getWowokIndustryDir();}export function scanDefaultIndustryPacks(){return seedBuiltinIndustryTemplates(),seedBuiltinStrategyManuals(),ensureIndustryReadme(),ensureBuiltinModesAsPacks(),scanPacks(resolveIndustryPackDir());}export function seedBuiltinIndustryTemplates(a=SUPPORTED_INDUSTRIES){const b=[],c=resolveIndustryPackDir();mkdirSync(c,{'recursive':!![]}),ensureIndustryReadme();for(const d of a){const e=join(c,d);if(existsSync(join(e,'manifest.json'))||existsSync(join(e,'pack.json')))continue;const f=scaffoldIndustryPack(d,c);if(f['ok'])b['push'](d);}return b;}export function seedBuiltinStrategyManuals(a=SUPPORTED_INDUSTRIES){const b=[],c=resolveIndustryPackDir();for(const d of a){const e=renderStrategyManual(d);if(!e)continue;const f=join(c,d,STRATEGY_MANUAL_FILENAME);try{const g=join(c,d);if(!existsSync(join(g,'manifest.json'))&&!existsSync(join(g,'pack.json'))){const j=scaffoldIndustryPack(d,c);if(!j['ok']){b['push']({'industry':d,'status':'error','path':f,'detail':j['errors']['join'](';\x20')});continue;}}if(!existsSync(f)){writeFileSync(f,e,'utf-8'),b['push']({'industry':d,'status':'written','path':f});continue;}const h=readFileSync(f,'utf-8'),i=classifyManualFile(d,h);if(i==='outdated')writeFileSync(f,e,'utf-8'),b['push']({'industry':d,'status':'updated','path':f});else{if(i==='current')b['push']({'industry':d,'status':'current','path':f});else i==='user_modified'?b['push']({'industry':d,'status':'skipped_user_modified','path':f,'detail':'strategy-manual.md\x20was\x20edited\x20locally;\x20keeping\x20user\x20content\x20and\x20not\x20upgrading'}):b['push']({'industry':d,'status':'skipped_user_file','path':f,'detail':'strategy-manual.md\x20exists\x20without\x20builtin\x20sentinel;\x20leaving\x20user\x20file\x20untouched'});}}catch(k){b['push']({'industry':d,'status':'error','path':f,'detail':k['message']});}}return b;}export const LAYER_FILE_SECTION={'match.json':'match','dispute.json':'dispute','compliance.json':'compliance','supply.json':'supply','rules.json':'rules','mode.json':'mode'};export const PERSONAE_DIR='personae';function manifestSection(a){return{'pack':'industry-pack','name':a,'display_name':a,'version':'0.1.0','layers':['match','personae','dispute','compliance','supply','rules','playbook']};}function matchSection(a){return{'category':a,'hard_constraints':[],'soft_weights':{},'highlight_fields':[],'calendar_mode':'none','geo_mode':'strict','pricing_rules':[]};}function personaPerRole(a,b){return{'role':a,'industry':b,'long_term':{'identity':{'self_description':b+'\x20'+a},'preferences':{}},'current':{'strategy':[],'requirements':[],'rules':[],'spec':'','preferences':{}}};}function disputeSection(a){return{'category':a,'sla_tiers':[],'fault_rules':[]};}function complianceSection(a){return{'category':a,'prepay_mode':'','qualification':[],'disclosure':[],'refund_window':{'days':0x7,'not_applicable':![]}};}function supplySection(a){return{'category':a,'supplier_qualification':[],'first_order_policy':'','redundancy_required':![]};}function rulesSection(a){return{'category':a,'rules':[]};}export function buildPristineMergedPack(a){const b=PERSONA_ROLES['map'](c=>personaPerRole(c,a));return{'manifest':manifestSection(a),'match':matchSection(a),'personae':b,'dispute':disputeSection(a),'compliance':complianceSection(a),'supply':supplySection(a),'rules':rulesSection(a),'mode':null};}export function industryReadmeContent(){return['#\x20WoWok\x20Industry\x20Packs','','>\x20This\x20folder\x20is\x20the\x20WoWok\x20industry\x20knowledge\x20root.\x20Each\x20sub-folder\x20is\x20one','>\x20industry\x20pack.\x20Pack\x20layers\x20are\x20registered\x20into\x20the\x20runtime\x20registry\x20and','>\x20consumed\x20on\x20demand\x20by\x20the\x20build/recommendation\x20tools\x20(merchant_guide,','>\x20recommend_industry,\x20…);\x20a\x20compact\x20strategy\x20summary\x20for\x20the\x20active','>\x20merchant/supplier\x20lens\x20is\x20injected\x20into\x20every\x20chat\x20turn.','','##\x20Pack\x20structure\x20(unified\x20layout)','','Every\x20pack\x20is\x20exactly\x20two\x20files:','','-\x20**`<pack>/pack.json`**\x20—\x20machine-checkable\x20**settings\x20only**.\x20No\x20comments,','\x20\x20no\x20documentation.\x20One\x20section\x20per\x20layer\x20(see\x20below).','-\x20**`<pack>/playbook.md`**\x20—\x20human\x20strategy,\x20tone\x20and\x20field-tested\x20experience.','\x20\x20Registered\x20on\x20scan\x20and\x20read\x20ON\x20DEMAND\x20via\x20industry_pack_operation','\x20\x20(action=\x27get\x27);\x20it\x20OVERRIDES\x20built-in\x20industry\x20data\x20for\x20this\x20account.','','All\x20field\x20explanations\x20live\x20in\x20THIS\x20file,\x20so\x20pack.json\x20stays\x20small\x20and\x20you','can\x20focus\x20on\x20configuration.\x20The\x20editor\x20also\x20validates\x20JSON\x20on\x20save\x20—\x20a\x20file','that\x20fails\x20to\x20parse\x20(or\x20a\x20pack.json\x20missing\x20its\x20manifest)\x20is\x20blocked.','','##\x20How\x20changes\x20take\x20effect','','1.\x20**Save**\x20in\x20the\x20Editor\x20writes\x20bytes\x20to\x20disk.','2.\x20**Scan**\x20(Industry\x20drawer)\x20re-registers\x20each\x20pack\x20into\x20the\x20runtime\x20AI','\x20\x20\x20registry\x20(and\x20SQLite\x20cache).\x20A\x20save\x20of\x20an\x20industry\x20file\x20already\x20runs','\x20\x20\x20Scan\x20automatically.','3.\x20**Next\x20AI\x20chat\x20turn**\x20the\x20registered\x20layers\x20are\x20available\x20to\x20the','\x20\x20\x20on-demand\x20tools\x20(and\x20the\x20merchant/supplier\x20strategy\x20summary\x20is\x20fresh','\x20\x20\x20in\x20the\x20persona\x20context),\x20so\x20the\x20AI\x20reasons\x20against\x20your\x20edited\x20rules','\x20\x20\x20from\x20that\x20point\x20onward.','','##\x20manifest\x20—\x20pack\x20metadata\x20+\x20layer\x20ENABLE\x20flags','','-\x20`name`:\x20snake_case\x20identifier,\x20must\x20match\x20the\x20folder\x20name.','-\x20`version`:\x20bump\x20after\x20editing\x20content\x20so\x20the\x20registry\x20treats\x20it\x20as\x20an\x20upgrade.','-\x20`display_name`:\x20user-visible\x20label.','-\x20`layers`:\x20which\x20sections\x20are\x20validated\x20and\x20registered\x20on\x20scan.\x20Remove\x20a','\x20\x20layer\x20name\x20to\x20DISABLE\x20it\x20(the\x20section\x20stays\x20in\x20pack.json\x20but\x20is\x20ignored).','','##\x20match\x20—\x20category-match\x20rules','','Decides\x20whether\x20an\x20order/service/account\x20belongs\x20to\x20this\x20industry\x20pack:','-\x20`hard_constraints`:\x20array\x20of\x20REQUIRED\x20predicates;\x20ALL\x20must\x20match\x20before\x20the','\x20\x20pack\x20is\x20considered.\x20Example:','\x20\x20`[{\x20key:\x20\x27order.metadata.service_kind\x27,\x20equals:\x20\x27food_onsite\x27\x20}]`','-\x20`soft_weights`:\x20dict\x20`<heuristic_key:\x20number\x200..1>`;\x20higher\x20=\x20stronger\x20signal.','-\x20`pricing_rules`:\x20pricing\x20modes\x20this\x20industry\x20requires.','-\x20`highlight_fields`:\x20dot-paths\x20surfaced\x20in\x20the\x20UI\x20as\x20important\x20info.','-\x20`geo_mode`:\x20`\x27strict\x27`\x20(region\x20must\x20match)\x20|\x20`\x27none\x27`\x20(ignore\x20region).','-\x20`calendar_mode`:\x20`\x27seasonal\x27`\x20|\x20`\x27weekday\x27`\x20|\x20`\x27none\x27`.','','##\x20personae\x20—\x20per-role\x20AI\x20personas','','One\x20persona\x20per\x20role\x20(`merchant`,\x20`customer`,\x20`supplier`,\x20`collaborator`,','`arbitrator`,\x20`prospect`).\x20The\x20AI\x20uses\x20them\x20to\x20role-play\x20negotiation\x20posture:','-\x20`long_term`:\x20stable\x20properties\x20—\x20`identity.self_description`\x20(free-text\x20bio),','\x20\x20`identity.region/languages`,\x20`preferences`\x20(`<key:\x20string[]>`).','-\x20`current`:\x20per-negotiation\x20posture\x20—\x20`strategy`\x20(moves\x20to\x20make),','\x20\x20`requirements`\x20(non-negotiable\x20demands),\x20`rules`\x20(constraints/axioms),','\x20\x20`spec`\x20(free-form\x20text),\x20`preferences`\x20(per-turn\x20overrides).','','##\x20dispute\x20—\x20SLA\x20tiers\x20+\x20fault\x20assignment','','-\x20`sla_tiers[]`:\x20response/remedy\x20windows\x20per\x20severity\x20level.','\x20\x20Example:\x20`{\x20level:\x20\x27L1\x27,\x20response_hours:\x2024,\x20remedy:\x20\x27reply\x27\x20}`','-\x20`fault_rules[]`:\x20automatic\x20fault\x20attribution\x20—\x20a\x20condition\x20plus\x20the\x20side','\x20\x20that\x20bears\x20fault\x20(`merchant`/`customer`/`supplier`/`operator`/`shared`).','\x20\x20Example:\x20`{\x20when:\x20{\x20evidence_has:\x20[\x27late\x20delivery\x20photo\x27]\x20},\x20assign_to:\x20\x27merchant\x27,\x20weight:\x201.0\x20}`','','##\x20compliance\x20—\x20hard\x20requirements\x20before\x20checkout','','-\x20`prepay_mode`:\x20`\x27\x27`\x20|\x20`\x27full\x27`\x20|\x20`\x27partial\x27`\x20|\x20`\x27deposit\x27`.','-\x20`qualification[]`:\x20licenses/certifications\x20a\x20merchant\x20must\x20hold.','\x20\x20Example:\x20`{\x20label:\x20\x27Food\x20Service\x20License\x27,\x20required:\x20true,\x20region:\x20\x27CN\x27\x20}`','-\x20`disclosure[]`:\x20text\x20the\x20merchant\x20MUST\x20show\x20buyers\x20up-front.','-\x20`refund_window`:\x20`{\x20days:\x20number,\x20not_applicable:\x20boolean,\x20exceptions:\x20[...]\x20}`','','##\x20supply\x20—\x20supply-chain\x20/\x20supplier\x20qualification','','-\x20`supplier_qualification[]`:\x20same\x20shape\x20as\x20compliance\x20qualifications,\x20but','\x20\x20evaluated\x20on\x20the\x20SUPPLIER\x20side\x20(multi-party\x20orders).','-\x20`first_order_policy`:\x20policy\x20string\x20on\x20the\x20first\x20order\x20from\x20a\x20new\x20supplier','\x20\x20(e.g.\x20`\x27sample-only\x27`,\x20`\x27reduced-quantity\x27`).','-\x20`redundancy_required`:\x20true\x20=\x20require\x20≥2\x20eligible\x20suppliers\x20before\x20accepting','\x20\x20an\x20order\x20(mitigates\x20single-sourcing).','','##\x20rules\x20—\x20declarative\x20machine-checked\x20rules','','Each\x20rule\x20is\x20an\x20AST\x20node\x20compiled\x20into\x20the\x20evaluation\x20engine:','`{\x20id:\x20\x27rule_...\x27,\x20when:\x20<bool-condition>,\x20then:\x20\x27reject\x27\x20|\x20\x27warn\x27\x20|\x20\x27flag\x27,\x20message:\x20\x27Text\x27\x20}`','Use\x20`rules`\x20for\x20rules\x20that\x20must\x20be\x20machine-checked;\x20put\x20human\x20strategy\x20in','`playbook.md`.','','##\x20mode\x20—\x20IndustryMode\x20(deep\x20shape)','','Not\x20scaffolded\x20by\x20default.\x20Add\x20it\x20when\x20you\x20need\x20a\x20full\x20driving\x20mode\x20for\x20the','industry,\x20or\x20ask\x20the\x20AI:\x20\x22help\x20me\x20fill\x20mode\x20for\x20<industry>\x22.','','Registered\x20into\x20`IndustryModeRegistry`\x20on\x20scan\x20(manifest\x20must\x20list\x20the','`mode`\x20layer).\x20A\x20pack\x20mode\x20with\x20the\x20same\x20name\x20as\x20a\x20builtin\x20replaces\x20it\x20when','the\x20pack\x20version\x20changes\x20or\x20on\x20a\x20forced\x20rescan.','','###\x20How\x20the\x20mode\x20is\x20consumed','','-\x20**Service\x20build\x20(priors)**:\x20`merchant_guide`\x20resolves\x20the\x20confirmed','\x20\x20industry\x20to\x20a\x20mode\x20(user\x20mode\x20first,\x20then\x20pack\x20mode,\x20then\x20builtin)\x20and','\x20\x20feeds\x20`machine_shape`\x20/\x20`guards`\x20/\x20`allocator`\x20/\x20`key_risk`\x20into\x20the','\x20\x20SemanticObjectGraph\x20build.','-\x20**Evaluation**:\x20the\x20metric\x20+\x20constraint\x20registries\x20score\x20the\x20mode','\x20\x20(risk/benefit\x200-100,\x20hard\x20violations\x20block\x20adoption).\x20Custom\x20metrics\x20and','\x20\x20constraints\x20registered\x20via\x20`industry_pack_operation`\x20participate\x20too.','-\x20**Recommendation**:\x20`recommend_industry`\x20matches\x20trait\x20similarity\x20and,','\x20\x20when\x20a\x20merchant\x20strategy\x20is\x20given,\x20re-ranks\x20by\x20lever\x20alignment\x20(70%','\x20\x20similarity\x20+\x2030%\x20alignment).','','###\x20Field\x20reference','','-\x20**Identity**:\x20`name`\x20(snake_case),\x20`display_name`,\x20`version`\x20(e.g.\x20`v1`),','\x20\x20`source`\x20(`builtin`\x20|\x20`custom`).','-\x20`traits`:\x2010-dimension\x20industry\x20trait\x20vector\x20(logistics,\x20cycle,\x20deposit,','\x20\x20regulatory\x20intensity,\x20...).\x20Drives\x20`recommend_industry`\x20similarity.','-\x20`machine_shape`:\x20Machine\x20node\x20topology\x20—\x20`[{\x20name,\x20role\x20}]`.\x20Node\x20names\x20are','\x20\x20business\x20states.\x20R-M1-11:\x20NEVER\x20model\x20refund/dispute\x20terminals','\x20\x20(`refunded`,\x20`disputed`,\x20`arb_*`)\x20as\x20nodes\x20—\x20disputes\x20flow\x20through','\x20\x20Service.arbitrations\x20independently;\x20route\x20refunds\x20via\x20the\x20Allocator','\x20\x20triggered\x20by\x20business\x20states\x20(`cancelled`,\x20`returned`).','-\x20`guards`:\x20`[{\x20template_id,\x20host,\x20purpose\x20}]`\x20—\x20guard\x20templates\x20to\x20attach.','\x20\x20`host`\x20is\x20one\x20of\x20`service`\x20|\x20`machine`\x20|\x20`reward`\x20|\x20`repository`\x20|','\x20\x20`arbitration`.','-\x20`allocator`:\x20`{\x20recipient,\x20count,\x20mode,\x20description\x20}`\x20—\x20fund\x20split.','\x20\x20`recipient`:\x20`signer`\x20|\x20`entity`;\x20`count`\x20>\x201\x20switches\x20to\x20multi-party','\x20\x20distribution;\x20`mode`:\x20`surplus`\x20|\x20`rate`\x20|\x20`milestone`.','-\x20`risk_checks`\x20/\x20`needs`:\x20buyer-side\x20due-diligence\x20entries\x20surfaced\x20in','\x20\x20prospect\x20evaluation.','-\x20`flywheel`:\x20acquisition\x20flywheel\x20—\x20`rewardStrategy`\x20/\x20`discountStrategy`','\x20\x20/\x20`trustSellingPoints`.\x20A\x20concrete\x20(non-`User-defined`)\x20strategy\x20turns','\x20\x20the\x20`reward`/`discount`\x20levers\x20on\x20for\x20strategy\x20alignment.','-\x20`key_risk`\x20(string)\x20/\x20`build_notes`\x20(string[]):\x20the\x20headline\x20risk\x20and','\x20\x20actionable\x20build\x20guidance\x20shown\x20to\x20the\x20merchant.','-\x20`capabilities_used`:\x20CapabilityCard\x20IDs\x20(e.g.\x20`guard.validate_buy`,','\x20\x20`machine.node_topology`,\x20`allocation.distribute_milestone`).\x20Powers\x20the','\x20\x20`buy_guard`\x20/\x20`machine_design`\x20levers\x20and\x20constraint\x20checks.','-\x20`config_overrides`:\x20per-object\x20field\x20defaults,\x20e.g.','\x20\x20`{\x20service:\x20{\x20engagement_type:\x20\x27milestone\x27\x20},\x20machine:\x20{\x20wip_required:\x20true\x20}\x20}`.','-\x20`config_override_rules`:\x20conditional\x20overrides\x20—','\x20\x20`{\x20object_type,\x20field_path,\x20value\x20|\x20{\x20intent_contains,\x20then_value,\x20else_value\x20}\x20}`.','-\x20`expected_benefits`:\x20`[{\x20metric,\x20expected_value,\x20evidence\x20}]`\x20—\x20what\x20the','\x20\x20mode\x20is\x20supposed\x20to\x20buy\x20you.','-\x20`risk_appetite`:\x20`conservative`\x20|\x20`balanced`\x20|\x20`aggressive`\x20(thresholds','\x20\x20for\x20the\x20risk/benefit\x20verdict).','-\x20`risk_constraints`:\x20`{\x20require_arbitration,\x20require_compensation_fund,','\x20\x20require_wip_evidence,\x20max_single_transaction?,','\x20\x20compensation_fund_coverage_ratio?,\x20other_constraints?\x20}`.\x20Coverage\x20ratio','\x20\x20multiplies\x20max\x20single\x20order\x20to\x20size\x20the\x20compensation\x20fund\x20(retail\x205,','\x20\x20rental\x2010,\x20subscription\x203;\x20default\x205).','-\x20`applicable_conditions`:\x20`{\x20business_scale,\x20min_daily_orders?,','\x20\x20other_conditions?\x20}`\x20—\x20when\x20the\x20mode\x20fits.','-\x20`similar_industries`\x20/\x20`novel_capabilities`:\x20migration\x20hints.','-\x20`disabled_builtin_constraints`:\x20builtin\x20constraint\x20IDs\x20this\x20mode','\x20\x20deliberately\x20opts\x20out\x20of\x20(e.g.\x20retail_d2c\x20skips\x20`require_arbitration`).','\x20\x20Custom\x20constraints\x20are\x20never\x20skipped.','','###\x20Persona\x20integration\x20(strategy\x20→\x20levers)','','The\x20personae\x20section\x27s\x20`current.strategy`\x20statements\x20are\x20bridged\x20into\x20mode','ranking\x20(value\x20intent\x20↔\x20game\x20path\x20unification).\x20Deterministic\x20mapping\x20—','\x22enumerable\x20→\x20MCP,\x20not\x20prompt\x22:','','-\x20`sales_priority`\x20(volume\x20first)\x20→\x20levers\x20`discount`\x20+\x20`reward`','-\x20`profit_priority`\x20(margin\x20first)\x20→\x20levers\x20`discount`\x20+\x20`machine_design`','-\x20`buyer_screening`\x20(qualify\x20buyers)\x20→\x20lever\x20`buy_guard`','-\x20`gross_margin_control`\x20(margin\x20band)\x20→\x20levers\x20`discount`\x20+\x20`machine_design`','','A\x20mode\x20supports\x20a\x20lever\x20when\x20its\x20data\x20says\x20so:\x20`guard.validate_buy`','capability\x20or\x20a\x20buy-guard\x20template\x20enables\x20`buy_guard`;\x20a\x20concrete','flywheel\x20reward/discount\x20strategy\x20enables\x20`reward`/`discount`;\x20a','non-empty\x20`machine_shape`\x20with\x20`machine.node_topology`\x20enables','`machine_design`.\x20Pass\x20strategy\x20text\x20to\x20`recommend_industry`\x20and\x20each','recommendation\x20reports\x20`strategy_alignment`\x20(matched/missing\x20levers).','','##\x20custom-registry.json\x20—\x20global\x20custom\x20metrics\x20/\x20constraints\x20/\x20modes','','Custom\x20metrics,\x20constraints\x20and\x20user\x20modes\x20registered\x20via','`industry_pack_operation`\x20(register_custom_metric\x20/','register_custom_constraint\x20/\x20derive_user_mode\x20/\x20register_user_mode)','persist\x20to\x20THIS\x20root-level\x20file\x20—\x20it\x20is\x20global\x20and\x20applies\x20to\x20every','industry\x20pack.\x20Layout:\x20`metrics`\x20keyed\x20by\x20metric\x20id,\x20`constraints`','keyed\x20by\x20constraint\x20id,\x20`user_modes`\x20keyed\x20by\x20`<owner>:<name>`.\x20The','file\x20is\x20created\x20on\x20first\x20use\x20(seeded\x20from\x20the\x20legacy\x20SQLite\x20cache\x20when','present);\x20hand\x20edits\x20take\x20effect\x20on\x20the\x20next\x20registry\x20call,\x20and','deleting\x20an\x20entry\x20removes\x20it.','','##\x20Reset','','Right-click\x20any\x20file/pack\x20folder\x20in\x20the\x20Industry\x20drawer\x20and\x20choose\x20*Reset*','to\x20restore\x20the\x20pristine\x20template\x20at\x20any\x20time.','']['join']('\x0a');}export function ensureIndustryReadme(){const a=resolveIndustryPackDir();mkdirSync(a,{'recursive':!![]});const b=join(a,'README.md');return writeFileSync(b,industryReadmeContent(),'utf-8'),b;}export function scaffoldIndustryPack(a,b){const c=join(b??resolveIndustryPackDir(),a),d=[],e=[];if(!/^[a-z][a-z0-9_]*$/['test'](a))return{'ok':![],'dir':c,'files':d,'errors':['industry\x20name\x20\x27'+a+'\x27\x20must\x20be\x20lowercase\x20snake_case\x20(a-z,\x200-9,\x20_)']};try{mkdirSync(c,{'recursive':!![]}),ensureIndustryReadme();const f=buildPristineMergedPack(a);return writeFileSync(join(c,'pack.json'),JSON['stringify'](f,null,0x2)+'\x0a'),d['push']('pack.json'),writeFileSync(join(c,'playbook.md'),playbookTemplate(a)),d['push']('playbook.md'),{'ok':!![],'dir':c,'files':d,'errors':e};}catch(g){return{'ok':![],'dir':c,'files':d,'errors':['scaffold\x20failed:\x20'+g['message']]};}}export function readMergedPackIfPresent(a){const b=join(a,'pack.json');if(!existsSync(b))return null;try{const c=readFileSync(b,'utf-8');return JSON['parse'](c);}catch{return null;}}function playbookTemplate(a){return['#\x20'+a+'\x20—\x20Industry\x20Playbook','','>\x20📘\x20This\x20file\x20captures\x20human\x20business\x20intelligence\x20for\x20the\x20`'+a+'`','>\x20industry.\x20Content\x20here\x20is\x20READ\x20BY\x20THE\x20AI\x20AS\x20CONTEXT\x20on\x20every\x20turn,','>\x20and\x20OVERRIDES\x20WoWok\x27s\x20generic\x20built-in\x20industry\x20data/rules\x20for\x20this','>\x20account.\x20The\x20companion\x20`pack.json`\x20file\x20stores\x20machine-checkable','>\x20rules;\x20THIS\x20file\x20stores\x20human\x20strategy,\x20tone,\x20experience,\x20and\x20ethics.','','>\x20💡\x20Hint\x20for\x20the\x20AI:\x20when\x20the\x20user\x20asks\x20a\x20question\x20about\x20\x22how\x20to','>\x20handle\x20'+a+'\x22\x20or\x20\x22what\x20should\x20I\x20do?\x22,\x20check\x20this\x20file\x20first\x20for\x20the','>\x20merchant/customer\x20voice,\x20then\x20fall\x20back\x20to\x20your\x20built-in\x20data.\x20Cite','>\x20section\x20titles\x20in\x20your\x20reply\x20so\x20the\x20user\x20knows\x20where\x20advice\x20comes\x20from.','','##\x20Experience\x20(Field-Tested\x20Rules\x20of\x20Thumb)','','>\x20Write\x20what\x20actually\x20works\x20in\x20this\x20industry\x20—\x20not\x20what\x20textbooks\x20say.','>\x20Short\x20bullet\x20points\x20preferred;\x20the\x20AI\x20reads\x20them\x20as\x20axioms.\x20Include','>\x20specific\x20numbers\x20when\x20you\x20have\x20them.','','-\x20(Example)\x20\x22Catering:\x20if\x20the\x20event\x20starts\x20before\x2010:00,\x20always\x20assume','\x20\x20the\x20customer\x20wants\x20breakfast\x20service\x20too\x20—\x20upsell\x20it\x20proactively.\x22','-\x20(Example)\x20\x22Common\x20pitfall:\x20last-minute\x20menu\x20swaps\x20on\x20Fridays\x20—\x20require','\x20\x20a\x20written\x20change\x20request\x2048\x20h\x20before\x20the\x20event\x20or\x20charge\x20a\x2015%\x20fee.\x22','-\x20(Add\x20more\x20below\x20—\x20delete\x20the\x20examples\x20above\x20when\x20you\x20have\x20real\x20ones.)','','##\x20Strategy\x20(Competitive\x20/\x20Game-Theory)','','>\x20How\x20should\x20each\x20role\x20act\x20in\x20a\x20negotiation\x20/\x20dispute\x20/\x20supplier','>\x20relationship?\x20Think\x20in\x20\x22always\x20/\x20never\x20/\x20depends-on-X\x22\x20rules,\x20and\x20call','>\x20out\x20the\x20trade-offs.','','-\x20Merchant\x20strategy:\x20(Add\x20how\x20a\x20merchant\x20in\x20this\x20industry\x20should\x20act\x20—','\x20\x20price\x20anchoring,\x20which\x20concessions\x20to\x20give\x20early\x20vs\x20late,\x20what\x20to','\x20\x20never\x20concede\x20on,\x20etc.)','-\x20Customer\x20strategy:\x20(Add\x20what\x20a\x20smart\x20customer\x20should\x20push\x20for.)','-\x20Dispute\x20strategy:\x20(When\x20to\x20settle\x20fast\x20vs\x20when\x20to\x20fight\x20for\x20full','\x20\x20evidence\x20+\x20arbitration.\x20Call\x20out\x20the\x20escalation\x20thresholds.)','','##\x20Personalization\x20(Tone,\x20Brand,\x20Ethics,\x20Red\x20Lines)','','-\x20Tone\x20/\x20voice:\x20(Write\x20one\x20sentence\x20describing\x20the\x20exact\x20conversational','\x20\x20voice\x20this\x20account\x20should\x20use\x20—\x20casual,\x20formal,\x20technical,\x20etc.)','-\x20Brand\x20rules:\x20(Logo,\x20link-out\x20style,\x20forbidden\x20terminology,','\x20\x20always-include\x20phrases,\x20etc.)','-\x20Red\x20lines:\x20(Non-negotiable.\x20Example:\x20\x22Never\x20make\x20a\x20refund\x20promise','\x20\x20larger\x20than\x2030%\x20without\x20arbitration\x20evidence.\x22)','-\x20Ethics:\x20(Example:\x20\x22If\x20customer\x20appears\x20intoxicated,\x20refuse\x20service','\x20\x20and\x20refer\x20to\x20supervisor;\x20never\x20take\x20the\x20order\x20for\x20profit.\x22)','','##\x20Playbook\x20Maintenance','','>\x20You\x20don\x27t\x20need\x20to\x20be\x20perfect\x20on\x20day\x20one.\x20After\x20every\x20real\x20deal,\x20add\x20a','>\x20bullet\x20to\x20the\x20above\x20sections\x20with\x20what\x20worked\x20/\x20what\x20failed.\x20Every','>\x20entry\x20improves\x20the\x20AI\x27s\x20future\x20decisions.','','>\x20Right-click\x20the\x20file\x20or\x20this\x20pack\x20folder\x20in\x20the\x20Industry\x20drawer\x20at','>\x20any\x20time\x20and\x20choose\x20\x22Reset\x22\x20to\x20restore\x20this\x20annotated\x20template.','']['join']('\x0a');}export function locatePackAndRemainder(a){const b=a['replace'](/^[\\/]+/,'')['replace'](/[\\/]+$/,'');if(!b)return null;const [c,...d]=b['split'](/[\\/]+/);if(!c)return null;return{'packName':c,'remainder':d['join']('/')};}export function resetIndustryPath(a,b){const c=[],d=[],f=b??resolveIndustryPackDir(),g=locatePackAndRemainder(a),h=a;if(!g)return{'ok':![],'layout':'merged','target':h,'restored_files':[],'errors':['invalid\x20reset\x20path\x20\x27'+a+'\x27']};const {packName:i,remainder:j}=g,k=join(f,i);if(!existsSync(k))return{'ok':![],'layout':'merged','target':h,'restored_files':[],'errors':['pack\x20directory\x20\x27'+i+'\x27\x20does\x20not\x20exist']};if(!/^[a-z][a-z0-9_]*$/['test'](i))return{'ok':![],'layout':'merged','target':h,'restored_files':[],'errors':['pack\x20name\x20\x27'+i+'\x27\x20is\x20not\x20a\x20valid\x20snake_case\x20identifier']};const l=readMergedPackIfPresent(k),n=l?'merged':'legacy';if(j==='')try{mkdirSync(k,{'recursive':!![]});const s=buildPristineMergedPack(i);return writeFileSync(join(k,'pack.json'),JSON['stringify'](s,null,0x2)+'\x0a'),d['push']('pack.json'),writeFileSync(join(k,'playbook.md'),playbookTemplate(i)),d['push']('playbook.md'),{'ok':!![],'layout':'merged','target':h,'restored_files':d,'errors':c};}catch(t){return{'ok':![],'layout':n,'target':h,'restored_files':d,'errors':['pack\x20reset\x20failed:\x20'+t['message']]};}const o=j['split']('/')['slice'](-0x1)[0x0],p=j==='playbook.md',q=j['startsWith'](PERSONAE_DIR+'/')&&o['endsWith']('.json');if(n==='merged'){if(p)try{return writeFileSync(join(k,'playbook.md'),playbookTemplate(i)),d['push']('playbook.md'),{'ok':!![],'layout':n,'target':h,'restored_files':d,'errors':c};}catch(v){return{'ok':![],'layout':n,'target':h,'restored_files':d,'errors':['playbook\x20reset\x20failed:\x20'+v['message']]};}const u=LAYER_FILE_SECTION[j];if(u)try{const w=readMergedPackIfPresent(k)??buildPristineMergedPack(i);switch(u){case'match':w['match']=matchSection(i);break;case'dispute':w['dispute']=disputeSection(i);break;case'compliance':w['compliance']=complianceSection(i);break;case'supply':w['supply']=supplySection(i);break;case'rules':w['rules']=rulesSection(i);break;case'mode':w['mode']=null;break;}return writeFileSync(join(k,'pack.json'),JSON['stringify'](w,null,0x2)+'\x0a'),d['push']('pack.json'),{'ok':!![],'layout':n,'target':h,'restored_files':d,'errors':c};}catch(x){return{'ok':![],'layout':n,'target':h,'restored_files':d,'errors':['section\x20reset\x20failed:\x20'+x['message']]};}if(q){const y=o['replace'](/\.json$/,'');if(!PERSONA_ROLES['includes'](y))return{'ok':![],'layout':n,'target':h,'restored_files':[],'errors':['unknown\x20persona\x20role\x20\x27'+y+'\x27']};try{const z=readMergedPackIfPresent(k)??buildPristineMergedPack(i),A=z['personae']&&Array['isArray'](z['personae'])?[...z['personae']]:[],B=A['findIndex'](D=>D['role']===y),C=personaPerRole(y,i);if(B>=0x0)A[B]=C;else A['push'](C);return z['personae']=A,writeFileSync(join(k,'pack.json'),JSON['stringify'](z,null,0x2)+'\x0a'),d['push']('pack.json'),{'ok':!![],'layout':n,'target':h,'restored_files':d,'errors':c};}catch(D){return{'ok':![],'layout':n,'target':h,'restored_files':d,'errors':['persona\x20reset\x20failed:\x20'+D['message']]};}}if(j==='manifest.json'||j==='manifest')try{const E=readMergedPackIfPresent(k)??buildPristineMergedPack(i);return E['manifest']=manifestSection(i),writeFileSync(join(k,'pack.json'),JSON['stringify'](E,null,0x2)+'\x0a'),d['push']('pack.json'),{'ok':!![],'layout':n,'target':h,'restored_files':d,'errors':c};}catch(F){return{'ok':![],'layout':n,'target':h,'restored_files':d,'errors':['manifest\x20reset\x20failed:\x20'+F['message']]};}return{'ok':![],'layout':n,'target':h,'restored_files':[],'errors':['path\x20\x27'+j+'\x27\x20is\x20not\x20a\x20standard\x20section\x20file\x20of\x20pack\x20\x27'+i+'\x27.\x20Reset\x20is\x20only\x20provided\x20for\x20pack.json\x20standard\x20sections\x20and\x20playbook.md.']};}if(p)try{return writeFileSync(join(k,'playbook.md'),playbookTemplate(i)),d['push']('playbook.md'),{'ok':!![],'layout':n,'target':h,'restored_files':d,'errors':c};}catch(G){return{'ok':![],'layout':n,'target':h,'restored_files':d,'errors':['legacy\x20playbook\x20reset\x20failed:\x20'+G['message']]};}if(j==='manifest.json')try{const H=manifestSection(i);return writeFileSync(join(k,'manifest.json'),JSON['stringify'](H,null,0x2)+'\x0a'),d['push']('manifest.json'),{'ok':!![],'layout':n,'target':h,'restored_files':d,'errors':c};}catch(I){return{'ok':![],'layout':n,'target':h,'restored_files':d,'errors':['legacy\x20manifest\x20reset\x20failed:\x20'+I['message']]};}const r=LAYER_FILE_SECTION[j];if(r)try{let J='';switch(r){case'match':J=JSON['stringify'](matchSection(i),null,0x2)+'\x0a';break;case'dispute':J=JSON['stringify'](disputeSection(i),null,0x2)+'\x0a';break;case'compliance':J=JSON['stringify'](complianceSection(i),null,0x2)+'\x0a';break;case'supply':J=JSON['stringify'](supplySection(i),null,0x2)+'\x0a';break;case'rules':J=JSON['stringify'](rulesSection(i),null,0x2)+'\x0a';break;case'mode':J=JSON['stringify']({},null,0x2)+'\x0a';break;}return writeFileSync(join(k,j),J),d['push'](j),{'ok':!![],'layout':n,'target':h,'restored_files':d,'errors':c};}catch(K){return{'ok':![],'layout':n,'target':h,'restored_files':d,'errors':['legacy\x20section\x20reset\x20failed:\x20'+K['message']]};}if(q){const L=o['replace'](/\.json$/,'');if(!PERSONA_ROLES['includes'](L))return{'ok':![],'layout':n,'target':h,'restored_files':[],'errors':['unknown\x20persona\x20\x27'+L+'\x27']};try{return writeFileSync(join(k,j),JSON['stringify'](personaPerRole(L,i),null,0x2)+'\x0a'),d['push'](j),{'ok':!![],'layout':n,'target':h,'restored_files':d,'errors':c};}catch(M){return{'ok':![],'layout':n,'target':h,'restored_files':d,'errors':['legacy\x20persona\x20reset\x20failed:\x20'+M['message']]};}}return{'ok':![],'layout':n,'target':h,'restored_files':[],'errors':['cannot\x20reset\x20non-standard\x20file\x20\x27'+j+'\x27\x20in\x20legacy\x20layout.\x20Only\x20standard\x20layer\x20files,\x20personae/*.json,\x20manifest.json,\x20and\x20playbook.md\x20can\x20be\x20reset.']};}
1
+ import{readdirSync,readFileSync,existsSync,mkdirSync,writeFileSync}from'node:fs';import{join}from'node:path';import{getWowokIndustryDir}from'@wowok/wowok';import{seedBuiltinTemplates}from'../knowledge/template-loader.js';import{getIndustryModeRegistry}from'./registry.js';import{BUILTIN_MODES}from'./modes.js';import{registerCategoryMatchRules}from'../evaluation/category-match-rules.js';import{registerIndustryPersonae,unregisterIndustryPersonae}from'../persona/pack-personae.js';import{PERSONA_ROLES,SUPPORTED_INDUSTRIES}from'../persona/types.js';import{UNIVERSAL_TEMPLATE}from'../knowledge/universal-template.js';import{STRATEGY_MANUAL_FILENAME,renderStrategyManual,classifyManualFile}from'../knowledge/strategy-manuals.js';import{registerDisputeRules,registerComplianceRules,registerSupplyRules,registerIndustryRules,registerIndustryPlaybook,registerIndustryBaselines}from'./industry-layers.js';import{validateJudgmentFragment}from'../config/judgment.js';const FORBIDDEN_PRICING_MODES=new Set(UNIVERSAL_TEMPLATE['pricing_redlines']),packRegistry=new Map();export function validatePackManifest(a){const b=[];return(!a||a['pack']!=='industry-pack')&&b['push']('manifest.pack\x20must\x20be\x20\x27industry-pack\x27'),(!a['name']||typeof a['name']!=='string')&&b['push']('manifest.name\x20is\x20required'),(!a['version']||typeof a['version']!=='string')&&b['push']('manifest.version\x20is\x20required'),(!Array['isArray'](a['layers'])||a['layers']['length']===0x0)&&b['push']('manifest.layers\x20must\x20be\x20a\x20non-empty\x20array'),{'valid':b['length']===0x0,'errors':b};}function isMeaningfulMatch(a){if(!a)return![];return(a['hard_constraints']?.['length']??0x0)>0x0||Object['keys'](a['soft_weights']??{})['length']>0x0||(a['pricing_rules']?.['length']??0x0)>0x0||(a['highlight_fields']?.['length']??0x0)>0x0;}function isMeaningfulPersona(a){const b=a['long_term']??{},c=a['current']??{};return(c['strategy']?.['length']??0x0)>0x0||(c['requirements']?.['length']??0x0)>0x0||(c['rules']?.['length']??0x0)>0x0||(c['spec']?.['length']??0x0)>0x0||Object['keys'](c['preferences']??{})['length']>0x0||Object['keys'](b['preferences']??{})['length']>0x0||(b['identity']?.['region']?.['length']??0x0)>0x0||(b['identity']?.['languages']?.['length']??0x0)>0x0;}function isMeaningfulDispute(a){return(a?.['sla_tiers']?.['length']??0x0)>0x0||(a?.['fault_rules']?.['length']??0x0)>0x0;}function isMeaningfulCompliance(a){return!!a?.['prepay_mode']||(a?.['qualification']?.['length']??0x0)>0x0||(a?.['disclosure']?.['length']??0x0)>0x0||typeof a?.['refund_window']?.['days']==='number'&&a['refund_window']['days']>0x0;}function isMeaningfulSupply(a){return(a?.['supplier_qualification']?.['length']??0x0)>0x0||!!a?.['first_order_policy']||a?.['redundancy_required']===!![];}function isMeaningfulRules(a){return(a?.['rules']?.['length']??0x0)>0x0;}function isMeaningfulBaselines(a){return typeof a==='object'&&a!==null&&!Array['isArray'](a)&&Object['keys'](a)['length']>0x0;}const PLAYBOOK_PLACEHOLDER_RE=/\((?:Example|Add|Write)\b/;function isMeaningfulPlaybook(a){if(!a)return![];for(const b of(a['content']??'')['split'](/\r?\n/)){const c=b['trim']();if(c==='')continue;if(c['startsWith']('>'))continue;if(c['startsWith']('#'))continue;if(PLAYBOOK_PLACEHOLDER_RE['test'](c))continue;return!![];}return![];}export function registerIndustryPack(a,b=![]){const c=[],d=[],e=a['manifest'],f=validatePackManifest(e);c['push'](...f['errors']);if(!f['valid'])return{'ok':![],'errors':c,'registered':d};const g=packRegistry['get'](e['name']),h=g!==undefined&&g['version']!==e['version'],i=h||b;if(e['layers']['includes']('mode')){if(!a['mode'])c['push']('pack\x20\x27'+e['name']+'\x27\x20declares\x20layer\x20\x27mode\x27\x20but\x20mode.json\x20is\x20missing');else{const j=getIndustryModeRegistry();i&&j['hasMode'](a['mode']['name'])&&j['unregisterMode'](a['mode']['name']),!j['registerMode'](a['mode'])?c['push']('mode\x20\x27'+a['mode']['name']+'\x27\x20failed\x20to\x20register\x20(already\x20registered?).\x20'+'Unregister\x20first\x20or\x20upgrade\x20with\x20a\x20different\x20version.'):d['push']('mode');}}if(e['layers']['includes']('match')){if(!a['match'])c['push']('pack\x20\x27'+e['name']+'\x27\x20declares\x20layer\x20\x27match\x27\x20but\x20match.json\x20is\x20missing');else{if(!isMeaningfulMatch(a['match'])){}else{const k=a['match']['pricing_rules']['filter'](l=>FORBIDDEN_PRICING_MODES['has'](l));if(k['length']>0x0)c['push']('match.pricing_rules\x20contains\x20forbidden\x20modes:\x20'+k['join'](',\x20')+'\x20'+'(violates\x20upper-layer\x20pricing\x20red\x20lines,\x20K3\x2015\x20§4.2)');else!registerCategoryMatchRules(a['match'],i)?c['push']('match\x20rules\x20for\x20\x27'+a['match']['category']+'\x27\x20already\x20registered'):d['push']('match');}}}if(e['layers']['includes']('personae')){if(!a['personae']||a['personae']['length']===0x0)c['push']('pack\x20\x27'+e['name']+'\x27\x20declares\x20layer\x20\x27personae\x27\x20but\x20personae\x20are\x20missing');else{const l=a['personae']['filter'](isMeaningfulPersona);if(l['length']===0x0){}else registerIndustryPersonae(e['name'],l),d['push']('personae');}}if(e['layers']['includes']('dispute')){if(!a['dispute'])c['push']('pack\x20\x27'+e['name']+'\x27\x20declares\x20layer\x20\x27dispute\x27\x20but\x20dispute.json\x20is\x20missing');else{if(!isMeaningfulDispute(a['dispute'])){}else!registerDisputeRules(a['dispute'],i)?c['push']('dispute\x20rules\x20for\x20\x27'+a['dispute']['category']+'\x27\x20already\x20registered'):d['push']('dispute');}}if(e['layers']['includes']('compliance')){if(!a['compliance'])c['push']('pack\x20\x27'+e['name']+'\x27\x20declares\x20layer\x20\x27compliance\x27\x20but\x20compliance.json\x20is\x20missing');else{if(!isMeaningfulCompliance(a['compliance'])){}else!registerComplianceRules(a['compliance'],i)?c['push']('compliance\x20rules\x20for\x20\x27'+a['compliance']['category']+'\x27\x20already\x20registered'):d['push']('compliance');}}if(e['layers']['includes']('supply')){if(!a['supply'])c['push']('pack\x20\x27'+e['name']+'\x27\x20declares\x20layer\x20\x27supply\x27\x20but\x20supply.json\x20is\x20missing');else{if(!isMeaningfulSupply(a['supply'])){}else!registerSupplyRules(a['supply'],i)?c['push']('supply\x20rules\x20for\x20\x27'+a['supply']['category']+'\x27\x20already\x20registered'):d['push']('supply');}}if(e['layers']['includes']('rules')){if(!a['rules'])c['push']('pack\x20\x27'+e['name']+'\x27\x20declares\x20layer\x20\x27rules\x27\x20but\x20rules.json\x20is\x20missing');else{if(!isMeaningfulRules(a['rules'])){}else!registerIndustryRules(a['rules'],i)?c['push']('industry\x20rules\x20for\x20\x27'+a['rules']['category']+'\x27\x20already\x20registered'):d['push']('rules');}}if(e['layers']['includes']('baselines')){if(!a['baselines'])c['push']('pack\x20\x27'+e['name']+'\x27\x20declares\x20layer\x20\x27baselines\x27\x20but\x20baselines.json\x20is\x20missing');else{if(!isMeaningfulBaselines(a['baselines'])){}else{const m=validateJudgmentFragment(a['baselines'],e['name']+'.baselines');if(m)c['push'](m);else!registerIndustryBaselines({'category':e['name'],'fragment':a['baselines']},i)?c['push']('baselines\x20for\x20\x27'+e['name']+'\x27\x20already\x20registered'):d['push']('baselines');}}}if(e['layers']['includes']('playbook')){if(!a['playbook'])c['push']('pack\x20\x27'+e['name']+'\x27\x20declares\x20layer\x20\x27playbook\x27\x20but\x20playbook.md\x20is\x20missing');else{if(!isMeaningfulPlaybook(a['playbook'])){}else!registerIndustryPlaybook(a['playbook'],i)?c['push']('playbook\x20for\x20\x27'+a['playbook']['category']+'\x27\x20already\x20registered'):d['push']('playbook');}}return c['length']===0x0&&packRegistry['set'](e['name'],{'version':e['version'],'layers':[...e['layers']],'registered_at':Date['now']()}),{'ok':c['length']===0x0,'errors':c,'registered':d};}let builtinModesAsPacksRegistered=![];function ensureBuiltinModesAsPacks(){if(builtinModesAsPacksRegistered)return;builtinModesAsPacksRegistered=!![];for(const a of BUILTIN_MODES){if(packRegistry['has'](a['name']))continue;packRegistry['set'](a['name'],{'version':a['version'],'layers':['mode','match'],'registered_at':Date['now']()});}}export function listRegisteredPacks(){return ensureBuiltinModesAsPacks(),Array['from'](packRegistry['entries']())['map'](([a,b])=>({'name':a,...b}));}export function unregisterIndustryPack(a){const b=new Set(BUILTIN_MODES['map'](c=>c['name']));if(b['has'](a))return![];if(!packRegistry['has'](a))return![];return packRegistry['delete'](a),unregisterIndustryPersonae(a),!![];}export function diffIndustryPack(a){const b=packRegistry['get'](a)??null,c=resolveIndustryPackDir(),d=join(c,a),e=readMergedPackIfPresent(d);let f=null;try{if(e&&e['manifest'])f={'version':e['manifest']['version'],'layers':e['manifest']['layers']??[]};else{const l=join(d,'manifest.json');if(existsSync(l)){const m=JSON['parse'](readFileSync(l,'utf-8'));f={'version':m['version'],'layers':m['layers']??[]};}}}catch{f=null;}const g=b?.['layers']??[],h=f?.['layers']??[],i=h['filter'](n=>!g['includes'](n)),j=g['filter'](n=>!h['includes'](n)),k=!!b&&!!f&&(b['version']!==f['version']||i['length']>0x0||j['length']>0x0);return{'name':a,'registered':b?{...b,'layers':[...b['layers']]}:null,'disk':f,'upgradable':k,'layer_diff':{'added':i,'removed':j}};}export function scanPacks(a){const b=[];if(!existsSync(a))return b;for(const c of readdirSync(a,{'withFileTypes':!![]})){if(!c['isDirectory']())continue;const d=join(a,c['name']);try{const e=loadPackFromDir(d);if(!e)continue;b['push'](registerIndustryPack(e));}catch(f){b['push']({'ok':![],'errors':['failed\x20to\x20load\x20pack\x20\x27'+c['name']+'\x27:\x20'+f['message']],'registered':[]});}}return b;}function loadPackFromDir(a){const b=readMergedPackIfPresent(a),c=join(a,'manifest.json'),d=existsSync(c);if(!b&&!d)return null;if(b){const q=b['manifest'],r={'layout':'merged','manifest':q};if(b['mode'])r['mode']=b['mode'];if(b['match'])r['match']=b['match'];b['personae']&&Array['isArray'](b['personae'])&&(r['personae']=b['personae']);if(b['dispute'])r['dispute']=b['dispute'];if(b['compliance'])r['compliance']=b['compliance'];if(b['supply'])r['supply']=b['supply'];if(b['rules'])r['rules']=b['rules'];if(b['baselines'])r['baselines']=b['baselines'];const s=join(a,'playbook.md');return existsSync(s)&&(r['playbook']={'category':q['name'],'content':readFileSync(s,'utf-8')}),r;}const e=JSON['parse'](readFileSync(c,'utf-8')),g={'layout':'legacy','manifest':e},h=join(a,'mode.json'),i=join(a,'match.json');existsSync(h)&&(g['mode']=JSON['parse'](readFileSync(h,'utf-8')));existsSync(i)&&(g['match']=JSON['parse'](readFileSync(i,'utf-8')));const j=join(a,'personae');if(existsSync(j)){const t=[];for(const u of readdirSync(j)){if(!u['endsWith']('.json'))continue;t['push'](JSON['parse'](readFileSync(join(j,u),'utf-8')));}if(t['length']>0x0)g['personae']=t;}const k=join(a,'dispute.json');existsSync(k)&&(g['dispute']=JSON['parse'](readFileSync(k,'utf-8')));const l=join(a,'compliance.json');existsSync(l)&&(g['compliance']=JSON['parse'](readFileSync(l,'utf-8')));const m=join(a,'supply.json');existsSync(m)&&(g['supply']=JSON['parse'](readFileSync(m,'utf-8')));const n=join(a,'rules.json');existsSync(n)&&(g['rules']=JSON['parse'](readFileSync(n,'utf-8')));const o=join(a,'baselines.json');existsSync(o)&&(g['baselines']=JSON['parse'](readFileSync(o,'utf-8')));const p=join(a,'playbook.md');return existsSync(p)&&(g['playbook']={'category':e['name'],'content':readFileSync(p,'utf-8')}),g;}export function rescanPack(a){const b=join(resolveIndustryPackDir(),a);try{const c=loadPackFromDir(b);if(!c)return{'ok':![],'errors':['no\x20pack\x20found\x20for\x20\x27'+a+'\x27'],'registered':[]};return registerIndustryPack(c,!![]);}catch(d){return{'ok':![],'errors':['failed\x20to\x20rescan\x20pack\x20\x27'+a+'\x27:\x20'+d['message']],'registered':[]};}}export function resolveIndustryPackDir(){return process['env']['WOWOK_INDUSTRY_DIR']||getWowokIndustryDir();}export function scanDefaultIndustryPacks(){return seedBuiltinIndustryTemplates(),seedBuiltinTemplates(),seedBuiltinStrategyManuals(),ensureIndustryReadme(),ensureBuiltinModesAsPacks(),scanPacks(resolveIndustryPackDir());}export function seedBuiltinIndustryTemplates(a=SUPPORTED_INDUSTRIES){const b=[],c=resolveIndustryPackDir();mkdirSync(c,{'recursive':!![]}),ensureIndustryReadme();for(const d of a){const e=join(c,d);if(existsSync(join(e,'manifest.json'))||existsSync(join(e,'pack.json')))continue;const f=scaffoldIndustryPack(d,c);if(f['ok'])b['push'](d);}return b;}export function seedBuiltinStrategyManuals(a=SUPPORTED_INDUSTRIES){const b=[],c=resolveIndustryPackDir();for(const d of a){const e=renderStrategyManual(d);if(!e)continue;const f=join(c,d,STRATEGY_MANUAL_FILENAME);try{const g=join(c,d);if(!existsSync(join(g,'manifest.json'))&&!existsSync(join(g,'pack.json'))){const j=scaffoldIndustryPack(d,c);if(!j['ok']){b['push']({'industry':d,'status':'error','path':f,'detail':j['errors']['join'](';\x20')});continue;}}if(!existsSync(f)){writeFileSync(f,e,'utf-8'),b['push']({'industry':d,'status':'written','path':f});continue;}const h=readFileSync(f,'utf-8'),i=classifyManualFile(d,h);if(i==='outdated')writeFileSync(f,e,'utf-8'),b['push']({'industry':d,'status':'updated','path':f});else{if(i==='current')b['push']({'industry':d,'status':'current','path':f});else i==='user_modified'?b['push']({'industry':d,'status':'skipped_user_modified','path':f,'detail':'strategy-manual.md\x20was\x20edited\x20locally;\x20keeping\x20user\x20content\x20and\x20not\x20upgrading'}):b['push']({'industry':d,'status':'skipped_user_file','path':f,'detail':'strategy-manual.md\x20exists\x20without\x20builtin\x20sentinel;\x20leaving\x20user\x20file\x20untouched'});}}catch(k){b['push']({'industry':d,'status':'error','path':f,'detail':k['message']});}}return b;}export const LAYER_FILE_SECTION={'match.json':'match','dispute.json':'dispute','compliance.json':'compliance','supply.json':'supply','rules.json':'rules','mode.json':'mode','baselines.json':'baselines'};export const PERSONAE_DIR='personae';function manifestSection(a){return{'pack':'industry-pack','name':a,'display_name':a,'version':'0.1.0','layers':['match','personae','dispute','compliance','supply','rules','playbook']};}function matchSection(a){return{'category':a,'hard_constraints':[],'soft_weights':{},'highlight_fields':[],'calendar_mode':'none','geo_mode':'strict','pricing_rules':[]};}function personaPerRole(a,b){return{'role':a,'industry':b,'long_term':{'identity':{'self_description':b+'\x20'+a},'preferences':{}},'current':{'strategy':[],'requirements':[],'rules':[],'spec':'','preferences':{}}};}function disputeSection(a){return{'category':a,'sla_tiers':[],'fault_rules':[]};}function complianceSection(a){return{'category':a,'prepay_mode':'','qualification':[],'disclosure':[],'refund_window':{'not_applicable':!![]}};}function supplySection(a){return{'category':a,'supplier_qualification':[],'first_order_policy':'','redundancy_required':![]};}function rulesSection(a){return{'category':a,'rules':[]};}export function buildPristineMergedPack(a){const b=PERSONA_ROLES['map'](c=>personaPerRole(c,a));return{'manifest':manifestSection(a),'match':matchSection(a),'personae':b,'dispute':disputeSection(a),'compliance':complianceSection(a),'supply':supplySection(a),'rules':rulesSection(a),'baselines':null,'mode':null};}export function industryReadmeContent(){return['#\x20WoWok\x20Industry\x20Packs','','>\x20This\x20folder\x20is\x20the\x20WoWok\x20industry\x20knowledge\x20root.\x20Each\x20sub-folder\x20is\x20one','>\x20industry\x20pack.\x20Pack\x20layers\x20are\x20registered\x20into\x20the\x20runtime\x20registry\x20and','>\x20consumed\x20on\x20demand\x20by\x20the\x20build/recommendation\x20tools\x20(merchant_guide,','>\x20recommend_industry,\x20…);\x20a\x20compact\x20strategy\x20summary\x20for\x20the\x20active','>\x20merchant/supplier\x20lens\x20is\x20injected\x20into\x20every\x20chat\x20turn.','','##\x20Pack\x20structure\x20(unified\x20layout)','','Every\x20pack\x20is\x20exactly\x20two\x20files,\x20plus\x20an\x20optional\x20`templates/`\x20folder:','','-\x20**`<pack>/pack.json`**\x20—\x20machine-checkable\x20**settings\x20only**.\x20No\x20comments,','\x20\x20no\x20documentation.\x20One\x20section\x20per\x20layer\x20(see\x20below).','-\x20**`<pack>/playbook.md`**\x20—\x20human\x20strategy,\x20tone\x20and\x20field-tested\x20experience.','\x20\x20Registered\x20on\x20scan\x20and\x20read\x20ON\x20DEMAND\x20via\x20industry_pack_operation','\x20\x20(action=\x27get\x27);\x20it\x20OVERRIDES\x20built-in\x20industry\x20data\x20for\x20this\x20account.','-\x20**`<pack>/templates/*.md`**\x20—\x20archetype\x20templates\x20(see\x20the\x20Templates','\x20\x20section\x20below).\x20The\x2012\x20built-in\x20variants\x20are\x20seeded\x20here\x20automatically.','','All\x20field\x20explanations\x20live\x20in\x20THIS\x20file,\x20so\x20pack.json\x20stays\x20small\x20and\x20you','can\x20focus\x20on\x20configuration.\x20The\x20editor\x20also\x20validates\x20JSON\x20on\x20save\x20—\x20a\x20file','that\x20fails\x20to\x20parse\x20(or\x20a\x20pack.json\x20missing\x20its\x20manifest)\x20is\x20blocked.','','##\x20How\x20changes\x20take\x20effect','','1.\x20**Save**\x20in\x20the\x20Editor\x20writes\x20bytes\x20to\x20disk.','2.\x20**Scan**\x20(Industry\x20drawer)\x20re-registers\x20each\x20pack\x20into\x20the\x20runtime\x20AI','\x20\x20\x20registry\x20(and\x20SQLite\x20cache).\x20A\x20save\x20of\x20an\x20industry\x20file\x20already\x20runs','\x20\x20\x20Scan\x20automatically.','3.\x20**Next\x20AI\x20chat\x20turn**\x20the\x20registered\x20layers\x20are\x20available\x20to\x20the','\x20\x20\x20on-demand\x20tools\x20(and\x20the\x20merchant/supplier\x20strategy\x20summary\x20is\x20fresh','\x20\x20\x20in\x20the\x20persona\x20context),\x20so\x20the\x20AI\x20reasons\x20against\x20your\x20edited\x20rules','\x20\x20\x20from\x20that\x20point\x20onward.','','##\x20manifest\x20—\x20pack\x20metadata\x20+\x20layer\x20ENABLE\x20flags','','-\x20`name`:\x20snake_case\x20identifier,\x20must\x20match\x20the\x20folder\x20name.','-\x20`version`:\x20bump\x20after\x20editing\x20content\x20so\x20the\x20registry\x20treats\x20it\x20as\x20an\x20upgrade.','-\x20`display_name`:\x20user-visible\x20label.','-\x20`layers`:\x20which\x20sections\x20are\x20validated\x20and\x20registered\x20on\x20scan.\x20Legal','\x20\x20layer\x20names:\x20`match`,\x20`personae`,\x20`dispute`,\x20`compliance`,\x20`supply`,','\x20\x20`rules`,\x20`baselines`,\x20`playbook`\x20(plus\x20`mode`\x20when\x20you\x20add\x20a\x20driving','\x20\x20mode).\x20Remove\x20a\x20layer\x20name\x20to\x20DISABLE\x20it\x20(the\x20section\x20stays\x20in','\x20\x20pack.json\x20but\x20is\x20ignored).','','##\x20match\x20—\x20category-match\x20rules','','Decides\x20whether\x20an\x20order/service/account\x20belongs\x20to\x20this\x20industry\x20pack:','-\x20`hard_constraints`:\x20array\x20of\x20REQUIRED\x20predicates;\x20ALL\x20must\x20match\x20before\x20the','\x20\x20pack\x20is\x20considered.\x20Example:','\x20\x20`[{\x20key:\x20\x27order.metadata.service_kind\x27,\x20equals:\x20\x27food_onsite\x27\x20}]`','-\x20`soft_weights`:\x20dict\x20`<heuristic_key:\x20number\x200..1>`;\x20higher\x20=\x20stronger\x20signal.','-\x20`pricing_rules`:\x20pricing\x20modes\x20this\x20industry\x20requires.','-\x20`highlight_fields`:\x20dot-paths\x20surfaced\x20in\x20the\x20UI\x20as\x20important\x20info.','-\x20`geo_mode`:\x20`\x27strict\x27`\x20(region\x20must\x20match)\x20|\x20`\x27none\x27`\x20(ignore\x20region).','-\x20`calendar_mode`:\x20`\x27seasonal\x27`\x20|\x20`\x27weekday\x27`\x20|\x20`\x27none\x27`.','','##\x20personae\x20—\x20per-role\x20AI\x20personas','','One\x20persona\x20per\x20role\x20(`merchant`,\x20`customer`,\x20`supplier`,\x20`collaborator`,','`arbitrator`,\x20`prospect`).\x20The\x20AI\x20uses\x20them\x20to\x20role-play\x20negotiation\x20posture:','-\x20`long_term`:\x20stable\x20properties\x20—\x20`identity.self_description`\x20(free-text\x20bio),','\x20\x20`identity.region/languages`,\x20`preferences`\x20(`<key:\x20string[]>`).','-\x20`current`:\x20per-negotiation\x20posture\x20—\x20`strategy`\x20(moves\x20to\x20make),','\x20\x20`requirements`\x20(non-negotiable\x20demands),\x20`rules`\x20(constraints/axioms),','\x20\x20`spec`\x20(free-form\x20text),\x20`preferences`\x20(per-turn\x20overrides).','','##\x20dispute\x20—\x20SLA\x20tiers\x20+\x20fault\x20assignment','','-\x20`sla_tiers[]`:\x20response/remedy\x20windows\x20per\x20severity\x20level.','\x20\x20Example:\x20`{\x20level:\x20\x27L1\x27,\x20response_hours:\x2024,\x20remedy:\x20\x27reply\x27\x20}`','-\x20`fault_rules[]`:\x20automatic\x20fault\x20attribution\x20—\x20a\x20condition\x20plus\x20the\x20side','\x20\x20that\x20bears\x20fault\x20(`merchant`/`customer`/`supplier`/`operator`/`shared`).','\x20\x20Example:\x20`{\x20when:\x20{\x20evidence_has:\x20[\x27late\x20delivery\x20photo\x27]\x20},\x20assign_to:\x20\x27merchant\x27,\x20weight:\x201.0\x20}`','','##\x20compliance\x20—\x20hard\x20requirements\x20before\x20checkout','','-\x20`prepay_mode`:\x20`\x27\x27`\x20|\x20`\x27full\x27`\x20|\x20`\x27partial\x27`\x20|\x20`\x27deposit\x27`.','-\x20`qualification[]`:\x20licenses/certifications\x20a\x20merchant\x20must\x20hold.','\x20\x20Example:\x20`{\x20label:\x20\x27Food\x20Service\x20License\x27,\x20required:\x20true,\x20region:\x20\x27CN\x27\x20}`','-\x20`disclosure[]`:\x20text\x20the\x20merchant\x20MUST\x20show\x20buyers\x20up-front.','-\x20`refund_window`:\x20`{\x20days:\x20number,\x20not_applicable:\x20boolean,\x20exceptions:\x20[...]\x20}`','','##\x20supply\x20—\x20supply-chain\x20/\x20supplier\x20qualification','','-\x20`supplier_qualification[]`:\x20same\x20shape\x20as\x20compliance\x20qualifications,\x20but','\x20\x20evaluated\x20on\x20the\x20SUPPLIER\x20side\x20(multi-party\x20orders).','-\x20`first_order_policy`:\x20policy\x20string\x20on\x20the\x20first\x20order\x20from\x20a\x20new\x20supplier','\x20\x20(e.g.\x20`\x27sample-only\x27`,\x20`\x27reduced-quantity\x27`).','-\x20`redundancy_required`:\x20true\x20=\x20require\x20≥2\x20eligible\x20suppliers\x20before\x20accepting','\x20\x20an\x20order\x20(mitigates\x20single-sourcing).','','##\x20rules\x20—\x20declarative\x20machine-checked\x20rules','','Each\x20rule\x20is\x20an\x20AST\x20node\x20compiled\x20into\x20the\x20evaluation\x20engine:','`{\x20id:\x20\x27rule_...\x27,\x20when:\x20<bool-condition>,\x20then:\x20\x27reject\x27\x20|\x20\x27warn\x27\x20|\x20\x27flag\x27,\x20message:\x20\x27Text\x27\x20}`','Use\x20`rules`\x20for\x20rules\x20that\x20must\x20be\x20machine-checked;\x20put\x20human\x20strategy\x20in','`playbook.md`.','','##\x20baselines\x20—\x20judgment\x20baselines\x20overlay\x20(Q12)','','`baselines`\x20carries\x20a\x20PARTIAL\x20judgment\x20baselines\x20document\x20(same\x20shape\x20as','the\x20user\x27s\x20judgment.json).\x20It\x20is\x20merged\x20into\x20the\x20judgment\x20chain','BETWEEN\x20the\x20factory\x20document\x20and\x20the\x20persona\x20fragment:','','\x20\x20\x20\x20factory\x20<\x20pack\x20baselines\x20<\x20persona\x20fragment\x20<\x20user\x20document\x20<\x20session\x20overrides','','A\x20pack\x20may\x20RETUNE\x20factory\x20parameters\x20or\x20DISABLE\x20factory\x20rules','(`enabled:\x20false`\x20—\x20a\x20disable\x20trace\x20is\x20recorded).\x20It\x20can\x20NEVER\x20invent\x20new','dimensions/rules\x20or\x20delete\x20factory\x20entries:\x20only\x20keys\x20and\x20ids\x20that\x20exist','in\x20the\x20factory\x20document\x20are\x20accepted.\x20Tuning\x20example:','','```json','\x22baselines\x22:\x20{','\x20\x20\x22version\x22:\x201,','\x20\x20\x22evaluation\x22:\x20{\x20\x22severity_deduction\x22:\x20{\x20\x22critical\x22:\x2040\x20}\x20},','\x20\x20\x22monitor\x22:\x20{\x20\x22thresholds\x22:\x20{\x20\x22messenger_timeout_hours\x22:\x2012\x20}\x20}','}','```','','Disabling\x20a\x20factory\x20rule\x20(the\x20rule\x20id\x20must\x20exist,\x20e.g.\x20in\x20the\x20`util`','domain):','','```json','{\x20\x22rules\x22:\x20{\x20\x22domains\x22:\x20{\x20\x22util\x22:\x20{\x20\x22rules\x22:\x20[','\x20\x20{\x20\x22rule_id\x22:\x20\x22R-UTIL-03\x22,\x20\x22enabled\x22:\x20false\x20}',']\x20}\x20}\x20}\x20}','```','','A\x20misspelled\x20dimension\x20or\x20an\x20invented\x20rule\x20id\x20is\x20REJECTED\x20at\x20registration','(and\x20on\x20every\x20scan/rescan)\x20with\x20a\x20visible\x20error\x20—\x20the\x20last\x20good','registration\x20stays\x20in\x20force\x20until\x20the\x20fragment\x20is\x20fixed.','','##\x20mode\x20—\x20IndustryMode\x20(deep\x20shape)','','Not\x20scaffolded\x20by\x20default.\x20Add\x20it\x20when\x20you\x20need\x20a\x20full\x20driving\x20mode\x20for\x20the','industry,\x20or\x20ask\x20the\x20AI:\x20\x22help\x20me\x20fill\x20mode\x20for\x20<industry>\x22.','','Registered\x20into\x20`IndustryModeRegistry`\x20on\x20scan\x20(manifest\x20must\x20list\x20the','`mode`\x20layer).\x20A\x20pack\x20mode\x20with\x20the\x20same\x20name\x20as\x20a\x20builtin\x20replaces\x20it\x20when','the\x20pack\x20version\x20changes\x20or\x20on\x20a\x20forced\x20rescan.','','###\x20How\x20the\x20mode\x20is\x20consumed','','-\x20**Service\x20build\x20(priors)**:\x20`merchant_guide`\x20resolves\x20the\x20confirmed','\x20\x20industry\x20to\x20a\x20mode\x20(user\x20mode\x20first,\x20then\x20pack\x20mode,\x20then\x20builtin)\x20and','\x20\x20feeds\x20`machine_shape`\x20/\x20`guards`\x20/\x20`allocator`\x20/\x20`key_risk`\x20into\x20the','\x20\x20SemanticObjectGraph\x20build.','-\x20**Evaluation**:\x20the\x20metric\x20+\x20constraint\x20registries\x20score\x20the\x20mode','\x20\x20(risk/benefit\x200-100,\x20hard\x20violations\x20block\x20adoption).\x20Custom\x20metrics\x20and','\x20\x20constraints\x20registered\x20via\x20`industry_pack_operation`\x20participate\x20too.','-\x20**Recommendation**:\x20`recommend_industry`\x20matches\x20trait\x20similarity\x20and,','\x20\x20when\x20a\x20merchant\x20strategy\x20is\x20given,\x20re-ranks\x20by\x20lever\x20alignment\x20(70%','\x20\x20similarity\x20+\x2030%\x20alignment).','','###\x20Field\x20reference','','-\x20**Identity**:\x20`name`\x20(snake_case),\x20`display_name`,\x20`version`\x20(e.g.\x20`v1`),','\x20\x20`source`\x20(`builtin`\x20|\x20`custom`).','-\x20`traits`:\x2010-dimension\x20industry\x20trait\x20vector\x20(logistics,\x20cycle,\x20deposit,','\x20\x20regulatory\x20intensity,\x20...).\x20Drives\x20`recommend_industry`\x20similarity.','-\x20`machine_shape`:\x20Machine\x20node\x20topology\x20—\x20`[{\x20name,\x20role\x20}]`.\x20Node\x20names\x20are','\x20\x20business\x20states.\x20R-M1-11:\x20NEVER\x20model\x20refund/dispute\x20terminals','\x20\x20(`refunded`,\x20`disputed`,\x20`arb_*`)\x20as\x20nodes\x20—\x20disputes\x20flow\x20through','\x20\x20Service.arbitrations\x20independently;\x20route\x20refunds\x20via\x20the\x20Allocator','\x20\x20triggered\x20by\x20business\x20states\x20(`cancelled`,\x20`returned`).','-\x20`guards`:\x20`[{\x20template_id,\x20host,\x20purpose\x20}]`\x20—\x20guard\x20templates\x20to\x20attach.','\x20\x20`host`\x20is\x20one\x20of\x20`service`\x20|\x20`machine`\x20|\x20`reward`\x20|\x20`repository`\x20|','\x20\x20`arbitration`.','-\x20`allocator`:\x20`{\x20recipient,\x20count,\x20mode,\x20description\x20}`\x20—\x20fund\x20split.','\x20\x20`recipient`:\x20`signer`\x20|\x20`entity`;\x20`count`\x20>\x201\x20switches\x20to\x20multi-party','\x20\x20distribution;\x20`mode`:\x20`surplus`\x20|\x20`rate`\x20|\x20`milestone`.','-\x20`risk_checks`\x20/\x20`needs`:\x20buyer-side\x20due-diligence\x20entries\x20surfaced\x20in','\x20\x20prospect\x20evaluation.','-\x20`flywheel`:\x20acquisition\x20flywheel\x20—\x20`rewardStrategy`\x20/\x20`discountStrategy`','\x20\x20/\x20`trustSellingPoints`.\x20A\x20concrete\x20(non-`User-defined`)\x20strategy\x20turns','\x20\x20the\x20`reward`/`discount`\x20levers\x20on\x20for\x20strategy\x20alignment.','-\x20`key_risk`\x20(string)\x20/\x20`build_notes`\x20(string[]):\x20the\x20headline\x20risk\x20and','\x20\x20actionable\x20build\x20guidance\x20shown\x20to\x20the\x20merchant.','-\x20`capabilities_used`:\x20CapabilityCard\x20IDs\x20(e.g.\x20`guard.validate_buy`,','\x20\x20`machine.node_topology`,\x20`allocation.distribute_milestone`).\x20Powers\x20the','\x20\x20`buy_guard`\x20/\x20`machine_design`\x20levers\x20and\x20constraint\x20checks.','-\x20`config_overrides`:\x20per-object\x20field\x20defaults,\x20e.g.','\x20\x20`{\x20service:\x20{\x20engagement_type:\x20\x27milestone\x27\x20},\x20machine:\x20{\x20wip_required:\x20true\x20}\x20}`.','-\x20`config_override_rules`:\x20conditional\x20overrides\x20—','\x20\x20`{\x20object_type,\x20field_path,\x20value\x20|\x20{\x20intent_contains,\x20then_value,\x20else_value\x20}\x20}`.','-\x20`expected_benefits`:\x20`[{\x20metric,\x20expected_value,\x20evidence\x20}]`\x20—\x20what\x20the','\x20\x20mode\x20is\x20supposed\x20to\x20buy\x20you.','-\x20`risk_appetite`:\x20`conservative`\x20|\x20`balanced`\x20|\x20`aggressive`\x20(thresholds','\x20\x20for\x20the\x20risk/benefit\x20verdict).','-\x20`risk_constraints`:\x20`{\x20require_arbitration,\x20require_compensation_fund,','\x20\x20require_wip_evidence,\x20max_single_transaction?,','\x20\x20compensation_fund_coverage_ratio?,\x20other_constraints?\x20}`.\x20Coverage\x20ratio','\x20\x20multiplies\x20max\x20single\x20order\x20to\x20size\x20the\x20compensation\x20fund\x20(retail\x205,','\x20\x20rental\x2010,\x20subscription\x203;\x20default\x205).','-\x20`applicable_conditions`:\x20`{\x20business_scale,\x20min_daily_orders?,','\x20\x20other_conditions?\x20}`\x20—\x20when\x20the\x20mode\x20fits.','-\x20`similar_industries`\x20/\x20`novel_capabilities`:\x20migration\x20hints.','-\x20`disabled_builtin_constraints`:\x20builtin\x20constraint\x20IDs\x20this\x20mode','\x20\x20deliberately\x20opts\x20out\x20of\x20(e.g.\x20retail_d2c\x20skips\x20`require_arbitration`).','\x20\x20Custom\x20constraints\x20are\x20never\x20skipped.','','###\x20Persona\x20integration\x20(strategy\x20→\x20levers)','','The\x20personae\x20section\x27s\x20`current.strategy`\x20statements\x20are\x20bridged\x20into\x20mode','ranking\x20(value\x20intent\x20↔\x20game\x20path\x20unification).\x20Deterministic\x20mapping\x20—','\x22enumerable\x20→\x20MCP,\x20not\x20prompt\x22:','','-\x20`sales_priority`\x20(volume\x20first)\x20→\x20levers\x20`discount`\x20+\x20`reward`','-\x20`profit_priority`\x20(margin\x20first)\x20→\x20levers\x20`discount`\x20+\x20`machine_design`','-\x20`buyer_screening`\x20(qualify\x20buyers)\x20→\x20lever\x20`buy_guard`','-\x20`gross_margin_control`\x20(margin\x20band)\x20→\x20levers\x20`discount`\x20+\x20`machine_design`','','A\x20mode\x20supports\x20a\x20lever\x20when\x20its\x20data\x20says\x20so:\x20`guard.validate_buy`','capability\x20or\x20a\x20buy-guard\x20template\x20enables\x20`buy_guard`;\x20a\x20concrete','flywheel\x20reward/discount\x20strategy\x20enables\x20`reward`/`discount`;\x20a','non-empty\x20`machine_shape`\x20with\x20`machine.node_topology`\x20enables','`machine_design`.\x20Pass\x20strategy\x20text\x20to\x20`recommend_industry`\x20and\x20each','recommendation\x20reports\x20`strategy_alignment`\x20(matched/missing\x20levers).','','##\x20custom-registry.json\x20—\x20your\x20custom\x20rules\x20(managed\x20by\x20the\x20AI)','','This\x20file\x20stores\x20customizations\x20that\x20apply\x20to\x20EVERY\x20industry\x20pack:','-\x20`metrics`\x20—\x20extra\x20scoring\x20dimensions\x20you\x20asked\x20the\x20AI\x20to\x20evaluate','\x20\x20(e.g.\x20\x22add\x20an\x20environmental-impact\x20metric\x20to\x20mode\x20evaluation\x22).','-\x20`constraints`\x20—\x20hard\x20rules\x20a\x20mode\x20must\x20satisfy\x20(e.g.\x20\x22must\x20always','\x20\x20include\x20arbitration\x22).','-\x20`user_modes`\x20—\x20your\x20own\x20industry\x20modes\x20derived\x20from\x20the\x20built-ins.','','You\x20normally\x20never\x20touch\x20this\x20file:\x20just\x20ask\x20the\x20AI\x20in\x20chat\x20(for','example\x20\x22register\x20a\x20custom\x20metric\x20...\x22),\x20and\x20it\x20writes\x20the\x20entry','here\x20for\x20you.\x20Deleting\x20an\x20entry\x20removes\x20that\x20customization.\x20If\x20you','edit\x20it\x20by\x20hand\x20anyway,\x20changes\x20take\x20effect\x20without\x20a\x20restart.','An\x20absent\x20or\x20empty\x20file\x20is\x20normal\x20—\x20it\x20simply\x20means\x20you\x20have\x20not','created\x20any\x20custom\x20metrics,\x20constraints\x20or\x20modes\x20yet.','','##\x20Templates\x20(`<pack>/templates/*.md`)','','Each\x20template\x20.md\x20has\x20two\x20parts:','','-\x20**Frontmatter**\x20(the\x20`---\x20...\x20---`\x20block):\x20machine-readable\x20settings\x20—','\x20\x20`id`,\x20`industry`,\x20`variant`,\x20`machine_shape`,\x20`guards`,\x20`allocator`,','\x20\x20`fee_params`,\x20…\x20In\x20the\x20client\x27s\x20VIEW\x20mode\x20these\x20render\x20as\x20a\x20table','\x20\x20(hover\x20a\x20key\x20for\x20its\x20meaning);\x20EDIT\x20mode\x20shows\x20the\x20raw\x20text.','-\x20**Markdown\x20body**:\x20free-form\x20guidance\x20for\x20the\x20AI\x20(Key\x20risk,','\x20\x20Differences,\x20Build\x20notes,\x20…).','','###\x20Impact\x20and\x20risks\x20of\x20editing\x20templates','','-\x20The\x20frontmatter\x20is\x20**strictly\x20validated\x20on\x20every\x20load**\x20by\x20the\x20AI','\x20\x20runtime\x20(allowed\x20keys,\x20value\x20types,\x20ranges,\x20`id`/`industry`/`variant`','\x20\x20consistency\x20with\x20the\x20file\x20location).\x20A\x20template\x20that\x20fails\x20validation','\x20\x20is\x20**skipped\x20with\x20a\x20loud\x20error**\x20—\x20tools\x20that\x20read\x20templates\x20report','\x20\x20the\x20file\x20and\x20the\x20exact\x20field\x20problem\x20until\x20you\x20fix\x20it.\x20Guidance\x20in','\x20\x20the\x20broken\x20template\x20will\x20NOT\x20reach\x20the\x20AI\x20while\x20it\x20is\x20invalid.','-\x20The\x20**client\x20editor\x20validates\x20on\x20save**\x20(same\x20rules)\x20and\x20blocks\x20the','\x20\x20write,\x20so\x20most\x20mistakes\x20never\x20reach\x20disk.\x20Edits\x20made\x20OUTSIDE\x20the','\x20\x20client\x20bypass\x20this\x20gate\x20—\x20run\x20a\x20Scan\x20afterwards\x20and\x20watch\x20for\x20errors.','-\x20Keep\x20the\x20Markdown\x20body\x20free-form\x20—\x20it\x20is\x20never\x20validated.\x20Breaking','\x20\x20the\x20`---`\x20structure\x20is\x20what\x20matters.','','###\x20How\x20to\x20recover\x20a\x20broken\x20template','','1.\x20Fix\x20the\x20field\x20named\x20in\x20the\x20error\x20(type/range/enum\x20mismatch),\x20or','2.\x20**Delete\x20the\x20.md\x20file**\x20—\x20the\x20built-in\x20version\x20is\x20re-seeded','\x20\x20\x20automatically\x20at\x20the\x20next\x20startup\x20/\x20template\x20scan\x20(seeding\x20never','\x20\x20\x20overwrites\x20an\x20existing\x20file,\x20so\x20your\x20other\x20edits\x20survive).','3.\x20Right-click\x20a\x20file\x20in\x20the\x20Industry\x20drawer\x20→\x20*Reset*\x20restores\x20the','\x20\x20\x20pristine\x20seeded\x20version\x20too.','','##\x20Reset','','Right-click\x20any\x20file/pack\x20folder\x20in\x20the\x20Industry\x20drawer\x20and\x20choose\x20*Reset*','to\x20restore\x20the\x20pristine\x20template\x20at\x20any\x20time.','']['join']('\x0a');}export function ensureIndustryReadme(){const a=resolveIndustryPackDir();mkdirSync(a,{'recursive':!![]});const b=join(a,'README.md');return writeFileSync(b,industryReadmeContent(),'utf-8'),b;}export function scaffoldIndustryPack(a,b){const c=join(b??resolveIndustryPackDir(),a),d=[],e=[];if(!/^[a-z][a-z0-9_]*$/['test'](a))return{'ok':![],'dir':c,'files':d,'errors':['industry\x20name\x20\x27'+a+'\x27\x20must\x20be\x20lowercase\x20snake_case\x20(a-z,\x200-9,\x20_)']};try{mkdirSync(c,{'recursive':!![]}),ensureIndustryReadme();const f=buildPristineMergedPack(a);return writeFileSync(join(c,'pack.json'),JSON['stringify'](f,null,0x2)+'\x0a'),d['push']('pack.json'),writeFileSync(join(c,'playbook.md'),playbookTemplate(a)),d['push']('playbook.md'),{'ok':!![],'dir':c,'files':d,'errors':e};}catch(g){return{'ok':![],'dir':c,'files':d,'errors':['scaffold\x20failed:\x20'+g['message']]};}}export function readMergedPackIfPresent(a){const b=join(a,'pack.json');if(!existsSync(b))return null;try{const c=readFileSync(b,'utf-8');return JSON['parse'](c);}catch{return null;}}function playbookTemplate(a){return['#\x20'+a+'\x20—\x20Industry\x20Playbook','','>\x20📘\x20This\x20file\x20captures\x20human\x20business\x20intelligence\x20for\x20the\x20`'+a+'`','>\x20industry.\x20Content\x20here\x20is\x20READ\x20BY\x20THE\x20AI\x20AS\x20CONTEXT\x20on\x20every\x20turn,','>\x20and\x20OVERRIDES\x20WoWok\x27s\x20generic\x20built-in\x20industry\x20data/rules\x20for\x20this','>\x20account.\x20The\x20companion\x20`pack.json`\x20file\x20stores\x20machine-checkable','>\x20rules;\x20THIS\x20file\x20stores\x20human\x20strategy,\x20tone,\x20experience,\x20and\x20ethics.','','>\x20💡\x20Hint\x20for\x20the\x20AI:\x20when\x20the\x20user\x20asks\x20a\x20question\x20about\x20\x22how\x20to','>\x20handle\x20'+a+'\x22\x20or\x20\x22what\x20should\x20I\x20do?\x22,\x20check\x20this\x20file\x20first\x20for\x20the','>\x20merchant/customer\x20voice,\x20then\x20fall\x20back\x20to\x20your\x20built-in\x20data.\x20Cite','>\x20section\x20titles\x20in\x20your\x20reply\x20so\x20the\x20user\x20knows\x20where\x20advice\x20comes\x20from.','','##\x20Experience\x20(Field-Tested\x20Rules\x20of\x20Thumb)','','>\x20Write\x20what\x20actually\x20works\x20in\x20this\x20industry\x20—\x20not\x20what\x20textbooks\x20say.','>\x20Short\x20bullet\x20points\x20preferred;\x20the\x20AI\x20reads\x20them\x20as\x20axioms.\x20Include','>\x20specific\x20numbers\x20when\x20you\x20have\x20them.','','-\x20(Example)\x20\x22Catering:\x20if\x20the\x20event\x20starts\x20before\x2010:00,\x20assume\x20breakfast\x20service\x20too\x20—\x20upsell\x20it\x20proactively.\x22','-\x20(Example)\x20\x22Common\x20pitfall:\x20last-minute\x20menu\x20swaps\x20on\x20Fridays\x20—\x20require\x20a\x20written\x20change\x20request\x2048\x20h\x20before\x20the\x20event\x20or\x20charge\x20a\x2015%\x20fee.\x22','-\x20(Add\x20more\x20below\x20—\x20delete\x20the\x20examples\x20above\x20when\x20you\x20have\x20real\x20ones.)','','##\x20Strategy\x20(Competitive\x20/\x20Game-Theory)','','>\x20How\x20should\x20each\x20role\x20act\x20in\x20a\x20negotiation\x20/\x20dispute\x20/\x20supplier','>\x20relationship?\x20Think\x20in\x20\x22always\x20/\x20never\x20/\x20depends-on-X\x22\x20rules,\x20and\x20call','>\x20out\x20the\x20trade-offs.','','-\x20Merchant\x20strategy:\x20(Add\x20how\x20a\x20merchant\x20in\x20this\x20industry\x20should\x20act\x20—\x20price\x20anchoring,\x20which\x20concessions\x20to\x20give\x20early\x20vs\x20late,\x20what\x20to\x20never\x20concede\x20on.)','-\x20Customer\x20strategy:\x20(Add\x20what\x20a\x20smart\x20customer\x20should\x20push\x20for.)','-\x20Dispute\x20strategy:\x20(Add\x20when\x20to\x20settle\x20fast\x20vs\x20when\x20to\x20fight\x20for\x20full\x20evidence\x20+\x20arbitration\x20—\x20call\x20out\x20the\x20escalation\x20thresholds.)','','##\x20Personalization\x20(Tone,\x20Brand,\x20Ethics,\x20Red\x20Lines)','','-\x20Tone\x20/\x20voice:\x20(Write\x20one\x20sentence\x20describing\x20the\x20exact\x20conversational\x20voice\x20this\x20account\x20should\x20use\x20—\x20casual,\x20formal,\x20technical,\x20etc.)','-\x20Brand\x20rules:\x20(Add\x20logo,\x20link-out\x20style,\x20forbidden\x20terminology,\x20always-include\x20phrases,\x20etc.)','-\x20Red\x20lines:\x20(Add\x20non-negotiables.\x20Example:\x20\x22Never\x20make\x20a\x20refund\x20promise\x20larger\x20than\x2030%\x20without\x20arbitration\x20evidence.\x22)','-\x20Ethics:\x20(Add\x20ethical\x20guardrails.\x20Example:\x20\x22If\x20a\x20customer\x20appears\x20intoxicated,\x20refuse\x20service\x20and\x20refer\x20to\x20a\x20supervisor.\x22)','','##\x20Playbook\x20Maintenance','','>\x20You\x20don\x27t\x20need\x20to\x20be\x20perfect\x20on\x20day\x20one.\x20After\x20every\x20real\x20deal,\x20add\x20a','>\x20bullet\x20to\x20the\x20above\x20sections\x20with\x20what\x20worked\x20/\x20what\x20failed.\x20Every','>\x20entry\x20improves\x20the\x20AI\x27s\x20future\x20decisions.','','>\x20Right-click\x20the\x20file\x20or\x20this\x20pack\x20folder\x20in\x20the\x20Industry\x20drawer\x20at','>\x20any\x20time\x20and\x20choose\x20\x22Reset\x22\x20to\x20restore\x20this\x20annotated\x20template.','']['join']('\x0a');}export function locatePackAndRemainder(a){const b=a['replace'](/^[\\/]+/,'')['replace'](/[\\/]+$/,'');if(!b)return null;const [c,...d]=b['split'](/[\\/]+/);if(!c)return null;return{'packName':c,'remainder':d['join']('/')};}export function resetIndustryPath(a,b){const c=[],d=[],f=b??resolveIndustryPackDir(),g=locatePackAndRemainder(a),h=a;if(!g)return{'ok':![],'layout':'merged','target':h,'restored_files':[],'errors':['invalid\x20reset\x20path\x20\x27'+a+'\x27']};const {packName:i,remainder:j}=g,k=join(f,i);if(!existsSync(k))return{'ok':![],'layout':'merged','target':h,'restored_files':[],'errors':['pack\x20directory\x20\x27'+i+'\x27\x20does\x20not\x20exist']};if(!/^[a-z][a-z0-9_]*$/['test'](i))return{'ok':![],'layout':'merged','target':h,'restored_files':[],'errors':['pack\x20name\x20\x27'+i+'\x27\x20is\x20not\x20a\x20valid\x20snake_case\x20identifier']};const l=readMergedPackIfPresent(k),n=l?'merged':'legacy';if(j==='')try{mkdirSync(k,{'recursive':!![]});const s=buildPristineMergedPack(i);return writeFileSync(join(k,'pack.json'),JSON['stringify'](s,null,0x2)+'\x0a'),d['push']('pack.json'),writeFileSync(join(k,'playbook.md'),playbookTemplate(i)),d['push']('playbook.md'),{'ok':!![],'layout':'merged','target':h,'restored_files':d,'errors':c};}catch(t){return{'ok':![],'layout':n,'target':h,'restored_files':d,'errors':['pack\x20reset\x20failed:\x20'+t['message']]};}const o=j['split']('/')['slice'](-0x1)[0x0],p=j==='playbook.md',q=j['startsWith'](PERSONAE_DIR+'/')&&o['endsWith']('.json');if(n==='merged'){if(p)try{return writeFileSync(join(k,'playbook.md'),playbookTemplate(i)),d['push']('playbook.md'),{'ok':!![],'layout':n,'target':h,'restored_files':d,'errors':c};}catch(v){return{'ok':![],'layout':n,'target':h,'restored_files':d,'errors':['playbook\x20reset\x20failed:\x20'+v['message']]};}const u=LAYER_FILE_SECTION[j];if(u)try{const w=readMergedPackIfPresent(k)??buildPristineMergedPack(i);switch(u){case'match':w['match']=matchSection(i);break;case'dispute':w['dispute']=disputeSection(i);break;case'compliance':w['compliance']=complianceSection(i);break;case'supply':w['supply']=supplySection(i);break;case'rules':w['rules']=rulesSection(i);break;case'mode':w['mode']=null;break;}return writeFileSync(join(k,'pack.json'),JSON['stringify'](w,null,0x2)+'\x0a'),d['push']('pack.json'),{'ok':!![],'layout':n,'target':h,'restored_files':d,'errors':c};}catch(x){return{'ok':![],'layout':n,'target':h,'restored_files':d,'errors':['section\x20reset\x20failed:\x20'+x['message']]};}if(q){const y=o['replace'](/\.json$/,'');if(!PERSONA_ROLES['includes'](y))return{'ok':![],'layout':n,'target':h,'restored_files':[],'errors':['unknown\x20persona\x20role\x20\x27'+y+'\x27']};try{const z=readMergedPackIfPresent(k)??buildPristineMergedPack(i),A=z['personae']&&Array['isArray'](z['personae'])?[...z['personae']]:[],B=A['findIndex'](D=>D['role']===y),C=personaPerRole(y,i);if(B>=0x0)A[B]=C;else A['push'](C);return z['personae']=A,writeFileSync(join(k,'pack.json'),JSON['stringify'](z,null,0x2)+'\x0a'),d['push']('pack.json'),{'ok':!![],'layout':n,'target':h,'restored_files':d,'errors':c};}catch(D){return{'ok':![],'layout':n,'target':h,'restored_files':d,'errors':['persona\x20reset\x20failed:\x20'+D['message']]};}}if(j==='manifest.json'||j==='manifest')try{const E=readMergedPackIfPresent(k)??buildPristineMergedPack(i);return E['manifest']=manifestSection(i),writeFileSync(join(k,'pack.json'),JSON['stringify'](E,null,0x2)+'\x0a'),d['push']('pack.json'),{'ok':!![],'layout':n,'target':h,'restored_files':d,'errors':c};}catch(F){return{'ok':![],'layout':n,'target':h,'restored_files':d,'errors':['manifest\x20reset\x20failed:\x20'+F['message']]};}return{'ok':![],'layout':n,'target':h,'restored_files':[],'errors':['path\x20\x27'+j+'\x27\x20is\x20not\x20a\x20standard\x20section\x20file\x20of\x20pack\x20\x27'+i+'\x27.\x20Reset\x20is\x20only\x20provided\x20for\x20pack.json\x20standard\x20sections\x20and\x20playbook.md.']};}if(p)try{return writeFileSync(join(k,'playbook.md'),playbookTemplate(i)),d['push']('playbook.md'),{'ok':!![],'layout':n,'target':h,'restored_files':d,'errors':c};}catch(G){return{'ok':![],'layout':n,'target':h,'restored_files':d,'errors':['legacy\x20playbook\x20reset\x20failed:\x20'+G['message']]};}if(j==='manifest.json')try{const H=manifestSection(i);return writeFileSync(join(k,'manifest.json'),JSON['stringify'](H,null,0x2)+'\x0a'),d['push']('manifest.json'),{'ok':!![],'layout':n,'target':h,'restored_files':d,'errors':c};}catch(I){return{'ok':![],'layout':n,'target':h,'restored_files':d,'errors':['legacy\x20manifest\x20reset\x20failed:\x20'+I['message']]};}const r=LAYER_FILE_SECTION[j];if(r)try{let J='';switch(r){case'match':J=JSON['stringify'](matchSection(i),null,0x2)+'\x0a';break;case'dispute':J=JSON['stringify'](disputeSection(i),null,0x2)+'\x0a';break;case'compliance':J=JSON['stringify'](complianceSection(i),null,0x2)+'\x0a';break;case'supply':J=JSON['stringify'](supplySection(i),null,0x2)+'\x0a';break;case'rules':J=JSON['stringify'](rulesSection(i),null,0x2)+'\x0a';break;case'mode':J=JSON['stringify']({},null,0x2)+'\x0a';break;}return writeFileSync(join(k,j),J),d['push'](j),{'ok':!![],'layout':n,'target':h,'restored_files':d,'errors':c};}catch(K){return{'ok':![],'layout':n,'target':h,'restored_files':d,'errors':['legacy\x20section\x20reset\x20failed:\x20'+K['message']]};}if(q){const L=o['replace'](/\.json$/,'');if(!PERSONA_ROLES['includes'](L))return{'ok':![],'layout':n,'target':h,'restored_files':[],'errors':['unknown\x20persona\x20\x27'+L+'\x27']};try{return writeFileSync(join(k,j),JSON['stringify'](personaPerRole(L,i),null,0x2)+'\x0a'),d['push'](j),{'ok':!![],'layout':n,'target':h,'restored_files':d,'errors':c};}catch(M){return{'ok':![],'layout':n,'target':h,'restored_files':d,'errors':['legacy\x20persona\x20reset\x20failed:\x20'+M['message']]};}}return{'ok':![],'layout':n,'target':h,'restored_files':[],'errors':['cannot\x20reset\x20non-standard\x20file\x20\x27'+j+'\x27\x20in\x20legacy\x20layout.\x20Only\x20standard\x20layer\x20files,\x20personae/*.json,\x20manifest.json,\x20and\x20playbook.md\x20can\x20be\x20reset.']};}
@@ -1 +1 @@
1
- import{MetricRegistry}from'./metric-registry.js';import{ConstraintRegistry}from'./constraint-registry.js';export class ModeEvaluator{['capabilityRegistry'];['metricRegistry'];['constraintRegistry'];constructor(a,b,c){this['capabilityRegistry']=a,this['metricRegistry']=b??MetricRegistry['Instance'](),this['constraintRegistry']=c??ConstraintRegistry['Instance']();}['evaluateMode'](a){const b=this['checkCapabilityConflicts'](a),c=this['isCustomMode'](a)?a['custom_constraints']:undefined,d=this['constraintRegistry']['checkConstraints'](a,this['capabilityRegistry'],c),e=d['filter'](n=>n['severity']==='hard')['map'](n=>n['display_name']+':\x20'+n['violation']),f=d['filter'](n=>n['severity']==='soft')['map'](n=>n['display_name']+':\x20'+n['violation']),g=this['isCustomMode'](a)?a['custom_metrics']:undefined,h=this['metricRegistry']['evaluateMode'](a,this['capabilityRegistry'],g),i=h['risk_score'],j=h['benefit_score'],k=j/Math['max'](i,0x1),l=b['length']===0x0&&e['length']===0x0,m=this['generateRecommendations'](a,i,j,b,e,f);return{'applicable':l,'risk_score':i,'benefit_score':j,'risk_benefit_ratio':k,'capability_conflicts':b,'violated_constraints':e,'unmet_conditions':f,'recommendations':m};}['isCustomMode'](a){return a['owner']!==undefined&&a['source']==='custom';}['checkCapabilityConflicts'](a){const b=[],c=a['capabilities_used'];for(const d of c){const e=this['capabilityRegistry']['getCard'](d);if(!e?.['constraints']?.['conflicts_with'])continue;for(const f of e['constraints']['conflicts_with']){c['includes'](f)&&b['push'](d+'\x20conflicts\x20with\x20'+f);}if(e['constraints']['must_pair_with'])for(const g of e['constraints']['must_pair_with']){!c['includes'](g)&&b['push'](d+'\x20requires\x20'+g+'\x20(must_pair_with\x20not\x20satisfied)');}}return b;}['generateRecommendations'](a,b,c,d,e,f){const g=[];d['length']>0x0&&g['push']('Detected\x20'+d['length']+'\x20capability\x20conflicts,\x20must\x20be\x20resolved\x20before\x20applying\x20the\x20mode');e['length']>0x0&&g['push']('Detected\x20'+e['length']+'\x20hard\x20constraint\x20violations,\x20need\x20to\x20supplement\x20missing\x20capabilities\x20or\x20adjust\x20mode\x20configuration');f['length']>0x0&&g['push']('Detected\x20'+f['length']+'\x20soft\x20constraints\x20not\x20met,\x20recommend\x20adjusting\x20to\x20improve\x20mode\x20quality');const h={'conservative':{'max_risk':0x1e,'min_benefit':0x32},'balanced':{'max_risk':0x3c,'min_benefit':0x3c},'aggressive':{'max_risk':0x64,'min_benefit':0x50}},i=h[a['risk_appetite']];return b>i['max_risk']&&g['push']('Risk\x20score\x20'+b+'\x20exceeds\x20'+a['risk_appetite']+'\x20mode\x20threshold\x20'+i['max_risk']+',\x20recommend\x20reducing\x20risk\x20or\x20adjusting\x20risk\x20appetite'),c<i['min_benefit']&&g['push']('Benefit\x20score\x20'+c+'\x20below\x20'+a['risk_appetite']+'\x20mode\x20threshold\x20'+i['min_benefit']+',\x20recommend\x20adding\x20benefit\x20capabilities\x20or\x20adjusting\x20risk\x20appetite'),g['length']===0x0&&g['push']('Mode\x20evaluation\x20passed:\x20risk\x20'+b+'\x20/\x20benefit\x20'+c+'\x20/\x20risk-benefit\x20ratio\x20'+(c/Math['max'](b,0x1))['toFixed'](0x2)),g;}}
1
+ import{MetricRegistry}from'./metric-registry.js';import{ConstraintRegistry}from'./constraint-registry.js';import{getJudgmentDoc}from'../config/judgment.js';export class ModeEvaluator{['capabilityRegistry'];['metricRegistry'];['constraintRegistry'];constructor(a,b,c){this['capabilityRegistry']=a,this['metricRegistry']=b??MetricRegistry['Instance'](),this['constraintRegistry']=c??ConstraintRegistry['Instance']();}['evaluateMode'](a){const b=this['checkCapabilityConflicts'](a),c=this['isCustomMode'](a)?a['custom_constraints']:undefined,d=this['constraintRegistry']['checkConstraints'](a,this['capabilityRegistry'],c),e=d['filter'](n=>n['severity']==='hard')['map'](n=>n['display_name']+':\x20'+n['violation']),f=d['filter'](n=>n['severity']==='soft')['map'](n=>n['display_name']+':\x20'+n['violation']),g=this['isCustomMode'](a)?a['custom_metrics']:undefined,h=this['metricRegistry']['evaluateMode'](a,this['capabilityRegistry'],g),i=h['risk_score'],j=h['benefit_score'],k=j/Math['max'](i,0x1),l=b['length']===0x0&&e['length']===0x0,m=this['generateRecommendations'](a,i,j,b,e,f);return{'applicable':l,'risk_score':i,'benefit_score':j,'risk_benefit_ratio':k,'capability_conflicts':b,'violated_constraints':e,'unmet_conditions':f,'recommendations':m};}['isCustomMode'](a){return a['owner']!==undefined&&a['source']==='custom';}['checkCapabilityConflicts'](a){const b=[],c=a['capabilities_used'];for(const d of c){const e=this['capabilityRegistry']['getCard'](d);if(!e?.['constraints']?.['conflicts_with'])continue;for(const f of e['constraints']['conflicts_with']){c['includes'](f)&&b['push'](d+'\x20conflicts\x20with\x20'+f);}if(e['constraints']['must_pair_with'])for(const g of e['constraints']['must_pair_with']){!c['includes'](g)&&b['push'](d+'\x20requires\x20'+g+'\x20(must_pair_with\x20not\x20satisfied)');}}return b;}['generateRecommendations'](a,b,c,d,e,f){const g=[];d['length']>0x0&&g['push']('Detected\x20'+d['length']+'\x20capability\x20conflicts,\x20must\x20be\x20resolved\x20before\x20applying\x20the\x20mode');e['length']>0x0&&g['push']('Detected\x20'+e['length']+'\x20hard\x20constraint\x20violations,\x20need\x20to\x20supplement\x20missing\x20capabilities\x20or\x20adjust\x20mode\x20configuration');f['length']>0x0&&g['push']('Detected\x20'+f['length']+'\x20soft\x20constraints\x20not\x20met,\x20recommend\x20adjusting\x20to\x20improve\x20mode\x20quality');const h=getJudgmentDoc()['mode']['appetite_thresholds'],i=h[a['risk_appetite']];return i!==undefined&&b>i['max_risk']&&g['push']('Risk\x20score\x20'+b+'\x20exceeds\x20'+a['risk_appetite']+'\x20mode\x20threshold\x20'+i['max_risk']+',\x20recommend\x20reducing\x20risk\x20or\x20adjusting\x20risk\x20appetite'),i!==undefined&&c<i['min_benefit']&&g['push']('Benefit\x20score\x20'+c+'\x20below\x20'+a['risk_appetite']+'\x20mode\x20threshold\x20'+i['min_benefit']+',\x20recommend\x20adding\x20benefit\x20capabilities\x20or\x20adjusting\x20risk\x20appetite'),g['length']===0x0&&g['push']('Mode\x20evaluation\x20passed:\x20risk\x20'+b+'\x20/\x20benefit\x20'+c+'\x20/\x20risk-benefit\x20ratio\x20'+(c/Math['max'](b,0x1))['toFixed'](0x2)),g;}}
@@ -1 +1 @@
1
- import{getScenarioMode}from'../knowledge/scenario-modes.js';import{getIndustryTraits}from'../knowledge/industry-registry.js';import{getIndustryRiskChecks,getIndustryNeeds}from'../customer/index.js';import{getFlywheelForIndustry}from'../knowledge/acquisition-flywheel.js';const GENERAL_TRAITS={'has_logistics':![],'communication_heavy':![],'pure_digital':![],'long_cycle':![],'deposit_required':![],'multi_tier_allocation':![],'regulatory_intensity':'low','trust_sensitivity':'medium','consumption_frequency':'occasional','avg_ticket_size':'medium'},GENERAL_FLYWHEEL={'industry':'general','trustSellingPoints':[],'keyActions':[],'rewardStrategy':'User-defined','discountStrategy':'User-defined','trustDescription':'User-defined\x20trust\x20mechanism'},GENERAL_MACHINE_SHAPE=[{'name':'paid','role':'Entry:\x20order\x20created\x20and\x20paid'},{'name':'delivering','role':'Service\x20delivery\x20in\x20progress'},{'name':'delivered','role':'Deliverable\x20available\x20for\x20review'},{'name':'completed','role':'Service\x20completed,\x20funds\x20released'},{'name':'cancelled','role':'Pre-delivery\x20cancellation\x20—\x20triggers\x20refund\x20Allocator'}],GENERAL_ALLOCATOR={'recipient':'signer','count':0x1,'mode':'surplus','description':'Default:\x20surplus\x20to\x20service\x20owner\x20(general\x20fallback)'},RETAIL_MACHINE_SHAPE=[{'name':'paid','role':'Entry:\x20order\x20paid\x20via\x20Service.buy();\x20Machine\x20starts\x20here'},{'name':'processing','role':'Merchant\x20prepares\x20order\x20(picking/packing);\x20required_info\x20(shipping\x20address)\x20collected\x20via\x20Messenger'},{'name':'shipped','role':'Merchant\x20ships\x20goods,\x20records\x20shipping\x20WIP\x20(tracking\x20number)'},{'name':'in_transit','role':'Logistics\x20leg\x20active\x20—\x20tracking\x20WIP\x20updates'},{'name':'delivered','role':'Goods\x20delivered\x20to\x20buyer'},{'name':'confirmed','role':'Buyer\x20confirms\x20receipt\x20(confirm_gate:\x20only\x20buyer\x20can\x20confirm)'},{'name':'completed','role':'Funds\x20released\x20to\x20merchant'},{'name':'return_requested','role':'Buyer\x20requests\x20return\x20within\x20refund_window\x20(>=7d)'},{'name':'returned','role':'Buyer\x20ships\x20goods\x20back\x20(return\x20WIP:\x20tracking\x20number)\x20—\x20triggers\x20refund\x20Allocator\x20(R-M1-11\x20compliant)'},{'name':'cancelled','role':'Pre-ship\x20cancellation\x20—\x20triggers\x20refund\x20Allocator'}],RETAIL_GUARDS=[{'template_id':'buy_guard_inventory','host':'service','purpose':'Verify\x20inventory\x20and\x20buyer\x20address\x20on\x20purchase'},{'template_id':'ship_guard_wip','host':'machine','purpose':'Shipping\x20evidence\x20WIP\x20(logistics\x20tracking\x20number)'},{'template_id':'confirm_guard_signer','host':'machine','purpose':'Only\x20buyer\x20can\x20confirm\x20receipt'},{'template_id':'return_guard_timelock','host':'machine','purpose':'Return\x20request\x20gated\x20by\x20refund_window\x20time-lock\x20(clock)'},{'template_id':'refund_guard_permission','host':'machine','purpose':'Return\x20&\x20refund\x20requires\x20merchant\x20permission\x20OR\x20arbiter'},{'template_id':'tpl_payment_exception_compensation','host':'machine','purpose':'Logistics\x20delay\x20exception\x20compensation\x20(§2.13)'}],RETAIL_ALLOCATOR={'recipient':'entity','count':0x3,'mode':'rate','description':'Platform\x2010%\x20+\x20Merchant\x2090%\x20(rate-based\x20split)\x20on\x20completed;\x20full\x20refund\x20to\x20buyer\x20on\x20returned/cancelled\x20via\x20refund\x20Allocator'},RETAIL_KEY_RISK='Products\x20don\x27t\x20match\x20description\x20—\x20no\x20refund\x20path\x20for\x20returns',RETAIL_BUILD_NOTES=['Logistics\x20WIP\x20(tracking\x20number)\x20is\x20essential\x20—\x20shipping\x20evidence\x20protects\x20both\x20parties\x20in\x20return\x20disputes','confirm_gate\x20prevents\x20merchant\x20from\x20self-confirming\x20receipt','Refund\x20path\x20must\x20support\x20return-and-exchange\x20flow;\x20refund_window\x20>=\x207d','Return\x20request\x20is\x20time-lock\x20gated\x20—\x20after\x20the\x20window\x20closes,\x20returns\x20need\x20merchant\x20permission\x20or\x20arbitration','Compensation\x20fund\x20covers\x20return/exchange\x20disputes'],RETAIL_D2C_MACHINE_SHAPE=[{'name':'ordered','role':'Entry:\x20order\x20created\x20(funds\x20escrowed\x20in\x20Allocation)'},{'name':'shipped','role':'Merchant\x20ships\x20goods'},{'name':'delivered','role':'Goods\x20delivered\x20to\x20buyer'},{'name':'completed','role':'Buyer\x20confirms\x20receipt\x20—\x20withdraw_guard\x20releases\x20funds'},{'name':'cancelled','role':'Pre-ship\x20cancellation\x20—\x20refund_guard\x20refunds\x20buyer'}],RETAIL_D2C_GUARDS=[{'template_id':'withdraw_guard_delivery','host':'service','purpose':'Release\x20funds\x20to\x20merchant\x20+\x20processor\x20on\x20order\x20completion\x20(delivery\x20confirmation)'},{'template_id':'refund_guard_cancellation','host':'service','purpose':'Refund\x20100%\x20to\x20buyer\x20on\x20order\x20cancellation'}],RETAIL_D2C_ALLOCATOR={'recipient':'entity','count':0x2,'mode':'rate','description':'Merchant\x2097%\x20+\x20Processor\x203%\x20(rate-based\x20split,\x20no\x20platform\x20commission)'},RETAIL_D2C_KEY_RISK='No\x20platform\x20arbitration\x20—\x20disputes\x20rely\x20on\x20optional\x20Arbitration\x20or\x20off-chain\x20chargeback',RETAIL_D2C_BUILD_NOTES=['Allocation\x20escrow\x20replaces\x20platform\x20custody\x20—\x20funds\x20locked\x20in\x20contract\x20until\x20Guard\x20releases','withdraw_guard\x20enforces\x20delivery\x20gate\x20—\x20merchant\x20must\x20reach\x20\x27completed\x27\x20state\x20to\x20receive\x20payment','refund_guard\x20ensures\x20100%\x20refund\x20on\x20cancellation\x20—\x20no\x20merchant\x20approval\x20needed','No\x20buy_guard\x20needed\x20—\x20D2C\x20doesn\x27t\x20gate\x20purchases\x20(open\x20storefront)','Arbitration\x20is\x20optional\x20—\x20add\x20when\x20dispute\x20volume\x20justifies\x20the\x20cost','Service\x20↔\x20Guard\x20circular\x20dependency:\x20create\x20Service\x20(unpublished)\x20→\x20create\x20Guards\x20→\x20update\x20Service\x20(publish)'],SUPPORTED_INDUSTRY_SET=new Set(['freelance','rental','education','travel','subscription','retail','retail_d2c']);function fetchTemplate(a){const b=a==='retail_d2c'?'retail':a,c=getIndustryTraits(b)??GENERAL_TRAITS,d=SUPPORTED_INDUSTRY_SET['has'](a),e=a==='retail_d2c'?'retail':a,f=d?getIndustryRiskChecks(e):[],g=d?getIndustryNeeds(e):[],h=getFlywheelForIndustry(b)??GENERAL_FLYWHEEL;let i,j,k,l,m;if(a==='retail')i=RETAIL_MACHINE_SHAPE,j=RETAIL_GUARDS,k=RETAIL_ALLOCATOR,l=RETAIL_KEY_RISK,m=RETAIL_BUILD_NOTES;else{if(a==='retail_d2c')i=RETAIL_D2C_MACHINE_SHAPE,j=RETAIL_D2C_GUARDS,k=RETAIL_D2C_ALLOCATOR,l=RETAIL_D2C_KEY_RISK,m=RETAIL_D2C_BUILD_NOTES;else{if(a==='general'){const n=getScenarioMode('general');i=GENERAL_MACHINE_SHAPE,j=[],k=GENERAL_ALLOCATOR,l=n?.['key_risk']??'No\x20safety\x20net\x20—\x20user\x20must\x20design\x20all\x20trust\x20mechanisms\x20manually',m=n?.['build_notes'];}else{const o=getScenarioMode(a);if(!o)throw new Error('[modes.ts]\x20No\x20scenario\x20mode\x20found\x20for\x20industry:\x20'+a);i=o['machine_shape'],j=o['guards'],k=o['allocator'],l=o['key_risk'],m=o['build_notes'];}}}return{'traits':c,'risk_checks':f,'needs':g,'flywheel':h,'machine_shape':i,'guards':j,'allocator':k,'key_risk':l,'build_notes':m};}export const BUILTIN_MODES=[{'name':'freelance','display_name':'Freelance','version':'v1','source':'builtin',...fetchTemplate('freelance'),'analyze':{'key_questions':['Are\x20WIP\x20hashes\x20bound\x20to\x20each\x20milestone,\x20so\x20delivery\x20evidence\x20cannot\x20be\x20substituted\x20after\x20acceptance?','Does\x20the\x20acceptance\x20gate\x20have\x20a\x20time-bounded\x20escape\x20(keeper-driven\x20auto-accept),\x20or\x20can\x20a\x20silent\x20buyer\x20hold\x20the\x20provider\x27s\x20funds\x20hostage\x20indefinitely?']},'capabilities_used':['permission.index_create','permission.role_assign','guard.validate_buy','guard.validate_wip_hash','machine.node_topology','treasury.owner_receive','allocation.distribute','allocation.distribute_milestone','service.publish','progress.advance','arb.vote_weighted','contact.im_create'],'config_overrides':{'service':{'setting_locked_time':'30d','engagement_type':'milestone'},'machine':{'wip_required':!![],'wip_hash_algorithm':'sha256','acceptance_gate':!![]}},'expected_benefits':[{'metric':'Dispute\x20rate\x20reduction','expected_value':'40%','evidence':'WIP\x20hash\x20+\x20milestone\x20allocation\x20enforces\x20delivery\x20evidence'},{'metric':'Delivery\x20confirmation\x20efficiency','expected_value':'+50%','evidence':'acceptance\x20gate\x20automates\x20acceptance\x20workflow'},{'metric':'Provider\x20payment\x20assurance','expected_value':'100%','evidence':'Funds\x20auto-release\x20to\x20provider\x20after\x20accepted\x20node'}],'risk_appetite':'balanced','risk_constraints':{'require_arbitration':!![],'require_compensation_fund':![],'require_wip_evidence':!![],'other_constraints':['setting_locked_time\x20>=\x207d\x20to\x20lock\x20engagement-period\x20rules','ISSUE-P1-4:\x2048h\x20auto-accept\x20requires\x20off-chain\x20keeper\x20(WoWok\x20Guard\x20does\x20not\x20support\x20time-based\x20triggers).\x20Deploy\x20a\x20keeper\x20service\x20that\x20polls\x20Progress\x20objects\x20in\x20\x27delivered\x27\x20state\x20and\x20calls\x20adminUnhold\x20(permission\x20224)\x20after\x2048h\x20timeout.\x20See\x20keeper\x20template\x20in\x20docs.']},'applicable_conditions':{'business_scale':'small','min_daily_orders':0x1,'other_conditions':['Suitable\x20for\x20mid-to-long-term\x20project\x20delivery','Requires\x20milestone-based\x20phased\x20acceptance']},'similar_industries':['rental','education'],'novel_capabilities':['allocation.distribute_milestone'],'disabled_builtin_constraints':['require_compensation_fund']},{'name':'rental','display_name':'Rental','version':'v1','source':'builtin',...fetchTemplate('rental'),'analyze':{'key_questions':['Is\x20the\x20deposit\x20escrowed\x20on-chain\x20and\x20sized\x20against\x20the\x20item\x27s\x20full\x20replacement\x20value,\x20not\x20just\x20the\x20rental\x20fee?','Are\x20pre-handover\x20and\x20post-return\x20WIP\x20states\x20hash-recorded,\x20so\x20damage\x20attribution\x20is\x20provable\x20rather\x20than\x20asserted?']},'capabilities_used':['permission.index_create','permission.role_assign','guard.validate_buy','guard.validate_wip_hash','machine.node_topology','treasury.owner_receive','allocation.distribute','service.publish','progress.advance','arb.vote_weighted','contact.im_create'],'config_overrides':{'treasury':{'deposit_escrow':!![],'deposit_deductible':!![]},'machine':{'wip_required':!![],'wip_stages':['handover_out','returned'],'inspection_gate':!![]}},'expected_benefits':[{'metric':'Deposit\x20dispute\x20rate','expected_value':'-60%','evidence':'pre-rental\x20WIP\x20mandatorily\x20records\x20item\x27s\x20original\x20state'},{'metric':'Damage\x20liability\x20accuracy','expected_value':'+70%','evidence':'pre/post\x20WIP\x20hash\x20comparison\x20eliminates\x20unfounded\x20deductions'},{'metric':'Trust\x20score','expected_value':'+25%','evidence':'compensation_fund\x20covers\x20damage\x20risk'}],'risk_appetite':'conservative','risk_constraints':{'require_arbitration':!![],'require_compensation_fund':!![],'require_wip_evidence':!![],'max_single_transaction':0x2710,'compensation_fund_coverage_ratio':0xa,'other_constraints':['Deposit\x20must\x20be\x20escrowed\x20(no\x20direct\x20transfer)','lock_duration\x20>=\x207d\x20to\x20prevent\x20arbitrary\x20merchant\x20withdrawal']},'applicable_conditions':{'business_scale':'small','min_daily_orders':0x1,'other_conditions':['Requires\x20physical\x20item\x20handover','Has\x20logistics\x20or\x20offline\x20delivery\x20leg']},'similar_industries':['retail','travel'],'novel_capabilities':[]},{'name':'education','display_name':'Education','version':'v1','source':'builtin',...fetchTemplate('education'),'analyze':{'key_questions':['Does\x20tuition\x20release\x20per\x20attended\x20session\x20(Progress\x20node),\x20so\x20undelivered\x20sessions\x20stay\x20refundable\x20if\x20the\x20institution\x20disappears?','Does\x20setting_locked_time\x20span\x20the\x20full\x20term,\x20so\x20the\x20institution\x20cannot\x20tighten\x20refund\x20rules\x20mid-course?']},'capabilities_used':['permission.index_create','permission.role_assign','guard.validate_buy','guard.validate_wip_hash','machine.node_topology','treasury.owner_receive','allocation.distribute','allocation.distribute_milestone','service.publish','progress.advance','arb.vote_weighted','contact.im_create'],'config_overrides':{'allocation':{'strategy':{'recipient':'entity','count':0x1,'mode':'amount','description':'1/N\x20of\x20tuition\x20released\x20per\x20session\x20attendance'},'session_threshold':!![]},'service':{'setting_locked_time':'120d','anti_runaway':!![]}},'expected_benefits':[{'metric':'Refund\x20dispute\x20rate','expected_value':'-50%','evidence':'per-session\x20release\x20distributes\x20tuition\x20by\x20class'},{'metric':'Institution\x20runaway\x20risk','expected_value':'eliminated','evidence':'Funds\x20release\x20per\x20session;\x20undelivered\x20portion\x20is\x20refundable'},{'metric':'Attendance\x20traceability','expected_value':'100%','evidence':'attendance_guard\x20signs\x20each\x20session'}],'risk_appetite':'conservative','risk_constraints':{'require_arbitration':!![],'require_compensation_fund':!![],'require_wip_evidence':![],'other_constraints':['setting_locked_time\x20covers\x20the\x20entire\x20term\x20(>=90d)','Long-cycle\x20projects\x20must\x20monitor\x20>90d\x20progress']},'applicable_conditions':{'business_scale':'medium','min_daily_orders':0x1,'other_conditions':['Long-cycle\x20delivery','Requires\x20per-session\x20acceptance','Regulatory\x20intensity:\x20medium']},'similar_industries':['freelance','subscription'],'novel_capabilities':['allocation.distribute_milestone'],'disabled_builtin_constraints':['require_wip_evidence']},{'name':'travel','display_name':'Travel','version':'v1','source':'builtin',...fetchTemplate('travel'),'analyze':{'key_questions':['Does\x20each\x20itinerary\x20segment\x20have\x20its\x20own\x20guard\x20and\x20WIP\x20acceptance,\x20so\x20one\x20failed\x20leg\x20is\x20refundable\x20without\x20unwinding\x20the\x20whole\x20trip?','Is\x20the\x20multi-tier\x20allocation\x20waterfall\x20(agency\x20→\x20hotel/guide/driver)\x20visible\x20on-chain,\x20so\x20the\x20agency\x20cannot\x20silently\x20re-split\x20funds?']},'capabilities_used':['permission.index_create','permission.role_assign','guard.validate_buy','guard.validate_wip_hash','machine.node_topology','treasury.owner_receive','allocation.distribute','service.publish','progress.advance','arb.vote_weighted','contact.im_create'],'config_overrides':{'allocation':{'strategy':{'recipient':'entity','count':0x3,'mode':'amount','description':'Deposit\x2020%\x20to\x20agency,\x20final\x2080%\x20to\x20agency,\x20then\x20agency-side\x20Allocation\x20splits\x20to\x20hotel/guide/driver\x20per\x20segment'},'multi_tier_waterfall':!![],'guard_chaining':!![]},'service':{'supply_chain_suborders':!![],'segment_guard_required':!![]}},'expected_benefits':[{'metric':'Fund\x20transparency','expected_value':'100%','evidence':'multi-tier\x20allocation\x20splits\x20per\x20segment\x20to\x20hotel/guide/driver'},{'metric':'Itinerary\x20change\x20disputes','expected_value':'-45%','evidence':'segment\x20WIP\x20accepts\x20each\x20leg'},{'metric':'Breach\x20compensation\x20assurance','expected_value':'+60%','evidence':'compensation_fund\x20covers\x20itinerary\x20breach'}],'risk_appetite':'balanced','risk_constraints':{'require_arbitration':!![],'require_compensation_fund':!![],'require_wip_evidence':!![],'other_constraints':['Multi-tier\x20allocation\x20requires\x20guard\x20chaining\x20validation','deposit\x2020%\x20+\x20final\x2080%\x20two-stage\x20payment']},'applicable_conditions':{'business_scale':'medium','min_daily_orders':0x1,'other_conditions':['Multi-segment\x20itinerary\x20combination','Requires\x20hotel/guide/driver\x20multi-party\x20allocation']},'similar_industries':['rental','education'],'novel_capabilities':[]},{'name':'subscription','display_name':'Subscription','version':'v1','source':'builtin',...fetchTemplate('subscription'),'analyze':{'key_questions':['Is\x20every\x20periodic\x20charge\x20gated\x20by\x20an\x20explicit\x20user\x20confirmation,\x20with\x20no\x20auto-renew\x20default?','Can\x20the\x20subscriber\x20cancel\x20anytime\x20effective\x20next\x20period,\x20without\x20a\x20dead-end\x20node\x20in\x20the\x20machine?']},'capabilities_used':['permission.index_create','permission.role_assign','guard.validate_buy','machine.node_topology','treasury.owner_receive','allocation.distribute','service.publish','progress.advance','arb.vote_weighted','reward.claim_guard','contact.im_create'],'config_overrides':{'machine':{'no_auto_renew_trap':!![],'user_confirmed_charge':!![],'cancel_anytime':!![],'next_period_effective':!![]},'service':{'creator_data_subscription':!![],'periodic_billing':!![]}},'expected_benefits':[{'metric':'Renewal\x20rate','expected_value':'+25%','evidence':'loyalty\x20reward\x20+\x20transparent\x20subscription\x20mechanism'},{'metric':'Cancellation\x20disputes','expected_value':'eliminated','evidence':'cancel\x20anytime\x20+\x20no\x20auto-renew\x20trap'},{'metric':'Creator\x20retention','expected_value':'+30%','evidence':'deliver_guard_wip\x20prevents\x20content\x20dropout'}],'risk_appetite':'aggressive','risk_constraints':{'require_arbitration':![],'require_compensation_fund':![],'require_wip_evidence':![],'compensation_fund_coverage_ratio':0x3,'other_constraints':['Forbid\x20dead-end\x20nodes\x20(prevent\x20lock-in)','charge_guard\x20requires\x20user\x20confirmation\x20each\x20period']},'applicable_conditions':{'business_scale':'small','min_daily_orders':0x5,'other_conditions':['Pure-digital\x20delivery','Periodic\x20content\x20or\x20SaaS\x20service']},'similar_industries':['freelance','education'],'novel_capabilities':[],'disabled_builtin_constraints':['require_arbitration','require_compensation_fund','require_wip_evidence']},{'name':'retail','display_name':'Retail','version':'v1','source':'builtin',...fetchTemplate('retail'),'analyze':{'key_questions':['Is\x20the\x20logistics\x20tracking\x20number\x20recorded\x20as\x20WIP\x20before\x20the\x20confirm\x20gate,\x20so\x20receipt\x20disputes\x20have\x20carrier\x20evidence?','Is\x20the\x20refund\x20window\x20at\x20least\x207\x20days\x20with\x20an\x20on-chain\x20refund\x20path\x20that\x20does\x20not\x20rely\x20on\x20merchant\x20goodwill?']},'capabilities_used':['permission.index_create','permission.role_assign','guard.validate_buy','guard.validate_wip_hash','machine.node_topology','treasury.owner_receive','allocation.distribute','service.publish','progress.advance','arb.vote_weighted','reward.claim_guard','contact.im_create'],'config_overrides':{'machine':{'wip_required':!![],'wip_field':'tracking_number','confirm_gate':!![],'refund_requires_approval':!![]},'service':{'logistics_mode':'standard','first_order_discount':!![]}},'expected_benefits':[{'metric':'Return\x20dispute\x20rate','expected_value':'-35%','evidence':'logistics\x20WIP\x20+\x20refund\x20path\x20assurance'},{'metric':'Repurchase\x20rate','expected_value':'+20%','evidence':'spend\x20cashback\x20reward'},{'metric':'Product\x20authenticity\x20traceability','expected_value':'100%','evidence':'WIP\x20verifies\x20product/logistics\x20info'}],'risk_appetite':'conservative','risk_constraints':{'require_arbitration':!![],'require_compensation_fund':!![],'require_wip_evidence':![],'compensation_fund_coverage_ratio':0x5,'other_constraints':['refund_window\x20>=\x207d','confirm_gate:\x20only\x20buyer\x20can\x20confirm\x20receipt']},'applicable_conditions':{'business_scale':'medium','min_daily_orders':0xa,'other_conditions':['Has\x20logistics\x20shipping\x20leg','High-frequency\x20small-ticket\x20transactions']},'similar_industries':['rental','subscription'],'novel_capabilities':[],'disabled_builtin_constraints':['require_wip_evidence']},{'name':'retail_d2c','display_name':'Retail\x20D2C\x20(Direct-to-Consumer)','version':'v1','source':'builtin',...fetchTemplate('retail_d2c'),'analyze':{'key_questions':['Do\x20withdraw_guard\x20and\x20refund_guard\x20fully\x20enclose\x20the\x20Allocation\x20escrow,\x20so\x20neither\x20side\x20can\x20move\x20funds\x20outside\x20the\x20contract\x20path?','With\x20no\x20platform\x20arbitration,\x20what\x20off-chain\x20recourse\x20(if\x20any)\x20backs\x20a\x20delivery\x20failure\x20—\x20and\x20is\x20that\x20acceptable\x20for\x20the\x20ticket\x20size?']},'capabilities_used':['permission.index_create','permission.role_assign','guard.validate_withdraw','guard.validate_refund','machine.node_topology','allocation.distribute','service.publish','progress.advance','contact.im_create'],'config_overrides':{'machine':{'wip_required':![],'confirm_gate':!![],'refund_requires_approval':![]},'service':{'logistics_mode':'merchant_managed','multi_recipient_allocation':!![]}},'expected_benefits':[{'metric':'Merchant\x20revenue\x20share','expected_value':'97%','evidence':'No\x20platform\x20commission\x20—\x20only\x203%\x20processing\x20fee'},{'metric':'Fund\x20safety','expected_value':'contract-grade','evidence':'Allocation\x20escrow\x20+\x20Guard\x20verification\x20replaces\x20platform\x20custody'},{'metric':'Delivery\x20reliability','expected_value':'high','evidence':'withdraw_guard\x20enforces\x20delivery\x20confirmation\x20before\x20payment'}],'risk_appetite':'balanced','risk_constraints':{'require_arbitration':![],'require_compensation_fund':![],'require_wip_evidence':![],'other_constraints':['Allocation\x20escrow\x20required\x20(withdraw_guard\x20+\x20refund_guard)','Service\x20↔\x20Guard\x20circular\x20dependency\x20requires\x203-step\x20creation\x20pattern']},'applicable_conditions':{'business_scale':'small','min_daily_orders':0x1,'other_conditions':['Independent\x20storefront\x20(no\x20marketplace)','Merchant-managed\x20logistics','Allocation\x20escrow\x20model']},'similar_industries':['retail','subscription'],'novel_capabilities':['Allocation\x20escrow\x20as\x20platform-custody\x20alternative','Multi-recipient\x20allocation\x20(merchant\x20+\x20processor)'],'disabled_builtin_constraints':['require_arbitration','require_compensation_fund','require_wip_evidence']},{'name':'general','display_name':'General','version':'v1','source':'builtin',...fetchTemplate('general'),'analyze':{'key_questions':['Which\x20trust\x20mechanisms\x20(arbitration,\x20compensation\x20fund,\x20WIP\x20evidence)\x20are\x20missing\x20here,\x20and\x20what\x20does\x20each\x20absence\x20cost\x20in\x20the\x20worst\x20case?','What\x20is\x20the\x20single\x20point\x20of\x20failure\x20—\x20who\x20can\x20unilaterally\x20take\x20funds\x20or\x20stall\x20the\x20workflow?']},'capabilities_used':['permission.index_create','machine.node_topology','treasury.owner_receive','allocation.distribute','service.publish','progress.advance'],'expected_benefits':[{'metric':'Flexibility','expected_value':'100%','evidence':'User\x20customizes\x20all\x20trust\x20mechanism\x20parameters'},{'metric':'Degraded\x20safety','expected_value':'usable','evidence':'Can\x20fall\x20back\x20to\x20general\x20at\x20any\x20time'}],'risk_appetite':'balanced','risk_constraints':{'require_arbitration':![],'require_compensation_fund':![],'require_wip_evidence':![]},'applicable_conditions':{'business_scale':'small','other_conditions':['Fallback\x20degraded\x20mode','Hybrid\x20scenarios\x20not\x20covered\x20by\x20other\x20industries']},'similar_industries':[],'novel_capabilities':[],'disabled_builtin_constraints':['require_arbitration','require_compensation_fund','require_wip_evidence']}];
1
+ import{getScenarioMode}from'../knowledge/scenario-modes.js';import{getIndustryTraits}from'../knowledge/industry-registry.js';import{getIndustryRiskChecks,getIndustryNeeds}from'../customer/index.js';import{getFlywheelForIndustry}from'../knowledge/acquisition-flywheel.js';const GENERAL_TRAITS={'has_logistics':![],'communication_heavy':![],'pure_digital':![],'long_cycle':![],'deposit_required':![],'multi_tier_allocation':![],'regulatory_intensity':'low','trust_sensitivity':'medium','consumption_frequency':'occasional','avg_ticket_size':'medium'},GENERAL_FLYWHEEL={'industry':'general','trustSellingPoints':[],'keyActions':[],'rewardStrategy':'User-defined','discountStrategy':'User-defined','trustDescription':'User-defined\x20trust\x20mechanism'},GENERAL_MACHINE_SHAPE=[{'name':'paid','role':'Entry:\x20order\x20created\x20and\x20paid'},{'name':'delivering','role':'Service\x20delivery\x20in\x20progress'},{'name':'delivered','role':'Deliverable\x20available\x20for\x20review'},{'name':'completed','role':'Service\x20completed,\x20funds\x20released'},{'name':'cancelled','role':'Pre-delivery\x20cancellation\x20—\x20triggers\x20refund\x20Allocator'}],GENERAL_ALLOCATOR={'recipient':'signer','count':0x1,'mode':'surplus','description':'Default:\x20surplus\x20to\x20service\x20owner\x20(general\x20fallback)'},RETAIL_D2C_MACHINE_SHAPE=[{'name':'ordered','role':'Entry:\x20order\x20created\x20(funds\x20escrowed\x20in\x20Allocation)'},{'name':'shipped','role':'Merchant\x20ships\x20goods'},{'name':'delivered','role':'Goods\x20delivered\x20to\x20buyer'},{'name':'completed','role':'Buyer\x20confirms\x20receipt\x20—\x20withdraw_guard\x20releases\x20funds'},{'name':'cancelled','role':'Pre-ship\x20cancellation\x20—\x20refund_guard\x20refunds\x20buyer'}],RETAIL_D2C_GUARDS=[{'template_id':'withdraw_guard_delivery','host':'service','purpose':'Release\x20funds\x20to\x20merchant\x20+\x20processor\x20on\x20order\x20completion\x20(delivery\x20confirmation)'},{'template_id':'refund_guard_cancellation','host':'service','purpose':'Refund\x20100%\x20to\x20buyer\x20on\x20order\x20cancellation'}],RETAIL_D2C_ALLOCATOR={'recipient':'entity','count':0x2,'mode':'rate','description':'Merchant\x2097%\x20+\x20Processor\x203%\x20(rate-based\x20split,\x20no\x20platform\x20commission)'},RETAIL_D2C_KEY_RISK='No\x20platform\x20arbitration\x20—\x20disputes\x20rely\x20on\x20optional\x20Arbitration\x20or\x20off-chain\x20chargeback',RETAIL_D2C_BUILD_NOTES=['Allocation\x20escrow\x20replaces\x20platform\x20custody\x20—\x20funds\x20locked\x20in\x20contract\x20until\x20Guard\x20releases','withdraw_guard\x20enforces\x20delivery\x20gate\x20—\x20merchant\x20must\x20reach\x20\x27completed\x27\x20state\x20to\x20receive\x20payment','refund_guard\x20ensures\x20100%\x20refund\x20on\x20cancellation\x20—\x20no\x20merchant\x20approval\x20needed','No\x20buy_guard\x20needed\x20—\x20D2C\x20doesn\x27t\x20gate\x20purchases\x20(open\x20storefront)','Arbitration\x20is\x20optional\x20—\x20add\x20when\x20dispute\x20volume\x20justifies\x20the\x20cost','Service\x20↔\x20Guard\x20circular\x20dependency:\x20create\x20Service\x20(unpublished)\x20→\x20create\x20Guards\x20→\x20update\x20Service\x20(publish)'],SUPPORTED_INDUSTRY_SET=new Set(['freelance','rental','education','travel','subscription','retail','retail_d2c']);function fetchTemplate(a){const b=a==='retail_d2c'?'retail':a,c=getIndustryTraits(b)??GENERAL_TRAITS,d=SUPPORTED_INDUSTRY_SET['has'](a),e=a==='retail_d2c'?'retail':a,f=d?getIndustryRiskChecks(e):[],g=d?getIndustryNeeds(e):[],h=getFlywheelForIndustry(b)??GENERAL_FLYWHEEL;let i,j,k,l,m;if(a==='retail_d2c')i=RETAIL_D2C_MACHINE_SHAPE,j=RETAIL_D2C_GUARDS,k=RETAIL_D2C_ALLOCATOR,l=RETAIL_D2C_KEY_RISK,m=RETAIL_D2C_BUILD_NOTES;else{if(a==='general'){const n=getScenarioMode('general');i=GENERAL_MACHINE_SHAPE,j=[],k=GENERAL_ALLOCATOR,l=n?.['key_risk']??'No\x20safety\x20net\x20—\x20user\x20must\x20design\x20all\x20trust\x20mechanisms\x20manually',m=n?.['build_notes'];}else{const o=getScenarioMode(a);if(!o)throw new Error('[modes.ts]\x20No\x20scenario\x20mode\x20found\x20for\x20industry:\x20'+a);i=o['machine_shape'],j=o['guards'],k=o['allocator'],l=o['key_risk'],m=o['build_notes'];}}return{'traits':c,'risk_checks':f,'needs':g,'flywheel':h,'machine_shape':i,'guards':j,'allocator':k,'key_risk':l,'build_notes':m};}export const BUILTIN_MODES=[{'name':'freelance','display_name':'Freelance','version':'v1','source':'builtin',...fetchTemplate('freelance'),'analyze':{'key_questions':['Are\x20WIP\x20hashes\x20bound\x20to\x20each\x20milestone,\x20so\x20delivery\x20evidence\x20cannot\x20be\x20substituted\x20after\x20acceptance?','Does\x20the\x20acceptance\x20gate\x20have\x20a\x20time-bounded\x20escape\x20(keeper-driven\x20auto-accept),\x20or\x20can\x20a\x20silent\x20buyer\x20hold\x20the\x20provider\x27s\x20funds\x20hostage\x20indefinitely?']},'capabilities_used':['permission.index_create','permission.role_assign','guard.validate_buy','guard.validate_wip_hash','machine.node_topology','treasury.owner_receive','allocation.distribute','allocation.distribute_milestone','service.publish','progress.advance','arb.vote_weighted','contact.im_create'],'config_overrides':{'service':{'setting_locked_time':'30d','engagement_type':'milestone'},'machine':{'wip_required':!![],'wip_hash_algorithm':'sha256','acceptance_gate':!![]}},'expected_benefits':[{'metric':'Dispute\x20rate\x20reduction','expected_value':'40%','evidence':'WIP\x20hash\x20+\x20milestone\x20allocation\x20enforces\x20delivery\x20evidence'},{'metric':'Delivery\x20confirmation\x20efficiency','expected_value':'+50%','evidence':'acceptance\x20gate\x20automates\x20acceptance\x20workflow'},{'metric':'Provider\x20payment\x20assurance','expected_value':'100%','evidence':'Funds\x20auto-release\x20to\x20provider\x20after\x20accepted\x20node'}],'risk_appetite':'balanced','risk_constraints':{'require_arbitration':!![],'require_compensation_fund':![],'require_wip_evidence':!![],'other_constraints':['setting_locked_time\x20>=\x207d\x20to\x20lock\x20engagement-period\x20rules','ISSUE-P1-4:\x2048h\x20auto-accept\x20requires\x20off-chain\x20keeper\x20(WoWok\x20Guard\x20does\x20not\x20support\x20time-based\x20triggers).\x20Deploy\x20a\x20keeper\x20service\x20that\x20polls\x20Progress\x20objects\x20in\x20\x27delivered\x27\x20state\x20and\x20calls\x20adminUnhold\x20(permission\x20224)\x20after\x2048h\x20timeout.\x20See\x20keeper\x20template\x20in\x20docs.']},'applicable_conditions':{'business_scale':'small','min_daily_orders':0x1,'other_conditions':['Suitable\x20for\x20mid-to-long-term\x20project\x20delivery','Requires\x20milestone-based\x20phased\x20acceptance']},'similar_industries':['rental','education'],'novel_capabilities':['allocation.distribute_milestone'],'disabled_builtin_constraints':['require_compensation_fund']},{'name':'rental','display_name':'Rental','version':'v1','source':'builtin',...fetchTemplate('rental'),'analyze':{'key_questions':['Is\x20the\x20deposit\x20escrowed\x20on-chain\x20and\x20sized\x20against\x20the\x20item\x27s\x20full\x20replacement\x20value,\x20not\x20just\x20the\x20rental\x20fee?','Are\x20pre-handover\x20and\x20post-return\x20WIP\x20states\x20hash-recorded,\x20so\x20damage\x20attribution\x20is\x20provable\x20rather\x20than\x20asserted?']},'capabilities_used':['permission.index_create','permission.role_assign','guard.validate_buy','guard.validate_wip_hash','machine.node_topology','treasury.owner_receive','allocation.distribute','service.publish','progress.advance','arb.vote_weighted','contact.im_create'],'config_overrides':{'treasury':{'deposit_escrow':!![],'deposit_deductible':!![]},'machine':{'wip_required':!![],'wip_stages':['handover_out','returned'],'inspection_gate':!![]}},'expected_benefits':[{'metric':'Deposit\x20dispute\x20rate','expected_value':'-60%','evidence':'pre-rental\x20WIP\x20mandatorily\x20records\x20item\x27s\x20original\x20state'},{'metric':'Damage\x20liability\x20accuracy','expected_value':'+70%','evidence':'pre/post\x20WIP\x20hash\x20comparison\x20eliminates\x20unfounded\x20deductions'},{'metric':'Trust\x20score','expected_value':'+25%','evidence':'compensation_fund\x20covers\x20damage\x20risk'}],'risk_appetite':'conservative','risk_constraints':{'require_arbitration':!![],'require_compensation_fund':!![],'require_wip_evidence':!![],'max_single_transaction':0x2710,'compensation_fund_coverage_ratio':0xa,'other_constraints':['Deposit\x20must\x20be\x20escrowed\x20(no\x20direct\x20transfer)','lock_duration\x20>=\x207d\x20to\x20prevent\x20arbitrary\x20merchant\x20withdrawal']},'applicable_conditions':{'business_scale':'small','min_daily_orders':0x1,'other_conditions':['Requires\x20physical\x20item\x20handover','Has\x20logistics\x20or\x20offline\x20delivery\x20leg']},'similar_industries':['retail','travel'],'novel_capabilities':[]},{'name':'education','display_name':'Education','version':'v1','source':'builtin',...fetchTemplate('education'),'analyze':{'key_questions':['Does\x20tuition\x20release\x20per\x20attended\x20session\x20(Progress\x20node),\x20so\x20undelivered\x20sessions\x20stay\x20refundable\x20if\x20the\x20institution\x20disappears?','Does\x20setting_locked_time\x20span\x20the\x20full\x20term,\x20so\x20the\x20institution\x20cannot\x20tighten\x20refund\x20rules\x20mid-course?']},'capabilities_used':['permission.index_create','permission.role_assign','guard.validate_buy','guard.validate_wip_hash','machine.node_topology','treasury.owner_receive','allocation.distribute','allocation.distribute_milestone','service.publish','progress.advance','arb.vote_weighted','contact.im_create'],'config_overrides':{'allocation':{'strategy':{'recipient':'entity','count':0x1,'mode':'amount','description':'1/N\x20of\x20tuition\x20released\x20per\x20session\x20attendance'},'session_threshold':!![]},'service':{'setting_locked_time':'120d','anti_runaway':!![]}},'expected_benefits':[{'metric':'Refund\x20dispute\x20rate','expected_value':'-50%','evidence':'per-session\x20release\x20distributes\x20tuition\x20by\x20class'},{'metric':'Institution\x20runaway\x20risk','expected_value':'eliminated','evidence':'Funds\x20release\x20per\x20session;\x20undelivered\x20portion\x20is\x20refundable'},{'metric':'Attendance\x20traceability','expected_value':'100%','evidence':'attendance_guard\x20signs\x20each\x20session'}],'risk_appetite':'conservative','risk_constraints':{'require_arbitration':!![],'require_compensation_fund':!![],'require_wip_evidence':![],'other_constraints':['setting_locked_time\x20covers\x20the\x20entire\x20term\x20(>=90d)','Long-cycle\x20projects\x20must\x20monitor\x20>90d\x20progress']},'applicable_conditions':{'business_scale':'medium','min_daily_orders':0x1,'other_conditions':['Long-cycle\x20delivery','Requires\x20per-session\x20acceptance','Regulatory\x20intensity:\x20medium']},'similar_industries':['freelance','subscription'],'novel_capabilities':['allocation.distribute_milestone'],'disabled_builtin_constraints':['require_wip_evidence']},{'name':'travel','display_name':'Travel','version':'v1','source':'builtin',...fetchTemplate('travel'),'analyze':{'key_questions':['Does\x20each\x20itinerary\x20segment\x20have\x20its\x20own\x20guard\x20and\x20WIP\x20acceptance,\x20so\x20one\x20failed\x20leg\x20is\x20refundable\x20without\x20unwinding\x20the\x20whole\x20trip?','Is\x20the\x20multi-tier\x20allocation\x20waterfall\x20(agency\x20→\x20hotel/guide/driver)\x20visible\x20on-chain,\x20so\x20the\x20agency\x20cannot\x20silently\x20re-split\x20funds?']},'capabilities_used':['permission.index_create','permission.role_assign','guard.validate_buy','guard.validate_wip_hash','machine.node_topology','treasury.owner_receive','allocation.distribute','service.publish','progress.advance','arb.vote_weighted','contact.im_create'],'config_overrides':{'allocation':{'strategy':{'recipient':'entity','count':0x3,'mode':'amount','description':'Deposit\x2020%\x20to\x20agency,\x20final\x2080%\x20to\x20agency,\x20then\x20agency-side\x20Allocation\x20splits\x20to\x20hotel/guide/driver\x20per\x20segment'},'multi_tier_waterfall':!![],'guard_chaining':!![]},'service':{'supply_chain_suborders':!![],'segment_guard_required':!![]}},'expected_benefits':[{'metric':'Fund\x20transparency','expected_value':'100%','evidence':'multi-tier\x20allocation\x20splits\x20per\x20segment\x20to\x20hotel/guide/driver'},{'metric':'Itinerary\x20change\x20disputes','expected_value':'-45%','evidence':'segment\x20WIP\x20accepts\x20each\x20leg'},{'metric':'Breach\x20compensation\x20assurance','expected_value':'+60%','evidence':'compensation_fund\x20covers\x20itinerary\x20breach'}],'risk_appetite':'balanced','risk_constraints':{'require_arbitration':!![],'require_compensation_fund':!![],'require_wip_evidence':!![],'other_constraints':['Multi-tier\x20allocation\x20requires\x20guard\x20chaining\x20validation','deposit\x2020%\x20+\x20final\x2080%\x20two-stage\x20payment']},'applicable_conditions':{'business_scale':'medium','min_daily_orders':0x1,'other_conditions':['Multi-segment\x20itinerary\x20combination','Requires\x20hotel/guide/driver\x20multi-party\x20allocation']},'similar_industries':['rental','education'],'novel_capabilities':[]},{'name':'subscription','display_name':'Subscription','version':'v1','source':'builtin',...fetchTemplate('subscription'),'analyze':{'key_questions':['Is\x20every\x20periodic\x20charge\x20gated\x20by\x20an\x20explicit\x20user\x20confirmation,\x20with\x20no\x20auto-renew\x20default?','Can\x20the\x20subscriber\x20cancel\x20anytime\x20effective\x20next\x20period,\x20without\x20a\x20dead-end\x20node\x20in\x20the\x20machine?']},'capabilities_used':['permission.index_create','permission.role_assign','guard.validate_buy','machine.node_topology','treasury.owner_receive','allocation.distribute','service.publish','progress.advance','arb.vote_weighted','reward.claim_guard','contact.im_create'],'config_overrides':{'machine':{'no_auto_renew_trap':!![],'user_confirmed_charge':!![],'cancel_anytime':!![],'next_period_effective':!![]},'service':{'creator_data_subscription':!![],'periodic_billing':!![]}},'expected_benefits':[{'metric':'Renewal\x20rate','expected_value':'+25%','evidence':'loyalty\x20reward\x20+\x20transparent\x20subscription\x20mechanism'},{'metric':'Cancellation\x20disputes','expected_value':'eliminated','evidence':'cancel\x20anytime\x20+\x20no\x20auto-renew\x20trap'},{'metric':'Creator\x20retention','expected_value':'+30%','evidence':'deliver_guard_wip\x20prevents\x20content\x20dropout'}],'risk_appetite':'aggressive','risk_constraints':{'require_arbitration':![],'require_compensation_fund':![],'require_wip_evidence':![],'compensation_fund_coverage_ratio':0x3,'other_constraints':['Forbid\x20dead-end\x20nodes\x20(prevent\x20lock-in)','charge_guard\x20requires\x20user\x20confirmation\x20each\x20period']},'applicable_conditions':{'business_scale':'small','min_daily_orders':0x5,'other_conditions':['Pure-digital\x20delivery','Periodic\x20content\x20or\x20SaaS\x20service']},'similar_industries':['freelance','education'],'novel_capabilities':[],'disabled_builtin_constraints':['require_arbitration','require_compensation_fund','require_wip_evidence']},{'name':'retail','display_name':'Retail','version':'v1','source':'builtin',...fetchTemplate('retail'),'analyze':{'key_questions':['Is\x20the\x20logistics\x20tracking\x20number\x20recorded\x20as\x20WIP\x20before\x20the\x20confirm\x20gate,\x20so\x20receipt\x20disputes\x20have\x20carrier\x20evidence?','Is\x20the\x20refund\x20window\x20at\x20least\x207\x20days\x20with\x20an\x20on-chain\x20refund\x20path\x20that\x20does\x20not\x20rely\x20on\x20merchant\x20goodwill?']},'capabilities_used':['permission.index_create','permission.role_assign','guard.validate_buy','guard.validate_wip_hash','machine.node_topology','treasury.owner_receive','allocation.distribute','service.publish','progress.advance','arb.vote_weighted','reward.claim_guard','contact.im_create'],'config_overrides':{'machine':{'wip_required':!![],'wip_field':'tracking_number','confirm_gate':!![],'refund_requires_approval':!![]},'service':{'logistics_mode':'standard','first_order_discount':!![]}},'expected_benefits':[{'metric':'Return\x20dispute\x20rate','expected_value':'-35%','evidence':'logistics\x20WIP\x20+\x20refund\x20path\x20assurance'},{'metric':'Repurchase\x20rate','expected_value':'+20%','evidence':'spend\x20cashback\x20reward'},{'metric':'Product\x20authenticity\x20traceability','expected_value':'100%','evidence':'WIP\x20verifies\x20product/logistics\x20info'}],'risk_appetite':'conservative','risk_constraints':{'require_arbitration':!![],'require_compensation_fund':!![],'require_wip_evidence':![],'compensation_fund_coverage_ratio':0x5,'other_constraints':['refund_window\x20>=\x207d','confirm_gate:\x20only\x20buyer\x20can\x20confirm\x20receipt']},'applicable_conditions':{'business_scale':'medium','min_daily_orders':0xa,'other_conditions':['Has\x20logistics\x20shipping\x20leg','High-frequency\x20small-ticket\x20transactions']},'similar_industries':['rental','subscription'],'novel_capabilities':[],'disabled_builtin_constraints':['require_wip_evidence']},{'name':'retail_d2c','display_name':'Retail\x20D2C\x20(Direct-to-Consumer)','version':'v1','source':'builtin',...fetchTemplate('retail_d2c'),'analyze':{'key_questions':['Do\x20withdraw_guard\x20and\x20refund_guard\x20fully\x20enclose\x20the\x20Allocation\x20escrow,\x20so\x20neither\x20side\x20can\x20move\x20funds\x20outside\x20the\x20contract\x20path?','With\x20no\x20platform\x20arbitration,\x20what\x20off-chain\x20recourse\x20(if\x20any)\x20backs\x20a\x20delivery\x20failure\x20—\x20and\x20is\x20that\x20acceptable\x20for\x20the\x20ticket\x20size?']},'capabilities_used':['permission.index_create','permission.role_assign','guard.validate_withdraw','guard.validate_refund','machine.node_topology','allocation.distribute','service.publish','progress.advance','contact.im_create'],'config_overrides':{'machine':{'wip_required':![],'confirm_gate':!![],'refund_requires_approval':![]},'service':{'logistics_mode':'merchant_managed','multi_recipient_allocation':!![]}},'expected_benefits':[{'metric':'Merchant\x20revenue\x20share','expected_value':'97%','evidence':'No\x20platform\x20commission\x20—\x20only\x203%\x20processing\x20fee'},{'metric':'Fund\x20safety','expected_value':'contract-grade','evidence':'Allocation\x20escrow\x20+\x20Guard\x20verification\x20replaces\x20platform\x20custody'},{'metric':'Delivery\x20reliability','expected_value':'high','evidence':'withdraw_guard\x20enforces\x20delivery\x20confirmation\x20before\x20payment'}],'risk_appetite':'balanced','risk_constraints':{'require_arbitration':![],'require_compensation_fund':![],'require_wip_evidence':![],'other_constraints':['Allocation\x20escrow\x20required\x20(withdraw_guard\x20+\x20refund_guard)','Service\x20↔\x20Guard\x20circular\x20dependency\x20requires\x203-step\x20creation\x20pattern']},'applicable_conditions':{'business_scale':'small','min_daily_orders':0x1,'other_conditions':['Independent\x20storefront\x20(no\x20marketplace)','Merchant-managed\x20logistics','Allocation\x20escrow\x20model']},'similar_industries':['retail','subscription'],'novel_capabilities':['Allocation\x20escrow\x20as\x20platform-custody\x20alternative','Multi-recipient\x20allocation\x20(merchant\x20+\x20processor)'],'disabled_builtin_constraints':['require_arbitration','require_compensation_fund','require_wip_evidence']},{'name':'general','display_name':'General','version':'v1','source':'builtin',...fetchTemplate('general'),'analyze':{'key_questions':['Which\x20trust\x20mechanisms\x20(arbitration,\x20compensation\x20fund,\x20WIP\x20evidence)\x20are\x20missing\x20here,\x20and\x20what\x20does\x20each\x20absence\x20cost\x20in\x20the\x20worst\x20case?','What\x20is\x20the\x20single\x20point\x20of\x20failure\x20—\x20who\x20can\x20unilaterally\x20take\x20funds\x20or\x20stall\x20the\x20workflow?']},'capabilities_used':['permission.index_create','machine.node_topology','treasury.owner_receive','allocation.distribute','service.publish','progress.advance'],'expected_benefits':[{'metric':'Flexibility','expected_value':'100%','evidence':'User\x20customizes\x20all\x20trust\x20mechanism\x20parameters'},{'metric':'Degraded\x20safety','expected_value':'usable','evidence':'Can\x20fall\x20back\x20to\x20general\x20at\x20any\x20time'}],'risk_appetite':'balanced','risk_constraints':{'require_arbitration':![],'require_compensation_fund':![],'require_wip_evidence':![]},'applicable_conditions':{'business_scale':'small','other_conditions':['Fallback\x20degraded\x20mode','Hybrid\x20scenarios\x20not\x20covered\x20by\x20other\x20industries']},'similar_industries':[],'novel_capabilities':[],'disabled_builtin_constraints':['require_arbitration','require_compensation_fund','require_wip_evidence']}];
@@ -1,4 +1,14 @@
1
- import type { Analyzer, Confidence, Finding, FindingKind, FindingSeverity, NodeAnalyzer, Retention, TopoNode, ViewerRole, Viewport } from "./types.js";
1
+ import type { Analyzer, Confidence, Finding, FindingKind, FindingSeverity, NodeAnalyzer, Retention, TopoNode, ViewerRole, Viewport, FindingExposure } from "./types.js";
2
+ import type { NameResolver } from "./names.js";
3
+ export declare function findingWhere(f: {
4
+ id: string;
5
+ title?: string;
6
+ }): string;
7
+ export declare function findingWhereResolved(f: {
8
+ id: string;
9
+ title?: string;
10
+ }, names: NameResolver): string;
11
+ export declare const RETENTION_RANK: Record<Retention, number>;
2
12
  export declare function pathConfidence(v: Viewport, pathEdges: Array<{
3
13
  schema: string;
4
14
  from: string;
@@ -25,6 +35,7 @@ export declare function runAnalyzers(v: Viewport, opts?: {
25
35
  only?: string[];
26
36
  kinds?: FindingKind[];
27
37
  }): Finding[];
38
+ export declare function withFindingObjects(findings: Finding[]): Finding[];
28
39
  export interface NodeRuleOutcome {
29
40
  severity?: FindingSeverity;
30
41
  title: string;
@@ -32,6 +43,10 @@ export interface NodeRuleOutcome {
32
43
  suggestion: string;
33
44
  roles?: ViewerRole[];
34
45
  confidence?: Confidence;
46
+ ruleId?: string;
47
+ evidence?: string;
48
+ exposure?: FindingExposure;
49
+ nativeRisk?: unknown;
35
50
  }
36
51
  export interface NodeRuleBinding {
37
52
  id: string;