@wowok/agent-mcp 3.0.1 → 3.0.3

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 (283) hide show
  1. package/LICENSE +0 -3
  2. package/dist/harness/recover.js +1 -1
  3. package/dist/index.d.ts +2 -2
  4. package/dist/index.js +1 -1
  5. package/dist/intent/types.d.ts +1 -1
  6. package/dist/intent/types.js +1 -1
  7. package/dist/knowledge/account-marks.js +1 -1
  8. package/dist/knowledge/arbitration-risk.js +1 -1
  9. package/dist/knowledge/event-semantics.js +1 -1
  10. package/dist/knowledge/event-semantics.spec.js +1 -1
  11. package/dist/knowledge/flywheel-loop.d.ts +4 -52
  12. package/dist/knowledge/flywheel-loop.js +1 -1
  13. package/dist/knowledge/guard-lint.js +1 -1
  14. package/dist/knowledge/index.d.ts +2 -225
  15. package/dist/knowledge/index.js +1 -1
  16. package/dist/knowledge/industry-registry.js +1 -1
  17. package/dist/knowledge/machine-risk.js +1 -1
  18. package/dist/knowledge/machine-translation.js +1 -1
  19. package/dist/knowledge/migration-preflight.d.ts +27 -0
  20. package/dist/knowledge/migration-preflight.js +1 -0
  21. package/dist/knowledge/onchain-constants.js +1 -1
  22. package/dist/knowledge/order-ledger.d.ts +2 -2
  23. package/dist/knowledge/order-ledger.js +1 -1
  24. package/dist/knowledge/order-puzzle.d.ts +4 -4
  25. package/dist/knowledge/order-puzzle.js +1 -1
  26. package/dist/knowledge/order-risk.d.ts +1 -0
  27. package/dist/knowledge/order-risk.js +1 -1
  28. package/dist/knowledge/order-templates.d.ts +1 -1
  29. package/dist/knowledge/order-templates.js +1 -1
  30. package/dist/knowledge/safety-rules.js +1 -1
  31. package/dist/knowledge/service-ledger.js +1 -1
  32. package/dist/knowledge/service-risk.js +1 -1
  33. package/dist/knowledge/template-registry.js +1 -1
  34. package/dist/knowledge/tools-reference.js +1 -1
  35. package/dist/knowledge/workspace-lists.js +1 -1
  36. package/dist/monitor/MonitorLoop.js +1 -1
  37. package/dist/monitor/normalize.js +1 -1
  38. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  39. package/dist/playbooks/service-build/context-assembly.d.ts +3 -1
  40. package/dist/playbooks/service-build/context-assembly.js +1 -1
  41. package/dist/playbooks/service-build/machine-nodes.d.ts +2 -0
  42. package/dist/playbooks/service-build/machine-nodes.js +1 -1
  43. package/dist/playbooks/service-build/machine-panorama.d.ts +7 -0
  44. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  45. package/dist/playbooks/service-build/mode-actions.d.ts +19 -0
  46. package/dist/playbooks/service-build/mode-actions.js +1 -1
  47. package/dist/review/machine.js +1 -1
  48. package/dist/safety/confirm-gate.js +1 -1
  49. package/dist/schema/call/base.d.ts +12 -3
  50. package/dist/schema/call/base.js +1 -1
  51. package/dist/schema/call/bridge.d.ts +4 -0
  52. package/dist/schema/call/bridge.js +1 -1
  53. package/dist/schema/call/error-codes.d.ts +2 -0
  54. package/dist/schema/call/error-codes.js +1 -0
  55. package/dist/schema/call/guard.d.ts +4 -4
  56. package/dist/schema/call/semantic.d.ts +9 -1
  57. package/dist/schema/call/semantic.js +1 -1
  58. package/dist/schema/common/index.js +1 -1
  59. package/dist/schema/goal/index.d.ts +3 -3
  60. package/dist/schema/goal/planning.d.ts +2 -2
  61. package/dist/schema/industry-pack/index.d.ts +46 -4
  62. package/dist/schema/industry-pack/modes.d.ts +46 -4
  63. package/dist/schema/industry-pack/modes.js +1 -1
  64. package/dist/schema/intent-radar/index.d.ts +3 -0
  65. package/dist/schema/intent-radar/index.js +1 -1
  66. package/dist/schema/local/index.d.ts +558 -0
  67. package/dist/schema/local/index.js +1 -1
  68. package/dist/schema/messenger/index.d.ts +25 -25
  69. package/dist/schema/operations.d.ts +29 -1
  70. package/dist/schema/persona/index.d.ts +2 -2
  71. package/dist/schema/query/bi.d.ts +89 -4
  72. package/dist/schema/query/bi.js +1 -1
  73. package/dist/schema/query/index.d.ts +48 -48
  74. package/dist/schema/query/index.js +1 -1
  75. package/dist/schema/schema-query/index.d.ts +1 -1
  76. package/dist/schema/schema-version.js +1 -1
  77. package/dist/schema/trust/index.d.ts +3 -3
  78. package/dist/schema/workspace/index.d.ts +1 -1
  79. package/dist/schema-query-impl/index.js +1 -1
  80. package/dist/schemas/account_operation.output.json +4 -0
  81. package/dist/schemas/bridge_operation.output.json +4 -0
  82. package/dist/schemas/index.json +7 -1
  83. package/dist/schemas/industry_pack_operation.output.json +162 -6
  84. package/dist/schemas/intent_radar.output.json +2 -0
  85. package/dist/schemas/intent_radar.schema.json +1 -0
  86. package/dist/schemas/local_history_operation.output.json +1458 -0
  87. package/dist/schemas/local_history_operation.schema.json +105 -0
  88. package/dist/schemas/local_info_operation.output.json +4 -0
  89. package/dist/schemas/local_mark_operation.output.json +4 -0
  90. package/dist/schemas/onchain_events.output.json +55 -11
  91. package/dist/schemas/onchain_events.schema.json +4 -0
  92. package/dist/schemas/onchain_operations.output.json +4 -1
  93. package/dist/schemas/onchain_operations.schema.json +30 -10
  94. package/dist/schemas/onchain_operations_guard.schema.json +30 -10
  95. package/dist/schemas/onchain_table_data.output.json +41 -0
  96. package/dist/schemas/query_toolkit.output.json +200 -16
  97. package/dist/schemas/query_toolkit.schema.json +41 -0
  98. package/dist/tools/handlers/config.js +1 -1
  99. package/dist/tools/handlers/intent-radar.js +1 -1
  100. package/dist/tools/handlers/local.d.ts +1 -0
  101. package/dist/tools/handlers/local.js +1 -1
  102. package/dist/tools/handlers/onchain.js +1 -1
  103. package/dist/tools/handlers/query.js +1 -1
  104. package/dist/tools/index.js +1 -1
  105. package/dist/tools/registry/local.js +1 -1
  106. package/dist/tools/registry/query.js +1 -1
  107. package/dist/tools/shared.js +1 -1
  108. package/dist/tools/wrap.js +1 -1
  109. package/package.json +2 -2
  110. package/dist/knowledge/allocation-confirm.d.ts +0 -115
  111. package/dist/knowledge/allocation-confirm.js +0 -1
  112. package/dist/knowledge/allocation-context.d.ts +0 -58
  113. package/dist/knowledge/allocation-context.js +0 -1
  114. package/dist/knowledge/allocation-translation.d.ts +0 -72
  115. package/dist/knowledge/allocation-translation.js +0 -1
  116. package/dist/knowledge/arb-confirm.d.ts +0 -28
  117. package/dist/knowledge/arb-confirm.js +0 -1
  118. package/dist/knowledge/arb-translation.d.ts +0 -48
  119. package/dist/knowledge/arb-translation.js +0 -1
  120. package/dist/knowledge/arbitration-confirm.d.ts +0 -135
  121. package/dist/knowledge/arbitration-confirm.js +0 -1
  122. package/dist/knowledge/arbitration-context.d.ts +0 -81
  123. package/dist/knowledge/arbitration-context.js +0 -1
  124. package/dist/knowledge/arbitration-translation.d.ts +0 -91
  125. package/dist/knowledge/arbitration-translation.js +0 -1
  126. package/dist/knowledge/bridge-confirm.d.ts +0 -26
  127. package/dist/knowledge/bridge-confirm.js +0 -1
  128. package/dist/knowledge/bridge-translation.d.ts +0 -37
  129. package/dist/knowledge/bridge-translation.js +0 -1
  130. package/dist/knowledge/contact-confirm.d.ts +0 -27
  131. package/dist/knowledge/contact-confirm.js +0 -1
  132. package/dist/knowledge/contact-translation.d.ts +0 -39
  133. package/dist/knowledge/contact-translation.js +0 -1
  134. package/dist/knowledge/demand-confirm.d.ts +0 -32
  135. package/dist/knowledge/demand-confirm.js +0 -1
  136. package/dist/knowledge/demand-context.d.ts +0 -17
  137. package/dist/knowledge/demand-context.js +0 -1
  138. package/dist/knowledge/demand-ledger.d.ts +0 -26
  139. package/dist/knowledge/demand-ledger.js +0 -1
  140. package/dist/knowledge/demand-puzzle.d.ts +0 -29
  141. package/dist/knowledge/demand-puzzle.js +0 -1
  142. package/dist/knowledge/demand-templates.d.ts +0 -12
  143. package/dist/knowledge/demand-templates.js +0 -1
  144. package/dist/knowledge/demand-translation.d.ts +0 -55
  145. package/dist/knowledge/demand-translation.js +0 -1
  146. package/dist/knowledge/examples-scanner-cli.d.ts +0 -1
  147. package/dist/knowledge/examples-scanner-cli.js +0 -1
  148. package/dist/knowledge/examples-scanner.d.ts +0 -121
  149. package/dist/knowledge/examples-scanner.js +0 -1
  150. package/dist/knowledge/glossary.d.ts +0 -18
  151. package/dist/knowledge/glossary.js +0 -1
  152. package/dist/knowledge/guard-bytecode-spec.d.ts +0 -82
  153. package/dist/knowledge/guard-bytecode-spec.js +0 -1
  154. package/dist/knowledge/guard-confirm.d.ts +0 -86
  155. package/dist/knowledge/guard-confirm.js +0 -1
  156. package/dist/knowledge/immutability.d.ts +0 -11
  157. package/dist/knowledge/immutability.js +0 -1
  158. package/dist/knowledge/machine-confirm.d.ts +0 -102
  159. package/dist/knowledge/machine-confirm.js +0 -1
  160. package/dist/knowledge/machine-context.d.ts +0 -160
  161. package/dist/knowledge/machine-context.js +0 -1
  162. package/dist/knowledge/machine-render.d.ts +0 -41
  163. package/dist/knowledge/machine-render.js +0 -1
  164. package/dist/knowledge/mcp-schema-audit-cli.d.ts +0 -1
  165. package/dist/knowledge/mcp-schema-audit-cli.js +0 -1
  166. package/dist/knowledge/mcp-schema-audit.d.ts +0 -91
  167. package/dist/knowledge/mcp-schema-audit.js +0 -1
  168. package/dist/knowledge/messenger-guard-guidance.d.ts +0 -17
  169. package/dist/knowledge/messenger-guard-guidance.js +0 -1
  170. package/dist/knowledge/order-confirm.d.ts +0 -115
  171. package/dist/knowledge/order-confirm.js +0 -1
  172. package/dist/knowledge/order-context.d.ts +0 -66
  173. package/dist/knowledge/order-context.js +0 -1
  174. package/dist/knowledge/order-translation.d.ts +0 -78
  175. package/dist/knowledge/order-translation.js +0 -1
  176. package/dist/knowledge/overrides-loader.d.ts +0 -13
  177. package/dist/knowledge/overrides-loader.js +0 -1
  178. package/dist/knowledge/passport-confirm.d.ts +0 -130
  179. package/dist/knowledge/passport-confirm.js +0 -1
  180. package/dist/knowledge/passport-context.d.ts +0 -59
  181. package/dist/knowledge/passport-context.js +0 -1
  182. package/dist/knowledge/passport-puzzle.d.ts +0 -108
  183. package/dist/knowledge/passport-puzzle.js +0 -1
  184. package/dist/knowledge/passport-risk.d.ts +0 -70
  185. package/dist/knowledge/passport-risk.js +0 -1
  186. package/dist/knowledge/passport-translation.d.ts +0 -68
  187. package/dist/knowledge/passport-translation.js +0 -1
  188. package/dist/knowledge/payment-confirm.d.ts +0 -26
  189. package/dist/knowledge/payment-confirm.js +0 -1
  190. package/dist/knowledge/payment-translation.d.ts +0 -37
  191. package/dist/knowledge/payment-translation.js +0 -1
  192. package/dist/knowledge/permission-confirm.d.ts +0 -110
  193. package/dist/knowledge/permission-confirm.js +0 -1
  194. package/dist/knowledge/permission-context.d.ts +0 -69
  195. package/dist/knowledge/permission-context.js +0 -1
  196. package/dist/knowledge/permission-translation.d.ts +0 -57
  197. package/dist/knowledge/permission-translation.js +0 -1
  198. package/dist/knowledge/personal-confirm.d.ts +0 -29
  199. package/dist/knowledge/personal-confirm.js +0 -1
  200. package/dist/knowledge/personal-translation.d.ts +0 -37
  201. package/dist/knowledge/personal-translation.js +0 -1
  202. package/dist/knowledge/process-model.d.ts +0 -14
  203. package/dist/knowledge/process-model.js +0 -1
  204. package/dist/knowledge/progress-confirm.d.ts +0 -108
  205. package/dist/knowledge/progress-confirm.js +0 -1
  206. package/dist/knowledge/progress-context.d.ts +0 -123
  207. package/dist/knowledge/progress-context.js +0 -1
  208. package/dist/knowledge/progress-translation.d.ts +0 -52
  209. package/dist/knowledge/progress-translation.js +0 -1
  210. package/dist/knowledge/proof-confirm.d.ts +0 -31
  211. package/dist/knowledge/proof-confirm.js +0 -1
  212. package/dist/knowledge/proof-context.d.ts +0 -17
  213. package/dist/knowledge/proof-context.js +0 -1
  214. package/dist/knowledge/proof-ledger.d.ts +0 -34
  215. package/dist/knowledge/proof-ledger.js +0 -1
  216. package/dist/knowledge/proof-puzzle.d.ts +0 -35
  217. package/dist/knowledge/proof-puzzle.js +0 -1
  218. package/dist/knowledge/proof-templates.d.ts +0 -22
  219. package/dist/knowledge/proof-templates.js +0 -1
  220. package/dist/knowledge/proof-translation.d.ts +0 -52
  221. package/dist/knowledge/proof-translation.js +0 -1
  222. package/dist/knowledge/registrar-confirm.d.ts +0 -26
  223. package/dist/knowledge/registrar-confirm.js +0 -1
  224. package/dist/knowledge/registrar-translation.d.ts +0 -37
  225. package/dist/knowledge/registrar-translation.js +0 -1
  226. package/dist/knowledge/repository-confirm.d.ts +0 -40
  227. package/dist/knowledge/repository-confirm.js +0 -1
  228. package/dist/knowledge/repository-context.d.ts +0 -12
  229. package/dist/knowledge/repository-context.js +0 -1
  230. package/dist/knowledge/repository-ledger.d.ts +0 -25
  231. package/dist/knowledge/repository-ledger.js +0 -1
  232. package/dist/knowledge/repository-puzzle.d.ts +0 -30
  233. package/dist/knowledge/repository-puzzle.js +0 -1
  234. package/dist/knowledge/repository-templates.d.ts +0 -14
  235. package/dist/knowledge/repository-templates.js +0 -1
  236. package/dist/knowledge/repository-translation.d.ts +0 -58
  237. package/dist/knowledge/repository-translation.js +0 -1
  238. package/dist/knowledge/resource-confirm.d.ts +0 -25
  239. package/dist/knowledge/resource-confirm.js +0 -1
  240. package/dist/knowledge/resource-translation.d.ts +0 -37
  241. package/dist/knowledge/resource-translation.js +0 -1
  242. package/dist/knowledge/reward-confirm.d.ts +0 -116
  243. package/dist/knowledge/reward-confirm.js +0 -1
  244. package/dist/knowledge/reward-context.d.ts +0 -127
  245. package/dist/knowledge/reward-context.js +0 -1
  246. package/dist/knowledge/reward-translation.d.ts +0 -58
  247. package/dist/knowledge/reward-translation.js +0 -1
  248. package/dist/knowledge/service-confirm.d.ts +0 -161
  249. package/dist/knowledge/service-confirm.js +0 -1
  250. package/dist/knowledge/service-context.d.ts +0 -66
  251. package/dist/knowledge/service-context.js +0 -1
  252. package/dist/knowledge/service-translation.d.ts +0 -103
  253. package/dist/knowledge/service-translation.js +0 -1
  254. package/dist/knowledge/treasury-confirm.d.ts +0 -133
  255. package/dist/knowledge/treasury-confirm.js +0 -1
  256. package/dist/knowledge/treasury-context.d.ts +0 -64
  257. package/dist/knowledge/treasury-context.js +0 -1
  258. package/dist/knowledge/treasury-translation.d.ts +0 -78
  259. package/dist/knowledge/treasury-translation.js +0 -1
  260. package/dist/knowledge/util-confirm.d.ts +0 -24
  261. package/dist/knowledge/util-confirm.js +0 -1
  262. package/dist/knowledge/util-translation.d.ts +0 -39
  263. package/dist/knowledge/util-translation.js +0 -1
  264. package/dist/loop-engineering/aggregate.d.ts +0 -50
  265. package/dist/loop-engineering/aggregate.js +0 -1
  266. package/dist/loop-engineering/context-collect.d.ts +0 -7
  267. package/dist/loop-engineering/context-collect.js +0 -1
  268. package/dist/loop-engineering/diagnose.d.ts +0 -22
  269. package/dist/loop-engineering/diagnose.js +0 -1
  270. package/dist/loop-engineering/improve.d.ts +0 -55
  271. package/dist/loop-engineering/improve.js +0 -1
  272. package/dist/loop-engineering/index.d.ts +0 -4
  273. package/dist/loop-engineering/index.js +0 -1
  274. package/dist/loop-engineering/pipeline.d.ts +0 -17
  275. package/dist/loop-engineering/pipeline.js +0 -1
  276. package/dist/schema/utils/object-type-utils.d.ts +0 -12
  277. package/dist/schema/utils/object-type-utils.js +0 -1
  278. package/dist/telemetry/index.d.ts +0 -19
  279. package/dist/telemetry/index.js +0 -1
  280. package/dist/telemetry/redact.d.ts +0 -2
  281. package/dist/telemetry/redact.js +0 -1
  282. package/dist/telemetry/storage.d.ts +0 -8
  283. package/dist/telemetry/storage.js +0 -1
