@wowok/agent-mcp 2.7.7 → 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 (441) 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/customer/index.d.ts +3 -4
  5. package/dist/customer/index.js +1 -1
  6. package/dist/customer/info-puzzle.js +1 -1
  7. package/dist/customer/order-monitor.d.ts +0 -9
  8. package/dist/customer/order-monitor.js +1 -1
  9. package/dist/customer/order-strategy.d.ts +0 -19
  10. package/dist/customer/order-strategy.js +1 -1
  11. package/dist/customer/reminder-system.d.ts +0 -5
  12. package/dist/customer/reminder-system.js +1 -1
  13. package/dist/evaluation/game-strategy.js +1 -1
  14. package/dist/evaluation/injection.d.ts +6 -0
  15. package/dist/evaluation/injection.js +1 -0
  16. package/dist/evaluation/node-game.js +1 -1
  17. package/dist/examples/machine-multisig-threshold.json +1 -0
  18. package/dist/examples/rental-ziroom-machine-create.json +1 -2
  19. package/dist/examples/rental-ziroom-permission-create.json +1 -2
  20. package/dist/examples/rental-ziroom-service-create.json +1 -2
  21. package/dist/experience/experience-reuse.js +1 -1
  22. package/dist/experience/index.d.ts +2 -1
  23. package/dist/experience/index.js +1 -1
  24. package/dist/experience/persistence-config.d.ts +6 -0
  25. package/dist/experience/persistence-config.js +1 -0
  26. package/dist/experience/persistence.d.ts +21 -0
  27. package/dist/experience/persistence.js +1 -0
  28. package/dist/experience/realtime-feedback.js +1 -1
  29. package/dist/experience/user-profile.js +1 -1
  30. package/dist/extensions/business-modules.d.ts +1 -1
  31. package/dist/extensions/capability-manifest.d.ts +1 -1
  32. package/dist/extensions/types.d.ts +1 -1
  33. package/dist/goal/GoalClassifier.d.ts +17 -0
  34. package/dist/goal/GoalClassifier.js +1 -0
  35. package/dist/goal/GoalEngine.d.ts +120 -0
  36. package/dist/goal/GoalEngine.js +1 -0
  37. package/dist/goal/GoalStore.d.ts +27 -0
  38. package/dist/goal/GoalStore.js +1 -0
  39. package/dist/goal/plan-approval.d.ts +5 -0
  40. package/dist/goal/plan-approval.js +1 -0
  41. package/dist/goal/types.d.ts +76 -0
  42. package/dist/goal/types.js +1 -0
  43. package/dist/harness/index.d.ts +2 -7
  44. package/dist/harness/index.js +1 -1
  45. package/dist/harness/plan.d.ts +1 -1
  46. package/dist/harness/recover.js +1 -1
  47. package/dist/harness/types.d.ts +1 -36
  48. package/dist/harness/verify.js +1 -1
  49. package/dist/index.js +1 -1
  50. package/dist/intent/enrich.js +1 -1
  51. package/dist/intent/matcher.js +1 -1
  52. package/dist/intent/types.d.ts +1 -1
  53. package/dist/intent/types.js +1 -1
  54. package/dist/knowledge/account-marks.d.ts +35 -0
  55. package/dist/knowledge/account-marks.js +1 -0
  56. package/dist/knowledge/arbitration-ledger.js +1 -1
  57. package/dist/knowledge/audit-rules.d.ts +3 -1
  58. package/dist/knowledge/audit-rules.js +1 -1
  59. package/dist/knowledge/contract-invariants.d.ts +53 -0
  60. package/dist/knowledge/contract-invariants.js +1 -0
  61. package/dist/knowledge/dynamic-pricing.d.ts +0 -2
  62. package/dist/knowledge/dynamic-pricing.js +1 -1
  63. package/dist/knowledge/event-semantics.d.ts +20 -0
  64. package/dist/knowledge/event-semantics.js +1 -0
  65. package/dist/knowledge/examples-scanner-cli.js +1 -1
  66. package/dist/knowledge/examples-scanner.js +1 -1
  67. package/dist/knowledge/glossary.js +1 -1
  68. package/dist/knowledge/goal-completion.d.ts +19 -0
  69. package/dist/knowledge/goal-completion.js +1 -0
  70. package/dist/knowledge/guard-submission-prompt.js +1 -1
  71. package/dist/knowledge/guard-translation.js +1 -1
  72. package/dist/knowledge/immutability.d.ts +11 -0
  73. package/dist/knowledge/immutability.js +1 -0
  74. package/dist/knowledge/index.d.ts +13 -6
  75. package/dist/knowledge/index.js +1 -1
  76. package/dist/knowledge/industry-registry.js +1 -1
  77. package/dist/knowledge/intent-metrics.d.ts +1 -1
  78. package/dist/knowledge/jsonrpc-enum.d.ts +37 -0
  79. package/dist/knowledge/jsonrpc-enum.js +1 -0
  80. package/dist/knowledge/machine-confirm.js +1 -1
  81. package/dist/knowledge/machine-risk.js +1 -1
  82. package/dist/knowledge/machine-topology.d.ts +11 -0
  83. package/dist/knowledge/machine-topology.js +1 -1
  84. package/dist/knowledge/machine-translation.js +1 -1
  85. package/dist/knowledge/market-metrics.d.ts +11 -0
  86. package/dist/knowledge/market-metrics.js +1 -1
  87. package/dist/knowledge/mcp-schema-audit-cli.js +1 -1
  88. package/dist/knowledge/mcp-schema-audit.d.ts +1 -0
  89. package/dist/knowledge/mcp-schema-audit.js +1 -1
  90. package/dist/knowledge/messenger-guard-guidance.d.ts +17 -0
  91. package/dist/knowledge/messenger-guard-guidance.js +1 -0
  92. package/dist/knowledge/operation-dictionary.d.ts +18 -0
  93. package/dist/knowledge/operation-dictionary.js +1 -0
  94. package/dist/knowledge/passport-confirm.js +1 -1
  95. package/dist/knowledge/passport-puzzle.js +1 -1
  96. package/dist/knowledge/passport-translation.js +1 -1
  97. package/dist/knowledge/proof-risk.js +1 -1
  98. package/dist/knowledge/safety-rules.js +1 -1
  99. package/dist/knowledge/service-ledger.js +1 -1
  100. package/dist/knowledge/service-risk.js +1 -1
  101. package/dist/knowledge/service-translation.js +1 -1
  102. package/dist/knowledge/supply-chain.d.ts +24 -0
  103. package/dist/knowledge/supply-chain.js +1 -0
  104. package/dist/knowledge/template-registry.js +1 -1
  105. package/dist/knowledge/tools-reference.js +1 -1
  106. package/dist/knowledge/trust-metrics.d.ts +27 -2
  107. package/dist/knowledge/trust-metrics.js +1 -1
  108. package/dist/knowledge/workflow-guidance.d.ts +22 -0
  109. package/dist/knowledge/workflow-guidance.js +1 -1
  110. package/dist/knowledge/workspace-lists.d.ts +56 -0
  111. package/dist/knowledge/workspace-lists.js +1 -0
  112. package/dist/loop-engineering/context-collect.d.ts +1 -1
  113. package/dist/monitor/EventRouter.d.ts +10 -0
  114. package/dist/monitor/EventRouter.js +1 -0
  115. package/dist/monitor/EventStore.d.ts +98 -0
  116. package/dist/monitor/EventStore.js +1 -0
  117. package/dist/monitor/MonitorLoop.d.ts +79 -0
  118. package/dist/monitor/MonitorLoop.js +1 -0
  119. package/dist/monitor/ProblemBridge.d.ts +32 -0
  120. package/dist/monitor/ProblemBridge.js +1 -0
  121. package/dist/monitor/ScopeResolver.d.ts +59 -0
  122. package/dist/monitor/ScopeResolver.js +1 -0
  123. package/dist/monitor/SubscriptionStore.d.ts +13 -0
  124. package/dist/monitor/SubscriptionStore.js +1 -0
  125. package/dist/monitor/normalize.d.ts +8 -0
  126. package/dist/monitor/normalize.js +1 -0
  127. package/dist/monitor/types.d.ts +89 -0
  128. package/dist/monitor/types.js +1 -0
  129. package/dist/participation/radar-core.d.ts +0 -1
  130. package/dist/participation/radar-core.js +1 -1
  131. package/dist/persona/address-format.d.ts +6 -0
  132. package/dist/persona/address-format.js +1 -0
  133. package/dist/persona/analyzer.js +1 -1
  134. package/dist/persona/distill-goal.d.ts +20 -0
  135. package/dist/persona/distill-goal.js +1 -0
  136. package/dist/persona/index.d.ts +5 -0
  137. package/dist/persona/index.js +1 -1
  138. package/dist/persona/model.js +1 -1
  139. package/dist/persona/types.d.ts +1 -1
  140. package/dist/persona/types.js +1 -1
  141. package/dist/playbooks/service-build/business-puzzle.js +1 -0
  142. package/dist/{project → playbooks/service-build}/context-assembly.d.ts +9 -4
  143. package/dist/playbooks/service-build/context-assembly.js +1 -0
  144. package/dist/{project → playbooks/service-build}/game-theory.d.ts +1 -1
  145. package/dist/playbooks/service-build/index.d.ts +14 -0
  146. package/dist/playbooks/service-build/index.js +1 -0
  147. package/dist/{project → playbooks/service-build}/intent-analyzer.d.ts +1 -1
  148. package/dist/playbooks/service-build/intent-analyzer.js +1 -0
  149. package/dist/playbooks/service-build/machine-nodes.d.ts +25 -0
  150. package/dist/playbooks/service-build/machine-nodes.js +1 -0
  151. package/dist/playbooks/service-build/machine-panorama.d.ts +43 -0
  152. package/dist/playbooks/service-build/machine-panorama.js +1 -0
  153. package/dist/{project → playbooks/service-build}/merchant-guide.d.ts +1 -1
  154. package/dist/playbooks/service-build/merchant-guide.js +1 -0
  155. package/dist/{project → playbooks/service-build}/mode-actions.d.ts +2 -2
  156. package/dist/playbooks/service-build/mode-actions.js +1 -0
  157. package/dist/playbooks/service-build/namespace.d.ts +2 -0
  158. package/dist/playbooks/service-build/namespace.js +1 -0
  159. package/dist/playbooks/service-build/object-panorama.d.ts +178 -0
  160. package/dist/playbooks/service-build/object-panorama.js +1 -0
  161. package/dist/playbooks/service-build/object-type.d.ts +1 -0
  162. package/dist/playbooks/service-build/object-type.js +1 -0
  163. package/dist/{project → playbooks/service-build}/participation-radar.d.ts +4 -5
  164. package/dist/playbooks/service-build/participation-radar.js +1 -0
  165. package/dist/{project → playbooks/service-build}/pipeline-actions.d.ts +9 -9
  166. package/dist/playbooks/service-build/pipeline-actions.js +1 -0
  167. package/dist/playbooks/service-build/process.d.ts +6 -0
  168. package/dist/playbooks/service-build/process.js +1 -0
  169. package/dist/playbooks/service-build/risk-aggregator.js +1 -0
  170. package/dist/{project → playbooks/service-build}/semantic-graph.d.ts +2 -2
  171. package/dist/playbooks/service-build/service-panorama.d.ts +164 -0
  172. package/dist/playbooks/service-build/service-panorama.js +1 -0
  173. package/dist/review/arb.d.ts +6 -0
  174. package/dist/review/arb.js +1 -0
  175. package/dist/review/demand.d.ts +3 -0
  176. package/dist/review/demand.js +1 -0
  177. package/dist/review/index.d.ts +3 -0
  178. package/dist/review/index.js +1 -0
  179. package/dist/review/machine.d.ts +3 -0
  180. package/dist/review/machine.js +1 -0
  181. package/dist/review/order.d.ts +9 -0
  182. package/dist/review/order.js +1 -0
  183. package/dist/review/progress.d.ts +3 -0
  184. package/dist/review/progress.js +1 -0
  185. package/dist/review/repository.d.ts +3 -0
  186. package/dist/review/repository.js +1 -0
  187. package/dist/review/service.d.ts +5 -0
  188. package/dist/review/service.js +1 -0
  189. package/dist/review/types.d.ts +156 -0
  190. package/dist/review/types.js +1 -0
  191. package/dist/role/derivation.d.ts +19 -2
  192. package/dist/role/derivation.js +1 -1
  193. package/dist/role/index.d.ts +2 -2
  194. package/dist/role/index.js +1 -1
  195. package/dist/role/model.js +1 -1
  196. package/dist/role/resolution.d.ts +16 -0
  197. package/dist/role/resolution.js +1 -1
  198. package/dist/role/types.d.ts +1 -1
  199. package/dist/role/types.js +1 -1
  200. package/dist/rules.d.ts +2 -2
  201. package/dist/rules.js +1 -1
  202. package/dist/safety/confirm-gate.js +1 -1
  203. package/dist/safety/index.d.ts +1 -1
  204. package/dist/safety/index.js +1 -1
  205. package/dist/safety/preview.d.ts +1 -0
  206. package/dist/safety/preview.js +1 -1
  207. package/dist/schema/call/allocation.d.ts +2 -1
  208. package/dist/schema/call/arbitration.d.ts +5 -4
  209. package/dist/schema/call/arbitration.js +1 -1
  210. package/dist/schema/call/base.d.ts +17 -1
  211. package/dist/schema/call/base.js +1 -1
  212. package/dist/schema/call/bridge.d.ts +11 -4
  213. package/dist/schema/call/contact.d.ts +2 -1
  214. package/dist/schema/call/contact.js +1 -1
  215. package/dist/schema/call/demand.d.ts +2 -1
  216. package/dist/schema/call/demand.js +1 -1
  217. package/dist/schema/call/guard.d.ts +6 -3
  218. package/dist/schema/call/handler.d.ts +0 -3
  219. package/dist/schema/call/handler.js +1 -1
  220. package/dist/schema/call/machine.d.ts +4 -2
  221. package/dist/schema/call/machine.js +1 -1
  222. package/dist/schema/call/order.d.ts +2 -1
  223. package/dist/schema/call/payment.d.ts +2 -1
  224. package/dist/schema/call/permission.d.ts +2 -1
  225. package/dist/schema/call/personal.d.ts +39 -1
  226. package/dist/schema/call/personal.js +1 -1
  227. package/dist/schema/call/progress.d.ts +2 -1
  228. package/dist/schema/call/proof.d.ts +4 -2
  229. package/dist/schema/call/repository.d.ts +6 -5
  230. package/dist/schema/call/repository.js +1 -1
  231. package/dist/schema/call/reward.d.ts +2 -13
  232. package/dist/schema/call/reward.js +1 -1
  233. package/dist/schema/call/semantic.d.ts +3 -2
  234. package/dist/schema/call/semantic.js +1 -1
  235. package/dist/schema/call/service.d.ts +2 -1
  236. package/dist/schema/call/service.js +1 -1
  237. package/dist/schema/call/treasury.d.ts +2 -1
  238. package/dist/schema/common/index.js +1 -1
  239. package/dist/schema/evaluation/index.d.ts +146 -0
  240. package/dist/schema/evaluation/index.js +1 -1
  241. package/dist/schema/goal/index.d.ts +317 -0
  242. package/dist/schema/goal/index.js +1 -0
  243. package/dist/schema/goal/planning.d.ts +465 -0
  244. package/dist/schema/goal/planning.js +1 -0
  245. package/dist/schema/index.d.ts +2 -2
  246. package/dist/schema/index.js +1 -1
  247. package/dist/schema/industry-pack/index.d.ts +265 -1
  248. package/dist/schema/industry-pack/index.js +1 -1
  249. package/dist/schema/industry-pack/modes.d.ts +268 -0
  250. package/dist/schema/industry-pack/modes.js +1 -0
  251. package/dist/schema/intent-radar/index.d.ts +30 -3
  252. package/dist/schema/intent-radar/index.js +1 -1
  253. package/dist/schema/local/index.d.ts +9 -0
  254. package/dist/schema/local/index.js +1 -1
  255. package/dist/schema/messenger/index.d.ts +54 -0
  256. package/dist/schema/messenger/index.js +1 -1
  257. package/dist/schema/operations.d.ts +1147 -94
  258. package/dist/schema/operations.js +1 -1
  259. package/dist/schema/permission/index.d.ts +18 -0
  260. package/dist/schema/permission/index.js +1 -1
  261. package/dist/schema/persona/index.d.ts +40 -0
  262. package/dist/schema/persona/index.js +1 -1
  263. package/dist/schema/query/bi.d.ts +783 -0
  264. package/dist/schema/query/bi.js +1 -0
  265. package/dist/schema/query/index.d.ts +1471 -208
  266. package/dist/schema/query/index.js +1 -1
  267. package/dist/schema/schema-version.js +1 -1
  268. package/dist/schema/trust/index.d.ts +17 -0
  269. package/dist/schema/trust/index.js +1 -1
  270. package/dist/schema/utils/skills-recommendation.d.ts +0 -1
  271. package/dist/schema/utils/skills-recommendation.js +1 -1
  272. package/dist/schema/watch/index.d.ts +204 -0
  273. package/dist/schema/watch/index.js +1 -0
  274. package/dist/schema/workflow/index.d.ts +301 -0
  275. package/dist/schema/workflow/index.js +1 -1
  276. package/dist/schema-query-impl/index.js +1 -1
  277. package/dist/schemas/account_operation.output.json +8 -5
  278. package/dist/schemas/account_operation.schema.json +2 -2
  279. package/dist/schemas/bridge_operation.output.json +7 -4
  280. package/dist/schemas/bridge_operation.schema.json +37 -21
  281. package/dist/schemas/config_operation.output.json +1 -1
  282. package/dist/schemas/config_operation.schema.json +1 -1
  283. package/dist/schemas/evaluation_operation.output.json +276 -1
  284. package/dist/schemas/evaluation_operation.schema.json +307 -0
  285. package/dist/schemas/goal_operation.schema.json +1016 -0
  286. package/dist/schemas/guard2file.schema.json +9 -5
  287. package/dist/schemas/index.json +22 -11
  288. package/dist/schemas/industry_pack_operation.output.json +898 -0
  289. package/dist/schemas/industry_pack_operation.schema.json +217 -2
  290. package/dist/schemas/intent_radar.output.json +20 -2
  291. package/dist/schemas/intent_radar.schema.json +10 -1
  292. package/dist/schemas/local_info_operation.output.json +7 -4
  293. package/dist/schemas/local_mark_operation.output.json +7 -4
  294. package/dist/schemas/machineNode2file.schema.json +9 -5
  295. package/dist/schemas/messenger_operation.output.json +107 -4
  296. package/dist/schemas/messenger_operation.schema.json +98 -0
  297. package/dist/schemas/monitor_events.output.json +1435 -0
  298. package/dist/schemas/monitor_events.schema.json +85 -0
  299. package/dist/schemas/monitor_subscription.output.json +1462 -0
  300. package/dist/schemas/monitor_subscription.schema.json +327 -0
  301. package/dist/schemas/onchain_events.output.json +241 -18
  302. package/dist/schemas/onchain_events.schema.json +20 -0
  303. package/dist/schemas/onchain_operations.output.json +12 -7
  304. package/dist/schemas/onchain_operations.schema.json +570 -478
  305. package/dist/schemas/onchain_operations_allocation.schema.json +14 -10
  306. package/dist/schemas/onchain_operations_arbitration.schema.json +17 -12
  307. package/dist/schemas/onchain_operations_contact.schema.json +13 -9
  308. package/dist/schemas/onchain_operations_demand.schema.json +13 -9
  309. package/dist/schemas/onchain_operations_gen_passport.schema.json +9 -5
  310. package/dist/schemas/onchain_operations_gen_proof.schema.json +9 -5
  311. package/dist/schemas/onchain_operations_guard.schema.json +9 -5
  312. package/dist/schemas/onchain_operations_machine.schema.json +17 -13
  313. package/dist/schemas/onchain_operations_order.schema.json +12 -8
  314. package/dist/schemas/onchain_operations_payment.schema.json +10 -6
  315. package/dist/schemas/onchain_operations_permission.schema.json +12 -8
  316. package/dist/schemas/onchain_operations_personal.schema.json +47 -5
  317. package/dist/schemas/onchain_operations_progress.schema.json +12 -8
  318. package/dist/schemas/onchain_operations_proof.schema.json +9 -5
  319. package/dist/schemas/onchain_operations_repository.schema.json +295 -310
  320. package/dist/schemas/onchain_operations_reward.schema.json +17 -13
  321. package/dist/schemas/onchain_operations_service.schema.json +21 -17
  322. package/dist/schemas/onchain_operations_treasury.schema.json +17 -13
  323. package/dist/schemas/onchain_table_data.output.json +4125 -239
  324. package/dist/schemas/onchain_table_data.schema.json +326 -15
  325. package/dist/schemas/permission_operation.output.json +32 -0
  326. package/dist/schemas/permission_operation.schema.json +6 -2
  327. package/dist/schemas/persona_operation.output.json +145 -0
  328. package/dist/schemas/persona_operation.schema.json +28 -2
  329. package/dist/schemas/query_toolkit.output.json +3384 -2040
  330. package/dist/schemas/query_toolkit.schema.json +548 -9
  331. package/dist/schemas/trust_score.output.json +38 -0
  332. package/dist/schemas/trust_score.schema.json +32 -0
  333. package/dist/schemas/watch_operation.output.json +827 -0
  334. package/dist/schemas/watch_operation.schema.json +145 -0
  335. package/dist/schemas/workflow_operation.output.json +263 -5
  336. package/dist/schemas/workflow_operation.schema.json +599 -4
  337. package/dist/task/ProcessStore.d.ts +81 -0
  338. package/dist/task/ProcessStore.js +1 -0
  339. package/dist/task/playbook.d.ts +11 -0
  340. package/dist/task/playbook.js +1 -0
  341. package/dist/task/stage-gate.d.ts +22 -0
  342. package/dist/task/stage-gate.js +1 -0
  343. package/dist/{project → task}/substep-trace.d.ts +6 -45
  344. package/dist/task/types.d.ts +120 -0
  345. package/dist/task/types.js +1 -0
  346. package/dist/tools/handlers/config.js +1 -1
  347. package/dist/tools/handlers/evaluation.js +1 -1
  348. package/dist/tools/handlers/goal.d.ts +4 -0
  349. package/dist/tools/handlers/goal.js +1 -0
  350. package/dist/tools/handlers/industry-pack.js +1 -1
  351. package/dist/tools/handlers/intent-radar.js +1 -1
  352. package/dist/tools/handlers/messenger.js +1 -1
  353. package/dist/tools/handlers/monitor.d.ts +26 -0
  354. package/dist/tools/handlers/monitor.js +1 -0
  355. package/dist/tools/handlers/network.d.ts +1 -0
  356. package/dist/tools/handlers/network.js +1 -0
  357. package/dist/tools/handlers/onchain.js +1 -1
  358. package/dist/tools/handlers/permission.js +1 -1
  359. package/dist/tools/handlers/persona.js +1 -1
  360. package/dist/tools/handlers/query.js +1 -1
  361. package/dist/tools/handlers/trust.d.ts +14 -0
  362. package/dist/tools/handlers/trust.js +1 -1
  363. package/dist/tools/handlers/watch.d.ts +2 -0
  364. package/dist/tools/handlers/watch.js +1 -0
  365. package/dist/tools/handlers/workflow.js +1 -1
  366. package/dist/tools/index.d.ts +4 -0
  367. package/dist/tools/index.js +1 -1
  368. package/dist/tools/shared.js +1 -1
  369. package/dist/tools/wrap.js +1 -1
  370. package/package.json +5 -4
  371. package/dist/customer/post-purchase.d.ts +0 -44
  372. package/dist/customer/post-purchase.js +0 -1
  373. package/dist/harness/checkpoint.d.ts +0 -8
  374. package/dist/harness/checkpoint.js +0 -1
  375. package/dist/knowledge/deployment-scanner.d.ts +0 -66
  376. package/dist/knowledge/deployment-scanner.js +0 -1
  377. package/dist/project/business-puzzle.js +0 -1
  378. package/dist/project/context-assembly.js +0 -1
  379. package/dist/project/deployment-bridge.d.ts +0 -5
  380. package/dist/project/deployment-bridge.js +0 -1
  381. package/dist/project/deployment-doc.d.ts +0 -190
  382. package/dist/project/deployment-doc.js +0 -1
  383. package/dist/project/edit-planner.d.ts +0 -123
  384. package/dist/project/edit-planner.js +0 -1
  385. package/dist/project/evaluation-fix.spec.d.ts +0 -1
  386. package/dist/project/evaluation-fix.spec.js +0 -1
  387. package/dist/project/evaluation.d.ts +0 -127
  388. package/dist/project/evaluation.js +0 -1
  389. package/dist/project/graph-builder.d.ts +0 -51
  390. package/dist/project/graph-builder.js +0 -1
  391. package/dist/project/graph.d.ts +0 -70
  392. package/dist/project/graph.js +0 -1
  393. package/dist/project/handlers.d.ts +0 -540
  394. package/dist/project/handlers.js +0 -1
  395. package/dist/project/index.d.ts +0 -91
  396. package/dist/project/index.js +0 -1
  397. package/dist/project/intent-analyzer.js +0 -1
  398. package/dist/project/machine-nodes.d.ts +0 -2
  399. package/dist/project/machine-nodes.js +0 -1
  400. package/dist/project/merchant-guide.js +0 -1
  401. package/dist/project/migration.d.ts +0 -22
  402. package/dist/project/migration.js +0 -1
  403. package/dist/project/mode-actions.js +0 -1
  404. package/dist/project/namespace.d.ts +0 -72
  405. package/dist/project/namespace.js +0 -1
  406. package/dist/project/participation-radar.js +0 -1
  407. package/dist/project/pipeline-actions.js +0 -1
  408. package/dist/project/project-store.d.ts +0 -110
  409. package/dist/project/project-store.js +0 -1
  410. package/dist/project/query.d.ts +0 -43
  411. package/dist/project/query.js +0 -1
  412. package/dist/project/risk-aggregator.js +0 -1
  413. package/dist/project/rollback-policy.d.ts +0 -45
  414. package/dist/project/rollback-policy.js +0 -1
  415. package/dist/project/semantic-assembler.d.ts +0 -93
  416. package/dist/project/semantic-assembler.js +0 -1
  417. package/dist/project/stage-gate.d.ts +0 -53
  418. package/dist/project/stage-gate.js +0 -1
  419. package/dist/project/task-tracker.d.ts +0 -26
  420. package/dist/project/task-tracker.js +0 -1
  421. package/dist/schema/project/index.d.ts +0 -2015
  422. package/dist/schema/project/index.js +0 -1
  423. package/dist/schema/task-status.d.ts +0 -62
  424. package/dist/schema/task-status.js +0 -1
  425. package/dist/schemas/project_operation.output.json +0 -7877
  426. package/dist/schemas/project_operation.schema.json +0 -1133
  427. package/dist/schemas/query_task_status.output.json +0 -211
  428. package/dist/schemas/query_task_status.schema.json +0 -18
  429. package/dist/tools/handlers/project.d.ts +0 -2
  430. package/dist/tools/handlers/project.js +0 -1
  431. package/dist/tools/handlers/task-status.d.ts +0 -2
  432. package/dist/tools/handlers/task-status.js +0 -1
  433. /package/dist/{project → playbooks/service-build}/business-puzzle.d.ts +0 -0
  434. /package/dist/{project → playbooks/service-build}/game-theory.js +0 -0
  435. /package/dist/{project → playbooks/service-build}/reverse-mapping.d.ts +0 -0
  436. /package/dist/{project → playbooks/service-build}/reverse-mapping.js +0 -0
  437. /package/dist/{project → playbooks/service-build}/risk-aggregator.d.ts +0 -0
  438. /package/dist/{project → playbooks/service-build}/semantic-graph.js +0 -0
  439. /package/dist/{project → playbooks/service-build}/workflow-design-assessment.d.ts +0 -0
  440. /package/dist/{project → playbooks/service-build}/workflow-design-assessment.js +0 -0
  441. /package/dist/{project → task}/substep-trace.js +0 -0
