@wowok/agent-mcp 2.7.8 → 2.7.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) hide show
  1. package/README.md +2 -2
  2. package/dist/config/runtime.d.ts +1 -1
  3. package/dist/config/runtime.js +1 -1
  4. package/dist/examples/rental-ziroom-machine-create.json +1 -2
  5. package/dist/examples/rental-ziroom-permission-create.json +1 -2
  6. package/dist/examples/rental-ziroom-service-create.json +1 -2
  7. package/dist/experience/experience-reuse.js +1 -1
  8. package/dist/experience/index.d.ts +2 -1
  9. package/dist/experience/index.js +1 -1
  10. package/dist/experience/persistence-config.d.ts +6 -0
  11. package/dist/experience/persistence-config.js +1 -0
  12. package/dist/experience/persistence.d.ts +21 -0
  13. package/dist/experience/persistence.js +1 -0
  14. package/dist/experience/realtime-feedback.js +1 -1
  15. package/dist/experience/user-profile.js +1 -1
  16. package/dist/extensions/business-modules.d.ts +1 -1
  17. package/dist/extensions/capability-manifest.d.ts +1 -1
  18. package/dist/extensions/types.d.ts +1 -1
  19. package/dist/goal/GoalClassifier.d.ts +17 -0
  20. package/dist/goal/GoalClassifier.js +1 -0
  21. package/dist/goal/GoalEngine.d.ts +120 -0
  22. package/dist/goal/GoalEngine.js +1 -0
  23. package/dist/goal/GoalStore.d.ts +27 -0
  24. package/dist/goal/GoalStore.js +1 -0
  25. package/dist/goal/plan-approval.d.ts +5 -0
  26. package/dist/goal/plan-approval.js +1 -0
  27. package/dist/goal/types.d.ts +76 -0
  28. package/dist/goal/types.js +1 -0
  29. package/dist/harness/index.d.ts +2 -7
  30. package/dist/harness/index.js +1 -1
  31. package/dist/harness/plan.d.ts +1 -1
  32. package/dist/harness/types.d.ts +0 -35
  33. package/dist/index.js +1 -1
  34. package/dist/knowledge/account-marks.d.ts +35 -0
  35. package/dist/knowledge/account-marks.js +1 -0
  36. package/dist/knowledge/audit-rules.d.ts +3 -1
  37. package/dist/knowledge/audit-rules.js +1 -1
  38. package/dist/knowledge/examples-scanner-cli.js +1 -1
  39. package/dist/knowledge/examples-scanner.js +1 -1
  40. package/dist/knowledge/goal-completion.d.ts +19 -0
  41. package/dist/knowledge/goal-completion.js +1 -0
  42. package/dist/knowledge/guard-translation.js +1 -1
  43. package/dist/knowledge/index.d.ts +3 -2
  44. package/dist/knowledge/index.js +1 -1
  45. package/dist/knowledge/industry-registry.js +1 -1
  46. package/dist/knowledge/mcp-schema-audit-cli.js +1 -1
  47. package/dist/knowledge/mcp-schema-audit.js +1 -1
  48. package/dist/knowledge/operation-dictionary.js +1 -1
  49. package/dist/knowledge/passport-confirm.js +1 -1
  50. package/dist/knowledge/passport-puzzle.js +1 -1
  51. package/dist/knowledge/passport-translation.js +1 -1
  52. package/dist/knowledge/proof-risk.js +1 -1
  53. package/dist/knowledge/safety-rules.js +1 -1
  54. package/dist/knowledge/service-translation.js +1 -1
  55. package/dist/knowledge/template-registry.js +1 -1
  56. package/dist/knowledge/tools-reference.js +1 -1
  57. package/dist/knowledge/workflow-guidance.d.ts +1 -0
  58. package/dist/knowledge/workflow-guidance.js +1 -1
  59. package/dist/knowledge/workspace-lists.d.ts +56 -0
  60. package/dist/knowledge/workspace-lists.js +1 -0
  61. package/dist/loop-engineering/context-collect.d.ts +1 -1
  62. package/dist/monitor/EventRouter.d.ts +10 -0
  63. package/dist/monitor/EventRouter.js +1 -0
  64. package/dist/monitor/EventStore.d.ts +32 -12
  65. package/dist/monitor/EventStore.js +1 -1
  66. package/dist/monitor/MonitorLoop.d.ts +79 -0
  67. package/dist/monitor/MonitorLoop.js +1 -0
  68. package/dist/monitor/ProblemBridge.d.ts +32 -0
  69. package/dist/monitor/ProblemBridge.js +1 -0
  70. package/dist/monitor/ScopeResolver.d.ts +59 -0
  71. package/dist/monitor/ScopeResolver.js +1 -0
  72. package/dist/monitor/SubscriptionStore.d.ts +13 -0
  73. package/dist/monitor/SubscriptionStore.js +1 -0
  74. package/dist/monitor/normalize.d.ts +8 -0
  75. package/dist/monitor/normalize.js +1 -0
  76. package/dist/monitor/types.d.ts +89 -0
  77. package/dist/monitor/types.js +1 -0
  78. package/dist/persona/address-format.d.ts +1 -1
  79. package/dist/persona/address-format.js +1 -1
  80. package/dist/persona/distill-goal.d.ts +20 -0
  81. package/dist/persona/distill-goal.js +1 -0
  82. package/dist/persona/index.d.ts +2 -0
  83. package/dist/persona/index.js +1 -1
  84. package/dist/persona/model.js +1 -1
  85. package/dist/playbooks/service-build/business-puzzle.js +1 -0
  86. package/dist/{project → playbooks/service-build}/context-assembly.d.ts +9 -4
  87. package/dist/playbooks/service-build/context-assembly.js +1 -0
  88. package/dist/{project → playbooks/service-build}/game-theory.d.ts +1 -1
  89. package/dist/playbooks/service-build/index.d.ts +14 -0
  90. package/dist/playbooks/service-build/index.js +1 -0
  91. package/dist/{project → playbooks/service-build}/intent-analyzer.d.ts +1 -1
  92. package/dist/playbooks/service-build/intent-analyzer.js +1 -0
  93. package/dist/{project → playbooks/service-build}/machine-panorama.d.ts +5 -3
  94. package/dist/playbooks/service-build/machine-panorama.js +1 -0
  95. package/dist/{project → playbooks/service-build}/merchant-guide.d.ts +1 -1
  96. package/dist/playbooks/service-build/merchant-guide.js +1 -0
  97. package/dist/{project → playbooks/service-build}/mode-actions.d.ts +2 -2
  98. package/dist/playbooks/service-build/mode-actions.js +1 -0
  99. package/dist/playbooks/service-build/namespace.d.ts +2 -0
  100. package/dist/playbooks/service-build/namespace.js +1 -0
  101. package/dist/{project → playbooks/service-build}/object-panorama.d.ts +2 -3
  102. package/dist/playbooks/service-build/object-panorama.js +1 -0
  103. package/dist/{project → playbooks/service-build}/participation-radar.d.ts +4 -5
  104. package/dist/playbooks/service-build/participation-radar.js +1 -0
  105. package/dist/{project → playbooks/service-build}/pipeline-actions.d.ts +9 -9
  106. package/dist/playbooks/service-build/pipeline-actions.js +1 -0
  107. package/dist/playbooks/service-build/process.d.ts +6 -0
  108. package/dist/playbooks/service-build/process.js +1 -0
  109. package/dist/playbooks/service-build/risk-aggregator.js +1 -0
  110. package/dist/{project → playbooks/service-build}/semantic-graph.d.ts +2 -2
  111. package/dist/{project → playbooks/service-build}/service-panorama.d.ts +3 -19
  112. package/dist/playbooks/service-build/service-panorama.js +1 -0
  113. package/dist/review/arb.d.ts +6 -0
  114. package/dist/review/arb.js +1 -0
  115. package/dist/review/demand.d.ts +3 -0
  116. package/dist/review/demand.js +1 -0
  117. package/dist/review/index.d.ts +3 -0
  118. package/dist/review/index.js +1 -0
  119. package/dist/review/machine.d.ts +3 -0
  120. package/dist/review/machine.js +1 -0
  121. package/dist/review/order.d.ts +9 -0
  122. package/dist/review/order.js +1 -0
  123. package/dist/review/progress.d.ts +3 -0
  124. package/dist/review/progress.js +1 -0
  125. package/dist/review/repository.d.ts +3 -0
  126. package/dist/review/repository.js +1 -0
  127. package/dist/review/service.d.ts +5 -0
  128. package/dist/review/service.js +1 -0
  129. package/dist/review/types.d.ts +156 -0
  130. package/dist/review/types.js +1 -0
  131. package/dist/rules.d.ts +2 -2
  132. package/dist/rules.js +1 -1
  133. package/dist/safety/confirm-gate.js +1 -1
  134. package/dist/safety/index.d.ts +1 -1
  135. package/dist/safety/index.js +1 -1
  136. package/dist/safety/preview.d.ts +1 -0
  137. package/dist/safety/preview.js +1 -1
  138. package/dist/schema/call/allocation.d.ts +1 -1
  139. package/dist/schema/call/arbitration.d.ts +1 -1
  140. package/dist/schema/call/base.d.ts +1 -1
  141. package/dist/schema/call/base.js +1 -1
  142. package/dist/schema/call/bridge.d.ts +4 -4
  143. package/dist/schema/call/contact.d.ts +1 -1
  144. package/dist/schema/call/contact.js +1 -1
  145. package/dist/schema/call/demand.d.ts +1 -1
  146. package/dist/schema/call/demand.js +1 -1
  147. package/dist/schema/call/guard.d.ts +3 -3
  148. package/dist/schema/call/handler.d.ts +0 -3
  149. package/dist/schema/call/handler.js +1 -1
  150. package/dist/schema/call/machine.d.ts +2 -2
  151. package/dist/schema/call/order.d.ts +1 -1
  152. package/dist/schema/call/payment.d.ts +1 -1
  153. package/dist/schema/call/permission.d.ts +1 -1
  154. package/dist/schema/call/personal.d.ts +1 -1
  155. package/dist/schema/call/progress.d.ts +1 -1
  156. package/dist/schema/call/proof.d.ts +2 -2
  157. package/dist/schema/call/repository.d.ts +1 -1
  158. package/dist/schema/call/repository.js +1 -1
  159. package/dist/schema/call/reward.d.ts +1 -1
  160. package/dist/schema/call/semantic.js +1 -1
  161. package/dist/schema/call/service.d.ts +1 -1
  162. package/dist/schema/call/service.js +1 -1
  163. package/dist/schema/call/treasury.d.ts +1 -1
  164. package/dist/schema/common/index.js +1 -1
  165. package/dist/schema/goal/index.d.ts +317 -0
  166. package/dist/schema/goal/index.js +1 -0
  167. package/dist/schema/goal/planning.d.ts +465 -0
  168. package/dist/schema/goal/planning.js +1 -0
  169. package/dist/schema/index.d.ts +1 -2
  170. package/dist/schema/index.js +1 -1
  171. package/dist/schema/industry-pack/index.d.ts +265 -1
  172. package/dist/schema/industry-pack/index.js +1 -1
  173. package/dist/schema/industry-pack/modes.d.ts +268 -0
  174. package/dist/schema/industry-pack/modes.js +1 -0
  175. package/dist/schema/local/index.js +1 -1
  176. package/dist/schema/operations.d.ts +216 -19
  177. package/dist/schema/operations.js +1 -1
  178. package/dist/schema/permission/index.d.ts +1 -0
  179. package/dist/schema/permission/index.js +1 -1
  180. package/dist/schema/persona/index.d.ts +40 -0
  181. package/dist/schema/persona/index.js +1 -1
  182. package/dist/schema/query/bi.d.ts +783 -0
  183. package/dist/schema/query/bi.js +1 -0
  184. package/dist/schema/query/index.d.ts +661 -0
  185. package/dist/schema/query/index.js +1 -1
  186. package/dist/schema/schema-version.js +1 -1
  187. package/dist/schema/utils/skills-recommendation.d.ts +0 -1
  188. package/dist/schema/utils/skills-recommendation.js +1 -1
  189. package/dist/schema-query-impl/index.js +1 -1
  190. package/dist/schemas/account_operation.output.json +3 -3
  191. package/dist/schemas/account_operation.schema.json +2 -2
  192. package/dist/schemas/bridge_operation.output.json +2 -2
  193. package/dist/schemas/bridge_operation.schema.json +12 -12
  194. package/dist/schemas/config_operation.output.json +1 -1
  195. package/dist/schemas/config_operation.schema.json +1 -1
  196. package/dist/schemas/goal_operation.schema.json +1016 -0
  197. package/dist/schemas/guard2file.schema.json +3 -3
  198. package/dist/schemas/index.json +12 -13
  199. package/dist/schemas/industry_pack_operation.output.json +898 -0
  200. package/dist/schemas/industry_pack_operation.schema.json +217 -2
  201. package/dist/schemas/local_info_operation.output.json +2 -2
  202. package/dist/schemas/local_mark_operation.output.json +2 -2
  203. package/dist/schemas/machineNode2file.schema.json +3 -3
  204. package/dist/schemas/messenger_operation.output.json +2 -2
  205. package/dist/schemas/monitor_events.output.json +78 -3
  206. package/dist/schemas/monitor_events.schema.json +24 -1
  207. package/dist/schemas/monitor_subscription.output.json +1462 -0
  208. package/dist/schemas/monitor_subscription.schema.json +327 -0
  209. package/dist/schemas/onchain_events.output.json +4 -4
  210. package/dist/schemas/onchain_operations.output.json +2 -2
  211. package/dist/schemas/onchain_operations.schema.json +59 -59
  212. package/dist/schemas/onchain_operations_allocation.schema.json +3 -3
  213. package/dist/schemas/onchain_operations_arbitration.schema.json +3 -3
  214. package/dist/schemas/onchain_operations_contact.schema.json +4 -4
  215. package/dist/schemas/onchain_operations_demand.schema.json +4 -4
  216. package/dist/schemas/onchain_operations_gen_passport.schema.json +3 -3
  217. package/dist/schemas/onchain_operations_gen_proof.schema.json +3 -3
  218. package/dist/schemas/onchain_operations_guard.schema.json +3 -3
  219. package/dist/schemas/onchain_operations_machine.schema.json +3 -3
  220. package/dist/schemas/onchain_operations_order.schema.json +3 -3
  221. package/dist/schemas/onchain_operations_payment.schema.json +3 -3
  222. package/dist/schemas/onchain_operations_permission.schema.json +3 -3
  223. package/dist/schemas/onchain_operations_personal.schema.json +3 -3
  224. package/dist/schemas/onchain_operations_progress.schema.json +3 -3
  225. package/dist/schemas/onchain_operations_proof.schema.json +3 -3
  226. package/dist/schemas/onchain_operations_repository.schema.json +5 -5
  227. package/dist/schemas/onchain_operations_reward.schema.json +3 -3
  228. package/dist/schemas/onchain_operations_service.schema.json +4 -4
  229. package/dist/schemas/onchain_operations_treasury.schema.json +3 -3
  230. package/dist/schemas/onchain_table_data.output.json +346 -2
  231. package/dist/schemas/onchain_table_data.schema.json +22 -22
  232. package/dist/schemas/permission_operation.schema.json +6 -2
  233. package/dist/schemas/persona_operation.output.json +145 -0
  234. package/dist/schemas/persona_operation.schema.json +28 -2
  235. package/dist/schemas/query_toolkit.output.json +1274 -15
  236. package/dist/schemas/query_toolkit.schema.json +412 -11
  237. package/dist/schemas/workflow_operation.schema.json +4 -4
  238. package/dist/task/ProcessStore.d.ts +81 -0
  239. package/dist/task/ProcessStore.js +1 -0
  240. package/dist/task/playbook.d.ts +11 -0
  241. package/dist/task/playbook.js +1 -0
  242. package/dist/task/stage-gate.d.ts +22 -0
  243. package/dist/task/stage-gate.js +1 -0
  244. package/dist/{project → task}/substep-trace.d.ts +6 -45
  245. package/dist/task/types.d.ts +120 -0
  246. package/dist/task/types.js +1 -0
  247. package/dist/tools/handlers/config.js +1 -1
  248. package/dist/tools/handlers/goal.d.ts +4 -0
  249. package/dist/tools/handlers/goal.js +1 -0
  250. package/dist/tools/handlers/industry-pack.js +1 -1
  251. package/dist/tools/handlers/monitor.d.ts +24 -0
  252. package/dist/tools/handlers/monitor.js +1 -1
  253. package/dist/tools/handlers/network.d.ts +1 -0
  254. package/dist/tools/handlers/network.js +1 -0
  255. package/dist/tools/handlers/onchain.js +1 -1
  256. package/dist/tools/handlers/permission.js +1 -1
  257. package/dist/tools/handlers/persona.js +1 -1
  258. package/dist/tools/handlers/query.js +1 -1
  259. package/dist/tools/handlers/watch.js +1 -1
  260. package/dist/tools/index.d.ts +2 -0
  261. package/dist/tools/index.js +1 -1
  262. package/dist/tools/shared.js +1 -1
  263. package/dist/tools/wrap.js +1 -1
  264. package/package.json +5 -4
  265. package/dist/harness/checkpoint.d.ts +0 -8
  266. package/dist/harness/checkpoint.js +0 -1
  267. package/dist/knowledge/deployment-scanner.d.ts +0 -66
  268. package/dist/knowledge/deployment-scanner.js +0 -1
  269. package/dist/project/business-puzzle.js +0 -1
  270. package/dist/project/context-assembly.js +0 -1
  271. package/dist/project/deployment-bridge.d.ts +0 -5
  272. package/dist/project/deployment-bridge.js +0 -1
  273. package/dist/project/deployment-doc.d.ts +0 -190
  274. package/dist/project/deployment-doc.js +0 -1
  275. package/dist/project/edit-planner.d.ts +0 -123
  276. package/dist/project/edit-planner.js +0 -1
  277. package/dist/project/evaluation-fix.spec.d.ts +0 -1
  278. package/dist/project/evaluation-fix.spec.js +0 -1
  279. package/dist/project/evaluation.d.ts +0 -127
  280. package/dist/project/evaluation.js +0 -1
  281. package/dist/project/graph-builder.d.ts +0 -51
  282. package/dist/project/graph-builder.js +0 -1
  283. package/dist/project/graph.d.ts +0 -70
  284. package/dist/project/graph.js +0 -1
  285. package/dist/project/handlers.d.ts +0 -524
  286. package/dist/project/handlers.js +0 -1
  287. package/dist/project/index.d.ts +0 -91
  288. package/dist/project/index.js +0 -1
  289. package/dist/project/intent-analyzer.js +0 -1
  290. package/dist/project/machine-panorama.js +0 -1
  291. package/dist/project/merchant-guide.js +0 -1
  292. package/dist/project/mode-actions.js +0 -1
  293. package/dist/project/namespace.d.ts +0 -72
  294. package/dist/project/namespace.js +0 -1
  295. package/dist/project/object-panorama.js +0 -1
  296. package/dist/project/participation-radar.js +0 -1
  297. package/dist/project/pipeline-actions.js +0 -1
  298. package/dist/project/project-store.d.ts +0 -110
  299. package/dist/project/project-store.js +0 -1
  300. package/dist/project/query.d.ts +0 -43
  301. package/dist/project/query.js +0 -1
  302. package/dist/project/risk-aggregator.js +0 -1
  303. package/dist/project/semantic-assembler.d.ts +0 -93
  304. package/dist/project/semantic-assembler.js +0 -1
  305. package/dist/project/service-panorama.js +0 -1
  306. package/dist/project/stage-gate.d.ts +0 -52
  307. package/dist/project/stage-gate.js +0 -1
  308. package/dist/project/task-tracker.d.ts +0 -30
  309. package/dist/project/task-tracker.js +0 -1
  310. package/dist/schema/project/index.d.ts +0 -2021
  311. package/dist/schema/project/index.js +0 -1
  312. package/dist/schema/task-status.d.ts +0 -62
  313. package/dist/schema/task-status.js +0 -1
  314. package/dist/schemas/project_operation.output.json +0 -7877
  315. package/dist/schemas/project_operation.schema.json +0 -1139
  316. package/dist/schemas/query_task_status.output.json +0 -211
  317. package/dist/schemas/query_task_status.schema.json +0 -18
  318. package/dist/tools/handlers/project.d.ts +0 -2
  319. package/dist/tools/handlers/project.js +0 -1
  320. package/dist/tools/handlers/task-status.d.ts +0 -2
  321. package/dist/tools/handlers/task-status.js +0 -1
  322. /package/dist/{project → playbooks/service-build}/business-puzzle.d.ts +0 -0
  323. /package/dist/{project → playbooks/service-build}/game-theory.js +0 -0
  324. /package/dist/{project → playbooks/service-build}/machine-nodes.d.ts +0 -0
  325. /package/dist/{project → playbooks/service-build}/machine-nodes.js +0 -0
  326. /package/dist/{project → playbooks/service-build}/object-type.d.ts +0 -0
  327. /package/dist/{project → playbooks/service-build}/object-type.js +0 -0
  328. /package/dist/{project → playbooks/service-build}/reverse-mapping.d.ts +0 -0
  329. /package/dist/{project → playbooks/service-build}/reverse-mapping.js +0 -0
  330. /package/dist/{project → playbooks/service-build}/risk-aggregator.d.ts +0 -0
  331. /package/dist/{project → playbooks/service-build}/semantic-graph.js +0 -0
  332. /package/dist/{project → playbooks/service-build}/workflow-design-assessment.d.ts +0 -0
  333. /package/dist/{project → playbooks/service-build}/workflow-design-assessment.js +0 -0
  334. /package/dist/{project → task}/substep-trace.js +0 -0