@@ -1 +1 @@
1
- import{aggregateIndustryMetrics,evaluateIndustryHealth,suggestIndustryUpdate}from'./industry-evolution.js';import{getIndustryProfile,resolveIndustryName}from'./industry-registry.js';import{evaluateIndustryHealthByIntent,suggestIndustryUpdateByIntent,getRoleAdvice,filterSuggestionsByRole,getIntentProfile}from'./intent-metrics.js';import{existsSync,mkdirSync,readFileSync,writeFileSync}from'fs';import{dirname,join}from'path';import{getWowMcpDir}from'@wowok/wowok';export const FLYWHEEL_LOOP_VERSION=0x2;const MIN_SIGNALS_FOR_EVOLUTION=0xa,DEFAULT_SCHEDULE={'mode':'semi_realtime','signal_threshold':0x14,'time_interval_ms':0x5*0x3c*0x3e8,'auto_apply':![]},industrySchedules=new Map(),industryLastUpdate=new Map(),industryIntent=new Map(),signalBuffer=new Map(),decisionContexts=new Map(),latestMetrics=new Map(),latestHealth=new Map(),pendingSuggestions=new Map();export function recordIndustrySignal(a,b,c){if(!a)return;const d=resolveIndustryName(a)??a,e={'industry':d,'operation_type':b['type'],'success':c['success'],'error_code':c['error_code'],'timestamp':Date['now']()},f=sanitizeSignal(e),g=signalBuffer['get'](d)??[];g['push'](f),signalBuffer['set'](d,g),tryMaybeAutoTrigger(d,g['length']);}function tryMaybeAutoTrigger(a,b){const c=industrySchedules['get'](a)??DEFAULT_SCHEDULE;if(c['mode']==='manual')return;const d=Date['now'](),e=industryLastUpdate['get'](a)??0x0;if(c['mode']==='realtime'){b>=MIN_SIGNALS_FOR_EVOLUTION&&b%MIN_SIGNALS_FOR_EVOLUTION===0x0&&doAutoUpdate(a,c);return;}if(c['mode']==='semi_realtime'){const f=c['signal_threshold']??0x14,g=c['time_interval_ms']??0x5*0x3c*0x3e8,h=b>=f&&b%f===0x0,i=e>0x0&&d-e>=g;(h||i)&&doAutoUpdate(a,c);}}function doAutoUpdate(a,b){try{const c=updateIndustryCognition(a);industryLastUpdate['set'](a,Date['now']());if(b['auto_apply']&&c['suggestions_generated']>0x0){const d=pendingSuggestions['get'](a)??[],{applyIndustryUpdate:e}=require('./industry-evolution.js');for(const f of d){try{e(a,f);}catch{}}}}catch{}}export function setEvolutionSchedule(a,b){if(!a)return;const c=resolveIndustryName(a)??a;industrySchedules['set'](c,b);}export function getEvolutionSchedule(a){const b=resolveIndustryName(a)??a;return industrySchedules['get'](b)??DEFAULT_SCHEDULE;}export function setIndustryIntent(a,b){if(!a)return;const c=resolveIndustryName(a)??a;industryIntent['set'](c,b);}export function getIndustryIntent(a){const b=resolveIndustryName(a)??a;return industryIntent['get'](b)??'default';}export function getIndustrySignalCount(a){const b=resolveIndustryName(a)??a;return signalBuffer['get'](b)?.['length']??0x0;}export function getIndustrySignals(a){const b=resolveIndustryName(a)??a;return[...signalBuffer['get'](b)??[]];}export function listIndustriesWithSignals(){return Array['from'](signalBuffer['keys']());}export function getPendingSuggestions(a){const b=resolveIndustryName(a)??a;return[...pendingSuggestions['get'](b)??[]];}export function recordDecisionContext(a,b){if(!a['id']||!a['node_id'])return;decisionContexts['set'](a['id'],a);if(b)try{b['attachDecisionContext'](a['node_id'],{'id':a['id'],'decided_at':a['decided_at'],'decider':a['decider'],'industry':a['industry'],'intent':a['intent'],'alternatives':a['alternatives'],'rationale':a['rationale'],'outcome':a['outcome']});}catch{}}export function queryDecisionsByIndustry(a){const b=resolveIndustryName(a)??a;return Array['from'](decisionContexts['values']())['filter'](c=>c['industry']===b)['sort']((c,d)=>d['decided_at']-c['decided_at']);}export function queryDecisionsByNode(a){return Array['from'](decisionContexts['values']())['filter'](b=>b['node_id']===a)['sort']((c,d)=>d['decided_at']-c['decided_at']);}export function backfillDecisionOutcome(a,b){const c=decisionContexts['get'](a);if(!c)return![];return c['outcome']=b,!![];}export function updateIndustryCognition(a,b){const c=resolveIndustryName(a)??a,d=signalBuffer['get'](c)??[],e={'industry':c,'metrics_updated':![],'health_recomputed':![],'suggestions_generated':0x0,'evolution_ready':d['length']>=MIN_SIGNALS_FOR_EVOLUTION};if(d['length']<MIN_SIGNALS_FOR_EVOLUTION&&(!b||b['length']===0x0))return e;let f;if(b&&b['length']>0x0)f=aggregateIndustryMetrics(c,b);else{const j=d['map'](k=>({'industry':c,'completed':k['success'],'has_dispute':!!k['error_code']&&k['error_code']['includes']('dispute'),'has_refund':!!k['error_code']&&k['error_code']['includes']('refund'),'ticket_size':0x0n,'timestamp':k['timestamp']}));f=aggregateIndustryMetrics(c,j);}latestMetrics['set'](c,f),e['metrics_updated']=!![];const g=industryIntent['get'](c)??'default';let h,i;return g!=='default'?(h=evaluateIndustryHealthByIntent(c,f,g),i=suggestIndustryUpdateByIntent(c,f,g)):(h=evaluateIndustryHealth(c,f),i=suggestIndustryUpdate(c,f)),latestHealth['set'](c,h),e['health_recomputed']=!![],pendingSuggestions['set'](c,i),e['suggestions_generated']=i['length'],e;}export function injectEvolutionContext(a,b,c){if(!b)return{'confidence':0x0};const d=resolveIndustryName(b)??b,e=getIndustryProfile(d);if(!e)return{'confidence':0x0,'industry_signal':'Industry\x20'+d+'\x20is\x20not\x20yet\x20registered;\x20recommend\x20synthesizing\x20a\x20profile\x20via\x20the\x20generalizer\x20engine'};const f=latestHealth['get'](d),g=latestMetrics['get'](d),h=pendingSuggestions['get'](d)??[],i=signalBuffer['get'](d)?.['length']??0x0,j=industryIntent['get'](d)??'default',k=[];let l,m=0.5;f&&(k['push']('Industry\x20health\x20'+f['health_score']+'/100\x20('+f['level']+')'),m=Math['max'](m,0.7),f['weaknesses']['length']>0x0&&(l='Weakness:\x20'+f['weaknesses'][0x0]),f['recommendations']['length']>0x0&&(l=l?l+';\x20recommendation:\x20'+f['recommendations'][0x0]:'Recommendation:\x20'+f['recommendations'][0x0]));g&&g['anomalies']['length']>0x0&&(k['push']('Anomaly:\x20'+g['anomalies'][0x0]),m=Math['max'](m,0.8));i>0x0&&k['push']('Accumulated\x20'+i+'\x20industry\x20signals');j!=='default'&&k['push']('Current\x20intent:\x20'+j);if(!l&&h['length']>0x0){const p=h['find'](q=>q['priority']==='high')??h[0x0];l=p['suggestion_type']+':\x20'+p['evidence'],m=Math['max'](m,p['confidence']);}let n,o=h;if(c){const q=getIntentProfile(j);q&&(n=getRoleAdvice(j,c));const r=q?.['suggestion_triggers']??[];o=filterSuggestionsByRole(h,c,r);if(o['length']>0x0){const s=o['find'](t=>t['priority']==='high')??o[0x0];l=s['suggestion_type']+'\x20('+c+'):\x20'+s['evidence'];}}return{'industry_signal':k['length']>0x0?k['join'](';\x20'):undefined,'evolution_advice':l,'confidence':m,'health_score':f?.['health_score'],'pending_suggestions':o['length'],'intent':j!=='default'?j:undefined,'role_advice':n&&n['length']>0x0?n:undefined,'role':c};}export function getIndustryEvolutionStatus(a){const b=resolveIndustryName(a)??a,c=getIndustryProfile(b);return{'industry':b,'version':c?.['version']??'v0','last_updated':c?.['evolution']?.['last_updated']??0x0,'signal_count':signalBuffer['get'](b)?.['length']??0x0,'health':latestHealth['get'](b),'pending_suggestions':pendingSuggestions['get'](b)?.['length']??0x0,'evolution_ready':(signalBuffer['get'](b)?.['length']??0x0)>=MIN_SIGNALS_FOR_EVOLUTION};}export const EVOLUTION_STATE_VERSION=0x1;function evolutionStateFilePath(){return join(getWowMcpDir(),'evolution-state.json');}export function saveEvolutionState(){const a=evolutionStateFilePath(),b=dirname(a);if(!existsSync(b))mkdirSync(b,{'recursive':!![]});const c={'version':EVOLUTION_STATE_VERSION,'saved_at':Date['now'](),'signal_buffer':Object['fromEntries'](signalBuffer),'decision_contexts':Object['fromEntries'](decisionContexts),'latest_metrics':Object['fromEntries'](latestMetrics),'latest_health':Object['fromEntries'](latestHealth),'pending_suggestions':Object['fromEntries'](pendingSuggestions),'industry_schedules':Object['fromEntries'](industrySchedules),'industry_last_update':Object['fromEntries'](industryLastUpdate),'industry_intent':Object['fromEntries'](industryIntent)},d=(e,f)=>{if(typeof f==='bigint')return{'__bigint__':f['toString']()};return f;};return writeFileSync(a,JSON['stringify'](c,d,0x2),'utf-8'),a;}export function loadEvolutionState(){const a=evolutionStateFilePath();if(!existsSync(a))return![];try{const b=readFileSync(a,'utf-8'),c=(e,f)=>{if(f&&typeof f==='object'&&'__bigint__'in f)return BigInt(f['__bigint__']);return f;},d=JSON['parse'](b,c);if(!d||d['version']!==EVOLUTION_STATE_VERSION)return![];_resetFlywheelLoopForTest();for(const [e,f]of Object['entries'](d['signal_buffer'])){signalBuffer['set'](e,f);}for(const [g,h]of Object['entries'](d['decision_contexts'])){decisionContexts['set'](g,h);}for(const [i,j]of Object['entries'](d['latest_metrics'])){latestMetrics['set'](i,j);}for(const [l,m]of Object['entries'](d['latest_health'])){latestHealth['set'](l,m);}for(const [n,o]of Object['entries'](d['pending_suggestions'])){pendingSuggestions['set'](n,o);}for(const [p,q]of Object['entries'](d['industry_schedules'])){industrySchedules['set'](p,q);}for(const [r,s]of Object['entries'](d['industry_last_update'])){industryLastUpdate['set'](r,s);}for(const [t,u]of Object['entries'](d['industry_intent'])){industryIntent['set'](t,u);}return!![];}catch{return![];}}export function hasPersistedEvolutionState(){return existsSync(evolutionStateFilePath());}export function sanitizeSignal(a){return{'industry':a['industry'],'operation_type':a['operation_type'],'success':a['success'],'error_code':a['error_code'],'timestamp':a['timestamp'],'decision_context_id':a['decision_context_id']};}export function checkAndTriggerCognitionUpdate(a){return updateIndustryCognition(a);}export function _resetFlywheelLoopForTest(){signalBuffer['clear'](),decisionContexts['clear'](),latestMetrics['clear'](),latestHealth['clear'](),pendingSuggestions['clear'](),industrySchedules['clear'](),industryLastUpdate['clear'](),industryIntent['clear']();}export function _snapshotSignalBuffer(){return Object['fromEntries'](signalBuffer);}export{MIN_SIGNALS_FOR_EVOLUTION as FLYWHEEL_LOOP_MIN_SIGNALS};
1
+ import{aggregateIndustryMetrics,evaluateIndustryHealth,suggestIndustryUpdate}from'./industry-evolution.js';import{getIndustryProfile,resolveIndustryName}from'./industry-registry.js';import{getRoleAdvice,filterSuggestionsByRole,getIntentProfile}from'./intent-metrics.js';export const FLYWHEEL_LOOP_VERSION=0x3;export const MIN_SIGNALS_FOR_EVOLUTION=0xa;const SEMI_REALTIME_SIGNAL_THRESHOLD=0x14,SEMI_REALTIME_INTERVAL_MS=0x5*0x3c*0x3e8,signalBuffer=new Map(),latestMetrics=new Map(),latestHealth=new Map(),pendingSuggestions=new Map(),industryLastUpdate=new Map();export function recordIndustrySignal(a,b,c){if(!a)return;const d=resolveIndustryName(a)??a,e={'industry':d,'operation_type':b['type'],'success':c['success'],'error_code':c['error_code'],'timestamp':Date['now']()},f=signalBuffer['get'](d)??[];f['push'](e),signalBuffer['set'](d,f),tryMaybeAutoTrigger(d,f['length']);}function tryMaybeAutoTrigger(a,b){const c=Date['now'](),d=industryLastUpdate['get'](a)??0x0,e=b>=SEMI_REALTIME_SIGNAL_THRESHOLD&&b%SEMI_REALTIME_SIGNAL_THRESHOLD===0x0,f=d>0x0&&c-d>=SEMI_REALTIME_INTERVAL_MS;(e||f)&&doAutoUpdate(a);}function doAutoUpdate(a){try{updateIndustryCognition(a),industryLastUpdate['set'](a,Date['now']());}catch{}}export function updateIndustryCognition(a,b){const c=resolveIndustryName(a)??a,d=signalBuffer['get'](c)??[],e={'industry':c,'metrics_updated':![],'health_recomputed':![],'suggestions_generated':0x0,'evolution_ready':d['length']>=MIN_SIGNALS_FOR_EVOLUTION};if(d['length']<MIN_SIGNALS_FOR_EVOLUTION&&(!b||b['length']===0x0))return e;let f;if(b&&b['length']>0x0)f=aggregateIndustryMetrics(c,b);else{const i=d['map'](j=>({'industry':c,'completed':j['success'],'has_dispute':!!j['error_code']&&j['error_code']['includes']('dispute'),'has_refund':!!j['error_code']&&j['error_code']['includes']('refund'),'ticket_size':0x0n,'timestamp':j['timestamp']}));f=aggregateIndustryMetrics(c,i);}latestMetrics['set'](c,f),e['metrics_updated']=!![];const g=evaluateIndustryHealth(c,f),h=suggestIndustryUpdate(c,f);return latestHealth['set'](c,g),e['health_recomputed']=!![],pendingSuggestions['set'](c,h),e['suggestions_generated']=h['length'],e;}export function injectEvolutionContext(a,b,c){if(!b)return{'confidence':0x0};const d=resolveIndustryName(b)??b,e=getIndustryProfile(d);if(!e)return{'confidence':0x0,'industry_signal':'Industry\x20'+d+'\x20is\x20not\x20yet\x20registered;\x20recommend\x20synthesizing\x20a\x20profile\x20via\x20the\x20generalizer\x20engine'};const f=latestHealth['get'](d),g=latestMetrics['get'](d),h=pendingSuggestions['get'](d)??[],i=signalBuffer['get'](d)?.['length']??0x0,j=[];let k,l=0.5;f&&(j['push']('Industry\x20health\x20'+f['health_score']+'/100\x20('+f['level']+')'),l=Math['max'](l,0.7),f['weaknesses']['length']>0x0&&(k='Weakness:\x20'+f['weaknesses'][0x0]),f['recommendations']['length']>0x0&&(k=k?k+';\x20recommendation:\x20'+f['recommendations'][0x0]:'Recommendation:\x20'+f['recommendations'][0x0]));g&&g['anomalies']['length']>0x0&&(j['push']('Anomaly:\x20'+g['anomalies'][0x0]),l=Math['max'](l,0.8));i>0x0&&j['push']('Accumulated\x20'+i+'\x20industry\x20signals');if(!k&&h['length']>0x0){const o=h['find'](p=>p['priority']==='high')??h[0x0];k=o['suggestion_type']+':\x20'+o['evidence'],l=Math['max'](l,o['confidence']);}let m,n=h;if(c){const p=getIntentProfile('default');p&&(m=getRoleAdvice('default',c));const q=p?.['suggestion_triggers']??[];n=filterSuggestionsByRole(h,c,q);if(n['length']>0x0){const r=n['find'](t=>t['priority']==='high')??n[0x0];k=r['suggestion_type']+'\x20('+c+'):\x20'+r['evidence'];}}return{'industry_signal':j['length']>0x0?j['join'](';\x20'):undefined,'evolution_advice':k,'confidence':l,'health_score':f?.['health_score'],'pending_suggestions':n['length'],'role_advice':m&&m['length']>0x0?m:undefined,'role':c};}export function sanitizeSignal(a){return{'industry':a['industry'],'operation_type':a['operation_type'],'success':a['success'],'error_code':a['error_code'],'timestamp':a['timestamp'],'decision_context_id':a['decision_context_id']};}export function _resetFlywheelLoopForTest(){signalBuffer['clear'](),latestMetrics['clear'](),latestHealth['clear'](),pendingSuggestions['clear'](),industryLastUpdate['clear']();}export function _snapshotSignalBuffer(){return Object['fromEntries'](signalBuffer);}export{MIN_SIGNALS_FOR_EVOLUTION as FLYWHEEL_LOOP_MIN_SIGNALS};
@@ -1 +1 @@
1
- import{validateGuardData,MAX_DESCRIPTION_LENGTH,MAX_TABLE_SIZE}from'@wowok/wowok';import{assessGuardRisks}from'./guard-risk.js';import{findScene,inferSceneFromAction}from'./guard-ledger.js';import{suggestTemplateForScene}from'./guard-templates.js';function deepClone(a){return JSON['parse'](JSON['stringify'](a));}function rootToString(a){return JSON['stringify'](a);}function hasSignerContext(a){const b=rootToString(a);return b['includes']('\x22Signer\x22')||b['includes']('\x22context\x22:\x22Signer\x22')||b['includes']('\x22context\x22:\x20\x22Signer\x22');}function getSubmissionEntries(a){return a['filter'](b=>b['b_submission']===!![]);}function inferValueType(a){if(typeof a==='string'){if(a['startsWith']('0x')&&a['length']>=0x3)return'Address';return'String';}if(typeof a==='number'){if(Number['isInteger'](a)){if(a>=0x0&&a<=0xff)return'U8';if(a>=0x0&&a<=0xffff)return'U16';return'U64';}return'U256';}if(typeof a==='boolean')return'Bool';if(Array['isArray'](a)){if(a['length']>0x0){const b=inferValueType(a[0x0]);if(b==='Address')return'Vec<Address>';if(b==='String')return'Vec<String>';if(b==='Bool')return'Vec<Bool>';}return'Vec<Address>';}return undefined;}function sdkIssueToDiagnostic(a){return{'code':a['code'],'message':a['message'],'severity':a['severity'],'source':'sdk','location':{'path':a['path']},'fix':{'description':'SDK\x20validation\x20failed\x20('+(a['sdk_error']??'InvalidParam')+');\x20manual\x20fix\x20required','auto_fixable':![]}};}async function checkSdkSyntax(a){const b=a['table']['map'](d=>({'identifier':d['identifier'],'b_submission':d['b_submission']??![],'value_type':d['value_type']??'Address','value':d['value'],'name':d['name']??''})),c=await validateGuardData({'description':a['description'],'table':b,'root':a['root'],'rely':a['rely']});return c['map'](sdkIssueToDiagnostic);}function checkSemanticErrors(a){const b=[],{table:c,root:d,binding_hint:e}=a,f=e?findScene(e['host_object']??'',e['binding_field']??''):undefined,g=getSubmissionEntries(c);if(g['length']>0x0&&d&&!hasSignerContext(d)){const h=g['some'](j=>j['value_type']==='Address'),i=f?.['id']==='service_order_allocators_guard'&&e?.['sharing_recipients']!==undefined&&e['sharing_recipients']['length']>0x0&&!e['sharing_recipients']['includes']('Signer');if(h&&!i){const j=g['filter'](k=>k['value_type']==='Address')['map'](k=>c['indexOf'](k));b['push']({'code':'LE-04','message':'Submitted\x20data\x20has\x20no\x20Signer\x20binding\x20(submission\x20forgery\x20risk)','severity':'error','source':'lint','location':{'path':j['map'](k=>'/table/'+k)['join']('\x20→\x20')},'fix':{'description':'Add\x20logic_equal(context(Signer),\x20identifier[N])\x20in\x20root\x20to\x20bind\x20the\x20submitter\x20identity','auto_fixable':![]}});}}if(f?.['id']==='arbitration_voting_guard'){const k=g['some'](l=>['U8','U16','U32','U64','U128','U256']['includes'](l['value_type']??''));if(k){const l=g['filter'](m=>['U8','U16','U32','U64','U128','U256']['includes'](m['value_type']??''))['map'](m=>c['indexOf'](m));b['push']({'code':'LE-05','message':'voting_guard\x20voting\x20weight\x20comes\x20from\x20submitted\x20data\x20(weight\x20forgery\x20risk)','severity':'error','source':'lint','location':{'path':l['map'](m=>'/table/'+m)['join']('\x20→\x20')},'fix':{'description':'Derive\x20arbitrator\x20weights\x20from\x20the\x20Arb\x20object\x20via\x20witness\x20(e.g.\x20105\x20TypeArbArbitration)\x20rather\x20than\x20submitting\x20them\x20directly','auto_fixable':![]}});}}if(f?.['id']==='gen_passport_guard'||e?.['action']==='gen_passport'){const m=rootToString(d);if(m['includes']('1167')||m['includes']('repository.data')){const n=m['includes']('quote_guard');n&&b['push']({'code':'LE-06','message':'repository.data\x20query\x20with\x20quote_guard:\x20rigid\x20verification\x20requirement\x20—\x20ensure\x20Passport\x20includes\x20quote_guard\x20verification\x20with\x20necessary\x20submissions\x20(e.g.,\x20Payment\x20proof)','severity':'info','source':'lint','location':{'path':'/root'},'fix':{'description':'Ensure\x20the\x20quote_guard\x20is\x20verified:\x20user\x20submits\x20Payment\x20via\x20Passport,\x20quote_guard\x20verifies\x20Payment\x20fields,\x20repository\x20data\x20query\x20passes','auto_fixable':![]}});}}if(e?.['host_object']&&f){const o=e['host_object'],p=c['filter'](q=>!q['b_submission']&&q['value_type']==='Address'&&typeof q['value']==='string'&&q['value']['startsWith']('0x')&&q['object_type']===o);if(p['length']>0x0){const q=p['map'](r=>c['indexOf'](r));b['push']({'code':'LE-07','message':'Circular\x20reference\x20uses\x20an\x20address\x20rather\x20than\x20a\x20name\x20(Host\x20Object\x20may\x20not\x20be\x20published\x20yet\x20when\x20the\x20Guard\x20is\x20created)','severity':'error','source':'lint','location':{'path':q['map'](r=>'/table/'+r+'/value')['join']('\x20→\x20')},'fix':{'description':'Change\x20value\x20from\x20an\x20address\x20to\x20an\x20object\x20name\x20(e.g.\x20\x22service1\x22);\x20the\x20SDK\x20will\x20resolve\x20it\x20to\x20an\x20address\x20after\x20the\x20Host\x20Object\x20is\x20published','auto_fixable':![]}});}}return b;}function checkSyntaxHints(a){const b=[],{table:c}=a;(!a['description']||a['description']['trim']()==='')&&b['push']({'code':'SH-01','message':'description\x20is\x20missing\x20or\x20empty','severity':'info','source':'lint','location':{'path':'/description'},'fix':{'description':'Add\x20a\x20description,\x20e.g.\x20\x27Service\x20buy_guard:\x20whitelist\x20validation\x27','auto_fixable':!![]}});for(let d=0x0;d<c['length'];d++){const e=c[d];(!e['name']||e['name']['trim']()==='')&&b['push']({'code':'SH-03','message':'table['+d+']\x20is\x20missing\x20name','severity':'warning','source':'lint','location':{'path':'/table/'+d+'/name'},'fix':{'description':'Add\x20a\x20name,\x20e.g.\x20\x22data\x20entry\x20'+e['identifier']+'\x22','auto_fixable':!![]}});}for(let f=0x0;f<c['length'];f++){const g=c[f];!g['value_type']&&b['push']({'code':'SH-05','message':'table['+f+']\x20is\x20missing\x20value_type','severity':'warning','source':'lint','location':{'path':'/table/'+f+'/value_type'},'fix':{'description':'Infer\x20value_type\x20from\x20value\x20(e.g.\x20Address/String/U64,\x20etc.)','auto_fixable':!![]}});}c['length']>MAX_TABLE_SIZE&&b['push']({'code':'SH-07','message':'table\x20entry\x20count\x20'+c['length']+'\x20exceeds\x20the\x20maximum\x20limit\x20'+MAX_TABLE_SIZE,'severity':'error','source':'lint','location':{'path':'/table'},'fix':{'description':'Slim\x20down\x20the\x20table\x20by\x20merging\x20similar\x20entries,\x20or\x20split\x20into\x20multiple\x20Guards\x20+\x20rely','auto_fixable':![]}});for(let h=0x0;h<c['length'];h++){c[h]['b_submission']===undefined&&b['push']({'code':'SH-10','message':'table['+h+']\x20b_submission\x20is\x20missing','severity':'info','source':'lint','location':{'path':'/table/'+h+'/b_submission'},'fix':{'description':'Set\x20to\x20false\x20(constant)\x20or\x20true\x20(submitted\x20data)','auto_fixable':!![]}});}for(let j=0x0;j<c['length'];j++){const k=c[j];k['b_submission']===!![]&&k['value']!==undefined&&k['value']!==null&&b['push']({'code':'SH-11','message':'table['+j+']\x20has\x20a\x20redundant\x20value\x20field\x20on\x20b_submission=true\x20entry\x20(the\x20verifier\x20supplies\x20the\x20value\x20at\x20runtime;\x20this\x20value\x20is\x20ignored\x20by\x20BCS\x20encoding\x20and\x20wastes\x20gas)','severity':'warning','source':'lint','location':{'path':'/table/'+j+'/value'},'fix':{'description':'Remove\x20the\x20value\x20field\x20—\x20it\x20is\x20ignored\x20for\x20b_submission=true\x20entries','auto_fixable':!![]}});}return b;}function checkSuggestions(a){const b=[],{root:c,binding_hint:d,table:e}=a;if(c){const g=rootToString(c);if(g['includes']('vec_contains_address')&&g['includes']('Signer'))b['push']({'code':'SG-01','message':'Matches\x20Pattern\x20P04\x20(whitelist\x20validation)','severity':'hint','source':'lint','location':{'path':'/root'},'fix':{'description':'Refer\x20to\x20the\x20P04\x20Pattern\x20to\x20ensure\x20best\x20practices','auto_fixable':![]}});else{if(g['includes']('logic_equal')&&g['includes']('Signer')){const h=e['some'](i=>!i['b_submission']&&i['value_type']==='Address'&&typeof i['value']==='string'&&i['value']['length']>0x0);h&&b['push']({'code':'SG-01','message':'Matches\x20Pattern\x20P04\x20(whitelist\x20validation\x20—\x20single-address\x20variant)','severity':'hint','source':'lint','location':{'path':'/root'},'fix':{'description':'P04\x20single-address\x20form;\x20for\x20multi-address\x20scenarios,\x20consider\x20vec_contains_address','auto_fixable':![]}});}}(g['includes']('logic_as_u256_greater')||g['includes']('logic_as_u256_lesser'))&&b['push']({'code':'SG-01','message':'Matches\x20Pattern\x20P02\x20(numeric\x20threshold\x20validation)','severity':'hint','source':'lint','location':{'path':'/root'},'fix':{'description':'Suitable\x20for\x20amount/quantity\x20threshold\x20validation\x20scenarios','auto_fixable':![]}}),g['includes']('convert_witness')&&b['push']({'code':'SG-01','message':'Matches\x20Pattern\x20P09\x20(witness-derived\x20validation)','severity':'hint','source':'lint','location':{'path':'/root'},'fix':{'description':'Suitable\x20for\x20cross-object\x20relationship\x20validation\x20(e.g.\x20Order→Progress)','auto_fixable':![]}});}if(d?.['action']){const i=['buy','forward','allocate','claim_reward','vote','dispute','write_repository','submit_progress','gen_passport'];if(i['includes'](d['action'])){const j=inferSceneFromAction(d['action']);if(j){const k=suggestTemplateForScene(j['id']);k&&b['push']({'code':'SG-02','message':'Recommended\x20scene\x20template:\x20'+k['name'],'severity':'hint','source':'lint','location':{'path':'/'},'fix':{'description':'Refer\x20to\x20template\x20'+k['id']+'\x20('+k['example_use_case']+')','auto_fixable':![]}});}}}const f=getSubmissionEntries(e);for(const l of f){const m=l['name']??'';if(m['length']<0xa||/^[a-z_]+$/i['test'](m)){const n=e['indexOf'](l);b['push']({'code':'SG-03','message':'table['+n+']\x20submitted\x20data\x20has\x20a\x20vague\x20name\x20description','severity':'info','source':'lint','location':{'path':'/table/'+n+'/name'},'fix':{'description':'Use\x20a\x20full\x20natural-language\x20description\x20(≥10\x20characters),\x20e.g.\x20\x27user-submitted\x20operation\x20type\x20(return/damage)\x27','auto_fixable':![]}});}}if(c){const o=rootToString(c),p=o['includes']('proof.signer'),q=o['includes']('proof.time'),r=o['includes']('calc_string_length'),s=f['some'](t=>t['value_type']==='String');if(p&&q)b['push']({'code':'SG-04','message':'Strict-mode\x20privacy-delivery\x20guard\x20detected\x20(proof.signer\x20+\x20proof.time).\x20'+'Recommended\x20three\x20conditions:\x20Signer==proof.signer\x20(submitter\x20accountability),\x20'+'proof.time>order.time\x20(freshness),\x20order.service==service\x20(project\x20binding).\x20'+'No\x20content\x20verification\x20—\x20only\x20submission\x20responsibility\x20(\x27whoever\x20benefits\x20bears\x20the\x20burden\x20of\x20proof\x27).','severity':'info','source':'lint','location':{'path':'/root'},'fix':{'description':'Ensure\x20all\x20three\x20conditions\x20are\x20present\x20(logic_and).\x20Refer\x20to\x20template\x20tpl_forward_privacy_delivery_proof.\x20'+'Query\x20IDs:\x20proof.signer=1958,\x20proof.time=1960,\x20order.time=1574,\x20order.service=1563.','auto_fixable':![]}});else r&&s&&b['push']({'code':'SG-04','message':'Broad-mode\x20privacy-delivery\x20guard\x20detected\x20(String\x20submission\x20+\x20length\x20check,\x20e.g.\x20Merkle\x20Root\x20length\x20==\x2066).\x20'+'This\x20trusts\x20the\x20submitter\x27s\x20honesty;\x20the\x20counterparty\x20can\x20dispute\x20by\x20checking\x20their\x20own\x20Messenger\x20conversation.\x20'+'Suitable\x20as\x20an\x20arbitration\x20basis,\x20not\x20a\x20fund-flow\x20gate.','severity':'info','source':'lint','location':{'path':'/root'},'fix':{'description':'For\x20stronger\x20assurance,\x20consider\x20strict\x20mode:\x20submit\x20a\x20Proof\x20object\x20address\x20(from\x20messenger.submitChainProof)\x20+\x20'+'Order\x20address,\x20then\x20verify\x20proof.signer/proof.time/order.service.\x20See\x20template\x20tpl_forward_privacy_delivery_proof.','auto_fixable':![]}});}return b;}export function autoFixGuard(a){const b=deepClone(a),c=[];(!b['description']||b['description']['trim']()==='')&&(b['description']='Guard\x20(table:\x20'+b['table']['length']+'\x20items,\x20root:\x20'+(b['root']?.['type']??'unknown')+')',c['push']({'diagnostic_code':'SH-01','description':'Fill\x20in\x20default\x20description','after':b['description'],'path':'/description'}));if(b['description']&&b['description']['length']>MAX_DESCRIPTION_LENGTH){const f=b['description'];b['description']=b['description']['substring'](0x0,MAX_DESCRIPTION_LENGTH),c['push']({'diagnostic_code':'G-001','description':'Truncate\x20description\x20to\x20'+MAX_DESCRIPTION_LENGTH+'\x20characters','before':f['length']+'\x20characters','after':b['description']['length']+'\x20characters','path':'/description'});}for(let g=0x0;g<b['table']['length'];g++){const h=b['table'][g];(!h['name']||h['name']['trim']()==='')&&(h['name']='data\x20entry\x20'+h['identifier'],c['push']({'diagnostic_code':'SH-03','description':'table['+g+']\x20fill\x20in\x20name','after':h['name'],'path':'/table/'+g+'/name'}));}for(let j=0x0;j<b['table']['length'];j++){const k=b['table'][j];if(!k['value_type']&&k['value']!==undefined&&k['value']!==null){const l=inferValueType(k['value']);l&&(k['value_type']=l,c['push']({'diagnostic_code':'SH-05','description':'table['+j+']\x20infer\x20value_type','after':l,'path':'/table/'+j+'/value_type'}));}}const d=new Map();let e=0x0;for(let m=0x0;m<b['table']['length'];m++){const n=b['table'][m];if(!d['has'](n['identifier']))d['set'](n['identifier'],e),n['identifier']!==e&&c['push']({'diagnostic_code':'G-007','description':'table['+m+']\x20identifier\x20'+n['identifier']+'\x20→\x20'+e,'before':String(n['identifier']),'after':String(e),'path':'/table/'+m+'/identifier'}),n['identifier']=e,e++;else{const o=n['identifier'];n['identifier']=e,d['set'](o,e),c['push']({'diagnostic_code':'G-007','description':'table['+m+']\x20identifier\x20'+o+'\x20duplicate\x20→\x20reallocated\x20to\x20'+e,'before':String(o),'after':String(e),'path':'/table/'+m+'/identifier'}),e++;}}for(let p=0x0;p<b['table']['length'];p++){const q=b['table'][p];q['b_submission']===undefined&&(q['b_submission']=![],c['push']({'diagnostic_code':'SH-10','description':'table['+p+']\x20b_submission\x20default\x20set\x20to\x20false','after':'false','path':'/table/'+p+'/b_submission'}));}if(b['rely']?.['guards']&&b['rely']['guards']['length']>0x0){const r=[...new Set(b['rely']['guards'])];r['length']!==b['rely']['guards']['length']&&(c['push']({'diagnostic_code':'G-009','description':'rely\x20deduplicate:\x20'+b['rely']['guards']['length']+'\x20→\x20'+r['length'],'before':JSON['stringify'](b['rely']['guards']),'after':JSON['stringify'](r),'path':'/rely/guards'}),b['rely']['guards']=r);}for(let s=0x0;s<b['table']['length'];s++){const t=b['table'][s];if(t['b_submission']===!![]&&t['value']!==undefined&&t['value']!==null){const u=JSON['stringify'](t['value']);delete t['value'],c['push']({'diagnostic_code':'SH-11','description':'table['+s+']\x20remove\x20redundant\x20value\x20on\x20b_submission=true\x20entry','before':u,'after':'(removed)','path':'/table/'+s+'/value'});}}return{'fixed':b,'actions':c};}export async function lintGuard(a,b){const c=b?.['auto_fix']??!![],{table:d,root:e,rely:f,binding_hint:g}=a,h=[];let i;const j=await checkSdkSyntax(a);h['push'](...j);const k=checkSemanticErrors(a);h['push'](...k);const l=checkSyntaxHints(a);h['push'](...l);let m,n=[];if(c){const {fixed:v,actions:w}=autoFixGuard(a);w['length']>0x0&&(m=v,n=w);}if(d['length']>0x0&&e){const x=g?findScene(g['host_object']??'',g['binding_field']??''):undefined,y=d['map'](z=>({'identifier':z['identifier'],'b_submission':z['b_submission']??![],'value_type':z['value_type']??'Address','value':z['value'],'name':z['name'],'object_type':z['object_type']}));i=assessGuardRisks({'table':y,'root':e,'rely':f,'scene':x,'sharing_recipients':g?.['sharing_recipients']});for(const z of i['risks']){const A=z['level']==='critical'||z['level']==='high'?'error':z['level']==='medium'?'warning':z['level']==='low'?'info':'hint',B=z['evidence']??'',C=B['startsWith']('/')?B:'/';h['push']({'code':z['id'],'message':'['+z['level']+']\x20'+z['title'],'severity':A,'source':'risk','location':{'path':C},'fix':{'description':z['mitigation'],'auto_fixable':![]}});}}const o=checkSuggestions(a);h['push'](...o);const p=h['filter'](D=>D['severity']==='error')['length'],q=h['filter'](D=>D['severity']==='warning')['length'],s=h['filter'](D=>D['severity']==='info'||D['severity']==='hint')['length'],t=p===0x0;let u;if(p>0x0)u='Fix\x20'+p+'\x20error(s)\x20and\x20re-run\x20lint';else q>0x0?u='Consider\x20addressing\x20'+q+'\x20warning(s),\x20then\x20submit\x20to\x20SDK\x20newGuard()\x20for\x20final\x20syntax\x20validation':u='lint\x20passed\x20(no\x20errors);\x20submit\x20to\x20SDK\x20newGuard()\x20for\x20final\x20syntax\x20validation\x20before\x20going\x20on-chain';return{'json_summary':{'table_count':d['length'],'root_type':e?.['type']??'unknown','has_rely':!!f?.['guards']?.['length'],'rely_count':f?.['guards']?.['length']??0x0,'has_description':!!a['description']},'diagnostics':h,'fixed_json':m,'fix_actions':n,'risk_assessment':i,'summary':{'errors':p,'warnings':q,'infos':s,'auto_fixes_applied':n['length'],'ready':t,'next_step':u}};}export async function isGuardReady(a){const b=await lintGuard(a,{'auto_fix':![]});return b['summary']['ready'];}export async function getGuardErrors(a){const b=await lintGuard(a,{'auto_fix':![]});return b['diagnostics']['filter'](c=>c['severity']==='error');}export function formatLintResult(a){const b=[];b['push']('===\x20Guard\x20JSON\x20Lint\x20Report\x20==='),b['push'](''),b['push']('Summary:'),b['push']('\x20\x20Errors:\x20\x20\x20\x20\x20'+a['summary']['errors']),b['push']('\x20\x20Warnings:\x20\x20\x20'+a['summary']['warnings']),b['push']('\x20\x20Infos:\x20\x20\x20\x20\x20\x20'+a['summary']['infos']),b['push']('\x20\x20Auto-fixes:\x20'+a['summary']['auto_fixes_applied']),b['push']('\x20\x20Ready:\x20\x20\x20\x20\x20\x20'+(a['summary']['ready']?'YES':'NO')),b['push']('\x20\x20Next\x20step:\x20\x20'+a['summary']['next_step']),b['push']('');if(a['fix_actions']['length']>0x0){b['push']('---\x20Auto-fix\x20Actions\x20---');for(const g of a['fix_actions']){b['push']('\x20\x20['+g['diagnostic_code']+']\x20'+g['description']),b['push']('\x20\x20\x20\x20Path:\x20'+g['path']),g['before']&&g['after']&&b['push']('\x20\x20\x20\x20'+g['before']+'\x20->\x20'+g['after']);}b['push']('');}const c=a['diagnostics']['filter'](h=>h['severity']==='error'),e=a['diagnostics']['filter'](h=>h['severity']==='warning'),f=a['diagnostics']['filter'](h=>h['severity']==='info'||h['severity']==='hint');if(c['length']>0x0){b['push']('---\x20Errors\x20(must\x20fix)\x20---');for(const h of c){b['push']('\x20\x20['+h['code']+']\x20('+h['source']+')\x20'+h['message']),b['push']('\x20\x20\x20\x20Path:\x20'+h['location']['path']);if(h['fix'])b['push']('\x20\x20\x20\x20Fix:\x20\x20'+h['fix']['description']);}b['push']('');}if(e['length']>0x0){b['push']('---\x20Warnings\x20(consider\x20fixing)\x20---');for(const i of e){b['push']('\x20\x20['+i['code']+']\x20('+i['source']+')\x20'+i['message']),b['push']('\x20\x20\x20\x20Path:\x20'+i['location']['path']);if(i['fix'])b['push']('\x20\x20\x20\x20Fix:\x20\x20'+i['fix']['description']);}b['push']('');}if(f['length']>0x0){b['push']('---\x20Info\x20&\x20Hints\x20---');for(const j of f){b['push']('\x20\x20['+j['code']+']\x20('+j['source']+')\x20'+j['message']),b['push']('\x20\x20\x20\x20Path:\x20'+j['location']['path']);}}return b['join']('\x0a');}
1
+ import{validateGuardData,MAX_DESCRIPTION_LENGTH,MAX_GUARD_TABLE_ITEM_LENGTH}from'@wowok/wowok';import{assessGuardRisks}from'./guard-risk.js';import{findScene,inferSceneFromAction}from'./guard-ledger.js';import{suggestTemplateForScene}from'./guard-templates.js';function deepClone(a){return JSON['parse'](JSON['stringify'](a));}function rootToString(a){return JSON['stringify'](a);}function hasSignerContext(a){const b=rootToString(a);return b['includes']('\x22Signer\x22')||b['includes']('\x22context\x22:\x22Signer\x22')||b['includes']('\x22context\x22:\x20\x22Signer\x22');}function getSubmissionEntries(a){return a['filter'](b=>b['b_submission']===!![]);}function inferValueType(a){if(typeof a==='string'){if(a['startsWith']('0x')&&a['length']>=0x3)return'Address';return'String';}if(typeof a==='number'){if(Number['isInteger'](a)){if(a>=0x0&&a<=0xff)return'U8';if(a>=0x0&&a<=0xffff)return'U16';return'U64';}return'U256';}if(typeof a==='boolean')return'Bool';if(Array['isArray'](a)){if(a['length']>0x0){const b=inferValueType(a[0x0]);if(b==='Address')return'Vec<Address>';if(b==='String')return'Vec<String>';if(b==='Bool')return'Vec<Bool>';}return'Vec<Address>';}return undefined;}function sdkIssueToDiagnostic(a){return{'code':a['code'],'message':a['message'],'severity':a['severity'],'source':'sdk','location':{'path':a['path']},'fix':{'description':'SDK\x20validation\x20failed\x20('+(a['sdk_error']??'InvalidParam')+');\x20manual\x20fix\x20required','auto_fixable':![]}};}async function checkSdkSyntax(a){const b=a['table']['map'](d=>({'identifier':d['identifier'],'b_submission':d['b_submission']??![],'value_type':d['value_type']??'Address','value':d['value'],'name':d['name']??''})),c=await validateGuardData({'description':a['description'],'table':b,'root':a['root'],'rely':a['rely']});return c['map'](sdkIssueToDiagnostic);}function checkSemanticErrors(a){const b=[],{table:c,root:d,binding_hint:e}=a,f=e?findScene(e['host_object']??'',e['binding_field']??''):undefined,g=getSubmissionEntries(c);if(g['length']>0x0&&d&&!hasSignerContext(d)){const h=g['some'](j=>j['value_type']==='Address'),i=f?.['id']==='service_order_allocators_guard'&&e?.['sharing_recipients']!==undefined&&e['sharing_recipients']['length']>0x0&&!e['sharing_recipients']['includes']('Signer');if(h&&!i){const j=g['filter'](k=>k['value_type']==='Address')['map'](k=>c['indexOf'](k));b['push']({'code':'LE-04','message':'Submitted\x20data\x20has\x20no\x20Signer\x20binding\x20(submission\x20forgery\x20risk)','severity':'error','source':'lint','location':{'path':j['map'](k=>'/table/'+k)['join']('\x20→\x20')},'fix':{'description':'Add\x20logic_equal(context(Signer),\x20identifier[N])\x20in\x20root\x20to\x20bind\x20the\x20submitter\x20identity','auto_fixable':![]}});}}if(f?.['id']==='arbitration_voting_guard'){const k=g['some'](l=>['U8','U16','U32','U64','U128','U256']['includes'](l['value_type']??''));if(k){const l=g['filter'](m=>['U8','U16','U32','U64','U128','U256']['includes'](m['value_type']??''))['map'](m=>c['indexOf'](m));b['push']({'code':'LE-05','message':'voting_guard\x20voting\x20weight\x20comes\x20from\x20submitted\x20data\x20(weight\x20forgery\x20risk)','severity':'error','source':'lint','location':{'path':l['map'](m=>'/table/'+m)['join']('\x20→\x20')},'fix':{'description':'Derive\x20arbitrator\x20weights\x20from\x20the\x20Arb\x20object\x20via\x20witness\x20(e.g.\x20105\x20TypeArbArbitration)\x20rather\x20than\x20submitting\x20them\x20directly','auto_fixable':![]}});}}if(f?.['id']==='gen_passport_guard'||e?.['action']==='gen_passport'){const m=rootToString(d);if(m['includes']('1167')||m['includes']('repository.data')){const n=m['includes']('quote_guard');n&&b['push']({'code':'LE-06','message':'repository.data\x20query\x20with\x20quote_guard:\x20rigid\x20verification\x20requirement\x20—\x20ensure\x20Passport\x20includes\x20quote_guard\x20verification\x20with\x20necessary\x20submissions\x20(e.g.,\x20Payment\x20proof)','severity':'info','source':'lint','location':{'path':'/root'},'fix':{'description':'Ensure\x20the\x20quote_guard\x20is\x20verified:\x20user\x20submits\x20Payment\x20via\x20Passport,\x20quote_guard\x20verifies\x20Payment\x20fields,\x20repository\x20data\x20query\x20passes','auto_fixable':![]}});}}if(e?.['host_object']&&f){const o=e['host_object'],p=c['filter'](q=>!q['b_submission']&&q['value_type']==='Address'&&typeof q['value']==='string'&&q['value']['startsWith']('0x')&&q['object_type']===o);if(p['length']>0x0){const q=p['map'](r=>c['indexOf'](r));b['push']({'code':'LE-07','message':'Circular\x20reference\x20uses\x20an\x20address\x20rather\x20than\x20a\x20name\x20(Host\x20Object\x20may\x20not\x20be\x20published\x20yet\x20when\x20the\x20Guard\x20is\x20created)','severity':'error','source':'lint','location':{'path':q['map'](r=>'/table/'+r+'/value')['join']('\x20→\x20')},'fix':{'description':'Change\x20value\x20from\x20an\x20address\x20to\x20an\x20object\x20name\x20(e.g.\x20\x22service1\x22);\x20the\x20SDK\x20will\x20resolve\x20it\x20to\x20an\x20address\x20after\x20the\x20Host\x20Object\x20is\x20published','auto_fixable':![]}});}}return b;}function checkSyntaxHints(a){const b=[],{table:c}=a;(!a['description']||a['description']['trim']()==='')&&b['push']({'code':'SH-01','message':'description\x20is\x20missing\x20or\x20empty','severity':'info','source':'lint','location':{'path':'/description'},'fix':{'description':'Add\x20a\x20description,\x20e.g.\x20\x27Service\x20buy_guard:\x20whitelist\x20validation\x27','auto_fixable':!![]}});for(let d=0x0;d<c['length'];d++){const e=c[d];(!e['name']||e['name']['trim']()==='')&&b['push']({'code':'SH-03','message':'table['+d+']\x20is\x20missing\x20name','severity':'warning','source':'lint','location':{'path':'/table/'+d+'/name'},'fix':{'description':'Add\x20a\x20name,\x20e.g.\x20\x22data\x20entry\x20'+e['identifier']+'\x22','auto_fixable':!![]}});}for(let f=0x0;f<c['length'];f++){const g=c[f];!g['value_type']&&b['push']({'code':'SH-05','message':'table['+f+']\x20is\x20missing\x20value_type','severity':'warning','source':'lint','location':{'path':'/table/'+f+'/value_type'},'fix':{'description':'Infer\x20value_type\x20from\x20value\x20(e.g.\x20Address/String/U64,\x20etc.)','auto_fixable':!![]}});}c['length']>MAX_GUARD_TABLE_ITEM_LENGTH&&b['push']({'code':'SH-07','message':'table\x20entry\x20count\x20'+c['length']+'\x20exceeds\x20the\x20maximum\x20limit\x20'+MAX_GUARD_TABLE_ITEM_LENGTH,'severity':'error','source':'lint','location':{'path':'/table'},'fix':{'description':'Slim\x20down\x20the\x20table\x20by\x20merging\x20similar\x20entries,\x20or\x20split\x20into\x20multiple\x20Guards\x20+\x20rely','auto_fixable':![]}});for(let h=0x0;h<c['length'];h++){c[h]['b_submission']===undefined&&b['push']({'code':'SH-10','message':'table['+h+']\x20b_submission\x20is\x20missing','severity':'info','source':'lint','location':{'path':'/table/'+h+'/b_submission'},'fix':{'description':'Set\x20to\x20false\x20(constant)\x20or\x20true\x20(submitted\x20data)','auto_fixable':!![]}});}for(let j=0x0;j<c['length'];j++){const k=c[j];k['b_submission']===!![]&&k['value']!==undefined&&k['value']!==null&&b['push']({'code':'SH-11','message':'table['+j+']\x20has\x20a\x20redundant\x20value\x20field\x20on\x20b_submission=true\x20entry\x20(the\x20verifier\x20supplies\x20the\x20value\x20at\x20runtime;\x20this\x20value\x20is\x20ignored\x20by\x20BCS\x20encoding\x20and\x20wastes\x20gas)','severity':'warning','source':'lint','location':{'path':'/table/'+j+'/value'},'fix':{'description':'Remove\x20the\x20value\x20field\x20—\x20it\x20is\x20ignored\x20for\x20b_submission=true\x20entries','auto_fixable':!![]}});}return b;}function checkSuggestions(a){const b=[],{root:c,binding_hint:d,table:e}=a;if(c){const g=rootToString(c);if(g['includes']('vec_contains_address')&&g['includes']('Signer'))b['push']({'code':'SG-01','message':'Matches\x20Pattern\x20P04\x20(whitelist\x20validation)','severity':'hint','source':'lint','location':{'path':'/root'},'fix':{'description':'Refer\x20to\x20the\x20P04\x20Pattern\x20to\x20ensure\x20best\x20practices','auto_fixable':![]}});else{if(g['includes']('logic_equal')&&g['includes']('Signer')){const h=e['some'](i=>!i['b_submission']&&i['value_type']==='Address'&&typeof i['value']==='string'&&i['value']['length']>0x0);h&&b['push']({'code':'SG-01','message':'Matches\x20Pattern\x20P04\x20(whitelist\x20validation\x20—\x20single-address\x20variant)','severity':'hint','source':'lint','location':{'path':'/root'},'fix':{'description':'P04\x20single-address\x20form;\x20for\x20multi-address\x20scenarios,\x20consider\x20vec_contains_address','auto_fixable':![]}});}}(g['includes']('logic_as_u256_greater')||g['includes']('logic_as_u256_lesser'))&&b['push']({'code':'SG-01','message':'Matches\x20Pattern\x20P02\x20(numeric\x20threshold\x20validation)','severity':'hint','source':'lint','location':{'path':'/root'},'fix':{'description':'Suitable\x20for\x20amount/quantity\x20threshold\x20validation\x20scenarios','auto_fixable':![]}}),g['includes']('convert_witness')&&b['push']({'code':'SG-01','message':'Matches\x20Pattern\x20P09\x20(witness-derived\x20validation)','severity':'hint','source':'lint','location':{'path':'/root'},'fix':{'description':'Suitable\x20for\x20cross-object\x20relationship\x20validation\x20(e.g.\x20Order→Progress)','auto_fixable':![]}});}if(d?.['action']){const i=['buy','forward','allocate','claim_reward','vote','dispute','write_repository','submit_progress','gen_passport'];if(i['includes'](d['action'])){const j=inferSceneFromAction(d['action']);if(j){const k=suggestTemplateForScene(j['id']);k&&b['push']({'code':'SG-02','message':'Recommended\x20scene\x20template:\x20'+k['name'],'severity':'hint','source':'lint','location':{'path':'/'},'fix':{'description':'Refer\x20to\x20template\x20'+k['id']+'\x20('+k['example_use_case']+')','auto_fixable':![]}});}}}const f=getSubmissionEntries(e);for(const l of f){const m=l['name']??'';if(m['length']<0xa||/^[a-z_]+$/i['test'](m)){const n=e['indexOf'](l);b['push']({'code':'SG-03','message':'table['+n+']\x20submitted\x20data\x20has\x20a\x20vague\x20name\x20description','severity':'info','source':'lint','location':{'path':'/table/'+n+'/name'},'fix':{'description':'Use\x20a\x20full\x20natural-language\x20description\x20(≥10\x20characters),\x20e.g.\x20\x27user-submitted\x20operation\x20type\x20(return/damage)\x27','auto_fixable':![]}});}}if(c){const o=rootToString(c),p=o['includes']('proof.signer'),q=o['includes']('proof.time'),r=o['includes']('calc_string_length'),s=f['some'](t=>t['value_type']==='String');if(p&&q)b['push']({'code':'SG-04','message':'Strict-mode\x20privacy-delivery\x20guard\x20detected\x20(proof.signer\x20+\x20proof.time).\x20'+'Recommended\x20three\x20conditions:\x20Signer==proof.signer\x20(submitter\x20accountability),\x20'+'proof.time>order.time\x20(freshness),\x20order.service==service\x20(project\x20binding).\x20'+'No\x20content\x20verification\x20—\x20only\x20submission\x20responsibility\x20(\x27whoever\x20benefits\x20bears\x20the\x20burden\x20of\x20proof\x27).','severity':'info','source':'lint','location':{'path':'/root'},'fix':{'description':'Ensure\x20all\x20three\x20conditions\x20are\x20present\x20(logic_and).\x20Refer\x20to\x20template\x20tpl_forward_privacy_delivery_proof.\x20'+'Query\x20IDs:\x20proof.signer=1958,\x20proof.time=1960,\x20order.time=1574,\x20order.service=1563.','auto_fixable':![]}});else r&&s&&b['push']({'code':'SG-04','message':'Broad-mode\x20privacy-delivery\x20guard\x20detected\x20(String\x20submission\x20+\x20length\x20check,\x20e.g.\x20Merkle\x20Root\x20length\x20==\x2066).\x20'+'This\x20trusts\x20the\x20submitter\x27s\x20honesty;\x20the\x20counterparty\x20can\x20dispute\x20by\x20checking\x20their\x20own\x20Messenger\x20conversation.\x20'+'Suitable\x20as\x20an\x20arbitration\x20basis,\x20not\x20a\x20fund-flow\x20gate.','severity':'info','source':'lint','location':{'path':'/root'},'fix':{'description':'For\x20stronger\x20assurance,\x20consider\x20strict\x20mode:\x20submit\x20a\x20Proof\x20object\x20address\x20(from\x20messenger.submitChainProof)\x20+\x20'+'Order\x20address,\x20then\x20verify\x20proof.signer/proof.time/order.service.\x20See\x20template\x20tpl_forward_privacy_delivery_proof.','auto_fixable':![]}});}return b;}export function autoFixGuard(a){const b=deepClone(a),c=[];(!b['description']||b['description']['trim']()==='')&&(b['description']='Guard\x20(table:\x20'+b['table']['length']+'\x20items,\x20root:\x20'+(b['root']?.['type']??'unknown')+')',c['push']({'diagnostic_code':'SH-01','description':'Fill\x20in\x20default\x20description','after':b['description'],'path':'/description'}));if(b['description']&&b['description']['length']>MAX_DESCRIPTION_LENGTH){const f=b['description'];b['description']=b['description']['substring'](0x0,MAX_DESCRIPTION_LENGTH),c['push']({'diagnostic_code':'G-001','description':'Truncate\x20description\x20to\x20'+MAX_DESCRIPTION_LENGTH+'\x20characters','before':f['length']+'\x20characters','after':b['description']['length']+'\x20characters','path':'/description'});}for(let g=0x0;g<b['table']['length'];g++){const h=b['table'][g];(!h['name']||h['name']['trim']()==='')&&(h['name']='data\x20entry\x20'+h['identifier'],c['push']({'diagnostic_code':'SH-03','description':'table['+g+']\x20fill\x20in\x20name','after':h['name'],'path':'/table/'+g+'/name'}));}for(let j=0x0;j<b['table']['length'];j++){const k=b['table'][j];if(!k['value_type']&&k['value']!==undefined&&k['value']!==null){const l=inferValueType(k['value']);l&&(k['value_type']=l,c['push']({'diagnostic_code':'SH-05','description':'table['+j+']\x20infer\x20value_type','after':l,'path':'/table/'+j+'/value_type'}));}}const d=new Map();let e=0x0;for(let m=0x0;m<b['table']['length'];m++){const n=b['table'][m];if(!d['has'](n['identifier']))d['set'](n['identifier'],e),n['identifier']!==e&&c['push']({'diagnostic_code':'G-007','description':'table['+m+']\x20identifier\x20'+n['identifier']+'\x20→\x20'+e,'before':String(n['identifier']),'after':String(e),'path':'/table/'+m+'/identifier'}),n['identifier']=e,e++;else{const o=n['identifier'];n['identifier']=e,d['set'](o,e),c['push']({'diagnostic_code':'G-007','description':'table['+m+']\x20identifier\x20'+o+'\x20duplicate\x20→\x20reallocated\x20to\x20'+e,'before':String(o),'after':String(e),'path':'/table/'+m+'/identifier'}),e++;}}for(let p=0x0;p<b['table']['length'];p++){const q=b['table'][p];q['b_submission']===undefined&&(q['b_submission']=![],c['push']({'diagnostic_code':'SH-10','description':'table['+p+']\x20b_submission\x20default\x20set\x20to\x20false','after':'false','path':'/table/'+p+'/b_submission'}));}if(b['rely']?.['guards']&&b['rely']['guards']['length']>0x0){const r=[...new Set(b['rely']['guards'])];r['length']!==b['rely']['guards']['length']&&(c['push']({'diagnostic_code':'G-009','description':'rely\x20deduplicate:\x20'+b['rely']['guards']['length']+'\x20→\x20'+r['length'],'before':JSON['stringify'](b['rely']['guards']),'after':JSON['stringify'](r),'path':'/rely/guards'}),b['rely']['guards']=r);}for(let s=0x0;s<b['table']['length'];s++){const t=b['table'][s];if(t['b_submission']===!![]&&t['value']!==undefined&&t['value']!==null){const u=JSON['stringify'](t['value']);delete t['value'],c['push']({'diagnostic_code':'SH-11','description':'table['+s+']\x20remove\x20redundant\x20value\x20on\x20b_submission=true\x20entry','before':u,'after':'(removed)','path':'/table/'+s+'/value'});}}return{'fixed':b,'actions':c};}export async function lintGuard(a,b){const c=b?.['auto_fix']??!![],{table:d,root:e,rely:f,binding_hint:g}=a,h=[];let i;const j=await checkSdkSyntax(a);h['push'](...j);const k=checkSemanticErrors(a);h['push'](...k);const l=checkSyntaxHints(a);h['push'](...l);let m,n=[];if(c){const {fixed:v,actions:w}=autoFixGuard(a);w['length']>0x0&&(m=v,n=w);}if(d['length']>0x0&&e){const x=g?findScene(g['host_object']??'',g['binding_field']??''):undefined,y=d['map'](z=>({'identifier':z['identifier'],'b_submission':z['b_submission']??![],'value_type':z['value_type']??'Address','value':z['value'],'name':z['name'],'object_type':z['object_type']}));i=assessGuardRisks({'table':y,'root':e,'rely':f,'scene':x,'sharing_recipients':g?.['sharing_recipients']});for(const z of i['risks']){const A=z['level']==='critical'||z['level']==='high'?'error':z['level']==='medium'?'warning':z['level']==='low'?'info':'hint',B=z['evidence']??'',C=B['startsWith']('/')?B:'/';h['push']({'code':z['id'],'message':'['+z['level']+']\x20'+z['title'],'severity':A,'source':'risk','location':{'path':C},'fix':{'description':z['mitigation'],'auto_fixable':![]}});}}const o=checkSuggestions(a);h['push'](...o);const p=h['filter'](D=>D['severity']==='error')['length'],q=h['filter'](D=>D['severity']==='warning')['length'],s=h['filter'](D=>D['severity']==='info'||D['severity']==='hint')['length'],t=p===0x0;let u;if(p>0x0)u='Fix\x20'+p+'\x20error(s)\x20and\x20re-run\x20lint';else q>0x0?u='Consider\x20addressing\x20'+q+'\x20warning(s),\x20then\x20submit\x20to\x20SDK\x20newGuard()\x20for\x20final\x20syntax\x20validation':u='lint\x20passed\x20(no\x20errors);\x20submit\x20to\x20SDK\x20newGuard()\x20for\x20final\x20syntax\x20validation\x20before\x20going\x20on-chain';return{'json_summary':{'table_count':d['length'],'root_type':e?.['type']??'unknown','has_rely':!!f?.['guards']?.['length'],'rely_count':f?.['guards']?.['length']??0x0,'has_description':!!a['description']},'diagnostics':h,'fixed_json':m,'fix_actions':n,'risk_assessment':i,'summary':{'errors':p,'warnings':q,'infos':s,'auto_fixes_applied':n['length'],'ready':t,'next_step':u}};}export async function isGuardReady(a){const b=await lintGuard(a,{'auto_fix':![]});return b['summary']['ready'];}export async function getGuardErrors(a){const b=await lintGuard(a,{'auto_fix':![]});return b['diagnostics']['filter'](c=>c['severity']==='error');}export function formatLintResult(a){const b=[];b['push']('===\x20Guard\x20JSON\x20Lint\x20Report\x20==='),b['push'](''),b['push']('Summary:'),b['push']('\x20\x20Errors:\x20\x20\x20\x20\x20'+a['summary']['errors']),b['push']('\x20\x20Warnings:\x20\x20\x20'+a['summary']['warnings']),b['push']('\x20\x20Infos:\x20\x20\x20\x20\x20\x20'+a['summary']['infos']),b['push']('\x20\x20Auto-fixes:\x20'+a['summary']['auto_fixes_applied']),b['push']('\x20\x20Ready:\x20\x20\x20\x20\x20\x20'+(a['summary']['ready']?'YES':'NO')),b['push']('\x20\x20Next\x20step:\x20\x20'+a['summary']['next_step']),b['push']('');if(a['fix_actions']['length']>0x0){b['push']('---\x20Auto-fix\x20Actions\x20---');for(const g of a['fix_actions']){b['push']('\x20\x20['+g['diagnostic_code']+']\x20'+g['description']),b['push']('\x20\x20\x20\x20Path:\x20'+g['path']),g['before']&&g['after']&&b['push']('\x20\x20\x20\x20'+g['before']+'\x20->\x20'+g['after']);}b['push']('');}const c=a['diagnostics']['filter'](h=>h['severity']==='error'),e=a['diagnostics']['filter'](h=>h['severity']==='warning'),f=a['diagnostics']['filter'](h=>h['severity']==='info'||h['severity']==='hint');if(c['length']>0x0){b['push']('---\x20Errors\x20(must\x20fix)\x20---');for(const h of c){b['push']('\x20\x20['+h['code']+']\x20('+h['source']+')\x20'+h['message']),b['push']('\x20\x20\x20\x20Path:\x20'+h['location']['path']);if(h['fix'])b['push']('\x20\x20\x20\x20Fix:\x20\x20'+h['fix']['description']);}b['push']('');}if(e['length']>0x0){b['push']('---\x20Warnings\x20(consider\x20fixing)\x20---');for(const i of e){b['push']('\x20\x20['+i['code']+']\x20('+i['source']+')\x20'+i['message']),b['push']('\x20\x20\x20\x20Path:\x20'+i['location']['path']);if(i['fix'])b['push']('\x20\x20\x20\x20Fix:\x20\x20'+i['fix']['description']);}b['push']('');}if(f['length']>0x0){b['push']('---\x20Info\x20&\x20Hints\x20---');for(const j of f){b['push']('\x20\x20['+j['code']+']\x20('+j['source']+')\x20'+j['message']),b['push']('\x20\x20\x20\x20Path:\x20'+j['location']['path']);}}return b['join']('\x0a');}