@wowok/agent-mcp 2.7.1 → 2.7.2
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/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.js +1 -373
- package/dist/customer/post-purchase.js +1 -351
- package/dist/customer/preorder-compare.js +1 -34
- package/dist/customer/reminder-system.js +1 -316
- package/dist/customer/risk-assessment.js +1 -397
- 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/demand-match.js +1 -153
- 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/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 +1 -0
- package/dist/evaluation/index.js +1 -11
- package/dist/evaluation/node-game.d.ts +31 -3
- package/dist/evaluation/node-game.js +1 -57
- package/dist/evaluation/region.js +1 -36
- package/dist/evaluation/types.d.ts +1 -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.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.js +1 -6
- package/dist/extensions/metric-registry.js +1 -257
- package/dist/extensions/mode-evaluator.js +1 -170
- package/dist/extensions/modes.js +1 -499
- package/dist/extensions/registry.js +1 -717
- package/dist/extensions/types.js +1 -1
- package/dist/harness/auto-escalation.js +1 -68
- package/dist/harness/checkpoint.js +1 -129
- package/dist/harness/index.js +1 -78
- package/dist/harness/plan.js +1 -315
- package/dist/harness/recover.js +1 -139
- 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/arb-risk.js +1 -210
- 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/arbitration-trust.js +1 -117
- package/dist/knowledge/audit-rules.js +1 -141
- package/dist/knowledge/bridge-risk.js +1 -263
- package/dist/knowledge/contact-risk.js +1 -200
- package/dist/knowledge/contact-templates.js +1 -60
- package/dist/knowledge/demand-confirm.js +1 -206
- package/dist/knowledge/demand-matching.js +1 -132
- package/dist/knowledge/demand-risk.js +1 -240
- 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/examples-scanner-cli.js +1 -26
- package/dist/knowledge/examples-scanner.js +1 -843
- 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.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.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/mcp-schema-audit-cli.js +1 -45
- 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-risk.js +1 -249
- package/dist/knowledge/permission-confirm.js +1 -426
- package/dist/knowledge/permission-context.js +1 -224
- 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-risk.js +1 -212
- 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-risk.js +1 -207
- package/dist/knowledge/proof-translation.js +1 -283
- package/dist/knowledge/registrar-risk.js +1 -217
- package/dist/knowledge/repository-confirm.js +1 -286
- package/dist/knowledge/repository-risk.js +1 -373
- package/dist/knowledge/repository-translation.js +1 -445
- package/dist/knowledge/reputation-rules.js +1 -99
- package/dist/knowledge/resource-risk.js +1 -157
- package/dist/knowledge/reward-confirm.js +1 -526
- 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.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.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/util-risk.js +1 -135
- 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/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.js +1 -71
- package/dist/persona/model.js +1 -111
- package/dist/persona/store.js +1 -62
- package/dist/persona/types.d.ts +3 -1
- package/dist/persona/types.js +1 -5
- 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.js +1 -2011
- package/dist/project/game-theory.js +1 -177
- package/dist/project/graph-builder.js +1 -656
- package/dist/project/graph.js +1 -340
- package/dist/project/handlers.js +1 -1784
- package/dist/project/index.d.ts +1 -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.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.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/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.js +1 -88
- package/dist/safety/index.js +1 -3
- package/dist/safety/preview.js +1 -52
- package/dist/schema/call/allocation.js +1 -34
- package/dist/schema/call/arbitration.js +1 -113
- package/dist/schema/call/base.d.ts +15 -15
- package/dist/schema/call/base.js +1 -370
- package/dist/schema/call/bridge-handler.js +1 -265
- package/dist/schema/call/bridge.d.ts +7 -7
- package/dist/schema/call/bridge.js +1 -458
- package/dist/schema/call/contact.js +1 -37
- package/dist/schema/call/demand.js +1 -47
- 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.js +1 -193
- package/dist/schema/call/order.js +1 -35
- package/dist/schema/call/payment.js +1 -37
- package/dist/schema/call/permission-handler.js +1 -54
- package/dist/schema/call/permission.js +1 -105
- package/dist/schema/call/personal.js +1 -78
- package/dist/schema/call/progress.js +1 -47
- package/dist/schema/call/proof.js +1 -33
- package/dist/schema/call/repository.js +1 -77
- package/dist/schema/call/reward.js +1 -30
- package/dist/schema/call/semantic.js +1 -1679
- package/dist/schema/call/service.js +1 -184
- package/dist/schema/call/treasury.js +1 -71
- package/dist/schema/common/index.js +1 -407
- package/dist/schema/config/index.js +1 -68
- package/dist/schema/evaluation/index.d.ts +213 -16
- package/dist/schema/evaluation/index.js +1 -356
- package/dist/schema/index.js +1 -17
- package/dist/schema/intent-radar/index.d.ts +13 -13
- package/dist/schema/intent-radar/index.js +1 -89
- package/dist/schema/local/index.d.ts +21 -21
- package/dist/schema/local/index.js +1 -927
- package/dist/schema/local/wip.js +1 -187
- package/dist/schema/messenger/index.d.ts +7 -7
- package/dist/schema/messenger/index.js +1 -475
- package/dist/schema/operations.d.ts +7 -7
- package/dist/schema/operations.js +1 -520
- package/dist/schema/persona/index.d.ts +54 -54
- package/dist/schema/persona/index.js +1 -148
- package/dist/schema/project/index.d.ts +94 -48
- package/dist/schema/project/index.js +1 -2057
- package/dist/schema/query/index.d.ts +423 -7
- package/dist/schema/query/index.js +1 -1646
- package/dist/schema/schema-query/index.js +1 -104
- package/dist/schema/schema-version.js +1 -76
- package/dist/schema/sync-layer4.js +1 -286
- package/dist/schema/task-status.js +1 -36
- 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.js +1 -77
- package/dist/schema-query/index.js +1 -810
- package/dist/schemas/account_operation.output.json +5 -2
- package/dist/schemas/bridge_operation.output.json +5 -2
- package/dist/schemas/evaluation_operation.output.json +112 -7
- package/dist/schemas/evaluation_operation.schema.json +93 -6
- package/dist/schemas/index.json +1 -1
- package/dist/schemas/intent_radar.output.json +4 -1
- package/dist/schemas/intent_radar.schema.json +4 -1
- package/dist/schemas/local_info_operation.output.json +5 -2
- package/dist/schemas/local_mark_operation.output.json +5 -2
- package/dist/schemas/messenger_operation.output.json +5 -2
- package/dist/schemas/onchain_events.output.json +5 -2
- package/dist/schemas/onchain_operations.output.json +5 -2
- package/dist/schemas/onchain_operations.schema.json +4 -4
- package/dist/schemas/onchain_operations_allocation.schema.json +1 -1
- package/dist/schemas/onchain_operations_machine.schema.json +2 -2
- package/dist/schemas/onchain_operations_service.schema.json +1 -1
- package/dist/schemas/onchain_table_data.output.json +6 -3
- package/dist/schemas/persona_operation.output.json +4 -1
- package/dist/schemas/persona_operation.schema.json +4 -1
- package/dist/schemas/project_operation.output.json +28 -8
- package/dist/schemas/query_toolkit.output.json +8 -5
- package/dist/schemas/wowok_buildin_info.output.json +132 -0
- package/dist/schemas/wowok_buildin_info.schema.json +14 -0
- 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.js +1 -1
- package/dist/tools/handlers/config.js +1 -74
- package/dist/tools/handlers/evaluation.js +1 -123
- package/dist/tools/handlers/file-export.js +1 -90
- 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/index.js +1 -1382
- package/dist/tools/retry.js +1 -85
- package/dist/tools/rules-hook.js +1 -23
- package/dist/tools/shared.js +1 -130
- 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 +4 -2
|
@@ -1,157 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
const R_R_01 = {
|
|
3
|
-
rule: {
|
|
4
|
-
id: "R-RESOURCE-01",
|
|
5
|
-
level: "LOW",
|
|
6
|
-
category: "permission",
|
|
7
|
-
title: "Resource has no Permission — relies entirely on caller-side gating",
|
|
8
|
-
description: "Resource does not associate with a Permission object. All functions are " +
|
|
9
|
-
"public(package) (new/destroy/transfer/tag_set/tag_unset) or public " +
|
|
10
|
-
"(add_object_tags/remove_object_tags/remove_object) — there is no on-chain permission " +
|
|
11
|
-
"check. Access control is delegated to the calling module (Personal, Entity). A " +
|
|
12
|
-
"caller that forgets to enforce its own permission check would let any address mutate " +
|
|
13
|
-
"tags.",
|
|
14
|
-
affected_stakeholders: ["owner", "caller"],
|
|
15
|
-
scenario: "Personal/Entity forgets to gate add_object_tags behind its own permission check",
|
|
16
|
-
mitigation: "Callers (Personal, Entity) MUST enforce their own permission checks before invoking " +
|
|
17
|
-
"Resource functions. Audit the call sites in Personal/Entity to confirm gating.",
|
|
18
|
-
auto_fixable: false,
|
|
19
|
-
},
|
|
20
|
-
check: (ctx) => {
|
|
21
|
-
if (!ctx.expects_resource_permission)
|
|
22
|
-
return null;
|
|
23
|
-
return { ...R_R_01.rule, evidence: "expects_resource_permission=true (Resource has none)" };
|
|
24
|
-
},
|
|
25
|
-
};
|
|
26
|
-
const R_R_02 = {
|
|
27
|
-
rule: {
|
|
28
|
-
id: "R-RESOURCE-02",
|
|
29
|
-
level: "MEDIUM",
|
|
30
|
-
category: "semantic",
|
|
31
|
-
title: "Tag mutations emit no events — external indexers must poll",
|
|
32
|
-
description: "add_object_tags / remove_object_tags / remove_object do not emit events " +
|
|
33
|
-
"(resource.move:89-145). External indexers cannot rely on an event stream to track " +
|
|
34
|
-
"tag changes; they must poll the ParentTable field. This complicates real-time " +
|
|
35
|
-
"notification and consistency.",
|
|
36
|
-
affected_stakeholders: ["owner", "caller"],
|
|
37
|
-
scenario: "Indexer expects a TagAddedEvent but none is emitted; UI fails to refresh",
|
|
38
|
-
mitigation: "External indexers should poll Resource.table on a cadence. Do not build critical UX " +
|
|
39
|
-
"on tag event streams until events are added in a future version.",
|
|
40
|
-
auto_fixable: false,
|
|
41
|
-
},
|
|
42
|
-
check: (ctx) => {
|
|
43
|
-
if (!ctx.expects_tag_events)
|
|
44
|
-
return null;
|
|
45
|
-
return { ...R_R_02.rule, evidence: "expects_tag_events=true (no events emitted)" };
|
|
46
|
-
},
|
|
47
|
-
};
|
|
48
|
-
const R_R_03 = {
|
|
49
|
-
rule: {
|
|
50
|
-
id: "R-RESOURCE-03",
|
|
51
|
-
level: "LOW",
|
|
52
|
-
category: "structural",
|
|
53
|
-
title: `MAX_TAGS_COUNT=${MAX_TAGS_COUNT} permissive — storage cost`,
|
|
54
|
-
description: `A single object's AddressTag.tags vector may hold up to MAX_TAGS_COUNT=${MAX_TAGS_COUNT} ` +
|
|
55
|
-
`entries (resource.move:9). The limit aborts with E_TAGS_COUNT_EXCEEDED (1) only at the ` +
|
|
56
|
-
`boundary. 100 tags per object is generous; loading all tags on every read increases ` +
|
|
57
|
-
`gas and storage cost.`,
|
|
58
|
-
affected_stakeholders: ["owner"],
|
|
59
|
-
scenario: "Caller adds 100 tags to a single object",
|
|
60
|
-
mitigation: "Business layer should self-limit tag count well below 100. For heavy tagging, " +
|
|
61
|
-
"shard across multiple Resource objects or store bulk tags off-chain.",
|
|
62
|
-
related_move_error: "E_TAGS_COUNT_EXCEEDED (1)",
|
|
63
|
-
auto_fixable: false,
|
|
64
|
-
},
|
|
65
|
-
check: (ctx) => {
|
|
66
|
-
if (ctx.tags_count === undefined)
|
|
67
|
-
return null;
|
|
68
|
-
if (ctx.tags_count < MAX_TAGS_COUNT)
|
|
69
|
-
return null;
|
|
70
|
-
return { ...R_R_03.rule, evidence: `tags_count=${ctx.tags_count}, limit=${MAX_TAGS_COUNT}` };
|
|
71
|
-
},
|
|
72
|
-
};
|
|
73
|
-
const R_R_04 = {
|
|
74
|
-
rule: {
|
|
75
|
-
id: "R-RESOURCE-04",
|
|
76
|
-
level: "LOW",
|
|
77
|
-
category: "lifecycle",
|
|
78
|
-
title: "destroy is irreversible — no recovery mechanism",
|
|
79
|
-
description: "Resource.destroy(resource) (resource.move:38) deletes the object and its ParentTable " +
|
|
80
|
-
"in place. There is no archive, no event, and no rollback. Once destroyed, the object " +
|
|
81
|
-
"ID is permanently invalid and all tags are lost.",
|
|
82
|
-
affected_stakeholders: ["owner"],
|
|
83
|
-
scenario: "Caller destroys a Resource that is still referenced by Personal/Entity",
|
|
84
|
-
mitigation: "Confirm no live references exist before calling destroy. SDK should refuse to destroy " +
|
|
85
|
-
"a Resource whose owner address is still referenced by Personal.mark or Entity.resource.",
|
|
86
|
-
auto_fixable: false,
|
|
87
|
-
},
|
|
88
|
-
check: (ctx) => {
|
|
89
|
-
if (!ctx.is_destroy)
|
|
90
|
-
return null;
|
|
91
|
-
return { ...R_R_04.rule, evidence: "is_destroy=true (irreversible)" };
|
|
92
|
-
},
|
|
93
|
-
};
|
|
94
|
-
const R_R_05 = {
|
|
95
|
-
rule: {
|
|
96
|
-
id: "R-RESOURCE-05",
|
|
97
|
-
level: "MEDIUM",
|
|
98
|
-
category: "semantic",
|
|
99
|
-
title: "tag_set returns bool — SDK may ignore the 'already exists' signal",
|
|
100
|
-
description: "tag_set(resource, object, name) returns bool: true if a new tag was added, false if " +
|
|
101
|
-
"the tag already existed (resource.move:47-58). If the SDK ignores the return value, " +
|
|
102
|
-
"callers cannot distinguish 'newly added' from 'duplicate silently skipped'. This " +
|
|
103
|
-
"masks intent and complicates idempotency reasoning.",
|
|
104
|
-
affected_stakeholders: ["caller"],
|
|
105
|
-
scenario: "SDK treats tag_set as void; caller assumes tag was added when it was a duplicate",
|
|
106
|
-
mitigation: "SDK should expose tag_set's bool return value to the caller. UI should show 'tag " +
|
|
107
|
-
"already existed' when false is returned.",
|
|
108
|
-
auto_fixable: true,
|
|
109
|
-
},
|
|
110
|
-
check: (ctx) => {
|
|
111
|
-
if (!ctx.tag_set_return_ignored)
|
|
112
|
-
return null;
|
|
113
|
-
return { ...R_R_05.rule, evidence: "tag_set_return_ignored=true (duplicate not surfaced)" };
|
|
114
|
-
},
|
|
115
|
-
};
|
|
116
|
-
const R_R_06 = {
|
|
117
|
-
rule: {
|
|
118
|
-
id: "R-RESOURCE-06",
|
|
119
|
-
level: "LOW",
|
|
120
|
-
category: "semantic",
|
|
121
|
-
title: "Commented-out switch function (resource.move:71-86) — feature may be intended",
|
|
122
|
-
description: "resource.move:71-86 contains a switch function that is fully commented out. The " +
|
|
123
|
-
"intended behavior is unclear — it may be a planned feature (e.g. bulk tag operations) " +
|
|
124
|
-
"that was disabled. Referencing it as if it were live would silently fail.",
|
|
125
|
-
affected_stakeholders: ["system"],
|
|
126
|
-
scenario: "Developer reads the commented switch and assumes it is callable",
|
|
127
|
-
mitigation: "Confirm with the package maintainers whether the switch should be enabled or removed. " +
|
|
128
|
-
"Do not reference it in SDK or MCP code.",
|
|
129
|
-
auto_fixable: false,
|
|
130
|
-
},
|
|
131
|
-
check: (ctx) => {
|
|
132
|
-
if (!ctx.references_dead_switch)
|
|
133
|
-
return null;
|
|
134
|
-
return { ...R_R_06.rule, evidence: "references_dead_switch=true (commented out in Move)" };
|
|
135
|
-
},
|
|
136
|
-
};
|
|
137
|
-
export const RESOURCE_RISK_RULES = [
|
|
138
|
-
R_R_01,
|
|
139
|
-
R_R_02,
|
|
140
|
-
R_R_03,
|
|
141
|
-
R_R_04,
|
|
142
|
-
R_R_05,
|
|
143
|
-
R_R_06,
|
|
144
|
-
];
|
|
145
|
-
export const RESOURCE_RISK_VERSION = "1.0.0";
|
|
146
|
-
export function checkResourceRisks(ctx) {
|
|
147
|
-
const risks = [];
|
|
148
|
-
for (const rule of RESOURCE_RISK_RULES) {
|
|
149
|
-
const r = rule.check(ctx);
|
|
150
|
-
if (r)
|
|
151
|
-
risks.push(r);
|
|
152
|
-
}
|
|
153
|
-
return risks;
|
|
154
|
-
}
|
|
155
|
-
export function getResourceRiskById(id) {
|
|
156
|
-
return RESOURCE_RISK_RULES.find(r => r.rule.id === id)?.rule;
|
|
157
|
-
}
|
|
1
|
+
import{MAX_TAGS_COUNT}from'@wowok/wowok';const R_R_01={'rule':{'id':'R-RESOURCE-01','level':'LOW','category':'permission','title':'Resource\x20has\x20no\x20Permission\x20—\x20relies\x20entirely\x20on\x20caller-side\x20gating','description':'Resource\x20does\x20not\x20associate\x20with\x20a\x20Permission\x20object.\x20All\x20functions\x20are\x20'+'public(package)\x20(new/destroy/transfer/tag_set/tag_unset)\x20or\x20public\x20'+'(add_object_tags/remove_object_tags/remove_object)\x20—\x20there\x20is\x20no\x20on-chain\x20permission\x20'+'check.\x20Access\x20control\x20is\x20delegated\x20to\x20the\x20calling\x20module\x20(Personal,\x20Entity).\x20A\x20'+'caller\x20that\x20forgets\x20to\x20enforce\x20its\x20own\x20permission\x20check\x20would\x20let\x20any\x20address\x20mutate\x20'+'tags.','affected_stakeholders':['owner','caller'],'scenario':'Personal/Entity\x20forgets\x20to\x20gate\x20add_object_tags\x20behind\x20its\x20own\x20permission\x20check','mitigation':'Callers\x20(Personal,\x20Entity)\x20MUST\x20enforce\x20their\x20own\x20permission\x20checks\x20before\x20invoking\x20'+'Resource\x20functions.\x20Audit\x20the\x20call\x20sites\x20in\x20Personal/Entity\x20to\x20confirm\x20gating.','auto_fixable':![]},'check':a=>{if(!a['expects_resource_permission'])return null;return{...R_R_01['rule'],'evidence':'expects_resource_permission=true\x20(Resource\x20has\x20none)'};}},R_R_02={'rule':{'id':'R-RESOURCE-02','level':'MEDIUM','category':'semantic','title':'Tag\x20mutations\x20emit\x20no\x20events\x20—\x20external\x20indexers\x20must\x20poll','description':'add_object_tags\x20/\x20remove_object_tags\x20/\x20remove_object\x20do\x20not\x20emit\x20events\x20'+'(resource.move:89-145).\x20External\x20indexers\x20cannot\x20rely\x20on\x20an\x20event\x20stream\x20to\x20track\x20'+'tag\x20changes;\x20they\x20must\x20poll\x20the\x20ParentTable\x20field.\x20This\x20complicates\x20real-time\x20'+'notification\x20and\x20consistency.','affected_stakeholders':['owner','caller'],'scenario':'Indexer\x20expects\x20a\x20TagAddedEvent\x20but\x20none\x20is\x20emitted;\x20UI\x20fails\x20to\x20refresh','mitigation':'External\x20indexers\x20should\x20poll\x20Resource.table\x20on\x20a\x20cadence.\x20Do\x20not\x20build\x20critical\x20UX\x20'+'on\x20tag\x20event\x20streams\x20until\x20events\x20are\x20added\x20in\x20a\x20future\x20version.','auto_fixable':![]},'check':a=>{if(!a['expects_tag_events'])return null;return{...R_R_02['rule'],'evidence':'expects_tag_events=true\x20(no\x20events\x20emitted)'};}},R_R_03={'rule':{'id':'R-RESOURCE-03','level':'LOW','category':'structural','title':'MAX_TAGS_COUNT='+MAX_TAGS_COUNT+'\x20permissive\x20—\x20storage\x20cost','description':'A\x20single\x20object\x27s\x20AddressTag.tags\x20vector\x20may\x20hold\x20up\x20to\x20MAX_TAGS_COUNT='+MAX_TAGS_COUNT+'\x20'+'entries\x20(resource.move:9).\x20The\x20limit\x20aborts\x20with\x20E_TAGS_COUNT_EXCEEDED\x20(1)\x20only\x20at\x20the\x20'+'boundary.\x20100\x20tags\x20per\x20object\x20is\x20generous;\x20loading\x20all\x20tags\x20on\x20every\x20read\x20increases\x20'+'gas\x20and\x20storage\x20cost.','affected_stakeholders':['owner'],'scenario':'Caller\x20adds\x20100\x20tags\x20to\x20a\x20single\x20object','mitigation':'Business\x20layer\x20should\x20self-limit\x20tag\x20count\x20well\x20below\x20100.\x20For\x20heavy\x20tagging,\x20'+'shard\x20across\x20multiple\x20Resource\x20objects\x20or\x20store\x20bulk\x20tags\x20off-chain.','related_move_error':'E_TAGS_COUNT_EXCEEDED\x20(1)','auto_fixable':![]},'check':a=>{if(a['tags_count']===undefined)return null;if(a['tags_count']<MAX_TAGS_COUNT)return null;return{...R_R_03['rule'],'evidence':'tags_count='+a['tags_count']+',\x20limit='+MAX_TAGS_COUNT};}},R_R_04={'rule':{'id':'R-RESOURCE-04','level':'LOW','category':'lifecycle','title':'destroy\x20is\x20irreversible\x20—\x20no\x20recovery\x20mechanism','description':'Resource.destroy(resource)\x20(resource.move:38)\x20deletes\x20the\x20object\x20and\x20its\x20ParentTable\x20'+'in\x20place.\x20There\x20is\x20no\x20archive,\x20no\x20event,\x20and\x20no\x20rollback.\x20Once\x20destroyed,\x20the\x20object\x20'+'ID\x20is\x20permanently\x20invalid\x20and\x20all\x20tags\x20are\x20lost.','affected_stakeholders':['owner'],'scenario':'Caller\x20destroys\x20a\x20Resource\x20that\x20is\x20still\x20referenced\x20by\x20Personal/Entity','mitigation':'Confirm\x20no\x20live\x20references\x20exist\x20before\x20calling\x20destroy.\x20SDK\x20should\x20refuse\x20to\x20destroy\x20'+'a\x20Resource\x20whose\x20owner\x20address\x20is\x20still\x20referenced\x20by\x20Personal.mark\x20or\x20Entity.resource.','auto_fixable':![]},'check':a=>{if(!a['is_destroy'])return null;return{...R_R_04['rule'],'evidence':'is_destroy=true\x20(irreversible)'};}},R_R_05={'rule':{'id':'R-RESOURCE-05','level':'MEDIUM','category':'semantic','title':'tag_set\x20returns\x20bool\x20—\x20SDK\x20may\x20ignore\x20the\x20\x27already\x20exists\x27\x20signal','description':'tag_set(resource,\x20object,\x20name)\x20returns\x20bool:\x20true\x20if\x20a\x20new\x20tag\x20was\x20added,\x20false\x20if\x20'+'the\x20tag\x20already\x20existed\x20(resource.move:47-58).\x20If\x20the\x20SDK\x20ignores\x20the\x20return\x20value,\x20'+'callers\x20cannot\x20distinguish\x20\x27newly\x20added\x27\x20from\x20\x27duplicate\x20silently\x20skipped\x27.\x20This\x20'+'masks\x20intent\x20and\x20complicates\x20idempotency\x20reasoning.','affected_stakeholders':['caller'],'scenario':'SDK\x20treats\x20tag_set\x20as\x20void;\x20caller\x20assumes\x20tag\x20was\x20added\x20when\x20it\x20was\x20a\x20duplicate','mitigation':'SDK\x20should\x20expose\x20tag_set\x27s\x20bool\x20return\x20value\x20to\x20the\x20caller.\x20UI\x20should\x20show\x20\x27tag\x20'+'already\x20existed\x27\x20when\x20false\x20is\x20returned.','auto_fixable':!![]},'check':a=>{if(!a['tag_set_return_ignored'])return null;return{...R_R_05['rule'],'evidence':'tag_set_return_ignored=true\x20(duplicate\x20not\x20surfaced)'};}},R_R_06={'rule':{'id':'R-RESOURCE-06','level':'LOW','category':'semantic','title':'Commented-out\x20switch\x20function\x20(resource.move:71-86)\x20—\x20feature\x20may\x20be\x20intended','description':'resource.move:71-86\x20contains\x20a\x20switch\x20function\x20that\x20is\x20fully\x20commented\x20out.\x20The\x20'+'intended\x20behavior\x20is\x20unclear\x20—\x20it\x20may\x20be\x20a\x20planned\x20feature\x20(e.g.\x20bulk\x20tag\x20operations)\x20'+'that\x20was\x20disabled.\x20Referencing\x20it\x20as\x20if\x20it\x20were\x20live\x20would\x20silently\x20fail.','affected_stakeholders':['system'],'scenario':'Developer\x20reads\x20the\x20commented\x20switch\x20and\x20assumes\x20it\x20is\x20callable','mitigation':'Confirm\x20with\x20the\x20package\x20maintainers\x20whether\x20the\x20switch\x20should\x20be\x20enabled\x20or\x20removed.\x20'+'Do\x20not\x20reference\x20it\x20in\x20SDK\x20or\x20MCP\x20code.','auto_fixable':![]},'check':a=>{if(!a['references_dead_switch'])return null;return{...R_R_06['rule'],'evidence':'references_dead_switch=true\x20(commented\x20out\x20in\x20Move)'};}};export const RESOURCE_RISK_RULES=[R_R_01,R_R_02,R_R_03,R_R_04,R_R_05,R_R_06];export const RESOURCE_RISK_VERSION='1.0.0';export function checkResourceRisks(a){const b=[];for(const c of RESOURCE_RISK_RULES){const d=c['check'](a);if(d)b['push'](d);}return b;}export function getResourceRiskById(a){return RESOURCE_RISK_RULES['find'](b=>b['rule']['id']===a)?.['rule'];}
|