@wowok/agent-mcp 2.7.8 → 2.7.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) hide show
  1. package/README.md +2 -2
  2. package/dist/config/runtime.d.ts +1 -1
  3. package/dist/config/runtime.js +1 -1
  4. package/dist/examples/rental-ziroom-machine-create.json +1 -2
  5. package/dist/examples/rental-ziroom-permission-create.json +1 -2
  6. package/dist/examples/rental-ziroom-service-create.json +1 -2
  7. package/dist/experience/experience-reuse.js +1 -1
  8. package/dist/experience/index.d.ts +2 -1
  9. package/dist/experience/index.js +1 -1
  10. package/dist/experience/persistence-config.d.ts +6 -0
  11. package/dist/experience/persistence-config.js +1 -0
  12. package/dist/experience/persistence.d.ts +21 -0
  13. package/dist/experience/persistence.js +1 -0
  14. package/dist/experience/realtime-feedback.js +1 -1
  15. package/dist/experience/user-profile.js +1 -1
  16. package/dist/extensions/business-modules.d.ts +1 -1
  17. package/dist/extensions/capability-manifest.d.ts +1 -1
  18. package/dist/extensions/types.d.ts +1 -1
  19. package/dist/goal/GoalClassifier.d.ts +17 -0
  20. package/dist/goal/GoalClassifier.js +1 -0
  21. package/dist/goal/GoalEngine.d.ts +120 -0
  22. package/dist/goal/GoalEngine.js +1 -0
  23. package/dist/goal/GoalStore.d.ts +27 -0
  24. package/dist/goal/GoalStore.js +1 -0
  25. package/dist/goal/plan-approval.d.ts +5 -0
  26. package/dist/goal/plan-approval.js +1 -0
  27. package/dist/goal/types.d.ts +76 -0
  28. package/dist/goal/types.js +1 -0
  29. package/dist/harness/index.d.ts +2 -7
  30. package/dist/harness/index.js +1 -1
  31. package/dist/harness/plan.d.ts +1 -1
  32. package/dist/harness/types.d.ts +0 -35
  33. package/dist/index.js +1 -1
  34. package/dist/knowledge/account-marks.d.ts +35 -0
  35. package/dist/knowledge/account-marks.js +1 -0
  36. package/dist/knowledge/audit-rules.d.ts +3 -1
  37. package/dist/knowledge/audit-rules.js +1 -1
  38. package/dist/knowledge/examples-scanner-cli.js +1 -1
  39. package/dist/knowledge/examples-scanner.js +1 -1
  40. package/dist/knowledge/goal-completion.d.ts +19 -0
  41. package/dist/knowledge/goal-completion.js +1 -0
  42. package/dist/knowledge/guard-translation.js +1 -1
  43. package/dist/knowledge/index.d.ts +3 -2
  44. package/dist/knowledge/index.js +1 -1
  45. package/dist/knowledge/industry-registry.js +1 -1
  46. package/dist/knowledge/mcp-schema-audit-cli.js +1 -1
  47. package/dist/knowledge/mcp-schema-audit.js +1 -1
  48. package/dist/knowledge/operation-dictionary.js +1 -1
  49. package/dist/knowledge/passport-confirm.js +1 -1
  50. package/dist/knowledge/passport-puzzle.js +1 -1
  51. package/dist/knowledge/passport-translation.js +1 -1
  52. package/dist/knowledge/proof-risk.js +1 -1
  53. package/dist/knowledge/safety-rules.js +1 -1
  54. package/dist/knowledge/service-translation.js +1 -1
  55. package/dist/knowledge/template-registry.js +1 -1
  56. package/dist/knowledge/tools-reference.js +1 -1
  57. package/dist/knowledge/workflow-guidance.d.ts +1 -0
  58. package/dist/knowledge/workflow-guidance.js +1 -1
  59. package/dist/knowledge/workspace-lists.d.ts +56 -0
  60. package/dist/knowledge/workspace-lists.js +1 -0
  61. package/dist/loop-engineering/context-collect.d.ts +1 -1
  62. package/dist/monitor/EventRouter.d.ts +10 -0
  63. package/dist/monitor/EventRouter.js +1 -0
  64. package/dist/monitor/EventStore.d.ts +32 -12
  65. package/dist/monitor/EventStore.js +1 -1
  66. package/dist/monitor/MonitorLoop.d.ts +79 -0
  67. package/dist/monitor/MonitorLoop.js +1 -0
  68. package/dist/monitor/ProblemBridge.d.ts +32 -0
  69. package/dist/monitor/ProblemBridge.js +1 -0
  70. package/dist/monitor/ScopeResolver.d.ts +59 -0
  71. package/dist/monitor/ScopeResolver.js +1 -0
  72. package/dist/monitor/SubscriptionStore.d.ts +13 -0
  73. package/dist/monitor/SubscriptionStore.js +1 -0
  74. package/dist/monitor/normalize.d.ts +8 -0
  75. package/dist/monitor/normalize.js +1 -0
  76. package/dist/monitor/types.d.ts +89 -0
  77. package/dist/monitor/types.js +1 -0
  78. package/dist/persona/address-format.d.ts +1 -1
  79. package/dist/persona/address-format.js +1 -1
  80. package/dist/persona/distill-goal.d.ts +20 -0
  81. package/dist/persona/distill-goal.js +1 -0
  82. package/dist/persona/index.d.ts +2 -0
  83. package/dist/persona/index.js +1 -1
  84. package/dist/persona/model.js +1 -1
  85. package/dist/playbooks/service-build/business-puzzle.js +1 -0
  86. package/dist/{project → playbooks/service-build}/context-assembly.d.ts +9 -4
  87. package/dist/playbooks/service-build/context-assembly.js +1 -0
  88. package/dist/{project → playbooks/service-build}/game-theory.d.ts +1 -1
  89. package/dist/playbooks/service-build/index.d.ts +14 -0
  90. package/dist/playbooks/service-build/index.js +1 -0
  91. package/dist/{project → playbooks/service-build}/intent-analyzer.d.ts +1 -1
  92. package/dist/playbooks/service-build/intent-analyzer.js +1 -0
  93. package/dist/{project → playbooks/service-build}/machine-panorama.d.ts +5 -3
  94. package/dist/playbooks/service-build/machine-panorama.js +1 -0
  95. package/dist/{project → playbooks/service-build}/merchant-guide.d.ts +1 -1
  96. package/dist/playbooks/service-build/merchant-guide.js +1 -0
  97. package/dist/{project → playbooks/service-build}/mode-actions.d.ts +2 -2
  98. package/dist/playbooks/service-build/mode-actions.js +1 -0
  99. package/dist/playbooks/service-build/namespace.d.ts +2 -0
  100. package/dist/playbooks/service-build/namespace.js +1 -0
  101. package/dist/{project → playbooks/service-build}/object-panorama.d.ts +2 -3
  102. package/dist/playbooks/service-build/object-panorama.js +1 -0
  103. package/dist/{project → playbooks/service-build}/participation-radar.d.ts +4 -5
  104. package/dist/playbooks/service-build/participation-radar.js +1 -0
  105. package/dist/{project → playbooks/service-build}/pipeline-actions.d.ts +9 -9
  106. package/dist/playbooks/service-build/pipeline-actions.js +1 -0
  107. package/dist/playbooks/service-build/process.d.ts +6 -0
  108. package/dist/playbooks/service-build/process.js +1 -0
  109. package/dist/playbooks/service-build/risk-aggregator.js +1 -0
  110. package/dist/{project → playbooks/service-build}/semantic-graph.d.ts +2 -2
  111. package/dist/{project → playbooks/service-build}/service-panorama.d.ts +3 -19
  112. package/dist/playbooks/service-build/service-panorama.js +1 -0
  113. package/dist/review/arb.d.ts +6 -0
  114. package/dist/review/arb.js +1 -0
  115. package/dist/review/demand.d.ts +3 -0
  116. package/dist/review/demand.js +1 -0
  117. package/dist/review/index.d.ts +3 -0
  118. package/dist/review/index.js +1 -0
  119. package/dist/review/machine.d.ts +3 -0
  120. package/dist/review/machine.js +1 -0
  121. package/dist/review/order.d.ts +9 -0
  122. package/dist/review/order.js +1 -0
  123. package/dist/review/progress.d.ts +3 -0
  124. package/dist/review/progress.js +1 -0
  125. package/dist/review/repository.d.ts +3 -0
  126. package/dist/review/repository.js +1 -0
  127. package/dist/review/service.d.ts +5 -0
  128. package/dist/review/service.js +1 -0
  129. package/dist/review/types.d.ts +156 -0
  130. package/dist/review/types.js +1 -0
  131. package/dist/rules.d.ts +2 -2
  132. package/dist/rules.js +1 -1
  133. package/dist/safety/confirm-gate.js +1 -1
  134. package/dist/safety/index.d.ts +1 -1
  135. package/dist/safety/index.js +1 -1
  136. package/dist/safety/preview.d.ts +1 -0
  137. package/dist/safety/preview.js +1 -1
  138. package/dist/schema/call/allocation.d.ts +1 -1
  139. package/dist/schema/call/arbitration.d.ts +1 -1
  140. package/dist/schema/call/base.d.ts +1 -1
  141. package/dist/schema/call/base.js +1 -1
  142. package/dist/schema/call/bridge.d.ts +4 -4
  143. package/dist/schema/call/contact.d.ts +1 -1
  144. package/dist/schema/call/contact.js +1 -1
  145. package/dist/schema/call/demand.d.ts +1 -1
  146. package/dist/schema/call/demand.js +1 -1
  147. package/dist/schema/call/guard.d.ts +3 -3
  148. package/dist/schema/call/handler.d.ts +0 -3
  149. package/dist/schema/call/handler.js +1 -1
  150. package/dist/schema/call/machine.d.ts +2 -2
  151. package/dist/schema/call/order.d.ts +1 -1
  152. package/dist/schema/call/payment.d.ts +1 -1
  153. package/dist/schema/call/permission.d.ts +1 -1
  154. package/dist/schema/call/personal.d.ts +1 -1
  155. package/dist/schema/call/progress.d.ts +1 -1
  156. package/dist/schema/call/proof.d.ts +2 -2
  157. package/dist/schema/call/repository.d.ts +1 -1
  158. package/dist/schema/call/repository.js +1 -1
  159. package/dist/schema/call/reward.d.ts +1 -1
  160. package/dist/schema/call/semantic.js +1 -1
  161. package/dist/schema/call/service.d.ts +1 -1
  162. package/dist/schema/call/service.js +1 -1
  163. package/dist/schema/call/treasury.d.ts +1 -1
  164. package/dist/schema/common/index.js +1 -1
  165. package/dist/schema/goal/index.d.ts +317 -0
  166. package/dist/schema/goal/index.js +1 -0
  167. package/dist/schema/goal/planning.d.ts +465 -0
  168. package/dist/schema/goal/planning.js +1 -0
  169. package/dist/schema/index.d.ts +1 -2
  170. package/dist/schema/index.js +1 -1
  171. package/dist/schema/industry-pack/index.d.ts +265 -1
  172. package/dist/schema/industry-pack/index.js +1 -1
  173. package/dist/schema/industry-pack/modes.d.ts +268 -0
  174. package/dist/schema/industry-pack/modes.js +1 -0
  175. package/dist/schema/local/index.js +1 -1
  176. package/dist/schema/operations.d.ts +216 -19
  177. package/dist/schema/operations.js +1 -1
  178. package/dist/schema/permission/index.d.ts +1 -0
  179. package/dist/schema/permission/index.js +1 -1
  180. package/dist/schema/persona/index.d.ts +40 -0
  181. package/dist/schema/persona/index.js +1 -1
  182. package/dist/schema/query/bi.d.ts +783 -0
  183. package/dist/schema/query/bi.js +1 -0
  184. package/dist/schema/query/index.d.ts +661 -0
  185. package/dist/schema/query/index.js +1 -1
  186. package/dist/schema/schema-version.js +1 -1
  187. package/dist/schema/utils/skills-recommendation.d.ts +0 -1
  188. package/dist/schema/utils/skills-recommendation.js +1 -1
  189. package/dist/schema-query-impl/index.js +1 -1
  190. package/dist/schemas/account_operation.output.json +3 -3
  191. package/dist/schemas/account_operation.schema.json +2 -2
  192. package/dist/schemas/bridge_operation.output.json +2 -2
  193. package/dist/schemas/bridge_operation.schema.json +12 -12
  194. package/dist/schemas/config_operation.output.json +1 -1
  195. package/dist/schemas/config_operation.schema.json +1 -1
  196. package/dist/schemas/goal_operation.schema.json +1016 -0
  197. package/dist/schemas/guard2file.schema.json +3 -3
  198. package/dist/schemas/index.json +12 -13
  199. package/dist/schemas/industry_pack_operation.output.json +898 -0
  200. package/dist/schemas/industry_pack_operation.schema.json +217 -2
  201. package/dist/schemas/local_info_operation.output.json +2 -2
  202. package/dist/schemas/local_mark_operation.output.json +2 -2
  203. package/dist/schemas/machineNode2file.schema.json +3 -3
  204. package/dist/schemas/messenger_operation.output.json +2 -2
  205. package/dist/schemas/monitor_events.output.json +78 -3
  206. package/dist/schemas/monitor_events.schema.json +24 -1
  207. package/dist/schemas/monitor_subscription.output.json +1462 -0
  208. package/dist/schemas/monitor_subscription.schema.json +327 -0
  209. package/dist/schemas/onchain_events.output.json +4 -4
  210. package/dist/schemas/onchain_operations.output.json +2 -2
  211. package/dist/schemas/onchain_operations.schema.json +59 -59
  212. package/dist/schemas/onchain_operations_allocation.schema.json +3 -3
  213. package/dist/schemas/onchain_operations_arbitration.schema.json +3 -3
  214. package/dist/schemas/onchain_operations_contact.schema.json +4 -4
  215. package/dist/schemas/onchain_operations_demand.schema.json +4 -4
  216. package/dist/schemas/onchain_operations_gen_passport.schema.json +3 -3
  217. package/dist/schemas/onchain_operations_gen_proof.schema.json +3 -3
  218. package/dist/schemas/onchain_operations_guard.schema.json +3 -3
  219. package/dist/schemas/onchain_operations_machine.schema.json +3 -3
  220. package/dist/schemas/onchain_operations_order.schema.json +3 -3
  221. package/dist/schemas/onchain_operations_payment.schema.json +3 -3
  222. package/dist/schemas/onchain_operations_permission.schema.json +3 -3
  223. package/dist/schemas/onchain_operations_personal.schema.json +3 -3
  224. package/dist/schemas/onchain_operations_progress.schema.json +3 -3
  225. package/dist/schemas/onchain_operations_proof.schema.json +3 -3
  226. package/dist/schemas/onchain_operations_repository.schema.json +5 -5
  227. package/dist/schemas/onchain_operations_reward.schema.json +3 -3
  228. package/dist/schemas/onchain_operations_service.schema.json +4 -4
  229. package/dist/schemas/onchain_operations_treasury.schema.json +3 -3
  230. package/dist/schemas/onchain_table_data.output.json +346 -2
  231. package/dist/schemas/onchain_table_data.schema.json +22 -22
  232. package/dist/schemas/permission_operation.schema.json +6 -2
  233. package/dist/schemas/persona_operation.output.json +145 -0
  234. package/dist/schemas/persona_operation.schema.json +28 -2
  235. package/dist/schemas/query_toolkit.output.json +1274 -15
  236. package/dist/schemas/query_toolkit.schema.json +412 -11
  237. package/dist/schemas/workflow_operation.schema.json +4 -4
  238. package/dist/task/ProcessStore.d.ts +81 -0
  239. package/dist/task/ProcessStore.js +1 -0
  240. package/dist/task/playbook.d.ts +11 -0
  241. package/dist/task/playbook.js +1 -0
  242. package/dist/task/stage-gate.d.ts +22 -0
  243. package/dist/task/stage-gate.js +1 -0
  244. package/dist/{project → task}/substep-trace.d.ts +6 -45
  245. package/dist/task/types.d.ts +120 -0
  246. package/dist/task/types.js +1 -0
  247. package/dist/tools/handlers/config.js +1 -1
  248. package/dist/tools/handlers/goal.d.ts +4 -0
  249. package/dist/tools/handlers/goal.js +1 -0
  250. package/dist/tools/handlers/industry-pack.js +1 -1
  251. package/dist/tools/handlers/monitor.d.ts +24 -0
  252. package/dist/tools/handlers/monitor.js +1 -1
  253. package/dist/tools/handlers/network.d.ts +1 -0
  254. package/dist/tools/handlers/network.js +1 -0
  255. package/dist/tools/handlers/onchain.js +1 -1
  256. package/dist/tools/handlers/permission.js +1 -1
  257. package/dist/tools/handlers/persona.js +1 -1
  258. package/dist/tools/handlers/query.js +1 -1
  259. package/dist/tools/handlers/watch.js +1 -1
  260. package/dist/tools/index.d.ts +2 -0
  261. package/dist/tools/index.js +1 -1
  262. package/dist/tools/shared.js +1 -1
  263. package/dist/tools/wrap.js +1 -1
  264. package/package.json +5 -4
  265. package/dist/harness/checkpoint.d.ts +0 -8
  266. package/dist/harness/checkpoint.js +0 -1
  267. package/dist/knowledge/deployment-scanner.d.ts +0 -66
  268. package/dist/knowledge/deployment-scanner.js +0 -1
  269. package/dist/project/business-puzzle.js +0 -1
  270. package/dist/project/context-assembly.js +0 -1
  271. package/dist/project/deployment-bridge.d.ts +0 -5
  272. package/dist/project/deployment-bridge.js +0 -1
  273. package/dist/project/deployment-doc.d.ts +0 -190
  274. package/dist/project/deployment-doc.js +0 -1
  275. package/dist/project/edit-planner.d.ts +0 -123
  276. package/dist/project/edit-planner.js +0 -1
  277. package/dist/project/evaluation-fix.spec.d.ts +0 -1
  278. package/dist/project/evaluation-fix.spec.js +0 -1
  279. package/dist/project/evaluation.d.ts +0 -127
  280. package/dist/project/evaluation.js +0 -1
  281. package/dist/project/graph-builder.d.ts +0 -51
  282. package/dist/project/graph-builder.js +0 -1
  283. package/dist/project/graph.d.ts +0 -70
  284. package/dist/project/graph.js +0 -1
  285. package/dist/project/handlers.d.ts +0 -524
  286. package/dist/project/handlers.js +0 -1
  287. package/dist/project/index.d.ts +0 -91
  288. package/dist/project/index.js +0 -1
  289. package/dist/project/intent-analyzer.js +0 -1
  290. package/dist/project/machine-panorama.js +0 -1
  291. package/dist/project/merchant-guide.js +0 -1
  292. package/dist/project/mode-actions.js +0 -1
  293. package/dist/project/namespace.d.ts +0 -72
  294. package/dist/project/namespace.js +0 -1
  295. package/dist/project/object-panorama.js +0 -1
  296. package/dist/project/participation-radar.js +0 -1
  297. package/dist/project/pipeline-actions.js +0 -1
  298. package/dist/project/project-store.d.ts +0 -110
  299. package/dist/project/project-store.js +0 -1
  300. package/dist/project/query.d.ts +0 -43
  301. package/dist/project/query.js +0 -1
  302. package/dist/project/risk-aggregator.js +0 -1
  303. package/dist/project/semantic-assembler.d.ts +0 -93
  304. package/dist/project/semantic-assembler.js +0 -1
  305. package/dist/project/service-panorama.js +0 -1
  306. package/dist/project/stage-gate.d.ts +0 -52
  307. package/dist/project/stage-gate.js +0 -1
  308. package/dist/project/task-tracker.d.ts +0 -30
  309. package/dist/project/task-tracker.js +0 -1
  310. package/dist/schema/project/index.d.ts +0 -2021
  311. package/dist/schema/project/index.js +0 -1
  312. package/dist/schema/task-status.d.ts +0 -62
  313. package/dist/schema/task-status.js +0 -1
  314. package/dist/schemas/project_operation.output.json +0 -7877
  315. package/dist/schemas/project_operation.schema.json +0 -1139
  316. package/dist/schemas/query_task_status.output.json +0 -211
  317. package/dist/schemas/query_task_status.schema.json +0 -18
  318. package/dist/tools/handlers/project.d.ts +0 -2
  319. package/dist/tools/handlers/project.js +0 -1
  320. package/dist/tools/handlers/task-status.d.ts +0 -2
  321. package/dist/tools/handlers/task-status.js +0 -1
  322. /package/dist/{project → playbooks/service-build}/business-puzzle.d.ts +0 -0
  323. /package/dist/{project → playbooks/service-build}/game-theory.js +0 -0
  324. /package/dist/{project → playbooks/service-build}/machine-nodes.d.ts +0 -0
  325. /package/dist/{project → playbooks/service-build}/machine-nodes.js +0 -0
  326. /package/dist/{project → playbooks/service-build}/object-type.d.ts +0 -0
  327. /package/dist/{project → playbooks/service-build}/object-type.js +0 -0
  328. /package/dist/{project → playbooks/service-build}/reverse-mapping.d.ts +0 -0
  329. /package/dist/{project → playbooks/service-build}/reverse-mapping.js +0 -0
  330. /package/dist/{project → playbooks/service-build}/risk-aggregator.d.ts +0 -0
  331. /package/dist/{project → playbooks/service-build}/semantic-graph.js +0 -0
  332. /package/dist/{project → playbooks/service-build}/workflow-design-assessment.d.ts +0 -0
  333. /package/dist/{project → playbooks/service-build}/workflow-design-assessment.js +0 -0
  334. /package/dist/{project → task}/substep-trace.js +0 -0