@@ -1,5 +1,5 @@
1
1
  import type { ObjectPuzzleEntry } from "./business-puzzle.js";
2
- import type { SubstepRecord, SubstepEdge } from "./substep-trace.js";
2
+ import type { SubstepRecord, SubstepEdge } from "../../task/types.js";
3
3
  export interface AnalyzeIntentInput {
4
4
  intent?: string;
5
5
  project_description?: string;
@@ -49,7 +49,7 @@ export declare function handleAggregateRisks(v: AggregateRisksInput): {
49
49
  industry: string;
50
50
  overall_completeness: "complete" | "partial" | "empty";
51
51
  } | undefined;
52
- safety_findings?: import("../knowledge/safety-rules.js").SafetyRiskItem[] | undefined;
52
+ safety_findings?: import("../../knowledge/safety-rules.js").SafetyRiskItem[] | undefined;
53
53
  namespace: {
54
54
  prefix: string;
55
55
  version: string;
@@ -88,14 +88,14 @@ export declare function handleTraceSubsteps(v: TraceSubstepsInput): {
88
88
  prefix: string;
89
89
  version: string;
90
90
  };
91
- network: import("./substep-trace.js").SubstepNetwork;
91
+ network: string;
92
92
  coherent: boolean;
93
- dangling_inputs: import("./substep-trace.js").DanglingInput[];
94
- circular_refs: import("./substep-trace.js").CircularRef[];
95
- missing_outputs: import("./substep-trace.js").MissingOutput[];
96
- cross_step_breaks: import("./substep-trace.js").CrossStepBreak[];
97
- step_details: import("./substep-trace.js").StepTraceDetail[];
93
+ dangling_inputs: import("../../task/substep-trace.js").DanglingInput[];
94
+ circular_refs: import("../../task/substep-trace.js").CircularRef[];
95
+ missing_outputs: import("../../task/substep-trace.js").MissingOutput[];
96
+ cross_step_breaks: import("../../task/substep-trace.js").CrossStepBreak[];
97
+ step_details: import("../../task/substep-trace.js").StepTraceDetail[];
98
98
  topological_order: string[];
99
- d10_check: import("./substep-trace.js").D10CheckResult;
99
+ d10_check: import("../../task/substep-trace.js").D10CheckResult;
100
100
  action: "trace_substeps";
101
101
  };
@@ -0,0 +1 @@
1
+ import{analyzeBusinessIntent}from'./business-puzzle.js';import{aggregateProjectRisks}from'./risk-aggregator.js';import{traceSubsteps}from'../../task/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':'puzzle','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\x20one\x20stable\x20prefix\x20per\x20build\x20so\x20findings\x20map\x20to\x20the\x20service-build\x20stage\x20cache\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':'risk','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':'substeps','trace_coherent':c['coherent'],'trace_can_proceed':c['coherent']}),{'action':'trace_substeps',...c};}
@@ -0,0 +1,6 @@
1
+ export declare const SERVICE_BUILD_STAGES: string[];
2
+ export declare function serviceBuildRootDir(): string;
3
+ export declare function serviceBuildDir(prefix: string, version: string): string;
4
+ export declare function openServiceBuildProcessDir(prefix: string, version: string): string;
5
+ export declare function ensureServiceBuildProcess(prefix: string, version: string, mcpVersion: string): string;
6
+ export declare function openServiceBuildProcessDirById(processId: string): string;
@@ -0,0 +1 @@
1
+ import{existsSync}from'fs';import{join}from'path';import{getWowMcpDir}from'@wowok/wowok';import{getPlaybook}from'../../task/playbook.js';import{PROCESS_SCHEMA_VERSION}from'../../task/types.js';import{initProcess}from'../../task/ProcessStore.js';export const SERVICE_BUILD_STAGES=getPlaybook('service-build')?.['stages']??['puzzle','risk','substeps'];export function serviceBuildRootDir(){return join(getWowMcpDir(),'projects');}export function serviceBuildDir(a,b){return join(serviceBuildRootDir(),a+'_'+b);}export function openServiceBuildProcessDir(a,b){return serviceBuildDir(a,b);}export function ensureServiceBuildProcess(a,b,c){const d=openServiceBuildProcessDir(a,b);if(!existsSync(join(d,'manifest.json'))){const e=new Date()['toISOString']();initProcess(d,{'schema_version':PROCESS_SCHEMA_VERSION,'mcp_version':c,'process_id':a+'_'+b,'playbook':'service-build','title':a,'objects':[],'created_at':e,'updated_at':e,'archived':![]},SERVICE_BUILD_STAGES);}return d;}export function openServiceBuildProcessDirById(a){return join(serviceBuildRootDir(),a);}
@@ -0,0 +1 @@
1
+ import{assessServiceRisks,assessMachineRisks,assessAllocationRisks,assessTreasuryRisks,assessArbitrationRisks,assessRewardRisks,assessProgressRisks,assessOrderRisks,assessGuardRisks,checkContactRisks,checkResourceRisks,checkPaymentRisks,checkArbRisks,checkPersonalRisks,checkUtilRisks,checkRegistrarRisks,checkBridgeRisks,checkProofRisks,checkRepositoryRisks,checkDemandRisks}from'../../knowledge/index.js';import{assessPermissionRisks}from'../../knowledge/permission-risk.js';const SEVERITY_ORDER={'CRITICAL':0x0,'HIGH':0x1,'MEDIUM':0x2,'LOW':0x3,'INFO':0x4},ALL_SEVERITIES=['CRITICAL','HIGH','MEDIUM','LOW','INFO'];function normalizeSeverity(a){if(typeof a!=='string')return'INFO';const b=a['toUpperCase']();return ALL_SEVERITIES['includes'](b)?b:'INFO';}function extractRiskId(a,b){if(!a||typeof a!=='object')return b;return String(a['id']??a['risk_rule_id']??a['rule_id']??b);}function extractRiskMessage(a){if(!a||typeof a!=='object')return'(no\x20message)';return String(a['title']??a['message']??a['description']??a['trigger']??'(no\x20message)');}function extractFixSuggestion(a){if(!a||typeof a!=='object')return'';return String(a['mitigation']??a['fix_suggestion']??a['suggestion']??'');}function toAggregatedRisk(a,b,c){return{'risk_rule_id':extractRiskId(a,'R-'+b['toUpperCase']()+'-?'),'object_type':b,'entry_id':c,'severity':normalizeSeverity(a?.['level']??a?.['severity']),'message':extractRiskMessage(a),'fix_suggestion':extractFixSuggestion(a),'details':a?.['evidence']?{'field_path':String(a['evidence'])}:undefined};}function isL1L2Object(a){return['service','machine','allocation','treasury','arb','reward','progress','order','permission','guard']['includes'](a);}function buildL1L2Dispatch(){const a=(b,c)=>{try{const d=b??{},e=c(d);if(Array['isArray'](e))return e;if(e&&typeof e==='object'){const f=e['risks'];if(Array['isArray'](f))return f;}return[];}catch{return[];}};return{'service':{'assess':b=>a(b,assessServiceRisks)},'machine':{'assess':b=>a(b,c=>assessMachineRisks(c,{}))},'allocation':{'assess':b=>a(b,assessAllocationRisks)},'treasury':{'assess':b=>a(b,assessTreasuryRisks)},'arb':{'assess':b=>a(b,assessArbitrationRisks)},'reward':{'assess':b=>a(b,c=>assessRewardRisks(c))},'progress':{'assess':b=>a(b,c=>assessProgressRisks(c))},'order':{'assess':b=>a(b,assessOrderRisks)},'permission':{'assess':b=>a(b,assessPermissionRisks)},'guard':{'assess':b=>{try{const c=assessGuardRisks({'table':[],'root':undefined});if(Array['isArray'](c))return c;if(c&&typeof c==='object'){const d=c['risks'];if(Array['isArray'](d))return d;}return[];}catch{return[];}}}};}function buildL3Dispatch(){const a=(b,c)=>{try{const d=b??{},e=c(d);if(Array['isArray'](e))return e;return[];}catch{return[];}};return{'contact':{'check':b=>a(b,checkContactRisks)},'resource':{'check':b=>a(b,checkResourceRisks)},'payment':{'check':b=>a(b,checkPaymentRisks)},'arb':{'check':b=>a(b,checkArbRisks)},'personal':{'check':b=>a(b,checkPersonalRisks)},'util':{'check':b=>a(b,checkUtilRisks)},'registrar':{'check':b=>a(b,checkRegistrarRisks)},'bridge':{'check':b=>a(b,checkBridgeRisks)},'proof':{'check':b=>a(b,checkProofRisks)},'repository':{'check':b=>a(b,checkRepositoryRisks)},'demand':{'check':b=>a(b,checkDemandRisks)}};}export function aggregateProjectRisks(a){const b=[];(!a||!a['project_prefix'])&&b['push']('input.project_prefix\x20is\x20empty');const c=a?.['puzzles']??{},e=[],f=buildL1L2Dispatch(),g=buildL3Dispatch();for(const [m,n]of Object['entries'](c)){const o=m,p=(a['project_prefix']??'project')+'_'+o,q=n?.['puzzle'];if(isL1L2Object(o)){const s=f[o];if(!s){b['push']('No\x20L1/L2\x20risk\x20dispatcher\x20for\x20\x27'+o+'\x27');continue;}const t=s['assess'](q);for(const u of t){e['push'](toAggregatedRisk(u,o,p));}}else{const v=g[o];if(!v){b['push']('No\x20L3\x20risk\x20dispatcher\x20for\x20\x27'+o+'\x27');continue;}const w=v['check'](q);for(const x of w){e['push'](toAggregatedRisk(x,o,p));}}}sortFindings(e);const h=countBySeverity(e),i=a['severity_threshold']??'HIGH',j=determineStatus(h,i,a['user_confirmed_high_risks']??[],e);let k;j==='RISK_PENDING_CONFIRM'&&(k=e['filter'](y=>y['severity']==='HIGH')['filter'](y=>!(a['user_confirmed_high_risks']??[])['includes'](y['risk_rule_id']))['map'](y=>({'risk_rule_id':y['risk_rule_id'],'description':y['message'],'fix_suggestion':y['fix_suggestion'],'object_type':y['object_type'],'entry_id':y['entry_id']})));const l={};for(const y of e){const z=y['object_type'];!l[z]&&(l[z]=[]),l[z]['push']({'risk_rule_id':y['risk_rule_id'],'severity':y['severity'],'message':y['message'],'fix_suggestion':y['fix_suggestion'],'entry_id':y['entry_id']});}return{'namespace':{'prefix':a['project_prefix']??'','version':a['version']??'','industry':a['industry']??'general'},'findings':e,'severity_summary':h,'status':j,'pending_confirmations':k,'calibrated_at':Date['now'](),'fix_suggestions_grouped':l,'warnings':b};}export function sortFindings(a){return a['sort']((c,d)=>{const e=SEVERITY_ORDER[c['severity']]-SEVERITY_ORDER[d['severity']];if(e!==0x0)return e;if(c['object_type']!==d['object_type'])return c['object_type']['localeCompare'](d['object_type']);return c['risk_rule_id']['localeCompare'](d['risk_rule_id']);});}export function countBySeverity(a){const b={'CRITICAL':0x0,'HIGH':0x0,'MEDIUM':0x0,'LOW':0x0,'INFO':0x0};for(const c of a){b[c['severity']]++;}return b;}export function determineStatus(a,b,c,d){if(a['CRITICAL']>0x0)return'RISK_BLOCKED';const e=SEVERITY_ORDER[b];if(a['HIGH']>0x0&&e<=SEVERITY_ORDER['HIGH']){const f=d['filter'](g=>g['severity']==='HIGH'&&!c['includes'](g['risk_rule_id']));if(f['length']>0x0)return'RISK_PENDING_CONFIRM';}if(a['MEDIUM']>0x0&&e<=SEVERITY_ORDER['MEDIUM'])return'RISK_BLOCKED';if(a['LOW']>0x0&&e<=SEVERITY_ORDER['LOW'])return'RISK_BLOCKED';return'RISK_PASSED';}export function getCriticalRisks(a){if(!a?.['findings'])return[];return a['findings']['filter'](b=>b['severity']==='CRITICAL');}export function summarizeRiskReport(a){if(!a)return'(no\x20result)';const b=[];b['push']('#\x20Risk\x20Aggregation\x20Report'),b['push'](''),b['push']('-\x20Project:\x20'+a['namespace']['prefix']+'_'+a['namespace']['version']),b['push']('-\x20Status:\x20'+a['status']),b['push']('-\x20Calibrated\x20at:\x20'+new Date(a['calibrated_at'])['toISOString']()),b['push'](''),b['push']('##\x20Severity\x20Summary'),b['push'](''),b['push']('|\x20Severity\x20|\x20Count\x20|'),b['push']('|----------|-------|');for(const c of ALL_SEVERITIES){b['push']('|\x20'+c+'\x20|\x20'+(a['severity_summary'][c]??0x0)+'\x20|');}b['push']('');if(a['findings']['length']===0x0)return b['push']('No\x20risks\x20found.'),b['join']('\x0a');b['push']('##\x20Findings\x20(sorted\x20by\x20severity)'),b['push']('');for(const d of a['findings']){b['push']('-\x20**['+d['severity']+']\x20'+d['risk_rule_id']+'**\x20('+d['object_type']+'\x20/\x20'+d['entry_id']+')'),b['push']('\x20\x20-\x20'+d['message']),d['fix_suggestion']&&b['push']('\x20\x20-\x20Fix:\x20'+d['fix_suggestion']);}if(a['warnings']['length']>0x0){b['push'](''),b['push']('##\x20Warnings');for(const e of a['warnings'])b['push']('-\x20'+e);}return b['join']('\x0a');}
@@ -1,7 +1,7 @@
1
1
  import type { ProjectObjectType } from "./namespace.js";
