@wowok/agent-mcp 2.7.10 → 3.0.1

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 (334) hide show
  1. package/dist/communication/evidence.d.ts +6 -0
  2. package/dist/communication/evidence.js +1 -0
  3. package/dist/evaluation/acceptance.d.ts +24 -0
  4. package/dist/evaluation/acceptance.js +1 -0
  5. package/dist/evaluation/builtins/demand-match.d.ts +3 -2
  6. package/dist/evaluation/builtins/demand-match.js +1 -1
  7. package/dist/evaluation/builtins/service-risk.d.ts +2 -1
  8. package/dist/evaluation/builtins/service-risk.js +1 -1
  9. package/dist/evaluation/index.d.ts +1 -0
  10. package/dist/evaluation/index.js +1 -1
  11. package/dist/evaluation/match-operation.d.ts +14 -0
  12. package/dist/evaluation/match-operation.js +1 -0
  13. package/dist/experience/realtime-feedback.js +1 -1
  14. package/dist/extensions/capability-manifest.d.ts +1 -82
  15. package/dist/extensions/capability-manifest.js +1 -1
  16. package/dist/extensions/constraint-registry.d.ts +6 -4
  17. package/dist/extensions/constraint-registry.js +1 -1
  18. package/dist/extensions/index.d.ts +4 -5
  19. package/dist/extensions/index.js +1 -1
  20. package/dist/extensions/industry-pack.js +1 -1
  21. package/dist/extensions/metric-registry.d.ts +6 -4
  22. package/dist/extensions/metric-registry.js +1 -1
  23. package/dist/extensions/mode-evaluator.d.ts +2 -3
  24. package/dist/extensions/mode-evaluator.js +1 -1
  25. package/dist/extensions/modes.js +1 -1
  26. package/dist/extensions/registry.d.ts +3 -25
  27. package/dist/extensions/registry.js +1 -1
  28. package/dist/extensions/types.d.ts +0 -68
  29. package/dist/goal/GoalClassifier.js +1 -1
  30. package/dist/goal/GoalEngine.d.ts +44 -1
  31. package/dist/goal/GoalEngine.js +1 -1
  32. package/dist/goal/types.d.ts +5 -1
  33. package/dist/harness/auto-escalation.d.ts +0 -12
  34. package/dist/harness/auto-escalation.js +1 -1
  35. package/dist/harness/index.d.ts +1 -14
  36. package/dist/harness/index.js +1 -1
  37. package/dist/harness/types.d.ts +0 -38
  38. package/dist/keeper/KeeperScan.d.ts +39 -0
  39. package/dist/keeper/KeeperScan.js +1 -0
  40. package/dist/keeper/KeeperStore.d.ts +43 -0
  41. package/dist/keeper/KeeperStore.js +1 -0
  42. package/dist/keeper/detectors.d.ts +23 -0
  43. package/dist/keeper/detectors.js +1 -0
  44. package/dist/keeper/keeper.spec.d.ts +1 -0
  45. package/dist/keeper/keeper.spec.js +1 -0
  46. package/dist/keeper/types.d.ts +65 -0
  47. package/dist/keeper/types.js +1 -0
  48. package/dist/knowledge/account-marks.d.ts +1 -0
  49. package/dist/knowledge/account-marks.js +1 -1
  50. package/dist/knowledge/demand-risk.js +1 -1
  51. package/dist/knowledge/event-semantics.d.ts +3 -0
  52. package/dist/knowledge/event-semantics.js +1 -1
  53. package/dist/knowledge/event-semantics.spec.d.ts +1 -0
  54. package/dist/knowledge/event-semantics.spec.js +1 -0
  55. package/dist/knowledge/evidence-review.d.ts +23 -0
  56. package/dist/knowledge/evidence-review.js +1 -1
  57. package/dist/knowledge/examples-scanner-cli.js +1 -1
  58. package/dist/knowledge/examples-scanner.js +1 -1
  59. package/dist/knowledge/fund-layer.d.ts +13 -9
  60. package/dist/knowledge/fund-layer.js +1 -1
  61. package/dist/knowledge/goal-completion.js +1 -1
  62. package/dist/knowledge/guard-bindings.d.ts +21 -0
  63. package/dist/knowledge/guard-bindings.js +1 -0
  64. package/dist/knowledge/guard-bytecode-spec.d.ts +82 -0
  65. package/dist/knowledge/guard-bytecode-spec.js +1 -0
  66. package/dist/knowledge/guard-design-patterns.d.ts +1 -1
  67. package/dist/knowledge/guard-design-patterns.js +1 -1
  68. package/dist/knowledge/index.d.ts +13 -7
  69. package/dist/knowledge/index.js +1 -1
  70. package/dist/knowledge/industry-registry.js +1 -1
  71. package/dist/knowledge/mcp-schema-audit-cli.js +1 -1
  72. package/dist/knowledge/mcp-schema-audit.js +1 -1
  73. package/dist/knowledge/reward-risk.d.ts +1 -1
  74. package/dist/knowledge/reward-risk.js +1 -1
  75. package/dist/knowledge/safety-rules.d.ts +2 -1
  76. package/dist/knowledge/safety-rules.js +1 -1
  77. package/dist/knowledge/scenario-modes.d.ts +1 -1
  78. package/dist/knowledge/scenario-modes.js +1 -1
  79. package/dist/knowledge/scenario-topology.d.ts +43 -0
  80. package/dist/knowledge/scenario-topology.js +1 -0
  81. package/dist/knowledge/supply-chain.js +1 -1
  82. package/dist/knowledge/template-registry.js +1 -1
  83. package/dist/knowledge/tools-reference.js +1 -1
  84. package/dist/knowledge/workflow-guidance.d.ts +55 -0
  85. package/dist/knowledge/workflow-guidance.js +1 -1
  86. package/dist/knowledge/workspace-lists.d.ts +1 -0
  87. package/dist/knowledge/workspace-lists.js +1 -1
  88. package/dist/monitor/MonitorLoop.d.ts +3 -0
  89. package/dist/monitor/MonitorLoop.js +1 -1
  90. package/dist/monitor/ScopeResolver.js +1 -1
  91. package/dist/monitor/SuggestionBridge.d.ts +38 -0
  92. package/dist/monitor/SuggestionBridge.js +1 -0
  93. package/dist/monitor/SuggestionBridge.spec.d.ts +1 -0
  94. package/dist/monitor/SuggestionBridge.spec.js +1 -0
  95. package/dist/monitor/types.d.ts +0 -1
  96. package/dist/monitor/types.js +1 -1
  97. package/dist/participation/arbitrator-interest.d.ts +20 -0
  98. package/dist/participation/arbitrator-interest.js +1 -0
  99. package/dist/participation/demander-interest.d.ts +23 -0
  100. package/dist/participation/demander-interest.js +1 -0
  101. package/dist/participation/employee-kpi.d.ts +12 -0
  102. package/dist/participation/employee-kpi.js +1 -1
  103. package/dist/participation/employee-kpi.spec.d.ts +1 -0
  104. package/dist/participation/employee-kpi.spec.js +1 -0
  105. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  106. package/dist/playbooks/service-build/context-assembly.js +1 -1
  107. package/dist/playbooks/service-build/machine-nodes.js +1 -1
  108. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  109. package/dist/playbooks/service-build/merchant-guide.d.ts +20 -0
  110. package/dist/playbooks/service-build/merchant-guide.js +1 -1
  111. package/dist/playbooks/service-build/mode-actions.d.ts +30 -12
  112. package/dist/playbooks/service-build/mode-actions.js +1 -1
  113. package/dist/playbooks/service-build/object-panorama.js +1 -1
  114. package/dist/playbooks/service-build/participation-radar.js +1 -1
  115. package/dist/playbooks/service-build/relationship-profile.d.ts +2 -0
  116. package/dist/playbooks/service-build/relationship-profile.js +1 -0
  117. package/dist/playbooks/service-build/semantic-graph.d.ts +5 -1
  118. package/dist/playbooks/service-build/semantic-graph.js +1 -1
  119. package/dist/playbooks/service-build/service-panorama.js +1 -1
  120. package/dist/relationship/derivation.d.ts +94 -0
  121. package/dist/relationship/derivation.js +1 -0
  122. package/dist/relationship/derivation.spec.d.ts +1 -0
  123. package/dist/relationship/derivation.spec.js +1 -0
  124. package/dist/relationship/incentive.d.ts +38 -0
  125. package/dist/relationship/incentive.js +1 -0
  126. package/dist/relationship/index.d.ts +4 -0
  127. package/dist/relationship/index.js +1 -0
  128. package/dist/relationship/registry.d.ts +13 -0
  129. package/dist/relationship/registry.js +1 -0
  130. package/dist/relationship/types.d.ts +45 -0
  131. package/dist/relationship/types.js +1 -0
  132. package/dist/review/progress.js +1 -1
  133. package/dist/role/index.d.ts +2 -2
  134. package/dist/role/index.js +1 -1
  135. package/dist/role/model.d.ts +2 -1
  136. package/dist/role/model.js +1 -1
  137. package/dist/role/types.d.ts +5 -0
  138. package/dist/rules.d.ts +1 -1
  139. package/dist/safety/confirm-gate.js +1 -1
  140. package/dist/safety/preview.js +1 -1
  141. package/dist/schema/call/bridge.d.ts +25 -3
  142. package/dist/schema/call/bridge.js +1 -1
  143. package/dist/schema/call/semantic.js +1 -1
  144. package/dist/schema/common/index.js +1 -1
  145. package/dist/schema/employee/index.d.ts +61 -1
  146. package/dist/schema/employee/index.js +1 -1
  147. package/dist/schema/evaluation/index.d.ts +70 -5
  148. package/dist/schema/evaluation/index.js +1 -1
  149. package/dist/schema/goal/index.d.ts +40 -14
  150. package/dist/schema/goal/index.js +1 -1
  151. package/dist/schema/goal/planning.d.ts +6 -6
  152. package/dist/schema/index.d.ts +1 -0
  153. package/dist/schema/index.js +1 -1
  154. package/dist/schema/industry-pack/index.d.ts +59 -7
  155. package/dist/schema/industry-pack/index.js +1 -1
  156. package/dist/schema/industry-pack/modes.d.ts +59 -7
  157. package/dist/schema/industry-pack/modes.js +1 -1
  158. package/dist/schema/intent-radar/index.d.ts +19 -19
  159. package/dist/schema/keeper/index.d.ts +475 -0
  160. package/dist/schema/keeper/index.js +1 -0
  161. package/dist/schema/local/index.d.ts +11 -0
  162. package/dist/schema/local/index.js +1 -1
  163. package/dist/schema/messenger/index.d.ts +2 -0
  164. package/dist/schema/messenger/index.js +1 -1
  165. package/dist/schema/operations.d.ts +64 -16
  166. package/dist/schema/persona/index.d.ts +1 -1
  167. package/dist/schema/query/bi.d.ts +244 -16
  168. package/dist/schema/query/bi.js +1 -1
  169. package/dist/schema/query/index.d.ts +2 -2
  170. package/dist/schema/schema-query/index.d.ts +2 -11
  171. package/dist/schema/schema-query/index.js +1 -1
  172. package/dist/schema/schema-version.js +1 -1
  173. package/dist/schema/utils/skills-recommendation.js +1 -1
  174. package/dist/schema/watch/index.d.ts +4 -0
  175. package/dist/schema/watch/index.js +1 -1
  176. package/dist/schema-query-impl/index.d.ts +33 -14
  177. package/dist/schema-query-impl/index.js +1 -1
  178. package/dist/schemas/account_operation.output.json +29 -0
  179. package/dist/schemas/account_operation.schema.json +6 -2
  180. package/dist/schemas/bridge_operation.output.json +24 -1
  181. package/dist/schemas/bridge_operation.schema.json +73 -1
  182. package/dist/schemas/employee_operation.output.json +100 -0
  183. package/dist/schemas/employee_operation.schema.json +148 -5
  184. package/dist/schemas/evaluation_operation.output.json +135 -9
  185. package/dist/schemas/evaluation_operation.schema.json +176 -7
  186. package/dist/schemas/goal_operation.schema.json +76 -0
  187. package/dist/schemas/index.json +7 -1
  188. package/dist/schemas/industry_pack_operation.output.json +172 -27
  189. package/dist/schemas/industry_pack_operation.schema.json +19 -0
  190. package/dist/schemas/keeper_operation.output.json +1274 -0
  191. package/dist/schemas/keeper_operation.schema.json +359 -0
  192. package/dist/schemas/messenger_operation.schema.json +8 -0
  193. package/dist/schemas/onchain_events.output.json +1 -1
  194. package/dist/schemas/onchain_operations.schema.json +41 -41
  195. package/dist/schemas/onchain_operations_allocation.schema.json +4 -4
  196. package/dist/schemas/onchain_operations_arbitration.schema.json +3 -3
  197. package/dist/schemas/onchain_operations_contact.schema.json +2 -2
  198. package/dist/schemas/onchain_operations_demand.schema.json +2 -2
  199. package/dist/schemas/onchain_operations_machine.schema.json +2 -2
  200. package/dist/schemas/onchain_operations_order.schema.json +2 -2
  201. package/dist/schemas/onchain_operations_payment.schema.json +1 -1
  202. package/dist/schemas/onchain_operations_permission.schema.json +2 -2
  203. package/dist/schemas/onchain_operations_progress.schema.json +2 -2
  204. package/dist/schemas/onchain_operations_repository.schema.json +2 -2
  205. package/dist/schemas/onchain_operations_reward.schema.json +6 -6
  206. package/dist/schemas/onchain_operations_service.schema.json +7 -7
  207. package/dist/schemas/onchain_operations_treasury.schema.json +6 -6
  208. package/dist/schemas/onchain_table_data.output.json +71 -0
  209. package/dist/schemas/query_toolkit.output.json +485 -7
  210. package/dist/schemas/query_toolkit.schema.json +71 -0
  211. package/dist/schemas/schema_query.output.json +1 -64
  212. package/dist/schemas/schema_query.schema.json +18 -3
  213. package/dist/schemas/watch_operation.output.json +21 -1
  214. package/dist/task/ProcessStore.d.ts +18 -1
  215. package/dist/task/ProcessStore.js +1 -1
  216. package/dist/task/playbook.js +1 -1
  217. package/dist/task/types.d.ts +24 -0
  218. package/dist/tools/handlers/bridge.js +1 -1
  219. package/dist/tools/handlers/config.js +1 -1
  220. package/dist/tools/handlers/employee.d.ts +6 -0
  221. package/dist/tools/handlers/employee.js +1 -1
  222. package/dist/tools/handlers/employee.spec.d.ts +1 -0
  223. package/dist/tools/handlers/employee.spec.js +1 -0
  224. package/dist/tools/handlers/evaluation.js +1 -1
  225. package/dist/tools/handlers/evaluation.spec.d.ts +1 -0
  226. package/dist/tools/handlers/evaluation.spec.js +1 -0
  227. package/dist/tools/handlers/goal.js +1 -1
  228. package/dist/tools/handlers/industry-pack.js +1 -1
  229. package/dist/tools/handlers/keeper.d.ts +12 -0
  230. package/dist/tools/handlers/keeper.js +1 -0
  231. package/dist/tools/handlers/local.d.ts +4 -3
  232. package/dist/tools/handlers/local.js +1 -1
  233. package/dist/tools/handlers/messenger.js +1 -1
  234. package/dist/tools/handlers/onchain.js +1 -1
  235. package/dist/tools/handlers/permission.js +1 -1
  236. package/dist/tools/handlers/query.js +1 -1
  237. package/dist/tools/handlers/schema-query.js +1 -1
  238. package/dist/tools/handlers/watch.js +1 -1
  239. package/dist/tools/handlers/workflow.js +1 -1
  240. package/dist/tools/index.js +1 -1
  241. package/dist/tools/registry/agent.d.ts +2 -0
  242. package/dist/tools/registry/agent.js +1 -0
  243. package/dist/tools/registry/bridge.d.ts +2 -0
  244. package/dist/tools/registry/bridge.js +1 -0
  245. package/dist/tools/registry/business.d.ts +2 -0
  246. package/dist/tools/registry/business.js +1 -0
  247. package/dist/tools/registry/config.d.ts +2 -0
  248. package/dist/tools/registry/config.js +1 -0
  249. package/dist/tools/registry/files.d.ts +2 -0
  250. package/dist/tools/registry/files.js +1 -0
  251. package/dist/tools/registry/identity.d.ts +2 -0
  252. package/dist/tools/registry/identity.js +1 -0
  253. package/dist/tools/registry/local.d.ts +2 -0
  254. package/dist/tools/registry/local.js +1 -0
  255. package/dist/tools/registry/messenger.d.ts +2 -0
  256. package/dist/tools/registry/messenger.js +1 -0
  257. package/dist/tools/registry/monitor.d.ts +2 -0
  258. package/dist/tools/registry/monitor.js +1 -0
  259. package/dist/tools/registry/onchain.d.ts +2 -0
  260. package/dist/tools/registry/onchain.js +1 -0
  261. package/dist/tools/registry/query.d.ts +2 -0
  262. package/dist/tools/registry/query.js +1 -0
  263. package/dist/tools/registry/trust.d.ts +2 -0
  264. package/dist/tools/registry/trust.js +1 -0
  265. package/dist/tools/rules-hook.d.ts +1 -0
  266. package/dist/tools/rules-hook.js +1 -1
  267. package/dist/tools/shared.js +1 -1
  268. package/dist/tools/wrap.js +1 -1
  269. package/package.json +2 -2
  270. package/dist/examples/arbitration-dispute-create.json +0 -41
  271. package/dist/examples/arbitration-vote-weighted.json +0 -35
  272. package/dist/examples/arbitration-voting-guard-add.json +0 -38
  273. package/dist/examples/demand-present-service.json +0 -33
  274. package/dist/examples/education-contact-create.json +0 -40
  275. package/dist/examples/freelance-contact-create.json +0 -40
  276. package/dist/examples/gen-passport-verify-guard.json +0 -48
  277. package/dist/examples/guard-template-balance-check.json +0 -59
  278. package/dist/examples/guard-template-time-lock.json +0 -60
  279. package/dist/examples/insurance-guard-claim-timelock.json +0 -75
  280. package/dist/examples/insurance-guard-withdraw-allocation.json +0 -96
  281. package/dist/examples/insurance-machine-create.json +0 -75
  282. package/dist/examples/insurance-service-allocators.json +0 -55
  283. package/dist/examples/machine-multisig-threshold.json +0 -87
  284. package/dist/examples/machine-publish.json +0 -30
  285. package/dist/examples/machine-template-7node-rental.json +0 -119
  286. package/dist/examples/payment-scenario-bound.json +0 -45
  287. package/dist/examples/rental-ziroom-machine-create.json +0 -148
  288. package/dist/examples/rental-ziroom-permission-create.json +0 -41
  289. package/dist/examples/rental-ziroom-service-create.json +0 -36
  290. package/dist/examples/retail-adv-guard-customer-win-create.json +0 -80
  291. package/dist/examples/retail-adv-guard-messenger-proof-create.json +0 -65
  292. package/dist/examples/retail-adv-guard-reward-timeout-create.json +0 -92
  293. package/dist/examples/retail-adv-reward-guard-add.json +0 -51
  294. package/dist/examples/retail-myshop-allocation-activate.json +0 -55
  295. package/dist/examples/retail-myshop-arbitration-create.json +0 -40
  296. package/dist/examples/retail-myshop-contact-create.json +0 -43
  297. package/dist/examples/retail-myshop-order-create.json +0 -56
  298. package/dist/examples/retail-myshop-progress-operate.json +0 -38
  299. package/dist/examples/retail-myshop-reward-create.json +0 -35
  300. package/dist/examples/retail-myshop-service-create.json +0 -38
  301. package/dist/examples/retail-myshop-service-customer-required.json +0 -31
  302. package/dist/examples/service-discount-issue.json +0 -46
  303. package/dist/examples/subscription-contact-create.json +0 -40
  304. package/dist/examples/threebody-guard-create.json +0 -56
  305. package/dist/examples/threebody-machine-create.json +0 -71
  306. package/dist/examples/threebody-permission-create.json +0 -38
  307. package/dist/examples/threebody-service-allocators.json +0 -48
  308. package/dist/examples/travel-guard-time-lock.json +0 -69
  309. package/dist/examples/travel-guard-weather-oracle.json +0 -70
  310. package/dist/examples/travel-machine-create.json +0 -135
  311. package/dist/examples/travel-repository-create.json +0 -47
  312. package/dist/examples/travel-service-create.json +0 -34
  313. package/dist/examples/travel-treasury-create.json +0 -34
  314. package/dist/examples/treasury-deposit.json +0 -37
  315. package/dist/examples/treasury-withdraw.json +0 -38
  316. package/dist/harness/plan.d.ts +0 -33
  317. package/dist/harness/plan.js +0 -1
  318. package/dist/knowledge/demand-matching.d.ts +0 -29
  319. package/dist/knowledge/demand-matching.js +0 -1
  320. package/dist/knowledge/guard-context.d.ts +0 -56
  321. package/dist/knowledge/guard-context.js +0 -1
  322. package/dist/knowledge/guard-migration.d.ts +0 -48
  323. package/dist/knowledge/guard-migration.js +0 -1
  324. package/dist/mode-market/index.d.ts +0 -3
  325. package/dist/mode-market/index.js +0 -1
  326. package/dist/mode-market/registry.d.ts +0 -53
  327. package/dist/mode-market/registry.js +0 -1
  328. package/dist/mode-market/review.d.ts +0 -27
  329. package/dist/mode-market/review.js +0 -1
  330. package/dist/mode-market/submission.d.ts +0 -25
  331. package/dist/mode-market/submission.js +0 -1
  332. package/dist/schemas/guard-node-schema.json +0 -1000
  333. package/dist/task/stage-gate.d.ts +0 -22
  334. package/dist/task/stage-gate.js +0 -1
