@wowok/agent-mcp 2.7.1 → 2.7.3
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.
- package/dist/config/index.js +1 -1
- package/dist/config/runtime.js +1 -238
- package/dist/customer/account-events.d.ts +32 -0
- package/dist/customer/account-events.js +1 -0
- package/dist/customer/customer-advice.d.ts +1 -0
- package/dist/customer/customer-advice.js +1 -130
- package/dist/customer/index.js +1 -11
- package/dist/customer/industry-risks.js +1 -438
- package/dist/customer/info-puzzle.js +1 -681
- package/dist/customer/order-monitor.js +1 -328
- package/dist/customer/order-strategy.d.ts +1 -1
- package/dist/customer/order-strategy.js +1 -373
- package/dist/customer/post-purchase.js +1 -351
- package/dist/customer/preorder-compare.js +1 -34
- package/dist/customer/reminder-system.d.ts +2 -0
- package/dist/customer/reminder-system.js +1 -316
- package/dist/customer/risk-assessment.d.ts +1 -0
- package/dist/customer/risk-assessment.js +1 -397
- package/dist/customer/types.d.ts +2 -0
- package/dist/customer/types.js +1 -13
- package/dist/customer/user-preferences.js +1 -460
- package/dist/evaluation/arbitration-game.d.ts +9 -2
- package/dist/evaluation/arbitration-game.js +1 -48
- package/dist/evaluation/builtins/arbitration-score.d.ts +41 -0
- package/dist/evaluation/builtins/arbitration-score.js +1 -0
- package/dist/evaluation/builtins/demand-match.js +1 -153
- package/dist/evaluation/builtins/index.d.ts +1 -0
- package/dist/evaluation/builtins/index.js +1 -10
- package/dist/evaluation/builtins/service-risk.js +1 -55
- package/dist/evaluation/capability.js +1 -13
- package/dist/evaluation/category-match-rules.d.ts +30 -0
- package/dist/evaluation/category-match-rules.js +1 -0
- package/dist/evaluation/composer.js +1 -40
- package/dist/evaluation/engine.js +1 -175
- package/dist/evaluation/extract.js +1 -115
- package/dist/evaluation/game-strategy.d.ts +27 -0
- package/dist/evaluation/game-strategy.js +1 -0
- package/dist/evaluation/gap.js +1 -100
- package/dist/evaluation/index.d.ts +2 -0
- package/dist/evaluation/index.js +1 -11
- package/dist/evaluation/location-match.d.ts +42 -0
- package/dist/evaluation/location-match.js +1 -0
- package/dist/evaluation/node-game.d.ts +31 -3
- package/dist/evaluation/node-game.js +1 -57
- package/dist/evaluation/path-reasoning.d.ts +35 -0
- package/dist/evaluation/path-reasoning.js +1 -0
- package/dist/evaluation/region.d.ts +6 -0
- package/dist/evaluation/region.js +1 -36
- package/dist/evaluation/types.d.ts +18 -0
- package/dist/evaluation/types.js +1 -1
- package/dist/evaluation/user-injection.js +1 -27
- package/dist/experience/experience-reuse.js +1 -103
- package/dist/experience/index.js +1 -5
- package/dist/experience/intent-distill.js +1 -83
- package/dist/experience/realtime-feedback.js +1 -94
- package/dist/experience/types.js +1 -1
- package/dist/experience/user-profile.d.ts +1 -1
- package/dist/experience/user-profile.js +1 -171
- package/dist/extensions/business-modules.js +1 -287
- package/dist/extensions/capability-manifest.js +1 -781
- package/dist/extensions/constraint-registry.js +1 -198
- package/dist/extensions/index.d.ts +6 -0
- package/dist/extensions/index.js +1 -6
- package/dist/extensions/industry-layers.d.ts +75 -0
- package/dist/extensions/industry-layers.js +1 -0
- package/dist/extensions/industry-pack.d.ts +105 -0
- package/dist/extensions/industry-pack.js +1 -0
- package/dist/extensions/metric-registry.js +1 -257
- package/dist/extensions/mode-evaluator.d.ts +1 -1
- package/dist/extensions/mode-evaluator.js +1 -170
- package/dist/extensions/modes.js +1 -499
- package/dist/extensions/registry.d.ts +1 -0
- package/dist/extensions/registry.js +1 -717
- package/dist/extensions/types.js +1 -1
- package/dist/graph/base.d.ts +8 -0
- package/dist/graph/base.js +1 -0
- package/dist/harness/auto-escalation.js +1 -68
- package/dist/harness/checkpoint.js +1 -129
- package/dist/harness/index.d.ts +1 -0
- package/dist/harness/index.js +1 -78
- package/dist/harness/plan.d.ts +2 -0
- package/dist/harness/plan.js +1 -315
- package/dist/harness/recover.d.ts +1 -1
- package/dist/harness/recover.js +1 -139
- package/dist/harness/types.d.ts +2 -3
- package/dist/harness/types.js +1 -1
- package/dist/harness/verify.js +1 -237
- package/dist/index.js +1 -273
- package/dist/intent/enrich.js +1 -67
- package/dist/intent/index.js +1 -60
- package/dist/intent/matcher.js +1 -81
- package/dist/intent/store.js +1 -55
- package/dist/intent/types.js +1 -10
- package/dist/knowledge/acquisition-flywheel.js +1 -192
- package/dist/knowledge/allocation-confirm.js +1 -534
- package/dist/knowledge/allocation-context.js +1 -249
- package/dist/knowledge/allocation-ledger.js +1 -463
- package/dist/knowledge/allocation-puzzle.js +1 -298
- package/dist/knowledge/allocation-risk.js +1 -568
- package/dist/knowledge/allocation-templates.js +1 -970
- package/dist/knowledge/allocation-translation.js +1 -585
- package/dist/knowledge/anti-cheat.d.ts +37 -0
- package/dist/knowledge/anti-cheat.js +1 -0
- package/dist/knowledge/arb-confirm.d.ts +28 -0
- package/dist/knowledge/arb-confirm.js +1 -0
- package/dist/knowledge/arb-risk.js +1 -210
- package/dist/knowledge/arb-translation.d.ts +48 -0
- package/dist/knowledge/arb-translation.js +1 -0
- package/dist/knowledge/arbitration-confirm.js +1 -559
- package/dist/knowledge/arbitration-context.js +1 -505
- package/dist/knowledge/arbitration-ledger.js +1 -521
- package/dist/knowledge/arbitration-puzzle.js +1 -304
- package/dist/knowledge/arbitration-risk.js +1 -423
- package/dist/knowledge/arbitration-templates.js +1 -276
- package/dist/knowledge/arbitration-translation.js +1 -487
- package/dist/knowledge/audit-rules.js +1 -141
- package/dist/knowledge/bridge-confirm.d.ts +26 -0
- package/dist/knowledge/bridge-confirm.js +1 -0
- package/dist/knowledge/bridge-risk.js +1 -263
- package/dist/knowledge/bridge-translation.d.ts +37 -0
- package/dist/knowledge/bridge-translation.js +1 -0
- package/dist/knowledge/contact-confirm.d.ts +27 -0
- package/dist/knowledge/contact-confirm.js +1 -0
- package/dist/knowledge/contact-risk.js +1 -200
- package/dist/knowledge/contact-templates.js +1 -60
- package/dist/knowledge/contact-translation.d.ts +39 -0
- package/dist/knowledge/contact-translation.js +1 -0
- package/dist/knowledge/demand-confirm.js +1 -206
- package/dist/knowledge/demand-context.d.ts +17 -0
- package/dist/knowledge/demand-context.js +1 -0
- package/dist/knowledge/demand-ledger.d.ts +26 -0
- package/dist/knowledge/demand-ledger.js +1 -0
- package/dist/knowledge/demand-matching.js +1 -132
- package/dist/knowledge/demand-puzzle.d.ts +29 -0
- package/dist/knowledge/demand-puzzle.js +1 -0
- package/dist/knowledge/demand-risk.js +1 -240
- package/dist/knowledge/demand-templates.d.ts +12 -0
- package/dist/knowledge/demand-templates.js +1 -0
- package/dist/knowledge/demand-translation.js +1 -354
- package/dist/knowledge/deployment-scanner.js +1 -823
- package/dist/knowledge/dynamic-pricing.js +1 -87
- package/dist/knowledge/evidence-review.d.ts +12 -0
- package/dist/knowledge/evidence-review.js +1 -0
- package/dist/knowledge/examples-scanner-cli.js +1 -26
- package/dist/knowledge/examples-scanner.js +1 -843
- package/dist/knowledge/flywheel-loop.d.ts +0 -1
- package/dist/knowledge/flywheel-loop.js +1 -404
- package/dist/knowledge/fund-layer.js +1 -973
- package/dist/knowledge/glossary.js +1 -211
- package/dist/knowledge/guard-confirm.js +1 -406
- package/dist/knowledge/guard-context.js +1 -287
- package/dist/knowledge/guard-design-patterns.js +1 -360
- package/dist/knowledge/guard-ledger.js +1 -260
- package/dist/knowledge/guard-lint.js +1 -670
- package/dist/knowledge/guard-migration.d.ts +1 -1
- package/dist/knowledge/guard-migration.js +1 -228
- package/dist/knowledge/guard-puzzle.js +1 -805
- package/dist/knowledge/guard-render.js +1 -700
- package/dist/knowledge/guard-risk.js +1 -1879
- package/dist/knowledge/guard-submission-prompt.js +1 -171
- package/dist/knowledge/guard-templates.js +1 -1105
- package/dist/knowledge/guard-translation.js +1 -1119
- package/dist/knowledge/index.d.ts +71 -3
- package/dist/knowledge/index.js +1 -436
- package/dist/knowledge/industry-evolution.js +1 -323
- package/dist/knowledge/industry-generalizer.js +1 -381
- package/dist/knowledge/industry-registry.js +1 -174
- package/dist/knowledge/intent-metrics.d.ts +4 -3
- package/dist/knowledge/intent-metrics.js +1 -566
- package/dist/knowledge/machine-confirm.js +1 -559
- package/dist/knowledge/machine-context.js +1 -833
- package/dist/knowledge/machine-ledger.js +1 -338
- package/dist/knowledge/machine-puzzle.js +1 -494
- package/dist/knowledge/machine-render.js +1 -565
- package/dist/knowledge/machine-risk.js +1 -669
- package/dist/knowledge/machine-templates.js +1 -1597
- package/dist/knowledge/machine-topology.js +1 -234
- package/dist/knowledge/machine-translation.js +1 -513
- package/dist/knowledge/market-metrics.d.ts +12 -0
- package/dist/knowledge/market-metrics.js +1 -0
- package/dist/knowledge/market-operations.d.ts +46 -0
- package/dist/knowledge/market-operations.js +1 -0
- package/dist/knowledge/mcp-schema-audit-cli.js +1 -45
- package/dist/knowledge/mcp-schema-audit.d.ts +22 -22
- package/dist/knowledge/mcp-schema-audit.js +1 -777
- package/dist/knowledge/onchain-constants.js +1 -35
- package/dist/knowledge/order-confirm.js +1 -573
- package/dist/knowledge/order-context.js +1 -390
- package/dist/knowledge/order-ledger.js +1 -341
- package/dist/knowledge/order-puzzle.js +1 -255
- package/dist/knowledge/order-risk.js +1 -653
- package/dist/knowledge/order-templates.js +1 -368
- package/dist/knowledge/order-translation.js +1 -550
- package/dist/knowledge/overrides-loader.js +1 -65
- package/dist/knowledge/passport-confirm.js +1 -531
- package/dist/knowledge/passport-context.js +1 -306
- package/dist/knowledge/passport-ledger.js +1 -282
- package/dist/knowledge/passport-puzzle.js +1 -333
- package/dist/knowledge/passport-risk.js +1 -450
- package/dist/knowledge/passport-templates.js +1 -568
- package/dist/knowledge/passport-translation.js +1 -516
- package/dist/knowledge/payment-confirm.d.ts +26 -0
- package/dist/knowledge/payment-confirm.js +1 -0
- package/dist/knowledge/payment-risk.js +1 -249
- package/dist/knowledge/payment-translation.d.ts +37 -0
- package/dist/knowledge/payment-translation.js +1 -0
- package/dist/knowledge/permission-confirm.js +1 -426
- package/dist/knowledge/permission-context.js +1 -224
- package/dist/knowledge/permission-ledger.d.ts +11 -0
- package/dist/knowledge/permission-ledger.js +1 -403
- package/dist/knowledge/permission-puzzle.js +1 -173
- package/dist/knowledge/permission-risk.js +1 -411
- package/dist/knowledge/permission-templates.js +1 -234
- package/dist/knowledge/permission-translation.js +1 -350
- package/dist/knowledge/personal-confirm.d.ts +29 -0
- package/dist/knowledge/personal-confirm.js +1 -0
- package/dist/knowledge/personal-risk.js +1 -212
- package/dist/knowledge/personal-translation.d.ts +37 -0
- package/dist/knowledge/personal-translation.js +1 -0
- package/dist/knowledge/process-model.d.ts +1 -11
- package/dist/knowledge/process-model.js +1 -160
- package/dist/knowledge/progress-confirm.js +1 -456
- package/dist/knowledge/progress-context.js +1 -452
- package/dist/knowledge/progress-ledger.js +1 -330
- package/dist/knowledge/progress-puzzle.js +1 -219
- package/dist/knowledge/progress-risk.js +1 -461
- package/dist/knowledge/progress-templates.js +1 -228
- package/dist/knowledge/progress-translation.js +1 -405
- package/dist/knowledge/proof-confirm.js +1 -187
- package/dist/knowledge/proof-context.d.ts +17 -0
- package/dist/knowledge/proof-context.js +1 -0
- package/dist/knowledge/proof-ledger.d.ts +34 -0
- package/dist/knowledge/proof-ledger.js +1 -0
- package/dist/knowledge/proof-puzzle.d.ts +35 -0
- package/dist/knowledge/proof-puzzle.js +1 -0
- package/dist/knowledge/proof-risk.js +1 -207
- package/dist/knowledge/proof-templates.d.ts +22 -0
- package/dist/knowledge/proof-templates.js +1 -0
- package/dist/knowledge/proof-translation.js +1 -283
- package/dist/knowledge/registrar-confirm.d.ts +26 -0
- package/dist/knowledge/registrar-confirm.js +1 -0
- package/dist/knowledge/registrar-risk.js +1 -217
- package/dist/knowledge/registrar-translation.d.ts +37 -0
- package/dist/knowledge/registrar-translation.js +1 -0
- package/dist/knowledge/repository-confirm.js +1 -286
- package/dist/knowledge/repository-context.d.ts +12 -0
- package/dist/knowledge/repository-context.js +1 -0
- package/dist/knowledge/repository-ledger.d.ts +25 -0
- package/dist/knowledge/repository-ledger.js +1 -0
- package/dist/knowledge/repository-puzzle.d.ts +30 -0
- package/dist/knowledge/repository-puzzle.js +1 -0
- package/dist/knowledge/repository-risk.js +1 -373
- package/dist/knowledge/repository-templates.d.ts +14 -0
- package/dist/knowledge/repository-templates.js +1 -0
- package/dist/knowledge/repository-translation.js +1 -445
- package/dist/knowledge/reputation-rules.js +1 -99
- package/dist/knowledge/resource-confirm.d.ts +25 -0
- package/dist/knowledge/resource-confirm.js +1 -0
- package/dist/knowledge/resource-risk.js +1 -157
- package/dist/knowledge/resource-translation.d.ts +37 -0
- package/dist/knowledge/resource-translation.js +1 -0
- package/dist/knowledge/reward-confirm.js +1 -526
- package/dist/knowledge/reward-context.d.ts +2 -2
- package/dist/knowledge/reward-context.js +1 -504
- package/dist/knowledge/reward-ledger.js +1 -502
- package/dist/knowledge/reward-puzzle.js +1 -300
- package/dist/knowledge/reward-risk.js +1 -627
- package/dist/knowledge/reward-templates.js +1 -197
- package/dist/knowledge/reward-translation.js +1 -501
- package/dist/knowledge/safety-rules.d.ts +1 -0
- package/dist/knowledge/safety-rules.js +1 -404
- package/dist/knowledge/scenario-modes.js +1 -321
- package/dist/knowledge/service-confirm.js +1 -807
- package/dist/knowledge/service-context.js +1 -403
- package/dist/knowledge/service-ledger.js +1 -609
- package/dist/knowledge/service-puzzle.js +1 -236
- package/dist/knowledge/service-risk.d.ts +1 -1
- package/dist/knowledge/service-risk.js +1 -651
- package/dist/knowledge/service-templates.js +1 -456
- package/dist/knowledge/service-translation.js +1 -622
- package/dist/knowledge/template-registry.js +1 -353
- package/dist/knowledge/tool-constraints.js +1 -195
- package/dist/knowledge/tools-reference.js +1 -178
- package/dist/knowledge/treasury-confirm.js +1 -512
- package/dist/knowledge/treasury-context.js +1 -363
- package/dist/knowledge/treasury-ledger.js +1 -300
- package/dist/knowledge/treasury-puzzle.js +1 -216
- package/dist/knowledge/treasury-risk.js +1 -440
- package/dist/knowledge/treasury-templates.js +1 -358
- package/dist/knowledge/treasury-translation.js +1 -498
- package/dist/knowledge/trust-metrics.js +1 -198
- package/dist/knowledge/universal-template.d.ts +22 -0
- package/dist/knowledge/universal-template.js +1 -0
- package/dist/knowledge/util-confirm.d.ts +24 -0
- package/dist/knowledge/util-confirm.js +1 -0
- package/dist/knowledge/util-risk.js +1 -135
- package/dist/knowledge/util-translation.d.ts +38 -0
- package/dist/knowledge/util-translation.js +1 -0
- package/dist/knowledge/workflow-guidance.d.ts +116 -0
- package/dist/knowledge/workflow-guidance.js +1 -0
- package/dist/loop-engineering/aggregate.js +1 -132
- package/dist/loop-engineering/context-collect.js +1 -83
- package/dist/loop-engineering/diagnose.js +1 -273
- package/dist/loop-engineering/improve.js +1 -405
- package/dist/loop-engineering/index.js +1 -4
- package/dist/loop-engineering/pipeline.js +1 -56
- package/dist/mode-market/index.js +1 -3
- package/dist/mode-market/registry.js +1 -124
- package/dist/mode-market/review.js +1 -214
- package/dist/mode-market/submission.js +1 -85
- package/dist/participation/collaborator-interest.d.ts +23 -0
- package/dist/participation/collaborator-interest.js +1 -0
- package/dist/participation/customer-interest.d.ts +25 -0
- package/dist/participation/customer-interest.js +1 -0
- package/dist/participation/employee-kpi.d.ts +25 -0
- package/dist/participation/employee-kpi.js +1 -0
- package/dist/participation/employee-store.d.ts +16 -0
- package/dist/participation/employee-store.js +1 -0
- package/dist/participation/index.d.ts +2 -0
- package/dist/participation/index.js +1 -0
- package/dist/participation/merchant-interest.js +1 -100
- package/dist/participation/radar-core.d.ts +13 -3
- package/dist/participation/radar-core.js +1 -269
- package/dist/participation/supplier-interest.d.ts +25 -0
- package/dist/participation/supplier-interest.js +1 -0
- package/dist/persona/analyzer.js +1 -66
- package/dist/persona/bridge.js +1 -86
- package/dist/persona/defaults.js +1 -195
- package/dist/persona/experience-bridge.js +1 -23
- package/dist/persona/index.d.ts +9 -2
- package/dist/persona/index.js +1 -71
- package/dist/persona/local-region.d.ts +20 -0
- package/dist/persona/local-region.js +1 -0
- package/dist/persona/model.js +1 -111
- package/dist/persona/overrides.d.ts +10 -0
- package/dist/persona/overrides.js +1 -0
- package/dist/persona/pack-personae.d.ts +11 -0
- package/dist/persona/pack-personae.js +1 -0
- package/dist/persona/store.js +1 -62
- package/dist/persona/strategy-intent.d.ts +20 -0
- package/dist/persona/strategy-intent.js +1 -0
- package/dist/persona/types.d.ts +6 -2
- package/dist/persona/types.js +1 -5
- package/dist/project/business-puzzle.d.ts +1 -1
- package/dist/project/business-puzzle.js +1 -383
- package/dist/project/context-assembly.js +1 -254
- package/dist/project/deployment-bridge.js +1 -120
- package/dist/project/deployment-doc.js +1 -1126
- package/dist/project/edit-planner.js +1 -1342
- package/dist/project/evaluation.d.ts +37 -1
- package/dist/project/evaluation.js +1 -2011
- package/dist/project/game-theory.js +1 -177
- package/dist/project/graph-builder.js +1 -656
- package/dist/project/graph.d.ts +3 -6
- package/dist/project/graph.js +1 -340
- package/dist/project/handlers.d.ts +33 -2
- package/dist/project/handlers.js +1 -1784
- package/dist/project/index.d.ts +2 -0
- package/dist/project/index.js +1 -301
- package/dist/project/intent-analyzer.js +1 -149
- package/dist/project/machine-nodes.js +1 -36
- package/dist/project/merchant-guide.d.ts +19 -0
- package/dist/project/merchant-guide.js +1 -264
- package/dist/project/migration.js +1 -125
- package/dist/project/mode-actions.js +1 -309
- package/dist/project/namespace.js +1 -206
- package/dist/project/participation-radar.js +1 -428
- package/dist/project/pipeline-actions.js +1 -109
- package/dist/project/project-store.js +1 -422
- package/dist/project/query.js +1 -153
- package/dist/project/reverse-mapping.d.ts +34 -0
- package/dist/project/reverse-mapping.js +1 -0
- package/dist/project/risk-aggregator.js +1 -295
- package/dist/project/rollback-policy.js +1 -290
- package/dist/project/semantic-assembler.js +1 -345
- package/dist/project/semantic-graph.d.ts +3 -5
- package/dist/project/semantic-graph.js +1 -292
- package/dist/project/stage-gate.js +1 -369
- package/dist/project/substep-trace.js +1 -332
- package/dist/project/task-tracker.js +1 -78
- package/dist/project/workflow-design-assessment.d.ts +24 -0
- package/dist/project/workflow-design-assessment.js +1 -0
- package/dist/role/derivation.d.ts +18 -0
- package/dist/role/derivation.js +1 -0
- package/dist/role/index.d.ts +5 -0
- package/dist/role/index.js +1 -0
- package/dist/role/model.d.ts +8 -0
- package/dist/role/model.js +1 -0
- package/dist/role/resolution.d.ts +11 -0
- package/dist/role/resolution.js +1 -0
- package/dist/role/types.d.ts +11 -0
- package/dist/role/types.js +1 -0
- package/dist/rules.js +1 -52
- package/dist/safety/confirm-gate.d.ts +1 -1
- package/dist/safety/confirm-gate.js +1 -88
- package/dist/safety/index.js +1 -3
- package/dist/safety/preview.js +1 -52
- package/dist/schema/call/allocation.d.ts +186 -1385
- package/dist/schema/call/allocation.js +1 -34
- package/dist/schema/call/arbitration.d.ts +272 -1871
- package/dist/schema/call/arbitration.js +1 -113
- package/dist/schema/call/base.d.ts +1831 -9076
- package/dist/schema/call/base.js +1 -370
- package/dist/schema/call/bridge.d.ts +911 -3171
- package/dist/schema/call/bridge.js +1 -458
- package/dist/schema/call/contact.d.ts +135 -931
- package/dist/schema/call/contact.js +1 -37
- package/dist/schema/call/demand.d.ts +164 -1194
- package/dist/schema/call/demand.js +1 -47
- package/dist/schema/call/guard.d.ts +298 -1140
- package/dist/schema/call/guard.js +1 -161
- package/dist/schema/call/handler.js +1 -322
- package/dist/schema/call/index.js +1 -20
- package/dist/schema/call/machine.d.ts +459 -5403
- package/dist/schema/call/machine.js +1 -193
- package/dist/schema/call/order.d.ts +137 -844
- package/dist/schema/call/order.js +1 -35
- package/dist/schema/call/payment.d.ts +74 -561
- package/dist/schema/call/payment.js +1 -37
- package/dist/schema/call/permission-handler.js +1 -54
- package/dist/schema/call/permission.d.ts +335 -2791
- package/dist/schema/call/permission.js +1 -105
- package/dist/schema/call/personal.d.ts +227 -1814
- package/dist/schema/call/personal.js +1 -78
- package/dist/schema/call/progress.d.ts +140 -843
- package/dist/schema/call/progress.js +1 -47
- package/dist/schema/call/proof.d.ts +42 -258
- package/dist/schema/call/proof.js +1 -33
- package/dist/schema/call/repository.d.ts +324 -2222
- package/dist/schema/call/repository.js +1 -77
- package/dist/schema/call/reward.d.ts +153 -1183
- package/dist/schema/call/reward.js +1 -30
- package/dist/schema/call/semantic.js +1 -1679
- package/dist/schema/call/service.d.ts +376 -3431
- package/dist/schema/call/service.js +1 -184
- package/dist/schema/call/treasury.d.ts +252 -2158
- package/dist/schema/call/treasury.js +1 -71
- package/dist/schema/common/index.d.ts +222 -697
- package/dist/schema/common/index.js +1 -407
- package/dist/schema/config/index.d.ts +18 -161
- package/dist/schema/config/index.js +1 -68
- package/dist/schema/employee/index.d.ts +99 -0
- package/dist/schema/employee/index.js +1 -0
- package/dist/schema/evaluation/index.d.ts +1062 -3748
- package/dist/schema/evaluation/index.js +1 -356
- package/dist/schema/index.d.ts +3 -0
- package/dist/schema/index.js +1 -17
- package/dist/schema/industry-pack/index.d.ts +132 -0
- package/dist/schema/industry-pack/index.js +1 -0
- package/dist/schema/intent-radar/index.d.ts +92 -245
- package/dist/schema/intent-radar/index.js +1 -89
- package/dist/schema/local/index.d.ts +2045 -18080
- package/dist/schema/local/index.js +1 -927
- package/dist/schema/local/wip.d.ts +61 -651
- package/dist/schema/local/wip.js +1 -187
- package/dist/schema/messenger/index.d.ts +949 -5557
- package/dist/schema/messenger/index.js +1 -475
- package/dist/schema/operations.d.ts +2969 -26518
- package/dist/schema/operations.js +1 -520
- package/dist/schema/persona/index.d.ts +469 -1820
- package/dist/schema/persona/index.js +1 -148
- package/dist/schema/project/index.d.ts +1027 -8408
- package/dist/schema/project/index.js +1 -2057
- package/dist/schema/query/index.d.ts +12041 -75261
- package/dist/schema/query/index.js +1 -1646
- package/dist/schema/schema-query/index.d.ts +35 -98
- package/dist/schema/schema-query/index.js +1 -104
- package/dist/schema/schema-version.js +1 -76
- package/dist/schema/task-status.d.ts +26 -132
- package/dist/schema/task-status.js +1 -36
- package/dist/schema/trust/index.d.ts +194 -1290
- package/dist/schema/trust/index.js +1 -314
- package/dist/schema/utils/guard-parser.js +1 -419
- package/dist/schema/utils/guard-query-utils.js +1 -46
- package/dist/schema/utils/node-parser.js +1 -369
- package/dist/schema/utils/object-type-utils.js +1 -35
- package/dist/schema/utils/permission-index-utils.js +1 -7
- package/dist/schema/utils/permission-machine-check.js +1 -121
- package/dist/schema/utils/skills-recommendation.d.ts +1 -0
- package/dist/schema/utils/skills-recommendation.js +1 -77
- package/dist/schema/workspace/index.d.ts +69 -0
- package/dist/schema/workspace/index.js +1 -0
- package/dist/schema-query-impl/index.js +1 -0
- package/dist/schemas/account_operation.output.json +3147 -1652
- package/dist/schemas/account_operation.schema.json +225 -218
- package/dist/schemas/bridge_operation.output.json +1168 -650
- package/dist/schemas/bridge_operation.schema.json +736 -504
- package/dist/schemas/config_operation.output.json +185 -179
- package/dist/schemas/config_operation.schema.json +21 -26
- package/dist/schemas/employee_operation.output.json +207 -0
- package/dist/schemas/employee_operation.schema.json +176 -0
- package/dist/schemas/evaluation_operation.output.json +2329 -557
- package/dist/schemas/evaluation_operation.schema.json +2939 -720
- package/dist/schemas/guard2file.output.json +58 -64
- package/dist/schemas/guard2file.schema.json +79 -81
- package/dist/schemas/index.json +29 -11
- package/dist/schemas/industry_pack_operation.output.json +594 -0
- package/dist/schemas/industry_pack_operation.schema.json +55 -0
- package/dist/schemas/intent_radar.output.json +275 -200
- package/dist/schemas/intent_radar.schema.json +124 -123
- package/dist/schemas/local_info_operation.output.json +1174 -657
- package/dist/schemas/local_info_operation.schema.json +119 -125
- package/dist/schemas/local_mark_operation.output.json +1239 -689
- package/dist/schemas/local_mark_operation.schema.json +91 -96
- package/dist/schemas/machineNode2file.output.json +63 -69
- package/dist/schemas/machineNode2file.schema.json +79 -81
- package/dist/schemas/messenger_operation.output.json +2722 -1528
- package/dist/schemas/messenger_operation.schema.json +1482 -1264
- package/dist/schemas/onchain_events.output.json +2590 -975
- package/dist/schemas/onchain_events.schema.json +117 -99
- package/dist/schemas/onchain_operations.output.json +3957 -2309
- package/dist/schemas/onchain_operations.schema.json +20799 -9285
- package/dist/schemas/onchain_operations_allocation.schema.json +172 -108
- package/dist/schemas/onchain_operations_arbitration.schema.json +233 -146
- package/dist/schemas/onchain_operations_contact.schema.json +129 -90
- package/dist/schemas/onchain_operations_demand.schema.json +170 -112
- package/dist/schemas/onchain_operations_gen_passport.schema.json +61 -646
- package/dist/schemas/onchain_operations_gen_proof.schema.json +40 -172
- package/dist/schemas/onchain_operations_guard.schema.json +3765 -294
- package/dist/schemas/onchain_operations_machine.schema.json +537 -164
- package/dist/schemas/onchain_operations_order.schema.json +126 -96
- package/dist/schemas/onchain_operations_payment.schema.json +82 -67
- package/dist/schemas/onchain_operations_permission.schema.json +331 -93
- package/dist/schemas/onchain_operations_personal.schema.json +636 -96
- package/dist/schemas/onchain_operations_progress.schema.json +125 -92
- package/dist/schemas/onchain_operations_proof.schema.json +76 -69
- package/dist/schemas/onchain_operations_repository.schema.json +636 -249
- package/dist/schemas/onchain_operations_reward.schema.json +218 -108
- package/dist/schemas/onchain_operations_service.schema.json +679 -221
- package/dist/schemas/onchain_operations_treasury.schema.json +401 -135
- package/dist/schemas/onchain_table_data.output.json +6018 -2430
- package/dist/schemas/onchain_table_data.schema.json +544 -430
- package/dist/schemas/persona_operation.output.json +1568 -265
- package/dist/schemas/persona_operation.schema.json +346 -202
- package/dist/schemas/project_operation.output.json +6957 -5147
- package/dist/schemas/project_operation.schema.json +1050 -1020
- package/dist/schemas/query_task_status.output.json +195 -99
- package/dist/schemas/query_task_status.schema.json +12 -18
- package/dist/schemas/query_toolkit.output.json +18870 -14566
- package/dist/schemas/query_toolkit.schema.json +614 -522
- package/dist/schemas/schema_query.output.json +127 -129
- package/dist/schemas/schema_query.schema.json +64 -69
- package/dist/schemas/trust_score.output.json +678 -587
- package/dist/schemas/trust_score.schema.json +289 -277
- package/dist/schemas/wip_file.output.json +116 -124
- package/dist/schemas/wip_file.schema.json +142 -143
- package/dist/schemas/workspace_operation.output.json +277 -0
- package/dist/schemas/workspace_operation.schema.json +45 -0
- package/dist/schemas/wowok_buildin_info.output.json +1693 -723
- package/dist/schemas/wowok_buildin_info.schema.json +576 -512
- package/dist/telemetry/index.js +1 -112
- package/dist/telemetry/redact.js +1 -23
- package/dist/telemetry/storage.js +1 -80
- package/dist/tools/handlers/bridge.d.ts +8 -1
- package/dist/tools/handlers/bridge.js +1 -1
- package/dist/tools/handlers/config.js +1 -74
- package/dist/tools/handlers/employee.d.ts +2 -0
- package/dist/tools/handlers/employee.js +1 -0
- package/dist/tools/handlers/evaluation.js +1 -123
- package/dist/tools/handlers/file-export.js +1 -90
- package/dist/tools/handlers/industry-pack.d.ts +2 -0
- package/dist/tools/handlers/industry-pack.js +1 -0
- package/dist/tools/handlers/intent-radar.js +1 -76
- package/dist/tools/handlers/local.js +1 -53
- package/dist/tools/handlers/messenger.js +1 -188
- package/dist/tools/handlers/onchain.js +1 -1180
- package/dist/tools/handlers/persona.js +1 -89
- package/dist/tools/handlers/project.js +1 -211
- package/dist/tools/handlers/query.js +1 -434
- package/dist/tools/handlers/schema-query.js +1 -176
- package/dist/tools/handlers/task-status.js +1 -26
- package/dist/tools/handlers/trust.js +1 -380
- package/dist/tools/handlers/wip.js +1 -90
- package/dist/tools/handlers/workspace.d.ts +2 -0
- package/dist/tools/handlers/workspace.js +1 -0
- package/dist/tools/index.d.ts +2 -1
- package/dist/tools/index.js +1 -1382
- package/dist/tools/retry.js +1 -85
- package/dist/tools/rules-hook.d.ts +1 -1
- package/dist/tools/rules-hook.js +1 -23
- package/dist/tools/shared.d.ts +1 -1
- package/dist/tools/shared.js +1 -130
- package/dist/tools/types.d.ts +2 -1
- package/dist/tools/types.js +1 -1
- package/dist/tools/upgrade-check.d.ts +19 -0
- package/dist/tools/upgrade-check.js +1 -0
- package/dist/tools/wip-deploy-assist.js +1 -306
- package/dist/tools/wrap.js +1 -500
- package/package.json +7 -6
- package/dist/knowledge/arbitration-trust.d.ts +0 -24
- package/dist/knowledge/arbitration-trust.js +0 -117
- package/dist/schema/call/bridge-handler.d.ts +0 -8
- package/dist/schema/call/bridge-handler.js +0 -265
- package/dist/schema/sync-layer4.d.ts +0 -21
- package/dist/schema/sync-layer4.js +0 -286
- package/dist/schema-query/index.js +0 -810
- /package/dist/{schema-query → schema-query-impl}/index.d.ts +0 -0
|
@@ -1,132 +1 @@
|
|
|
1
|
-
export const DEMAND_MATCHING_VERSION =
|
|
2
|
-
const WEIGHTS = {
|
|
3
|
-
tags: 30,
|
|
4
|
-
price: 20,
|
|
5
|
-
scenario: 15,
|
|
6
|
-
trust: 20,
|
|
7
|
-
location: 10,
|
|
8
|
-
keyword: 5,
|
|
9
|
-
};
|
|
10
|
-
export function matchDemand(demand, services, limit = 5) {
|
|
11
|
-
const matches = services
|
|
12
|
-
.filter((s) => s.published !== false)
|
|
13
|
-
.map((s) => computeMatchScore(demand, s))
|
|
14
|
-
.filter((m) => m.score >= 60)
|
|
15
|
-
.sort((a, b) => b.score - a.score)
|
|
16
|
-
.slice(0, limit);
|
|
17
|
-
return matches;
|
|
18
|
-
}
|
|
19
|
-
function computeMatchScore(demand, service) {
|
|
20
|
-
const reasons = [];
|
|
21
|
-
const warnings = [];
|
|
22
|
-
let score = 0;
|
|
23
|
-
const tagScore = computeTagScore(demand.tags, service.tags);
|
|
24
|
-
score += tagScore;
|
|
25
|
-
if (tagScore >= WEIGHTS.tags * 0.8) {
|
|
26
|
-
reasons.push(`High tags match (${tagScore}/${WEIGHTS.tags})`);
|
|
27
|
-
}
|
|
28
|
-
const priceScore = computePriceScore(demand.maxPrice, service.price);
|
|
29
|
-
score += priceScore;
|
|
30
|
-
if (priceScore === WEIGHTS.price) {
|
|
31
|
-
reasons.push(`Price within budget`);
|
|
32
|
-
}
|
|
33
|
-
else if (priceScore === 0 && demand.maxPrice && service.price) {
|
|
34
|
-
warnings.push(`Price exceeds budget (${service.price} > ${demand.maxPrice})`);
|
|
35
|
-
}
|
|
36
|
-
const scenarioScore = computeScenarioScore(demand.scenario, service.scenario);
|
|
37
|
-
score += scenarioScore;
|
|
38
|
-
if (scenarioScore === WEIGHTS.scenario) {
|
|
39
|
-
reasons.push(`Industry scenario matches (${service.scenario})`);
|
|
40
|
-
}
|
|
41
|
-
const trustScore = computeTrustScore(service.trustScore, demand.minTrustScore);
|
|
42
|
-
score += trustScore;
|
|
43
|
-
if (service.trustScore !== undefined) {
|
|
44
|
-
if (service.trustScore >= 75) {
|
|
45
|
-
reasons.push(`High trust score (${service.trustScore}/100)`);
|
|
46
|
-
}
|
|
47
|
-
else if (service.trustScore < 50) {
|
|
48
|
-
warnings.push(`Low trust score (${service.trustScore}/100)`);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
const locationScore = computeLocationScore(demand.location, service.location);
|
|
52
|
-
score += locationScore;
|
|
53
|
-
if (locationScore === WEIGHTS.location && demand.location) {
|
|
54
|
-
reasons.push(`Geographic location matches (${service.location})`);
|
|
55
|
-
}
|
|
56
|
-
const keywordScore = computeKeywordScore(demand.keywords, service.description);
|
|
57
|
-
score += keywordScore;
|
|
58
|
-
if (demand.minTrustScore !== undefined && service.trustScore !== undefined) {
|
|
59
|
-
if (service.trustScore < demand.minTrustScore) {
|
|
60
|
-
warnings.push(`Trust score below requirement (${service.trustScore} < ${demand.minTrustScore})`);
|
|
61
|
-
score -= 10;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
return {
|
|
65
|
-
service,
|
|
66
|
-
score: Math.max(0, Math.min(100, score)),
|
|
67
|
-
reasons,
|
|
68
|
-
warnings,
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
function computeTagScore(demandTags, serviceTags) {
|
|
72
|
-
if (!demandTags || !serviceTags || demandTags.length === 0 || serviceTags.length === 0)
|
|
73
|
-
return 0;
|
|
74
|
-
const demandSet = new Set(demandTags.map((t) => t.toLowerCase()));
|
|
75
|
-
const serviceSet = new Set(serviceTags.map((t) => t.toLowerCase()));
|
|
76
|
-
const overlap = [...demandSet].filter((t) => serviceSet.has(t)).length;
|
|
77
|
-
return Math.round((overlap / demandSet.size) * WEIGHTS.tags);
|
|
78
|
-
}
|
|
79
|
-
function computePriceScore(maxPrice, servicePrice) {
|
|
80
|
-
if (!maxPrice || !servicePrice)
|
|
81
|
-
return WEIGHTS.price / 2;
|
|
82
|
-
try {
|
|
83
|
-
const max = BigInt(maxPrice);
|
|
84
|
-
const price = BigInt(servicePrice);
|
|
85
|
-
if (price <= max)
|
|
86
|
-
return WEIGHTS.price;
|
|
87
|
-
if (price <= max * 110n / 100n)
|
|
88
|
-
return WEIGHTS.price * 0.5;
|
|
89
|
-
return 0;
|
|
90
|
-
}
|
|
91
|
-
catch {
|
|
92
|
-
return WEIGHTS.price / 2;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
function computeScenarioScore(demandScenario, serviceScenario) {
|
|
96
|
-
if (!demandScenario || !serviceScenario)
|
|
97
|
-
return 0;
|
|
98
|
-
return demandScenario.toLowerCase() === serviceScenario.toLowerCase() ? WEIGHTS.scenario : 0;
|
|
99
|
-
}
|
|
100
|
-
function computeTrustScore(serviceTrust, minTrust) {
|
|
101
|
-
if (serviceTrust === undefined)
|
|
102
|
-
return WEIGHTS.trust / 2;
|
|
103
|
-
if (serviceTrust >= 75)
|
|
104
|
-
return WEIGHTS.trust;
|
|
105
|
-
if (serviceTrust >= 50)
|
|
106
|
-
return WEIGHTS.trust * 0.6;
|
|
107
|
-
if (serviceTrust >= 25)
|
|
108
|
-
return WEIGHTS.trust * 0.3;
|
|
109
|
-
return 0;
|
|
110
|
-
}
|
|
111
|
-
function computeLocationScore(demandLocation, serviceLocation) {
|
|
112
|
-
if (!demandLocation || !serviceLocation)
|
|
113
|
-
return 0;
|
|
114
|
-
return demandLocation.toLowerCase() === serviceLocation.toLowerCase() ? WEIGHTS.location : 0;
|
|
115
|
-
}
|
|
116
|
-
function computeKeywordScore(keywords, description) {
|
|
117
|
-
if (!keywords || !description || keywords.length === 0)
|
|
118
|
-
return 0;
|
|
119
|
-
const desc = description.toLowerCase();
|
|
120
|
-
const matches = keywords.filter((k) => desc.includes(k.toLowerCase()));
|
|
121
|
-
return Math.min(WEIGHTS.keyword, matches.length);
|
|
122
|
-
}
|
|
123
|
-
export function extractDemandInfo(demandData) {
|
|
124
|
-
return {
|
|
125
|
-
tags: demandData?.tags,
|
|
126
|
-
maxPrice: demandData?.max_price ?? demandData?.maxPrice,
|
|
127
|
-
scenario: demandData?.scenario,
|
|
128
|
-
location: demandData?.location,
|
|
129
|
-
minTrustScore: demandData?.min_trust_score ?? demandData?.minTrustScore,
|
|
130
|
-
keywords: demandData?.keywords,
|
|
131
|
-
};
|
|
132
|
-
}
|
|
1
|
+
export const DEMAND_MATCHING_VERSION=0x1;const WEIGHTS={'tags':0x1e,'price':0x14,'scenario':0xf,'trust':0x14,'location':0xa,'keyword':0x5};export function matchDemand(a,b,c=0x5){const d=b['filter'](e=>e['published']!==![])['map'](e=>computeMatchScore(a,e))['filter'](e=>e['score']>=0x3c)['sort']((e,f)=>f['score']-e['score'])['slice'](0x0,c);return d;}function computeMatchScore(a,b){const c=[],d=[];let e=0x0;const f=computeTagScore(a['tags'],b['tags']);e+=f;f>=WEIGHTS['tags']*0.8&&c['push']('High\x20tags\x20match\x20('+f+'/'+WEIGHTS['tags']+')');const g=computePriceScore(a['maxPrice'],b['price']);e+=g;if(g===WEIGHTS['price'])c['push']('Price\x20within\x20budget');else g===0x0&&a['maxPrice']&&b['price']&&d['push']('Price\x20exceeds\x20budget\x20('+b['price']+'\x20>\x20'+a['maxPrice']+')');const h=computeScenarioScore(a['scenario'],b['scenario']);e+=h;h===WEIGHTS['scenario']&&c['push']('Industry\x20scenario\x20matches\x20('+b['scenario']+')');const i=computeTrustScore(b['trustScore'],a['minTrustScore']);e+=i;if(b['trustScore']!==undefined){if(b['trustScore']>=0x4b)c['push']('High\x20trust\x20score\x20('+b['trustScore']+'/100)');else b['trustScore']<0x32&&d['push']('Low\x20trust\x20score\x20('+b['trustScore']+'/100)');}const j=computeLocationScore(a['location'],b['location']);e+=j;j===WEIGHTS['location']&&a['location']&&c['push']('Geographic\x20location\x20matches\x20('+b['location']+')');const k=computeKeywordScore(a['keywords'],b['description']);return e+=k,a['minTrustScore']!==undefined&&b['trustScore']!==undefined&&(b['trustScore']<a['minTrustScore']&&(d['push']('Trust\x20score\x20below\x20requirement\x20('+b['trustScore']+'\x20<\x20'+a['minTrustScore']+')'),e-=0xa)),{'service':b,'score':Math['max'](0x0,Math['min'](0x64,e)),'reasons':c,'warnings':d};}function computeTagScore(a,b){if(!a||!b||a['length']===0x0||b['length']===0x0)return 0x0;const c=new Set(a['map'](f=>f['toLowerCase']())),d=new Set(b['map'](f=>f['toLowerCase']())),e=[...c]['filter'](f=>d['has'](f))['length'];return Math['round'](e/c['size']*WEIGHTS['tags']);}function computePriceScore(a,b){if(!a||!b)return WEIGHTS['price']/0x2;try{const c=BigInt(a),d=BigInt(b);if(d<=c)return WEIGHTS['price'];if(d<=c*0x6en/0x64n)return WEIGHTS['price']*0.5;return 0x0;}catch{return WEIGHTS['price']/0x2;}}function computeScenarioScore(a,b){if(!a||!b)return 0x0;return a['toLowerCase']()===b['toLowerCase']()?WEIGHTS['scenario']:0x0;}function computeTrustScore(a,b){if(a===undefined)return WEIGHTS['trust']/0x2;if(a>=0x4b)return WEIGHTS['trust'];if(a>=0x32)return WEIGHTS['trust']*0.6;if(a>=0x19)return WEIGHTS['trust']*0.3;return 0x0;}function computeLocationScore(a,b){if(!a||!b)return 0x0;return a['toLowerCase']()===b['toLowerCase']()?WEIGHTS['location']:0x0;}function computeKeywordScore(a,b){if(!a||!b||a['length']===0x0)return 0x0;const c=b['toLowerCase'](),d=a['filter'](e=>c['includes'](e['toLowerCase']()));return Math['min'](WEIGHTS['keyword'],d['length']);}export function extractDemandInfo(a){return{'tags':a?.['tags'],'maxPrice':a?.['max_price']??a?.['maxPrice'],'scenario':a?.['scenario'],'location':a?.['location'],'minTrustScore':a?.['min_trust_score']??a?.['minTrustScore'],'keywords':a?.['keywords']};}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type DemandScene } from "./demand-ledger.js";
|
|
2
|
+
export declare const DEMAND_PUZZLE_VERSION = "1.0.0";
|
|
3
|
+
export interface DemandIntentPuzzle {
|
|
4
|
+
scene?: DemandScene;
|
|
5
|
+
}
|
|
6
|
+
export interface DemandFieldState {
|
|
7
|
+
field: string;
|
|
8
|
+
present: boolean;
|
|
9
|
+
required: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface DemandPuzzle {
|
|
12
|
+
intent: DemandIntentPuzzle;
|
|
13
|
+
fields: DemandFieldState[];
|
|
14
|
+
}
|
|
15
|
+
export interface DemandPuzzleCompleteness {
|
|
16
|
+
complete: boolean;
|
|
17
|
+
missing_required: string[];
|
|
18
|
+
reason: string;
|
|
19
|
+
}
|
|
20
|
+
export interface InitDemandPuzzleInput {
|
|
21
|
+
intent: string;
|
|
22
|
+
description?: string;
|
|
23
|
+
location?: string;
|
|
24
|
+
permission?: string;
|
|
25
|
+
reward_count?: number;
|
|
26
|
+
guard_count?: number;
|
|
27
|
+
}
|
|
28
|
+
export declare function initDemandPuzzleFromIntent(input: InitDemandPuzzleInput): DemandPuzzle;
|
|
29
|
+
export declare function checkDemandPuzzleCompleteness(puzzle: DemandPuzzle): DemandPuzzleCompleteness;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{DEMAND_FIELDS,inferDemandSceneFromIntent}from'./demand-ledger.js';export const DEMAND_PUZZLE_VERSION='1.0.0';export function initDemandPuzzleFromIntent(a){const b=inferDemandSceneFromIntent(a['intent']),c={'description':!!a['description'],'location':!!a['location'],'permission':!!a['permission'],'rewards':(a['reward_count']??0x0)>0x0,'guards':(a['guard_count']??0x0)>0x0},d=DEMAND_FIELDS['map'](e=>({'field':e['field'],'present':e['field']in c?!!c[e['field']]:![],'required':e['required']}));return{'intent':{'scene':b},'fields':d};}export function checkDemandPuzzleCompleteness(a){const b=a['fields']['filter'](d=>d['required']&&!d['present'])['map'](d=>d['field']),c=b['length']===0x0;return{'complete':c,'missing_required':b,'reason':c?'All\x20required\x20demand\x20fields\x20present.':'Missing\x20required:\x20'+b['join'](',\x20')+'.'};}
|
|
@@ -1,240 +1 @@
|
|
|
1
|
-
import { MAX_REWARD_COUNT, MAX_GUARD_COUNT_DEMAND, } from "@wowok/wowok";
|
|
2
|
-
const MAX_FEEDBACK_COUNT = 20;
|
|
3
|
-
const R_DEM_1_01 = {
|
|
4
|
-
rule: {
|
|
5
|
-
id: "R-DEM-01",
|
|
6
|
-
level: "HIGH",
|
|
7
|
-
category: "structural",
|
|
8
|
-
title: `rewards count exceeds MAX_REWARD_COUNT (${MAX_REWARD_COUNT})`,
|
|
9
|
-
description: `The 'rewards' vector is bounded by MAX_REWARD_COUNT=${MAX_REWARD_COUNT} (Move source: demand.move:21). ` +
|
|
10
|
-
`Exceeding this limit aborts with E_MAX_REWARD_COUNT_EXCEEDED (1). Each reward is affiliated via the Registrar, ` +
|
|
11
|
-
`so adding a reward also triggers registrar::affiliation. Use reward_remove/reward_clear to free slots before ` +
|
|
12
|
-
`adding new ones if the limit is reached.`,
|
|
13
|
-
affected_stakeholders: ["creator"],
|
|
14
|
-
scenario: "Caller calls reward_add when 20 rewards are already affiliated",
|
|
15
|
-
mitigation: "Track the current reward count. Before adding a new reward, call reward_remove or reward_clear to " +
|
|
16
|
-
"free a slot. Consider consolidating rewards into a single Reward object with multiple tiers if the " +
|
|
17
|
-
" Demand needs to offer more than 20 distinct reward paths.",
|
|
18
|
-
related_move_error: "E_MAX_REWARD_COUNT_EXCEEDED (1)",
|
|
19
|
-
auto_fixable: false,
|
|
20
|
-
},
|
|
21
|
-
check: (ctx) => {
|
|
22
|
-
if (ctx.reward_count === undefined)
|
|
23
|
-
return null;
|
|
24
|
-
if (ctx.reward_count <= MAX_REWARD_COUNT)
|
|
25
|
-
return null;
|
|
26
|
-
return { ...R_DEM_1_01.rule, evidence: `reward_count=${ctx.reward_count}, limit=${MAX_REWARD_COUNT}` };
|
|
27
|
-
},
|
|
28
|
-
};
|
|
29
|
-
const R_DEM_1_02 = {
|
|
30
|
-
rule: {
|
|
31
|
-
id: "R-DEM-02",
|
|
32
|
-
level: "HIGH",
|
|
33
|
-
category: "structural",
|
|
34
|
-
title: `guards count exceeds MAX_GUARD_COUNT_DEMAND (${MAX_GUARD_COUNT_DEMAND})`,
|
|
35
|
-
description: `The 'guards' vector is bounded by MAX_GUARD_COUNT_DEMAND=${MAX_GUARD_COUNT_DEMAND} (Move source: demand.move:22). ` +
|
|
36
|
-
`Exceeding this limit aborts with E_MAX_GUARD_COUNT_EXCEEDED (2). Each guard carries an optional ` +
|
|
37
|
-
`service_identifier (u8) that routes present_with_passport submissions to a specific Service submission ` +
|
|
38
|
-
`extracted from the Passport. Adding a duplicate guard updates the service_identifier instead of pushing.`,
|
|
39
|
-
affected_stakeholders: ["creator", "presenter"],
|
|
40
|
-
scenario: "Caller calls guard_add when 20 guards are already affiliated and the address is new",
|
|
41
|
-
mitigation: "Track the current guard count. Before adding a new guard, call guard_remove or guard_clear. " +
|
|
42
|
-
"If updating an existing guard's service_identifier, call guard_add with the same address (it updates " +
|
|
43
|
-
"in place rather than pushing).",
|
|
44
|
-
related_move_error: "E_MAX_GUARD_COUNT_EXCEEDED (2)",
|
|
45
|
-
auto_fixable: false,
|
|
46
|
-
},
|
|
47
|
-
check: (ctx) => {
|
|
48
|
-
if (ctx.guard_count === undefined)
|
|
49
|
-
return null;
|
|
50
|
-
if (ctx.guard_count <= MAX_GUARD_COUNT_DEMAND)
|
|
51
|
-
return null;
|
|
52
|
-
return { ...R_DEM_1_02.rule, evidence: `guard_count=${ctx.guard_count}, limit=${MAX_GUARD_COUNT_DEMAND}` };
|
|
53
|
-
},
|
|
54
|
-
};
|
|
55
|
-
const R_DEM_1_03 = {
|
|
56
|
-
rule: {
|
|
57
|
-
id: "R-DEM-03",
|
|
58
|
-
level: "MEDIUM",
|
|
59
|
-
category: "structural",
|
|
60
|
-
title: `feedback batch exceeds MAX_FEEDBACK_COUNT (${MAX_FEEDBACK_COUNT})`,
|
|
61
|
-
description: `The 'feedback' Move function (demand.move:352) updates ONE presenter per call (feedback_imp iterates ` +
|
|
62
|
-
`no vector). The SDK batches multiple feedback calls and caps the batch at MAX_FEEDBACK_COUNT=${MAX_FEEDBACK_COUNT} ` +
|
|
63
|
-
`(SDK-only limit, NOT in onchain-constants.ts — Move has no aggregate feedback-count check). Exceeding the ` +
|
|
64
|
-
`SDK batch limit causes the SDK to refuse the call before transaction building. Each feedback entry writes ` +
|
|
65
|
-
`a String (bounded by common::DESCRIPTION, 4000 chars) and an optional u8 acceptance_score to a presenter's ` +
|
|
66
|
-
`ServiceInfo record.`,
|
|
67
|
-
affected_stakeholders: ["creator"],
|
|
68
|
-
scenario: "Caller attempts to submit 21 feedback entries in a single SDK call",
|
|
69
|
-
mitigation: "Split the feedback batch into chunks of ≤ 20 entries. If the Demand has more than 20 presenters to " +
|
|
70
|
-
"give feedback on, submit multiple transactions. Consider whether bulk feedback is appropriate — " +
|
|
71
|
-
"individualized feedback per presenter is often more meaningful.",
|
|
72
|
-
auto_fixable: false,
|
|
73
|
-
},
|
|
74
|
-
check: (ctx) => {
|
|
75
|
-
if (ctx.feedback_count === undefined)
|
|
76
|
-
return null;
|
|
77
|
-
if (ctx.feedback_count <= MAX_FEEDBACK_COUNT)
|
|
78
|
-
return null;
|
|
79
|
-
return { ...R_DEM_1_03.rule, evidence: `feedback_count=${ctx.feedback_count}, limit=${MAX_FEEDBACK_COUNT}` };
|
|
80
|
-
},
|
|
81
|
-
};
|
|
82
|
-
const R_DEM_2_01 = {
|
|
83
|
-
rule: {
|
|
84
|
-
id: "R-DEM-04",
|
|
85
|
-
level: "HIGH",
|
|
86
|
-
category: "semantic",
|
|
87
|
-
title: "present called without passport when guards vector is non-empty",
|
|
88
|
-
description: "The Move present function (demand.move:100) asserts `vector::is_empty(&self.guards)` and aborts with " +
|
|
89
|
-
"E_NEED_PASSPORT (3) if the guards vector is non-empty. When guards exist, every presenter MUST go through " +
|
|
90
|
-
"present_with_passport (or present_service_with_passport), which routes through present_with_passport_imp. " +
|
|
91
|
-
"That function looks up the specified Guard in the guards vector, calls passport::result_for_guard to " +
|
|
92
|
-
"verify the Passport, and (if service_identifier is set) extracts the submission address from the Passport. " +
|
|
93
|
-
"Calling plain `present` on a guarded Demand always aborts — there is no fallback path.",
|
|
94
|
-
affected_stakeholders: ["presenter", "creator"],
|
|
95
|
-
scenario: "Demand has 2 guards; a presenter calls present() instead of present_with_passport()",
|
|
96
|
-
mitigation: "Before presenting, query the Demand's guards vector. If non-empty, use present_with_passport and " +
|
|
97
|
-
"supply a Guard + Passport. The Guard address must already be in the guards vector (otherwise " +
|
|
98
|
-
"E_GUARD_NOT_FOUND (4) aborts). If service_identifier is set on the matching guard, the submission " +
|
|
99
|
-
"address is extracted from the Passport — do not pass a separate service parameter.",
|
|
100
|
-
related_move_error: "E_NEED_PASSPORT (3)",
|
|
101
|
-
auto_fixable: false,
|
|
102
|
-
},
|
|
103
|
-
check: (ctx) => {
|
|
104
|
-
if (!ctx.using_present_without_passport)
|
|
105
|
-
return null;
|
|
106
|
-
if (!ctx.guards_non_empty)
|
|
107
|
-
return null;
|
|
108
|
-
return { ...R_DEM_2_01.rule, evidence: `guards_non_empty=true, using present (no passport)` };
|
|
109
|
-
},
|
|
110
|
-
};
|
|
111
|
-
const R_DEM_3_01 = {
|
|
112
|
-
rule: {
|
|
113
|
-
id: "R-DEM-05",
|
|
114
|
-
level: "INFO",
|
|
115
|
-
category: "lifecycle",
|
|
116
|
-
title: "um_set_imp Registrar dependency leak — RESOLVED (P-DEM-P1-1)",
|
|
117
|
-
description: "PREVIOUS RISK: um_set_imp (demand.move:139-147) previously set self.um to the new Contact address " +
|
|
118
|
-
"BEFORE disaffiliating the old um, causing the old Contact to retain a stale affiliation record in the " +
|
|
119
|
-
"Registrar. Affiliation_change was not called for the old um, leading to a Registrar dependency leak.\n\n" +
|
|
120
|
-
"FIX (P-DEM-P1-1): um_set_imp now disaffiliates the old um via registrar::disaffiliation BEFORE setting " +
|
|
121
|
-
"the new one. The new um is then affiliated via registrar::affiliation. This matches the pattern used " +
|
|
122
|
-
"by permission_set (which uses affiliation_change). um_none_imp also disaffiliates before clearing.\n\n" +
|
|
123
|
-
"This rule is retained for historical audit and to detect regressions.",
|
|
124
|
-
affected_stakeholders: ["creator", "system"],
|
|
125
|
-
scenario: "Future regression: someone reorders um_set_imp to set new before disaffiliating old",
|
|
126
|
-
mitigation: "Keep the disaffiliate-then-set ordering. The Move invariant: any path that mutates self.um MUST call " +
|
|
127
|
-
"registrar::disaffiliation on the old value before assigning a new one.",
|
|
128
|
-
auto_fixable: false,
|
|
129
|
-
},
|
|
130
|
-
check: (ctx) => {
|
|
131
|
-
if (ctx.constants_synced)
|
|
132
|
-
return null;
|
|
133
|
-
return { ...R_DEM_3_01.rule, evidence: "constants_synced=false (regression check)" };
|
|
134
|
-
},
|
|
135
|
-
};
|
|
136
|
-
const R_DEM_2_02 = {
|
|
137
|
-
rule: {
|
|
138
|
-
id: "R-DEM-06",
|
|
139
|
-
level: "INFO",
|
|
140
|
-
category: "semantic",
|
|
141
|
-
title: "guard_add_imp service_identifier type check skipped on early return — RESOLVED (P-DEM-P1-2)",
|
|
142
|
-
description: "PREVIOUS RISK: guard_add_imp (demand.move:213-242) previously had the service_identifier type check " +
|
|
143
|
-
"AFTER the early-return path that updates an existing guard's service_identifier. When a guard with " +
|
|
144
|
-
"the same address already existed, the function returned before validating the new service_identifier " +
|
|
145
|
-
"against guard::get_submission_object_type. This allowed setting an invalid service_identifier that " +
|
|
146
|
-
"would later fail at present_with_passport time with E_INVALID_SERVICE_OBJECT_TYPE (common.move:13).\n\n" +
|
|
147
|
-
"FIX (P-DEM-P1-2): The service_identifier type check now runs FIRST (demand.move:218-222), BEFORE the " +
|
|
148
|
-
"duplicate-detection loop. common::assert_service_object_type is called for any non-None service_identifier, " +
|
|
149
|
-
"ensuring both the insert and update paths validate the type.\n\n" +
|
|
150
|
-
"This rule is retained for historical audit and to detect regressions.",
|
|
151
|
-
affected_stakeholders: ["creator", "presenter"],
|
|
152
|
-
scenario: "Future regression: someone moves the type check back to after the duplicate-detection loop",
|
|
153
|
-
mitigation: "Keep the type check at the top of guard_add_imp. The Move invariant: any service_identifier provided " +
|
|
154
|
-
"to guard_add MUST be validated via guard::get_submission_object_type + common::assert_service_object_type " +
|
|
155
|
-
"BEFORE any mutation of the guards vector.",
|
|
156
|
-
auto_fixable: false,
|
|
157
|
-
},
|
|
158
|
-
check: (ctx) => {
|
|
159
|
-
if (ctx.constants_synced)
|
|
160
|
-
return null;
|
|
161
|
-
return { ...R_DEM_2_02.rule, evidence: "constants_synced=false (regression check)" };
|
|
162
|
-
},
|
|
163
|
-
};
|
|
164
|
-
const R_DEM_4_01 = {
|
|
165
|
-
rule: {
|
|
166
|
-
id: "R-DEM-07",
|
|
167
|
-
level: "INFO",
|
|
168
|
-
category: "knowledge",
|
|
169
|
-
title: "extractDemandInfo expects non-existent Move fields — RESOLVED (P-DEM-P1-3)",
|
|
170
|
-
description: "PREVIOUS RISK: extractDemandInfo in demand-matching.ts previously read fields (tags, maxPrice, " +
|
|
171
|
-
"scenario, minTrustScore, keywords) that do NOT exist on the Move Demand struct. The Move struct only " +
|
|
172
|
-
"has: description, location, rewards, guards, presenters, um, permission. This caused the matching " +
|
|
173
|
-
"engine to silently produce undefined values when fed raw on-chain query results.\n\n" +
|
|
174
|
-
"FIX (P-DEM-P1-3): extractDemandInfo now documents the caller-enrichment contract. Only `location` maps " +
|
|
175
|
-
"directly to the Move Demand struct; all other fields (tags, maxPrice, scenario, minTrustScore, keywords) " +
|
|
176
|
-
"MUST be injected by the caller before calling matchDemand. The caller is responsible for sourcing " +
|
|
177
|
-
"this data from Service tags, Reward objects, user input, or NLP on the description.\n\n" +
|
|
178
|
-
"This rule is retained for historical audit and to detect regressions.",
|
|
179
|
-
affected_stakeholders: ["system"],
|
|
180
|
-
scenario: "Future regression: someone removes the caller-enrichment contract docs from extractDemandInfo",
|
|
181
|
-
mitigation: "Keep the [caller-enriched] / [on-chain] annotations on DemandInfo fields. The matching engine must " +
|
|
182
|
-
"never query on-chain data directly — it is a pure scoring function over caller-injected data.",
|
|
183
|
-
auto_fixable: false,
|
|
184
|
-
},
|
|
185
|
-
check: (ctx) => {
|
|
186
|
-
if (ctx.constants_synced)
|
|
187
|
-
return null;
|
|
188
|
-
return { ...R_DEM_4_01.rule, evidence: "constants_synced=false (regression check)" };
|
|
189
|
-
},
|
|
190
|
-
};
|
|
191
|
-
const R_DEM_4_02 = {
|
|
192
|
-
rule: {
|
|
193
|
-
id: "R-DEM-08",
|
|
194
|
-
level: "INFO",
|
|
195
|
-
category: "knowledge",
|
|
196
|
-
title: "permission_set not exposed in SDK — RESOLVED (DE-D-2=A)",
|
|
197
|
-
description: "PREVIOUS GAP: The Move permission_set function (demand.move:286) was not exposed as a standalone " +
|
|
198
|
-
"function in the SDK's call/demand.ts. Callers could not change the Permission object bound to a Demand " +
|
|
199
|
-
"after creation.\n\n" +
|
|
200
|
-
"RESOLUTION (DE-D-2=A): permission_set is now exposed via the CallPermission.apply mechanism. The SDK " +
|
|
201
|
-
"wraps permission_set by routing it through CallPermission, which performs the assert_owner check on the " +
|
|
202
|
-
"old Permission and updates the Demand's bound permission. The Registrar's affiliation_change is called " +
|
|
203
|
-
"to migrate the affiliation from the old Permission to the new one.\n\n" +
|
|
204
|
-
"Permission indices for Demand (demand.move:20): 400=DEMAND_NEW, 401=DEMAND_DESCRIPTION, 402=DEMAND_LOCATION, " +
|
|
205
|
-
"404=DEMAND_GUARD, 405=DEMAND_REWARD, 406=DEMAND_FEEDBACK, 407=DEMAND_OWNER_RECEIVE, 408=DEMAND_UM.\n\n" +
|
|
206
|
-
"This rule is retained for historical audit and to detect regressions.",
|
|
207
|
-
affected_stakeholders: ["creator", "system"],
|
|
208
|
-
scenario: "Future regression: someone removes the CallPermission.apply path for permission_set",
|
|
209
|
-
mitigation: "Keep permission_set exposed via CallPermission.apply. The Move invariant: permission_set requires " +
|
|
210
|
-
"permission::assert_owner(old) and MUST call registrar::affiliation_change to migrate the affiliation.",
|
|
211
|
-
auto_fixable: false,
|
|
212
|
-
},
|
|
213
|
-
check: (ctx) => {
|
|
214
|
-
if (ctx.constants_synced)
|
|
215
|
-
return null;
|
|
216
|
-
return { ...R_DEM_4_02.rule, evidence: "constants_synced=false (regression check)" };
|
|
217
|
-
},
|
|
218
|
-
};
|
|
219
|
-
export const DEMAND_RISK_RULES = [
|
|
220
|
-
R_DEM_1_01,
|
|
221
|
-
R_DEM_1_02,
|
|
222
|
-
R_DEM_1_03,
|
|
223
|
-
R_DEM_2_01,
|
|
224
|
-
R_DEM_3_01,
|
|
225
|
-
R_DEM_2_02,
|
|
226
|
-
R_DEM_4_01,
|
|
227
|
-
R_DEM_4_02,
|
|
228
|
-
];
|
|
229
|
-
export function checkDemandRisks(ctx) {
|
|
230
|
-
const risks = [];
|
|
231
|
-
for (const rule of DEMAND_RISK_RULES) {
|
|
232
|
-
const r = rule.check(ctx);
|
|
233
|
-
if (r)
|
|
234
|
-
risks.push(r);
|
|
235
|
-
}
|
|
236
|
-
return risks;
|
|
237
|
-
}
|
|
238
|
-
export function getDemandRiskById(id) {
|
|
239
|
-
return DEMAND_RISK_RULES.find(r => r.rule.id === id)?.rule;
|
|
240
|
-
}
|
|
1
|
+
import{MAX_REWARD_COUNT,MAX_GUARD_COUNT_DEMAND}from'@wowok/wowok';const MAX_FEEDBACK_COUNT=0x14,R_DEM_1_01={'rule':{'id':'R-DEM-01','level':'HIGH','category':'structural','title':'rewards\x20count\x20exceeds\x20MAX_REWARD_COUNT\x20('+MAX_REWARD_COUNT+')','description':'The\x20\x27rewards\x27\x20vector\x20is\x20bounded\x20by\x20MAX_REWARD_COUNT='+MAX_REWARD_COUNT+'\x20(Move\x20source:\x20demand.move:21).\x20'+'Exceeding\x20this\x20limit\x20aborts\x20with\x20E_MAX_REWARD_COUNT_EXCEEDED\x20(1).\x20Each\x20reward\x20is\x20affiliated\x20via\x20the\x20Registrar,\x20'+'so\x20adding\x20a\x20reward\x20also\x20triggers\x20registrar::affiliation.\x20Use\x20reward_remove/reward_clear\x20to\x20free\x20slots\x20before\x20'+'adding\x20new\x20ones\x20if\x20the\x20limit\x20is\x20reached.','affected_stakeholders':['creator'],'scenario':'Caller\x20calls\x20reward_add\x20when\x2020\x20rewards\x20are\x20already\x20affiliated','mitigation':'Track\x20the\x20current\x20reward\x20count.\x20Before\x20adding\x20a\x20new\x20reward,\x20call\x20reward_remove\x20or\x20reward_clear\x20to\x20'+'free\x20a\x20slot.\x20Consider\x20consolidating\x20rewards\x20into\x20a\x20single\x20Reward\x20object\x20with\x20multiple\x20tiers\x20if\x20the\x20'+'\x20Demand\x20needs\x20to\x20offer\x20more\x20than\x2020\x20distinct\x20reward\x20paths.','related_move_error':'E_MAX_REWARD_COUNT_EXCEEDED\x20(1)','auto_fixable':![]},'check':a=>{if(a['reward_count']===undefined)return null;if(a['reward_count']<=MAX_REWARD_COUNT)return null;return{...R_DEM_1_01['rule'],'evidence':'reward_count='+a['reward_count']+',\x20limit='+MAX_REWARD_COUNT};}},R_DEM_1_02={'rule':{'id':'R-DEM-02','level':'HIGH','category':'structural','title':'guards\x20count\x20exceeds\x20MAX_GUARD_COUNT_DEMAND\x20('+MAX_GUARD_COUNT_DEMAND+')','description':'The\x20\x27guards\x27\x20vector\x20is\x20bounded\x20by\x20MAX_GUARD_COUNT_DEMAND='+MAX_GUARD_COUNT_DEMAND+'\x20(Move\x20source:\x20demand.move:22).\x20'+'Exceeding\x20this\x20limit\x20aborts\x20with\x20E_MAX_GUARD_COUNT_EXCEEDED\x20(2).\x20Each\x20guard\x20carries\x20an\x20optional\x20'+'service_identifier\x20(u8)\x20that\x20routes\x20present_with_passport\x20submissions\x20to\x20a\x20specific\x20Service\x20submission\x20'+'extracted\x20from\x20the\x20Passport.\x20Adding\x20a\x20duplicate\x20guard\x20updates\x20the\x20service_identifier\x20instead\x20of\x20pushing.','affected_stakeholders':['creator','presenter'],'scenario':'Caller\x20calls\x20guard_add\x20when\x2020\x20guards\x20are\x20already\x20affiliated\x20and\x20the\x20address\x20is\x20new','mitigation':'Track\x20the\x20current\x20guard\x20count.\x20Before\x20adding\x20a\x20new\x20guard,\x20call\x20guard_remove\x20or\x20guard_clear.\x20'+'If\x20updating\x20an\x20existing\x20guard\x27s\x20service_identifier,\x20call\x20guard_add\x20with\x20the\x20same\x20address\x20(it\x20updates\x20'+'in\x20place\x20rather\x20than\x20pushing).','related_move_error':'E_MAX_GUARD_COUNT_EXCEEDED\x20(2)','auto_fixable':![]},'check':a=>{if(a['guard_count']===undefined)return null;if(a['guard_count']<=MAX_GUARD_COUNT_DEMAND)return null;return{...R_DEM_1_02['rule'],'evidence':'guard_count='+a['guard_count']+',\x20limit='+MAX_GUARD_COUNT_DEMAND};}},R_DEM_1_03={'rule':{'id':'R-DEM-03','level':'MEDIUM','category':'structural','title':'feedback\x20batch\x20exceeds\x20MAX_FEEDBACK_COUNT\x20('+MAX_FEEDBACK_COUNT+')','description':'The\x20\x27feedback\x27\x20Move\x20function\x20(demand.move:352)\x20updates\x20ONE\x20presenter\x20per\x20call\x20(feedback_imp\x20iterates\x20'+('no\x20vector).\x20The\x20SDK\x20batches\x20multiple\x20feedback\x20calls\x20and\x20caps\x20the\x20batch\x20at\x20MAX_FEEDBACK_COUNT='+MAX_FEEDBACK_COUNT+'\x20')+'(SDK-only\x20limit,\x20NOT\x20in\x20onchain-constants.ts\x20—\x20Move\x20has\x20no\x20aggregate\x20feedback-count\x20check).\x20Exceeding\x20the\x20'+'SDK\x20batch\x20limit\x20causes\x20the\x20SDK\x20to\x20refuse\x20the\x20call\x20before\x20transaction\x20building.\x20Each\x20feedback\x20entry\x20writes\x20'+'a\x20String\x20(bounded\x20by\x20common::DESCRIPTION,\x204000\x20chars)\x20and\x20an\x20optional\x20u8\x20acceptance_score\x20to\x20a\x20presenter\x27s\x20'+'ServiceInfo\x20record.','affected_stakeholders':['creator'],'scenario':'Caller\x20attempts\x20to\x20submit\x2021\x20feedback\x20entries\x20in\x20a\x20single\x20SDK\x20call','mitigation':'Split\x20the\x20feedback\x20batch\x20into\x20chunks\x20of\x20≤\x2020\x20entries.\x20If\x20the\x20Demand\x20has\x20more\x20than\x2020\x20presenters\x20to\x20'+'give\x20feedback\x20on,\x20submit\x20multiple\x20transactions.\x20Consider\x20whether\x20bulk\x20feedback\x20is\x20appropriate\x20—\x20'+'individualized\x20feedback\x20per\x20presenter\x20is\x20often\x20more\x20meaningful.','auto_fixable':![]},'check':a=>{if(a['feedback_count']===undefined)return null;if(a['feedback_count']<=MAX_FEEDBACK_COUNT)return null;return{...R_DEM_1_03['rule'],'evidence':'feedback_count='+a['feedback_count']+',\x20limit='+MAX_FEEDBACK_COUNT};}},R_DEM_2_01={'rule':{'id':'R-DEM-04','level':'HIGH','category':'semantic','title':'present\x20called\x20without\x20passport\x20when\x20guards\x20vector\x20is\x20non-empty','description':'The\x20Move\x20present\x20function\x20(demand.move:100)\x20asserts\x20`vector::is_empty(&self.guards)`\x20and\x20aborts\x20with\x20'+'E_NEED_PASSPORT\x20(3)\x20if\x20the\x20guards\x20vector\x20is\x20non-empty.\x20When\x20guards\x20exist,\x20every\x20presenter\x20MUST\x20go\x20through\x20'+'present_with_passport\x20(or\x20present_service_with_passport),\x20which\x20routes\x20through\x20present_with_passport_imp.\x20'+'That\x20function\x20looks\x20up\x20the\x20specified\x20Guard\x20in\x20the\x20guards\x20vector,\x20calls\x20passport::result_for_guard\x20to\x20'+'verify\x20the\x20Passport,\x20and\x20(if\x20service_identifier\x20is\x20set)\x20extracts\x20the\x20submission\x20address\x20from\x20the\x20Passport.\x20'+'Calling\x20plain\x20`present`\x20on\x20a\x20guarded\x20Demand\x20always\x20aborts\x20—\x20there\x20is\x20no\x20fallback\x20path.','affected_stakeholders':['presenter','creator'],'scenario':'Demand\x20has\x202\x20guards;\x20a\x20presenter\x20calls\x20present()\x20instead\x20of\x20present_with_passport()','mitigation':'Before\x20presenting,\x20query\x20the\x20Demand\x27s\x20guards\x20vector.\x20If\x20non-empty,\x20use\x20present_with_passport\x20and\x20'+'supply\x20a\x20Guard\x20+\x20Passport.\x20The\x20Guard\x20address\x20must\x20already\x20be\x20in\x20the\x20guards\x20vector\x20(otherwise\x20'+'E_GUARD_NOT_FOUND\x20(4)\x20aborts).\x20If\x20service_identifier\x20is\x20set\x20on\x20the\x20matching\x20guard,\x20the\x20submission\x20'+'address\x20is\x20extracted\x20from\x20the\x20Passport\x20—\x20do\x20not\x20pass\x20a\x20separate\x20service\x20parameter.','related_move_error':'E_NEED_PASSPORT\x20(3)','auto_fixable':![]},'check':a=>{if(!a['using_present_without_passport'])return null;if(!a['guards_non_empty'])return null;return{...R_DEM_2_01['rule'],'evidence':'guards_non_empty=true,\x20using\x20present\x20(no\x20passport)'};}},R_DEM_3_01={'rule':{'id':'R-DEM-05','level':'INFO','category':'lifecycle','title':'um_set_imp\x20Registrar\x20dependency\x20leak\x20—\x20RESOLVED\x20(P-DEM-P1-1)','description':'PREVIOUS\x20RISK:\x20um_set_imp\x20(demand.move:139-147)\x20previously\x20set\x20self.um\x20to\x20the\x20new\x20Contact\x20address\x20'+'BEFORE\x20disaffiliating\x20the\x20old\x20um,\x20causing\x20the\x20old\x20Contact\x20to\x20retain\x20a\x20stale\x20affiliation\x20record\x20in\x20the\x20'+'Registrar.\x20Affiliation_change\x20was\x20not\x20called\x20for\x20the\x20old\x20um,\x20leading\x20to\x20a\x20Registrar\x20dependency\x20leak.\x0a\x0a'+'FIX\x20(P-DEM-P1-1):\x20um_set_imp\x20now\x20disaffiliates\x20the\x20old\x20um\x20via\x20registrar::disaffiliation\x20BEFORE\x20setting\x20'+'the\x20new\x20one.\x20The\x20new\x20um\x20is\x20then\x20affiliated\x20via\x20registrar::affiliation.\x20This\x20matches\x20the\x20pattern\x20used\x20'+'by\x20permission_set\x20(which\x20uses\x20affiliation_change).\x20um_none_imp\x20also\x20disaffiliates\x20before\x20clearing.\x0a\x0a'+'This\x20rule\x20is\x20retained\x20for\x20historical\x20audit\x20and\x20to\x20detect\x20regressions.','affected_stakeholders':['creator','system'],'scenario':'Future\x20regression:\x20someone\x20reorders\x20um_set_imp\x20to\x20set\x20new\x20before\x20disaffiliating\x20old','mitigation':'Keep\x20the\x20disaffiliate-then-set\x20ordering.\x20The\x20Move\x20invariant:\x20any\x20path\x20that\x20mutates\x20self.um\x20MUST\x20call\x20'+'registrar::disaffiliation\x20on\x20the\x20old\x20value\x20before\x20assigning\x20a\x20new\x20one.','auto_fixable':![]},'check':a=>{if(a['constants_synced'])return null;return{...R_DEM_3_01['rule'],'evidence':'constants_synced=false\x20(regression\x20check)'};}},R_DEM_2_02={'rule':{'id':'R-DEM-06','level':'INFO','category':'semantic','title':'guard_add_imp\x20service_identifier\x20type\x20check\x20skipped\x20on\x20early\x20return\x20—\x20RESOLVED\x20(P-DEM-P1-2)','description':'PREVIOUS\x20RISK:\x20guard_add_imp\x20(demand.move:213-242)\x20previously\x20had\x20the\x20service_identifier\x20type\x20check\x20'+'AFTER\x20the\x20early-return\x20path\x20that\x20updates\x20an\x20existing\x20guard\x27s\x20service_identifier.\x20When\x20a\x20guard\x20with\x20'+'the\x20same\x20address\x20already\x20existed,\x20the\x20function\x20returned\x20before\x20validating\x20the\x20new\x20service_identifier\x20'+'against\x20guard::get_submission_object_type.\x20This\x20allowed\x20setting\x20an\x20invalid\x20service_identifier\x20that\x20'+'would\x20later\x20fail\x20at\x20present_with_passport\x20time\x20with\x20E_INVALID_SERVICE_OBJECT_TYPE\x20(common.move:13).\x0a\x0a'+'FIX\x20(P-DEM-P1-2):\x20The\x20service_identifier\x20type\x20check\x20now\x20runs\x20FIRST\x20(demand.move:218-222),\x20BEFORE\x20the\x20'+'duplicate-detection\x20loop.\x20common::assert_service_object_type\x20is\x20called\x20for\x20any\x20non-None\x20service_identifier,\x20'+'ensuring\x20both\x20the\x20insert\x20and\x20update\x20paths\x20validate\x20the\x20type.\x0a\x0a'+'This\x20rule\x20is\x20retained\x20for\x20historical\x20audit\x20and\x20to\x20detect\x20regressions.','affected_stakeholders':['creator','presenter'],'scenario':'Future\x20regression:\x20someone\x20moves\x20the\x20type\x20check\x20back\x20to\x20after\x20the\x20duplicate-detection\x20loop','mitigation':'Keep\x20the\x20type\x20check\x20at\x20the\x20top\x20of\x20guard_add_imp.\x20The\x20Move\x20invariant:\x20any\x20service_identifier\x20provided\x20'+'to\x20guard_add\x20MUST\x20be\x20validated\x20via\x20guard::get_submission_object_type\x20+\x20common::assert_service_object_type\x20'+'BEFORE\x20any\x20mutation\x20of\x20the\x20guards\x20vector.','auto_fixable':![]},'check':a=>{if(a['constants_synced'])return null;return{...R_DEM_2_02['rule'],'evidence':'constants_synced=false\x20(regression\x20check)'};}},R_DEM_4_01={'rule':{'id':'R-DEM-07','level':'INFO','category':'knowledge','title':'extractDemandInfo\x20expects\x20non-existent\x20Move\x20fields\x20—\x20RESOLVED\x20(P-DEM-P1-3)','description':'PREVIOUS\x20RISK:\x20extractDemandInfo\x20in\x20demand-matching.ts\x20previously\x20read\x20fields\x20(tags,\x20maxPrice,\x20'+'scenario,\x20minTrustScore,\x20keywords)\x20that\x20do\x20NOT\x20exist\x20on\x20the\x20Move\x20Demand\x20struct.\x20The\x20Move\x20struct\x20only\x20'+'has:\x20description,\x20location,\x20rewards,\x20guards,\x20presenters,\x20um,\x20permission.\x20This\x20caused\x20the\x20matching\x20'+'engine\x20to\x20silently\x20produce\x20undefined\x20values\x20when\x20fed\x20raw\x20on-chain\x20query\x20results.\x0a\x0a'+'FIX\x20(P-DEM-P1-3):\x20extractDemandInfo\x20now\x20documents\x20the\x20caller-enrichment\x20contract.\x20Only\x20`location`\x20maps\x20'+'directly\x20to\x20the\x20Move\x20Demand\x20struct;\x20all\x20other\x20fields\x20(tags,\x20maxPrice,\x20scenario,\x20minTrustScore,\x20keywords)\x20'+'MUST\x20be\x20injected\x20by\x20the\x20caller\x20before\x20calling\x20matchDemand.\x20The\x20caller\x20is\x20responsible\x20for\x20sourcing\x20'+'this\x20data\x20from\x20Service\x20tags,\x20Reward\x20objects,\x20user\x20input,\x20or\x20NLP\x20on\x20the\x20description.\x0a\x0a'+'This\x20rule\x20is\x20retained\x20for\x20historical\x20audit\x20and\x20to\x20detect\x20regressions.','affected_stakeholders':['system'],'scenario':'Future\x20regression:\x20someone\x20removes\x20the\x20caller-enrichment\x20contract\x20docs\x20from\x20extractDemandInfo','mitigation':'Keep\x20the\x20[caller-enriched]\x20/\x20[on-chain]\x20annotations\x20on\x20DemandInfo\x20fields.\x20The\x20matching\x20engine\x20must\x20'+'never\x20query\x20on-chain\x20data\x20directly\x20—\x20it\x20is\x20a\x20pure\x20scoring\x20function\x20over\x20caller-injected\x20data.','auto_fixable':![]},'check':a=>{if(a['constants_synced'])return null;return{...R_DEM_4_01['rule'],'evidence':'constants_synced=false\x20(regression\x20check)'};}},R_DEM_4_02={'rule':{'id':'R-DEM-08','level':'INFO','category':'knowledge','title':'permission_set\x20not\x20exposed\x20in\x20SDK\x20—\x20RESOLVED\x20(DE-D-2=A)','description':'PREVIOUS\x20GAP:\x20The\x20Move\x20permission_set\x20function\x20(demand.move:286)\x20was\x20not\x20exposed\x20as\x20a\x20standalone\x20'+'function\x20in\x20the\x20SDK\x27s\x20call/demand.ts.\x20Callers\x20could\x20not\x20change\x20the\x20Permission\x20object\x20bound\x20to\x20a\x20Demand\x20'+'after\x20creation.\x0a\x0a'+'RESOLUTION\x20(DE-D-2=A):\x20permission_set\x20is\x20now\x20exposed\x20via\x20the\x20CallPermission.apply\x20mechanism.\x20The\x20SDK\x20'+'wraps\x20permission_set\x20by\x20routing\x20it\x20through\x20CallPermission,\x20which\x20performs\x20the\x20assert_owner\x20check\x20on\x20the\x20'+'old\x20Permission\x20and\x20updates\x20the\x20Demand\x27s\x20bound\x20permission.\x20The\x20Registrar\x27s\x20affiliation_change\x20is\x20called\x20'+'to\x20migrate\x20the\x20affiliation\x20from\x20the\x20old\x20Permission\x20to\x20the\x20new\x20one.\x0a\x0a'+'Permission\x20indices\x20for\x20Demand\x20(demand.move:20):\x20400=DEMAND_NEW,\x20401=DEMAND_DESCRIPTION,\x20402=DEMAND_LOCATION,\x20'+'404=DEMAND_GUARD,\x20405=DEMAND_REWARD,\x20406=DEMAND_FEEDBACK,\x20407=DEMAND_OWNER_RECEIVE,\x20408=DEMAND_UM.\x0a\x0a'+'This\x20rule\x20is\x20retained\x20for\x20historical\x20audit\x20and\x20to\x20detect\x20regressions.','affected_stakeholders':['creator','system'],'scenario':'Future\x20regression:\x20someone\x20removes\x20the\x20CallPermission.apply\x20path\x20for\x20permission_set','mitigation':'Keep\x20permission_set\x20exposed\x20via\x20CallPermission.apply.\x20The\x20Move\x20invariant:\x20permission_set\x20requires\x20'+'permission::assert_owner(old)\x20and\x20MUST\x20call\x20registrar::affiliation_change\x20to\x20migrate\x20the\x20affiliation.','auto_fixable':![]},'check':a=>{if(a['constants_synced'])return null;return{...R_DEM_4_02['rule'],'evidence':'constants_synced=false\x20(regression\x20check)'};}};export const DEMAND_RISK_RULES=[R_DEM_1_01,R_DEM_1_02,R_DEM_1_03,R_DEM_2_01,R_DEM_3_01,R_DEM_2_02,R_DEM_4_01,R_DEM_4_02];export function checkDemandRisks(a){const b=[];for(const c of DEMAND_RISK_RULES){const d=c['check'](a);if(d)b['push'](d);}return b;}export function getDemandRiskById(a){return DEMAND_RISK_RULES['find'](b=>b['rule']['id']===a)?.['rule'];}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const DEMAND_TEMPLATES_VERSION = "1.0.0";
|
|
2
|
+
export interface DemandTemplate {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
rewards_required: boolean;
|
|
7
|
+
guards_required: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare const DEMAND_TEMPLATES: DemandTemplate[];
|
|
10
|
+
export declare function getDemandTemplateById(id: string): DemandTemplate | undefined;
|
|
11
|
+
export declare function listDemandTemplates(): DemandTemplate[];
|
|
12
|
+
export declare function suggestDemandTemplate(rewards: number, guards: number): DemandTemplate | undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const DEMAND_TEMPLATES_VERSION='1.0.0';export const DEMAND_TEMPLATES=[{'id':'demand_open','name':'Open\x20demand','description':'A\x20public\x20announcement\x20any\x20service\x20can\x20present\x20to\x20(no\x20guards).','rewards_required':![],'guards_required':![]},{'id':'demand_guarded','name':'Guarded\x20demand','description':'Only\x20services\x20passing\x20the\x20present\x20guards\x20may\x20submit.','rewards_required':![],'guards_required':!![]},{'id':'demand_rewarded','name':'Rewarded\x20demand','description':'A\x20demand\x20with\x20monetary\x20rewards\x20to\x20incentivize\x20presentations.','rewards_required':!![],'guards_required':![]}];export function getDemandTemplateById(a){return DEMAND_TEMPLATES['find'](b=>b['id']===a);}export function listDemandTemplates(){return DEMAND_TEMPLATES;}export function suggestDemandTemplate(a,b){if(a>0x0&&b>0x0)return DEMAND_TEMPLATES['find'](c=>c['id']==='demand_rewarded');if(b>0x0)return DEMAND_TEMPLATES['find'](c=>c['id']==='demand_guarded');if(a>0x0)return DEMAND_TEMPLATES['find'](c=>c['id']==='demand_rewarded');return DEMAND_TEMPLATES['find'](c=>c['id']==='demand_open');}
|