@wowok/agent-mcp 2.7.2 → 2.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. package/dist/config/runtime.js +1 -1
  2. package/dist/customer/account-events.d.ts +32 -0
  3. package/dist/customer/account-events.js +1 -0
  4. package/dist/customer/customer-advice.d.ts +1 -0
  5. package/dist/customer/customer-advice.js +1 -1
  6. package/dist/customer/info-puzzle.js +1 -1
  7. package/dist/customer/order-strategy.d.ts +1 -1
  8. package/dist/customer/reminder-system.d.ts +2 -0
  9. package/dist/customer/reminder-system.js +1 -1
  10. package/dist/customer/risk-assessment.d.ts +1 -0
  11. package/dist/customer/risk-assessment.js +1 -1
  12. package/dist/customer/types.d.ts +2 -0
  13. package/dist/evaluation/builtins/arbitration-score.d.ts +41 -0
  14. package/dist/evaluation/builtins/arbitration-score.js +1 -0
  15. package/dist/evaluation/builtins/index.d.ts +1 -0
  16. package/dist/evaluation/builtins/index.js +1 -1
  17. package/dist/evaluation/category-match-rules.d.ts +30 -0
  18. package/dist/evaluation/category-match-rules.js +1 -0
  19. package/dist/evaluation/engine.js +1 -1
  20. package/dist/evaluation/extract.js +1 -1
  21. package/dist/evaluation/index.d.ts +1 -0
  22. package/dist/evaluation/index.js +1 -1
  23. package/dist/evaluation/location-match.d.ts +42 -0
  24. package/dist/evaluation/location-match.js +1 -0
  25. package/dist/evaluation/path-reasoning.d.ts +35 -0
  26. package/dist/evaluation/path-reasoning.js +1 -0
  27. package/dist/evaluation/region.d.ts +6 -0
  28. package/dist/evaluation/region.js +1 -1
  29. package/dist/evaluation/types.d.ts +17 -0
  30. package/dist/experience/realtime-feedback.js +1 -1
  31. package/dist/experience/user-profile.d.ts +1 -1
  32. package/dist/extensions/index.d.ts +6 -0
  33. package/dist/extensions/index.js +1 -1
  34. package/dist/extensions/industry-layers.d.ts +75 -0
  35. package/dist/extensions/industry-layers.js +1 -0
  36. package/dist/extensions/industry-pack.d.ts +105 -0
  37. package/dist/extensions/industry-pack.js +1 -0
  38. package/dist/extensions/metric-registry.js +1 -1
  39. package/dist/extensions/mode-evaluator.d.ts +1 -1
  40. package/dist/extensions/registry.d.ts +1 -0
  41. package/dist/extensions/registry.js +1 -1
  42. package/dist/graph/base.d.ts +8 -0
  43. package/dist/graph/base.js +1 -0
  44. package/dist/harness/index.d.ts +1 -0
  45. package/dist/harness/index.js +1 -1
  46. package/dist/harness/plan.d.ts +2 -0
  47. package/dist/harness/plan.js +1 -1
  48. package/dist/harness/recover.d.ts +1 -1
  49. package/dist/harness/types.d.ts +2 -3
  50. package/dist/index.js +1 -1
  51. package/dist/knowledge/allocation-confirm.js +1 -1
  52. package/dist/knowledge/anti-cheat.d.ts +37 -0
  53. package/dist/knowledge/anti-cheat.js +1 -0
  54. package/dist/knowledge/arb-confirm.d.ts +28 -0
  55. package/dist/knowledge/arb-confirm.js +1 -0
  56. package/dist/knowledge/arb-translation.d.ts +48 -0
  57. package/dist/knowledge/arb-translation.js +1 -0
  58. package/dist/knowledge/arbitration-context.js +1 -1
  59. package/dist/knowledge/arbitration-ledger.js +1 -1
  60. package/dist/knowledge/bridge-confirm.d.ts +26 -0
  61. package/dist/knowledge/bridge-confirm.js +1 -0
  62. package/dist/knowledge/bridge-translation.d.ts +37 -0
  63. package/dist/knowledge/bridge-translation.js +1 -0
  64. package/dist/knowledge/contact-confirm.d.ts +27 -0
  65. package/dist/knowledge/contact-confirm.js +1 -0
  66. package/dist/knowledge/contact-translation.d.ts +39 -0
  67. package/dist/knowledge/contact-translation.js +1 -0
  68. package/dist/knowledge/demand-confirm.js +1 -1
  69. package/dist/knowledge/demand-context.d.ts +17 -0
  70. package/dist/knowledge/demand-context.js +1 -0
  71. package/dist/knowledge/demand-ledger.d.ts +26 -0
  72. package/dist/knowledge/demand-ledger.js +1 -0
  73. package/dist/knowledge/demand-puzzle.d.ts +29 -0
  74. package/dist/knowledge/demand-puzzle.js +1 -0
  75. package/dist/knowledge/demand-risk.js +1 -1
  76. package/dist/knowledge/demand-templates.d.ts +12 -0
  77. package/dist/knowledge/demand-templates.js +1 -0
  78. package/dist/knowledge/demand-translation.js +1 -1
  79. package/dist/knowledge/deployment-scanner.js +1 -1
  80. package/dist/knowledge/evidence-review.d.ts +12 -0
  81. package/dist/knowledge/evidence-review.js +1 -0
  82. package/dist/knowledge/examples-scanner-cli.js +1 -1
  83. package/dist/knowledge/examples-scanner.js +1 -1
  84. package/dist/knowledge/flywheel-loop.d.ts +0 -1
  85. package/dist/knowledge/flywheel-loop.js +1 -1
  86. package/dist/knowledge/guard-design-patterns.js +1 -1
  87. package/dist/knowledge/guard-migration.d.ts +1 -1
  88. package/dist/knowledge/index.d.ts +71 -3
  89. package/dist/knowledge/index.js +1 -1
  90. package/dist/knowledge/industry-registry.js +1 -1
  91. package/dist/knowledge/machine-render.js +1 -1
  92. package/dist/knowledge/market-metrics.d.ts +12 -0
  93. package/dist/knowledge/market-metrics.js +1 -0
  94. package/dist/knowledge/market-operations.d.ts +46 -0
  95. package/dist/knowledge/market-operations.js +1 -0
  96. package/dist/knowledge/mcp-schema-audit-cli.js +1 -1
  97. package/dist/knowledge/mcp-schema-audit.d.ts +22 -22
  98. package/dist/knowledge/mcp-schema-audit.js +1 -1
  99. package/dist/knowledge/onchain-constants.d.ts +2 -2
  100. package/dist/knowledge/onchain-constants.js +1 -1
  101. package/dist/knowledge/payment-confirm.d.ts +26 -0
  102. package/dist/knowledge/payment-confirm.js +1 -0
  103. package/dist/knowledge/payment-risk.js +1 -1
  104. package/dist/knowledge/payment-translation.d.ts +37 -0
  105. package/dist/knowledge/payment-translation.js +1 -0
  106. package/dist/knowledge/permission-context.d.ts +11 -0
  107. package/dist/knowledge/permission-context.js +1 -1
  108. package/dist/knowledge/permission-ledger.d.ts +11 -0
  109. package/dist/knowledge/permission-ledger.js +1 -1
  110. package/dist/knowledge/personal-confirm.d.ts +29 -0
  111. package/dist/knowledge/personal-confirm.js +1 -0
  112. package/dist/knowledge/personal-risk.js +1 -1
  113. package/dist/knowledge/personal-translation.d.ts +37 -0
  114. package/dist/knowledge/personal-translation.js +1 -0
  115. package/dist/knowledge/process-model.d.ts +1 -11
  116. package/dist/knowledge/process-model.js +1 -1
  117. package/dist/knowledge/progress-ledger.js +1 -1
  118. package/dist/knowledge/progress-risk.js +1 -1
  119. package/dist/knowledge/progress-templates.js +1 -1
  120. package/dist/knowledge/progress-translation.js +1 -1
  121. package/dist/knowledge/proof-context.d.ts +17 -0
  122. package/dist/knowledge/proof-context.js +1 -0
  123. package/dist/knowledge/proof-ledger.d.ts +34 -0
  124. package/dist/knowledge/proof-ledger.js +1 -0
  125. package/dist/knowledge/proof-puzzle.d.ts +35 -0
  126. package/dist/knowledge/proof-puzzle.js +1 -0
  127. package/dist/knowledge/proof-templates.d.ts +22 -0
  128. package/dist/knowledge/proof-templates.js +1 -0
  129. package/dist/knowledge/registrar-confirm.d.ts +26 -0
  130. package/dist/knowledge/registrar-confirm.js +1 -0
  131. package/dist/knowledge/registrar-risk.js +1 -1
  132. package/dist/knowledge/registrar-translation.d.ts +37 -0
  133. package/dist/knowledge/registrar-translation.js +1 -0
  134. package/dist/knowledge/repository-context.d.ts +12 -0
  135. package/dist/knowledge/repository-context.js +1 -0
  136. package/dist/knowledge/repository-ledger.d.ts +25 -0
  137. package/dist/knowledge/repository-ledger.js +1 -0
  138. package/dist/knowledge/repository-puzzle.d.ts +30 -0
  139. package/dist/knowledge/repository-puzzle.js +1 -0
  140. package/dist/knowledge/repository-templates.d.ts +14 -0
  141. package/dist/knowledge/repository-templates.js +1 -0
  142. package/dist/knowledge/resource-confirm.d.ts +25 -0
  143. package/dist/knowledge/resource-confirm.js +1 -0
  144. package/dist/knowledge/resource-translation.d.ts +37 -0
  145. package/dist/knowledge/resource-translation.js +1 -0
  146. package/dist/knowledge/reward-context.d.ts +2 -2
  147. package/dist/knowledge/reward-ledger.js +1 -1
  148. package/dist/knowledge/reward-translation.js +1 -1
  149. package/dist/knowledge/safety-rules.d.ts +1 -0
  150. package/dist/knowledge/safety-rules.js +1 -1
  151. package/dist/knowledge/service-risk.d.ts +1 -1
  152. package/dist/knowledge/service-risk.js +1 -1
  153. package/dist/knowledge/template-registry.js +1 -1
  154. package/dist/knowledge/tools-reference.js +1 -1
  155. package/dist/knowledge/treasury-context.d.ts +1 -1
  156. package/dist/knowledge/treasury-context.js +1 -1
  157. package/dist/knowledge/treasury-ledger.js +1 -1
  158. package/dist/knowledge/treasury-risk.js +1 -1
  159. package/dist/knowledge/universal-template.d.ts +22 -0
  160. package/dist/knowledge/universal-template.js +1 -0
  161. package/dist/knowledge/util-confirm.d.ts +24 -0
  162. package/dist/knowledge/util-confirm.js +1 -0
  163. package/dist/knowledge/util-risk.js +1 -1
  164. package/dist/knowledge/util-translation.d.ts +39 -0
  165. package/dist/knowledge/util-translation.js +1 -0
  166. package/dist/knowledge/workflow-guidance.d.ts +180 -0
  167. package/dist/knowledge/workflow-guidance.js +1 -0
  168. package/dist/participation/employee-kpi.d.ts +25 -0
  169. package/dist/participation/employee-kpi.js +1 -0
  170. package/dist/participation/employee-store.d.ts +16 -0
  171. package/dist/participation/employee-store.js +1 -0
  172. package/dist/participation/index.d.ts +2 -0
  173. package/dist/participation/index.js +1 -0
  174. package/dist/persona/defaults.js +1 -1
  175. package/dist/persona/index.d.ts +9 -2
  176. package/dist/persona/index.js +1 -1
  177. package/dist/persona/local-region.d.ts +20 -0
  178. package/dist/persona/local-region.js +1 -0
  179. package/dist/persona/model.js +1 -1
  180. package/dist/persona/overrides.d.ts +10 -0
  181. package/dist/persona/overrides.js +1 -0
  182. package/dist/persona/pack-personae.d.ts +11 -0
  183. package/dist/persona/pack-personae.js +1 -0
  184. package/dist/persona/strategy-intent.d.ts +20 -0
  185. package/dist/persona/strategy-intent.js +1 -0
  186. package/dist/persona/types.d.ts +3 -1
  187. package/dist/project/business-puzzle.d.ts +1 -1
  188. package/dist/project/business-puzzle.js +1 -1
  189. package/dist/project/deployment-doc.js +1 -1
  190. package/dist/project/edit-planner.js +1 -1
  191. package/dist/project/evaluation.d.ts +37 -1
  192. package/dist/project/evaluation.js +1 -1
  193. package/dist/project/graph-builder.d.ts +2 -2
  194. package/dist/project/graph-builder.js +1 -1
  195. package/dist/project/graph.d.ts +3 -6
  196. package/dist/project/handlers.d.ts +33 -2
  197. package/dist/project/handlers.js +1 -1
  198. package/dist/project/index.d.ts +1 -0
  199. package/dist/project/index.js +1 -1
  200. package/dist/project/merchant-guide.d.ts +19 -0
  201. package/dist/project/merchant-guide.js +1 -1
  202. package/dist/project/mode-actions.js +1 -1
  203. package/dist/project/rollback-policy.js +1 -1
  204. package/dist/project/semantic-assembler.d.ts +2 -2
  205. package/dist/project/semantic-assembler.js +1 -1
  206. package/dist/project/semantic-graph.d.ts +3 -5
  207. package/dist/project/workflow-design-assessment.d.ts +24 -0
  208. package/dist/project/workflow-design-assessment.js +1 -0
  209. package/dist/safety/confirm-gate.d.ts +1 -1
  210. package/dist/safety/confirm-gate.js +1 -1
  211. package/dist/schema/call/allocation.d.ts +186 -1385
  212. package/dist/schema/call/arbitration.d.ts +272 -1871
  213. package/dist/schema/call/base.d.ts +1831 -9076
  214. package/dist/schema/call/base.js +1 -1
  215. package/dist/schema/call/bridge.d.ts +911 -3171
  216. package/dist/schema/call/contact.d.ts +135 -931
  217. package/dist/schema/call/demand.d.ts +164 -1194
  218. package/dist/schema/call/guard.d.ts +298 -1140
  219. package/dist/schema/call/guard.js +1 -1
  220. package/dist/schema/call/machine.d.ts +459 -5403
  221. package/dist/schema/call/machine.js +1 -1
  222. package/dist/schema/call/order.d.ts +137 -844
  223. package/dist/schema/call/payment.d.ts +74 -561
  224. package/dist/schema/call/permission.d.ts +335 -2791
  225. package/dist/schema/call/personal.d.ts +227 -1814
  226. package/dist/schema/call/progress.d.ts +140 -843
  227. package/dist/schema/call/proof.d.ts +42 -258
  228. package/dist/schema/call/repository.d.ts +324 -2222
  229. package/dist/schema/call/reward.d.ts +153 -1183
  230. package/dist/schema/call/semantic.js +1 -1
  231. package/dist/schema/call/service.d.ts +376 -3431
  232. package/dist/schema/call/treasury.d.ts +252 -2158
  233. package/dist/schema/common/index.d.ts +222 -697
  234. package/dist/schema/common/index.js +1 -1
  235. package/dist/schema/config/index.d.ts +18 -161
  236. package/dist/schema/employee/index.d.ts +99 -0
  237. package/dist/schema/employee/index.js +1 -0
  238. package/dist/schema/evaluation/index.d.ts +1035 -3918
  239. package/dist/schema/evaluation/index.js +1 -1
  240. package/dist/schema/index.d.ts +5 -0
  241. package/dist/schema/index.js +1 -1
  242. package/dist/schema/industry-pack/index.d.ts +132 -0
  243. package/dist/schema/industry-pack/index.js +1 -0
  244. package/dist/schema/intent-radar/index.d.ts +92 -245
  245. package/dist/schema/intent-radar/index.js +1 -1
  246. package/dist/schema/local/index.d.ts +2045 -18080
  247. package/dist/schema/local/index.js +1 -1
  248. package/dist/schema/local/wip.d.ts +61 -651
  249. package/dist/schema/local/wip.js +1 -1
  250. package/dist/schema/messenger/index.d.ts +949 -5557
  251. package/dist/schema/messenger/index.js +1 -1
  252. package/dist/schema/operations.d.ts +3168 -26468
  253. package/dist/schema/operations.js +1 -1
  254. package/dist/schema/permission/index.d.ts +121 -0
  255. package/dist/schema/permission/index.js +1 -0
  256. package/dist/schema/persona/index.d.ts +469 -1820
  257. package/dist/schema/persona/index.js +1 -1
  258. package/dist/schema/project/index.d.ts +1023 -8450
  259. package/dist/schema/project/index.js +1 -1
  260. package/dist/schema/query/index.d.ts +12121 -75556
  261. package/dist/schema/query/index.js +1 -1
  262. package/dist/schema/schema-query/index.d.ts +35 -98
  263. package/dist/schema/schema-query/index.js +1 -1
  264. package/dist/schema/schema-version.js +1 -1
  265. package/dist/schema/task-status.d.ts +26 -132
  266. package/dist/schema/trust/index.d.ts +194 -1290
  267. package/dist/schema/utils/guard-parser.js +1 -1
  268. package/dist/schema/utils/node-parser.js +1 -1
  269. package/dist/schema/utils/skills-recommendation.d.ts +1 -0
  270. package/dist/schema/utils/skills-recommendation.js +1 -1
  271. package/dist/schema/workflow/index.d.ts +161 -0
  272. package/dist/schema/workflow/index.js +1 -0
  273. package/dist/schema/workspace/index.d.ts +69 -0
  274. package/dist/schema/workspace/index.js +1 -0
  275. package/dist/{schema-query → schema-query-impl}/index.js +1 -1
  276. package/dist/schemas/account_operation.output.json +3147 -1655
  277. package/dist/schemas/account_operation.schema.json +225 -218
  278. package/dist/schemas/bridge_operation.output.json +1168 -653
  279. package/dist/schemas/bridge_operation.schema.json +736 -504
  280. package/dist/schemas/config_operation.output.json +185 -179
  281. package/dist/schemas/config_operation.schema.json +21 -26
  282. package/dist/schemas/employee_operation.output.json +207 -0
  283. package/dist/schemas/employee_operation.schema.json +176 -0
  284. package/dist/schemas/evaluation_operation.output.json +2268 -601
  285. package/dist/schemas/evaluation_operation.schema.json +2919 -787
  286. package/dist/schemas/guard2file.output.json +58 -64
  287. package/dist/schemas/guard2file.schema.json +79 -81
  288. package/dist/schemas/index.json +41 -11
  289. package/dist/schemas/industry_pack_operation.output.json +594 -0
  290. package/dist/schemas/industry_pack_operation.schema.json +55 -0
  291. package/dist/schemas/intent_radar.output.json +275 -203
  292. package/dist/schemas/intent_radar.schema.json +124 -126
  293. package/dist/schemas/local_info_operation.output.json +1174 -660
  294. package/dist/schemas/local_info_operation.schema.json +119 -125
  295. package/dist/schemas/local_mark_operation.output.json +1239 -692
  296. package/dist/schemas/local_mark_operation.schema.json +91 -96
  297. package/dist/schemas/machineNode2file.output.json +63 -69
  298. package/dist/schemas/machineNode2file.schema.json +79 -81
  299. package/dist/schemas/messenger_operation.output.json +2722 -1531
  300. package/dist/schemas/messenger_operation.schema.json +1482 -1264
  301. package/dist/schemas/onchain_events.output.json +2590 -978
  302. package/dist/schemas/onchain_events.schema.json +117 -99
  303. package/dist/schemas/onchain_operations.output.json +3957 -2312
  304. package/dist/schemas/onchain_operations.schema.json +20799 -9285
  305. package/dist/schemas/onchain_operations_allocation.schema.json +171 -107
  306. package/dist/schemas/onchain_operations_arbitration.schema.json +233 -146
  307. package/dist/schemas/onchain_operations_contact.schema.json +129 -90
  308. package/dist/schemas/onchain_operations_demand.schema.json +170 -112
  309. package/dist/schemas/onchain_operations_gen_passport.schema.json +61 -646
  310. package/dist/schemas/onchain_operations_gen_proof.schema.json +40 -172
  311. package/dist/schemas/onchain_operations_guard.schema.json +3765 -294
  312. package/dist/schemas/onchain_operations_machine.schema.json +536 -163
  313. package/dist/schemas/onchain_operations_order.schema.json +126 -96
  314. package/dist/schemas/onchain_operations_payment.schema.json +82 -67
  315. package/dist/schemas/onchain_operations_permission.schema.json +331 -93
  316. package/dist/schemas/onchain_operations_personal.schema.json +636 -96
  317. package/dist/schemas/onchain_operations_progress.schema.json +125 -92
  318. package/dist/schemas/onchain_operations_proof.schema.json +76 -69
  319. package/dist/schemas/onchain_operations_repository.schema.json +636 -249
  320. package/dist/schemas/onchain_operations_reward.schema.json +218 -108
  321. package/dist/schemas/onchain_operations_service.schema.json +678 -220
  322. package/dist/schemas/onchain_operations_treasury.schema.json +401 -135
  323. package/dist/schemas/onchain_table_data.output.json +6833 -2432
  324. package/dist/schemas/onchain_table_data.schema.json +684 -417
  325. package/dist/schemas/permission_operation.output.json +173 -0
  326. package/dist/schemas/permission_operation.schema.json +39 -0
  327. package/dist/schemas/persona_operation.output.json +1568 -268
  328. package/dist/schemas/persona_operation.schema.json +346 -205
  329. package/dist/schemas/project_operation.output.json +6922 -5132
  330. package/dist/schemas/project_operation.schema.json +1050 -1020
  331. package/dist/schemas/query_task_status.output.json +195 -99
  332. package/dist/schemas/query_task_status.schema.json +12 -18
  333. package/dist/schemas/query_toolkit.output.json +18862 -14561
  334. package/dist/schemas/query_toolkit.schema.json +614 -522
  335. package/dist/schemas/schema_query.output.json +127 -129
  336. package/dist/schemas/schema_query.schema.json +64 -69
  337. package/dist/schemas/trust_score.output.json +678 -587
  338. package/dist/schemas/trust_score.schema.json +289 -277
  339. package/dist/schemas/wip_file.output.json +116 -124
  340. package/dist/schemas/wip_file.schema.json +142 -143
  341. package/dist/schemas/workflow_operation.output.json +164 -0
  342. package/dist/schemas/workflow_operation.schema.json +116 -0
  343. package/dist/schemas/workspace_operation.output.json +277 -0
  344. package/dist/schemas/workspace_operation.schema.json +45 -0
  345. package/dist/schemas/wowok_buildin_info.output.json +1682 -844
  346. package/dist/schemas/wowok_buildin_info.schema.json +576 -526
  347. package/dist/tools/handlers/bridge.d.ts +8 -1
  348. package/dist/tools/handlers/bridge.js +1 -1
  349. package/dist/tools/handlers/config.js +1 -1
  350. package/dist/tools/handlers/employee.d.ts +2 -0
  351. package/dist/tools/handlers/employee.js +1 -0
  352. package/dist/tools/handlers/evaluation.js +1 -1
  353. package/dist/tools/handlers/file-export.js +1 -1
  354. package/dist/tools/handlers/industry-pack.d.ts +2 -0
  355. package/dist/tools/handlers/industry-pack.js +1 -0
  356. package/dist/tools/handlers/onchain.js +1 -1
  357. package/dist/tools/handlers/permission.d.ts +2 -0
  358. package/dist/tools/handlers/permission.js +1 -0
  359. package/dist/tools/handlers/persona.js +1 -1
  360. package/dist/tools/handlers/project.js +1 -1
  361. package/dist/tools/handlers/query.js +1 -1
  362. package/dist/tools/handlers/schema-query.js +1 -1
  363. package/dist/tools/handlers/trust.js +1 -1
  364. package/dist/tools/handlers/wip.js +1 -1
  365. package/dist/tools/handlers/workflow.d.ts +2 -0
  366. package/dist/tools/handlers/workflow.js +1 -0
  367. package/dist/tools/handlers/workspace.d.ts +4 -0
  368. package/dist/tools/handlers/workspace.js +1 -0
  369. package/dist/tools/index.d.ts +2 -1
  370. package/dist/tools/index.js +1 -1
  371. package/dist/tools/rules-hook.d.ts +1 -1
  372. package/dist/tools/rules-hook.js +1 -1
  373. package/dist/tools/shared.d.ts +1 -1
  374. package/dist/tools/shared.js +1 -1
  375. package/dist/tools/types.d.ts +2 -1
  376. package/package.json +4 -5
  377. package/dist/knowledge/arbitration-trust.d.ts +0 -24
  378. package/dist/knowledge/arbitration-trust.js +0 -1
  379. package/dist/schema/call/bridge-handler.d.ts +0 -8
  380. package/dist/schema/call/bridge-handler.js +0 -1
  381. package/dist/schema/sync-layer4.d.ts +0 -21
  382. package/dist/schema/sync-layer4.js +0 -1
  383. /package/dist/{schema-query → schema-query-impl}/index.d.ts +0 -0
