@wowok/agent-mcp 3.0.2 → 3.0.4
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/LICENSE +0 -3
- package/dist/harness/recover.js +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/knowledge/account-marks.js +1 -1
- package/dist/knowledge/arbitration-risk.js +1 -1
- package/dist/knowledge/event-semantics.js +1 -1
- package/dist/knowledge/flywheel-loop.d.ts +4 -52
- package/dist/knowledge/flywheel-loop.js +1 -1
- package/dist/knowledge/guard-lint.js +1 -1
- package/dist/knowledge/guard-puzzle.js +1 -1
- package/dist/knowledge/index.d.ts +2 -225
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/machine-risk.js +1 -1
- package/dist/knowledge/machine-translation.js +1 -1
- package/dist/knowledge/onchain-constants.js +1 -1
- package/dist/knowledge/order-ledger.d.ts +2 -2
- package/dist/knowledge/order-ledger.js +1 -1
- package/dist/knowledge/order-puzzle.d.ts +4 -4
- package/dist/knowledge/order-puzzle.js +1 -1
- package/dist/knowledge/order-risk.d.ts +1 -0
- package/dist/knowledge/order-risk.js +1 -1
- package/dist/knowledge/order-templates.d.ts +1 -1
- package/dist/knowledge/order-templates.js +1 -1
- package/dist/knowledge/safety-rules.js +1 -1
- package/dist/knowledge/service-ledger.js +1 -1
- package/dist/knowledge/service-risk.js +1 -1
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/knowledge/workspace-lists.js +1 -1
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/playbooks/service-build/business-puzzle.js +1 -1
- package/dist/playbooks/service-build/context-assembly.d.ts +3 -1
- package/dist/playbooks/service-build/context-assembly.js +1 -1
- package/dist/playbooks/service-build/machine-nodes.d.ts +2 -0
- package/dist/playbooks/service-build/machine-nodes.js +1 -1
- package/dist/playbooks/service-build/machine-panorama.d.ts +7 -0
- package/dist/playbooks/service-build/machine-panorama.js +1 -1
- package/dist/review/machine.js +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/call/allocation.d.ts +5 -0
- package/dist/schema/call/arbitration.d.ts +5 -0
- package/dist/schema/call/base.d.ts +17 -3
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/bridge.d.ts +29 -0
- package/dist/schema/call/bridge.js +1 -1
- package/dist/schema/call/contact.d.ts +5 -0
- package/dist/schema/call/demand.d.ts +5 -0
- package/dist/schema/call/error-codes.d.ts +2 -0
- package/dist/schema/call/error-codes.js +1 -0
- package/dist/schema/call/guard.d.ts +19 -4
- package/dist/schema/call/machine.d.ts +10 -0
- package/dist/schema/call/order.d.ts +5 -0
- package/dist/schema/call/payment.d.ts +5 -0
- package/dist/schema/call/permission.d.ts +5 -0
- package/dist/schema/call/personal.d.ts +5 -0
- package/dist/schema/call/progress.d.ts +5 -0
- package/dist/schema/call/proof.d.ts +10 -0
- package/dist/schema/call/repository.d.ts +5 -0
- package/dist/schema/call/reward.d.ts +5 -0
- package/dist/schema/call/semantic.d.ts +9 -1
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.d.ts +5 -0
- package/dist/schema/call/treasury.d.ts +5 -0
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/goal/index.d.ts +3 -3
- package/dist/schema/goal/planning.d.ts +2 -2
- package/dist/schema/index.d.ts +1 -0
- package/dist/schema/index.js +1 -1
- package/dist/schema/industry-pack/index.d.ts +4 -4
- package/dist/schema/industry-pack/modes.d.ts +4 -4
- package/dist/schema/interaction/index.d.ts +34 -0
- package/dist/schema/interaction/index.js +1 -0
- package/dist/schema/local/index.d.ts +558 -0
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/messenger/index.d.ts +31 -25
- package/dist/schema/messenger/index.js +1 -1
- package/dist/schema/operations.d.ts +91 -1
- package/dist/schema/operations.js +1 -1
- package/dist/schema/persona/index.d.ts +2 -2
- package/dist/schema/query/bi.d.ts +0 -4
- package/dist/schema/query/bi.js +1 -1
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-query/index.d.ts +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/trust/index.d.ts +3 -3
- package/dist/schema/workspace/index.d.ts +1 -1
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/account_operation.output.json +4 -0
- package/dist/schemas/ask_user.output.json +54 -0
- package/dist/schemas/ask_user.schema.json +78 -0
- package/dist/schemas/bridge_operation.output.json +4 -0
- package/dist/schemas/bridge_operation.schema.json +50 -5
- package/dist/schemas/guard2file.schema.json +10 -1
- package/dist/schemas/index.json +13 -1
- package/dist/schemas/local_history_operation.output.json +1458 -0
- package/dist/schemas/local_history_operation.schema.json +105 -0
- package/dist/schemas/local_info_operation.output.json +4 -0
- package/dist/schemas/local_mark_operation.output.json +4 -0
- package/dist/schemas/machineNode2file.schema.json +10 -1
- package/dist/schemas/messenger_operation.output.json +8 -0
- package/dist/schemas/messenger_operation.schema.json +8 -0
- package/dist/schemas/onchain_events.output.json +2 -2
- package/dist/schemas/onchain_operations.output.json +4 -1
- package/dist/schemas/onchain_operations.schema.json +210 -28
- package/dist/schemas/onchain_operations_allocation.schema.json +10 -1
- package/dist/schemas/onchain_operations_arbitration.schema.json +10 -1
- package/dist/schemas/onchain_operations_contact.schema.json +10 -1
- package/dist/schemas/onchain_operations_demand.schema.json +10 -1
- package/dist/schemas/onchain_operations_gen_passport.schema.json +10 -1
- package/dist/schemas/onchain_operations_gen_proof.schema.json +10 -1
- package/dist/schemas/onchain_operations_guard.schema.json +40 -11
- package/dist/schemas/onchain_operations_machine.schema.json +10 -1
- package/dist/schemas/onchain_operations_order.schema.json +10 -1
- package/dist/schemas/onchain_operations_payment.schema.json +10 -1
- package/dist/schemas/onchain_operations_permission.schema.json +10 -1
- package/dist/schemas/onchain_operations_personal.schema.json +10 -1
- package/dist/schemas/onchain_operations_progress.schema.json +10 -1
- package/dist/schemas/onchain_operations_proof.schema.json +10 -1
- package/dist/schemas/onchain_operations_repository.schema.json +10 -1
- package/dist/schemas/onchain_operations_reward.schema.json +10 -1
- package/dist/schemas/onchain_operations_service.schema.json +10 -1
- package/dist/schemas/onchain_operations_treasury.schema.json +10 -1
- package/dist/schemas/query_toolkit.output.json +17 -16
- package/dist/schemas/query_toolkit.schema.json +1 -1
- package/dist/tools/handlers/ask-user.d.ts +3 -0
- package/dist/tools/handlers/ask-user.js +1 -0
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/local.d.ts +1 -0
- package/dist/tools/handlers/local.js +1 -1
- package/dist/tools/handlers/messenger.js +1 -1
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/index.d.ts +2 -2
- package/dist/tools/index.js +1 -1
- package/dist/tools/registry/bridge.js +1 -1
- package/dist/tools/registry/business.js +1 -1
- package/dist/tools/registry/interaction.d.ts +2 -0
- package/dist/tools/registry/interaction.js +1 -0
- package/dist/tools/registry/local.js +1 -1
- package/dist/tools/registry/monitor.js +1 -1
- package/dist/tools/registry/onchain.js +1 -1
- package/dist/tools/registry/query.js +1 -1
- package/dist/tools/shared.js +1 -1
- package/dist/tools/types.d.ts +7 -1
- package/dist/tools/wrap.d.ts +3 -3
- package/dist/tools/wrap.js +1 -1
- package/package.json +2 -2
- package/dist/knowledge/allocation-confirm.d.ts +0 -115
- package/dist/knowledge/allocation-confirm.js +0 -1
- package/dist/knowledge/allocation-context.d.ts +0 -58
- package/dist/knowledge/allocation-context.js +0 -1
- package/dist/knowledge/allocation-translation.d.ts +0 -72
- package/dist/knowledge/allocation-translation.js +0 -1
- package/dist/knowledge/arb-confirm.d.ts +0 -28
- package/dist/knowledge/arb-confirm.js +0 -1
- package/dist/knowledge/arb-translation.d.ts +0 -48
- package/dist/knowledge/arb-translation.js +0 -1
- package/dist/knowledge/arbitration-confirm.d.ts +0 -135
- package/dist/knowledge/arbitration-confirm.js +0 -1
- package/dist/knowledge/arbitration-context.d.ts +0 -81
- package/dist/knowledge/arbitration-context.js +0 -1
- package/dist/knowledge/arbitration-translation.d.ts +0 -91
- package/dist/knowledge/arbitration-translation.js +0 -1
- package/dist/knowledge/bridge-confirm.d.ts +0 -26
- package/dist/knowledge/bridge-confirm.js +0 -1
- package/dist/knowledge/bridge-translation.d.ts +0 -37
- package/dist/knowledge/bridge-translation.js +0 -1
- package/dist/knowledge/contact-confirm.d.ts +0 -27
- package/dist/knowledge/contact-confirm.js +0 -1
- package/dist/knowledge/contact-translation.d.ts +0 -39
- package/dist/knowledge/contact-translation.js +0 -1
- package/dist/knowledge/demand-confirm.d.ts +0 -32
- package/dist/knowledge/demand-confirm.js +0 -1
- package/dist/knowledge/demand-context.d.ts +0 -17
- package/dist/knowledge/demand-context.js +0 -1
- package/dist/knowledge/demand-ledger.d.ts +0 -26
- package/dist/knowledge/demand-ledger.js +0 -1
- package/dist/knowledge/demand-puzzle.d.ts +0 -29
- package/dist/knowledge/demand-puzzle.js +0 -1
- package/dist/knowledge/demand-templates.d.ts +0 -12
- package/dist/knowledge/demand-templates.js +0 -1
- package/dist/knowledge/demand-translation.d.ts +0 -55
- package/dist/knowledge/demand-translation.js +0 -1
- package/dist/knowledge/examples-scanner-cli.d.ts +0 -1
- package/dist/knowledge/examples-scanner-cli.js +0 -1
- package/dist/knowledge/examples-scanner.d.ts +0 -121
- package/dist/knowledge/examples-scanner.js +0 -1
- package/dist/knowledge/glossary.d.ts +0 -18
- package/dist/knowledge/glossary.js +0 -1
- package/dist/knowledge/guard-bytecode-spec.d.ts +0 -82
- package/dist/knowledge/guard-bytecode-spec.js +0 -1
- package/dist/knowledge/guard-confirm.d.ts +0 -86
- package/dist/knowledge/guard-confirm.js +0 -1
- package/dist/knowledge/immutability.d.ts +0 -11
- package/dist/knowledge/immutability.js +0 -1
- package/dist/knowledge/machine-confirm.d.ts +0 -102
- package/dist/knowledge/machine-confirm.js +0 -1
- package/dist/knowledge/machine-context.d.ts +0 -160
- package/dist/knowledge/machine-context.js +0 -1
- package/dist/knowledge/machine-render.d.ts +0 -41
- package/dist/knowledge/machine-render.js +0 -1
- package/dist/knowledge/mcp-schema-audit-cli.d.ts +0 -1
- package/dist/knowledge/mcp-schema-audit-cli.js +0 -1
- package/dist/knowledge/mcp-schema-audit.d.ts +0 -91
- package/dist/knowledge/mcp-schema-audit.js +0 -1
- package/dist/knowledge/messenger-guard-guidance.d.ts +0 -17
- package/dist/knowledge/messenger-guard-guidance.js +0 -1
- package/dist/knowledge/order-confirm.d.ts +0 -115
- package/dist/knowledge/order-confirm.js +0 -1
- package/dist/knowledge/order-context.d.ts +0 -66
- package/dist/knowledge/order-context.js +0 -1
- package/dist/knowledge/order-translation.d.ts +0 -78
- package/dist/knowledge/order-translation.js +0 -1
- package/dist/knowledge/overrides-loader.d.ts +0 -13
- package/dist/knowledge/overrides-loader.js +0 -1
- package/dist/knowledge/passport-confirm.d.ts +0 -130
- package/dist/knowledge/passport-confirm.js +0 -1
- package/dist/knowledge/passport-context.d.ts +0 -59
- package/dist/knowledge/passport-context.js +0 -1
- package/dist/knowledge/passport-puzzle.d.ts +0 -108
- package/dist/knowledge/passport-puzzle.js +0 -1
- package/dist/knowledge/passport-risk.d.ts +0 -70
- package/dist/knowledge/passport-risk.js +0 -1
- package/dist/knowledge/passport-translation.d.ts +0 -68
- package/dist/knowledge/passport-translation.js +0 -1
- package/dist/knowledge/payment-confirm.d.ts +0 -26
- package/dist/knowledge/payment-confirm.js +0 -1
- package/dist/knowledge/payment-translation.d.ts +0 -37
- package/dist/knowledge/payment-translation.js +0 -1
- package/dist/knowledge/permission-confirm.d.ts +0 -110
- package/dist/knowledge/permission-confirm.js +0 -1
- package/dist/knowledge/permission-context.d.ts +0 -69
- package/dist/knowledge/permission-context.js +0 -1
- package/dist/knowledge/permission-translation.d.ts +0 -57
- package/dist/knowledge/permission-translation.js +0 -1
- package/dist/knowledge/personal-confirm.d.ts +0 -29
- package/dist/knowledge/personal-confirm.js +0 -1
- package/dist/knowledge/personal-translation.d.ts +0 -37
- package/dist/knowledge/personal-translation.js +0 -1
- package/dist/knowledge/process-model.d.ts +0 -14
- package/dist/knowledge/process-model.js +0 -1
- package/dist/knowledge/progress-confirm.d.ts +0 -108
- package/dist/knowledge/progress-confirm.js +0 -1
- package/dist/knowledge/progress-context.d.ts +0 -123
- package/dist/knowledge/progress-context.js +0 -1
- package/dist/knowledge/progress-translation.d.ts +0 -52
- package/dist/knowledge/progress-translation.js +0 -1
- package/dist/knowledge/proof-confirm.d.ts +0 -31
- package/dist/knowledge/proof-confirm.js +0 -1
- package/dist/knowledge/proof-context.d.ts +0 -17
- package/dist/knowledge/proof-context.js +0 -1
- package/dist/knowledge/proof-ledger.d.ts +0 -34
- package/dist/knowledge/proof-ledger.js +0 -1
- package/dist/knowledge/proof-puzzle.d.ts +0 -35
- package/dist/knowledge/proof-puzzle.js +0 -1
- package/dist/knowledge/proof-templates.d.ts +0 -22
- package/dist/knowledge/proof-templates.js +0 -1
- package/dist/knowledge/proof-translation.d.ts +0 -52
- package/dist/knowledge/proof-translation.js +0 -1
- package/dist/knowledge/registrar-confirm.d.ts +0 -26
- package/dist/knowledge/registrar-confirm.js +0 -1
- package/dist/knowledge/registrar-translation.d.ts +0 -37
- package/dist/knowledge/registrar-translation.js +0 -1
- package/dist/knowledge/repository-confirm.d.ts +0 -40
- package/dist/knowledge/repository-confirm.js +0 -1
- package/dist/knowledge/repository-context.d.ts +0 -12
- package/dist/knowledge/repository-context.js +0 -1
- package/dist/knowledge/repository-ledger.d.ts +0 -25
- package/dist/knowledge/repository-ledger.js +0 -1
- package/dist/knowledge/repository-puzzle.d.ts +0 -30
- package/dist/knowledge/repository-puzzle.js +0 -1
- package/dist/knowledge/repository-templates.d.ts +0 -14
- package/dist/knowledge/repository-templates.js +0 -1
- package/dist/knowledge/repository-translation.d.ts +0 -58
- package/dist/knowledge/repository-translation.js +0 -1
- package/dist/knowledge/resource-confirm.d.ts +0 -25
- package/dist/knowledge/resource-confirm.js +0 -1
- package/dist/knowledge/resource-translation.d.ts +0 -37
- package/dist/knowledge/resource-translation.js +0 -1
- package/dist/knowledge/reward-confirm.d.ts +0 -116
- package/dist/knowledge/reward-confirm.js +0 -1
- package/dist/knowledge/reward-context.d.ts +0 -127
- package/dist/knowledge/reward-context.js +0 -1
- package/dist/knowledge/reward-translation.d.ts +0 -58
- package/dist/knowledge/reward-translation.js +0 -1
- package/dist/knowledge/service-confirm.d.ts +0 -161
- package/dist/knowledge/service-confirm.js +0 -1
- package/dist/knowledge/service-context.d.ts +0 -66
- package/dist/knowledge/service-context.js +0 -1
- package/dist/knowledge/service-translation.d.ts +0 -103
- package/dist/knowledge/service-translation.js +0 -1
- package/dist/knowledge/treasury-confirm.d.ts +0 -133
- package/dist/knowledge/treasury-confirm.js +0 -1
- package/dist/knowledge/treasury-context.d.ts +0 -64
- package/dist/knowledge/treasury-context.js +0 -1
- package/dist/knowledge/treasury-translation.d.ts +0 -78
- package/dist/knowledge/treasury-translation.js +0 -1
- package/dist/knowledge/util-confirm.d.ts +0 -24
- package/dist/knowledge/util-confirm.js +0 -1
- package/dist/knowledge/util-translation.d.ts +0 -39
- package/dist/knowledge/util-translation.js +0 -1
- package/dist/loop-engineering/aggregate.d.ts +0 -50
- package/dist/loop-engineering/aggregate.js +0 -1
- package/dist/loop-engineering/context-collect.d.ts +0 -7
- package/dist/loop-engineering/context-collect.js +0 -1
- package/dist/loop-engineering/diagnose.d.ts +0 -22
- package/dist/loop-engineering/diagnose.js +0 -1
- package/dist/loop-engineering/improve.d.ts +0 -55
- package/dist/loop-engineering/improve.js +0 -1
- package/dist/loop-engineering/index.d.ts +0 -4
- package/dist/loop-engineering/index.js +0 -1
- package/dist/loop-engineering/pipeline.d.ts +0 -17
- package/dist/loop-engineering/pipeline.js +0 -1
- package/dist/schema/utils/object-type-utils.d.ts +0 -12
- package/dist/schema/utils/object-type-utils.js +0 -1
- package/dist/telemetry/index.d.ts +0 -19
- package/dist/telemetry/index.js +0 -1
- package/dist/telemetry/redact.d.ts +0 -2
- package/dist/telemetry/redact.js +0 -1
- package/dist/telemetry/storage.d.ts +0 -8
- package/dist/telemetry/storage.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{MAX_IM_COUNT}from'@wowok/wowok';export const CONTACT_CONFIRM_VERSION='1.0.0';function checkDescription(a){const b=!!a['description']&&a['description']['length']>0x0;return{'id':'C-CONTACT-01','severity':b?'info':'warn','title':'description\x20is\x20provided\x20and\x20non-empty','description':'description\x20is\x20validated\x20by\x20common::DESCRIPTION\x20at\x20creation\x20(contact.move\x20new_imp).\x20Empty\x20string\x20is\x20technically\x20valid\x20but\x20makes\x20the\x20Contact\x20hard\x20to\x20identify.','passed':b,'evidence':a['description']===undefined?'undefined':'length='+a['description']['length'],'fix_hint':'Provide\x20a\x20one-line\x20summary\x20of\x20this\x20Contact\x27s\x20purpose.'};}function checkLocation(a){if(a['location']===undefined)return{'id':'C-CONTACT-02','severity':'info','title':'location\x20defaults\x20to\x20empty\x20string\x20(unset)','description':'A\x20fresh\x20Contact\x20has\x20location=\x22\x22.\x20Empty\x20means\x20\x27not\x20specified\x27,\x20not\x20\x27global\x27.','passed':!![],'evidence':'unset\x20→\x20empty\x20string'};const b=a['location']['length']>0x0;return{'id':'C-CONTACT-02','severity':b?'info':'warn','title':'location\x20is\x20set\x20(validated\x20by\x20common::LONG_NAME)','description':'location_set\x20uses\x20common::LONG_NAME\x20validation.\x20Empty\x20location\x20is\x20treated\x20as\x20unset.','passed':b,'evidence':'length='+a['location']['length'],'fix_hint':'Set\x20an\x20explicit\x20region\x20via\x20location_set,\x20or\x20leave\x20unset\x20to\x20mean\x20\x27not\x20specified\x27.'};}function checkImCount(a){if(a['im_count']===undefined)return{'id':'C-CONTACT-03','severity':'info','title':'im_count\x20below\x20MAX_IM_COUNT\x20('+MAX_IM_COUNT+')','description':'im_add\x20aborts\x20with\x20E_IM_COUNT_EXCEEDED\x20(1)\x20when\x20the\x20IM\x20list\x20reaches\x20the\x20cap.','passed':!![],'evidence':'not\x20provided'};const b=a['im_count']<MAX_IM_COUNT;return{'id':'C-CONTACT-03','severity':b?'info':'block','title':'im_count\x20below\x20MAX_IM_COUNT\x20('+MAX_IM_COUNT+')','description':'Contact\x20may\x20hold\x20up\x20to\x20MAX_IM_COUNT='+MAX_IM_COUNT+'\x20IM\x20entries.\x20im_add\x20aborts\x20with\x20E_IM_COUNT_EXCEEDED\x20(1)\x20at\x20the\x20boundary.','passed':b,'evidence':'im_count='+a['im_count']+',\x20limit='+MAX_IM_COUNT,'fix_hint':'Remove\x20stale\x20IM\x20entries\x20(im_remove/im_clear)\x20before\x20adding\x20more.'};}function checkChangeStatus(a){if(!a['change_status_from_non_member'])return{'id':'C-CONTACT-04','severity':'info','title':'change_status\x20caller\x20is\x20an\x20IM\x20member','description':'change_status\x20only\x20updates\x20the\x20caller\x27s\x20own\x20status\x20if\x20the\x20caller\x20is\x20in\x20ims[];\x20otherwise\x20it\x20silently\x20succeeds\x20with\x20no\x20state\x20change.','passed':!![],'evidence':'caller\x20assumed\x20member'};return{'id':'C-CONTACT-04','severity':'warn','title':'change_status\x20from\x20non-IM\x20member\x20will\x20be\x20silently\x20ignored','description':'change_status\x20does\x20not\x20abort\x20for\x20non-members\x20—\x20it\x20silently\x20no-ops.\x20The\x20caller\x20gets\x20no\x20feedback.','passed':![],'evidence':'change_status_from_non_member=true','fix_hint':'Pre-validate\x20IM\x20membership\x20before\x20calling\x20change_status.'};}function checkDeleteOrder(a){const b=!!a['bound_to_permission_um'];if(!a['is_destroy'])return{'id':'C-CONTACT-05','severity':b?'info':'info','title':'Contact\x20deletion\x20/\x20Permission.um\x20binding','description':b?'Contact\x20is\x20bound\x20as\x20a\x20Permission.um;\x20unbind\x20before\x20deletion.':'Contact\x20is\x20not\x20bound\x20as\x20a\x20Permission.um.','passed':!![],'evidence':b?'bound_to_permission_um=true':'not\x20bound'};return{'id':'C-CONTACT-05','severity':b?'block':'warn','title':'Deletion\x20order:\x20unbind\x20Permission.um\x20before\x20deleting\x20Contact','description':'permission_um_set\x20creates\x20a\x20bidirectional\x20dependency\x20(Permission.um\x20→\x20Contact,\x20Contact.permission\x20→\x20Permission).\x20Deleting\x20a\x20bound\x20Contact\x20leaves\x20a\x20dangling\x20Permission.um.','passed':!b,'evidence':b?'bound_to_permission_um=true\x20(unbind\x20first)':'not\x20bound','fix_hint':'Call\x20permission_um_set(null)\x20to\x20unbind,\x20then\x20delete\x20the\x20Contact.'};}export function preCheckContactOp(a){return[checkDescription(a),checkLocation(a),checkImCount(a),checkChangeStatus(a),checkDeleteOrder(a)];}export function canProceedContactOp(a){const b=preCheckContactOp(a);return{'canProceed':b['every'](c=>c['severity']!=='block'||c['passed']),'blockers':b['filter'](c=>c['severity']==='block'&&!c['passed']),'warnings':b['filter'](c=>c['severity']==='warn'&&!c['passed']),'info':b['filter'](c=>c['severity']==='info')};}export function formatContactOpSummary(a){const {canProceed:b,blockers:c,warnings:d}=canProceedContactOp(a),e=[b?'✓\x20Contact\x20operation\x20pre-check\x20PASSED':'✗\x20Contact\x20operation\x20pre-check\x20FAILED',''];return c['length']>0x0&&(e['push']('BLOCKERS:'),c['forEach'](f=>e['push']('\x20\x20['+f['id']+']\x20'+f['title']+'\x20—\x20'+(f['evidence']??''))),e['push']('')),d['length']>0x0&&(e['push']('WARNINGS:'),d['forEach'](f=>e['push']('\x20\x20['+f['id']+']\x20'+f['title']+'\x20—\x20'+(f['evidence']??'')))),e['join']('\x0a');}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
export declare const CONTACT_TRANSLATION_VERSION = "1.0.0";
|
|
2
|
-
export interface SemanticToContactSchemaRule {
|
|
3
|
-
id: string;
|
|
4
|
-
pattern_name: string;
|
|
5
|
-
semantic_intent: string;
|
|
6
|
-
match_keywords: string[];
|
|
7
|
-
required_fields: string[];
|
|
8
|
-
optional_fields: string[];
|
|
9
|
-
example: Record<string, unknown>;
|
|
10
|
-
}
|
|
11
|
-
export declare const SEMANTIC_TO_CONTACT_SCHEMA_RULES: SemanticToContactSchemaRule[];
|
|
12
|
-
export interface ContactFieldTranslation {
|
|
13
|
-
field_name: string;
|
|
14
|
-
value_type: string;
|
|
15
|
-
semantic: string;
|
|
16
|
-
format_example: string;
|
|
17
|
-
validation_rules: string[];
|
|
18
|
-
}
|
|
19
|
-
export declare const CONTACT_FIELD_TRANSLATIONS: ContactFieldTranslation[];
|
|
20
|
-
export interface ContactConstraintRule {
|
|
21
|
-
id: string;
|
|
22
|
-
name: string;
|
|
23
|
-
description: string;
|
|
24
|
-
related_field: string;
|
|
25
|
-
}
|
|
26
|
-
export declare const CONTACT_CONSTRAINT_RULES: ContactConstraintRule[];
|
|
27
|
-
export interface ContactExplainInput {
|
|
28
|
-
description?: string;
|
|
29
|
-
location?: string;
|
|
30
|
-
im_count?: number;
|
|
31
|
-
bound_to_permission_um?: boolean;
|
|
32
|
-
}
|
|
33
|
-
export interface ContactExplanation {
|
|
34
|
-
summary: string;
|
|
35
|
-
location_status: string;
|
|
36
|
-
im_status: string;
|
|
37
|
-
warnings: string[];
|
|
38
|
-
}
|
|
39
|
-
export declare function explainContact(input: ContactExplainInput): ContactExplanation;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{MAX_IM_COUNT}from'@wowok/wowok';export const CONTACT_TRANSLATION_VERSION='1.0.0';export const SEMANTIC_TO_CONTACT_SCHEMA_RULES=[{'id':'P-CONTACT-01','pattern_name':'Create\x20contact','semantic_intent':'Create\x20a\x20shared\x20Contact\x20object\x20owned\x20by\x20a\x20Permission\x20(index\x20450).','match_keywords':['create\x20contact','new\x20contact','customer\x20service'],'required_fields':['permission','description'],'optional_fields':[],'example':{'description':'Customer\x20service\x20contact'}},{'id':'P-CONTACT-02','pattern_name':'Add\x20IM\x20member','semantic_intent':'Add\x20an\x20IM\x20entry\x20to\x20the\x20contact\x20list\x20(permission\x20index\x20453).','match_keywords':['add\x20im','add\x20member','add\x20contact\x20im'],'required_fields':['im'],'optional_fields':['description'],'example':{'im':'0x...','description':'support\x20desk'}},{'id':'P-CONTACT-03','pattern_name':'Set\x20location','semantic_intent':'Set\x20the\x20contact\x27s\x20geographic\x20region\x20(permission\x20index\x20452,\x20LONG_NAME).','match_keywords':['set\x20location','update\x20location'],'required_fields':['location'],'optional_fields':[],'example':{'location':'cn-guangdong-shenzhen'}}];export const CONTACT_FIELD_TRANSLATIONS=[{'field_name':'description','value_type':'string','semantic':'Human-readable\x20description\x20of\x20the\x20Contact\x20(common::DESCRIPTION\x20validation).','format_example':'Customer\x20service\x20contact','validation_rules':['common::DESCRIPTION\x20max\x20length']},{'field_name':'location','value_type':'string','semantic':'Geographic\x20region\x20string;\x20defaults\x20to\x20empty\x20(unset).','format_example':'cn-guangdong-shenzhen','validation_rules':['common::LONG_NAME\x20validation','empty\x20means\x20unset']},{'field_name':'ims','value_type':'vector<Im>','semantic':'IM\x20entry\x20list\x20(≤\x20MAX_IM_COUNT\x20'+MAX_IM_COUNT+').\x20Each\x20Im\x20has\x20at/status/join_time/description.','format_example':'[{at,\x20status,\x20join_time,\x20description}]','validation_rules':['im_add\x20aborts\x20E_IM_COUNT_EXCEEDED\x20(1)\x20at\x20cap']},{'field_name':'permission','value_type':'address','semantic':'Owning\x20Permission\x20address\x20(set\x20at\x20creation).','format_example':'0x...permission...','validation_rules':['set\x20via\x20new(permission,\x20…)\x20index\x20450']}];export const CONTACT_CONSTRAINT_RULES=[{'id':'CONTACT_C_01','name':'IM\x20count\x20cap','description':'ims\x20length\x20<\x20MAX_IM_COUNT\x20('+MAX_IM_COUNT+').','related_field':'ims'},{'id':'CONTACT_C_02','name':'description\x20validation','description':'description\x20uses\x20common::DESCRIPTION.','related_field':'description'},{'id':'CONTACT_C_03','name':'location\x20validation','description':'location\x20uses\x20common::LONG_NAME.','related_field':'location'},{'id':'CONTACT_C_04','name':'im\x20description\x20validation','description':'im_add\x20description\x20uses\x20common::LONG_NAME\x20(not\x20DESCRIPTION).','related_field':'ims'},{'id':'CONTACT_C_05','name':'permission\x20gating','description':'create=450,\x20description_set=451,\x20location_set=452,\x20im_add/remove/clear=453,\x20owner_receive=454.','related_field':'permission'}];export function explainContact(a){const b=[],c=a['location']?'location=\x22'+a['location']+'\x22':'location\x20unset\x20(empty\x20string)',d=a['im_count']!==undefined?a['im_count']+'/'+MAX_IM_COUNT+'\x20IM\x20entries':'IM\x20count\x20unknown';return a['im_count']!==undefined&&a['im_count']>=MAX_IM_COUNT&&b['push']('IM\x20list\x20at\x20cap\x20('+MAX_IM_COUNT+');\x20im_add\x20will\x20abort\x20E_IM_COUNT_EXCEEDED'),a['bound_to_permission_um']&&b['push']('Contact\x20is\x20bound\x20as\x20Permission.um;\x20unbind\x20before\x20deletion'),{'summary':'Contact\x20('+(a['description']??'no\x20description')+').\x20'+c+'.\x20'+d+'.','location_status':c,'im_status':d,'warnings':b};}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
export type ConfirmSeverity = "block" | "warn" | "info";
|
|
2
|
-
export interface DemandConfirmItem {
|
|
3
|
-
id: string;
|
|
4
|
-
severity: ConfirmSeverity;
|
|
5
|
-
title: string;
|
|
6
|
-
description: string;
|
|
7
|
-
passed: boolean;
|
|
8
|
-
evidence?: string;
|
|
9
|
-
fix_hint?: string;
|
|
10
|
-
}
|
|
11
|
-
export interface DemandCreationCheckInput {
|
|
12
|
-
description?: string;
|
|
13
|
-
location?: string;
|
|
14
|
-
rewards?: string[];
|
|
15
|
-
guards?: string[];
|
|
16
|
-
feedback?: string[];
|
|
17
|
-
service_identifier?: number | null;
|
|
18
|
-
by_guard?: string | null;
|
|
19
|
-
permission_set_available?: boolean;
|
|
20
|
-
namedNew?: {
|
|
21
|
-
name: string;
|
|
22
|
-
tag?: string;
|
|
23
|
-
} | null;
|
|
24
|
-
}
|
|
25
|
-
export declare function preCheckDemandCreation(input: DemandCreationCheckInput): DemandConfirmItem[];
|
|
26
|
-
export declare function canCreateDemand(input: DemandCreationCheckInput): {
|
|
27
|
-
canCreate: boolean;
|
|
28
|
-
blockers: DemandConfirmItem[];
|
|
29
|
-
warnings: DemandConfirmItem[];
|
|
30
|
-
info: DemandConfirmItem[];
|
|
31
|
-
};
|
|
32
|
-
export declare function formatDemandCreationSummary(input: DemandCreationCheckInput): string;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{MAX_REWARD_COUNT,MAX_GUARD_COUNT_DEMAND,MAX_DESCRIPTION_LENGTH,MAX_LONG_NAME_LENGTH}from'@wowok/wowok';const MAX_FEEDBACK_COUNT=0x14;function checkDescription(a){const b=a['description']?.['length']??0x0,c=b>0x0&&b<=MAX_DESCRIPTION_LENGTH;return{'id':'C-DEM-01','severity':c?'info':b===0x0?'warn':'block','title':'description\x20non-empty\x20and\x20within\x20MAX_DESCRIPTION_LENGTH\x20('+MAX_DESCRIPTION_LENGTH+'\x20chars)','description':'description\x20is\x20a\x20REQUIRED\x20field.\x20Move\x20contract\x20validates\x20via\x20common::DESCRIPTION\x20(demand.move:157,177).\x20'+'Empty\x20string\x20is\x20technically\x20rejected\x20by\x20common::DESCRIPTION\x20only\x20if\x20NAME_ALLOW_EMPTY\x20is\x20not\x20used;\x20the\x20new_imp\x20'+'path\x20uses\x20common::DESCRIPTION\x20which\x20allows\x20empty\x20but\x20enforces\x20the\x204000-char\x20limit.\x20Non-empty\x20descriptions\x20are\x20'+'strongly\x20recommended\x20for\x20Demand\x20discoverability.','passed':c,'evidence':a['description']===undefined?'undefined':'length='+b+',\x20limit='+MAX_DESCRIPTION_LENGTH,'fix_hint':c?undefined:'Provide\x20a\x20description\x20of\x201..'+MAX_DESCRIPTION_LENGTH+'\x20characters.'};}function checkLocation(a){const b=a['location']?.['length']??0x0,c=b<=MAX_LONG_NAME_LENGTH;return{'id':'C-DEM-02','severity':c?'info':'block','title':'location\x20within\x20MAX_LONG_NAME_LENGTH\x20('+MAX_LONG_NAME_LENGTH+'\x20chars)','description':'location\x20is\x20set\x20via\x20location_set_imp\x20(demand.move:179-182)\x20which\x20validates\x20via\x20common::LONG_NAME.\x20'+'Move\x20aborts\x20with\x20E_LONG_NAME_LENGTH_EXCEEDED\x20(11)\x20on\x20overflow.\x20Empty\x20location\x20(\x22\x22)\x20is\x20valid\x20—\x20new_imp\x20'+'initializes\x20location\x20to\x20empty\x20string.\x20Use\x20location_set\x20to\x20update\x20after\x20creation.','passed':c,'evidence':a['location']===undefined?'undefined':'length='+b+',\x20limit='+MAX_LONG_NAME_LENGTH,'fix_hint':c?undefined:'Trim\x20location\x20to\x20≤\x20'+MAX_LONG_NAME_LENGTH+'\x20characters.'};}function checkRewards(a){const b=a['rewards']?.['length']??0x0,c=b<=MAX_REWARD_COUNT;return{'id':'C-DEM-03','severity':c?'info':'block','title':'rewards\x20count\x20within\x20MAX_REWARD_COUNT\x20('+MAX_REWARD_COUNT+')','description':'Each\x20reward_add_imp\x20(demand.move:184-191)\x20checks\x20`vector::length(&self.rewards)\x20<\x20MAX_REWARD_COUNT`\x20'+'before\x20pushing\x20(after\x20de-duplication).\x20Move\x20aborts\x20with\x20E_MAX_REWARD_COUNT_EXCEEDED\x20(1)\x20on\x20overflow.\x20'+'Rewards\x20are\x20bound\x20via\x20object_linker::affiliation_core\x20—\x20adding/removing\x20triggers\x20binding/unbinding.','passed':c,'evidence':'count='+b+',\x20limit='+MAX_REWARD_COUNT,'fix_hint':c?undefined:'Remove\x20rewards\x20before\x20adding\x20new\x20ones.\x20Limit='+MAX_REWARD_COUNT+'.'};}function checkGuards(a){const b=a['guards']?.['length']??0x0,c=b<=MAX_GUARD_COUNT_DEMAND;return{'id':'C-DEM-04','severity':c?'info':'block','title':'guards\x20count\x20within\x20MAX_GUARD_COUNT_DEMAND\x20('+MAX_GUARD_COUNT_DEMAND+')','description':'Each\x20guard_add_imp\x20(demand.move:213-242)\x20checks\x20`vector::length(&self.guards)\x20<\x20MAX_GUARD_COUNT`\x20'+'before\x20pushing\x20(after\x20duplicate\x20check\x20—\x20duplicates\x20update\x20service_identifier\x20in\x20place).\x20'+'Move\x20aborts\x20with\x20E_MAX_GUARD_COUNT_EXCEEDED\x20(2)\x20on\x20overflow.\x20Guards\x20are\x20bound\x20via\x20object_linker::affiliation_core.','passed':c,'evidence':'count='+b+',\x20limit='+MAX_GUARD_COUNT_DEMAND,'fix_hint':c?undefined:'Remove\x20guards\x20before\x20adding\x20new\x20ones.\x20Limit='+MAX_GUARD_COUNT_DEMAND+'.'};}function checkFeedback(a){const b=a['feedback']?.['length']??0x0,c=b<=MAX_FEEDBACK_COUNT;return{'id':'C-DEM-05','severity':c?'info':'block','title':'feedback\x20batch\x20count\x20within\x20MAX_FEEDBACK_COUNT\x20('+MAX_FEEDBACK_COUNT+')','description':'Move\x20feedback\x20(demand.move:352)\x20updates\x20ONE\x20presenter\x20per\x20call\x20—\x20feedback_imp\x20writes\x20to\x20a\x20single\x20'+'ServiceInfo\x20record.\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).\x20Exceeding\x20the\x20SDK\x20batch\x20limit\x20is\x20')+'rejected\x20before\x20transaction\x20building.\x20Each\x20feedback\x20string\x20is\x20validated\x20by\x20common::DESCRIPTION\x20(4000\x20chars).','passed':c,'evidence':'count='+b+',\x20limit='+MAX_FEEDBACK_COUNT,'fix_hint':c?undefined:'Split\x20feedback\x20into\x20batches\x20of\x20≤\x20'+MAX_FEEDBACK_COUNT+'\x20entries.'};}function checkServiceIdentifier(a){const b=a['service_identifier'];if(b===null||b===undefined)return{'id':'C-DEM-06','severity':'info','title':'service_identifier\x20is\x20null/undefined\x20→\x20Option::none\x20(use\x20supplied\x20service\x20address)','description':'When\x20service_identifier\x20is\x20None,\x20guard_add_imp\x20stores\x20Option::none\x20in\x20ServiceGuard.\x20At\x20present_with_passport\x20'+'time,\x20present_with_passport_imp\x20uses\x20the\x20service\x20parameter\x20(or\x20Option::none\x20for\x20plain\x20present_with_passport).\x20'+'Use\x20None\x20when\x20the\x20Demand\x20does\x20not\x20need\x20to\x20route\x20presentations\x20through\x20a\x20specific\x20Service\x20submission.','passed':!![],'evidence':'null/undefined\x20→\x20Option::none'};const c=typeof b==='number'&&Number['isInteger'](b)&&b>=0x0&&b<=0xff;return{'id':'C-DEM-06','severity':c?'info':'block','title':'service_identifier\x20is\x20a\x20valid\x20u8\x20(0-255)\x20when\x20provided','description':'When\x20provided,\x20service_identifier\x20must\x20be\x20a\x20u8\x20index\x20into\x20the\x20Guard\x27s\x20submission\x20registry.\x20'+'guard_add_imp\x20(demand.move:218-222)\x20calls\x20guard::get_submission_object_type(guard,\x20*i)\x20and\x20'+'common::assert_service_object_type(t)\x20—\x20the\x20submission\x20at\x20that\x20index\x20MUST\x20exist\x20and\x20have\x20type\x20'+'ObjectType::Service.\x20At\x20present_with_passport\x20time,\x20the\x20submission\x20address\x20is\x20extracted\x20from\x20the\x20Passport\x20'+'via\x20passport::submission_get(passport,\x20&g,\x20*service_identifier).','passed':c,'evidence':'service_identifier='+b,'fix_hint':c?undefined:'Provide\x20an\x20integer\x20in\x20[0,\x20255]\x20that\x20indexes\x20a\x20Service-typed\x20submission\x20in\x20the\x20Guard.'};}function checkByGuard(a){const b=a['by_guard'];if(b===null||b===undefined)return{'id':'C-DEM-07','severity':'info','title':'by_guard\x20is\x20null\x20→\x20use\x20plain\x20present\x20(requires\x20empty\x20guards\x20vector)','description':'When\x20by_guard\x20is\x20None,\x20the\x20caller\x20uses\x20plain\x20present\x20(demand.move:100)\x20which\x20asserts\x20'+'`vector::is_empty(&self.guards)`\x20—\x20aborts\x20with\x20E_NEED_PASSPORT\x20(3)\x20if\x20guards\x20exist.\x20Use\x20this\x20path\x20'+'for\x20open\x20Demands\x20(no\x20guards).','passed':!![],'evidence':'null/undefined\x20→\x20plain\x20present\x20path'};if(a['guards']===undefined)return{'id':'C-DEM-07','severity':'info','title':'by_guard\x20provided\x20(cannot\x20verify\x20membership\x20—\x20guards\x20list\x20not\x20supplied)','description':'present_with_passport_imp\x20(demand.move:110-129)\x20iterates\x20the\x20guards\x20vector\x20looking\x20for\x20a\x20matching\x20'+'guard\x20address.\x20If\x20not\x20found,\x20it\x20aborts\x20with\x20E_GUARD_NOT_FOUND\x20(4).\x20The\x20caller\x20must\x20ensure\x20by_guard\x20'+'is\x20in\x20Demand.guards\x20—\x20this\x20check\x20could\x20not\x20verify\x20because\x20the\x20guards\x20list\x20was\x20not\x20supplied.','passed':!![],'evidence':'by_guard='+b['substring'](0x0,0xa)+'...\x20(guards\x20list\x20not\x20supplied)','fix_hint':'Pass\x20input.guards\x20to\x20enable\x20membership\x20verification.'};const c=a['guards']['includes'](b);return{'id':'C-DEM-07','severity':c?'info':'block','title':'by_guard\x20exists\x20in\x20Demand.guards\x20(when\x20specified)','description':'When\x20by_guard\x20is\x20specified,\x20present_with_passport_imp\x20(demand.move:110-129)\x20iterates\x20the\x20guards\x20vector\x20'+'looking\x20for\x20a\x20matching\x20guard\x20address.\x20If\x20not\x20found,\x20it\x20aborts\x20with\x20E_GUARD_NOT_FOUND\x20(4).\x20The\x20caller\x20'+'MUST\x20ensure\x20by_guard\x20was\x20previously\x20added\x20via\x20guard_add.','passed':c,'evidence':'by_guard='+b['substring'](0x0,0xa)+'...,\x20in\x20guards='+c,'fix_hint':c?undefined:'Call\x20guard_add(permission,\x20guard,\x20service_identifier)\x20first.'};}function checkPermissionSetAvailable(a){const b=a['permission_set_available']!==![];return{'id':'C-DEM-08','severity':b?'info':'warn','title':'permission_set\x20available\x20via\x20CallPermission.apply\x20(DE-D-2=A)','description':'The\x20Move\x20permission_set\x20function\x20(demand.move:286)\x20is\x20exposed\x20in\x20the\x20SDK\x20via\x20the\x20CallPermission.apply\x20'+'mechanism\x20(DE-D-2=A).\x20It\x20calls\x20permission::assert_owner(old)\x20and\x20object_linker::affiliation_change_core\x20to\x20migrate\x20'+'the\x20binding.\x20Permission\x20indices\x20for\x20Demand\x20(demand.move:20):\x20400=DEMAND_NEW,\x20401=DEMAND_DESCRIPTION,\x20'+'402=DEMAND_LOCATION,\x20404=DEMAND_GUARD,\x20405=DEMAND_REWARD,\x20406=DEMAND_FEEDBACK,\x20407=DEMAND_OWNER_RECEIVE,\x20'+'408=DEMAND_UM.\x20This\x20is\x20an\x20info\x20check\x20—\x20it\x20confirms\x20the\x20capability\x20is\x20available,\x20not\x20a\x20creation\x20prerequisite.','passed':b,'evidence':b?'exposed\x20via\x20CallPermission.apply':'not\x20available\x20(regression)','fix_hint':b?undefined:'Restore\x20the\x20CallPermission.apply\x20path\x20for\x20permission_set.'};}export function preCheckDemandCreation(a){return[checkDescription(a),checkLocation(a),checkRewards(a),checkGuards(a),checkFeedback(a),checkServiceIdentifier(a),checkByGuard(a),checkPermissionSetAvailable(a)];}export function canCreateDemand(a){const b=preCheckDemandCreation(a);return{'canCreate':b['every'](c=>c['severity']!=='block'||c['passed']),'blockers':b['filter'](c=>c['severity']==='block'&&!c['passed']),'warnings':b['filter'](c=>c['severity']==='warn'&&!c['passed']),'info':b['filter'](c=>c['severity']==='info')};}export function formatDemandCreationSummary(a){const {canCreate:b,blockers:c,warnings:d,info:e}=canCreateDemand(a),f=[];return f['push'](b?'✓\x20Demand\x20pre-check\x20PASSED':'✗\x20Demand\x20pre-check\x20FAILED'),f['push'](''),c['length']>0x0&&(f['push']('BLOCKERS\x20(must\x20fix\x20before\x20operation):'),c['forEach'](g=>f['push']('\x20\x20['+g['id']+']\x20'+g['title']+'\x20—\x20'+(g['evidence']??''))),f['push']('')),d['length']>0x0&&(f['push']('WARNINGS\x20(review\x20recommended):'),d['forEach'](g=>f['push']('\x20\x20['+g['id']+']\x20'+g['title']+'\x20—\x20'+(g['evidence']??''))),f['push']('')),e['length']>0x0&&(f['push']('INFO:'),e['forEach'](g=>f['push']('\x20\x20['+g['id']+']\x20'+g['title']))),f['join']('\x0a');}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { type DemandScene } from "./demand-ledger.js";
|
|
2
|
-
export declare const DEMAND_CONTEXT_VERSION = "1.0.0";
|
|
3
|
-
export interface DemandContextBundle {
|
|
4
|
-
scene?: DemandScene;
|
|
5
|
-
rewarded: boolean;
|
|
6
|
-
guarded: boolean;
|
|
7
|
-
summary: string;
|
|
8
|
-
}
|
|
9
|
-
export interface BuildDemandContextInput {
|
|
10
|
-
description?: string;
|
|
11
|
-
reward_count?: number;
|
|
12
|
-
guard_count?: number;
|
|
13
|
-
}
|
|
14
|
-
export declare function buildDemandContext(input: BuildDemandContextInput): DemandContextBundle;
|
|
15
|
-
export declare function getDemandContextSummary(ctx: DemandContextBundle): string;
|
|
16
|
-
export declare function isRewardedDemand(ctx: DemandContextBundle): boolean;
|
|
17
|
-
export declare function getDemandSceneByIdSafe(id: string): DemandScene | undefined;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{getDemandSceneById}from'./demand-ledger.js';export const DEMAND_CONTEXT_VERSION='1.0.0';export function buildDemandContext(a){const b=(a['reward_count']??0x0)>0x0,c=(a['guard_count']??0x0)>0x0,d=[];return a['description']&&d['push']('demand\x20\x22'+a['description']+'\x22'),d['push'](b?'rewarded':'not\x20rewarded'),d['push'](c?'guarded\x20present':'open\x20present'),{'scene':undefined,'rewarded':b,'guarded':c,'summary':d['join']('\x20·\x20')};}export function getDemandContextSummary(a){return a['summary'];}export function isRewardedDemand(a){return a['rewarded'];}export function getDemandSceneByIdSafe(a){return getDemandSceneById(a);}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export declare const DEMAND_LEDGER_VERSION = "1.0.0";
|
|
2
|
-
export type DemandSceneClassification = "publish" | "present" | "feedback";
|
|
3
|
-
export interface DemandScene {
|
|
4
|
-
id: string;
|
|
5
|
-
classification: DemandSceneClassification;
|
|
6
|
-
semantic: string;
|
|
7
|
-
}
|
|
8
|
-
export declare const DEMAND_SCENES: DemandScene[];
|
|
9
|
-
export interface DemandFieldEntry {
|
|
10
|
-
field: string;
|
|
11
|
-
value_type: string;
|
|
12
|
-
semantic: string;
|
|
13
|
-
required: boolean;
|
|
14
|
-
}
|
|
15
|
-
export declare const DEMAND_FIELDS: DemandFieldEntry[];
|
|
16
|
-
export interface DemandErrorEntry {
|
|
17
|
-
code: string;
|
|
18
|
-
value: number;
|
|
19
|
-
description: string;
|
|
20
|
-
}
|
|
21
|
-
export declare const DEMAND_ERROR_CODES: DemandErrorEntry[];
|
|
22
|
-
export declare function getDemandField(field: string): DemandFieldEntry | undefined;
|
|
23
|
-
export declare function getDemandErrorByCode(code: string): DemandErrorEntry | undefined;
|
|
24
|
-
export declare function getDemandErrorByValue(value: number): DemandErrorEntry | undefined;
|
|
25
|
-
export declare function getDemandSceneById(id: string): DemandScene | undefined;
|
|
26
|
-
export declare function inferDemandSceneFromIntent(intent: string): DemandScene | undefined;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const DEMAND_LEDGER_VERSION='1.0.0';export const DEMAND_SCENES=[{'id':'demand_publish','classification':'publish','semantic':'Create\x20+\x20share\x20the\x20Demand\x20(description\x20+\x20location\x20+\x20rewards\x20+\x20guards).'},{'id':'demand_present','classification':'present','semantic':'A\x20presenter\x20(service/merchant)\x20submits\x20a\x20recommendation\x20to\x20the\x20Demand.'},{'id':'demand_feedback','classification':'feedback','semantic':'Demand\x20owner\x20rates\x20a\x20presenter\x27s\x20submission\x20(acceptance_score\x20+\x20feedback).'}];export const DEMAND_FIELDS=[{'field':'description','value_type':'string','semantic':'Demand\x20description\x20(common::DESCRIPTION\x20validation).','required':!![]},{'field':'location','value_type':'string','semantic':'Geographic\x20region\x20string\x20(structured\x20via\x20region.ts).','required':!![]},{'field':'rewards','value_type':'vector<address>','semantic':'Reward\x20objects\x20offered\x20(≤\x20MAX_REWARD_COUNT\x2020).','required':![]},{'field':'guards','value_type':'vector<ServiceGuard>','semantic':'Guards\x20a\x20presenter\x20must\x20pass\x20to\x20present\x20(≤\x20MAX_GUARD_COUNT\x2020).','required':![]},{'field':'presenters','value_type':'ParentTable<address,\x20ServiceInfo>','semantic':'Presenter\x20submissions\x20(who\x20→\x20recommend/service/acceptance).','required':![]},{'field':'um','value_type':'Option<address>','semantic':'User\x20manager\x20(optional).','required':![]},{'field':'permission','value_type':'address','semantic':'Owning\x20Permission\x20organization.','required':!![]}];export const DEMAND_ERROR_CODES=[{'code':'E_MAX_REWARD_COUNT_EXCEEDED','value':0x1,'description':'rewards\x20>\x20MAX_REWARD_COUNT\x20(20).'},{'code':'E_MAX_GUARD_COUNT_EXCEEDED','value':0x2,'description':'guards\x20>\x20MAX_GUARD_COUNT\x20(20).'},{'code':'E_NEED_PASSPORT','value':0x3,'description':'present\x20requires\x20empty\x20guards\x20(no\x20guard\x20→\x20no\x20passport).'},{'code':'E_GUARD_NOT_FOUND','value':0x4,'description':'Referenced\x20guard\x20not\x20found.'}];export function getDemandField(a){return DEMAND_FIELDS['find'](b=>b['field']===a);}export function getDemandErrorByCode(a){return DEMAND_ERROR_CODES['find'](b=>b['code']===a);}export function getDemandErrorByValue(a){return DEMAND_ERROR_CODES['find'](b=>b['value']===a);}export function getDemandSceneById(a){return DEMAND_SCENES['find'](b=>b['id']===a);}export function inferDemandSceneFromIntent(a){const b=a['toLowerCase']();if(/(publish|post|announce|create|发需求|发布)/['test'](b))return DEMAND_SCENES['find'](c=>c['classification']==='publish');if(/(present|apply|submit|bid|报价|应征)/['test'](b))return DEMAND_SCENES['find'](c=>c['classification']==='present');if(/(feedback|accept|score|rate|评价|采纳)/['test'](b))return DEMAND_SCENES['find'](c=>c['classification']==='feedback');return undefined;}
|
|
@@ -1,29 +0,0 @@
|
|
|
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;
|
|
@@ -1 +0,0 @@
|
|
|
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,12 +0,0 @@
|
|
|
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;
|
|
@@ -1 +0,0 @@
|
|
|
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');}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
export interface SemanticToDemandSchemaRule {
|
|
2
|
-
id: string;
|
|
3
|
-
pattern_name: string;
|
|
4
|
-
configuration_classification: "open" | "guarded" | "um_managed";
|
|
5
|
-
semantic_intent: string;
|
|
6
|
-
match_keywords: string[];
|
|
7
|
-
schema_elements: {
|
|
8
|
-
required_fields: string[];
|
|
9
|
-
optional_fields: string[];
|
|
10
|
-
presentation_path: "plain_present" | "present_with_passport" | "either";
|
|
11
|
-
um_recommendation: string;
|
|
12
|
-
};
|
|
13
|
-
constraints: string[];
|
|
14
|
-
example: Record<string, unknown>;
|
|
15
|
-
}
|
|
16
|
-
export declare const SEMANTIC_TO_DEMAND_SCHEMA_RULES: SemanticToDemandSchemaRule[];
|
|
17
|
-
export interface DemandFieldTranslation {
|
|
18
|
-
field_name: string;
|
|
19
|
-
move_field?: string;
|
|
20
|
-
value_type: string;
|
|
21
|
-
semantic: string;
|
|
22
|
-
format_example: string;
|
|
23
|
-
validation_rules: string[];
|
|
24
|
-
}
|
|
25
|
-
export declare const DEMAND_FIELD_TRANSLATIONS: DemandFieldTranslation[];
|
|
26
|
-
export interface DemandConstraintRule {
|
|
27
|
-
id: string;
|
|
28
|
-
name: string;
|
|
29
|
-
description: string;
|
|
30
|
-
validation_logic: string;
|
|
31
|
-
failure_message: string;
|
|
32
|
-
related_field: string;
|
|
33
|
-
}
|
|
34
|
-
export declare const DEMAND_CONSTRAINT_RULES: DemandConstraintRule[];
|
|
35
|
-
export interface DemandExplainInput {
|
|
36
|
-
description?: string;
|
|
37
|
-
location?: string;
|
|
38
|
-
rewards?: string[];
|
|
39
|
-
guards?: {
|
|
40
|
-
guard: string;
|
|
41
|
-
service_identifier?: number | null;
|
|
42
|
-
}[];
|
|
43
|
-
um?: string | null;
|
|
44
|
-
permission?: string;
|
|
45
|
-
}
|
|
46
|
-
export interface DemandExplanation {
|
|
47
|
-
summary: string;
|
|
48
|
-
configuration_classification: string;
|
|
49
|
-
presentation_path: string;
|
|
50
|
-
binding_status: string;
|
|
51
|
-
size_status: string;
|
|
52
|
-
warnings: string[];
|
|
53
|
-
recommendations: string[];
|
|
54
|
-
}
|
|
55
|
-
export declare function explainDemand(input: DemandExplainInput): DemandExplanation;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{MAX_REWARD_COUNT,MAX_GUARD_COUNT_DEMAND,MAX_DESCRIPTION_LENGTH,MAX_LONG_NAME_LENGTH}from'@wowok/wowok';export const SEMANTIC_TO_DEMAND_SCHEMA_RULES=[{'id':'P-DEM-01','pattern_name':'Open\x20Demand\x20(no\x20guards)\x20—\x20free\x20presentation','configuration_classification':'open','semantic_intent':'An\x20open\x20Demand\x20accepts\x20presentations\x20from\x20any\x20sender\x20via\x20the\x20plain\x20`present`\x20function\x20(demand.move:100).\x20'+'No\x20Passport\x20is\x20required.\x20Use\x20this\x20for\x20broad-cast\x20demands\x20where\x20the\x20creator\x20wants\x20to\x20collect\x20as\x20many\x20'+'presentations\x20as\x20possible\x20(e.g.\x20open\x20calls\x20for\x20service\x20providers,\x20public\x20RFPs).\x20The\x20guards\x20vector\x20is\x20empty.','match_keywords':['open','no\x20guard','free\x20presentation','public','rfp','open\x20call'],'schema_elements':{'required_fields':['description','permission'],'optional_fields':['location','rewards','um','namedNew'],'presentation_path':'plain_present','um_recommendation':'Optional.\x20Set\x20um\x20to\x20a\x20Contact\x20object\x20if\x20the\x20Demand\x20should\x20be\x20managed\x20by\x20an\x20intermediary.\x20'+'Leave\x20as\x20Option::none\x20for\x20direct\x20creator\x20management.'},'constraints':['guards\x20vector\x20must\x20be\x20empty\x20(initial\x20state\x20—\x20do\x20not\x20call\x20guard_add)','Callers\x20MUST\x20use\x20plain\x20`present`\x20or\x20`present_service`\x20—\x20present_with_passport\x20will\x20abort\x20with\x20E_GUARD_NOT_FOUND\x20(4)','description\x20non-empty\x20and\x20within\x20MAX_DESCRIPTION_LENGTH\x20(4000\x20chars)','If\x20location\x20is\x20set,\x20within\x20MAX_LONG_NAME_LENGTH\x20(256\x20chars)'],'example':{'description':'Open\x20call\x20for\x20freelance\x20designers\x20—\x20submit\x20portfolio\x20link\x20as\x20recommend','location':'Shanghai','rewards':['0xabc...reward_addr_1'],'permission':'0xperm...permission_addr','um':null,'namedNew':{'name':'open_design_call_2026'}}},{'id':'P-DEM-02','pattern_name':'Guarded\x20Demand\x20(with\x20guards)\x20—\x20passport\x20required\x20for\x20present','configuration_classification':'guarded','semantic_intent':'A\x20guarded\x20Demand\x20requires\x20every\x20presenter\x20to\x20supply\x20a\x20Passport\x20that\x20passes\x20one\x20of\x20the\x20affiliated\x20Guards.\x20'+'Use\x20this\x20when\x20the\x20creator\x20wants\x20to\x20filter\x20presentations\x20by\x20Guard-defined\x20criteria\x20(KYC,\x20membership,\x20'+'stake,\x20etc.).\x20The\x20guards\x20vector\x20is\x20non-empty.\x20Each\x20guard\x20carries\x20an\x20optional\x20service_identifier\x20that,\x20'+'when\x20set,\x20routes\x20present_with_passport\x20to\x20extract\x20the\x20submission\x20address\x20from\x20the\x20Passport\x20(overriding\x20'+'the\x20supplied\x20service\x20parameter).','match_keywords':['guarded','passport','kyc','membership','filtered','gated','service_identifier'],'schema_elements':{'required_fields':['description','permission','guards'],'optional_fields':['location','rewards','um','namedNew'],'presentation_path':'present_with_passport','um_recommendation':'Optional.\x20Same\x20as\x20P-DEM-01.\x20If\x20the\x20Demand\x20is\x20mediated\x20by\x20an\x20intermediary\x20Contact,\x20set\x20um\x20to\x20that\x20'+'Contact\x20address\x20and\x20the\x20intermediary\x20can\x20manage\x20the\x20Demand\x20via\x20the\x20Contact\x27s\x20permission.'},'constraints':['guards\x20vector\x20non-empty\x20(call\x20guard_add\x20at\x20least\x20once)','Each\x20guard\x20address\x20must\x20be\x20unique\x20(duplicate\x20guard_add\x20updates\x20service_identifier\x20instead\x20of\x20pushing)','guard_count\x20≤\x20MAX_GUARD_COUNT_DEMAND\x20(20)\x20—\x20E_MAX_GUARD_COUNT_EXCEEDED\x20(2)\x20on\x20overflow','When\x20service_identifier\x20is\x20provided,\x20it\x20MUST\x20be\x20a\x20valid\x20u8\x20indexing\x20a\x20Service-typed\x20submission\x20in\x20the\x20Guard','Presenters\x20MUST\x20use\x20present_with_passport\x20/\x20present_service_with_passport\x20—\x20plain\x20present\x20aborts\x20with\x20E_NEED_PASSPORT\x20(3)','by_guard\x20(Guard\x20address)\x20passed\x20to\x20present_with_passport\x20MUST\x20already\x20be\x20in\x20the\x20guards\x20vector\x20—\x20E_GUARD_NOT_FOUND\x20(4)\x20otherwise'],'example':{'description':'KYC-gated\x20call\x20for\x20certified\x20auditors\x20only','location':'Remote','rewards':['0xabc...reward_addr_1','0xdef...reward_addr_2'],'guards':[{'guard':'0xguard1...','service_identifier':0x0},{'guard':'0xguard2...','service_identifier':null}],'permission':'0xperm...permission_addr','um':null,'namedNew':{'name':'kyc_auditor_call_2026'}}},{'id':'P-DEM-03','pattern_name':'Demand\x20with\x20UM\x20(um_set)\x20—\x20Contact\x20object\x20manages\x20demand','configuration_classification':'um_managed','semantic_intent':'A\x20Demand\x20with\x20um\x20set\x20has\x20an\x20affiliated\x20Contact\x20object\x20that\x20manages\x20the\x20Demand\x20on\x20behalf\x20of\x20the\x20creator.\x20'+'The\x20Contact\x27s\x20address\x20is\x20stored\x20in\x20Demand.um\x20(Option<address>).\x20The\x20Contact\x20can\x20perform\x20operations\x20'+'through\x20its\x20own\x20permission\x20scope.\x20Use\x20this\x20when\x20a\x20Demand\x20is\x20operated\x20by\x20an\x20intermediary\x20(agent,\x20'+'marketplace,\x20escrow\x20service)\x20rather\x20than\x20the\x20original\x20creator.\x20um_set_imp\x20(demand.move:139-147)\x20'+'disaffiliates\x20the\x20old\x20um\x20before\x20affiliating\x20the\x20new\x20one\x20(P-DEM-P1-1\x20fix).','match_keywords':['um','contact','managed','intermediary','agent','marketplace','escrow'],'schema_elements':{'required_fields':['description','permission','um'],'optional_fields':['location','rewards','guards','namedNew'],'presentation_path':'either','um_recommendation':'Required\x20for\x20this\x20pattern.\x20Set\x20um\x20to\x20a\x20Contact\x20object\x20address\x20via\x20um_set.\x20The\x20Contact\x27s\x20'+'permission\x20scope\x20applies\x20to\x20subsequent\x20operations.\x20To\x20remove\x20the\x20Contact,\x20call\x20um_none\x20—\x20'+'um_none_imp\x20disaffiliates\x20the\x20Contact\x20before\x20clearing\x20self.um.'},'constraints':['um\x20must\x20be\x20a\x20valid\x20Contact\x20object\x20address\x20(set\x20via\x20um_set,\x20permission\x20index\x20408)','um_set_imp\x20disaffiliates\x20old\x20um\x20before\x20affiliating\x20new\x20(P-DEM-P1-1\x20fix\x20—\x20prevents\x20object-linker\x20dependency\x20leak)','um_none_imp\x20disaffiliates\x20um\x20before\x20clearing\x20(symmetric\x20with\x20um_set_imp)','If\x20guards\x20is\x20also\x20non-empty,\x20the\x20present_with_passport\x20path\x20applies\x20(P-DEM-02\x20constraints\x20also\x20hold)','permission_set\x20(DE-D-2=A)\x20can\x20migrate\x20the\x20Demand\x20to\x20a\x20new\x20Permission\x20—\x20affiliation_change_core\x20is\x20called\x20on\x20the\x20object\x20linker'],'example':{'description':'Marketplace-managed\x20Demand\x20for\x20freelance\x20design\x20services','location':'Shanghai','rewards':['0xabc...reward_addr_1'],'guards':[{'guard':'0xguard1...','service_identifier':null}],'permission':'0xperm...permission_addr','um':'0xcontact...marketplace_contact_addr','namedNew':{'name':'marketplace_managed_design_2026'}}}];export const DEMAND_FIELD_TRANSLATIONS=[{'field_name':'description','value_type':'string','semantic':'Human-readable\x20description\x20of\x20this\x20Demand.\x20Required\x20field.\x20The\x20Move\x20contract\x20validates\x20via\x20'+'common::DESCRIPTION\x20(demand.move:157,177),\x20which\x20enforces\x20the\x204000-char\x20limit.\x20Should\x20be\x20a\x20one-line\x20'+'summary\x20of\x20what\x20the\x20Demand\x20is\x20asking\x20for\x20(e.g.\x20\x22freelance\x20designer\x20for\x20brand\x20identity\x20work\x22).','format_example':'Freelance\x20designer\x20for\x20brand\x20identity\x20work\x20(logo\x20+\x20style\x20guide)','validation_rules':['Required\x20field','Length\x20≤\x20MAX_DESCRIPTION_LENGTH\x20('+MAX_DESCRIPTION_LENGTH+'\x20chars)','Move\x20validates\x20via\x20common::DESCRIPTION\x20—\x20E_DESCRIPTION_LENGTH_EXCEEDED\x20(4)\x20on\x20overflow']},{'field_name':'location','value_type':'string','semantic':'Geographic\x20location\x20associated\x20with\x20the\x20Demand.\x20Validated\x20via\x20common::LONG_NAME\x20(demand.move:180).\x20'+'Empty\x20string\x20(\x22\x22)\x20is\x20valid\x20—\x20new_imp\x20initializes\x20location\x20to\x20empty.\x20Use\x20location_set\x20to\x20update\x20after\x20'+'creation.\x20This\x20is\x20the\x20ONLY\x20Move\x20Demand\x20struct\x20field\x20that\x20the\x20matching\x20engine\x20reads\x20directly\x20(other\x20'+'matching\x20fields\x20like\x20tags,\x20maxPrice,\x20scenario\x20are\x20caller-enriched\x20—\x20see\x20P-DEM-P1-3\x20/\x20R-DEM-07).','format_example':'Shanghai\x20or\x20Remote','validation_rules':['Optional\x20(empty\x20string\x20\x22\x22\x20is\x20the\x20default\x20initial\x20value)','Length\x20≤\x20MAX_LONG_NAME_LENGTH\x20('+MAX_LONG_NAME_LENGTH+'\x20chars)','Move\x20validates\x20via\x20common::LONG_NAME\x20—\x20E_LONG_NAME_LENGTH_EXCEEDED\x20(11)\x20on\x20overflow']},{'field_name':'rewards','value_type':'vector<address>\x20(string[]\x20in\x20SDK)','semantic':'Reward\x20object\x20addresses\x20affiliated\x20with\x20this\x20Demand.\x20Each\x20reward\x20is\x20added\x20via\x20reward_add,\x20which\x20'+'triggers\x20object_linker::affiliation_core.\x20The\x20matching\x20engine\x20reads\x20maxPrice\x20from\x20the\x20Reward\x20objects\x20'+'(caller-enriched\x20—\x20the\x20Demand\x20struct\x20only\x20stores\x20addresses,\x20not\x20Reward\x20metadata).','format_example':'[\x220xabc...reward_addr_1\x22,\x20\x220xdef...reward_addr_2\x22]','validation_rules':['Count\x20≤\x20MAX_REWARD_COUNT\x20('+MAX_REWARD_COUNT+')\x20—\x20E_MAX_REWARD_COUNT_EXCEEDED\x20(1)\x20on\x20overflow','Each\x20address\x20must\x20be\x20a\x20valid\x20Reward\x20object\x20address','Duplicate\x20addresses\x20are\x20silently\x20ignored\x20(reward_add_imp\x20checks\x20contains\x20before\x20push)','reward_remove\x20/\x20reward_clear\x20disaffiliate\x20via\x20object_linker::disaffiliation_core\x20before\x20removing']},{'field_name':'guards','value_type':'vector<ServiceGuard>\x20({\x20guard:\x20address,\x20service_identifier:\x20Option<u8>\x20}[]\x20in\x20SDK)','semantic':'Guard\x20addresses\x20with\x20optional\x20service_identifier.\x20When\x20non-empty,\x20presenters\x20MUST\x20use\x20'+'present_with_passport\x20(or\x20present_service_with_passport).\x20The\x20service_identifier,\x20when\x20set,\x20routes\x20'+'present_with_passport\x20to\x20extract\x20the\x20submission\x20address\x20from\x20the\x20Passport\x20(overriding\x20the\x20supplied\x20'+'service\x20parameter).\x20guard_add\x20validates\x20the\x20service_identifier\x20type\x20BEFORE\x20any\x20mutation\x20(P-DEM-P1-2\x20fix).','format_example':'[{\x20guard:\x20\x220xguard1...\x22,\x20service_identifier:\x200\x20},\x20{\x20guard:\x20\x220xguard2...\x22,\x20service_identifier:\x20null\x20}]','validation_rules':['Count\x20≤\x20MAX_GUARD_COUNT_DEMAND\x20('+MAX_GUARD_COUNT_DEMAND+')\x20—\x20E_MAX_GUARD_COUNT_EXCEEDED\x20(2)\x20on\x20overflow','Each\x20guard\x20address\x20must\x20be\x20a\x20valid\x20Guard\x20object\x20address','Duplicate\x20addresses\x20update\x20service_identifier\x20in\x20place\x20(no\x20new\x20push)','When\x20service_identifier\x20is\x20provided,\x20it\x20MUST\x20index\x20a\x20Service-typed\x20submission\x20in\x20the\x20Guard','guard_remove\x20/\x20guard_clear\x20disaffiliate\x20via\x20object_linker::disaffiliation_core\x20before\x20removing']},{'field_name':'um','value_type':'Option<address>\x20(string\x20|\x20null\x20in\x20SDK)','semantic':'Optional\x20Contact\x20object\x20address\x20that\x20manages\x20this\x20Demand.\x20When\x20set,\x20the\x20Contact\x20can\x20perform\x20'+'operations\x20through\x20its\x20own\x20permission\x20scope.\x20um_set_imp\x20(demand.move:139-147)\x20disaffiliates\x20the\x20old\x20'+'um\x20before\x20affiliating\x20the\x20new\x20one\x20(P-DEM-P1-1\x20fix\x20—\x20prevents\x20object-linker\x20dependency\x20leak).\x20To\x20clear,\x20'+'call\x20um_none\x20—\x20um_none_imp\x20disaffiliates\x20before\x20clearing\x20self.um.','format_example':'0xcontact...marketplace_contact_addr\x20or\x20null','validation_rules':['Optional\x20(null/undefined\x20→\x20Option::none)\x20—\x20initial\x20state','When\x20set,\x20must\x20be\x20a\x20valid\x20Contact\x20object\x20address','um_set_imp\x20disaffiliates\x20old\x20um\x20before\x20setting\x20new\x20(P-DEM-P1-1\x20fix)','um_none_imp\x20disaffiliates\x20um\x20before\x20clearing\x20(symmetric)','Permission\x20index\x20408\x20required\x20for\x20um_set\x20/\x20um_none']},{'field_name':'presenters','value_type':'ParentTable<address,\x20ServiceInfo>\x20(not\x20directly\x20settable\x20—\x20populated\x20by\x20present)','semantic':'Service\x20presentation\x20records,\x20keyed\x20by\x20presenter\x20address.\x20Each\x20entry\x20contains:\x20recommend\x20(String),\x20'+'service\x20(Option<address>),\x20update_time\x20(u64),\x20acceptance_score\x20(Option<u8>),\x20feedback\x20(String),\x20'+'feedback_time\x20(u64).\x20Populated\x20by\x20present_imp\x20—\x20presenters\x20call\x20present\x20/\x20present_with_passport\x20to\x20'+'add\x20or\x20update\x20their\x20entry.\x20feedback_imp\x20updates\x20an\x20existing\x20entry\x27s\x20feedback\x20fields.','format_example':'(not\x20directly\x20settable\x20—\x20populated\x20by\x20present\x20operations)','validation_rules':['Not\x20directly\x20settable\x20by\x20the\x20creator\x20—\x20populated\x20by\x20presenter\x20operations','Each\x20presenter\x20address\x20maps\x20to\x20at\x20most\x20one\x20ServiceInfo\x20entry','present\x20updates\x20update_time\x20and\x20overwrites\x20recommend/service\x20on\x20each\x20call','feedback\x20updates\x20acceptance_score,\x20feedback,\x20feedback_time\x20(only\x20if\x20presenter\x20exists)']},{'field_name':'permission','value_type':'address','semantic':'Permission\x20object\x20address\x20bound\x20to\x20this\x20Demand.\x20All\x20mutations\x20require\x20permission::assert_permission_with_sender\x20'+'with\x20the\x20appropriate\x20index\x20(400-408).\x20permission_set\x20(demand.move:286)\x20is\x20exposed\x20via\x20CallPermission.apply\x20'+'(DE-D-2=A)\x20and\x20migrates\x20the\x20binding\x20via\x20object_linker::affiliation_change_core.','format_example':'0xperm...permission_addr','validation_rules':['Required\x20field\x20(set\x20at\x20creation\x20via\x20new_imp)','permission::assert_with_sender(permission,\x20400,\x20ctx)\x20required\x20for\x20new\x20(DEMAND_NEW)','permission::assert_permission_with_sender(permission,\x20<index>,\x20&self.permission,\x20ctx)\x20required\x20for\x20all\x20mutations','Permission\x20indices:\x20400=NEW,\x20401=DESCRIPTION,\x20402=LOCATION,\x20404=GUARD,\x20405=REWARD,\x20406=FEEDBACK,\x20407=OWNER_RECEIVE,\x20408=UM','permission_set\x20migrates\x20binding\x20via\x20object_linker::affiliation_change_core\x20(DE-D-2=A)']}];export const DEMAND_CONSTRAINT_RULES=[{'id':'DEMAND_C_01','name':'description\x20non-empty\x20and\x20within\x20size\x20limit','description':'The\x20\x27description\x27\x20field\x20must\x20be\x20non-empty\x20and\x20≤\x20MAX_DESCRIPTION_LENGTH\x20('+MAX_DESCRIPTION_LENGTH+'\x20chars).','validation_logic':'description.length\x20>\x200\x20&&\x20description.length\x20<=\x20MAX_DESCRIPTION_LENGTH','failure_message':'description\x20must\x20be\x201..'+MAX_DESCRIPTION_LENGTH+'\x20chars\x20—\x20E_DESCRIPTION_LENGTH_EXCEEDED\x20(4)\x20on\x20overflow','related_field':'description'},{'id':'DEMAND_C_02','name':'location\x20within\x20size\x20limit','description':'The\x20\x27location\x27\x20field\x20must\x20be\x20≤\x20MAX_LONG_NAME_LENGTH\x20('+MAX_LONG_NAME_LENGTH+'\x20chars).\x20Empty\x20string\x20is\x20valid.','validation_logic':'location.length\x20<=\x20MAX_LONG_NAME_LENGTH','failure_message':'location\x20exceeds\x20MAX_LONG_NAME_LENGTH\x20('+MAX_LONG_NAME_LENGTH+'\x20chars)\x20—\x20E_LONG_NAME_LENGTH_EXCEEDED\x20(11)','related_field':'location'},{'id':'DEMAND_C_03','name':'rewards\x20count\x20within\x20limit','description':'The\x20\x27rewards\x27\x20vector\x20count\x20must\x20be\x20≤\x20MAX_REWARD_COUNT\x20('+MAX_REWARD_COUNT+').','validation_logic':'rewards.length\x20<=\x20MAX_REWARD_COUNT','failure_message':'rewards\x20count\x20exceeds\x20MAX_REWARD_COUNT\x20('+MAX_REWARD_COUNT+')\x20—\x20E_MAX_REWARD_COUNT_EXCEEDED\x20(1)','related_field':'rewards'},{'id':'DEMAND_C_04','name':'guards\x20count\x20within\x20limit','description':'The\x20\x27guards\x27\x20vector\x20count\x20must\x20be\x20≤\x20MAX_GUARD_COUNT_DEMAND\x20('+MAX_GUARD_COUNT_DEMAND+').','validation_logic':'guards.length\x20<=\x20MAX_GUARD_COUNT_DEMAND','failure_message':'guards\x20count\x20exceeds\x20MAX_GUARD_COUNT_DEMAND\x20('+MAX_GUARD_COUNT_DEMAND+')\x20—\x20E_MAX_GUARD_COUNT_EXCEEDED\x20(2)','related_field':'guards'},{'id':'DEMAND_C_05','name':'service_identifier\x20valid\x20u8\x20when\x20provided','description':'When\x20service_identifier\x20is\x20provided\x20to\x20guard_add,\x20it\x20must\x20be\x20a\x20valid\x20u8\x20(0-255)\x20indexing\x20a\x20'+'Service-typed\x20submission\x20in\x20the\x20Guard.\x20guard_add_imp\x20validates\x20via\x20guard::get_submission_object_type\x20'+'and\x20common::assert_service_object_type\x20BEFORE\x20any\x20mutation\x20(P-DEM-P1-2\x20fix).','validation_logic':'service_identifier\x20==\x20null\x20||\x20(Number.isInteger(service_identifier)\x20&&\x200\x20<=\x20service_identifier\x20&&\x20service_identifier\x20<=\x20255)','failure_message':'service_identifier\x20must\x20be\x20a\x20u8\x20(0-255)\x20indexing\x20a\x20Service-typed\x20submission\x20—\x20E_INVALID_SERVICE_OBJECT_TYPE\x20(13)','related_field':'guards.service_identifier'},{'id':'DEMAND_C_06','name':'present\x20requires\x20passport\x20when\x20guards\x20non-empty','description':'When\x20the\x20guards\x20vector\x20is\x20non-empty,\x20callers\x20MUST\x20use\x20present_with_passport\x20/\x20present_service_with_passport.\x20'+'The\x20plain\x20present\x20function\x20asserts\x20`vector::is_empty(&self.guards)`\x20and\x20aborts\x20with\x20E_NEED_PASSPORT\x20(3).\x20'+'The\x20by_guard\x20parameter\x20to\x20present_with_passport\x20MUST\x20already\x20be\x20in\x20the\x20guards\x20vector\x20'+'(otherwise\x20E_GUARD_NOT_FOUND\x20(4)).','validation_logic':'!guards_non_empty\x20||\x20using_present_with_passport;\x20by_guard\x20in\x20guards','failure_message':'present\x20without\x20passport\x20when\x20guards\x20non-empty\x20—\x20E_NEED_PASSPORT\x20(3);\x20by_guard\x20not\x20in\x20guards\x20—\x20E_GUARD_NOT_FOUND\x20(4)','related_field':'guards\x20+\x20presentation_path'}];export function explainDemand(a){const b=[],c=[],d=!!a['guards']&&a['guards']['length']>0x0,e=!!a['um'];let f='open',g='plain_present';if(d&&e)f='guarded\x20+\x20um_managed\x20(P-DEM-02\x20+\x20P-DEM-03\x20combined)',g='present_with_passport\x20(um\x20does\x20not\x20change\x20presentation\x20path)';else{if(d)f='guarded\x20(P-DEM-02)\x20—\x20passport\x20required\x20for\x20present',g='present_with_passport\x20/\x20present_service_with_passport';else e?(f='um_managed\x20(P-DEM-03)\x20—\x20Contact\x20manages\x20the\x20Demand',g='plain\x20present\x20(no\x20guards)\x20OR\x20present_with_passport\x20(if\x20guards\x20added\x20later)'):(f='open\x20(P-DEM-01)\x20—\x20free\x20presentation,\x20no\x20passport\x20required',g='present\x20/\x20present_service\x20(plain\x20path)');}const h=[];a['permission']&&h['push']('permission='+a['permission']['substring'](0x0,0xa)+'...\x20(bound\x20at\x20creation)');e&&h['push']('um='+a['um']['substring'](0x0,0xa)+'...\x20(Contact\x20manages\x20Demand)');a['rewards']&&a['rewards']['length']>0x0&&h['push']('rewards='+a['rewards']['length']+'\x20bound\x20via\x20object_linker::affiliation_core');d&&h['push']('guards='+a['guards']['length']+'\x20bound\x20via\x20object_linker::affiliation_core');const i=h['length']>0x0?'Bindings:\x20'+h['join'](';\x20'):'No\x20object-linker\x20bindings\x20(bare\x20Demand)',j=[];a['description']!==undefined&&j['push']('description='+a['description']['length']+'\x20chars\x20(limit\x20'+MAX_DESCRIPTION_LENGTH+')');a['location']!==undefined&&j['push']('location='+a['location']['length']+'\x20chars\x20(limit\x20'+MAX_LONG_NAME_LENGTH+')');a['rewards']&&j['push']('rewards='+a['rewards']['length']+'/'+MAX_REWARD_COUNT);a['guards']&&j['push']('guards='+a['guards']['length']+'/'+MAX_GUARD_COUNT_DEMAND);if(d){const l=a['guards']['filter'](m=>m['service_identifier']!==null&&m['service_identifier']!==undefined&&!(typeof m['service_identifier']==='number'&&Number['isInteger'](m['service_identifier'])&&m['service_identifier']>=0x0&&m['service_identifier']<=0xff));l['length']>0x0&&b['push'](l['length']+'\x20guard(s)\x20have\x20invalid\x20service_identifier\x20(must\x20be\x20u8\x200-255)');}(!a['description']||a['description']['length']===0x0)&&b['push']('description\x20is\x20empty\x20—\x20Demand\x20will\x20be\x20hard\x20to\x20identify\x20in\x20queries');(!a['description']||a['description']['length']===0x0)&&c['push']('Provide\x20a\x20non-empty\x20description\x20for\x20discoverability');(a['location']===undefined||a['location']==='')&&c['push']('Consider\x20setting\x20location\x20if\x20the\x20Demand\x20is\x20geographic\x20(only\x20on-chain\x20field\x20used\x20by\x20matching)');!d&&c['push']('Consider\x20adding\x20guards\x20if\x20presentations\x20should\x20be\x20filtered\x20(KYC,\x20membership,\x20etc.)');!e&&f==='open'&&c['push']('Consider\x20setting\x20um\x20to\x20a\x20Contact\x20if\x20the\x20Demand\x20should\x20be\x20managed\x20by\x20an\x20intermediary');const k='Demand\x20is\x20'+f+'.\x20'+g+'.\x20'+i+'.\x20'+(j['length']>0x0?'Sizes:\x20'+j['join'](',\x20')+'.':'');return{'summary':k,'configuration_classification':f,'presentation_path':g,'binding_status':i,'size_status':j['join'](',\x20'),'warnings':b,'recommendations':c};}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{scanAllExamples,formatScanReport,EXAMPLES_SCANNER_VERSION}from'./examples-scanner.js';import*as a118a from'fs';import*as a118b from'path';console['log']('Examples\x20Scanner\x20v'+EXAMPLES_SCANNER_VERSION),console['log']('Scanning\x20d:/wowok/docs/examples\x20...');const result=scanAllExamples();console['log']('Loaded\x20'+result['examples']['length']+'\x20examples,\x20found\x20'+result['total_findings']+'\x20findings.');const report=formatScanReport(result),outputPath=a118b['resolve']('d:/wowok/wiki/market/GLM3/examples-scan-report.md');a118a['writeFileSync'](outputPath,report,'utf-8'),console['log']('Report\x20written\x20to\x20'+outputPath),console['log']('\x0a===\x20Per-Example\x20Summary\x20===');for(const example of result['examples']){const findings=result['findings_by_example']['get'](example['relative_path'])??[],critical=findings['filter'](a=>a['severity']==='critical')['length'],high=findings['filter'](a=>a['severity']==='high')['length'],medium=findings['filter'](a=>a['severity']==='medium')['length'];console['log'](example['relative_path']['padEnd'](0x32)+'\x20machines='+example['machine_ops']['length']+'\x20'+('progress='+example['progress_ops']['length']+'\x20guards='+example['defined_guard_names']['size']+'\x20')+('findings='+findings['length']+'\x20(C:'+critical+'\x20H:'+high+'\x20M:'+medium+')'));}console['log']('\x0a===\x20Risk\x20Rule\x20Coverage\x20===');const sortedRules=[...result['risk_rule_coverage']['entries']()]['sort']((c,d)=>c[0x0]['localeCompare'](d[0x0]));for(const [ruleId,count]of sortedRules){console['log']('\x20\x20'+ruleId['padEnd'](0xf)+'\x20'+count);}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { type MachineNode, type MachinePair } from "./machine-topology.js";
|
|
2
|
-
import { type CrossMachineDependency, type GuardResolution } from "./machine-context.js";
|
|
3
|
-
export interface RawNodeDef {
|
|
4
|
-
name: string;
|
|
5
|
-
pairs: Array<{
|
|
6
|
-
prev_node: string;
|
|
7
|
-
threshold: number;
|
|
8
|
-
forwards: Array<{
|
|
9
|
-
name: string;
|
|
10
|
-
weight: number;
|
|
11
|
-
namedOperator?: string;
|
|
12
|
-
permissionIndex?: number;
|
|
13
|
-
named_operator?: string;
|
|
14
|
-
permission_index?: number;
|
|
15
|
-
guard?: unknown;
|
|
16
|
-
retained_submission?: unknown;
|
|
17
|
-
}>;
|
|
18
|
-
}>;
|
|
19
|
-
}
|
|
20
|
-
export interface RawMachineOp {
|
|
21
|
-
operation_type: "machine";
|
|
22
|
-
data: {
|
|
23
|
-
object: string | {
|
|
24
|
-
name: string;
|
|
25
|
-
permission?: string;
|
|
26
|
-
replaceExistName?: boolean;
|
|
27
|
-
replace_exist_name?: boolean;
|
|
28
|
-
};
|
|
29
|
-
description?: string;
|
|
30
|
-
node?: {
|
|
31
|
-
op: "add" | "replace" | "delete";
|
|
32
|
-
bReplace?: boolean;
|
|
33
|
-
nodes: RawNodeDef[];
|
|
34
|
-
};
|
|
35
|
-
publish?: boolean;
|
|
36
|
-
};
|
|
37
|
-
env: {
|
|
38
|
-
account?: string;
|
|
39
|
-
network?: "localnet" | "testnet" | "mainnet";
|
|
40
|
-
confirmed?: boolean;
|
|
41
|
-
no_cache?: boolean;
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
export declare function getMachineName(op: RawMachineOp): string;
|
|
45
|
-
export interface RawProgressOp {
|
|
46
|
-
operation_type: string;
|
|
47
|
-
data: {
|
|
48
|
-
object: string;
|
|
49
|
-
progress?: {
|
|
50
|
-
operation: {
|
|
51
|
-
next_node_name: string;
|
|
52
|
-
forward: string;
|
|
53
|
-
};
|
|
54
|
-
};
|
|
55
|
-
submission?: unknown;
|
|
56
|
-
};
|
|
57
|
-
env: {
|
|
58
|
-
account?: string;
|
|
59
|
-
network?: "localnet" | "testnet" | "mainnet";
|
|
60
|
-
};
|
|
61
|
-
_source_line?: number;
|
|
62
|
-
}
|
|
63
|
-
export interface LoadedExample {
|
|
64
|
-
example_name: string;
|
|
65
|
-
relative_path: string;
|
|
66
|
-
absolute_path: string;
|
|
67
|
-
machine_ops: Array<{
|
|
68
|
-
op: RawMachineOp;
|
|
69
|
-
line_start: number;
|
|
70
|
-
}>;
|
|
71
|
-
progress_ops: RawProgressOp[];
|
|
72
|
-
defined_guard_names: Set<string>;
|
|
73
|
-
business_description?: string;
|
|
74
|
-
}
|
|
75
|
-
export type FindingSeverity = "critical" | "high" | "medium" | "low" | "info";
|
|
76
|
-
export type FindingCategory = "schema_consistency" | "design" | "runtime" | "cross_machine" | "round_trip" | "progress" | "risk_rule";
|
|
77
|
-
export interface Finding {
|
|
78
|
-
example: string;
|
|
79
|
-
source_file: string;
|
|
80
|
-
line: number;
|
|
81
|
-
machine_name: string;
|
|
82
|
-
category: FindingCategory;
|
|
83
|
-
severity: FindingSeverity;
|
|
84
|
-
title: string;
|
|
85
|
-
detail: string;
|
|
86
|
-
rule_id?: string;
|
|
87
|
-
fix?: string;
|
|
88
|
-
}
|
|
89
|
-
export declare function nodeDefsToMachine(nodeDefs: RawNodeDef[]): {
|
|
90
|
-
nodes: MachineNode[];
|
|
91
|
-
pairs: MachinePair[];
|
|
92
|
-
};
|
|
93
|
-
export declare function loadAllExamples(examplesDir?: string): LoadedExample[];
|
|
94
|
-
export declare function analyzeSchemaConsistency(_example: LoadedExample): Finding[];
|
|
95
|
-
export declare function analyzeThresholdIssues(example: LoadedExample): Finding[];
|
|
96
|
-
export declare function analyzeNetworkSafety(example: LoadedExample): Finding[];
|
|
97
|
-
export declare function analyzeConfirmationBypass(example: LoadedExample): Finding[];
|
|
98
|
-
export declare function analyzeGuardReferences(example: LoadedExample): Finding[];
|
|
99
|
-
export declare function analyzeCrossMachineDeps(example: LoadedExample, guardResolutions?: Map<string, GuardResolution>): {
|
|
100
|
-
deps: CrossMachineDependency[];
|
|
101
|
-
cycles: string[][];
|
|
102
|
-
findings: Finding[];
|
|
103
|
-
};
|
|
104
|
-
export declare function analyzeRoundTrip(example: LoadedExample): Finding[];
|
|
105
|
-
export declare function analyzeProgressOps(example: LoadedExample): Finding[];
|
|
106
|
-
export declare function analyzePublishStep(example: LoadedExample): Finding[];
|
|
107
|
-
export declare function analyzeRiskRuleCoverage(example: LoadedExample): {
|
|
108
|
-
ruleCounts: Map<string, number>;
|
|
109
|
-
totalFindings: number;
|
|
110
|
-
};
|
|
111
|
-
export interface ScanResult {
|
|
112
|
-
examples: LoadedExample[];
|
|
113
|
-
findings_by_example: Map<string, Finding[]>;
|
|
114
|
-
findings_by_category: Map<FindingCategory, Finding[]>;
|
|
115
|
-
findings_by_severity: Map<FindingSeverity, Finding[]>;
|
|
116
|
-
total_findings: number;
|
|
117
|
-
risk_rule_coverage: Map<string, number>;
|
|
118
|
-
}
|
|
119
|
-
export declare function scanAllExamples(examplesDir?: string): ScanResult;
|
|
120
|
-
export declare function formatScanReport(result: ScanResult): string;
|
|
121
|
-
export declare const EXAMPLES_SCANNER_VERSION = "1.0.0";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import*as a119a from'fs';import*as a119b from'path';import{analyzeTopology}from'./machine-topology.js';import{assessMachineRisks}from'./machine-risk.js';import{runStaticChecklist}from'./machine-confirm.js';import{explainNode}from'./machine-translation.js';import{identifyCrossMachineDependency,detectCrossMachineCycle}from'./machine-context.js';export function getMachineName(a){if(typeof a['data']['object']==='string')return a['data']['object'];return a['data']['object']['name'];}const EXAMPLES_DIR=a119b['resolve']('d:/wowok/docs/examples');export function nodeDefsToMachine(a){const b=[],c=[],d=new Set();for(const e of a){!d['has'](e['name'])&&(b['push']({'name':e['name']}),d['add'](e['name']));for(const f of e['pairs']){c['push']({'prev_node':f['prev_node'],'next_node':e['name'],'threshold':f['threshold'],'forwards':f['forwards']['map'](g=>normalizeForward(g))});}}return{'nodes':b,'pairs':c};}function normalizeForward(a){const b=a['named_operator']??a['namedOperator'],c=a['permission_index']??a['permissionIndex'];let d;if(typeof a['guard']==='string')d=a['guard'];else{if(a['guard']&&typeof a['guard']==='object'){const h=a['guard'];if(typeof h['guard']==='string')d=h['guard'];}}let e;if(a['retained_submission']!==undefined&&a['retained_submission']!==null){if(typeof a['retained_submission']==='string')e=a['retained_submission'];else{if(Array['isArray'](a['retained_submission']))e=a['retained_submission'];else{if(typeof a['retained_submission']==='object'){const i=a['retained_submission'];i['retained_submission']!==undefined&&(e=i['retained_submission']);}}}}else{if(a['guard']&&typeof a['guard']==='object'){const j=a['guard'];if(j['retained_submission']!==undefined&&j['retained_submission']!==null){if(Array['isArray'](j['retained_submission']))e=j['retained_submission'];else typeof j['retained_submission']==='string'&&(e=j['retained_submission']);}}}return{'name':a['name'],'weight':a['weight'],'named_operator':b,'permission_index':c,'guard':d,'retained_submission':e};}function extractJsonBlocks(a){const b=a119a['readFileSync'](a,'utf-8'),c=b['split']('\x0a'),d=[];let e=0x0;while(e<c['length']){const f=c[e];if(f['trim']()['startsWith']('```json')){const g=[];let h=e+0x1;while(h<c['length']&&!c[h]['trim']()['startsWith']('```')){g['push'](c[h]),h++;}const k=g['join']('\x0a');try{const l=JSON['parse'](k);let m=null;if(l&&typeof l==='object'&&!Array['isArray'](l)){const n=l;if(n['tool']==='onchain_operations'&&n['data']&&typeof n['data']==='object'&&!Array['isArray'](n['data'])){const o=n['data'];typeof o['operation_type']==='string'&&(m={'operation_type':o['operation_type'],'data':o['data'],...o['env']!==undefined?{'env':o['env']}:{}});}else typeof n['operation_type']==='string'&&(m=n);}m&&typeof m['operation_type']==='string'&&d['push']({'lineStart':e+0x1,'raw':k,'json':m});}catch{}e=h+0x1;}else e++;}return d;}function extractDefinedGuardNames(a){const c=extractJsonBlocks(a),d=new Set();for(const e of c){if(e['json']['operation_type']!=='guard')continue;const f=e['json']['data'];if(!f)continue;const g=f['namedNew'],h=g?.['name'];if(h)d['add'](h);}return d;}export function loadAllExamples(a=EXAMPLES_DIR){const b=[];if(!a119a['existsSync'](a))return b;const c=a119a['readdirSync'](a,{'withFileTypes':!![]});for(const d of c){if(!d['isDirectory']())continue;const e=a119b['join'](a,d['name']),f=a119a['readdirSync'](e,{'withFileTypes':!![]});for(const g of f){if(!g['isFile']())continue;const h=a119b['join'](e,g['name']),i=d['name']+'/'+g['name'];if(g['name']['endsWith']('.md')){const j=extractMachineOpsFromMarkdown(h),k=extractProgressOpsFromMarkdown(h),l=extractDefinedGuardNames(h);if(j['length']===0x0&&k['length']===0x0&&l['size']===0x0)continue;const m=j[0x0]?.['op']['data']['description'];b['push']({'example_name':d['name'],'relative_path':i,'absolute_path':h,'machine_ops':j,'progress_ops':k,'defined_guard_names':l,'business_description':m});}else{if(g['name']['endsWith']('.json')&&g['name']['includes']('machine')){const n=a119a['readFileSync'](h,'utf-8');try{const o=JSON['parse'](n);if(!Array['isArray'](o)||o['length']===0x0)continue;const p=a119b['basename'](g['name'],'.json');b['push']({'example_name':d['name'],'relative_path':i,'absolute_path':h,'machine_ops':[{'op':{'operation_type':'machine','data':{'object':{'name':p,'replaceExistName':![]},'node':{'op':'add','nodes':o},'publish':![]},'env':{'network':'testnet'}},'line_start':0x0}],'progress_ops':[],'defined_guard_names':new Set(),'business_description':'(standalone\x20JSON:\x20'+p+')'});}catch{}}}}}return b;}function extractMachineOpsFromMarkdown(a){const c=extractJsonBlocks(a),d=[];for(const e of c){if(e['json']['operation_type']!=='machine')continue;try{const f=e['json'];if(!f['data'])continue;const g=f['data']['node']?.['nodes']&&Array['isArray'](f['data']['node']['nodes']),h=f['data']['publish']===!![];if(!g&&!h)continue;d['push']({'op':f,'line_start':e['lineStart']});}catch{}}return d;}function extractProgressOpsFromMarkdown(a){const c=extractJsonBlocks(a),d=[];for(const e of c){const f=e['json'],g=f['data'];if(!g)continue;const h=g['progress'];if(!h)continue;const i=h['operation'];if(!i||!i['next_node_name']||!i['forward'])continue;try{d['push']({'operation_type':f['operation_type'],'data':{'object':g['object'],'progress':{'operation':{'next_node_name':i['next_node_name'],'forward':i['forward']}},'submission':g['submission']},'env':{'account':f['env']?.['account'],'network':f['env']?.['network']},'_source_line':e['lineStart']});}catch{}}return d;}export function analyzeSchemaConsistency(a){return[];}export function analyzeThresholdIssues(a){const b=[];for(const {op:c,line_start:d}of a['machine_ops']){if(!c['data']['node']?.['nodes'])continue;const {nodes:e,pairs:f}=nodeDefsToMachine(c['data']['node']['nodes']),g=getMachineName(c),h=f['filter'](j=>j['prev_node']===''),i=h['length']>0x1;for(const j of f){if(j['prev_node']===''&&j['threshold']===0x0){const k=j['forwards']['length'],l=k===0x1||i;if(l)continue;b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':g,'category':'design','severity':'medium','title':'Entry\x20pair\x20with\x20threshold=0\x20and\x20multiple\x20Forwards\x20(potential\x20permission\x20bypass)','detail':'Pair\x20(prev=\x22\x22,\x20next=\x22'+j['next_node']+'\x22)\x20has\x20threshold=0\x20with\x20'+k+'\x20Forwards.\x20'+'With\x20threshold=0,\x20ANY\x20single\x20Forward\x20fires\x20→\x20migration,\x20potentially\x20bypassing\x20other\x20Forwards\x27\x20'+'permission\x20checks.\x20Set\x20threshold\x20≥\x201\x20so\x20ALL\x20intended\x20Forwards\x20must\x20agree.\x20'+'(Note:\x20single-Forward\x20Pairs\x20and\x20competing-OR\x20Pairs\x20with\x20threshold=0\x20are\x20NOT\x20flagged\x20—\x20they\x20are\x20legitimate.)','rule_id':'R-M3-09','fix':'Set\x20threshold=1\x20(or\x20higher)\x20on\x20entry\x20pair\x20targeting\x20\x22'+j['next_node']+'\x22\x20if\x20Forwards\x20represent\x20AND\x20semantics;\x20keep\x20threshold=0\x20if\x20OR\x20semantics\x20is\x20intended\x20(then\x20consider\x20splitting\x20into\x20competing\x20Pairs).'});}}for(const m of f){const n=m['forwards']['reduce']((o,p)=>o+p['weight'],0x0);m['threshold']>n&&b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':g,'category':'design','severity':'critical','title':'Threshold\x20exceeds\x20total\x20forward\x20weight\x20(unreachable)','detail':'Pair\x20(prev=\x22'+m['prev_node']+'\x22,\x20next=\x22'+m['next_node']+'\x22)\x20has\x20threshold='+m['threshold']+'\x20but\x20total\x20forward\x20weight='+n+'.\x20This\x20pair\x20can\x20NEVER\x20be\x20satisfied\x20—\x20workflow\x20dead-ends\x20here.','rule_id':'R-M2-06','fix':'Reduce\x20threshold\x20to\x20≤\x20'+n+'\x20or\x20add\x20more\x20forwards\x20with\x20weight.'});}}return b;}export function analyzeNetworkSafety(a){const b=[];for(const {op:c,line_start:d}of a['machine_ops']){const e=getMachineName(c),f=c['data']['publish']===!![],g=c['env']['network'];f&&g==='mainnet'&&b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':e,'category':'runtime','severity':'critical','title':'Direct\x20mainnet\x20publish\x20without\x20testnet\x20test','detail':'Machine\x20\x22'+e+'\x22\x20is\x20published\x20directly\x20to\x20mainnet.\x20Per\x20R-M4-02,\x20must\x20test\x20on\x20testnet\x20first.','rule_id':'R-M4-02','fix':'Set\x20env.network\x20to\x20\x22testnet\x22\x20for\x20first\x20publish,\x20run\x20end-to-end\x20test,\x20then\x20re-publish\x20on\x20mainnet.'});}return b;}export function analyzeConfirmationBypass(a){const b=[];for(const {op:c,line_start:d}of a['machine_ops']){const e=getMachineName(c),f=c['data']['publish']===!![],g=c['env']['confirmed']===!![];f&&g&&b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':e,'category':'runtime','severity':'medium','title':'confirmed=true\x20bypasses\x20user\x20confirmation\x20prompt','detail':'Machine\x20\x22'+e+'\x22\x20is\x20published\x20with\x20env.confirmed=true.\x20This\x20bypasses\x20the\x20ConfirmGate\x20user-confirmation\x20step.\x20Examples\x20should\x20demonstrate\x20the\x20two-step\x20confirmation\x20flow\x20(Phase\x201\x20prompt\x20→\x20Phase\x202\x20confirmed=true).','rule_id':'R-M4-04','fix':'Show\x20Phase\x201\x20(without\x20confirmed=true)\x20and\x20Phase\x202\x20(with\x20confirmed=true)\x20as\x20separate\x20steps\x20in\x20the\x20example.'});}return b;}export function analyzeGuardReferences(a){const b=[],c=a['defined_guard_names'];for(const {op:d,line_start:e}of a['machine_ops']){if(!d['data']['node']?.['nodes'])continue;const f=getMachineName(d),h=d['data']['publish']===!![];for(const i of d['data']['node']['nodes']){for(const j of i['pairs']){for(const k of j['forwards']){let l;if(typeof k['guard']==='string')l=k['guard'];else{if(k['guard']&&typeof k['guard']==='object'){const m=k['guard'];if(typeof m['guard']==='string')l=m['guard'];}}if(!l)continue;!c['has'](l)&&b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':e,'machine_name':f,'category':'runtime','severity':h?'critical':'high','title':'Guard\x20\x22'+l+'\x22\x20referenced\x20but\x20not\x20defined\x20in\x20example','detail':'Forward\x20\x22'+k['name']+'\x22\x20references\x20Guard\x20\x22'+l+'\x22\x20but\x20no\x20operation_type=\x22guard\x22\x20with\x20name=\x22'+l+'\x22\x20appears\x20earlier\x20in\x20'+a['relative_path']+'.\x20'+(h?'Publishing\x20will\x20fail\x20at\x20runtime.':'Will\x20fail\x20at\x20machine\x20creation.'),'rule_id':h?'R-M4-03':'R-M2-01','fix':'Add\x20a\x20guard\x20creation\x20step\x20(operation_type=\x22guard\x22)\x20with\x20name=\x22'+l+'\x22\x20BEFORE\x20the\x20machine\x20creation\x20step.'});}}}}return b;}export function analyzeCrossMachineDeps(a,b=new Map()){const c=[],d=[];for(const {op:f,line_start:g}of a['machine_ops']){if(!f['data']['node']?.['nodes'])continue;const {nodes:h,pairs:i}=nodeDefsToMachine(f['data']['node']['nodes']),j=getMachineName(f),k=identifyCrossMachineDependency(j,{'nodes':h,'pairs':i},b);d['push'](...k),k['length']>0x0&&c['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':g,'machine_name':j,'category':'cross_machine','severity':'info','title':'Machine\x20declares\x20'+k['length']+'\x20cross-Machine\x20dependencies','detail':k['map'](l=>'Forward\x20\x22'+l['dependency']['machine_a_forward']+'\x22\x20depends\x20on\x20Machine\x20\x22'+l['machine_b_id']+'\x22\x20reaching\x20node\x20\x22'+l['dependency']['machine_b_node']+'\x22')['join'](';\x20'),'rule_id':'P-M3'});}const e=detectCrossMachineCycle(d);for(const l of e){c['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':0x0,'machine_name':'(project-level)','category':'cross_machine','severity':'critical','title':'Cross-Machine\x20dependency\x20cycle\x20detected','detail':'Cycle:\x20'+l['join']('\x20→\x20'),'rule_id':'R-M2-07','fix':'Break\x20the\x20cycle\x20by\x20removing\x20one\x20of\x20the\x20dependencies\x20in\x20the\x20cycle.'});}return{'deps':d,'cycles':e,'findings':c};}export function analyzeRoundTrip(a){const b=[];for(const {op:c,line_start:d}of a['machine_ops']){if(!c['data']['node']?.['nodes'])continue;const {nodes:e,pairs:f}=nodeDefsToMachine(c['data']['node']['nodes']),g=getMachineName(c),h=analyzeTopology(e,f);h['has_cycles']&&b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':g,'category':'round_trip','severity':'critical','title':'Topology\x20analysis:\x20cycle\x20detected\x20(DAG\x20violation)','detail':'Machine\x20\x22'+g+'\x22\x20has\x20cycles:\x20'+JSON['stringify'](h['cycle_nodes']),'rule_id':'R-M1-03','fix':'Remove\x20cycles\x20—\x20Machine\x20must\x20be\x20a\x20DAG.'});const i={'network':c['env']['network']==='mainnet'?'mainnet':'testnet','testnet_test_passed':c['env']['network']!=='mainnet','published_services':new Set(),'published_guards':new Set(),'published_permissions':new Set(),'published_machines':new Set(),'published_arbitrations':new Set(),'published_rewards':new Set(),'published_allocators':new Set(),'published_repositories':new Set()};for(const p of f){for(const q of p['forwards']){if(q['guard'])i['published_guards']['add'](q['guard']);}}const j={'nodes':e,'pairs':f,'b_published':c['data']['publish']===!![]},k=assessMachineRisks(j,i),l=k['detected_risks']['filter'](s=>s['severity']==='critical');if(l['length']>0x0)for(const s of l){b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':g,'category':'round_trip','severity':'critical','title':'Risk\x20assessment:\x20'+s['rule_id']+'\x20('+s['severity']+')','detail':s['detail'],'rule_id':s['rule_id']});}const m={'nodes':e,'pairs':f,'name':g},n=runStaticChecklist(m),o=n['failed_items']['filter'](t=>['C-01','C-03','C-06','C-10']['includes'](t['id']));for(const t of o){b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':g,'category':'round_trip','severity':'high','title':'Checklist\x20'+t['id']+'\x20failed:\x20'+t['description'],'detail':t['detail']??'(no\x20detail)','rule_id':t['id']});}for(const u of e){const v=f['filter'](y=>y['prev_node']===u['name']),w={'name':u['name'],'pairs':v,'all_pairs':f},x=explainNode(w);(!x['name']||x['pairs']['length']!==v['length'])&&b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':d,'machine_name':g,'category':'round_trip','severity':'medium','title':'Round-trip\x20mismatch\x20for\x20node\x20\x22'+u['name']+'\x22','detail':'explainNode\x20produced\x20inconsistent\x20output:\x20name=\x22'+x['name']+'\x22,\x20pairs_count='+x['pairs']['length']+'\x20(expected\x20'+v['length']+')','rule_id':'RT-001'});}}return b;}export function analyzeProgressOps(a){const b=[],c=new Set();let d='(none)';for(const {op:e}of a['machine_ops']){if(!e['data']['node']?.['nodes'])continue;d=getMachineName(e);const {pairs:f}=nodeDefsToMachine(e['data']['node']['nodes']);for(const g of f){c['add'](g['next_node']+'::'+g['forwards']['map'](h=>h['name'])['join']('|'));for(const h of g['forwards']){c['add'](g['next_node']+'::'+h['name']);}}}for(const i of a['progress_ops']){const j=i['data']['progress']?.['operation'];if(!j)continue;const k=j['next_node_name']+'::'+j['forward'],l=c['has'](k);if(!l){const m=[...c]['some'](n=>n['endsWith']('::'+j['forward']));!m?b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':i['_source_line']??0x0,'machine_name':d,'category':'progress','severity':'high','title':'Progress\x20references\x20unknown\x20forward\x20\x22'+j['forward']+'\x22','detail':'Progress\x20op\x20references\x20forward\x20\x22'+j['forward']+'\x22\x20but\x20no\x20such\x20forward\x20exists\x20in\x20machine\x20\x22'+d+'\x22.','rule_id':'R-M3-04','fix':'Verify\x20forward\x20name\x20matches\x20one\x20defined\x20in\x20the\x20Machine.'}):b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':i['_source_line']??0x0,'machine_name':d,'category':'progress','severity':'medium','title':'Progress\x20forward\x20\x22'+j['forward']+'\x22\x20doesn\x27t\x20lead\x20to\x20\x22'+j['next_node_name']+'\x22','detail':'Forward\x20\x22'+j['forward']+'\x22\x20exists\x20but\x20doesn\x27t\x20target\x20node\x20\x22'+j['next_node_name']+'\x22.','rule_id':'R-M3-05','fix':'Correct\x20next_node_name\x20to\x20match\x20the\x20forward\x27s\x20target.'});}}return b;}export function analyzePublishStep(a){const b=[],c=a['machine_ops']['some'](({op:e})=>e['data']['publish']===!![]),d=a['progress_ops']['length']>0x0;return d&&!c&&b['push']({'example':a['example_name'],'source_file':a['relative_path'],'line':0x0,'machine_name':'(file-level)','category':'runtime','severity':'high','title':'Progress\x20operations\x20present\x20but\x20no\x20`publish:\x20true`\x20step','detail':'Example\x20has\x20'+a['progress_ops']['length']+'\x20progress\x20operations\x20but\x20no\x20machine\x20operation\x20with\x20publish=true.\x20Progress::new\x20will\x20fail\x20at\x20runtime\x20(machine\x20not\x20published).','rule_id':'R-M4-01','fix':'Add\x20a\x20publish\x20step\x20(or\x20set\x20data.publish=true\x20on\x20the\x20machine\x20creation\x20operation).'}),b;}export function analyzeRiskRuleCoverage(a){const b=new Map();let c=0x0;const d=[...analyzeSchemaConsistency(a),...analyzeThresholdIssues(a),...analyzeNetworkSafety(a),...analyzeConfirmationBypass(a),...analyzeGuardReferences(a),...analyzeRoundTrip(a),...analyzeProgressOps(a),...analyzePublishStep(a)];for(const e of d){e['rule_id']&&(b['set'](e['rule_id'],(b['get'](e['rule_id'])??0x0)+0x1),c++);}return{'ruleCounts':b,'totalFindings':c};}export function scanAllExamples(a=EXAMPLES_DIR){const b=loadAllExamples(a),c=new Map(),d=new Map(),e=new Map(),g=new Map();let h=0x0;for(const i of b){const j=[];j['push'](...analyzeSchemaConsistency(i)),j['push'](...analyzeThresholdIssues(i)),j['push'](...analyzeNetworkSafety(i)),j['push'](...analyzeConfirmationBypass(i)),j['push'](...analyzeGuardReferences(i));const k=analyzeCrossMachineDeps(i);j['push'](...k['findings']),j['push'](...analyzeRoundTrip(i)),j['push'](...analyzeProgressOps(i)),j['push'](...analyzePublishStep(i)),c['set'](i['relative_path'],j);for(const l of j){const m=d['get'](l['category'])??[];m['push'](l),d['set'](l['category'],m);const n=e['get'](l['severity'])??[];n['push'](l),e['set'](l['severity'],n),l['rule_id']&&g['set'](l['rule_id'],(g['get'](l['rule_id'])??0x0)+0x1),h++;}}return{'examples':b,'findings_by_example':c,'findings_by_category':d,'findings_by_severity':e,'total_findings':h,'risk_rule_coverage':g};}export function formatScanReport(a){const b=[];b['push']('#\x20Examples\x20Scan\x20Report\x20—\x20d:\x5cwowok\x5cdocs\x5cexamples'),b['push'](''),b['push']('>\x20Auto-generated\x20by\x20`examples-scanner.ts`\x20—\x20comprehensive\x20scan\x20of\x20all'),b['push']('>\x20machine/progress\x20JSON\x20in\x205\x20example\x20directories\x20for\x20design\x20and\x20runtime\x20problems.'),b['push'](''),b['push']('##\x20Summary'),b['push'](''),b['push']('-\x20**Examples\x20scanned**:\x20'+a['examples']['length']),b['push']('-\x20**Total\x20findings**:\x20'+a['total_findings']),b['push'](''),b['push']('###\x20Findings\x20by\x20Severity'),b['push'](''),b['push']('|\x20Severity\x20|\x20Count\x20|'),b['push']('|----------|-------|');const c=['critical','high','medium','low','info'];for(const j of c){const k=a['findings_by_severity']['get'](j)?.['length']??0x0;b['push']('|\x20'+j+'\x20|\x20'+k+'\x20|');}b['push'](''),b['push']('###\x20Findings\x20by\x20Category'),b['push'](''),b['push']('|\x20Category\x20|\x20Count\x20|'),b['push']('|----------|-------|');const d=['schema_consistency','design','runtime','cross_machine','round_trip','progress','risk_rule'];for(const l of d){const m=a['findings_by_category']['get'](l)?.['length']??0x0;b['push']('|\x20'+l+'\x20|\x20'+m+'\x20|');}b['push'](''),b['push']('###\x20Risk\x20Rule\x20Coverage\x20(which\x20rules\x20fired\x20across\x20examples)'),b['push'](''),b['push']('|\x20Rule\x20ID\x20|\x20Total\x20Hits\x20|'),b['push']('|---------|-----------|');const e=[...a['risk_rule_coverage']['entries']()]['sort']((n,o)=>n[0x0]['localeCompare'](o[0x0]));for(const [n,o]of e){b['push']('|\x20'+n+'\x20|\x20'+o+'\x20|');}b['push'](''),b['push']('##\x20Per-Example\x20Findings'),b['push']('');for(const p of a['examples']){const q=a['findings_by_example']['get'](p['relative_path'])??[];b['push']('###\x20'+p['example_name']+'\x20—\x20`'+p['relative_path']+'`'),b['push'](''),b['push']('-\x20**Source**:\x20`'+p['relative_path']+'`'),b['push']('-\x20**Machine\x20operations**:\x20'+p['machine_ops']['length']),b['push']('-\x20**Progress\x20operations**:\x20'+p['progress_ops']['length']),b['push']('-\x20**Defined\x20guards**:\x20'+p['defined_guard_names']['size']);p['business_description']&&b['push']('-\x20**Business\x20description**:\x20'+p['business_description']);b['push']('-\x20**Findings**:\x20'+q['length']),b['push']('');if(q['length']===0x0){b['push']('✅\x20No\x20issues\x20detected.'),b['push']('');continue;}const r=new Map();for(const s of q){const t=r['get'](s['severity'])??[];t['push'](s),r['set'](s['severity'],t);}for(const u of c){const v=r['get'](u)??[];if(v['length']===0x0)continue;b['push']('####\x20'+u['toUpperCase']()+'\x20('+v['length']+')'),b['push']('');for(const w of v){b['push']('-\x20**['+(w['rule_id']??'--')+']\x20'+w['title']+'**\x20(line\x20'+w['line']+')'),b['push']('\x20\x20-\x20'+w['detail']),w['fix']&&b['push']('\x20\x20-\x20**Fix**:\x20'+w['fix']),b['push']('');}}}b['push']('##\x20Cross-Cutting\x20Patterns'),b['push']('');const g=a['findings_by_category']['get']('schema_consistency')??[];g['length']===0x0&&(b['push']('###\x20Schema\x20Consistency\x20—\x20No\x20Issues\x20(camelCase\x20is\x20canonical)'),b['push'](''),b['push']('The\x20previous\x20SCHEMA-001/002/003/004\x20rules\x20have\x20been\x20REMOVED\x20(2026-07-19).'),b['push'](''),b['push']('**Reason**:\x20Verification\x20against\x20MCP\x20schema\x20(`d:\x5cwowok\x5cagent\x5cmcp\x5csrc`)\x20confirmed\x20that:'),b['push']('-\x20`MachineForwardSchema`\x20accepts\x20`namedOperator`,\x20`permissionIndex`\x20(camelCase)'),b['push']('-\x20`MachineForwardGuardSchema`\x20is\x20an\x20OBJECT\x20`{\x20guard:\x20string,\x20retained_submission?:\x20number[]\x20}`\x20(NOT\x20a\x20flat\x20string)'),b['push']('-\x20`NamedObjectSchema`\x20accepts\x20`replaceExistName`,\x20`onChain`\x20(camelCase)'),b['push'](''),b['push']('Source\x20examples\x20using\x20camelCase\x20are\x20therefore\x20CORRECT\x20per\x20MCP\x20schema\x20—\x20the\x20previous\x20rules\x20were\x20false\x20positives.'),b['push'](''));const h=(a['findings_by_category']['get']('design')??[])['filter'](x=>x['rule_id']==='R-M3-09');if(h['length']>0x0){b['push']('###\x20Threshold=0\x20on\x20Multi-Forward\x20Entry\x20Pairs\x20(R-M3-09)'),b['push'](''),b['push']('Found\x20'+h['length']+'\x20multi-Forward\x20entry\x20pairs\x20with\x20threshold=0\x20across\x20examples.'),b['push'](''),b['push']('**Detection\x20logic**\x20(refined\x202026-07-19):'),b['push']('-\x20Single-Forward\x20Pair\x20with\x20threshold=0\x20→\x20**NOT\x20flagged**\x20(legitimate:\x20single\x20execution\x20triggers\x20migration\x20regardless\x20of\x20threshold)'),b['push']('-\x20Competing-OR\x20Pairs\x20(multiple\x20Pairs\x20share\x20prev_node=\x22\x22)\x20with\x20threshold=0\x20→\x20**NOT\x20flagged**\x20(legitimate\x20OR\x20semantics)'),b['push']('-\x20Multi-Forward\x20Pair\x20with\x20threshold=0\x20AND\x20no\x20competing\x20siblings\x20→\x20**FLAGGED**\x20(potential\x20permission\x20bypass:\x20any\x20single\x20Forward\x20fires\x20→\x20migration)'),b['push']('');const x=[...new Set(h['map'](y=>y['source_file']))];b['push']('**Affected\x20source\x20files**:\x20'+x['map'](y=>'`'+y+'`')['join'](',\x20')+'.'),b['push'](''),b['push']('**Fix**:\x20Set\x20threshold=1\x20(or\x20higher)\x20if\x20Forwards\x20represent\x20AND\x20semantics;\x20keep\x20threshold=0\x20only\x20if\x20OR\x20semantics\x20is\x20intended\x20(then\x20consider\x20splitting\x20into\x20competing\x20Pairs).'),b['push']('');}else b['push']('###\x20Threshold=0\x20on\x20Entry\x20Pairs\x20—\x20No\x20Issues'),b['push'](''),b['push']('All\x20entry\x20pairs\x20with\x20threshold=0\x20fall\x20into\x20legitimate\x20categories\x20(single-Forward\x20or\x20competing-OR).'),b['push']('');const i=(a['findings_by_category']['get']('runtime')??[])['filter'](y=>y['rule_id']==='R-M4-02');return i['length']>0x0&&(b['push']('###\x20Direct\x20Mainnet\x20Publish\x20(R-M4-02)'),b['push'](''),b['push']('Found\x20'+i['length']+'\x20examples\x20publishing\x20directly\x20to\x20mainnet\x20without\x20testnet\x20test.'),b['push'](''),b['push']('**Affected\x20examples**:\x20MyShop,\x20MyShop_Advanced.'),b['push'](''),b['push']('**Fix**:\x20Add\x20a\x20testnet\x20publish\x20step\x20before\x20mainnet,\x20or\x20change\x20the\x20network\x20to\x20testnet\x20for\x20examples.'),b['push']('')),b['push']('##\x20Recommendations\x20for\x20Linter\x20&\x20Cognition\x20Closure'),b['push'](''),b['push']('Based\x20on\x20the\x20findings,\x20the\x20following\x20linter\x20rules\x20and\x20cognition\x20improvements\x20are\x20recommended:'),b['push'](''),b['push']('1.\x20**REMOVED\x20SCHEMA-001/002/003/004**\x20(2026-07-19):\x20These\x20rules\x20incorrectly\x20assumed\x20SDK\x20snake_case\x20as\x20the\x20standard.\x20MCP\x20schema\x20actually\x20accepts\x20camelCase\x20(`namedOperator`,\x20`permissionIndex`,\x20`replaceExistName`)\x20and\x20nested\x20Guard\x20object\x20form.\x20Examples\x20are\x20correct\x20as-is.'),b['push']('2.\x20**REFACTORED\x20R-M3-02\x20→\x20R-M3-09**\x20(2026-07-19,\x20then\x202026-07-20):\x20Original\x20R-M3-02\x20(threshold=0)\x20conflicted\x20with\x20machine-risk.ts\x27s\x20R-M3-02\x20(permissionIndex\x20out\x20of\x20bounds).\x20Initially\x20renamed\x20to\x20R-M3-06,\x20but\x20that\x20also\x20collided\x20with\x20machine-risk.ts\x27s\x20R-M3-06\x20(Permission\x20game\x20imbalance).\x20Final\x20rename:\x20R-M3-09.\x20Logic\x20also\x20refined:\x20single-Forward\x20and\x20competing-OR\x20threshold=0\x20cases\x20are\x20now\x20exempt.'),b['push']('3.\x20**Reinforce\x20R-M4-03**:\x20Guard\x20must\x20be\x20created\x20before\x20Machine\x20publish.\x20Examples\x20should\x20include\x20guard\x20creation\x20step\x20(operation_type=\x22guard\x22)\x20with\x20matching\x20name\x20before\x20machine\x20creation.'),b['push']('4.\x20**Add\x20lint\x20rule**\x20for\x20`confirmed:\x20true`\x20+\x20`publish:\x20true`\x20combination\x20without\x20showing\x20the\x20Phase\x201\x20confirmation\x20prompt\x20first.'),b['push']('5.\x20**IMPLEMENTED**:\x20R-M3-08\x20(permissionIndex\x20<\x201000)\x20rule\x20added\x20to\x20machine-risk.ts,\x20and\x20C-11\x20checklist\x20item\x20added\x20to\x20machine-confirm.ts\x20(2026-07-20).\x20Both\x20enforce\x20the\x20on-chain\x20USER_DEFINED_PERM_INDEX_START\x20=\x201000\x20hard\x20constraint\x20(see\x20doc\x2006\x20§4.4).'),b['push'](''),b['push']('---'),b['push'](''),b['push']('*End\x20of\x20report.*'),b['join']('\x0a');}export const EXAMPLES_SCANNER_VERSION='1.0.0';
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export type GlossaryCategory = "role" | "object" | "operation" | "acceptance" | "permission" | "fund";
|
|
2
|
-
export interface GlossaryEntry {
|
|
3
|
-
term: string;
|
|
4
|
-
definition: string;
|
|
5
|
-
aliases: string[];
|
|
6
|
-
category: GlossaryCategory;
|
|
7
|
-
}
|
|
8
|
-
export declare const CONCEPT_GLOSSARY: GlossaryEntry[];
|
|
9
|
-
export declare function resolveTerm(alias: string): string;
|
|
10
|
-
export declare function lookupEntry(term: string): GlossaryEntry | undefined;
|
|
11
|
-
export interface GlossaryDrift {
|
|
12
|
-
alias: string;
|
|
13
|
-
canonical: string;
|
|
14
|
-
line?: number;
|
|
15
|
-
}
|
|
16
|
-
export declare function validateText(text: string): GlossaryDrift[];
|
|
17
|
-
export declare function auditSchemaFields(obj: Record<string, unknown>): GlossaryDrift[];
|
|
18
|
-
export declare const CONCEPT_GLOSSARY_VERSION = 1;
|