2
2
  import type { BusinessIntent } from "./intent-analyzer.js";
3
- import type { BusinessModule, BusinessModuleId } from "../extensions/business-modules.js";
4
- import type { GraphEdgeBase, GraphNodeBase } from "../graph/base.js";
3
+ import type { BusinessModule, BusinessModuleId } from "../../extensions/business-modules.js";
4
+ import type { GraphEdgeBase, GraphNodeBase } from "../../graph/base.js";
5
5
  export type ConfigValueType = "string" | "number" | "boolean" | "address_ref" | "guard_logic" | "enum";
6
6
  export interface ConfigValueBase {
7
7
  type: ConfigValueType;
@@ -0,0 +1,164 @@
1
+ import type { ServicePanoramaInput } from "../../schema/query/bi.js";
2
+ import { type BusinessReport } from "./reverse-mapping.js";
3
+ import { type SupplyChainGraph } from "../../knowledge/supply-chain.js";
4
+ type ProjectInput = ServicePanoramaInput;
5
+ export interface PanoramaSale {
6
+ name: string;
7
+ price: string | null;
8
+ price_display: string;
9
+ price_tip: string;
10
+ stock: string | null;
11
+ suspension: boolean;
12
+ wip: string;
13
+ wip_hash: string;
14
+ }
15
+ export interface PanoramaForward {
16
+ name: string;
17
+ weight: number;
18
+ guard: string | null;
19
+ retained_submission: number[] | null;
20
+ named_operator: string | null;
21
+ permission_index: number | null;
22
+ }
23
+ export interface PanoramaMachineEdge {
24
+ from: string;
25
+ to: string;
26
+ threshold: number;
27
+ forwards: PanoramaForward[];
28
+ }
29
+ export interface PanoramaMachineGraph {
30
+ address: string;
31
+ name: string | null;
32
+ description: string | null;
33
+ published: boolean | null;
34
+ paused: boolean | null;
35
+ node_count: number | null;
36
+ consensus_repositories: string[];
37
+ nodes: {
38
+ name: string;
39
+ description: string | null;
40
+ }[];
41
+ edges: PanoramaMachineEdge[];
42
+ }
43
+ export interface PanoramaGuardSummary {
44
+ address: string;
45
+ description: string | null;
46
+ rep: boolean | null;
47
+ table_entry_count: number;
48
+ submission_slot_count: number;
49
+ relies: string[];
50
+ relies_logic_and: boolean | null;
51
+ }
52
+ export interface PanoramaPermissionSummary {
53
+ address: string;
54
+ description: string | null;
55
+ builder: string | null;
56
+ owner: string | null;
57
+ owner_name: string | null;
58
+ admin_count: number;
59
+ entity_count: number | null;
60
+ perm_remark: {
61
+ index: string;
62
+ remark: string;
63
+ }[];
64
+ um: string | null;
65
+ tags: string[];
66
+ updated_timestamp_ms: string | null;
67
+ }
68
+ export interface PanoramaTrust {
69
+ trust_score: number;
70
+ trust_level: string;
71
+ trust_summary: string;
72
+ risk_score: number | null;
73
+ risk_level: string | null;
74
+ completeness: number | null;
75
+ }
76
+ export interface PanoramaRecentOrders {
77
+ count: number;
78
+ items: {
79
+ order: string;
80
+ time: number;
81
+ updated_ms: number | null;
82
+ amount: string;
83
+ amount_display: string;
84
+ amount_tip: string;
85
+ progress: string | null;
86
+ allocation: string | null;
87
+ disputes: string[];
88
+ agent: string[];
89
+ owner: string | null;
90
+ claimed_by: string | null;
91
+ required_info: string | null;
92
+ progress_next: string | null;
93
+ allocation_state: "none" | "pending" | "allocated";
94
+ bought: {
95
+ name: string;
96
+ price_display: string;
97
+ quantity: string;
98
+ wip_hash: string;
99
+ }[];
100
+ }[];
101
+ }
102
+ export interface ServicePanoramaResult {
103
+ action: "service_panorama";
104
+ network: string;
105
+ service: {
106
+ address: string;
107
+ name: string | null;
108
+ description: string;
109
+ location: string;
110
+ published: boolean;
111
+ paused: boolean;
112
+ paused_time: number | null;
113
+ setting_lock_duration: string | null;
114
+ customer_required: string[];
115
+ compensation_fund: string | null;
116
+ sales: PanoramaSale[];
117
+ machine: string | null;
118
+ buy_guard: string | null;
119
+ permission: string;
120
+ um: string | null;
121
+ arbitrations: string[];
122
+ rewards: string[];
123
+ repositories: string[];
124
+ order_allocators: {
125
+ description: string;
126
+ threshold: string | null;
127
+ allocators: {
128
+ guard: string;
129
+ sharing_count: number;
130
+ max: string | null;
131
+ }[];
132
+ } | null;
133
+ onchain_last_updated: {
134
+ timestamp_ms: string;
135
+ digest: string | null;
136
+ sender: string | null;
137
+ } | null;
138
+ tags: string[];
139
+ owner: string | null;
140
+ owner_name: string | null;
141
+ };
142
+ machine_graph: PanoramaMachineGraph | null;
143
+ buy_guard: PanoramaGuardSummary | null;
144
+ permission: PanoramaPermissionSummary | null;
145
+ allocator_guards: PanoramaGuardSummary[];
146
+ related: {
147
+ groups: {
148
+ type_label: string;
149
+ items: {
150
+ address: string;
151
+ type_label: string;
152
+ name: string | null;
153
+ time: number | null;
154
+ }[];
155
+ }[];
156
+ };
157
+ supply_chain: SupplyChainGraph | null;
158
+ trust: PanoramaTrust | null;
159
+ business_report: BusinessReport | null;
160
+ recent_orders: PanoramaRecentOrders | null;
161
+ data_gaps: string[];
162
+ }
163
+ export declare function handleServicePanorama(v: ProjectInput): Promise<ServicePanoramaResult>;
164
+ export {};
@@ -0,0 +1 @@
1
+ import{Config,LocalMark,query_serviceContext,query_object_last_updated,queryTableItem_ServiceOrders,query_affiliations,query_objects,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{generateBusinessReport}from'./reverse-mapping.js';import{resolveSupplyChainGraph}from'../../knowledge/supply-chain.js';import{formatChainValue}from'../../knowledge/fund-layer.js';import{buildMachineGraph}from'./machine-nodes.js';import{computeServiceTrustSummary}from'../../tools/handlers/trust.js';function balanceStr(a){if(a===null||a===undefined)return null;if(typeof a==='bigint')return a['toString']();return String(a);}function 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'];}return null;}function requireField(a,b){if(a===undefined||a===null)throw new Error('\x27'+b+'\x27\x20is\x20required\x20for\x20this\x20action');return a;}function summarizeGuard(a){if(!a)return null;const b=a,c=Array['isArray'](b['table'])?b['table']:[],d=c['filter'](e=>e?.['b_submission']===!![])['length'];return{'address':b['object']??'','description':b['description']??null,'rep':typeof b['rep']==='boolean'?b['rep']:null,'table_entry_count':c['length'],'submission_slot_count':d,'relies':Array['isArray'](b['relies'])?b['relies']['filter'](e=>typeof e==='string'):[],'relies_logic_and':typeof b['relies_logic_and']==='boolean'?b['relies_logic_and']:null};}function summarizePermission(a,b){if(!a)return null;const c=a,d=Array['isArray'](c['admin'])?c['admin']:[],e=d[0x0],f=typeof e==='string'?e:typeof e?.['account']==='string'?e['account']:c['builder']??null;return{'address':c['object']??'','description':c['description']??null,'builder':c['builder']??null,'owner':f,'owner_name':b?.['name']??null,'admin_count':d['length'],'entity_count':typeof c['entity_count']==='number'?c['entity_count']:null,'perm_remark':Array['isArray'](c['perm_remark'])?c['perm_remark']['map'](g=>({'index':String(g?.['index']??''),'remark':typeof g?.['remark']==='string'?g['remark']:''})):[],'um':c['um']??null,'tags':b?.['tags']??[],'updated_timestamp_ms':b?.['updated_at_ms']!=null?String(b['updated_at_ms']):null};}async function markOf(a){if(!a)return{'name':null,'tags':[],'updated_at_ms':null};try{const b=await LocalMark['Instance']()['get'](a);if(b)return{'name':b['name']??null,'tags':Array['isArray'](b['tags'])?b['tags']:[],'updated_at_ms':typeof b['updatedAt']==='number'?b['updatedAt']:null};}catch{}try{const c=await LocalMark['Instance']()['list']({'address':a}),d=c?.[0x0];if(d)return{'name':d['name']??null,'tags':Array['isArray'](d['tags'])?d['tags']:[],'updated_at_ms':typeof d['updatedAt']==='number'?d['updatedAt']:null};}catch{}return{'name':null,'tags':[],'updated_at_ms':null};}async function markOfMany(a){const b=[...new Set(a['filter'](e=>!!e))],c=await Promise['all'](b['map'](e=>markOf(e))),d=new Map();for(let e=0x0;e<b['length'];e++)d['set'](b[e],c[e]);return d;}export async function handleServicePanorama(b){const c=requireField(b['service_address'],'service_address'),d=b['context_network']??undefined;let f=d??await Config['Instance']()['network_get']();const h=[];let j=c;if(!/^0x[0-9a-fA-F]{32,64}$/['test'](c)){const R=await LocalMark['Instance']()['get_address'](c);if(!R)throw new Error('Cannot\x20resolve\x20service\x20\x27'+c+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.\x20'+'Pass\x20the\x200x\x20Service\x20object\x20address\x20directly\x20or\x20register\x20the\x20name\x20via\x20local_mark_operation.');j=R;}let k=await query_serviceContext({'service':j,'include_machine_nodes':!![],'network':f});if(!k?.['service']&&d){const S=await Config['Instance']()['network_get']();S&&S!==f&&(f=S,k=await query_serviceContext({'service':j,'include_machine_nodes':!![],'network':f}));}const l=k['service'];j=l['object']??j;const m=new Set(),n=T=>{if(T)m['add'](T);};n(j),n(l['machine']),n(l['permission']),n(l['um']);for(const T of l['arbitrations']??[])n(T);for(const U of l['rewards']??[])n(U);for(const V of l['repositories']??[])n(V);const p=k['permission'];if(p){const W=Array['isArray'](p['admin'])?p['admin']:[];W[0x0]&&n(typeof W[0x0]==='string'?W[0x0]:W[0x0]?.['account']);if(p['builder'])n(p['builder']);}const q=await markOfMany([...m]),u=q['get'](j)??{'name':null,'tags':[],'updated_at_ms':null},w=u['name'],x=X=>X?q['get'](X)??{'name':null,'tags':[],'updated_at_ms':null}:{'name':null,'tags':[],'updated_at_ms':null};let y=null;const z=k['machine'],A=k['machine_nodes']??[];if(z||A['length']>0x0){const {nodes:X,edges:Y}=buildMachineGraph(A);y={'address':z?.['object']??l['machine']??'','name':x(z?.['object']??l['machine'])['name'],'description':z?.['description']??null,'published':typeof z?.['bPublished']==='boolean'?z['bPublished']:null,'paused':typeof z?.['bPaused']==='boolean'?z['bPaused']:null,'node_count':typeof z?.['node_count']==='number'?z['node_count']:null,'consensus_repositories':Array['isArray'](z?.['consensus_repositories'])?z['consensus_repositories']:[],'nodes':X,'edges':Y};}let B=null;try{const Z=await query_object_last_updated({'object':j,'network':f});Z?.['timestamp_ms']&&(B={'timestamp_ms':Z['timestamp_ms'],'digest':Z['digest']??null,'sender':Z['sender']??null});}catch{h['push']('onchain_last_updated:\x20query\x20failed\x20(non-blocking)');}let C=null;try{C=await computeServiceTrustSummary({'service':j,'depth':'evaluate','network':f});}catch{h['push']('trust:\x20evaluation\x20failed\x20(non-blocking)');}let D=null;try{D=await resolveSupplyChainGraph(j,f);}catch{h['push']('supply_chain:\x20resolution\x20failed\x20(non-blocking)');}let E=null;try{const a0=[l];for(const a1 of Object['values'](k['referenced']??{})){if(a1&&a1['object']!==j)a0['push'](a1);}E=generateBusinessReport({'objects':a0,'machine_nodes':A['map'](a2=>({'name':a2['name']}))});}catch{h['push']('business_report:\x20generation\x20failed\x20(non-blocking)');}const F=l?.['type_raw']??l?.['type']??'',G=F['match'](/<(.+)>$/),H=G?G[0x1]:null,I=async a2=>{if(a2===null||a2===undefined||a2==='')return{'display':'','tip':''};if(!H)return{'display':a2,'tip':''};try{const a3=await formatChainValue(a2,H,f);if(a3['precision_known'])return{'display':a3['symbol']?a3['display']+'\x20'+a3['symbol']:a3['display'],'tip':a3['text']};return{'display':a2,'tip':''};}catch{return{'display':a2,'tip':''};}};let J=null;try{const a2=await queryTableItem_ServiceOrders({'address':j,'no_cache':!![],'network':f}),a3=Array['isArray'](a2?.['items'])?a2['items']:[],a4=a3['map'](ab=>typeof ab?.['who']==='string'?ab['who']:'')['filter'](ab=>ab!==''),a5=new Map();try{if(a4['length']>0x0){const ab=await query_objects({'objects':a4,'network':f});for(const ac of ab?.['objects']??[]){ac&&ac['type']===ObjectType['Order']&&a5['set'](ac['object'],ac);}}}catch{h['push']('recent_orders:\x20order\x20details\x20unavailable\x20(non-blocking)');}const a6=new Map(),a7=new Map(),a8=new Map();try{const ad=new Set();for(const ae of a5['values']()){if(ae?.['progress'])ad['add'](ae['progress']);if(ae?.['allocation'])ad['add'](ae['allocation']);}if(ad['size']>0x0){const af=await query_objects({'objects':Array['from'](ad),'network':f});for(const ag of af?.['objects']??[]){if(!ag?.['object'])continue;if(ag['type']===ObjectType['Progress']){const ah=ag?.['current'];a6['set'](ag['object'],typeof ah==='string'&&ah!==''?ah:null),a7['set'](ag['object'],Number(ag?.['current_time'])||null);}else{if(ag['type']===ObjectType['Allocation']){const ai=Number(ag?.['balance']??0x0);a8['set'](ag['object'],Number['isFinite'](ai)&&ai===0x0?'allocated':'pending');}}}}}catch{h['push']('recent_orders:\x20progress/allocation\x20details\x20unavailable\x20(non-blocking)');}const a9=new Map();try{const aj=Array['from'](new Set(a3['map'](al=>typeof al?.['who']==='string'?al['who']:'')['filter'](Boolean))),ak=await Promise['allSettled'](aj['map'](al=>query_object_last_updated({'object':al,'network':f})));for(let al=0x0;al<aj['length'];al++){const am=ak[al];a9['set'](aj[al],am['status']==='fulfilled'&&am['value']?.['timestamp_ms']?Number(am['value']['timestamp_ms'])||null:null);}}catch{h['push']('recent_orders:\x20order\x20updated\x20times\x20unavailable\x20(non-blocking)');}const aa=await Promise['all'](a3['map'](async an=>{const ao=typeof an?.['who']==='string'?an['who']:'',ap=a5['get'](ao),aq=ap?.['amount']!==null&&ap?.['amount']!==undefined?String(ap['amount']):'',ar=await I(aq);return{'order':ao,'time':typeof an?.['time']==='number'?an['time']:0x0,'updated_ms':a9['get'](ao)??null,'amount':aq,'amount_display':ar['display'],'amount_tip':ar['tip'],'progress':ap?.['progress']??null,'allocation':ap?.['allocation']??null,'disputes':Array['isArray'](ap?.['dispute'])?ap['dispute']:[],'agent':Array['isArray'](ap?.['agent'])?ap['agent']:[],'owner':ownerAddr(ap?.['builder']??ap?.['owner']),'claimed_by':ap?.['claimed_by']??null,'required_info':ap?.['required_info']??null,'progress_next':ap?.['progress']?a6['get'](ap['progress'])??null:null,'progress_since':ap?.['progress']?a7['get'](ap['progress'])??null:null,'allocation_state':ap?.['allocation']?a8['get'](ap['allocation'])??'pending':'none','bought':await Promise['all']((Array['isArray'](ap?.['items'])?ap['items']:[])['map'](async as=>({'name':String(as?.['name']??''),'price_display':(await I(as?.['price']!==null&&as?.['price']!==undefined?String(as['price']):'0'))['display'],'quantity':String(as?.['quantity']??'0'),'wip_hash':String(as?.['wip_hash']??'')})))};}));J={'count':a3['length'],'items':aa['filter'](an=>an['order']!=='')['slice'](-0x14)['reverse']()};}catch{h['push']('recent_orders:\x20reverse-index\x20query\x20failed\x20(non-blocking)');}const K=[];try{const an=await query_affiliations({'address':j,'no_cache':!![],'network':f}),ao=new Set(),ap=new Map();for(const ar of an?.['entries']??[]){const as=typeof ar?.['who']==='string'?ar['who']:'';if(!as||ao['has'](as))continue;ao['add'](as);const at=objectTypeFromAddress(as);if(!at)continue;if(at===ObjectType['Order'])continue;const au=String(at);let av=ap['get'](au);!av&&(av=[],ap['set'](au,av)),av['push']({'address':as,'type_label':au,'name':x(as)['name'],'time':typeof ar?.['time']==='number'?ar['time']:null});}const aq=['Progress','Allocation','Payment','Guard'];for(const aw of aq){const ax=ap['get'](aw);ax&&ax['length']>0x0&&(K['push']({'type_label':aw,'items':ax}),ap['delete'](aw));}for(const [ay,az]of ap){if(az['length']>0x0)K['push']({'type_label':ay,'items':az});}}catch{h['push']('related:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}const L=[];for(const aA of k['allocator_guards']??[]){const aB=summarizeGuard(aA);if(aB)L['push'](aB);}const M=[];for(const aC of Array['isArray'](l['sales'])?l['sales']:[]){const aD=balanceStr(aC?.['price']),aE=await I(aD);M['push']({'name':typeof aC?.['name']==='string'?aC['name']:'','price':aD,'price_display':aE['display'],'price_tip':aE['tip'],'stock':balanceStr(aC?.['stock']),'suspension':aC?.['suspension']===!![],'wip':typeof aC?.['wip']==='string'?aC['wip']:'','wip_hash':typeof aC?.['wip_hash']==='string'?aC['wip_hash']:''});}const N=l['order_allocators']?{'description':l['order_allocators']['description']??'','threshold':balanceStr(l['order_allocators']['threshold']),'allocators':(l['order_allocators']['allocators']??[])['map'](aF=>({'guard':aF['guard'],'sharing_count':Array['isArray'](aF['sharing'])?aF['sharing']['length']:0x0,'max':balanceStr(aF['max']??null)}))}:null,O=summarizePermission(k['permission'],x(l['permission'])),P=O?.['owner']??B?.['sender']??null,Q=P?await markOf(P):null;return{'action':'service_panorama','network':f,'service':{'address':j,'name':w,'description':l['description']??'','location':l['location']??'','published':l['bPublished']===!![],'paused':l['bPaused']===!![],'paused_time':typeof l['paused_time']==='number'?l['paused_time']:null,'setting_lock_duration':balanceStr(l['setting_lock_duration']),'customer_required':Array['isArray'](l['customer_required'])?l['customer_required']:[],'compensation_fund':balanceStr(l['compensation_fund']),'sales':M,'machine':l['machine']??null,'buy_guard':l['buy_guard']??null,'permission':l['permission']??'','um':l['um']??null,'arbitrations':Array['isArray'](l['arbitrations'])?l['arbitrations']:[],'rewards':Array['isArray'](l['rewards'])?l['rewards']:[],'repositories':Array['isArray'](l['repositories'])?l['repositories']:[],'order_allocators':N,'onchain_last_updated':B,'tags':u['tags']??[],'owner':P,'owner_name':Q?.['name']??null},'machine_graph':y,'buy_guard':summarizeGuard(k['buy_guard']),'permission':O,'allocator_guards':L,'related':{'groups':K},'supply_chain':D,'trust':C,'business_report':E,'recent_orders':J,'data_gaps':h};}
@@ -0,0 +1,6 @@
1
+ import type { ArbPanoramaResult } from "../playbooks/service-build/object-panorama.js";
2
+ import type { ReviewPack } from "./types.js";
3
+ export declare function arbTokenOf(typeRaw: string | null): string | null;
4
+ export declare function fmtArbMoney(raw: string | number | null | undefined, typeRaw: string | null): string | null;
5
+ export declare function arbStatusLabel(status: string | null): string;
6
+ export declare function assembleArbReview(pano: ArbPanoramaResult): ReviewPack;
@@ -0,0 +1 @@
1
+ import{groupRelated}from'./order.js';export function arbTokenOf(a){if(!a)return null;const b=a['match'](/<([0-9a-zA-Z_:]+)>\s*$/),c=b?.[0x1]?.['split']('::')['pop']()??'';return c||null;}const TOKEN_DECIMALS={'WOW':0x9};export function fmtArbMoney(a,c){if(a===null||a===undefined||a==='')return null;const d=typeof a==='number'?Math['trunc'](a):Number(a['trim']());if(!Number['isFinite'](d)||d<0x0)return null;const e=arbTokenOf(c)??'WOW',f=TOKEN_DECIMALS[e['toUpperCase']()]??0x9;try{const g=BigInt(d),h=0xan**BigInt(f),i=g/h,j=(g%h)['toString']()['padStart'](f,'0')['slice'](0x0,0x4);return i['toString']()+'.'+j+'\x20'+e;}catch{return d+'\x20'+e;}}export function arbStatusLabel(a){return(a??'')['replace'](/_/g,'\x20')['trim']()||'--';}const ARB_STATUS_META={'principal\x20confirming':{'tone':'amber','desc':'Principal\x20(re)submits\x20case\x20materials\x20—\x20reached\x20via\x20reset.'},'arbitrator\x20confirming':{'tone':'blue','desc':'Arbitrator\x20reviewing\x20and\x20confirming\x20the\x20case\x20(creation\x20state).'},'voting':{'tone':'yellow','desc':'Voting\x20in\x20progress.'},'arbitrated':{'tone':'blue','desc':'Ruling\x20made\x20(definitive\x20arbitration\x20result).'},'objectionable':{'tone':'red','desc':'Objection\x20window\x20—\x20case\x20can\x20be\x20reset\x20or\x20withdrawn\x20after\x2030\x20days.'},'finished':{'tone':'green','desc':'Terminal\x20—\x20completed;\x20fee\x20can\x20be\x20withdrawn\x20immediately.'},'withdrawn':{'tone':'gray','desc':'Terminal\x20—\x20withdrawn\x20by\x20the\x20complainant.'}};function agreesLabel(a,b){if(!a||a['length']===0x0)return'--';return a['map'](c=>{const d=b[c]?.['name'];return'#'+(c+0x1)+(d?'\x20'+d:'');})['join'](',\x20');}export function assembleArbReview(a){const b=a['fields'],c=arbStatusLabel(b['status']),d=ARB_STATUS_META[c['toLowerCase']()],e=fmtArbMoney(b['fee'],b['type_raw']),g=[{'v':c,'tone':d?.['tone']??'gray','tip':d?.['desc']??'ArbStatus\x20lifecycle\x20state\x20of\x20this\x20case.'}],h=[{'label':'Order','tip':'The\x20disputed\x20order.','value':b['order']?{'t':'addr','v':b['order'],'obj_type':'Order'}:null},{'label':'Votes','tip':'Total\x20votes\x20cast\x20by\x20voting\x20guards\x20on\x20this\x20case\x20(click\x20for\x20the\x20voter\x20list).','value':{'t':'count','n':a['voted']['length'],'panel_title':'Voted','addrs':a['voted']['map'](p=>p['voter'])}},...b['voting_deadline']?[{'label':'Deadline','tip':'Voting\x20deadline\x20(None\x20=\x20open-ended\x20voting\x20until\x20the\x20arbitrator\x20finalizes).','value':{'t':'deadline','v':b['voting_deadline']}}]:[],{'label':'Propositions','tip':'Resolution\x20plans\x20voters\x20agree\x20with\x20(count\x20only).','value':{'t':'text','v':String(a['proposition']['length']),'tone':'strong'}},{'label':'Create\x20at','tip':'Time\x20when\x20the\x20case\x20was\x20opened\x20(Arb.time).','value':b['time']!=null?{'t':'time','v':b['time']}:null}],i=[{'label':'Service','tip':'The\x20Service\x20the\x20disputed\x20Order\x20belongs\x20to.','value':b['service']?{'t':'addr','v':b['service'],'obj_type':'Service'}:null},{'label':'Indemnity','tip':'Compensation\x20award\x20recorded\x20on\x20this\x20case\x20(none\x20until\x20the\x20arbitrator\x20awards\x20it).','value':b['indemnity']?.['amount']!=null?{'t':'text','v':fmtArbMoney(b['indemnity']['amount'],b['type_raw'])??'--','tone':'strong'}:null}],j={'kind':'items','title':'Vote\x20('+a['proposition']['length']+')','empty':'No\x20propositions\x20submitted\x20yet.','items':a['proposition']['map']((q,r)=>({'name':'#'+(r+0x1)+'\x20'+q['name'],'meta':[{'label':'votes','value':String(q['votes'])}]}))},k={'kind':'items','title':'Voters\x20('+a['voted']['length']+')','empty':'No\x20votes\x20cast\x20yet\x20—\x20voting\x20guards\x20have\x20not\x20weighed\x20in.','items':a['voted']['map']((p,q)=>({'name':'#'+(q+0x1),'ref':{'address':p['voter'],'obj_type':'Account'},'meta':[{'label':'agrees','value':agreesLabel(p['agrees'],a['proposition'])},{'label':'weight','value':String(p['weight'])}]}))},l={'kind':'fields','columns':0x1,'fields':[{'label':'Feedback','tip':'The\x20arbitrator\x27s\x20ruling\x20statement,\x20recorded\x20when\x20the\x20case\x20is\x20decided\x20(arbitration\x20→\x20feedback);\x20rewritten\x20via\x20feedback\x20/\x20reset\x20while\x20the\x20case\x20is\x20open.','value':b['feedback']?{'t':'longtext','v':b['feedback']}:null},{'label':'Objection','tip':'The\x20losing\x20party\x27s\x20objection\x20statement\x20filed\x20during\x20the\x20objectionable\x20window\x20after\x20the\x20ruling.','value':b['objection']?{'t':'longtext','v':b['objection']}:null}]},m={'kind':'fields','columns':0x2,'fields':[{'label':'Status','tip':'ArbStatus\x20lifecycle:\x20Principal_confirming\x20→\x20Arbitrator_confirming\x20→\x20Voting\x20→\x20Arbitrated\x20→\x20Objectionable\x20→\x20Finished\x20(or\x20Withdrawn).','value':{'t':'text','v':c,'tone':'strong'}},{'label':'Fee','tip':'Arbitration\x20fee\x20locked\x20by\x20the\x20dispute\x20opener,\x20in\x20the\x20case\x27s\x20payment\x20token\x20(raw\x20balance\x20→\x20human\x20amount).','value':e?{'t':'text','v':e,'tone':'strong'}:null},{'label':'Arbitration','tip':'The\x20Arbitration\x20service\x20object\x20adjudicating\x20this\x20case.','value':b['arbitration']?{'t':'addr','v':b['arbitration'],'obj_type':'Arbitration'}:null},{'label':'Deadline','tip':'Voting\x20deadline\x20(None\x20=\x20open-ended\x20voting\x20until\x20the\x20arbitrator\x20finalizes).','value':b['voting_deadline']?{'t':'deadline','v':b['voting_deadline']}:null},{'label':'Indemnity','tip':'Compensation\x20the\x20losing\x20side\x20must\x20pay\x20(awarded\x20amount,\x20in\x20the\x20case\x27s\x20payment\x20token).','value':b['indemnity']?{'t':'text','v':fmtArbMoney(b['indemnity']['amount'],b['type_raw'])??'--'}:null},{'label':'Indemnity\x20time','tip':'When\x20the\x20indemnity\x20award\x20was\x20recorded\x20on\x20this\x20case.','value':b['indemnity']?.['time']!=null?{'t':'time','v':b['indemnity']['time']}:null},{'label':'Compensation\x20time','tip':'When\x20the\x20compensation\x20was\x20executed\x20on-chain\x20(arb.compensation_time).','value':b['compensation_time']!=null?{'t':'time','v':b['compensation_time']}:null}]},n=a['related']?.['items']??[],o={'kind':'related','title':'Related\x20objects'+(a['related']?.['count']?'\x20('+a['related']['count']+')':''),'empty':'No\x20other\x20on-chain\x20objects\x20reference\x20or\x20use\x20this\x20Arb\x20case\x20yet.','groups':groupRelated(n),'count':a['related']?.['count']??n['length']};return{'action':'review_pack','object_type':'Arb','head':{'address':a['object'],'network':a['network'],'name':a['head']['name'],'description':a['head']['description'],'tags':a['head']['tags'],'last_active_ms':a['updated_ms'],'badges':g,...e!=null?{'amount':{'text':e,'tip':'Arbitration\x20fee\x20locked\x20by\x20the\x20dispute\x20opener\x20—\x20denominated\x20in\x20the\x20case\x27s\x20payment\x20token\x20(the\x20Arb<T>\x20generic).'}}:{},'info_rows':[h,i]},'sections':[j,k,l,m,o],'data_gaps':a['data_gaps']};}
@@ -0,0 +1,3 @@
1
+ import type { DemandPanoramaResult } from "../playbooks/service-build/object-panorama.js";
2
+ import type { ReviewPack } from "./types.js";
3
+ export declare function assembleDemandReview(pano: DemandPanoramaResult): ReviewPack;
@@ -0,0 +1 @@
1
+ export function assembleDemandReview(a){const b=a['fields'],c=[{'label':'Location','tip':'Location\x20—\x20where\x20the\x20demanded\x20work\x20is\x20performed,\x20declared\x20on-chain.','value':b['location']?{'t':'text','v':b['location'],'tone':'strong'}:null}],d={'kind':'items','title':'Present\x20Guards\x20('+a['guards']['length']+')','empty':'No\x20present\x20guards\x20—\x20any\x20service\x20can\x20present\x20directly,\x20no\x20passport\x20required.','items':a['guards']['map']((j,k)=>({'name':'#'+(k+0x1),'ref':{'address':j['guard'],'obj_type':'Guard'},'meta':[]}))},e={'kind':'core','title':'Permission','rows':b['permission']?[{'label':'Permission','ref':{'address':b['permission'],'obj_type':'Permission'}}]:[]},g={'kind':'fields','columns':0x2,'fields':[{'label':'Location','tip':'Where\x20the\x20demanded\x20work\x20should\x20happen\x20(free-form\x20location\x20string).','value':b['location']?{'t':'text','v':b['location']}:null},{'label':'UM','tip':'Update\x20Manager\x20(demand.um)\x20—\x20a\x20Contact\x20designated\x20as\x20this\x20Demand\x27s\x20customer-service\x20/\x20update\x20channel.','value':b['um']?{'t':'addr','v':b['um'],'obj_type':'Contact'}:null},{'label':'Permission','tip':'The\x20Permission\x20list\x20gating\x20administration\x20operations\x20on\x20this\x20Demand.','value':b['permission']?{'t':'addr','v':b['permission'],'obj_type':'Permission'}:null},{'label':'Rewards','tip':'Reward\x20objects\x20offered\x20by\x20this\x20demand\x20(paid\x20out\x20on\x20fulfillment\x20milestones).','value':{'t':'count','n':a['rewards']['length'],'panel_title':'Rewards','addrs':a['rewards']}}]},h={'kind':'items','title':'Presenters\x20('+a['presenters']['count']+')','empty':'No\x20services\x20have\x20presented\x20against\x20this\x20demand\x20yet.','items':a['presenters']['items']['map']((j,k)=>({'name':'#'+(k+0x1),...j['service']?{'ref':{'address':j['service'],'obj_type':'Service'}}:{},'meta':[...j['acceptance_score']!=null?[{'label':'acceptance','value':String(j['acceptance_score']),'tip':'The\x20demand\x20owner\x27s\x20acceptance\x20score\x20for\x20this\x20presenter\x20(from\x20the\x20presenter\x20table).'}]:[],...j['feedback']?[{'label':'feedback','value':j['feedback'],'tip':'The\x20demand\x20owner\x27s\x20feedback\x20note\x20for\x20this\x20presenter.'}]:[]],'note':j['recommend']??undefined}))};return{'action':'review_pack','object_type':'Demand','head':{'address':a['object'],'network':a['network'],'name':a['head']['name'],'description':a['head']['description'],'tags':a['head']['tags'],'last_active_ms':null,'badges':[],'info_rows':[c]},'sections':[d,e,g,h],'data_gaps':a['data_gaps']};}
@@ -0,0 +1,3 @@
1
+ import type { ReviewPack } from "./types.js";
2
+ export declare const REVIEW_PACK_TYPES: readonly string[];
3
+ export declare function handleReviewPack(v: Record<string, unknown>): Promise<ReviewPack>;
@@ -0,0 +1 @@
1
+ import{LocalMark,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{handleObjectPanorama}from'../playbooks/service-build/object-panorama.js';import{handleServicePanorama}from'../playbooks/service-build/service-panorama.js';import{handleMachinePanorama}from'../playbooks/service-build/machine-panorama.js';import{assembleOrderReview}from'./order.js';import{assembleServiceReview}from'./service.js';import{assembleMachineReview}from'./machine.js';import{assembleArbReview}from'./arb.js';import{assembleDemandReview}from'./demand.js';import{assembleRepositoryReview}from'./repository.js';import{assembleProgressReview}from'./progress.js';export const REVIEW_PACK_TYPES=['Order','Service','Arb','Demand','Repository','Progress','Machine'];export async function handleReviewPack(a){const b=a['object_address'];if(!b)throw new Error('\x27object_address\x27\x20is\x20required\x20for\x20review_pack');let c=b;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;}const d=objectTypeFromAddress(c);if(d===ObjectType['Order']){const h=await handleObjectPanorama(a);if(h['object_type']!=='Order')throw new Error('review_pack:\x20expected\x20an\x20Order,\x20resolved\x20to\x20'+h['object_type']);return assembleOrderReview(h);}if(d===ObjectType['Service']){const i=await handleServicePanorama({...a,'service_address':c});return assembleServiceReview(i);}if(d===ObjectType['Machine']){const j=await handleMachinePanorama({...a,'object_address':c});if(j['machineAddress']?.['toLowerCase']()!==c['toLowerCase']())throw new Error('review_pack:\x20expected\x20a\x20Machine,\x20resolved\x20to\x20'+j['machineAddress']);return assembleMachineReview(j);}const e={[ObjectType['Arb']]:assembleArbReview,[ObjectType['Demand']]:assembleDemandReview,[ObjectType['Repository']]:assembleRepositoryReview,[ObjectType['Progress']]:assembleProgressReview},f=d?e[d]:undefined;if(f){const k=await handleObjectPanorama(a);if(k['object_type']!==d)throw new Error('review_pack:\x20expected\x20a\x20'+d+',\x20resolved\x20to\x20'+k['object_type']);return f(k);}throw new Error('review_pack:\x20unsupported\x20object\x20type\x20\x27'+(d??'unknown')+'\x27\x20—\x20supported:\x20'+REVIEW_PACK_TYPES['join'](',\x20')+'.\x20Other\x20types\x20keep\x20object_panorama\x20/\x20machine_panorama\x20/\x20service_panorama.');}
@@ -0,0 +1,3 @@
1
+ import type { MachinePanoramaResult } from "../playbooks/service-build/machine-panorama.js";
2
+ import type { ReviewPack } from "./types.js";
3
+ export declare function assembleMachineReview(pano: MachinePanoramaResult): ReviewPack;
@@ -0,0 +1 @@
1
+ export function assembleMachineReview(a){const b=a['head'],c=a['fields'],d=a['graph']['nodes'],e=a['graph']['edges'],g=[b['published']===![]?{'v':'UNPUBLISHED','tone':'amber','tip':'Machine\x20is\x20not\x20published\x20—\x20a\x20draft\x20template;\x20orders\x20cannot\x20advance\x20through\x20it.'}:b['paused']?{'v':'PAUSED','tone':'red','tip':'Machine\x20is\x20paused\x20—\x20progress\x20objects\x20cannot\x20advance\x20until\x20it\x20is\x20resumed.'}:{'v':'LIVE','tone':'green','tip':'Machine\x20is\x20published\x20and\x20running\x20—\x20progress\x20objects\x20can\x20advance\x20through\x20its\x20workflow.'}],i=[{'label':'Nodes','tip':'Workflow\x20nodes\x20(stages)\x20defined\x20in\x20this\x20Machine.','value':{'t':'text','v':String(c['node_count']??d['length']),'tone':'strong'}},{'label':'Edges','tip':'Workflow\x20edges\x20(node\x20transitions)\x20defined\x20in\x20this\x20Machine.','value':{'t':'text','v':String(e['length']),'tone':'strong'}},{'label':'Progress','tip':'Progress\x20objects\x20currently\x20registered\x20under\x20this\x20Machine\x20in\x20the\x20global\x20tx\x20table\x20(click\x20for\x20the\x20list).','value':{'t':'count','n':a['progresses']['count'],'panel_title':'Progress','addrs':a['progresses']['items']['map'](m=>m['progress'])}}],j={'kind':'core','title':'Permission','rows':c['permission']?[{'label':'Permission','ref':{'address':c['permission'],'obj_type':'Permission'}}]:[]},k={'kind':'fields','columns':0x2,'fields':[{'label':'Published','tip':'YES\x20—\x20the\x20Machine\x20is\x20published\x20on-chain\x20and\x20can\x20accept\x20progress\x20objects.\x20no\x20—\x20still\x20a\x20draft\x20template;\x20orders\x20cannot\x20advance\x20through\x20it.','value':{'t':'text','v':b['published']==null?'unknown':b['published']?'YES':'no'}},{'label':'Paused','tip':b['paused']?'The\x20workflow\x20is\x20paused\x20—\x20progress\x20objects\x20cannot\x20advance\x20until\x20it\x20is\x20resumed.':'The\x20workflow\x20is\x20running\x20normally.','value':{'t':'text','v':b['paused']==null?'unknown':b['paused']?'YES':'no'}},{'label':'Node\x20count','tip':'Number\x20of\x20workflow\x20nodes\x20(stages)\x20defined\x20in\x20this\x20Machine.','value':{'t':'text','v':String(c['node_count']??d['length']),'tone':'strong'}},{'label':'Consensus\x20repositories','tip':'Repositories\x20consulted\x20for\x20machine\x20consensus\x20(evidence\x20/\x20data\x20verification).','value':{'t':'count','n':c['consensus_repositories']['length'],'panel_title':'Consensus\x20repositories','addrs':c['consensus_repositories']}},{'label':'UM','tip':'UM\x20(um:\x20Option<address>)\x20—\x20a\x20Contact\x20designated\x20as\x20this\x20Machine\x27s\x20customer-service\x20/\x20update\x20channel\x20(um_set\x20/\x20um_none).','value':c['um']?{'t':'addr','v':c['um'],'obj_type':'Contact'}:null}]},l={'kind':'graph','title':'Graph','empty':'No\x20workflow\x20topology\x20defined\x20for\x20this\x20Machine.','graph':{'machineAddress':a['machineAddress'],'machineName':b['name'],'published':b['published'],'paused':b['paused'],'nodes':d,'edges':e}};return{'action':'review_pack','object_type':'Machine','head':{'address':a['machineAddress'],'network':a['network'],'name':b['name'],'description':b['description'],'tags':b['tags'],'last_active_ms':null,'badges':g,'info_rows':[i]},'sections':[j,k,l],'data_gaps':a['data_gaps']};}
@@ -0,0 +1,9 @@
1
+ import type { OrderPanoramaResult } from "../playbooks/service-build/object-panorama.js";
2
+ import type { ReviewPack, ReviewRelatedGroup } from "./types.js";
3
+ export declare function fmtWow(v: string | null): string | null;
4
+ export declare function groupRelated(items: {
5
+ address: string;
6
+ object_type: string;
7
+ time: number | null;
8
+ }[]): ReviewRelatedGroup[];
9
+ export declare function assembleOrderReview(pano: OrderPanoramaResult): ReviewPack;
@@ -0,0 +1 @@
1
+ const WOW_DECIMALS=0x9;export function fmtWow(a){if(a===null||a===undefined||a==='')return null;try{const b=BigInt(a['trim']()),c=0xan**BigInt(WOW_DECIMALS),d=b/c,e=(b%c)['toString']()['padStart'](WOW_DECIMALS,'0')['slice'](0x0,0x4);return d['toString']()+'.'+e;}catch{return null;}}export function groupRelated(a){const b=new Map();for(const c of a){const d=c['object_type']||'Unknown',e=b['get'](d);if(e)e['push']({'address':c['address'],'time':c['time']});else b['set'](d,[{'address':c['address'],'time':c['time']}]);}return[...b['entries']()]['map'](([f,g])=>({'label':f,'items':g}))['sort']((f,g)=>(g['items'][0x0]?.['time']??0x0)-(f['items'][0x0]?.['time']??0x0));}export function assembleOrderReview(a){const b=a['fields'],c=fmtWow(b['amount']),d=[{'label':'Required\x20info','tip':'Buyer-submitted\x20private\x20info\x20(order.required_info,\x20set\x20via\x20required_info_update):\x20the\x20buyer\x27s\x20messenger\x20Contact\x20object\x20or\x20a\x20WTS\x20proof\x20id,\x20shared\x20with\x20the\x20merchant\x20to\x20satisfy\x20the\x20Service\x27s\x20customer\x20requirements.','value':b['required_info']?{'t':'addr','v':b['required_info']}:null},{'label':'Owner','tip':'The\x20account\x20that\x20created\x20(bought)\x20this\x20order\x20(order.owner)','value':b['owner']?{'t':'addr','v':b['owner']}:null},{'label':'Created\x20at','tip':'When\x20the\x20buyer\x20created\x20this\x20order\x20(order.time).\x20The\x20top-right\x20stamp\x20is\x20the\x20UPDATED\x20time\x20(last\x20on-chain\x20tx)\x20—\x20two\x20distinct\x20clocks.','value':b['time']!=null?{'t':'time','v':b['time']}:null}],e=[{'label':'Progress','value':{'t':'progress','v':b['progress']??'','node':a['progress_next'],'since':a['progress_since'],'machine':b['machine']??null}},{'label':'Disputes','tip':'Arbitration\x20objects\x20that\x20opened\x20a\x20dispute\x20on\x20this\x20order\x20(order.dispute,\x20max\x2010)','value':{'t':'count','n':a['disputes']['length'],'panel_title':'Disputes','addrs':a['disputes']}},...b['claimed_by']?[{'label':'Claimed\x20by','tip':'Compensation\x20claimant\x20—\x20the\x20Arbitration\x20object\x20that\x20claimed\x20the\x20order\x27s\x20compensation\x20(order.compensate).\x20Once\x20set,\x20the\x20order\x20can\x20no\x20longer\x20be\x20claimed\x20or\x20disputed.','value':{'t':'addr','v':b['claimed_by']}}]:[]],g={'kind':'items','title':'Bought\x20('+a['items']['length']+')','empty':'No\x20purchased\x20items\x20on\x20this\x20order\x20yet.','items':a['items']['map'](k=>({'name':k['name']??'--','meta':[{'label':'price','value':fmtWow(k['price'])??'--'},{'label':'qty','value':k['quantity']??'--'}],'hash':k['wip_hash']??null}))},h={'kind':'fields','columns':0x2,'fields':[{'label':'Service','tip':'The\x20Service\x20this\x20order\x20was\x20placed\x20against.','value':b['service']?{'t':'addr','v':b['service'],'obj_type':'Service'}:null},{'label':'Machine','tip':'The\x20Machine\x20workflow\x20template\x20this\x20order\x20runs\x20through.\x20Empty\x20for\x20machine-less\x20orders.','value':b['machine']?{'t':'addr','v':b['machine'],'obj_type':'Machine'}:null},{'label':'Discount','tip':'The\x20Discount\x20object\x20applied\x20to\x20this\x20order\x20at\x20purchase\x20time.','value':b['discount']?{'t':'addr','v':b['discount'],'obj_type':'Discount'}:null},{'label':'Agents','tip':'Operator\x20accounts\x20besides\x20the\x20owner\x20that\x20can\x20act\x20on\x20this\x20order.','value':{'t':'count','n':a['agents']['length'],'panel_title':'Agents','addrs':a['agents']}},{'label':'Allocation','tip':'The\x20fund-splitting\x20object\x20bound\x20to\x20this\x20order\x20(order.allocation).\x20Green\x20\x27allocated\x27\x20=\x20balance\x20==\x200,\x20fully\x20split\x20to\x20recipients\x20(allocation.alloc);\x20amber\x20\x27pending\x27\x20=\x20balance\x20>\x200.','value':b['allocation']?{'t':'addr','v':b['allocation'],'obj_type':'Allocation','badge':a['allocation_state']==='allocated'?{'v':'allocated','tone':'green'}:a['allocation_state']==='pending'?{'v':'pending','tone':'amber'}:undefined}:null},{'label':'Progress','tip':'The\x20Progress\x20object\x20tracking\x20this\x20order\x20through\x20the\x20machine\x20workflow\x20(order.progress);\x20its\x20latest\x20node\x20and\x20elapsed\x20time\x20show\x20on\x20the\x20header\x20card.','value':b['progress']?{'t':'addr','v':b['progress'],'obj_type':'Progress'}:null}]},i=a['related']?.['items']??[],j={'kind':'related','title':'Related\x20objects'+(a['related']?.['count']?'\x20('+a['related']['count']+')':''),'empty':'No\x20other\x20on-chain\x20objects\x20reference\x20or\x20use\x20this\x20Order\x20yet.','groups':groupRelated(i),'count':a['related']?.['count']??i['length']};return{'action':'review_pack','object_type':'Order','head':{'address':a['object'],'network':a['network'],'name':a['head']['name'],'description':a['head']['description'],'tags':a['head']['tags'],'last_active_ms':a['updated_ms'],'badges':[],...c!=null?{'amount':{'text':c+'\x20WOW','tip':'Order\x20amount\x20(payment\x20token:\x20WOW)'}}:{},'info_rows':[d,e]},'sections':[g,h,j],'data_gaps':a['data_gaps']};}
@@ -0,0 +1,3 @@
1
+ import type { ProgressPanoramaResult } from "../playbooks/service-build/object-panorama.js";
2
+ import type { ReviewPack } from "./types.js";
3
+ export declare function assembleProgressReview(pano: ProgressPanoramaResult): ReviewPack;
@@ -0,0 +1 @@
1
+ import{groupRelated}from'./order.js';export function assembleProgressReview(a){const b=a['fields'],c=[{'label':'Machine','tip':'The\x20Machine\x20workflow\x20template\x20this\x20progress\x20runs\x20through\x20(progress.machine).','value':b['machine']?{'t':'addr','v':b['machine'],'obj_type':'Machine'}:null},{'label':'Current\x20node','tip':'The\x20workflow\x20node\x20this\x20progress\x20currently\x20sits\x20at\x20(progress.current).','value':b['current']?{'t':'text','v':b['current'],'tone':'strong'}:null},{'label':'Since','tip':'When\x20the\x20current\x20node\x20was\x20entered\x20(progress.current_time)\x20—\x20drives\x20the\x20elapsed\x20readout.','value':b['current_time']!=null?{'t':'time','v':b['current_time']}:null}],d={'kind':'fields','columns':0x2,'fields':[{'label':'Machine','tip':'The\x20Machine\x20workflow\x20template\x20this\x20progress\x20runs\x20through.','value':b['machine']?{'t':'addr','v':b['machine'],'obj_type':'Machine'}:null},{'label':'Current\x20node','tip':'The\x20workflow\x20node\x20this\x20progress\x20currently\x20sits\x20at.','value':b['current']?{'t':'text','v':b['current']}:null},{'label':'Task','tip':'The\x20Order\x20this\x20progress\x20is\x20working\x20on\x20(progress.task).','value':b['task']?{'t':'addr','v':b['task'],'obj_type':'Order'}:null},{'label':'History','tip':'Node-entry\x20records\x20kept\x20for\x20this\x20progress\x20(the\x20history\x20table\x27s\x20entry\x20count).','value':b['history_count']!=null?{'t':'text','v':String(b['history_count']),'tone':'strong'}:null},{'label':'Node\x20since','tip':'When\x20the\x20current\x20node\x20was\x20entered\x20(progress.current_time).','value':b['current_time']!=null?{'t':'time','v':b['current_time']}:null},{'label':'Context\x20repositories','tip':'Repositories\x20this\x20progress\x20may\x20consult\x20for\x20fulfillment\x20proofs\x20(machine\x20context\x20binding).','value':{'t':'count','n':a['context_repositories']['length'],'panel_title':'Context\x20repositories','addrs':a['context_repositories']}}]},e=a['session']?{'kind':'items','title':'Session\x20—\x20waiting\x20forwards\x20('+a['session']['forwards']['length']+')','empty':'No\x20live\x20session\x20—\x20this\x20progress\x20is\x20not\x20waiting\x20on\x20any\x20forward\x20approvals.','items':a['session']['forwards']['map']((j,k)=>({'name':'#'+(k+0x1)+'\x20'+j['forward'],...j['who']?{'ref':{'address':j['who'],'obj_type':'Account'}}:{},'meta':[...j['msg']?[{'label':'msg','value':j['msg'],'tip':'The\x20message\x20attached\x20to\x20this\x20forward.'}]:[]],'badge':j['accomplished']?{'v':'accomplished','tone':'green'}:{'v':'waiting','tone':'amber'}}))}:null,g={'kind':'items','title':'Operators\x20('+a['operators']['length']+')','empty':'No\x20named\x20operators\x20—\x20forwards\x20are\x20gated\x20by\x20the\x20machine\x27s\x20rules\x20only.','items':a['operators']['map']((j,k)=>({'name':'#'+(k+0x1)+'\x20'+j['name'],'meta':[...j['operators']['length']>0x0?[{'label':'accounts','value':String(j['operators']['length']),'tip':'Accounts\x20designated\x20under\x20this\x20operator\x20name\x20(machine.named_operator).'}]:[]]}))},h=a['related']?.['items']??[],i={'kind':'related','title':'Related\x20objects'+(a['related']?.['count']?'\x20('+a['related']['count']+')':''),'empty':'No\x20other\x20on-chain\x20objects\x20are\x20related\x20to\x20this\x20Progress\x20yet.','groups':groupRelated(h),'count':a['related']?.['count']??h['length']};return{'action':'review_pack','object_type':'Progress','head':{'address':a['object'],'network':a['network'],'name':a['head']['name'],'description':a['head']['description'],'tags':a['head']['tags'],'last_active_ms':b['current_time'],'badges':[],'info_rows':[c]},'sections':[d,...e?[e]:[],g,i],'data_gaps':a['data_gaps']};}
@@ -0,0 +1,3 @@
1
+ import type { RepositoryPanoramaResult } from "../playbooks/service-build/object-panorama.js";
2
+ import type { ReviewPack } from "./types.js";
3
+ export declare function assembleRepositoryReview(pano: RepositoryPanoramaResult): ReviewPack;
@@ -0,0 +1 @@
1
+ export function assembleRepositoryReview(a){const b=a['fields'],c=[{'label':'Data','tip':'Records\x20stored\x20in\x20this\x20repository\x27s\x20on-chain\x20table\x20(ParentTable<DataKey,\x20vector<u8>>).','value':b['data_count']!=null?{'t':'text','v':String(b['data_count']),'tone':'strong'}:null}],d={'kind':'core','title':'Permission','rows':b['permission']?[{'label':'Permission','ref':{'address':b['permission'],'obj_type':'Permission'}}]:[]},e={'kind':'items','title':'Policies\x20('+a['policies']['length']+')','empty':'No\x20write\x20policies\x20—\x20the\x20repository\x20accepts\x20no\x20governed\x20data\x20writes.','items':a['policies']['map']((j,k)=>({'name':'#'+(k+0x1)+'\x20'+j['name'],'meta':[...j['id_from']!=null?[{'label':'id\x20from','value':String(j['id_from']),'tip':'The\x20passport\x20submission\x20field\x20the\x20record\x20id\x20is\x20taken\x20from.'}]:[],...j['value_type']!=null?[{'label':'value\x20type','value':String(j['value_type']),'tip':'The\x20BCS\x20value\x20type\x20data\x20writes\x20must\x20match.'}]:[],{'label':'write\x20guards','value':String(j['write_guards']),'tip':'Guards\x20that\x20must\x20pass\x20before\x20a\x20data\x20write\x20under\x20this\x20policy\x20is\x20accepted.'},...j['quote_guard']?[{'label':'quote','value':j['quote_guard'],'tip':'The\x20guard\x20consulted\x20when\x20quoting\x20this\x20policy\x27s\x20data.'}]:[]],'note':j['description']??undefined}))},g={'kind':'items','title':'Rewards\x20('+a['rewards']['length']+')','empty':'No\x20Reward\x20objects\x20back\x20this\x20Repository\x20yet.','items':a['rewards']['map']((j,k)=>({'name':'#'+(k+0x1),'ref':{'address':j,'obj_type':'Reward'},'meta':[]}))},h={'kind':'fields','columns':0x2,'fields':[{'label':'UM','tip':'Update\x20Manager\x20(repository.um)\x20—\x20a\x20Contact\x20designated\x20as\x20this\x20Repository\x27s\x20customer-service\x20/\x20update\x20channel.','value':b['um']?{'t':'addr','v':b['um'],'obj_type':'Contact'}:null},{'label':'Permission','tip':'The\x20Permission\x20list\x20gating\x20administration\x20operations\x20(description\x20/\x20policies\x20/\x20rewards\x20/\x20owner_receive\x20/\x20um).','value':b['permission']?{'t':'addr','v':b['permission'],'obj_type':'Permission'}:null},{'label':'Data','tip':'Records\x20stored\x20in\x20this\x20repository\x27s\x20on-chain\x20table.','value':b['data_count']!=null?{'t':'text','v':String(b['data_count']),'tone':'strong'}:null}]};return{'action':'review_pack','object_type':'Repository','head':{'address':a['object'],'network':a['network'],'name':a['head']['name'],'description':a['head']['description'],'tags':a['head']['tags'],'last_active_ms':null,'badges':[],'info_rows':[c]},'sections':[d,e,g,h],'data_gaps':a['data_gaps']};}
@@ -0,0 +1,5 @@
1
+ import type { ServicePanoramaResult } from "../playbooks/service-build/service-panorama.js";
2
+ import type { ReviewPack } from "./types.js";
3
+ export declare function shortHex(a: string): string;
4
+ export declare function fmtDuration(ms: string | number | null | undefined): string;
5
+ export declare function assembleServiceReview(pano: ServicePanoramaResult): ReviewPack;
@@ -0,0 +1 @@
1
+ export function shortHex(b){return b['length']>0xe?b['slice'](0x0,0x6)+'…'+b['slice'](-0x4):b;}export function fmtDuration(a){if(a===null||a===undefined||a==='')return'--';const b=Number(a);if(!Number['isFinite'](b)||b<=0x0)return'--';const c=[[0x5265c00,'d'],[0x36ee80,'h'],[0xea60,'m'],[0x3e8,'s']],d=[];let e=Math['floor'](b);for(const [f,g]of c){if(d['length']>=0x2)break;const h=Math['floor'](e/f);e-=h*f;if(h>0x0)d['push'](''+h+g);else{if(d['length']>0x0)break;}}return d['length']===0x0?'<1s':d['join']('\x20');}export function assembleServiceReview(a){const b=a['service'],c=[];if(!b['published'])c['push']({'v':'UNPUBLISHED','tone':'amber','tip':'Service\x20is\x20not\x20published\x20—\x20invisible\x20to\x20customers\x20on\x20the\x20WoW\x20market\x20listing;\x20every\x20sale\x20item\x20is\x20unbuyable.'});else b['paused']&&c['push']({'v':'PAUSED','tone':'red','tip':'Service\x20is\x20paused\x20—\x20new\x20orders\x20are\x20rejected\x20(existing\x20orders\x20still\x20progress);\x20every\x20sale\x20item\x20is\x20unbuyable.'});const d=!b['published']||b['paused'],e={'kind':'items','title':'Sales\x20('+b['sales']['length']+')','empty':'No\x20sale\x20items\x20configured\x20—\x20the\x20storefront\x20is\x20empty.','items':b['sales']['map'](o=>({'name':o['name']||'(unnamed)','meta':[{'label':'price','value':o['price_display']||o['price']||'--','tip':o['price_tip']||'On-chain\x20price\x20in\x20the\x20smallest\x20unit.\x20Payment\x20token\x20info\x20unavailable\x20—\x20showing\x20the\x20raw\x20stored\x20value.'},{'label':'stock','value':o['stock']??'--','tip':'Remaining\x20sellable\x20stock\x20for\x20this\x20item.'},{'label':'wip','value':o['wip']||'--','tip':'Work-in-progress\x20product\x20template.\x20Every\x20purchase\x20mints\x20a\x20new\x20item\x20from\x20this\x20WIP\x20blueprint.'}],'badge':o['suspension']?{'v':'SUSPENDED','tone':'red'}:null,'dim':d||!!o['suspension']}))},f={'kind':'core','title':'Permission','rows':[{'label':'Permission','ref':{'address':b['permission'],'obj_type':'Permission'}}]},g={'kind':'fields','columns':0x2,'fields':[{'label':'Location','tip':'The\x20service\x20area\x20and\x20scope\x20as\x20stated\x20by\x20the\x20merchant.','value':b['location']?{'t':'text','v':b['location']}:null},{'label':'Purchase\x20guard','tip':'Guard\x20every\x20customer\x20must\x20pass\x20to\x20place\x20an\x20order\x20(whitelist\x20/\x20KYC\x20/\x20payment\x20proof).\x20Set\x20→\x20buyers\x20must\x20satisfy\x20its\x20conditions;\x20unset\x20→\x20purchase\x20is\x20unconditional.','value':a['buy_guard']?.['address']??b['buy_guard']?{'t':'addr','v':a['buy_guard']?.['address']??b['buy_guard'],'obj_type':'Guard'}:null},{'label':'Compensation\x20fund','tip':'Pre-funded\x20on-chain\x20guarantee.\x20Buyers\x20can\x20claim\x20from\x20this\x20fund\x20BEFORE\x20going\x20to\x20arbitration\x20—\x20the\x20key\x20risk-reduction\x20signal\x20customers\x20look\x20for.\x20Merchant-side\x20withdrawal\x20is\x20gated\x20by\x20the\x20Setting\x20lock:\x20the\x20Service\x20must\x20be\x20paused\x20and\x20the\x20window\x20elapsed\x20(paused_time\x20+\x20setting_lock_duration\x20≤\x20now).','value':b['compensation_fund']?{'t':'text','v':b['compensation_fund']}:null},{'label':'Published','tip':'Service\x20is\x20published\x20→\x20visible\x20to\x20customers\x20on\x20the\x20WoW\x20market\x20listing.\x20Unpublished\x20→\x20merchant-only\x20preview.','value':b['published']?{'t':'badge','v':'YES','tone':'red'}:{'t':'badge','v':'no','tone':'green'}},{'label':'Paused','tip':'When\x20paused,\x20new\x20orders\x20are\x20rejected\x20(existing\x20orders\x20still\x20progress).\x20If\x20paused,\x20shows\x20the\x20time\x20of\x20the\x20most\x20recent\x20pause\x20(the\x20PAUSE\x20tx\x20timestamp);\x20\x27no\x27\x20=\x20not\x20paused.\x20The\x20pause\x20timestamp\x20anchors\x20the\x20Setting-lock\x20window\x20that\x20gates\x20compensation-fund\x20withdrawal\x20and\x20arbitration/reward\x20removal.','value':b['paused']?{'t':'time','v':b['paused_time']??0x0,'tip':'Most\x20recent\x20pause\x20(the\x20PAUSE\x20tx\x20timestamp).'}:{'t':'text','v':'no'}},{'label':'Setting\x20lock','tip':'Lock\x20window\x20(ms)\x20anchored\x20at\x20the\x20pause\x20timestamp.\x20It\x20gates\x20exactly\x20three\x20operations:\x20withdrawing\x20the\x20Compensation\x20fund,\x20and\x20removing/clearing\x20Arbitrations\x20or\x20Rewards\x20while\x20the\x20Service\x20is\x20published\x20—\x20each\x20requires\x20the\x20Service\x20to\x20be\x20paused\x20AND\x20the\x20window\x20elapsed\x20since\x20the\x20pause.\x20Adding\x20arbitrations/rewards\x20and\x20every\x20other\x20setting\x20change\x20are\x20NOT\x20gated;\x20unpublished\x20services\x20may\x20remove\x20rewards/arbitrations\x20freely.','value':{'t':'text','v':fmtDuration(b['setting_lock_duration'])}},{'label':'UM','tip':'Update\x20Manager\x20—\x20a\x20Contact\x20designated\x20as\x20this\x20Service\x27s\x20customer-service\x20/\x20update\x20channel.\x20Buyers\x20and\x20off-chain\x20clients\x20route\x20support\x20requests\x20and\x20update\x20notices\x20through\x20this\x20Contact.','value':b['um']?{'t':'addr','v':b['um'],'obj_type':'Contact'}:null},{'label':'Machine','tip':'Workflow\x20Machine\x20bound\x20to\x20this\x20Service.\x20Orders\x20inherit\x20it\x20at\x20buy\x20time\x20—\x20an\x20order\x27s\x20Machine\x20and\x20its\x20fulfillment\x20Progress\x20nodes\x20are\x20fixed\x20when\x20the\x20order\x20is\x20created.','value':b['machine']?{'t':'addr','v':b['machine'],'obj_type':'Machine'}:null},{'label':'Customer\x20requirements','tip':'Proof\x20types\x20every\x20customer\x20must\x20satisfy\x20before/while\x20ordering\x20(e.g.\x20ID\x20proof,\x20residency,\x20off-chain\x20signature).','value':b['customer_required']['length']?{'t':'text','v':b['customer_required']['join'](',\x20')}:null},{'label':'Arbitrations','tip':'Dispute\x20channels\x20bound\x20to\x20this\x20Service.\x20An\x20arbitration\x20resolves\x20conflicts\x20when\x20the\x20compensation-fund\x20claim-path\x20does\x20not\x20suffice.\x20While\x20published,\x20removing/clearing\x20is\x20gated\x20by\x20the\x20Setting\x20lock\x20(the\x20Service\x20must\x20be\x20paused\x20and\x20the\x20window\x20elapsed);\x20adding\x20is\x20allowed\x20anytime.','value':{'t':'count','n':b['arbitrations']['length'],'panel_title':'Arbitrations','addrs':b['arbitrations']}},{'label':'Rewards','tip':'On-chain\x20reward\x20pools\x20bound\x20to\x20this\x20Service\x20—\x20typically\x20pay\x20out\x20to\x20customers\x20on\x20purchase\x20milestones,\x20or\x20to\x20staff\x20for\x20on-time\x20fulfillment.\x20While\x20published,\x20removing/clearing\x20is\x20gated\x20by\x20the\x20Setting\x20lock\x20(the\x20Service\x20must\x20be\x20paused\x20and\x20the\x20window\x20elapsed);\x20adding\x20is\x20allowed\x20anytime.','value':{'t':'count','n':b['rewards']['length'],'panel_title':'Rewards','addrs':b['rewards']}},{'label':'Repositories','tip':'Evidence\x20/\x20data\x20repositories\x20consulted\x20for\x20fulfillment\x20proofs.\x20The\x20Machine\x20workflow\x20can\x20require\x20repository-gated\x20consensus\x20before\x20advancing\x20a\x20stage.','value':{'t':'count','n':b['repositories']['length'],'panel_title':'Repositories','addrs':b['repositories']}}]},h=a['machine_graph'],i=h?{'kind':'graph','title':'Workflow\x20Graph','empty':'No\x20workflow\x20machine\x20bound\x20to\x20this\x20Service.','graph':{'machineAddress':h['address'],'machineName':h['name'],'published':h['published'],'paused':h['paused'],'nodes':h['nodes'],'edges':h['edges']}}:null,j=a['allocator_guards']['map']((o,p)=>({'name':'Guard\x20'+(p+0x1),'ref':{'address':o['address'],'obj_type':'Guard'},'meta':[{'label':'entries','value':String(o['table_entry_count']),'tip':'Guard\x20table\x20entries\x20=\x20the\x20conditions\x20/\x20proof\x20slots\x20defined\x20in\x20this\x20guard.'},{'label':'submissions','value':String(o['submission_slot_count']),'tip':'Submission\x20slots\x20=\x20dynamic\x20proof\x20fields\x20the\x20operator\x20must\x20fill\x20at\x20execution\x20time.'},...o['rep']!=null?[{'label':'rep','value':o['rep']?'yes':'no','tip':'Reputation-flagged\x20guard\x20—\x20requires\x20a\x20reputation\x20marker\x20to\x20pass.'}]:[],...o['relies_logic_and']!=null?[{'label':'logic','value':o['relies_logic_and']?'AND':'OR','tip':'AND\x20=\x20all\x20relied-guards\x20must\x20pass;\x20OR\x20=\x20any\x20relied-guard\x20passing\x20is\x20enough.'}]:[],...o['relies']['length']>0x0?[{'label':'relies','value':String(o['relies']['length']),'tip':'Upstream\x20guards\x20this\x20guard\x20composes\x20with\x20(evidence\x20verification\x20chaining)\x20—\x20open\x20the\x20Guard\x20detail\x20for\x20the\x20full\x20tree.'}]:[]],'note':o['description']??undefined}));if(b['order_allocators']){const o=b['order_allocators'];j['push']({'name':'Order\x20allocators','meta':[{'label':'threshold','value':o['threshold']??'--','tip':'Escrow\x20amount\x20threshold\x20above\x20which\x20the\x20allocator\x20strategy\x20applies.'}],'note':o['description']||'(no\x20description)'}),o['allocators']['forEach']((p,q)=>{j['push']({'name':'Allocator\x20'+(q+0x1),'ref':{'address':p['guard'],'obj_type':'Guard'},'meta':[{'label':'shares','value':String(p['sharing_count']),'tip':'Number\x20of\x20settlement\x20shares\x20this\x20allocator\x20guard\x20controls.'},...p['max']?[{'label':'max','value':p['max'],'tip':'Per-share\x20cap\x20for\x20this\x20allocator\x20guard.'}]:[]]});});}const k={'kind':'items','title':'Allocation\x20Guards\x20('+a['allocator_guards']['length']+')','empty':'No\x20allocation\x20guards\x20—\x20settlement\x20splits\x20use\x20the\x20default\x20allocator\x20strategy.\x20(A\x20configured\x20purchase\x20guard\x20is\x20listed\x20in\x20the\x20Fields\x20card.)','items':j},l=a['related']['groups']['reduce']((p,q)=>p+q['items']['length'],0x0),m={'kind':'related','title':'Related\x20objects'+(l>0x0?'\x20('+l+')':''),'empty':'No\x20other\x20on-chain\x20objects\x20reference\x20or\x20use\x20this\x20Service\x20yet\x20—\x20orders,\x20progress,\x20allocations,\x20payments\x20and\x20guards\x20targeting\x20this\x20Service\x20will\x20appear\x20here.','groups':a['related']['groups']['map'](p=>({'label':p['type_label'],'items':p['items']['map'](q=>({'address':q['address'],'time':q['time']}))})),'count':l},n=[e,f,g,...i?[i]:[],k,m];return{'action':'review_pack','object_type':'Service','head':{'address':b['address'],'network':a['network'],'name':b['name'],'description':b['description']||null,'tags':b['tags'],'last_active_ms':b['onchain_last_updated']?Number(b['onchain_last_updated']['timestamp_ms'])||null:null,'badges':c,'info_rows':[]},'sections':n,'data_gaps':a['data_gaps']};}