@wowok/agent-mcp 3.0.4 → 3.0.6

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 (305) hide show
  1. package/README.md +25 -20
  2. package/dist/customer/account-events.js +1 -1
  3. package/dist/evaluation/path-reasoning.d.ts +4 -2
  4. package/dist/evaluation/path-reasoning.js +1 -1
  5. package/dist/extensions/constraint-registry.d.ts +2 -2
  6. package/dist/extensions/constraint-registry.js +1 -1
  7. package/dist/extensions/custom-registry-file.d.ts +22 -0
  8. package/dist/extensions/custom-registry-file.js +1 -0
  9. package/dist/extensions/index.d.ts +2 -1
  10. package/dist/extensions/index.js +1 -1
  11. package/dist/extensions/industry-pack.d.ts +7 -0
  12. package/dist/extensions/industry-pack.js +1 -1
  13. package/dist/extensions/metric-registry.d.ts +2 -2
  14. package/dist/extensions/metric-registry.js +1 -1
  15. package/dist/extensions/modes.js +1 -1
  16. package/dist/extensions/registry.d.ts +2 -2
  17. package/dist/extensions/registry.js +1 -1
  18. package/dist/extensions/types.d.ts +4 -0
  19. package/dist/goal/GoalEngine.d.ts +13 -1
  20. package/dist/goal/GoalEngine.js +1 -1
  21. package/dist/goal/next-steps.d.ts +12 -0
  22. package/dist/goal/next-steps.js +1 -0
  23. package/dist/goal/pursue.d.ts +18 -0
  24. package/dist/goal/pursue.js +1 -0
  25. package/dist/goal/types.d.ts +72 -0
  26. package/dist/goal/types.js +1 -1
  27. package/dist/graph/onchain/analyze.d.ts +44 -0
  28. package/dist/graph/onchain/analyze.js +1 -0
  29. package/dist/graph/onchain/analyze.spec.d.ts +1 -0
  30. package/dist/graph/onchain/analyze.spec.js +1 -0
  31. package/dist/graph/onchain/anti-cheat.d.ts +39 -0
  32. package/dist/graph/onchain/anti-cheat.js +1 -0
  33. package/dist/graph/onchain/anti-cheat.spec.d.ts +1 -0
  34. package/dist/graph/onchain/anti-cheat.spec.js +1 -0
  35. package/dist/graph/onchain/dataplane.d.ts +44 -0
  36. package/dist/graph/onchain/dataplane.js +1 -0
  37. package/dist/graph/onchain/edge-schema.d.ts +60 -0
  38. package/dist/graph/onchain/edge-schema.js +1 -0
  39. package/dist/graph/onchain/expand.d.ts +4 -0
  40. package/dist/graph/onchain/expand.js +1 -0
  41. package/dist/graph/onchain/extract.d.ts +21 -0
  42. package/dist/graph/onchain/extract.js +1 -0
  43. package/dist/graph/onchain/index.d.ts +17 -0
  44. package/dist/graph/onchain/index.js +1 -0
  45. package/dist/graph/onchain/interest.d.ts +10 -0
  46. package/dist/graph/onchain/interest.js +1 -0
  47. package/dist/graph/onchain/interest.spec.d.ts +1 -0
  48. package/dist/graph/onchain/interest.spec.js +1 -0
  49. package/dist/graph/onchain/onchain.spec.d.ts +1 -0
  50. package/dist/graph/onchain/onchain.spec.js +1 -0
  51. package/dist/graph/onchain/order-status.d.ts +53 -0
  52. package/dist/graph/onchain/order-status.js +1 -0
  53. package/dist/graph/onchain/project-relationship.d.ts +3 -0
  54. package/dist/graph/onchain/project-relationship.js +1 -0
  55. package/dist/graph/onchain/sdk-batch.d.ts +123 -0
  56. package/dist/graph/onchain/sdk-batch.js +1 -0
  57. package/dist/graph/onchain/sdk-dataplane.d.ts +43 -0
  58. package/dist/graph/onchain/sdk-dataplane.js +1 -0
  59. package/dist/graph/onchain/strategy.d.ts +54 -0
  60. package/dist/graph/onchain/strategy.js +1 -0
  61. package/dist/graph/onchain/strategy.spec.d.ts +1 -0
  62. package/dist/graph/onchain/strategy.spec.js +1 -0
  63. package/dist/graph/onchain/types.d.ts +238 -0
  64. package/dist/graph/onchain/types.js +1 -0
  65. package/dist/graph/onchain/viewport.d.ts +5 -0
  66. package/dist/graph/onchain/viewport.js +1 -0
  67. package/dist/harness/recover.js +1 -1
  68. package/dist/index.js +1 -1
  69. package/dist/intent/enrich.js +1 -1
  70. package/dist/keeper/detectors.d.ts +1 -1
  71. package/dist/keeper/detectors.js +1 -1
  72. package/dist/knowledge/account-marks.js +1 -1
  73. package/dist/knowledge/allocation-risk.js +1 -1
  74. package/dist/knowledge/allocation-templates.js +1 -1
  75. package/dist/knowledge/anti-cheat.d.ts +2 -37
  76. package/dist/knowledge/anti-cheat.js +1 -1
  77. package/dist/knowledge/contract-invariants.js +1 -1
  78. package/dist/knowledge/getting-started.d.ts +37 -0
  79. package/dist/knowledge/getting-started.js +1 -0
  80. package/dist/knowledge/goal-completion.d.ts +12 -0
  81. package/dist/knowledge/goal-completion.js +1 -1
  82. package/dist/knowledge/guard-render.d.ts +1 -0
  83. package/dist/knowledge/guard-render.js +1 -1
  84. package/dist/knowledge/guard-risk.js +1 -1
  85. package/dist/knowledge/guard-submission-brief.d.ts +83 -0
  86. package/dist/knowledge/guard-submission-brief.js +1 -0
  87. package/dist/knowledge/guard-submission-prompt.d.ts +13 -0
  88. package/dist/knowledge/guard-submission-prompt.js +1 -1
  89. package/dist/knowledge/index.d.ts +10 -4
  90. package/dist/knowledge/index.js +1 -1
  91. package/dist/knowledge/industry-registry.js +1 -1
  92. package/dist/knowledge/industry-strategy.d.ts +91 -0
  93. package/dist/knowledge/industry-strategy.js +1 -0
  94. package/dist/knowledge/jsonrpc-enum.js +1 -1
  95. package/dist/knowledge/market-metrics.d.ts +14 -3
  96. package/dist/knowledge/market-metrics.js +1 -1
  97. package/dist/knowledge/migration-preflight.js +1 -1
  98. package/dist/knowledge/operation-dictionary.d.ts +1 -1
  99. package/dist/knowledge/payment-tracker.d.ts +63 -0
  100. package/dist/knowledge/payment-tracker.js +1 -0
  101. package/dist/knowledge/recipient-constraint.d.ts +160 -0
  102. package/dist/knowledge/recipient-constraint.js +1 -0
  103. package/dist/knowledge/safety-rules.d.ts +1 -1
  104. package/dist/knowledge/safety-rules.js +1 -1
  105. package/dist/knowledge/scenario-topology.d.ts +6 -1
  106. package/dist/knowledge/scenario-topology.js +1 -1
  107. package/dist/knowledge/service-risk-node.d.ts +3 -0
  108. package/dist/knowledge/service-risk-node.js +1 -0
  109. package/dist/knowledge/service-risk.d.ts +2 -0
  110. package/dist/knowledge/service-risk.js +1 -1
  111. package/dist/knowledge/service-templates.d.ts +2 -0
  112. package/dist/knowledge/service-templates.js +1 -1
  113. package/dist/knowledge/strategy-manuals.d.ts +17 -0
  114. package/dist/knowledge/strategy-manuals.js +1 -0
  115. package/dist/knowledge/supply-chain.d.ts +3 -1
  116. package/dist/knowledge/supply-chain.js +1 -1
  117. package/dist/knowledge/template-registry.js +1 -1
  118. package/dist/knowledge/tools-reference.js +1 -1
  119. package/dist/knowledge/workflow-guidance.d.ts +3 -118
  120. package/dist/knowledge/workflow-guidance.js +1 -1
  121. package/dist/knowledge/workspace-lists.d.ts +4 -0
  122. package/dist/knowledge/workspace-lists.js +1 -1
  123. package/dist/monitor/MonitorLoop.js +1 -1
  124. package/dist/monitor/ScopeResolver.js +1 -1
  125. package/dist/participation/arbitrator-interest.d.ts +2 -0
  126. package/dist/participation/arbitrator-interest.js +1 -1
  127. package/dist/participation/collaborator-interest.d.ts +2 -0
  128. package/dist/participation/collaborator-interest.js +1 -1
  129. package/dist/participation/customer-interest.d.ts +2 -0
  130. package/dist/participation/customer-interest.js +1 -1
  131. package/dist/participation/merchant-interest.d.ts +2 -0
  132. package/dist/participation/merchant-interest.js +1 -1
  133. package/dist/participation/radar-core.d.ts +15 -15
  134. package/dist/participation/radar-core.js +1 -1
  135. package/dist/participation/supplier-interest.d.ts +2 -0
  136. package/dist/participation/supplier-interest.js +1 -1
  137. package/dist/persona/analyzer.d.ts +2 -1
  138. package/dist/persona/bridge.d.ts +5 -1
  139. package/dist/persona/bridge.js +1 -1
  140. package/dist/persona/defaults.js +1 -1
  141. package/dist/persona/distill-goal.d.ts +7 -1
  142. package/dist/persona/distill-goal.js +1 -1
  143. package/dist/persona/index.d.ts +13 -3
  144. package/dist/persona/index.js +1 -1
  145. package/dist/persona/model.d.ts +12 -2
  146. package/dist/persona/model.js +1 -1
  147. package/dist/persona/overrides.d.ts +1 -0
  148. package/dist/persona/overrides.js +1 -1
  149. package/dist/persona/topology-focus.d.ts +29 -0
  150. package/dist/persona/topology-focus.js +1 -0
  151. package/dist/persona/types.d.ts +81 -0
  152. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  153. package/dist/playbooks/service-build/context-assembly.js +1 -1
  154. package/dist/playbooks/service-build/machine-nodes.js +1 -1
  155. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  156. package/dist/playbooks/service-build/merchant-guide.d.ts +7 -0
  157. package/dist/playbooks/service-build/merchant-guide.js +1 -1
  158. package/dist/playbooks/service-build/object-panorama.js +1 -1
  159. package/dist/playbooks/service-build/participation-radar.js +1 -1
  160. package/dist/playbooks/service-build/pipeline-actions.d.ts +2 -2
  161. package/dist/playbooks/service-build/pipeline-actions.js +1 -1
  162. package/dist/playbooks/service-build/relationship-profile.d.ts +1 -0
  163. package/dist/playbooks/service-build/relationship-profile.js +1 -1
  164. package/dist/playbooks/service-build/risk-aggregator.js +1 -1
  165. package/dist/playbooks/service-build/service-panorama.d.ts +4 -0
  166. package/dist/playbooks/service-build/service-panorama.js +1 -1
  167. package/dist/playbooks/service-build/topology-query.d.ts +14 -0
  168. package/dist/playbooks/service-build/topology-query.js +1 -0
  169. package/dist/relationship/derivation.js +1 -1
  170. package/dist/role/index.d.ts +1 -0
  171. package/dist/role/index.js +1 -1
  172. package/dist/role/profiles.d.ts +26 -0
  173. package/dist/role/profiles.js +1 -0
  174. package/dist/safety/confirm-gate.d.ts +4 -1
  175. package/dist/safety/confirm-gate.js +1 -1
  176. package/dist/schema/call/allocation.d.ts +6 -6
  177. package/dist/schema/call/allocation.js +1 -1
  178. package/dist/schema/call/base.js +1 -1
  179. package/dist/schema/call/bridge.d.ts +1 -1
  180. package/dist/schema/call/guard.d.ts +20 -20
  181. package/dist/schema/call/repository.js +1 -1
  182. package/dist/schema/call/semantic.js +1 -1
  183. package/dist/schema/call/service.d.ts +4 -4
  184. package/dist/schema/call/service.js +1 -1
  185. package/dist/schema/common/index.js +1 -1
  186. package/dist/schema/employee/index.d.ts +7 -7
  187. package/dist/schema/evaluation/index.d.ts +26 -13
  188. package/dist/schema/evaluation/index.js +1 -1
  189. package/dist/schema/goal/index.d.ts +53 -17
  190. package/dist/schema/goal/index.js +1 -1
  191. package/dist/schema/goal/planning.d.ts +7 -7
  192. package/dist/schema/index.d.ts +1 -0
  193. package/dist/schema/index.js +1 -1
  194. package/dist/schema/industry-pack/index.d.ts +13 -6
  195. package/dist/schema/industry-pack/index.js +1 -1
  196. package/dist/schema/industry-pack/modes.d.ts +6 -6
  197. package/dist/schema/intent-radar/index.d.ts +16 -16
  198. package/dist/schema/local/index.d.ts +8 -4
  199. package/dist/schema/local/index.js +1 -1
  200. package/dist/schema/messenger/index.d.ts +428 -72
  201. package/dist/schema/messenger/index.js +1 -1
  202. package/dist/schema/operations.d.ts +177 -34
  203. package/dist/schema/operations.js +1 -1
  204. package/dist/schema/persona/index.d.ts +15744 -1
  205. package/dist/schema/persona/index.js +1 -1
  206. package/dist/schema/query/bi.d.ts +891 -24
  207. package/dist/schema/query/bi.js +1 -1
  208. package/dist/schema/query/index.d.ts +168 -43
  209. package/dist/schema/query/index.js +1 -1
  210. package/dist/schema/schema-query/index.d.ts +16 -0
  211. package/dist/schema/schema-query/index.js +1 -1
  212. package/dist/schema/schema-version.js +1 -1
  213. package/dist/schema/strategy-review/index.d.ts +137 -0
  214. package/dist/schema/strategy-review/index.js +1 -0
  215. package/dist/schema/trust/index.d.ts +6 -6
  216. package/dist/schema/workflow/index.d.ts +2 -2
  217. package/dist/schema-query-impl/index.js +1 -1
  218. package/dist/schemas/account_operation.output.json +8 -4
  219. package/dist/schemas/account_operation.schema.json +6 -2
  220. package/dist/schemas/bridge_operation.schema.json +10 -10
  221. package/dist/schemas/evaluation_operation.output.json +24 -0
  222. package/dist/schemas/evaluation_operation.schema.json +7 -7
  223. package/dist/schemas/goal_operation.schema.json +124 -0
  224. package/dist/schemas/guard2file.schema.json +2 -2
  225. package/dist/schemas/index.json +7 -1
  226. package/dist/schemas/industry_pack_operation.output.json +39 -0
  227. package/dist/schemas/local_mark_operation.schema.json +2 -2
  228. package/dist/schemas/machineNode2file.schema.json +2 -2
  229. package/dist/schemas/messenger_operation.output.json +934 -236
  230. package/dist/schemas/messenger_operation.schema.json +93 -242
  231. package/dist/schemas/onchain_events.schema.json +1 -1
  232. package/dist/schemas/onchain_operations.schema.json +54 -54
  233. package/dist/schemas/onchain_operations_allocation.schema.json +5 -5
  234. package/dist/schemas/onchain_operations_arbitration.schema.json +2 -2
  235. package/dist/schemas/onchain_operations_contact.schema.json +2 -2
  236. package/dist/schemas/onchain_operations_demand.schema.json +2 -2
  237. package/dist/schemas/onchain_operations_gen_passport.schema.json +2 -2
  238. package/dist/schemas/onchain_operations_gen_proof.schema.json +2 -2
  239. package/dist/schemas/onchain_operations_guard.schema.json +2 -2
  240. package/dist/schemas/onchain_operations_machine.schema.json +8 -8
  241. package/dist/schemas/onchain_operations_order.schema.json +2 -2
  242. package/dist/schemas/onchain_operations_payment.schema.json +3 -3
  243. package/dist/schemas/onchain_operations_permission.schema.json +2 -2
  244. package/dist/schemas/onchain_operations_personal.schema.json +2 -2
  245. package/dist/schemas/onchain_operations_progress.schema.json +2 -2
  246. package/dist/schemas/onchain_operations_proof.schema.json +2 -2
  247. package/dist/schemas/onchain_operations_repository.schema.json +5 -5
  248. package/dist/schemas/onchain_operations_reward.schema.json +2 -2
  249. package/dist/schemas/onchain_operations_service.schema.json +5 -5
  250. package/dist/schemas/onchain_operations_treasury.schema.json +4 -4
  251. package/dist/schemas/onchain_table_data.output.json +197 -13
  252. package/dist/schemas/onchain_table_data.schema.json +43 -43
  253. package/dist/schemas/persona_operation.output.json +37778 -262
  254. package/dist/schemas/persona_operation.schema.json +5960 -1
  255. package/dist/schemas/query_toolkit.output.json +1615 -10
  256. package/dist/schemas/query_toolkit.schema.json +232 -42
  257. package/dist/schemas/schema_query.schema.json +25 -1
  258. package/dist/schemas/strategy_review_operation.output.json +532 -0
  259. package/dist/schemas/strategy_review_operation.schema.json +66 -0
  260. package/dist/schemas/wowok_buildin_info.output.json +188 -6
  261. package/dist/schemas/wowok_buildin_info.schema.json +14 -0
  262. package/dist/strategy/collectors.d.ts +66 -0
  263. package/dist/strategy/collectors.js +1 -0
  264. package/dist/strategy/collectors.spec.d.ts +1 -0
  265. package/dist/strategy/collectors.spec.js +1 -0
  266. package/dist/strategy/index.d.ts +5 -0
  267. package/dist/strategy/index.js +1 -0
  268. package/dist/strategy/metrics.d.ts +20 -0
  269. package/dist/strategy/metrics.js +1 -0
  270. package/dist/strategy/review.d.ts +48 -0
  271. package/dist/strategy/review.js +1 -0
  272. package/dist/strategy/scorecard.d.ts +32 -0
  273. package/dist/strategy/scorecard.js +1 -0
  274. package/dist/strategy/store.d.ts +26 -0
  275. package/dist/strategy/store.js +1 -0
  276. package/dist/tools/handlers/config.js +1 -1
  277. package/dist/tools/handlers/evaluation.js +1 -1
  278. package/dist/tools/handlers/goal.js +1 -1
  279. package/dist/tools/handlers/industry-pack.js +1 -1
  280. package/dist/tools/handlers/local.js +1 -1
  281. package/dist/tools/handlers/messenger.js +1 -1
  282. package/dist/tools/handlers/onchain.js +1 -1
  283. package/dist/tools/handlers/permission.js +1 -1
  284. package/dist/tools/handlers/persona.js +1 -1
  285. package/dist/tools/handlers/query.d.ts +6 -0
  286. package/dist/tools/handlers/query.js +1 -1
  287. package/dist/tools/handlers/schema-query.js +1 -1
  288. package/dist/tools/handlers/strategy-review.d.ts +2 -0
  289. package/dist/tools/handlers/strategy-review.js +1 -0
  290. package/dist/tools/handlers/watch.js +1 -1
  291. package/dist/tools/handlers/workflow.js +1 -1
  292. package/dist/tools/index.d.ts +3 -0
  293. package/dist/tools/index.js +1 -1
  294. package/dist/tools/registry/agent.js +1 -1
  295. package/dist/tools/registry/business.js +1 -1
  296. package/dist/tools/registry/local.js +1 -1
  297. package/dist/tools/registry/messenger.js +1 -1
  298. package/dist/tools/registry/onchain.js +1 -1
  299. package/dist/tools/registry/query.js +1 -1
  300. package/dist/tools/rules-hook.d.ts +2 -0
  301. package/dist/tools/rules-hook.js +1 -1
  302. package/dist/tools/shared.d.ts +2 -1
  303. package/dist/tools/shared.js +1 -1
  304. package/dist/tools/wrap.js +1 -1
  305. package/package.json +2 -2