@@ -0,0 +1 @@
1
+ import{ensureServiceBuildProcess,openServiceBuildProcessDir,SERVICE_BUILD_STAGES}from'./process.js';import{loadManifest,loadStageState,saveStageState}from'../../task/ProcessStore.js';const STAGE_CACHE=new Map();function stageCacheKey(a,b){return a+':'+b;}export function getStageCache(a,b){const c=stageCacheKey(a,b),d=STAGE_CACHE['get'](c);if(d)return d;const e=openServiceBuildProcessDir(a,b),f=loadStageState(e);if(f){const g={'stage':SERVICE_BUILD_STAGES['includes'](f['current_stage'])?f['current_stage']:SERVICE_BUILD_STAGES[0x0],'updated_at':f['updated_at']};return STAGE_CACHE['set'](c,g),g;}return undefined;}export function updateStageCache(a,b,c){const d=stageCacheKey(a,b),e=STAGE_CACHE['get'](d),f={'stage':c['stage']??e?.['stage']??SERVICE_BUILD_STAGES[0x0],'updated_at':Date['now'](),...e,...c};return STAGE_CACHE['set'](d,f),persistStageState(a,b,f),f;}function persistStageState(a,b,c){try{const d=ensureServiceBuildProcess(a,b,'service-build-v'+SERVICE_BUILD_CACHE_VERSION),e=loadManifest(d);if(e['archived'])return;const f=loadStageState(d);if(!f)return;f['current_stage']=SERVICE_BUILD_STAGES['includes'](c['stage'])?c['stage']:SERVICE_BUILD_STAGES[0x0],f['updated_at']=c['updated_at'],saveStageState(d,f);}catch{}}export const SERVICE_BUILD_CACHE_VERSION=0x1;
@@ -1,4 +1,4 @@
1
- import type { IndustryTraits } from "../knowledge/industry-registry.js";
1
+ import type { IndustryTraits } from "../../knowledge/industry-registry.js";
2
2
  export type BusinessIntentType = "sell_service" | "sell_product" | "sell_subscription" | "rent_asset" | "crowdfund" | "escrow";