@@ -1 +0,0 @@
1
- import{LocalProject,LocalMark,query_objects,query_object_last_updated}from'@wowok/wowok';import{fetchMachineNodes,buildMachineGraph}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';import{formatShortAddress}from'../persona/address-format.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\x20WOW\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 q of g){if(q['objectType'])i['add'](q['objectType']);}const j=g['filter'](r=>isOnchainObject(r))['length'];let k=f;const l=g['filter'](r=>isOnchainObject(r)&&r['objectType']?.['toLowerCase']()['includes']('service')),m=(l['find'](r=>r['role']==='core')??l[0x0])?.['objectAddress'];if(m&&m!==f['serviceAddress']){const r=await localProject['updateProject'](f['id'],{'serviceAddress':m});if(r)k=r;}const n=g['some'](s=>isOnchainObject(s)&&s['objectType']?.['toLowerCase']()['includes']('service'));if(k['status']==='draft'&&n){const s=await localProject['updateProject'](k['id'],{'status':'active'});if(s)return{...s,'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 r=0x2;while(await localProject['getProjectByPrefix'](d+'_'+r)){r++;}d=d+'_'+r;}const h=['testnet','mainnet','localnet']['filter'](s=>s!==c)['join']('\x20/\x20');let i=null,j=null;try{const s=await query_objects({'objects':[b],'network':c}),t=s?.['objects']?.[0x0];t&&t['object']&&(i=t['type']??null,j=t&&typeof t==='object'?t['description']??null:null);}catch(u){throw new Error('Failed\x20to\x20query\x20'+c+'\x20for\x20the\x20Service\x20object:\x20'+((u instanceof Error?u['message']:String(u))+'.\x20')+('Check\x20the\x20network\x20connection,\x20or\x20the\x20Service\x20may\x20live\x20on\x20another\x20network\x20('+h+').'));}if(!i)throw new Error('Service\x20object\x20not\x20found\x20on\x20'+c+':\x20the\x20address\x20'+b+'\x20does\x20not\x20exist\x20on\x20this\x20network.\x20'+('Each\x20network\x20has\x20independent\x20data\x20—\x20the\x20Service\x20may\x20exist\x20on\x20'+h+'.\x20')+'Switch\x20the\x20network\x20and\x20try\x20again.');const k=i['toLowerCase'](),l=k['includes']('::service::service')||k==='service'||k['endsWith']('::service');if(!l)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 m=await localProject['createProject']({'prefix':d,'name':f,'description':a['project_description']??j??'Auto-discovered\x20from\x20Service\x20'+b,'industry':a['project_industry'],'perspective':a['project_perspective']??'producer','labels':a['project_labels'],'serviceAddress':b,'network':c}),n=new GraphBuilder({'maxDepth':a['max_depth']??a['depth']??0x3,'enableRegistrar':a['enable_registrar']??!![],'enablePotential':a['enable_potential']??![],'projectId':m['id'],'network':c}),o=await n['buildRelationshipGraph'](b),p=[];for(const w of o['graph']['nodes']){const x=w['address']===b,y=await localProject['addObject'](m['id'],{'objectAddress':w['address'],'objectType':w['objectType']??undefined,'objectName':w['objectName']??undefined,'role':x?'core':'dependency'});p['push'](y);}const q=await localProject['updateProject'](m['id'],{'status':'active'});return{'action':'create_project_from_onchain','project':q??m,'objects':p,'graphEdgeCount':o['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;const j=d['some'](C=>isOnchainObject(C)&&C['objectType']?.['toLowerCase']()['includes']('service'));if(c['status']==='draft'&&j){const C=await localProject['updateProject'](b,{'status':'active'});if(C)h=C;}const k=d['some'](D=>!D['objectName']),l=d['some'](D=>D['role']==='reference');if(k||l){const D=await LocalMark['Instance']()['list'](null),E=new Map();for(const F of D){F['name']&&F['address']&&E['set'](F['address']['toLowerCase'](),F['name']);}for(const G of d){const H={};if(!G['objectName']){const I=E['get'](G['objectAddress']['toLowerCase']());I&&(H['objectName']=I,G['objectName']=I);}if(G['role']==='reference'&&G['objectType']){const J=G['objectType'];if(J['includes']('service::Service'))H['role']='core',G['role']='core';else(J['includes']('permission::Permission')||J['includes']('machine::Machine')||J['includes']('guard::Guard')||J['includes']('reward::Reward')||J['includes']('treasury::Treasury')||J['includes']('allocation::Allocation')||J['includes']('progress::Progress')||J['includes']('arbitration::Arbitration')||J['includes']('demand::Demand')||J['includes']('order::Order')||J['includes']('repository::Repository'))&&(H['role']='dependency',G['role']='dependency');}h['serviceAddress']&&G['objectAddress']===h['serviceAddress']&&G['role']!=='core'&&(H['role']='core',G['role']='core'),Object['keys'](H)['length']>0x0&&await localProject['updateObject'](G['id'],H)['catch'](()=>{});}}let n=null;if(h['serviceAddress']&&h['network'])try{const K=await query_objects({'objects':[h['serviceAddress']],'network':h['network']}),L=K?.['objects']?.[0x0];if(L){const M=L['bPublished']??L['published']??L['b_publish'],N=L['bPaused']??L['paused']??L['b_pause'];n={'published':typeof M==='boolean'?M:null,'paused':typeof N==='boolean'?N:null};}}catch{}const p=new Set(['core','dependency','reference']),q=d['filter'](O=>isDraftObject(O)),s=d['filter'](O=>isOnchainObject(O)),u=d['filter'](O=>O['role']==='core'),w=d['filter'](O=>O['role']==='dependency'),x=d['filter'](O=>O['role']==='reference'),y=d['filter'](O=>!O['role']||!p['has'](O['role']));y['length']>0x0&&console['warn']('[handleGetProjectDetail]\x20'+y['length']+'\x20object(s)\x20have\x20invalid\x20or\x20missing\x20role\x20'+('(expected\x20one\x20of:\x20'+Array['from'](p)['join'](',\x20')+').\x20')+'They\x20are\x20grouped\x20into\x20\x27other\x27\x20for\x20visibility.\x20'+('Object\x20names:\x20'+y['map'](O=>O['objectName']??O['objectAddress'])['slice'](0x0,0x5)['join'](',\x20')+(y['length']>0x5?'...':'')));const z={'core':u,'dependency':w,'reference':x,'other':y,'draft':q,'stats':{'total':d['length'],'onchain_count':s['length'],'draft_count':q['length'],'core_count':u['length'],'dependency_count':w['length'],'reference_count':x['length'],'other_count':y['length'],'by_type':d['reduce']((O,P)=>{const Q=P['objectType']??'unknown',R=Q['includes']('::')?Q['split']('::')[0x0]['toLowerCase']():Q['toLowerCase']();return O[R]=(O[R]??0x0)+0x1,O;},{})}},A=d['map'](O=>({...O,'isDraft':isDraftObject(O)}));let B=null;if(s['length']>0x0&&h['network'])try{const O=s['map'](S=>S['objectAddress'])['filter'](S=>!!S),P=await Promise['allSettled'](O['map'](S=>query_object_last_updated({'object':S,'network':h['network']}))),Q=new Map();for(let S=0x0;S<P['length'];S++){const T=P[S];T['status']==='fulfilled'&&T['value']?.['timestamp_ms']&&Q['set'](O[S]['toLowerCase'](),{'timestamp_ms':T['value']['timestamp_ms'],'digest':T['value']['digest'],'sender':T['value']['sender']});}let R=-0x1;for(const [U,V]of Q){const W=Number(V['timestamp_ms']);W>R&&(R=W,B={'timestamp_ms':V['timestamp_ms'],'digest':V['digest'],'sender':V['sender'],'object':U});}for(const X of A){const Y=X['objectAddress']?Q['get'](X['objectAddress']['toLowerCase']()):undefined;X['onchainUpdatedAt']=Y?.['timestamp_ms']??null;}}catch{}return{'action':'get_project_detail','project':h,'objects':A,'objectCount':d['length'],'onchainCount':s['length'],'draftCount':q['length'],'objectGroups':z,'graphEdgeCount':e['length'],'serviceStatus':n,'onchainLastUpdated':B,'evaluations':f['map'](Z=>({'id':Z['id'],'evalType':Z['evalType'],'score':Z['score'],'summary':Z['summary'],'details':Z['details'],'evaluatedAt':Z['evaluatedAt']})),'versions':g['map'](Z=>({'version':Z['version'],'description':Z['description'],'createdAt':Z['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);if(i&&i['status']==='draft'){const l=await localProject['listObjects'](b),m=l['some'](n=>isOnchainObject(n)&&n['objectType']?.['toLowerCase']()['includes']('service'));m&&await localProject['updateProject'](b,{'status':'active'});}return{'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 formatShortAddress(a);}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)\x20WOW\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']}))};}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;let n=[];try{n=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)));}const {nodes:o,edges:p}=buildMachineGraph(n);return{'action':'get_machine_graph','machineAddress':c,'machineName':j,'nodes':o,'edges':p,'published':l,'paused':m,'mermaid':renderMachineMermaid(o,p),'tree_outline':renderMachineTreeIndented({'nodes':o,'edges':p,'machineName':j,'machineAddress':c,'published':l,'paused':m}),'ascii_art':renderMachineAscii({'nodes':o,'edges':p,'machineName':j,'machineAddress':c,'published':l,'paused':m}),'markmap':renderMachineMarkmap({'nodes':o,'edges':p,'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,91 +0,0 @@
1
- import { type ProjectObjectType, type ProjectRole, type IndustryMode } from "./namespace.js";
2
- import { ProjectGraph } from "./graph.js";
3
- import { type ProjectInfo, type DependencyTrace, type ReverseTrace } from "./query.js";
4
- export * from "./namespace.js";
5
- export * from "./graph.js";
6
- export * from "./query.js";
7
- export * from "./reverse-mapping.js";
8
- export * from "./workflow-design-assessment.js";
9
- export declare function isProjectServiceEnabled(): boolean;
10
- export declare function getGraph(): ProjectGraph;
11
- export declare function setGraph(g: ProjectGraph): void;
12
- export type ProjectStage = 1 | 2 | 3 | 4 | 5;
13
- export interface StageCacheEntry {
14
- stage: ProjectStage;
15
- updated_at: number;
16
- puzzles?: Record<string, unknown>;
17
- risk_status?: string;
18
- risk_can_proceed?: boolean;
19
- doc_generated?: boolean;
20
- doc_error_count?: number;
21
- trace_coherent?: boolean;
22
- trace_can_proceed?: boolean;
23
- business_intent?: string;
24
- industry?: string;
25
- }
26
- export declare function getStageCache(prefix: string, version: string): StageCacheEntry | undefined;
27
- export declare function updateStageCache(prefix: string, version: string, update: Partial<StageCacheEntry>): StageCacheEntry;
28
- export declare function getProjectStatus(prefix: string, version: string): {
29
- stage: ProjectStage;
30
- stage_name: string;
31
- stage_description: string;
32
- next_action: string;
33
- can_proceed: boolean;
34
- details: StageCacheEntry | undefined;
35
- };
36
- export declare function clearStageCache(prefix: string, version: string): void;
37
- export interface NormalizeCallInput {
38
- operation_type: string;
39
- data: any;
40
- projectPrefix?: string;
41
- role?: ProjectRole;
42
- industry?: IndustryMode;
43
- version?: string;
44
- shareable?: boolean;
45
- }
46
- export interface NormalizeCallResult {
47
- data: any;
48
- warnings: string[];
49
- project?: {
50
- prefix: string;
51
- type?: ProjectObjectType;
52
- version?: string;
53
- };
54
- }
55
- export declare function normalize(input: NormalizeCallInput): NormalizeCallResult;
56
- export declare function observe(operation_type: string, data: any, result?: any): void;
57
- export declare function queryProjects(): Promise<ProjectInfo[]>;
58
- export declare function queryProjectObjects(prefix: string): Promise<{
59
- name?: string;
60
- address?: string;
61
- type?: string;
62
- version?: string;
63
- tags?: string[];
64
- }[]>;
65
- export declare function queryShareableObjects(): Promise<{
66
- name?: string;
67
- address?: string;
68
- type?: string;
69
- project?: string;
70
- }[]>;
71
- export declare function queryDependencies(objectId: string): DependencyTrace;
72
- export declare function queryReferencedBy(objectId: string): ReverseTrace;
73
- export declare function queryPrePublishCheck(serviceId: string): string[];
74
- export declare function queryCrossProjectReferences(): {
75
- edge: import("./graph.js").GraphEdge;
76
- fromProject?: string;
77
- toProject?: string;
78
- }[];
79
- export declare function queryGraphStats(): {
80
- nodeCount: number;
81
- edgeCount: number;
82
- cycles: string[][];
83
- dangling: {
84
- from: string;
85
- missing: string[];
86
- }[];
87
- };
88
- export declare function saveGraph(): string;
89
- export declare function loadGraph(): boolean;
90
- export declare function hasPersistedGraph(): boolean;
91
- export declare const PROJECT_SERVICE_VERSION = 1;
@@ -1 +0,0 @@
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 a278a}from'../config/index.js';import{LocalMark,getWowMcpDir}from'@wowok/wowok';import{readFileSync,writeFileSync,existsSync,mkdirSync}from'fs';import{dirname,join}from'path';import*as a278b 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 a278a('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=a278b['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=a278b['loadStageState'](a,b);if(!d){a278b['initProject'](a,b,{'mcpVersion':'project-service-v'+PROJECT_SERVICE_VERSION}),d=a278b['loadStageState'](a,b);if(!d)return;}if(d['archived'])return;d['stage']=c['stage'],d['updated_at']=c['updated_at'],a278b['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(a278a('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 +0,0 @@
1
- import{findSimilarIndustries,inferTraitsFromDescription}from'../knowledge/industry-generalizer.js';const INTENT_KEYWORDS={'sell_service':['design','develop','consult','freelance','service','build','create','write','translate'],'sell_product':['sell','product','item','goods','merchandise','store','shop'],'sell_subscription':['subscribe','subscription','membership','monthly','recurring','creator','patron'],'rent_asset':['rent','rental','lease','borrow','car','house','apartment','equipment'],'crowdfund':['crowdfund','fund','raise','campaign','donation','backer'],'escrow':['escrow','hold','mediate','intermediary','safe','secure\x20transaction']};function classifyIntentType(a){const b=a['toLowerCase']();let c='sell_service',d=0x0;for(const [e,f]of Object['entries'](INTENT_KEYWORDS)){const g=f['filter'](h=>b['includes'](h))['length'];g>d&&(d=g,c=e);}return c;}function inferPaymentModel(a){const b=a['toLowerCase']();if(b['includes']('milestone')||b['includes']('phase')||b['includes']('stage'))return'milestone';if(b['includes']('subscription')||b['includes']('monthly')||b['includes']('recurring'))return'subscription';if(b['includes']('per\x20use')||b['includes']('hourly')||b['includes']('per\x20session'))return'per_use';if(b['includes']('escrow')||b['includes']('hold'))return'escrow';return'upfront';}function inferRefundPolicy(a){const b=a['toLowerCase']();if(b['includes']('no\x20refund')||b['includes']('non-refundable'))return'no_refund';if(b['includes']('milestone')&&b['includes']('refund'))return'milestone_prorated';if(b['includes']('full\x20refund'))return'full';return'partial';}function inferArbitration(a){const b=a['toLowerCase']();if(b['includes']('no\x20arbitration')||b['includes']('no\x20dispute'))return'none';if(b['includes']('third\x20party')||b['includes']('independent'))return'third_party';if(b['includes']('mutual'))return'mutual_pick';return'merchant_pick';}export async function analyzeIntent(a,b){const c=[],d=classifyIntentType(a),e=inferTraitsFromDescription(a),f=findSimilarIndustries(e['traits'],0x3),g=f['map'](n=>n['industry']),h=b?.['preferredIndustry']??g[0x0]??'general',i=g['includes'](h)?0.85:0.5,j=e['traits'],k={'intent':d,'industry':h,'description':a,'roles':{'merchant':{'name':'merchant','description':'Service\x20provider\x20or\x20seller','obligations':['Deliver\x20as\x20described','Maintain\x20compensation_fund\x20if\x20required','Accept\x20arbitration\x20verdicts'],'rights':['Receive\x20payment\x20upon\x20verified\x20delivery','Set\x20service\x20terms\x20before\x20publish']},'customer':{'name':'customer','description':'Buyer\x20or\x20service\x20recipient','obligations':['Pay\x20according\x20to\x20agreed\x20schedule','Provide\x20acceptance/rejection\x20within\x20timeout'],'rights':['Receive\x20deliverables\x20as\x20described','Request\x20refund\x20if\x20delivery\x20fails','Initiate\x20arbitration\x20for\x20disputes']}},'deliverables':[{'name':'main_deliverable','type':inferDeliverableType(a),'acceptanceCriteria':'To\x20be\x20defined\x20by\x20merchant\x20during\x20configuration','proofOfDelivery':'wip_hash'}],'payment':{'model':inferPaymentModel(a),'currency':b?.['currency']??'WOW','triggers':[{'event':inferPaymentModel(a)==='milestone'?'milestone\x20completion':'service\x20confirmation','guardDescription':'Guard\x20verifies\x20deliverable\x20meets\x20acceptance\x20criteria'}],'allocation':[{'recipient':'merchant','percentage':0x5a},{'recipient':'platform','percentage':0x0},{'recipient':'arbitration_reserve','percentage':0xa}]},'trust':{'refundPolicy':inferRefundPolicy(a),'arbitration':inferArbitration(a),'escrow':!![],'transparency':'full'}};k['payment']['model']==='milestone'&&!a['toLowerCase']()['includes']('milestone')&&c['push']('Payment\x20model\x20inferred\x20as\x20\x27milestone\x27\x20but\x20not\x20explicitly\x20mentioned.\x20Please\x20verify.');k['trust']['arbitration']==='none'&&c['push']('No\x20arbitration\x20configured.\x20This\x20increases\x20risk\x20for\x20both\x20parties.\x20Consider\x20adding\x20independent_arbitration\x20module.');k['payment']['allocation']&&k['payment']['allocation']['some'](n=>n['recipient']==='platform'&&n['percentage']>0x0)&&c['push']('Platform\x20fee\x20>\x200\x20detected.\x20WOW\x20philosophy\x20recommends\x200%\x20platform\x20fee\x20for\x20peer-to-peer\x20transactions.');const l=a['toLowerCase']();/(refund|cancel|dispute)/['test'](l)&&k['payment']['model']==='milestone'&&c['push']('T1\x20B-1:\x20\x27refund/dispute\x27\x20must\x20be\x20modeled\x20via\x20the\x20Allocation\x20waterfall\x20(order_allocators)\x20+\x20'+'the\x20bound\x20Arbitration\x20—\x20NOT\x20a\x20Machine\x20\x27refunded\x27/\x27disputed\x27\x20node\x20(R-M1-11).');/(按(实际|定损|损失|评估)[^。]{0,8}(金额|赔付|赔偿)|variable amount|dynamic amount|actual loss|assessed loss)/['test'](l)&&c['push']('T1\x20B-2:\x20a\x20variable/conditional\x20payout\x20amount\x20cannot\x20be\x20expressed\x20in\x20Allocation\x20—\x20amounts\x20are\x20'+'pre-configured.\x20Use\x20fixed\x20tiers\x20guarded\x20by\x20distinct\x20Guards,\x20or\x20an\x20Amount\x20with\x20a\x20max\x20cap.');/(auto|automatic|automatically|after \d+ (day|hour|week)|within \d+ (day|hour|week)|自动|到期后)/['test'](l)&&c['push']('T1\x20B-3:\x20\x27auto\x20/\x20after\x20N\x20days\x27\x20has\x20no\x20on-chain\x20cron\x20—\x20it\x20requires\x20a\x20time_guard\x20PLUS\x20an\x20off-chain\x20'+'keeper\x20to\x20submit.\x20Configuring\x20a\x20time_guard\x20without\x20a\x20keeper\x20means\x20nothing\x20ever\x20fires.');let m=[];try{const {recommendModules:n}=await import('../extensions/business-modules.js'),o=n(h,a,{'maxModules':0x5});m=o['map'](p=>p['id']);}catch{m=['milestone_escrow','independent_arbitration','wip_provenance'];}return{'intent':k,'inferredIndustry':h,'industryConfidence':i,'similarIndustries':g,'inferredTraits':j,'recommendedModules':m,'warnings':c};}function inferDeliverableType(a){const b=a['toLowerCase']();if(b['includes']('design')||b['includes']('code')||b['includes']('write')||b['includes']('digital'))return'digital';if(b['includes']('class')||b['includes']('lesson')||b['includes']('session'))return'service_session';if(b['includes']('rent')||b['includes']('access'))return'access_right';return'physical';}
@@ -1 +0,0 @@
1
- import{Config,LocalMark,query_objects,queryTableItem_ObjectLinkerTx,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{fetchMachineNodes,buildMachineGraph}from'./machine-nodes.js';export async function handleMachinePanorama(a){const b=a['object_address'];if(!b)throw new Error('\x27object_address\x27\x20is\x20required\x20for\x20machine_panorama');let c=a['context_network']??a['project_network']??undefined;const d=[];let f=b;if(!/^0x[0-9a-fA-F]{32,64}$/['test'](b)){const n=await LocalMark['Instance']()['get_address'](b);if(!n)throw new Error('Cannot\x20resolve\x20machine\x20\x27'+b+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.\x20'+'Pass\x20the\x200x\x20Machine\x20object\x20address\x20directly\x20or\x20register\x20the\x20name\x20via\x20local_mark_operation.');f=n;}let g=null;try{if(!c)c=await Config['Instance']()['network_get']();const p=await query_objects({'objects':[f],'network':c});g=p?.['objects']?.[0x0]??null;if(!g&&a['context_network']){const q=await Config['Instance']()['network_get']();if(q&&q!==c){const s=await query_objects({'objects':[f],'network':q,'no_cache':!![]}),t=s?.['objects']?.[0x0]??null;t&&(g=t,c=q);}}}catch(u){throw new Error('Failed\x20to\x20query\x20Machine\x20'+f+'\x20on\x20'+c+':\x20'+(''+(u instanceof Error?u['message']:String(u))));}if(!g)throw new Error('Machine\x20'+f+'\x20not\x20found\x20on\x20'+c+'.\x20It\x20may\x20not\x20exist\x20on\x20this\x20network.');f=g['object']??f;let h=null,j=[];try{const w=await LocalMark['Instance']()['list']({'address':f});w['length']>0x0&&(h=w[0x0]['name']??null,j=(w[0x0]['tags']??[])['map'](x=>String(x)));}catch{d['push']('head:\x20LocalMark\x20lookup\x20failed');}let k={'nodes':[],'edges':[]};try{const x=await fetchMachineNodes(f,c);k=buildMachineGraph(x);}catch{d['push']('graph:\x20node\x20fetch\x20failed\x20(non-blocking)');}const l=[];let m=0x0;try{const y=await queryTableItem_ObjectLinkerTx({'address':f,'no_cache':!![],'network':c}),z=(y?.['items']??[])['filter'](D=>objectTypeFromAddress(D['who'])===ObjectType['Progress']);m=z['length'];const A=z['slice'](-0x32)['reverse'](),B=A['map'](D=>D['who']),C=new Map();if(B['length']>0x0)try{const D=await query_objects({'objects':B,'network':c});for(const E of D?.['objects']??[]){if(E?.['object'])C['set'](E['object'],E);}}catch{d['push']('progresses:\x20detail\x20fetch\x20failed');}for(const F of A){const G=typeof F?.['who']==='string'?F['who']:'';if(!G)continue;const H=C['get'](G);l['push']({'progress':G,'name':null,'current':H?.['current']??null,'task':H?.['task']??null,'history_count':typeof H?.['history_count']==='number'?H['history_count']:null,'current_time':typeof H?.['current_time']==='number'?H['current_time']:null,'created_at':typeof F?.['time']==='number'?F['time']:null});}}catch{d['push']('progresses:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}return{'action':'machine_panorama','machineAddress':f,'network':String(c),'head':{'name':h,'tags':j,'description':typeof g['description']==='string'?g['description']:null,'published':typeof g['bPublished']==='boolean'?g['bPublished']:null,'paused':typeof g['bPaused']==='boolean'?g['bPaused']:null},'fields':{'permission':g['permission']??null,'um':g['um']??null,'node_count':typeof g['node_count']==='number'?g['node_count']:null,'consensus_repositories':Array['isArray'](g['consensus_repositories'])?g['consensus_repositories']:[]},'graph':k,'progresses':{'count':m,'items':l},'data_gaps':d};}
@@ -1 +0,0 @@
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']}));}
@@ -1 +0,0 @@
1
- import{getIndustryModeRegistry,getMetricRegistry,getConstraintRegistry}from'../extensions/index.js';import{inferTraitsFromDescription,findSimilarIndustries}from'../knowledge/industry-generalizer.js';import{searchExamples}from'../schema-query-impl/index.js';const LOCAL_MODE_OWNER='local',RM1_11_NODE_REGEX=/(^|_)(disputed?|refund(?:ed)?|arbitration|arb)(_|$)/i;function validateMachineShape(a,b){const c=[];if(!Array['isArray'](a))return c;const d=new Set();for(const e of a){const f=e?.['name'];if(typeof f!=='string'||!f){c['push'](b+':\x20every\x20node\x20must\x20have\x20a\x20non-empty\x20string\x20\x27name\x27');continue;}d['has'](f)&&c['push'](b+':\x20duplicate\x20node\x20name\x20\x27'+f+'\x27\x20(R-M1-10)'),d['add'](f),RM1_11_NODE_REGEX['test'](f)&&c['push'](b+':\x20node\x20\x27'+f+'\x27\x20violates\x20R-M1-11\x20—\x20dispute/refund\x20flows\x20must\x20NOT\x20be\x20'+'modeled\x20as\x20Machine\x20nodes.\x20Disputes\x20flow\x20through\x20Service.arbitrations\x20→\x20Arbitration.dispute()\x20'+'independently\x20of\x20the\x20Machine.\x20Use\x20business-state\x20nodes\x20(e.g.\x20\x27cancelled\x27,\x20\x27return_approved\x27)\x20'+'and\x20route\x20fund\x20refunds\x20via\x20Allocator\x20triggered\x20by\x20those\x20states.');}return c;}export function handleRecommendIndustry(a){const b=(a['intent']??a['project_description']??a['project_name']??'')['trim']();if(!b)throw new Error('recommend_industry\x20requires\x20\x27intent\x27\x20(business\x20description\x20text).\x20'+'Example:\x20intent=\x27I\x20rent\x20cameras\x20to\x20photographers\x20with\x20deposit\x20and\x20damage\x20inspection\x27.');const c=inferTraitsFromDescription(b),d=findSimilarIndustries(c['traits'],0x3),e=d['map'](g=>{const h=searchExamples(g['industry'])['slice'](0x0,0x3)['map'](i=>({'file':i['file'],'title':i['title'],'operation_type':i['operation_type'],'verified':i['verified']}));return{'industry':g['industry'],'similarity':g['similarity'],'matched_traits':g['matched_traits'],'reference_examples':h};}),f=e[0x0];return{'action':'recommend_industry','intent':b,'inferred_traits':c['traits'],'inference_confidence':c['confidence'],'matched_keywords':c['matched_keywords'],'recommendations':e,'hint':f?'Top\x20match:\x20\x27'+f['industry']+'\x27\x20(similarity\x20'+(f['similarity']*0x64)['toFixed'](0x0)+'%).\x20'+('Create\x20the\x20project\x20with\x20project_operation\x20action=\x27create_project\x27\x20project_industry=\x27'+f['industry']+'\x27\x20')+'to\x20get\x20a\x20ready-made\x20blueprint\x20(~10\x20draft\x20objects\x20+\x20graph\x20edges),\x20or\x20choose\x20another\x20industry\x20from\x20'+'\x27recommendations\x27,\x20or\x20use\x20project_industry=\x27custom\x27\x20with\x20skip_templates=true\x20to\x20build\x20from\x20scratch.\x20'+'Review\x20reference\x20examples\x20via\x20schema_query\x20action=\x27search_examples\x27\x20query=\x27<industry>\x27.':'No\x20similar\x20industry\x20found.\x20Use\x20project_industry=\x27custom\x27\x20with\x20skip_templates=true\x20to\x20build\x20from\x20scratch.'};}export async function handleListModes(){const a=getIndustryModeRegistry(),b=a['listModes']()['filter'](d=>d['source']==='builtin')['map'](d=>({'name':d['name'],'display_name':d['display_name'],'version':d['version'],'key_risk':d['key_risk'],'machine_nodes':d['machine_shape']['map'](e=>e['name']),'similar_industries':d['similar_industries']??[]})),c=(await a['listUserModes'](LOCAL_MODE_OWNER))['map'](d=>({'name':d['name'],'display_name':d['display_name'],'version':d['version'],'derived_from':d['derived_from']??null,'key_risk':d['key_risk'],'machine_nodes':d['machine_shape']['map'](e=>e['name']),'evolution_history':(d['evolution_history']??[])['map'](e=>({'version':e['version'],'changed_at':e['changed_at'],'changes':e['changes']}))}));return{'action':'list_modes','builtin_modes':b,'user_modes':c,'owner':LOCAL_MODE_OWNER,'hint':'Use\x20a\x20builtin\x20mode\x20name\x20as\x20project_industry\x20in\x20create_project.\x20'+'Use\x20derive_user_mode\x20to\x20customize\x20a\x20builtin\x20mode,\x20or\x20register_user_mode\x20for\x20a\x20fully\x20custom\x20mode.\x20'+'User\x20modes\x20are\x20referenced\x20as\x20\x27<name>\x27\x20in\x20derive/evolve/unregister\x20actions.'};}export async function handleDeriveUserMode(a){const b=requireField(a['mode_source'],'mode_source'),c=requireField(a['mode_name'],'mode_name'),d=a['mode_changes']??{},e=validateMachineShape(d['machine_shape'],'mode_changes.machine_shape');if(e['length']>0x0)throw new Error('derive_user_mode\x20blocked:\x0a'+e['join']('\x0a'));const f=getIndustryModeRegistry(),g=await f['deriveMode'](b,d,LOCAL_MODE_OWNER,c,a['mode_display_name']);if(!g)throw new Error('derive_user_mode\x20failed:\x20source\x20mode\x20\x27'+b+'\x27\x20not\x20found,\x20or\x20name\x20\x27'+c+'\x27\x20conflicts\x20'+'with\x20a\x20builtin/existing\x20user\x20mode.\x20Call\x20list_modes\x20to\x20see\x20available\x20names.');return{'action':'derive_user_mode','mode':summarizeUserMode(g),'hint':'Mode\x20\x27'+c+'\x27\x20derived\x20from\x20\x27'+b+'\x27.\x20Use\x20it\x20as\x20project_industry\x20in\x20create_project\x20'+('(applyTemplate\x20resolves\x20user\x20modes\x20via\x20\x27local:'+c+'\x27).\x20Iterate\x20with\x20evolve_user_mode.')};}export async function handleEvolveUserMode(a){const b=requireField(a['mode_name'],'mode_name'),c=requireField(a['mode_change_description'],'mode_change_description'),d=a['mode_changes']??{},e=validateMachineShape(d['machine_shape'],'mode_changes.machine_shape');if(e['length']>0x0)throw new Error('evolve_user_mode\x20blocked:\x0a'+e['join']('\x0a'));const f=getIndustryModeRegistry(),g=await f['evolveMode'](b,d,LOCAL_MODE_OWNER,c,a['mode_bump_version']??!![]);if(!g)throw new Error('evolve_user_mode\x20failed:\x20user\x20mode\x20\x27'+b+'\x27\x20not\x20found\x20for\x20owner\x20\x27'+LOCAL_MODE_OWNER+'\x27.\x20'+'Call\x20list_modes\x20to\x20see\x20your\x20modes.');return{'action':'evolve_user_mode','mode':summarizeUserMode(g),'hint':'Mode\x20\x27'+b+'\x27\x20evolved\x20to\x20'+g['version']+'.\x20Evolution\x20history\x20recorded.'};}export async function handleRegisterUserMode(a){const b=requireField(a['mode_name'],'mode_name'),c=a['mode_changes']??{},d=[];(!Array['isArray'](c['machine_shape'])||c['machine_shape']['length']===0x0)&&d['push']('machine_shape\x20(non-empty\x20array\x20of\x20{name,\x20role})');(typeof c['key_risk']!=='string'||!c['key_risk'])&&d['push']('key_risk\x20(string\x20describing\x20the\x20industry\x27s\x20key\x20risk)');if(d['length']>0x0)throw new Error('register_user_mode\x20requires\x20these\x20fields\x20in\x20mode_changes:\x20'+d['join'](',\x20')+'.\x20'+'Tip:\x20derive_user_mode\x20from\x20a\x20builtin\x20mode\x20is\x20usually\x20easier\x20than\x20registering\x20from\x20scratch.');const e=validateMachineShape(c['machine_shape'],'mode_changes.machine_shape');if(e['length']>0x0)throw new Error('register_user_mode\x20blocked:\x0a'+e['join']('\x0a'));const f=getIndustryModeRegistry(),g=f['getMode']('general');if(!g)throw new Error('Builtin\x20mode\x20\x27general\x27\x20not\x20registered\x20—\x20cannot\x20build\x20custom\x20mode\x20defaults');const h={...g,...c,'name':b,'display_name':a['mode_display_name']??b,'version':'v1','source':'custom','owner':LOCAL_MODE_OWNER,'derived_from':undefined,'evolution_history':[]},i=await f['registerUserMode'](h,LOCAL_MODE_OWNER);if(!i)throw new Error('register_user_mode\x20failed:\x20name\x20\x27'+b+'\x27\x20conflicts\x20with\x20a\x20builtin/existing\x20user\x20mode,\x20'+'or\x20payload\x20is\x20invalid.\x20Call\x20list_modes\x20to\x20see\x20available\x20names.');return{'action':'register_user_mode','mode':summarizeUserMode(h),'hint':'Custom\x20mode\x20\x27'+b+'\x27\x20registered.\x20Use\x20it\x20as\x20project_industry\x20in\x20create_project.'};}export async function handleUnregisterUserMode(a){const b=requireField(a['mode_name'],'mode_name'),c=getIndustryModeRegistry(),d=await c['unregisterUserMode'](b,LOCAL_MODE_OWNER);if(!d)throw new Error('unregister_user_mode\x20failed:\x20user\x20mode\x20\x27'+b+'\x27\x20not\x20found\x20for\x20owner\x20\x27'+LOCAL_MODE_OWNER+'\x27.');return{'action':'unregister_user_mode','removed':!![],'mode_name':b};}export function handleRegisterCustomMetric(a){const b=requireField(a['metric_id'],'metric_id'),c=requireField(a['metric_display_name'],'metric_display_name'),d=requireField(a['metric_description'],'metric_description'),e=requireField(a['metric_type'],'metric_type'),f=requireField(a['metric_scale'],'metric_scale'),g=getMetricRegistry()['registerCustomMetric'](b,c,d,e,f,LOCAL_MODE_OWNER,a['metric_weight']);if(!g)throw new Error('register_custom_metric\x20failed:\x20metric_id\x20\x27'+b+'\x27\x20already\x20exists\x20or\x20fields\x20are\x20invalid.');return{'action':'register_custom_metric','metric':{'metric_id':b,'display_name':c,'description':d,'type':e,'scale':f,'weight':a['metric_weight']??0x1,'scope':'custom','owner':LOCAL_MODE_OWNER},'hint':'Custom\x20metric\x20\x27'+b+'\x27\x20registered\x20globally\x20—\x20all\x20modes\x20can\x20reference\x20it\x20via\x20custom_metrics.'};}export function handleRegisterCustomConstraint(a){const b=requireField(a['constraint_id'],'constraint_id'),c=requireField(a['constraint_display_name'],'constraint_display_name'),d=requireField(a['constraint_description'],'constraint_description'),e=a['constraint_rule'];if(!e||typeof e!=='object'||!('type'in e))throw new Error('constraint_rule\x20is\x20required\x20and\x20must\x20be\x20one\x20of:\x20'+'{type:\x27capability_required\x27,\x20capability_id}\x20|\x20{type:\x27capability_forbidden\x27,\x20capability_id}\x20|\x20'+'{type:\x27numeric_limit\x27,\x20field,\x20max?,\x20min?}\x20|\x20{type:\x27condition_required\x27,\x20condition,\x20ai_evaluated:true}');const f=getConstraintRegistry()['registerCustomConstraint'](b,c,d,e,LOCAL_MODE_OWNER,a['constraint_severity']??'soft',a['constraint_on_violation']??'warn');if(!f)throw new Error('register_custom_constraint\x20failed:\x20constraint_id\x20\x27'+b+'\x27\x20already\x20exists\x20or\x20rule\x20is\x20invalid.');return{'action':'register_custom_constraint','constraint':{'constraint_id':b,'display_name':c,'description':d,'rule':e,'severity':a['constraint_severity']??'soft','on_violation':a['constraint_on_violation']??'warn','scope':'custom','owner':LOCAL_MODE_OWNER},'hint':'Custom\x20constraint\x20\x27'+b+'\x27\x20registered.\x20\x27hard\x27\x20constraints\x20block\x20applyTemplate\x20on\x20violation;\x20\x27soft\x27\x20only\x20warn.'};}export function handleListMetricsConstraints(a){const b=getMetricRegistry()['listMetrics']({'type':a['metric_type_filter'],'scope':a['scope_filter']})['map'](d=>({'metric_id':d['metric_id'],'display_name':d['display_name'],'description':d['description'],'type':d['type'],'scale':d['scale'],'weight':d['weight'],'scope':d['scope']})),c=getConstraintRegistry()['listConstraints']({'scope':a['scope_filter']})['map'](d=>({'constraint_id':d['constraint_id'],'display_name':d['display_name'],'description':d['description'],'rule':d['rule'],'severity':d['severity'],'on_violation':d['on_violation'],'scope':d['scope']}));return{'action':'list_metrics_constraints','metrics':b,'constraints':c,'hint':'Register\x20custom\x20entries\x20via\x20register_custom_metric\x20/\x20register_custom_constraint.\x20'+'Filter\x20with\x20metric_type_filter\x20(\x27risk\x27|\x27benefit\x27)\x20or\x20scope_filter\x20(\x27builtin\x27|\x27custom\x27).'};}function requireField(a,b){if(a===undefined||a===null||typeof a==='string'&&!a['trim']())throw new Error('\x27'+b+'\x27\x20is\x20required\x20for\x20this\x20action');return a;}function summarizeUserMode(a){return{'name':a['name'],'display_name':a['display_name'],'version':a['version'],'derived_from':a['derived_from']??null,'owner':a['owner'],'key_risk':a['key_risk'],'machine_nodes':a['machine_shape']['map'](b=>b['name']),'evolution_history':(a['evolution_history']??[])['map'](b=>({'version':b['version'],'changed_at':b['changed_at'],'changes':b['changes']}))};}
@@ -1,72 +0,0 @@
1
- export type ProjectObjectType = "service" | "machine" | "guard" | "permission" | "reward" | "arb" | "progress" | "treasury" | "demand" | "repository" | "contact" | "order" | "allocation" | "personal" | "payment" | "proof";
2
- export type ProjectRole = "workflow" | "trust" | "revenue" | "acceptance" | "identity" | "communication" | "marketing" | "governance";
3
- export type IndustryMode = "freelance" | "rental" | "education" | "travel" | "subscription" | "general";
4
- export declare const TAG_PREFIX: {
5
- readonly project: "project:";
6
- readonly type: "type:";
7
- readonly role: "role:";
8
- readonly industry: "industry:";
9
- readonly version: "version:";
10
- readonly shareable: "shareable:";
11
- readonly archived: "archived:";
12
- };
13
- export declare const NAMESPACE_CONSTRAINTS: {
14
- readonly projectPrefixMin: 3;
15
- readonly projectPrefixMax: 16;
16
- readonly purposeMin: 1;
17
- readonly purposeMax: 32;
18
- readonly versionPattern: RegExp;
19
- };
20
- export interface NameValidation {
21
- valid: boolean;
22
- reason?: string;
23
- parsed?: {
24
- projectPrefix: string;
25
- type: ProjectObjectType;
26
- purpose: string;
27
- version?: string;
28
- };
29
- }
30
- export declare function validateProjectName(name: string): NameValidation;
31
- export declare function objectTypeFromOperation(operation_type: string): ProjectObjectType | undefined;
32
- export interface TagInjectionOptions {
33
- projectPrefix?: string;
34
- type?: ProjectObjectType;
35
- role?: ProjectRole;
36
- industry?: IndustryMode;
37
- version?: string;
38
- shareable?: boolean;
39
- existingTags?: string[];
40
- }
41
- export declare function buildProjectTags(opts: TagInjectionOptions): string[];
42
- export declare function parseProjectTagValue(value: string): {
43
- prefix: string;
44
- version?: string;
45
- };
46
- export interface ProjectTagEntry {
47
- prefix: string;
48
- version?: string;
49
- raw: string;
50
- }
51
- export declare function extractAllProjectVersions(tags: string[] | undefined): ProjectTagEntry[];
52
- export declare function extractProjectPrefix(tags: string[] | undefined): string | undefined;
53
- export interface NormalizeResult {
54
- data: any;
55
- warnings: string[];
56
- project?: {
57
- prefix: string;
58
- type?: ProjectObjectType;
59
- version?: string;
60
- };
61
- }
62
- export interface NormalizeInput {
63
- operation_type: string;
64
- data: any;
65
- projectPrefix?: string;
66
- role?: ProjectRole;
67
- industry?: IndustryMode;
68
- version?: string;
69
- shareable?: boolean;
70
- }
71
- export declare function normalizeForProject(input: NormalizeInput): NormalizeResult;
72
- export declare const NAMESPACE_VERSION = 2;
@@ -1 +0,0 @@
1
- export const TAG_PREFIX={'project':'project:','type':'type:','role':'role:','industry':'industry:','version':'version:','shareable':'shareable:','archived':'archived:'};export const NAMESPACE_CONSTRAINTS={'projectPrefixMin':0x3,'projectPrefixMax':0x10,'purposeMin':0x1,'purposeMax':0x20,'versionPattern':/^v\d+$/};export function validateProjectName(a){if(!a||typeof a!=='string')return{'valid':![],'reason':'name\x20is\x20empty'};if(a['startsWith']('0x'))return{'valid':![],'reason':'name\x20must\x20not\x20start\x20with\x20\x270x\x27'};if(/^0x[0-9a-fA-F]{64}$/['test'](a))return{'valid':![],'reason':'name\x20is\x20an\x20on-chain\x20address,\x20not\x20a\x20project\x20name'};const b=a['split']('_');if(b['length']<0x3)return{'valid':![],'reason':'name\x20does\x20not\x20match\x20`<prefix>_<type>_<purpose>[_v<version>]`'};const c=b[0x0],d=b[0x1];let e,f;const g=b[b['length']-0x1];NAMESPACE_CONSTRAINTS['versionPattern']['test'](g)?(e=g,f=b['slice'](0x2,-0x1)['join']('_')||b[0x2]):f=b['slice'](0x2)['join']('_');if(c['length']<NAMESPACE_CONSTRAINTS['projectPrefixMin'])return{'valid':![],'reason':'projectPrefix\x20too\x20short\x20(min\x20'+NAMESPACE_CONSTRAINTS['projectPrefixMin']+')'};if(c['length']>NAMESPACE_CONSTRAINTS['projectPrefixMax'])return{'valid':![],'reason':'projectPrefix\x20too\x20long\x20(max\x20'+NAMESPACE_CONSTRAINTS['projectPrefixMax']+')'};if(!/^[a-z][a-z0-9]*$/['test'](c))return{'valid':![],'reason':'projectPrefix\x20must\x20be\x20lowercase\x20alphanumeric\x20(start\x20with\x20a\x20letter)'};if(!isProjectObjectType(d))return{'valid':![],'reason':'unknown\x20object\x20type\x20\x27'+d+'\x27'};if(!f||f['length']<NAMESPACE_CONSTRAINTS['purposeMin'])return{'valid':![],'reason':'purpose\x20is\x20empty'};if(f['length']>NAMESPACE_CONSTRAINTS['purposeMax'])return{'valid':![],'reason':'purpose\x20too\x20long\x20(max\x20'+NAMESPACE_CONSTRAINTS['purposeMax']+')'};if(!/^[a-zA-Z][a-zA-Z0-9]*$/['test'](f))return{'valid':![],'reason':'purpose\x20must\x20be\x20alphanumeric\x20(start\x20with\x20a\x20letter)'};return{'valid':!![],'parsed':{'projectPrefix':c,'type':d,'purpose':f,'version':e}};}function isProjectObjectType(a){return['service','machine','guard','permission','reward','arb','progress','treasury','demand','repository','contact','order','allocation','personal','payment','proof']['includes'](a);}export function objectTypeFromOperation(a){const b={'service':'service','machine':'machine','guard':'guard','permission':'permission','reward':'reward','arbitration':'arb','progress':'progress','treasury':'treasury','demand':'demand','repository':'repository','contact':'contact','order':'order','allocation':'allocation','personal':'personal','payment':'payment','proof':'proof'};return b[a];}export function buildProjectTags(a){const b=new Set(a['existingTags']??[]);return a['projectPrefix']&&(b['add'](''+TAG_PREFIX['project']+a['projectPrefix']),a['version']&&b['add'](''+TAG_PREFIX['project']+a['projectPrefix']+'_'+a['version'])),a['type']&&b['add'](''+TAG_PREFIX['type']+a['type']),a['role']&&b['add'](''+TAG_PREFIX['role']+a['role']),a['industry']&&b['add'](''+TAG_PREFIX['industry']+a['industry']),a['version']&&b['add'](''+TAG_PREFIX['version']+a['version']),a['shareable']&&b['add'](TAG_PREFIX['shareable']+'true'),Array['from'](b);}export function parseProjectTagValue(a){const b=a['match'](/^(.+?)_(v\d+)$/);if(b)return{'prefix':b[0x1],'version':b[0x2]};return{'prefix':a};}export function extractAllProjectVersions(a){if(!a)return[];const b=[];for(const c of a){if(!c['startsWith'](TAG_PREFIX['project']))continue;const d=c['slice'](TAG_PREFIX['project']['length']),e=parseProjectTagValue(d);b['push']({...e,'raw':c});}return b;}export function extractProjectPrefix(a){if(!a)return undefined;for(const b of a){if(b['startsWith'](TAG_PREFIX['project'])){const c=b['slice'](TAG_PREFIX['project']['length']),d=parseProjectTagValue(c);return d['prefix'];}}return undefined;}export function normalizeForProject(a){const b=[],c=a['data'];if(!c||typeof c!=='object')return{'data':c,'warnings':b};const d=c['namedNew']??c['object'];if(!d||typeof d!=='object')return{'data':c,'warnings':b};const e=d['name'],f=objectTypeFromOperation(a['operation_type']);let g=a['projectPrefix'],h=a['version'],i;if(e){i=validateProjectName(e);if(i['valid']&&i['parsed'])g=g??i['parsed']['projectPrefix'],h=h??i['parsed']['version'];else i['reason']&&!i['reason']['includes']('address')&&b['push']('Object\x20name\x20\x27'+e+'\x27\x20does\x20not\x20follow\x20the\x20project\x20naming\x20convention\x20'+('\x27<prefix>_<type>_<purpose>[_v<version>]\x27:\x20'+i['reason']+'.\x20')+'Consider\x20renaming\x20for\x20better\x20project\x20organization.');}if(!g)return{'data':c,'warnings':b};const j=Array['isArray'](d['tags'])?d['tags']:[],k=buildProjectTags({'projectPrefix':g,'type':f,'role':a['role'],'industry':a['industry'],'version':h,'shareable':a['shareable'],'existingTags':j});return k['length']>j['length']&&(d['tags']=k),{'data':c,'warnings':b,'project':{'prefix':g,'type':f,'version':h}};}export const NAMESPACE_VERSION=0x2;
@@ -1 +0,0 @@
1
- import{Config,LocalMark,query_objects,query_object_last_updated,queryTableItem_ObjectLinkerTx,queryTableItem_DemandPresenter,objectTypeFromAddress,ObjectType}from'@wowok/wowok';const js=a=>{if(typeof a==='bigint')return a['toString']();if(a&&typeof a==='object'&&!Array['isArray'](a)){const b={};for(const [c,d]of Object['entries'](a)){b[c]=js(d);}return b;}if(Array['isArray'](a))return a['map'](js);return a;},str=a=>a===null||a===undefined?null:String(a),ownerAddr=a=>{if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];const c=Object['values'](b)['find'](d=>typeof d==='string'&&d['length']>0x14);if(typeof c==='string')return c;}return null;},num=a=>{if(typeof a==='bigint')return Number(a);if(typeof a==='number')return Number['isFinite'](a)?a:null;if(typeof a==='string'&&a['trim']()!==''){const b=Number(a);return Number['isFinite'](b)?b:null;}return null;},arr=a=>Array['isArray'](a)?a:[],ARB_STATUS_NAMES={0x0:'Principal_confirming',0x1:'Arbitrator_confirming',0x2:'Voting',0x3:'Arbitrated',0x4:'Objectionable',0x5:'Finished',0x6:'Withdrawn'};async function resolveObject(a,b){let c=a;if(!/^0x[0-9a-fA-F]{32,64}$/['test'](c)){const g=await LocalMark['Instance']()['get_address'](c);if(!g)throw new Error('Cannot\x20resolve\x20\x27'+c+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.');c=g;}let d=b??undefined,f=null;if(!d)d=await Config['Instance']()['network_get']();try{const h=await query_objects({'objects':[c],'network':d});f=h?.['objects']?.[0x0]??null;if(!f&&b){const i=await Config['Instance']()['network_get']();if(i&&i!==d){const j=await query_objects({'objects':[c],'network':i,'no_cache':!![]}),k=j?.['objects']?.[0x0]??null;k&&(f=k,d=i);}}}catch(l){throw new Error('Failed\x20to\x20query\x20'+c+'\x20on\x20'+d+':\x20'+(l instanceof Error?l['message']:String(l)));}if(!f)throw new Error(c+'\x20not\x20found\x20on\x20'+d+'.\x20It\x20may\x20not\x20exist\x20on\x20this\x20network.');return f['object']=f['object']??c,{'network':String(d),'obj':f};}async function resolveHead(a,b,c){let d=null,e=[];try{const f=await LocalMark['Instance']()['list']({'address':a});f['length']>0x0&&(d=f[0x0]['name']??null,e=(f[0x0]['tags']??[])['map'](g=>String(g)));}catch{c['push']('head:\x20LocalMark\x20lookup\x20failed');}return{'name':d,'tags':e,'description':str(b['description'])};}async function buildPresenters(a,b,c){const d=[];let e=0x0;try{const f=await queryTableItem_ObjectLinkerTx({'address':a,'no_cache':!![],'network':b}),g=(f?.['items']??[])['map'](j=>({'service':String(j?.['who']??''),'time':typeof j?.['time']==='number'?j['time']:null}))['filter'](i=>objectTypeFromAddress(i['service'])===ObjectType['Service']);e=g['length'];const h=g['slice'](-0x32)['reverse']();for(const i of h){let j;try{j=await queryTableItem_DemandPresenter({'parent':a,'address':i['service'],'no_cache':!![],'network':b});}catch{c['push']('presenters:\x20detail\x20fetch\x20failed\x20for\x20one\x20entry');}d['push']({'service':i['service'],'recommend':str(j?.['recommend']),'acceptance_score':num(j?.['acceptance_score']),'feedback':str(j?.['feedback']),'feedback_time':num(j?.['feedback_time']),'update_time':num(j?.['update_time'])??i['time']});}}catch{c['push']('presenters:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}return{'count':e,'items':d};}async function buildRepositoryData(a,b,c){return void a,void b,c['push']('data:\x20per-key\x20enumeration\x20requires\x20the\x20{entity,name}\x20pair\x20—\x20showing\x20count\x20only'),{'count':null,'items':[]};}export async function handleObjectPanorama(b){const c=b['object_address'];if(!c)throw new Error('\x27object_address\x27\x20is\x20required\x20for\x20object_panorama');const {network:d,obj:e}=await resolveObject(c,b['context_network']),f=String(e['object']),g=[],h=await resolveHead(f,e,g),j=String(e['type']??'');if(j==='Progress'){const k=arr(e['session'])[0x0],l=k?{'next_node':str(k['next_node']),'weights':num(k['weights']),'threshold':num(k['threshold']),'forwards':arr(k['forwards'])['map'](n=>{const o=n;return{'forward':str(o['forward'])??'','who':str(o['who']),'accomplished':o['accomplished']===!![],'msg':str(o['msg']),'time':num(o['time'])};})}:null,m={'key':typeof e['machine']==='string'?e['machine']:null,'items':[],'count':0x0};if(m['key'])try{const n=await queryTableItem_ObjectLinkerTx({'address':m['key'],'no_cache':!![],'network':d}),o=n?.['items']??[];m['count']=o['length'];for(const q of o['slice'](-0x32)['reverse']()){const r=typeof q?.['who']==='string'?q['who']:'';if(!r||r['toLowerCase']()===f['toLowerCase']())continue;let s='Account';try{s=objectTypeFromAddress(r)??'Account';}catch{}m['items']['push']({'address':r,'object_type':s,'time':typeof q?.['time']==='number'?q['time']:null});}}catch{g['push']('related:\x20ObjectLinkerTx(machine)\x20lookup\x20failed');}return{'action':'object_panorama','object':f,'object_type':'Progress','network':d,'head':h,'fields':{'machine':str(e['machine']),'current':str(e['current']),'task':str(e['task']),'history_count':num(e['history_count']),'current_time':num(e['current_time'])},'context_repositories':arr(e['context_repositories'])['map'](t=>String(t)),'operators':arr(e['namedOperator'])['map'](t=>{const u=t;return{'name':str(u['name'])??'','operators':arr(u['operators'])['map'](w=>String(w))};}),'session':l,'related':m,'data_gaps':g};}if(j==='Demand')return{'action':'object_panorama','object':f,'object_type':'Demand','network':d,'head':h,'fields':{'location':str(e['location']),'um':str(e['um']),'permission':str(e['permission']),'presenters_count':num(e['presenters_count'])},'rewards':arr(e['rewards'])['map'](t=>String(t)),'guards':arr(e['guards'])['map'](t=>({'guard':str(t['guard'])??''})),'presenters':await buildPresenters(f,d,g),'data_gaps':g};if(j==='Order'){let t=null;try{const C=await query_object_last_updated({'object':f,'network':d});t=C?.['timestamp_ms']?Number(C['timestamp_ms'])||null:null;}catch{}let u='none',w=null,x=null;const y=str(e['allocation']),z=str(e['progress']),A=[y,z]['filter'](D=>!!D);if(A['length']>0x0)try{const D=await query_objects({'objects':A,'network':d}),E=D?.['objects']??[];if(y){u='pending';const F=E['find'](H=>H?.['object']===y),G=Number(F?.['balance']??NaN);if(Number['isFinite'](G)&&G===0x0)u='allocated';}if(z){const H=E['find'](I=>I?.['object']===z);w=str(H?.['current']),x=num(H?.['current_time']);}}catch{}const B={'key':f,'items':[],'count':0x0};try{const I=await queryTableItem_ObjectLinkerTx({'address':f,'no_cache':!![],'network':d}),J=I?.['items']??[];B['count']=J['length'];for(const K of J['slice'](-0x32)['reverse']()){const L=typeof K?.['who']==='string'?K['who']:'';if(!L||L['toLowerCase']()===f['toLowerCase']())continue;let M='Account';try{M=objectTypeFromAddress(L)??'Account';}catch{}B['items']['push']({'address':L,'object_type':M,'time':typeof K?.['time']==='number'?K['time']:null});}}catch{g['push']('related:\x20ObjectLinkerTx(order)\x20lookup\x20failed');}return{'action':'object_panorama','object':f,'object_type':'Order','network':d,'head':h,'fields':{'service':str(e['service']),'machine':str(e['machine']),'progress':z,'allocation':y,'discount':str(e['discount']),'amount':str(e['amount']),'owner':ownerAddr(e['builder']??e['owner']),'claimed_by':str(e['claimed_by']),'required_info':str(e['required_info']),'time':num(e['time'])},'updated_ms':t,'related':B,'allocation_state':u,'progress_next':w,'progress_since':x,'items':arr(e['items'])['map'](N=>{const O=N;return{'name':str(O['name']),'price':str(O['price']),'quantity':str(O['quantity']),'wip_hash':str(O['wip_hash'])};}),'disputes':arr(e['dispute'])['map'](N=>String(N)),'agents':arr(e['agent'])['map'](N=>String(N)),'data_gaps':g};}if(j==='Arb'){const N=e['indemnity'];let O=null;try{const S=await query_object_last_updated({'object':f,'network':d});O=S?.['timestamp_ms']?Number(S['timestamp_ms'])||null:null;}catch{}const P=str(e['order']);let Q=null;if(P)try{const T=await query_objects({'objects':[P],'network':d}),U=T?.['objects']?.[0x0];Q=str(U?.['service']);}catch{}const R={'key':f,'items':[],'count':0x0};try{const V=await queryTableItem_ObjectLinkerTx({'address':f,'no_cache':!![],'network':d}),W=V?.['items']??[];R['count']=W['length'];for(const X of W['slice'](-0x32)['reverse']()){const Y=typeof X?.['who']==='string'?X['who']:'';if(!Y||Y['toLowerCase']()===f['toLowerCase']())continue;let Z='Account';try{Z=objectTypeFromAddress(Y)??'Account';}catch{}R['items']['push']({'address':Y,'object_type':Z,'time':typeof X?.['time']==='number'?X['time']:null});}}catch{g['push']('related:\x20ObjectLinkerTx(arb)\x20lookup\x20failed');}return{'action':'object_panorama','object':f,'object_type':'Arb','network':d,'head':h,'fields':{'arbitration':str(e['arbitration']),'order':str(e['order']),'service':Q,'fee':str(e['fee']),'feedback':str(e['feedback']),'indemnity':N?{'amount':str(N['amount']),'time':num(N['time'])}:null,'voting_deadline':num(e['voting_deadline']),'objection':str(e['objection']),'status':ARB_STATUS_NAMES[num(e['status'])??-0x1]??str(e['status']),'compensation_time':num(e['compensation_time']),'time':num(e['time']),'type_raw':str(e['type_raw'])},'voted':arr(e['voted'])['map'](a0=>{const a1=a0;return{'voter':str(a1['voter'])??'','agrees':arr(a1['agrees'])['map'](a2=>Number(a2)),'weight':num(a1['weight'])??0x0,'time':num(a1['time'])??0x0};}),'proposition':arr(e['proposition'])['map'](a0=>{const a1=a0;return{'name':str(a1['name'])??'','votes':num(a1['votes'])??0x0};}),'related':R,'updated_ms':O,'data_gaps':g};}if(j==='Repository')return{'action':'object_panorama','object':f,'object_type':'Repository','network':d,'head':h,'fields':{'um':str(e['um']),'permission':str(e['permission']),'data_count':num(e['data_count'])},'policies':arr(e['policies'])['map'](a0=>{const a1=a0;return{'name':str(a1['name'])??'','description':str(a1['description']),'id_from':str(a1['id_from']),'value_type':str(a1['value_type']),'write_guards':arr(a1['write_guard'])['length'],'quote_guard':str(a1['quote_guard'])};}),'rewards':arr(e['rewards'])['map'](a0=>String(a0)),'data_entries':await buildRepositoryData(f,d,g),'data_gaps':g};throw new Error('object_panorama:\x20unsupported\x20object\x20type\x20\x27'+(j||'unknown')+'\x27\x20for\x20'+f+'.\x20'+'Supported:\x20Progress\x20/\x20Demand\x20/\x20Order\x20/\x20Arb\x20/\x20Repository.');}
@@ -1 +0,0 @@
1
- import{LocalMark,query_objects,query_table,watch_conversations}from'@wowok/wowok';import{analyzeOrderParticipation,aggregateRadar,isConsequenceNode}from'../participation/radar-core.js';import{monitorOrder}from'../customer/order-monitor.js';import{analyzeMerchantInterest}from'../participation/merchant-interest.js';import{analyzeCustomerInterest}from'../participation/customer-interest.js';import{analyzeSupplierInterest}from'../participation/supplier-interest.js';import{analyzeCollaboratorInterest}from'../participation/collaborator-interest.js';import{fetchMachineNodes}from'./machine-nodes.js';import{extractGenericTokenType,registryDisplayHint}from'../knowledge/fund-layer.js';const QUERY_BATCH=0x32;function fld(a,b){return a?.[b]??a?.['data']?.[b];}async function resolveAddress(a,b){const c=await LocalMark['Instance']()['get_address'](a);if(!c)throw new Error('Cannot\x20resolve\x20'+b+'\x20\x27'+a+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.\x20'+'Register\x20it\x20via\x20local_mark_operation\x20or\x20pass\x20the\x200x\x20address\x20directly.');return c;}function balanceStr(a){if(a==null)return undefined;if(typeof a==='object'&&'balance'in a)return String(a['balance']);return String(a);}function balanceToken(a){if(a!=null&&typeof a==='object'&&typeof a['token_type']==='string')return a['token_type'];return undefined;}function summarizeAllocation(a,b){const c=Array['isArray'](a)?a:Array['isArray'](a?.['allocators'])?a['allocators']:[];if(c['length']===0x0)return undefined;let d=0x0,e=0x0,f=0x0,g=0x0;const h=b['toLowerCase']();for(const i of c){for(const j of i?.['sharing']??[]){d++;const k=j?.['who'];if(k==null)continue;if(typeof k==='object'&&'GuardIdentifier'in k)e++;else{if(typeof k==='object'&&'Signer'in k)g++;else{if(typeof k==='object'&&'Entity'in k){const l=k['Entity'],m=typeof l==='string'?l:l?.['name_or_address'];if(typeof m==='string'&&m['toLowerCase']()===h)f++;}else typeof k==='string'&&k['toLowerCase']()===h&&f++;}}}}return{'recipient_slots':d,'guard_gated_slots':e,'direct_to_me_slots':f,'to_payer_slots':g};}async function queryObjectsBatched(a,b){const c=[];for(let d=0x0;d<a['length'];d+=QUERY_BATCH){const e=a['slice'](d,d+QUERY_BATCH),f=await query_objects({'objects':e,'network':b});c['push'](...f?.['objects']??[]);}return c;}async function fetchEntityPermissions(a,b){const c=new Map(),d=[];let e=undefined;for(;;){const g=await query_table({'parent':a,'cursor':e??undefined,'network':b});if(!g?.['items']||g['items']['length']===0x0)break;for(const h of g['items']){if(h['object'])d['push'](h['object']);}if(!g['hasNextPage']||!g['nextCursor'])break;e=g['nextCursor'];}const f=await queryObjectsBatched(d,b);for(const i of f){if(i?.['type']!=='TableItem_PermissionPerm')continue;const j=fld(i,'address'),k=fld(i,'perm')??[],l=k['map'](m=>typeof m==='number'?m:typeof m?.['index']==='number'?m['index']:null)['filter'](m=>m!==null);if(j)c['set'](j,l);}return c;}function toRadarMachineNodes(a){return a['map'](b=>({'name':b['name'],'pairs':(Array['isArray'](b['value'])?b['value']:[])['map'](c=>({'prev_node':c['prev_node'],'threshold':c['threshold']??undefined,'forwards':(c['forwards']??[])['map'](d=>({'name':d['name'],'permissionIndex':d['permissionIndex']??null,'namedOperator':d['namedOperator']??null,'guard':d['guard']?.['guard']??(typeof d['guard']==='string'?d['guard']:null),'weight':d['weight']??null}))}))}));}export async function handleParticipationRadar(a){if(!a['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20participation_radar');if(!a['radar_targets']||a['radar_targets']['length']===0x0)throw new Error('\x27radar_targets\x27\x20(1-20\x20in-flight\x20orders)\x20is\x20required\x20for\x20participation_radar');const b=a['network']??'testnet',d=a['radar_include_alerts']??!![],f=[],g=await resolveAddress(a['radar_account'],'radar_account'),h=await Promise['all'](a['radar_targets']['map'](async I=>({'progress':await resolveAddress(I['progress'],'progress'),'order':I['order']?await resolveAddress(I['order'],'order'):undefined}))),i=h['flatMap'](I=>I['order']?[I['progress'],I['order']]:[I['progress']]),j=await queryObjectsBatched(i,b),k=new Map();for(const I of j){const J=fld(I,'object');if(J)k['set'](J,I);}const l=new Map(),m=new Map();for(const K of h){const L=k['get'](K['progress']);if(!L){f['push']('Progress\x20'+K['progress']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20target\x20skipped.');continue;}l['set'](K['progress'],L);if(K['order']){const M=k['get'](K['order']);if(M)m['set'](K['order'],M);else f['push']('Order\x20'+K['order']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20order-holder\x20detection\x20disabled\x20for\x20'+K['progress']+'.');}}h['length']>0x0&&l['size']===0x0&&f['push']('NETWORK\x20MISMATCH\x20SUSPECTED:\x200/'+h['length']+'\x20radar\x20targets\x20exist\x20on\x20network=\x27'+b+'\x27.\x20'+'These\x20objects\x20most\x20likely\x20live\x20on\x20a\x20different\x20network\x20—\x20re-run\x20with\x20the\x20matching\x20\x27network\x27\x20parameter.');const q=[...new Set([...l['values']()]['map'](N=>fld(N,'machine'))['filter'](N=>!!N))],s=[...new Set([...m['values']()]['map'](N=>fld(N,'service'))['filter'](N=>!!N))],u=[...new Set([...m['values']()]['flatMap'](N=>{const O=fld(N,'dispute');return Array['isArray'](O)?O:[];}))],w=new Map(),x=new Map(),y=new Map(),z=new Map();await Promise['all']([...q['map'](async N=>{try{const [O,P]=await Promise['all']([queryObjectsBatched([N],b),fetchMachineNodes(N,b)]);if(O[0x0])w['set'](N,O[0x0]);x['set'](N,toRadarMachineNodes(P));}catch(Q){f['push']('Machine\x20'+N+'\x20fetch\x20failed:\x20'+Q['message']+'\x20—\x20workflow\x20unknown\x20for\x20its\x20orders.');}}),((async()=>{if(s['length']===0x0)return;try{const N=await queryObjectsBatched(s,b);for(const O of N){const P=fld(O,'object');if(P)y['set'](P,O);}}catch(Q){f['push']('Service\x20query\x20failed:\x20'+Q['message']+'\x20—\x20compensation/reward\x20context\x20degraded.');}})()),((async()=>{if(u['length']===0x0)return;try{const N=await queryObjectsBatched(u,b);for(const O of N){const P=fld(O,'object');if(P)z['set'](P,O);}}catch(Q){f['push']('Arb\x20query\x20failed:\x20'+Q['message']+'\x20—\x20compensation\x20claim\x20detection\x20disabled.');}})())]);const A=new Map(),B=[...new Set(q['map'](N=>fld(w['get'](N),'permission'))['filter'](N=>!!N))],C=new Map();await Promise['all'](B['map'](async N=>{try{const [O,P]=await Promise['all']([queryObjectsBatched([N],b),fetchEntityPermissions(N,b)]),Q=O[0x0];C['set'](N,{'address':N,'entity_count':fld(Q,'entity_count'),'perm_remark':fld(Q,'perm_remark'),'entityPermissions':P,'owner':fld(Q,'builder')});}catch(R){f['push']('Permission\x20'+N+'\x20fetch\x20failed:\x20'+R['message']+'\x20—\x20operator\x20permission\x20matching\x20degraded.');}}));for(const N of q){const O=fld(w['get'](N),'permission');if(O&&C['has'](O))A['set'](N,C['get'](O));}let D=0x0;const E=new Map();try{const P=await watch_conversations({'account':g,'unreadOnly':!![],'previewMessageCount':0x0,'skipAutoMarkViewed':!![]}),Q=Array['isArray'](P)?P:P?.['conversations']??[];for(const R of Q){const S=R?.['peerAddress'],T=typeof R?.['unreadCount']==='number'?R['unreadCount']:0x0;typeof S==='string'&&T>0x0&&(E['set'](S['toLowerCase'](),T),D+=T);}}catch{f['push']('Messenger\x20unread\x20unavailable\x20(radar\x20account\x20is\x20not\x20a\x20local\x20messenger\x20account,\x20or\x20messenger\x20storage\x20offline)\x20'+'—\x20unread_messages_total\x20reported\x20as\x200.');}const F=[],G=Date['now']();for(const U of h){const V=l['get'](U['progress']);if(!V)continue;const W=U['order']?m['get'](U['order']):undefined,X=fld(V,'machine'),Y=fld(V,'current')??'',Z=fld(V,'namedOperator')??[],a0={};for(const ae of Z){if(ae?.['name'])a0[ae['name']]=Array['isArray'](ae['operators'])?ae['operators']:[];}const a1=W?fld(W,'service'):undefined,a2=a1?y['get'](a1):undefined;let a3;const a4=W?fld(W,'builder'):undefined;if(W&&a4===g){const af=fld(W,'dispute')??[];for(const ag of af){const ah=z['get'](ag);if(!ah)continue;const ai=fld(ah,'indemnity');if(ai){a3={'arbitration':fld(ah,'arbitration')??ag,'note':'Arbitration\x20verdict\x20recorded\x20an\x20indemnity\x20(Arb\x20'+ag+').\x20'+'Claim\x20via\x20service\x20op=\x27compensation_claim\x27\x20—\x20paid\x20directly\x20from\x20the\x20Service\x20compensation_fund.\x20'+'(Claimed-status\x20is\x20not\x20readable\x20from\x20the\x20Arb\x20object;\x20the\x20contract\x20rejects\x20double-claims.)'};break;}}}const a5=[];if(a2&&a4===g){const aj=fld(a2,'rewards')??[];for(const ak of aj){a5['push']({'address':ak,'description':'Service\x20reward\x20'+ak+'\x20(guard-gated\x20—\x20eligibility\x20verified\x20at\x20claim\x20time)'});}}const a6=isConsequenceNode(Y,'completed'),a7=isConsequenceNode(Y,'refunded');let a8=0x0;if(E['size']>0x0){const al=new Set();if(a4)al['add'](a4['toLowerCase']());for(const am of Object['values'](a0)){for(const an of am)al['add'](an['toLowerCase']());}al['delete'](g['toLowerCase']());for(const ao of al){a8+=E['get'](ao)??0x0;}}const a9={'account':g,'progress_address':U['progress'],'order_address':U['order'],'current_node':Y,'order_holder':a4,'machine_nodes':X?x['get'](X):undefined,'permission':X?A['get'](X)??null:null,'named_accounts':a0,'claimable_rewards':a5['length']>0x0?a5:undefined,'pending_compensation':a3,'rating_pending':a6&&a4===g,'unread_messages':a8>0x0?a8:undefined,'last_progress_at':fld(V,'current_time')??undefined,'now':G},aa=analyzeOrderParticipation(a9),ab=(fld(a2,'arbitrations')??[])['length']>0x0,ac=a6?'completed':a7?'refunded':null,ad=a9['last_progress_at']!=null?(G-a9['last_progress_at'])/0x36ee80:undefined;if(aa['perspective']==='merchant')aa['interest_analysis']=analyzeMerchantInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'allocation':summarizeAllocation(fld(a2,'order_allocators'),g),'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'arbitration_bound':ab,'rewards_count':(fld(a2,'rewards')??[])['length'],'stalled_hours':ad,'terminal':ac,'unread_messages':a8>0x0?a8:undefined});else{if(aa['perspective']==='supplier')aa['interest_analysis']=analyzeSupplierInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'arbitration_bound':ab,'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined});else{if(aa['perspective']==='collaborator')aa['interest_analysis']=analyzeCollaboratorInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'collaborator_kind':aa['collaborator_kind'],'arbitration_bound':ab,'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined});else aa['perspective']==='customer'&&(aa['interest_analysis']=analyzeCustomerInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'arbitration_bound':ab,'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined}));}}if(d&&W){const ap={'order_id':U['order'],'service_id':a1??'','current_node':Y||undefined,'created_at':Number(fld(W,'time')??G)||G,'last_progress_at':fld(V,'current_time')??undefined,'now':G,'order_amount':((()=>{try{return BigInt(fld(W,'amount')??0x0);}catch{return undefined;}})()),'compensation_balance':((()=>{try{const aq=fld(a2,'compensation_fund');return aq!=null?BigInt(aq):undefined;}catch{return undefined;}})()),'token':registryDisplayHint(extractGenericTokenType(fld(a2,'type_raw'))),'has_arbitration':(fld(a2,'arbitrations')??[])['length']>0x0,'pending_user_action':aa['operable']['some'](aq=>aq['execution_path']==='order_holder'),'completed':a6,'refunded':a7};try{const aq=monitorOrder({'current':ap,'thresholds':a['radar_monitor_thresholds']});aq['length']>0x0&&(aa['attached_alerts']=aq);}catch(ar){f['push']('Order\x20monitor\x20failed\x20for\x20'+U['order']+':\x20'+ar['message']+'.');}}F['push'](aa);}const H=aggregateRadar(F,D);return{'action':'participation_radar','account':g,'orders_analyzed':H['orders_analyzed'],'actionable':H['actionable'],'waiting':H['waiting'],'all_pending_claims':H['all_pending_claims'],'unread_messages_total':H['unread_messages_total'],'data_gaps':f,'summary':H['summary']};}
@@ -1 +0,0 @@
1
- import{analyzeBusinessIntent}from'./business-puzzle.js';import{aggregateProjectRisks}from'./risk-aggregator.js';import{traceSubsteps}from'./substep-trace.js';import{updateStageCache}from'./index.js';import{checkObjectReuseRules,checkImmutabilityRules}from'../knowledge/safety-rules.js';export function handleAnalyzeIntent(a){const b=(a['intent']??a['project_description']??a['project_name']??'')['trim']();if(!b)throw new Error('analyze_intent\x20requires\x20\x27intent\x27\x20(business\x20description\x20text).\x20'+'Example:\x20intent=\x27I\x20want\x20to\x20open\x20an\x20online\x20toy\x20store\x20with\x20escrow\x20and\x20dispute\x20resolution\x27.');const c=analyzeBusinessIntent({'user_intent':b,'project_name':a['project_name'],'target_objects':a['target_objects'],'industry':a['project_industry']}),d=(a['project']??'')['trim']();return d&&updateStageCache(d,(a['version']??'v1')['trim'](),{'stage':0x2,'puzzles':c['puzzles'],'business_intent':b,'industry':c['intent_parsed']['industry']}),{'action':'analyze_intent',...c};}export function handleAggregateRisks(a){const b=(a['project']??'')['trim']();if(!b)throw new Error('aggregate_risks\x20requires\x20\x27project\x27\x20(project\x20prefix,\x20e.g.\x20\x27myshop\x27).\x20'+'Use\x20the\x20same\x20prefix\x20as\x20create_project\x20so\x20findings\x20map\x20to\x20the\x20project\x20namespace.');const c=(a['version']??'v1')['trim']();let d,e;if(a['puzzles'])d=Object['fromEntries'](Object['entries'](a['puzzles'])['map'](([h,i])=>[h,{'puzzle':i['puzzle'],'completeness':i['completeness'],'missing_dimensions':i['missing_dimensions']}]));else{const h=(a['intent']??a['project_description']??a['project_name']??'')['trim']();if(!h)throw new Error('aggregate_risks\x20requires\x20\x27puzzles\x27\x20(from\x20a\x20prior\x20analyze_intent\x20result)\x20'+'OR\x20\x27intent\x27\x20(business\x20description\x20—\x20analyze_intent\x20runs\x20automatically\x20first).');const i=analyzeBusinessIntent({'user_intent':h,'project_name':a['project_name'],'industry':a['project_industry']});d=i['puzzles'],e={'primary_object':i['intent_parsed']['primary_object'],'industry':i['intent_parsed']['industry'],'overall_completeness':i['overall_completeness']};}const f=aggregateProjectRisks({'project_prefix':b,'version':c,'industry':a['project_industry'],'puzzles':d,'severity_threshold':a['severity_threshold'],'user_confirmed_high_risks':a['user_confirmed_high_risks']}),g=[...a['planned_objects']?checkObjectReuseRules(a['planned_objects']):[],...a['planned_operations']?checkImmutabilityRules(a['planned_operations']):[]];return updateStageCache(b,c,{'stage':0x3,'risk_status':f['status'],'risk_can_proceed':f['status']==='RISK_PASSED'}),{'action':'aggregate_risks',...f,...g['length']>0x0?{'safety_findings':g}:{},...e?{'intent_echo':e}:{}};}export function handleTraceSubsteps(a){const b=(a['project']??'')['trim']();if(!b)throw new Error('trace_substeps\x20requires\x20\x27project\x27\x20(project\x20prefix,\x20e.g.\x20\x27myshop\x27).');if(!a['substeps']||a['substeps']['length']===0x0)throw new Error('trace_substeps\x20requires\x20\x27substeps\x27\x20(non-empty\x20array\x20of\x20substep\x20execution\x20records,\x20'+'63-spec\x20§2.1).\x20Construct\x20them\x20from\x20your\x20deployment\x20execution\x20trace:\x20each\x20onchain_operations\x20'+'call\x20=\x20one\x20substep\x20with\x20step_id\x20\x27T<step>.<substep>\x27,\x20input_refs\x20pointing\x20at\x20upstream\x20substeps.');const c=traceSubsteps({'project_prefix':b,'version':(a['version']??'v1')['trim'](),'network':a['network']??'testnet','substeps':a['substeps'],'edges':a['substep_edges']});return updateStageCache(b,(a['version']??'v1')['trim'](),{'stage':0x5,'trace_coherent':c['coherent'],'trace_can_proceed':c['coherent']}),{'action':'trace_substeps',...c};}