@@ -0,0 +1,91 @@
1
+ import { type Industry } from "../persona/types.js";
2
+ import type { StrategicPosture } from "../persona/types.js";
3
+ export type MerchantStage = "cold_start" | "growing" | "mature" | "optimization";
4
+ export interface PricingModel {
5
+ id: string;
6
+ name: string;
7
+ applicable_when: string;
8
+ upside: string;
9
+ risks: string;
10
+ wowok_levers: string[];
11
+ recommended?: boolean;
12
+ }
13
+ export interface PosturePlaybook {
14
+ posture: StrategicPosture;
15
+ thesis: string;
16
+ tradeoffs: string;
17
+ guardrails: string[];
18
+ }
19
+ export interface CompetitorWatch {
20
+ dimensions: string[];
21
+ cadence: "weekly" | "biweekly" | "monthly";
22
+ cadence_days: number;
23
+ differentiation: string[];
24
+ }
25
+ export interface ChannelPriority {
26
+ channel: string;
27
+ priority: number;
28
+ rationale: string;
29
+ }
30
+ export interface AcquisitionStrategy {
31
+ channels: ChannelPriority[];
32
+ campaign_paradigm: string;
33
+ reward_orientation: string;
34
+ discount_orientation: string;
35
+ }
36
+ export interface UnitEconomics {
37
+ formula: string;
38
+ anchors: {
39
+ metric: string;
40
+ value: string;
41
+ }[];
42
+ target_margin_pct_min?: number;
43
+ cost_floor: string;
44
+ breakeven_note?: string;
45
+ }
46
+ export interface SuccessPattern {
47
+ pattern: string;
48
+ evidence: string;
49
+ }
50
+ export interface IndustryStrategy {
51
+ industry: Industry;
52
+ benchmark: string;
53
+ priority_tier: 1 | 2 | 3;
54
+ launch_window: string;
55
+ pricing: {
56
+ models: PricingModel[];
57
+ default_model_id: string;
58
+ };
59
+ postures: Record<StrategicPosture, PosturePlaybook>;
60
+ competitor_watch: CompetitorWatch;
61
+ acquisition: AcquisitionStrategy;
62
+ conversion_retention: string[];
63
+ unit_economics: UnitEconomics;
64
+ success_patterns: SuccessPattern[];
65
+ red_lines: string[];
66
+ sources: string[];
67
+ }
68
+ export interface StrategyMetrics {
69
+ order_count?: number;
70
+ repeat_customer_rate?: number;
71
+ dispute_rate?: number;
72
+ gmv?: number;
73
+ trust_score?: number;
74
+ completion_rate?: number;
75
+ }
76
+ export interface StrategyRecommendation {
77
+ industry: Industry;
78
+ posture: StrategicPosture;
79
+ stage: MerchantStage;
80
+ pricing_model_id: string;
81
+ pricing_model_name: string;
82
+ actions: string[];
83
+ }
84
+ export declare const INDUSTRY_STRATEGIES: IndustryStrategy[];
85
+ export declare function registerIndustryStrategy(strategy: IndustryStrategy): void;
86
+ export declare function unregisterIndustryStrategy(industry: string): boolean;
87
+ export declare function getIndustryStrategy(industry: string): IndustryStrategy | undefined;
88
+ export declare function listIndustryStrategies(): IndustryStrategy[];
89
+ export declare function stageFromOrderCount(orderCount: number): MerchantStage;
90
+ export declare function recommendStrategy(industry: string, posture?: StrategicPosture, stage?: MerchantStage, metrics?: StrategyMetrics): StrategyRecommendation | null;
91
+ export declare function validateStrategyLevers(strategy: IndustryStrategy): string[];
@@ -0,0 +1 @@
1
+ import{ROLE_MOVE_MECHANISMS}from'../role/profiles.js';import{SUPPORTED_INDUSTRIES}from'../persona/types.js';const LEVER_WHITELIST=new Set(ROLE_MOVE_MECHANISMS);export const INDUSTRY_STRATEGIES=[{'industry':'education','benchmark':'Coursera\x20/\x20Outschool','priority_tier':0x1,'launch_window':'M1–M3','pricing':{'default_model_id':'per_lesson_escrow','models':[{'id':'per_lesson_escrow','name':'Per-lesson\x20escrow\x20release','applicable_when':'Attendance-based\x20tutoring/courses\x20delivered\x20in\x20N\x20lessons\x20(the\x20core\x20education\x20fit).','upside':'Prepaid\x20tuition\x20never\x20lands\x20with\x20the\x20institution;\x20each\x20lesson\x20fee\x20releases\x20on\x20the\x20parent\x27s\x20attendance\x20signature\x20in\x20seconds;\x20withdrawal\x20refunds\x20unearned\x20lessons\x20in\x20one\x20transaction.','risks':'Requires\x20an\x20attendance-confirmable\x20scenario;\x20purely\x20recorded/self-paced\x20courses\x20are\x20a\x20mismatch\x20(route\x20to\x20subscription).','wowok_levers':['Allocator','Guard','Machine','Order'],'recommended':!![]},{'id':'package_prepaid_raterelease','name':'Package\x20price\x20with\x20rate-based\x20release','applicable_when':'30-lesson\x20packages\x20/\x20term\x20packages\x20where\x20the\x20family\x20pays\x20once\x20up\x20front.','upside':'High\x20AOV\x20(~¥3,000\x20anchor)\x20while\x20funds\x20release\x201/N\x20per\x20completed\x20lesson\x20—\x20the\x20\x27unearned\x20tuition\x20can\x20never\x20be\x20embezzled\x27\x20guarantee\x20is\x20verifiable\x20on-chain.','risks':'Must\x20declare\x20refund\x20policy\x20up\x20front;\x20setting_lock_duration\x20should\x20lock\x20the\x20fee\x20schedule\x20(default\x2030\x20days).','wowok_levers':['Allocator','Guard','CompensationFund','Arbitration']},{'id':'trial_then_enroll','name':'Trial-class\x20conversion\x20price','applicable_when':'Cold-start\x20acquisition\x20of\x20parents\x20via\x20a\x20single\x20low-commitment\x20trial\x20lesson.','upside':'Trial\x20class\x20in\x20escrow,\x20remainder\x20only\x20after\x20the\x20parent\x20signs\x20enrollment;\x20pairs\x20with\x20referral\x20reward.','risks':'Trial\x20discount\x20must\x20stay\x20above\x20hard\x20delivery\x20cost;\x20not\x20a\x20perpetual\x20loss\x20leader.','wowok_levers':['Reward','Allocator','Guard']}]},'postures':{'volume':{'posture':'volume','thesis':'Maximize\x20enrolled\x20families\x20via\x20group-buy\x20/\x20early-bird\x20and\x20KOC\x20parent\x20communities;\x20trust\x20transparency\x20is\x20the\x20conversion\x20weapon.','tradeoffs':'Lower\x20per-seat\x20margin;\x20heavier\x20campaign/operations\x20load\x20in\x20M1–M2.','guardrails':['Never\x20discount\x20below\x20per-lesson\x20delivery\x20cost','Keep\x20arbitration\x20bound\x20and\x20compensation\x20fund\x20covered\x20at\x20every\x20promo\x20tier','Per-lesson\x20escrow\x20release\x20is\x20mandatory\x20even\x20on\x20discounted\x20packages']},'balanced':{'posture':'balanced','thesis':'Mix\x20institutional\x20direct\x20sales\x20(high-AOV\x20compliance\x20positioning)\x20with\x20parent-community\x20KOC\x20growth.','tradeoffs':'Slower\x20than\x20pure\x20volume,\x20lower\x20margin\x20ceiling\x20than\x20premium\x20small-class.','guardrails':['Per-lesson\x20escrow\x20release\x20mandatory','Refund\x20policy\x20declared\x20before\x20payment','Recorded-only\x20products\x20routed\x20to\x20subscription,\x20not\x20sold\x20as\x20attendance\x20courses']},'margin':{'posture':'margin','thesis':'Sell\x20compliance\x20itself\x20to\x20mid-size\x20institutions:\x20on-chain\x20custody\x20as\x20a\x20competitive\x20moat,\x20premium\x20positioning\x20to\x20burned-by-failure\x20parents.','tradeoffs':'Long\x20BD\x20cycles\x20(¥1,500–3,000\x20cost\x20per\x20signed\x20institution),\x20few\x20but\x20large\x20accounts.','guardrails':['Do\x20not\x20soften\x20escrow/fund\x20requirements\x20to\x20win\x20a\x20large\x20account','\x27Protocol\x20custody\x27\x20claims\x20need\x20the\x20locked\x20fee\x20schedule\x20to\x20back\x20them']}},'competitor_watch':{'dimensions':['headline\x20price\x20vs\x20escrow\x20structure','arbitration\x20availability','compensation\x20fund\x20coverage','per-lesson\x20release\x20granularity','refund-window\x20terms'],'cadence':'weekly','cadence_days':0x7,'differentiation':['Compete\x20on\x20verifiable\x20fund\x20safety\x20(parents\x20can\x20read\x20the\x20Allocation\x20themselves),\x20never\x20on\x20headline\x20discount','Lead\x20with\x20\x27teacher\x20settlement\x20in\x20seconds\x27\x20to\x20attract师资\x20as\x20well\x20as\x20parents']},'acquisition':{'channels':[{'channel':'Parent-rights\x20/\x20local\x20parent\x20KOC\x20communities','priority':0x1,'rationale':'The\x20angry\x20stock\x20from\x20tuition-failure\x20cases\x20concentrates\x20here;\x20trust\x20products\x20sell\x20through\x20trusted\x20channels\x20(¥30–80\x20per\x20paying\x20parent).'},{'channel':'Institutional\x20direct\x20BD\x20(1:1)','priority':0x2,'rationale':'Supply\x20side\x20decides\x20the\x20two-sided\x20cold\x20start;\x20one\x20institution\x20brings\x20its\x20whole\x20parent\x20base.'},{'channel':'Industry\x20media\x20/\x20policy\x20white-papers','priority':0x3,'rationale':'Zero-ad\x20spend\x20endorsement\x20during\x20the\x20next\x20regulatory\x20news\x20cycle.'},{'channel':'Paid\x20ads','priority':0x4,'rationale':'Conflicts\x20with\x20the\x20trust\x20narrative;\x20do\x20not\x20use\x20within\x20the\x20first\x2090\x20days.'}],'campaign_paradigm':'Two\x2090-day\x20campaigns:\x20(A)\x20\x27tuition\x20transparency\x20experiment\x27\x20—\x20two\x20parallel\x20classes,\x20traditional\x20vs\x20escrow,\x20open\x20on-chain\x20comparison,\x20parent\x20open-day\x20live\x20withdrawal\x20refund\x20demo;\x20(B)\x20\x27regulatory\x20answer\x27\x20white-paper\x20on\x20protocol\x20custody,\x20no\x20ads.','reward_orientation':'Milestone\x20(course\x20completion)\x20reward\x20+\x20referral\x20cashback;\x20trial-class\x20discount\x20as\x20the\x20cold-start\x20hook.','discount_orientation':'Early-bird\x20and\x20group-buy\x20only\x20during\x20campaign\x20windows;\x20student-aid\x20discount\x20as\x20targeted,\x20not\x20blanket,\x20price\x20cuts.'},'conversion_retention':['Show\x20the\x20escrow\x20contract\x20balance\x20and\x20per-lesson\x20release\x20records\x20before\x20payment\x20(on-chain\x20verification\x20page).','Convert\x20trial\x20families\x20with\x20the\x20live\x20\x27unearned\x20funds\x20are\x20still\x20yours\x27\x20demonstration.','Renew\x20via\x20per-lesson\x20release\x20history\x20+\x20attendance\x20record;\x20sibling/referral\x20reward\x20beats\x20discounting.'],'unit_economics':{'formula':'extra\x20per\x20order\x20=\x20legacy\x20platform\x20fee\x20rate\x20×\x20AOV\x20−\x20(WoW\x20gas\x20+\x20keeper\x20amortization\x20+\x20one-time\x20migration\x20cost)','anchors':[{'metric':'AOV\x20anchor\x20(30-lesson\x20package)','value':'¥3,000'},{'metric':'Legacy\x20combined\x20fee','value':'Outschool\x2030%\x20≈\x20¥900/order'},{'metric':'WoW\x20per-order\x20cost\x20(N+2\x20txns)','value':'gas\x20≈\x20$0.05–2.5'},{'metric':'Extra\x20earnings\x20per\x20order','value':'≈\x20¥890'}],'target_margin_pct_min':0x19,'cost_floor':'Never\x20price\x20a\x20package\x20below\x20total\x20teacher-cost-per-lesson\x20×\x20lessons;\x20compensation\x20fund\x20must\x20stay\x20covered.','breakeven_note':'Migration/setup\x20cost\x20amortizes\x20over\x20the\x20first\x20package;\x20gas\x20is\x20negligible\x20vs\x20¥900\x20saved.'},'success_patterns':[{'pattern':'Run\x20the\x20parallel-class\x20transparency\x20experiment\x20with\x20one\x20anchor\x20institution\x20and\x20open\x20all\x20escrow\x20data.','evidence':'KPI:\x201\x20anchor,\x20≥30\x20escrow\x20orders,\x20verifiable\x20case\x20piece,\x20parent\x20NPS\x20≥60.'},{'pattern':'Sign\x20institutions\x20through\x20direct\x20BD\x20and\x20let\x20each\x20bring\x20its\x20parent\x20base.','evidence':'90-day\x20gate:\x20≥10\x20institutions\x20beyond\x20the\x20seed;\x20BD\x20cost\x20¥1,500–3,000\x20each.'},{'pattern':'Ship\x20the\x20≤10-dialogue\x20templated\x20onboarding\x20(attendance\x20guard\x20+\x20rate\x20release\x20+\x20lock\x20duration).','evidence':'K1/04\x20validated\x20education\x20shop\x20build\x20in\x2011\x20dialogues.'},{'pattern':'Hold\x20the\x2090-day\x20quality\x20gate\x20before\x20scaling\x20spend.','evidence':'Gate:\x20≥20\x20published\x20Services\x20across\x20tier-1\x20industries,\x20>25%\x20first-to-repeat\x20rate,\x20100%\x20on-chain\x20dispute\x20closure.'}],'red_lines':['Route\x20recorded/self-paced\x20courses\x20to\x20subscription\x20—\x20never\x20sell\x20them\x20as\x20attendance\x20escrow.','Never\x20imply\x20the\x20structure\x20prevents\x20bad\x20teaching;\x20it\x20prevents\x20fund\x20embezzlement\x20(honest\x20boundary).','Marketing\x20figures\x20are\x20fiat-denominated;\x20carry\x20the\x20testnet/estimate/WOW-price\x20disclaimers.'],'sources':['wiki/market/K1/05-商业化/02-六行业商业模式深度论证与落地执行手册.md\x20§3','wiki/market/K1/01-行业分析/教育-Coursera.md']},{'industry':'rental','benchmark':'Airbnb\x20/\x20Turo\x20/\x20Getaround','priority_tier':0x1,'launch_window':'M1–M3','pricing':{'default_model_id':'rent_deposit_bundled_escrow','models':[{'id':'rent_deposit_bundled_escrow','name':'Rent\x20+\x20deposit\x20bundled\x20escrow,\x20three-path\x20settlement','applicable_when':'High-value\x20low-frequency\x20rentals\x20(camera\x20gear,\x20machinery,\x20outdoor\x20equipment)\x20and\x20P2P\x20stays\x20with\x20damage\x20disputes.','upside':'Rent\x20and\x20real\x20deposit\x20(not\x20a\x20card\x20auth)\x20are\x20escrowed;\x20three\x20mutually\x20exclusive\x20Allocator\x20paths\x20(clean\x20return\x20/\x20cancellation\x20/\x20graded\x20damage)\x20settle\x20in\x20one\x20~3-second\x20transaction.','risks':'Pre-rental\x20WIP\x20baseline\x20is\x20mandatory\x20—\x20without\x20it\x20the\x20damage\x20guard\x20cannot\x20pass\x20and\x20the\x20value\x20proposition\x20collapses.','wowok_levers':['Allocator','Guard','Machine','WIP','Arbitration'],'recommended':!![]},{'id':'graded_damage_allocator','name':'Pre-agreed\x20graded\x20damage\x20deduction','applicable_when':'Continuous\x20damage\x20amounts\x20(e.g.\x20$347.50\x20claims)\x20need\x20fairness\x20ex\x20ante.','upside':'Light\x2020%\x20/\x20heavy\x2050%\x20/\x20total\x20100%\x20brackets\x20fixed\x20before\x20rental;\x20micro-arbitration\x20only\x20for\x20bracket\x20assignment.','risks':'Brackets\x20must\x20be\x20disclosed\x20and\x20accepted\x20at\x20order\x20time.','wowok_levers':['Allocator','Guard','Arbitration']},{'id':'duration_discount','name':'Long-duration\x20discount\x20ladder','applicable_when':'Idle\x20inventory\x20with\x20low\x20marginal\x20wear\x20cost.','upside':'Monthly\x2010%\x20/\x20quarterly\x2020%\x20/\x20annual\x2030%\x20ladder\x20raises\x20utilization\x20without\x20touching\x20deposit\x20safety.','risks':'Discount\x20must\x20remain\x20above\x20maintenance+depreciation\x20cost\x20per\x20period.','wowok_levers':['Reward','Allocator']}]},'postures':{'volume':{'posture':'volume','thesis':'Win\x20utilization\x20and\x20repeat\x20rentals\x20via\x20credit-accumulation\x20rewards\x20and\x20long-duration\x20discounts;\x20lead\x20supply-side\x20signup\x20with\x20deposit\x20escrow\x20as\x20the筛选器.','tradeoffs':'Thinner\x20per-rental\x20margin;\x20keeper\x20subsidy\x20in\x20seed\x20months.','guardrails':['Pre-rental\x20WIP\x20baseline\x20guard\x20never\x20skipped\x20even\x20for\x20promo\x20rentals','Deposit\x20must\x20be\x20really\x20funded\x20(no\x20zero-deposit\x20waivers\x20in\x20volume\x20mode)']},'balanced':{'posture':'balanced','thesis':'Seed\x20~10\x20vertical\x20merchants\x20with\x20templated\x20builds;\x20balance\x20utilization\x20promos\x20against\x20the\x20verified-case\x20marketing\x20asset.','tradeoffs':'Moderate\x20growth,\x20moderate\x20subsidy\x20($20/mo\x20keeper\x20per\x20seed\x20merchant).','guardrails':['All\x20three\x20settlement\x20paths\x20configured\x20on\x20every\x20published\x20service','Independent\x20arbitration\x20bound']},'margin':{'posture':'margin','thesis':'Premium\x20positioning\x20for\x20high-value\x20equipment:\x20renters\x20pay\x20for\x20real,\x20on-chain-verifiable\x20deposit\x20safety\x20and\x203-second\x20returns.','tradeoffs':'Smaller\x20renter\x20pool;\x20longer\x20trust-building\x20cycle.','guardrails':['Never\x20shorten\x20evidence\x20requirements\x20to\x20speed\x20up\x20a\x20premium\x20rental','Damage\x20brackets\x20stay\x20pre-agreed\x20—\x20no\x20discretionary\x20deductions']}},'competitor_watch':{'dimensions':['rent\x20price','whether\x20deposit\x20is\x20actually\x20held\x20(vs\x20card\x20auth)','pre-rental\x20evidence\x20requirement','refund\x20speed','arbitration\x20independence'],'cadence':'biweekly','cadence_days':0xe,'differentiation':['The\x20three\x20k1rent\x20Payment\x20transactions\x20are\x20the\x20marketing:\x20anyone\x20can\x20audit\x20them','Damage\x20claims\x20cannot\x20be\x20weaponized\x20via\x20reviews\x20—\x20settlement\x20is\x20independent\x20of\x20the\x20rating\x20system']},'acquisition':{'channels':[{'channel':'Vertical\x20communities\x20(photography\x20/\x20machinery\x20/\x20outdoor\x20KOC\x20groups)','priority':0x1,'rationale':'Damage-dispute\x20pain\x20is\x20concentrated\x20here\x20(¥50–120\x20per\x20renter-side\x20user).'},{'channel':'Competitors\x27\x20official\x20documents','priority':0x2,'rationale':'Cite\x20Airbnb\x27s\x202026\x20AI-image\x20claim\x20ban\x20and\x20Getaround\x27s\x20shutdown\x20—\x20opponent\x20copy\x20is\x20the\x20best\x20copy.'},{'channel':'On-chain\x20case\x20marketing\x20(auditable\x20rental\x20page)','priority':0x3,'rationale':'\x27Audit\x20this\x20rental\x20yourself\x27\x20open\x20day.'},{'channel':'Second-hand\x20marketplace\x20dispute\x20threads','priority':0x4,'rationale':'Intercept\x20existing\x20pain\x20(\x27this\x20dispute\x20could\x20not\x20happen\x20on\x20WoW\x27).'}],'campaign_paradigm':'(A)\x20\x27Audit\x20this\x20ledger\x20yourself\x27\x20open\x20day\x20around\x20the\x20k1rent\x2010-node\x20machine\x20+\x20three\x20payments;\x20(B)\x20recruit\x2010\x20seed\x20merchants,\x20keeper\x20+\x20first-order\x20gas\x20subsidy\x20for\x203\x20months.','reward_orientation':'Credit\x20accumulation\x20across\x20rentals\x20+\x20referral\x20cashback;\x20rewards\x20tied\x20to\x20verified\x20completed\x20rentals,\x20not\x20signups.','discount_orientation':'Duration\x20ladder\x20(monthly/quarterly/annual);\x20no\x20blanket\x20price\x20cuts.'},'conversion_retention':['Make\x20pre-rental\x20WIP\x20capture\x20a\x20guided,\x20frictionless\x20step\x20—\x20it\x20is\x20the\x20trust\x20moment,\x20not\x20paperwork.','Show\x20historical\x20settlement\x20transactions\x20to\x20first-time\x20renters\x20before\x20they\x20fund.','Re-rental\x20via\x20accumulated\x20credit;\x20long-duration\x20discount\x20ladder\x20for\x20inventory\x20utilization.'],'unit_economics':{'formula':'extra\x20per\x20order\x20=\x20legacy\x20commission\x20rate\x20×\x20rental\x20value\x20−\x20(WoW\x20gas\x20+\x20keeper\x20$5–20/mo\x20amortization)','anchors':[{'metric':'AOV\x20anchor\x20(camera,\x203\x20days)','value':'$200'},{'metric':'Legacy\x20host-side\x20commission','value':'15.5%\x20≈\x20$31/order'},{'metric':'WoW\x20full-cycle\x20cost\x20(k1rent\x20empirical)','value':'≈\x200.05\x20WOW\x20≈\x20¥0.35\x20(5–7\x20txns)'},{'metric':'Deposit\x20refund\x20speed','value':'7–15\x20business\x20days\x20→\x20≈3\x20seconds'}],'target_margin_pct_min':0x1e,'cost_floor':'Rental\x20price\x20must\x20cover\x20maintenance\x20+\x20depreciation\x20+\x20bracket-expected\x20damage;\x20deposit\x20never\x20lent\x20against.','breakeven_note':'At\x20$200\x20AOV\x20the\x20saved\x20$31\x20commission\x20dwarfs\x20gas\x20and\x20keeper\x20cost\x20from\x20the\x20first\x20order.'},'success_patterns':[{'pattern':'Publish\x20the\x20three\x20immutable\x20settlement\x20Payments\x20(clean\x20/\x20cancel\x20/\x20damage)\x20as\x20an\x20interactive\x20audit\x20page.','evidence':'KPI:\x20≥5,000\x20audit-page\x20UV,\x203\x20inbound\x20merchants,\x201\x20organic\x20KOC\x20retelling.'},{'pattern':'Onboard\x2010\x20equipment-rental\x20merchants\x20from\x20the\x20vertical\x20template\x20within\x203\x20months.','evidence':'Gate:\x2010\x20published\x20Services,\x20≥100\x20cumulative\x20orders,\x20zero\x20escalated\x20disputes\x20(all\x20closed\x20via\x20guard\x20or\x20micro-arbitration).'},{'pattern':'Enforce\x20pre-rental\x20WIP\x20baseline\x20as\x20a\x20hard\x20node,\x20turning\x20the\x2020%→70%\x20claim\x20rejection\x20curve\x20upside\x20down.','evidence':'Without\x20baseline\x20evidence\x20traditional\x20platforms\x20reject\x2020%;\x20with\x20missing-date\x20evidence\x20they\x20reject\x2070%.'},{'pattern':'Make\x20keeper\x20auto-return\x20reminders\x20standard\x20onboarding,\x20priced\x20transparently\x20at\x20$5–20/mo.','evidence':'Honest-boundary\x20requirement\x20from\x20k1rent\x20rollout.'}],'red_lines':['Never\x20claim\x20\x27contract-enforced\x27\x20arbitration\x20independence\x20without\x20negative-test\x20backing\x20(P-5\x20lesson).','Damage\x20deduction\x20without\x20pre-rental\x20baseline\x20is\x20forbidden\x20(guard\x20must\x20fail).','Never\x20hide\x20the\x20keeper\x20subscription\x20cost.'],'sources':['wiki/market/K1/05-商业化/02-六行业商业模式深度论证与落地执行手册.md\x20§4','wiki/market/K1/01-行业分析/租赁-Airbnb.md']},{'industry':'freelance','benchmark':'Upwork','priority_tier':0x2,'launch_window':'M2–M4','pricing':{'default_model_id':'milestone_escrow_accept','models':[{'id':'milestone_escrow_accept','name':'Milestone\x20escrow\x20with\x20acceptance\x20signature','applicable_when':'Project-based\x20design/translation/dev/copy\x20work\x20deliverable\x20in\x20milestones.','upside':'Funds\x20escrowed\x20at\x20signing;\x20deliver_guard_wip\x20anchors\x20each\x20delivery;\x20client\x20acceptance\x20signature\x20releases\x20in\x20seconds;\x2014-day\x20silence\x20auto-accepts\x20via\x20time\x20guard\x20+\x20keeper.','risks':'Milestones\x20must\x20be\x20objectively\x20verifiable;\x20vague\x20acceptance\x20criteria\x20invite\x20disputes.','wowok_levers':['Allocator','Guard','Machine','WIP','Progress'],'recommended':!![]},{'id':'fixed_deliverable','name':'Fixed-price\x20deliverable\x20with\x20revision\x20loops','applicable_when':'Single-deliverable\x20jobs\x20(logo,\x20translation,\x20article).','upside':'Revision\x20rounds\x20modeled\x20as\x20machine\x20loops;\x20micro-arbitration\x20available\x20at\x20ANY\x20amount.','risks':'Cap\x20revision\x20rounds\x20up\x20front\x20to\x20avoid\x20scope\x20creep.','wowok_levers':['Machine','Guard','Arbitration']},{'id':'demand_reverse_match','name':'Demand-based\x20reverse\x20bidding','applicable_when':'Client\x20posts\x20a\x20Demand\x20and\x20freelancers\x20present;\x20discovery\x20without\x20connect\x20fees.','upside':'Zero\x20bid-entry\x20cost\x20(vs\x20$48–120\x20first-order\x20Connects\x20burn)\x20and\x20~60%\x20zero-reply\x20proposals\x20avoided.','risks':'Presenter\x20quality\x20gating\x20via\x20passport/trust\x20evidence.','wowok_levers':['Demand','DemandPresenter','Passport','Guard']}]},'postures':{'volume':{'posture':'volume','thesis':'Win\x20order\x20count\x20through\x20Demand\x20participation\x20and\x20first-order\x20speed;\x20carry\x20portable\x20Passport\x20reputation\x20across\x20clients.','tradeoffs':'Smaller\x20milestones,\x20more\x20concurrent\x20clients.','guardrails':['Every\x20milestone\x20escrowed\x20before\x20work\x20starts','Never\x20start\x20work\x20on\x20an\x20unescrowed\x20\x27trusted\x20client\x27\x20promise']},'balanced':{'posture':'balanced','thesis':'Mix\x20Demand\x20bidding\x20with\x20referral\x20clients;\x20standardize\x20milestone\x20templates\x20to\x20cut\x20admin\x20time.','tradeoffs':'Moderate\x20pipeline;\x20time\x20invested\x20in\x20WIP\x20evidence\x20discipline.','guardrails':['Auto-accept\x20time\x20guard\x20configured','Arbitration\x20bound\x20even\x20on\x20small\x20jobs\x20(cost\x20is\x20trivial)']},'margin':{'posture':'margin','thesis':'Premium\x20positioning\x20via\x20public\x20on-chain\x20delivery\x20history\x20and\x20WIP\x20quality;\x20refuse\x20hourly-monitoring\x20clients.','tradeoffs':'Fewer,\x20larger\x20projects;\x20longer\x20sales\x20conversation.','guardrails':['Never\x20accept\x20work\x20that\x20requires\x20process\x20surveillance\x20(philosophy\x20mismatch)','Milestone\x20granularity\x20protects\x20margin\x20—\x20no\x20all-or-nothing\x20delivery']}},'competitor_watch':{'dimensions':['effective\x20fee\x20after\x20tiered\x20cuts','escrow\x20availability','settlement\x20speed','arbitration\x20fee\x20floor','reputation\x20portability'],'cadence':'biweekly','cadence_days':0xe,'differentiation':['Portable\x20Passport\x20credentials\x20vs\x20locked\x20JSS','Arbitration\x20at\x20sub-$700\x20values\x20—\x20the\x20exact\x20segment\x20incumbents\x20structurally\x20abandon','Outcome\x20verification\x20(WIP)\x20instead\x20of\x20screen\x20monitoring']},'acquisition':{'channels':[{'channel':'r/freelance,\x20Indie\x20Hackers,\x20nomad\x20communities','priority':0x1,'rationale':'Fee-fatigued\x20mid/long-tail\x20freelancers;\x20est.\x20$3–8\x20per\x20registered\x20freelancer.'},{'channel':'Design/translation\x20vertical\x20communities','priority':0x2,'rationale':'High\x20milestone-delivery\x20fit.'},{'channel':'Demand\x20reverse-match\x20events','priority':0x3,'rationale':'Crack\x20the\x20demand\x20side\x20with\x20real\x20bounties.'},{'channel':'KOC\x20income-transparency\x20program','priority':0x4,'rationale':'5–8\x20mid-tier\x20creators\x20publishing\x20Upwork\x20vs\x20WoW\x20income\x20with\x20auditable\x20addresses\x20after\x20≥20\x20merchants\x20exist.'}],'campaign_paradigm':'\x27$699\x20Arbitration\x20Clinic\x27\x20(M2–M3,\x20only\x20after\x20≥20\x20merchants):\x20publicly\x20resolve\x20sub-$700\x20disputes\x20on-chain,\x20weekly\x20micro-arbitration\x20documentary;\x20KOC\x20transparent-income\x20program\x20with\x20on-chain\x20settlement.','reward_orientation':'Referral\x20and\x20repeat-client\x20rewards;\x20KOC\x20payouts\x20auto-split\x20via\x20Allocation\x20after\x20verified\x20first-order\x20conversion.','discount_orientation':'No\x20fee-discounting\x20narrative\x20—\x20the\x20platform\x20fee\x20is\x20already\x20~0;\x20compete\x20on\x20escrow/arbitration\x20value.'},'conversion_retention':['Convert\x20prospects\x20by\x20showing\x20WIP\x20hashes\x20of\x20similar\x20completed\x20milestones.','Propose\x203–5\x20milestone\x20splits\x20in\x20the\x20first\x20proposal\x20—\x20it\x20signals\x20professionalism\x20and\x20de-risks\x20the\x20client.','Retain\x20via\x20Passport:\x20every\x20clean\x20completion\x20is\x20a\x20portable\x20credential,\x20explicitly\x20say\x20so\x20at\x20delivery.'],'unit_economics':{'formula':'extra\x20per\x20order\x20=\x20legacy\x20fee\x20rate\x20×\x20contract\x20value\x20+\x20avoided\x20connect/arbitration\x20fees\x20−\x20WoW\x20gas','anchors':[{'metric':'AOV\x20anchor\x20(milestone\x20contract)','value':'$1,000'},{'metric':'Legacy\x20take\x20rate','value':'Upwork\x2015.4%\x20≈\x20$154\x20(+\x20client\x203–7.99%)'},{'metric':'Bid\x20entry\x20cost','value':'Connects\x20$48–120\x20first-order;\x20~60%\x20of\x20proposals\x20get\x20no\x20reply'},{'metric':'WoW\x20cost\x20(4–8\x20txns)','value':'gas\x20≈\x20$0.01–0.6;\x20arbitration\x20≈\x20$0.01\x20vs\x20$337.50/party'},{'metric':'Settlement\x20speed','value':'up\x20to\x2027\x20days\x20→\x20seconds\x20on\x20acceptance\x20signature'}],'target_margin_pct_min':0x28,'cost_floor':'Milestone\x20price\x20must\x20cover\x20the\x20quoted\x20hours\x20at\x20the\x20freelancer\x27s\x20minimum\x20hourly\x20rate;\x20no\x20unpaid\x20spec\x20work\x20beyond\x20one\x20proposal.','breakeven_note':'One\x20$1,000\x20contract\x20saves\x20≈$153\x20—\x20adoption\x20pays\x20on\x20the\x20first\x20escrowed\x20job.'},'success_patterns':[{'pattern':'Run\x20the\x20\x27$699\x20Arbitration\x20Clinic\x27\x20with\x20≥10\x20closed\x20micro-arbitrations\x20and\x20publish\x20weekly\x20documentaries.','evidence':'KPI:\x20avg\x20read\x20≥3,000/episode;\x20arbitrator\x20pool\x20≥15.'},{'pattern':'Sign\x205–8\x20mid-tier\x20KOCs\x20with\x20income-guarantee\x20top-ups,\x20settled\x20on-chain\x20after\x20conversion.','evidence':'KPI:\x20≥30\x20registered\x20freelancers\x20per\x20KOC;\x20on-chain\x20conversion\x20≥8%.'},{'pattern':'Standardize\x20the\x2014-day\x20silence\x20auto-acceptance\x20guard\x20on\x20every\x20service.','evidence':'Eliminates\x20the\x20\x27client\x20disappears,\x20funds\x20locked\x27\x20failure\x20mode\x20without\x20weakening\x20buyer\x20protection.'},{'pattern':'Turn\x20down\x20hourly-surveillance\x20clients\x20explicitly.','evidence':'Outcome\x20verification\x20philosophy\x20is\x20the\x20differentiation\x20against\x20Work\x20Diary\x20monitoring.'}],'red_lines':['Do\x20not\x20start\x20work\x20before\x20the\x20milestone\x20is\x20escrowed.','Do\x20not\x20promote\x20reputation\x20portability\x20(Passport)\x20before\x20the\x20issuance\x20UX\x20is\x20production-ready.','Never\x20bid\x20below\x20minimum-rate\x20floor\x20to\x20win\x20volume.'],'sources':['wiki/market/K1/05-商业化/02-六行业商业模式深度论证与落地执行手册.md\x20§5','wiki/market/K1/01-行业分析/自由职业-Upwork.md']},{'industry':'travel','benchmark':'Booking\x20/\x20TUI','priority_tier':0x3,'launch_window':'M4+','pricing':{'default_model_id':'multi_segment_release','models':[{'id':'multi_segment_release','name':'Multi-leg\x20itinerary\x20with\x20per-segment\x20release','applicable_when':'Custom/multi-segment\x20packaged\x20trips\x20by\x20small\x20studios\x20(TUI-fit\x2010/10).','upside':'segment_D1..DN\x20machine;\x20each\x20segment\x27s\x20WIP\x20releases\x20its\x20fee;\x20interrupted\x20segments\x20refund\x20in\x20one\x20transaction;\x20fund\x20waterfall\x20fully\x20auditable.','risks':'Sub-providers\x20(hotels/drivers)\x20need\x20not\x20be\x20on-chain\x20initially\x20—\x20the\x20agent\x20is\x20the\x20single\x20on-chain\x20counterparty;\x20adoption\x20bottleneck\x20is\x20why\x20travel\x20is\x20tier\x203.','wowok_levers':['Machine','Allocator','Treasury','Guard','WIP'],'recommended':!![]},{'id':'agent_single_custody','name':'Agent\x20single-counterparty\x20custody','applicable_when':'Downstream\x20suppliers\x20are\x20not\x20on-chain\x20yet.','upside':'Agent↔client\x20escrow\x20closes\x20the\x20trust\x20loop\x20alone;\x20supplier\x20participation\x20grows\x20with\x20network\x20effects.','risks':'Agent\x20must\x20hold\x20correct\x20licensing\x20and\x20fund\x20the\x20compensation\x20coverage.','wowok_levers':['Allocator','Treasury','CompensationFund','Arbitration']},{'id':'weather_guarantee','name':'Weather/condition-guarded\x20pricing','applicable_when':'Weather-sensitive\x20segments\x20can\x20reference\x20an\x20evidence\x20repository.','upside':'Auto-refund\x20triggers\x20via\x20quoted\x20guard\x20+\x20repository\x20oracle\x20—\x20a\x20feature\x20no\x20OTA\x20offers.','risks':'Guard\x20trigger\x20source\x20must\x20be\x20specified\x20and\x20tested\x20before\x20sale.','wowok_levers':['Guard','Allocator','Repository']}]},'postures':{'volume':{'posture':'volume','thesis':'Postpone;\x20volume\x20play\x20only\x20after\x20tier-1/2\x20Passport\x20network\x20lowers\x20cold-start\x20cost.','tradeoffs':'High\x20coordination\x20cost\x20across\x20sub-providers.','guardrails':['Never\x20sell\x20standard\x20standalone\x20flights/hotels\x20(weak\x20WoW\x20value)','Undelivered\x20segments\x20always\x20refundable\x20via\x20the\x20interrupted\x20path']},'balanced':{'posture':'balanced','thesis':'Pilot\x20with\x202–3\x20custom-trip\x20studios\x20on\x20single-counterparty\x20custody;\x20prove\x20the\x20waterfall\x20story.','tradeoffs':'Few\x20pilots,\x20heavy\x20case-building\x20effort\x20($10–15K\x20pilot\x20budget).','guardrails':['Fund\x20waterfall\x20visible\x20to\x20the\x20buyer\x20before\x20payment','Cancellation\x20policy\x20per\x20leg\x20declared\x20up\x20front']},'margin':{'posture':'margin','thesis':'Premium\x20bespoke\x20itineraries\x20priced\x20on\x20trust\x20architecture\x20and\x20transparent\x20waterfall,\x20not\x20OTA\x20discounting.','tradeoffs':'Small\x20high-AOV\x20audience.','guardrails':['Refundable\x20vs\x20non-refundable\x20legs\x20separated\x20explicitly','Never\x20commingle\x20undelivered-segment\x20funds\x20with\x20operating\x20cash']}},'competitor_watch':{'dimensions':['effective\x20commission\x20after\x20Preferred/Genius','waterfall\x20transparency','cancellation\x20terms\x20per\x20leg','downstream\x20refund\x20handling\x20(e.g.\x20EU261\x20gaps)','settlement\x20speed'],'cadence':'monthly','cadence_days':0x1e,'differentiation':['The\x20$2,000\x20waterfall\x20split\x20across\x20hotel/guide/agent\x20is\x20inspectable\x20before\x20purchase','Pre-event\x20isolation\x20vs\x20Thomas-Cook-style\x20post-hoc\x20relief']},'acquisition':{'channels':[{'channel':'Custom-trip\x20studio\x20direct\x20partnerships','priority':0x1,'rationale':'Only\x20segment\x20with\x2010/10\x20fit;\x202–3\x20pilot\x20studios.'},{'channel':'Travel-industry\x20failure\x20news\x20cycles','priority':0x2,'rationale':'Thomas\x20Cook\x20£400M\x20/\x20pandemic\x20$35B\x20refund\x20stories\x20anchor\x20pre-isolation\x20demand.'},{'channel':'Waterfall/weather\x20demo\x20content','priority':0x3,'rationale':'Interactive\x20fund-split\x20and\x20auto-refund\x20demos.'}],'campaign_paradigm':'\x27Transparent\x20waterfall\x27\x20demo\x20($2,000\x20split\x20readable\x20on-chain)\x20+\x20weather-guard\x20auto-refund\x20demo;\x20$10–15K\x20for\x202–3\x20studio\x20pilots,\x20M4–M6.','reward_orientation':'Referral\x20commission\x20for\x20repeat/referral\x20custom\x20trips;\x20flash-sale\x20rewards\x20only\x20for\x20off-peak\x20clearance.','discount_orientation':'Early-bird\x20/\x20group\x20/\x20member\x20pricing\x20within\x20seasons;\x20never\x20discount\x20by\x20hiding\x20non-refundable\x20legs.'},'conversion_retention':['Sell\x20the\x20pre-trip\x20inspection\x20of\x20the\x20entire\x20fund\x20waterfall\x20as\x20the\x20core\x20asset.','Convert\x20with\x20the\x20interrupted-segment\x20one-transaction\x20refund\x20demo.','Re-book\x20via\x20itinerary\x20history\x20and\x20per-leg\x20transparency,\x20not\x20loyalty\x20points.'],'unit_economics':{'formula':'extra\x20per\x20trip\x20=\x20effective\x20OTA\x20commission\x20×\x20trip\x20value\x20−\x20(WoW\x20gas\x20across\x202×segments+3\x20txns)','anchors':[{'metric':'AOV\x20anchor\x20(5-segment\x20custom\x20trip)','value':'$2,000'},{'metric':'Effective\x20legacy\x20commission','value':'25–36%\x20≈\x20$350–720/trip'},{'metric':'WoW\x20cost','value':'gas\x20≈\x20$0.02–1'},{'metric':'Settlement\x20speed','value':'VCC\x202–6\x20weeks\x20→\x20per-segment\x20seconds'}],'target_margin_pct_min':0x23,'cost_floor':'Never\x20collect\x20funds\x20for\x20unbooked\x20legs\x20without\x20the\x20interrupted\x20refund\x20path;\x20compensation\x20coverage\x20sized\x20for\x20max\x20single-segment\x20value.','breakeven_note':'Gas\x20is\x20noise\x20against\x20$350–700\x20saved\x20per\x20trip;\x20the\x20binding\x20constraint\x20is\x20supplier\x20adoption,\x20not\x20economics.'},'success_patterns':[{'pattern':'Pilot\x202–3\x20custom-trip\x20studios\x20with\x20agent-only\x20custody\x20first.','evidence':'Avoids\x20the\x20sub-provider\x20on-chain\x20bottleneck\x20that\x20justifies\x20tier-3\x20timing.'},{'pattern':'Ship\x20the\x20interactive\x20$2,000\x20waterfall\x20visualization\x20as\x20the\x20sales\x20asset.','evidence':'Buys\x20on\x20chain-visible\x20split\x20—\x20unique\x20vs\x20every\x20OTA.'},{'pattern':'Use\x20a\x20weather\x20repository\x20guard\x20for\x20automatic\x20segment\x20refund\x20in\x20one\x20marketed\x20demo.','evidence':'Converts\x20an\x20abstract\x20\x27escrow\x27\x20claim\x20into\x20a\x20visible\x20guarantee.'}],'red_lines':['Do\x20not\x20enter\x20standard\x20flight/hotel\x20resale\x20—\x20WoW\x20value\x20is\x20weak\x20there.','Never\x20market\x20large\x20cross-period\x20custody\x20before\x20stablecoin\x20bridging\x20is\x20ready.','Cross-leg\x20responsibility\x20must\x20be\x20disclosed,\x20not\x20blurred.'],'sources':['wiki/market/K1/05-商业化/02-六行业商业模式深度论证与落地执行手册.md\x20§7','wiki/market/K1/01-行业分析/旅游-Booking.md']},{'industry':'retail','benchmark':'Amazon\x20/\x20Etsy','priority_tier':0x3,'launch_window':'M4+','pricing':{'default_model_id':'receipt_confirmed_escrow','models':[{'id':'receipt_confirmed_escrow','name':'Escrow\x20released\x20on\x20confirmed\x20receipt','applicable_when':'Private-traffic\x20sellers\x20(DTC\x20site\x20/\x20community\x20commerce)\x20who\x20already\x20own\x20demand.','upside':'Funds\x20release\x20seconds\x20after\x20receipt\x20guard;\x20return_auth_guard\x20gates\x20fraudulent\x20returns;\x20provenance\x20via\x20repository\x20chain.','risks':'Zero-traffic\x20sellers\x20are\x20a\x20deliberate\x20mismatch\x20—\x20WoW\x20does\x20not\x20replace\x20marketplace\x20demand\x20generation.','wowok_levers':['Allocator','Guard','Repository','Arbitration','CompensationFund'],'recommended':!![]},{'id':'member_bundle_pricing','name':'Member/bundle\x20pricing\x20for\x20private\x20communities','applicable_when':'Community-commerce\x20sellers\x20with\x20repeat\x20purchase\x20cadence.','upside':'Spend-threshold\x20and\x20member\x20pricing\x20via\x20rewards\x20instead\x20of\x20platform\x20TACoS.','risks':'Bundles\x20must\x20still\x20be\x20escrowed\x20per\x20deliverable;\x20no\x20pre-shipment\x20release.','wowok_levers':['Reward','Allocator']}]},'postures':{'volume':{'posture':'volume','thesis':'Turn\x20existing\x20private-traffic\x20flow\x20into\x20escrow\x20GMV;\x20first-order\x20and\x20spend-threshold\x20rewards\x20maximize\x20repeat.','tradeoffs':'Thin\x20unit\x20margin\x20—\x20viable\x20only\x20because\x20gas\x20is\x20<$1\x20per\x20$1,000\x20GMV.','guardrails':['Receipt\x20confirmation\x20guard\x20never\x20bypassed','Compensation\x20fund\x20coverage\x20ratio\x20default\x205×\x20max\x20single\x20order']},'balanced':{'posture':'balanced','thesis':'Pilot\x205–8\x20private-domain\x20sellers;\x20use\x20the\x20gas-bill\x20livestream\x20as\x20the\x20core\x20proof\x20asset.','tradeoffs':'Moderate\x20growth\x20gated\x20by\x20existing\x20audience\x20size.','guardrails':['Return-auth\x20evidence\x20(dual\x20signature\x20/\x20logistics\x20repository)\x20required','Configurable\x20arbitration\x20voting\x20period']},'margin':{'posture':'margin','thesis':'Premium\x20provenance/proven-authenticity\x20selling:\x20repository\x20chain\x20+\x20escrow\x20as\x20anti-counterfeit\x20proof.','tradeoffs':'Niche\x20audience;\x20authenticity\x20verification\x20operations\x20cost.','guardrails':['Never\x20claim\x20authenticity\x20beyond\x20what\x20repository\x20evidence\x20proves','No\x20reserve-period\x20exposure\x20of\x20funds\x20to\x20the\x20seller\x20pre-receipt']}},'competitor_watch':{'dimensions':['headline\x20price','settlement\x20reserve\x20policy','return-fraud\x20handling','arbitration\x20default\x20rulings','provenance\x20evidence'],'cadence':'weekly','cadence_days':0x7,'differentiation':['Settlement\x20in\x20seconds\x20vs\x2014\x20days\x20+\x20DD+90\x20reserve\x20risk','Return\x20fraud\x20requires\x20dual-signed/logistics\x20evidence\x20instead\x20of\x20A-to-z\x20default\x20buyer\x20wins','\x27You\x20pay\x2030%\x20for\x20traffic\x20or\x20trust\x20—\x20we\x20provide\x20trust,\x20you\x20bring\x20traffic\x27']},'acquisition':{'channels':[{'channel':'Existing\x20private-traffic\x20sellers\x20(DTC,\x20community,\x20We-commerce)','priority':0x1,'rationale':'\x27Have\x20traffic,\x20trust\x20is\x20expensive\x27\x20is\x20the\x20filter;\x20zero-traffic\x20sellers\x20are\x20turned\x20away\x20at\x20intake.'},{'channel':'Etsy-refugee\x20targeting','priority':0x2,'rationale':'24.2%\x20fee-increase\x20victim\x20communities.'},{'channel':'Live\x20gas-bill\x20comparison\x20events','priority':0x3,'rationale':'\x27$1,000\x20GMV\x20cost\x20teardown\x27:\x20same\x20shop,\x20WoW\x20vs\x20Amazon\x20$300–350.'}],'campaign_paradigm':'\x27$1,000\x20GMV\x20cost\x27\x20livestream\x20with\x20public\x20full-cycle\x20gas\x20accounting;\x20targeted\x20Etsy-refugee\x20recruitment;\x20$6–10K\x20pilot\x20for\x205–8\x20sellers,\x20M4–M6.','reward_orientation':'First-order\x20discount\x20+\x20spend\x20cashback\x20+\x20spend-threshold\x20rewards\x20inside\x20the\x20owned\x20community.','discount_orientation':'Threshold/limited/member\x20discounts\x20only;\x20no\x20marketplace-style\x20bidding\x20wars.'},'conversion_retention':['Make\x20receipt-confirmation\x20the\x20one-tap\x20trust\x20moment;\x20show\x20release\x20seconds\x20later.','Re-purchase\x20via\x20spend\x20cashback\x20and\x20provenance\x20certificates.','Convert\x20return-averse\x20buyers\x20with\x20the\x20return-auth\x20evidence\x20flow\x20up\x20front.'],'unit_economics':{'formula':'extra\x20per\x20$1,000\x20GMV\x20=\x20legacy\x20combined\x20burden\x20−\x20WoW\x20gas\x20(4–6\x20txns)','anchors':[{'metric':'AOV\x20anchor\x20(private\x20domain)','value':'$50'},{'metric':'Legacy\x20combined\x20burden','value':'Amazon\x2030–35%\x20≈\x20$300–350\x20per\x20$1,000\x20GMV'},{'metric':'WoW\x20cost\x20per\x20$1,000\x20GMV','value':'gas\x20≈\x20$0.01–0.5\x20(<\x20$1)'},{'metric':'Return\x20rate\x20/\x20fraud\x20share','value':'19.3%\x20returns\x20/\x209%\x20fraudulent\x20under\x20incumbent\x20flow'}],'target_margin_pct_min':0x14,'cost_floor':'Never\x20price\x20below\x20COGS\x20+\x20shipping\x20+\x20expected-return-provision;\x20fund\x20coverage\x205×\x20max\x20single\x20order.','breakeven_note':'Economics\x20work\x20at\x20almost\x20any\x20AOV;\x20traffic\x20availability\x20is\x20the\x20only\x20admission\x20criterion.'},'success_patterns':[{'pattern':'Use\x20the\x20honest-boundary\x20intake\x20questionnaire\x20to\x20reject\x20zero-traffic\x20sellers.','evidence':'Raises\x20conversion\x20quality;\x20WoW\x20does\x20not\x20sell\x20traffic\x20(40.5%\x20share\x20value\x20stays\x20with\x20Amazon).\x20'},{'pattern':'Run\x20the\x20public\x20\x27$1,000\x20GMV\x20gas\x20bill\x27\x20livestream\x20with\x20the\x20same\x20shop\x27s\x20orders.','evidence':'Contrasts\x20$300–350\x20incumbent\x20burden\x20vs\x20<$1\x20on-chain\x20cost.'},{'pattern':'Enforce\x20dual-signature/logistics\x20return\x20evidence\x20to\x20structurally\x20raise\x20fraud\x20cost.','evidence':'Targets\x20the\x209%\x20fraudulent\x20share\x20of\x20the\x2019.3%\x20return\x20rate.'},{'pattern':'Recruit\x20Etsy\x20fee-hike\x20refugees\x20directly\x20from\x20victim\x20communities.','evidence':'24.2%\x20unilateral\x20fee\x20increase\x20is\x20the\x20triggering\x20event.'}],'red_lines':['Never\x20promise\x20traffic\x20—\x20WoW\x20is\x20trust\x20infrastructure,\x20not\x20a\x20marketplace\x20demand\x20source.','No\x20auto-default\x20buyer-win\x20rulings;\x20arbitration\x20voting\x20period\x20must\x20be\x20configured.','Physical\x20authenticity\x20claims\x20require\x20repository\x20evidence.'],'sources':['wiki/market/K1/05-商业化/02-六行业商业模式深度论证与落地执行手册.md\x20§8','wiki/market/K1/01-行业分析/零售-Amazon.md']},{'industry':'subscription','benchmark':'Patreon\x20/\x20OnlyFans\x20/\x20Apple\x20IAP','priority_tier':0x2,'launch_window':'M2–M4','pricing':{'default_model_id':'per_period_signed_charge','models':[{'id':'per_period_signed_charge','name':'Per-period\x20signed\x20charge\x20with\x20delivery\x20gate','applicable_when':'Creator\x20memberships,\x20newsletters,\x20indie\x20software\x20—\x20recurring\x20digital\x20value.','upside':'charge_guard_signer\x20requires\x20explicit\x20signature\x20every\x20period;\x20deliver_guard_wip\x20blocks\x20the\x20charge\x20when\x20no\x20value\x20was\x20delivered;\x20cancel\x20is\x20one\x20signature;\x20100%\x20Allocation\x20to\x20creator.','risks':'The\x20per-period\x20signature\x20is\x20deliberate\x20friction\x20—\x20sell\x20it\x20as\x20the\x20feature;\x20do\x20not\x20sneak\x20in\x20any\x20auto-renewal\x20path.','wowok_levers':['Guard','Allocator','Machine','Reward'],'recommended':!![]},{'id':'annual_prepaid_period_release','name':'Annual\x20prepay\x20released\x20per\x20period','applicable_when':'Loyal\x20fans\x20wanting\x20a\x20yearly\x20plan;\x20creator\x20wants\x20upfront\x20cash.','upside':'Annual\x20funds\x20escrow\x20and\x20release\x20monthly\x20to\x20the\x20creator\x20—\x20prepaid\x20but\x20protected\x20if\x20the\x20creator\x20stops.','risks':'Stoppage\x20refunds\x20for\x20undelivered\x20months\x20must\x20be\x20structurally\x20guaranteed.','wowok_levers':['Allocator','Guard']},{'id':'tiered_membership','name':'Tiered\x20membership\x20with\x20escalating\x20deliverables','applicable_when':'Creators\x20with\x20multiple\x20value\x20tiers\x20(Patreon-style).','upside':'Each\x20tier\x20maps\x20to\x20its\x20own\x20delivery\x20guard;\x20upgrades/downgrades\x20take\x20effect\x20next\x20period\x20only.','risks':'Tier\x20deliverables\x20must\x20be\x20concrete\x20enough\x20for\x20the\x20delivery\x20guard\x20to\x20evaluate.','wowok_levers':['Machine','Guard','WIP']}]},'postures':{'volume':{'posture':'volume','thesis':'Subscriber\x20count\x20first\x20via\x20the\x20\x27signing\x20movement\x27\x20consumer\x20tool\x20and\x20first-month\x20pricing;\x20keep\x20100%\x20pass-through\x20as\x20the\x20wedge.','tradeoffs':'Conversion\x20funnel\x20includes\x20the\x20signature\x20friction\x20—\x20lean\x20into\x20it\x20as\x20qualification.','guardrails':['Never\x20reintroduce\x20auto-renewal\x20to\x20optimize\x20conversion','Delivery\x20gate\x20on\x20every\x20charge']},'balanced':{'posture':'balanced','thesis':'Balance\x20acquisition\x20(subscription\x20checkup\x20tool)\x20with\x20retention\x20(100%\x20arrival\x20day\x20rituals).','tradeoffs':'Moderate\x20growth;\x20investment\x20in\x20per-period\x20value\x20proof.','guardrails':['Fee\x20schedule\x20frozen\x20at\x20publish','Cancellation\x20one\x20signature,\x20no\x20retention\x20dark\x20patterns']},'margin':{'posture':'margin','thesis':'Fewer,\x20higher-paying\x20true\x20fans;\x20per-period\x20signing\x20filters\x20for\x20committed\x20members\x20and\x20supports\x20premium\x20tiers.','tradeoffs':'Smaller\x20list,\x20higher\x20ARPU.','guardrails':['No\x20IAP-style\x2030%\x20channel\x20accepted\x20—\x20direct\x20settlement\x20is\x20the\x20product','Stoppage\x20protection\x20advertised\x20and\x20enforced']}},'competitor_watch':{'dimensions':['take\x20rate\x20and\x20unilateral\x20change\x20history','charge\x20transparency','cancellation\x20click\x20count','stopped-creator\x20policy','time-to-payout'],'cadence':'weekly','cadence_days':0x7,'differentiation':['13\x20years\x20/\x20three\x20unilateral\x20Patreon\x20price\x20rises\x20are\x20structurally\x20impossible\x20(published\x20allocation\x20is\x20frozen)','Charge\x20without\x20delivery\x20cannot\x20pass\x20—\x20an\x20industry\x20blank','15-option\x20cancel\x20maze\x20→\x20one\x20signature\x20(FTC\x20$2.5B\x20settlement\x20context)']},'acquisition':{'channels':[{'channel':'Creator\x20communities\x20(Discord,\x20Patreon\x20forums)','priority':0x1,'rationale':'Survival-line\x20creators\x20($131–180\x20median\x20monthly)\x20feel\x20the\x2010–20%\x20fee\x20directly\x20($2–5\x20per\x20subscriber).'},{'channel':'Newsletter\x20/\x20indie-dev\x20circles','priority':0x2,'rationale':'Apple\x20IAP\x2030%\x20+\x2075-day\x20payout\x20float\x20pain.'},{'channel':'Hacker\x20News\x20/\x20anti-dark-pattern\x20audience','priority':0x3,'rationale':'Values\x20alignment\x20beats\x20ad\x20spend.'}],'campaign_paradigm':'\x27Signing\x20Movement\x27\x20(M2–M4):\x20consumer-side\x20subscription\x20checkup\x20widget\x20(2.5×\x20spend\x20underestimate\x20/\x2042%\x20unused\x20data)\x20+\x20creator\x20\x27100%\x20arrival\x20day\x27\x20monthly\x20chain-receipt\x20posts;\x20$4–7K,\x20keyed\x20to\x20FTC/price-hike\x20news\x20cycles.','reward_orientation':'Loyalty\x20+\x20referral\x20rewards\x20only;\x20first-month\x20price\x20as\x20the\x20single\x20acquisition\x20discount.','discount_orientation':'Annual\x20/\x20team\x20/\x20upgrade\x20discounts\x20—\x20never\x20discount\x20by\x20hiding\x20renewal\x20terms.'},'conversion_retention':['Onboard\x20creators\x20by\x20migrating\x20one\x20tier\x20first\x20and\x20showing\x20the\x20per-period\x20release\x20receipts.','Retain\x20with\x20the\x20\x27unused\x20month\x27\x20guarantee:\x20no\x20delivery\x20→\x20no\x20charge.','Convert\x20fans\x20with\x20the\x20cancellation\x20demo\x20(15\x20options\x20→\x201\x20signature).'],'unit_economics':{'formula':'extra\x20per\x20year\x20=\x20legacy\x20take\x20rate\x20×\x20annual\x20subscription\x20revenue\x20−\x20WoW\x20gas\x20(2\x20txns/period)','anchors':[{'metric':'Monthly\x20anchor','value':'$100/month\x20($1,200/year)'},{'metric':'Legacy\x20take','value':'Patreon\x2010%\x20≈\x20$10/month;\x20iOS\x20IAP\x2030%'},{'metric':'WoW\x20annual\x20cost\x20(12\x20periods)','value':'gas\x20≈\x20$0.03–2/year'},{'metric':'Payout\x20speed','value':'IAP\x20up\x20to\x2075-day\x20float\x20→\x20seconds\x20each\x20period'}],'target_margin_pct_min':0x3c,'cost_floor':'Creator\x20must\x20keep\x20delivering\x20per-period\x20value;\x20no\x20charge\x20passes\x20without\x20delivery\x20evidence.','breakeven_note':'≈$120/year\x20extra\x20on\x20a\x20single\x20$100/month\x20membership.'},'success_patterns':[{'pattern':'Ship\x20the\x20subscription-checkup\x20widget\x20before\x20creator\x20outreach.','evidence':'KPI:\x20≥20,000\x20checkups;\x20consumer\x20demand\x20pulls\x20creators.'},{'pattern':'Run\x20monthly\x20\x27100%\x20arrival\x20day\x27\x20with\x20public\x20chain\x20receipts.','evidence':'30\x20creators\x20onboard\x20target;\x20turns\x20payout\x20into\x20recurring\x20proof.'},{'pattern':'Publish\x20the\x20one-signature\x20cancellation\x20video.','evidence':'KPI:\x20≥100K\x20views\x20—\x20contrast\x20with\x20the\x204-page/6-click/15-option\x20incumbent\x20flow.'},{'pattern':'Capture\x20education\x20recorded-course\x20overflow\x20traffic.','evidence':'Routing\x20rule:\x20recorded\x20courses\x20→\x20subscription,\x20keeping\x20both\x20fits\x20clean.'}],'red_lines':['Never\x20implement\x20or\x20imply\x20auto-renewal\x20—\x20every\x20period\x20is\x20signed.','Never\x20charge\x20a\x20period\x20without\x20delivery\x20evidence.','No\x20rate\x20lock\x20claims\x20except\x20through\x20published\x20frozen\x20Allocation.'],'sources':['wiki/market/K1/05-商业化/02-六行业商业模式深度论证与落地执行手册.md\x20§6','wiki/market/K1/01-行业分析/订阅-Patreon.md']}];const STRATEGY_BY_INDUSTRY=new Map(INDUSTRY_STRATEGIES['map'](a=>[a['industry'],a]));export function registerIndustryStrategy(a){STRATEGY_BY_INDUSTRY['set'](a['industry'],a);}export function unregisterIndustryStrategy(a){const b=INDUSTRY_STRATEGIES['find'](c=>c['industry']===a);if(b)return STRATEGY_BY_INDUSTRY['set'](a,b),!![];return STRATEGY_BY_INDUSTRY['delete'](a);}export function getIndustryStrategy(a){return STRATEGY_BY_INDUSTRY['get'](a['toLowerCase']());}export function listIndustryStrategies(){return SUPPORTED_INDUSTRIES['map'](a=>STRATEGY_BY_INDUSTRY['get'](a))['filter'](a=>a!==undefined);}export function stageFromOrderCount(a){if(a>=0x32)return'optimization';if(a>=0x14)return'mature';if(a>=0x5)return'growing';return'cold_start';}export function recommendStrategy(a,b='balanced',c,d){const e=getIndustryStrategy(a);if(!e||e['pricing']['models']['length']===0x0)return null;const f=c??(d?.['order_count']!==undefined?stageFromOrderCount(d['order_count']):'cold_start');let g=e['pricing']['models']['find'](j=>j['id']===e['pricing']['default_model_id'])??e['pricing']['models'][0x0];if(b==='volume'){const j=e['pricing']['models']['find'](k=>/(?:^|_)(discount|trial|first|bundle|member)(?:_|$)/i['test'](k['id']))??g;g=j;}else{if(b==='margin'&&e['pricing']['models']['length']>0x1){const k=e['pricing']['models']['find'](l=>/premium|graded|tiered|guarantee|prepaid/i['test'](l['id']));if(k)g=k;}}const h=[],i=(l,m)=>{if(l&&h['length']<0x3)h['push'](m);};return i(f==='cold_start','Cold\x20start:\x20publish\x20the\x20service\x20with\x20the\x20\x22'+g['name']+'\x22\x20model\x20and\x20bound\x20Arbitration\x20+\x20compensation\x20fund\x20first;\x20seed\x20the\x20anchor\x20trust\x20case\x20before\x20discounting.'),d?.['dispute_rate']!==undefined&&i(d['dispute_rate']>0.05,'Dispute\x20rate\x20'+(d['dispute_rate']*0x64)['toFixed'](0x1)+'%\x20exceeds\x205%:\x20tighten\x20pre-delivery\x20evidence\x20guards\x20and\x20pause\x20promotions\x20until\x20closure\x20is\x20back\x20on-chain.'),d?.['repeat_customer_rate']!==undefined&&i(d['repeat_customer_rate']<0.25&&f!=='cold_start','Repeat\x20rate\x20'+(d['repeat_customer_rate']*0x64)['toFixed'](0x0)+'%\x20is\x20below\x20the\x2025%\x20K1\x20gate:\x20add\x20a\x20repeat/referral\x20reward\x20and\x20review\x20post-delivery\x20follow-up\x20rather\x20than\x20cutting\x20price.'),d?.['order_count']!==undefined&&i(b==='volume'&&d['order_count']>=0x5&&d['order_count']<0x32,'Growing\x20stage\x20under\x20volume\x20posture:\x20run\x20the\x20cataloged\x20acquisition\x20campaign\x20('+(e['acquisition']['channels'][0x0]?.['channel']??'top\x20channel')+')\x20with\x20reward—not\x20blanket\x20discount—orientation.'),i(h['length']===0x0,b+'\x20posture:\x20hold\x20the\x20\x22'+g['name']+'\x22\x20model,\x20run\x20the\x20'+e['competitor_watch']['cadence']+'\x20competitor\x20watch\x20('+e['competitor_watch']['dimensions']['slice'](0x0,0x3)['join'](',\x20')+'),\x20and\x20keep\x20all\x20guardrails:\x20'+e['postures'][b]['guardrails'][0x0]),{'industry':e['industry'],'posture':b,'stage':f,'pricing_model_id':g['id'],'pricing_model_name':g['name'],'actions':h['slice'](0x0,0x3)};}export function validateStrategyLevers(a){const b=[];for(const c of a['pricing']['models']){for(const d of c['wowok_levers']){!LEVER_WHITELIST['has'](d)&&b['push'](a['industry']+'.'+c['id']+':\x20unknown\x20WoW\x20lever\x20\x27'+d+'\x27');}}return b;}
@@ -1 +1 @@
1
- import{query_events,query_objects}from'@wowok/wowok';const BATCH=0x32;function toStr(a){if(typeof a==='string')return a;if(typeof a==='number'||typeof a==='bigint')return String(a);return undefined;}async function collectObjectIdsByEvent(a,b,c,d,e){const f=new Set();let g=null,h=![];while(f['size']<d){const i=await query_events({'type':a,'cursor':g,'limit':0x32,'order':'descending','no_cache':e,'network':c}),j=i?.['data']??[];if(j['length']===0x0)break;for(const k of j){const l=b(k);if(l)f['add'](l);}h=!!(i?.['hasNextPage']&&i?.['nextCursor']);if(!h)break;g=i?.['nextCursor']??null;}return{'ids':Array['from'](f)['slice'](0x0,d),'hasMore':h};}async function batchQueryObjects(a,b,c){const d=[];for(let e=0x0;e<a['length'];e+=BATCH){const f=a['slice'](e,e+BATCH),g=await query_objects({'objects':f,'no_cache':c,'network':b});d['push'](...g?.['objects']??[]);}return d;}export async function enumerateServices(a,b={}){const c=b['max_objects']??0xc8,{ids:d,hasMore:e}=await collectObjectIdsByEvent('ServiceEvent',i=>typeof i?.['object']==='string'?i['object']:undefined,a,c,b['no_cache']),f=await batchQueryObjects(d,a,b['no_cache']),g=(b['location_any']??[])['map'](i=>i['toLowerCase']()),h=f['filter'](i=>(i?.['type']??'')==='Service')['filter'](i=>{if(g['length']===0x0)return!![];const j=typeof i?.['location']==='string'?i['location']['toLowerCase']():'';return g['some'](k=>j['includes'](k));})['map'](i=>({'object':String(i['object']),'name':typeof i['name']==='string'?i['name']:undefined,'location':typeof i['location']==='string'?i['location']:'','json':{...i,'compensation_fund':toStr(i['compensation_fund']),'sales':Array['isArray'](i['sales'])?i['sales']['map'](j=>({...j,'price':toStr(j['price'])})):[]}}));return{'services':h,'total_enumerated':h['length'],'has_more':e};}export async function enumerateDemands(a,b={}){const c=b['max_objects']??0xc8,{ids:d,hasMore:e}=await collectObjectIdsByEvent('DemandChangedEvent',h=>typeof h?.['object']==='string'?h['object']:undefined,a,c,b['no_cache']),f=await batchQueryObjects(d,a,b['no_cache']),g=f['filter'](h=>(h?.['type']??'')==='Demand')['map'](h=>h);return{'demands':g,'total_enumerated':g['length'],'has_more':e};}export async function enumerateArbs(a,b={}){const c=b['max_objects']??0xc8,{ids:d,hasMore:e}=await collectObjectIdsByEvent('ArbEvent',i=>typeof i?.['arb']==='string'?i['arb']:undefined,a,c,b['no_cache']),f=await batchQueryObjects(d,a,b['no_cache']),g=b['status']===undefined?undefined:Array['isArray'](b['status'])?b['status']:[b['status']],h=f['filter'](i=>(i?.['type']??'')==='Arb')['map'](i=>i)['filter'](i=>b['arbitration']?i['arbitration']===b['arbitration']:!![])['filter'](i=>b['order']?i['order']===b['order']:!![])['filter'](i=>g?g['includes'](Number(i['status'])):!![]);return{'arbs':h,'total_enumerated':h['length'],'has_more':e};}
1
+ import{query_events}from'@wowok/wowok';import{batchQueryObjectsByIds as a144a}from'../graph/onchain/sdk-batch.js';function toStr(a){if(typeof a==='string')return a;if(typeof a==='number'||typeof a==='bigint')return String(a);return undefined;}async function collectObjectIdsByEvent(a,b,c,d,e){const f=new Set();let g=null,h=![];while(f['size']<d){const i=await query_events({'type':a,'cursor':g,'limit':0x32,'order':'descending','no_cache':e,'network':c}),j=i?.['data']??[];if(j['length']===0x0)break;for(const k of j){const l=b(k);if(l)f['add'](l);}h=!!(i?.['hasNextPage']&&i?.['nextCursor']);if(!h)break;g=i?.['nextCursor']??null;}return{'ids':Array['from'](f)['slice'](0x0,d),'hasMore':h};}export async function enumerateServices(a,b={}){const c=b['max_objects']??0xc8,{ids:d,hasMore:e}=await collectObjectIdsByEvent('ServiceEvent',i=>typeof i?.['object']==='string'?i['object']:undefined,a,c,b['no_cache']),f=await a144a(d,a,b['no_cache']),g=(b['location_any']??[])['map'](i=>i['toLowerCase']()),h=f['filter'](i=>(i?.['type']??'')==='Service')['filter'](i=>{if(g['length']===0x0)return!![];const j=typeof i?.['location']==='string'?i['location']['toLowerCase']():'';return g['some'](k=>j['includes'](k));})['map'](i=>({'object':String(i['object']),'name':typeof i['name']==='string'?i['name']:undefined,'location':typeof i['location']==='string'?i['location']:'','json':{...i,'compensation_fund':toStr(i['compensation_fund']),'sales':Array['isArray'](i['sales'])?i['sales']['map'](j=>({...j,'price':toStr(j['price'])})):[]}}));return{'services':h,'total_enumerated':h['length'],'has_more':e};}export async function enumerateDemands(a,b={}){const c=b['max_objects']??0xc8,{ids:d,hasMore:e}=await collectObjectIdsByEvent('DemandChangedEvent',h=>typeof h?.['object']==='string'?h['object']:undefined,a,c,b['no_cache']),f=await a144a(d,a,b['no_cache']),g=f['filter'](h=>(h?.['type']??'')==='Demand')['map'](h=>h);return{'demands':g,'total_enumerated':g['length'],'has_more':e};}export async function enumerateArbs(a,b={}){const c=b['max_objects']??0xc8,{ids:d,hasMore:e}=await collectObjectIdsByEvent('ArbEvent',i=>typeof i?.['arb']==='string'?i['arb']:undefined,a,c,b['no_cache']),f=await a144a(d,a,b['no_cache']),g=b['status']===undefined?undefined:Array['isArray'](b['status'])?b['status']:[b['status']],h=f['filter'](i=>(i?.['type']??'')==='Arb')['map'](i=>i)['filter'](i=>b['arbitration']?i['arbitration']===b['arbitration']:!![])['filter'](i=>b['order']?i['order']===b['order']:!![])['filter'](i=>g?g['includes'](Number(i['status'])):!![]);return{'arbs':h,'total_enumerated':h['length'],'has_more':e};}
@@ -1,4 +1,4 @@
1
- import type { ENTRYPOINT } from "@wowok/wowok";
1
+ import { type ENTRYPOINT } from "@wowok/wowok";
2
2
  export interface MarketMetrics {
3
3
  total_services: number;
4
4
  active_services: number;
@@ -13,11 +13,22 @@ export declare function computeMarketMetrics(network: ENTRYPOINT, no_cache?: boo
13
13
  export interface OrderFlowMetrics {
14
14
  order_count: number;
15
15
  gmv: string;
16
+ gmv_by_coin: Array<{
17
+ coin: string;
18
+ amount: string;
19
+ orders: number;
20
+ }>;
21
+ unclassified_orders: number;
16
22
  top_services: Array<{
17
23
  service: string;
18
24
  orders: number;
19
25
  }>;
20
- window: "recent";
26
+ window: "full_history" | "partial";
27
+ truncated: boolean;
21
28
  computed_at: number;
22
29
  }
23
- export declare function computeOrderFlow(network: ENTRYPOINT, limit?: number, no_cache?: boolean): Promise<OrderFlowMetrics>;
30
+ export interface OrderFlowOptions {
31
+ noCache?: boolean;
32
+ maxPages?: number;
33
+ }
34
+ export declare function computeOrderFlow(network: ENTRYPOINT, opts?: OrderFlowOptions): Promise<OrderFlowMetrics>;
@@ -1 +1 @@
1
- import{query_events,ArbStatus}from'@wowok/wowok';import{enumerateServices,enumerateDemands,enumerateArbs}from'./jsonrpc-enum.js';export async function computeMarketMetrics(a,b){const [c,d,e]=await Promise['all']([enumerateServices(a,{'no_cache':b}),enumerateDemands(a,{'no_cache':b}),enumerateArbs(a,{'no_cache':b})]),f=c['services']['filter'](k=>{const l=k['json']??{};return l['bPublished']===!![]&&l['bPaused']!==!![];}),g=d['demands']['filter'](j=>(j['presenters_count']??0x0)===0x0),h=e['arbs']['filter'](j=>{const k=Number(j['status']);return k!==ArbStatus['Finished']&&k!==ArbStatus['Withdrawn'];}),i=f['length'];return{'total_services':c['services']['length'],'active_services':i,'total_demands':d['demands']['length'],'open_demands':g['length'],'total_arbs':e['arbs']['length'],'open_arbs':h['length'],'supply_demand_ratio':i>0x0?g['length']/ i:null,'computed_at':Date['now']()};}export async function computeOrderFlow(a,b=0x64,c){const d=await query_events({'type':'NewOrderEvent','order':'descending','limit':b,'no_cache':c,'network':a}),e=(d?.['data']??[])['filter'](i=>i['type']==='NewOrderEvent');let f=0x0n;const g=new Map();for(const i of e){try{f+=BigInt(i['amount']);}catch{}i['service']&&g['set'](i['service'],(g['get'](i['service'])??0x0)+0x1);}const h=Array['from'](g['entries']())['map'](([j,k])=>({'service':j,'orders':k}))['sort']((j,k)=>k['orders']-j['orders'])['slice'](0x0,0xa);return{'order_count':e['length'],'gmv':f['toString'](),'top_services':h,'window':'recent','computed_at':Date['now']()};}
1
+ import{ArbStatus}from'@wowok/wowok';import{enumerateServices,enumerateDemands,enumerateArbs}from'./jsonrpc-enum.js';import{SdkDataPlane,extractCoinType}from'../graph/onchain/index.js';export async function computeMarketMetrics(a,b){const [c,d,e]=await Promise['all']([enumerateServices(a,{'no_cache':b}),enumerateDemands(a,{'no_cache':b}),enumerateArbs(a,{'no_cache':b})]),f=c['services']['filter'](k=>{const l=k['json']??{};return l['bPublished']===!![]&&l['bPaused']!==!![];}),g=d['demands']['filter'](j=>(j['presenters_count']??0x0)===0x0),h=e['arbs']['filter'](j=>{const k=Number(j['status']);return k!==ArbStatus['Finished']&&k!==ArbStatus['Withdrawn'];}),i=f['length'];return{'total_services':c['services']['length'],'active_services':i,'total_demands':d['demands']['length'],'open_demands':g['length'],'total_arbs':e['arbs']['length'],'open_arbs':h['length'],'supply_demand_ratio':i>0x0?g['length']/ i:null,'computed_at':Date['now']()};}const ORDER_FLOW_DEFAULT_PAGES=0x64,ORDER_FLOW_PAGE_SIZE=0x32;export async function computeOrderFlow(a,b){const c=new SdkDataPlane(a,{'noCache':b?.['noCache']}),d=await c['getEvents']('NewOrderEvent',{'maxPages':b?.['maxPages']??ORDER_FLOW_DEFAULT_PAGES,'limit':ORDER_FLOW_PAGE_SIZE}),e=d['events']['filter'](p=>p['type']==='NewOrderEvent'),f=[...new Set(e['map'](p=>p['service'])['filter'](p=>typeof p==='string'))],g=f['length']?await c['getObjects'](f):new Map(),h=new Map();for(const p of f){const q=g['get'](p['toLowerCase']()),r=q?extractCoinType(q['type_raw']):undefined;if(r)h['set'](p['toLowerCase'](),r);}let i=0x0n;const j=new Map(),k=new Map();let l=0x0;for(const s of e){let t=0x0n;try{t=BigInt(s['amount']),i+=t;}catch{}const u=(s['service']&&h['get'](s['service']['toLowerCase']()))??'unknown';if(u==='unknown')l++;const v=j['get'](u)??{'amount':0x0n,'orders':0x0};v['amount']+=t,v['orders']+=0x1,j['set'](u,v),s['service']&&k['set'](s['service'],(k['get'](s['service'])??0x0)+0x1);}const m=[...j['entries']()]['map'](([w,x])=>({'coin':w,'amount':x['amount']['toString'](),'orders':x['orders']}))['sort']((w,x)=>{if(w['coin']==='unknown')return 0x1;if(x['coin']==='unknown')return-0x1;const y=BigInt(w['amount']),z=BigInt(x['amount']);return y===z?0x0:y<z?0x1:-0x1;}),n=Array['from'](k['entries']())['map'](([w,x])=>({'service':w,'orders':x}))['sort']((w,x)=>x['orders']-w['orders'])['slice'](0x0,0xa);return{'order_count':e['length'],'gmv':i['toString'](),'gmv_by_coin':m,'unclassified_orders':l,'top_services':n,'window':d['truncated']?'partial':'full_history','truncated':d['truncated'],'computed_at':Date['now']()};}
@@ -1 +1 @@
1
- import{objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{fetchEntityPermission,fetchObjectLinkerCore}from'./workflow-guidance.js';export const MIGRATION_CHECKLIST=['Payment\x20token:\x20testnet\x20always\x20settles\x20in\x20WOW;\x20on\x20mainnet\x20decide\x20whether\x20to\x20switch\x20to\x20USDT\x20/\x20USDC\x20/\x20ETH\x20/\x20BTC\x20/\x20WOW\x20(query\x20wowok_buildin_info\x20action=\x27mainnet\x20bridge\x20tokens\x27\x20for\x20each\x20token\x27s\x20exact\x20type\x20tag).','Location:\x20in-person\x20/\x20digital\x20services\x20MUST\x20set\x20a\x20correct\x20Service.location\x20(the\x20service\x20area\x20gates\x20purchase);\x20mailing\x20services\x20set\x20a\x20delivery\x20region\x20instead.','Arbitration:\x20strongly\x20recommended\x20on\x20mainnet\x20(bind\x20a\x20third-party\x20Arbitration\x20so\x20neither\x20you\x20nor\x20the\x20customer\x20controls\x20the\x20verdict);\x20optional\x20on\x20testnet.','WIP:\x20if\x20a\x20product\x20carries\x20a\x20WIP\x20file,\x20it\x20MUST\x20be\x20deployed\x20to\x20a\x20public\x20URL\x20—\x20on-chain\x20stores\x20only\x20the\x20URL\x20+\x20hash,\x20not\x20the\x20file.','Gas:\x20mainnet\x20deployment\x20needs\x20gas\x20(top\x20up\x20via\x20the\x20ETH\x20mainnet\x20bridge\x20or\x20airdrop);\x20testnet\x20is\x20free\x20via\x20the\x20faucet.'];async function snapshot(a,b,c){const d={'network':b,'has_build':![],'permissions':[],'services':[],'machines':[],'treasuries':[],'rewards':[],'contacts':[],'arbitrations':[]},e=await fetchEntityPermission(a,b,c),f=[...new Set((e?.['items']??[])['map'](g=>g['permission']))];d['permissions']=f;for(const g of f){const h=await fetchObjectLinkerCore(g,b,c);for(const i of h?.['items']??[]){const j=String(i?.['who']??'')['toLowerCase']();if(!j)continue;const k=objectTypeFromAddress(j);if(k===ObjectType['Service'])d['services']['push'](j);else{if(k===ObjectType['Machine'])d['machines']['push'](j);else{if(k===ObjectType['Treasury'])d['treasuries']['push'](j);else{if(k===ObjectType['Reward'])d['rewards']['push'](j);else{if(k===ObjectType['Contact'])d['contacts']['push'](j);else{if(k===ObjectType['Arbitration'])d['arbitrations']['push'](j);}}}}}}}return d['has_build']=f['length']>0x0||d['services']['length']>0x0||d['machines']['length']>0x0,d;}export async function migrationPreflight(a){const b=String(a['account']??'')['toLowerCase']();if(!b)throw new Error('migration_preflight\x20requires\x20\x27account\x27\x20(an\x20account\x20address\x20or\x20name).\x20'+'Pass\x20the\x20account\x20to\x20check\x20its\x20testnet\x20vs\x20mainnet\x20build\x20status.');const c=a['source_network']??'testnet',d=a['target_network']??'mainnet',[e,f]=await Promise['all']([snapshot(b,c,a['no_cache']),snapshot(b,d,a['no_cache'])]);return{'action':'migration_preflight','account':b,'source_network':c,'target_network':d,'source':e,'target':f,'migration_checklist':MIGRATION_CHECKLIST};}
1
+ import{objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{batchFetchObjectLinkerCore,fetchEntityPermission}from'../graph/onchain/sdk-batch.js';export const MIGRATION_CHECKLIST=['Payment\x20token:\x20testnet\x20always\x20settles\x20in\x20WOW;\x20on\x20mainnet\x20decide\x20whether\x20to\x20switch\x20to\x20USDT\x20/\x20USDC\x20/\x20ETH\x20/\x20BTC\x20/\x20WOW\x20(query\x20wowok_buildin_info\x20info=\x27mainnet\x20bridge\x20tokens\x27\x20for\x20each\x20token\x27s\x20exact\x20type\x20tag).','Location:\x20in-person\x20/\x20digital\x20services\x20MUST\x20set\x20a\x20correct\x20Service.location\x20(the\x20service\x20area\x20gates\x20purchase);\x20mailing\x20services\x20set\x20a\x20delivery\x20region\x20instead.','Arbitration:\x20strongly\x20recommended\x20on\x20mainnet\x20(bind\x20a\x20third-party\x20Arbitration\x20so\x20neither\x20you\x20nor\x20the\x20customer\x20controls\x20the\x20verdict);\x20optional\x20on\x20testnet.','WIP:\x20if\x20a\x20product\x20carries\x20a\x20WIP\x20file,\x20it\x20MUST\x20be\x20deployed\x20to\x20a\x20public\x20URL\x20—\x20on-chain\x20stores\x20only\x20the\x20URL\x20+\x20hash,\x20not\x20the\x20file.','Gas:\x20mainnet\x20deployment\x20needs\x20gas\x20(top\x20up\x20via\x20the\x20ETH\x20mainnet\x20bridge\x20or\x20airdrop);\x20testnet\x20is\x20free\x20via\x20the\x20faucet.'];async function snapshot(a,b,c){const d={'network':b,'has_build':![],'permissions':[],'services':[],'machines':[],'treasuries':[],'rewards':[],'contacts':[],'arbitrations':[]},e=await fetchEntityPermission(a,b,c),f=[...new Set((e?.['items']??[])['map'](h=>h['permission']))];d['permissions']=f;const g=await batchFetchObjectLinkerCore(f,b,c)['catch'](()=>undefined);for(const h of f){for(const i of g?.['get'](h)?.['items']??[]){const j=String(i?.['who']??'')['toLowerCase']();if(!j)continue;const k=objectTypeFromAddress(j);if(k===ObjectType['Service'])d['services']['push'](j);else{if(k===ObjectType['Machine'])d['machines']['push'](j);else{if(k===ObjectType['Treasury'])d['treasuries']['push'](j);else{if(k===ObjectType['Reward'])d['rewards']['push'](j);else{if(k===ObjectType['Contact'])d['contacts']['push'](j);else{if(k===ObjectType['Arbitration'])d['arbitrations']['push'](j);}}}}}}}return d['has_build']=f['length']>0x0||d['services']['length']>0x0||d['machines']['length']>0x0,d;}export async function migrationPreflight(a){const b=String(a['account']??'')['toLowerCase']();if(!b)throw new Error('migration_preflight\x20requires\x20\x27account\x27\x20(an\x20account\x20address\x20or\x20name).\x20'+'Pass\x20the\x20account\x20to\x20check\x20its\x20testnet\x20vs\x20mainnet\x20build\x20status.');const c=a['source_network']??'testnet',d=a['target_network']??'mainnet',[e,f]=await Promise['all']([snapshot(b,c,a['no_cache']),snapshot(b,d,a['no_cache'])]);return{'action':'migration_preflight','account':b,'source_network':c,'target_network':d,'source':e,'target':f,'migration_checklist':MIGRATION_CHECKLIST};}
@@ -1,4 +1,4 @@
1
- import type { PermissionContext } from "./workflow-guidance.js";
1
+ import type { PermissionContext } from "../graph/onchain/sdk-batch.js";
2
2
  export type OperationCategory = "permission_index" | "guard" | "special";
3
3
  export type ComplexityLevel = "L0" | "L1" | "L2" | "L3";
4
4
  export interface OperationComplexity {
@@ -0,0 +1,63 @@
1
+ import { NewPaymentEvent, type ENTRYPOINT } from "@wowok/wowok";
2
+ export type PaymentRelationKind = "incoming" | "creator" | "for_object" | "for_guard" | "from_pool";
3
+ export declare function paymentRelations(ev: NewPaymentEvent, account: string): PaymentRelationKind[];
4
+ export declare function scanRecentPaymentEvents(opts: {
5
+ network?: ENTRYPOINT;
6
+ no_cache?: boolean;
7
+ max_events?: number;
8
+ since_ms?: number;
9
+ }): Promise<NewPaymentEvent[]>;
10
+ export declare function resolveBeneficialOwners(addresses: readonly string[], opts: {
11
+ network?: ENTRYPOINT;
12
+ no_cache?: boolean;
13
+ }): Promise<Map<string, string>>;
14
+ export interface ExtractionPlan {
15
+ holder: string;
16
+ holder_kind: "user" | "business_object";
17
+ operation: string;
18
+ anyone_can_submit: boolean;
19
+ permission_index?: number;
20
+ settles_to: string;
21
+ steps: string[];
22
+ }
23
+ export declare function extractionPlanForHolder(holder: string, concreteOwner?: string): ExtractionPlan;
24
+ export interface PendingWrapper {
25
+ wrapper_id: string;
26
+ payment: string;
27
+ amount: string;
28
+ version?: string;
29
+ digest?: string;
30
+ holder: string;
31
+ plan: ExtractionPlan;
32
+ }
33
+ export declare function pendingWrappersAt(holder: string, opts: {
34
+ network?: ENTRYPOINT;
35
+ no_cache?: boolean;
36
+ concreteOwner?: string;
37
+ }): Promise<PendingWrapper[]>;
38
+ export interface TrackedPaymentLeg {
39
+ recipient: string;
40
+ amount: string;
41
+ recipient_kind: "user" | "business_object";
42
+ beneficial_owner?: string;
43
+ }
44
+ export interface TrackedPayment {
45
+ payment: string;
46
+ tx_digest: string;
47
+ time: number;
48
+ amount: string;
49
+ creator: string;
50
+ from_object?: string | null;
51
+ info: NewPaymentEvent["info"];
52
+ legs: TrackedPaymentLeg[];
53
+ relations: PaymentRelationKind[];
54
+ beneficial: boolean;
55
+ pending: PendingWrapper[];
56
+ }
57
+ export declare function trackAccountPayments(opts: {
58
+ account: string;
59
+ network?: ENTRYPOINT;
60
+ no_cache?: boolean;
61
+ max_events?: number;
62
+ include_related?: boolean;
63
+ }): Promise<TrackedPayment[]>;
@@ -0,0 +1 @@
1
+ import{query_events,query_received,query_objects,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{driveabilityOf}from'./recipient-constraint.js';const OBJECT_BATCH=0x32,EVENT_PAGE=0x32;export function paymentRelations(b,c){const d=c['toLowerCase'](),e=[];if((b['record']??[])['some'](f=>String(f['recipient'])['toLowerCase']()===d))e['push']('incoming');if(String(b['sender']??'')['toLowerCase']()===d)e['push']('creator');if(String(b['info']?.['for_object']??'')['toLowerCase']()===d)e['push']('for_object');if(String(b['info']?.['for_guard']??'')['toLowerCase']()===d)e['push']('for_guard');if(String(b['from_object']??'')['toLowerCase']()===d)e['push']('from_pool');return e;}export async function scanRecentPaymentEvents(a){const b=a['max_events']??0x64,c=[];let d,e=![];while(c['length']<b&&!e){const f=await query_events({'type':'NewPaymentEvent','order':'descending','limit':Math['min'](EVENT_PAGE,b-c['length']),'cursor':d,'network':a['network'],'no_cache':a['no_cache']}),g=f?.['data']??[];if(g['length']===0x0)break;for(const h of g){c['push'](h);if(a['since_ms']!=null&&Number(h['time']??0x0)<a['since_ms']){e=!![];break;}if(c['length']>=b)break;}if(!f?.['hasNextPage']||!f['nextCursor'])break;d=f['nextCursor'];}return c;}function isUserAddress(b){return b['startsWith']('0x00');}async function fetchObjectsInChunks(a,b){const c=[];for(let d=0x0;d<a['length'];d+=OBJECT_BATCH){const e=await query_objects({'objects':a['slice'](d,d+OBJECT_BATCH),'network':b['network'],'no_cache':b['no_cache']});c['push'](...e['objects']??[]);}return c;}export async function resolveBeneficialOwners(b,c){const d=new Map(),e=[],f=new Set();for(const n of b){const q=String(n??'')['toLowerCase']();if(!q)continue;if(isUserAddress(q)){d['set'](q,q);continue;}if(objectTypeFromAddress(q)===undefined)continue;!f['has'](q)&&(f['add'](q),e['push'](q));}if(e['length']===0x0)return d;const g=await fetchObjectsInChunks(e,c),h=new Map(),i=new Map();for(const r of g){const s=r['object']['toLowerCase']();if(r['type']===ObjectType['Order']||r['type']===ObjectType['Permission']){const t=String(r['builder']??'')['toLowerCase']();if(t)d['set'](s,t);}else{if(r['type']===ObjectType['Progress']){const u=String(r['machine']??'')['toLowerCase']();if(u)h['set'](s,u);}else{const v=String(r['permission']??'')['toLowerCase']();if(v)i['set'](s,v);}}}const j=new Map(),k=[...new Set(h['values']())];if(k['length']>0x0){const w=await fetchObjectsInChunks(k,c);for(const x of w){const y=String(x['permission']??'')['toLowerCase']();if(y)j['set'](x['object']['toLowerCase'](),y);}}const l=new Set(i['values']());for(const z of j['values']())l['add'](z);if(l['size']>0x0){const A=await fetchObjectsInChunks([...l],c),B=new Map();for(const C of A){const D=String(C['builder']??'')['toLowerCase']();if(D)B['set'](C['object']['toLowerCase'](),D);}for(const [E,F]of i){const G=B['get'](F);if(G)d['set'](E,G);}for(const [H,I]of h){const J=j['get'](I);if(!J)continue;const K=B['get'](J);if(K)d['set'](H,K);}}return d;}export function extractionPlanForHolder(a,b){const c=a['toLowerCase']();if(isUserAddress(c))return{'holder':c,'holder_kind':'user','operation':'payment::unwrap_to_myself','anyone_can_submit':![],'settles_to':c,'steps':['Call\x20payment::unwrap_to_myself<T>(wrapper),\x20signing\x20with\x20the\x20holder\x20account.','The\x20bare\x20Coin<T>\x20is\x20transferred\x20back\x20to\x20the\x20same\x20account,\x20ready\x20to\x20spend.']};const e=objectTypeFromAddress(c),f=e?driveabilityOf(e):undefined,g=f?.['receive_entries'][0x0]??String(e??'object')+'::owner_receive',i=b??f?.['funds_settle_to']??'the\x20object\x27s\x20owner';if(f?.['anyone_drivable'])return{'holder':c,'holder_kind':'business_object','operation':g,'anyone_can_submit':!![],'settles_to':i,'steps':['Obtain\x20the\x20Receiving<CoinWrapper<T>>\x20argument\x20from\x20the\x20wrapper\x27s\x20current\x20version\x20and\x20digest\x20returned\x20by\x20query_received.','Build\x20a\x20PTB\x20calling\x20'+g+'(…,\x20wrapper,\x20payment);\x20no\x20permission\x20witness\x20is\x20required.','Anyone\x20may\x20submit;\x20the\x20bare\x20Coin\x20settles\x20to\x20'+i+'.']};return{'holder':c,'holder_kind':'business_object','operation':g,'anyone_can_submit':![],...f?.['permission_index']!=null?{'permission_index':f['permission_index']}:{},'settles_to':i,'steps':['Obtain\x20the\x20Receiving<CoinWrapper<T>>\x20argument\x20from\x20the\x20wrapper\x27s\x20current\x20version\x20and\x20digest\x20returned\x20by\x20query_received.','Build\x20a\x20PTB\x20calling\x20'+g+'(…,\x20permission,\x20wrapper,\x20payment)\x20as\x20a\x20member\x20holding\x20permission\x20index\x20'+(f?.['permission_index']??'?')+',\x20or\x20the\x20*_with_passport\x20variant.','The\x20bare\x20Coin\x20settles\x20to\x20'+i+'.']};}export async function pendingWrappersAt(a,b){const c=a['toLowerCase'](),d=await query_received({'name_or_address':{'name_or_address':c},'type':'CoinWrapper','network':b['network'],'no_cache':b['no_cache']});if(!d||Array['isArray'](d)||!('received'in d))return[];return(d['received']??[])['map'](e=>({'wrapper_id':String(e['id'])['toLowerCase'](),'payment':String(e['payment'])['toLowerCase'](),'amount':String(e['balance']??'0'),'version':e['version'],'digest':e['digest'],'holder':c,'plan':extractionPlanForHolder(c,b['concreteOwner'])}));}export async function trackAccountPayments(a){const b=a['account']['toLowerCase'](),c=await scanRecentPaymentEvents({'network':a['network'],'no_cache':a['no_cache'],'max_events':a['max_events']??0x64}),d=new Set();for(const i of c)for(const j of i['record']??[])d['add'](String(j['recipient'])['toLowerCase']());const e=await resolveBeneficialOwners([...d],{'network':a['network'],'no_cache':a['no_cache']}),f=[];for(const k of c){const l=paymentRelations(k,b),m=(k['record']??[])['some'](n=>e['get'](String(n['recipient'])['toLowerCase']())===b);if(l['length']===0x0&&!m)continue;if(!m&&!a['include_related']&&(l['length']===0x0||!l['includes']('incoming')))continue;f['push']({'ev':k,'relations':l,'beneficial':m});}const g=new Set();for(const {ev:n}of f)for(const o of n['record']??[]){const p=String(o['recipient'])['toLowerCase']();if(p===b||e['get'](p)===b)g['add'](p);}const h=new Map();return await Promise['all']([...g]['map'](async q=>{try{h['set'](q,await pendingWrappersAt(q,{'network':a['network'],'no_cache':a['no_cache'],'concreteOwner':e['get'](q)}));}catch{h['set'](q,[]);}})),f['map'](({ev:q,relations:s,beneficial:t})=>{const u=q['object']['toLowerCase'](),v=[];for(const x of q['record']??[]){const y=String(x['recipient'])['toLowerCase']();if(y!==b&&e['get'](y)!==b)continue;for(const z of h['get'](y)??[]){if(z['payment']===u)v['push'](z);}}return{'payment':u,'tx_digest':String(q['id']?.['txDigest']??''),'time':Number(q['time']??0x0),'amount':String(q['amount']??'0'),'creator':String(q['sender']??'')['toLowerCase'](),'from_object':q['from_object']??null,'info':q['info'],'legs':(q['record']??[])['map'](A=>{const B=String(A['recipient'])['toLowerCase']();return{'recipient':B,'amount':String(A['amount']??'0'),'recipient_kind':isUserAddress(B)?'user':'business_object',...e['has'](B)?{'beneficial_owner':e['get'](B)}:{}};}),'relations':s,'beneficial':t,'pending':v};});}
@@ -0,0 +1,160 @@
1
+ export type RecipientSpec = {
2
+ kind: "entity";
3
+ address: string;
4
+ } | {
5
+ kind: "signer";
6
+ } | {
7
+ kind: "submission";
8
+ identifier: number;
9
+ };
10
+ export type ConstraintCode = "service_binding" | "progress_node_state" | "signer_is_submitted_object_owner" | "signer_authorized_entity" | "signer_permission_member" | "time_lock" | "repository_crosscheck" | "other";
11
+ export interface ConstraintEvidence {
12
+ path: string;
13
+ queries: string[];
14
+ }
15
+ export interface RecipientConstraint {
16
+ code: ConstraintCode;
17
+ slot?: number;
18
+ description: string;
19
+ evidence: ConstraintEvidence;
20
+ caller_constraint: boolean;
21
+ }
22
+ export interface ObjectReceiptRight {
23
+ object_type: "order" | "treasury" | "unknown";
24
+ receive_entry: string;
25
+ guarantee: string;
26
+ }
27
+ export type FindingSeverity = "CRITICAL" | "HIGH" | "MEDIUM" | "LOW";
28
+ export interface RecipientFinding {
29
+ code: string;
30
+ severity: FindingSeverity;
31
+ title: string;
32
+ explanation: string;
33
+ evidence_paths: string[];
34
+ mitigation: string;
35
+ unavoidable: boolean;
36
+ }
37
+ export type Stakeholder = "provider" | "customer" | "caller" | "system";
38
+ export type PayoffPosition = "gains" | "loses" | "neutral" | "conditional";
39
+ export interface AllocatorPayoff {
40
+ caller_eligibility: string;
41
+ beneficial_recipient: string;
42
+ positions: Partial<Record<Stakeholder, PayoffPosition>>;
43
+ }
44
+ export interface RecipientModel {
45
+ spec: RecipientSpec;
46
+ slot_value_type?: number;
47
+ constraints: RecipientConstraint[];
48
+ receipt?: ObjectReceiptRight;
49
+ beneficial_owner: string;
50
+ }
51
+ export interface AllocatorModel {
52
+ guard: string;
53
+ recipients: RecipientModel[];
54
+ slots: SlotModel[];
55
+ payoff: AllocatorPayoff;
56
+ }
57
+ export interface GuardDef {
58
+ table?: GuardTableItemLike[];
59
+ root: unknown;
60
+ }
61
+ interface GuardTableItemLike {
62
+ identifier: number;
63
+ value_type: number | string;
64
+ value?: unknown;
65
+ name?: string;
66
+ b_submission?: boolean;
67
+ }
68
+ export type TriggerSource = "service_order_allocators" | "arbitration_fees" | "standalone";
69
+ export interface SlotUsage {
70
+ slot: number;
71
+ path: string;
72
+ query_id: number;
73
+ query_name: string;
74
+ convert_witness?: number | string;
75
+ }
76
+ export interface SlotModel {
77
+ identifier: number;
78
+ externally_submitted: boolean;
79
+ declared_value_type?: number;
80
+ is_address: boolean;
81
+ usages: SlotUsage[];
82
+ recipient_modes: string[];
83
+ constraints: RecipientConstraint[];
84
+ receipt?: ObjectReceiptRight;
85
+ beneficial_owner: string;
86
+ assessment: {
87
+ address_typed: boolean;
88
+ scope_bound: boolean;
89
+ object_receipt: boolean;
90
+ };
91
+ findings: string[];
92
+ }
93
+ export interface RecipientConstraintInput {
94
+ trigger_source: TriggerSource;
95
+ host_service?: string;
96
+ allocation?: string;
97
+ allocators: Array<{
98
+ guard: string;
99
+ sharing: Array<{
100
+ who: unknown;
101
+ sharing?: string | number;
102
+ mode?: string;
103
+ }>;
104
+ }>;
105
+ guards?: Record<string, GuardDef>;
106
+ }
107
+ export interface RecipientConstraintAudit {
108
+ version: string;
109
+ scope: {
110
+ trigger_source: TriggerSource;
111
+ host_service?: string;
112
+ allocation?: string;
113
+ };
114
+ allocators: AllocatorModel[];
115
+ findings: RecipientFinding[];
116
+ unavoidable: Array<{
117
+ code: string;
118
+ title: string;
119
+ detail: string;
120
+ }>;
121
+ safe_destination: boolean;
122
+ overall: FindingSeverity;
123
+ summary: string;
124
+ }
125
+ export declare function classifyRecipient(who: unknown): RecipientSpec | null;
126
+ export declare const RECIPIENT_CONSTRAINT_VERSION = "1.1.0";
127
+ export declare function analyzeRecipientConstraints(input: RecipientConstraintInput): RecipientConstraintAudit;
128
+ export declare function derivePayoffFromSharing(sharing: Array<{
129
+ who: unknown;
130
+ }>, trigger: TriggerSource, resolved?: GuardDef): AllocatorPayoff;
131
+ export declare function isUnboundSignerTheft(opts: {
132
+ recipient_is_signer: boolean;
133
+ caller_identity_constrained: boolean;
134
+ }): boolean;
135
+ export declare function canonicalDoctrine(code: "RC-FIND-01" | "RC-FIND-03" | "RC-FIND-06"): {
136
+ severity: FindingSeverity;
137
+ title: string;
138
+ mitigation: string;
139
+ };
140
+ export interface RecipientDesignOption {
141
+ id: "entity" | "submitted_object" | "signer" | "constrained_submission";
142
+ move_recipient: string;
143
+ semantics: string;
144
+ required_constraints: string[];
145
+ finding_if_unmet?: string;
146
+ }
147
+ export declare const RECIPIENT_DESIGN_OPTIONS: readonly RecipientDesignOption[];
148
+ export declare function recipientDesignGuidance(): readonly RecipientDesignOption[];
149
+ export type DrivableObjectType = "order" | "permission" | "service" | "treasury" | "arbitration" | "machine" | "progress" | "demand" | "contact";
150
+ export interface ObjectDriveability {
151
+ object_type: DrivableObjectType;
152
+ receive_entries: string[];
153
+ anyone_drivable: boolean;
154
+ permission_index?: number;
155
+ funds_settle_to: string;
156
+ rationale: string;
157
+ }
158
+ export declare const OBJECT_DRIVEABILITY: readonly ObjectDriveability[];
159
+ export declare function driveabilityOf(object_type: DrivableObjectType): ObjectDriveability | undefined;
160
+ export {};