3
3
  export interface RoleDefinition {
4
4
  name: string;
@@ -0,0 +1 @@
1
+ import{findSimilarIndustries,inferTraitsFromDescription}from'../../knowledge/industry-generalizer.js';const INTENT_KEYWORDS={'sell_service':['design','develop','consult','freelance','service','build','create','write','translate'],'sell_product':['sell','product','item','goods','merchandise','store','shop'],'sell_subscription':['subscribe','subscription','membership','monthly','recurring','creator','patron'],'rent_asset':['rent','rental','lease','borrow','car','house','apartment','equipment'],'crowdfund':['crowdfund','fund','raise','campaign','donation','backer'],'escrow':['escrow','hold','mediate','intermediary','safe','secure\x20transaction']};function classifyIntentType(a){const b=a['toLowerCase']();let c='sell_service',d=0x0;for(const [e,f]of Object['entries'](INTENT_KEYWORDS)){const g=f['filter'](h=>b['includes'](h))['length'];g>d&&(d=g,c=e);}return c;}function inferPaymentModel(a){const b=a['toLowerCase']();if(b['includes']('milestone')||b['includes']('phase')||b['includes']('stage'))return'milestone';if(b['includes']('subscription')||b['includes']('monthly')||b['includes']('recurring'))return'subscription';if(b['includes']('per\x20use')||b['includes']('hourly')||b['includes']('per\x20session'))return'per_use';if(b['includes']('escrow')||b['includes']('hold'))return'escrow';return'upfront';}function inferRefundPolicy(a){const b=a['toLowerCase']();if(b['includes']('no\x20refund')||b['includes']('non-refundable'))return'no_refund';if(b['includes']('milestone')&&b['includes']('refund'))return'milestone_prorated';if(b['includes']('full\x20refund'))return'full';return'partial';}function inferArbitration(a){const b=a['toLowerCase']();if(b['includes']('no\x20arbitration')||b['includes']('no\x20dispute'))return'none';if(b['includes']('third\x20party')||b['includes']('independent'))return'third_party';if(b['includes']('mutual'))return'mutual_pick';return'merchant_pick';}export async function analyzeIntent(a,b){const c=[],d=classifyIntentType(a),e=inferTraitsFromDescription(a),f=findSimilarIndustries(e['traits'],0x3),g=f['map'](n=>n['industry']),h=b?.['preferredIndustry']??g[0x0]??'general',i=g['includes'](h)?0.85:0.5,j=e['traits'],k={'intent':d,'industry':h,'description':a,'roles':{'merchant':{'name':'merchant','description':'Service\x20provider\x20or\x20seller','obligations':['Deliver\x20as\x20described','Maintain\x20compensation_fund\x20if\x20required','Accept\x20arbitration\x20verdicts'],'rights':['Receive\x20payment\x20upon\x20verified\x20delivery','Set\x20service\x20terms\x20before\x20publish']},'customer':{'name':'customer','description':'Buyer\x20or\x20service\x20recipient','obligations':['Pay\x20according\x20to\x20agreed\x20schedule','Provide\x20acceptance/rejection\x20within\x20timeout'],'rights':['Receive\x20deliverables\x20as\x20described','Request\x20refund\x20if\x20delivery\x20fails','Initiate\x20arbitration\x20for\x20disputes']}},'deliverables':[{'name':'main_deliverable','type':inferDeliverableType(a),'acceptanceCriteria':'To\x20be\x20defined\x20by\x20merchant\x20during\x20configuration','proofOfDelivery':'wip_hash'}],'payment':{'model':inferPaymentModel(a),'currency':b?.['currency']??'WOW','triggers':[{'event':inferPaymentModel(a)==='milestone'?'milestone\x20completion':'service\x20confirmation','guardDescription':'Guard\x20verifies\x20deliverable\x20meets\x20acceptance\x20criteria'}],'allocation':[{'recipient':'merchant','percentage':0x5a},{'recipient':'platform','percentage':0x0},{'recipient':'arbitration_reserve','percentage':0xa}]},'trust':{'refundPolicy':inferRefundPolicy(a),'arbitration':inferArbitration(a),'escrow':!![],'transparency':'full'}};k['payment']['model']==='milestone'&&!a['toLowerCase']()['includes']('milestone')&&c['push']('Payment\x20model\x20inferred\x20as\x20\x27milestone\x27\x20but\x20not\x20explicitly\x20mentioned.\x20Please\x20verify.');k['trust']['arbitration']==='none'&&c['push']('No\x20arbitration\x20configured.\x20This\x20increases\x20risk\x20for\x20both\x20parties.\x20Consider\x20adding\x20independent_arbitration\x20module.');k['payment']['allocation']&&k['payment']['allocation']['some'](n=>n['recipient']==='platform'&&n['percentage']>0x0)&&c['push']('Platform\x20fee\x20>\x200\x20detected.\x20WOW\x20philosophy\x20recommends\x200%\x20platform\x20fee\x20for\x20peer-to-peer\x20transactions.');const l=a['toLowerCase']();/(refund|cancel|dispute)/['test'](l)&&k['payment']['model']==='milestone'&&c['push']('T1\x20B-1:\x20\x27refund/dispute\x27\x20must\x20be\x20modeled\x20via\x20the\x20Allocation\x20waterfall\x20(order_allocators)\x20+\x20'+'the\x20bound\x20Arbitration\x20—\x20NOT\x20a\x20Machine\x20\x27refunded\x27/\x27disputed\x27\x20node\x20(R-M1-11).');/(按(实际|定损|损失|评估)[^。]{0,8}(金额|赔付|赔偿)|variable amount|dynamic amount|actual loss|assessed loss)/['test'](l)&&c['push']('T1\x20B-2:\x20a\x20variable/conditional\x20payout\x20amount\x20cannot\x20be\x20expressed\x20in\x20Allocation\x20—\x20amounts\x20are\x20'+'pre-configured.\x20Use\x20fixed\x20tiers\x20guarded\x20by\x20distinct\x20Guards,\x20or\x20an\x20Amount\x20with\x20a\x20max\x20cap.');/(auto|automatic|automatically|after \d+ (day|hour|week)|within \d+ (day|hour|week)|自动|到期后)/['test'](l)&&c['push']('T1\x20B-3:\x20\x27auto\x20/\x20after\x20N\x20days\x27\x20has\x20no\x20on-chain\x20cron\x20—\x20it\x20requires\x20a\x20time_guard\x20PLUS\x20an\x20off-chain\x20'+'keeper\x20to\x20submit.\x20Configuring\x20a\x20time_guard\x20without\x20a\x20keeper\x20means\x20nothing\x20ever\x20fires.');let m=[];try{const {recommendModules:n}=await import('../../extensions/business-modules.js'),o=n(h,a,{'maxModules':0x5});m=o['map'](p=>p['id']);}catch{m=['milestone_escrow','independent_arbitration','wip_provenance'];}return{'intent':k,'inferredIndustry':h,'industryConfidence':i,'similarIndustries':g,'inferredTraits':j,'recommendedModules':m,'warnings':c};}function inferDeliverableType(a){const b=a['toLowerCase']();if(b['includes']('design')||b['includes']('code')||b['includes']('write')||b['includes']('digital'))return'digital';if(b['includes']('class')||b['includes']('lesson')||b['includes']('session'))return'service_session';if(b['includes']('rent')||b['includes']('access'))return'access_right';return'physical';}
@@ -1,7 +1,6 @@
1
- import type { z } from "zod";
2
- import type { ProjectOperationInputSchema } from "../schema/project/index.js";
1
+ import type { MachinePanoramaInput } from "../../schema/query/bi.js";
3
2
  import { type MachineGraphNode, type MachineGraphEdge } from "./machine-nodes.js";
4
- type ProjectInput = z.infer<typeof ProjectOperationInputSchema>;
3
+ type ProjectInput = MachinePanoramaInput;
5
4
  export interface MachinePanoramaResult {
6
5
  action: "machine_panorama";
7
6
  machineAddress: string;
@@ -35,6 +34,9 @@ export interface MachinePanoramaResult {
35
34
  created_at: number | null;
36
35
  }[];
37
36
  };
37
+ related: {
38
+ count: number;
39
+ };
38
40
  data_gaps: string[];
39
41
  }
40
42
  export declare function handleMachinePanorama(v: ProjectInput): Promise<MachinePanoramaResult>;