@@ -1 +1 @@
1
- import{strictParse}from'../../schema/index.js';import{EvaluationOperationInputSchema}from'../../schema/evaluation/index.js';import{evaluateArbGame}from'../../evaluation/arbitration-game.js';import{evaluateNodeGame}from'../../evaluation/node-game.js';import{evaluatePathReasoning}from'../../evaluation/path-reasoning.js';import{assessEvidenceReview}from'../../knowledge/evidence-review.js';import{expandSearchScope,inferSensitivity,rankByLocation}from'../../evaluation/location-match.js';import{query_objects,ArbStatus}from'@wowok/wowok';import{enumerateServices,enumerateDemands,enumerateArbs}from'../../knowledge/jsonrpc-enum.js';import{fetchObjectLinkerCore}from'../../knowledge/index.js';import{summarizeCapabilityGaps}from'../../evaluation/gap.js';import{composeServicesForDemand}from'../../evaluation/composer.js';import{matchDemandToServices,matchServiceToDemands}from'../../evaluation/builtins/demand-match.js';import{extractDemandCapability}from'../../evaluation/extract.js';import{assessServiceRisk}from'../../evaluation/builtins/service-risk.js';import{assessArbitration}from'../../evaluation/builtins/arbitration-score.js';import{resolveCategoryMatchRules,toSoftWeightInjection,applyHardConstraints}from'../../evaluation/category-match-rules.js';import{computeMarketMetrics,computeOrderFlow}from'../../knowledge/market-metrics.js';import{assessAntiCheat}from'../../knowledge/anti-cheat.js';import{computeJourneyFunnel,attributeReferrals,buildCustomerRelationships}from'../../knowledge/market-operations.js';import{suggestPricing}from'../../knowledge/dynamic-pricing.js';import{runAccountEventWatchers}from'../../customer/account-events.js';import{registerBuiltinEvaluations}from'../../evaluation/builtins/index.js';import{getEffectivePersona,mergeInjections}from'../../persona/index.js';import{buildUserInjection}from'../../evaluation/injection.js';registerBuiltinEvaluations();function arbCaseFromObject(b){const c=typeof b['time']==='number'?b['time']:Number(b['time']??0x0);return{'status':b['status'],'time':Number['isFinite'](c)?c:undefined,'resolved_time':typeof b['indemnity']?.['time']==='number'?b['indemnity']['time']:b['compensation_time']??undefined,'indemnity_amount':b['indemnity']?.['amount'],'objected':b['status']===ArbStatus['Objectionable']||b['objection']!=null&&b['objection']['length']>0x0};}async function arbCasesWithRoles(a,b){const c=a['map'](arbCaseFromObject),d=Array['from'](new Set(a['map'](j=>j['order'])['filter'](Boolean))),e=new Map(),f=[];if(d['length']>0x0){const j=await query_objects({'objects':d,'network':b});for(const k of j['objects']??[]){const l=k;if(!l?.['object'])continue;e['set'](l['object'],l);if(l['service'])f['push'](l['service']);}}const g=new Map(),h=Array['from'](new Set(f));if(h['length']>0x0){const m=await query_objects({'objects':h,'network':b});for(const n of m['objects']??[]){const p=n;if(p?.['object'])g['set'](p['object'],p);}}for(let q=0x0;q<a['length'];q++){const r=e['get'](a[q]['order']);if(!r)continue;c[q]['customer']=r['builder']||undefined;const t=g['get'](r['service']);if(t)c[q]['merchant']=t['permission']||undefined;}return c;}function capabilityFromInput(a){return{'id':a['id'],'kind':a['kind'],'owner':a['owner']??'','industry':a['industry'],'industry_confidence':a['industry_confidence']??0x0,'region':a['region'],'price_min':a['price_min']!==undefined?BigInt(a['price_min']):undefined,'price_max':a['price_max']!==undefined?BigInt(a['price_max']):undefined,'token_type':a['token_type']??'','ticket_size':a['ticket_size']??'medium','trust_score':a['trust_score']??0x32,'reputation_like_ratio':a['reputation_like_ratio']??0x1,'arbitration_independent':a['arbitration_independent']??![],'merchant_history_count':a['merchant_history_count']??0x0,'capabilities':a['capabilities'],'tags':a['tags']??[],'keywords':a['keywords']??[]};}function puzzleRawFromInput(a){return{'service':{...a['service'],'priceRaw':a['service']['priceRaw']!==undefined?BigInt(a['service']['priceRaw']):undefined,'compensation_fund':a['service']['compensation_fund']?{'balance':a['service']['compensation_fund']['balance']!==undefined?BigInt(a['service']['compensation_fund']['balance']):undefined}:undefined},'machine_nodes':a['machine_nodes'],'machine_published':a['machine_published'],'machine_paused':a['machine_paused'],'reviews':a['reviews'],'events':a['events'],'similar_services':a['similar_services']?.['map'](b=>({'price':BigInt(b['price'])})),'order_amount':a['order_amount']!==undefined?BigInt(a['order_amount']):undefined,'trust_score':a['trust_score'],'arbitration_owner':a['arbitration_owner'],'service_owner':a['service_owner'],'wip_verified':a['wip_verified'],'order_history':a['order_history'],'merchant_reputation':a['merchant_reputation']};}async function resolveInjection(a,b){return mergeInjections(await buildUserInjection(a),b);}function serviceSummaryToExtract(a){const b=a['json']??{},c=f=>typeof f==='string'?f:undefined,d=f=>typeof f==='string'?f:null,e=Array['isArray'](b['sales'])?b['sales']['map'](f=>({'name':typeof f?.['name']==='string'?f['name']:undefined,'price':typeof f?.['price']==='string'?f['price']:f?.['price']!=null?String(f['price']):'0','wip_hash':typeof f?.['wip_hash']==='string'?f['wip_hash']:undefined})):[];return{'object':a['object'],'description':c(b['description'])??'','location':a['location']??c(b['location'])??'','sales':e,'arbitrations':Array['isArray'](b['arbitrations'])?b['arbitrations']['map'](String):[],'compensation_fund':c(b['compensation_fund']),'buy_guard':d(b['buy_guard']),'machine':d(b['machine']),'um':d(b['um']),'bPublished':b['bPublished']===!![],'bPaused':b['bPaused']===!![]};}export async function handleEvaluationOperation(a){const b=strictParse(EvaluationOperationInputSchema,a,'evaluation_operation\x20input');let c;switch(b['action']){case'arb_game':{const e=b['account']?await getEffectivePersona(b['account']):null,f=b['appetite']??e?.['layer']['preferences']?.['risk_appetite'],g=b['requirements']??e?.['layer']['requirements'];c={'action':'arb_game',...evaluateArbGame(b['status'],b['perspective'],{'risk_appetite':f,'requirements':g})};break;}case'node_game':{const h=b['account']?await getEffectivePersona(b['account']):null,i=b['appetite']??h?.['layer']['preferences']?.['risk_appetite'],j=b['requirements']??h?.['layer']['requirements'];c={'action':'node_game',...evaluateNodeGame({'current_node':b['current_node'],'perspective':b['perspective'],'appetite':i,'requirements':j,'threshold':b['threshold'],'allocation':b['allocation'],'order_amount':b['order_amount'],'compensation_fund':b['compensation_fund'],'operable':b['operable'],'waiting_on':b['waiting_on']??[]})};break;}case'capability_gap':{c={'action':'capability_gap','report':summarizeCapabilityGaps(capabilityFromInput(b['demand']),capabilityFromInput(b['service']))};break;}case'compose_service':{c={'action':'compose_service','plan':composeServicesForDemand(capabilityFromInput(b['demand']),b['services']['map'](capabilityFromInput))};break;}case'demand_match':{c={'action':'demand_match','matches':await matchDemandToServices(capabilityFromInput(b['demand_cap']),b['services'],await resolveInjection(b['account'],b['injection']))};break;}case'service_match':{c={'action':'service_match','matches':await matchServiceToDemands(capabilityFromInput(b['service_cap']),b['demands'],await resolveInjection(b['account'],b['injection']))};break;}case'service_risk':{c={'action':'service_risk','result':await assessServiceRisk(b['service_id'],puzzleRawFromInput(b['puzzle_raw']),await resolveInjection(b['account'],b['injection']),b['depth']??'preorder')};break;}case'path_reasoning':{const k=b['account']?await getEffectivePersona(b['account']):null,l=b['appetite']??k?.['layer']['preferences']?.['risk_appetite'],m=b['requirements']??k?.['layer']['requirements'];c={'action':'path_reasoning',...evaluatePathReasoning({'current_node':b['current_node'],'perspective':b['perspective'],'machine_nodes':b['machine_nodes'],'node_annotations':b['node_annotations'],'appetite':l,'requirements':m,'order_amount':b['order_amount'],'max_depth':b['max_depth']})};break;}case'evidence_review':{c={'action':'evidence_review','review':assessEvidenceReview({'kind':b['kind'],'hash_committed':b['hash_committed'],'digital_check_passed':b['digital_check_passed'],'contradiction':b['contradiction']})};break;}case'discover_services':{const n=!b['sensitivity']?inferSensitivity(b['description']??''):null,o=b['sensitivity']??n['sensitivity'],p=n?.['signals']??[],q=b['context_network']??'testnet',r={'raw':b['location'],...b['region']??{}},s=expandSearchScope(o,r),t=await enumerateServices(q,{'max_objects':b['max_objects'],'no_cache':b['no_cache'],'location_any':s['search_terms']}),u=rankByLocation(o,r,t['services']['map'](v=>({'id':v['object'],'name':v['name'],'location':v['location']})));c={'action':'discover_services','sensitivity':o,'inference_signals':p,'services':u['map'](v=>{const w=t['services']['find'](x=>x['object']===v['id']);return{'object':v['id'],'name':w?.['name'],'location':w?.['location'],'relation':v['relation'],'satisfied':v['satisfied'],'score':v['score'],'reason':v['reason']};}),'total_enumerated':t['total_enumerated'],'has_more':t['has_more'],'scope_advice':{'search_terms':s['search_terms'],'ai_enrichment_note':s['ai_enrichment_note']}};break;}case'discover_demands':{const v=b['context_network']??'testnet',w=await enumerateDemands(v,{'max_objects':b['max_objects'],'no_cache':b['no_cache']}),x=b['location']?.['toLowerCase'](),y=w['demands']['filter'](z=>!x||(z['location']??'')['toLowerCase']()['includes'](x))['map'](z=>({'object':z['object'],'description':z['description']??'','location':z['location']??'','presenters_count':z['presenters_count']??0x0,'permission':z['permission']??''}));c={'action':'discover_demands','demands':y,'total_enumerated':w['total_enumerated'],'has_more':w['has_more']};break;}case'demand_present':{const z=b['context_network']??'testnet',A=await enumerateDemands(z,{'max_objects':b['max_objects'],'no_cache':b['no_cache']}),B=b['location']?.['toLowerCase'](),C=A['demands']['filter'](G=>!B||(G['location']??'')['toLowerCase']()['includes'](B)),D=new Map(C['map'](G=>[G['object'],(G['guards']?.['length']??0x0)>0x0])),E=C['map'](G=>({'object':G['object'],'description':G['description']??'','location':G['location']??'','rewards':G['rewards']??[],'um':G['um']??null})),F=await matchServiceToDemands(capabilityFromInput(b['service_cap']),E,await resolveInjection(b['account'],b['injection']),b['limit']??0x5);c={'action':'demand_present','matches':F['map'](G=>{const H=D['get'](G['demand']['object'])??![];return{'demand':G['demand'],'result':G['result'],'present':{'operation':H?'demand.present_service_with_passport':'demand.present_service','guard_required':H}};}),'total_enumerated':A['total_enumerated'],'has_more':A['has_more']};break;}case'market_metrics':{const G=b['context_network']??'testnet',H=await computeMarketMetrics(G,b['no_cache']),I=await computeOrderFlow(G,b['limit'],b['no_cache']);c={'action':'market_metrics',...H,'order_flow':I};break;}case'anti_cheat':{const J=assessAntiCheat({'service':{'object':b['service']['object'],'arbitrations':b['service']['arbitrations'],'compensation_fund':b['service']['compensation_fund'],'machine':b['service']['machine'],'bPublished':b['service']['bPublished']},'orders':b['orders'],'reviews':b['reviews']});c={'action':'anti_cheat','signals':J};break;}case'market_operations':{if(b['op']==='journey_funnel')c={'action':'market_operations','result':computeJourneyFunnel({'due_diligence':b['due_diligence']??0x0,'orders':b['orders']??0x0,'completed':b['completed']??0x0,'reviews':b['reviews']??0x0})};else{if(b['op']==='referral_attribution')c={'action':'market_operations','result':attributeReferrals(b['referral_orders']??[])};else{if(b['op']==='dynamic_pricing'){const K=b['market_signals'];if(!K)throw new Error('dynamic_pricing\x20op\x20requires\x20market_signals');c={'action':'market_operations','result':suggestPricing({'supplyCount':K['supplyCount'],'demandCount':K['demandCount'],'avgPrice':K['avgPrice'],'myPrice':K['myPrice'],'competitorPrices':K['competitorPrices'],'recentOrderCount':K['recentOrderCount'],'repeatCustomerRate':K['repeatCustomerRate']})};}else c={'action':'market_operations','result':buildCustomerRelationships(b['customer_orders']??[])};}}break;}case'match_discover':{const L=!b['sensitivity']?inferSensitivity(b['description']??''):null,M=b['sensitivity']??L['sensitivity'],N=L?.['signals']??[],O=b['context_network']??'testnet',P={'raw':b['location'],...b['region']??{}},Q=expandSearchScope(M,P),R=await enumerateServices(O,{'max_objects':b['max_objects'],'no_cache':b['no_cache'],'location_any':Q['search_terms']}),S=new Set(b['required_capabilities']??[]),T=extractDemandCapability({'object':'intent','description':b['description'],'location':b['location'],'owner':b['account']},{'price_max':b['budget']!==undefined?BigInt(b['budget']):undefined,'capabilities':{'has_arbitration':S['has']('has_arbitration'),'has_refund_path':S['has']('has_refund_path'),'has_milestone_nodes':S['has']('has_milestone_nodes'),'has_compensation_fund':S['has']('has_compensation_fund'),'has_wip_verification':S['has']('has_wip_verification'),'has_messenger':S['has']('has_messenger'),'has_buy_guard':S['has']('has_buy_guard'),'has_dynamic_pricing':S['has']('has_dynamic_pricing'),'is_published':!![],'is_paused':![]}}),U=rankByLocation(M,P,R['services']['map'](a5=>({'id':a5['object'],'name':a5['name'],'location':a5['location']}))),V=U['filter'](a5=>a5['satisfied']),W=R['services']['filter'](a5=>V['some'](a6=>a6['id']===a5['object']))['map'](serviceSummaryToExtract),X=resolveCategoryMatchRules(b['category']);let Y=W;const Z=[];if(X){const a5=applyHardConstraints(X,W);Y=a5['passed'];for(const a6 of a5['dropped']){Z['push']({'object':a6['candidate']['object'],'reason':a6['constraint']['description']});}}let a0=await resolveInjection(b['account'],b['injection']);X&&(a0=mergeInjections(a0,toSoftWeightInjection(X)));const a1=await matchDemandToServices(T,Y,a0,Y['length']),a2=new Map(a1['map'](a7=>[a7['service']['object'],a7['result']])),a3=new Set(Y['map'](a7=>a7['object'])),a4=V['filter'](a7=>a3['has'](a7['id']))['map'](a7=>{const a8=R['services']['find'](a9=>a9['object']===a7['id']);return{'service':serviceSummaryToExtract(a8),'location':{'relation':a7['relation'],'satisfied':a7['satisfied'],'score':a7['score'],'reason':a7['reason']},'result':a2['get'](a7['id'])};});c={'action':'match_discover','sensitivity':M,'inference_signals':N,'matches':a4,'total_enumerated':R['total_enumerated'],'has_more':R['has_more'],'scope_advice':{'search_terms':Q['search_terms'],'ai_enrichment_note':Q['ai_enrichment_note']}};break;}case'arbitration_score':{let a7=b['history'];const a8=b['context_network']??'testnet';if((!a7||a7['length']===0x0)&&b['arbitration']['object'])try{const aa=await enumerateArbs(a8,{'arbitration':b['arbitration']['object']});a7=await arbCasesWithRoles(aa['arbs'],a8);}catch{a7=b['history'];}if((!a7||a7['length']===0x0)&&b['arbitration']['object'])try{const ab=await query_objects({'objects':[b['arbitration']['object']],'network':a8}),ac=ab?.['objects']?.[0x0];if(ac?.['permission']){const ad=await fetchObjectLinkerCore(ac['permission'],a8),ae=(ad?.['items']??[])['map'](ag=>ag['who'])['filter'](ag=>ag!==b['arbitration']['object']),af=[];for(const ag of ae['slice'](0x0,0xa)){const ah=await enumerateArbs(a8,{'arbitration':ag})['catch'](()=>undefined);ah?.['arbs']?.['length']&&af['push'](...await arbCasesWithRoles(ah['arbs'],a8));}if(af['length']>0x0)a7=af;}}catch{}const a9=await assessArbitration({'arbitration':{'object':b['arbitration']['object'],'fee':b['arbitration']['fee'],'balance':b['arbitration']['balance'],'voting_guard_count':b['arbitration']['voting_guard_count'],'bPaused':b['arbitration']['bPaused'],'location':b['arbitration']['location'],'has_verified_identity':b['arbitration']['has_verified_identity']},'history':a7,'entity_votes':b['entity_votes'],'fee_median':b['fee_median']},await resolveInjection(b['account'],b['injection']));c={'action':'arbitration_score',...a9};break;}case'account_events':{const ai=await runAccountEventWatchers({'account':b['account'],'network':b['context_network']??'testnet','reviews':b['reviews']?.['map'](aj=>({'reviewer':aj['reviewer'],'rating':aj['rating'],'tags':aj['tags'],'comment':aj['comment'],'orderRef':aj['orderRef'],'timestamp':aj['timestamp'],'verified':aj['verified']??![]})),'order_history':b['order_history']},b['categories']);c={'action':'account_events','events':ai};break;}default:throw new Error('Unknown\x20evaluation_operation\x20action');}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c}};}
1
+ import{strictParse}from'../../schema/index.js';import{EvaluationOperationInputSchema}from'../../schema/evaluation/index.js';import{evaluateArbGame}from'../../evaluation/arbitration-game.js';import{evaluateNodeGame}from'../../evaluation/node-game.js';import{evaluatePathReasoning}from'../../evaluation/path-reasoning.js';import{assessEvidenceReview,reviewEvidenceList}from'../../knowledge/evidence-review.js';import{expandSearchScope,inferSensitivity,rankByLocation}from'../../evaluation/location-match.js';import{query_objects,ArbStatus}from'@wowok/wowok';import{enumerateServices,enumerateDemands,enumerateArbs}from'../../knowledge/jsonrpc-enum.js';import{fetchObjectLinkerCore,batchQueryObjectsByIds}from'../../knowledge/index.js';import{summarizeCapabilityGaps}from'../../evaluation/gap.js';import{composeServicesForDemand}from'../../evaluation/composer.js';import{matchDemandToServices,matchServiceToDemands}from'../../evaluation/builtins/demand-match.js';import{nextOperationForServiceMatch,nextOperationForDemandMatch,nextOperationForServiceOrder}from'../../evaluation/match-operation.js';import{extractDemandCapability}from'../../evaluation/extract.js';import{assessServiceRisk}from'../../evaluation/builtins/service-risk.js';import{assessArbitration}from'../../evaluation/builtins/arbitration-score.js';import{resolveCategoryMatchRules,toSoftWeightInjection,applyHardConstraints}from'../../evaluation/category-match-rules.js';import{computeMarketMetrics,computeOrderFlow}from'../../knowledge/market-metrics.js';import{assessAntiCheat}from'../../knowledge/anti-cheat.js';import{computeJourneyFunnel,attributeReferrals,buildCustomerRelationships}from'../../knowledge/market-operations.js';import{suggestPricing}from'../../knowledge/dynamic-pricing.js';import{runAccountEventWatchers}from'../../customer/account-events.js';import{registerBuiltinEvaluations}from'../../evaluation/builtins/index.js';import{getEffectivePersona,mergeInjections}from'../../persona/index.js';import{buildUserInjection}from'../../evaluation/injection.js';registerBuiltinEvaluations();function arbCaseFromObject(b){const c=typeof b['time']==='number'?b['time']:Number(b['time']??0x0);return{'status':b['status'],'time':Number['isFinite'](c)?c:undefined,'resolved_time':typeof b['indemnity']?.['time']==='number'?b['indemnity']['time']:b['compensation_time']??undefined,'indemnity_amount':b['indemnity']?.['amount'],'objected':b['status']===ArbStatus['Objectionable']||b['objection']!=null&&b['objection']['length']>0x0};}async function arbCasesWithRoles(a,b){const c=a['map'](arbCaseFromObject),d=Array['from'](new Set(a['map'](j=>j['order'])['filter'](Boolean))),e=new Map(),f=[];if(d['length']>0x0){const j=await batchQueryObjectsByIds(d,b);for(const k of j){const l=k;if(!l?.['object'])continue;e['set'](l['object'],l);if(l['service'])f['push'](l['service']);}}const g=new Map(),h=Array['from'](new Set(f));if(h['length']>0x0){const m=await batchQueryObjectsByIds(h,b);for(const n of m){const p=n;if(p?.['object'])g['set'](p['object'],p);}}for(let q=0x0;q<a['length'];q++){const r=e['get'](a[q]['order']);if(!r)continue;c[q]['customer']=r['builder']||undefined;const t=g['get'](r['service']);if(t)c[q]['merchant']=t['permission']||undefined;}return c;}function capabilityFromInput(a){return{'id':a['id'],'kind':a['kind'],'owner':a['owner']??'','industry':a['industry'],'industry_confidence':a['industry_confidence']??0x0,'region':a['region'],'price_min':a['price_min']!==undefined?BigInt(a['price_min']):undefined,'price_max':a['price_max']!==undefined?BigInt(a['price_max']):undefined,'token_type':a['token_type']??'','ticket_size':a['ticket_size']??'medium','trust_score':a['trust_score']??0x32,'reputation_like_ratio':a['reputation_like_ratio']??0x1,'arbitration_independent':a['arbitration_independent']??![],'merchant_history_count':a['merchant_history_count']??0x0,'capabilities':a['capabilities'],'tags':a['tags']??[],'keywords':a['keywords']??[]};}function puzzleRawFromInput(a){return{'service':{...a['service'],'priceRaw':a['service']['priceRaw']!==undefined?BigInt(a['service']['priceRaw']):undefined,'compensation_fund':a['service']['compensation_fund']?{'balance':a['service']['compensation_fund']['balance']!==undefined?BigInt(a['service']['compensation_fund']['balance']):undefined}:undefined},'machine_nodes':a['machine_nodes'],'machine_published':a['machine_published'],'machine_paused':a['machine_paused'],'reviews':a['reviews'],'events':a['events'],'similar_services':a['similar_services']?.['map'](b=>({'price':BigInt(b['price'])})),'order_amount':a['order_amount']!==undefined?BigInt(a['order_amount']):undefined,'trust_score':a['trust_score'],'arbitration_owner':a['arbitration_owner'],'service_owner':a['service_owner'],'wip_verified':a['wip_verified'],'order_history':a['order_history'],'merchant_reputation':a['merchant_reputation']};}async function resolveInjection(a,b){return mergeInjections(await buildUserInjection(a),b);}function serviceSummaryToExtract(a){const b=a['json']??{},c=f=>typeof f==='string'?f:undefined,d=f=>typeof f==='string'?f:null,e=Array['isArray'](b['sales'])?b['sales']['map'](f=>({'name':typeof f?.['name']==='string'?f['name']:undefined,'price':typeof f?.['price']==='string'?f['price']:f?.['price']!=null?String(f['price']):'0','wip_hash':typeof f?.['wip_hash']==='string'?f['wip_hash']:undefined})):[];return{'object':a['object'],'description':c(b['description'])??'','location':a['location']??c(b['location'])??'','sales':e,'arbitrations':Array['isArray'](b['arbitrations'])?b['arbitrations']['map'](String):[],'compensation_fund':c(b['compensation_fund']),'buy_guard':d(b['buy_guard']),'machine':d(b['machine']),'um':d(b['um']),'bPublished':b['bPublished']===!![],'bPaused':b['bPaused']===!![]};}export async function handleEvaluationOperation(a){const b=strictParse(EvaluationOperationInputSchema,a,'evaluation_operation\x20input');let c;switch(b['action']){case'arb_game':{const e=b['account']?await getEffectivePersona(b['account']):null,f=b['appetite']??e?.['layer']['preferences']?.['risk_appetite'],g=b['requirements']??e?.['layer']['requirements'];c={'action':'arb_game',...evaluateArbGame(b['status'],b['perspective'],{'risk_appetite':f,'requirements':g})};break;}case'node_game':{const h=b['account']?await getEffectivePersona(b['account']):null,i=b['appetite']??h?.['layer']['preferences']?.['risk_appetite'],j=b['requirements']??h?.['layer']['requirements'];c={'action':'node_game',...evaluateNodeGame({'current_node':b['current_node'],'perspective':b['perspective'],'appetite':i,'requirements':j,'threshold':b['threshold'],'allocation':b['allocation'],'order_amount':b['order_amount'],'compensation_fund':b['compensation_fund'],'operable':b['operable'],'waiting_on':b['waiting_on']??[]})};break;}case'capability_gap':{c={'action':'capability_gap','report':summarizeCapabilityGaps(capabilityFromInput(b['demand']),capabilityFromInput(b['service']))};break;}case'compose_service':{c={'action':'compose_service','plan':composeServicesForDemand(capabilityFromInput(b['demand']),b['services']['map'](capabilityFromInput))};break;}case'demand_match':{const k=await matchDemandToServices(capabilityFromInput(b['demand_cap']),b['services'],await resolveInjection(b['account'],b['injection']),0x5,b['presenter_history']);c={'action':'demand_match','matches':k['map'](l=>({'service':l['service'],'result':l['result'],'next':nextOperationForDemandMatch(l['service']),'order':nextOperationForServiceOrder(l['service'])}))};break;}case'service_match':{const l=await matchServiceToDemands(capabilityFromInput(b['service_cap']),b['demands'],await resolveInjection(b['account'],b['injection']),0x5,b['presenter_history']);c={'action':'service_match','matches':l['map'](n=>({'demand':n['demand'],'result':n['result'],'next':nextOperationForServiceMatch(n['demand'],null)}))};break;}case'service_risk':{c={'action':'service_risk','result':await assessServiceRisk(b['service_id'],puzzleRawFromInput(b['puzzle_raw']),await resolveInjection(b['account'],b['injection']),b['depth']??'preorder',b['presenter_history'])};break;}case'path_reasoning':{const m=b['account']?await getEffectivePersona(b['account']):null,n=b['appetite']??m?.['layer']['preferences']?.['risk_appetite'],o=b['requirements']??m?.['layer']['requirements'];c={'action':'path_reasoning',...evaluatePathReasoning({'current_node':b['current_node'],'perspective':b['perspective'],'machine_nodes':b['machine_nodes'],'node_annotations':b['node_annotations'],'appetite':n,'requirements':o,'order_amount':b['order_amount'],'max_depth':b['max_depth']})};break;}case'evidence_review':{b['items']&&b['items']['length']>0x0?c={'action':'evidence_review','list':reviewEvidenceList(b['items'])}:c={'action':'evidence_review','review':assessEvidenceReview({'kind':b['kind'],'hash_committed':b['hash_committed'],'digital_check_passed':b['digital_check_passed'],'contradiction':b['contradiction']})};break;}case'discover_services':{const p=!b['sensitivity']?inferSensitivity(b['description']??''):null,q=b['sensitivity']??p['sensitivity'],r=p?.['signals']??[],s=b['context_network']??'testnet',t={'raw':b['location'],...b['region']??{}},u=expandSearchScope(q,t),v=await enumerateServices(s,{'max_objects':b['max_objects'],'no_cache':b['no_cache'],'location_any':u['search_terms']}),w=rankByLocation(q,t,v['services']['map'](x=>({'id':x['object'],'name':x['name'],'location':x['location']})));c={'action':'discover_services','sensitivity':q,'inference_signals':r,'services':w['map'](x=>{const y=v['services']['find'](z=>z['object']===x['id']);return{'object':x['id'],'name':y?.['name'],'location':y?.['location'],'relation':x['relation'],'satisfied':x['satisfied'],'score':x['score'],'reason':x['reason']};}),'total_enumerated':v['total_enumerated'],'has_more':v['has_more'],'scope_advice':{'search_terms':u['search_terms'],'ai_enrichment_note':u['ai_enrichment_note']}};break;}case'discover_demands':{const x=b['context_network']??'testnet',y=await enumerateDemands(x,{'max_objects':b['max_objects'],'no_cache':b['no_cache']}),z=b['location']?.['toLowerCase'](),A=y['demands']['filter'](B=>!z||(B['location']??'')['toLowerCase']()['includes'](z))['map'](B=>({'object':B['object'],'description':B['description']??'','location':B['location']??'','presenters_count':B['presenters_count']??0x0,'permission':B['permission']??''}));c={'action':'discover_demands','demands':A,'total_enumerated':y['total_enumerated'],'has_more':y['has_more']};break;}case'demand_present':{const B=b['context_network']??'testnet',C=await enumerateDemands(B,{'max_objects':b['max_objects'],'no_cache':b['no_cache']}),D=b['location']?.['toLowerCase'](),E=C['demands']['filter'](I=>!D||(I['location']??'')['toLowerCase']()['includes'](D)),F=new Map(E['map'](I=>[I['object'],(I['guards']?.['length']??0x0)>0x0])),G=E['map'](I=>({'object':I['object'],'description':I['description']??'','location':I['location']??'','rewards':I['rewards']??[],'um':I['um']??null})),H=await matchServiceToDemands(capabilityFromInput(b['service_cap']),G,await resolveInjection(b['account'],b['injection']),b['limit']??0x5);c={'action':'demand_present','matches':H['map'](I=>{const J=F['get'](I['demand']['object'])??![];return{'demand':I['demand'],'result':I['result'],'next':nextOperationForServiceMatch(I['demand'],J)};}),'total_enumerated':C['total_enumerated'],'has_more':C['has_more']};break;}case'market_metrics':{const I=b['context_network']??'testnet',J=await computeMarketMetrics(I,b['no_cache']),K=await computeOrderFlow(I,b['limit'],b['no_cache']);c={'action':'market_metrics',...J,'order_flow':K};break;}case'anti_cheat':{const L=assessAntiCheat({'service':{'object':b['service']['object'],'arbitrations':b['service']['arbitrations'],'compensation_fund':b['service']['compensation_fund'],'machine':b['service']['machine'],'bPublished':b['service']['bPublished']},'orders':b['orders'],'reviews':b['reviews']});c={'action':'anti_cheat','signals':L};break;}case'market_operations':{if(b['op']==='journey_funnel')c={'action':'market_operations','result':computeJourneyFunnel({'due_diligence':b['due_diligence']??0x0,'orders':b['orders']??0x0,'completed':b['completed']??0x0,'reviews':b['reviews']??0x0})};else{if(b['op']==='referral_attribution')c={'action':'market_operations','result':attributeReferrals(b['referral_orders']??[])};else{if(b['op']==='dynamic_pricing'){const M=b['market_signals'];if(!M)throw new Error('dynamic_pricing\x20op\x20requires\x20market_signals');c={'action':'market_operations','result':suggestPricing({'supplyCount':M['supplyCount'],'demandCount':M['demandCount'],'avgPrice':M['avgPrice'],'myPrice':M['myPrice'],'competitorPrices':M['competitorPrices'],'recentOrderCount':M['recentOrderCount'],'repeatCustomerRate':M['repeatCustomerRate']})};}else c={'action':'market_operations','result':buildCustomerRelationships(b['customer_orders']??[])};}}break;}case'match_discover':{const N=!b['sensitivity']?inferSensitivity(b['description']??''):null,O=b['sensitivity']??N['sensitivity'],P=N?.['signals']??[],Q=b['context_network']??'testnet',R={'raw':b['location'],...b['region']??{}},S=expandSearchScope(O,R),T=await enumerateServices(Q,{'max_objects':b['max_objects'],'no_cache':b['no_cache'],'location_any':S['search_terms']}),U=new Set(b['required_capabilities']??[]),V=extractDemandCapability({'object':'intent','description':b['description'],'location':b['location'],'owner':b['account']},{'price_max':b['budget']!==undefined?BigInt(b['budget']):undefined,'capabilities':{'has_arbitration':U['has']('has_arbitration'),'has_refund_path':U['has']('has_refund_path'),'has_milestone_nodes':U['has']('has_milestone_nodes'),'has_compensation_fund':U['has']('has_compensation_fund'),'has_wip_verification':U['has']('has_wip_verification'),'has_messenger':U['has']('has_messenger'),'has_buy_guard':U['has']('has_buy_guard'),'has_dynamic_pricing':U['has']('has_dynamic_pricing'),'is_published':!![],'is_paused':![]}}),W=rankByLocation(O,R,T['services']['map'](a7=>({'id':a7['object'],'name':a7['name'],'location':a7['location']}))),X=W['filter'](a7=>a7['satisfied']),Y=T['services']['filter'](a7=>X['some'](a8=>a8['id']===a7['object']))['map'](serviceSummaryToExtract),Z=resolveCategoryMatchRules(b['category']);let a0=Y;const a1=[];if(Z){const a7=applyHardConstraints(Z,Y);a0=a7['passed'];for(const a8 of a7['dropped']){a1['push']({'object':a8['candidate']['object'],'reason':a8['constraint']['description']});}}let a2=await resolveInjection(b['account'],b['injection']);Z&&(a2=mergeInjections(a2,toSoftWeightInjection(Z)));const a3=await matchDemandToServices(V,a0,a2,a0['length'],b['presenter_history']),a4=new Map(a3['map'](a9=>[a9['service']['object'],a9['result']])),a5=new Set(a0['map'](a9=>a9['object'])),a6=X['filter'](a9=>a5['has'](a9['id']))['map'](a9=>{const aa=T['services']['find'](ab=>ab['object']===a9['id']);return{'service':serviceSummaryToExtract(aa),'location':{'relation':a9['relation'],'satisfied':a9['satisfied'],'score':a9['score'],'reason':a9['reason']},'result':a4['get'](a9['id'])};});c={'action':'match_discover','sensitivity':O,'inference_signals':P,'matches':a6,'total_enumerated':T['total_enumerated'],'has_more':T['has_more'],'scope_advice':{'search_terms':S['search_terms'],'ai_enrichment_note':S['ai_enrichment_note']}};break;}case'arbitration_score':{let a9=b['history'];const aa=b['context_network']??'testnet';if((!a9||a9['length']===0x0)&&b['arbitration']['object'])try{const ac=await enumerateArbs(aa,{'arbitration':b['arbitration']['object']});a9=await arbCasesWithRoles(ac['arbs'],aa);}catch{a9=b['history'];}if((!a9||a9['length']===0x0)&&b['arbitration']['object'])try{const ad=await query_objects({'objects':[b['arbitration']['object']],'network':aa}),ae=ad?.['objects']?.[0x0];if(ae?.['permission']){const af=await fetchObjectLinkerCore(ae['permission'],aa),ag=(af?.['items']??[])['map'](ai=>ai['who'])['filter'](ai=>ai!==b['arbitration']['object']),ah=[];for(const ai of ag['slice'](0x0,0xa)){const aj=await enumerateArbs(aa,{'arbitration':ai})['catch'](()=>undefined);aj?.['arbs']?.['length']&&ah['push'](...await arbCasesWithRoles(aj['arbs'],aa));}if(ah['length']>0x0)a9=ah;}}catch{}const ab=await assessArbitration({'arbitration':{'object':b['arbitration']['object'],'fee':b['arbitration']['fee'],'balance':b['arbitration']['balance'],'voting_guard_count':b['arbitration']['voting_guard_count'],'bPaused':b['arbitration']['bPaused'],'location':b['arbitration']['location'],'has_verified_identity':b['arbitration']['has_verified_identity']},'history':a9,'entity_votes':b['entity_votes'],'fee_median':b['fee_median']},await resolveInjection(b['account'],b['injection']));c={'action':'arbitration_score',...ab};break;}case'account_events':{const ak=await runAccountEventWatchers({'account':b['account'],'network':b['context_network']??'testnet','reviews':b['reviews']?.['map'](al=>({'reviewer':al['reviewer'],'rating':al['rating'],'tags':al['tags'],'comment':al['comment'],'orderRef':al['orderRef'],'timestamp':al['timestamp'],'verified':al['verified']??![]})),'order_history':b['order_history']},b['categories']);c={'action':'account_events','events':ak};break;}default:throw new Error('Unknown\x20evaluation_operation\x20action');}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c}};}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ import{describe,expect,it}from'vitest';import{handleEvaluationOperation}from'./evaluation.js';function resultOf(a){return a['structuredContent']['result'];}const demandCap={'id':'0xdemand1','kind':'demand','industry':'freelance','region':{'mode':'physical','city':'Shanghai','raw':'Shanghai'},'keywords':['design'],'capabilities':{'has_arbitration':![],'has_refund_path':![],'has_milestone_nodes':![],'has_compensation_fund':![],'has_wip_verification':![],'has_messenger':![],'has_buy_guard':![],'has_dynamic_pricing':![],'is_published':!![],'is_paused':![]}},service={'object':'0xsvc1','description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'price':'100','wip_hash':'abc'}],'bPublished':!![],'bPaused':![]};describe('evaluation_operation\x20demand_match\x20presenter_history\x20(P2-2)',()=>{it('acceptance\x20rule\x20scores\x20the\x20rated\x20history\x20in\x20the\x20breakdown',async()=>{const a=await handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service],'presenter_history':[{'acceptance_score':0x50},{'acceptance_score':0x5a}]}),c=resultOf(a);expect(c['action'])['toBe']('demand_match');const d=c['matches'][0x0]['result']['breakdown']['find'](e=>e['rule_id']==='acceptance');expect(d)['toBeDefined'](),expect(d['score'])['toBe'](0x55);}),it('omitted\x20history\x20→\x20acceptance\x20stays\x20neutral',async()=>{const a=await handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service]}),c=resultOf(a)['matches'][0x0]['result']['breakdown']['find'](d=>d['rule_id']==='acceptance');expect(c)['toBeDefined'](),expect(c['score'])['toBe'](0x32),expect(c['reason'])['toContain']('neutral');}),it('schema\x20rejects\x20a\x20malformed\x20presenter_history\x20entry',async()=>{await expect(handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service],'presenter_history':[{'acceptance_score':0x50,'bogus':!![]}]}))['rejects']['toThrow']();});}),describe('evaluation_operation\x20demand_match\x20order\x20bridge\x20(N-2\x20/\x2008\x20§七)',()=>{it('each\x20match\x20carries\x20the\x20service.order_new\x20transaction-formation\x20bridge',async()=>{const a=await handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service]}),b=resultOf(a)['matches'][0x0];expect(b['order'])['toBeDefined'](),expect(b['order']['operation'])['toBe']('service.order_new'),expect(b['order']['operation_type'])['toBe']('service'),expect(b['order']['preconditions']['some'](c=>c['includes']('acceptance_score')))['toBe'](!![]),expect(b['order']['rationale'])['toContain']('0xsvc1'),expect(b['next']['operation'])['toBe']('demand.publish'),expect(b['next']['operation_type'])['toBe']('demand'),expect(b['next']['rationale'])['toContain']('service.order_new');});}),describe('evaluation_operation\x20evidence_review\x20list\x20mode\x20(P2-3)',()=>{it('items\x20mode\x20→\x20structured\x20usable/manual/rejected\x20+\x20proof\x20candidates',async()=>{const a=await handleEvaluationOperation({'action':'evidence_review','items':[{'id':'chat.wts','kind':'signature_photo','hash_committed':!![],'digital_check_passed':!![],'proof_ref':'0xproof1'},{'id':'waybill.jpg','kind':'delivery_proof','hash_committed':!![]},{'id':'voice.mp3','kind':'voice_recording','hash_committed':![]}]}),b=resultOf(a);expect(b['action'])['toBe']('evidence_review'),expect(b['list']['items'])['toHaveLength'](0x3),expect(b['list']['usable'])['toHaveLength'](0x1),expect(b['list']['manual'])['toHaveLength'](0x1),expect(b['list']['rejected'])['toHaveLength'](0x1),expect(b['list']['proof_candidates'])['toHaveLength'](0x1),expect(b['list']['proof_candidates'][0x0]['proof_ref'])['toBe']('0xproof1'),expect(b['list']['dispute_hint'])['toContain']('1\x20Proof\x20reference\x20candidate(s)\x20ready');}),it('single-item\x20mode\x20still\x20works\x20(backwards\x20compatible)',async()=>{const a=await handleEvaluationOperation({'action':'evidence_review','kind':'signature_photo','hash_committed':!![],'digital_check_passed':!![]});expect(resultOf(a)['review']['status'])['toBe']('auto_pass');}),it('schema\x20refinement:\x20neither\x20items\x20nor\x20kind+hash_committed\x20→\x20error',async()=>{await expect(handleEvaluationOperation({'action':'evidence_review'}))['rejects']['toThrow']();});});
@@ -1 +1 @@
1
- import{strictParse}from'../../schema/index.js';import{GoalOperationInputSchema}from'../../schema/goal/index.js';import{goalEngine}from'../../goal/GoalEngine.js';import{isTerminalStage}from'../../goal/types.js';import{resolveNetwork}from'./network.js';import{handleAnalyzeIntent,handleAggregateRisks,handleTraceSubsteps}from'../../playbooks/service-build/pipeline-actions.js';import{handleMerchantGuide}from'../../playbooks/service-build/merchant-guide.js';let engineOverride;export function setGoalEngineDeps(a){engineOverride=a;}function engine(){return engineOverride??goalEngine;}export async function handleGoalOperation(a){const b=strictParse(GoalOperationInputSchema,a,'goal_operation\x20input'),c=await resolveNetwork(b['network']),d=engine();let e;switch(b['action']){case'create':{const f=await d['createOrAdopt']({'intent_text':b['intent_text'],...b['goal_type']?{'goal_type':b['goal_type']}:{},...b['account']?{'account':b['account']}:{},...b['persona']?{'persona':b['persona']}:{},...b['title']?{'title':b['title']}:{},...b['conversation_id']?{'conversation_id':b['conversation_id']}:{},...b['create_process']!==undefined?{'create_process':b['create_process']}:{},'network':c});e={'action':'create',...f};break;}case'list':{const {goals:g,counts:h}=await d['list'](c,{...b['stage']?{'stage':b['stage']}:{},...b['account']?{'account':b['account']}:{},...b['conversation_id']?{'conversation_id':b['conversation_id']}:{}}),i=b['include_finished']?g:g['filter'](j=>!isTerminalStage(j['stage']));e={'action':'list','goals':i,'counts':h};break;}case'get':{e={'action':'get','goal':await d['get'](c,b['id'])};break;}case'approve':{e={'action':'approve','goal':await d['approve'](c,b['id'],b['note'])};break;}case'bind':{e={'action':'bind','goal':await d['bind'](c,b['id'],b['account'],b['persona'])};break;}case'advance':{const j=await d['advance'](c,b['id'],{...b['stage']?{'stage':b['stage']}:{},...b['objects']?{'objects':b['objects']}:{}});e={'action':'advance','goal':j};break;}case'pause':{e={'action':'pause','goal':await d['pause'](c,b['id'])};break;}case'complete':{const k=await d['complete'](c,b['id'],{'force':b['force']===!![],...b['feedback']?{'feedback':b['feedback']}:{}});e={'action':'complete',...k};break;}case'abandon':{const l=await d['abandon'](c,b['id'],b['reason']);e={'action':'abandon',...l};break;}case'delete':{const m=await d['remove'](c,b['id'],{'force':b['force']===!![]});e={'action':'delete',...m};break;}case'analyze_intent':e=await handleAnalyzeIntent(b);break;case'aggregate_risks':e=await handleAggregateRisks(b);break;case'trace_substeps':e=await handleTraceSubsteps(b);break;case'merchant_guide':e=await handleMerchantGuide(b);break;default:throw new Error('Unknown\x20goal_operation\x20action');}return{'content':[{'type':'text','text':JSON['stringify']({'result':e})}],'structuredContent':{'result':e}};}
1
+ import{strictParse}from'../../schema/index.js';import{GoalOperationInputSchema}from'../../schema/goal/index.js';import{goalEngine}from'../../goal/GoalEngine.js';import{isTerminalStage}from'../../goal/types.js';import{resolveNetwork}from'./network.js';import{handleAnalyzeIntent,handleAggregateRisks,handleTraceSubsteps}from'../../playbooks/service-build/pipeline-actions.js';import{handleMerchantGuide}from'../../playbooks/service-build/merchant-guide.js';let engineOverride;export function setGoalEngineDeps(a){engineOverride=a;}function engine(){return engineOverride??goalEngine;}export async function handleGoalOperation(a){const b=strictParse(GoalOperationInputSchema,a,'goal_operation\x20input'),c=await resolveNetwork(b['network']),d=engine();let e;switch(b['action']){case'create':{const f=await d['createOrAdopt']({'intent_text':b['intent_text'],...b['goal_type']?{'goal_type':b['goal_type']}:{},...b['account']?{'account':b['account']}:{},...b['persona']?{'persona':b['persona']}:{},...b['title']?{'title':b['title']}:{},...b['conversation_id']?{'conversation_id':b['conversation_id']}:{},...b['create_process']!==undefined?{'create_process':b['create_process']}:{},'network':c});e={'action':'create',...f};break;}case'list':{const {goals:g,counts:h}=await d['list'](c,{...b['stage']?{'stage':b['stage']}:{},...b['account']?{'account':b['account']}:{},...b['conversation_id']?{'conversation_id':b['conversation_id']}:{}}),i=b['include_finished']?g:g['filter'](j=>!isTerminalStage(j['stage']));e={'action':'list','goals':i,'counts':h};break;}case'get':{e={'action':'get','goal':await d['get'](c,b['id'])};break;}case'approve':{e={'action':'approve','goal':await d['approve'](c,b['id'],b['note'])};break;}case'bind':{e={'action':'bind','goal':await d['bind'](c,b['id'],b['account'],b['persona'])};break;}case'advance':{const j=await d['advance'](c,b['id'],{...b['stage']?{'stage':b['stage']}:{},...b['objects']?{'objects':b['objects']}:{}});e={'action':'advance','goal':j};break;}case'pause':{e={'action':'pause','goal':await d['pause'](c,b['id'])};break;}case'complete':{const k=await d['complete'](c,b['id'],{'force':b['force']===!![],...b['feedback']?{'feedback':b['feedback']}:{}});e={'action':'complete',...k};break;}case'abandon':{const l=await d['abandon'](c,b['id'],b['reason']);e={'action':'abandon',...l};break;}case'delete':{const m=await d['remove'](c,b['id'],{'force':b['force']===!![]});e={'action':'delete',...m};break;}case'suggestions':{const n=await d['listSuggestions'](c,b['id'],{...b['include_resolved']!==undefined?{'include_resolved':b['include_resolved']}:{}});e={'action':'suggestions',...n};break;}case'suggestion_resolve':{const o=await d['resolveSuggestion'](c,b['id'],b['suggestion_id'],{'decision':b['decision'],...b['apply']!==undefined?{'apply':b['apply']}:{},...b['note']?{'note':b['note']}:{}});e={'action':'suggestion_resolve',...o};break;}case'analyze_intent':e=await handleAnalyzeIntent(b);break;case'aggregate_risks':e=await handleAggregateRisks(b);break;case'trace_substeps':e=await handleTraceSubsteps(b);break;case'merchant_guide':e=await handleMerchantGuide(b);break;default:throw new Error('Unknown\x20goal_operation\x20action');}return{'content':[{'type':'text','text':JSON['stringify']({'result':e})}],'structuredContent':{'result':e}};}
@@ -1 +1 @@
1
- import{readdirSync,readFileSync,writeFileSync,existsSync,mkdirSync,statSync,cpSync,renameSync,rmSync}from'node:fs';import{join,relative,resolve,sep,dirname,basename}from'node:path';import{strictParse}from'../../schema/index.js';import{IndustryPackOperationInputSchema}from'../../schema/industry-pack/index.js';import{scaffoldIndustryPack,listRegisteredPacks,scanDefaultIndustryPacks,seedBuiltinIndustryTemplates,ensureIndustryReadme,resolveIndustryPackDir,rescanPack,resolveDisputeRules,resolveComplianceRules,resolveSupplyRules,resolveIndustryRules,resolveIndustryPlaybook,diffIndustryPack,resetIndustryPath}from'../../extensions/index.js';import{handleRecommendIndustry,handleListModes,handleDeriveUserMode,handleEvolveUserMode,handleRegisterUserMode,handleUnregisterUserMode,handleRegisterCustomMetric,handleRegisterCustomConstraint,handleListMetricsConstraints}from'../../playbooks/service-build/mode-actions.js';const INDUSTRY_ROOT=resolveIndustryPackDir();function resolveIndustryPath(a){const b=resolve(INDUSTRY_ROOT,a);if(b!==INDUSTRY_ROOT&&!b['startsWith'](INDUSTRY_ROOT+sep))throw new Error('path\x20\x27'+a+'\x27\x20escapes\x20the\x20industry\x20root');return b;}function rescanAffectedPack(a){const b=a['split'](/[\\/]+/)['find'](c=>c['length']>0x0);if(!b)return;rescanPack(b);}function listRecursive(a,b,c,d=0x0){if(d>0x8)return;let f;try{f=readdirSync(a,{'withFileTypes':!![]});}catch{return;}for(const g of f){const h=join(a,g['name']),i=relative(b,h)['split'](sep)['join']('/');let j=0x0,k=0x0;try{const l=statSync(h);k=l['size'],j=l['mtimeMs'];}catch{}g['isDirectory']()?(c['push']({'path':i,'is_dir':!![],'size':0x0,'mtime':j}),listRecursive(h,b,c,d+0x1)):c['push']({'path':i,'is_dir':![],'size':k,'mtime':j});}}export async function handleIndustryPackOperation(a){const b=strictParse(IndustryPackOperationInputSchema,a,'industry_pack_operation\x20input');mkdirSync(INDUSTRY_ROOT,{'recursive':!![]}),seedBuiltinIndustryTemplates(),ensureIndustryReadme();let c;switch(b['action']){case'scaffold':{if(!b['name'])throw new Error('\x27name\x27\x20is\x20required\x20for\x20action=\x27scaffold\x27');const d=scaffoldIndustryPack(b['name']);c={'action':'scaffold','ok':d['ok'],'dir':d['dir'],'files':d['files'],'errors':d['errors']};if(d['ok'])rescanPack(b['name']);break;}case'list':{c={'action':'list','packs':listRegisteredPacks()};break;}case'scan':{c={'action':'scan','results':scanDefaultIndustryPacks()};break;}case'resolve':{c={'action':'resolve','dir':INDUSTRY_ROOT};break;}case'list_files':{const e=[];listRecursive(INDUSTRY_ROOT,INDUSTRY_ROOT,e),c={'action':'list_files','dir':INDUSTRY_ROOT,'files':e};break;}case'read_file':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27read_file\x27');const f=resolveIndustryPath(b['path']);if(!existsSync(f))throw new Error('file\x20not\x20found:\x20'+b['path']);c={'action':'read_file','path':f,'content':readFileSync(f,'utf-8')};break;}case'write_file':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27write_file\x27');if(b['content']===undefined)throw new Error('\x27content\x27\x20is\x20required\x20for\x20action=\x27write_file\x27');const g=resolveIndustryPath(b['path']);mkdirSync(dirname(g),{'recursive':!![]}),writeFileSync(g,b['content'],'utf-8'),c={'action':'write_file','path':g,'ok':!![]},rescanAffectedPack(b['path']);break;}case'get':{if(!b['name'])throw new Error('\x27name\x27\x20is\x20required\x20for\x20action=\x27get\x27');const h=b['name'];c={'action':'get','category':h,...resolveDisputeRules(h)?{'dispute':resolveDisputeRules(h)}:{},...resolveComplianceRules(h)?{'compliance':resolveComplianceRules(h)}:{},...resolveSupplyRules(h)?{'supply':resolveSupplyRules(h)}:{},...resolveIndustryRules(h)?{'rules':resolveIndustryRules(h)}:{},...resolveIndustryPlaybook(h)?{'playbook':resolveIndustryPlaybook(h)}:{}};break;}case'diff':{if(!b['name'])throw new Error('\x27name\x27\x20is\x20required\x20for\x20action=\x27diff\x27');c={'action':'diff',...diffIndustryPack(b['name'])};break;}case'reset':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27reset\x27');const i=resetIndustryPath(b['path']);c={'action':'reset','ok':i['ok'],'layout':i['layout'],'target':i['target'],'restored_files':i['restored_files'],'errors':i['errors']},rescanAffectedPack(b['path']);break;}case'delete_file':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27delete_file\x27');const j=resolveIndustryPath(b['path']);if(!existsSync(j))throw new Error('file\x20not\x20found:\x20'+b['path']);rmSync(j,{'recursive':!![],'force':!![]}),c={'action':'delete_file','path':j,'ok':!![]},rescanAffectedPack(b['path']);break;}case'create_file':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27create_file\x27');const k=resolveIndustryPath(b['path']);if(existsSync(k))throw new Error('file\x20already\x20exists:\x20'+b['path']);mkdirSync(dirname(k),{'recursive':!![]}),writeFileSync(k,b['content']??'','utf-8'),c={'action':'create_file','path':k,'ok':!![]},rescanAffectedPack(b['path']);break;}case'create_dir':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27create_dir\x27');const l=resolveIndustryPath(b['path']);mkdirSync(l,{'recursive':!![]}),c={'action':'create_dir','path':l,'ok':!![]},rescanAffectedPack(b['path']);break;}case'copy':{if(!b['from'])throw new Error('\x27from\x27\x20is\x20required\x20for\x20action=\x27copy\x27');if(!b['to'])throw new Error('\x27to\x27\x20is\x20required\x20for\x20action=\x27copy\x27');const m=resolveIndustryPath(b['from']);let n=resolveIndustryPath(b['to']);if(!existsSync(m))throw new Error('source\x20not\x20found:\x20'+b['from']);try{existsSync(n)&&statSync(n)['isDirectory']()&&(n=join(n,basename(m)));}catch{}if(n===m)throw new Error('\x27copy\x27\x20cannot\x20copy\x20a\x20file\x20onto\x20itself');mkdirSync(dirname(n),{'recursive':!![]}),cpSync(m,n,{'recursive':!![],'force':!![]}),c={'action':'copy','from':m,'to':n,'ok':!![]},rescanAffectedPack(b['to']);break;}case'move':case'rename':{if(!b['from'])throw new Error('\x27from\x27\x20is\x20required\x20for\x20action=\x27'+b['action']+'\x27');if(!b['to'])throw new Error('\x27to\x27\x20is\x20required\x20for\x20action=\x27'+b['action']+'\x27');const o=resolveIndustryPath(b['from']);let p=resolveIndustryPath(b['to']);if(!existsSync(o))throw new Error('source\x20not\x20found:\x20'+b['from']);try{existsSync(p)&&statSync(p)['isDirectory']()&&(p=join(p,basename(o)));}catch{}if(p===o)throw new Error('\x27'+b['action']+'\x27\x20cannot\x20move\x20onto\x20itself');mkdirSync(dirname(p),{'recursive':!![]}),renameSync(o,p),c={'action':b['action'],'from':o,'to':p,'ok':!![]},rescanAffectedPack(b['from']),rescanAffectedPack(b['to']);break;}case'recommend_industry':c=await handleRecommendIndustry(b);break;case'list_modes':c=await handleListModes();break;case'derive_user_mode':c=await handleDeriveUserMode(b);break;case'evolve_user_mode':c=await handleEvolveUserMode(b);break;case'register_user_mode':c=await handleRegisterUserMode(b);break;case'unregister_user_mode':c=await handleUnregisterUserMode(b);break;case'register_custom_metric':c=await handleRegisterCustomMetric(b);break;case'register_custom_constraint':c=await handleRegisterCustomConstraint(b);break;case'list_metrics_constraints':c=await handleListMetricsConstraints(b);break;default:throw new Error('Unknown\x20industry_pack_operation\x20action:\x20'+String(b['action']));}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c}};}
1
+ import{readdirSync,readFileSync,writeFileSync,existsSync,mkdirSync,statSync,cpSync,renameSync,rmSync}from'node:fs';import{join,relative,resolve,sep,dirname,basename}from'node:path';import{strictParse}from'../../schema/index.js';import{IndustryPackOperationInputSchema}from'../../schema/industry-pack/index.js';import{scaffoldIndustryPack,listRegisteredPacks,scanDefaultIndustryPacks,seedBuiltinIndustryTemplates,ensureIndustryReadme,resolveIndustryPackDir,rescanPack,resolveDisputeRules,resolveComplianceRules,resolveSupplyRules,resolveIndustryRules,resolveIndustryPlaybook,diffIndustryPack,resetIndustryPath}from'../../extensions/index.js';import{handleRecommendIndustry,handleListModes,handleDeriveUserMode,handleEvolveUserMode,handleRegisterUserMode,handleUnregisterUserMode,handleRegisterCustomMetric,handleUnregisterCustomMetric,handleRegisterCustomConstraint,handleUnregisterCustomConstraint,handleListMetricsConstraints}from'../../playbooks/service-build/mode-actions.js';const INDUSTRY_ROOT=resolveIndustryPackDir();function resolveIndustryPath(a){const b=resolve(INDUSTRY_ROOT,a);if(b!==INDUSTRY_ROOT&&!b['startsWith'](INDUSTRY_ROOT+sep))throw new Error('path\x20\x27'+a+'\x27\x20escapes\x20the\x20industry\x20root');return b;}function rescanAffectedPack(a){const b=a['split'](/[\\/]+/)['find'](c=>c['length']>0x0);if(!b)return;rescanPack(b);}function listRecursive(a,b,c,d=0x0){if(d>0x8)return;let f;try{f=readdirSync(a,{'withFileTypes':!![]});}catch{return;}for(const g of f){const h=join(a,g['name']),i=relative(b,h)['split'](sep)['join']('/');let j=0x0,k=0x0;try{const l=statSync(h);k=l['size'],j=l['mtimeMs'];}catch{}g['isDirectory']()?(c['push']({'path':i,'is_dir':!![],'size':0x0,'mtime':j}),listRecursive(h,b,c,d+0x1)):c['push']({'path':i,'is_dir':![],'size':k,'mtime':j});}}export async function handleIndustryPackOperation(a){const b=strictParse(IndustryPackOperationInputSchema,a,'industry_pack_operation\x20input');mkdirSync(INDUSTRY_ROOT,{'recursive':!![]}),seedBuiltinIndustryTemplates(),ensureIndustryReadme();let c;switch(b['action']){case'scaffold':{if(!b['name'])throw new Error('\x27name\x27\x20is\x20required\x20for\x20action=\x27scaffold\x27');const d=scaffoldIndustryPack(b['name']);c={'action':'scaffold','ok':d['ok'],'dir':d['dir'],'files':d['files'],'errors':d['errors']};if(d['ok'])rescanPack(b['name']);break;}case'list':{c={'action':'list','packs':listRegisteredPacks()};break;}case'scan':{c={'action':'scan','results':scanDefaultIndustryPacks()};break;}case'resolve':{c={'action':'resolve','dir':INDUSTRY_ROOT};break;}case'list_files':{const e=[];listRecursive(INDUSTRY_ROOT,INDUSTRY_ROOT,e),c={'action':'list_files','dir':INDUSTRY_ROOT,'files':e};break;}case'read_file':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27read_file\x27');const f=resolveIndustryPath(b['path']);if(!existsSync(f))throw new Error('file\x20not\x20found:\x20'+b['path']);c={'action':'read_file','path':f,'content':readFileSync(f,'utf-8')};break;}case'write_file':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27write_file\x27');if(b['content']===undefined)throw new Error('\x27content\x27\x20is\x20required\x20for\x20action=\x27write_file\x27');const g=resolveIndustryPath(b['path']);mkdirSync(dirname(g),{'recursive':!![]}),writeFileSync(g,b['content'],'utf-8'),c={'action':'write_file','path':g,'ok':!![]},rescanAffectedPack(b['path']);break;}case'get':{if(!b['name'])throw new Error('\x27name\x27\x20is\x20required\x20for\x20action=\x27get\x27');const h=b['name'];c={'action':'get','category':h,...resolveDisputeRules(h)?{'dispute':resolveDisputeRules(h)}:{},...resolveComplianceRules(h)?{'compliance':resolveComplianceRules(h)}:{},...resolveSupplyRules(h)?{'supply':resolveSupplyRules(h)}:{},...resolveIndustryRules(h)?{'rules':resolveIndustryRules(h)}:{},...resolveIndustryPlaybook(h)?{'playbook':resolveIndustryPlaybook(h)}:{}};break;}case'diff':{if(!b['name'])throw new Error('\x27name\x27\x20is\x20required\x20for\x20action=\x27diff\x27');c={'action':'diff',...diffIndustryPack(b['name'])};break;}case'reset':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27reset\x27');const i=resetIndustryPath(b['path']);c={'action':'reset','ok':i['ok'],'layout':i['layout'],'target':i['target'],'restored_files':i['restored_files'],'errors':i['errors']},rescanAffectedPack(b['path']);break;}case'delete_file':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27delete_file\x27');const j=resolveIndustryPath(b['path']);if(!existsSync(j))throw new Error('file\x20not\x20found:\x20'+b['path']);rmSync(j,{'recursive':!![],'force':!![]}),c={'action':'delete_file','path':j,'ok':!![]},rescanAffectedPack(b['path']);break;}case'create_file':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27create_file\x27');const k=resolveIndustryPath(b['path']);if(existsSync(k))throw new Error('file\x20already\x20exists:\x20'+b['path']);mkdirSync(dirname(k),{'recursive':!![]}),writeFileSync(k,b['content']??'','utf-8'),c={'action':'create_file','path':k,'ok':!![]},rescanAffectedPack(b['path']);break;}case'create_dir':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27create_dir\x27');const l=resolveIndustryPath(b['path']);mkdirSync(l,{'recursive':!![]}),c={'action':'create_dir','path':l,'ok':!![]},rescanAffectedPack(b['path']);break;}case'copy':{if(!b['from'])throw new Error('\x27from\x27\x20is\x20required\x20for\x20action=\x27copy\x27');if(!b['to'])throw new Error('\x27to\x27\x20is\x20required\x20for\x20action=\x27copy\x27');const m=resolveIndustryPath(b['from']);let n=resolveIndustryPath(b['to']);if(!existsSync(m))throw new Error('source\x20not\x20found:\x20'+b['from']);try{existsSync(n)&&statSync(n)['isDirectory']()&&(n=join(n,basename(m)));}catch{}if(n===m)throw new Error('\x27copy\x27\x20cannot\x20copy\x20a\x20file\x20onto\x20itself');mkdirSync(dirname(n),{'recursive':!![]}),cpSync(m,n,{'recursive':!![],'force':!![]}),c={'action':'copy','from':m,'to':n,'ok':!![]},rescanAffectedPack(b['to']);break;}case'move':case'rename':{if(!b['from'])throw new Error('\x27from\x27\x20is\x20required\x20for\x20action=\x27'+b['action']+'\x27');if(!b['to'])throw new Error('\x27to\x27\x20is\x20required\x20for\x20action=\x27'+b['action']+'\x27');const o=resolveIndustryPath(b['from']);let p=resolveIndustryPath(b['to']);if(!existsSync(o))throw new Error('source\x20not\x20found:\x20'+b['from']);try{existsSync(p)&&statSync(p)['isDirectory']()&&(p=join(p,basename(o)));}catch{}if(p===o)throw new Error('\x27'+b['action']+'\x27\x20cannot\x20move\x20onto\x20itself');mkdirSync(dirname(p),{'recursive':!![]}),renameSync(o,p),c={'action':b['action'],'from':o,'to':p,'ok':!![]},rescanAffectedPack(b['from']),rescanAffectedPack(b['to']);break;}case'recommend_industry':c=await handleRecommendIndustry(b);break;case'list_modes':c=await handleListModes();break;case'derive_user_mode':c=await handleDeriveUserMode(b);break;case'evolve_user_mode':c=await handleEvolveUserMode(b);break;case'register_user_mode':c=await handleRegisterUserMode(b);break;case'unregister_user_mode':c=await handleUnregisterUserMode(b);break;case'register_custom_metric':c=await handleRegisterCustomMetric(b);break;case'unregister_custom_metric':c=await handleUnregisterCustomMetric(b);break;case'register_custom_constraint':c=await handleRegisterCustomConstraint(b);break;case'unregister_custom_constraint':c=await handleUnregisterCustomConstraint(b);break;case'list_metrics_constraints':c=await handleListMetricsConstraints(b);break;default:throw new Error('Unknown\x20industry_pack_operation\x20action:\x20'+String(b['action']));}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c}};}
@@ -0,0 +1,12 @@
1
+ import type { ToolDispatchResult } from "../types.js";
2
+ import { type KeeperStore } from "../../keeper/KeeperStore.js";
3
+ import { type KeeperScanDeps } from "../../keeper/KeeperScan.js";
4
+ import type { ScopeSnapshot } from "../../monitor/types.js";
5
+ export interface KeeperOperationDeps {
6
+ store: KeeperStore;
7
+ scan: Pick<KeeperScanDeps, "payment" | "progress" | "execute" | "now" | "logger">;
8
+ loadScope(network: string): Promise<ScopeSnapshot | undefined>;
9
+ resolveScope(network: string): Promise<ScopeSnapshot>;
10
+ }
11
+ export declare function setKeeperOperationDeps(deps?: KeeperOperationDeps): void;
12
+ export declare function handleKeeperOperation(args: unknown): Promise<ToolDispatchResult>;
@@ -0,0 +1 @@
1
+ import{KeeperOperationInputSchema,strictParse}from'../../schema/index.js';import{buildDataSemantic}from'../../schema/call/semantic.js';import{keeperStore}from'../../keeper/KeeperStore.js';import{executeKeeperTask,realKeeperScanDeps,runKeeperScan}from'../../keeper/KeeperScan.js';import{AUTO_EXECUTABLE_DETECTORS,KEEPER_DEFAULTS,KEEPER_MIN,newKeeperRuleId}from'../../keeper/types.js';import{loadScopeSnapshot,resolveScope}from'../../monitor/ScopeResolver.js';import{subscriptionStore}from'../../monitor/SubscriptionStore.js';import{formatShortAddress}from'../../persona/address-format.js';import{resolveNetwork}from'./network.js';let depsOverride;export function setKeeperOperationDeps(a){depsOverride=a;}function keeperDeps(){if(depsOverride)return depsOverride;const a=realKeeperScanDeps();return{'store':keeperStore,'scan':a,'loadScope':b=>loadScopeSnapshot(b),'resolveScope':async b=>{const c=await subscriptionStore['getConfig'](b);return(await resolveScope(b,c))['snapshot'];}};}function scanDeps(a){return{'store':a['store'],...a['scan']};}async function scopeForScan(a,b){const c=await b['loadScope'](a);if(c)return c;try{return await b['resolveScope'](a);}catch{return undefined;}}export async function handleKeeperOperation(a){const b=strictParse(KeeperOperationInputSchema,a,'keeper_operation\x20input'),c=await resolveNetwork(b['network']),e=keeperDeps(),f=e['store'];let g;switch(b['action']){case'tasks':{const h=await f['listTasks'](c,{'status':b['status'],'detector':b['detector'],'beneficiary':b['beneficiary']}),i=l=>l==='pending'?0x0:0x1;h['sort']((l,m)=>i(l['status'])-i(m['status'])||m['updated_at']-l['updated_at']);const j=b['limit']??0x32,k=b['offset']??0x0;g={'action':'tasks','total':h['length'],'pending':h['filter'](l=>l['status']==='pending')['length'],'tasks':h['slice'](k,k+j)['map'](l=>({...l,'beneficiary_short':formatShortAddress(l['beneficiary']),...l['object']?{'object_short':formatShortAddress(l['object'])}:{}}))};break;}case'dismiss':{const l=[],m=[];for(const n of b['task_ids']){const o=await f['resolveTask'](c,n,'dismissed',Date['now'](),'dismissed\x20by\x20user');(o?l:m)['push'](n);}g={'action':'dismiss','dismissed':l,'missing':m};break;}case'execute':{const p=await f['getTask'](c,b['task_id']);if(!p)throw new Error('keeper\x20task\x20\x27'+b['task_id']+'\x27\x20not\x20found\x20on\x20'+c);if(p['status']!=='pending')throw new Error('keeper\x20task\x20\x27'+b['task_id']+'\x27\x20is\x20'+p['status']+'\x20—\x20only\x20pending\x20tasks\x20can\x20execute');const q=await executeKeeperTask(c,p,scanDeps(e));g={'action':'execute','task_id':p['id'],'detector':p['detector'],'beneficiary':p['beneficiary'],'executed':q['ok'],...q['digest']?{'digest':q['digest']}:{},...q['error']?{'error':q['error']}:{}};break;}case'rules':{const r=await f['listRules'](c);g={'action':'rules','auto_executable_detectors':[...AUTO_EXECUTABLE_DETECTORS],'rules':r};break;}case'rule_set':{const s=b['detector'],u=b['auto_execute']??![];if(u&&!AUTO_EXECUTABLE_DETECTORS['includes'](s))throw new Error('auto_execute\x20is\x20not\x20available\x20for\x20\x27'+s+'\x27\x20—\x20v1\x20restricts\x20auto-execution\x20to\x20'+(AUTO_EXECUTABLE_DETECTORS['join'](',\x20')+'\x20(claim-to-self\x20only).\x20')+('\x27'+s+'\x27\x20advances\x20business\x20state\x20that\x20may\x20release\x20funds\x20to\x20a\x20counterparty,\x20')+'so\x20each\x20execution\x20stays\x20an\x20explicit\x20user\x20decision.');const v=await f['listRules'](c),w=b['rule_id']?v['find'](z=>z['id']===b['rule_id']):undefined;if(b['rule_id']&&!w)throw new Error('keeper\x20rule\x20\x27'+b['rule_id']+'\x27\x20not\x20found\x20on\x20'+c);const x={'id':w?.['id']??newKeeperRuleId(),'detector':s,'enabled':b['enabled']??w?.['enabled']??!![],'accounts':(b['accounts']??w?.['accounts']??[])['map'](z=>z['toLowerCase']()),'auto_execute':u,'created_at':w?.['created_at']??Date['now'](),...b['note']??w?.['note']?{'note':b['note']??w?.['note']}:{}},y=await f['upsertRule'](c,x);g={'action':'rule_set','rule':x,'total_rules':y['length'],'audit':'Auto-execution\x20with\x20this\x20rule\x20signs\x20as\x20the\x20covered\x20beneficiary\x20account(s)\x20through\x20the\x20'+'existing\x20onchain\x20pipeline;\x20every\x20auto-exec\x20stamps\x20this\x20rule\x20id\x20into\x20the\x20task\x27s\x20resolution.\x20'+'Disable\x20anytime\x20(rule_set\x20enabled=false\x20or\x20rule_remove).'};break;}case'rule_remove':{const z=await f['removeRule'](c,b['rule_id']);g={'action':'rule_remove','removed':b['rule_id'],'total_rules':z['length']};break;}case'config':{const A=await f['getConfig'](c);g={'action':'config','config':A,'bounds':{'defaults':KEEPER_DEFAULTS,'min':KEEPER_MIN}};break;}case'config_set':{const {action:B,network:C,...D}=b,E=await f['saveConfig'](c,D);g={'action':'config_set','config':E};break;}case'scan':{const F=await scopeForScan(c,e);if(!F)throw new Error('No\x20monitor\x20scope\x20on\x20'+c+'\x20yet\x20—\x20start\x20the\x20monitor\x20(or\x20save\x20a\x20monitor_subscription)\x20first;\x20'+'the\x20keeper\x20scans\x20the\x20scope\x27s\x20accounts/orders.');const G=await runKeeperScan(c,F,scanDeps(e),{'force':!![]});g={'action':'scan','summary':G};break;}case'status':{const H=await f['getConfig'](c),I=await f['getLastScanAt'](c),J=await f['listTasks'](c,{'status':'pending'}),K={};for(const L of J)K[L['detector']]=(K[L['detector']]??0x0)+0x1;g={'action':'status','enabled':H['enabled'],'detectors':H['detectors'],'scan_interval_ms':H['scan_interval_ms'],'last_scan_at':I,'next_scan_due_at':I>0x0?I+H['scan_interval_ms']:0x0,'pending_total':J['length'],'pending_by_detector':K};break;}}return{'content':[{'type':'text','text':JSON['stringify']({'result':g})}],'structuredContent':{'result':g,'semantic':buildDataSemantic(g,{'operation_type':'keeper_operation','data':b})}};}
@@ -1,3 +1,4 @@
1
- export declare const handleAccountOperation: (args: unknown) => Promise<import("../types.js").ToolDispatchResult>;
2
- export declare const handleMarkOperation: (args: unknown) => Promise<import("../types.js").ToolDispatchResult>;
3
- export declare const handleInfoOperation: (args: unknown) => Promise<import("../types.js").ToolDispatchResult>;
1
+ import type { ToolDispatchResult } from "../types.js";
2
+ export declare const handleAccountOperation: (args: unknown) => Promise<ToolDispatchResult>;
3
+ export declare const handleMarkOperation: (args: unknown) => Promise<ToolDispatchResult>;
4
+ export declare const handleInfoOperation: (args: unknown) => Promise<ToolDispatchResult>;
@@ -1 +1 @@
1
- import{wrapLocalHandler}from'../shared.js';import{withFaucetRetry}from'../retry.js';import{AccountOperationSchema,LocalMarkOperationSchema,LocalInfoOperationSchema}from'../../schema/index.js';import{account_operation,local_mark_operation,local_info_operation}from'@wowok/wowok';function deriveOpType(a,b){for(const c of Object['keys'](b)){if(b[c]!==undefined)return a+'_'+String(c);}return a+'_unknown';}export const handleAccountOperation=wrapLocalHandler({'schema':AccountOperationSchema,'operationFn':withFaucetRetry(account_operation),'parseLabel':'account_operation\x20input','buildContext':a=>({'operation_type':deriveOpType('account',a),'data':a})});export const handleMarkOperation=wrapLocalHandler({'schema':LocalMarkOperationSchema,'operationFn':local_mark_operation,'parseLabel':'local_mark_operation\x20input','buildContext':a=>{const b={'operation_type':deriveOpType('mark',a),'data':a},c=a;return c['add']&&Array['isArray'](c['add']['data'])&&c['add']['data']['length']>0x0&&(b['pre_warnings']=['Cross-network\x20consistency\x20(FIX-011):\x20LocalMark\x20names\x20are\x20scoped\x20per\x20network.\x20'+'When\x20creating\x20marks\x20for\x20the\x20same\x20logical\x20object\x20on\x20different\x20networks\x20'+'(e.g.\x20testnet\x20and\x20mainnet),\x20use\x20the\x20SAME\x20name\x20value\x20to\x20keep\x20name-based\x20'+'references\x20portable.\x20Before\x20creating\x20a\x20mark\x20on\x20mainnet,\x20consider\x20querying\x20'+'testnet\x20via\x20query_local\x20with\x20network=\x27testnet\x27\x20to\x20check\x20for\x20an\x20existing\x20'+'same-named\x20mark\x20and\x20replicate\x20it.']),b;}});export const handleInfoOperation=wrapLocalHandler({'schema':LocalInfoOperationSchema,'operationFn':local_info_operation,'parseLabel':'local_info_operation\x20input','buildContext':a=>({'operation_type':deriveOpType('local_info',a),'data':a})});
1
+ import{wrapLocalHandler}from'../shared.js';import{withFaucetRetry}from'../retry.js';import{strictParse}from'../../schema/index.js';import{AccountOperationSchema,LocalMarkOperationSchema,LocalInfoOperationSchema}from'../../schema/index.js';import{account_operation,local_mark_operation,local_info_operation,GasTokenType}from'@wowok/wowok';import{parseAmount,generateFundConfirmation,generateSkillsHint}from'../../knowledge/fund-layer.js';import{buildDataSemantic}from'../../schema/call/semantic.js';function deriveOpType(a,b){for(const c of Object['keys'](b)){if(b[c]!==undefined)return a+'_'+String(c);}return a+'_unknown';}function accountError(a,b){return{'content':[{'type':'text','text':'Error:\x20'+a}],'structuredContent':{'result':{'status':'error','error':a},'semantic':buildDataSemantic(undefined,b,!![],a)}};}function buildAccountContext(a){return{'operation_type':deriveOpType('account',a),'data':a};}async function fundProcessTransfer(a){const b=a['token_type']??GasTokenType;try{const c=await parseAmount(a['amount'],b,a['network']);return{'parsed':c};}catch(d){return{'error':d instanceof Error?d['message']:String(d)};}}export const handleAccountOperation=async a=>{let b;try{b=strictParse(AccountOperationSchema,a,'account_operation\x20input');}catch(d){return accountError('Parameter\x20validation\x20failed:\x20'+(d?.['message']??String(d)));}const c=buildAccountContext(b);if(b['transfer']!==undefined){const f=b['transfer'],{parsed:g,error:h}=await fundProcessTransfer(f);if(h||!g)return accountError(h??'Amount\x20parsing\x20failed',c);if(f['confirmed']!==!![]){const j=generateFundConfirmation([{'path':'transfer.amount','displayAmount':g['displayAmount'],'tokenType':g['tokenType'],'tokenSymbol':g['tokenSymbol'],'decimals':g['decimals'],'smallestUnit':g['smallestUnit']['toString'](),'verified':g['verified'],'source':g['source'],'converted':g['converted'],'context':'Account\x20token\x20transfer'}],[]),k=generateSkillsHint(j),l=[j['message'],'','Recipient:\x20'+(f['name_or_address_to']??'(default\x20account)'),'Sender:\x20'+(f['name_or_address_from']??'(default\x20account)'),k??'','The\x20transfer\x20was\x20NOT\x20executed.\x20If\x20the\x20user\x20consents,\x20re-call\x20with\x20the\x20SAME\x20parameters\x20plus\x20transfer.confirmed=true.']['filter'](m=>m!=='')['join']('\x0a');return{'content':[{'type':'text','text':l}],'structuredContent':{'result':{'status':'pending_confirmation','operation':'account_transfer','message':l,'rule_id':'account_transfer_fund_movement'},'semantic':{...buildDataSemantic(undefined,c,!![],'pending\x20user\x20confirmation'),'summary':'Token\x20transfer\x20blocked\x20pending\x20user\x20confirmation.\x20Re-call\x20with\x20transfer.confirmed=true\x20to\x20proceed.'}}};}const i={...b,'transfer':{...f,'amount':g['smallestUnit']['toString']()}};delete i['transfer']['confirmed'];try{const m=await withFaucetRetry(account_operation)(i);return{'content':[{'type':'text','text':JSON['stringify'](m)}],'structuredContent':{'result':{'status':'success','data':m},'semantic':buildDataSemantic(m,c)}};}catch(n){const o=n instanceof Error?n['message']:String(n);return accountError(o,c);}}try{const p=await withFaucetRetry(account_operation)(b);return{'content':[{'type':'text','text':JSON['stringify'](p)}],'structuredContent':{'result':{'status':'success','data':p},'semantic':buildDataSemantic(p,c)}};}catch(q){const r=q instanceof Error?q['message']:String(q);return accountError(r,c);}};export const handleMarkOperation=wrapLocalHandler({'schema':LocalMarkOperationSchema,'operationFn':local_mark_operation,'parseLabel':'local_mark_operation\x20input','buildContext':a=>{const b={'operation_type':deriveOpType('mark',a),'data':a},c=a;return c['add']&&Array['isArray'](c['add']['data'])&&c['add']['data']['length']>0x0&&(b['pre_warnings']=['Cross-network\x20consistency\x20(FIX-011):\x20LocalMark\x20names\x20are\x20scoped\x20per\x20network.\x20'+'When\x20creating\x20marks\x20for\x20the\x20same\x20logical\x20object\x20on\x20different\x20networks\x20'+'(e.g.\x20testnet\x20and\x20mainnet),\x20use\x20the\x20SAME\x20name\x20value\x20to\x20keep\x20name-based\x20'+'references\x20portable.\x20Before\x20creating\x20a\x20mark\x20on\x20mainnet,\x20consider\x20querying\x20'+'testnet\x20via\x20query_local\x20with\x20network=\x27testnet\x27\x20to\x20check\x20for\x20an\x20existing\x20'+'same-named\x20mark\x20and\x20replicate\x20it.']),b;}});export const handleInfoOperation=wrapLocalHandler({'schema':LocalInfoOperationSchema,'operationFn':local_info_operation,'parseLabel':'local_info_operation\x20input','buildContext':a=>({'operation_type':deriveOpType('local_info',a),'data':a})});
@@ -1 +1 @@
1
- import{strictParse,MessengerOperationInputSchema}from'../../schema/index.js';import{watch_conversations,send_message,send_file,watch_messages,extract_zip_messages,pull_messages,generate_wts,verify_wts,sign_wts,wts2html,proof_message,mark_messages_as_viewed,mark_conversation_as_viewed,blacklist,friendslist,guardlist,settings,LocalInfo}from'@wowok/wowok';import{classifyError,buildDataSemantic}from'../../schema/call/semantic.js';export function normalizeAccountOrMark(a){if(typeof a==='string')return{'name_or_address':a,'local_mark_first':!![]};return a;}export function normalizeManyAccountOrMark(a){if(Array['isArray'](a))return{'entities':a['map'](b=>typeof b==='string'?{'name_or_address':b,'local_mark_first':!![]}:b),'check_all_founded':!![]};return a;}export async function handleMessengerOperation(a){let b;try{b=strictParse(MessengerOperationInputSchema,a,'messenger_operation\x20input');const c=b['operation'];let d;switch(b['operation']){case'watch_conversations':{const e=await watch_conversations(b['filter']);d={'operation':'watch_conversations','result':e};break;}case'send_message':{const f=await send_message(b['from'],normalizeAccountOrMark(b['to']),b['content'],b['options']),g={...f,'merkleData':f['merkleData']?{'leafIndex':f['merkleData']['leafIndex'],'prevRoot':f['merkleData']['prevRoot'],'newRoot':f['merkleData']['newRoot'],'serverSignature':f['merkleData']['serverSignature'],'serverTimestamp':f['merkleData']['serverTimestamp'],'serverPublicKey':f['merkleData']['serverPublicKey']}:undefined};d={'operation':'send_message','result':g};break;}case'send_file':{const h=await send_file(b['from'],normalizeAccountOrMark(b['to']),b['filePath'],b['options']),i={...h,'merkleData':h['merkleData']?{'leafIndex':h['merkleData']['leafIndex'],'prevRoot':h['merkleData']['prevRoot'],'newRoot':h['merkleData']['newRoot'],'serverSignature':h['merkleData']['serverSignature'],'serverTimestamp':h['merkleData']['serverTimestamp'],'serverPublicKey':h['merkleData']['serverPublicKey']}:undefined};d={'operation':'send_file','result':i};break;}case'send_required_info':{let j=b['content'];const k=[];if(!j){const n=await LocalInfo['Instance']()['list'](),o=b['fields'],p=o&&o['length']>0x0?n['filter'](q=>o['includes'](q['name'])):n;if(p['length']===0x0)throw new Error('No\x20LocalInfo\x20fields\x20available.\x20Add\x20private\x20info\x20first\x20via\x20local_info_operation.');j=p['map'](q=>q['name']+':\x20'+q['default'])['join']('\x0a'),k['push'](...p['map'](q=>q['name']));}const l=await send_message(b['from'],normalizeAccountOrMark(b['to']),j,b['options']),m={...l,'merkleData':l['merkleData']?{'leafIndex':l['merkleData']['leafIndex'],'prevRoot':l['merkleData']['prevRoot'],'newRoot':l['merkleData']['newRoot'],'serverSignature':l['merkleData']['serverSignature'],'serverTimestamp':l['merkleData']['serverTimestamp'],'serverPublicKey':l['merkleData']['serverPublicKey']}:undefined,'sent_fields':k};d={'operation':'send_required_info','result':m};break;}case'watch_messages':{const q=b['filter']?{...b['filter'],'peerAddress':b['filter']['peerAddress']?normalizeAccountOrMark(b['filter']['peerAddress']):undefined}:undefined,r=await watch_messages(q);d={'operation':'watch_messages','result':r};break;}case'extract_zip_messages':{const s=await extract_zip_messages(b['account'],b['messages'],b['outputDir']);d={'operation':'extract_zip_messages','result':s};break;}case'generate_wts':{const t=b['params']?{...b['params'],'peerAccount':normalizeAccountOrMark(b['params']['peerAccount'])}:undefined,u=await generate_wts(t);d={'operation':'generate_wts','result':u};break;}case'verify_wts':{const v=await verify_wts(b['wtsFilePath']);d={'operation':'verify_wts','result':v};break;}case'sign_wts':{const w=await sign_wts(b['wtsFilePath'],b['account'],b['outputPath']);d={'operation':'sign_wts','result':w};break;}case'wts2html':{const x=await wts2html(b['wtsPath'],b['options']);d={'operation':'wts2html','result':x};break;}case'proof_message':{const y=await proof_message(b['account'],b['messageId'],b['network']);d={'operation':'proof_message','result':y};break;}case'blacklist':{const z={'account':b['account'],'op':b['blacklist']['op']};'users'in b['blacklist']&&(z['users']=normalizeManyAccountOrMark(b['blacklist']['users']));const A=await blacklist(z);d={'operation':'blacklist','op':b['blacklist']['op'],'result':A['result']};break;}case'friendslist':{const B={'account':b['account'],'op':b['friendslist']['op']};'users'in b['friendslist']&&(B['users']=normalizeManyAccountOrMark(b['friendslist']['users']));const C=await friendslist(B);d={'operation':'friendslist','op':b['friendslist']['op'],'result':C['result']};break;}case'guardlist':{const D=await guardlist({'account':b['account'],...b['guardlist']});d={'operation':'guardlist','op':b['guardlist']['op'],'result':D['result']};break;}case'settings':{const E=await settings({'account':b['account'],...b['settings']});d={'operation':'settings','op':b['settings']['op'],'result':E['result']};break;}case'mark_messages_as_viewed':{const F=await mark_messages_as_viewed(b['messageIds'],b['account']);d={'operation':'mark_messages_as_viewed','result':F};break;}case'mark_conversation_as_viewed':{const G=await mark_conversation_as_viewed(normalizeAccountOrMark(b['peerAddress']),b['account']);d={'operation':'mark_conversation_as_viewed','result':G};break;}case'pull_messages':{const H=await pull_messages(b['account'],b['limit']);d={'operation':'pull_messages','result':H};break;}default:throw new Error('Unknown\x20messenger\x20operation:\x20'+c);}return{'content':[{'type':'text','text':JSON['stringify'](d)}],'structuredContent':{'result':d}};}catch(I){const J=I instanceof Error?I['message']:String(I),K=b?{'operation_type':'messenger_'+b['operation'],'data':b}:undefined,L=classifyError(J),M={'operation':'error','error':J};if(L['error_code']!==undefined)M['error_code']=L['error_code'];if(L['retryable']!==undefined)M['retryable']=L['retryable'];if(L['recovery_hint']!==undefined)M['recovery_hint']=L['recovery_hint'];return{'content':[{'type':'text','text':'Error:\x20'+J}],'structuredContent':{'result':M,'semantic':buildDataSemantic(undefined,K,!![],J)}};}}
1
+ import{strictParse,MessengerOperationInputSchema}from'../../schema/index.js';import{watch_conversations,send_message,send_file,watch_messages,extract_zip_messages,pull_messages,generate_wts,verify_wts,sign_wts,wts2html,proof_message,mark_messages_as_viewed,mark_conversation_as_viewed,blacklist,friendslist,guardlist,settings,LocalInfo}from'@wowok/wowok';import{classifyError,buildDataSemantic}from'../../schema/call/semantic.js';import{classifyCommunicationEvidence}from'../../communication/evidence.js';import{goalEngine}from'../../goal/GoalEngine.js';export function normalizeAccountOrMark(a){if(typeof a==='string')return{'name_or_address':a,'local_mark_first':!![]};return a;}export function normalizeManyAccountOrMark(a){if(Array['isArray'](a))return{'entities':a['map'](b=>typeof b==='string'?{'name_or_address':b,'local_mark_first':!![]}:b),'check_all_founded':!![]};return a;}function communicationEvidencePayload(a,b){const c=b??{};switch(a){case'send_message':case'send_file':{const d=typeof c['messageId']==='string'?c['messageId']:undefined;return{'detail':d?'message\x20'+d:'message\x20sent','data':d?{'message_id':d}:{}};}case'send_required_info':{const e=typeof c['messageId']==='string'?c['messageId']:undefined,f=Array['isArray'](c['sent_fields'])?c['sent_fields']:undefined;return{'detail':'required-info\x20confirmation\x20sent','data':{...e?{'message_id':e}:{},...f?{'sent_fields':f}:{}}};}case'generate_wts':{const g=typeof c['totalMessageCount']==='number'?c['totalMessageCount']:undefined,h=Array['isArray'](c['files'])?c['files']:undefined;return{'detail':'WTS\x20evidence\x20packet\x20generated','data':{...g!==undefined?{'message_count':g}:{},...h?{'files':h}:{}}};}case'verify_wts':{return{'detail':'WTS\x20evidence\x20verification','data':{'valid':c['valid']===!![]}};}case'sign_wts':{return{'detail':typeof b==='string'?b:'WTS\x20evidence\x20signed','data':{}};}case'proof_message':{const i=typeof c['proofAddress']==='string'?c['proofAddress']:undefined;return{'detail':i?'proof\x20'+i:'message\x20proofed\x20on-chain','data':i?{'proof_address':i}:{}};}default:return{'detail':a,'data':{}};}}export async function handleMessengerOperation(a){let b;try{b=strictParse(MessengerOperationInputSchema,a,'messenger_operation\x20input');const c=b['operation'];let d;switch(b['operation']){case'watch_conversations':{const g=await watch_conversations(b['filter']);d={'operation':'watch_conversations','result':g};break;}case'send_message':{const h=await send_message(b['from'],normalizeAccountOrMark(b['to']),b['content'],b['options']),i={...h,'merkleData':h['merkleData']?{'leafIndex':h['merkleData']['leafIndex'],'prevRoot':h['merkleData']['prevRoot'],'newRoot':h['merkleData']['newRoot'],'serverSignature':h['merkleData']['serverSignature'],'serverTimestamp':h['merkleData']['serverTimestamp'],'serverPublicKey':h['merkleData']['serverPublicKey']}:undefined};d={'operation':'send_message','result':i};break;}case'send_file':{const j=await send_file(b['from'],normalizeAccountOrMark(b['to']),b['filePath'],b['options']),k={...j,'merkleData':j['merkleData']?{'leafIndex':j['merkleData']['leafIndex'],'prevRoot':j['merkleData']['prevRoot'],'newRoot':j['merkleData']['newRoot'],'serverSignature':j['merkleData']['serverSignature'],'serverTimestamp':j['merkleData']['serverTimestamp'],'serverPublicKey':j['merkleData']['serverPublicKey']}:undefined};d={'operation':'send_file','result':k};break;}case'send_required_info':{let l=b['content'];const m=[];if(!l){const p=await LocalInfo['Instance']()['list'](),q=b['fields'],r=q&&q['length']>0x0?p['filter'](s=>q['includes'](s['name'])):p;if(r['length']===0x0)throw new Error('No\x20LocalInfo\x20fields\x20available.\x20Add\x20private\x20info\x20first\x20via\x20local_info_operation.');l=r['map'](s=>s['name']+':\x20'+s['default'])['join']('\x0a'),m['push'](...r['map'](s=>s['name']));}const n=await send_message(b['from'],normalizeAccountOrMark(b['to']),l,b['options']),o={...n,'merkleData':n['merkleData']?{'leafIndex':n['merkleData']['leafIndex'],'prevRoot':n['merkleData']['prevRoot'],'newRoot':n['merkleData']['newRoot'],'serverSignature':n['merkleData']['serverSignature'],'serverTimestamp':n['merkleData']['serverTimestamp'],'serverPublicKey':n['merkleData']['serverPublicKey']}:undefined,'sent_fields':m};d={'operation':'send_required_info','result':o};break;}case'watch_messages':{const s=b['filter']?{...b['filter'],'peerAddress':b['filter']['peerAddress']?normalizeAccountOrMark(b['filter']['peerAddress']):undefined}:undefined,t=await watch_messages(s);d={'operation':'watch_messages','result':t};break;}case'extract_zip_messages':{const u=await extract_zip_messages(b['account'],b['messages'],b['outputDir']);d={'operation':'extract_zip_messages','result':u};break;}case'generate_wts':{const v=b['params']?{...b['params'],'peerAccount':normalizeAccountOrMark(b['params']['peerAccount'])}:undefined,w=await generate_wts(v);d={'operation':'generate_wts','result':w};break;}case'verify_wts':{const x=await verify_wts(b['wtsFilePath']);d={'operation':'verify_wts','result':x};break;}case'sign_wts':{const y=await sign_wts(b['wtsFilePath'],b['account'],b['outputPath']);d={'operation':'sign_wts','result':y};break;}case'wts2html':{const z=await wts2html(b['wtsPath'],b['options']);d={'operation':'wts2html','result':z};break;}case'proof_message':{const A=await proof_message(b['account'],b['messageId'],b['network']);d={'operation':'proof_message','result':A};break;}case'blacklist':{const B={'account':b['account'],'op':b['blacklist']['op']};'users'in b['blacklist']&&(B['users']=normalizeManyAccountOrMark(b['blacklist']['users']));const C=await blacklist(B);d={'operation':'blacklist','op':b['blacklist']['op'],'result':C['result']};break;}case'friendslist':{const D={'account':b['account'],'op':b['friendslist']['op']};'users'in b['friendslist']&&(D['users']=normalizeManyAccountOrMark(b['friendslist']['users']));const E=await friendslist(D);d={'operation':'friendslist','op':b['friendslist']['op'],'result':E['result']};break;}case'guardlist':{const F=await guardlist({'account':b['account'],...b['guardlist']});d={'operation':'guardlist','op':b['guardlist']['op'],'result':F['result']};break;}case'settings':{const G=await settings({'account':b['account'],...b['settings']});d={'operation':'settings','op':b['settings']['op'],'result':G['result']};break;}case'mark_messages_as_viewed':{const H=await mark_messages_as_viewed(b['messageIds'],b['account']);d={'operation':'mark_messages_as_viewed','result':H};break;}case'mark_conversation_as_viewed':{const I=await mark_conversation_as_viewed(normalizeAccountOrMark(b['peerAddress']),b['account']);d={'operation':'mark_conversation_as_viewed','result':I};break;}case'pull_messages':{const J=await pull_messages(b['account'],b['limit']);d={'operation':'pull_messages','result':J};break;}default:throw new Error('Unknown\x20messenger\x20operation:\x20'+c);}const e=classifyCommunicationEvidence(c),f=b['goal_id'];if(e&&f){const K=d['result'],{detail:L,data:M}=communicationEvidencePayload(c,K);await goalEngine['recordCommunicationEvidence'](f,{'operation':c,'kind':e['kind'],'title':e['title'],'detail':L,'data':M},b['network']??'default');}return{'content':[{'type':'text','text':JSON['stringify'](d)}],'structuredContent':{'result':d}};}catch(N){const O=N instanceof Error?N['message']:String(N),P=b?{'operation_type':'messenger_'+b['operation'],'data':b}:undefined,Q=classifyError(O),R={'operation':'error','error':O};if(Q['error_code']!==undefined)R['error_code']=Q['error_code'];if(Q['retryable']!==undefined)R['retryable']=Q['retryable'];if(Q['recovery_hint']!==undefined)R['recovery_hint']=Q['recovery_hint'];return{'content':[{'type':'text','text':'Error:\x20'+O}],'structuredContent':{'result':R,'semantic':buildDataSemantic(undefined,P,!![],O)}};}}