@@ -1,11 +1,10 @@
1
1
  import type { ProjectObjectType } from "./namespace.js";
2
+ import type { GraphEdgeBase, GraphNodeBase } from "../graph/base.js";
2
3
  export type EdgeKind = "machine" | "order_allocators" | "arbitrations" | "compensation_fund" | "rewards" | "buy_guard" | "permission" | "guard" | "prev" | "next" | "forward" | "parent" | "service" | "progress" | "arbitration" | "sub_order" | "references";
3
- export interface GraphNode {
4
- id: string;
4
+ export interface GraphNode extends GraphNodeBase {
5
5
  project?: string;
6
6
  projects?: string[];
7
7
  type?: ProjectObjectType;
8
- address?: string;
9
8
  isTemplate?: boolean;
10
9
  decision_contexts?: GraphDecisionContext[];
11
10
  }
@@ -19,9 +18,7 @@ export interface GraphDecisionContext {
19
18
  rationale?: string;
20
19
  outcome?: "success" | "failed" | "pending";
21
20
  }
22
- export interface GraphEdge {
23
- from: string;
24
- to: string;
21
+ export interface GraphEdge extends GraphEdgeBase {
25
22
  kind: EdgeKind;
26
23
  }
27
24
  export interface GraphSnapshot {
@@ -4,7 +4,7 @@ import type { ProjectOperationInputSchema } from "../schema/project/index.js";
4
4
  type ProjectInput = z.infer<typeof ProjectOperationInputSchema>;
5
5
  export declare function handleListProjects(v: ProjectInput): Promise<{
6
6
  action: "list_projects";
7
- items: {
7
+ items: ({
8
8
  objectCount: number;
9
9
  evaluationCount: number;
10
10
  objectTypes: string[];
@@ -23,7 +23,32 @@ export declare function handleListProjects(v: ProjectInput): Promise<{
23
23
  createdAt: number;
24
24
  updatedAt: number;
25
25
  metadata: Record<string, unknown> | null;
26
- }[];
26
+ } | {
27
+ onchainLastUpdated: {
28
+ timestamp_ms: string;
29
+ digest: string | undefined;
30
+ sender: string | undefined;
31
+ object: string;
32
+ };
33
+ objectCount: number;
34
+ evaluationCount: number;
35
+ objectTypes: string[];
36
+ id: string;
37
+ prefix: string;
38
+ name: string;
39
+ description: string | null;
40
+ industry: string | null;
41
+ perspective: import("@wowok/wowok").ProjectPerspective;
42
+ status: import("@wowok/wowok").ProjectStatus;
43
+ labels: string[] | null;
44
+ currentVersion: string | null;
45
+ serviceAddress: string | null;
46
+ defaultAccount: string | null;
47
+ network: string;
48
+ createdAt: number;
49
+ updatedAt: number;
50
+ metadata: Record<string, unknown> | null;
51
+ })[];
27
52
  total: number;
28
53
  }>;
29
54
  export declare function handleCreateProject(v: ProjectInput): Promise<{
@@ -175,6 +200,12 @@ export declare function handleGetProjectDetail(v: ProjectInput): Promise<{
175
200
  published: boolean | null;
176
201
  paused: boolean | null;
177
202
  } | null;
203
+ onchainLastUpdated: {
204
+ timestamp_ms: string;
205
+ digest?: string;
206
+ sender?: string;
207
+ object?: string;
208
+ } | null;
178
209
  evaluations: {
179
210
  id: string;
180
211
  evalType: EvaluationType;
@@ -1 +1 @@
1
- import{LocalProject,LocalMark,query_objects}from'@wowok/wowok';import{fetchMachineNodes}from'./machine-nodes.js';import{GraphBuilder}from'./graph-builder.js';import{SemanticAssembler}from'./semantic-assembler.js';import{runEvaluation,compareProjects}from'./evaluation.js';import{TaskTracker}from'./task-tracker.js';import{renderGuardMermaid,renderGuardTreeIndented,renderGuardAscii,renderGuardMarkmap}from'../knowledge/guard-render.js';import{renderMachineMermaid,renderMachineTreeIndented,renderMachineAscii,renderMachineMarkmap}from'../knowledge/machine-render.js';import{inferTraitsFromDescription,findSimilarIndustries}from'../knowledge/industry-generalizer.js';import{isObjectOfType}from'../schema/utils/object-type-utils.js';import{identifyMigrationDecisions}from'../harness/plan.js';const localProject=LocalProject['Instance']();function requireField(a,b){if(a===undefined||a===null)throw new Error('\x27'+b+'\x27\x20is\x20required\x20for\x20this\x20action');return a;}async function resolveProjectId(a){if(a['project_id'])return a['project_id'];if(a['project']){const b=await localProject['getProjectByPrefix'](a['project']);if(!b)throw new Error('Project\x20not\x20found\x20by\x20prefix:\x20'+a['project']);return b['id'];}throw new Error('Either\x20\x27project_id\x27\x20or\x20\x27project\x27\x20(prefix)\x20is\x20required\x20for\x20this\x20action');}async function resolveObjectAddress(a){if(a['object_address']){const b=a['object_address'],c=/^0x[0-9a-fA-F]{32,64}$/['test'](b),d=b['startsWith']('draft:');if(!c&&!d)throw new Error('Invalid\x20object_address\x20format:\x20\x27'+b['slice'](0x0,0x28)+(b['length']>0x28?'...':'')+'\x27.\x20'+'Expected\x20a\x20valid\x20Sui\x20address\x20(0x\x20+\x2032-64\x20hex\x20chars)\x20or\x20\x27draft:<name>\x27\x20sentinel.\x20'+'To\x20reference\x20an\x20object\x20by\x20name,\x20use\x20\x27object_name_add\x27\x20instead\x20of\x20\x27object_address\x27.');return b;}if(a['object_name_add']){const e=await LocalMark['Instance']()['get'](a['object_name_add']);if(e?.['address'])return e['address'];throw new Error('LocalMark\x20name\x20not\x20found:\x20'+a['object_name_add']);}throw new Error('Either\x20\x27object_address\x27\x20or\x20\x27object_name_add\x27\x20is\x20required\x20for\x20add_object');}function isDraftObject(a){if(a['objectAddress']&&a['objectAddress']['startsWith']('draft:'))return!![];const b=a['metadata'];return!!(b&&b['status']==='draft');}function isOnchainObject(a){if(isDraftObject(a))return![];return!!a['objectAddress']&&a['objectAddress']['startsWith']('0x');}export async function handleListProjects(a){const b={};if(a['filter_status'])b['status']=a['filter_status'];if(a['filter_perspective'])b['perspective']=a['filter_perspective'];if(a['filter_network'])b['network']=a['filter_network'];const c=await localProject['listProjects'](Object['keys'](b)['length']>0x0?b:undefined),d=await Promise['all'](c['map'](async e=>{const [f,g]=await Promise['all']([localProject['listObjects'](e['id']),localProject['listEvaluations'](e['id'])]),h=new Set();for(const j of f){if(j['objectType'])h['add'](j['objectType']);}const i=f['filter'](k=>isOnchainObject(k))['length'];if(e['status']==='draft'&&f['length']>0x0){const k=await localProject['updateProject'](e['id'],{'status':'active'});if(k)return{...k,'objectCount':i,'evaluationCount':g['length'],'objectTypes':Array['from'](h)};}return{...e,'objectCount':i,'evaluationCount':g['length'],'objectTypes':Array['from'](h)};}));return{'action':'list_projects','items':d,'total':d['length']};}export async function handleCreateProject(a){const b=requireField(a['project_name'],'project_name');let c=a['project'];!c&&(c=b['toLowerCase']()['trim']()['replace'](/[^a-z0-9]+/g,'_')['replace'](/^_+|_+$/g,'')['substring'](0x0,0x3c),!c&&(c='proj_'+Date['now']()['toString'](0x24)));const d=await localProject['getProjectByPrefix'](c);if(d){if(a['project'])throw new Error('Project\x20prefix\x20\x27'+c+'\x27\x20already\x20exists\x20(project:\x20\x27'+d['name']+'\x27,\x20id:\x20\x27'+d['id']+'\x27).\x20'+'Use\x20a\x20different\x20prefix\x20or\x20update\x20the\x20existing\x20project.');let i=0x2;while(await localProject['getProjectByPrefix'](c+'_'+i)){i++;}c=c+'_'+i;}const e={'prefix':c,'name':b,'description':a['project_description'],'industry':a['project_industry'],'perspective':a['project_perspective']??'producer','labels':a['project_labels'],'serviceAddress':a['service_address'],'network':a['project_network']??'testnet'},f=await localProject['createProject'](e);if(a['service_address'])try{await localProject['addObject'](f['id'],{'objectAddress':a['service_address'],'objectType':'Service','objectName':a['service_address']['startsWith']('0x')?undefined:a['service_address'],'role':'core','metadata':{'auto_added_from_service_address':!![],'added_at':new Date()['toISOString']()}});}catch(j){console['warn']('[create_project]\x20Failed\x20to\x20auto-add\x20Service\x20\x27'+a['service_address']+'\x27:\x20'+j['message']+'.\x20'+'Use\x20add_object\x20action\x20to\x20manually\x20add\x20it.');}const g=a['project_industry'],h=a['skip_templates']===!![];if(g&&g!=='general'&&!h)try{const {IndustryModeRegistry:k}=await import('../extensions/index.js'),l=k['Instance'](),m={'prefix':c,'version':f['currentVersion']??'v1','network':f['network']??'testnet','business_intent':a['project_description']??b,'industry':g},n=await l['applyTemplate'](g,m['business_intent'],m),o=inferTraitsFromDescription(m['business_intent']),p=findSimilarIndustries(o['traits'],0x3),q={'traits':o['traits'],'confidence':o['confidence'],'matched_keywords':o['matched_keywords'],'top_matches':p['map'](w=>({'industry':w['industry'],'similarity':w['similarity']}))},r=p[0x0],s=r&&!p['some'](w=>w['industry']===g)&&o['confidence']>=0.3&&r['similarity']>=0.6?'Intent\x20inference\x20suggests\x20industry\x20\x27'+r['industry']+'\x27\x20'+('(similarity\x20'+(r['similarity']*0x64)['toFixed'](0x0)+'%)\x20may\x20fit\x20the\x20description\x20')+('better\x20than\x20the\x20chosen\x20\x27'+g+'\x27.\x20Call\x20action=\x27recommend_industry\x27\x20for\x20the\x20full\x20')+('recommendation\x20chain,\x20or\x20ignore\x20this\x20hint\x20if\x20\x27'+g+'\x27\x20was\x20chosen\x20intentionally.'):undefined,t=[];for(const w of n['objects']){const x=await localProject['addObject'](f['id'],{'objectAddress':'draft:'+w['name'],'objectType':w['object_type'],'objectName':w['name'],'role':w['object_type']==='service'?'core':'dependency','metadata':{'status':'draft','config':w['config'],'publish_required':w['publish_required'],'description':w['description'],'entry_id':w['entry_id']}});t['push'](x);}const u=n['edges']['map'](y=>({'projectId':f['id'],'sourceObject':y['from'],'targetObject':y['to'],'edgeSource':'internal','relationshipType':mapEdgeKindToRelationshipType(y['edge_kind']),'fieldName':y['field_path'],'depth':0x0,'verified':![],'weight':0x1,'metadata':{'blueprint':!![],'required_at_publish':y['required_at_publish']}}));await localProject['saveGraphEdges'](f['id'],u);try{await localProject['saveDocument'](f['id'],m['network'],JSON['stringify']({'applied_template':n['applied_template'],'industry_source':n['industry_source'],'steps':n['steps'],'scenarios':n['scenarios']??[],'validation':n['validation'],'intent_inference':q,'generated_at':new Date()['toISOString']()},null,0x2),'blueprint');}catch(y){console['warn']('[create_project]\x20Failed\x20to\x20persist\x20blueprint\x20document:\x20'+y['message']);}return{'action':'create_project','project':f,'blueprint':{'objects_count':t['length'],'edges_count':u['length'],'industry_source':n['industry_source'],'applied_template':n['applied_template'],'steps_count':n['steps']['length'],'scenarios_count':n['scenarios']?.['length']??0x0,'key_risk':l['getMode'](g)?.['key_risk'],'intent_inference':q,...s?{'industry_mismatch_hint':s}:{}},'recommended_creation_order':getRecommendedCreationOrder(g)};}catch(z){return{'action':'create_project','project':f,'blueprint_warning':'Industry\x20template\x20application\x20failed:\x20'+z['message']+'.\x20Project\x20created\x20without\x20blueprint\x20—\x20use\x20add_object\x20to\x20manually\x20add\x20objects.','recommended_creation_order':getRecommendedCreationOrder(g)};}if(h)return{'action':'create_project','project':f,'blueprint_skipped':!![],'hint':'skip_templates=true\x20—\x20no\x20industry\x20blueprint\x20objects\x20were\x20created.\x20Use\x20add_object\x20to\x20manually\x20add\x20objects\x20to\x20this\x20project.','recommended_creation_order':getRecommendedCreationOrder(g)};if(!g){const A=(a['project_description']??b)['trim']();if(A)try{const {handleRecommendIndustry:B}=await import('./mode-actions.js'),C=B({'intent':A});if(C['recommendations']['length']>0x0)return{'action':'create_project','project':f,'recommended_creation_order':getRecommendedCreationOrder(g),'recommended_industries':C['recommendations'],'hint':'No\x20industry\x20specified.\x20Based\x20on\x20your\x20description,\x20top\x20match\x20is\x20\x27'+C['recommendations'][0x0]['industry']+'\x27.\x20To\x20get\x20a\x20ready-made\x20blueprint\x20'+'(~10\x20draft\x20objects\x20+\x20graph\x20edges),\x20recreate\x20with\x20project_industry\x20set\x20—\x20'+'or\x20continue\x20from\x20scratch\x20with\x20add_object.'};}catch{}}return{'action':'create_project','project':f,'recommended_creation_order':getRecommendedCreationOrder(g)};}function getRecommendedCreationOrder(a){const b=a&&a!=='general'?'\x20(industry=\x22'+a+'\x22\x20—\x20see\x20IndustryMode.build_notes\x20for\x20overrides)':'';return[{'step':0x1,'object':'Account','reason':'Base\x20identity\x20for\x20on-chain\x20operations;\x20owns\x20all\x20subsequent\x20objects\x20and\x20receives\x20settlement.','required':!![]},{'step':0x2,'object':'Permission','reason':'Centralized\x20access\x20control;\x20referenced\x20by\x20ALL\x20objects\x20(Service,\x20Machine,\x20Guard,\x20Contact,\x20Arbitration).','required':!![]},{'step':0x3,'object':'Service\x20(draft)','reason':'Create\x20the\x20skeleton\x20FIRST\x20(unpublished)\x20so\x20Guards\x20can\x20reference\x20it\x20by\x20LocalMark\x20NAME\x20—\x20breaks\x20the\x20Guard↔Service\x20circular\x20dependency.','required':!![]},{'step':0x4,'object':'Machine\x20(unpublished)','reason':'Business\x20workflow\x20nodes/forwards.\x20Requires\x20Permission.'+b,'required':!![]},{'step':0x5,'object':'Guard\x20x\x20N','reason':'Acceptance\x20logic\x20referencing\x20machine\x20node\x20names\x20+\x20service\x20name\x20via\x20LocalMark.\x20Bind\x20to\x20Machine\x20forwards\x20before\x20publish.','required':!![]},{'step':0x6,'object':'Machine\x20publish','reason':'Freeze\x20workflow\x20topology\x20(nodes/pairs/forwards\x20immutable).\x20Export\x20machineNode2file\x20first\x20for\x20backup.','required':!![]},{'step':0x7,'object':'Sales\x20(WIP)','reason':'Products\x20with\x20wip\x20URL\x20(must\x20be\x20a\x20public\x20endpoint)\x20+\x20wip_hash.\x20Recommend\x20generating\x20WIP\x20from\x20web/doc\x20material\x20via\x20AI\x20sub-task.','required':!![]},{'step':0x8,'object':'Treasury\x20(optional)','reason':'Fund\x20pool\x20for\x20organizations;\x20referenced\x20by\x20order_allocators\x20as\x20an\x20Entity\x20recipient.\x20Skip\x20for\x20personal\x20merchants.','required':![]},{'step':0x9,'object':'order_allocators','reason':'Fund\x20distribution\x20(Amount/Rate/Surplus).\x20Personal\x20merchant\x20→\x20Permission\x20owner;\x20organization\x20→\x20Treasury.','required':!![]},{'step':0xa,'object':'Contact','reason':'Customer-service\x20channel\x20(Service.um\x20→\x20Contact\x20→\x20ims[]);\x20enable\x20local\x20account\x20as\x20messenger\x20+\x20anti-spam.','required':!![]},{'step':0xb,'object':'Arbitration\x20(optional)','reason':'Third-party\x20dispute\x20resolution\x20(REUSE\x20an\x20existing\x20Arbitration).\x20MUST\x20NOT\x20reuse\x20Service\x27s\x20Permission\x20—\x20E_ARBITRATION_PERMISSION_CONFLICT.\x20Requires\x20compensation_fund\x20if\x20configured.','required':![]},{'step':0xc,'object':'Service\x20publish','reason':'Add\x20machine\x20+\x20order_allocators\x20+\x20buy_guard\x20+\x20sales\x20+\x20arbitrations,\x20then\x20publish:true.\x20machine/order_allocators/arbitrations\x20immutable\x20after\x20publish.','required':!![]}];}function mapEdgeKindToRelationshipType(a){switch(a){case'machine':case'compensation_fund':case'parent':return'bind';case'order_allocators':return'create';case'arbitrations':case'rewards':return'trigger';case'buy_guard':case'permission':case'guard':return'validate';case'service':case'progress':return'consume';default:return'bind';}}export async function handleCreateProjectFromOnchain(a){const b=requireField(a['service_address'],'service_address'),c=a['project_network']??'testnet';let d=a['project']??'svc_'+b['slice'](0x2,0x8);const f=a['project_name']??'Consumer\x20Project\x20'+b['slice'](0x2,0x8),g=await localProject['getProjectByPrefix'](d);if(g){if(a['project'])throw new Error('Project\x20prefix\x20\x27'+d+'\x27\x20already\x20exists\x20(project:\x20\x27'+g['name']+'\x27,\x20id:\x20\x27'+g['id']+'\x27).\x20'+'Use\x20a\x20different\x20prefix.');let q=0x2;while(await localProject['getProjectByPrefix'](d+'_'+q)){q++;}d=d+'_'+q;}const h=c==='testnet'?'mainnet':'testnet';let i=null;try{const r=await query_objects({'objects':[b],'network':c}),s=r?.['objects']?.[0x0];s&&s['object']&&(i=s['type']??null);}catch(t){throw new Error('Failed\x20to\x20query\x20'+c+'\x20for\x20the\x20Service\x20object:\x20'+((t instanceof Error?t['message']:String(t))+'.\x20')+('Check\x20the\x20network\x20connection\x20or\x20try\x20the\x20'+h+'\x20network.'));}if(!i)throw new Error('Service\x20object\x20not\x20found\x20on\x20'+c+':\x20the\x20address\x20'+b+'\x20does\x20not\x20exist\x20on\x20this\x20network.\x20'+('Switch\x20to\x20the\x20'+h+'\x20network\x20and\x20try\x20again.'));const j=i['toLowerCase'](),k=j['includes']('::service::service')||j==='service'||j['endsWith']('::service');if(!k)throw new Error('Object\x20'+b+'\x20is\x20not\x20a\x20Service\x20(its\x20on-chain\x20type\x20is\x20\x22'+i+'\x22).\x20'+'Only\x20on-chain\x20Service\x20objects\x20can\x20be\x20imported\x20as\x20a\x20project\x20root.');const l=await localProject['createProject']({'prefix':d,'name':f,'description':a['project_description']??'Auto-discovered\x20from\x20Service\x20'+b,'industry':a['project_industry'],'perspective':'consumer','labels':a['project_labels'],'serviceAddress':b,'network':c}),m=new GraphBuilder({'maxDepth':a['max_depth']??a['depth']??0x3,'enableRegistrar':a['enable_registrar']??!![],'enablePotential':a['enable_potential']??![],'projectId':l['id'],'network':c}),n=await m['buildRelationshipGraph'](b),o=[];for(const u of n['graph']['nodes']){const w=u['address']===b,x=await localProject['addObject'](l['id'],{'objectAddress':u['address'],'objectType':u['objectType']??undefined,'objectName':u['objectName']??undefined,'role':w?'core':'dependency'});o['push'](x);}const p=await localProject['updateProject'](l['id'],{'status':'active'});return{'action':'create_project_from_onchain','project':p??l,'objects':o,'graphEdgeCount':n['graph']['edges']['length']};}export async function handleUpdateProject(a){const b=await resolveProjectId(a),c={'name':a['project_name'],'description':a['project_description'],'industry':a['project_industry'],'perspective':a['project_perspective'],'status':a['project_status'],'labels':a['project_labels'],'serviceAddress':a['service_address']},d=await localProject['updateProject'](b,c);return{'action':'update_project','project':d};}export async function handleGetProjectDetail(a){const b=await resolveProjectId(a),c=await localProject['getProject'](b);if(!c)throw new Error('Project\x20not\x20found:\x20'+b);const d=await localProject['listObjects'](b),e=await localProject['getGraph'](b),f=await localProject['listEvaluations'](b),g=await localProject['listVersions'](b);let h=c;if(c['status']==='draft'&&d['length']>0x0){const x=await localProject['updateProject'](b,{'status':'active'});if(x)h=x;}const i=d['some'](y=>!y['objectName']),j=d['some'](y=>y['role']==='reference');if(i||j){const y=await LocalMark['Instance']()['list'](null),z=new Map();for(const A of y){A['name']&&A['address']&&z['set'](A['address']['toLowerCase'](),A['name']);}for(const B of d){const C={};if(!B['objectName']){const D=z['get'](B['objectAddress']['toLowerCase']());D&&(C['objectName']=D,B['objectName']=D);}if(B['role']==='reference'&&B['objectType']){const E=B['objectType'];if(E['includes']('service::Service'))C['role']='core',B['role']='core';else(E['includes']('permission::Permission')||E['includes']('machine::Machine')||E['includes']('guard::Guard')||E['includes']('reward::Reward')||E['includes']('treasury::Treasury')||E['includes']('allocation::Allocation')||E['includes']('progress::Progress')||E['includes']('arbitration::Arbitration')||E['includes']('demand::Demand')||E['includes']('order::Order')||E['includes']('repository::Repository'))&&(C['role']='dependency',B['role']='dependency');}h['serviceAddress']&&B['objectAddress']===h['serviceAddress']&&B['role']!=='core'&&(C['role']='core',B['role']='core'),Object['keys'](C)['length']>0x0&&await localProject['updateObject'](B['id'],C)['catch'](()=>{});}}let k=null;if(h['serviceAddress']&&h['network'])try{const F=await query_objects({'objects':[h['serviceAddress']],'network':h['network']}),G=F?.['objects']?.[0x0];if(G){const H=G['bPublished']??G['published']??G['b_publish'],I=G['bPaused']??G['paused']??G['b_pause'];k={'published':typeof H==='boolean'?H:null,'paused':typeof I==='boolean'?I:null};}}catch{}const l=new Set(['core','dependency','reference']),n=d['filter'](J=>isDraftObject(J)),o=d['filter'](J=>isOnchainObject(J)),p=d['filter'](J=>J['role']==='core'),q=d['filter'](J=>J['role']==='dependency'),r=d['filter'](J=>J['role']==='reference'),s=d['filter'](J=>!J['role']||!l['has'](J['role']));s['length']>0x0&&console['warn']('[handleGetProjectDetail]\x20'+s['length']+'\x20object(s)\x20have\x20invalid\x20or\x20missing\x20role\x20'+('(expected\x20one\x20of:\x20'+Array['from'](l)['join'](',\x20')+').\x20')+'They\x20are\x20grouped\x20into\x20\x27other\x27\x20for\x20visibility.\x20'+('Object\x20names:\x20'+s['map'](J=>J['objectName']??J['objectAddress'])['slice'](0x0,0x5)['join'](',\x20')+(s['length']>0x5?'...':'')));const u={'core':p,'dependency':q,'reference':r,'other':s,'draft':n,'stats':{'total':d['length'],'onchain_count':o['length'],'draft_count':n['length'],'core_count':p['length'],'dependency_count':q['length'],'reference_count':r['length'],'other_count':s['length'],'by_type':d['reduce']((J,K)=>{const L=K['objectType']??'unknown',M=L['includes']('::')?L['split']('::')[0x0]['toLowerCase']():L['toLowerCase']();return J[M]=(J[M]??0x0)+0x1,J;},{})}},w=d['map'](J=>({...J,'isDraft':isDraftObject(J)}));return{'action':'get_project_detail','project':h,'objects':w,'objectCount':d['length'],'onchainCount':o['length'],'draftCount':n['length'],'objectGroups':u,'graphEdgeCount':e['length'],'serviceStatus':k,'evaluations':f['map'](J=>({'id':J['id'],'evalType':J['evalType'],'score':J['score'],'summary':J['summary'],'details':J['details'],'evaluatedAt':J['evaluatedAt']})),'versions':g['map'](J=>({'version':J['version'],'description':J['description'],'createdAt':J['createdAt']}))};}const SHORT_TO_FULL_TYPE={'Service':'0x2::service::Service','Machine':'0x2::machine::Machine','Guard':'0x2::guard::Guard','Permission':'0x2::permission::Permission','Reward':'0x2::reward::Reward','Arbitration':'0x2::arbitration::Arbitration','Progress':'0x2::progress::Progress','Treasury':'0x2::treasury::Treasury','Demand':'0x2::demand::Demand','Repository':'0x2::repository::Repository','Contact':'0x2::contact::Contact','Order':'0x2::order::Order','Allocation':'0x2::allocation::Allocation','Personal':'0x2::personal::Personal','Payment':'0x2::payment::Payment','Proof':'0x2::proof::Proof'};export async function handleAddObject(a){const b=await resolveProjectId(a),c=await resolveObjectAddress(a),d=a['object_type_add'],e=d?d['includes']('::')?d:SHORT_TO_FULL_TYPE[d]??d:undefined;let f=a['object_name_add'],g=a['object_role'];if(!f){const j=await LocalMark['Instance']()['list']({'address':c});j['length']>0x0&&j[0x0]['name']&&(f=j[0x0]['name']);}if(!g){const k=e??'';if(k['includes']('service::Service'))g='core';else k['includes']('::')&&(k['includes']('permission::')||k['includes']('machine::')||k['includes']('guard::')||k['includes']('reward::')||k['includes']('treasury::')||k['includes']('allocation::')||k['includes']('progress::')||k['includes']('arbitration::')||k['includes']('demand::')||k['includes']('order::')||k['includes']('repository::'))?g='dependency':g='reference';}const h=await localProject['addObject'](b,{'objectAddress':c,'objectType':e,'objectName':f,'role':g,'tags':a['object_tags_add']}),i=await localProject['getProject'](b);return i&&i['status']==='draft'&&await localProject['updateProject'](b,{'status':'active'}),{'action':'add_object','object':h};}export async function handleRemoveObject(a){const b=requireField(a['object_id_remove'],'object_id_remove');return await localProject['removeObject'](b),{'action':'remove_object','removed':!![]};}export async function handleUpdateObject(a){const b=requireField(a['object_id_update'],'object_id_update'),c={};if(a['object_name_update']!==undefined)c['objectName']=a['object_name_update'];if(a['object_type_update']!==undefined)c['objectType']=a['object_type_update'];if(a['object_role_update']!==undefined)c['role']=a['object_role_update'];if(a['object_tags_update']!==undefined)c['tags']=a['object_tags_update'];const d=await localProject['updateObject'](b,c);return{'action':'update_object','object':d};}export async function handleCreateVersion(a){const b=await resolveProjectId(a),c=requireField(a['version'],'version'),d=await localProject['getProject'](b);if(!d)throw new Error('Project\x20not\x20found:\x20'+b);const e=await localProject['createVersion'](b,c,a['version_description']);return{'action':'create_version','version':{'version':e['version'],'description':e['description'],'createdAt':e['createdAt']}};}export async function handleBuildGraph(a){const b=await resolveProjectId(a),c=await localProject['getProject'](b);if(!c)throw new Error('Project\x20not\x20found:\x20'+b);if(a['async_mode']===!![]){const d=TaskTracker['create']('build_graph',b);return((async()=>{try{TaskTracker['update'](d,0xa,'Resolving\x20root\x20address');const e=await buildGraphSync(b,c,a);TaskTracker['complete'](d,e);}catch(f){TaskTracker['fail'](d,f['message']??String(f));}})()),{'action':'build_graph','async_mode':!![],'task_id':d,'hint':'Graph\x20is\x20building\x20in\x20the\x20background.\x20Call\x20query_task_status\x20with\x20task_id\x20to\x20check\x20progress\x20and\x20retrieve\x20the\x20result.'};}return buildGraphSync(b,c,a);}async function buildGraphSync(a,b,c){let d=b['serviceAddress'];if(!d){const j=await localProject['listObjects'](a);if(j['length']===0x0)throw new Error('Cannot\x20build\x20graph:\x20project\x20has\x20no\x20objects\x20and\x20no\x20service_address');const k=j['find'](l=>l['role']==='core')??j['find'](l=>l['objectType']?.['includes']('service::Service')||l['objectType']==='Service');d=(k??j[0x0])['objectAddress'];}const e=new GraphBuilder({'maxDepth':c['max_depth']??c['depth']??0x3,'enableRegistrar':c['enable_registrar']??!![],'enablePotential':c['enable_potential']??![],'projectId':a,'network':b['network']??undefined}),f=await e['buildRelationshipGraph'](d),g={};for(const l of f['graph']['edges']){const m=l['edgeSource']??'unknown';g[m]=(g[m]??0x0)+0x1;}const h=f['graph']['edges']['slice']()['sort']((n,o)=>(o['weight']??0x0)-(n['weight']??0x0))['slice'](0x0,0x5)['map'](n=>({'source':n['sourceObject'],'target':n['targetObject'],'fieldName':n['fieldName'],'relationshipType':n['relationshipType'],'weight':n['weight'],'verified':n['verified']})),i=h['map'](n=>'\x20\x20'+shortLabel(n['source'])+'\x20--'+(n['fieldName']??n['relationshipType']??'')+'-->\x20'+shortLabel(n['target']))['join']('\x0a');return{'action':'build_graph','nodeCount':f['graph']['nodes']['length'],'edgeCount':f['graph']['edges']['length'],'edgesBySource':g,'reputationCount':f['reputation']['size'],'builtAt':f['graph']['builtAt'],'topEdges':h,'visualization':i||'\x20\x20(no\x20edges\x20to\x20display)','hint':'Showing\x20top\x20'+h['length']+'\x20critical\x20edges.\x20Call\x20project_operation\x20with\x20action=\x27get_graph\x27\x20to\x20list\x20all\x20'+f['graph']['edges']['length']+'\x20edges.','binding_verification':await verifyServiceBindings(b['serviceAddress'],b['network'])};}async function verifyServiceBindings(a,b){if(!a)return null;try{const c=await query_objects({'objects':[a],'network':b}),d=c?.['objects']?.[0x0];if(!d)return null;const e=d['order_allocators']?.['allocators']?.['length']??0x0,f=Array['isArray'](d['arbitrations'])?d['arbitrations']['length']:0x0,g={'Service.machine':{'expected':'Machine','actual':d['machine']??null,'verified':!!d['machine']},'Service.permission':{'expected':'Permission','actual':d['permission']??null,'verified':!!d['permission']},'Service.buy_guard':{'expected':'Guard','actual':d['buy_guard']??null,'verified':!!d['buy_guard']},'Service.order_allocators':{'expected':'Guard[]','actual':null,'count':e,'verified':e>0x0},'Service.arbitrations':{'expected':'Arbitration[]','actual':null,'count':f,'verified':f>0x0},'Service.um':{'expected':'Contact','actual':d['um']??null,'verified':!!d['um']}},h=Object['values'](g)['every'](i=>i['verified']);return{'service':a,'bindings':g,'all_verified':h};}catch{return null;}}function synthesizeOnchainFallbackEdges(a,c){const d=[],e=Date['now'](),f=[{'key':'Service.machine','fieldName':'machine','relationshipType':'machine'},{'key':'Service.permission','fieldName':'permission','relationshipType':'permission'},{'key':'Service.buy_guard','fieldName':'buy_guard','relationshipType':'guard'},{'key':'Service.um','fieldName':'um','relationshipType':'um'},{'key':'Service.order_allocators','fieldName':'order_allocators','relationshipType':'guard'},{'key':'Service.arbitrations','fieldName':'arbitrations','relationshipType':'arbitration'}];for(const g of f){const h=c['bindings'][g['key']];if(!h||!h['verified'])continue;const i=h['actual']??a+'#'+g['fieldName']+'#synthetic';d['push']({'id':'onchain-fallback-'+g['fieldName']+'-'+e,'projectId':null,'sourceObject':a,'targetObject':i,'edgeSource':'internal','relationshipType':g['relationshipType'],'fieldName':g['fieldName'],'depth':0x1,'verified':!![],'weight':0x1,'direction':'outbound','metadata':{'onchain_fallback':!![]},'cachedAt':e});}return d;}function shortLabel(a){if(!a)return'(empty)';if(!a['startsWith']('0x'))return a['length']<=0x18?a:a['slice'](0x0,0x15)+'...';return a['length']<=0xc?a:a['slice'](0x0,0xa)+'..';}export async function handleGetGraph(a){const b=await resolveProjectId(a),c=await localProject['getGraph'](b);return{'action':'get_graph','edges':c['map'](d=>({'sourceObject':d['sourceObject'],'targetObject':d['targetObject'],'edgeSource':d['edgeSource'],'relationshipType':d['relationshipType'],'fieldName':d['fieldName'],'depth':d['depth'],'verified':d['verified'],'weight':d['weight'],'direction':d['direction']}))};}export async function handleEvaluateProject(a){const b=await resolveProjectId(a),c=await localProject['getProject'](b);if(!c)throw new Error('Project\x20not\x20found:\x20'+b);if(a['async_mode']===!![]){const d=TaskTracker['create']('evaluate_project',b);return((async()=>{try{TaskTracker['update'](d,0xa,'Refreshing\x20objects\x20and\x20gathering\x20inputs');const e=await evaluateProjectSync(b,c,a);TaskTracker['complete'](d,e);}catch(f){TaskTracker['fail'](d,f['message']??String(f));}})()),{'action':'evaluate_project','async_mode':!![],'task_id':d,'hint':'Evaluation\x20is\x20running\x20in\x20the\x20background.\x20Call\x20query_task_status\x20with\x20task_id\x20to\x20check\x20progress\x20and\x20retrieve\x20the\x20result.'};}return evaluateProjectSync(b,c,a);}async function evaluateProjectSync(a,b,c){const d=requireField(c['evaluation_type'],'evaluation_type');let e;if(c['refresh_before_eval']!==![]){const p=await refreshProjectObjects(a,b['network']);p['failedCount']>0x0&&(e='Refresh\x20completed\x20with\x20'+p['failedCount']+'\x20failed\x20object(s)\x20'+('out\x20of\x20'+(p['refreshedCount']+p['failedCount'])+'\x20total.\x20')+'Evaluation\x20may\x20use\x20stale\x20data\x20for\x20failed\x20objects.');}const f=await localProject['listObjects'](a);let g=await localProject['getGraph'](a),h;if(g['length']===0x0&&b['serviceAddress']){const q=await verifyServiceBindings(b['serviceAddress'],b['network']);if(q&&Object['values'](q['bindings'])['some'](r=>r['verified'])){g=synthesizeOnchainFallbackEdges(b['serviceAddress'],q);const r=Object['values'](q['bindings'])['filter'](s=>s['verified'])['length'];h='Graph\x20is\x20empty;\x20fell\x20back\x20to\x20on-chain\x20direct\x20query\x20('+r+'/'+Object['keys'](q['bindings'])['length']+'\x20Service\x20bindings\x20verified).\x20Call\x20build_graph\x20to\x20construct\x20the\x20full\x20relationship\x20graph.';}}const i=f['map'](s=>s['objectAddress']),j=await localProject['getCachedObjects'](i),k=new Map();for(const [s,t]of j)k['set'](s,t);let l;if(d==='worth_buying'||d==='value'){const u=new SemanticAssembler(),w=new Map();for(const z of g){if(z['edgeSource']==='registrar'&&z['relationshipType']==='affiliation'){}}const x=await u['assemble'](b,f,g,w),y=u['buildEvaluationPrompt'](d,x);l=y['prompt'];}const m={'project':b,'objects':f,'edges':g,'objectCache':k,'reputation':undefined},n=runEvaluation(m,d,l);let o='';if(!n['needsLlm']){const A={'projectId':a,'evalType':d,'score':n['score'],'summary':n['summary'],'details':{'criterionScores':n['criterionScores'],'findings':n['findings'],'strengths':n['strengths']}},B=await localProject['saveEvaluation'](A);o=B['id'];}return{'action':'evaluate_project','evaluationType':n['evaluationType'],'score':n['score'],'summary':n['summary'],'criterionScores':n['criterionScores'],'findings':n['findings'],'strengths':n['strengths'],'needsLlm':n['needsLlm'],'llmPrompt':n['llmPrompt'],'evaluationId':o,'refreshWarning':e,'graphFallbackWarning':h};}export async function handleSaveEvaluation(a){const b=await resolveProjectId(a),c=requireField(a['evaluation_type'],'evaluation_type'),d=requireField(a['eval_score'],'eval_score'),e=a['eval_summary']??'',f=a['eval_details']??{},g=await localProject['saveEvaluation']({'projectId':b,'evalType':c,'score':d,'summary':e,'details':f});return{'action':'save_evaluation','evaluation':{'id':g['id'],'evalType':g['evalType'],'score':g['score'],'summary':g['summary'],'evaluatedAt':g['evaluatedAt']}};}export async function handleCompareProjects(a){const b=requireField(a['compare_project_ids'],'compare_project_ids'),c=a['evaluation_type']??'worth_buying',d=[];for(const f of b){const g=await localProject['getProject'](f);if(!g)continue;const h=await localProject['listEvaluations'](f,{'evalType':c}),i=h[0x0];d['push']({'projectId':f,'projectName':g['name'],'score':i?.['score']??null,'summary':i?.['summary']??null,'evaluatedAt':i?.['evaluatedAt']??null});}const e=compareProjects(d,c);return{'action':'compare_projects','evaluationType':e['evaluationType'],'ranking':e['ranking'],'bestProjectId':e['bestProjectId']};}async function refreshProjectObjects(a,b){const c=await localProject['listObjects'](a),d=c['map'](h=>h['objectAddress']);if(d['length']===0x0)return{'refreshedCount':0x0,'failedCount':0x0};let e=0x0,f=0x0;const g=0x32;for(let h=0x0;h<d['length'];h+=g){const j=d['slice'](h,h+g);try{const k=await query_objects({'objects':j,'no_cache':!![],'network':b});for(const l of k?.['objects']??[]){l?.['object']&&(await localProject['cacheObject'](l['object'],l['type']??null,JSON['stringify'](l),b),e++);}}catch{f+=j['length'];}}return{'refreshedCount':e,'failedCount':f};}export async function handleRefreshObjects(a){const b=await resolveProjectId(a),c=await localProject['getProject'](b);if(!c)throw new Error('Project\x20not\x20found:\x20'+b);const d=c['network'],{refreshedCount:e,failedCount:f}=await refreshProjectObjects(b,d);return{'action':'refresh_objects','refreshedCount':e,'failedCount':f,'refreshedAt':Date['now']()};}export async function handleDeleteProject(a){const b=await resolveProjectId(a);return await localProject['deleteProject'](b),{'action':'delete_project','deleted':!![]};}export async function handleCloneProjectToNetwork(a){const b=await resolveProjectId(a),c=await localProject['getProject'](b);if(!c)throw new Error('Source\x20project\x20not\x20found:\x20'+b);const d=requireField(a['target_network'],'target_network');if(!['testnet','mainnet']['includes'](d))throw new Error('target_network\x20must\x20be\x20\x27testnet\x27\x20or\x20\x27mainnet\x27');const e=a['action']==='migrate_network'?'migrate_network':'clone_project_to_network',f=c['prefix']+'_'+d,g=await localProject['getProjectByPrefix'](f);if(g)throw new Error('Target\x20project\x20prefix\x20\x27'+f+'\x27\x20already\x20exists\x20(project:\x20\x27'+g['name']+'\x27,\x20id:\x20\x27'+g['id']+'\x27).\x20'+'Use\x20update_project\x20on\x20the\x20existing\x20target\x20or\x20delete\x20it\x20first.');const h=await localProject['createProject']({'prefix':f,'name':c['name']+'\x20('+d+')','description':c['description']??undefined,'industry':c['industry']??undefined,'perspective':c['perspective']??'producer','labels':c['labels']??undefined,'network':d}),i=await localProject['listObjects'](b);let j=0x0;for(const k of i){await localProject['addObject'](h['id'],{'objectAddress':'draft:'+(k['objectName']??'unnamed'),'objectType':k['objectType']!==null?k['objectType']:undefined,'objectName':k['objectName']!==null?k['objectName']:undefined,'role':k['role']??'dependency','metadata':{'status':'draft','cloned_from':b,'cloned_at':Date['now']()}}),j++;}return{'action':e,'new_project_id':h['id'],'new_prefix':f,'target_network':d,'cloned_objects_count':j,'message':'Project\x20\x27'+c['prefix']+'\x27\x20cloned\x20to\x20'+d+'\x20as\x20\x27'+f+'\x27.\x20'+j+'\x20object(s)\x20copied\x20as\x20drafts\x20—\x20object\x20addresses\x20are\x20empty\x20pending\x20on-chain\x20deployment.','next_steps':'Execute\x20the\x20same\x20onchain_operations\x20sequence\x20with\x20env.network=\x27'+d+'\x27\x20to\x20deploy\x20objects.\x20Then\x20call\x20update_project\x20to\x20set\x20service_address,\x20and\x20build_graph\x20to\x20construct\x20the\x20new\x20project\x27s\x20relationship\x20graph.'};}export async function handleMigrateToMainnet(a){const b=await resolveProjectId(a),c=await localProject['getProject'](b);if(!c)throw new Error('Source\x20project\x20not\x20found:\x20'+b);if(c['network']==='mainnet')throw new Error('Source\x20project\x20\x27'+c['prefix']+'\x27\x20is\x20already\x20on\x20mainnet.\x20'+'migrate_to_mainnet\x20is\x20for\x20testnet→mainnet\x20migration\x20only.\x20'+'To\x20clone\x20to\x20testnet,\x20use\x20clone_project_to_network\x20with\x20target_network=\x27testnet\x27.');const d={...a,'target_network':'mainnet'},e=await handleCloneProjectToNetwork(d),f=await localProject['listObjects'](b),g=f['filter'](h=>h['objectType']!==null)['map']((h,i)=>({'order':i+0x1,'object_type':h['objectType'],'object_name':h['objectName']??'<unnamed>','operation_type':mapObjectTypeToOperationType(h['objectType']),'localmark_name':h['objectName']??'<unnamed_'+(i+0x1)+'>','note':'Deploy\x20on\x20mainnet\x20with\x20env.network=\x27mainnet\x27.\x20Use\x20the\x20SAME\x20LocalMark\x20name\x20\x27'+(h['objectName']??'<unnamed>')+'\x27\x20—\x20it\x20will\x20resolve\x20to\x20a\x20DIFFERENT\x20mainnet\x20address.\x20The\x20testnet\x20address\x20is\x20NOT\x20reused.'}));return{'action':'migrate_to_mainnet','migration_status':'step_1_complete_steps_2_5_pending_user_action','source_project':{'prefix':c['prefix'],'network':c['network'],'preserved':!![]},'target_project':{'prefix':e['new_prefix'],'project_id':e['new_project_id'],'network':'mainnet','cloned_objects_count':e['cloned_objects_count']},'key_principle':'testnet\x20and\x20mainnet\x20are\x20DIFFERENT\x20projects.\x20Same\x20LocalMark\x20names\x20may\x20exist\x20in\x20both\x20networks,\x20'+'but\x20they\x20correspond\x20to\x20DIFFERENT\x20on-chain\x20addresses.\x20The\x20testnet\x20project\x20is\x20preserved\x20unchanged.\x20'+'LocalMark\x20names\x20are\x20NETWORK-SCOPED:\x20a\x20name\x20resolves\x20to\x20a\x20testnet\x20address\x20when\x20env.network=testnet,\x20'+'and\x20to\x20a\x20mainnet\x20address\x20when\x20env.network=mainnet.\x20Register\x20the\x20SAME\x20name\x20TWICE\x20(once\x20per\x20network).','payment_token_decision':identifyMigrationDecisions({'from_network':'testnet','to_network':'mainnet','current_payment_token':'WOW'})[0x0],'migration_plan':[{'step':0x1,'status':'completed','action':'clone_project_to_network','description':'Clone\x20source\x20project\x20metadata\x20to\x20mainnet\x20project','result':'Created\x20mainnet\x20project\x20\x27'+e['new_prefix']+'\x27\x20with\x20'+e['cloned_objects_count']+'\x20draft\x20object(s).'},{'step':0x2,'status':'pending_user_action','action':'onchain_operations','description':'Re-deploy\x20all\x20objects\x20on\x20mainnet.\x20Set\x20env.network=\x27mainnet\x27\x20and\x20env.project=\x27'+e['new_prefix']+'\x27.\x20Use\x20the\x20SAME\x20LocalMark\x20names\x20—\x20they\x20will\x20resolve\x20to\x20'+'DIFFERENT\x20mainnet\x20addresses.\x20Mainnet\x20accounts\x20need\x20real\x20(non-test)\x20SUI\x20for\x20gas.','deployment_plan':g,'critical_note':'Re-deploy\x20in\x20dependency\x20order:\x20Permission\x20→\x20Machine\x20→\x20Contact\x20→\x20Guard(s)\x20→\x20Service.\x20'+'For\x20the\x20Service↔Guard\x20circular\x20dependency,\x20use\x20the\x203-step\x20pattern\x20'+'(Service\x20without\x20order_allocators\x20→\x20Guards\x20→\x20Service\x20with\x20order_allocators\x20+\x20publish).\x20'+'BEFORE\x20deploying,\x20decide\x20the\x20payment\x20token\x20(see\x20payment_token_decision\x20above):\x20if\x20switching\x20'+'from\x20WOW\x20to\x20a\x20stablecoin\x20(e.g.\x20USDT),\x20set\x20the\x20Service\x20/\x20Treasury\x20/\x20Allocation\x20type_parameter\x20'+'to\x20the\x20stablecoin\x27s\x20WOW\x20type\x20tag\x20(query\x20\x27mainnet\x20bridge\x20tokens\x27\x20via\x20wowok_buildin_info).'},{'step':0x3,'status':'pending_user_action','action':'local_mark_operation','description':'Re-register\x20LocalMark\x20names\x20on\x20mainnet.\x20Each\x20name\x20from\x20step\x202\x20must\x20be\x20registered\x20'+'with\x20its\x20NEW\x20mainnet\x20address.\x20The\x20testnet\x20LocalMark\x20entries\x20are\x20NOT\x20migrated\x20'+'automatically\x20—\x20mainnet\x20has\x20its\x20own\x20name\x20registry.','names_to_register':f['filter'](h=>h['objectName']!==null)['map'](h=>h['objectName'])},{'step':0x4,'status':'pending_user_action','action':'update_project','description':'Set\x20service_address\x20on\x20the\x20mainnet\x20project\x20to\x20the\x20mainnet\x20Service\x20address\x20'+'(from\x20step\x202).\x20Use\x20project=\x27'+e['new_prefix']+'\x27\x20and\x20the\x20mainnet\x20'+'Service\x20LocalMark\x20name\x20or\x200x\x20address.'},{'step':0x5,'status':'pending_user_action','action':'build_graph','description':'Rebuild\x20the\x20relationship\x20graph\x20on\x20the\x20mainnet\x20project.\x20Use\x20project=\x27'+e['new_prefix']+'\x27.\x20This\x20constructs\x20edges\x20from\x20the\x20newly-deployed\x20'+'mainnet\x20object\x20bindings\x20(machine,\x20order_allocators,\x20guards,\x20etc.).'}],'summary':'Migration\x20step\x201\x20(clone)\x20complete.\x20Steps\x202-5\x20require\x20user\x20action:\x20deploy\x20objects\x20on\x20mainnet,\x20'+'re-register\x20LocalMark\x20names,\x20set\x20service_address,\x20and\x20rebuild\x20the\x20graph.\x20The\x20testnet\x20project\x20'+'is\x20preserved\x20unchanged\x20—\x20you\x20can\x20run\x20both\x20in\x20parallel\x20until\x20ready\x20to\x20deprecate\x20the\x20testnet\x20version.'};}function mapObjectTypeToOperationType(a){const b={'service':'service','machine':'machine','guard':'guard','permission':'permission','progress':'progress','arb':'arbitration','arbitration':'arbitration','contact':'contact','treasury':'treasury','reward':'reward','allocation':'allocation','repository':'repository','demand':'demand','order':'order','personal':'personal','payment':'payment','proof':'proof'};return b[a['toLowerCase']()]??a['toLowerCase']();}export async function handleGetObjectDiff(a){const b=requireField(a['diff_address'],'diff_address'),c=requireField(a['diff_from_time'],'diff_from_time'),d=requireField(a['diff_to_time'],'diff_to_time'),e=await localProject['getObjectDiff'](b,c,d);return{'action':'get_object_diff','address':e['address'],'fromTime':e['fromTime'],'toTime':e['toTime'],'changedFields':e['changedFields']['map'](g=>({'fieldPath':g['fieldPath'],'oldValue':g['oldValue'],'newValue':g['newValue'],'changeType':g['changeType']}))};}function normalizeForwards(a){if(!Array['isArray'](a))return[];return a['map'](b=>{const c=b?.['guard'],d=c&&typeof c==='object'&&typeof c['guard']==='string',e=d?c['guard']:typeof c==='string'?c:null,g=d&&Array['isArray'](c['retained_submission'])?c['retained_submission']:null;return{'name':typeof b?.['name']==='string'?b['name']:'','weight':typeof b?.['weight']==='number'?b['weight']:0x0,'guard':e,'retained_submission':g,'named_operator':typeof b?.['namedOperator']==='string'?b['namedOperator']:null,'permission_index':typeof b?.['permissionIndex']==='number'?b['permissionIndex']:null};});}export async function handleGetMachineGraph(a){const b=await resolveProjectId(a),c=await resolveObjectAddress(a),d=await localProject['getProject'](b);if(!d)throw new Error('Project\x20not\x20found\x20(id:\x20'+b+')');const f=await localProject['listObjects'](b),g=f['find'](q=>q['objectAddress']===c);if(!g)throw new Error('Object\x20'+c+'\x20is\x20not\x20part\x20of\x20project\x20\x27'+d['prefix']+'\x27.\x20'+'Add\x20it\x20via\x20add_object\x20first.');const h=d['network']??'testnet';let i=null;try{const q=await query_objects({'objects':[c],'network':h});i=q?.['objects']?.[0x0]??null;}catch(r){throw new Error('Failed\x20to\x20query\x20Machine\x20on\x20'+h+':\x20'+(r instanceof Error?r['message']:String(r)));}if(!i)throw new Error('Machine\x20'+c+'\x20not\x20found\x20on\x20'+h+'.\x20'+'It\x20may\x20not\x20exist\x20on\x20this\x20network\x20—\x20try\x20switching\x20networks.');let j=null;const k=await LocalMark['Instance']()['list']({'address':c});k['length']>0x0&&k[0x0]['name']&&(j=k[0x0]['name']);const l=typeof i['bPublished']==='boolean'?i['bPublished']:null,m=typeof i['bPaused']==='boolean'?i['bPaused']:null,n=new Map(),o=[];let p=[];try{p=await fetchMachineNodes(c,h);}catch(s){throw new Error('Failed\x20to\x20query\x20Machine\x20nodes\x20on\x20'+h+':\x20'+(s instanceof Error?s['message']:String(s)));}for(const t of p){const u=t['name'];if(!u)continue;!n['has'](u)&&n['set'](u,{'name':u,'description':null});const w=Array['isArray'](t['value'])?t['value']:[];for(const x of w){if(!x||typeof x!=='object')continue;const y=typeof x['prev_node']==='string'?x['prev_node']:'';if(!y)continue;const z=u,A=typeof x['threshold']==='number'?x['threshold']:0x1,B=normalizeForwards(x['forwards']);o['push']({'from':y,'to':z,'threshold':A,'forwards':B});}}for(const C of o){!n['has'](C['from'])&&n['set'](C['from'],{'name':C['from'],'description':null}),!n['has'](C['to'])&&n['set'](C['to'],{'name':C['to'],'description':null});}return{'action':'get_machine_graph','machineAddress':c,'machineName':j,'nodes':Array['from'](n['values']()),'edges':o,'published':l,'paused':m,'mermaid':renderMachineMermaid(Array['from'](n['values']()),o),'tree_outline':renderMachineTreeIndented({'nodes':Array['from'](n['values']()),'edges':o,'machineName':j,'machineAddress':c,'published':l,'paused':m}),'ascii_art':renderMachineAscii({'nodes':Array['from'](n['values']()),'edges':o,'machineName':j,'machineAddress':c,'published':l,'paused':m}),'markmap':renderMachineMarkmap({'nodes':Array['from'](n['values']()),'edges':o,'machineName':j,'machineAddress':c,'published':l,'paused':m})};}export async function handleGetGuardGraph(a){const b=await resolveProjectId(a),c=await resolveObjectAddress(a),d=await localProject['getProject'](b);if(!d)throw new Error('Project\x20not\x20found\x20(id:\x20'+b+')');const f=await localProject['listObjects'](b),g=f['find'](u=>u['objectAddress']===c);if(!g)throw new Error('Object\x20'+c+'\x20is\x20not\x20part\x20of\x20project\x20\x27'+d['prefix']+'\x27.\x20'+'Add\x20it\x20via\x20add_object\x20first.');const h=d['network']??'testnet';let i=null;try{const u=await query_objects({'objects':[c],'network':h});i=u?.['objects']?.[0x0]??null;}catch(w){throw new Error('Failed\x20to\x20query\x20Guard\x20on\x20'+h+':\x20'+(w instanceof Error?w['message']:String(w)));}if(!i)throw new Error('Guard\x20'+c+'\x20not\x20found\x20on\x20'+h+'.\x20'+'It\x20may\x20not\x20exist\x20on\x20this\x20network\x20—\x20try\x20switching\x20networks.');let j=null;try{const x=await LocalMark['Instance']()['get'](c);j=x?.['name']??null;}catch{}const k=i['root']??i['data']?.['root']??null,l=i['table']??i['data']?.['table']??[],m=i['rely']??i['data']?.['rely']??null,n=i['immutable']??i['data']?.['immutable']??null;if(!k)throw new Error('Guard\x20'+c+'\x20has\x20no\x20root\x20node.\x20The\x20Guard\x20may\x20be\x20empty\x20or\x20corrupted.\x20'+'Use\x20query_toolkit\x20to\x20inspect\x20the\x20raw\x20object\x20data.');const o=renderGuardMermaid(k),p=Array['isArray'](l)?l['map'](y=>({'identifier':y['identifier'],'name':y['name'],'value_type':y['value_type'],'b_submission':y['b_submission'],'value':y['value']})):[],q={'root':k,'table':p,'guardName':j,'guardAddress':c,'rely':m??null},r=renderGuardTreeIndented(q),s=renderGuardAscii(q),t=renderGuardMarkmap(q);return{'action':'get_guard_graph','guardAddress':c,'guardName':j,'root':k,'table':Array['isArray'](l)?l:[],'rely':m??null,'immutable':n??null,'mermaid':o,'tree_outline':r,'ascii_art':s,'markmap':t};}export async function handlePreEvaluateCheck(a){const b=await resolveProjectId(a),c=await localProject['getProject'](b);if(!c)throw new Error('Project\x20not\x20found:\x20'+b);const d=[],e=[],f=await localProject['listObjects'](b);if(f['length']===0x0)return d['push']({'id':'PE-01','description':'Project\x20has\x20no\x20objects\x20(project_objects\x20table\x20is\x20empty).','impact':'Evaluator\x20will\x20return\x20a\x20neutral\x20score\x20with\x20no\x20findings.\x20'+'Call\x20add_object\x20or\x20create_project_from_onchain\x20first.'}),{'action':'pre_evaluate_check','ready':![],'missing':d,'warnings':e,'summary':'Project\x20is\x20empty\x20—\x20add\x20objects\x20before\x20evaluating.'};const g=await localProject['getGraph'](b);g['length']===0x0&&e['push']({'id':'PE-02','description':'Project\x20has\x20no\x20graph\x20edges\x20(graph_edges\x20table\x20is\x20empty).','impact':'Evaluator\x27s\x20binding-based\x20checks\x20(machine,\x20permission,\x20'+'buy_guard,\x20order_allocators)\x20will\x20return\x200.\x20Call\x20build_graph\x20'+'before\x20evaluate_project\x20to\x20populate\x20edges.'});const h=f['map'](u=>u['objectAddress']),i=await localProject['getCachedObjects'](h),j=[];let k=0x0;const l=0x18*0x3c*0x3c*0x3e8,m=Date['now']();for(const u of f){const w=i['get'](u['objectAddress']);if(!w)j['push'](u['objectAddress']);else{const x=w?.['fetchedAt'];typeof x==='number'&&m-x>l&&k++;}}j['length']>0x0&&e['push']({'id':'PE-03','description':j['length']+'/'+f['length']+'\x20project\x20objects\x20have\x20no\x20cached\x20on-chain\x20data.','impact':'Evaluator\x20will\x20see\x20empty\x20object\x20data\x20for\x20these\x20objects.\x20'+'Call\x20refresh_objects\x20before\x20evaluate_project\x20to\x20fetch\x20fresh\x20data.'});k>0x0&&e['push']({'id':'PE-04','description':k+'/'+f['length']+'\x20project\x20objects\x20have\x20cache\x20older\x20than\x2024\x20hours.','impact':'Evaluator\x20results\x20may\x20be\x20based\x20on\x20stale\x20state.\x20'+'Call\x20refresh_objects\x20to\x20fetch\x20fresh\x20data.'});const n=new Set(f['map'](y=>y['objectAddress'])),p=new Set(f['map'](y=>y['objectName'])['filter'](Boolean)),q=g['filter'](y=>!n['has'](y['sourceObject'])&&!p['has'](y['sourceObject'])&&!n['has'](y['targetObject'])&&!p['has'](y['targetObject']));q['length']>0x0&&e['push']({'id':'PE-05','description':q['length']+'\x20graph\x20edges\x20reference\x20objects\x20not\x20in\x20project_objects.','impact':'Evaluator\x27s\x20binding\x20index\x20may\x20include\x20stale/dangling\x20entries.\x20'+'Call\x20build_graph\x20again\x20to\x20refresh\x20edges,\x20or\x20remove\x20orphan\x20objects.'});if(c['perspective']==='producer'){const y=f['some'](z=>isObjectOfType(z['objectType'],'service'));!y&&d['push']({'id':'PE-06','description':'Producer\x20project\x20has\x20no\x20Service-type\x20object.','impact':'Evaluator\x27s\x20service-centric\x20checks\x20(publish\x20state,\x20'+'machine\x20binding,\x20order_allocators,\x20etc.)\x20will\x20all\x20return\x200.\x20'+'Add\x20a\x20Service\x20object\x20or\x20import\x20one\x20via\x20create_project_from_onchain.'});}const r=f['filter'](z=>{const A=z['metadata']??{};return A['status']==='draft'||z['objectAddress']['startsWith']('draft:');})['length'];r===f['length']&&f['length']>0x0&&e['push']({'id':'PE-07','description':'All\x20'+f['length']+'\x20objects\x20are\x20draft\x20(not\x20yet\x20on-chain).','impact':'Evaluator\x20will\x20assess\x20the\x20blueprint\x20as\x20if\x20it\x20were\x20on-chain.\x20'+'Real\x20on-chain\x20state\x20may\x20differ\x20once\x20deployed.'});const s=d['length']===0x0,t=s?e['length']===0x0?'Ready\x20to\x20evaluate.\x20'+f['length']+'\x20objects,\x20'+g['length']+'\x20edges.':'Ready\x20to\x20evaluate\x20with\x20'+e['length']+'\x20warning(s).\x20'+f['length']+'\x20objects,\x20'+g['length']+'\x20edges.':'Not\x20ready:\x20'+d['length']+'\x20blocking\x20issue(s)\x20found.';return{'action':'pre_evaluate_check','ready':s,'missing':d,'warnings':e,'summary':t,'counts':{'objects':f['length'],'edges':g['length'],'uncached':j['length'],'stale':k,'dangling_edges':q['length'],'drafts':r}};}export async function handleVerifyDeployment(a){const b=await resolveProjectId(a),c=await localProject['getProject'](b);if(!c)throw new Error('Project\x20not\x20found:\x20'+b);const d=await localProject['listObjects'](b);if(d['length']===0x0)return{'action':'verify_deployment','verifiedCount':0x0,'matched':0x0,'mismatched':0x0,'missing':0x0,'unreachable':0x0,'results':[],'summary':'Project\x20has\x20no\x20objects\x20to\x20verify.'};const g=c['network']??'testnet',h=d['filter'](s=>!s['objectAddress']['startsWith']('draft:')&&s['objectAddress']['startsWith']('0x'));if(h['length']===0x0)return{'action':'verify_deployment','verifiedCount':0x0,'matched':0x0,'mismatched':0x0,'missing':0x0,'unreachable':0x0,'results':[],'summary':'All\x20'+d['length']+'\x20objects\x20are\x20draft\x20or\x20non-address\x20—\x20nothing\x20to\x20verify\x20on-chain.'};const i=Math['min'](h['length'],0x32),j=h['slice'](0x0,i)['map'](s=>s['objectAddress']);let k;try{k=await query_objects({'objects':j,'network':g});}catch(s){return{'action':'verify_deployment','verifiedCount':0x0,'matched':0x0,'mismatched':0x0,'missing':0x0,'unreachable':h['length'],'results':h['map'](t=>({'objectAddress':t['objectAddress'],'objectName':t['objectName'],'objectType':t['objectType'],'status':'unreachable','error':s instanceof Error?s['message']:String(s)})),'summary':'Failed\x20to\x20query\x20on-chain\x20state:\x20'+(s instanceof Error?s['message']:String(s))};}const l=k?.['objects']??[],m=new Map();for(const t of l){if(t&&typeof t==='object'){const u=t,w=u['object']??u['objectId']??u['object_id'];typeof w==='string'&&m['set'](w,t);}}const n=[];let o=0x0,p=0x0,q=0x0;for(const x of h['slice'](0x0,i)){const y=m['get'](x['objectAddress']);if(!y){q++,n['push']({'objectAddress':x['objectAddress'],'objectName':x['objectName'],'objectType':x['objectType'],'status':'missing'});continue;}const z=y,A=(await localProject['getCachedObjects']([x['objectAddress']]))['get'](x['objectAddress']),B=A?.['data']??{},C=[];let D;if(isObjectOfType(x['objectType'],'service')){const E=['machine','permission','buy_guard','arbitrations','rewards','repositories'];for(const F of E){const G=B[F],H=z[F],I=J=>J===null||J===undefined||J===''?null:J;JSON['stringify'](I(G))!==JSON['stringify'](I(H))&&C['push']({'field':F,'sqlite':G,'onchain':H});}D={'machine':!!z['machine'],'permission':!!z['permission'],'buy_guard':!!z['buy_guard'],'order_allocators':!!z['order_allocators']},B['bPublished']!==undefined&&z['bPublished']!==undefined&&B['bPublished']!==z['bPublished']&&C['push']({'field':'bPublished','sqlite':B['bPublished'],'onchain':z['bPublished']});}else{if(isObjectOfType(x['objectType'],'machine')){B['bPublished']!==undefined&&z['bPublished']!==undefined&&B['bPublished']!==z['bPublished']&&C['push']({'field':'bPublished','sqlite':B['bPublished'],'onchain':z['bPublished']});const J=B['node_count'],K=z['node_count'];J!==undefined&&K!==undefined&&J!==K&&C['push']({'field':'node_count','sqlite':J,'onchain':K});}}C['length']>0x0?(p++,n['push']({'objectAddress':x['objectAddress'],'objectName':x['objectName'],'objectType':x['objectType'],'status':'mismatched','differences':C,'bindings':D})):(o++,n['push']({'objectAddress':x['objectAddress'],'objectName':x['objectName'],'objectType':x['objectType'],'status':'matched','bindings':D}));}const r=o===h['length']?'All\x20'+o+'\x20deployed\x20objects\x20verified.':o+'\x20matched,\x20'+p+'\x20mismatched,\x20'+q+'\x20missing.';return{'action':'verify_deployment','verifiedCount':n['length'],'matched':o,'mismatched':p,'missing':q,'unreachable':0x0,'results':n,'summary':r};}
1
+ import{LocalProject,LocalMark,query_objects,query_object_last_updated}from'@wowok/wowok';import{fetchMachineNodes}from'./machine-nodes.js';import{GraphBuilder}from'./graph-builder.js';import{SemanticAssembler}from'./semantic-assembler.js';import{runEvaluation,compareProjects}from'./evaluation.js';import{TaskTracker}from'./task-tracker.js';import{renderGuardMermaid,renderGuardTreeIndented,renderGuardAscii,renderGuardMarkmap}from'../knowledge/guard-render.js';import{renderMachineMermaid,renderMachineTreeIndented,renderMachineAscii,renderMachineMarkmap}from'../knowledge/machine-render.js';import{inferTraitsFromDescription,findSimilarIndustries}from'../knowledge/industry-generalizer.js';import{isObjectOfType}from'../schema/utils/object-type-utils.js';import{identifyMigrationDecisions}from'../harness/plan.js';const localProject=LocalProject['Instance']();function requireField(a,b){if(a===undefined||a===null)throw new Error('\x27'+b+'\x27\x20is\x20required\x20for\x20this\x20action');return a;}async function resolveProjectId(a){if(a['project_id'])return a['project_id'];if(a['project']){const b=await localProject['getProjectByPrefix'](a['project']);if(!b)throw new Error('Project\x20not\x20found\x20by\x20prefix:\x20'+a['project']);return b['id'];}throw new Error('Either\x20\x27project_id\x27\x20or\x20\x27project\x27\x20(prefix)\x20is\x20required\x20for\x20this\x20action');}async function resolveObjectAddress(a){if(a['object_address']){const b=a['object_address'],c=/^0x[0-9a-fA-F]{32,64}$/['test'](b),d=b['startsWith']('draft:');if(!c&&!d)throw new Error('Invalid\x20object_address\x20format:\x20\x27'+b['slice'](0x0,0x28)+(b['length']>0x28?'...':'')+'\x27.\x20'+'Expected\x20a\x20valid\x20Sui\x20address\x20(0x\x20+\x2032-64\x20hex\x20chars)\x20or\x20\x27draft:<name>\x27\x20sentinel.\x20'+'To\x20reference\x20an\x20object\x20by\x20name,\x20use\x20\x27object_name_add\x27\x20instead\x20of\x20\x27object_address\x27.');return b;}if(a['object_name_add']){const e=await LocalMark['Instance']()['get'](a['object_name_add']);if(e?.['address'])return e['address'];throw new Error('LocalMark\x20name\x20not\x20found:\x20'+a['object_name_add']);}throw new Error('Either\x20\x27object_address\x27\x20or\x20\x27object_name_add\x27\x20is\x20required\x20for\x20add_object');}function isDraftObject(a){if(a['objectAddress']&&a['objectAddress']['startsWith']('draft:'))return!![];const b=a['metadata'];return!!(b&&b['status']==='draft');}function isOnchainObject(a){if(isDraftObject(a))return![];return!!a['objectAddress']&&a['objectAddress']['startsWith']('0x');}export async function handleListProjects(a){const b={};if(a['filter_status'])b['status']=a['filter_status'];if(a['filter_perspective'])b['perspective']=a['filter_perspective'];if(a['filter_network'])b['network']=a['filter_network'];const c=await localProject['listProjects'](Object['keys'](b)['length']>0x0?b:undefined),d=await Promise['all'](c['map'](async f=>{const [g,h]=await Promise['all']([localProject['listObjects'](f['id']),localProject['listEvaluations'](f['id'])]),i=new Set();for(const n of g){if(n['objectType'])i['add'](n['objectType']);}const j=g['filter'](q=>isOnchainObject(q))['length'];let k=f;const l=g['filter'](q=>isOnchainObject(q)&&q['objectType']?.['toLowerCase']()['includes']('service')),m=(l['find'](q=>q['role']==='core')??l[0x0])?.['objectAddress'];if(m&&m!==f['serviceAddress']){const q=await localProject['updateProject'](f['id'],{'serviceAddress':m});if(q)k=q;}if(k['status']==='draft'&&g['length']>0x0){const r=await localProject['updateProject'](k['id'],{'status':'active'});if(r)return{...r,'objectCount':j,'evaluationCount':h['length'],'objectTypes':Array['from'](i)};}return{...k,'objectCount':j,'evaluationCount':h['length'],'objectTypes':Array['from'](i)};})),e=await Promise['all'](d['map'](async f=>{if(!f['serviceAddress']||!f['network'])return f;try{const g=await query_object_last_updated({'object':f['serviceAddress'],'network':f['network']});if(g?.['timestamp_ms'])return{...f,'onchainLastUpdated':{'timestamp_ms':g['timestamp_ms'],'digest':g['digest'],'sender':g['sender'],'object':g['object']}};}catch{}return f;}));return{'action':'list_projects','items':e,'total':e['length']};}export async function handleCreateProject(a){const b=requireField(a['project_name'],'project_name');let c=a['project'];!c&&(c=b['toLowerCase']()['trim']()['replace'](/[^a-z0-9]+/g,'_')['replace'](/^_+|_+$/g,'')['substring'](0x0,0x3c),!c&&(c='proj_'+Date['now']()['toString'](0x24)));const d=await localProject['getProjectByPrefix'](c);if(d){if(a['project'])throw new Error('Project\x20prefix\x20\x27'+c+'\x27\x20already\x20exists\x20(project:\x20\x27'+d['name']+'\x27,\x20id:\x20\x27'+d['id']+'\x27).\x20'+'Use\x20a\x20different\x20prefix\x20or\x20update\x20the\x20existing\x20project.');let i=0x2;while(await localProject['getProjectByPrefix'](c+'_'+i)){i++;}c=c+'_'+i;}const e={'prefix':c,'name':b,'description':a['project_description'],'industry':a['project_industry'],'perspective':a['project_perspective']??'producer','labels':a['project_labels'],'serviceAddress':a['service_address'],'network':a['project_network']??'testnet'},f=await localProject['createProject'](e);if(a['service_address'])try{await localProject['addObject'](f['id'],{'objectAddress':a['service_address'],'objectType':'Service','objectName':a['service_address']['startsWith']('0x')?undefined:a['service_address'],'role':'core','metadata':{'auto_added_from_service_address':!![],'added_at':new Date()['toISOString']()}});}catch(j){console['warn']('[create_project]\x20Failed\x20to\x20auto-add\x20Service\x20\x27'+a['service_address']+'\x27:\x20'+j['message']+'.\x20'+'Use\x20add_object\x20action\x20to\x20manually\x20add\x20it.');}const g=a['project_industry'],h=a['skip_templates']===!![];if(g&&g!=='general'&&!h)try{const {IndustryModeRegistry:k}=await import('../extensions/index.js'),l=k['Instance'](),m={'prefix':c,'version':f['currentVersion']??'v1','network':f['network']??'testnet','business_intent':a['project_description']??b,'industry':g},n=await l['applyTemplate'](g,m['business_intent'],m),o=inferTraitsFromDescription(m['business_intent']),p=findSimilarIndustries(o['traits'],0x3),q={'traits':o['traits'],'confidence':o['confidence'],'matched_keywords':o['matched_keywords'],'top_matches':p['map'](w=>({'industry':w['industry'],'similarity':w['similarity']}))},r=p[0x0],s=r&&!p['some'](w=>w['industry']===g)&&o['confidence']>=0.3&&r['similarity']>=0.6?'Intent\x20inference\x20suggests\x20industry\x20\x27'+r['industry']+'\x27\x20'+('(similarity\x20'+(r['similarity']*0x64)['toFixed'](0x0)+'%)\x20may\x20fit\x20the\x20description\x20')+('better\x20than\x20the\x20chosen\x20\x27'+g+'\x27.\x20Call\x20action=\x27recommend_industry\x27\x20for\x20the\x20full\x20')+('recommendation\x20chain,\x20or\x20ignore\x20this\x20hint\x20if\x20\x27'+g+'\x27\x20was\x20chosen\x20intentionally.'):undefined,t=[];for(const w of n['objects']){const x=await localProject['addObject'](f['id'],{'objectAddress':'draft:'+w['name'],'objectType':w['object_type'],'objectName':w['name'],'role':w['object_type']==='service'?'core':'dependency','metadata':{'status':'draft','config':w['config'],'publish_required':w['publish_required'],'description':w['description'],'entry_id':w['entry_id']}});t['push'](x);}const u=n['edges']['map'](y=>({'projectId':f['id'],'sourceObject':y['from'],'targetObject':y['to'],'edgeSource':'internal','relationshipType':mapEdgeKindToRelationshipType(y['edge_kind']),'fieldName':y['field_path'],'depth':0x0,'verified':![],'weight':0x1,'metadata':{'blueprint':!![],'required_at_publish':y['required_at_publish']}}));await localProject['saveGraphEdges'](f['id'],u);try{await localProject['saveDocument'](f['id'],m['network'],JSON['stringify']({'applied_template':n['applied_template'],'industry_source':n['industry_source'],'steps':n['steps'],'scenarios':n['scenarios']??[],'validation':n['validation'],'intent_inference':q,'generated_at':new Date()['toISOString']()},null,0x2),'blueprint');}catch(y){console['warn']('[create_project]\x20Failed\x20to\x20persist\x20blueprint\x20document:\x20'+y['message']);}return{'action':'create_project','project':f,'blueprint':{'objects_count':t['length'],'edges_count':u['length'],'industry_source':n['industry_source'],'applied_template':n['applied_template'],'steps_count':n['steps']['length'],'scenarios_count':n['scenarios']?.['length']??0x0,'key_risk':l['getMode'](g)?.['key_risk'],'intent_inference':q,...s?{'industry_mismatch_hint':s}:{}},'recommended_creation_order':getRecommendedCreationOrder(g)};}catch(z){return{'action':'create_project','project':f,'blueprint_warning':'Industry\x20template\x20application\x20failed:\x20'+z['message']+'.\x20Project\x20created\x20without\x20blueprint\x20—\x20use\x20add_object\x20to\x20manually\x20add\x20objects.','recommended_creation_order':getRecommendedCreationOrder(g)};}if(h)return{'action':'create_project','project':f,'blueprint_skipped':!![],'hint':'skip_templates=true\x20—\x20no\x20industry\x20blueprint\x20objects\x20were\x20created.\x20Use\x20add_object\x20to\x20manually\x20add\x20objects\x20to\x20this\x20project.','recommended_creation_order':getRecommendedCreationOrder(g)};if(!g){const A=(a['project_description']??b)['trim']();if(A)try{const {handleRecommendIndustry:B}=await import('./mode-actions.js'),C=B({'intent':A});if(C['recommendations']['length']>0x0)return{'action':'create_project','project':f,'recommended_creation_order':getRecommendedCreationOrder(g),'recommended_industries':C['recommendations'],'hint':'No\x20industry\x20specified.\x20Based\x20on\x20your\x20description,\x20top\x20match\x20is\x20\x27'+C['recommendations'][0x0]['industry']+'\x27.\x20To\x20get\x20a\x20ready-made\x20blueprint\x20'+'(~10\x20draft\x20objects\x20+\x20graph\x20edges),\x20recreate\x20with\x20project_industry\x20set\x20—\x20'+'or\x20continue\x20from\x20scratch\x20with\x20add_object.'};}catch{}}return{'action':'create_project','project':f,'recommended_creation_order':getRecommendedCreationOrder(g)};}function getRecommendedCreationOrder(a){const b=a&&a!=='general'?'\x20(industry=\x22'+a+'\x22\x20—\x20see\x20IndustryMode.build_notes\x20for\x20overrides)':'';return[{'step':0x1,'object':'Account','reason':'Base\x20identity\x20for\x20on-chain\x20operations;\x20owns\x20all\x20subsequent\x20objects\x20and\x20receives\x20settlement.','required':!![]},{'step':0x2,'object':'Permission','reason':'Centralized\x20access\x20control;\x20referenced\x20by\x20ALL\x20objects\x20(Service,\x20Machine,\x20Guard,\x20Contact,\x20Arbitration).','required':!![]},{'step':0x3,'object':'Service\x20(draft)','reason':'Create\x20the\x20skeleton\x20FIRST\x20(unpublished)\x20so\x20Guards\x20can\x20reference\x20it\x20by\x20LocalMark\x20NAME\x20—\x20breaks\x20the\x20Guard↔Service\x20circular\x20dependency.','required':!![]},{'step':0x4,'object':'Machine\x20(unpublished)','reason':'Business\x20workflow\x20nodes/forwards.\x20Requires\x20Permission.'+b,'required':!![]},{'step':0x5,'object':'Guard\x20x\x20N','reason':'Acceptance\x20logic\x20referencing\x20machine\x20node\x20names\x20+\x20service\x20name\x20via\x20LocalMark.\x20Bind\x20to\x20Machine\x20forwards\x20before\x20publish.','required':!![]},{'step':0x6,'object':'Machine\x20publish','reason':'Freeze\x20workflow\x20topology\x20(nodes/pairs/forwards\x20immutable).\x20Export\x20machineNode2file\x20first\x20for\x20backup.','required':!![]},{'step':0x7,'object':'Sales\x20(WIP)','reason':'Products\x20with\x20wip\x20URL\x20(must\x20be\x20a\x20public\x20endpoint)\x20+\x20wip_hash.\x20Recommend\x20generating\x20WIP\x20from\x20web/doc\x20material\x20via\x20AI\x20sub-task.','required':!![]},{'step':0x8,'object':'Treasury\x20(optional)','reason':'Fund\x20pool\x20for\x20organizations;\x20referenced\x20by\x20order_allocators\x20as\x20an\x20Entity\x20recipient.\x20Skip\x20for\x20personal\x20merchants.','required':![]},{'step':0x9,'object':'order_allocators','reason':'Fund\x20distribution\x20(Amount/Rate/Surplus).\x20Personal\x20merchant\x20→\x20Permission\x20owner;\x20organization\x20→\x20Treasury.','required':!![]},{'step':0xa,'object':'Contact','reason':'Customer-service\x20channel\x20(Service.um\x20→\x20Contact\x20→\x20ims[]);\x20enable\x20local\x20account\x20as\x20messenger\x20+\x20anti-spam.','required':!![]},{'step':0xb,'object':'Arbitration\x20(optional)','reason':'Third-party\x20dispute\x20resolution\x20(REUSE\x20an\x20existing\x20Arbitration).\x20MUST\x20NOT\x20reuse\x20Service\x27s\x20Permission\x20—\x20E_ARBITRATION_PERMISSION_CONFLICT.\x20Requires\x20compensation_fund\x20if\x20configured.','required':![]},{'step':0xc,'object':'Service\x20publish','reason':'Add\x20machine\x20+\x20order_allocators\x20+\x20buy_guard\x20+\x20sales\x20+\x20arbitrations,\x20then\x20publish:true.\x20machine/order_allocators/arbitrations\x20immutable\x20after\x20publish.','required':!![]}];}function mapEdgeKindToRelationshipType(a){switch(a){case'machine':case'compensation_fund':case'parent':return'bind';case'order_allocators':return'create';case'arbitrations':case'rewards':return'trigger';case'buy_guard':case'permission':case'guard':return'validate';case'service':case'progress':return'consume';default:return'bind';}}export async function handleCreateProjectFromOnchain(a){const b=requireField(a['service_address'],'service_address'),c=a['project_network']??'testnet';let d=a['project']??'svc_'+b['slice'](0x2,0x8);const f=a['project_name']??'Consumer\x20Project\x20'+b['slice'](0x2,0x8),g=await localProject['getProjectByPrefix'](d);if(g){if(a['project'])throw new Error('Project\x20prefix\x20\x27'+d+'\x27\x20already\x20exists\x20(project:\x20\x27'+g['name']+'\x27,\x20id:\x20\x27'+g['id']+'\x27).\x20'+'Use\x20a\x20different\x20prefix.');let q=0x2;while(await localProject['getProjectByPrefix'](d+'_'+q)){q++;}d=d+'_'+q;}const h=c==='testnet'?'mainnet':'testnet';let i=null;try{const r=await query_objects({'objects':[b],'network':c}),s=r?.['objects']?.[0x0];s&&s['object']&&(i=s['type']??null);}catch(t){throw new Error('Failed\x20to\x20query\x20'+c+'\x20for\x20the\x20Service\x20object:\x20'+((t instanceof Error?t['message']:String(t))+'.\x20')+('Check\x20the\x20network\x20connection\x20or\x20try\x20the\x20'+h+'\x20network.'));}if(!i)throw new Error('Service\x20object\x20not\x20found\x20on\x20'+c+':\x20the\x20address\x20'+b+'\x20does\x20not\x20exist\x20on\x20this\x20network.\x20'+('Switch\x20to\x20the\x20'+h+'\x20network\x20and\x20try\x20again.'));const j=i['toLowerCase'](),k=j['includes']('::service::service')||j==='service'||j['endsWith']('::service');if(!k)throw new Error('Object\x20'+b+'\x20is\x20not\x20a\x20Service\x20(its\x20on-chain\x20type\x20is\x20\x22'+i+'\x22).\x20'+'Only\x20on-chain\x20Service\x20objects\x20can\x20be\x20imported\x20as\x20a\x20project\x20root.');const l=await localProject['createProject']({'prefix':d,'name':f,'description':a['project_description']??'Auto-discovered\x20from\x20Service\x20'+b,'industry':a['project_industry'],'perspective':'consumer','labels':a['project_labels'],'serviceAddress':b,'network':c}),m=new GraphBuilder({'maxDepth':a['max_depth']??a['depth']??0x3,'enableRegistrar':a['enable_registrar']??!![],'enablePotential':a['enable_potential']??![],'projectId':l['id'],'network':c}),n=await m['buildRelationshipGraph'](b),o=[];for(const u of n['graph']['nodes']){const w=u['address']===b,x=await localProject['addObject'](l['id'],{'objectAddress':u['address'],'objectType':u['objectType']??undefined,'objectName':u['objectName']??undefined,'role':w?'core':'dependency'});o['push'](x);}const p=await localProject['updateProject'](l['id'],{'status':'active'});return{'action':'create_project_from_onchain','project':p??l,'objects':o,'graphEdgeCount':n['graph']['edges']['length']};}export async function handleUpdateProject(a){const b=await resolveProjectId(a),c={'name':a['project_name'],'description':a['project_description'],'industry':a['project_industry'],'perspective':a['project_perspective'],'status':a['project_status'],'labels':a['project_labels'],'serviceAddress':a['service_address']},d=await localProject['updateProject'](b,c);return{'action':'update_project','project':d};}export async function handleGetProjectDetail(a){const b=await resolveProjectId(a),c=await localProject['getProject'](b);if(!c)throw new Error('Project\x20not\x20found:\x20'+b);const d=await localProject['listObjects'](b),e=await localProject['getGraph'](b),f=await localProject['listEvaluations'](b),g=await localProject['listVersions'](b);let h=c;if(c['status']==='draft'&&d['length']>0x0){const B=await localProject['updateProject'](b,{'status':'active'});if(B)h=B;}const j=d['some'](C=>!C['objectName']),k=d['some'](C=>C['role']==='reference');if(j||k){const C=await LocalMark['Instance']()['list'](null),D=new Map();for(const E of C){E['name']&&E['address']&&D['set'](E['address']['toLowerCase'](),E['name']);}for(const F of d){const G={};if(!F['objectName']){const H=D['get'](F['objectAddress']['toLowerCase']());H&&(G['objectName']=H,F['objectName']=H);}if(F['role']==='reference'&&F['objectType']){const I=F['objectType'];if(I['includes']('service::Service'))G['role']='core',F['role']='core';else(I['includes']('permission::Permission')||I['includes']('machine::Machine')||I['includes']('guard::Guard')||I['includes']('reward::Reward')||I['includes']('treasury::Treasury')||I['includes']('allocation::Allocation')||I['includes']('progress::Progress')||I['includes']('arbitration::Arbitration')||I['includes']('demand::Demand')||I['includes']('order::Order')||I['includes']('repository::Repository'))&&(G['role']='dependency',F['role']='dependency');}h['serviceAddress']&&F['objectAddress']===h['serviceAddress']&&F['role']!=='core'&&(G['role']='core',F['role']='core'),Object['keys'](G)['length']>0x0&&await localProject['updateObject'](F['id'],G)['catch'](()=>{});}}let l=null;if(h['serviceAddress']&&h['network'])try{const J=await query_objects({'objects':[h['serviceAddress']],'network':h['network']}),K=J?.['objects']?.[0x0];if(K){const L=K['bPublished']??K['published']??K['b_publish'],M=K['bPaused']??K['paused']??K['b_pause'];l={'published':typeof L==='boolean'?L:null,'paused':typeof M==='boolean'?M:null};}}catch{}const n=new Set(['core','dependency','reference']),p=d['filter'](N=>isDraftObject(N)),q=d['filter'](N=>isOnchainObject(N)),s=d['filter'](N=>N['role']==='core'),u=d['filter'](N=>N['role']==='dependency'),w=d['filter'](N=>N['role']==='reference'),x=d['filter'](N=>!N['role']||!n['has'](N['role']));x['length']>0x0&&console['warn']('[handleGetProjectDetail]\x20'+x['length']+'\x20object(s)\x20have\x20invalid\x20or\x20missing\x20role\x20'+('(expected\x20one\x20of:\x20'+Array['from'](n)['join'](',\x20')+').\x20')+'They\x20are\x20grouped\x20into\x20\x27other\x27\x20for\x20visibility.\x20'+('Object\x20names:\x20'+x['map'](N=>N['objectName']??N['objectAddress'])['slice'](0x0,0x5)['join'](',\x20')+(x['length']>0x5?'...':'')));const y={'core':s,'dependency':u,'reference':w,'other':x,'draft':p,'stats':{'total':d['length'],'onchain_count':q['length'],'draft_count':p['length'],'core_count':s['length'],'dependency_count':u['length'],'reference_count':w['length'],'other_count':x['length'],'by_type':d['reduce']((N,O)=>{const P=O['objectType']??'unknown',Q=P['includes']('::')?P['split']('::')[0x0]['toLowerCase']():P['toLowerCase']();return N[Q]=(N[Q]??0x0)+0x1,N;},{})}},z=d['map'](N=>({...N,'isDraft':isDraftObject(N)}));let A=null;if(q['length']>0x0&&h['network'])try{const N=q['map'](R=>R['objectAddress'])['filter'](R=>!!R),O=await Promise['allSettled'](N['map'](R=>query_object_last_updated({'object':R,'network':h['network']}))),P=new Map();for(let R=0x0;R<O['length'];R++){const S=O[R];S['status']==='fulfilled'&&S['value']?.['timestamp_ms']&&P['set'](N[R]['toLowerCase'](),{'timestamp_ms':S['value']['timestamp_ms'],'digest':S['value']['digest'],'sender':S['value']['sender']});}let Q=-0x1;for(const [T,U]of P){const V=Number(U['timestamp_ms']);V>Q&&(Q=V,A={'timestamp_ms':U['timestamp_ms'],'digest':U['digest'],'sender':U['sender'],'object':T});}for(const W of z){const X=W['objectAddress']?P['get'](W['objectAddress']['toLowerCase']()):undefined;W['onchainUpdatedAt']=X?.['timestamp_ms']??null;}}catch{}return{'action':'get_project_detail','project':h,'objects':z,'objectCount':d['length'],'onchainCount':q['length'],'draftCount':p['length'],'objectGroups':y,'graphEdgeCount':e['length'],'serviceStatus':l,'onchainLastUpdated':A,'evaluations':f['map'](Y=>({'id':Y['id'],'evalType':Y['evalType'],'score':Y['score'],'summary':Y['summary'],'details':Y['details'],'evaluatedAt':Y['evaluatedAt']})),'versions':g['map'](Y=>({'version':Y['version'],'description':Y['description'],'createdAt':Y['createdAt']}))};}const SHORT_TO_FULL_TYPE={'Service':'0x2::service::Service','Machine':'0x2::machine::Machine','Guard':'0x2::guard::Guard','Permission':'0x2::permission::Permission','Reward':'0x2::reward::Reward','Arbitration':'0x2::arbitration::Arbitration','Progress':'0x2::progress::Progress','Treasury':'0x2::treasury::Treasury','Demand':'0x2::demand::Demand','Repository':'0x2::repository::Repository','Contact':'0x2::contact::Contact','Order':'0x2::order::Order','Allocation':'0x2::allocation::Allocation','Personal':'0x2::personal::Personal','Payment':'0x2::payment::Payment','Proof':'0x2::proof::Proof'};export async function handleAddObject(a){const b=await resolveProjectId(a),c=await resolveObjectAddress(a),d=a['object_type_add'],e=d?d['includes']('::')?d:SHORT_TO_FULL_TYPE[d]??d:undefined;let f=a['object_name_add'],g=a['object_role'];if(!f){const j=await LocalMark['Instance']()['list']({'address':c});j['length']>0x0&&j[0x0]['name']&&(f=j[0x0]['name']);}if(!g){const k=e??'';if(k['includes']('service::Service'))g='core';else k['includes']('::')&&(k['includes']('permission::')||k['includes']('machine::')||k['includes']('guard::')||k['includes']('reward::')||k['includes']('treasury::')||k['includes']('allocation::')||k['includes']('progress::')||k['includes']('arbitration::')||k['includes']('demand::')||k['includes']('order::')||k['includes']('repository::'))?g='dependency':g='reference';}const h=await localProject['addObject'](b,{'objectAddress':c,'objectType':e,'objectName':f,'role':g,'tags':a['object_tags_add']}),i=await localProject['getProject'](b);return i&&i['status']==='draft'&&await localProject['updateProject'](b,{'status':'active'}),{'action':'add_object','object':h};}export async function handleRemoveObject(a){const b=requireField(a['object_id_remove'],'object_id_remove');return await localProject['removeObject'](b),{'action':'remove_object','removed':!![]};}export async function handleUpdateObject(a){const b=requireField(a['object_id_update'],'object_id_update'),c={};if(a['object_name_update']!==undefined)c['objectName']=a['object_name_update'];if(a['object_type_update']!==undefined)c['objectType']=a['object_type_update'];if(a['object_role_update']!==undefined)c['role']=a['object_role_update'];if(a['object_tags_update']!==undefined)c['tags']=a['object_tags_update'];const d=await localProject['updateObject'](b,c);return{'action':'update_object','object':d};}export async function handleCreateVersion(a){const b=await resolveProjectId(a),c=requireField(a['version'],'version'),d=await localProject['getProject'](b);if(!d)throw new Error('Project\x20not\x20found:\x20'+b);const e=await localProject['createVersion'](b,c,a['version_description']);return{'action':'create_version','version':{'version':e['version'],'description':e['description'],'createdAt':e['createdAt']}};}export async function handleBuildGraph(a){const b=await resolveProjectId(a),c=await localProject['getProject'](b);if(!c)throw new Error('Project\x20not\x20found:\x20'+b);if(a['async_mode']===!![]){const d=TaskTracker['create']('build_graph',b);return((async()=>{try{TaskTracker['update'](d,0xa,'Resolving\x20root\x20address');const e=await buildGraphSync(b,c,a);TaskTracker['complete'](d,e);}catch(f){TaskTracker['fail'](d,f['message']??String(f));}})()),{'action':'build_graph','async_mode':!![],'task_id':d,'hint':'Graph\x20is\x20building\x20in\x20the\x20background.\x20Call\x20query_task_status\x20with\x20task_id\x20to\x20check\x20progress\x20and\x20retrieve\x20the\x20result.'};}return buildGraphSync(b,c,a);}async function buildGraphSync(a,b,c){let d=b['serviceAddress'];if(!d){const j=await localProject['listObjects'](a);if(j['length']===0x0)throw new Error('Cannot\x20build\x20graph:\x20project\x20has\x20no\x20objects\x20and\x20no\x20service_address');const k=j['find'](l=>l['role']==='core')??j['find'](l=>l['objectType']?.['includes']('service::Service')||l['objectType']==='Service');d=(k??j[0x0])['objectAddress'];}const e=new GraphBuilder({'maxDepth':c['max_depth']??c['depth']??0x3,'enableRegistrar':c['enable_registrar']??!![],'enablePotential':c['enable_potential']??![],'projectId':a,'network':b['network']??undefined}),f=await e['buildRelationshipGraph'](d),g={};for(const l of f['graph']['edges']){const m=l['edgeSource']??'unknown';g[m]=(g[m]??0x0)+0x1;}const h=f['graph']['edges']['slice']()['sort']((n,o)=>(o['weight']??0x0)-(n['weight']??0x0))['slice'](0x0,0x5)['map'](n=>({'source':n['sourceObject'],'target':n['targetObject'],'fieldName':n['fieldName'],'relationshipType':n['relationshipType'],'weight':n['weight'],'verified':n['verified']})),i=h['map'](n=>'\x20\x20'+shortLabel(n['source'])+'\x20--'+(n['fieldName']??n['relationshipType']??'')+'-->\x20'+shortLabel(n['target']))['join']('\x0a');return{'action':'build_graph','nodeCount':f['graph']['nodes']['length'],'edgeCount':f['graph']['edges']['length'],'edgesBySource':g,'reputationCount':f['reputation']['size'],'builtAt':f['graph']['builtAt'],'topEdges':h,'visualization':i||'\x20\x20(no\x20edges\x20to\x20display)','hint':'Showing\x20top\x20'+h['length']+'\x20critical\x20edges.\x20Call\x20project_operation\x20with\x20action=\x27get_graph\x27\x20to\x20list\x20all\x20'+f['graph']['edges']['length']+'\x20edges.','binding_verification':await verifyServiceBindings(b['serviceAddress'],b['network'])};}async function verifyServiceBindings(a,b){if(!a)return null;try{const c=await query_objects({'objects':[a],'network':b}),d=c?.['objects']?.[0x0];if(!d)return null;const e=d['order_allocators']?.['allocators']?.['length']??0x0,f=Array['isArray'](d['arbitrations'])?d['arbitrations']['length']:0x0,g={'Service.machine':{'expected':'Machine','actual':d['machine']??null,'verified':!!d['machine']},'Service.permission':{'expected':'Permission','actual':d['permission']??null,'verified':!!d['permission']},'Service.buy_guard':{'expected':'Guard','actual':d['buy_guard']??null,'verified':!!d['buy_guard']},'Service.order_allocators':{'expected':'Guard[]','actual':null,'count':e,'verified':e>0x0},'Service.arbitrations':{'expected':'Arbitration[]','actual':null,'count':f,'verified':f>0x0},'Service.um':{'expected':'Contact','actual':d['um']??null,'verified':!!d['um']}},h=Object['values'](g)['every'](i=>i['verified']);return{'service':a,'bindings':g,'all_verified':h};}catch{return null;}}function synthesizeOnchainFallbackEdges(a,c){const d=[],e=Date['now'](),f=[{'key':'Service.machine','fieldName':'machine','relationshipType':'machine'},{'key':'Service.permission','fieldName':'permission','relationshipType':'permission'},{'key':'Service.buy_guard','fieldName':'buy_guard','relationshipType':'guard'},{'key':'Service.um','fieldName':'um','relationshipType':'um'},{'key':'Service.order_allocators','fieldName':'order_allocators','relationshipType':'guard'},{'key':'Service.arbitrations','fieldName':'arbitrations','relationshipType':'arbitration'}];for(const g of f){const h=c['bindings'][g['key']];if(!h||!h['verified'])continue;const i=h['actual']??a+'#'+g['fieldName']+'#synthetic';d['push']({'id':'onchain-fallback-'+g['fieldName']+'-'+e,'projectId':null,'sourceObject':a,'targetObject':i,'edgeSource':'internal','relationshipType':g['relationshipType'],'fieldName':g['fieldName'],'depth':0x1,'verified':!![],'weight':0x1,'direction':'outbound','metadata':{'onchain_fallback':!![]},'cachedAt':e});}return d;}function shortLabel(a){if(!a)return'(empty)';if(!a['startsWith']('0x'))return a['length']<=0x18?a:a['slice'](0x0,0x15)+'...';return a['length']<=0xc?a:a['slice'](0x0,0xa)+'..';}export async function handleGetGraph(a){const b=await resolveProjectId(a),c=await localProject['getGraph'](b);return{'action':'get_graph','edges':c['map'](d=>({'sourceObject':d['sourceObject'],'targetObject':d['targetObject'],'edgeSource':d['edgeSource'],'relationshipType':d['relationshipType'],'fieldName':d['fieldName'],'depth':d['depth'],'verified':d['verified'],'weight':d['weight'],'direction':d['direction']}))};}export async function handleEvaluateProject(a){const b=await resolveProjectId(a),c=await localProject['getProject'](b);if(!c)throw new Error('Project\x20not\x20found:\x20'+b);if(a['async_mode']===!![]){const d=TaskTracker['create']('evaluate_project',b);return((async()=>{try{TaskTracker['update'](d,0xa,'Refreshing\x20objects\x20and\x20gathering\x20inputs');const e=await evaluateProjectSync(b,c,a);TaskTracker['complete'](d,e);}catch(f){TaskTracker['fail'](d,f['message']??String(f));}})()),{'action':'evaluate_project','async_mode':!![],'task_id':d,'hint':'Evaluation\x20is\x20running\x20in\x20the\x20background.\x20Call\x20query_task_status\x20with\x20task_id\x20to\x20check\x20progress\x20and\x20retrieve\x20the\x20result.'};}return evaluateProjectSync(b,c,a);}async function evaluateProjectSync(a,b,c){const d=requireField(c['evaluation_type'],'evaluation_type');let e;if(c['refresh_before_eval']!==![]){const p=await refreshProjectObjects(a,b['network']);p['failedCount']>0x0&&(e='Refresh\x20completed\x20with\x20'+p['failedCount']+'\x20failed\x20object(s)\x20'+('out\x20of\x20'+(p['refreshedCount']+p['failedCount'])+'\x20total.\x20')+'Evaluation\x20may\x20use\x20stale\x20data\x20for\x20failed\x20objects.');}const f=await localProject['listObjects'](a);let g=await localProject['getGraph'](a),h;if(g['length']===0x0&&b['serviceAddress']){const q=await verifyServiceBindings(b['serviceAddress'],b['network']);if(q&&Object['values'](q['bindings'])['some'](r=>r['verified'])){g=synthesizeOnchainFallbackEdges(b['serviceAddress'],q);const r=Object['values'](q['bindings'])['filter'](s=>s['verified'])['length'];h='Graph\x20is\x20empty;\x20fell\x20back\x20to\x20on-chain\x20direct\x20query\x20('+r+'/'+Object['keys'](q['bindings'])['length']+'\x20Service\x20bindings\x20verified).\x20Call\x20build_graph\x20to\x20construct\x20the\x20full\x20relationship\x20graph.';}}const i=f['map'](s=>s['objectAddress']),j=await localProject['getCachedObjects'](i),k=new Map();for(const [s,t]of j)k['set'](s,t);let l;if(d==='worth_buying'||d==='value'){const u=new SemanticAssembler(),w=new Map();for(const z of g){if(z['edgeSource']==='registrar'&&z['relationshipType']==='affiliation'){}}const x=await u['assemble'](b,f,g,w),y=u['buildEvaluationPrompt'](d,x);l=y['prompt'];}const m={'project':b,'objects':f,'edges':g,'objectCache':k,'reputation':undefined},n=await runEvaluation(m,d,l);let o='';if(!n['needsLlm']){const A={'projectId':a,'evalType':d,'score':n['score'],'summary':n['summary'],'details':{'criterionScores':n['criterionScores'],'findings':n['findings'],'strengths':n['strengths']}},B=await localProject['saveEvaluation'](A);o=B['id'];}return{'action':'evaluate_project','evaluationType':n['evaluationType'],'score':n['score'],'summary':n['summary'],'criterionScores':n['criterionScores'],'findings':n['findings'],'strengths':n['strengths'],'needsLlm':n['needsLlm'],'llmPrompt':n['llmPrompt'],'evaluationId':o,'refreshWarning':e,'graphFallbackWarning':h};}export async function handleSaveEvaluation(a){const b=await resolveProjectId(a),c=requireField(a['evaluation_type'],'evaluation_type'),d=requireField(a['eval_score'],'eval_score'),e=a['eval_summary']??'',f=a['eval_details']??{},g=await localProject['saveEvaluation']({'projectId':b,'evalType':c,'score':d,'summary':e,'details':f});return{'action':'save_evaluation','evaluation':{'id':g['id'],'evalType':g['evalType'],'score':g['score'],'summary':g['summary'],'evaluatedAt':g['evaluatedAt']}};}export async function handleCompareProjects(a){const b=requireField(a['compare_project_ids'],'compare_project_ids'),c=a['evaluation_type']??'worth_buying',d=[];for(const f of b){const g=await localProject['getProject'](f);if(!g)continue;const h=await localProject['listEvaluations'](f,{'evalType':c}),i=h[0x0];d['push']({'projectId':f,'projectName':g['name'],'score':i?.['score']??null,'summary':i?.['summary']??null,'evaluatedAt':i?.['evaluatedAt']??null});}const e=compareProjects(d,c);return{'action':'compare_projects','evaluationType':e['evaluationType'],'ranking':e['ranking'],'bestProjectId':e['bestProjectId']};}async function refreshProjectObjects(a,b){const c=await localProject['listObjects'](a),d=c['map'](h=>h['objectAddress']);if(d['length']===0x0)return{'refreshedCount':0x0,'failedCount':0x0};let e=0x0,f=0x0;const g=0x32;for(let h=0x0;h<d['length'];h+=g){const j=d['slice'](h,h+g);try{const k=await query_objects({'objects':j,'no_cache':!![],'network':b});for(const l of k?.['objects']??[]){l?.['object']&&(await localProject['cacheObject'](l['object'],l['type']??null,JSON['stringify'](l),b),e++);}}catch{f+=j['length'];}}return{'refreshedCount':e,'failedCount':f};}export async function handleRefreshObjects(a){const b=await resolveProjectId(a),c=await localProject['getProject'](b);if(!c)throw new Error('Project\x20not\x20found:\x20'+b);const d=c['network'],{refreshedCount:e,failedCount:f}=await refreshProjectObjects(b,d);return{'action':'refresh_objects','refreshedCount':e,'failedCount':f,'refreshedAt':Date['now']()};}export async function handleDeleteProject(a){const b=await resolveProjectId(a);return await localProject['deleteProject'](b),{'action':'delete_project','deleted':!![]};}export async function handleCloneProjectToNetwork(a){const b=await resolveProjectId(a),c=await localProject['getProject'](b);if(!c)throw new Error('Source\x20project\x20not\x20found:\x20'+b);const d=requireField(a['target_network'],'target_network');if(!['testnet','mainnet']['includes'](d))throw new Error('target_network\x20must\x20be\x20\x27testnet\x27\x20or\x20\x27mainnet\x27');const e=a['action']==='migrate_network'?'migrate_network':'clone_project_to_network',f=c['prefix']+'_'+d,g=await localProject['getProjectByPrefix'](f);if(g)throw new Error('Target\x20project\x20prefix\x20\x27'+f+'\x27\x20already\x20exists\x20(project:\x20\x27'+g['name']+'\x27,\x20id:\x20\x27'+g['id']+'\x27).\x20'+'Use\x20update_project\x20on\x20the\x20existing\x20target\x20or\x20delete\x20it\x20first.');const h=await localProject['createProject']({'prefix':f,'name':c['name']+'\x20('+d+')','description':c['description']??undefined,'industry':c['industry']??undefined,'perspective':c['perspective']??'producer','labels':c['labels']??undefined,'network':d}),i=await localProject['listObjects'](b);let j=0x0;for(const k of i){await localProject['addObject'](h['id'],{'objectAddress':'draft:'+(k['objectName']??'unnamed'),'objectType':k['objectType']!==null?k['objectType']:undefined,'objectName':k['objectName']!==null?k['objectName']:undefined,'role':k['role']??'dependency','metadata':{'status':'draft','cloned_from':b,'cloned_at':Date['now']()}}),j++;}return{'action':e,'new_project_id':h['id'],'new_prefix':f,'target_network':d,'cloned_objects_count':j,'message':'Project\x20\x27'+c['prefix']+'\x27\x20cloned\x20to\x20'+d+'\x20as\x20\x27'+f+'\x27.\x20'+j+'\x20object(s)\x20copied\x20as\x20drafts\x20—\x20object\x20addresses\x20are\x20empty\x20pending\x20on-chain\x20deployment.','next_steps':'Execute\x20the\x20same\x20onchain_operations\x20sequence\x20with\x20env.network=\x27'+d+'\x27\x20to\x20deploy\x20objects.\x20Then\x20call\x20update_project\x20to\x20set\x20service_address,\x20and\x20build_graph\x20to\x20construct\x20the\x20new\x20project\x27s\x20relationship\x20graph.'};}export async function handleMigrateToMainnet(a){const b=await resolveProjectId(a),c=await localProject['getProject'](b);if(!c)throw new Error('Source\x20project\x20not\x20found:\x20'+b);if(c['network']==='mainnet')throw new Error('Source\x20project\x20\x27'+c['prefix']+'\x27\x20is\x20already\x20on\x20mainnet.\x20'+'migrate_to_mainnet\x20is\x20for\x20testnet→mainnet\x20migration\x20only.\x20'+'To\x20clone\x20to\x20testnet,\x20use\x20clone_project_to_network\x20with\x20target_network=\x27testnet\x27.');const d={...a,'target_network':'mainnet'},e=await handleCloneProjectToNetwork(d),f=await localProject['listObjects'](b),g=f['filter'](h=>h['objectType']!==null)['map']((h,i)=>({'order':i+0x1,'object_type':h['objectType'],'object_name':h['objectName']??'<unnamed>','operation_type':mapObjectTypeToOperationType(h['objectType']),'localmark_name':h['objectName']??'<unnamed_'+(i+0x1)+'>','note':'Deploy\x20on\x20mainnet\x20with\x20env.network=\x27mainnet\x27.\x20Use\x20the\x20SAME\x20LocalMark\x20name\x20\x27'+(h['objectName']??'<unnamed>')+'\x27\x20—\x20it\x20will\x20resolve\x20to\x20a\x20DIFFERENT\x20mainnet\x20address.\x20The\x20testnet\x20address\x20is\x20NOT\x20reused.'}));return{'action':'migrate_to_mainnet','migration_status':'step_1_complete_steps_2_5_pending_user_action','source_project':{'prefix':c['prefix'],'network':c['network'],'preserved':!![]},'target_project':{'prefix':e['new_prefix'],'project_id':e['new_project_id'],'network':'mainnet','cloned_objects_count':e['cloned_objects_count']},'key_principle':'testnet\x20and\x20mainnet\x20are\x20DIFFERENT\x20projects.\x20Same\x20LocalMark\x20names\x20may\x20exist\x20in\x20both\x20networks,\x20'+'but\x20they\x20correspond\x20to\x20DIFFERENT\x20on-chain\x20addresses.\x20The\x20testnet\x20project\x20is\x20preserved\x20unchanged.\x20'+'LocalMark\x20names\x20are\x20NETWORK-SCOPED:\x20a\x20name\x20resolves\x20to\x20a\x20testnet\x20address\x20when\x20env.network=testnet,\x20'+'and\x20to\x20a\x20mainnet\x20address\x20when\x20env.network=mainnet.\x20Register\x20the\x20SAME\x20name\x20TWICE\x20(once\x20per\x20network).','payment_token_decision':identifyMigrationDecisions({'from_network':'testnet','to_network':'mainnet','current_payment_token':'WOW'})[0x0],'migration_plan':[{'step':0x1,'status':'completed','action':'clone_project_to_network','description':'Clone\x20source\x20project\x20metadata\x20to\x20mainnet\x20project','result':'Created\x20mainnet\x20project\x20\x27'+e['new_prefix']+'\x27\x20with\x20'+e['cloned_objects_count']+'\x20draft\x20object(s).'},{'step':0x2,'status':'pending_user_action','action':'onchain_operations','description':'Re-deploy\x20all\x20objects\x20on\x20mainnet.\x20Set\x20env.network=\x27mainnet\x27\x20and\x20env.project=\x27'+e['new_prefix']+'\x27.\x20Use\x20the\x20SAME\x20LocalMark\x20names\x20—\x20they\x20will\x20resolve\x20to\x20'+'DIFFERENT\x20mainnet\x20addresses.\x20Mainnet\x20accounts\x20need\x20real\x20(non-test)\x20SUI\x20for\x20gas.','deployment_plan':g,'critical_note':'Re-deploy\x20in\x20dependency\x20order:\x20Permission\x20→\x20Machine\x20→\x20Contact\x20→\x20Guard(s)\x20→\x20Service.\x20'+'For\x20the\x20Service↔Guard\x20circular\x20dependency,\x20use\x20the\x203-step\x20pattern\x20'+'(Service\x20without\x20order_allocators\x20→\x20Guards\x20→\x20Service\x20with\x20order_allocators\x20+\x20publish).\x20'+'BEFORE\x20deploying,\x20decide\x20the\x20payment\x20token\x20(see\x20payment_token_decision\x20above):\x20if\x20switching\x20'+'from\x20WOW\x20to\x20a\x20stablecoin\x20(e.g.\x20USDT),\x20set\x20the\x20Service\x20/\x20Treasury\x20/\x20Allocation\x20type_parameter\x20'+'to\x20the\x20stablecoin\x27s\x20WOW\x20type\x20tag\x20(query\x20\x27mainnet\x20bridge\x20tokens\x27\x20via\x20wowok_buildin_info).'},{'step':0x3,'status':'pending_user_action','action':'local_mark_operation','description':'Re-register\x20LocalMark\x20names\x20on\x20mainnet.\x20Each\x20name\x20from\x20step\x202\x20must\x20be\x20registered\x20'+'with\x20its\x20NEW\x20mainnet\x20address.\x20The\x20testnet\x20LocalMark\x20entries\x20are\x20NOT\x20migrated\x20'+'automatically\x20—\x20mainnet\x20has\x20its\x20own\x20name\x20registry.','names_to_register':f['filter'](h=>h['objectName']!==null)['map'](h=>h['objectName'])},{'step':0x4,'status':'pending_user_action','action':'update_project','description':'Set\x20service_address\x20on\x20the\x20mainnet\x20project\x20to\x20the\x20mainnet\x20Service\x20address\x20'+'(from\x20step\x202).\x20Use\x20project=\x27'+e['new_prefix']+'\x27\x20and\x20the\x20mainnet\x20'+'Service\x20LocalMark\x20name\x20or\x200x\x20address.'},{'step':0x5,'status':'pending_user_action','action':'build_graph','description':'Rebuild\x20the\x20relationship\x20graph\x20on\x20the\x20mainnet\x20project.\x20Use\x20project=\x27'+e['new_prefix']+'\x27.\x20This\x20constructs\x20edges\x20from\x20the\x20newly-deployed\x20'+'mainnet\x20object\x20bindings\x20(machine,\x20order_allocators,\x20guards,\x20etc.).'}],'summary':'Migration\x20step\x201\x20(clone)\x20complete.\x20Steps\x202-5\x20require\x20user\x20action:\x20deploy\x20objects\x20on\x20mainnet,\x20'+'re-register\x20LocalMark\x20names,\x20set\x20service_address,\x20and\x20rebuild\x20the\x20graph.\x20The\x20testnet\x20project\x20'+'is\x20preserved\x20unchanged\x20—\x20you\x20can\x20run\x20both\x20in\x20parallel\x20until\x20ready\x20to\x20deprecate\x20the\x20testnet\x20version.'};}function mapObjectTypeToOperationType(a){const b={'service':'service','machine':'machine','guard':'guard','permission':'permission','progress':'progress','arb':'arbitration','arbitration':'arbitration','contact':'contact','treasury':'treasury','reward':'reward','allocation':'allocation','repository':'repository','demand':'demand','order':'order','personal':'personal','payment':'payment','proof':'proof'};return b[a['toLowerCase']()]??a['toLowerCase']();}export async function handleGetObjectDiff(a){const b=requireField(a['diff_address'],'diff_address'),c=requireField(a['diff_from_time'],'diff_from_time'),d=requireField(a['diff_to_time'],'diff_to_time'),e=await localProject['getObjectDiff'](b,c,d);return{'action':'get_object_diff','address':e['address'],'fromTime':e['fromTime'],'toTime':e['toTime'],'changedFields':e['changedFields']['map'](g=>({'fieldPath':g['fieldPath'],'oldValue':g['oldValue'],'newValue':g['newValue'],'changeType':g['changeType']}))};}function normalizeForwards(a){if(!Array['isArray'](a))return[];return a['map'](b=>{const c=b?.['guard'],d=c&&typeof c==='object'&&typeof c['guard']==='string',e=d?c['guard']:typeof c==='string'?c:null,g=d&&Array['isArray'](c['retained_submission'])?c['retained_submission']:null;return{'name':typeof b?.['name']==='string'?b['name']:'','weight':typeof b?.['weight']==='number'?b['weight']:0x0,'guard':e,'retained_submission':g,'named_operator':typeof b?.['namedOperator']==='string'?b['namedOperator']:null,'permission_index':typeof b?.['permissionIndex']==='number'?b['permissionIndex']:null};});}export async function handleGetMachineGraph(a){const b=await resolveProjectId(a),c=await resolveObjectAddress(a),d=await localProject['getProject'](b);if(!d)throw new Error('Project\x20not\x20found\x20(id:\x20'+b+')');const f=await localProject['listObjects'](b),g=f['find'](q=>q['objectAddress']===c);if(!g)throw new Error('Object\x20'+c+'\x20is\x20not\x20part\x20of\x20project\x20\x27'+d['prefix']+'\x27.\x20'+'Add\x20it\x20via\x20add_object\x20first.');const h=d['network']??'testnet';let i=null;try{const q=await query_objects({'objects':[c],'network':h});i=q?.['objects']?.[0x0]??null;}catch(r){throw new Error('Failed\x20to\x20query\x20Machine\x20on\x20'+h+':\x20'+(r instanceof Error?r['message']:String(r)));}if(!i)throw new Error('Machine\x20'+c+'\x20not\x20found\x20on\x20'+h+'.\x20'+'It\x20may\x20not\x20exist\x20on\x20this\x20network\x20—\x20try\x20switching\x20networks.');let j=null;const k=await LocalMark['Instance']()['list']({'address':c});k['length']>0x0&&k[0x0]['name']&&(j=k[0x0]['name']);const l=typeof i['bPublished']==='boolean'?i['bPublished']:null,m=typeof i['bPaused']==='boolean'?i['bPaused']:null,n=new Map(),o=[];let p=[];try{p=await fetchMachineNodes(c,h);}catch(s){throw new Error('Failed\x20to\x20query\x20Machine\x20nodes\x20on\x20'+h+':\x20'+(s instanceof Error?s['message']:String(s)));}for(const t of p){const u=t['name'];if(!u)continue;!n['has'](u)&&n['set'](u,{'name':u,'description':null});const w=Array['isArray'](t['value'])?t['value']:[];for(const x of w){if(!x||typeof x!=='object')continue;const y=typeof x['prev_node']==='string'?x['prev_node']:'';if(!y)continue;const z=u,A=typeof x['threshold']==='number'?x['threshold']:0x1,B=normalizeForwards(x['forwards']);o['push']({'from':y,'to':z,'threshold':A,'forwards':B});}}for(const C of o){!n['has'](C['from'])&&n['set'](C['from'],{'name':C['from'],'description':null}),!n['has'](C['to'])&&n['set'](C['to'],{'name':C['to'],'description':null});}return{'action':'get_machine_graph','machineAddress':c,'machineName':j,'nodes':Array['from'](n['values']()),'edges':o,'published':l,'paused':m,'mermaid':renderMachineMermaid(Array['from'](n['values']()),o),'tree_outline':renderMachineTreeIndented({'nodes':Array['from'](n['values']()),'edges':o,'machineName':j,'machineAddress':c,'published':l,'paused':m}),'ascii_art':renderMachineAscii({'nodes':Array['from'](n['values']()),'edges':o,'machineName':j,'machineAddress':c,'published':l,'paused':m}),'markmap':renderMachineMarkmap({'nodes':Array['from'](n['values']()),'edges':o,'machineName':j,'machineAddress':c,'published':l,'paused':m})};}export async function handleGetGuardGraph(a){const b=await resolveProjectId(a),c=await resolveObjectAddress(a),d=await localProject['getProject'](b);if(!d)throw new Error('Project\x20not\x20found\x20(id:\x20'+b+')');const f=await localProject['listObjects'](b),g=f['find'](u=>u['objectAddress']===c);if(!g)throw new Error('Object\x20'+c+'\x20is\x20not\x20part\x20of\x20project\x20\x27'+d['prefix']+'\x27.\x20'+'Add\x20it\x20via\x20add_object\x20first.');const h=d['network']??'testnet';let i=null;try{const u=await query_objects({'objects':[c],'network':h});i=u?.['objects']?.[0x0]??null;}catch(w){throw new Error('Failed\x20to\x20query\x20Guard\x20on\x20'+h+':\x20'+(w instanceof Error?w['message']:String(w)));}if(!i)throw new Error('Guard\x20'+c+'\x20not\x20found\x20on\x20'+h+'.\x20'+'It\x20may\x20not\x20exist\x20on\x20this\x20network\x20—\x20try\x20switching\x20networks.');let j=null;try{const x=await LocalMark['Instance']()['get'](c);j=x?.['name']??null;}catch{}const k=i['root']??i['data']?.['root']??null,l=i['table']??i['data']?.['table']??[],m=i['rely']??i['data']?.['rely']??null,n=i['immutable']??i['data']?.['immutable']??null;if(!k)throw new Error('Guard\x20'+c+'\x20has\x20no\x20root\x20node.\x20The\x20Guard\x20may\x20be\x20empty\x20or\x20corrupted.\x20'+'Use\x20query_toolkit\x20to\x20inspect\x20the\x20raw\x20object\x20data.');const o=renderGuardMermaid(k),p=Array['isArray'](l)?l['map'](y=>({'identifier':y['identifier'],'name':y['name'],'value_type':y['value_type'],'b_submission':y['b_submission'],'value':y['value']})):[],q={'root':k,'table':p,'guardName':j,'guardAddress':c,'rely':m??null},r=renderGuardTreeIndented(q),s=renderGuardAscii(q),t=renderGuardMarkmap(q);return{'action':'get_guard_graph','guardAddress':c,'guardName':j,'root':k,'table':Array['isArray'](l)?l:[],'rely':m??null,'immutable':n??null,'mermaid':o,'tree_outline':r,'ascii_art':s,'markmap':t};}export async function handlePreEvaluateCheck(a){const b=await resolveProjectId(a),c=await localProject['getProject'](b);if(!c)throw new Error('Project\x20not\x20found:\x20'+b);const d=[],e=[],f=await localProject['listObjects'](b);if(f['length']===0x0)return d['push']({'id':'PE-01','description':'Project\x20has\x20no\x20objects\x20(project_objects\x20table\x20is\x20empty).','impact':'Evaluator\x20will\x20return\x20a\x20neutral\x20score\x20with\x20no\x20findings.\x20'+'Call\x20add_object\x20or\x20create_project_from_onchain\x20first.'}),{'action':'pre_evaluate_check','ready':![],'missing':d,'warnings':e,'summary':'Project\x20is\x20empty\x20—\x20add\x20objects\x20before\x20evaluating.'};const g=await localProject['getGraph'](b);g['length']===0x0&&e['push']({'id':'PE-02','description':'Project\x20has\x20no\x20graph\x20edges\x20(graph_edges\x20table\x20is\x20empty).','impact':'Evaluator\x27s\x20binding-based\x20checks\x20(machine,\x20permission,\x20'+'buy_guard,\x20order_allocators)\x20will\x20return\x200.\x20Call\x20build_graph\x20'+'before\x20evaluate_project\x20to\x20populate\x20edges.'});const h=f['map'](u=>u['objectAddress']),i=await localProject['getCachedObjects'](h),j=[];let k=0x0;const l=0x18*0x3c*0x3c*0x3e8,m=Date['now']();for(const u of f){const w=i['get'](u['objectAddress']);if(!w)j['push'](u['objectAddress']);else{const x=w?.['fetchedAt'];typeof x==='number'&&m-x>l&&k++;}}j['length']>0x0&&e['push']({'id':'PE-03','description':j['length']+'/'+f['length']+'\x20project\x20objects\x20have\x20no\x20cached\x20on-chain\x20data.','impact':'Evaluator\x20will\x20see\x20empty\x20object\x20data\x20for\x20these\x20objects.\x20'+'Call\x20refresh_objects\x20before\x20evaluate_project\x20to\x20fetch\x20fresh\x20data.'});k>0x0&&e['push']({'id':'PE-04','description':k+'/'+f['length']+'\x20project\x20objects\x20have\x20cache\x20older\x20than\x2024\x20hours.','impact':'Evaluator\x20results\x20may\x20be\x20based\x20on\x20stale\x20state.\x20'+'Call\x20refresh_objects\x20to\x20fetch\x20fresh\x20data.'});const n=new Set(f['map'](y=>y['objectAddress'])),p=new Set(f['map'](y=>y['objectName'])['filter'](Boolean)),q=g['filter'](y=>!n['has'](y['sourceObject'])&&!p['has'](y['sourceObject'])&&!n['has'](y['targetObject'])&&!p['has'](y['targetObject']));q['length']>0x0&&e['push']({'id':'PE-05','description':q['length']+'\x20graph\x20edges\x20reference\x20objects\x20not\x20in\x20project_objects.','impact':'Evaluator\x27s\x20binding\x20index\x20may\x20include\x20stale/dangling\x20entries.\x20'+'Call\x20build_graph\x20again\x20to\x20refresh\x20edges,\x20or\x20remove\x20orphan\x20objects.'});if(c['perspective']==='producer'){const y=f['some'](z=>isObjectOfType(z['objectType'],'service'));!y&&d['push']({'id':'PE-06','description':'Producer\x20project\x20has\x20no\x20Service-type\x20object.','impact':'Evaluator\x27s\x20service-centric\x20checks\x20(publish\x20state,\x20'+'machine\x20binding,\x20order_allocators,\x20etc.)\x20will\x20all\x20return\x200.\x20'+'Add\x20a\x20Service\x20object\x20or\x20import\x20one\x20via\x20create_project_from_onchain.'});}const r=f['filter'](z=>{const A=z['metadata']??{};return A['status']==='draft'||z['objectAddress']['startsWith']('draft:');})['length'];r===f['length']&&f['length']>0x0&&e['push']({'id':'PE-07','description':'All\x20'+f['length']+'\x20objects\x20are\x20draft\x20(not\x20yet\x20on-chain).','impact':'Evaluator\x20will\x20assess\x20the\x20blueprint\x20as\x20if\x20it\x20were\x20on-chain.\x20'+'Real\x20on-chain\x20state\x20may\x20differ\x20once\x20deployed.'});const s=d['length']===0x0,t=s?e['length']===0x0?'Ready\x20to\x20evaluate.\x20'+f['length']+'\x20objects,\x20'+g['length']+'\x20edges.':'Ready\x20to\x20evaluate\x20with\x20'+e['length']+'\x20warning(s).\x20'+f['length']+'\x20objects,\x20'+g['length']+'\x20edges.':'Not\x20ready:\x20'+d['length']+'\x20blocking\x20issue(s)\x20found.';return{'action':'pre_evaluate_check','ready':s,'missing':d,'warnings':e,'summary':t,'counts':{'objects':f['length'],'edges':g['length'],'uncached':j['length'],'stale':k,'dangling_edges':q['length'],'drafts':r}};}export async function handleVerifyDeployment(a){const b=await resolveProjectId(a),c=await localProject['getProject'](b);if(!c)throw new Error('Project\x20not\x20found:\x20'+b);const d=await localProject['listObjects'](b);if(d['length']===0x0)return{'action':'verify_deployment','verifiedCount':0x0,'matched':0x0,'mismatched':0x0,'missing':0x0,'unreachable':0x0,'results':[],'summary':'Project\x20has\x20no\x20objects\x20to\x20verify.'};const g=c['network']??'testnet',h=d['filter'](s=>!s['objectAddress']['startsWith']('draft:')&&s['objectAddress']['startsWith']('0x'));if(h['length']===0x0)return{'action':'verify_deployment','verifiedCount':0x0,'matched':0x0,'mismatched':0x0,'missing':0x0,'unreachable':0x0,'results':[],'summary':'All\x20'+d['length']+'\x20objects\x20are\x20draft\x20or\x20non-address\x20—\x20nothing\x20to\x20verify\x20on-chain.'};const i=Math['min'](h['length'],0x32),j=h['slice'](0x0,i)['map'](s=>s['objectAddress']);let k;try{k=await query_objects({'objects':j,'network':g});}catch(s){return{'action':'verify_deployment','verifiedCount':0x0,'matched':0x0,'mismatched':0x0,'missing':0x0,'unreachable':h['length'],'results':h['map'](t=>({'objectAddress':t['objectAddress'],'objectName':t['objectName'],'objectType':t['objectType'],'status':'unreachable','error':s instanceof Error?s['message']:String(s)})),'summary':'Failed\x20to\x20query\x20on-chain\x20state:\x20'+(s instanceof Error?s['message']:String(s))};}const l=k?.['objects']??[],m=new Map();for(const t of l){if(t&&typeof t==='object'){const u=t,w=u['object']??u['objectId']??u['object_id'];typeof w==='string'&&m['set'](w,t);}}const n=[];let o=0x0,p=0x0,q=0x0;for(const x of h['slice'](0x0,i)){const y=m['get'](x['objectAddress']);if(!y){q++,n['push']({'objectAddress':x['objectAddress'],'objectName':x['objectName'],'objectType':x['objectType'],'status':'missing'});continue;}const z=y,A=(await localProject['getCachedObjects']([x['objectAddress']]))['get'](x['objectAddress']),B=A?.['data']??{},C=[];let D;if(isObjectOfType(x['objectType'],'service')){const E=['machine','permission','buy_guard','arbitrations','rewards','repositories'];for(const F of E){const G=B[F],H=z[F],I=J=>J===null||J===undefined||J===''?null:J;JSON['stringify'](I(G))!==JSON['stringify'](I(H))&&C['push']({'field':F,'sqlite':G,'onchain':H});}D={'machine':!!z['machine'],'permission':!!z['permission'],'buy_guard':!!z['buy_guard'],'order_allocators':!!z['order_allocators']},B['bPublished']!==undefined&&z['bPublished']!==undefined&&B['bPublished']!==z['bPublished']&&C['push']({'field':'bPublished','sqlite':B['bPublished'],'onchain':z['bPublished']});}else{if(isObjectOfType(x['objectType'],'machine')){B['bPublished']!==undefined&&z['bPublished']!==undefined&&B['bPublished']!==z['bPublished']&&C['push']({'field':'bPublished','sqlite':B['bPublished'],'onchain':z['bPublished']});const J=B['node_count'],K=z['node_count'];J!==undefined&&K!==undefined&&J!==K&&C['push']({'field':'node_count','sqlite':J,'onchain':K});}}C['length']>0x0?(p++,n['push']({'objectAddress':x['objectAddress'],'objectName':x['objectName'],'objectType':x['objectType'],'status':'mismatched','differences':C,'bindings':D})):(o++,n['push']({'objectAddress':x['objectAddress'],'objectName':x['objectName'],'objectType':x['objectType'],'status':'matched','bindings':D}));}const r=o===h['length']?'All\x20'+o+'\x20deployed\x20objects\x20verified.':o+'\x20matched,\x20'+p+'\x20mismatched,\x20'+q+'\x20missing.';return{'action':'verify_deployment','verifiedCount':n['length'],'matched':o,'mismatched':p,'missing':q,'unreachable':0x0,'results':n,'summary':r};}
@@ -5,6 +5,7 @@ export * from "./namespace.js";
5
5
  export * from "./graph.js";
6
6
  export * from "./query.js";
7
7
  export * from "./reverse-mapping.js";
8
+ export * from "./workflow-design-assessment.js";
8
9
  export declare function isProjectServiceEnabled(): boolean;
9
10
  export declare function getGraph(): ProjectGraph;
10
11
  export declare function setGraph(g: ProjectGraph): void;
@@ -1 +1 @@
1
- import{normalizeForProject,extractProjectPrefix,extractAllProjectVersions,TAG_PREFIX}from'./namespace.js';import{ProjectGraph,extractReferences,nodeIdOf}from'./graph.js';import{listProjects,listProjectObjects,listShareableObjects,traceDependencies,traceReferencedBy,prePublishCheck,findCrossProjectReferences}from'./query.js';import{isEnabled as a220a}from'../config/index.js';import{LocalMark,getWowMcpDir}from'@wowok/wowok';import{readFileSync,writeFileSync,existsSync,mkdirSync}from'fs';import{dirname,join}from'path';import*as a220b from'./project-store.js';export*from'./namespace.js';export*from'./graph.js';export*from'./query.js';export*from'./reverse-mapping.js';export function isProjectServiceEnabled(){return a220a('project_service');}function scheduleHiddenStep(a,b,c){const d=extractAllProjectVersions(b)['filter'](f=>f['version']!==undefined)['map'](f=>''+TAG_PREFIX['project']+f['prefix']+'_'+f['version']);if(d['length']===0x0||c['length']===0x0)return;const e=async()=>{const f=LocalMark['Instance']();for(const g of c){try{await f['add_tags'](g['target'],d);}catch{}}};typeof setImmediate==='function'?setImmediate(()=>{e()['catch'](()=>{});}):Promise['resolve']()['then'](()=>{e()['catch'](()=>{});});}let GRAPH_INSTANCE=null,GRAPH_HYDRATED=![];function isAutoHydrateEnabled(){const a=process['env']['WOWOK_PROJECT_SERVICE_HYDRATE'];return a==='1'||a==='true';}export function getGraph(){if(!GRAPH_INSTANCE){GRAPH_INSTANCE=new ProjectGraph();if(isAutoHydrateEnabled()&&!GRAPH_HYDRATED){GRAPH_HYDRATED=!![];try{loadGraph();}catch{}}}return GRAPH_INSTANCE;}export function setGraph(a){GRAPH_INSTANCE=a;}const STAGE_CACHE=new Map();function stageCacheKey(a,b){return a+':'+b;}export function getStageCache(a,b){const c=stageCacheKey(a,b),d=STAGE_CACHE['get'](c);if(d)return d;const e=a220b['loadStageState'](a,b);if(e){const f={'stage':e['stage'],'updated_at':e['updated_at']};return STAGE_CACHE['set'](c,f),f;}return undefined;}export function updateStageCache(a,b,c){const d=stageCacheKey(a,b),e=STAGE_CACHE['get'](d),f={'stage':c['stage']??e?.['stage']??0x1,'updated_at':Date['now'](),...e,...c};return STAGE_CACHE['set'](d,f),persistStageState(a,b,f),f;}function persistStageState(a,b,c){try{let d=a220b['loadStageState'](a,b);if(!d){a220b['initProject'](a,b,{'mcpVersion':'project-service-v'+PROJECT_SERVICE_VERSION}),d=a220b['loadStageState'](a,b);if(!d)return;}if(d['archived'])return;d['stage']=c['stage'],d['updated_at']=c['updated_at'],a220b['saveStageState'](a,b,d);}catch{}}export function getProjectStatus(a,b){const c=getStageCache(a,b),d=c?.['stage']??0x1,e={0x1:{'name':'Project\x20Naming','description':'Project\x20namespace\x20established.\x20Ready\x20to\x20analyze\x20business\x20intent.','next':'analyze_intent'},0x2:{'name':'Business\x20Puzzle','description':'Business\x20intent\x20analyzed.\x20Puzzles\x20may\x20need\x20completion\x20before\x20risk\x20assessment.','next':c?.['puzzles']?'aggregate_risks':'analyze_intent'},0x3:{'name':'Risk\x20Calibration','description':'Risks\x20assessed.\x20Fix\x20CRITICAL\x20risks\x20before\x20generating\x20deployment\x20doc.','next':c?.['risk_can_proceed']?'generate_deployment_doc':'aggregate_risks'},0x4:{'name':'Deployment\x20Document','description':'Deployment\x20doc\x20generated.\x20Fix\x20D-errors\x20before\x20substep\x20trace.','next':c?.['doc_error_count']===0x0?'trace_substeps':'generate_deployment_doc'},0x5:{'name':'Substep\x20Trace','description':'Substeps\x20traced.\x20Ready\x20for\x20deployment\x20execution.','next':c?.['trace_can_proceed']?'deploy':'trace_substeps'}},f=e[d];return{'stage':d,'stage_name':f['name'],'stage_description':f['description'],'next_action':f['next'],'can_proceed':d<0x5,'details':c};}export function clearStageCache(a,b){STAGE_CACHE['delete'](stageCacheKey(a,b));}export function normalize(a){if(!isProjectServiceEnabled())return{'data':a['data'],'warnings':[]};return normalizeForProject({'operation_type':a['operation_type'],'data':a['data'],'projectPrefix':a['projectPrefix'],'role':a['role'],'industry':a['industry'],'version':a['version'],'shareable':a['shareable']});}export function observe(a,b,c){if(!isProjectServiceEnabled())return;try{const d=getGraph(),e=b?.['namedNew']??b?.['object'],f=e?.['name'],g=extractAddressFromResult(c),h=nodeIdOf(f,g);if(!h)return;const i=e?.['tags'],j=extractProjectPrefix(i),k=i?.['find'](q=>q['startsWith'](TAG_PREFIX['type'])),l=k?.['slice'](TAG_PREFIX['type']['length']),m=extractAllProjectVersions(i),n=m['map'](q=>q['version']?q['prefix']+'_'+q['version']:q['prefix']),o={'id':h,'project':j,'projects':n['length']>0x0?n:undefined,'type':l,'address':g};d['upsertNode'](o);const p=extractReferences(a,b);for(const q of p){d['addEdge'](h,q['target'],q['kind']);}scheduleHiddenStep(h,i,p);if(a220a('graph_persist'))try{saveGraph();}catch{}}catch{}}function extractAddressFromResult(a){if(!a||typeof a!=='object')return undefined;const b=a?.['object_id']??a?.['objectId']??a?.['effects']?.['created']?.[0x0]?.['reference']?.['objectId']??a?.['objectRef']?.['objectId']??a?.['data']?.['objectId'];if(typeof b==='string'&&b['startsWith']('0x'))return b;const c=a['result']??a['data'];if(c&&typeof c==='object'){const d=c['object_id']??c['objectId']??c['effects']?.['created']?.[0x0]?.['reference']?.['objectId']??c['objectRef']?.['objectId'];if(typeof d==='string'&&d['startsWith']('0x'))return d;}return undefined;}export async function queryProjects(){const a=await listProjects();try{const {LocalProject:b}=await import('@wowok/wowok'),c=await b['Instance']()['listProjects'](),d=c['map'](f=>({'prefix':f['prefix'],'objectCount':0x0,'types':[],'versions':f['currentVersion']?[f['currentVersion']]:[],'objects':[],...f})),e=new Map();for(const f of a)e['set'](f['prefix'],f);for(const g of d){if(!e['has'](g['prefix']))e['set'](g['prefix'],g);}return Array['from'](e['values']());}catch{return a;}}export async function queryProjectObjects(a){return listProjectObjects(a);}export async function queryShareableObjects(){return listShareableObjects();}export function queryDependencies(a){return traceDependencies(getGraph(),a);}export function queryReferencedBy(a){return traceReferencedBy(getGraph(),a);}export function queryPrePublishCheck(a){return prePublishCheck(getGraph(),a);}export function queryCrossProjectReferences(){return findCrossProjectReferences(getGraph());}export function queryGraphStats(){const a=getGraph();return{'nodeCount':a['nodeCount'],'edgeCount':a['edgeCount'],'cycles':a['detectCycles'](),'dangling':a['findDanglingDependencies']()};}function graphFilePath(){return join(getWowMcpDir(),'project-graph.json');}export function saveGraph(){const a=graphFilePath(),b=dirname(a);if(!existsSync(b))mkdirSync(b,{'recursive':!![]});const c=getGraph()['snapshot']();return writeFileSync(a,JSON['stringify'](c,null,0x2),'utf-8'),a;}export function loadGraph(){const a=graphFilePath();if(!existsSync(a))return![];try{const b=readFileSync(a,'utf-8'),c=JSON['parse'](b);if(c&&c['nodes']&&c['edges'])return getGraph()['restore'](c),!![];}catch{}return![];}export function hasPersistedGraph(){return existsSync(graphFilePath());}export const PROJECT_SERVICE_VERSION=0x1;
1
+ import{normalizeForProject,extractProjectPrefix,extractAllProjectVersions,TAG_PREFIX}from'./namespace.js';import{ProjectGraph,extractReferences,nodeIdOf}from'./graph.js';import{listProjects,listProjectObjects,listShareableObjects,traceDependencies,traceReferencedBy,prePublishCheck,findCrossProjectReferences}from'./query.js';import{isEnabled as a268a}from'../config/index.js';import{LocalMark,getWowMcpDir}from'@wowok/wowok';import{readFileSync,writeFileSync,existsSync,mkdirSync}from'fs';import{dirname,join}from'path';import*as a268b from'./project-store.js';export*from'./namespace.js';export*from'./graph.js';export*from'./query.js';export*from'./reverse-mapping.js';export*from'./workflow-design-assessment.js';export function isProjectServiceEnabled(){return a268a('project_service');}function scheduleHiddenStep(a,b,c){const d=extractAllProjectVersions(b)['filter'](f=>f['version']!==undefined)['map'](f=>''+TAG_PREFIX['project']+f['prefix']+'_'+f['version']);if(d['length']===0x0||c['length']===0x0)return;const e=async()=>{const f=LocalMark['Instance']();for(const g of c){try{await f['add_tags'](g['target'],d);}catch{}}};typeof setImmediate==='function'?setImmediate(()=>{e()['catch'](()=>{});}):Promise['resolve']()['then'](()=>{e()['catch'](()=>{});});}let GRAPH_INSTANCE=null,GRAPH_HYDRATED=![];function isAutoHydrateEnabled(){const a=process['env']['WOWOK_PROJECT_SERVICE_HYDRATE'];return a==='1'||a==='true';}export function getGraph(){if(!GRAPH_INSTANCE){GRAPH_INSTANCE=new ProjectGraph();if(isAutoHydrateEnabled()&&!GRAPH_HYDRATED){GRAPH_HYDRATED=!![];try{loadGraph();}catch{}}}return GRAPH_INSTANCE;}export function setGraph(a){GRAPH_INSTANCE=a;}const STAGE_CACHE=new Map();function stageCacheKey(a,b){return a+':'+b;}export function getStageCache(a,b){const c=stageCacheKey(a,b),d=STAGE_CACHE['get'](c);if(d)return d;const e=a268b['loadStageState'](a,b);if(e){const f={'stage':e['stage'],'updated_at':e['updated_at']};return STAGE_CACHE['set'](c,f),f;}return undefined;}export function updateStageCache(a,b,c){const d=stageCacheKey(a,b),e=STAGE_CACHE['get'](d),f={'stage':c['stage']??e?.['stage']??0x1,'updated_at':Date['now'](),...e,...c};return STAGE_CACHE['set'](d,f),persistStageState(a,b,f),f;}function persistStageState(a,b,c){try{let d=a268b['loadStageState'](a,b);if(!d){a268b['initProject'](a,b,{'mcpVersion':'project-service-v'+PROJECT_SERVICE_VERSION}),d=a268b['loadStageState'](a,b);if(!d)return;}if(d['archived'])return;d['stage']=c['stage'],d['updated_at']=c['updated_at'],a268b['saveStageState'](a,b,d);}catch{}}export function getProjectStatus(a,b){const c=getStageCache(a,b),d=c?.['stage']??0x1,e={0x1:{'name':'Project\x20Naming','description':'Project\x20namespace\x20established.\x20Ready\x20to\x20analyze\x20business\x20intent.','next':'analyze_intent'},0x2:{'name':'Business\x20Puzzle','description':'Business\x20intent\x20analyzed.\x20Puzzles\x20may\x20need\x20completion\x20before\x20risk\x20assessment.','next':c?.['puzzles']?'aggregate_risks':'analyze_intent'},0x3:{'name':'Risk\x20Calibration','description':'Risks\x20assessed.\x20Fix\x20CRITICAL\x20risks\x20before\x20generating\x20deployment\x20doc.','next':c?.['risk_can_proceed']?'generate_deployment_doc':'aggregate_risks'},0x4:{'name':'Deployment\x20Document','description':'Deployment\x20doc\x20generated.\x20Fix\x20D-errors\x20before\x20substep\x20trace.','next':c?.['doc_error_count']===0x0?'trace_substeps':'generate_deployment_doc'},0x5:{'name':'Substep\x20Trace','description':'Substeps\x20traced.\x20Ready\x20for\x20deployment\x20execution.','next':c?.['trace_can_proceed']?'deploy':'trace_substeps'}},f=e[d];return{'stage':d,'stage_name':f['name'],'stage_description':f['description'],'next_action':f['next'],'can_proceed':d<0x5,'details':c};}export function clearStageCache(a,b){STAGE_CACHE['delete'](stageCacheKey(a,b));}export function normalize(a){if(!isProjectServiceEnabled())return{'data':a['data'],'warnings':[]};return normalizeForProject({'operation_type':a['operation_type'],'data':a['data'],'projectPrefix':a['projectPrefix'],'role':a['role'],'industry':a['industry'],'version':a['version'],'shareable':a['shareable']});}export function observe(a,b,c){if(!isProjectServiceEnabled())return;try{const d=getGraph(),e=b?.['namedNew']??b?.['object'],f=e?.['name'],g=extractAddressFromResult(c),h=nodeIdOf(f,g);if(!h)return;const i=e?.['tags'],j=extractProjectPrefix(i),k=i?.['find'](q=>q['startsWith'](TAG_PREFIX['type'])),l=k?.['slice'](TAG_PREFIX['type']['length']),m=extractAllProjectVersions(i),n=m['map'](q=>q['version']?q['prefix']+'_'+q['version']:q['prefix']),o={'id':h,'project':j,'projects':n['length']>0x0?n:undefined,'type':l,'address':g};d['upsertNode'](o);const p=extractReferences(a,b);for(const q of p){d['addEdge'](h,q['target'],q['kind']);}scheduleHiddenStep(h,i,p);if(a268a('graph_persist'))try{saveGraph();}catch{}}catch{}}function extractAddressFromResult(a){if(!a||typeof a!=='object')return undefined;const b=a?.['object_id']??a?.['objectId']??a?.['effects']?.['created']?.[0x0]?.['reference']?.['objectId']??a?.['objectRef']?.['objectId']??a?.['data']?.['objectId'];if(typeof b==='string'&&b['startsWith']('0x'))return b;const c=a['result']??a['data'];if(c&&typeof c==='object'){const d=c['object_id']??c['objectId']??c['effects']?.['created']?.[0x0]?.['reference']?.['objectId']??c['objectRef']?.['objectId'];if(typeof d==='string'&&d['startsWith']('0x'))return d;}return undefined;}export async function queryProjects(){const a=await listProjects();try{const {LocalProject:b}=await import('@wowok/wowok'),c=await b['Instance']()['listProjects'](),d=c['map'](f=>({'prefix':f['prefix'],'objectCount':0x0,'types':[],'versions':f['currentVersion']?[f['currentVersion']]:[],'objects':[],...f})),e=new Map();for(const f of a)e['set'](f['prefix'],f);for(const g of d){if(!e['has'](g['prefix']))e['set'](g['prefix'],g);}return Array['from'](e['values']());}catch{return a;}}export async function queryProjectObjects(a){return listProjectObjects(a);}export async function queryShareableObjects(){return listShareableObjects();}export function queryDependencies(a){return traceDependencies(getGraph(),a);}export function queryReferencedBy(a){return traceReferencedBy(getGraph(),a);}export function queryPrePublishCheck(a){return prePublishCheck(getGraph(),a);}export function queryCrossProjectReferences(){return findCrossProjectReferences(getGraph());}export function queryGraphStats(){const a=getGraph();return{'nodeCount':a['nodeCount'],'edgeCount':a['edgeCount'],'cycles':a['detectCycles'](),'dangling':a['findDanglingDependencies']()};}function graphFilePath(){return join(getWowMcpDir(),'project-graph.json');}export function saveGraph(){const a=graphFilePath(),b=dirname(a);if(!existsSync(b))mkdirSync(b,{'recursive':!![]});const c=getGraph()['snapshot']();return writeFileSync(a,JSON['stringify'](c,null,0x2),'utf-8'),a;}export function loadGraph(){const a=graphFilePath();if(!existsSync(a))return![];try{const b=readFileSync(a,'utf-8'),c=JSON['parse'](b);if(c&&c['nodes']&&c['edges'])return getGraph()['restore'](c),!![];}catch{}return![];}export function hasPersistedGraph(){return existsSync(graphFilePath());}export const PROJECT_SERVICE_VERSION=0x1;
@@ -57,6 +57,7 @@ export declare function handleMerchantGuide(v: MerchantGuideInput): Promise<{
57
57
  graph_validation?: undefined;
58
58
  harness_check?: undefined;
59
59
  game_theory?: undefined;
60
+ workflow_design_assessment?: undefined;
60
61
  creation_plan?: undefined;
61
62
  } | {
62
63
  action: "merchant_guide";
@@ -148,6 +149,24 @@ export declare function handleMerchantGuide(v: MerchantGuideInput): Promise<{
148
149
  recommendation: string | undefined;
149
150
  }[];
150
151
  };
152
+ workflow_design_assessment: {
153
+ score: number;
154
+ summary: string;
155
+ findings: {
156
+ kind: "business_loophole" | "semantic_loophole";
157
+ severity: "info" | "critical" | "warning";
158
+ message: string;
159
+ fix: string;
160
+ }[];
161
+ checks: {
162
+ id: string;
163
+ dimension: "value" | "intent" | "game";
164
+ passed: boolean;
165
+ severity: "info" | "critical" | "warning";
166
+ message: string;
167
+ fix: string | undefined;
168
+ }[];
169
+ };
151
170
  creation_plan: CreationPlanEntry[];
152
171
  warnings: string[];
153
172
  next_action: string;
@@ -1 +1 @@
1
- import{analyzeIntent}from'./intent-analyzer.js';import{buildSemanticGraph,validateGraph}from'./semantic-graph.js';import{checkGameTheoryConstraints}from'./game-theory.js';import{CORE_BUSINESS_MODULES,getBusinessModule,recommendModules,checkModuleConstraints}from'../extensions/business-modules.js';function derivePlanSatisfiedConstraints(a,b){const c=new Set(),d=h=>a['edges']['some'](i=>i['relation']===h),e=h=>a['nodes']['some'](i=>i['id']===h),f=h=>a['nodes']['some'](i=>i['type']===h),g=h=>a['adoptedModules']['includes'](h);if(d('has_order_allocators'))c['add']('order_allocators_bound');if(d('uses_machine'))c['add']('machine_bound_before_publish');if(d('has_arbitration'))c['add']('arbitration_bound_to_service');if(e('main_machine'))c['add']('machine_published');if(e('main_repository'))c['add']('repository_published');if(e('main_service'))c['add']('service_published');e('arb_permission')&&e('main_permission')&&c['add']('arbitration_permission_independent');g('independent_arbitration')&&e('guard_independent_arbitration')&&c['add']('voting_guard_configured');g('accept_timeout_protection')&&(c['add']('time_guard_configured'),c['add']('adminUnhold_permission'));g('milestone_escrow')&&f('guard')&&c['add']('milestone_forward_guarded');if(e('main_allocation')&&b['payment']['allocation']&&b['payment']['allocation']['length']>0x0){c['add']('allocators_configured');const h=b['payment']['allocation']['reduce']((j,k)=>j+k['percentage'],0x0);if(Math['abs'](h-0x64)<0.001)c['add']('sharing_sum_100');const i=b['payment']['allocation']['find'](j=>j['recipient']==='platform');if(i&&i['percentage']===0x0)c['add']('platform_fee_zero');g('supplier_collaboration')&&(c['add']('allocation_sharing_configured'),c['add']('demand_configured'));}return g('wip_provenance')&&e('main_repository')&&c['add']('wip_hash_before_delivery'),g('subscription_with_proof')&&e('main_repository')&&(c['add']('delivery_guard_per_cycle'),c['add']('repository_updated')),g('damage_attestation')&&(c['add']('pre_rental_hash'),c['add']('post_rental_hash')),g('refund_guarantee')&&(c['add']('compensation_fund_positive'),c['add']('refund_guard_configured')),c;}function deriveDeployTimeChecks(a){const b=[];return a['nodes']['some'](c=>c['id']==='main_machine')&&b['push']('Machine\x20published\x20AND\x20bound\x20to\x20Service\x20BEFORE\x20Service.publish\x20(machine\x20is\x20immutable\x20after\x20publish)'),a['edges']['some'](c=>c['relation']==='has_order_allocators')&&b['push']('Service.order_allocators\x20bound\x20(verify\x20via\x20query_objects\x20after\x20publish\x20—\x20order_allocators\x20is\x20FROZEN\x20at\x20publish)'),a['nodes']['some'](c=>c['id']==='main_arbitration')&&b['push']('Arbitration.permission\x20!=\x20Service.permission\x20on-chain\x20(E_ARBITRATION_PERMISSION_CONFLICT=33)'),a['nodes']['some'](c=>c['id']==='main_repository')&&b['push']('Repository\x20published\x20and\x20Guard\x20write\x20validation\x20configured'),b['push']('Run\x20project_operation\x20action=\x27verify_deployment\x27\x20after\x20materialization\x20to\x20confirm\x20on-chain\x20state\x20matches\x20this\x20plan'),b;}function buildCreationPlan(a){const b=[],c=new Map(a['nodes']['map'](i=>[i['id'],i])),f=new Map();for(const i of a['nodes'])f['set'](i['id'],new Set());for(const j of a['edges']){j['required']&&f['has'](j['from'])&&c['has'](j['to'])&&f['get'](j['from'])['add'](j['to']);}const g=[],h=new Map(f);while(h['size']>0x0){const k=[...h['entries']()]['filter'](([,l])=>l['size']===0x0)['map'](([l])=>l);if(k['length']===0x0){g['push'](...h['keys']());break;}k['sort']();for(const l of k){g['push'](l),h['delete'](l);for(const m of h['values']())m['delete'](l);}}return g['forEach']((o,p)=>{const q=c['get'](o),r=q['config']['name'];b['push']({'order':p+0x1,'node_id':o,'object_type':q['type'],'suggested_name':r?.['type']==='string'?r['value']:o,'depends_on':[...f['get'](o)??[]],'operation_hint':'Create\x20'+q['type']+'\x20via\x20onchain_operations,\x20then\x20configure.\x20Purpose:\x20'+q['purpose']});}),b;}export async function handleMerchantGuide(a){const b=a['guide_state']??{'intent_text':''},c=a['guide_confirm']??{},d={'intent_text':(a['intent']??b['intent_text']??'')['trim'](),'confirmed_industry':c['industry']??b['confirmed_industry'],'currency':c['currency']??b['currency'],'deliverables':c['deliverables']??b['deliverables'],'payment_override':c['payment']??b['payment_override'],'trust_override':c['trust']??b['trust_override'],'adopted_module_ids':c['adopted_module_ids']??b['adopted_module_ids']};for(const q of Object['keys'](d)){if(d[q]===undefined)delete d[q];}if(!d['intent_text'])throw new Error('merchant_guide\x20requires\x20\x27intent\x27\x20(business\x20description)\x20for\x20Step\x201.\x20'+'Example:\x20intent=\x27I\x20want\x20to\x20offer\x20online\x20design\x20service\x20with\x20milestone\x20payments\x27.\x20'+'Pass\x20the\x20returned\x20guide_state\x20back\x20UNCHANGED\x20on\x20subsequent\x20calls,\x20plus\x20guide_confirm\x20for\x20merchant\x20decisions.');const e=await analyzeIntent(d['intent_text'],{'preferredIndustry':d['confirmed_industry'],'currency':d['currency']});if(!d['confirmed_industry'])return{'action':'merchant_guide','current_step':0x2,'step_name':'Industry\x20Matching','guide_state':d,'intent_draft':e['intent'],'industry_options':{'inferred':e['inferredIndustry'],'confidence':e['industryConfidence'],'similar':e['similarIndustries']},'warnings':e['warnings'],'next_action':'Confirm\x20the\x20industry\x20by\x20calling\x20merchant_guide\x20again\x20with\x20guide_state\x20(UNCHANGED)\x20'+('plus\x20guide_confirm={\x20industry:\x20\x27<one\x20of:\x20'+e['similarIndustries']['join'](',\x20')+'\x20—\x20or\x20any\x20other\x20industry\x20id>\x27\x20}')};const f={...e['intent'],'industry':d['confirmed_industry'],'deliverables':d['deliverables']??e['intent']['deliverables'],'payment':{...e['intent']['payment'],...d['payment_override']??{}},'trust':{...e['intent']['trust'],...d['trust_override']??{}}},g=d['adopted_module_ids']?d['adopted_module_ids']['map'](r=>getBusinessModule(r))['filter'](r=>!!r):recommendModules(d['confirmed_industry'],d['intent_text'],{'maxModules':0x5}),h=buildSemanticGraph(f,g),i=validateGraph(h),j=derivePlanSatisfiedConstraints(h,f),l=g['map'](r=>checkModuleConstraints(r,j)),m=deriveDeployTimeChecks(h),n=l['filter'](r=>!r['adopted']),o=checkGameTheoryConstraints(h,f),p=buildCreationPlan(h);return{'action':'merchant_guide','current_step':n['length']>0x0?0x9:0xa,'step_name':n['length']>0x0?'Harness\x20Check\x20(issues\x20found)':'Submission\x20Plan\x20Ready','guide_state':{...d,'adopted_module_ids':g['map'](r=>r['id'])},'intent':{'intent_type':f['intent'],'industry':f['industry'],'roles':f['roles'],'deliverables':f['deliverables'],'payment':f['payment'],'trust':f['trust']},'adopted_modules':g['map'](r=>({'id':r['id'],'name':r['name'],'description':r['description'],'requires_keeper':r['requiresKeeper'],'keeper_hint':r['keeperHint'],'user_protections':r['userProtections'],'merchant_obligations':r['merchantObligations']})),'blueprint':{'nodes':h['nodes']['map'](r=>({'id':r['id'],'type':r['type'],'purpose':r['purpose']})),'edges':h['edges']['map'](r=>({'from':r['from'],'to':r['to'],'relation':r['relation'],'required':r['required']}))},'evaluation_preview':h['evaluationPreview'],'graph_validation':{'valid':i['valid'],'hard_violations':i['hardViolations']['map'](r=>({'id':r['id'],'description':r['description'],'fix':r['fixSuggestion']})),'soft_notes':i['softViolations']['map'](r=>({'id':r['id'],'description':r['description']}))},'harness_check':{'module_constraints':l['map'](r=>({'module':r['module'],'plan_satisfied':r['adopted'],'missing':r['missingConstraints'],'reason':r['reason'],'estimated_score_boost':r['estimatedScoreBoost']})),'blocking_issues':n['map'](r=>({'module':r['module'],'missing_constraints':r['missingConstraints'],'fix':r['reason']})),'deploy_time_checks':m},'game_theory':{'summary':o['summary'],'coverage':o['coveredCount']+'/'+o['totalCount'],'exposed_scenarios':o['exposedScenarios'],'wow_alignments':o['wowAlignments'],'scenarios':o['results']['map'](s=>({'scenario':s['scenario'],'covered':s['covered'],'conflict':s['conflict'],'user_protection':s['userProtection'],'evaluation_metric':s['evaluationMetric'],'recommendation':s['recommendation']}))},'creation_plan':p,'warnings':e['warnings'],'next_action':n['length']>0x0?'Resolve\x20the\x20blocking_issues\x20above\x20(adjust\x20guide_confirm\x20payment/trust/modules,\x20or\x20accept\x20and\x20drop\x20the\x20affected\x20module\x20via\x20guide_confirm.adopted_module_ids),\x20then\x20call\x20merchant_guide\x20again.':'Plan\x20ready.\x20Materialize:\x201)\x20create_project\x20with\x20project_industry=\x27'+d['confirmed_industry']+'\x27\x20'+'2)\x20create\x20objects\x20in\x20creation_plan\x20order\x20via\x20onchain_operations\x20'+'3)\x20add_object\x20each\x20on-chain\x20address\x20into\x20the\x20project\x20'+'4)\x20build_graph\x20+\x20evaluate_project\x205)\x20verify_deployment.'};}export function listBusinessModules(){return CORE_BUSINESS_MODULES['map'](a=>({'id':a['id'],'name':a['name'],'description':a['description'],'industry_fit':a['industryFit'],'addresses_pain_points':a['addressesPainPoints'],'requires_keeper':a['requiresKeeper']}));}
1
+ import{analyzeIntent}from'./intent-analyzer.js';import{buildSemanticGraph,validateGraph}from'./semantic-graph.js';import{checkGameTheoryConstraints}from'./game-theory.js';import{assessWorkflowDesign}from'./workflow-design-assessment.js';import{CORE_BUSINESS_MODULES,getBusinessModule,recommendModules,checkModuleConstraints}from'../extensions/business-modules.js';function derivePlanSatisfiedConstraints(a,b){const c=new Set(),d=h=>a['edges']['some'](i=>i['relation']===h),e=h=>a['nodes']['some'](i=>i['id']===h),f=h=>a['nodes']['some'](i=>i['type']===h),g=h=>a['adoptedModules']['includes'](h);if(d('has_order_allocators'))c['add']('order_allocators_bound');if(d('uses_machine'))c['add']('machine_bound_before_publish');if(d('has_arbitration'))c['add']('arbitration_bound_to_service');if(e('main_machine'))c['add']('machine_published');if(e('main_repository'))c['add']('repository_published');if(e('main_service'))c['add']('service_published');e('arb_permission')&&e('main_permission')&&c['add']('arbitration_permission_independent');g('independent_arbitration')&&e('guard_independent_arbitration')&&c['add']('voting_guard_configured');g('accept_timeout_protection')&&(c['add']('time_guard_configured'),c['add']('adminUnhold_permission'));g('milestone_escrow')&&f('guard')&&c['add']('milestone_forward_guarded');if(e('main_allocation')&&b['payment']['allocation']&&b['payment']['allocation']['length']>0x0){c['add']('allocators_configured');const h=b['payment']['allocation']['reduce']((j,k)=>j+k['percentage'],0x0);if(Math['abs'](h-0x64)<0.001)c['add']('sharing_sum_100');const i=b['payment']['allocation']['find'](j=>j['recipient']==='platform');if(i&&i['percentage']===0x0)c['add']('platform_fee_zero');g('supplier_collaboration')&&(c['add']('allocation_sharing_configured'),c['add']('demand_configured'));}return g('wip_provenance')&&e('main_repository')&&c['add']('wip_hash_before_delivery'),g('subscription_with_proof')&&e('main_repository')&&(c['add']('delivery_guard_per_cycle'),c['add']('repository_updated')),g('damage_attestation')&&(c['add']('pre_rental_hash'),c['add']('post_rental_hash')),g('refund_guarantee')&&(c['add']('compensation_fund_positive'),c['add']('refund_guard_configured')),c;}function deriveDeployTimeChecks(a){const b=[];return a['nodes']['some'](c=>c['id']==='main_machine')&&b['push']('Machine\x20published\x20AND\x20bound\x20to\x20Service\x20BEFORE\x20Service.publish\x20(machine\x20is\x20immutable\x20after\x20publish)'),a['edges']['some'](c=>c['relation']==='has_order_allocators')&&b['push']('Service.order_allocators\x20bound\x20(verify\x20via\x20query_objects\x20after\x20publish\x20—\x20order_allocators\x20is\x20FROZEN\x20at\x20publish)'),a['nodes']['some'](c=>c['id']==='main_arbitration')&&b['push']('Arbitration.permission\x20!=\x20Service.permission\x20on-chain\x20(E_ARBITRATION_PERMISSION_CONFLICT=33)'),a['nodes']['some'](c=>c['id']==='main_repository')&&b['push']('Repository\x20published\x20and\x20Guard\x20write\x20validation\x20configured'),b['push']('Run\x20project_operation\x20action=\x27verify_deployment\x27\x20after\x20materialization\x20to\x20confirm\x20on-chain\x20state\x20matches\x20this\x20plan'),b;}function buildCreationPlan(a){const b=[],c=new Map(a['nodes']['map'](i=>[i['id'],i])),f=new Map();for(const i of a['nodes'])f['set'](i['id'],new Set());for(const j of a['edges']){j['required']&&f['has'](j['from'])&&c['has'](j['to'])&&f['get'](j['from'])['add'](j['to']);}const g=[],h=new Map(f);while(h['size']>0x0){const k=[...h['entries']()]['filter'](([,l])=>l['size']===0x0)['map'](([l])=>l);if(k['length']===0x0){g['push'](...h['keys']());break;}k['sort']();for(const l of k){g['push'](l),h['delete'](l);for(const m of h['values']())m['delete'](l);}}return g['forEach']((o,p)=>{const q=c['get'](o),r=q['config']['name'];b['push']({'order':p+0x1,'node_id':o,'object_type':q['type'],'suggested_name':r?.['type']==='string'?r['value']:o,'depends_on':[...f['get'](o)??[]],'operation_hint':'Create\x20'+q['type']+'\x20via\x20onchain_operations,\x20then\x20configure.\x20Purpose:\x20'+q['purpose']});}),b;}export async function handleMerchantGuide(a){const b=a['guide_state']??{'intent_text':''},c=a['guide_confirm']??{},d={'intent_text':(a['intent']??b['intent_text']??'')['trim'](),'confirmed_industry':c['industry']??b['confirmed_industry'],'currency':c['currency']??b['currency'],'deliverables':c['deliverables']??b['deliverables'],'payment_override':c['payment']??b['payment_override'],'trust_override':c['trust']??b['trust_override'],'adopted_module_ids':c['adopted_module_ids']??b['adopted_module_ids']};for(const r of Object['keys'](d)){if(d[r]===undefined)delete d[r];}if(!d['intent_text'])throw new Error('merchant_guide\x20requires\x20\x27intent\x27\x20(business\x20description)\x20for\x20Step\x201.\x20'+'Example:\x20intent=\x27I\x20want\x20to\x20offer\x20online\x20design\x20service\x20with\x20milestone\x20payments\x27.\x20'+'Pass\x20the\x20returned\x20guide_state\x20back\x20UNCHANGED\x20on\x20subsequent\x20calls,\x20plus\x20guide_confirm\x20for\x20merchant\x20decisions.');const e=await analyzeIntent(d['intent_text'],{'preferredIndustry':d['confirmed_industry'],'currency':d['currency']});if(!d['confirmed_industry'])return{'action':'merchant_guide','current_step':0x2,'step_name':'Industry\x20Matching','guide_state':d,'intent_draft':e['intent'],'industry_options':{'inferred':e['inferredIndustry'],'confidence':e['industryConfidence'],'similar':e['similarIndustries']},'warnings':e['warnings'],'next_action':'Confirm\x20the\x20industry\x20by\x20calling\x20merchant_guide\x20again\x20with\x20guide_state\x20(UNCHANGED)\x20'+('plus\x20guide_confirm={\x20industry:\x20\x27<one\x20of:\x20'+e['similarIndustries']['join'](',\x20')+'\x20—\x20or\x20any\x20other\x20industry\x20id>\x27\x20}')};const f={...e['intent'],'industry':d['confirmed_industry'],'deliverables':d['deliverables']??e['intent']['deliverables'],'payment':{...e['intent']['payment'],...d['payment_override']??{}},'trust':{...e['intent']['trust'],...d['trust_override']??{}}},g=d['adopted_module_ids']?d['adopted_module_ids']['map'](s=>getBusinessModule(s))['filter'](s=>!!s):recommendModules(d['confirmed_industry'],d['intent_text'],{'maxModules':0x5}),h=buildSemanticGraph(f,g),i=validateGraph(h),j=derivePlanSatisfiedConstraints(h,f),l=g['map'](s=>checkModuleConstraints(s,j)),m=deriveDeployTimeChecks(h),n=l['filter'](s=>!s['adopted']),o=checkGameTheoryConstraints(h,f),p=assessWorkflowDesign(h),q=buildCreationPlan(h);return{'action':'merchant_guide','current_step':n['length']>0x0?0x9:0xa,'step_name':n['length']>0x0?'Harness\x20Check\x20(issues\x20found)':'Submission\x20Plan\x20Ready','guide_state':{...d,'adopted_module_ids':g['map'](s=>s['id'])},'intent':{'intent_type':f['intent'],'industry':f['industry'],'roles':f['roles'],'deliverables':f['deliverables'],'payment':f['payment'],'trust':f['trust']},'adopted_modules':g['map'](s=>({'id':s['id'],'name':s['name'],'description':s['description'],'requires_keeper':s['requiresKeeper'],'keeper_hint':s['keeperHint'],'user_protections':s['userProtections'],'merchant_obligations':s['merchantObligations']})),'blueprint':{'nodes':h['nodes']['map'](s=>({'id':s['id'],'type':s['type'],'purpose':s['purpose']})),'edges':h['edges']['map'](s=>({'from':s['from'],'to':s['to'],'relation':s['relation'],'required':s['required']}))},'evaluation_preview':h['evaluationPreview'],'graph_validation':{'valid':i['valid'],'hard_violations':i['hardViolations']['map'](s=>({'id':s['id'],'description':s['description'],'fix':s['fixSuggestion']})),'soft_notes':i['softViolations']['map'](s=>({'id':s['id'],'description':s['description']}))},'harness_check':{'module_constraints':l['map'](s=>({'module':s['module'],'plan_satisfied':s['adopted'],'missing':s['missingConstraints'],'reason':s['reason'],'estimated_score_boost':s['estimatedScoreBoost']})),'blocking_issues':n['map'](s=>({'module':s['module'],'missing_constraints':s['missingConstraints'],'fix':s['reason']})),'deploy_time_checks':m},'game_theory':{'summary':o['summary'],'coverage':o['coveredCount']+'/'+o['totalCount'],'exposed_scenarios':o['exposedScenarios'],'wow_alignments':o['wowAlignments'],'scenarios':o['results']['map'](s=>({'scenario':s['scenario'],'covered':s['covered'],'conflict':s['conflict'],'user_protection':s['userProtection'],'evaluation_metric':s['evaluationMetric'],'recommendation':s['recommendation']}))},'workflow_design_assessment':{'score':p['score'],'summary':p['summary'],'findings':p['findings']['map'](s=>({'kind':s['kind'],'severity':s['severity'],'message':s['message'],'fix':s['fix']})),'checks':p['checks']['map'](s=>({'id':s['id'],'dimension':s['dimension'],'passed':s['passed'],'severity':s['severity'],'message':s['message'],'fix':s['fix']}))},'creation_plan':q,'warnings':e['warnings'],'next_action':n['length']>0x0?'Resolve\x20the\x20blocking_issues\x20above\x20(adjust\x20guide_confirm\x20payment/trust/modules,\x20or\x20accept\x20and\x20drop\x20the\x20affected\x20module\x20via\x20guide_confirm.adopted_module_ids),\x20then\x20call\x20merchant_guide\x20again.':'Plan\x20ready.\x20Materialize:\x201)\x20create_project\x20with\x20project_industry=\x27'+d['confirmed_industry']+'\x27\x20'+'2)\x20create\x20objects\x20in\x20creation_plan\x20order\x20via\x20onchain_operations\x20'+'3)\x20add_object\x20each\x20on-chain\x20address\x20into\x20the\x20project\x20'+'4)\x20build_graph\x20+\x20evaluate_project\x205)\x20verify_deployment.'};}export function listBusinessModules(){return CORE_BUSINESS_MODULES['map'](a=>({'id':a['id'],'name':a['name'],'description':a['description'],'industry_fit':a['industryFit'],'addresses_pain_points':a['addressesPainPoints'],'requires_keeper':a['requiresKeeper']}));}