@wowok/agent-mcp 3.1.0 → 3.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/runtime.js +1 -1
- package/dist/customer/index.d.ts +3 -9
- package/dist/customer/index.js +1 -1
- package/dist/customer/industry-risks.d.ts +3 -17
- package/dist/customer/industry-risks.js +1 -1
- package/dist/customer/types.d.ts +1 -165
- package/dist/customer/types.js +1 -1
- package/dist/customer/user-preferences.d.ts +0 -49
- package/dist/customer/user-preferences.js +1 -1
- package/dist/evaluation/arbitration-game.js +1 -1
- package/dist/evaluation/architecture.spec.d.ts +1 -0
- package/dist/evaluation/architecture.spec.js +1 -0
- package/dist/evaluation/builtins/graph-service.d.ts +16 -0
- package/dist/evaluation/builtins/graph-service.js +1 -0
- package/dist/evaluation/builtins/graph-service.spec.d.ts +1 -0
- package/dist/evaluation/builtins/graph-service.spec.js +1 -0
- package/dist/evaluation/builtins/index.d.ts +1 -1
- package/dist/evaluation/builtins/index.js +1 -1
- package/dist/evaluation/builtins/purity.spec.d.ts +1 -0
- package/dist/evaluation/builtins/purity.spec.js +1 -0
- package/dist/evaluation/engine.js +1 -1
- package/dist/evaluation/facets/catalog.d.ts +19 -0
- package/dist/evaluation/facets/catalog.js +1 -0
- package/dist/evaluation/guard-scan.d.ts +10 -0
- package/dist/evaluation/guard-scan.js +1 -0
- package/dist/evaluation/location-match.js +1 -1
- package/dist/evaluation/standards.d.ts +31 -0
- package/dist/evaluation/standards.js +1 -0
- package/dist/evaluation/standards.spec.d.ts +1 -0
- package/dist/evaluation/standards.spec.js +1 -0
- package/dist/evaluation/types.d.ts +9 -0
- package/dist/experience/realtime-feedback.js +1 -1
- package/dist/extensions/index.d.ts +1 -1
- package/dist/extensions/index.js +1 -1
- package/dist/extensions/industry-layers.d.ts +6 -5
- package/dist/extensions/industry-layers.js +1 -1
- package/dist/extensions/industry-pack.js +1 -1
- package/dist/goal/GoalClassifier.js +1 -1
- package/dist/graph/onchain/analyze.d.ts +16 -3
- package/dist/graph/onchain/analyze.js +1 -1
- package/dist/graph/onchain/analyze.spec.js +1 -1
- package/dist/graph/onchain/dataplane.d.ts +1 -1
- package/dist/graph/onchain/dataplane.js +1 -1
- package/dist/graph/onchain/edge-batch.spec.d.ts +1 -0
- package/dist/graph/onchain/edge-batch.spec.js +1 -0
- package/dist/graph/onchain/edge-schema.d.ts +11 -3
- package/dist/graph/onchain/edge-schema.js +1 -1
- package/dist/graph/onchain/entity-profile.spec.d.ts +1 -0
- package/dist/graph/onchain/entity-profile.spec.js +1 -0
- package/dist/graph/onchain/event-history.spec.d.ts +1 -0
- package/dist/graph/onchain/event-history.spec.js +1 -0
- package/dist/graph/onchain/expand.js +1 -1
- package/dist/graph/onchain/extract-deep.spec.d.ts +1 -0
- package/dist/graph/onchain/extract-deep.spec.js +1 -0
- package/dist/graph/onchain/extract.d.ts +11 -3
- package/dist/graph/onchain/extract.js +1 -1
- package/dist/graph/onchain/facet-projection.d.ts +99 -0
- package/dist/graph/onchain/facet-projection.js +1 -0
- package/dist/graph/onchain/facet-projection.spec.d.ts +1 -0
- package/dist/graph/onchain/facet-projection.spec.js +1 -0
- package/dist/graph/onchain/facts.d.ts +103 -0
- package/dist/graph/onchain/facts.js +1 -0
- package/dist/graph/onchain/facts.spec.d.ts +1 -0
- package/dist/graph/onchain/facts.spec.js +1 -0
- package/dist/graph/onchain/field-manifest.d.ts +29 -0
- package/dist/graph/onchain/field-manifest.js +1 -0
- package/dist/graph/onchain/field-manifest.spec.d.ts +1 -0
- package/dist/graph/onchain/field-manifest.spec.js +1 -0
- package/dist/graph/onchain/fixtures.d.ts +80 -0
- package/dist/graph/onchain/fixtures.js +1 -0
- package/dist/graph/onchain/fixtures.spec.d.ts +1 -0
- package/dist/graph/onchain/fixtures.spec.js +1 -0
- package/dist/graph/onchain/index.d.ts +8 -2
- package/dist/graph/onchain/index.js +1 -1
- package/dist/graph/onchain/interest.js +1 -1
- package/dist/graph/onchain/label-lint.spec.d.ts +1 -0
- package/dist/graph/onchain/label-lint.spec.js +1 -0
- package/dist/graph/onchain/names.d.ts +23 -0
- package/dist/graph/onchain/names.js +1 -0
- package/dist/graph/onchain/names.spec.d.ts +1 -0
- package/dist/graph/onchain/names.spec.js +1 -0
- package/dist/graph/onchain/onchain.spec.js +1 -1
- package/dist/graph/onchain/proposal-graph.d.ts +11 -0
- package/dist/graph/onchain/proposal-graph.js +1 -0
- package/dist/graph/onchain/proposal-graph.spec.d.ts +1 -0
- package/dist/graph/onchain/proposal-graph.spec.js +1 -0
- package/dist/graph/onchain/sdk-batch.d.ts +5 -1
- package/dist/graph/onchain/sdk-batch.js +1 -1
- package/dist/graph/onchain/sdk-dataplane.js +1 -1
- package/dist/graph/onchain/strategy.d.ts +16 -0
- package/dist/graph/onchain/strategy.js +1 -1
- package/dist/graph/onchain/strategy.spec.js +1 -1
- package/dist/graph/onchain/table-ledger.spec.d.ts +1 -0
- package/dist/graph/onchain/table-ledger.spec.js +1 -0
- package/dist/graph/onchain/types.d.ts +51 -11
- package/dist/graph/onchain/viewport.d.ts +1 -0
- package/dist/graph/onchain/viewport.js +1 -1
- package/dist/harness/index.d.ts +1 -5
- package/dist/harness/index.js +1 -1
- package/dist/harness/verify.d.ts +6 -1
- package/dist/harness/verify.js +1 -1
- package/dist/index.js +1 -1
- package/dist/knowledge/allocation-ledger.d.ts +2 -0
- package/dist/knowledge/allocation-ledger.js +1 -1
- package/dist/knowledge/allocation-puzzle.js +1 -1
- package/dist/knowledge/allocation-risk.d.ts +2 -3
- package/dist/knowledge/allocation-risk.js +1 -1
- package/dist/knowledge/arb-risk.d.ts +0 -1
- package/dist/knowledge/arb-risk.js +1 -1
- package/dist/knowledge/arbitration-risk.d.ts +0 -2
- package/dist/knowledge/arbitration-risk.js +1 -1
- package/dist/knowledge/baselines/evaluation-baselines.json +79 -0
- package/dist/knowledge/baselines/guard-lint-baseline.spec.d.ts +1 -0
- package/dist/knowledge/baselines/guard-lint-baseline.spec.js +1 -0
- package/dist/knowledge/baselines/risk-baselines.spec.d.ts +1 -0
- package/dist/knowledge/baselines/risk-baselines.spec.js +1 -0
- package/dist/knowledge/baselines/risk-cases.d.ts +8 -0
- package/dist/knowledge/baselines/risk-cases.js +1 -0
- package/dist/knowledge/bridge-risk.d.ts +0 -1
- package/dist/knowledge/bridge-risk.js +1 -1
- package/dist/knowledge/contact-risk.d.ts +0 -1
- package/dist/knowledge/contact-risk.js +1 -1
- package/dist/knowledge/contract-invariants.d.ts +1 -0
- package/dist/knowledge/contract-invariants.js +1 -1
- package/dist/knowledge/demand-risk.d.ts +0 -1
- package/dist/knowledge/demand-risk.js +1 -1
- package/dist/knowledge/getting-started.js +1 -1
- package/dist/knowledge/guard-design-patterns.js +1 -1
- package/dist/knowledge/guard-eval.d.ts +15 -0
- package/dist/knowledge/guard-eval.js +1 -0
- package/dist/knowledge/guard-eval.spec.d.ts +1 -0
- package/dist/knowledge/guard-eval.spec.js +1 -0
- package/dist/knowledge/guard-field-cognition.d.ts +48 -0
- package/dist/knowledge/guard-field-cognition.js +1 -0
- package/dist/knowledge/guard-lint.d.ts +1 -1
- package/dist/knowledge/guard-lint.js +1 -1
- package/dist/knowledge/guard-risk.d.ts +4 -19
- package/dist/knowledge/guard-risk.js +1 -1
- package/dist/knowledge/index.d.ts +42 -43
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/industry-rule-node.d.ts +7 -0
- package/dist/knowledge/industry-rule-node.js +1 -0
- package/dist/knowledge/industry-strategy.js +1 -1
- package/dist/knowledge/jsonrpc-enum.js +1 -1
- package/dist/knowledge/machine-risk.d.ts +0 -6
- package/dist/knowledge/machine-risk.js +1 -1
- package/dist/knowledge/order-risk.d.ts +1 -9
- package/dist/knowledge/order-risk.js +1 -1
- package/dist/knowledge/payment-risk.d.ts +0 -1
- package/dist/knowledge/payment-risk.js +1 -1
- package/dist/knowledge/permission-risk.d.ts +0 -3
- package/dist/knowledge/permission-risk.js +1 -1
- package/dist/knowledge/personal-risk.d.ts +0 -1
- package/dist/knowledge/personal-risk.js +1 -1
- package/dist/knowledge/progress-risk.d.ts +0 -2
- package/dist/knowledge/progress-risk.js +1 -1
- package/dist/knowledge/proof-risk.d.ts +0 -1
- package/dist/knowledge/proof-risk.js +1 -1
- package/dist/knowledge/puzzle-projections.d.ts +11 -0
- package/dist/knowledge/puzzle-projections.js +1 -0
- package/dist/knowledge/recipient-constraint.d.ts +6 -1
- package/dist/knowledge/recipient-constraint.js +1 -1
- package/dist/knowledge/registrar-risk.d.ts +0 -1
- package/dist/knowledge/registrar-risk.js +1 -1
- package/dist/knowledge/repository-risk.d.ts +0 -1
- package/dist/knowledge/repository-risk.js +1 -1
- package/dist/knowledge/resource-risk.d.ts +0 -1
- package/dist/knowledge/resource-risk.js +1 -1
- package/dist/knowledge/reward-risk.d.ts +1 -5
- package/dist/knowledge/reward-risk.js +1 -1
- package/dist/knowledge/rule-node-analyzers.d.ts +43 -0
- package/dist/knowledge/rule-node-analyzers.js +1 -0
- package/dist/knowledge/rule-node-analyzers.spec.d.ts +1 -0
- package/dist/knowledge/rule-node-analyzers.spec.js +1 -0
- package/dist/knowledge/rule-outcome.d.ts +5 -0
- package/dist/knowledge/rule-outcome.js +1 -0
- package/dist/knowledge/safety-rules.js +1 -1
- package/dist/knowledge/scenario-topology.js +1 -1
- package/dist/knowledge/service-allocator-audit-node.d.ts +3 -0
- package/dist/knowledge/service-allocator-audit-node.js +1 -0
- package/dist/knowledge/service-risk-node.js +1 -1
- package/dist/knowledge/service-risk.d.ts +0 -3
- package/dist/knowledge/service-risk.js +1 -1
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/knowledge/treasury-risk.d.ts +2 -3
- package/dist/knowledge/treasury-risk.js +1 -1
- package/dist/knowledge/util-risk.d.ts +0 -1
- package/dist/knowledge/util-risk.js +1 -1
- package/dist/knowledge/workflow-guidance.d.ts +2 -0
- package/dist/knowledge/workflow-guidance.js +1 -1
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/persona/bridge.js +1 -1
- package/dist/persona/facet-profile.d.ts +33 -0
- package/dist/persona/facet-profile.js +1 -0
- package/dist/persona/model.d.ts +2 -1
- package/dist/persona/model.js +1 -1
- package/dist/persona/strategy-intent.js +1 -1
- package/dist/persona/topology-focus.d.ts +2 -2
- package/dist/persona/topology-focus.js +1 -1
- package/dist/persona/types.d.ts +12 -0
- package/dist/playbooks/service-build/business-puzzle.js +1 -1
- package/dist/playbooks/service-build/facet-money.d.ts +22 -0
- package/dist/playbooks/service-build/facet-money.js +1 -0
- package/dist/playbooks/service-build/facet-money.spec.d.ts +1 -0
- package/dist/playbooks/service-build/facet-money.spec.js +1 -0
- package/dist/playbooks/service-build/intent-analyzer.js +1 -1
- package/dist/playbooks/service-build/machine-panorama.d.ts +3 -0
- package/dist/playbooks/service-build/machine-panorama.js +1 -1
- package/dist/playbooks/service-build/object-panorama.d.ts +27 -27
- package/dist/playbooks/service-build/object-panorama.js +1 -1
- package/dist/playbooks/service-build/pipeline-actions.d.ts +2 -2
- package/dist/playbooks/service-build/pipeline-actions.js +1 -1
- package/dist/playbooks/service-build/risk-aggregator.d.ts +2 -1
- package/dist/playbooks/service-build/risk-aggregator.js +1 -1
- package/dist/playbooks/service-build/service-panorama.d.ts +4 -9
- package/dist/playbooks/service-build/service-panorama.js +1 -1
- package/dist/playbooks/service-build/topology-evaluation.spec.d.ts +1 -0
- package/dist/playbooks/service-build/topology-evaluation.spec.js +1 -0
- package/dist/playbooks/service-build/topology-query.d.ts +13 -2
- package/dist/playbooks/service-build/topology-query.js +1 -1
- package/dist/review/arb.d.ts +0 -2
- package/dist/review/arb.js +1 -1
- package/dist/review/order.d.ts +0 -1
- package/dist/review/order.js +1 -1
- package/dist/role/profiles.js +1 -1
- package/dist/rules.d.ts +1 -2
- package/dist/rules.js +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/safety/preview.js +1 -1
- package/dist/schema/call/base.d.ts +3372 -668
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/handler.js +1 -1
- package/dist/schema/call/receipt.d.ts +28 -0
- package/dist/schema/call/receipt.js +1 -0
- package/dist/schema/call/semantic-customer-advice.spec.d.ts +1 -0
- package/dist/schema/call/semantic-customer-advice.spec.js +1 -0
- package/dist/schema/call/semantic.d.ts +5 -2
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/treasury.js +1 -1
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/evaluation/index.d.ts +289 -211
- package/dist/schema/evaluation/index.js +1 -1
- package/dist/schema/goal/index.d.ts +1 -1
- package/dist/schema/goal/planning.d.ts +2 -2
- package/dist/schema/index.d.ts +0 -1
- package/dist/schema/index.js +1 -1
- package/dist/schema/industry-pack/index.d.ts +1 -1
- package/dist/schema/keeper/index.d.ts +1 -1
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/operations.d.ts +28 -10
- package/dist/schema/operations.js +1 -1
- package/dist/schema/persona/index.d.ts +24 -24
- package/dist/schema/query/bi.d.ts +629 -14
- package/dist/schema/query/bi.js +1 -1
- package/dist/schema/query/index.d.ts +9 -9
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/workspace/index.d.ts +2 -2
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/account_operation.output.json +10 -10
- package/dist/schemas/account_operation.schema.json +3 -3
- package/dist/schemas/bridge_operation.output.json +10 -10
- package/dist/schemas/evaluation_operation.output.json +697 -169
- package/dist/schemas/evaluation_operation.schema.json +5 -434
- package/dist/schemas/index.json +1 -7
- package/dist/schemas/keeper_operation.output.json +10 -10
- package/dist/schemas/local_history_operation.output.json +10 -10
- package/dist/schemas/local_info_operation.output.json +10 -10
- package/dist/schemas/local_mark_operation.output.json +10 -10
- package/dist/schemas/messenger_operation.output.json +10 -10
- package/dist/schemas/monitor_events.output.json +10 -10
- package/dist/schemas/monitor_subscription.output.json +10 -10
- package/dist/schemas/onchain_events.output.json +11 -11
- package/dist/schemas/onchain_operations.output.json +6369 -3736
- package/dist/schemas/onchain_operations.schema.json +48 -48
- package/dist/schemas/onchain_operations_allocation.schema.json +5 -5
- package/dist/schemas/onchain_operations_arbitration.schema.json +3 -3
- package/dist/schemas/onchain_operations_contact.schema.json +2 -2
- package/dist/schemas/onchain_operations_demand.schema.json +2 -2
- package/dist/schemas/onchain_operations_machine.schema.json +2 -2
- package/dist/schemas/onchain_operations_order.schema.json +2 -2
- package/dist/schemas/onchain_operations_payment.schema.json +2 -2
- package/dist/schemas/onchain_operations_permission.schema.json +2 -2
- package/dist/schemas/onchain_operations_progress.schema.json +2 -2
- package/dist/schemas/onchain_operations_repository.schema.json +2 -2
- package/dist/schemas/onchain_operations_reward.schema.json +6 -6
- package/dist/schemas/onchain_operations_service.schema.json +8 -8
- package/dist/schemas/onchain_operations_treasury.schema.json +10 -10
- package/dist/schemas/onchain_table_data.output.json +78 -84
- package/dist/schemas/query_toolkit.output.json +1087 -254
- package/dist/schemas/query_toolkit.schema.json +65 -3
- package/dist/strategy/collectors.js +1 -1
- package/dist/strategy/metrics.js +1 -1
- package/dist/task/playbook.js +1 -1
- package/dist/tools/handlers/bridge.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/dispatch-expectations.d.ts +3 -0
- package/dist/tools/handlers/dispatch-expectations.js +1 -0
- package/dist/tools/handlers/evaluation.js +1 -1
- package/dist/tools/handlers/evaluation.spec.js +1 -1
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/registry/evaluation.d.ts +2 -0
- package/dist/tools/registry/evaluation.js +1 -0
- package/dist/tools/registry/monitor.js +1 -1
- package/dist/tools/registry/query.js +1 -1
- package/dist/tools/shared.d.ts +0 -1
- package/dist/tools/shared.js +1 -1
- package/dist/tools/wrap.js +1 -1
- package/package.json +4 -3
- package/dist/customer/customer-advice.d.ts +0 -32
- package/dist/customer/customer-advice.js +0 -1
- package/dist/customer/info-puzzle.d.ts +0 -146
- package/dist/customer/info-puzzle.js +0 -1
- package/dist/customer/order-strategy.d.ts +0 -17
- package/dist/customer/order-strategy.js +0 -1
- package/dist/customer/preorder-compare.d.ts +0 -24
- package/dist/customer/preorder-compare.js +0 -1
- package/dist/customer/reminder-system.d.ts +0 -42
- package/dist/customer/reminder-system.js +0 -1
- package/dist/customer/risk-assessment.d.ts +0 -13
- package/dist/customer/risk-assessment.js +0 -1
- package/dist/evaluation/builtins/service-risk.d.ts +0 -7
- package/dist/evaluation/builtins/service-risk.js +0 -1
- package/dist/knowledge/trust-metrics.d.ts +0 -66
- package/dist/knowledge/trust-metrics.js +0 -1
- package/dist/schema/trust/index.d.ts +0 -334
- package/dist/schema/trust/index.js +0 -1
- package/dist/schemas/trust_score.output.json +0 -847
- package/dist/schemas/trust_score.schema.json +0 -364
- package/dist/tools/handlers/trust.d.ts +0 -16
- package/dist/tools/handlers/trust.js +0 -1
- package/dist/tools/registry/trust.d.ts +0 -2
- package/dist/tools/registry/trust.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{COVERAGE_VOCABULARY}from'../../graph/onchain/facts.js';import{getEvaluationEngine}from'../engine.js';import{defaultWeights,dimensionLabel,gradeWord,severityDeduction}from'../standards.js';export const GRAPH_TRUST_EVALUATION='graph_service_trust';export const GRAPH_RISK_EVALUATION='graph_service_risk';export const GRAPH_RULE_INPUT_FACTS={'trust_arbitration':['arbitration.binding'],'trust_reviews':['reviews.votes'],'trust_fulfillment':['fulfillment.orders'],'trust_fund_safety':['fund.compensation','fund.exposure'],'trust_transparency':['transparency.profile'],'risk_workflow':['risk_workflow.findings'],'risk_fund':['risk_fund.findings'],'risk_trust':['risk_trust.findings'],'risk_behavior':['risk_behavior.findings']};const WEIGHTS=defaultWeights(),dsGraphFacts={'id':'ds_graph_facts','description':'Unpack\x20the\x20graph-projected\x20evaluation\x20facts\x20(Task\x2013\x20projection)\x20into\x20the\x20rule\x20context','evaluation_ids':[GRAPH_TRUST_EVALUATION,GRAPH_RISK_EVALUATION],'extract':a=>{const b=a['entities']['graph_facts'],c={'target':b['target'],'completeness':b['completeness']};for(const d of b['facts'])c[d['key']]=d;return c;}};function inputFact(a,b){const c=GRAPH_RULE_INPUT_FACTS[b];return c?a['facts'][c[0x0]]:undefined;}function factOf(a,b){return a['facts']['find'](c=>c['key']===b);}function trustArbitrationRule(){const a='trust_arbitration';return{'id':a,'description':'Arbitration\x20trust\x20dimension\x20(binding\x20material\x20from\x20the\x20graph\x20facts)','dimension':dimensionLabel(a),'weight':WEIGHTS['trust_arbitration'],'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=inputFact(b,a);if(!c||c['state']==='gap')return null;const d=c['value']??[];if(d['length']===0x0)return{'score':0x0,'weight':WEIGHTS['trust_arbitration'],'reason':'No\x20arbitration\x20binding\x20configured\x20(verified\x20absence)\x20—\x20'+c['evidence'],'mismatched':['arbitration_binding']};let e=0x0;const f=[],g=[];if(d['every'](h=>h['votingGuards']>0x0))e+=0x8,f['push']('arbitrator\x20roster\x20configured');else g['push']('no\x20arbitrator\x20roster');if(d['every'](h=>BigInt(h['fee']||'0')>0x0n))e+=0x6,f['push']('arbitration\x20fee\x20funded');else g['push']('arbitration\x20fee\x20unfunded');if(!d['some'](h=>h['paused']))e+=0x6,f['push']('arbitration\x20active');else g['push']('arbitration\x20paused');return{'score':Math['round'](e/0x14*0x64),'weight':WEIGHTS['trust_arbitration'],'reason':'Arbitration\x20'+e+'/20\x20—\x20'+c['evidence'],'matched':f,'mismatched':g};}};}function trustReviewsRule(){const a='trust_reviews';return{'id':a,'description':'Review\x20reputation\x20dimension\x20(registrar\x20votes\x20from\x20the\x20graph\x20facts)','dimension':dimensionLabel(a),'weight':WEIGHTS['trust_reviews'],'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=inputFact(b,a);if(!c||c['state']==='gap')return null;const d=c['value']??{'total':0x0,'like':0x0,'dislike':0x0,'favor':0x0};if(c['state']==='empty'||d['total']===0x0)return{'score':0x32,'weight':WEIGHTS['trust_reviews'],'reason':'No\x20reputation\x20signal\x20(verified\x20empty\x20window)\x20—\x20'+c['evidence']};const e=d['like']/d['total'],f=Math['min'](0x23,Math['round'](e*0x19)+Math['min'](0xa,d['favor']));return{'score':Math['round'](f/0x23*0x64),'weight':WEIGHTS['trust_reviews'],'reason':'Reviews\x20'+f+'/35\x20(like\x20rate\x20'+Math['round'](e*0x64)+'%)\x20—\x20'+c['evidence'],'matched':['vote\x20window\x20read\x20without\x20truncation'],'mismatched':d['like']<d['dislike']?['dislike\x20majority']:[]};}};}function trustFulfillmentRule(){const a='trust_fulfillment';return{'id':a,'description':'Fulfillment\x20dimension\x20(windowed\x20order\x20record\x20from\x20the\x20graph\x20facts)','dimension':dimensionLabel(a),'weight':WEIGHTS['trust_fulfillment'],'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=inputFact(b,a);if(!c||c['state']==='gap')return null;const d=c['value'];if(c['state']==='empty'||!d||d['observed']===0x0)return{'score':0x32,'weight':WEIGHTS['trust_fulfillment'],'reason':'No\x20fulfillment\x20record\x20yet\x20(verified\x20empty\x20window)\x20—\x20'+c['evidence']};const e=Math['min'](0xa,Math['floor'](d['observed']/0x5)),f=d['completed']+d['inProgress'],g=f>0x0?Math['round'](d['completed']/f*0xa):0x5,h=Math['min'](0x14,e+g);return{'score':Math['round'](h/0x14*0x64),'weight':WEIGHTS['trust_fulfillment'],'reason':'Fulfillment\x20'+h+'/20\x20(recent\x20orders:\x20'+d['observed']+')\x20—\x20'+c['evidence'],'matched':['completion\x20'+d['completed']+'/'+(f||d['observed'])+'\x20resolved'],'mismatched':d['completed']===0x0?['no\x20completed\x20order\x20in\x20window']:[]};}};}function trustFundSafetyRule(){const a='trust_fund_safety';return{'id':a,'description':'Fund\x20safety\x20dimension\x20(compensation\x20fund\x20vs\x20windowed\x20exposure\x20from\x20the\x20graph\x20facts)','dimension':dimensionLabel(a),'weight':WEIGHTS['trust_fund_safety'],'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=GRAPH_RULE_INPUT_FACTS[a],d=b['facts'][c[0x0]],e=b['facts'][c[0x1]];if(!d||!e||d['state']==='gap'||e['state']==='gap')return null;const f=BigInt(d['value']?.['fund']??'0'),g=[];let h;const i=e['value'],j=BigInt(i?.['windowedAmount']??'0');if(e['state']==='empty'||j===0x0n){h=f>0x0n?0xf:0x0;if(f===0x0n)g['push']('no\x20compensation\x20fund');}else{if(i['coverageMet'])h=0xf;else{const k=BigInt(i['neededCeiling']||'1');if(f>=j){const l=Number(f*0x3e8n/k)/0x3e8;h=0xa+Math['round']((l-0x1/0x3)/(0x2/0x3)*0x5);}else h=Math['round'](Number(f*0x3e8n/j)/0x3e8*0xa);g['push']('compensation\x20fund\x20below\x20the\x20statutory\x203x\x20exposure\x20ceiling');}}return{'score':Math['round'](Math['max'](0x0,h)/0xf*0x64),'weight':WEIGHTS['trust_fund_safety'],'reason':'Fund\x20safety\x20'+Math['max'](0x0,h)+'/15\x20—\x20'+d['evidence']+'\x20'+e['evidence'],'matched':g['length']===0x0?['exposure\x20covered']:[],'mismatched':g};}};}function trustTransparencyRule(){const a='trust_transparency';return{'id':a,'description':'Transparency\x20dimension\x20(snapshot\x20self-description\x20from\x20the\x20graph\x20facts)','dimension':dimensionLabel(a),'weight':WEIGHTS['trust_transparency'],'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=inputFact(b,a);if(!c||c['state']==='gap')return null;const d=c['value'];if(c['state']==='empty'||!d)return{'score':0x32,'weight':WEIGHTS['trust_transparency'],'reason':'No\x20transparency\x20profile\x20material\x20—\x20'+c['evidence']};let e=0x0;const f=[],g=[];if(d['published'])e+=0x4,f['push']('service\x20published');else g['push']('service\x20unpublished');if(d['description']!=='')e+=0x3,f['push']('description\x20present');else g['push']('empty\x20description');if(d['location']!=='')e+=0x3,f['push']('location\x20present');else g['push']('empty\x20location');return{'score':Math['round'](e/0xa*0x64),'weight':WEIGHTS['trust_transparency'],'reason':'Transparency\x20'+e+'/10\x20—\x20'+c['evidence'],'matched':f,'mismatched':g};}};}function riskRule(a,b){const c=dimensionLabel(a);return{'id':a,'description':c+'\x20structural\x20risk\x20dimension\x20(analyzer\x20findings\x20reused\x20by\x20reference)','dimension':c,'weight':b,'evaluation_ids':[GRAPH_RISK_EVALUATION],'evaluate':d=>{const e=inputFact(d,a);if(!e||e['state']==='gap')return null;const f=e['value']?.['findings']??[];if(e['state']==='empty')return{'score':0x32,'weight':b,'reason':'No\x20'+c+'\x20material\x20configured\x20(verified\x20absence)\x20—\x20'+e['evidence']};const g=f['reduce']((i,j)=>i+severityDeduction(j['severity']),0x0),h=Math['max'](0x0,0x64-g);return{'score':h,'weight':b,'reason':f['length']>0x0?f['length']+'\x20structural\x20finding(s):\x20'+f['map'](i=>'['+i['severity']+']\x20'+i['title'])['join'](';\x20')+'\x20—\x20'+e['evidence']:'No\x20structural\x20risk\x20fired\x20—\x20'+e['evidence'],'matched':f['length']===0x0?['no\x20structural\x20findings']:[],'mismatched':[...new Set(f['map'](i=>i['title']))],'finding_refs':f['map'](i=>({'id':i['id'],'title':i['title'],'severity':i['severity']})),'red_flag':f['some'](i=>i['severity']==='critical')};}};}export function registerGraphServiceEvaluations(a=getEvaluationEngine()){a['registerDataSource'](dsGraphFacts);const b=[trustArbitrationRule(),trustReviewsRule(),trustFulfillmentRule(),trustFundSafetyRule(),trustTransparencyRule(),riskRule('risk_workflow',WEIGHTS['risk_workflow']),riskRule('risk_fund',WEIGHTS['risk_fund']),riskRule('risk_trust',WEIGHTS['risk_trust']),riskRule('risk_behavior',WEIGHTS['risk_behavior'])];for(const c of b)a['registerRule'](c);}function collectUnverified(a){const b=new Map(a['facts']['map'](d=>[d['key'],d['state']])),c=[];for(const [d,e]of Object['entries'](GRAPH_RULE_INPUT_FACTS)){if(e['some'](f=>b['get'](f)==='gap'))c['push'](d);}return c;}function summarize(a,b,c,d){const e=['Service\x20'+b+'\x20'+a['total']+'/100\x20(grade:\x20'+gradeWord(b,a['total'])+')'],f=[...a['breakdown']]['sort']((g,h)=>g['score']-h['score'])[0x0];if(f){const g=(GRAPH_RULE_INPUT_FACTS[f['rule_id']]??[])['map'](h=>factOf(c,h)?.['evidence'])['filter'](Boolean)['join']('\x20');if(g)e['push']('weakest\x20'+dimensionLabel(f['rule_id'])+'\x20'+f['score']+'/100\x20—\x20'+g);}if(d['length']>0x0)e['push']('unverifiable\x20(excluded\x20from\x20aggregation):\x20'+d['map'](dimensionLabel)['join'](',\x20'));if(a['blocked'])e['push']('blocked:\x20'+(a['red_flags'][0x0]??'red\x20flag'));return e['join']('\x20—\x20');}export async function evaluateGraphServiceFacts(a,b){const c=getEvaluationEngine(),d={'graph_facts':a},e=await c['evaluate'](GRAPH_TRUST_EVALUATION,d,b),f=await c['evaluate'](GRAPH_RISK_EVALUATION,d,b),g=collectUnverified(a);return e['unverified']=g,f['unverified']=g,e['summary']=summarize(e,'trust',a,g),f['summary']=summarize(f,'risk',a,g),{'target':a['target'],'trust':e,'risk':f,'completeness':a['completeness'],'coverage':a['slots'],'unverified':g,'vocabulary':COVERAGE_VOCABULARY};}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe,expect,it}from'vitest';import{ENTRYPOINT}from'@wowok/wowok';import{FakeDataPlane}from'../../graph/onchain/dataplane.js';import{expandTopology}from'../../graph/onchain/expand.js';import{FULL,GAP,fullServiceState,gapServiceState,truncatedServiceState}from'../../graph/onchain/fixtures.js';import{buildViewport}from'../../graph/onchain/viewport.js';import{runAnalyzers}from'../../graph/onchain/analyze.js';import{EVALUATION_SERVICE_INTENTS,resolveExpansionStrategy,withEvaluationBundle}from'../../graph/onchain/strategy.js';import{projectEvaluationFacts as a15a}from'../../graph/onchain/facts.js';import{evaluateGraphServiceFacts,GRAPH_RULE_INPUT_FACTS,registerGraphServiceEvaluations}from'./graph-service.js';async function evalState(a,b){registerGraphServiceEvaluations();const c=withEvaluationBundle(resolveExpansionStrategy({'intents':[...EVALUATION_SERVICE_INTENTS]})),d=await expandTopology(new FakeDataPlane(a),{'network':ENTRYPOINT['Mainnet'],'seed':b,'edges':c['edges'],'budget':c['budget']}),e=buildViewport(d,b,'neutral'),f=a15a(e,b,runAnalyzers(e));return{'projected':f,'r':await evaluateGraphServiceFacts(f)};}const scoreOf=(a,b,c)=>a[b]['breakdown']['find'](d=>d['rule_id']===c);describe('graph\x20service\x20evaluation\x20—\x20fully\x20hooked\x20shop\x20(TR-14.1)',()=>{it('scores\x20all\x20nine\x20dimensions\x20from\x20material\x20facts\x20with\x20no\x20default-low\x20deductions',async()=>{const {r:a}=await evalState(fullServiceState(),FULL['svc']);expect(a['unverified'])['toEqual']([]),expect(a['completeness'])['toBe'](0x64);const c=scoreOf(a,'trust','trust_arbitration');expect(c['score'])['toBe'](0x64),expect(c['matched'])['toEqual'](expect['arrayContaining'](['arbitrator\x20roster\x20configured','arbitration\x20fee\x20funded','arbitration\x20active'])),expect(c['reason'])['toContain']('Arbitration\x2020/20'),expect(scoreOf(a,'trust','trust_reviews')['score'])['toBe'](0x28),expect(scoreOf(a,'trust','trust_fulfillment')['score'])['toBe'](0x19);const d=scoreOf(a,'trust','trust_fund_safety');expect(d['score'])['toBe'](0x0),expect(d['mismatched'])['toContain']('compensation\x20fund\x20below\x20the\x20statutory\x203x\x20exposure\x20ceiling'),expect(scoreOf(a,'trust','trust_transparency')['score'])['toBe'](0x64),expect(a['trust']['total'])['toBe'](0x31);const e=scoreOf(a,'risk','risk_fund');expect(e['score'])['toBeLessThan'](0x64),expect(e['mismatched'])['toContain']('Payout\x20exposure:\x20compensation\x20fund\x20is\x20below\x20the\x203x\x20ceiling\x20of\x20windowed\x20order\x20amounts'),expect(e['mismatched']?.['some'](h=>h['startsWith']('R2:')))['toBe'](![]),expect(e['finding_refs']?.['map'](h=>h['id']))['toContain']('R2:'+FULL['svc']['toLowerCase']());const f=scoreOf(a,'risk','risk_trust');expect(f['score'])['toBeLessThan'](0x64),expect(f['mismatched']?.['some'](h=>h['startsWith']('R1:')))['toBe'](![]),expect(f['mismatched']?.['length'])['toBeGreaterThan'](0x0),expect(f['finding_refs']?.['some'](h=>h['id']['startsWith']('R1:')))['toBe'](!![]);for(const h of[...a['trust']['breakdown'],...a['risk']['breakdown']]){for(const i of h['mismatched']??[])expect(i)['not']['toContain']('::node::');}expect(scoreOf(a,'risk','risk_workflow')['score'])['toBe'](0x64),expect(scoreOf(a,'risk','risk_behavior')['score'])['toBe'](0x64);for(const j of[...a['trust']['breakdown'],...a['risk']['breakdown']]){const k=(j['reason']??'')['toLowerCase']();expect(k)['not']['toContain']('no\x20data'),expect(k)['not']['toContain']('default\x20low');}const g=a['trust']['trace']['filter'](l=>l['kind']==='rule'&&l['detail']['startsWith']('score='));expect(g['map'](l=>l['id']))['toEqual'](expect['arrayContaining'](Object['keys'](GRAPH_RULE_INPUT_FACTS)['filter'](l=>l['startsWith']('trust_'))));}),it('keeps\x20the\x20injection\x20+\x20requirement\x20mechanisms\x20working',async()=>{const {projected:a}=await evalState(fullServiceState(),FULL['svc']),b=await evaluateGraphServiceFacts(a,{'overrides':{'rules':{'trust_arbitration':{'weight':0x28}}}});expect(b['trust']['total'])['toBe'](0x3a);const c=await evaluateGraphServiceFacts(a,{'requirements':[{'rule_id':'trust_fund_safety','condition':'require'}]});expect(c['trust']['blocked'])['toBe'](!![]),expect(c['trust']['red_flags']['length'])['toBeGreaterThan'](0x0);});}),describe('graph\x20service\x20evaluation\x20—\x20configured-empty\x20shell\x20(TR-14.1)',()=>{it('scores\x20verified\x20absence\x20as\x20a\x20configured\x20fact\x20and\x20excludes\x20only\x20the\x20gap\x20dimension',async()=>{const {r:a}=await evalState(gapServiceState(),GAP['svc']),b=scoreOf(a,'trust','trust_arbitration');expect(b['score'])['toBe'](0x0),expect(b['reason'])['toContain']('verified\x20absence'),expect(scoreOf(a,'trust','trust_reviews')['score'])['toBe'](0x32),expect(a['unverified'])['toEqual'](['risk_workflow']),expect(scoreOf(a,'risk','risk_workflow'))['toBeUndefined'](),expect(a['risk']['unverified'])['toEqual'](['risk_workflow']),expect(a['trust']['unverified'])['toEqual'](['risk_workflow']);const c=a['risk']['trace']['find'](d=>d['kind']==='rule'&&d['id']==='risk_workflow');expect(c?.['detail'])['toContain']('not\x20applicable'),expect(scoreOf(a,'trust','trust_transparency')['score'])['toBe'](0x28),expect(scoreOf(a,'trust','trust_fund_safety')['score'])['toBe'](0x0);});}),describe('graph\x20service\x20evaluation\x20—\x20truncated\x20order\x20window\x20(TR-14.1)',()=>{it('excludes\x20the\x20unverifiable\x20dimensions\x20and\x20renormalizes\x20the\x20weighted\x20total',async()=>{const {r:a}=await evalState(truncatedServiceState(),FULL['svc']);expect(a['unverified'])['toEqual'](expect['arrayContaining'](['trust_fulfillment','trust_fund_safety','risk_fund','risk_behavior'])),expect(scoreOf(a,'trust','trust_fulfillment'))['toBeUndefined'](),expect(scoreOf(a,'trust','trust_fund_safety'))['toBeUndefined'](),expect(scoreOf(a,'risk','risk_fund'))['toBeUndefined'](),expect(scoreOf(a,'risk','risk_behavior'))['toBeUndefined'](),expect(a['trust']['total'])['toBe'](0x44);for(const b of['trust_fulfillment','trust_fund_safety']){expect(a['trust']['trace']['find'](c=>c['kind']==='rule'&&c['id']===b)?.['detail'])['toContain']('not\x20applicable');}for(const c of['risk_fund','risk_behavior']){expect(a['risk']['trace']['find'](d=>d['kind']==='rule'&&d['id']===c)?.['detail'])['toContain']('not\x20applicable');}});}),describe('graph\x20service\x20evaluation\x20—\x20scoring\x20report\x20(TR-14.2)',()=>{it('renders\x20a\x20per-dimension\x20report\x20with\x20score,\x20weight,\x20state,\x20confidence\x20and\x20evidence',async()=>{const {projected:a,r:c}=await evalState(fullServiceState(),FULL['svc']),d=new Map(a['facts']['map'](g=>[g['key'],g])),e=[];for(const g of['trust','risk']){const h=c[g];e['push'](g['toUpperCase']()+'\x20'+h['total']+'/100\x20('+h['level']+')\x20—\x20'+h['summary']);for(const i of h['breakdown']){const j=GRAPH_RULE_INPUT_FACTS[i['rule_id']]??[],k=j['map'](o=>o+':state='+(d['get'](o)?.['state']??'missing')),l=j['map'](o=>d['get'](o)?.['provenance']['confidence']??'missing'),n=j['map'](o=>d['get'](o)?.['evidence']??'missing')['join']('\x20');e['push'](i['rule_id']+':\x20score='+i['score']+'\x20weight='+i['weight']+'\x20'+k['join'](',')+'\x20confidence='+[...new Set(l)]['join']('+')+'\x20evidence=\x22'+n+'\x22');}}expect(e)['toHaveLength'](0xb);const f=e['filter'](o=>o['includes']('score='));expect(f)['toHaveLength'](0x9);for(const o of f){expect(o)['toMatch'](/weight=\d+/),expect(o)['toContain']('state=present'),expect(o)['toMatch'](/confidence=(exact|bounded|windowed|derived)/);const p=o['match'](/evidence="(.*)"/);expect(p,o)['not']['toBeNull'](),expect(p[0x1]['length'],o)['toBeGreaterThan'](0x0);}expect(c['trust']['summary'])['toContain']('weakest\x20Fund\x20safety'),expect(c['trust']['summary'])['not']['toContain']('trust_fund_safety'),expect(c['trust']['summary'])['toMatch'](/grade: (strong|fair|weak)/),expect(c['trust']['summary'])['toContain']('Compensation\x20fund');});});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export declare function registerBuiltinEvaluations(): void;
|
|
2
2
|
export { registerDemandMatchEvaluation, matchDemandToServices, matchServiceToDemands, DEMAND_MATCH_EVALUATION, type DemandMatch, type ServiceMatch, } from "./demand-match.js";
|
|
3
|
-
export { registerServiceRiskEvaluation, assessServiceRisk, SERVICE_RISK_EVALUATION, } from "./service-risk.js";
|
|
4
3
|
export { registerArbitrationScoreEvaluation, assessArbitration, ARBITRATION_TRUST_EVALUATION, ARBITRATION_FAIRNESS_EVALUATION, } from "./arbitration-score.js";
|
|
4
|
+
export { registerGraphServiceEvaluations, evaluateGraphServiceFacts, GRAPH_TRUST_EVALUATION, GRAPH_RISK_EVALUATION, GRAPH_RULE_INPUT_FACTS, type GraphServiceEvaluation, } from "./graph-service.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getEvaluationEngine}from'../engine.js';import{registerDemandMatchEvaluation}from'./demand-match.js';import{
|
|
1
|
+
import{getEvaluationEngine}from'../engine.js';import{registerDemandMatchEvaluation}from'./demand-match.js';import{registerArbitrationScoreEvaluation}from'./arbitration-score.js';import{registerGraphServiceEvaluations}from'./graph-service.js';export function registerBuiltinEvaluations(){const a=getEvaluationEngine();registerDemandMatchEvaluation(a),registerArbitrationScoreEvaluation(a),registerGraphServiceEvaluations(a);}export{registerDemandMatchEvaluation,matchDemandToServices,matchServiceToDemands,DEMAND_MATCH_EVALUATION}from'./demand-match.js';export{registerArbitrationScoreEvaluation,assessArbitration,ARBITRATION_TRUST_EVALUATION,ARBITRATION_FAIRNESS_EVALUATION}from'./arbitration-score.js';export{registerGraphServiceEvaluations,evaluateGraphServiceFacts,GRAPH_TRUST_EVALUATION,GRAPH_RISK_EVALUATION,GRAPH_RULE_INPUT_FACTS}from'./graph-service.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe,it,expect}from'vitest';import{readdirSync,readFileSync}from'node:fs';import{dirname,join}from'node:path';import{fileURLToPath}from'node:url';import{importSourcesOf,namedSdkImportsOf,stripComments}from'../guard-scan.js';const BUILTINS_DIR=dirname(fileURLToPath(import.meta.url)),ALLOWED_SDK_NAMED=new Set(['MAX_VOTING_GUARD_COUNT']),BANNED_TOKENS=[[/assembleInfoPuzzle/,'legacy\x20puzzle\x20assembler'],[/puzzle_raw/,'legacy\x20puzzle_raw\x20entry'],[/PuzzleRawData/,'legacy\x20PuzzleRawData\x20type'],[/info-puzzle/,'legacy\x20info-puzzle\x20module'],[/\bquery_objects\b/,'SDK\x20query_objects'],[/\bquery_table\b/,'SDK\x20query_table'],[/\bquery_services\b/,'SDK\x20query_services'],[/\bquery_arbs\b/,'SDK\x20query_arbs'],[/\bSdkDataPlane\b/,'SdkDataPlane\x20chain\x20IO'],[/\bLocalMark\b/,'LocalMark\x20store\x20access'],[/\bnetwork_get\b/,'authority\x20network\x20read'],[/fetchObjectLinker/,'linker\x20chain\x20IO']];function runtimeSources(){return readdirSync(BUILTINS_DIR)['filter'](a=>a['endsWith']('.ts')&&!a['endsWith']('.spec.ts'))['sort']()['map'](a=>({'file':a,'text':stripComments(readFileSync(join(BUILTINS_DIR,a),'utf8'))}));}describe('TR-15.1\x20builtins\x20purity',()=>{const a=runtimeSources();it('has\x20runtime\x20files\x20to\x20guard',()=>{expect(a['length'])['toBeGreaterThan'](0x0);}),it('imports\x20only\x20relative\x20modules\x20(and\x20whitelisted\x20SDK\x20constants)',()=>{for(const {file:b,text:c}of a){for(const d of importSourcesOf(c)){if(d['startsWith']('.'))continue;if(d==='@wowok/wowok'){const e=namedSdkImportsOf(c)['filter'](f=>!ALLOWED_SDK_NAMED['has'](f));expect(e,b+'\x20imports\x20non-constant\x20SDK\x20symbols:\x20'+e['join'](',\x20'))['toEqual']([]);continue;}throw new Error(b+'\x20imports\x20non-relative\x20module\x20\x22'+d+'\x22\x20—\x20builtins\x20must\x20stay\x20pure');}}}),it('carries\x20no\x20chain-IO\x20or\x20legacy-puzzle\x20entry',()=>{for(const {file:b,text:c}of a){for(const [d,e]of BANNED_TOKENS){expect(d['test'](c),b+'\x20references\x20'+e)['toBe'](![]);}}});});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{REQUIREMENT_PASS_THRESHOLD,effectiveWeight,isDataSourceEnabled,isRuleEnabled,normalizeInjection}from'./user-injection.js';
|
|
1
|
+
import{REQUIREMENT_PASS_THRESHOLD,effectiveWeight,isDataSourceEnabled,isRuleEnabled,normalizeInjection}from'./user-injection.js';import{levelFromScore as a21a}from'./standards.js';export function levelFromScore(a){return a21a(a);}function appliesTo(a,b){if(!a||a['length']===0x0)return!![];return a['includes'](b);}export class EvaluationEngine{static ['instance']=null;['dataSources']=new Map();['rules']=new Map();static['Instance'](){return!EvaluationEngine['instance']&&(EvaluationEngine['instance']=new EvaluationEngine()),EvaluationEngine['instance'];}['registerDataSource'](a){if(!a['id']||this['dataSources']['has'](a['id']))return![];return this['dataSources']['set'](a['id'],a),!![];}['unregisterDataSource'](a){return this['dataSources']['delete'](a);}['registerRule'](a){if(!a['id']||this['rules']['has'](a['id']))return![];return this['rules']['set'](a['id'],a),!![];}['unregisterRule'](a){return this['rules']['delete'](a);}['getRule'](a){return this['rules']['get'](a);}['listRules'](){return Array['from'](this['rules']['values']());}['getDataSource'](a){return this['dataSources']['get'](a);}['listDataSources'](){return Array['from'](this['dataSources']['values']());}async['evaluate'](a,b,c){const d=normalizeInjection(c),e={'evaluation_id':a,'entities':b,'facts':{},'injection':d,'now':Date['now']()},f=[],g=Array['from'](this['dataSources']['values']())['filter'](m=>appliesTo(m['evaluation_ids'],a))['sort']((m,n)=>(m['priority']??0x0)-(n['priority']??0x0));for(const m of g){if(!isDataSourceEnabled(m['id'],d)){f['push']({'kind':'override','id':m['id'],'detail':'data\x20source\x20disabled\x20by\x20user\x20override'});continue;}if(m['isEnabled']&&!m['isEnabled'](e))continue;const n=await m['extract'](e);Object['assign'](e['facts'],n),f['push']({'kind':'data_source','id':m['id'],'detail':'extracted\x20'+Object['keys'](n)['length']+'\x20fact(s)'});}const h=[],i=[];for(const o of this['rules']['values']()){if(!appliesTo(o['evaluation_ids'],a))continue;if(!isRuleEnabled(o['id'],d)){f['push']({'kind':'override','id':o['id'],'detail':'rule\x20disabled\x20by\x20user\x20override'});continue;}if(o['isEnabled']&&!o['isEnabled'](e))continue;const p=o['evaluate'](e);if(!p){f['push']({'kind':'rule','id':o['id'],'detail':'not\x20applicable\x20—\x20excluded\x20from\x20weighted\x20aggregation'});continue;}const q=effectiveWeight(o,d);h['push']({'rule_id':o['id'],'dimension':o['dimension'],'score':p['score'],'weight':q,'weight_source':q!==o['weight']?'override':'default','reason':p['reason'],'matched':p['matched'],'mismatched':p['mismatched'],'finding_refs':p['finding_refs'],'red_flag':p['red_flag']}),p['red_flag']&&i['push'](p['reason']??o['id']+'\x20triggered\x20a\x20hard\x20block'),f['push']({'kind':'rule','id':o['id'],'detail':'score='+p['score']+'\x20weight='+q});}const j=aggregateScore(h);let k=i['length']>0x0;for(const r of d['requirements']??[]){const s=h['find'](t=>t['rule_id']===r['rule_id']);if(r['condition']==='require')(!s||s['score']<REQUIREMENT_PASS_THRESHOLD||s['red_flag'])&&(k=!![],i['push'](r['note']??'Requirement\x20requires\x20rule\x20\x27'+r['rule_id']+'\x27\x20to\x20pass'));else r['condition']==='forbid'&&(s&&s['red_flag']&&(k=!![],i['push'](r['note']??'Requirement\x20forbids\x20rule\x20\x27'+r['rule_id']+'\x27\x20from\x20triggering')));}const l=e['facts']['summary']??buildSummary(a,j,h,i,k);return{'evaluation_id':a,'total':j,'level':levelFromScore(j),'breakdown':h,'red_flags':i,'blocked':k,'trace':f,'summary':l,'criterionScores':e['facts']['criterionScores'],'findings':e['facts']['findings'],'strengths':e['facts']['strengths'],'needsLlm':e['facts']['needsLlm'],'llmPrompt':e['facts']['llmPrompt']};}}function aggregateScore(a){if(a['length']===0x0)return 0x0;let c=0x0,d=0x0;for(const e of a){c+=e['score']*e['weight'],d+=e['weight'];}if(d<=0x0)return 0x0;return clamp(Math['round'](c/d),0x0,0x64);}function clamp(a,b,c){return Math['max'](b,Math['min'](c,a));}function buildSummary(a,b,c,d,e){const f=['Evaluation\x20\x27'+a+'\x27:\x20score\x20'+b+'/100'];return e?f['push']('BLOCKED\x20('+d['length']+'\x20red\x20flag(s))'):f['push'](c['length']+'\x20rule(s)\x20evaluated'),f['join']('\x20—\x20');}export function getEvaluationEngine(){return EvaluationEngine['Instance']();}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { PersonaRole } from "../../persona/types.js";
|
|
2
|
+
export type FacetMeasureKind = "score" | "signal" | "quantity" | "graph";
|
|
3
|
+
export type FacetId = "fund_safety" | "reputation" | "arbitration" | "fulfillment" | "offering_price" | "workflow" | "fund_flow" | "supply_chain" | "permission" | "my_stakes";
|
|
4
|
+
export interface FacetDef {
|
|
5
|
+
id: FacetId;
|
|
6
|
+
label: string;
|
|
7
|
+
question: string;
|
|
8
|
+
measures: readonly FacetMeasureKind[];
|
|
9
|
+
ruleIds?: readonly string[];
|
|
10
|
+
defaultOrder: number;
|
|
11
|
+
}
|
|
12
|
+
export declare const FACET_CATALOG: readonly FacetDef[];
|
|
13
|
+
export declare function facetDef(id: string): FacetDef | undefined;
|
|
14
|
+
export declare const FACET_IDS: readonly FacetId[];
|
|
15
|
+
export interface RoleFacetDefault {
|
|
16
|
+
order: readonly FacetId[];
|
|
17
|
+
rationale: string;
|
|
18
|
+
}
|
|
19
|
+
export declare const ROLE_FACET_DEFAULTS: Readonly<Record<PersonaRole, RoleFacetDefault>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const FACET_CATALOG=[{'id':'fund_safety','label':'Fund\x20safety','question':'Is\x20the\x20compensation\x20fund\x20enough\x20to\x20cover\x20real\x20payout\x20exposure?','measures':['score','quantity'],'ruleIds':['trust_fund_safety','risk_fund'],'defaultOrder':0x1},{'id':'reputation','label':'Reputation','question':'What\x20do\x20on-chain\x20social\x20proofs\x20actually\x20say?','measures':['score'],'ruleIds':['trust_reviews','trust_transparency'],'defaultOrder':0x2},{'id':'arbitration','label':'Arbitration','question':'Is\x20a\x20usable\x20arbitration\x20forum\x20bound\x20and\x20credible?','measures':['score','signal'],'ruleIds':['trust_arbitration','risk_trust'],'defaultOrder':0x3},{'id':'fulfillment','label':'Fulfillment','question':'Does\x20the\x20seller\x20actually\x20complete\x20orders?','measures':['score'],'ruleIds':['trust_fulfillment'],'defaultOrder':0x4},{'id':'offering_price','label':'Offering\x20&\x20price','question':'What\x20is\x20for\x20sale,\x20at\x20what\x20price,\x20and\x20is\x20it\x20published?','measures':['quantity','signal'],'defaultOrder':0x5},{'id':'workflow','label':'Workflow','question':'What\x20is\x20the\x20process,\x20and\x20can\x20it\x20dead-end\x20or\x20seize\x20funds?','measures':['graph','score'],'ruleIds':['risk_workflow'],'defaultOrder':0x6},{'id':'fund_flow','label':'Fund\x20flow','question':'Where\x20does\x20paid\x20money\x20go,\x20and\x20under\x20what\x20guards?','measures':['graph','quantity'],'defaultOrder':0x7},{'id':'supply_chain','label':'Supply\x20chain','question':'Who\x20fulfills\x20upstream,\x20and\x20how\x20are\x20sub-orders\x20settled?','measures':['graph'],'defaultOrder':0x8},{'id':'permission','label':'Permission','question':'Who\x20can\x20change\x20settings,\x20move\x20funds,\x20and\x20advance\x20orders?','measures':['signal'],'ruleIds':['risk_behavior'],'defaultOrder':0x9},{'id':'my_stakes','label':'My\x20stakes','question':'What\x20do\x20I\x20specifically\x20stand\x20to\x20lose\x20or\x20gain,\x20and\x20what\x20can\x20I\x20do?','measures':['signal'],'defaultOrder':0xa}];const CATALOG_BY_ID=new Map(FACET_CATALOG['map'](a=>[a['id'],a]));export function facetDef(a){return CATALOG_BY_ID['get'](a);}export const FACET_IDS=FACET_CATALOG['map'](a=>a['id']);export const ROLE_FACET_DEFAULTS={'customer':{'order':['fund_safety','arbitration','fulfillment','my_stakes'],'rationale':'before\x20paying:\x20coverage,\x20a\x20dispute\x20forum,\x20real\x20completion,\x20then\x20my\x20own\x20stakes'},'prospect':{'order':['reputation','fund_safety','offering_price','arbitration'],'rationale':'pre-order\x20due\x20diligence:\x20social\x20proof,\x20coverage,\x20the\x20offer,\x20dispute\x20remedy'},'merchant':{'order':['fund_flow','workflow','supply_chain','permission'],'rationale':'operating\x20lens:\x20where\x20money\x20goes,\x20the\x20process,\x20upstream\x20delivery,\x20who\x20controls\x20it'},'supplier':{'order':['supply_chain','fund_flow','workflow'],'rationale':'sub-order\x20delivery\x20and\x20settlement\x20waterfall\x20before\x20own\x20process'},'collaborator':{'order':['workflow','permission','my_stakes'],'rationale':'which\x20forwards\x20exist,\x20what\x20my\x20permission\x20index\x20can\x20do,\x20my\x20stakes'},'arbitrator':{'order':['arbitration','permission','supply_chain'],'rationale':'dispute\x20forum\x20posture,\x20control\x20concentration,\x20the\x20upstream\x20chain\x20in\x20dispute'},'demander':{'order':['offering_price','reputation','arbitration'],'rationale':'presenter\x20offers:\x20price\x20fit,\x20social\x20proof,\x20enforceable\x20remedy'}};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare function stripComments(text: string): string;
|
|
2
|
+
export declare function importSourcesOf(code: string): string[];
|
|
3
|
+
export declare function namedSdkImportsOf(text: string): string[];
|
|
4
|
+
export declare const SDK_CONSTANT_ALLOWLIST: Set<string>;
|
|
5
|
+
export declare const ONCHAIN_IO_CALLS: Array<[RegExp, string]>;
|
|
6
|
+
export declare function onchainIoCalls(strippedCode: string): string[];
|
|
7
|
+
export declare function listRuntimeSources(dir: string): Array<{
|
|
8
|
+
file: string;
|
|
9
|
+
text: string;
|
|
10
|
+
}>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{readdirSync,readFileSync}from'node:fs';import{join}from'node:path';export function stripComments(a){return a['replace'](/\/\*[\s\S]*?\*\//g,'\x20')['replace'](/(^|[^:])\/\/[^\n]*/g,'$1\x20');}export function importSourcesOf(a){const b=[];for(const c of a['matchAll'](/\bimport\s+(?:type\s+)?\{[^}]*\}\s*from\s*["']([^"']+)["']/g))b['push'](c[0x1]);for(const d of a['matchAll'](/\bimport\s+(?:type\s+)?(?:\*\s+as\s+\w+|\w+)(?:\s*,\s*\{[^}]*\})?\s*from\s*["']([^"']+)["']/g))b['push'](d[0x1]);for(const e of a['matchAll'](/\bexport\s+(?:\*\s*|\{[^}]*\}\s*)from\s*["']([^"']+)["']/g))b['push'](e[0x1]);for(const f of a['matchAll'](/^\s*import\s+["']([^"']+)["']/gm))b['push'](f[0x1]);return b;}export function namedSdkImportsOf(a){const b=[];for(const c of a['matchAll'](/import\s+(?:type\s+)?\{([^}]*)\}\s+from\s+["']@wowok\/wowok["']/g)){for(const d of c[0x1]['split'](',')){const e=d['replace'](/\btype\s+/g,'')['trim']()['split'](/\s+as\s+/)[0x0]['trim']();if(e)b['push'](e);}}return b;}export const SDK_CONSTANT_ALLOWLIST=new Set(['MAX_VOTING_GUARD_COUNT']);export const ONCHAIN_IO_CALLS=[[/\bnew\s+SdkDataPlane\b/,'SdkDataPlane\x20construction'],[/\b(?:query_objects|query_table|query_services|query_arbs|query_events)\s*\(/,'SDK\x20query\x20call'],[/\bLocalMark\.Instance\s*\(\)/,'LocalMark\x20store\x20access'],[/\bget_many_address\s*\(/,'LocalMark\x20name\x20resolution'],[/\bfetchObjectLinker\s*\(/,'linker\x20chain\x20IO'],[/\bnetwork_get\s*\(/,'authority\x20network\x20read']];export function onchainIoCalls(a){return ONCHAIN_IO_CALLS['filter'](([b])=>b['test'](a))['map'](([,b])=>b);}export function listRuntimeSources(a){const b=[];for(const c of readdirSync(a,{'withFileTypes':!![]})){const d=join(a,c['name']);if(c['isDirectory']())b['push'](...listRuntimeSources(d));else c['name']['endsWith']('.ts')&&!c['name']['endsWith']('.spec.ts')&&b['push']({'file':c['name'],'text':stripComments(readFileSync(d,'utf8'))});}return b['sort']((e,f)=>e['file']['localeCompare'](f['file']));}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{parseRegion,relateRegion}from'./region.js';function toRegion(a){if(a===undefined)return parseRegion('');if(typeof a==='string')return parseRegion(a);const b=parseRegion(a['raw']);return{...b,'country':a['country']??b['country'],'province':a['province']??b['province'],'city':a['city']??b['city']};}export function gateLocation(a,b,c){const d=toRegion(b),e=toRegion(c);if(!d['raw']?.['trim']())return{'relation':'mismatch','satisfied':a!=='strict','score':0.5,'reason':'No\x20demand-side\x20location\x20stated\x20—\x20location\x20is\x20not\x20discriminating;\x20other\x20dimensions\x20decide.'};if(!e['raw']?.['trim']())return{'relation':'mismatch','satisfied':a!=='strict','score':a==='strict'?0x0:0.3,'reason':a==='strict'?'Service\x20has\x20NO\x20location\x20set\x20—\x20merchant\x20location\x20hygiene\x20issue;\x20excluded\x20under\x20strict\x20sensitivity.':'Service\x20has\x20no\x20location\x20set\x20—\x20kept\x20(soft\x20signal)\x20because\x20sensitivity\x20is\x20not\x20strict.'};const f=relateRegion(d,e),{satisfied:g,score:h,reason:i}=judge(a,f);return{'relation':f,'satisfied':g,'score':h,'reason':i};}function judge(a,b){switch(b){case'exact':return{'satisfied':!![],'score':0x1,'reason':'Location\x20exact\x20match.'};case'contains':return{'satisfied':!![],'score':0.9,'reason':'Location\x20containment\x20match\x20(one\x20region\x20covers\x20the\x20other).'};case'overlap':if(a==='strict')return{'satisfied':![],'score':0.4,'reason':'Same\x20province\x20but\x20different\x20city\x20—\x20fails\x20the\x20100%\x20location\x20gate\x20(strict).\x20Consider\x20\x27near\x27\x20sensitivity\x20to\x20accept\x20neighboring\x20cities.'};return{'satisfied':!![],'score':0.6,'reason':'Neighboring\x20city\x20within\x20the\x20same\x20province\x20—\x20accepted\x20(near/logistics).'};case'compatible':return{'satisfied':!![],'score':0.8,'reason':'Remote\x20service\x20serves\x20any\x20physical\x20region\x20(or\x20vice\x20versa).'};case'mismatch':default:return{'satisfied':a==='logistics','score':0x0,'reason':a==='logistics'?'Region\x20mismatch\x20—\x20soft\x20warning\x20only\x20(goods\x20can\x20ship\x20via\x20logistics).':'Region\x20mismatch\x20—\x20excluded\x20under\x20strict/near\x20sensitivity.'};}}export function rankByLocation(a,b,c){return c['map'](d=>{const e=gateLocation(a,b,d['location']);return{'id':d['id'],'name':d['name'],'location':typeof d['location']==='string'?d['location']:d['location']?.['raw'],'relation':e['relation'],'satisfied':e['satisfied'],'score':e['score'],'reason':e['reason']};})['sort']((d,e)=>{if(d['satisfied']!==e['satisfied'])return d['satisfied']?-0x1:0x1;if(e['score']!==d['score'])return e['score']-d['score'];return 0x0;});}export function expandSearchScope(a,b){const c=toRegion(b),d=c['city']?.['trim'](),e=c['province']?.['trim']();if(a==='strict')return{'sensitivity':a,'search_terms':d?[d]:[c['raw']]['filter'](Boolean),'ai_enrichment_note':'Strict:\x20do\x20NOT\x20widen\x20geographically.\x20If\x20nothing\x20matches,\x20report\x20honestly\x20and\x20suggest\x20switching\x20sensitivity\x20to\x20\x27near\x27\x20(user\x20decision)\x20instead\x20of\x20silently\x20expanding.'};if(a==='near'){const f=[c['raw'],d,e]['filter'](Boolean);return{'sensitivity':a,'search_terms':f,'ai_enrichment_note':'Near:\x20AI\x20enriches\x20neighboring\x20cities\x20of\x20the\x20demand\x20city\x20from\x20public\x20web\x20data\x20(authoritative\x20preferred),\x20confirms\x20the\x20list\x20with\x20the\x20user,\x20then\x20re-runs\x20discovery\x20with\x20the\x20expanded\x20terms.'};}return{'sensitivity':a,'search_terms':[c['raw'],e,'remote','online','nationwide','china','global']['filter'](Boolean),'ai_enrichment_note':'Logistics:\x20location\x20is\x20a\x20soft\x20signal.\x20Enumerate\x20broadly\x20(nationwide/remote\x20services),\x20rank\x20by\x20location\x20fit,\x20but\x20let\x20price/trust/tags\x20dominate\x20the\x20final\x20recommendation.'};}const ON_SITE_EN=/\b(hotel|accommodation|restaurant|dining|gym)\b/,
|
|
1
|
+
import{parseRegion,relateRegion}from'./region.js';function toRegion(a){if(a===undefined)return parseRegion('');if(typeof a==='string')return parseRegion(a);const b=parseRegion(a['raw']);return{...b,'country':a['country']??b['country'],'province':a['province']??b['province'],'city':a['city']??b['city']};}export function gateLocation(a,b,c){const d=toRegion(b),e=toRegion(c);if(!d['raw']?.['trim']())return{'relation':'mismatch','satisfied':a!=='strict','score':0.5,'reason':'No\x20demand-side\x20location\x20stated\x20—\x20location\x20is\x20not\x20discriminating;\x20other\x20dimensions\x20decide.'};if(!e['raw']?.['trim']())return{'relation':'mismatch','satisfied':a!=='strict','score':a==='strict'?0x0:0.3,'reason':a==='strict'?'Service\x20has\x20NO\x20location\x20set\x20—\x20merchant\x20location\x20hygiene\x20issue;\x20excluded\x20under\x20strict\x20sensitivity.':'Service\x20has\x20no\x20location\x20set\x20—\x20kept\x20(soft\x20signal)\x20because\x20sensitivity\x20is\x20not\x20strict.'};const f=relateRegion(d,e),{satisfied:g,score:h,reason:i}=judge(a,f);return{'relation':f,'satisfied':g,'score':h,'reason':i};}function judge(a,b){switch(b){case'exact':return{'satisfied':!![],'score':0x1,'reason':'Location\x20exact\x20match.'};case'contains':return{'satisfied':!![],'score':0.9,'reason':'Location\x20containment\x20match\x20(one\x20region\x20covers\x20the\x20other).'};case'overlap':if(a==='strict')return{'satisfied':![],'score':0.4,'reason':'Same\x20province\x20but\x20different\x20city\x20—\x20fails\x20the\x20100%\x20location\x20gate\x20(strict).\x20Consider\x20\x27near\x27\x20sensitivity\x20to\x20accept\x20neighboring\x20cities.'};return{'satisfied':!![],'score':0.6,'reason':'Neighboring\x20city\x20within\x20the\x20same\x20province\x20—\x20accepted\x20(near/logistics).'};case'compatible':return{'satisfied':!![],'score':0.8,'reason':'Remote\x20service\x20serves\x20any\x20physical\x20region\x20(or\x20vice\x20versa).'};case'mismatch':default:return{'satisfied':a==='logistics','score':0x0,'reason':a==='logistics'?'Region\x20mismatch\x20—\x20soft\x20warning\x20only\x20(goods\x20can\x20ship\x20via\x20logistics).':'Region\x20mismatch\x20—\x20excluded\x20under\x20strict/near\x20sensitivity.'};}}export function rankByLocation(a,b,c){return c['map'](d=>{const e=gateLocation(a,b,d['location']);return{'id':d['id'],'name':d['name'],'location':typeof d['location']==='string'?d['location']:d['location']?.['raw'],'relation':e['relation'],'satisfied':e['satisfied'],'score':e['score'],'reason':e['reason']};})['sort']((d,e)=>{if(d['satisfied']!==e['satisfied'])return d['satisfied']?-0x1:0x1;if(e['score']!==d['score'])return e['score']-d['score'];return 0x0;});}export function expandSearchScope(a,b){const c=toRegion(b),d=c['city']?.['trim'](),e=c['province']?.['trim']();if(a==='strict')return{'sensitivity':a,'search_terms':d?[d]:[c['raw']]['filter'](Boolean),'ai_enrichment_note':'Strict:\x20do\x20NOT\x20widen\x20geographically.\x20If\x20nothing\x20matches,\x20report\x20honestly\x20and\x20suggest\x20switching\x20sensitivity\x20to\x20\x27near\x27\x20(user\x20decision)\x20instead\x20of\x20silently\x20expanding.'};if(a==='near'){const f=[c['raw'],d,e]['filter'](Boolean);return{'sensitivity':a,'search_terms':f,'ai_enrichment_note':'Near:\x20AI\x20enriches\x20neighboring\x20cities\x20of\x20the\x20demand\x20city\x20from\x20public\x20web\x20data\x20(authoritative\x20preferred),\x20confirms\x20the\x20list\x20with\x20the\x20user,\x20then\x20re-runs\x20discovery\x20with\x20the\x20expanded\x20terms.'};}return{'sensitivity':a,'search_terms':[c['raw'],e,'remote','online','nationwide','china','global']['filter'](Boolean),'ai_enrichment_note':'Logistics:\x20location\x20is\x20a\x20soft\x20signal.\x20Enumerate\x20broadly\x20(nationwide/remote\x20services),\x20rank\x20by\x20location\x20fit,\x20but\x20let\x20price/trust/tags\x20dominate\x20the\x20final\x20recommendation.'};}const ON_SITE_EN=/\b(hotel|accommodation|homestay|restaurant|dining|gym)\b/,LOGISTICS_EN=/\b(shipping|delivery|ship to home|mail|courier)\b/,REMOTE_EN=/\b(online|remote)\b/,hits=(a,b)=>b['test'](a);export function inferSensitivity(a){const b=(a??'')['toLowerCase'](),c=[];hits(b,ON_SITE_EN)&&c['push']('on-site\x20consumption');hits(b,LOGISTICS_EN)&&c['push']('physical\x20logistics');hits(b,REMOTE_EN)&&c['push']('remote\x20service');if(c['includes']('on-site\x20consumption')&&!c['includes']('physical\x20logistics'))return{'sensitivity':'strict','signals':c};if(c['includes']('physical\x20logistics'))return{'sensitivity':'logistics','signals':c};if(c['includes']('remote\x20service'))return{'sensitivity':'near','signals':c};return{'sensitivity':'near','signals':c['length']?c:['no\x20explicit\x20signal\x20—\x20defaulted\x20to\x20near']};}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface DimensionStandard {
|
|
2
|
+
label: string;
|
|
3
|
+
description: string;
|
|
4
|
+
}
|
|
5
|
+
export interface EvaluationBaselines {
|
|
6
|
+
version: number;
|
|
7
|
+
description: string;
|
|
8
|
+
weights: Record<string, number>;
|
|
9
|
+
dimensions: Record<string, DimensionStandard>;
|
|
10
|
+
severity_deduction: Record<string, number>;
|
|
11
|
+
level_bands: Array<{
|
|
12
|
+
min: number;
|
|
13
|
+
level: string;
|
|
14
|
+
}>;
|
|
15
|
+
grade_words: {
|
|
16
|
+
trust: Array<{
|
|
17
|
+
min: number;
|
|
18
|
+
word: string;
|
|
19
|
+
}>;
|
|
20
|
+
risk: Array<{
|
|
21
|
+
min: number;
|
|
22
|
+
word: string;
|
|
23
|
+
}>;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export declare function defaultWeight(ruleId: string): number;
|
|
27
|
+
export declare function defaultWeights(): Record<string, number>;
|
|
28
|
+
export declare function dimensionLabel(ruleId: string): string;
|
|
29
|
+
export declare function severityDeduction(severity: string): number;
|
|
30
|
+
export declare function levelFromScore(score: number): string;
|
|
31
|
+
export declare function gradeWord(side: "trust" | "risk", score: number): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{readFileSync}from'node:fs';const DOC_PATH='knowledge/baselines/evaluation-baselines.json';function loadDoc(){const a=[new URL('../../'+DOC_PATH,import.meta.url),new URL('../'+DOC_PATH,import.meta.url)];for(const b of a){try{return JSON['parse'](readFileSync(b,'utf-8'));}catch{}}throw new Error('Evaluation\x20standards\x20document\x20not\x20found\x20('+DOC_PATH+')\x20—\x20broken\x20installation.');}const DOC=loadDoc();export function defaultWeight(a){return DOC['weights'][a]??0x0;}export function defaultWeights(){return{...DOC['weights']};}export function dimensionLabel(a){return DOC['dimensions'][a]?.['label']??a;}export function severityDeduction(a){return DOC['severity_deduction'][a]??0x0;}export function levelFromScore(a){for(const b of DOC['level_bands']){if(a>=b['min'])return b['level'];}return DOC['level_bands'][DOC['level_bands']['length']-0x1]?.['level']??'high';}export function gradeWord(a,b){const c=DOC['grade_words'][a];for(const d of c){if(b>=d['min'])return d['word'];}return c[c['length']-0x1]?.['word']??'unknown';}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe,expect,it}from'vitest';import{defaultWeights,dimensionLabel,gradeWord,levelFromScore,severityDeduction}from'./standards.js';import{mergeLayers}from'../persona/model.js';import{personaToInjection}from'../persona/bridge.js';describe('evaluation\x20standards\x20document',()=>{it('exposes\x20the\x20document\x20defaults\x20(weights\x20/\x20labels\x20/\x20deductions\x20/\x20bands)',()=>{const a=defaultWeights();expect(a['trust_reviews'])['toBe'](0x23),expect(a['risk_workflow'])['toBe'](0x23),expect(Object['keys'](a)['length'])['toBe'](0x9);for(const b of Object['values'](a))expect(b)['toBeGreaterThan'](0x0);expect(dimensionLabel('trust_fund_safety'))['toBe']('Fund\x20safety'),expect(dimensionLabel('trust_reviews'))['toBe']('Reputation'),expect(dimensionLabel('not_a_rule'))['toBe']('not_a_rule'),expect(severityDeduction('critical'))['toBe'](0x32),expect(severityDeduction('info'))['toBe'](0x0);}),it('derives\x20level\x20bands\x20and\x20per-side\x20grade\x20words\x20from\x20the\x20document',()=>{expect(levelFromScore(0x5a))['toBe']('low'),expect(levelFromScore(0x2b))['toBe']('high'),expect(gradeWord('trust',0x2b))['toBe']('weak'),expect(gradeWord('trust',0x37))['toBe']('fair'),expect(gradeWord('trust',0x58))['toBe']('strong'),expect(gradeWord('risk',0x58))['toBe']('low\x20risk'),expect(gradeWord('risk',0x41))['toBe']('moderate\x20risk'),expect(gradeWord('risk',0x19))['toBe']('high\x20risk');});}),describe('persona\x20evaluation\x20standards\x20→\x20injection',()=>{it('merges\x20evaluation\x20weights\x20across\x20layers\x20with\x20plain\x20priority',()=>{const a={'evaluation':{'weights':{'trust_reviews':0x2d}}},b={'evaluation':{'weights':{'trust_reviews':0x32,'risk_fund':0x28}}},c=mergeLayers([a,b]);expect(c['evaluation']?.['weights'])['toEqual']({'trust_reviews':0x32,'risk_fund':0x28});}),it('personaToInjection\x20maps\x20weights\x20into\x20rule\x20overrides',()=>{const a=personaToInjection({'role':'customer','industries':[],'layer':{'evaluation':{'weights':{'trust_arbitration':0x28,'bogus_rule':Number['NaN']}}}});expect(a?.['overrides']?.['rules']?.['trust_arbitration'])['toEqual']({'weight':0x28}),expect(a?.['overrides']?.['rules']?.['bogus_rule'])['toBeUndefined']();}),it('persona\x20without\x20evaluation\x20standards\x20carries\x20no\x20overrides',()=>{const a=personaToInjection({'role':'customer','industries':[],'layer':{}});expect(a?.['overrides'])['toBeUndefined']();});});
|
|
@@ -15,12 +15,18 @@ export interface EvaluationRule {
|
|
|
15
15
|
isEnabled?: (ctx: EvaluationContext) => boolean;
|
|
16
16
|
evaluate(ctx: EvaluationContext): RuleContribution | null;
|
|
17
17
|
}
|
|
18
|
+
export interface FindingRef {
|
|
19
|
+
id: string;
|
|
20
|
+
title: string;
|
|
21
|
+
severity: string;
|
|
22
|
+
}
|
|
18
23
|
export interface RuleContribution {
|
|
19
24
|
score: number;
|
|
20
25
|
weight: number;
|
|
21
26
|
reason?: string;
|
|
22
27
|
matched?: string[];
|
|
23
28
|
mismatched?: string[];
|
|
29
|
+
finding_refs?: FindingRef[];
|
|
24
30
|
red_flag?: boolean;
|
|
25
31
|
}
|
|
26
32
|
export interface UserRequirement {
|
|
@@ -55,9 +61,11 @@ export interface EvaluationBreakdown {
|
|
|
55
61
|
dimension: string;
|
|
56
62
|
score: number;
|
|
57
63
|
weight: number;
|
|
64
|
+
weight_source?: "default" | "override";
|
|
58
65
|
reason?: string;
|
|
59
66
|
matched?: string[];
|
|
60
67
|
mismatched?: string[];
|
|
68
|
+
finding_refs?: FindingRef[];
|
|
61
69
|
red_flag?: boolean;
|
|
62
70
|
}
|
|
63
71
|
export interface EvaluationTraceEntry {
|
|
@@ -86,6 +94,7 @@ export interface EvaluationResult {
|
|
|
86
94
|
blocked: boolean;
|
|
87
95
|
trace: EvaluationTraceEntry[];
|
|
88
96
|
summary: string;
|
|
97
|
+
unverified?: string[];
|
|
89
98
|
criterionScores?: CriterionScore[];
|
|
90
99
|
findings?: EvaluationFinding[];
|
|
91
100
|
strengths?: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{distillIntent,extractSignals}from'./intent-distill.js';import{getProfile,updateFromOperation}from'./user-profile.js';import{findMatches,recordSignature}from'./experience-reuse.js';import{EXPERIENCE_LAYER_VERSION}from'./types.js';import{isEnabled as
|
|
1
|
+
import{distillIntent,extractSignals}from'./intent-distill.js';import{getProfile,updateFromOperation}from'./user-profile.js';import{findMatches,recordSignature}from'./experience-reuse.js';import{EXPERIENCE_LAYER_VERSION}from'./types.js';import{isEnabled as a43a}from'../config/index.js';import{recordIndustrySignal}from'../knowledge/flywheel-loop.js';export{EXPERIENCE_LAYER_VERSION};export function getExperienceFeedback(a,b,c){try{const d=distillIntent(a,b,c),e=findMatches(d['primary_intent'],a,b,0x3);if(e['length']===0x0)return undefined;const f=e[0x0],g=getProfile();return formatFeedback(f,e,d['scenario'],g);}catch{return undefined;}}export function recordOperationOutcome(a,b,c,d,e,f=[]){try{const g=distillIntent(a,b,c),h=extractSignals(a,b);recordSignature({'intent':g['primary_intent'],'scenario':g['scenario'],'signals':h,'timestamp':Date['now'](),'outcome':d,'error_code':e}),updateFromOperation(g['primary_intent'],g['scenario'],d,e,f);try{if(a43a('industry_evolution')){const i=typeof b?.['industry']==='string'&&b['industry']['trim']()?b['industry']['trim']():undefined;if(i){const j=d==='success'?{'success':!![]}:{'success':![],'error_code':e};recordIndustrySignal(i,{'type':a,'data':b},j);}}}catch{}}catch{}}function formatFeedback(a,b,c,d){const e=buildAdviceText(a,b,d),f=collectAvoidList(b,d),g=a['relevance'],h=c??a['signature']['scenario'],i={};if(e)i['advice']=e;if(f['length']>0x0)i['avoid']=f;if(g>0x0)i['relevance']=Math['round'](g*0x64)/0x64;if(h)i['matched_scenario']=h;return i;}function buildAdviceText(a,b,c){const d=[];if(a['signature']['outcome']==='success')d['push']('Historically,\x20'+a['signature']['intent']+'\x20operation\x20succeeded');else a['signature']['outcome']==='failed'&&d['push']('Historically,\x20'+a['signature']['intent']+'\x20operation\x20failed\x20('+(a['signature']['error_code']??'unknown\x20error')+'),\x20pay\x20special\x20attention\x20to\x20parameters');return c['expertise_tier']==='novice'&&b['length']>0x0&&d['push']('It\x20is\x20recommended\x20to\x20carefully\x20check\x20parameters\x20before\x20executing'),d['join'](';\x20')||a['advice'];}function collectAvoidList(b,c){const d=new Set();for(const e of b){for(const f of e['avoid']){d['add'](f);}}for(const g of c['frequent_pitfalls']){d['add']('You\x20often\x20make\x20mistakes\x20at\x20the\x20'+g+'\x20step,\x20please\x20be\x20especially\x20careful');}return Array['from'](d)['slice'](0x0,0x5);}
|
|
@@ -12,7 +12,7 @@ export { ModeEvaluator } from "./mode-evaluator.js";
|
|
|
12
12
|
export { BUILTIN_MODES } from "./modes.js";
|
|
13
13
|
export { registerIndustryPack, validatePackManifest, listRegisteredPacks, unregisterIndustryPack, scanPacks, rescanPack, resolveIndustryPackDir, scanDefaultIndustryPacks, scaffoldIndustryPack, seedBuiltinIndustryTemplates, seedBuiltinStrategyManuals, type StrategyManualSeedResult, diffIndustryPack, resetIndustryPath, readMergedPackIfPresent, buildPristineMergedPack, locatePackAndRemainder, ensureIndustryReadme, industryReadmeContent, } from "./industry-pack.js";
|
|
14
14
|
export type { IndustryPackManifest, IndustryPack, IndustryPackLayout, MergedIndustryPack, PackValidation, PackRegistrationResult, PackRecord, ScaffoldResult, PackDiffResult, ResetResult, } from "./industry-pack.js";
|
|
15
|
-
export { registerDisputeRules, registerComplianceRules, registerSupplyRules, registerIndustryRules, registerIndustryPlaybook, resolveDisputeRules, resolveComplianceRules, resolveSupplyRules, resolveIndustryRules, resolveIndustryPlaybook, listRegisteredDisputeCategories, listRegisteredComplianceCategories, listRegisteredSupplyCategories, listRegisteredIndustryRuleCategories, listRegisteredPlaybookCategories,
|
|
15
|
+
export { registerDisputeRules, registerComplianceRules, registerSupplyRules, registerIndustryRules, registerIndustryPlaybook, resolveDisputeRules, resolveComplianceRules, resolveSupplyRules, resolveIndustryRules, resolveIndustryPlaybook, listRegisteredDisputeCategories, listRegisteredComplianceCategories, listRegisteredSupplyCategories, listRegisteredIndustryRuleCategories, listRegisteredPlaybookCategories, } from "./industry-layers.js";
|
|
16
16
|
export type { DisputeSlaTier, IndustryDisputeRules, ComplianceRules, SupplyRules, IndustryRule, IndustryRuleCondition, IndustryRuleOperator, IndustryRules, IndustryPlaybook, } from "./industry-layers.js";
|
|
17
17
|
export { registerIndustryPersonae, getIndustryPersona, listPersonaeIndustries, unregisterIndustryPersonae, } from "../persona/pack-personae.js";
|
|
18
18
|
export type { IndustryPersona } from "../persona/pack-personae.js";
|
package/dist/extensions/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{CapabilityRegistry,getCapabilityRegistry,CAPABILITY_MANIFEST_VERSION}from'./capability-manifest.js';export{IndustryModeRegistry,getIndustryModeRegistry,INDUSTRY_MODE_REGISTRY_VERSION}from'./registry.js';export{CustomRegistryFile}from'./custom-registry-file.js';export{MetricRegistry,getMetricRegistry,BUILTIN_METRICS_COUNT}from'./metric-registry.js';export{ConstraintRegistry,getConstraintRegistry,BUILTIN_CONSTRAINTS_COUNT}from'./constraint-registry.js';export{ModeEvaluator}from'./mode-evaluator.js';export{BUILTIN_MODES}from'./modes.js';export{registerIndustryPack,validatePackManifest,listRegisteredPacks,unregisterIndustryPack,scanPacks,rescanPack,resolveIndustryPackDir,scanDefaultIndustryPacks,scaffoldIndustryPack,seedBuiltinIndustryTemplates,seedBuiltinStrategyManuals,diffIndustryPack,resetIndustryPath,readMergedPackIfPresent,buildPristineMergedPack,locatePackAndRemainder,ensureIndustryReadme,industryReadmeContent}from'./industry-pack.js';export{registerDisputeRules,registerComplianceRules,registerSupplyRules,registerIndustryRules,registerIndustryPlaybook,resolveDisputeRules,resolveComplianceRules,resolveSupplyRules,resolveIndustryRules,resolveIndustryPlaybook,listRegisteredDisputeCategories,listRegisteredComplianceCategories,listRegisteredSupplyCategories,listRegisteredIndustryRuleCategories,listRegisteredPlaybookCategories
|
|
1
|
+
export{CapabilityRegistry,getCapabilityRegistry,CAPABILITY_MANIFEST_VERSION}from'./capability-manifest.js';export{IndustryModeRegistry,getIndustryModeRegistry,INDUSTRY_MODE_REGISTRY_VERSION}from'./registry.js';export{CustomRegistryFile}from'./custom-registry-file.js';export{MetricRegistry,getMetricRegistry,BUILTIN_METRICS_COUNT}from'./metric-registry.js';export{ConstraintRegistry,getConstraintRegistry,BUILTIN_CONSTRAINTS_COUNT}from'./constraint-registry.js';export{ModeEvaluator}from'./mode-evaluator.js';export{BUILTIN_MODES}from'./modes.js';export{registerIndustryPack,validatePackManifest,listRegisteredPacks,unregisterIndustryPack,scanPacks,rescanPack,resolveIndustryPackDir,scanDefaultIndustryPacks,scaffoldIndustryPack,seedBuiltinIndustryTemplates,seedBuiltinStrategyManuals,diffIndustryPack,resetIndustryPath,readMergedPackIfPresent,buildPristineMergedPack,locatePackAndRemainder,ensureIndustryReadme,industryReadmeContent}from'./industry-pack.js';export{registerDisputeRules,registerComplianceRules,registerSupplyRules,registerIndustryRules,registerIndustryPlaybook,resolveDisputeRules,resolveComplianceRules,resolveSupplyRules,resolveIndustryRules,resolveIndustryPlaybook,listRegisteredDisputeCategories,listRegisteredComplianceCategories,listRegisteredSupplyCategories,listRegisteredIndustryRuleCategories,listRegisteredPlaybookCategories}from'./industry-layers.js';export{registerIndustryPersonae,getIndustryPersona,listPersonaeIndustries,unregisterIndustryPersonae}from'../persona/pack-personae.js';
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { EvaluationRule } from "../evaluation/types.js";
|
|
2
1
|
export interface DisputeSlaTier {
|
|
3
2
|
level: string;
|
|
4
3
|
timeout?: string;
|
|
@@ -69,7 +68,9 @@ export declare function listRegisteredComplianceCategories(): string[];
|
|
|
69
68
|
export declare function listRegisteredSupplyCategories(): string[];
|
|
70
69
|
export declare function listRegisteredIndustryRuleCategories(): string[];
|
|
71
70
|
export declare function listRegisteredPlaybookCategories(): string[];
|
|
72
|
-
export
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
71
|
+
export interface IndustryFactContext {
|
|
72
|
+
facts: Record<string, unknown>;
|
|
73
|
+
entities: Record<string, unknown>;
|
|
74
|
+
}
|
|
75
|
+
export declare function evaluateIndustryCondition(cond: IndustryRuleCondition, ctx: IndustryFactContext): boolean;
|
|
76
|
+
export declare function listAllIndustryRules(): IndustryRules[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
const disputeRules=new Map(),complianceRules=new Map(),supplyRules=new Map(),industryRules=new Map(),playbooks=new Map();function keyOf(a){return a['toLowerCase']();}export function registerDisputeRules(a,b=![]){const c=keyOf(a['category']);if(!c)return![];if(disputeRules['has'](c)&&!b)return![];return disputeRules['set'](c,a),!![];}export function registerComplianceRules(a,b=![]){const c=keyOf(a['category']);if(!c)return![];if(complianceRules['has'](c)&&!b)return![];return complianceRules['set'](c,a),!![];}export function registerSupplyRules(a,b=![]){const c=keyOf(a['category']);if(!c)return![];if(supplyRules['has'](c)&&!b)return![];return supplyRules['set'](c,a),!![];}export function registerIndustryRules(a,b=![]){const c=keyOf(a['category']);if(!c)return![];if(industryRules['has'](c)&&!b)return![];return industryRules['set'](c,a),!![];}export function registerIndustryPlaybook(a,b=![]){const c=keyOf(a['category']);if(!c)return![];if(playbooks['has'](c)&&!b)return![];return playbooks['set'](c,a),!![];}export function resolveDisputeRules(a){if(!a)return undefined;return disputeRules['get'](keyOf(a));}export function resolveComplianceRules(a){if(!a)return undefined;return complianceRules['get'](keyOf(a));}export function resolveSupplyRules(a){if(!a)return undefined;return supplyRules['get'](keyOf(a));}export function resolveIndustryRules(a){if(!a)return undefined;return industryRules['get'](keyOf(a));}export function resolveIndustryPlaybook(a){if(!a)return undefined;return playbooks['get'](keyOf(a));}export function listRegisteredDisputeCategories(){return Array['from'](disputeRules['keys']());}export function listRegisteredComplianceCategories(){return Array['from'](complianceRules['keys']());}export function listRegisteredSupplyCategories(){return Array['from'](supplyRules['keys']());}export function listRegisteredIndustryRuleCategories(){return Array['from'](industryRules['keys']());}export function listRegisteredPlaybookCategories(){return Array['from'](playbooks['keys']());}function lookupFact(a,b){if(b in a['facts'])return a['facts'][b];if(b in a['entities'])return a['entities'][b];return undefined;}export function evaluateIndustryCondition(a,b){const c=lookupFact(b,a['field']);switch(a['op']){case'truthy':return!!c;case'falsy':return!c;case'missing':return c===undefined||c===null;case'present':return c!==undefined&&c!==null;case'eq':return c===a['value'];case'neq':return c!==a['value'];default:return![];}}export function listAllIndustryRules(){return Array['from'](industryRules['values']());}
|