@wowok/agent-mcp 3.4.0 → 3.4.1
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/README.md +8 -0
- package/dist/chain-semantics/composition-truth.d.ts +102 -0
- package/dist/chain-semantics/composition-truth.js +1 -0
- package/dist/chain-semantics/eval-order.js +1 -1
- package/dist/chain-semantics/fund-flow.js +1 -1
- package/dist/chain-semantics/index.d.ts +1 -0
- package/dist/chain-semantics/index.js +1 -1
- package/dist/composition/audit.js +1 -1
- package/dist/composition/blueprint-view.d.ts +3 -3
- package/dist/composition/blueprint-view.js +1 -1
- package/dist/composition/compile.d.ts +24 -3
- package/dist/composition/compile.js +1 -1
- package/dist/composition/emit-phases.d.ts +206 -0
- package/dist/composition/emit-phases.js +1 -0
- package/dist/composition/generate.d.ts +40 -0
- package/dist/composition/generate.js +1 -0
- package/dist/composition/guard-fill.d.ts +44 -0
- package/dist/composition/guard-fill.js +1 -0
- package/dist/composition/inflight.d.ts +20 -2
- package/dist/composition/inflight.js +1 -1
- package/dist/composition/input-normalize.d.ts +15 -0
- package/dist/composition/input-normalize.js +1 -0
- package/dist/composition/materialize.d.ts +18 -13
- package/dist/composition/materialize.js +1 -1
- package/dist/composition/mode-gates.d.ts +35 -0
- package/dist/composition/mode-gates.js +1 -0
- package/dist/composition/param-disclosure.js +1 -1
- package/dist/composition/plan-retry-ledger.d.ts +21 -0
- package/dist/composition/plan-retry-ledger.js +1 -0
- package/dist/composition/plan.d.ts +7 -2
- package/dist/composition/plan.js +1 -1
- package/dist/composition/product-card.d.ts +94 -0
- package/dist/composition/product-card.js +1 -0
- package/dist/composition/supply-chain-emit.d.ts +46 -0
- package/dist/composition/supply-chain-emit.js +1 -0
- package/dist/config/config-audit.spec.js +1 -1
- package/dist/config/config-warnings.d.ts +2 -0
- package/dist/config/config-warnings.js +1 -0
- package/dist/config/exposure.d.ts +2 -2
- package/dist/config/judgment.d.ts +31 -5
- package/dist/config/judgment.js +1 -1
- package/dist/config/judgment.spec.js +1 -1
- package/dist/config/match-policy-file.d.ts +34 -0
- package/dist/config/match-policy-file.js +1 -0
- package/dist/config/match-policy-file.spec.d.ts +1 -0
- package/dist/config/match-policy-file.spec.js +1 -0
- package/dist/config/rule-engine.d.ts +5 -5
- package/dist/config/rule-engine.js +1 -1
- package/dist/config/runtime.d.ts +0 -1
- package/dist/config/runtime.js +1 -1
- package/dist/config/severity.d.ts +0 -2
- package/dist/config/severity.js +1 -1
- package/dist/config/store-policy.spec.js +1 -1
- package/dist/config/template-params.d.ts +42 -0
- package/dist/config/template-params.js +1 -0
- package/dist/config/template-params.spec.d.ts +1 -0
- package/dist/config/template-params.spec.js +1 -0
- package/dist/data/api/api.spec.js +1 -1
- package/dist/data/api/server.js +1 -1
- package/dist/data/projection/store.d.ts +2 -1
- package/dist/data/projection/store.js +1 -1
- package/dist/data/projection/types.d.ts +22 -0
- package/dist/data/sync/cdc.d.ts +1 -2
- package/dist/data/sync/cdc.js +1 -1
- package/dist/evaluation/acceptance.d.ts +8 -0
- package/dist/evaluation/acceptance.js +1 -1
- package/dist/evaluation/builtins/demand-match.js +1 -1
- package/dist/evaluation/builtins/graph-service.spec.js +1 -1
- package/dist/evaluation/capability.d.ts +2 -0
- package/dist/evaluation/category-match-rules.d.ts +0 -1
- package/dist/evaluation/category-match-rules.js +1 -1
- package/dist/evaluation/composer.d.ts +25 -0
- package/dist/evaluation/composer.js +1 -1
- package/dist/evaluation/engine.js +1 -1
- package/dist/evaluation/extract.d.ts +7 -0
- package/dist/evaluation/extract.js +1 -1
- package/dist/evaluation/game-strategy.d.ts +0 -3
- package/dist/evaluation/game-strategy.js +1 -1
- package/dist/evaluation/match-operation.d.ts +9 -0
- package/dist/evaluation/match-operation.js +1 -1
- package/dist/evaluation/match-policy-resolver.d.ts +9 -0
- package/dist/evaluation/match-policy-resolver.js +1 -0
- package/dist/evaluation/match-policy.d.ts +3 -1
- package/dist/evaluation/match-policy.js +1 -1
- package/dist/evaluation/region.d.ts +0 -6
- package/dist/evaluation/region.js +1 -1
- package/dist/evaluation/standards.d.ts +2 -1
- package/dist/evaluation/standards.js +1 -1
- package/dist/evaluation/structured-lines.d.ts +8 -0
- package/dist/evaluation/structured-lines.js +1 -0
- package/dist/evaluation/types.d.ts +6 -0
- package/dist/experience/realtime-feedback.js +1 -1
- package/dist/extensions/capability-manifest.d.ts +1 -0
- package/dist/extensions/capability-manifest.js +1 -1
- package/dist/extensions/capability.d.ts +91 -0
- package/dist/extensions/capability.js +1 -0
- package/dist/extensions/industry-audit.spec.js +1 -1
- package/dist/extensions/industry-pack.d.ts +13 -0
- package/dist/extensions/industry-pack.js +1 -1
- package/dist/extensions/modes.js +1 -1
- package/dist/extensions/registry.d.ts +0 -2
- package/dist/extensions/registry.js +1 -1
- package/dist/goal/GoalEngine.js +1 -1
- package/dist/graph/onchain/analyze.js +1 -1
- package/dist/graph/onchain/expand.js +1 -1
- package/dist/graph/onchain/exposure.js +1 -1
- package/dist/graph/onchain/facts.js +1 -1
- package/dist/graph/onchain/order-status.d.ts +0 -1
- package/dist/graph/onchain/order-status.js +1 -1
- package/dist/harness/recover.js +1 -1
- package/dist/harness/verify.d.ts +0 -3
- package/dist/harness/verify.js +1 -1
- package/dist/intent/types.d.ts +0 -1
- package/dist/intent/types.js +1 -1
- package/dist/keeper/detectors.js +1 -1
- package/dist/keeper/types.d.ts +0 -1
- package/dist/keeper/types.js +1 -1
- package/dist/knowledge/allocation-risk.d.ts +1 -0
- package/dist/knowledge/allocation-risk.js +1 -1
- package/dist/knowledge/allocator-rail-verifier.d.ts +6 -1
- package/dist/knowledge/allocator-rail-verifier.js +1 -1
- package/dist/knowledge/arbitration-ledger.js +1 -1
- package/dist/knowledge/arbitration-puzzle.js +1 -1
- package/dist/knowledge/audit-rules.d.ts +2 -2
- package/dist/knowledge/audit-rules.js +1 -1
- package/dist/knowledge/baselines/judgment-baselines.json +21 -2
- package/dist/knowledge/baselines/rules/oracle.json +120 -0
- package/dist/knowledge/baselines/rules/plan.json +384 -17
- package/dist/knowledge/baselines/rules/progress.json +20 -2
- package/dist/knowledge/builtin-templates.d.ts +12 -1
- package/dist/knowledge/builtin-templates.js +1 -1
- package/dist/knowledge/component-schema.js +1 -1
- package/dist/knowledge/contact-templates.d.ts +0 -1
- package/dist/knowledge/contact-templates.js +1 -1
- package/dist/knowledge/dynamic-pricing.js +1 -1
- package/dist/knowledge/fee-param-bindings.js +1 -1
- package/dist/knowledge/fund-layer.d.ts +1 -0
- package/dist/knowledge/fund-layer.js +1 -1
- package/dist/knowledge/game-scenarios.js +1 -1
- package/dist/knowledge/getting-started.js +1 -1
- package/dist/knowledge/guard-binding-table.d.ts +52 -0
- package/dist/knowledge/guard-binding-table.js +1 -0
- package/dist/knowledge/guard-binding-verifier.d.ts +30 -0
- package/dist/knowledge/guard-binding-verifier.js +1 -0
- package/dist/knowledge/guard-bindings.js +1 -1
- package/dist/knowledge/guard-blueprint.d.ts +68 -0
- package/dist/knowledge/guard-blueprint.js +1 -0
- package/dist/knowledge/guard-design-patterns.d.ts +1 -1
- package/dist/knowledge/guard-design-patterns.js +1 -1
- package/dist/knowledge/guard-field-cognition.js +1 -1
- package/dist/knowledge/guard-host-context.d.ts +24 -0
- package/dist/knowledge/guard-host-context.js +1 -0
- package/dist/knowledge/guard-lint.js +1 -1
- package/dist/knowledge/guard-node-gates.d.ts +3 -0
- package/dist/knowledge/guard-node-gates.js +1 -1
- package/dist/knowledge/guard-puzzle.js +1 -1
- package/dist/knowledge/guard-render.js +1 -1
- package/dist/knowledge/guard-risk.js +1 -1
- package/dist/knowledge/guard-submission-prompt.d.ts +11 -0
- package/dist/knowledge/guard-submission-prompt.js +1 -1
- package/dist/knowledge/guard-templates.d.ts +1 -1
- package/dist/knowledge/guard-templates.js +1 -1
- package/dist/knowledge/guard-translation.js +1 -1
- package/dist/knowledge/index.d.ts +1 -1
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-generalizer.d.ts +6 -1
- package/dist/knowledge/industry-generalizer.js +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/jsonrpc-enum.d.ts +38 -0
- package/dist/knowledge/jsonrpc-enum.js +1 -1
- package/dist/knowledge/machine-topology.js +1 -1
- package/dist/knowledge/machine-translation.js +1 -1
- package/dist/knowledge/object-dependency.d.ts +31 -0
- package/dist/knowledge/object-dependency.js +1 -0
- package/dist/knowledge/onchain-constants.d.ts +2 -0
- package/dist/knowledge/onchain-constants.js +1 -1
- package/dist/knowledge/param-schema.d.ts +23 -0
- package/dist/knowledge/param-schema.js +1 -1
- package/dist/knowledge/param-tiers.js +1 -1
- package/dist/knowledge/passport-ledger.js +1 -1
- package/dist/knowledge/path-oracle/coverage.d.ts +16 -0
- package/dist/knowledge/path-oracle/coverage.js +1 -0
- package/dist/knowledge/path-oracle/index.d.ts +5 -0
- package/dist/knowledge/path-oracle/index.js +1 -0
- package/dist/knowledge/path-oracle/products/food-delivery.d.ts +2 -0
- package/dist/knowledge/path-oracle/products/food-delivery.js +1 -0
- package/dist/knowledge/path-oracle/schema.d.ts +188 -0
- package/dist/knowledge/path-oracle/schema.js +1 -0
- package/dist/knowledge/pattern-resolutions.d.ts +2 -0
- package/dist/knowledge/pattern-resolutions.js +1 -1
- package/dist/knowledge/progress-ledger.js +1 -1
- package/dist/knowledge/progress-risk.js +1 -1
- package/dist/knowledge/projection.spec.js +1 -1
- package/dist/knowledge/protocol-facts.js +1 -1
- package/dist/knowledge/requirement-families.d.ts +13 -0
- package/dist/knowledge/requirement-families.js +1 -0
- package/dist/knowledge/reward-ledger.js +1 -1
- package/dist/knowledge/scenario-modes.d.ts +1 -0
- package/dist/knowledge/scenario-modes.js +1 -1
- package/dist/knowledge/semantic-ir.d.ts +4 -0
- package/dist/knowledge/semantic-ir.js +1 -1
- package/dist/knowledge/service-ledger.d.ts +1 -1
- package/dist/knowledge/service-ledger.js +1 -1
- package/dist/knowledge/sku-name-gate.d.ts +17 -0
- package/dist/knowledge/sku-name-gate.js +1 -0
- package/dist/knowledge/supply-chain.d.ts +9 -0
- package/dist/knowledge/supply-chain.js +1 -1
- package/dist/knowledge/template-loader.d.ts +14 -6
- package/dist/knowledge/template-loader.js +1 -1
- package/dist/knowledge/template-nav.d.ts +3 -1
- package/dist/knowledge/template-nav.js +1 -1
- package/dist/knowledge/template-prose.d.ts +1 -1
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/template-scanner.d.ts +62 -0
- package/dist/knowledge/template-scanner.js +1 -1
- package/dist/knowledge/template-test-profiles.js +1 -1
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/knowledge/workflow-guidance.d.ts +5 -0
- package/dist/knowledge/workflow-guidance.js +1 -1
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/participation/radar-core.js +1 -1
- package/dist/participation/time-window.js +1 -1
- package/dist/persona/address-format.d.ts +0 -1
- package/dist/persona/address-format.js +1 -1
- package/dist/persona/bridge.js +1 -1
- package/dist/persona/index.d.ts +0 -2
- package/dist/persona/index.js +1 -1
- package/dist/persona/model.js +1 -1
- package/dist/persona/persona-audit.spec.js +1 -1
- package/dist/persona/types.d.ts +6 -0
- package/dist/playbooks/service-build/business-puzzle.js +1 -1
- package/dist/playbooks/service-build/game-theory.d.ts +2 -2
- package/dist/playbooks/service-build/intent-analyzer.js +1 -1
- package/dist/playbooks/service-build/machine-panorama.js +1 -1
- package/dist/playbooks/service-build/merchant-guide.d.ts +50 -23
- package/dist/playbooks/service-build/merchant-guide.js +1 -1
- package/dist/playbooks/service-build/migration-planner.d.ts +2 -0
- package/dist/playbooks/service-build/migration-planner.js +1 -1
- package/dist/playbooks/service-build/mode-actions.js +1 -1
- package/dist/playbooks/service-build/object-panorama.d.ts +8 -0
- package/dist/playbooks/service-build/object-panorama.js +1 -1
- package/dist/playbooks/service-build/participation-radar.js +1 -1
- package/dist/playbooks/service-build/relationship-profile.js +1 -1
- package/dist/playbooks/service-build/reverse-mapping.d.ts +6 -0
- package/dist/playbooks/service-build/reverse-mapping.js +1 -1
- package/dist/playbooks/service-build/service-panorama.d.ts +1 -0
- package/dist/playbooks/service-build/service-panorama.js +1 -1
- package/dist/playbooks/service-build/service-quote.js +1 -1
- package/dist/playbooks/service-build/service-quote.spec.js +1 -1
- package/dist/playbooks/service-build/workflow-design-assessment.d.ts +10 -1
- package/dist/playbooks/service-build/workflow-design-assessment.js +1 -1
- package/dist/review/index.js +1 -1
- package/dist/review/repository.js +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/benchmark-migration/index.d.ts +104 -0
- package/dist/schema/benchmark-migration/index.js +1 -1
- package/dist/schema/call/allocation.d.ts +15 -6
- package/dist/schema/call/allocation.js +1 -1
- package/dist/schema/call/base.d.ts +256 -0
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/bridge.d.ts +32 -6
- package/dist/schema/call/demand.d.ts +15 -6
- package/dist/schema/call/demand.js +1 -1
- package/dist/schema/call/guard.d.ts +8 -8
- package/dist/schema/call/guard.js +1 -1
- package/dist/schema/call/handler.d.ts +3 -0
- package/dist/schema/call/handler.js +1 -1
- package/dist/schema/call/machine.d.ts +32 -8
- package/dist/schema/call/machine.js +1 -1
- package/dist/schema/call/order.d.ts +26 -8
- package/dist/schema/call/order.js +1 -1
- package/dist/schema/call/payment.d.ts +20 -8
- package/dist/schema/call/payment.js +1 -1
- package/dist/schema/call/permission-handler.js +1 -1
- package/dist/schema/call/permission.d.ts +330 -114
- package/dist/schema/call/permission.js +1 -1
- package/dist/schema/call/personal.d.ts +10 -4
- package/dist/schema/call/personal.js +1 -1
- package/dist/schema/call/progress.d.ts +16 -4
- package/dist/schema/call/reward.d.ts +10 -4
- package/dist/schema/call/reward.js +1 -1
- package/dist/schema/call/semantic.d.ts +1 -0
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.d.ts +128 -40
- package/dist/schema/call/service.js +1 -1
- package/dist/schema/call/treasury.d.ts +15 -6
- package/dist/schema/call/treasury.js +1 -1
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/config/index.d.ts +61 -0
- package/dist/schema/config/index.js +1 -1
- package/dist/schema/envelope-unify.d.ts +4 -0
- package/dist/schema/envelope-unify.js +1 -0
- package/dist/schema/evaluation/index.d.ts +216 -19
- package/dist/schema/evaluation/index.js +1 -1
- package/dist/schema/goal/index.d.ts +47 -0
- package/dist/schema/goal/planning.d.ts +115 -1
- package/dist/schema/goal/planning.js +1 -1
- package/dist/schema/industry-pack/index.d.ts +137 -6
- package/dist/schema/industry-pack/index.js +1 -1
- package/dist/schema/industry-pack/modes.d.ts +6 -6
- package/dist/schema/keeper/index.d.ts +26 -0
- package/dist/schema/local/index.d.ts +137 -0
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/local/wip.d.ts +6 -0
- package/dist/schema/local/wip.js +1 -1
- package/dist/schema/messenger/index.d.ts +26 -0
- package/dist/schema/operations.d.ts +342 -83
- package/dist/schema/operations.js +1 -1
- package/dist/schema/persona/index.d.ts +2907 -640
- package/dist/schema/persona/index.js +1 -1
- package/dist/schema/query/bi.d.ts +145 -4
- package/dist/schema/query/bi.js +1 -1
- package/dist/schema/query/index.d.ts +266 -73
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-query/index.d.ts +1 -1
- package/dist/schema/schema-query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/utils/permission-machine-check.d.ts +2 -0
- package/dist/schema/utils/permission-machine-check.js +1 -1
- package/dist/schema/watch/index.d.ts +16 -0
- package/dist/schema/watch/index.js +1 -1
- package/dist/schema/workflow/index.d.ts +2 -2
- package/dist/schema/workflow/index.js +1 -1
- package/dist/schema-query-impl/index.d.ts +1 -1
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/account_operation.output.json +94 -0
- package/dist/schemas/benchmark_migration_operation.output.json +338 -9
- package/dist/schemas/benchmark_migration_operation.schema.json +26 -1
- package/dist/schemas/bridge_operation.output.json +94 -0
- package/dist/schemas/config_operation.output.json +352 -0
- package/dist/schemas/config_operation.schema.json +20 -2
- package/dist/schemas/evaluation_operation.output.json +570 -4
- package/dist/schemas/evaluation_operation.schema.json +194 -3
- package/dist/schemas/goal_operation.schema.json +183 -0
- package/dist/schemas/index.json +1 -1
- package/dist/schemas/industry_pack_operation.output.json +621 -0
- package/dist/schemas/industry_pack_operation.schema.json +20 -2
- package/dist/schemas/keeper_operation.output.json +94 -0
- package/dist/schemas/local_cache_operation.output.json +94 -0
- package/dist/schemas/local_history_operation.output.json +94 -0
- package/dist/schemas/local_info_operation.output.json +94 -0
- package/dist/schemas/local_mark_operation.output.json +94 -0
- package/dist/schemas/messenger_operation.output.json +94 -0
- package/dist/schemas/monitor_events.output.json +94 -0
- package/dist/schemas/monitor_subscription.output.json +94 -0
- package/dist/schemas/onchain_events.output.json +94 -0
- package/dist/schemas/onchain_operations.output.json +313 -1
- package/dist/schemas/onchain_operations.schema.json +1248 -664
- package/dist/schemas/onchain_operations_allocation.schema.json +30 -15
- package/dist/schemas/onchain_operations_arbitration.schema.json +9 -2
- package/dist/schemas/onchain_operations_contact.schema.json +8 -1
- package/dist/schemas/onchain_operations_demand.schema.json +29 -14
- package/dist/schemas/onchain_operations_gen_passport.schema.json +8 -1
- package/dist/schemas/onchain_operations_guard.schema.json +290 -105
- package/dist/schemas/onchain_operations_machine.schema.json +49 -34
- package/dist/schemas/onchain_operations_order.schema.json +63 -40
- package/dist/schemas/onchain_operations_payment.schema.json +26 -11
- package/dist/schemas/onchain_operations_permission.schema.json +362 -235
- package/dist/schemas/onchain_operations_personal.schema.json +27 -15
- package/dist/schemas/onchain_operations_progress.schema.json +45 -30
- package/dist/schemas/onchain_operations_proof.schema.json +8 -1
- package/dist/schemas/onchain_operations_repository.schema.json +8 -1
- package/dist/schemas/onchain_operations_reward.schema.json +32 -17
- package/dist/schemas/onchain_operations_service.schema.json +221 -124
- package/dist/schemas/onchain_operations_treasury.schema.json +32 -17
- package/dist/schemas/onchain_table_data.output.json +258 -6
- package/dist/schemas/onchain_table_data.schema.json +92 -52
- package/dist/schemas/persona_operation.output.json +7752 -0
- package/dist/schemas/persona_operation.schema.json +1232 -4
- package/dist/schemas/query_toolkit.output.json +756 -116
- package/dist/schemas/query_toolkit.schema.json +138 -7
- package/dist/schemas/schema_query.schema.json +1 -1
- package/dist/schemas/watch_operation.output.json +83 -0
- package/dist/schemas/wip_file.output.json +8 -0
- package/dist/schemas/workflow_operation.schema.json +2 -2
- package/dist/tools/handlers/benchmark-migration.d.ts +11 -3
- package/dist/tools/handlers/benchmark-migration.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/evaluation.js +1 -1
- package/dist/tools/handlers/evaluation.spec.js +1 -1
- package/dist/tools/handlers/industry-pack.js +1 -1
- package/dist/tools/handlers/onchain.d.ts +20 -0
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/persona.js +1 -1
- package/dist/tools/handlers/query.d.ts +8 -0
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/winner-derivation.d.ts +20 -0
- package/dist/tools/handlers/winner-derivation.js +1 -0
- package/dist/tools/handlers/wip-upload.js +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.js +1 -1
- package/dist/tools/registry/business.js +1 -1
- package/dist/tools/registry/config.js +1 -1
- package/dist/tools/registry/evaluation.js +1 -1
- package/dist/tools/registry/identity.js +1 -1
- package/dist/tools/registry/query.js +1 -1
- package/dist/tools/transport-integrity.d.ts +7 -0
- package/dist/tools/transport-integrity.js +1 -0
- package/dist/tools/upgrade-check.js +1 -1
- package/dist/tools/wrap.d.ts +5 -0
- package/dist/tools/wrap.js +1 -1
- package/package.json +2 -2
- package/dist/extensions/business-modules.d.ts +0 -54
- package/dist/extensions/business-modules.js +0 -1
- package/dist/schemas/guard-templates.json +0 -379
|
@@ -1 +1 @@
|
|
|
1
|
-
import{afterEach,beforeEach,describe,expect,it,vi}from'vitest';import{handleEvaluationOperation}from'./evaluation.js';import{ENTRYPOINT}from'@wowok/wowok';import{enumerateDemands,enumerateServices,indexUrlFor,matchDemandsViaIndex,matchServicesViaIndex,weiToWowDecimal}from'../../knowledge/jsonrpc-enum.js';import{enrichFromDescription}from'../../evaluation/extract.js';vi['mock']('../../knowledge/jsonrpc-enum.js',async a=>({...await a(),'enumerateServices':vi['fn'](),'enumerateDemands':vi['fn'](),'matchServicesViaIndex':vi['fn'](),'matchDemandsViaIndex':vi['fn']()}));function resultOf(a){return a['structuredContent']['result'];}const demandCap={'id':'0xdemand1','kind':'demand','industry':'freelance','region':{'mode':'physical','city':'Shanghai','raw':'Shanghai'},'keywords':['design'],'capabilities':{'has_arbitration':![],'has_refund_path':![],'has_milestone_nodes':![],'has_compensation_fund':![],'has_wip_verification':![],'has_messenger':![],'has_buy_guard':![],'has_dynamic_pricing':![],'is_published':!![],'is_paused':![]}},service={'object':'0xsvc1','description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'price':'100','wip_hash':'abc'}],'bPublished':!![],'bPaused':![]};describe('evaluation_operation\x20demand_match\x20presenter_history\x20(P2-2)',()=>{it('acceptance\x20rule\x20scores\x20the\x20rated\x20history\x20in\x20the\x20breakdown',async()=>{const a=await handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service],'presenter_history':[{'acceptance_score':0x50},{'acceptance_score':0x5a}]}),c=resultOf(a);expect(c['action'])['toBe']('demand_match');const d=c['matches'][0x0]['result']['breakdown']['find'](e=>e['rule_id']==='acceptance');expect(d)['toBeDefined'](),expect(d['score'])['toBe'](0x55);}),it('omitted\x20history\x20→\x20acceptance\x20stays\x20neutral',async()=>{const a=await handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service]}),c=resultOf(a)['matches'][0x0]['result']['breakdown']['find'](d=>d['rule_id']==='acceptance');expect(c)['toBeDefined'](),expect(c['score'])['toBe'](0x32),expect(c['reason'])['toContain']('neutral');}),it('schema\x20rejects\x20a\x20malformed\x20presenter_history\x20entry',async()=>{await expect(handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service],'presenter_history':[{'acceptance_score':0x50,'bogus':!![]}]}))['rejects']['toThrow']();});}),describe('evaluation_operation\x20demand_match\x20order\x20bridge\x20(N-2\x20/\x2008\x20§7)',()=>{it('each\x20match\x20carries\x20the\x20service.order_new\x20transaction-formation\x20bridge',async()=>{const a=await handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service]}),b=resultOf(a)['matches'][0x0];expect(b['order'])['toBeDefined'](),expect(b['order']['operation'])['toBe']('service.order_new'),expect(b['order']['operation_type'])['toBe']('service'),expect(b['order']['preconditions']['some'](c=>c['includes']('acceptance_score')))['toBe'](!![]),expect(b['order']['rationale'])['toContain']('0xsvc1'),expect(b['next']['operation'])['toBe']('demand.publish'),expect(b['next']['operation_type'])['toBe']('demand'),expect(b['next']['rationale'])['toContain']('service.order_new');});}),describe('evaluation_operation\x20match_discover\x20indexed\x20candidate\x20mapping',()=>{it('scores\x20wrapped\x20sales\x20fields\x20instead\x20of\x20replacing\x20them\x20with\x20zero\x20values',async()=>{vi['mocked'](enumerateServices)['mockResolvedValueOnce']({'services':[{'object':'0xsvc1','name':'Logo\x20design','location':'Shanghai','json':{'description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'fields':{'name':'logo','price':'100','wip_hash':'abc'}}],'bPublished':!![],'bPaused':![]}}],'total_enumerated':0x1,'has_more':![],'coverage':{'mode':'known_objects','complete':![],'truncated':![],'total_enumerated':0x1,'chain_id':'chain_test','degraded_reasons':[]}});const a=await handleEvaluationOperation({'action':'match_discover','description':'freelance\x20logo\x20design','location':'Shanghai','sensitivity':'strict','budget':'50','required_capabilities':['has_wip_verification'],'context_network':'testnet'}),b=resultOf(a)['matches'][0x0];expect(b['service']['sales'])['toEqual']([{'name':'logo','price':'100','wip_hash':'abc'}]),expect(b['result']['breakdown']['find'](c=>c['rule_id']==='price'))['toMatchObject']({'score':0x0,'reason':'over\x20budget'}),expect(b['result']['breakdown']['find'](c=>c['rule_id']==='capabilities'))['toMatchObject']({'score':0x64,'matched':['has_wip_verification']});});}),describe('evaluation_operation\x20evidence_review\x20list\x20mode\x20(P2-3)',()=>{it('items\x20mode\x20→\x20structured\x20usable/manual/rejected\x20+\x20proof\x20candidates',async()=>{const a=await handleEvaluationOperation({'action':'evidence_review','items':[{'id':'chat.wts','kind':'signature_photo','hash_committed':!![],'digital_check_passed':!![],'proof_ref':'0xproof1'},{'id':'waybill.jpg','kind':'delivery_proof','hash_committed':!![]},{'id':'voice.mp3','kind':'voice_recording','hash_committed':![]}]}),b=resultOf(a);expect(b['action'])['toBe']('evidence_review'),expect(b['list']['items'])['toHaveLength'](0x3),expect(b['list']['usable'])['toHaveLength'](0x1),expect(b['list']['manual'])['toHaveLength'](0x1),expect(b['list']['rejected'])['toHaveLength'](0x1),expect(b['list']['proof_candidates'])['toHaveLength'](0x1),expect(b['list']['proof_candidates'][0x0]['proof_ref'])['toBe']('0xproof1'),expect(b['list']['dispute_hint'])['toContain']('1\x20Proof\x20reference\x20candidate(s)\x20ready');}),it('single-item\x20mode\x20still\x20works\x20(backwards\x20compatible)',async()=>{const a=await handleEvaluationOperation({'action':'evidence_review','kind':'signature_photo','hash_committed':!![],'digital_check_passed':!![]});expect(resultOf(a)['review']['status'])['toBe']('auto_pass');}),it('schema\x20refinement:\x20neither\x20items\x20nor\x20kind+hash_committed\x20→\x20error',async()=>{await expect(handleEvaluationOperation({'action':'evidence_review'}))['rejects']['toThrow']();});});function remoteCandidate(a,b={}){return{'objectId':a,'verifiedKind':'Service','objectVersion':'3','facetVersion':'facets-1','channels':['bm25','structured'],'rrf':0.032786885246,'publicFeatures':{'industry':'freelance','industryConfidence':0.7,'location':'Shanghai','priceMin':'100','priceMax':'100','capabilities':['has_wip_verification'],'published':!![],'paused':![],'keywords':['design']},'serverEvaluation':{'policyVersion':'public-baseline-1','total':87.5,'breakdown':[{'dimension':'text','weight':0x1e,'score':0x64}],'unknownRules':['trust:\x20cold-start\x20prior\x20withheld'],'redFlags':[]},'payloadJson':{'description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'fields':{'name':'logo','price':'100','wip_hash':'abc'}}],'bPublished':!![],'bPaused':![]},...b};}function remotePage(a){return{'policyVersion':'public-baseline-1','candidates':a,'recall':{'liveSet':a['length']+0x2,'gated':a['length'],'structured':a['length'],'bm25':a['length'],'merged':a['length'],'channelsActive':['structured','bm25']},'truncated':![],'coverage':{'mode':'known_objects','complete':![],'truncated':![],'total_enumerated':a['length'],'chain_id':'chain_test','degraded_reasons':[]}};}function legacyAnswer(){return{'services':[{'object':'0xsvc1','name':'Logo\x20design','location':'Shanghai','json':{'description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'fields':{'name':'logo','price':'100','wip_hash':'abc'}}],'bPublished':!![],'bPaused':![]}}],'total_enumerated':0x1,'has_more':![],'coverage':{'mode':'event_window','complete':![],'truncated':![],'total_enumerated':0x1,'chain_id':'chain_test','degraded_reasons':['EVENT_BACKED_ENUMERATION']}};}const MATCH_INPUT={'action':'match_discover','description':'freelance\x20logo\x20design','location':'Shanghai','sensitivity':'strict','budget':'100','required_capabilities':['has_wip_verification'],'context_network':'testnet'};describe('evaluation_operation\x20match_discover\x20remote\x20index\x20route\x20(K5-11\x20R3)',()=>{beforeEach(()=>{vi['mocked'](enumerateServices)['mockReset'](),vi['mocked'](matchServicesViaIndex)['mockReset']();}),afterEach(()=>{delete process['env']['WOWOK_DATA_SOURCE'],delete process['env']['WOWOK_INDEX_URL'];}),it('converts\x20wei\x20budgets\x20to\x20WOW\x20decimals\x20for\x20the\x20match\x20API',()=>{expect(weiToWowDecimal('0'))['toBe']('0'),expect(weiToWowDecimal('6000000000'))['toBe']('6'),expect(weiToWowDecimal('7500000000'))['toBe']('7.5'),expect(weiToWowDecimal('123456789'))['toBe']('0.123456789'),expect(weiToWowDecimal('1000000000000'))['toBe']('1000'),expect(()=>weiToWowDecimal('12.5'))['toThrow']();}),it('one-shot\x20remote\x20match:\x20no\x20enumeration,\x20dual\x20breakdown,\x20private\x20re-rank',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchServicesViaIndex)['mockResolvedValueOnce'](remotePage([remoteCandidate('0xsvc1'),remoteCandidate('0xsvc2',{'payloadJson':{'description':'mural\x20painting','location':'Shanghai','sales':[{'fields':{'name':'mural','price':'90'}}],'bPublished':!![],'bPaused':![]}})]));const a=await handleEvaluationOperation({...MATCH_INPUT}),b=resultOf(a);expect(b['match_route'])['toBe']('remote_index'),expect(enumerateServices)['not']['toHaveBeenCalled'](),expect(vi['mocked'](matchServicesViaIndex)['mock']['calls'][0x0][0x1])['toMatchObject']({'q':'freelance\x20logo\x20design','location':'Shanghai','budgetWei':'100','capabilities':['has_wip_verification'],'industry':enrichFromDescription(MATCH_INPUT['description'])['industry']}),expect(b['matches'])['toHaveLength'](0x2),expect(b['total_enumerated'])['toBe'](0x4);const c=b['matches']['find'](e=>e['service']['object']==='0xsvc1');expect(c['server_match'])['toMatchObject']({'policy_version':'public-baseline-1','total':87.5,'channels':['bm25','structured']}),expect(c['server_match']['unknown_rules'])['toEqual'](['trust:\x20cold-start\x20prior\x20withheld']),expect(c['result']['breakdown']['some'](e=>e['rule_id']==='capabilities'))['toBe'](!![]);const d=b['matches']['find'](e=>e['service']['object']==='0xsvc2');expect(d['service']['description'])['toBe']('mural\x20painting'),expect(d['server_match'])['toBeDefined'](),expect(b['coverage']['mode'])['toBe']('known_objects');}),it('auto\x20mode\x20degrades\x20to\x20legacy\x20enumeration\x20with\x20honest\x20coverage',async()=>{process['env']['WOWOK_DATA_SOURCE']='auto',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchServicesViaIndex)['mockRejectedValueOnce'](Object['assign'](new Error('Remote\x20index\x20returned\x20HTTP\x20503'),{'code':'INDEX_HTTP_ERROR'})),vi['mocked'](enumerateServices)['mockResolvedValueOnce'](legacyAnswer());const a=await handleEvaluationOperation({...MATCH_INPUT}),b=resultOf(a);expect(b['match_route'])['toBe']('legacy_enumeration'),expect(enumerateServices)['toHaveBeenCalledTimes'](0x1),expect(b['coverage']['degraded_reasons'])['toContain']('MATCH_INDEX_FALLBACK'),expect(b['coverage']['degraded_reasons'])['toContain']('INDEX_HTTP_ERROR'),expect(b['matches'])['toHaveLength'](0x1),expect(b['matches'][0x0]['server_match'])['toBeUndefined']();}),it('strict\x20remote\x20mode\x20surfaces\x20the\x20index\x20failure',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchServicesViaIndex)['mockRejectedValueOnce'](Object['assign'](new Error('Remote\x20index\x20request\x20failed'),{'code':'INDEX_UNAVAILABLE'})),await expect(handleEvaluationOperation({...MATCH_INPUT}))['rejects']['toThrow'](/Remote index request failed/),expect(enumerateServices)['not']['toHaveBeenCalled']();}),it('never\x20uploads\x20the\x20no-signal\x20general\x20industry\x20(the\x20facet\x20stores\x20it\x20as\x20null)',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchServicesViaIndex)['mockResolvedValueOnce'](remotePage([remoteCandidate('0xsvc1')])),expect(enrichFromDescription('\x20\x20\x20')['industry'])['toBe']('general'),await handleEvaluationOperation({...MATCH_INPUT,'description':'\x20\x20\x20'}),expect(vi['mocked'](matchServicesViaIndex)['mock']['calls'][0x0][0x1]?.['industry'])['toBeUndefined']();}),it('filters\x20the\x20match\x20API\x20cannot\x20express\x20keep\x20the\x20legacy\x20route',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](enumerateServices)['mockResolvedValueOnce'](legacyAnswer());const a=await handleEvaluationOperation({...MATCH_INPUT,'coin_type':'0x2::wow::WOW'}),b=resultOf(a);expect(b['match_route'])['toBe']('legacy_enumeration'),expect(matchServicesViaIndex)['not']['toHaveBeenCalled'](),expect(enumerateServices)['toHaveBeenCalledTimes'](0x1);});}),describe('evaluation_operation\x20match_discover\x20private\x20policy\x20DSL\x20(K5-11\x20R4)',()=>{beforeEach(()=>{process['env']['WOWOK_DATA_SOURCE']='legacy',vi['mocked'](enumerateServices)['mockReset'](),vi['mocked'](matchServicesViaIndex)['mockReset']();}),afterEach(()=>{delete process['env']['WOWOK_DATA_SOURCE'],delete process['env']['WOWOK_INDEX_URL'];});function a(){return{'services':[{'object':'0xgood','name':'Logo\x20design','location':'Shanghai','json':{'description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'fields':{'name':'logo','price':'100','wip_hash':'abc'}}],'arbitrations':['0xarb1'],'owner':'0xownerA','bPublished':!![],'bPaused':![]}},{'object':'0xpaused','name':'Paused\x20shop','location':'Shanghai','json':{'description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'fields':{'name':'logo','price':'100'}}],'owner':'0xownerB','bPublished':!![],'bPaused':!![]}}],'total_enumerated':0x2,'has_more':![],'coverage':{'mode':'event_window','complete':![],'truncated':![],'total_enumerated':0x2,'chain_id':'chain_test','degraded_reasons':['EVENT_BACKED_ENUMERATION']}};}it('preset\x20gate\x20drops\x20the\x20paused\x20candidate\x20and\x20reports\x20it\x20in\x20policy_effect',async()=>{vi['mocked'](enumerateServices)['mockResolvedValueOnce'](a());const b=await handleEvaluationOperation({'action':'match_discover','description':'freelance\x20logo\x20design','location':'Shanghai','sensitivity':'strict','context_network':'testnet','match_policy':'trust_first'}),c=resultOf(b);expect(c['matches']['map'](d=>d['service']['object']))['toEqual'](['0xgood']),expect(c['policy_effect']['policy_id'])['toBe']('trust_first'),expect(c['policy_effect']['privacy'])['toContain']('never\x20leave\x20this\x20device'),expect(c['policy_effect']['dropped']['some'](e=>e['object']==='0xpaused'))['toBe'](!![]),expect(c['policy_effect']['weights_applied']['trust'])['toBe'](0x1e),expect(typeof c['policy_effect']['policy_hash'])['toBe']('string');}),it('a\x20weight-only\x20policy\x20re-anchors\x20the\x20trust\x20dimension\x20(weight_source=override)',async()=>{vi['mocked'](enumerateServices)['mockResolvedValueOnce'](a());const b=await handleEvaluationOperation({'action':'match_discover','description':'freelance\x20logo\x20design','location':'Shanghai','sensitivity':'strict','context_network':'testnet','match_policy':{'policy_id':'custom','weights':{'trust':0x2d}}}),c=resultOf(b),d=c['matches'][0x0]['result']['breakdown']['find'](e=>e['rule_id']==='trust');expect(d['weight'])['toBe'](0x2d),expect(d['weight_source'])['toBe']('override'),expect(c['policy_effect']['weights_applied'])['toEqual']({'trust':0x2d});}),it('the\x20private\x20policy\x20never\x20reaches\x20the\x20remote\x20match\x20request',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchServicesViaIndex)['mockResolvedValueOnce'](remotePage([remoteCandidate('0xsvc1')])),await handleEvaluationOperation({...MATCH_INPUT,'match_policy':'trust_first'});const b=vi['mocked'](matchServicesViaIndex)['mock']['calls'][0x0][0x1];expect(b['match_policy'])['toBeUndefined'](),expect(b['policy'])['toBeUndefined'](),expect(JSON['stringify'](b))['not']['toContain']('trust_first');}),it('unknown\x20preset\x20id\x20throws\x20with\x20the\x20available\x20list',async()=>{await expect(handleEvaluationOperation({...MATCH_INPUT,'match_policy':'does_not_exist'}))['rejects']['toThrow'](/unknown match_policy preset/);}),it('a\x20supply_to_demand\x20policy\x20is\x20rejected\x20by\x20match_discover',async()=>{await expect(handleEvaluationOperation({...MATCH_INPUT,'match_policy':'supplier_hunting'}))['rejects']['toThrow'](/direction/);});}),describe('evaluation_operation\x20demand_present\x20private\x20policy\x20(K5-11\x20R4-W2)',()=>{const a={'id':'0xsvc1','kind':'service','industry':'freelance','region':{'mode':'physical','city':'Shanghai','raw':'Shanghai'},'keywords':['design'],'capabilities':{'has_arbitration':!![],'has_refund_path':!![],'has_milestone_nodes':![],'has_compensation_fund':![],'has_wip_verification':!![],'has_messenger':!![],'has_buy_guard':![],'has_dynamic_pricing':![],'is_published':!![],'is_paused':![]}};function b(){return{'demands':[{'object':'0xdesign','description':'need\x20a\x20freelance\x20logo\x20redesign\x20for\x20a\x20coffee\x20brand','location':'Shanghai','rewards':['0xr1','0xr2'],'guards':[],'presenters_count':0x0,'um':'0xum1','permission':'0xperm1'},{'object':'0xcleaning','description':'deep\x20cleaning\x20for\x20a\x203-bedroom\x20apartment','location':'Beijing','rewards':['0xr3'],'guards':[{'guard':'0xg'}],'presenters_count':0x2,'um':null,'permission':'0xperm2'}],'total_enumerated':0x2,'has_more':![],'coverage':{'mode':'event_window','complete':![],'truncated':![],'total_enumerated':0x2,'chain_id':'chain_test','degraded_reasons':['EVENT_BACKED_ENUMERATION']}};}beforeEach(()=>{process['env']['WOWOK_DATA_SOURCE']='legacy',vi['mocked'](enumerateDemands)['mockReset'](),vi['mocked'](matchServicesViaIndex)['mockReset'](),vi['mocked'](matchDemandsViaIndex)['mockReset']();}),it('supply_to_demand\x20policy\x20gates\x20demands\x20and\x20reports\x20the\x20effect',async()=>{vi['mocked'](enumerateDemands)['mockResolvedValueOnce'](b());const c=await handleEvaluationOperation({'action':'demand_present','service_cap':a,'context_network':'testnet','match_policy':{'policy_id':'pick-design','direction':'supply_to_demand','gates':[{'dim':'text','op':'must_contain','value':'logo'},{'dim':'messenger','op':'eq','value':!![]}]}}),d=resultOf(c);expect(d['matches']['map'](e=>e['demand']['object']))['toEqual'](['0xdesign']),expect(d['policy_effect']['policy_id'])['toBe']('pick-design'),expect(d['policy_effect']['direction'])['toBe']('supply_to_demand'),expect(d['policy_effect']['dropped']['some'](e=>e['object']==='0xcleaning'))['toBe'](!![]),expect(d['policy_effect']['privacy'])['toContain']('never\x20leave\x20this\x20device'),expect(d['matches'][0x0]['next'])['toBeDefined'](),expect(matchServicesViaIndex)['not']['toHaveBeenCalled']();}),it('preset\x20supplier_hunting\x20drives\x20demand_present\x20end-to-end',async()=>{vi['mocked'](enumerateDemands)['mockResolvedValueOnce'](b());const c=await handleEvaluationOperation({'action':'demand_present','service_cap':a,'context_network':'testnet','match_policy':'supplier_hunting'}),d=resultOf(c);expect(d['policy_effect']['policy_id'])['toBe']('supplier_hunting'),expect(d['matches'])['toHaveLength'](0x2);}),it('a\x20demand_to_supply\x20policy\x20is\x20rejected\x20by\x20demand_present',async()=>{await expect(handleEvaluationOperation({'action':'demand_present','service_cap':a,'context_network':'testnet','match_policy':'trust_first'}))['rejects']['toThrow'](/direction/),expect(enumerateDemands)['not']['toHaveBeenCalled']();}),it('weights\x20re-anchor\x20the\x20demand_match\x20scoring\x20dims\x20on\x20the\x20supply-to-demand\x20path',async()=>{vi['mocked'](enumerateDemands)['mockResolvedValueOnce'](b());const c=await handleEvaluationOperation({'action':'demand_present','service_cap':a,'context_network':'testnet','match_policy':{'policy_id':'custom','direction':'supply_to_demand','weights':{'capabilities':0x32}}}),d=resultOf(c),e=d['matches'][0x0]['result']['breakdown']['find'](f=>f['rule_id']==='capabilities');expect(e['weight'])['toBe'](0x32),expect(e['weight_source'])['toBe']('override'),expect(d['policy_effect']['weights_applied'])['toEqual']({'capabilities':0x32});});}),describe('evaluation_operation\x20discover_demands\x20policy\x20gates\x20(K5-11\x20R4-W2)',()=>{function a(){return{'demands':[{'object':'0xdesign','description':'need\x20a\x20freelance\x20logo\x20redesign','location':'Shanghai','rewards':['0xr1'],'guards':[],'presenters_count':0x0,'um':'0xum1','permission':'0xperm1'},{'object':'0xcleaning','description':'deep\x20cleaning\x20for\x20a\x203-bedroom\x20apartment','location':'Beijing','rewards':[],'guards':[],'presenters_count':0x0,'um':null,'permission':'0xperm2'}],'total_enumerated':0x2,'has_more':![],'coverage':{'mode':'event_window','complete':![],'truncated':![],'total_enumerated':0x2,'chain_id':'chain_test','degraded_reasons':['EVENT_BACKED_ENUMERATION']}};}beforeEach(()=>{process['env']['WOWOK_DATA_SOURCE']='legacy',vi['mocked'](enumerateDemands)['mockReset'](),vi['mocked'](matchDemandsViaIndex)['mockReset']();}),it('gates\x20filter\x20the\x20enumerated\x20set;\x20weights/rerank\x20are\x20reported\x20not\x20applicable',async()=>{vi['mocked'](enumerateDemands)['mockResolvedValueOnce'](a());const b=await handleEvaluationOperation({'action':'discover_demands','context_network':'testnet','match_policy':{'policy_id':'pick-design','direction':'supply_to_demand','gates':[{'dim':'text','op':'must_contain','value':'logo'}],'weights':{'trust':0x1e},'rerank':{'diversity':{'by':'owner','max_per_group':0x1}}}}),c=resultOf(b);expect(c['demands']['map'](e=>e['object']))['toEqual'](['0xdesign']),expect(c['policy_effect']['policy_id'])['toBe']('pick-design'),expect(c['policy_effect']['ignored']['join']('|'))['toContain']('weights\x20not\x20applicable'),expect(c['policy_effect']['ignored']['join']('|'))['toContain']('rerank\x20not\x20applicable'),expect(c['policy_effect']['weights_applied'])['toEqual']({});}),it('violated\x20reward\x20gates\x20eliminate\x20demands\x20from\x20the\x20enumerated\x20set',async()=>{vi['mocked'](enumerateDemands)['mockResolvedValueOnce'](a());const b=await handleEvaluationOperation({'action':'discover_demands','context_network':'testnet','match_policy':{'policy_id':'multi-reward','direction':'supply_to_demand','gates':[{'dim':'reward','op':'gte','value':0x2}]}}),c=resultOf(b);expect(c['demands'])['toHaveLength'](0x0),expect(c['policy_effect']['dropped'])['toHaveLength'](0x2);});});const SUPPLY_CAP={'id':'0xsvc1','kind':'service','industry':'freelance','region':{'mode':'physical','city':'Shanghai','raw':'Shanghai'},'keywords':['design'],'capabilities':{'has_arbitration':!![],'has_refund_path':!![],'has_milestone_nodes':![],'has_compensation_fund':![],'has_wip_verification':!![],'has_messenger':!![],'has_buy_guard':![],'has_dynamic_pricing':![],'is_published':!![],'is_paused':![]}};function demandPair(){return[{'object':'0xdesign','type':'Demand','description':'need\x20a\x20freelance\x20logo\x20redesign','location':'Shanghai','rewards':['0xr1'],'guards':[],'presenters_count':0x0,'um':'0xum1','permission':'0xperm1'},{'object':'0xcleaning','type':'Demand','description':'deep\x20cleaning\x20for\x20a\x203-bedroom\x20apartment','location':'Beijing','rewards':[],'guards':[{'guard':'0xg','service_identifier':null}],'presenters_count':0x2,'um':null,'permission':'0xperm2'}];}function remoteDemandAnswer(){return{'demands':demandPair(),'total_enumerated':0x6,'has_more':![],'coverage':{'mode':'known_objects','complete':![],'truncated':![],'total_enumerated':0x6,'chain_id':'chain_a','degraded_reasons':[]}};}function legacyDemandAnswer(){return{'demands':demandPair(),'total_enumerated':0x2,'has_more':![],'coverage':{'mode':'event_window','complete':![],'truncated':![],'total_enumerated':0x2,'chain_id':'chain_test','degraded_reasons':['EVENT_BACKED_ENUMERATION']}};}describe('evaluation_operation\x20demand\x20remote\x20index\x20route\x20(K5-10\x20§4.2)',()=>{beforeEach(()=>{vi['mocked'](enumerateDemands)['mockReset'](),vi['mocked'](matchDemandsViaIndex)['mockReset']();}),afterEach(()=>{delete process['env']['WOWOK_DATA_SOURCE'],delete process['env']['WOWOK_INDEX_URL'];}),it('discover_demands\x20recalls\x20server-side\x20instead\x20of\x20downloading\x20the\x20Demand\x20universe',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchDemandsViaIndex)['mockResolvedValueOnce'](remoteDemandAnswer());const a=await handleEvaluationOperation({'action':'discover_demands','location':'Shanghai','context_network':'testnet'}),b=resultOf(a);expect(b['match_route'])['toBe']('remote_index'),expect(enumerateDemands)['not']['toHaveBeenCalled'](),expect(vi['mocked'](matchDemandsViaIndex)['mock']['calls'][0x0][0x1])['toMatchObject']({'location':'Shanghai','limit':0x64,'recallLimit':0xc8}),expect(vi['mocked'](matchDemandsViaIndex)['mock']['calls'][0x0][0x1]?.['industry'])['toBeUndefined'](),expect(b['demands']['map'](c=>c['object']))['toEqual'](['0xdesign']),expect(b['total_enumerated'])['toBe'](0x6),expect(b['coverage']['mode'])['toBe']('known_objects');}),it('demand_present\x20uploads\x20the\x20service\x27s\x20own\x20industry\x20as\x20the\x20public\x20query\x20signal',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchDemandsViaIndex)['mockResolvedValueOnce'](remoteDemandAnswer());const a=await handleEvaluationOperation({'action':'demand_present','service_cap':SUPPLY_CAP,'context_network':'testnet'}),b=resultOf(a);expect(b['match_route'])['toBe']('remote_index'),expect(vi['mocked'](matchDemandsViaIndex)['mock']['calls'][0x0][0x1])['toMatchObject']({'industry':'freelance'}),expect(b['matches'][0x0]['result']['breakdown']['some'](c=>c['rule_id']==='capabilities'))['toBe'](!![]),expect(b['matches']['map'](c=>c['demand']['object']))['toEqual'](['0xdesign','0xcleaning']);}),it('never\x20uploads\x20the\x20no-signal\x20general\x20industry',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchDemandsViaIndex)['mockResolvedValueOnce'](remoteDemandAnswer()),await handleEvaluationOperation({'action':'demand_present','service_cap':{...SUPPLY_CAP,'industry':'general'},'context_network':'testnet'}),expect(vi['mocked'](matchDemandsViaIndex)['mock']['calls'][0x0][0x1]?.['industry'])['toBeUndefined']();}),it('keeps\x20the\x20private\x20policy\x20on\x20device:\x20the\x20demand\x20read\x20carries\x20no\x20policy\x20at\x20all',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchDemandsViaIndex)['mockResolvedValueOnce'](remoteDemandAnswer()),await handleEvaluationOperation({'action':'demand_present','service_cap':SUPPLY_CAP,'context_network':'testnet','match_policy':'supplier_hunting'});const a=vi['mocked'](matchDemandsViaIndex)['mock']['calls'][0x0][0x1];expect(a['match_policy'])['toBeUndefined'](),expect(a['policy'])['toBeUndefined'](),expect(JSON['stringify'](a))['not']['toContain']('supplier_hunting');}),it('an\x20owner-dimension\x20policy\x20keeps\x20the\x20enumeration\x20route\x20(owner\x20is\x20not\x20in\x20the\x20match\x20payload)',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](enumerateDemands)['mockResolvedValueOnce'](legacyDemandAnswer());const a=await handleEvaluationOperation({'action':'discover_demands','context_network':'testnet','match_policy':{'policy_id':'not-blacklisted','direction':'supply_to_demand','excludes':[{'dim':'blacklist','owners':['0xownerBad']}]}}),b=resultOf(a);expect(b['match_route'])['toBe']('legacy_enumeration'),expect(matchDemandsViaIndex)['not']['toHaveBeenCalled'](),expect(enumerateDemands)['toHaveBeenCalledTimes'](0x1);}),it('auto\x20mode\x20degrades\x20to\x20enumeration\x20with\x20an\x20honest\x20coverage\x20stamp',async()=>{process['env']['WOWOK_DATA_SOURCE']='auto',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchDemandsViaIndex)['mockRejectedValueOnce'](Object['assign'](new Error('Remote\x20index\x20returned\x20HTTP\x20503'),{'code':'INDEX_HTTP_ERROR'})),vi['mocked'](enumerateDemands)['mockResolvedValueOnce'](legacyDemandAnswer());const a=await handleEvaluationOperation({'action':'discover_demands','context_network':'testnet'}),b=resultOf(a);expect(b['match_route'])['toBe']('legacy_enumeration'),expect(enumerateDemands)['toHaveBeenCalledTimes'](0x1),expect(b['coverage']['degraded_reasons'])['toContain']('MATCH_INDEX_FALLBACK'),expect(b['coverage']['degraded_reasons'])['toContain']('INDEX_HTTP_ERROR');}),it('strict\x20remote\x20mode\x20surfaces\x20the\x20index\x20failure\x20instead\x20of\x20substituting\x20events',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchDemandsViaIndex)['mockRejectedValueOnce'](Object['assign'](new Error('Remote\x20index\x20request\x20failed'),{'code':'INDEX_UNAVAILABLE'})),await expect(handleEvaluationOperation({'action':'discover_demands','context_network':'testnet'}))['rejects']['toThrow'](/Remote index request failed/),expect(enumerateDemands)['not']['toHaveBeenCalled']();}),it('product\x20default:\x20testnet\x20routes\x20remotely\x20with\x20no\x20configuration\x20at\x20all',async()=>{vi['mocked'](matchDemandsViaIndex)['mockResolvedValueOnce'](remoteDemandAnswer());const a=await handleEvaluationOperation({'action':'discover_demands','context_network':'testnet'});expect(resultOf(a)['match_route'])['toBe']('remote_index'),expect(enumerateDemands)['not']['toHaveBeenCalled'](),expect(indexUrlFor(ENTRYPOINT['Testnet']))['toBeTruthy']();}),it('product\x20default:\x20mainnet\x20keeps\x20the\x20enumeration\x20because\x20it\x20ships\x20no\x20index',async()=>{expect(indexUrlFor(ENTRYPOINT['Mainnet']))['toBeUndefined'](),vi['mocked'](enumerateDemands)['mockResolvedValueOnce'](legacyDemandAnswer());const a=await handleEvaluationOperation({'action':'discover_demands','context_network':'mainnet'}),b=resultOf(a);expect(b['match_route'])['toBe']('legacy_enumeration'),expect(matchDemandsViaIndex)['not']['toHaveBeenCalled'](),expect(b['coverage']['mode'])['toBe']('event_window');});});
|
|
1
|
+
import{afterEach,beforeEach,describe,expect,it,vi}from'vitest';import{handleEvaluationOperation}from'./evaluation.js';import{ENTRYPOINT}from'@wowok/wowok';import{enumerateDemands,enumerateServices,indexUrlFor,matchDemandsViaIndex,matchServicesViaIndex,weiToWowDecimal}from'../../knowledge/jsonrpc-enum.js';import{enrichFromDescription}from'../../evaluation/extract.js';vi['mock']('../../knowledge/jsonrpc-enum.js',async a=>({...await a(),'enumerateServices':vi['fn'](),'enumerateDemands':vi['fn'](),'matchServicesViaIndex':vi['fn'](),'matchDemandsViaIndex':vi['fn']()}));function resultOf(a){return a['structuredContent']['result'];}const demandCap={'id':'0xdemand1','kind':'demand','industry':'freelance','region':{'mode':'physical','city':'Shanghai','raw':'Shanghai'},'keywords':['design'],'capabilities':{'has_arbitration':![],'has_refund_path':![],'has_milestone_nodes':![],'has_compensation_fund':![],'has_wip_verification':![],'has_messenger':![],'has_buy_guard':![],'has_dynamic_pricing':![],'is_published':!![],'is_paused':![]}},service={'object':'0xsvc1','description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'price':'100','wip_hash':'abc'}],'bPublished':!![],'bPaused':![]};describe('evaluation_operation\x20demand_match\x20presenter_history\x20(P2-2)',()=>{it('acceptance\x20rule\x20scores\x20the\x20rated\x20history\x20in\x20the\x20breakdown',async()=>{const a=await handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service],'presenter_history':[{'acceptance_score':0x50},{'acceptance_score':0x5a}]}),c=resultOf(a);expect(c['action'])['toBe']('demand_match');const d=c['matches'][0x0]['result']['breakdown']['find'](e=>e['rule_id']==='acceptance');expect(d)['toBeDefined'](),expect(d['score'])['toBe'](0x55);}),it('omitted\x20history\x20→\x20acceptance\x20stays\x20neutral',async()=>{const a=await handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service]}),c=resultOf(a)['matches'][0x0]['result']['breakdown']['find'](d=>d['rule_id']==='acceptance');expect(c)['toBeDefined'](),expect(c['score'])['toBe'](0x32),expect(c['reason'])['toContain']('neutral');}),it('schema\x20rejects\x20a\x20malformed\x20presenter_history\x20entry',async()=>{await expect(handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service],'presenter_history':[{'acceptance_score':0x50,'bogus':!![]}]}))['rejects']['toThrow']();});}),describe('evaluation_operation\x20demand_match\x20order\x20bridge\x20(N-2\x20/\x2008\x20§7)',()=>{it('each\x20match\x20carries\x20the\x20service.order_new\x20transaction-formation\x20bridge',async()=>{const a=await handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service]}),b=resultOf(a)['matches'][0x0];expect(b['order'])['toBeDefined'](),expect(b['order']['operation'])['toBe']('service.order_new'),expect(b['order']['operation_type'])['toBe']('service'),expect(b['order']['preconditions']['some'](c=>c['includes']('acceptance_score')))['toBe'](!![]),expect(b['order']['rationale'])['toContain']('0xsvc1'),expect(b['next']['operation'])['toBe']('demand.publish'),expect(b['next']['operation_type'])['toBe']('demand'),expect(b['next']['rationale'])['toContain']('service.order_new');});}),describe('evaluation_operation\x20match_discover\x20indexed\x20candidate\x20mapping',()=>{it('scores\x20wrapped\x20sales\x20fields\x20instead\x20of\x20replacing\x20them\x20with\x20zero\x20values',async()=>{vi['mocked'](enumerateServices)['mockResolvedValueOnce']({'services':[{'object':'0xsvc1','name':'Logo\x20design','location':'Shanghai','json':{'description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'fields':{'name':'logo','price':'100','wip_hash':'abc'}}],'bPublished':!![],'bPaused':![]}}],'total_enumerated':0x1,'has_more':![],'coverage':{'mode':'known_objects','complete':![],'truncated':![],'total_enumerated':0x1,'chain_id':'chain_test','degraded_reasons':[]}});const a=await handleEvaluationOperation({'action':'match_discover','description':'freelance\x20logo\x20design','location':'Shanghai','sensitivity':'strict','budget':'50','required_capabilities':['has_wip_verification'],'context_network':'testnet'}),b=resultOf(a)['matches'][0x0];expect(b['service']['sales'])['toEqual']([{'name':'logo','price':'100','wip_hash':'abc'}]),expect(b['result']['breakdown']['find'](c=>c['rule_id']==='price'))['toMatchObject']({'score':0x0,'reason':'over\x20budget'}),expect(b['result']['breakdown']['find'](c=>c['rule_id']==='capabilities'))['toMatchObject']({'score':0x64,'matched':['has_wip_verification']});});}),describe('evaluation_operation\x20evidence_review\x20list\x20mode\x20(P2-3)',()=>{it('items\x20mode\x20→\x20structured\x20usable/manual/rejected\x20+\x20proof\x20candidates',async()=>{const a=await handleEvaluationOperation({'action':'evidence_review','items':[{'id':'chat.wts','kind':'signature_photo','hash_committed':!![],'digital_check_passed':!![],'proof_ref':'0xproof1'},{'id':'waybill.jpg','kind':'delivery_proof','hash_committed':!![]},{'id':'voice.mp3','kind':'voice_recording','hash_committed':![]}]}),b=resultOf(a);expect(b['action'])['toBe']('evidence_review'),expect(b['list']['items'])['toHaveLength'](0x3),expect(b['list']['usable'])['toHaveLength'](0x1),expect(b['list']['manual'])['toHaveLength'](0x1),expect(b['list']['rejected'])['toHaveLength'](0x1),expect(b['list']['proof_candidates'])['toHaveLength'](0x1),expect(b['list']['proof_candidates'][0x0]['proof_ref'])['toBe']('0xproof1'),expect(b['list']['dispute_hint'])['toContain']('1\x20Proof\x20reference\x20candidate(s)\x20ready');}),it('single-item\x20mode\x20still\x20works\x20(backwards\x20compatible)',async()=>{const a=await handleEvaluationOperation({'action':'evidence_review','kind':'signature_photo','hash_committed':!![],'digital_check_passed':!![]});expect(resultOf(a)['review']['status'])['toBe']('auto_pass');}),it('schema\x20refinement:\x20neither\x20items\x20nor\x20kind+hash_committed\x20→\x20error',async()=>{await expect(handleEvaluationOperation({'action':'evidence_review'}))['rejects']['toThrow']();});});function remoteCandidate(a,b={}){return{'objectId':a,'verifiedKind':'Service','objectVersion':'3','facetVersion':'facets-1','channels':['bm25','structured'],'rrf':0.032786885246,'publicFeatures':{'industry':'freelance','industryConfidence':0.7,'location':'Shanghai','priceMin':'100','priceMax':'100','capabilities':['has_wip_verification'],'published':!![],'paused':![],'keywords':['design']},'serverEvaluation':{'policyVersion':'public-baseline-1','total':87.5,'breakdown':[{'dimension':'text','weight':0x1e,'score':0x64}],'unknownRules':['trust:\x20cold-start\x20prior\x20withheld'],'redFlags':[]},'payloadJson':{'description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'fields':{'name':'logo','price':'100','wip_hash':'abc'}}],'bPublished':!![],'bPaused':![]},...b};}function remotePage(a){return{'policyVersion':'public-baseline-1','candidates':a,'recall':{'liveSet':a['length']+0x2,'gated':a['length'],'structured':a['length'],'bm25':a['length'],'merged':a['length'],'channelsActive':['structured','bm25']},'truncated':![],'coverage':{'mode':'known_objects','complete':![],'truncated':![],'total_enumerated':a['length'],'chain_id':'chain_test','degraded_reasons':[]}};}function legacyAnswer(){return{'services':[{'object':'0xsvc1','name':'Logo\x20design','location':'Shanghai','json':{'description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'fields':{'name':'logo','price':'100','wip_hash':'abc'}}],'bPublished':!![],'bPaused':![]}}],'total_enumerated':0x1,'has_more':![],'coverage':{'mode':'event_window','complete':![],'truncated':![],'total_enumerated':0x1,'chain_id':'chain_test','degraded_reasons':['EVENT_BACKED_ENUMERATION']}};}const MATCH_INPUT={'action':'match_discover','description':'freelance\x20logo\x20design','location':'Shanghai','sensitivity':'strict','budget':'100','required_capabilities':['has_wip_verification'],'context_network':'testnet'};describe('evaluation_operation\x20match_discover\x20remote\x20index\x20route\x20(K5-11\x20R3)',()=>{beforeEach(()=>{vi['mocked'](enumerateServices)['mockReset'](),vi['mocked'](matchServicesViaIndex)['mockReset']();}),afterEach(()=>{delete process['env']['WOWOK_DATA_SOURCE'],delete process['env']['WOWOK_INDEX_URL'];}),it('converts\x20wei\x20budgets\x20to\x20WOW\x20decimals\x20for\x20the\x20match\x20API',()=>{expect(weiToWowDecimal('0'))['toBe']('0'),expect(weiToWowDecimal('6000000000'))['toBe']('6'),expect(weiToWowDecimal('7500000000'))['toBe']('7.5'),expect(weiToWowDecimal('123456789'))['toBe']('0.123456789'),expect(weiToWowDecimal('1000000000000'))['toBe']('1000'),expect(()=>weiToWowDecimal('12.5'))['toThrow']();}),it('one-shot\x20remote\x20match:\x20no\x20enumeration,\x20dual\x20breakdown,\x20private\x20re-rank',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchServicesViaIndex)['mockResolvedValueOnce'](remotePage([remoteCandidate('0xsvc1'),remoteCandidate('0xsvc2',{'payloadJson':{'description':'mural\x20painting','location':'Shanghai','sales':[{'fields':{'name':'mural','price':'90'}}],'bPublished':!![],'bPaused':![]}})]));const a=await handleEvaluationOperation({...MATCH_INPUT}),b=resultOf(a);expect(b['match_route'])['toBe']('remote_index'),expect(enumerateServices)['not']['toHaveBeenCalled'](),expect(vi['mocked'](matchServicesViaIndex)['mock']['calls'][0x0][0x1])['toMatchObject']({'q':'freelance\x20logo\x20design','location':'Shanghai','budgetWei':'100','capabilities':['has_wip_verification'],'industry':undefined}),expect(b['matches'])['toHaveLength'](0x2),expect(b['total_enumerated'])['toBe'](0x4);const c=b['matches']['find'](e=>e['service']['object']==='0xsvc1');expect(c['server_match'])['toMatchObject']({'policy_version':'public-baseline-1','total':87.5,'channels':['bm25','structured']}),expect(c['server_match']['unknown_rules'])['toEqual'](['trust:\x20cold-start\x20prior\x20withheld']),expect(c['result']['breakdown']['some'](e=>e['rule_id']==='capabilities'))['toBe'](!![]);const d=b['matches']['find'](e=>e['service']['object']==='0xsvc2');expect(d['service']['description'])['toBe']('mural\x20painting'),expect(d['server_match'])['toBeDefined'](),expect(b['coverage']['mode'])['toBe']('known_objects');}),it('auto\x20mode\x20degrades\x20to\x20legacy\x20enumeration\x20with\x20honest\x20coverage',async()=>{process['env']['WOWOK_DATA_SOURCE']='auto',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchServicesViaIndex)['mockRejectedValueOnce'](Object['assign'](new Error('Remote\x20index\x20returned\x20HTTP\x20503'),{'code':'INDEX_HTTP_ERROR'})),vi['mocked'](enumerateServices)['mockResolvedValueOnce'](legacyAnswer());const a=await handleEvaluationOperation({...MATCH_INPUT}),b=resultOf(a);expect(b['match_route'])['toBe']('legacy_enumeration'),expect(enumerateServices)['toHaveBeenCalledTimes'](0x1),expect(b['coverage']['degraded_reasons'])['toContain']('MATCH_INDEX_FALLBACK'),expect(b['coverage']['degraded_reasons'])['toContain']('INDEX_HTTP_ERROR'),expect(b['matches'])['toHaveLength'](0x1),expect(b['matches'][0x0]['server_match'])['toBeUndefined']();}),it('strict\x20remote\x20mode\x20surfaces\x20the\x20index\x20failure',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchServicesViaIndex)['mockRejectedValueOnce'](Object['assign'](new Error('Remote\x20index\x20request\x20failed'),{'code':'INDEX_UNAVAILABLE'})),await expect(handleEvaluationOperation({...MATCH_INPUT}))['rejects']['toThrow'](/Remote index request failed/),expect(enumerateServices)['not']['toHaveBeenCalled']();}),it('never\x20uploads\x20the\x20no-signal\x20general\x20industry\x20(the\x20facet\x20stores\x20it\x20as\x20null)',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchServicesViaIndex)['mockResolvedValueOnce'](remotePage([remoteCandidate('0xsvc1')])),expect(enrichFromDescription('\x20\x20\x20')['industry'])['toBe']('general'),await handleEvaluationOperation({...MATCH_INPUT,'description':'\x20\x20\x20'}),expect(vi['mocked'](matchServicesViaIndex)['mock']['calls'][0x0][0x1]?.['industry'])['toBeUndefined']();}),it('filters\x20the\x20match\x20API\x20cannot\x20express\x20keep\x20the\x20legacy\x20route',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](enumerateServices)['mockResolvedValueOnce'](legacyAnswer());const a=await handleEvaluationOperation({...MATCH_INPUT,'coin_type':'0x2::wow::WOW'}),b=resultOf(a);expect(b['match_route'])['toBe']('legacy_enumeration'),expect(matchServicesViaIndex)['not']['toHaveBeenCalled'](),expect(enumerateServices)['toHaveBeenCalledTimes'](0x1);});}),describe('evaluation_operation\x20match_discover\x20private\x20policy\x20DSL\x20(K5-11\x20R4)',()=>{beforeEach(()=>{process['env']['WOWOK_DATA_SOURCE']='legacy',vi['mocked'](enumerateServices)['mockReset'](),vi['mocked'](matchServicesViaIndex)['mockReset']();}),afterEach(()=>{delete process['env']['WOWOK_DATA_SOURCE'],delete process['env']['WOWOK_INDEX_URL'];});function a(){return{'services':[{'object':'0xgood','name':'Logo\x20design','location':'Shanghai','json':{'description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'fields':{'name':'logo','price':'100','wip_hash':'abc'}}],'arbitrations':['0xarb1'],'owner':'0xownerA','bPublished':!![],'bPaused':![]}},{'object':'0xpaused','name':'Paused\x20shop','location':'Shanghai','json':{'description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'fields':{'name':'logo','price':'100'}}],'owner':'0xownerB','bPublished':!![],'bPaused':!![]}}],'total_enumerated':0x2,'has_more':![],'coverage':{'mode':'event_window','complete':![],'truncated':![],'total_enumerated':0x2,'chain_id':'chain_test','degraded_reasons':['EVENT_BACKED_ENUMERATION']}};}it('preset\x20gate\x20drops\x20the\x20paused\x20candidate\x20and\x20reports\x20it\x20in\x20policy_effect',async()=>{vi['mocked'](enumerateServices)['mockResolvedValueOnce'](a());const b=await handleEvaluationOperation({'action':'match_discover','description':'freelance\x20logo\x20design','location':'Shanghai','sensitivity':'strict','context_network':'testnet','match_policy':'trust_first'}),c=resultOf(b);expect(c['matches']['map'](d=>d['service']['object']))['toEqual'](['0xgood']),expect(c['policy_effect']['policy_id'])['toBe']('trust_first'),expect(c['policy_effect']['privacy'])['toContain']('never\x20leave\x20this\x20device'),expect(c['policy_effect']['dropped']['some'](e=>e['object']==='0xpaused'))['toBe'](!![]),expect(c['policy_effect']['weights_applied']['trust'])['toBe'](0x1e),expect(typeof c['policy_effect']['policy_hash'])['toBe']('string');}),it('a\x20weight-only\x20policy\x20re-anchors\x20the\x20trust\x20dimension\x20(weight_source=override)',async()=>{vi['mocked'](enumerateServices)['mockResolvedValueOnce'](a());const b=await handleEvaluationOperation({'action':'match_discover','description':'freelance\x20logo\x20design','location':'Shanghai','sensitivity':'strict','context_network':'testnet','match_policy':{'policy_id':'custom','weights':{'trust':0x2d}}}),c=resultOf(b),d=c['matches'][0x0]['result']['breakdown']['find'](e=>e['rule_id']==='trust');expect(d['weight'])['toBe'](0x2d),expect(d['weight_source'])['toBe']('override'),expect(c['policy_effect']['weights_applied'])['toEqual']({'trust':0x2d});}),it('the\x20private\x20policy\x20never\x20reaches\x20the\x20remote\x20match\x20request',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchServicesViaIndex)['mockResolvedValueOnce'](remotePage([remoteCandidate('0xsvc1')])),await handleEvaluationOperation({...MATCH_INPUT,'match_policy':'trust_first'});const b=vi['mocked'](matchServicesViaIndex)['mock']['calls'][0x0][0x1];expect(b['match_policy'])['toBeUndefined'](),expect(b['policy'])['toBeUndefined'](),expect(JSON['stringify'](b))['not']['toContain']('trust_first');}),it('unknown\x20preset\x20id\x20throws\x20with\x20the\x20available\x20list',async()=>{await expect(handleEvaluationOperation({...MATCH_INPUT,'match_policy':'does_not_exist'}))['rejects']['toThrow'](/unknown match_policy preset/);}),it('a\x20supply_to_demand\x20policy\x20is\x20rejected\x20by\x20match_discover',async()=>{await expect(handleEvaluationOperation({...MATCH_INPUT,'match_policy':'supplier_hunting'}))['rejects']['toThrow'](/direction/);});}),describe('evaluation_operation\x20demand_present\x20private\x20policy\x20(K5-11\x20R4-W2)',()=>{const a={'id':'0xsvc1','kind':'service','industry':'freelance','region':{'mode':'physical','city':'Shanghai','raw':'Shanghai'},'keywords':['design'],'capabilities':{'has_arbitration':!![],'has_refund_path':!![],'has_milestone_nodes':![],'has_compensation_fund':![],'has_wip_verification':!![],'has_messenger':!![],'has_buy_guard':![],'has_dynamic_pricing':![],'is_published':!![],'is_paused':![]}};function b(){return{'demands':[{'object':'0xdesign','description':'need\x20a\x20freelance\x20logo\x20redesign\x20for\x20a\x20coffee\x20brand','location':'Shanghai','rewards':['0xr1','0xr2'],'guards':[],'presenters_count':0x0,'um':'0xum1','permission':'0xperm1'},{'object':'0xcleaning','description':'deep\x20cleaning\x20for\x20a\x203-bedroom\x20apartment','location':'Beijing','rewards':['0xr3'],'guards':[{'guard':'0xg'}],'presenters_count':0x2,'um':null,'permission':'0xperm2'}],'total_enumerated':0x2,'has_more':![],'coverage':{'mode':'event_window','complete':![],'truncated':![],'total_enumerated':0x2,'chain_id':'chain_test','degraded_reasons':['EVENT_BACKED_ENUMERATION']}};}beforeEach(()=>{process['env']['WOWOK_DATA_SOURCE']='legacy',vi['mocked'](enumerateDemands)['mockReset'](),vi['mocked'](matchServicesViaIndex)['mockReset'](),vi['mocked'](matchDemandsViaIndex)['mockReset']();}),it('supply_to_demand\x20policy\x20gates\x20demands\x20and\x20reports\x20the\x20effect',async()=>{vi['mocked'](enumerateDemands)['mockResolvedValueOnce'](b());const c=await handleEvaluationOperation({'action':'demand_present','service_cap':a,'context_network':'testnet','match_policy':{'policy_id':'pick-design','direction':'supply_to_demand','gates':[{'dim':'text','op':'must_contain','value':'logo'},{'dim':'messenger','op':'eq','value':!![]}]}}),d=resultOf(c);expect(d['matches']['map'](e=>e['demand']['object']))['toEqual'](['0xdesign']),expect(d['policy_effect']['policy_id'])['toBe']('pick-design'),expect(d['policy_effect']['direction'])['toBe']('supply_to_demand'),expect(d['policy_effect']['dropped']['some'](e=>e['object']==='0xcleaning'))['toBe'](!![]),expect(d['policy_effect']['privacy'])['toContain']('never\x20leave\x20this\x20device'),expect(d['matches'][0x0]['next'])['toBeDefined'](),expect(matchServicesViaIndex)['not']['toHaveBeenCalled']();}),it('preset\x20supplier_hunting\x20drives\x20demand_present\x20end-to-end',async()=>{vi['mocked'](enumerateDemands)['mockResolvedValueOnce'](b());const c=await handleEvaluationOperation({'action':'demand_present','service_cap':a,'context_network':'testnet','match_policy':'supplier_hunting'}),d=resultOf(c);expect(d['policy_effect']['policy_id'])['toBe']('supplier_hunting'),expect(d['matches'])['toHaveLength'](0x2);}),it('a\x20demand_to_supply\x20policy\x20is\x20rejected\x20by\x20demand_present',async()=>{await expect(handleEvaluationOperation({'action':'demand_present','service_cap':a,'context_network':'testnet','match_policy':'trust_first'}))['rejects']['toThrow'](/direction/),expect(enumerateDemands)['not']['toHaveBeenCalled']();}),it('weights\x20re-anchor\x20the\x20demand_match\x20scoring\x20dims\x20on\x20the\x20supply-to-demand\x20path',async()=>{vi['mocked'](enumerateDemands)['mockResolvedValueOnce'](b());const c=await handleEvaluationOperation({'action':'demand_present','service_cap':a,'context_network':'testnet','match_policy':{'policy_id':'custom','direction':'supply_to_demand','weights':{'capabilities':0x32}}}),d=resultOf(c),e=d['matches'][0x0]['result']['breakdown']['find'](f=>f['rule_id']==='capabilities');expect(e['weight'])['toBe'](0x32),expect(e['weight_source'])['toBe']('override'),expect(d['policy_effect']['weights_applied'])['toEqual']({'capabilities':0x32});});}),describe('evaluation_operation\x20discover_demands\x20policy\x20gates\x20(K5-11\x20R4-W2)',()=>{function a(){return{'demands':[{'object':'0xdesign','description':'need\x20a\x20freelance\x20logo\x20redesign','location':'Shanghai','rewards':['0xr1'],'guards':[],'presenters_count':0x0,'um':'0xum1','permission':'0xperm1'},{'object':'0xcleaning','description':'deep\x20cleaning\x20for\x20a\x203-bedroom\x20apartment','location':'Beijing','rewards':[],'guards':[],'presenters_count':0x0,'um':null,'permission':'0xperm2'}],'total_enumerated':0x2,'has_more':![],'coverage':{'mode':'event_window','complete':![],'truncated':![],'total_enumerated':0x2,'chain_id':'chain_test','degraded_reasons':['EVENT_BACKED_ENUMERATION']}};}beforeEach(()=>{process['env']['WOWOK_DATA_SOURCE']='legacy',vi['mocked'](enumerateDemands)['mockReset'](),vi['mocked'](matchDemandsViaIndex)['mockReset']();}),it('gates\x20filter\x20the\x20enumerated\x20set;\x20weights/rerank\x20are\x20reported\x20not\x20applicable',async()=>{vi['mocked'](enumerateDemands)['mockResolvedValueOnce'](a());const b=await handleEvaluationOperation({'action':'discover_demands','context_network':'testnet','match_policy':{'policy_id':'pick-design','direction':'supply_to_demand','gates':[{'dim':'text','op':'must_contain','value':'logo'}],'weights':{'trust':0x1e},'rerank':{'diversity':{'by':'owner','max_per_group':0x1}}}}),c=resultOf(b);expect(c['demands']['map'](e=>e['object']))['toEqual'](['0xdesign']),expect(c['policy_effect']['policy_id'])['toBe']('pick-design'),expect(c['policy_effect']['ignored']['join']('|'))['toContain']('weights\x20not\x20applicable'),expect(c['policy_effect']['ignored']['join']('|'))['toContain']('rerank\x20not\x20applicable'),expect(c['policy_effect']['weights_applied'])['toEqual']({});}),it('violated\x20reward\x20gates\x20eliminate\x20demands\x20from\x20the\x20enumerated\x20set',async()=>{vi['mocked'](enumerateDemands)['mockResolvedValueOnce'](a());const b=await handleEvaluationOperation({'action':'discover_demands','context_network':'testnet','match_policy':{'policy_id':'multi-reward','direction':'supply_to_demand','gates':[{'dim':'reward','op':'gte','value':0x2}]}}),c=resultOf(b);expect(c['demands'])['toHaveLength'](0x0),expect(c['policy_effect']['dropped'])['toHaveLength'](0x2);});});const SUPPLY_CAP={'id':'0xsvc1','kind':'service','industry':'freelance','region':{'mode':'physical','city':'Shanghai','raw':'Shanghai'},'keywords':['design'],'capabilities':{'has_arbitration':!![],'has_refund_path':!![],'has_milestone_nodes':![],'has_compensation_fund':![],'has_wip_verification':!![],'has_messenger':!![],'has_buy_guard':![],'has_dynamic_pricing':![],'is_published':!![],'is_paused':![]}};function demandPair(){return[{'object':'0xdesign','type':'Demand','description':'need\x20a\x20freelance\x20logo\x20redesign','location':'Shanghai','rewards':['0xr1'],'guards':[],'presenters_count':0x0,'um':'0xum1','permission':'0xperm1'},{'object':'0xcleaning','type':'Demand','description':'deep\x20cleaning\x20for\x20a\x203-bedroom\x20apartment','location':'Beijing','rewards':[],'guards':[{'guard':'0xg','service_identifier':null}],'presenters_count':0x2,'um':null,'permission':'0xperm2'}];}function remoteDemandAnswer(){return{'demands':demandPair(),'total_enumerated':0x6,'has_more':![],'coverage':{'mode':'known_objects','complete':![],'truncated':![],'total_enumerated':0x6,'chain_id':'chain_a','degraded_reasons':[]}};}function legacyDemandAnswer(){return{'demands':demandPair(),'total_enumerated':0x2,'has_more':![],'coverage':{'mode':'event_window','complete':![],'truncated':![],'total_enumerated':0x2,'chain_id':'chain_test','degraded_reasons':['EVENT_BACKED_ENUMERATION']}};}describe('evaluation_operation\x20demand\x20remote\x20index\x20route\x20(K5-10\x20§4.2)',()=>{beforeEach(()=>{vi['mocked'](enumerateDemands)['mockReset'](),vi['mocked'](matchDemandsViaIndex)['mockReset']();}),afterEach(()=>{delete process['env']['WOWOK_DATA_SOURCE'],delete process['env']['WOWOK_INDEX_URL'];}),it('discover_demands\x20recalls\x20server-side\x20instead\x20of\x20downloading\x20the\x20Demand\x20universe',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchDemandsViaIndex)['mockResolvedValueOnce'](remoteDemandAnswer());const a=await handleEvaluationOperation({'action':'discover_demands','location':'Shanghai','context_network':'testnet'}),b=resultOf(a);expect(b['match_route'])['toBe']('remote_index'),expect(enumerateDemands)['not']['toHaveBeenCalled'](),expect(vi['mocked'](matchDemandsViaIndex)['mock']['calls'][0x0][0x1])['toMatchObject']({'location':'Shanghai','limit':0x64,'recallLimit':0xc8}),expect(vi['mocked'](matchDemandsViaIndex)['mock']['calls'][0x0][0x1]?.['industry'])['toBeUndefined'](),expect(b['demands']['map'](c=>c['object']))['toEqual'](['0xdesign']),expect(b['total_enumerated'])['toBe'](0x6),expect(b['coverage']['mode'])['toBe']('known_objects');}),it('demand_present\x20uploads\x20the\x20service\x27s\x20own\x20industry\x20as\x20the\x20public\x20query\x20signal',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchDemandsViaIndex)['mockResolvedValueOnce'](remoteDemandAnswer());const a=await handleEvaluationOperation({'action':'demand_present','service_cap':SUPPLY_CAP,'context_network':'testnet'}),b=resultOf(a);expect(b['match_route'])['toBe']('remote_index'),expect(vi['mocked'](matchDemandsViaIndex)['mock']['calls'][0x0][0x1])['toMatchObject']({'industry':'freelance'}),expect(b['matches'][0x0]['result']['breakdown']['some'](c=>c['rule_id']==='capabilities'))['toBe'](!![]),expect(b['matches']['map'](c=>c['demand']['object']))['toEqual'](['0xdesign','0xcleaning']);}),it('never\x20uploads\x20the\x20no-signal\x20general\x20industry',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchDemandsViaIndex)['mockResolvedValueOnce'](remoteDemandAnswer()),await handleEvaluationOperation({'action':'demand_present','service_cap':{...SUPPLY_CAP,'industry':'general'},'context_network':'testnet'}),expect(vi['mocked'](matchDemandsViaIndex)['mock']['calls'][0x0][0x1]?.['industry'])['toBeUndefined']();}),it('keeps\x20the\x20private\x20policy\x20on\x20device:\x20the\x20demand\x20read\x20carries\x20no\x20policy\x20at\x20all',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchDemandsViaIndex)['mockResolvedValueOnce'](remoteDemandAnswer()),await handleEvaluationOperation({'action':'demand_present','service_cap':SUPPLY_CAP,'context_network':'testnet','match_policy':'supplier_hunting'});const a=vi['mocked'](matchDemandsViaIndex)['mock']['calls'][0x0][0x1];expect(a['match_policy'])['toBeUndefined'](),expect(a['policy'])['toBeUndefined'](),expect(JSON['stringify'](a))['not']['toContain']('supplier_hunting');}),it('an\x20owner-dimension\x20policy\x20keeps\x20the\x20enumeration\x20route\x20(owner\x20is\x20not\x20in\x20the\x20match\x20payload)',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](enumerateDemands)['mockResolvedValueOnce'](legacyDemandAnswer());const a=await handleEvaluationOperation({'action':'discover_demands','context_network':'testnet','match_policy':{'policy_id':'not-blacklisted','direction':'supply_to_demand','excludes':[{'dim':'blacklist','owners':['0xownerBad']}]}}),b=resultOf(a);expect(b['match_route'])['toBe']('legacy_enumeration'),expect(matchDemandsViaIndex)['not']['toHaveBeenCalled'](),expect(enumerateDemands)['toHaveBeenCalledTimes'](0x1);}),it('auto\x20mode\x20degrades\x20to\x20enumeration\x20with\x20an\x20honest\x20coverage\x20stamp',async()=>{process['env']['WOWOK_DATA_SOURCE']='auto',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchDemandsViaIndex)['mockRejectedValueOnce'](Object['assign'](new Error('Remote\x20index\x20returned\x20HTTP\x20503'),{'code':'INDEX_HTTP_ERROR'})),vi['mocked'](enumerateDemands)['mockResolvedValueOnce'](legacyDemandAnswer());const a=await handleEvaluationOperation({'action':'discover_demands','context_network':'testnet'}),b=resultOf(a);expect(b['match_route'])['toBe']('legacy_enumeration'),expect(enumerateDemands)['toHaveBeenCalledTimes'](0x1),expect(b['coverage']['degraded_reasons'])['toContain']('MATCH_INDEX_FALLBACK'),expect(b['coverage']['degraded_reasons'])['toContain']('INDEX_HTTP_ERROR');}),it('strict\x20remote\x20mode\x20surfaces\x20the\x20index\x20failure\x20instead\x20of\x20substituting\x20events',async()=>{process['env']['WOWOK_DATA_SOURCE']='remote',process['env']['WOWOK_INDEX_URL']='http://index.test',vi['mocked'](matchDemandsViaIndex)['mockRejectedValueOnce'](Object['assign'](new Error('Remote\x20index\x20request\x20failed'),{'code':'INDEX_UNAVAILABLE'})),await expect(handleEvaluationOperation({'action':'discover_demands','context_network':'testnet'}))['rejects']['toThrow'](/Remote index request failed/),expect(enumerateDemands)['not']['toHaveBeenCalled']();}),it('product\x20default:\x20testnet\x20routes\x20remotely\x20with\x20no\x20configuration\x20at\x20all',async()=>{vi['mocked'](matchDemandsViaIndex)['mockResolvedValueOnce'](remoteDemandAnswer());const a=await handleEvaluationOperation({'action':'discover_demands','context_network':'testnet'});expect(resultOf(a)['match_route'])['toBe']('remote_index'),expect(enumerateDemands)['not']['toHaveBeenCalled'](),expect(indexUrlFor(ENTRYPOINT['Testnet']))['toBeTruthy']();}),it('product\x20default:\x20mainnet\x20keeps\x20the\x20enumeration\x20because\x20it\x20ships\x20no\x20index',async()=>{expect(indexUrlFor(ENTRYPOINT['Mainnet']))['toBeUndefined'](),vi['mocked'](enumerateDemands)['mockResolvedValueOnce'](legacyDemandAnswer());const a=await handleEvaluationOperation({'action':'discover_demands','context_network':'mainnet'}),b=resultOf(a);expect(b['match_route'])['toBe']('legacy_enumeration'),expect(matchDemandsViaIndex)['not']['toHaveBeenCalled'](),expect(b['coverage']['mode'])['toBe']('event_window');});});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{readdirSync,readFileSync,writeFileSync,existsSync,mkdirSync,statSync,cpSync,renameSync,rmSync}from'node:fs';import{join,relative,resolve,sep,dirname,basename}from'node:path';import{strictParse}from'../../schema/index.js';import{IndustryPackOperationInputSchema}from'../../schema/industry-pack/index.js';import{validateJudgmentFragment}from'../../config/judgment.js';import{scaffoldIndustryPack,listRegisteredPacks,getRegisteredPack,packKind,scanDefaultIndustryPacks,seedBuiltinIndustryTemplates,seedBuiltinStrategyManuals,ensureIndustryReadme,resolveIndustryPackDir,rescanPack,resolveDisputeRules,resolveComplianceRules,resolveSupplyRules,resolveIndustryRules,resolveIndustryPlaybook,diffIndustryPack,resetIndustryPath}from'../../extensions/index.js';import{getIndustryModeRegistry}from'../../extensions/registry.js';import{getBuiltinTemplate,listBuiltinTemplates}from'../../knowledge/builtin-templates.js';import{paramPlane}from'../../composition/param-disclosure.js';import{matchParams}from'../../knowledge/param-schema.js';import{componentPlane,matchComponents,summarizeComponents}from'../../knowledge/component-schema.js';import{handleRecommendIndustry,handleListModes,handleDeriveUserMode,handleEvolveUserMode,handleRegisterUserMode,handleUnregisterUserMode,handleRegisterCustomMetric,handleUnregisterCustomMetric,handleRegisterCustomConstraint,handleUnregisterCustomConstraint,handleListMetricsConstraints}from'../../playbooks/service-build/mode-actions.js';import{repairBuiltinTemplates,builtinTemplateDrift,resolveTemplatesDir,parseTemplateFile,foldKnobFrontmatter,TemplateFrontmatterSchema,TemplateKnobOverlaySchema,canonicalTemplateContent,canonicalKnobContent,renderTemplateFile,renderKnobFile,matchBuiltinTemplateSlot,TEMPLATE_SENTINEL_KIND,TEMPLATE_KNOBS_SENTINEL_KIND,TEMPLATE_KNOBS_VERSION}from'../../knowledge/template-loader.js';import{stripReleaseSentinel}from'../../knowledge/release-sentinel.js';import{BUILTIN_TEMPLATES_VERSION}from'../../knowledge/builtin-templates.js';const INDUSTRY_ROOT=resolveIndustryPackDir(),resolveTemplatesDirSafe=resolveTemplatesDir;function resolveIndustryPath(a){const b=resolve(INDUSTRY_ROOT,a);if(b!==INDUSTRY_ROOT&&!b['startsWith'](INDUSTRY_ROOT+sep))throw new Error('path\x20\x27'+a+'\x27\x20escapes\x20the\x20industry\x20root');return b;}function isTemplateTreePath(a){const b=a['split'](/[\\/]+/)['filter'](c=>c['length']>0x0);return b['length']>=0x2&&b[0x1]==='templates';}function assertTemplateWriteAuthorized(a,b,c){if(c===!![])return;const d=b['find'](e=>e!==undefined&&isTemplateTreePath(e));if(!d)return;throw new Error('action=\x27'+a+'\x27\x20modifies\x20the\x20user-editable\x20template\x20file\x20\x27'+d+'\x27.\x20'+'Present\x20the\x20intended\x20change\x20to\x20the\x20user\x20first;\x20after\x20the\x20user\x20explicitly\x20confirms,\x20'+'re-call\x20with\x20authorize=true\x20(C5).');}function rescanAffectedPack(a){const b=a['split'](/[\\/]+/)['find'](c=>c['length']>0x0);if(!b)return;rescanPack(b);}const BASELINES_FILENAME='baselines.json',PACK_FILENAME='pack.json';function assertBaselinesContentValid(a,b){const c=a['split'](/[\\/]+/)['pop']()??'';if(c!==BASELINES_FILENAME&&c!==PACK_FILENAME)return;let d;try{d=JSON['parse'](b);}catch{return;}if(!d||typeof d!=='object'||Array['isArray'](d))return;const e=d,f=c===BASELINES_FILENAME?d:e['baselines'];if(f===undefined||f===null)return;const g=validateJudgmentFragment(f,a+'\x20baselines');if(g)throw new Error('write\x20rejected\x20—\x20the\x20baselines\x20fragment\x20in\x20\x27'+a+'\x27\x20is\x20not\x20a\x20valid\x20judgment\x20fragment:\x20'+g);}function assertTemplateContentValid(a,b){if(!isTemplateTreePath(a)||!a['endsWith']('.md'))return;let c;try{({frontmatter:c}=parseTemplateFile(b));}catch(f){throw new Error('write\x20rejected\x20—\x20\x27'+a+'\x27\x20is\x20a\x20template\x20file\x20but\x20the\x20frontmatter\x20block\x20is\x20malformed:\x20'+f['message']);}const d=matchBuiltinTemplateSlot(resolveIndustryPath(a));if(d?.['part']==='knobs'){const g=TemplateKnobOverlaySchema['safeParse'](foldKnobFrontmatter(c));if(!g['success']){const h=g['error']['issues']['map'](j=>'\x20\x20'+j['path']['join']('.')+':\x20'+j['message'])['join']('\x0a');throw new Error('write\x20rejected\x20—\x20the\x20knob\x20frontmatter\x20in\x20\x27'+a+'\x27\x20violates\x20the\x20knob\x20schema\x20'+('(fee_params\x20may\x20also\x20be\x20written\x20one\x20per\x20line\x20as\x20\x27fee_params.<name>:\x20<value>\x27):\x0a'+h));}if(g['data']['id']!==d['template']['id'])throw new Error('write\x20rejected\x20—\x20knob\x20file\x20\x27'+a+'\x27\x20declares\x20id\x20\x27'+g['data']['id']+'\x27,\x20which\x20does\x20not\x20own\x20this\x20slot');return;}const e=TemplateFrontmatterSchema['safeParse'](c);if(!e['success']){const i=e['error']['issues']['map'](j=>'\x20\x20'+j['path']['join']('.')+':\x20'+j['message'])['join']('\x0a');throw new Error('write\x20rejected\x20—\x20the\x20template\x20frontmatter\x20in\x20\x27'+a+'\x27\x20violates\x20the\x20schema\x20(the\x20editor\x20whitelist\x20IS\x20the\x20zod\x20schema):\x0a'+i);}}function listRecursive(a,b,c,d=0x0){if(d>0x8)return;let f;try{f=readdirSync(a,{'withFileTypes':!![]});}catch{return;}for(const g of f){if(g['name']['startsWith']('.'))continue;const h=join(a,g['name']),i=relative(b,h)['split'](sep)['join']('/');let j=0x0,k=0x0;try{const l=statSync(h);k=l['size'],j=l['mtimeMs'];}catch{}g['isDirectory']()?(c['push']({'path':i,'is_dir':!![],'size':0x0,'mtime':j}),listRecursive(h,b,c,d+0x1)):c['push']({'path':i,'is_dir':![],'size':k,'mtime':j});}}export function isShellPayload(a){if(a===null||a===undefined)return!![];if(typeof a==='string')return a['length']===0x0;if(Array['isArray'](a))return a['every'](b=>isShellPayload(b));if(typeof a==='object')return Object['entries'](a)['filter'](([b])=>b!=='category')['every'](([,b])=>isShellPayload(b));return![];}export async function handleIndustryPackOperation(a){const b=strictParse(IndustryPackOperationInputSchema,a,'industry_pack_operation\x20input');mkdirSync(INDUSTRY_ROOT,{'recursive':!![]}),seedBuiltinIndustryTemplates(),seedBuiltinStrategyManuals(),ensureIndustryReadme();let c;switch(b['action']){case'scaffold':{if(!b['name'])throw new Error('\x27name\x27\x20is\x20required\x20for\x20action=\x27scaffold\x27');const d=scaffoldIndustryPack(b['name']);c={'action':'scaffold','ok':d['ok'],'dir':d['dir'],'files':d['files'],'errors':d['errors']};if(d['ok'])rescanPack(b['name']);break;}case'list':{c={'action':'list','packs':listRegisteredPacks()};break;}case'scan':{c={'action':'scan','results':scanDefaultIndustryPacks()};break;}case'repair_builtin_templates':{const e=b['include_user_edited'];if(b['authorize']!==!![]){const h=repairBuiltinTemplates({'backup':!![],'dryRun':!![],'includeUserEdited':e}),i=h['filter'](j=>j['status']==='would_update');c={'action':'repair_builtin_templates','dir':resolveTemplatesDirSafe(),'reseeded_count':0x0,'requires_authorization':!![],'results':h,'note':i['length']?'PLAN\x20ONLY\x20(no\x20writes)\x20—\x20'+i['length']+'\x20builtin\x20file(s)\x20differ\x20from\x20the\x20in-code\x20catalog\x20and\x20would\x20be\x20reseeded\x20(each\x20result\x20carries\x20a\x20field-level\x20diff;\x20previous\x20bodies\x20preserved\x20under\x20templates/.archive/).\x20Present\x20this\x20plan\x20to\x20the\x20user;\x20after\x20the\x20user\x20explicitly\x20confirms,\x20re-call\x20with\x20authorize=true\x20to\x20execute'+(e?.['length']?'\x20(keep\x20include_user_edited\x20on\x20the\x20execute\x20call)':'')+'.':'Nothing\x20to\x20repair\x20—\x20every\x20on-disk\x20builtin\x20template\x20either\x20matches\x20the\x20in-code\x20catalog\x20or\x20carries\x20user\x20edits\x20(which\x20are\x20never\x20overwritten\x20without\x20an\x20explicit\x20include_user_edited\x20authorization).'};break;}const f=repairBuiltinTemplates({'backup':!![],'includeUserEdited':e}),g=f['filter'](j=>j['status']==='updated');c={'action':'repair_builtin_templates','dir':resolveTemplatesDirSafe(),'reseeded_count':g['length'],'results':f,'note':g['length']?'Diverging\x20builtin\x20files\x20were\x20reseeded\x20from\x20the\x20in-code\x20catalog.\x20Each\x20previous\x20body\x20is\x20preserved\x20under\x20templates/.archive/.':'Nothing\x20repaired\x20—\x20every\x20on-disk\x20builtin\x20template\x20either\x20matches\x20the\x20in-code\x20catalog\x20or\x20carries\x20user\x20edits\x20(which\x20are\x20never\x20overwritten\x20without\x20an\x20explicit\x20include_user_edited\x20authorization).'};break;}case'template_drift':{const j=builtinTemplateDrift({'includeUserEdited':b['include_user_edited']}),k=j['filter'](l=>l['repairable'])['length'];c={'action':'template_drift','dir':resolveTemplatesDirSafe(),'drift_count':j['length'],'repairable_count':k,'drift':j,'note':j['length']?k>0x0?k+'\x20of\x20'+j['length']+'\x20diverging\x20builtin\x20template(s)\x20can\x20be\x20reseeded\x20without\x20losing\x20user\x20work\x20(including\x20ids\x20listed\x20in\x20include_user_edited)\x20—\x20run\x20action=\x27repair_builtin_templates\x27\x20(plan-only\x20preview\x20first,\x20then\x20authorize=true\x20after\x20the\x20user\x20confirms,\x20keeping\x20include_user_edited\x20on\x20both\x20calls).\x20The\x20rest\x20carry\x20user\x20edits\x20and\x20are\x20never\x20overwritten.':'All\x20diverging\x20builtin\x20templates\x20carry\x20user\x20edits\x20—\x20never\x20overwritten\x20automatically;\x20pass\x20include_user_edited\x20with\x20the\x20explicitly\x20authorized\x20ids\x20to\x20make\x20them\x20reseedable,\x20or\x20resolve\x20by\x20hand.':'Every\x20builtin\x20template\x20on\x20disk\x20matches\x20the\x20in-code\x20catalog.'};break;}case'resolve':{c={'action':'resolve','dir':INDUSTRY_ROOT};break;}case'list_files':{const l=[];listRecursive(INDUSTRY_ROOT,INDUSTRY_ROOT,l),c={'action':'list_files','dir':INDUSTRY_ROOT,'files':l};break;}case'read_file':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27read_file\x27');const m=resolveIndustryPath(b['path']);if(!existsSync(m))throw new Error('file\x20not\x20found:\x20'+b['path']);c={'action':'read_file','path':m,'content':readFileSync(m,'utf-8')};break;}case'write_file':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27write_file\x27');if(b['content']===undefined)throw new Error('\x27content\x27\x20is\x20required\x20for\x20action=\x27write_file\x27');assertTemplateWriteAuthorized('write_file',[b['path']],b['authorize']);const n=resolveIndustryPath(b['path']);assertBaselinesContentValid(b['path'],b['content']),assertTemplateContentValid(b['path'],b['content']);let o=b['content'],p=![],q;const u=matchBuiltinTemplateSlot(n);if(u){if(u['part']==='machine'){const v=stripReleaseSentinel(o,TEMPLATE_SENTINEL_KIND)['content'];v===canonicalTemplateContent(u['template'])&&(o=renderTemplateFile(u['template']),p=!![],q='content\x20equals\x20the\x20canonical\x20machine\x20release\x20of\x20builtin\x20template\x20\x27'+u['template']['id']+'\x27\x20—\x20written\x20with\x20the\x20current\x20release\x20stamp\x20(v'+BUILTIN_TEMPLATES_VERSION+')\x20so\x20the\x20sentinel\x20hash\x20binds\x20again');}else{const w=stripReleaseSentinel(o,TEMPLATE_KNOBS_SENTINEL_KIND)['content'];w===canonicalKnobContent(u['template'])&&(o=renderKnobFile(u['template']),p=!![],q='content\x20equals\x20the\x20canonical\x20knob\x20release\x20of\x20builtin\x20template\x20\x27'+u['template']['id']+'\x27\x20—\x20written\x20with\x20the\x20current\x20release\x20stamp\x20(v'+TEMPLATE_KNOBS_VERSION+')\x20so\x20the\x20sentinel\x20hash\x20binds\x20again');}}mkdirSync(dirname(n),{'recursive':!![]}),writeFileSync(n,o,'utf-8'),c={'action':'write_file','path':n,'ok':!![],...p?{'restamped':!![],'note':q}:{}},rescanAffectedPack(b['path']);break;}case'get':{if(!b['name']&&b['layer']!=='params'&&b['layer']!=='components')throw new Error('\x27name\x27\x20is\x20required\x20for\x20action=\x27get\x27');const x=b['name']??'all',y=getRegisteredPack(x),z=y?.['layers']??[],A=()=>y?{'kind':packKind(z),'layers':z}:{},B=()=>{const I=getIndustryModeRegistry()['getMode'](x);return I?{'name':I['name'],'display_name':I['display_name'],'key_risk':I['key_risk'],'needs':I['needs']['map'](J=>J['description']),...I['analyze']?.['key_questions']?.['length']?{'analyze_questions':I['analyze']['key_questions']['slice'](0x0,0x2)}:{}}:undefined;};if(b['layer']==='params'){const I=M=>({'total':M['length'],'editable':M['filter'](N=>N['editable'])['length'],'live':M['filter'](N=>N['status']==='live')['length'],'inert':M['filter'](N=>N['status']==='inert')['length'],'not_flippable':M['filter'](N=>N['status']==='not-flippable')['length'],'hidden':M['filter'](N=>N['disclosure']==='hidden')['length'],'undescribed':M['filter'](N=>N['meaning']['startsWith']('Not\x20yet\x20described'))['length']}),J=b['query']?.['trim']();if(b['template']){const M=getBuiltinTemplate(b['template']);if(!M)throw new Error('template\x20\x27'+b['template']+'\x27\x20is\x20not\x20in\x20the\x20builtin\x20catalog\x20'+('(available:\x20'+listBuiltinTemplates()['map'](P=>P['id'])['join'](',\x20')+')'));if(b['name']&&M['industry']!==b['name'])throw new Error('template\x20\x27'+M['id']+'\x27\x20belongs\x20to\x20industry\x20\x27'+M['industry']+'\x27,\x20not\x20\x27'+b['name']+'\x27\x20—\x20'+'set\x20\x27name\x27\x20to\x20the\x20template\x27s\x20industry\x20(or\x20omit\x20it)');const N=paramPlane(M),O=J?matchParams(J,N,0x8):undefined;c={'action':'get','category':M['industry'],'layer':'params','template':M['id'],'param_summary':I(N),'params':N,...O?{'param_matches':O['map'](P=>({...P['row'],'score':P['score'],'reasons':P['reasons']})),'note':O['length']===0x0?'No\x20declared\x20parameter\x20of\x20\x27'+M['id']+'\x27\x20matches\x20\x27'+J+'\x27\x20—\x20that\x20phrase\x20names\x20no\x20setting\x20here\x20(nothing\x20was\x20guessed).':undefined}:{},'query':J};break;}if(!J)throw new Error('\x27query\x27\x20is\x20required\x20for\x20layer=\x27params\x27\x20without\x20a\x20template\x20id\x20—\x20name\x20the\x20business\x20facet\x20'+'(e.g.\x20\x27settlement\x20window\x27,\x20\x27take\x20rate\x27,\x20\x27cancel\x20fee\x27)\x20to\x20search\x20every\x20template');const K=b['name']?listBuiltinTemplates()['filter'](P=>P['industry']===b['name']):listBuiltinTemplates();if(K['length']===0x0)throw new Error('industry\x20\x27'+b['name']+'\x27\x20has\x20no\x20builtin\x20templates');const L=K['flatMap'](P=>matchParams(J,paramPlane(P),0x3)['map'](Q=>({'template':P['id'],'key':Q['row']['key'],'tier':Q['row']['tier'],'tier_name':Q['row']['tier_name'],'meaning':Q['row']['meaning'],'default':Q['row']['default'],'unit':Q['row']['unit'],'unit_hint':Q['row']['unit_hint'],'disclosure':Q['row']['disclosure'],'status':Q['row']['status'],'editable':Q['row']['editable'],'score':Q['score'],'reasons':Q['reasons']})))['sort']((P,Q)=>Q['score']-P['score']||P['template']['localeCompare'](Q['template']))['slice'](0x0,0x14);c={'action':'get','category':b['name']??'all','layer':'params','param_matches':L,'query':J,'note':L['length']===0x0?'No\x20template\x20parameter\x20matches\x20\x27'+J+'\x27\x20—\x20that\x20facet\x20is\x20not\x20a\x20setting\x20anywhere\x20in\x20the\x20catalog\x20(nothing\x20was\x20guessed).':undefined};break;}if(b['layer']==='components'){const P=b['query']?.['trim']();if(b['template']){const S=getBuiltinTemplate(b['template']);if(!S)throw new Error('template\x20\x27'+b['template']+'\x27\x20is\x20not\x20in\x20the\x20builtin\x20catalog\x20'+('(available:\x20'+listBuiltinTemplates()['map'](V=>V['id'])['join'](',\x20')+')'));if(b['name']&&S['industry']!==b['name'])throw new Error('template\x20\x27'+S['id']+'\x27\x20belongs\x20to\x20industry\x20\x27'+S['industry']+'\x27,\x20not\x20\x27'+b['name']+'\x27\x20—\x20'+'set\x20\x27name\x27\x20to\x20the\x20template\x27s\x20industry\x20(or\x20omit\x20it)');const T=componentPlane(S),U=P?matchComponents(P,T,0x8):undefined;c={'action':'get','category':S['industry'],'layer':'components','template':S['id'],'component_summary':summarizeComponents(T),'components':T,...U?{'component_matches':U,'note':U['length']===0x0?'No\x20component\x20of\x20\x27'+S['id']+'\x27\x20matches\x20\x27'+P+'\x27\x20—\x20that\x20phrase\x20names\x20no\x20component\x20here\x20(nothing\x20was\x20guessed).':undefined}:{},'query':P};break;}if(!P)throw new Error('\x27query\x27\x20is\x20required\x20for\x20layer=\x27components\x27\x20without\x20a\x20template\x20id\x20—\x20name\x20the\x20component\x20'+'(e.g.\x20\x27allocator\x20split\x27,\x20\x27repository\x20policy\x27,\x20\x27machine\x27,\x20\x27arbitration\x20venue\x27)\x20to\x20search\x20every\x20template');const Q=b['name']?listBuiltinTemplates()['filter'](V=>V['industry']===b['name']):listBuiltinTemplates();if(Q['length']===0x0)throw new Error('industry\x20\x27'+b['name']+'\x27\x20has\x20no\x20builtin\x20templates');const R=Q['flatMap'](V=>matchComponents(P,componentPlane(V),0x3)['map'](W=>({'template':V['id'],'id':W['id'],'family':W['family'],'what':W['what'],'how':W['how'],'effect':W['effect'],'related':W['related'],'configurable':W['configurable'],'why_not':W['why_not']})))['slice'](0x0,0x14);c={'action':'get','category':b['name']??'all','layer':'components','component_matches':R,'query':P,'note':R['length']===0x0?'No\x20template\x20component\x20matches\x20\x27'+P+'\x27\x20—\x20that\x20phrase\x20names\x20no\x20component\x20in\x20the\x20catalog\x20(nothing\x20was\x20guessed).':undefined};break;}if(b['layer']==='template'){if(b['template']){const V=getBuiltinTemplate(b['template']);if(!V)throw new Error('template\x20\x27'+b['template']+'\x27\x20is\x20not\x20in\x20the\x20builtin\x20catalog\x20'+('(available:\x20'+listBuiltinTemplates()['map'](W=>W['id'])['join'](',\x20')+')'));if(V['industry']!==x)throw new Error('template\x20\x27'+V['id']+'\x27\x20belongs\x20to\x20industry\x20\x27'+V['industry']+'\x27,\x20not\x20\x27'+x+'\x27\x20—\x20'+'set\x20\x27name\x27\x20to\x20the\x20template\x27s\x20industry');c={'action':'get','category':x,'layer':'template','template':JSON['parse'](JSON['stringify'](V))};}else{const W=listBuiltinTemplates()['filter'](X=>X['industry']===x)['map'](X=>({'id':X['id'],'variant':X['variant'],'product_ref':X['product_ref'],'key_risk':X['key_risk']}));if(!W['length'])throw new Error('industry\x20\x27'+x+'\x27\x20has\x20no\x20builtin\x20templates\x20(ids\x20use\x20\x27<industry>/<variant>\x27)');c={'action':'get','category':x,'layer':'template','templates':W,'note':'Re-call\x20with\x20layer=\x27template\x27\x20+\x20template=\x27<id>\x27\x20for\x20the\x20full\x20projection\x20'+'(machine_shape/guards/allocator\x20rows/fee_params/build_notes).'};}break;}if(b['layer']){const X=b['layer'];if(X==='match')throw new Error('layer\x20\x27match\x27\x20is\x20consumed\x20internally\x20by\x20the\x20recommend\x20matching\x20flow\x20—\x20not\x20exposed\x20via\x20get');if(!z['includes'](X))throw new Error('pack\x20\x27'+x+'\x27\x20does\x20not\x20register\x20layer\x20\x27'+X+'\x27'+(y?'\x20(kind='+packKind(z)+',\x20layers=['+z['join'](',\x20')+'])':'\x20(the\x20pack\x20is\x20not\x20registered)')+(X!=='mode'?';\x20layer=\x27template\x27\x20reads\x20the\x20builtin\x20catalog\x20instead\x20if\x20that\x20is\x20what\x20you\x20need':''));const Y=X==='mode'?B():X==='dispute'?resolveDisputeRules(x):X==='compliance'?resolveComplianceRules(x):X==='supply'?resolveSupplyRules(x):X==='rules'?resolveIndustryRules(x):resolveIndustryPlaybook(x);if(Y===undefined)throw new Error('layer\x20\x27'+X+'\x27\x20is\x20registered\x20for\x20pack\x20\x27'+x+'\x27\x20but\x20resolved\x20to\x20no\x20data');c={'action':'get','category':x,'layer':X,[X]:Y,...A()};break;}const C=B(),D=[{'name':'dispute','payload':resolveDisputeRules(x)},{'name':'compliance','payload':resolveComplianceRules(x)},{'name':'supply','payload':resolveSupplyRules(x)},{'name':'rules','payload':resolveIndustryRules(x)},{'name':'playbook','payload':resolveIndustryPlaybook(x)}],E=D['filter'](Z=>Z['payload']!==undefined&&isShellPayload(Z['payload']))['map'](Z=>Z['name']),F=D['filter'](Z=>Z['payload']!==undefined&&!isShellPayload(Z['payload'])),G=['dispute','compliance','supply','rules','playbook']['filter'](Z=>!z['includes'](Z)),H=z['filter'](Z=>!E['includes'](Z));c={'action':'get','category':x,...y?{'kind':packKind(H),'layers':H,...H['length']!==z['length']?{'registered_layers':z}:{}}:{},...C?{'mode':C}:{},...Object['fromEntries'](F['map'](Z=>[Z['name'],Z['payload']])),...E['length']?{'empty_layers':E}:{},...G['length']?{'missing_layers':G}:{},...G['length']||E['length']?{'note':[...G['length']?['pack\x20\x27'+x+'\x27\x20('+(y?packKind(H):'unregistered')+')\x20does\x20not\x20register\x20'+('['+G['join'](',\x20')+']\x20—\x20stub\x20packs\x20(builtin-mode\x20aliases)\x20carry\x20only\x20mode/match\x20')+'data;\x20scaffold\x20a\x20pack\x20or\x20place\x20a\x20pack.json\x20to\x20add\x20business\x20layers.']:[],...E['length']?['registered-but-empty\x20layer(s)\x20['+E['join'](',\x20')+']\x20carry\x20no\x20content\x20and\x20are\x20treated\x20'+'as\x20absent\x20(empty_layers)\x20—\x20the\x20echoed\x20kind\x20reflects\x20content-bearing\x20coverage,\x20not\x20raw\x20registration.']:[]]['join']('\x20')}:{}};break;}case'diff':{if(!b['name'])throw new Error('\x27name\x27\x20is\x20required\x20for\x20action=\x27diff\x27');c={'action':'diff',...diffIndustryPack(b['name'])};break;}case'reset':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27reset\x27');assertTemplateWriteAuthorized('reset',[b['path']],b['authorize']);const Z=resetIndustryPath(b['path']);c={'action':'reset','ok':Z['ok'],'layout':Z['layout'],'target':Z['target'],'restored_files':Z['restored_files'],'errors':Z['errors']},rescanAffectedPack(b['path']);break;}case'delete_file':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27delete_file\x27');assertTemplateWriteAuthorized('delete_file',[b['path']],b['authorize']);const a0=resolveIndustryPath(b['path']);if(!existsSync(a0))throw new Error('file\x20not\x20found:\x20'+b['path']);rmSync(a0,{'recursive':!![],'force':!![]}),c={'action':'delete_file','path':a0,'ok':!![]},rescanAffectedPack(b['path']);break;}case'create_file':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27create_file\x27');const a1=resolveIndustryPath(b['path']);if(existsSync(a1))throw new Error('file\x20already\x20exists:\x20'+b['path']);if(b['content']!==undefined)assertBaselinesContentValid(b['path'],b['content']);mkdirSync(dirname(a1),{'recursive':!![]}),writeFileSync(a1,b['content']??'','utf-8'),c={'action':'create_file','path':a1,'ok':!![]},rescanAffectedPack(b['path']);break;}case'create_dir':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27create_dir\x27');const a2=resolveIndustryPath(b['path']);mkdirSync(a2,{'recursive':!![]}),c={'action':'create_dir','path':a2,'ok':!![]},rescanAffectedPack(b['path']);break;}case'copy':{if(!b['from'])throw new Error('\x27from\x27\x20is\x20required\x20for\x20action=\x27copy\x27');if(!b['to'])throw new Error('\x27to\x27\x20is\x20required\x20for\x20action=\x27copy\x27');const a3=resolveIndustryPath(b['from']);let a4=resolveIndustryPath(b['to']);if(!existsSync(a3))throw new Error('source\x20not\x20found:\x20'+b['from']);try{existsSync(a4)&&statSync(a4)['isDirectory']()&&(a4=join(a4,basename(a3)));}catch{}if(a4===a3)throw new Error('\x27copy\x27\x20cannot\x20copy\x20a\x20file\x20onto\x20itself');existsSync(a4)&&isTemplateTreePath(b['to'])&&assertTemplateWriteAuthorized('copy',[b['to']],b['authorize']);mkdirSync(dirname(a4),{'recursive':!![]}),cpSync(a3,a4,{'recursive':!![],'force':!![]}),c={'action':'copy','from':a3,'to':a4,'ok':!![]},rescanAffectedPack(b['to']);break;}case'move':case'rename':{if(!b['from'])throw new Error('\x27from\x27\x20is\x20required\x20for\x20action=\x27'+b['action']+'\x27');if(!b['to'])throw new Error('\x27to\x27\x20is\x20required\x20for\x20action=\x27'+b['action']+'\x27');assertTemplateWriteAuthorized(b['action'],[b['from'],b['to']],b['authorize']);const a5=resolveIndustryPath(b['from']);let a6=resolveIndustryPath(b['to']);if(!existsSync(a5))throw new Error('source\x20not\x20found:\x20'+b['from']);try{existsSync(a6)&&statSync(a6)['isDirectory']()&&(a6=join(a6,basename(a5)));}catch{}if(a6===a5)throw new Error('\x27'+b['action']+'\x27\x20cannot\x20move\x20onto\x20itself');mkdirSync(dirname(a6),{'recursive':!![]}),renameSync(a5,a6),c={'action':b['action'],'from':a5,'to':a6,'ok':!![]},rescanAffectedPack(b['from']),rescanAffectedPack(b['to']);break;}case'recommend_industry':c=await handleRecommendIndustry(b);break;case'list_modes':c=await handleListModes();break;case'derive_user_mode':c=await handleDeriveUserMode(b);break;case'evolve_user_mode':c=await handleEvolveUserMode(b);break;case'register_user_mode':c=await handleRegisterUserMode(b);break;case'unregister_user_mode':c=await handleUnregisterUserMode(b);break;case'register_custom_metric':c=await handleRegisterCustomMetric(b);break;case'unregister_custom_metric':c=await handleUnregisterCustomMetric(b);break;case'register_custom_constraint':c=await handleRegisterCustomConstraint(b);break;case'unregister_custom_constraint':c=await handleUnregisterCustomConstraint(b);break;case'list_metrics_constraints':c=await handleListMetricsConstraints(b);break;default:throw new Error('Unknown\x20industry_pack_operation\x20action:\x20'+String(b['action']));}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c}};}
|
|
1
|
+
import{readdirSync,readFileSync,writeFileSync,existsSync,mkdirSync,statSync,cpSync,renameSync,rmSync}from'node:fs';import{join,relative,resolve,sep,dirname,basename}from'node:path';import{strictParse}from'../../schema/index.js';import{IndustryPackOperationInputSchema}from'../../schema/industry-pack/index.js';import{validateJudgmentFragment}from'../../config/judgment.js';import{scaffoldIndustryPack,listRegisteredPacks,getRegisteredPack,packKind,scanDefaultIndustryPacks,seedBuiltinIndustryTemplates,seedBuiltinStrategyManuals,ensureIndustryReadme,resolveIndustryPackDir,rescanPack,resolveDisputeRules,resolveComplianceRules,resolveSupplyRules,resolveIndustryRules,resolveIndustryPlaybook,diffIndustryPack,resetIndustryPath}from'../../extensions/index.js';import{getIndustryModeRegistry}from'../../extensions/registry.js';import{getBuiltinTemplate,listBuiltinTemplates}from'../../knowledge/builtin-templates.js';import{ALL_CAPABILITIES,getCapability}from'../../extensions/capability.js';import{composeProbe}from'../../evaluation/composer.js';import{productCard,productCards}from'../../composition/product-card.js';import{paramPlane}from'../../composition/param-disclosure.js';import{matchParams}from'../../knowledge/param-schema.js';import{componentPlane,matchComponents,summarizeComponents}from'../../knowledge/component-schema.js';import{handleRecommendIndustry,handleListModes,handleDeriveUserMode,handleEvolveUserMode,handleRegisterUserMode,handleUnregisterUserMode,handleRegisterCustomMetric,handleUnregisterCustomMetric,handleRegisterCustomConstraint,handleUnregisterCustomConstraint,handleListMetricsConstraints}from'../../playbooks/service-build/mode-actions.js';import{repairBuiltinTemplates,builtinTemplateDrift,resolveTemplatesDir,parseTemplateFile,foldKnobFrontmatter,TemplateFrontmatterSchema,TemplateKnobOverlaySchema,canonicalTemplateContent,canonicalKnobContent,renderTemplateFile,renderKnobFile,matchBuiltinTemplateSlot,TEMPLATE_SENTINEL_KIND,TEMPLATE_KNOBS_SENTINEL_KIND,TEMPLATE_KNOBS_VERSION}from'../../knowledge/template-loader.js';import{stripReleaseSentinel}from'../../knowledge/release-sentinel.js';import{BUILTIN_TEMPLATES_VERSION}from'../../knowledge/builtin-templates.js';const INDUSTRY_ROOT=resolveIndustryPackDir(),resolveTemplatesDirSafe=resolveTemplatesDir;function resolveIndustryPath(a){const b=resolve(INDUSTRY_ROOT,a);if(b!==INDUSTRY_ROOT&&!b['startsWith'](INDUSTRY_ROOT+sep))throw new Error('path\x20\x27'+a+'\x27\x20escapes\x20the\x20industry\x20root');return b;}function isTemplateTreePath(a){const b=a['split'](/[\\/]+/)['filter'](c=>c['length']>0x0);return b['length']>=0x2&&b[0x1]==='templates';}function assertTemplateWriteAuthorized(a,b,c){if(c===!![])return;const d=b['find'](e=>e!==undefined&&isTemplateTreePath(e));if(!d)return;throw new Error('action=\x27'+a+'\x27\x20modifies\x20the\x20user-editable\x20template\x20file\x20\x27'+d+'\x27.\x20'+'Present\x20the\x20intended\x20change\x20to\x20the\x20user\x20first;\x20after\x20the\x20user\x20explicitly\x20confirms,\x20'+'re-call\x20with\x20authorize=true\x20(C5).');}function rescanAffectedPack(a){const b=a['split'](/[\\/]+/)['find'](c=>c['length']>0x0);if(!b)return;rescanPack(b);}const BASELINES_FILENAME='baselines.json',PACK_FILENAME='pack.json';function assertBaselinesContentValid(a,b){const c=a['split'](/[\\/]+/)['pop']()??'';if(c!==BASELINES_FILENAME&&c!==PACK_FILENAME)return;let d;try{d=JSON['parse'](b);}catch{return;}if(!d||typeof d!=='object'||Array['isArray'](d))return;const e=d,f=c===BASELINES_FILENAME?d:e['baselines'];if(f===undefined||f===null)return;const g=validateJudgmentFragment(f,a+'\x20baselines');if(g)throw new Error('write\x20rejected\x20—\x20the\x20baselines\x20fragment\x20in\x20\x27'+a+'\x27\x20is\x20not\x20a\x20valid\x20judgment\x20fragment:\x20'+g);}function assertTemplateContentValid(a,b){if(!isTemplateTreePath(a)||!a['endsWith']('.md'))return;let c;try{({frontmatter:c}=parseTemplateFile(b));}catch(f){throw new Error('write\x20rejected\x20—\x20\x27'+a+'\x27\x20is\x20a\x20template\x20file\x20but\x20the\x20frontmatter\x20block\x20is\x20malformed:\x20'+f['message']);}const d=matchBuiltinTemplateSlot(resolveIndustryPath(a));if(d?.['part']==='knobs'){const g=TemplateKnobOverlaySchema['safeParse'](foldKnobFrontmatter(c));if(!g['success']){const h=g['error']['issues']['map'](j=>'\x20\x20'+j['path']['join']('.')+':\x20'+j['message'])['join']('\x0a');throw new Error('write\x20rejected\x20—\x20the\x20knob\x20frontmatter\x20in\x20\x27'+a+'\x27\x20violates\x20the\x20knob\x20schema\x20'+('(fee_params\x20may\x20also\x20be\x20written\x20one\x20per\x20line\x20as\x20\x27fee_params.<name>:\x20<value>\x27):\x0a'+h));}if(g['data']['id']!==d['template']['id'])throw new Error('write\x20rejected\x20—\x20knob\x20file\x20\x27'+a+'\x27\x20declares\x20id\x20\x27'+g['data']['id']+'\x27,\x20which\x20does\x20not\x20own\x20this\x20slot');return;}const e=TemplateFrontmatterSchema['safeParse'](c);if(!e['success']){const i=e['error']['issues']['map'](j=>'\x20\x20'+j['path']['join']('.')+':\x20'+j['message'])['join']('\x0a');throw new Error('write\x20rejected\x20—\x20the\x20template\x20frontmatter\x20in\x20\x27'+a+'\x27\x20violates\x20the\x20schema\x20(the\x20editor\x20whitelist\x20IS\x20the\x20zod\x20schema):\x0a'+i);}}function listRecursive(a,b,c,d=0x0){if(d>0x8)return;let f;try{f=readdirSync(a,{'withFileTypes':!![]});}catch{return;}for(const g of f){if(g['name']['startsWith']('.'))continue;const h=join(a,g['name']),i=relative(b,h)['split'](sep)['join']('/');let j=0x0,k=0x0;try{const l=statSync(h);k=l['size'],j=l['mtimeMs'];}catch{}g['isDirectory']()?(c['push']({'path':i,'is_dir':!![],'size':0x0,'mtime':j}),listRecursive(h,b,c,d+0x1)):c['push']({'path':i,'is_dir':![],'size':k,'mtime':j});}}export function isShellPayload(a){if(a===null||a===undefined)return!![];if(typeof a==='string')return a['length']===0x0;if(Array['isArray'](a))return a['every'](b=>isShellPayload(b));if(typeof a==='object')return Object['entries'](a)['filter'](([b])=>b!=='category')['every'](([,b])=>isShellPayload(b));return![];}export async function handleIndustryPackOperation(a){const b=strictParse(IndustryPackOperationInputSchema,a,'industry_pack_operation\x20input');mkdirSync(INDUSTRY_ROOT,{'recursive':!![]}),seedBuiltinIndustryTemplates(),seedBuiltinStrategyManuals(),ensureIndustryReadme();let c;switch(b['action']){case'scaffold':{if(!b['name'])throw new Error('\x27name\x27\x20is\x20required\x20for\x20action=\x27scaffold\x27');const d=scaffoldIndustryPack(b['name']);c={'action':'scaffold','ok':d['ok'],'dir':d['dir'],'files':d['files'],'errors':d['errors']};if(d['ok'])rescanPack(b['name']);break;}case'list':{c={'action':'list','packs':listRegisteredPacks()};break;}case'scan':{c={'action':'scan','results':scanDefaultIndustryPacks()};break;}case'repair_builtin_templates':{const e=b['include_user_edited'];if(b['authorize']!==!![]){const h=repairBuiltinTemplates({'backup':!![],'dryRun':!![],'includeUserEdited':e}),i=h['filter'](j=>j['status']==='would_update');c={'action':'repair_builtin_templates','dir':resolveTemplatesDirSafe(),'reseeded_count':0x0,'requires_authorization':!![],'results':h,'note':i['length']?'PLAN\x20ONLY\x20(no\x20writes)\x20—\x20'+i['length']+'\x20builtin\x20file(s)\x20differ\x20from\x20the\x20in-code\x20catalog\x20and\x20would\x20be\x20reseeded\x20(each\x20result\x20carries\x20a\x20field-level\x20diff;\x20previous\x20bodies\x20preserved\x20under\x20templates/.archive/).\x20Present\x20this\x20plan\x20to\x20the\x20user;\x20after\x20the\x20user\x20explicitly\x20confirms,\x20re-call\x20with\x20authorize=true\x20to\x20execute'+(e?.['length']?'\x20(keep\x20include_user_edited\x20on\x20the\x20execute\x20call)':'')+'.':'Nothing\x20to\x20repair\x20—\x20every\x20on-disk\x20builtin\x20template\x20either\x20matches\x20the\x20in-code\x20catalog\x20or\x20carries\x20user\x20edits\x20(which\x20are\x20never\x20overwritten\x20without\x20an\x20explicit\x20include_user_edited\x20authorization).'};break;}const f=repairBuiltinTemplates({'backup':!![],'includeUserEdited':e}),g=f['filter'](j=>j['status']==='updated');c={'action':'repair_builtin_templates','dir':resolveTemplatesDirSafe(),'reseeded_count':g['length'],'results':f,'note':g['length']?'Diverging\x20builtin\x20files\x20were\x20reseeded\x20from\x20the\x20in-code\x20catalog.\x20Each\x20previous\x20body\x20is\x20preserved\x20under\x20templates/.archive/.':'Nothing\x20repaired\x20—\x20every\x20on-disk\x20builtin\x20template\x20either\x20matches\x20the\x20in-code\x20catalog\x20or\x20carries\x20user\x20edits\x20(which\x20are\x20never\x20overwritten\x20without\x20an\x20explicit\x20include_user_edited\x20authorization).'};break;}case'template_drift':{const j=builtinTemplateDrift({'includeUserEdited':b['include_user_edited']}),k=j['filter'](l=>l['repairable'])['length'];c={'action':'template_drift','dir':resolveTemplatesDirSafe(),'drift_count':j['length'],'repairable_count':k,'drift':j,'note':j['length']?k>0x0?k+'\x20of\x20'+j['length']+'\x20diverging\x20builtin\x20template(s)\x20can\x20be\x20reseeded\x20without\x20losing\x20user\x20work\x20(including\x20ids\x20listed\x20in\x20include_user_edited)\x20—\x20run\x20action=\x27repair_builtin_templates\x27\x20(plan-only\x20preview\x20first,\x20then\x20authorize=true\x20after\x20the\x20user\x20confirms,\x20keeping\x20include_user_edited\x20on\x20both\x20calls).\x20The\x20rest\x20carry\x20user\x20edits\x20and\x20are\x20never\x20overwritten.':'All\x20diverging\x20builtin\x20templates\x20carry\x20user\x20edits\x20—\x20never\x20overwritten\x20automatically;\x20pass\x20include_user_edited\x20with\x20the\x20explicitly\x20authorized\x20ids\x20to\x20make\x20them\x20reseedable,\x20or\x20resolve\x20by\x20hand.':'Every\x20builtin\x20template\x20on\x20disk\x20matches\x20the\x20in-code\x20catalog.'};break;}case'resolve':{c={'action':'resolve','dir':INDUSTRY_ROOT};break;}case'list_files':{const l=[];listRecursive(INDUSTRY_ROOT,INDUSTRY_ROOT,l),c={'action':'list_files','dir':INDUSTRY_ROOT,'files':l};break;}case'read_file':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27read_file\x27');const m=resolveIndustryPath(b['path']);if(!existsSync(m))throw new Error('file\x20not\x20found:\x20'+b['path']);c={'action':'read_file','path':m,'content':readFileSync(m,'utf-8')};break;}case'write_file':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27write_file\x27');if(b['content']===undefined)throw new Error('\x27content\x27\x20is\x20required\x20for\x20action=\x27write_file\x27');assertTemplateWriteAuthorized('write_file',[b['path']],b['authorize']);const n=resolveIndustryPath(b['path']);assertBaselinesContentValid(b['path'],b['content']),assertTemplateContentValid(b['path'],b['content']);let o=b['content'],p=![],q;const u=matchBuiltinTemplateSlot(n);if(u){if(u['part']==='machine'){const v=stripReleaseSentinel(o,TEMPLATE_SENTINEL_KIND)['content'];v===canonicalTemplateContent(u['template'])&&(o=renderTemplateFile(u['template']),p=!![],q='content\x20equals\x20the\x20canonical\x20machine\x20release\x20of\x20builtin\x20template\x20\x27'+u['template']['id']+'\x27\x20—\x20written\x20with\x20the\x20current\x20release\x20stamp\x20(v'+BUILTIN_TEMPLATES_VERSION+')\x20so\x20the\x20sentinel\x20hash\x20binds\x20again');}else{const w=stripReleaseSentinel(o,TEMPLATE_KNOBS_SENTINEL_KIND)['content'];w===canonicalKnobContent(u['template'])&&(o=renderKnobFile(u['template']),p=!![],q='content\x20equals\x20the\x20canonical\x20knob\x20release\x20of\x20builtin\x20template\x20\x27'+u['template']['id']+'\x27\x20—\x20written\x20with\x20the\x20current\x20release\x20stamp\x20(v'+TEMPLATE_KNOBS_VERSION+')\x20so\x20the\x20sentinel\x20hash\x20binds\x20again');}}mkdirSync(dirname(n),{'recursive':!![]}),writeFileSync(n,o,'utf-8'),c={'action':'write_file','path':n,'ok':!![],...p?{'restamped':!![],'note':q}:{}},rescanAffectedPack(b['path']);break;}case'get':{if(!b['name']&&b['layer']!=='params'&&b['layer']!=='components')throw new Error('\x27name\x27\x20is\x20required\x20for\x20action=\x27get\x27');const x=b['name']??'all',y=getRegisteredPack(x),z=y?.['layers']??[],A=()=>y?{'kind':packKind(z),'layers':z}:{},B=()=>{const I=getIndustryModeRegistry()['getMode'](x);return I?{'name':I['name'],'display_name':I['display_name'],'key_risk':I['key_risk'],'needs':I['needs']['map'](J=>J['description']),...I['analyze']?.['key_questions']?.['length']?{'analyze_questions':I['analyze']['key_questions']['slice'](0x0,0x2)}:{}}:undefined;};if(b['layer']==='params'){const I=M=>({'total':M['length'],'editable':M['filter'](N=>N['editable'])['length'],'live':M['filter'](N=>N['status']==='live')['length'],'inert':M['filter'](N=>N['status']==='inert')['length'],'not_flippable':M['filter'](N=>N['status']==='not-flippable')['length'],'hidden':M['filter'](N=>N['disclosure']==='hidden')['length'],'undescribed':M['filter'](N=>N['meaning']['startsWith']('Not\x20yet\x20described'))['length']}),J=b['query']?.['trim']();if(b['template']){const M=getBuiltinTemplate(b['template']);if(!M)throw new Error('template\x20\x27'+b['template']+'\x27\x20is\x20not\x20in\x20the\x20builtin\x20catalog\x20'+('(available:\x20'+listBuiltinTemplates()['map'](P=>P['id'])['join'](',\x20')+')'));if(b['name']&&M['industry']!==b['name'])throw new Error('template\x20\x27'+M['id']+'\x27\x20belongs\x20to\x20industry\x20\x27'+M['industry']+'\x27,\x20not\x20\x27'+b['name']+'\x27\x20—\x20'+'set\x20\x27name\x27\x20to\x20the\x20template\x27s\x20industry\x20(or\x20omit\x20it)');const N=paramPlane(M),O=J?matchParams(J,N,0x8):undefined;c={'action':'get','category':M['industry'],'layer':'params','template':M['id'],'param_summary':I(N),'params':N,...O?{'param_matches':O['map'](P=>({...P['row'],'score':P['score'],'reasons':P['reasons']})),'note':O['length']===0x0?'No\x20declared\x20parameter\x20of\x20\x27'+M['id']+'\x27\x20matches\x20\x27'+J+'\x27\x20—\x20that\x20phrase\x20names\x20no\x20setting\x20here\x20(nothing\x20was\x20guessed).':undefined}:{},'query':J};break;}if(!J)throw new Error('\x27query\x27\x20is\x20required\x20for\x20layer=\x27params\x27\x20without\x20a\x20template\x20id\x20—\x20name\x20the\x20business\x20facet\x20'+'(e.g.\x20\x27settlement\x20window\x27,\x20\x27take\x20rate\x27,\x20\x27cancel\x20fee\x27)\x20to\x20search\x20every\x20template');const K=b['name']?listBuiltinTemplates()['filter'](P=>P['industry']===b['name']):listBuiltinTemplates();if(K['length']===0x0)throw new Error('industry\x20\x27'+b['name']+'\x27\x20has\x20no\x20builtin\x20templates');const L=K['flatMap'](P=>matchParams(J,paramPlane(P),0x3)['map'](Q=>({'template':P['id'],'key':Q['row']['key'],'tier':Q['row']['tier'],'tier_name':Q['row']['tier_name'],'meaning':Q['row']['meaning'],'default':Q['row']['default'],'unit':Q['row']['unit'],'unit_hint':Q['row']['unit_hint'],'disclosure':Q['row']['disclosure'],'status':Q['row']['status'],'editable':Q['row']['editable'],'score':Q['score'],'reasons':Q['reasons']})))['sort']((P,Q)=>Q['score']-P['score']||P['template']['localeCompare'](Q['template']))['slice'](0x0,0x14);c={'action':'get','category':b['name']??'all','layer':'params','param_matches':L,'query':J,'note':L['length']===0x0?'No\x20template\x20parameter\x20matches\x20\x27'+J+'\x27\x20—\x20that\x20facet\x20is\x20not\x20a\x20setting\x20anywhere\x20in\x20the\x20catalog\x20(nothing\x20was\x20guessed).':undefined};break;}if(b['layer']==='components'){const P=b['query']?.['trim']();if(b['template']){const S=getBuiltinTemplate(b['template']);if(!S)throw new Error('template\x20\x27'+b['template']+'\x27\x20is\x20not\x20in\x20the\x20builtin\x20catalog\x20'+('(available:\x20'+listBuiltinTemplates()['map'](V=>V['id'])['join'](',\x20')+')'));if(b['name']&&S['industry']!==b['name'])throw new Error('template\x20\x27'+S['id']+'\x27\x20belongs\x20to\x20industry\x20\x27'+S['industry']+'\x27,\x20not\x20\x27'+b['name']+'\x27\x20—\x20'+'set\x20\x27name\x27\x20to\x20the\x20template\x27s\x20industry\x20(or\x20omit\x20it)');const T=componentPlane(S),U=P?matchComponents(P,T,0x8):undefined;c={'action':'get','category':S['industry'],'layer':'components','template':S['id'],'component_summary':summarizeComponents(T),'components':T,...U?{'component_matches':U,'note':U['length']===0x0?'No\x20component\x20of\x20\x27'+S['id']+'\x27\x20matches\x20\x27'+P+'\x27\x20—\x20that\x20phrase\x20names\x20no\x20component\x20here\x20(nothing\x20was\x20guessed).':undefined}:{},'query':P};break;}if(!P)throw new Error('\x27query\x27\x20is\x20required\x20for\x20layer=\x27components\x27\x20without\x20a\x20template\x20id\x20—\x20name\x20the\x20component\x20'+'(e.g.\x20\x27allocator\x20split\x27,\x20\x27repository\x20policy\x27,\x20\x27machine\x27,\x20\x27arbitration\x20venue\x27)\x20to\x20search\x20every\x20template');const Q=b['name']?listBuiltinTemplates()['filter'](V=>V['industry']===b['name']):listBuiltinTemplates();if(Q['length']===0x0)throw new Error('industry\x20\x27'+b['name']+'\x27\x20has\x20no\x20builtin\x20templates');const R=Q['flatMap'](V=>matchComponents(P,componentPlane(V),0x3)['map'](W=>({'template':V['id'],'id':W['id'],'family':W['family'],'what':W['what'],'how':W['how'],'effect':W['effect'],'related':W['related'],'configurable':W['configurable'],'why_not':W['why_not']})))['slice'](0x0,0x14);c={'action':'get','category':b['name']??'all','layer':'components','component_matches':R,'query':P,'note':R['length']===0x0?'No\x20template\x20component\x20matches\x20\x27'+P+'\x27\x20—\x20that\x20phrase\x20names\x20no\x20component\x20in\x20the\x20catalog\x20(nothing\x20was\x20guessed).':undefined};break;}if(b['layer']==='template'){if(b['template']){const V=getBuiltinTemplate(b['template']);if(!V)throw new Error('template\x20\x27'+b['template']+'\x27\x20is\x20not\x20in\x20the\x20builtin\x20catalog\x20'+('(available:\x20'+listBuiltinTemplates()['map'](W=>W['id'])['join'](',\x20')+')'));if(V['industry']!==x)throw new Error('template\x20\x27'+V['id']+'\x27\x20belongs\x20to\x20industry\x20\x27'+V['industry']+'\x27,\x20not\x20\x27'+x+'\x27\x20—\x20'+'set\x20\x27name\x27\x20to\x20the\x20template\x27s\x20industry');c={'action':'get','category':x,'layer':'template','template':JSON['parse'](JSON['stringify'](V))};}else{const W=listBuiltinTemplates()['filter'](X=>X['industry']===x)['map'](X=>({'id':X['id'],'variant':X['variant'],'product_ref':X['product_ref'],'key_risk':X['key_risk']}));if(!W['length'])throw new Error('industry\x20\x27'+x+'\x27\x20has\x20no\x20builtin\x20templates\x20(ids\x20use\x20\x27<industry>/<variant>\x27)');c={'action':'get','category':x,'layer':'template','templates':W,'note':'Re-call\x20with\x20layer=\x27template\x27\x20+\x20template=\x27<id>\x27\x20for\x20the\x20full\x20projection\x20'+'(machine_shape/guards/allocator\x20rows/fee_params/build_notes).'};}break;}if(b['layer']){const X=b['layer'];if(X==='match')throw new Error('layer\x20\x27match\x27\x20is\x20consumed\x20internally\x20by\x20the\x20recommend\x20matching\x20flow\x20—\x20not\x20exposed\x20via\x20get');if(!z['includes'](X))throw new Error('pack\x20\x27'+x+'\x27\x20does\x20not\x20register\x20layer\x20\x27'+X+'\x27'+(y?'\x20(kind='+packKind(z)+',\x20layers=['+z['join'](',\x20')+'])':'\x20(the\x20pack\x20is\x20not\x20registered)')+(X!=='mode'?';\x20layer=\x27template\x27\x20reads\x20the\x20builtin\x20catalog\x20instead\x20if\x20that\x20is\x20what\x20you\x20need':''));const Y=X==='mode'?B():X==='dispute'?resolveDisputeRules(x):X==='compliance'?resolveComplianceRules(x):X==='supply'?resolveSupplyRules(x):X==='rules'?resolveIndustryRules(x):resolveIndustryPlaybook(x);if(Y===undefined)throw new Error('layer\x20\x27'+X+'\x27\x20is\x20registered\x20for\x20pack\x20\x27'+x+'\x27\x20but\x20resolved\x20to\x20no\x20data');c={'action':'get','category':x,'layer':X,[X]:Y,...A()};break;}const C=B(),D=[{'name':'dispute','payload':resolveDisputeRules(x)},{'name':'compliance','payload':resolveComplianceRules(x)},{'name':'supply','payload':resolveSupplyRules(x)},{'name':'rules','payload':resolveIndustryRules(x)},{'name':'playbook','payload':resolveIndustryPlaybook(x)}],E=D['filter'](Z=>Z['payload']!==undefined&&isShellPayload(Z['payload']))['map'](Z=>Z['name']),F=D['filter'](Z=>Z['payload']!==undefined&&!isShellPayload(Z['payload'])),G=['dispute','compliance','supply','rules','playbook']['filter'](Z=>!z['includes'](Z)),H=z['filter'](Z=>!E['includes'](Z));c={'action':'get','category':x,...y?{'kind':packKind(H),'layers':H,...H['length']!==z['length']?{'registered_layers':z}:{}}:{},...C?{'mode':C}:{},...Object['fromEntries'](F['map'](Z=>[Z['name'],Z['payload']])),...E['length']?{'empty_layers':E}:{},...G['length']?{'missing_layers':G}:{},...G['length']||E['length']?{'note':[...G['length']?['pack\x20\x27'+x+'\x27\x20('+(y?packKind(H):'unregistered')+')\x20does\x20not\x20register\x20'+('['+G['join'](',\x20')+']\x20—\x20stub\x20packs\x20(builtin-mode\x20aliases)\x20carry\x20only\x20mode/match\x20')+'data;\x20scaffold\x20a\x20pack\x20or\x20place\x20a\x20pack.json\x20to\x20add\x20business\x20layers.']:[],...E['length']?['registered-but-empty\x20layer(s)\x20['+E['join'](',\x20')+']\x20carry\x20no\x20content\x20and\x20are\x20treated\x20'+'as\x20absent\x20(empty_layers)\x20—\x20the\x20echoed\x20kind\x20reflects\x20content-bearing\x20coverage,\x20not\x20raw\x20registration.']:[]]['join']('\x20')}:{}};break;}case'capability_list':{const Z=b['group']?.['trim'](),a0=Z?ALL_CAPABILITIES['filter'](a1=>a1['group']===Z):ALL_CAPABILITIES;if(Z&&a0['length']===0x0)throw new Error('unknown\x20capability\x20group\x20\x27'+Z+'\x27\x20'+('(valid:\x20'+[...new Set(ALL_CAPABILITIES['map'](a1=>a1['group']))]['join'](',\x20')+')'));c={'action':'capability_list','total':a0['length'],'capabilities':a0['map'](a1=>({'id':a1['id'],'name':a1['name'],'group':a1['group'],'description':a1['description'],'source':a1['source'],'requires':a1['requires'],'excludes':a1['excludes'],'provides':a1['provides'],'requires_keeper':a1['requiresKeeper']}))};break;}case'capability_get':{const a1=b['capabilities']?.[0x0]??b['template'];if(!a1)throw new Error('pass\x20the\x20capability\x20id\x20in\x20\x27capabilities[0]\x27\x20(or\x20\x27template\x27)\x20for\x20action=\x27capability_get\x27\x20—\x20'+'list\x20ids\x20via\x20action=\x27capability_list\x27\x20first');const a2=getCapability(a1);if(!a2)throw new Error('\x27'+a1+'\x27\x20is\x20not\x20a\x20registered\x20capability\x20—\x20list\x20ids\x20via\x20action=\x27capability_list\x27\x20'+('(available:\x20'+ALL_CAPABILITIES['map'](a3=>a3['id'])['join'](',\x20')+')'));c={'action':'capability_get','capability':{'id':a2['id'],'name':a2['name'],'group':a2['group'],'description':a2['description'],'source':a2['source'],'object_types':a2['objectTypes'],'intent':a2['intent'],'binds':a2['binds'],'requires':a2['requires'],'excludes':a2['excludes'],'provides':a2['provides'],'params':a2['params'],'risks':a2['risks'],'disclosures':a2['disclosures'],'cost':a2['cost'],'required_constraints':a2['requiredConstraints'],'evaluation_impact':a2['evaluationImpact'],'industry_fit':a2['industryFit'],'user_protections':a2['userProtections'],'merchant_obligations':a2['merchantObligations'],'requires_keeper':a2['requiresKeeper'],'keeper_hint':a2['keeperHint']}};break;}case'compose_probe':{const a3=b['capabilities']??[];if(a3['length']===0x0)throw new Error('\x27capabilities\x27\x20is\x20required\x20for\x20action=\x27compose_probe\x27\x20—\x20the\x20selection\x20to\x20probe\x20'+'(list\x20ids\x20via\x20action=\x27capability_list\x27)');c={'action':'compose_probe',...composeProbe(a3,b['template']?{'baseTemplate':b['template']}:undefined)};break;}case'product_cards':{const a4=b['name']?.['trim'](),a5=productCards(a4);c={'action':'product_cards','industry':a4??'all','total':a5['length'],'cards':a5};break;}case'product_card':{const a6=b['template']??b['capabilities']?.[0x0];if(!a6)throw new Error('pass\x20the\x20template\x20id\x20in\x20\x27template\x27\x20for\x20action=\x27product_card\x27\x20—\x20'+'list\x20ids\x20via\x20action=\x27product_cards\x27\x20(or\x20benchmark_migration_operation\x20template_list)');c={'action':'product_card',...productCard(a6)};break;}case'diff':{if(!b['name'])throw new Error('\x27name\x27\x20is\x20required\x20for\x20action=\x27diff\x27');c={'action':'diff',...diffIndustryPack(b['name'])};break;}case'reset':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27reset\x27');assertTemplateWriteAuthorized('reset',[b['path']],b['authorize']);const a7=resetIndustryPath(b['path']);c={'action':'reset','ok':a7['ok'],'layout':a7['layout'],'target':a7['target'],'restored_files':a7['restored_files'],'errors':a7['errors']},rescanAffectedPack(b['path']);break;}case'delete_file':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27delete_file\x27');assertTemplateWriteAuthorized('delete_file',[b['path']],b['authorize']);const a8=resolveIndustryPath(b['path']);if(!existsSync(a8))throw new Error('file\x20not\x20found:\x20'+b['path']);rmSync(a8,{'recursive':!![],'force':!![]}),c={'action':'delete_file','path':a8,'ok':!![]},rescanAffectedPack(b['path']);break;}case'create_file':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27create_file\x27');const a9=resolveIndustryPath(b['path']);if(existsSync(a9))throw new Error('file\x20already\x20exists:\x20'+b['path']);if(b['content']!==undefined)assertBaselinesContentValid(b['path'],b['content']);mkdirSync(dirname(a9),{'recursive':!![]}),writeFileSync(a9,b['content']??'','utf-8'),c={'action':'create_file','path':a9,'ok':!![]},rescanAffectedPack(b['path']);break;}case'create_dir':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27create_dir\x27');const aa=resolveIndustryPath(b['path']);mkdirSync(aa,{'recursive':!![]}),c={'action':'create_dir','path':aa,'ok':!![]},rescanAffectedPack(b['path']);break;}case'copy':{if(!b['from'])throw new Error('\x27from\x27\x20is\x20required\x20for\x20action=\x27copy\x27');if(!b['to'])throw new Error('\x27to\x27\x20is\x20required\x20for\x20action=\x27copy\x27');const ab=resolveIndustryPath(b['from']);let ac=resolveIndustryPath(b['to']);if(!existsSync(ab))throw new Error('source\x20not\x20found:\x20'+b['from']);try{existsSync(ac)&&statSync(ac)['isDirectory']()&&(ac=join(ac,basename(ab)));}catch{}if(ac===ab)throw new Error('\x27copy\x27\x20cannot\x20copy\x20a\x20file\x20onto\x20itself');existsSync(ac)&&isTemplateTreePath(b['to'])&&assertTemplateWriteAuthorized('copy',[b['to']],b['authorize']);mkdirSync(dirname(ac),{'recursive':!![]}),cpSync(ab,ac,{'recursive':!![],'force':!![]}),c={'action':'copy','from':ab,'to':ac,'ok':!![]},rescanAffectedPack(b['to']);break;}case'move':case'rename':{if(!b['from'])throw new Error('\x27from\x27\x20is\x20required\x20for\x20action=\x27'+b['action']+'\x27');if(!b['to'])throw new Error('\x27to\x27\x20is\x20required\x20for\x20action=\x27'+b['action']+'\x27');assertTemplateWriteAuthorized(b['action'],[b['from'],b['to']],b['authorize']);const ad=resolveIndustryPath(b['from']);let ae=resolveIndustryPath(b['to']);if(!existsSync(ad))throw new Error('source\x20not\x20found:\x20'+b['from']);try{existsSync(ae)&&statSync(ae)['isDirectory']()&&(ae=join(ae,basename(ad)));}catch{}if(ae===ad)throw new Error('\x27'+b['action']+'\x27\x20cannot\x20move\x20onto\x20itself');mkdirSync(dirname(ae),{'recursive':!![]}),renameSync(ad,ae),c={'action':b['action'],'from':ad,'to':ae,'ok':!![]},rescanAffectedPack(b['from']),rescanAffectedPack(b['to']);break;}case'recommend_industry':c=await handleRecommendIndustry(b);break;case'list_modes':c=await handleListModes();break;case'derive_user_mode':c=await handleDeriveUserMode(b);break;case'evolve_user_mode':c=await handleEvolveUserMode(b);break;case'register_user_mode':c=await handleRegisterUserMode(b);break;case'unregister_user_mode':c=await handleUnregisterUserMode(b);break;case'register_custom_metric':c=await handleRegisterCustomMetric(b);break;case'unregister_custom_metric':c=await handleUnregisterCustomMetric(b);break;case'register_custom_constraint':c=await handleRegisterCustomConstraint(b);break;case'unregister_custom_constraint':c=await handleUnregisterCustomConstraint(b);break;case'list_metrics_constraints':c=await handleListMetricsConstraints(b);break;default:throw new Error('Unknown\x20industry_pack_operation\x20action:\x20'+String(b['action']));}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c}};}
|
|
@@ -14,6 +14,7 @@ export declare function warnMerchantCompensationFundLow(data: any, network: stri
|
|
|
14
14
|
} | undefined>;
|
|
15
15
|
export declare function deriveTotalPayIfOmitted(data: any, network: unknown): Promise<string | undefined>;
|
|
16
16
|
export declare function warnOrderNewFundCoverage(data: any, network: unknown): Promise<string | null>;
|
|
17
|
+
export declare function warnBuyCustomerRequiredSelfAttested(data: any, network: unknown): Promise<string | null>;
|
|
17
18
|
export declare function warnBuyGuardTimeCutoff(data: any, network: unknown): Promise<string | null>;
|
|
18
19
|
export declare function gateServiceBuyGuardMount(data: any, network: unknown): Promise<ToolDispatchResult | null>;
|
|
19
20
|
export declare function parseTotalPayRaw(buy: any): bigint | undefined;
|
|
@@ -36,6 +37,23 @@ export declare function arbClaimEscrowEmptyDualPayout(inputs: {
|
|
|
36
37
|
poolValue?: number;
|
|
37
38
|
acknowledged: boolean;
|
|
38
39
|
}): "refuse" | "acknowledged" | null;
|
|
40
|
+
export declare function awardPoolCapacityPosture(inputs: {
|
|
41
|
+
indemnity: number;
|
|
42
|
+
pool?: number;
|
|
43
|
+
orderAmount?: number;
|
|
44
|
+
}): "zero_award" | "over_ceiling" | "pool_empty" | "pool_underfunded" | "covered" | "pool_unknown";
|
|
45
|
+
export declare function awardPoolCapacityReceipt(posture: ReturnType<typeof awardPoolCapacityPosture>, inputs: {
|
|
46
|
+
indemnity: number;
|
|
47
|
+
pool?: number;
|
|
48
|
+
orderAmount?: number;
|
|
49
|
+
}): string;
|
|
50
|
+
export declare function claimPoolInsufficient(inputs: {
|
|
51
|
+
indemnity?: number;
|
|
52
|
+
pool?: number;
|
|
53
|
+
}): boolean;
|
|
54
|
+
export declare function disputeFeeReceipt(inputs: {
|
|
55
|
+
venueFee?: number;
|
|
56
|
+
}): string | undefined;
|
|
39
57
|
export declare function gateOrderNewAmountLegCoverage(data: any, network: unknown): Promise<ToolDispatchResult | null>;
|
|
40
58
|
interface SaleItemOpPreparation {
|
|
41
59
|
op: string;
|
|
@@ -57,6 +75,8 @@ export declare function emitSaleItemOpReadback(prep: SaleItemOpPreparation, data
|
|
|
57
75
|
export declare function prepareSalesAddDuplicateGate(data: any, network: unknown, env?: {
|
|
58
76
|
confirmed?: boolean;
|
|
59
77
|
}): Promise<ToolDispatchResult | null>;
|
|
78
|
+
export declare function prepareSaleWipSetOp(data: any, network: unknown): Promise<ToolDispatchResult | null>;
|
|
79
|
+
export declare function gateBuyWipPinDoctrine(data: any, network: unknown, constraintWarnings: string[]): Promise<ToolDispatchResult | null>;
|
|
60
80
|
export declare function gateServicePublishPreflight(data: any): ToolDispatchResult | null;
|
|
61
81
|
export declare function invalidateResolvedNameCache(): void;
|
|
62
82
|
export declare function isPassportVerifyFailure(msg: string, hasGuardContext: boolean): boolean;
|