@@ -0,0 +1 @@
1
+ import{Config,LocalMark,query_objects,queryTableItem_ObjectLinkerTx,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{fetchMachineNodes,buildMachineGraph}from'./machine-nodes.js';export async function handleMachinePanorama(a){const b=a['object_address'];if(!b)throw new Error('\x27object_address\x27\x20is\x20required\x20for\x20machine_panorama');let c=a['context_network']??undefined;const d=[];let f=b;if(!/^0x[0-9a-fA-F]{32,64}$/['test'](b)){const p=await LocalMark['Instance']()['get_address'](b);if(!p)throw new Error('Cannot\x20resolve\x20machine\x20\x27'+b+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.\x20'+'Pass\x20the\x200x\x20Machine\x20object\x20address\x20directly\x20or\x20register\x20the\x20name\x20via\x20local_mark_operation.');f=p;}let g=null;try{if(!c)c=await Config['Instance']()['network_get']();const q=await query_objects({'objects':[f],'network':c});g=q?.['objects']?.[0x0]??null;if(!g&&a['context_network']){const s=await Config['Instance']()['network_get']();if(s&&s!==c){const t=await query_objects({'objects':[f],'network':s,'no_cache':!![]}),u=t?.['objects']?.[0x0]??null;u&&(g=u,c=s);}}}catch(w){throw new Error('Failed\x20to\x20query\x20Machine\x20'+f+'\x20on\x20'+c+':\x20'+(''+(w instanceof Error?w['message']:String(w))));}if(!g)throw new Error('Machine\x20'+f+'\x20not\x20found\x20on\x20'+c+'.\x20It\x20may\x20not\x20exist\x20on\x20this\x20network.');f=g['object']??f;let h=null,j=[];try{const x=await LocalMark['Instance']()['list']({'address':f});x['length']>0x0&&(h=x[0x0]['name']??null,j=(x[0x0]['tags']??[])['map'](y=>String(y)));}catch{d['push']('head:\x20LocalMark\x20lookup\x20failed');}let k={'nodes':[],'edges':[]};try{const y=await fetchMachineNodes(f,c);k=buildMachineGraph(y);}catch{d['push']('graph:\x20node\x20fetch\x20failed\x20(non-blocking)');}const l=[];let m=0x0,n=0x0;try{const z=await queryTableItem_ObjectLinkerTx({'address':f,'no_cache':!![],'network':c}),A=z?.['items']??[],B=new Set();for(const G of A){const H=typeof G?.['who']==='string'?G['who']['toLowerCase']():'';if(!H||H==='0x0')continue;if(!objectTypeFromAddress(H))continue;B['add'](H);}n=B['size'];const C=A['filter'](I=>objectTypeFromAddress(I['who'])===ObjectType['Progress']);m=C['length'];const D=C['slice'](-0x32)['reverse'](),E=D['map'](I=>I['who']),F=new Map();if(E['length']>0x0)try{const I=await query_objects({'objects':E,'network':c});for(const J of I?.['objects']??[]){if(J?.['object'])F['set'](J['object'],J);}}catch{d['push']('progresses:\x20detail\x20fetch\x20failed');}for(const K of D){const L=typeof K?.['who']==='string'?K['who']:'';if(!L)continue;const M=F['get'](L);l['push']({'progress':L,'name':null,'current':M?.['current']??null,'task':M?.['task']??null,'history_count':typeof M?.['history_count']==='number'?M['history_count']:null,'current_time':typeof M?.['current_time']==='number'?M['current_time']:null,'created_at':typeof K?.['time']==='number'?K['time']:null});}}catch{d['push']('progresses:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}return{'action':'machine_panorama','machineAddress':f,'network':String(c),'head':{'name':h,'tags':j,'description':typeof g['description']==='string'?g['description']:null,'published':typeof g['bPublished']==='boolean'?g['bPublished']:null,'paused':typeof g['bPaused']==='boolean'?g['bPaused']:null},'fields':{'permission':g['permission']??null,'um':g['um']??null,'node_count':typeof g['node_count']==='number'?g['node_count']:null,'consensus_repositories':Array['isArray'](g['consensus_repositories'])?g['consensus_repositories']:[]},'graph':k,'progresses':{'count':m,'items':l},'related':{'count':n},'data_gaps':d};}
@@ -1,5 +1,5 @@
1
1
  import { type BusinessIntent, type DeliverableDefinition, type PaymentIntent, type TrustIntent } from "./intent-analyzer.js";
2
- import { type BusinessModuleId } from "../extensions/business-modules.js";
2
+ import { type BusinessModuleId } from "../../extensions/business-modules.js";
3
3
  export interface GuideState {
4
4
  intent_text: string;
5
5
  confirmed_industry?: string;
@@ -0,0 +1 @@
1
+ import{analyzeIntent}from'./intent-analyzer.js';import{buildSemanticGraph,validateGraph}from'./semantic-graph.js';import{checkGameTheoryConstraints}from'./game-theory.js';import{assessWorkflowDesign}from'./workflow-design-assessment.js';import{CORE_BUSINESS_MODULES,getBusinessModule,recommendModules,checkModuleConstraints}from'../../extensions/business-modules.js';function derivePlanSatisfiedConstraints(a,b){const c=new Set(),d=h=>a['edges']['some'](i=>i['relation']===h),e=h=>a['nodes']['some'](i=>i['id']===h),f=h=>a['nodes']['some'](i=>i['type']===h),g=h=>a['adoptedModules']['includes'](h);if(d('has_order_allocators'))c['add']('order_allocators_bound');if(d('uses_machine'))c['add']('machine_bound_before_publish');if(d('has_arbitration'))c['add']('arbitration_bound_to_service');if(e('main_machine'))c['add']('machine_published');if(e('main_repository'))c['add']('repository_published');if(e('main_service'))c['add']('service_published');e('arb_permission')&&e('main_permission')&&c['add']('arbitration_permission_independent');g('independent_arbitration')&&e('guard_independent_arbitration')&&c['add']('voting_guard_configured');g('accept_timeout_protection')&&(c['add']('time_guard_configured'),c['add']('adminUnhold_permission'));g('milestone_escrow')&&f('guard')&&c['add']('milestone_forward_guarded');if(e('main_allocation')&&b['payment']['allocation']&&b['payment']['allocation']['length']>0x0){c['add']('allocators_configured');const h=b['payment']['allocation']['reduce']((j,k)=>j+k['percentage'],0x0);if(Math['abs'](h-0x64)<0.001)c['add']('sharing_sum_100');const i=b['payment']['allocation']['find'](j=>j['recipient']==='platform');if(i&&i['percentage']===0x0)c['add']('platform_fee_zero');g('supplier_collaboration')&&(c['add']('allocation_sharing_configured'),c['add']('demand_configured'));}return g('wip_provenance')&&e('main_repository')&&c['add']('wip_hash_before_delivery'),g('subscription_with_proof')&&e('main_repository')&&(c['add']('delivery_guard_per_cycle'),c['add']('repository_updated')),g('damage_attestation')&&(c['add']('pre_rental_hash'),c['add']('post_rental_hash')),g('refund_guarantee')&&(c['add']('compensation_fund_positive'),c['add']('refund_guard_configured')),c;}function deriveDeployTimeChecks(a){const b=[];return a['nodes']['some'](c=>c['id']==='main_machine')&&b['push']('Machine\x20published\x20AND\x20bound\x20to\x20Service\x20BEFORE\x20Service.publish\x20(machine\x20is\x20immutable\x20after\x20publish)'),a['edges']['some'](c=>c['relation']==='has_order_allocators')&&b['push']('Service.order_allocators\x20bound\x20(verify\x20via\x20query_objects\x20after\x20publish\x20—\x20order_allocators\x20is\x20FROZEN\x20at\x20publish)'),a['nodes']['some'](c=>c['id']==='main_arbitration')&&b['push']('Arbitration.permission\x20!=\x20Service.permission\x20on-chain\x20(E_ARBITRATION_PERMISSION_CONFLICT=33)'),a['nodes']['some'](c=>c['id']==='main_repository')&&b['push']('Repository\x20published\x20and\x20Guard\x20write\x20validation\x20configured'),b['push']('After\x20materialization,\x20confirm\x20the\x20on-chain\x20state\x20matches\x20this\x20plan\x20(query_toolkit\x20query_type=\x27service_panorama\x27)'),b;}function buildCreationPlan(a){const b=[],c=new Map(a['nodes']['map'](i=>[i['id'],i])),f=new Map();for(const i of a['nodes'])f['set'](i['id'],new Set());for(const j of a['edges']){j['required']&&f['has'](j['from'])&&c['has'](j['to'])&&f['get'](j['from'])['add'](j['to']);}const g=[],h=new Map(f);while(h['size']>0x0){const k=[...h['entries']()]['filter'](([,l])=>l['size']===0x0)['map'](([l])=>l);if(k['length']===0x0){g['push'](...h['keys']());break;}k['sort']();for(const l of k){g['push'](l),h['delete'](l);for(const m of h['values']())m['delete'](l);}}return g['forEach']((o,p)=>{const q=c['get'](o),r=q['config']['name'];b['push']({'order':p+0x1,'node_id':o,'object_type':q['type'],'suggested_name':r?.['type']==='string'?r['value']:o,'depends_on':[...f['get'](o)??[]],'operation_hint':'Create\x20'+q['type']+'\x20via\x20onchain_operations,\x20then\x20configure.\x20Purpose:\x20'+q['purpose']});}),b;}export async function handleMerchantGuide(a){const b=a['guide_state']??{'intent_text':''},c=a['guide_confirm']??{},d={'intent_text':(a['intent']??b['intent_text']??'')['trim'](),'confirmed_industry':c['industry']??b['confirmed_industry'],'currency':c['currency']??b['currency'],'deliverables':c['deliverables']??b['deliverables'],'payment_override':c['payment']??b['payment_override'],'trust_override':c['trust']??b['trust_override'],'adopted_module_ids':c['adopted_module_ids']??b['adopted_module_ids']};for(const r of Object['keys'](d)){if(d[r]===undefined)delete d[r];}if(!d['intent_text'])throw new Error('merchant_guide\x20requires\x20\x27intent\x27\x20(business\x20description)\x20for\x20Step\x201.\x20'+'Example:\x20intent=\x27I\x20want\x20to\x20offer\x20online\x20design\x20service\x20with\x20milestone\x20payments\x27.\x20'+'Pass\x20the\x20returned\x20guide_state\x20back\x20UNCHANGED\x20on\x20subsequent\x20calls,\x20plus\x20guide_confirm\x20for\x20merchant\x20decisions.');const e=await analyzeIntent(d['intent_text'],{'preferredIndustry':d['confirmed_industry'],'currency':d['currency']});if(!d['confirmed_industry'])return{'action':'merchant_guide','current_step':0x2,'step_name':'Industry\x20Matching','guide_state':d,'intent_draft':e['intent'],'industry_options':{'inferred':e['inferredIndustry'],'confidence':e['industryConfidence'],'similar':e['similarIndustries']},'warnings':e['warnings'],'next_action':'Confirm\x20the\x20industry\x20by\x20calling\x20merchant_guide\x20again\x20with\x20guide_state\x20(UNCHANGED)\x20'+('plus\x20guide_confirm={\x20industry:\x20\x27<one\x20of:\x20'+e['similarIndustries']['join'](',\x20')+'\x20—\x20or\x20any\x20other\x20industry\x20id>\x27\x20}')};const f={...e['intent'],'industry':d['confirmed_industry'],'deliverables':d['deliverables']??e['intent']['deliverables'],'payment':{...e['intent']['payment'],...d['payment_override']??{}},'trust':{...e['intent']['trust'],...d['trust_override']??{}}},g=d['adopted_module_ids']?d['adopted_module_ids']['map'](s=>getBusinessModule(s))['filter'](s=>!!s):recommendModules(d['confirmed_industry'],d['intent_text'],{'maxModules':0x5}),h=buildSemanticGraph(f,g),i=validateGraph(h),j=derivePlanSatisfiedConstraints(h,f),l=g['map'](s=>checkModuleConstraints(s,j)),m=deriveDeployTimeChecks(h),n=l['filter'](s=>!s['adopted']),o=checkGameTheoryConstraints(h,f),p=assessWorkflowDesign(h),q=buildCreationPlan(h);return{'action':'merchant_guide','current_step':n['length']>0x0?0x9:0xa,'step_name':n['length']>0x0?'Harness\x20Check\x20(issues\x20found)':'Submission\x20Plan\x20Ready','guide_state':{...d,'adopted_module_ids':g['map'](s=>s['id'])},'intent':{'intent_type':f['intent'],'industry':f['industry'],'roles':f['roles'],'deliverables':f['deliverables'],'payment':f['payment'],'trust':f['trust']},'adopted_modules':g['map'](s=>({'id':s['id'],'name':s['name'],'description':s['description'],'requires_keeper':s['requiresKeeper'],'keeper_hint':s['keeperHint'],'user_protections':s['userProtections'],'merchant_obligations':s['merchantObligations']})),'blueprint':{'nodes':h['nodes']['map'](s=>({'id':s['id'],'type':s['type'],'purpose':s['purpose']})),'edges':h['edges']['map'](s=>({'from':s['from'],'to':s['to'],'relation':s['relation'],'required':s['required']}))},'evaluation_preview':h['evaluationPreview'],'graph_validation':{'valid':i['valid'],'hard_violations':i['hardViolations']['map'](s=>({'id':s['id'],'description':s['description'],'fix':s['fixSuggestion']})),'soft_notes':i['softViolations']['map'](s=>({'id':s['id'],'description':s['description']}))},'harness_check':{'module_constraints':l['map'](s=>({'module':s['module'],'plan_satisfied':s['adopted'],'missing':s['missingConstraints'],'reason':s['reason'],'estimated_score_boost':s['estimatedScoreBoost']})),'blocking_issues':n['map'](s=>({'module':s['module'],'missing_constraints':s['missingConstraints'],'fix':s['reason']})),'deploy_time_checks':m},'game_theory':{'summary':o['summary'],'coverage':o['coveredCount']+'/'+o['totalCount'],'exposed_scenarios':o['exposedScenarios'],'wow_alignments':o['wowAlignments'],'scenarios':o['results']['map'](s=>({'scenario':s['scenario'],'covered':s['covered'],'conflict':s['conflict'],'user_protection':s['userProtection'],'evaluation_metric':s['evaluationMetric'],'recommendation':s['recommendation']}))},'workflow_design_assessment':{'score':p['score'],'summary':p['summary'],'findings':p['findings']['map'](s=>({'kind':s['kind'],'severity':s['severity'],'message':s['message'],'fix':s['fix']})),'checks':p['checks']['map'](s=>({'id':s['id'],'dimension':s['dimension'],'passed':s['passed'],'severity':s['severity'],'message':s['message'],'fix':s['fix']}))},'creation_plan':q,'warnings':e['warnings'],'next_action':n['length']>0x0?'Resolve\x20the\x20blocking_issues\x20above\x20(adjust\x20guide_confirm\x20payment/trust/modules,\x20or\x20accept\x20and\x20drop\x20the\x20affected\x20module\x20via\x20guide_confirm.adopted_module_ids),\x20then\x20call\x20merchant_guide\x20again.':'Plan\x20ready.\x20Materialize:\x20create\x20the\x20objects\x20in\x20creation_plan\x20order\x20via\x20onchain_operations,\x20then\x20publish\x20the\x20Service\x20(machine\x20binding\x20is\x20immutable\x20after\x20publish).'};}export function listBusinessModules(){return CORE_BUSINESS_MODULES['map'](a=>({'id':a['id'],'name':a['name'],'description':a['description'],'industry_fit':a['industryFit'],'addresses_pain_points':a['addressesPainPoints'],'requires_keeper':a['requiresKeeper']}));}
@@ -1,4 +1,4 @@
1
- import { type MetricType, type MetricScale, type ConstraintRule, type ConstraintSeverity, type ConstraintViolationAction } from "../extensions/index.js";
1
+ import { type MetricType, type MetricScale, type ConstraintRule, type ConstraintSeverity, type ConstraintViolationAction } from "../../extensions/index.js";
2
2
  export interface RecommendIndustryInput {
3
3
  intent?: string;
4
4
  project_description?: string;
@@ -7,7 +7,7 @@ export interface RecommendIndustryInput {
7
7
  export declare function handleRecommendIndustry(v: RecommendIndustryInput): {
8
8
  action: "recommend_industry";
9
9
  intent: string;
10
- inferred_traits: import("../knowledge/industry-registry.js").IndustryTraits;
10
+ inferred_traits: import("../../knowledge/industry-registry.js").IndustryTraits;
11
11
  inference_confidence: number;
12
12
  matched_keywords: string[];
13
13
  recommendations: {
@@ -0,0 +1 @@
1
+ import{getIndustryModeRegistry,getMetricRegistry,getConstraintRegistry}from'../../extensions/index.js';import{inferTraitsFromDescription,findSimilarIndustries}from'../../knowledge/industry-generalizer.js';import{searchExamples}from'../../schema-query-impl/index.js';const LOCAL_MODE_OWNER='local',RM1_11_NODE_REGEX=/(^|_)(disputed?|refund(?:ed)?|arbitration|arb)(_|$)/i;function validateMachineShape(a,b){const c=[];if(!Array['isArray'](a))return c;const d=new Set();for(const e of a){const f=e?.['name'];if(typeof f!=='string'||!f){c['push'](b+':\x20every\x20node\x20must\x20have\x20a\x20non-empty\x20string\x20\x27name\x27');continue;}d['has'](f)&&c['push'](b+':\x20duplicate\x20node\x20name\x20\x27'+f+'\x27\x20(R-M1-10)'),d['add'](f),RM1_11_NODE_REGEX['test'](f)&&c['push'](b+':\x20node\x20\x27'+f+'\x27\x20violates\x20R-M1-11\x20—\x20dispute/refund\x20flows\x20must\x20NOT\x20be\x20'+'modeled\x20as\x20Machine\x20nodes.\x20Disputes\x20flow\x20through\x20Service.arbitrations\x20→\x20Arbitration.dispute()\x20'+'independently\x20of\x20the\x20Machine.\x20Use\x20business-state\x20nodes\x20(e.g.\x20\x27cancelled\x27,\x20\x27return_approved\x27)\x20'+'and\x20route\x20fund\x20refunds\x20via\x20Allocator\x20triggered\x20by\x20those\x20states.');}return c;}export function handleRecommendIndustry(a){const b=(a['intent']??a['project_description']??a['project_name']??'')['trim']();if(!b)throw new Error('recommend_industry\x20requires\x20\x27intent\x27\x20(business\x20description\x20text).\x20'+'Example:\x20intent=\x27I\x20rent\x20cameras\x20to\x20photographers\x20with\x20deposit\x20and\x20damage\x20inspection\x27.');const c=inferTraitsFromDescription(b),d=findSimilarIndustries(c['traits'],0x3),e=d['map'](g=>{const h=searchExamples(g['industry'])['slice'](0x0,0x3)['map'](i=>({'file':i['file'],'title':i['title'],'operation_type':i['operation_type'],'verified':i['verified']}));return{'industry':g['industry'],'similarity':g['similarity'],'matched_traits':g['matched_traits'],'reference_examples':h};}),f=e[0x0];return{'action':'recommend_industry','intent':b,'inferred_traits':c['traits'],'inference_confidence':c['confidence'],'matched_keywords':c['matched_keywords'],'recommendations':e,'hint':f?'Top\x20match:\x20\x27'+f['industry']+'\x27\x20(similarity\x20'+(f['similarity']*0x64)['toFixed'](0x0)+'%).\x20'+'Use\x20it\x20to\x20shape\x20the\x20build\x20—\x20run\x20goal_operation\x20action=\x27merchant_guide\x27\x20(or\x20\x27analyze_intent\x27)\x20with\x20this\x20industry\x20context,\x20'+'or\x20choose\x20another\x20industry\x20from\x20\x27recommendations\x27.\x20'+'Review\x20reference\x20examples\x20via\x20schema_query\x20action=\x27search_examples\x27\x20query=\x27<industry>\x27.':'No\x20similar\x20industry\x20found.\x20Shape\x20the\x20build\x20from\x20scratch\x20via\x20goal_operation\x20action=\x27merchant_guide\x27.'};}export async function handleListModes(){const a=getIndustryModeRegistry(),b=a['listModes']()['filter'](d=>d['source']==='builtin')['map'](d=>({'name':d['name'],'display_name':d['display_name'],'version':d['version'],'key_risk':d['key_risk'],'machine_nodes':d['machine_shape']['map'](e=>e['name']),'similar_industries':d['similar_industries']??[]})),c=(await a['listUserModes'](LOCAL_MODE_OWNER))['map'](d=>({'name':d['name'],'display_name':d['display_name'],'version':d['version'],'derived_from':d['derived_from']??null,'key_risk':d['key_risk'],'machine_nodes':d['machine_shape']['map'](e=>e['name']),'evolution_history':(d['evolution_history']??[])['map'](e=>({'version':e['version'],'changed_at':e['changed_at'],'changes':e['changes']}))}));return{'action':'list_modes','builtin_modes':b,'user_modes':c,'owner':LOCAL_MODE_OWNER,'hint':'Use\x20a\x20builtin\x20mode\x20name\x20as\x20the\x20industry/mode\x20context\x20for\x20your\x20build\x20(see\x20recommend_industry\x20/\x20merchant_guide).\x20'+'Use\x20derive_user_mode\x20to\x20customize\x20a\x20builtin\x20mode,\x20or\x20register_user_mode\x20for\x20a\x20fully\x20custom\x20mode.\x20'+'User\x20modes\x20are\x20referenced\x20as\x20\x27<name>\x27\x20in\x20derive/evolve/unregister\x20actions.'};}export async function handleDeriveUserMode(a){const b=requireField(a['mode_source'],'mode_source'),c=requireField(a['mode_name'],'mode_name'),d=a['mode_changes']??{},e=validateMachineShape(d['machine_shape'],'mode_changes.machine_shape');if(e['length']>0x0)throw new Error('derive_user_mode\x20blocked:\x0a'+e['join']('\x0a'));const f=getIndustryModeRegistry(),g=await f['deriveMode'](b,d,LOCAL_MODE_OWNER,c,a['mode_display_name']);if(!g)throw new Error('derive_user_mode\x20failed:\x20source\x20mode\x20\x27'+b+'\x27\x20not\x20found,\x20or\x20name\x20\x27'+c+'\x27\x20conflicts\x20'+'with\x20a\x20builtin/existing\x20user\x20mode.\x20Call\x20list_modes\x20to\x20see\x20available\x20names.');return{'action':'derive_user_mode','mode':summarizeUserMode(g),'hint':'Mode\x20\x27'+c+'\x27\x20derived\x20from\x20\x27'+b+'\x27.\x20Use\x20it\x20as\x20the\x20industry/mode\x20context\x20for\x20your\x20build.\x20'+'Iterate\x20with\x20evolve_user_mode.'};}export async function handleEvolveUserMode(a){const b=requireField(a['mode_name'],'mode_name'),c=requireField(a['mode_change_description'],'mode_change_description'),d=a['mode_changes']??{},e=validateMachineShape(d['machine_shape'],'mode_changes.machine_shape');if(e['length']>0x0)throw new Error('evolve_user_mode\x20blocked:\x0a'+e['join']('\x0a'));const f=getIndustryModeRegistry(),g=await f['evolveMode'](b,d,LOCAL_MODE_OWNER,c,a['mode_bump_version']??!![]);if(!g)throw new Error('evolve_user_mode\x20failed:\x20user\x20mode\x20\x27'+b+'\x27\x20not\x20found\x20for\x20owner\x20\x27'+LOCAL_MODE_OWNER+'\x27.\x20'+'Call\x20list_modes\x20to\x20see\x20your\x20modes.');return{'action':'evolve_user_mode','mode':summarizeUserMode(g),'hint':'Mode\x20\x27'+b+'\x27\x20evolved\x20to\x20'+g['version']+'.\x20Evolution\x20history\x20recorded.'};}export async function handleRegisterUserMode(a){const b=requireField(a['mode_name'],'mode_name'),c=a['mode_changes']??{},d=[];(!Array['isArray'](c['machine_shape'])||c['machine_shape']['length']===0x0)&&d['push']('machine_shape\x20(non-empty\x20array\x20of\x20{name,\x20role})');(typeof c['key_risk']!=='string'||!c['key_risk'])&&d['push']('key_risk\x20(string\x20describing\x20the\x20industry\x27s\x20key\x20risk)');if(d['length']>0x0)throw new Error('register_user_mode\x20requires\x20these\x20fields\x20in\x20mode_changes:\x20'+d['join'](',\x20')+'.\x20'+'Tip:\x20derive_user_mode\x20from\x20a\x20builtin\x20mode\x20is\x20usually\x20easier\x20than\x20registering\x20from\x20scratch.');const e=validateMachineShape(c['machine_shape'],'mode_changes.machine_shape');if(e['length']>0x0)throw new Error('register_user_mode\x20blocked:\x0a'+e['join']('\x0a'));const f=getIndustryModeRegistry(),g=f['getMode']('general');if(!g)throw new Error('Builtin\x20mode\x20\x27general\x27\x20not\x20registered\x20—\x20cannot\x20build\x20custom\x20mode\x20defaults');const h={...g,...c,'name':b,'display_name':a['mode_display_name']??b,'version':'v1','source':'custom','owner':LOCAL_MODE_OWNER,'derived_from':undefined,'evolution_history':[]},i=await f['registerUserMode'](h,LOCAL_MODE_OWNER);if(!i)throw new Error('register_user_mode\x20failed:\x20name\x20\x27'+b+'\x27\x20conflicts\x20with\x20a\x20builtin/existing\x20user\x20mode,\x20'+'or\x20payload\x20is\x20invalid.\x20Call\x20list_modes\x20to\x20see\x20available\x20names.');return{'action':'register_user_mode','mode':summarizeUserMode(h),'hint':'Custom\x20mode\x20\x27'+b+'\x27\x20registered.\x20Use\x20it\x20as\x20the\x20industry/mode\x20context\x20for\x20your\x20build.'};}export async function handleUnregisterUserMode(a){const b=requireField(a['mode_name'],'mode_name'),c=getIndustryModeRegistry(),d=await c['unregisterUserMode'](b,LOCAL_MODE_OWNER);if(!d)throw new Error('unregister_user_mode\x20failed:\x20user\x20mode\x20\x27'+b+'\x27\x20not\x20found\x20for\x20owner\x20\x27'+LOCAL_MODE_OWNER+'\x27.');return{'action':'unregister_user_mode','removed':!![],'mode_name':b};}export function handleRegisterCustomMetric(a){const b=requireField(a['metric_id'],'metric_id'),c=requireField(a['metric_display_name'],'metric_display_name'),d=requireField(a['metric_description'],'metric_description'),e=requireField(a['metric_type'],'metric_type'),f=requireField(a['metric_scale'],'metric_scale'),g=getMetricRegistry()['registerCustomMetric'](b,c,d,e,f,LOCAL_MODE_OWNER,a['metric_weight']);if(!g)throw new Error('register_custom_metric\x20failed:\x20metric_id\x20\x27'+b+'\x27\x20already\x20exists\x20or\x20fields\x20are\x20invalid.');return{'action':'register_custom_metric','metric':{'metric_id':b,'display_name':c,'description':d,'type':e,'scale':f,'weight':a['metric_weight']??0x1,'scope':'custom','owner':LOCAL_MODE_OWNER},'hint':'Custom\x20metric\x20\x27'+b+'\x27\x20registered\x20globally\x20—\x20all\x20modes\x20can\x20reference\x20it\x20via\x20custom_metrics.'};}export function handleRegisterCustomConstraint(a){const b=requireField(a['constraint_id'],'constraint_id'),c=requireField(a['constraint_display_name'],'constraint_display_name'),d=requireField(a['constraint_description'],'constraint_description'),e=a['constraint_rule'];if(!e||typeof e!=='object'||!('type'in e))throw new Error('constraint_rule\x20is\x20required\x20and\x20must\x20be\x20one\x20of:\x20'+'{type:\x27capability_required\x27,\x20capability_id}\x20|\x20{type:\x27capability_forbidden\x27,\x20capability_id}\x20|\x20'+'{type:\x27numeric_limit\x27,\x20field,\x20max?,\x20min?}\x20|\x20{type:\x27condition_required\x27,\x20condition,\x20ai_evaluated:true}');const f=getConstraintRegistry()['registerCustomConstraint'](b,c,d,e,LOCAL_MODE_OWNER,a['constraint_severity']??'soft',a['constraint_on_violation']??'warn');if(!f)throw new Error('register_custom_constraint\x20failed:\x20constraint_id\x20\x27'+b+'\x27\x20already\x20exists\x20or\x20rule\x20is\x20invalid.');return{'action':'register_custom_constraint','constraint':{'constraint_id':b,'display_name':c,'description':d,'rule':e,'severity':a['constraint_severity']??'soft','on_violation':a['constraint_on_violation']??'warn','scope':'custom','owner':LOCAL_MODE_OWNER},'hint':'Custom\x20constraint\x20\x27'+b+'\x27\x20registered.\x20\x27hard\x27\x20constraints\x20block\x20applyTemplate\x20on\x20violation;\x20\x27soft\x27\x20only\x20warn.'};}export function handleListMetricsConstraints(a){const b=getMetricRegistry()['listMetrics']({'type':a['metric_type_filter'],'scope':a['scope_filter']})['map'](d=>({'metric_id':d['metric_id'],'display_name':d['display_name'],'description':d['description'],'type':d['type'],'scale':d['scale'],'weight':d['weight'],'scope':d['scope']})),c=getConstraintRegistry()['listConstraints']({'scope':a['scope_filter']})['map'](d=>({'constraint_id':d['constraint_id'],'display_name':d['display_name'],'description':d['description'],'rule':d['rule'],'severity':d['severity'],'on_violation':d['on_violation'],'scope':d['scope']}));return{'action':'list_metrics_constraints','metrics':b,'constraints':c,'hint':'Register\x20custom\x20entries\x20via\x20register_custom_metric\x20/\x20register_custom_constraint.\x20'+'Filter\x20with\x20metric_type_filter\x20(\x27risk\x27|\x27benefit\x27)\x20or\x20scope_filter\x20(\x27builtin\x27|\x27custom\x27).'};}function requireField(a,b){if(a===undefined||a===null||typeof a==='string'&&!a['trim']())throw new Error('\x27'+b+'\x27\x20is\x20required\x20for\x20this\x20action');return a;}function summarizeUserMode(a){return{'name':a['name'],'display_name':a['display_name'],'version':a['version'],'derived_from':a['derived_from']??null,'owner':a['owner'],'key_risk':a['key_risk'],'machine_nodes':a['machine_shape']['map'](b=>b['name']),'evolution_history':(a['evolution_history']??[])['map'](b=>({'version':b['version'],'changed_at':b['changed_at'],'changes':b['changes']}))};}
@@ -0,0 +1,2 @@
1
+ export type ProjectObjectType = "service" | "machine" | "guard" | "permission" | "reward" | "arb" | "progress" | "treasury" | "demand" | "repository" | "contact" | "order" | "allocation" | "personal" | "payment" | "proof";
2
+ export type IndustryMode = "freelance" | "rental" | "education" | "travel" | "subscription" | "general";
@@ -0,0 +1 @@
1
+ export{};
@@ -1,6 +1,5 @@
1
- import type { z } from "zod";
2
- import type { ProjectOperationInputSchema } from "../schema/project/index.js";
3
- type ProjectInput = z.infer<typeof ProjectOperationInputSchema>;
1
+ import type { ObjectPanoramaInput } from "../../schema/query/bi.js";
2
+ type ProjectInput = ObjectPanoramaInput;
4
3
  interface PanoBase {
5
4
  action: "object_panorama";
6
5
  object: string;
@@ -0,0 +1 @@
1
+ import{Config,LocalMark,query_objects,query_object_last_updated,queryTableItem_ObjectLinkerTx,queryTableItem_DemandPresenter,objectTypeFromAddress,ObjectType}from'@wowok/wowok';const js=a=>{if(typeof a==='bigint')return a['toString']();if(a&&typeof a==='object'&&!Array['isArray'](a)){const b={};for(const [c,d]of Object['entries'](a)){b[c]=js(d);}return b;}if(Array['isArray'](a))return a['map'](js);return a;},str=a=>a===null||a===undefined?null:String(a),ownerAddr=a=>{if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];const c=Object['values'](b)['find'](d=>typeof d==='string'&&d['length']>0x14);if(typeof c==='string')return c;}return null;},num=a=>{if(typeof a==='bigint')return Number(a);if(typeof a==='number')return Number['isFinite'](a)?a:null;if(typeof a==='string'&&a['trim']()!==''){const b=Number(a);return Number['isFinite'](b)?b:null;}return null;},arr=a=>Array['isArray'](a)?a:[],ARB_STATUS_NAMES={0x0:'Principal_confirming',0x1:'Arbitrator_confirming',0x2:'Voting',0x3:'Arbitrated',0x4:'Objectionable',0x5:'Finished',0x6:'Withdrawn'};async function resolveObject(a,b){let c=a;if(!/^0x[0-9a-fA-F]{32,64}$/['test'](c)){const g=await LocalMark['Instance']()['get_address'](c);if(!g)throw new Error('Cannot\x20resolve\x20\x27'+c+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.');c=g;}let d=b??undefined,f=null;if(!d)d=await Config['Instance']()['network_get']();try{const h=await query_objects({'objects':[c],'network':d});f=h?.['objects']?.[0x0]??null;if(!f&&b){const i=await Config['Instance']()['network_get']();if(i&&i!==d){const j=await query_objects({'objects':[c],'network':i,'no_cache':!![]}),k=j?.['objects']?.[0x0]??null;k&&(f=k,d=i);}}}catch(l){throw new Error('Failed\x20to\x20query\x20'+c+'\x20on\x20'+d+':\x20'+(l instanceof Error?l['message']:String(l)));}if(!f)throw new Error(c+'\x20not\x20found\x20on\x20'+d+'.\x20It\x20may\x20not\x20exist\x20on\x20this\x20network.');return f['object']=f['object']??c,{'network':String(d),'obj':f};}async function resolveHead(a,b,c){let d=null,e=[];try{const f=await LocalMark['Instance']()['list']({'address':a});f['length']>0x0&&(d=f[0x0]['name']??null,e=(f[0x0]['tags']??[])['map'](g=>String(g)));}catch{c['push']('head:\x20LocalMark\x20lookup\x20failed');}return{'name':d,'tags':e,'description':str(b['description'])};}async function buildPresenters(a,b,c){const d=[];let e=0x0;try{const f=await queryTableItem_ObjectLinkerTx({'address':a,'no_cache':!![],'network':b}),g=(f?.['items']??[])['map'](j=>({'service':String(j?.['who']??''),'time':typeof j?.['time']==='number'?j['time']:null}))['filter'](i=>objectTypeFromAddress(i['service'])===ObjectType['Service']);e=g['length'];const h=g['slice'](-0x32)['reverse']();for(const i of h){let j;try{j=await queryTableItem_DemandPresenter({'parent':a,'address':i['service'],'no_cache':!![],'network':b});}catch{c['push']('presenters:\x20detail\x20fetch\x20failed\x20for\x20one\x20entry');}d['push']({'service':i['service'],'recommend':str(j?.['recommend']),'acceptance_score':num(j?.['acceptance_score']),'feedback':str(j?.['feedback']),'feedback_time':num(j?.['feedback_time']),'update_time':num(j?.['update_time'])??i['time']});}}catch{c['push']('presenters:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}return{'count':e,'items':d};}async function buildRepositoryData(a,b,c){return void a,void b,c['push']('data:\x20per-key\x20enumeration\x20requires\x20the\x20{entity,name}\x20pair\x20—\x20showing\x20count\x20only'),{'count':null,'items':[]};}export async function handleObjectPanorama(b){const c=b['object_address'];if(!c)throw new Error('\x27object_address\x27\x20is\x20required\x20for\x20object_panorama');const {network:d,obj:e}=await resolveObject(c,b['context_network']),f=String(e['object']),g=[],h=await resolveHead(f,e,g),j=String(e['type']??'');if(j==='Progress'){const k=arr(e['session'])[0x0],l=k?{'next_node':str(k['next_node']),'weights':num(k['weights']),'threshold':num(k['threshold']),'forwards':arr(k['forwards'])['map'](n=>{const o=n;return{'forward':str(o['forward'])??'','who':str(o['who']),'accomplished':o['accomplished']===!![],'msg':str(o['msg']),'time':num(o['time'])};})}:null,m={'key':typeof e['machine']==='string'?e['machine']:null,'items':[],'count':0x0};if(m['key'])try{const n=await queryTableItem_ObjectLinkerTx({'address':m['key'],'no_cache':!![],'network':d}),o=n?.['items']??[];for(const q of o['slice'](-0x32)['reverse']()){const r=typeof q?.['who']==='string'?q['who']:'';if(!r||r['toLowerCase']()===f['toLowerCase']())continue;let s;try{s=objectTypeFromAddress(r);}catch{}if(!s)continue;m['items']['push']({'address':r,'object_type':s,'time':typeof q?.['time']==='number'?q['time']:null});}m['count']=m['items']['length'];}catch{g['push']('related:\x20ObjectLinkerTx(machine)\x20lookup\x20failed');}return{'action':'object_panorama','object':f,'object_type':'Progress','network':d,'head':h,'fields':{'machine':str(e['machine']),'current':str(e['current']),'task':str(e['task']),'history_count':num(e['history_count']),'current_time':num(e['current_time'])},'context_repositories':arr(e['context_repositories'])['map'](t=>String(t)),'operators':arr(e['namedOperator'])['map'](t=>{const u=t;return{'name':str(u['name'])??'','operators':arr(u['operators'])['map'](w=>String(w))};}),'session':l,'related':m,'data_gaps':g};}if(j==='Demand')return{'action':'object_panorama','object':f,'object_type':'Demand','network':d,'head':h,'fields':{'location':str(e['location']),'um':str(e['um']),'permission':str(e['permission']),'presenters_count':num(e['presenters_count'])},'rewards':arr(e['rewards'])['map'](t=>String(t)),'guards':arr(e['guards'])['map'](t=>({'guard':str(t['guard'])??''})),'presenters':await buildPresenters(f,d,g),'data_gaps':g};if(j==='Order'){let t=null;try{const C=await query_object_last_updated({'object':f,'network':d,'previous_transaction':str(e['previousTransaction'])});t=C?.['timestamp_ms']?Number(C['timestamp_ms'])||null:null;}catch{}let u='none',w=null,x=null;const y=str(e['allocation']),z=str(e['progress']),A=[y,z]['filter'](D=>!!D);if(A['length']>0x0)try{const D=await query_objects({'objects':A,'network':d}),E=D?.['objects']??[];if(y){u='pending';const F=E['find'](H=>H?.['object']===y),G=Number(F?.['balance']??NaN);if(Number['isFinite'](G)&&G===0x0)u='allocated';}if(z){const H=E['find'](I=>I?.['object']===z);w=str(H?.['current']),x=num(H?.['current_time']);}}catch{}const B={'key':f,'items':[],'count':0x0};try{const I=await queryTableItem_ObjectLinkerTx({'address':f,'no_cache':!![],'network':d}),J=I?.['items']??[];for(const K of J['slice'](-0x32)['reverse']()){const L=typeof K?.['who']==='string'?K['who']:'';if(!L||L['toLowerCase']()===f['toLowerCase']())continue;let M;try{M=objectTypeFromAddress(L);}catch{}if(!M)continue;B['items']['push']({'address':L,'object_type':M,'time':typeof K?.['time']==='number'?K['time']:null});}B['count']=B['items']['length'];}catch{g['push']('related:\x20ObjectLinkerTx(order)\x20lookup\x20failed');}return{'action':'object_panorama','object':f,'object_type':'Order','network':d,'head':h,'fields':{'service':str(e['service']),'machine':str(e['machine']),'progress':z,'allocation':y,'discount':str(e['discount']),'amount':str(e['amount']),'owner':ownerAddr(e['builder']??e['owner']),'claimed_by':str(e['claimed_by']),'required_info':str(e['required_info']),'time':num(e['time'])},'updated_ms':t,'related':B,'allocation_state':u,'progress_next':w,'progress_since':x,'items':arr(e['items'])['map'](N=>{const O=N;return{'name':str(O['name']),'price':str(O['price']),'quantity':str(O['quantity']),'wip_hash':str(O['wip_hash'])};}),'disputes':arr(e['dispute'])['map'](N=>String(N)),'agents':arr(e['agent'])['map'](N=>String(N)),'data_gaps':g};}if(j==='Arb'){const N=e['indemnity'];let O=null;try{const S=await query_object_last_updated({'object':f,'network':d,'previous_transaction':str(e['previousTransaction'])});O=S?.['timestamp_ms']?Number(S['timestamp_ms'])||null:null;}catch{}const P=str(e['order']);let Q=null;if(P)try{const T=await query_objects({'objects':[P],'network':d}),U=T?.['objects']?.[0x0];Q=str(U?.['service']);}catch{}const R={'key':f,'items':[],'count':0x0};try{const V=await queryTableItem_ObjectLinkerTx({'address':f,'no_cache':!![],'network':d}),W=V?.['items']??[];for(const X of W['slice'](-0x32)['reverse']()){const Y=typeof X?.['who']==='string'?X['who']:'';if(!Y||Y['toLowerCase']()===f['toLowerCase']())continue;let Z;try{Z=objectTypeFromAddress(Y);}catch{}if(!Z)continue;R['items']['push']({'address':Y,'object_type':Z,'time':typeof X?.['time']==='number'?X['time']:null});}R['count']=R['items']['length'];}catch{g['push']('related:\x20ObjectLinkerTx(arb)\x20lookup\x20failed');}return{'action':'object_panorama','object':f,'object_type':'Arb','network':d,'head':h,'fields':{'arbitration':str(e['arbitration']),'order':str(e['order']),'service':Q,'fee':str(e['fee']),'feedback':str(e['feedback']),'indemnity':N?{'amount':str(N['amount']),'time':num(N['time'])}:null,'voting_deadline':num(e['voting_deadline']),'objection':str(e['objection']),'status':ARB_STATUS_NAMES[num(e['status'])??-0x1]??str(e['status']),'compensation_time':num(e['compensation_time']),'time':num(e['time']),'type_raw':str(e['type_raw'])},'voted':arr(e['voted'])['map'](a0=>{const a1=a0;return{'voter':str(a1['voter'])??'','agrees':arr(a1['agrees'])['map'](a2=>Number(a2)),'weight':num(a1['weight'])??0x0,'time':num(a1['time'])??0x0};}),'proposition':arr(e['proposition'])['map'](a0=>{const a1=a0;return{'name':str(a1['name'])??'','votes':num(a1['votes'])??0x0};}),'related':R,'updated_ms':O,'data_gaps':g};}if(j==='Repository')return{'action':'object_panorama','object':f,'object_type':'Repository','network':d,'head':h,'fields':{'um':str(e['um']),'permission':str(e['permission']),'data_count':num(e['data_count'])},'policies':arr(e['policies'])['map'](a0=>{const a1=a0;return{'name':str(a1['name'])??'','description':str(a1['description']),'id_from':str(a1['id_from']),'value_type':str(a1['value_type']),'write_guards':arr(a1['write_guard'])['length'],'quote_guard':str(a1['quote_guard'])};}),'rewards':arr(e['rewards'])['map'](a0=>String(a0)),'data_entries':await buildRepositoryData(f,d,g),'data_gaps':g};throw new Error('object_panorama:\x20unsupported\x20object\x20type\x20\x27'+(j||'unknown')+'\x27\x20for\x20'+f+'.\x20'+'Supported:\x20Progress\x20/\x20Demand\x20/\x20Order\x20/\x20Arb\x20/\x20Repository.');}
@@ -1,14 +1,13 @@
1
- import type { z } from "zod";
2
- import { type OrderRadarResult } from "../participation/radar-core.js";
3
- import type { ProjectOperationInputSchema } from "../schema/project/index.js";
4
- type ProjectInput = z.infer<typeof ProjectOperationInputSchema>;
1
+ import { type OrderRadarResult } from "../../participation/radar-core.js";
2
+ import type { ParticipationRadarInput } from "../../schema/query/bi.js";
3
+ type ProjectInput = ParticipationRadarInput;
5
4
  export declare function handleParticipationRadar(v: ProjectInput): Promise<{
6
5
  action: "participation_radar";
7
6
  account: string;
8
7
  orders_analyzed: number;
9
8
  actionable: OrderRadarResult[];
10
9
  waiting: OrderRadarResult[];
11
- all_pending_claims: (import("../participation/radar-core.js").PendingClaim & {
10
+ all_pending_claims: (import("../../participation/radar-core.js").PendingClaim & {
12
11
  progress: string;
13
12
  })[];
14
13
  unread_messages_total: number;
@@ -0,0 +1 @@
1
+ import{LocalMark,query_objects,query_table,watch_conversations}from'@wowok/wowok';import{analyzeOrderParticipation,aggregateRadar,isConsequenceNode}from'../../participation/radar-core.js';import{monitorOrder}from'../../customer/order-monitor.js';import{analyzeMerchantInterest}from'../../participation/merchant-interest.js';import{analyzeCustomerInterest}from'../../participation/customer-interest.js';import{analyzeSupplierInterest}from'../../participation/supplier-interest.js';import{analyzeCollaboratorInterest}from'../../participation/collaborator-interest.js';import{fetchMachineNodes}from'./machine-nodes.js';import{extractGenericTokenType,registryDisplayHint}from'../../knowledge/fund-layer.js';const QUERY_BATCH=0x32;function fld(a,b){return a?.[b]??a?.['data']?.[b];}async function resolveAddress(a,b){const c=await LocalMark['Instance']()['get_address'](a);if(!c)throw new Error('Cannot\x20resolve\x20'+b+'\x20\x27'+a+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.\x20'+'Register\x20it\x20via\x20local_mark_operation\x20or\x20pass\x20the\x200x\x20address\x20directly.');return c;}function balanceStr(a){if(a==null)return undefined;if(typeof a==='object'&&'balance'in a)return String(a['balance']);return String(a);}function balanceToken(a){if(a!=null&&typeof a==='object'&&typeof a['token_type']==='string')return a['token_type'];return undefined;}function summarizeAllocation(a,b){const c=Array['isArray'](a)?a:Array['isArray'](a?.['allocators'])?a['allocators']:[];if(c['length']===0x0)return undefined;let d=0x0,e=0x0,f=0x0,g=0x0;const h=b['toLowerCase']();for(const i of c){for(const j of i?.['sharing']??[]){d++;const k=j?.['who'];if(k==null)continue;if(typeof k==='object'&&'GuardIdentifier'in k)e++;else{if(typeof k==='object'&&'Signer'in k)g++;else{if(typeof k==='object'&&'Entity'in k){const l=k['Entity'],m=typeof l==='string'?l:l?.['name_or_address'];if(typeof m==='string'&&m['toLowerCase']()===h)f++;}else typeof k==='string'&&k['toLowerCase']()===h&&f++;}}}}return{'recipient_slots':d,'guard_gated_slots':e,'direct_to_me_slots':f,'to_payer_slots':g};}async function queryObjectsBatched(a,b){const c=[];for(let d=0x0;d<a['length'];d+=QUERY_BATCH){const e=a['slice'](d,d+QUERY_BATCH),f=await query_objects({'objects':e,'network':b});c['push'](...f?.['objects']??[]);}return c;}async function fetchEntityPermissions(a,b){const c=new Map(),d=[];let e=undefined;for(;;){const g=await query_table({'parent':a,'cursor':e??undefined,'network':b});if(!g?.['items']||g['items']['length']===0x0)break;for(const h of g['items']){if(h['object'])d['push'](h['object']);}if(!g['hasNextPage']||!g['nextCursor'])break;e=g['nextCursor'];}const f=await queryObjectsBatched(d,b);for(const i of f){if(i?.['type']!=='TableItem_PermissionPerm')continue;const j=fld(i,'address'),k=fld(i,'perm')??[],l=k['map'](m=>typeof m==='number'?m:typeof m?.['index']==='number'?m['index']:null)['filter'](m=>m!==null);if(j)c['set'](j,l);}return c;}function toRadarMachineNodes(a){return a['map'](b=>({'name':b['name'],'pairs':(Array['isArray'](b['value'])?b['value']:[])['map'](c=>({'prev_node':c['prev_node'],'threshold':c['threshold']??undefined,'forwards':(c['forwards']??[])['map'](d=>({'name':d['name'],'permissionIndex':d['permissionIndex']??null,'namedOperator':d['namedOperator']??null,'guard':d['guard']?.['guard']??(typeof d['guard']==='string'?d['guard']:null),'weight':d['weight']??null}))}))}));}export async function handleParticipationRadar(a){if(!a['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20participation_radar');if(!a['radar_targets']||a['radar_targets']['length']===0x0)throw new Error('\x27radar_targets\x27\x20(1-20\x20in-flight\x20orders)\x20is\x20required\x20for\x20participation_radar');const b=a['context_network']??'testnet',d=a['radar_include_alerts']??!![],f=[],g=await resolveAddress(a['radar_account'],'radar_account'),h=await Promise['all'](a['radar_targets']['map'](async I=>({'progress':await resolveAddress(I['progress'],'progress'),'order':I['order']?await resolveAddress(I['order'],'order'):undefined}))),i=h['flatMap'](I=>I['order']?[I['progress'],I['order']]:[I['progress']]),j=await queryObjectsBatched(i,b),k=new Map();for(const I of j){const J=fld(I,'object');if(J)k['set'](J,I);}const l=new Map(),m=new Map();for(const K of h){const L=k['get'](K['progress']);if(!L){f['push']('Progress\x20'+K['progress']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20target\x20skipped.');continue;}l['set'](K['progress'],L);if(K['order']){const M=k['get'](K['order']);if(M)m['set'](K['order'],M);else f['push']('Order\x20'+K['order']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20order-holder\x20detection\x20disabled\x20for\x20'+K['progress']+'.');}}h['length']>0x0&&l['size']===0x0&&f['push']('NETWORK\x20MISMATCH\x20SUSPECTED:\x200/'+h['length']+'\x20radar\x20targets\x20exist\x20on\x20network=\x27'+b+'\x27.\x20'+'These\x20objects\x20most\x20likely\x20live\x20on\x20a\x20different\x20network\x20—\x20re-run\x20with\x20the\x20matching\x20\x27network\x27\x20parameter.');const q=[...new Set([...l['values']()]['map'](N=>fld(N,'machine'))['filter'](N=>!!N))],s=[...new Set([...m['values']()]['map'](N=>fld(N,'service'))['filter'](N=>!!N))],u=[...new Set([...m['values']()]['flatMap'](N=>{const O=fld(N,'dispute');return Array['isArray'](O)?O:[];}))],w=new Map(),x=new Map(),y=new Map(),z=new Map();await Promise['all']([...q['map'](async N=>{try{const [O,P]=await Promise['all']([queryObjectsBatched([N],b),fetchMachineNodes(N,b)]);if(O[0x0])w['set'](N,O[0x0]);x['set'](N,toRadarMachineNodes(P));}catch(Q){f['push']('Machine\x20'+N+'\x20fetch\x20failed:\x20'+Q['message']+'\x20—\x20workflow\x20unknown\x20for\x20its\x20orders.');}}),((async()=>{if(s['length']===0x0)return;try{const N=await queryObjectsBatched(s,b);for(const O of N){const P=fld(O,'object');if(P)y['set'](P,O);}}catch(Q){f['push']('Service\x20query\x20failed:\x20'+Q['message']+'\x20—\x20compensation/reward\x20context\x20degraded.');}})()),((async()=>{if(u['length']===0x0)return;try{const N=await queryObjectsBatched(u,b);for(const O of N){const P=fld(O,'object');if(P)z['set'](P,O);}}catch(Q){f['push']('Arb\x20query\x20failed:\x20'+Q['message']+'\x20—\x20compensation\x20claim\x20detection\x20disabled.');}})())]);const A=new Map(),B=[...new Set(q['map'](N=>fld(w['get'](N),'permission'))['filter'](N=>!!N))],C=new Map();await Promise['all'](B['map'](async N=>{try{const [O,P]=await Promise['all']([queryObjectsBatched([N],b),fetchEntityPermissions(N,b)]),Q=O[0x0];C['set'](N,{'address':N,'entity_count':fld(Q,'entity_count'),'perm_remark':fld(Q,'perm_remark'),'entityPermissions':P,'owner':fld(Q,'builder')});}catch(R){f['push']('Permission\x20'+N+'\x20fetch\x20failed:\x20'+R['message']+'\x20—\x20operator\x20permission\x20matching\x20degraded.');}}));for(const N of q){const O=fld(w['get'](N),'permission');if(O&&C['has'](O))A['set'](N,C['get'](O));}let D=0x0;const E=new Map();try{const P=await watch_conversations({'account':g,'unreadOnly':!![],'previewMessageCount':0x0,'skipAutoMarkViewed':!![]}),Q=Array['isArray'](P)?P:P?.['conversations']??[];for(const R of Q){const S=R?.['peerAddress'],T=typeof R?.['unreadCount']==='number'?R['unreadCount']:0x0;typeof S==='string'&&T>0x0&&(E['set'](S['toLowerCase'](),T),D+=T);}}catch{f['push']('Messenger\x20unread\x20unavailable\x20(radar\x20account\x20is\x20not\x20a\x20local\x20messenger\x20account,\x20or\x20messenger\x20storage\x20offline)\x20'+'—\x20unread_messages_total\x20reported\x20as\x200.');}const F=[],G=Date['now']();for(const U of h){const V=l['get'](U['progress']);if(!V)continue;const W=U['order']?m['get'](U['order']):undefined,X=fld(V,'machine'),Y=fld(V,'current')??'',Z=fld(V,'namedOperator')??[],a0={};for(const ae of Z){if(ae?.['name'])a0[ae['name']]=Array['isArray'](ae['operators'])?ae['operators']:[];}const a1=W?fld(W,'service'):undefined,a2=a1?y['get'](a1):undefined;let a3;const a4=W?fld(W,'builder'):undefined;if(W&&a4===g){const af=fld(W,'dispute')??[];for(const ag of af){const ah=z['get'](ag);if(!ah)continue;const ai=fld(ah,'indemnity');if(ai){a3={'arbitration':fld(ah,'arbitration')??ag,'note':'Arbitration\x20verdict\x20recorded\x20an\x20indemnity\x20(Arb\x20'+ag+').\x20'+'Claim\x20via\x20service\x20op=\x27compensation_claim\x27\x20—\x20paid\x20directly\x20from\x20the\x20Service\x20compensation_fund.\x20'+'(Claimed-status\x20is\x20not\x20readable\x20from\x20the\x20Arb\x20object;\x20the\x20contract\x20rejects\x20double-claims.)'};break;}}}const a5=[];if(a2&&a4===g){const aj=fld(a2,'rewards')??[];for(const ak of aj){a5['push']({'address':ak,'description':'Service\x20reward\x20'+ak+'\x20(guard-gated\x20—\x20eligibility\x20verified\x20at\x20claim\x20time)'});}}const a6=isConsequenceNode(Y,'completed'),a7=isConsequenceNode(Y,'refunded');let a8=0x0;if(E['size']>0x0){const al=new Set();if(a4)al['add'](a4['toLowerCase']());for(const am of Object['values'](a0)){for(const an of am)al['add'](an['toLowerCase']());}al['delete'](g['toLowerCase']());for(const ao of al){a8+=E['get'](ao)??0x0;}}const a9={'account':g,'progress_address':U['progress'],'order_address':U['order'],'current_node':Y,'order_holder':a4,'machine_nodes':X?x['get'](X):undefined,'permission':X?A['get'](X)??null:null,'named_accounts':a0,'claimable_rewards':a5['length']>0x0?a5:undefined,'pending_compensation':a3,'rating_pending':a6&&a4===g,'unread_messages':a8>0x0?a8:undefined,'last_progress_at':fld(V,'current_time')??undefined,'now':G},aa=analyzeOrderParticipation(a9),ab=(fld(a2,'arbitrations')??[])['length']>0x0,ac=a6?'completed':a7?'refunded':null,ad=a9['last_progress_at']!=null?(G-a9['last_progress_at'])/0x36ee80:undefined;if(aa['perspective']==='merchant')aa['interest_analysis']=analyzeMerchantInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'allocation':summarizeAllocation(fld(a2,'order_allocators'),g),'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'arbitration_bound':ab,'rewards_count':(fld(a2,'rewards')??[])['length'],'stalled_hours':ad,'terminal':ac,'unread_messages':a8>0x0?a8:undefined});else{if(aa['perspective']==='supplier')aa['interest_analysis']=analyzeSupplierInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'arbitration_bound':ab,'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined});else{if(aa['perspective']==='collaborator')aa['interest_analysis']=analyzeCollaboratorInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'collaborator_kind':aa['collaborator_kind'],'arbitration_bound':ab,'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined});else aa['perspective']==='customer'&&(aa['interest_analysis']=analyzeCustomerInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'arbitration_bound':ab,'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined}));}}if(d&&W){const ap={'order_id':U['order'],'service_id':a1??'','current_node':Y||undefined,'created_at':Number(fld(W,'time')??G)||G,'last_progress_at':fld(V,'current_time')??undefined,'now':G,'order_amount':((()=>{try{return BigInt(fld(W,'amount')??0x0);}catch{return undefined;}})()),'compensation_balance':((()=>{try{const aq=fld(a2,'compensation_fund');return aq!=null?BigInt(aq):undefined;}catch{return undefined;}})()),'token':registryDisplayHint(extractGenericTokenType(fld(a2,'type_raw'))),'has_arbitration':(fld(a2,'arbitrations')??[])['length']>0x0,'pending_user_action':aa['operable']['some'](aq=>aq['execution_path']==='order_holder'),'completed':a6,'refunded':a7};try{const aq=monitorOrder({'current':ap,'thresholds':a['radar_monitor_thresholds']});aq['length']>0x0&&(aa['attached_alerts']=aq);}catch(ar){f['push']('Order\x20monitor\x20failed\x20for\x20'+U['order']+':\x20'+ar['message']+'.');}}F['push'](aa);}const H=aggregateRadar(F,D);return{'action':'participation_radar','account':g,'orders_analyzed':H['orders_analyzed'],'actionable':H['actionable'],'waiting':H['waiting'],'all_pending_claims':H['all_pending_claims'],'unread_messages_total':H['unread_messages_total'],'data_gaps':f,'summary':H['summary']};}
@@ -1,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;
@@ -1,9 +1,7 @@
1
- import type { z } from "zod";
2
- import { type Evaluation } from "@wowok/wowok";
3
- import type { ProjectOperationInputSchema } from "../schema/project/index.js";
1
+ import type { ServicePanoramaInput } from "../../schema/query/bi.js";
4
2
  import { type BusinessReport } from "./reverse-mapping.js";
5
- import { type SupplyChainGraph } from "../knowledge/supply-chain.js";
6
- type ProjectInput = z.infer<typeof ProjectOperationInputSchema>;
3
+ import { type SupplyChainGraph } from "../../knowledge/supply-chain.js";
4
+ type ProjectInput = ServicePanoramaInput;
7
5
  export interface PanoramaSale {
8
6
  name: string;
9
7
  price: string | null;
@@ -101,19 +99,6 @@ export interface PanoramaRecentOrders {
101
99
  }[];
102
100
  }[];
103
101
  }
104
- export interface PanoramaLinkedProject {
105
- id: string;
106
- prefix: string;
107
- name: string;
108
- status: string;
109
- perspective: string;
110
- network: string;
111
- currentVersion: string | null;
112
- objectCount: number;
113
- versionCount: number;
114
- evaluationCount: number;
115
- evaluations: Evaluation[];
116
- }
117
102
  export interface ServicePanoramaResult {
118
103
  action: "service_panorama";
119
104
  network: string;
@@ -173,7 +158,6 @@ export interface ServicePanoramaResult {
173
158
  trust: PanoramaTrust | null;
174
159
  business_report: BusinessReport | null;
175
160
  recent_orders: PanoramaRecentOrders | null;
176
- linked_project: PanoramaLinkedProject | null;
177
161
  data_gaps: string[];
178
162
  }
179
163
  export declare function handleServicePanorama(v: ProjectInput): Promise<ServicePanoramaResult>;
@@ -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;