@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
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
import type { ObjectPanoramaInput } from "../../schema/query/bi.js";
|
|
2
2
|
type ProjectInput = ObjectPanoramaInput;
|
|
3
|
+
interface PanoRelatedList {
|
|
4
|
+
key: string | null;
|
|
5
|
+
items: {
|
|
6
|
+
address: string;
|
|
7
|
+
object_type: string;
|
|
8
|
+
time: number | null;
|
|
9
|
+
}[];
|
|
10
|
+
count: number;
|
|
11
|
+
window_saturated: boolean;
|
|
12
|
+
preview_truncated: boolean;
|
|
13
|
+
}
|
|
3
14
|
interface PanoBase {
|
|
4
15
|
action: "object_panorama";
|
|
5
16
|
object: string;
|
|
@@ -37,15 +48,7 @@ export interface ProgressPanoramaResult extends PanoBase {
|
|
|
37
48
|
time: number | null;
|
|
38
49
|
}[];
|
|
39
50
|
} | null;
|
|
40
|
-
related:
|
|
41
|
-
key: string | null;
|
|
42
|
-
items: {
|
|
43
|
-
address: string;
|
|
44
|
-
object_type: string;
|
|
45
|
-
time: number | null;
|
|
46
|
-
}[];
|
|
47
|
-
count: number;
|
|
48
|
-
};
|
|
51
|
+
related: PanoRelatedList;
|
|
49
52
|
}
|
|
50
53
|
export interface DemandPanoramaResult extends PanoBase {
|
|
51
54
|
object_type: "Demand";
|
|
@@ -61,6 +64,8 @@ export interface DemandPanoramaResult extends PanoBase {
|
|
|
61
64
|
}[];
|
|
62
65
|
presenters: {
|
|
63
66
|
count: number;
|
|
67
|
+
window_saturated: boolean;
|
|
68
|
+
preview_truncated: boolean;
|
|
64
69
|
items: {
|
|
65
70
|
service: string;
|
|
66
71
|
recommend: string | null;
|
|
@@ -73,6 +78,7 @@ export interface DemandPanoramaResult extends PanoBase {
|
|
|
73
78
|
}
|
|
74
79
|
export interface OrderPanoramaResult extends PanoBase {
|
|
75
80
|
object_type: "Order";
|
|
81
|
+
coin_type: string | null;
|
|
76
82
|
fields: {
|
|
77
83
|
service: string | null;
|
|
78
84
|
machine: string | null;
|
|
@@ -80,6 +86,8 @@ export interface OrderPanoramaResult extends PanoBase {
|
|
|
80
86
|
allocation: string | null;
|
|
81
87
|
discount: string | null;
|
|
82
88
|
amount: string | null;
|
|
89
|
+
amount_display: string;
|
|
90
|
+
amount_tip: string;
|
|
83
91
|
owner: string | null;
|
|
84
92
|
claimed_by: string | null;
|
|
85
93
|
required_info: string | null;
|
|
@@ -88,6 +96,8 @@ export interface OrderPanoramaResult extends PanoBase {
|
|
|
88
96
|
items: {
|
|
89
97
|
name: string | null;
|
|
90
98
|
price: string | null;
|
|
99
|
+
price_display: string;
|
|
100
|
+
price_tip: string;
|
|
91
101
|
quantity: string | null;
|
|
92
102
|
wip_hash: string | null;
|
|
93
103
|
}[];
|
|
@@ -97,26 +107,23 @@ export interface OrderPanoramaResult extends PanoBase {
|
|
|
97
107
|
disputes: string[];
|
|
98
108
|
agents: string[];
|
|
99
109
|
updated_ms: number | null;
|
|
100
|
-
related:
|
|
101
|
-
key: string | null;
|
|
102
|
-
items: {
|
|
103
|
-
address: string;
|
|
104
|
-
object_type: string;
|
|
105
|
-
time: number | null;
|
|
106
|
-
}[];
|
|
107
|
-
count: number;
|
|
108
|
-
};
|
|
110
|
+
related: PanoRelatedList;
|
|
109
111
|
}
|
|
110
112
|
export interface ArbPanoramaResult extends PanoBase {
|
|
111
113
|
object_type: "Arb";
|
|
114
|
+
coin_type: string | null;
|
|
112
115
|
fields: {
|
|
113
116
|
arbitration: string | null;
|
|
114
117
|
order: string | null;
|
|
115
118
|
service: string | null;
|
|
116
119
|
fee: string | null;
|
|
120
|
+
fee_display: string;
|
|
121
|
+
fee_tip: string;
|
|
117
122
|
feedback: string | null;
|
|
118
123
|
indemnity: {
|
|
119
124
|
amount: string | null;
|
|
125
|
+
amount_display: string;
|
|
126
|
+
amount_tip: string;
|
|
120
127
|
time: number | null;
|
|
121
128
|
} | null;
|
|
122
129
|
voting_deadline: number | null;
|
|
@@ -137,15 +144,7 @@ export interface ArbPanoramaResult extends PanoBase {
|
|
|
137
144
|
votes: number;
|
|
138
145
|
}[];
|
|
139
146
|
updated_ms: number | null;
|
|
140
|
-
related:
|
|
141
|
-
key: string | null;
|
|
142
|
-
items: {
|
|
143
|
-
address: string;
|
|
144
|
-
object_type: string;
|
|
145
|
-
time: number | null;
|
|
146
|
-
}[];
|
|
147
|
-
count: number;
|
|
148
|
-
};
|
|
147
|
+
related: PanoRelatedList;
|
|
149
148
|
}
|
|
150
149
|
export interface RepositoryPanoramaResult extends PanoBase {
|
|
151
150
|
object_type: "Repository";
|
|
@@ -174,5 +173,6 @@ export interface RepositoryPanoramaResult extends PanoBase {
|
|
|
174
173
|
};
|
|
175
174
|
}
|
|
176
175
|
export type ObjectPanoramaResult = ProgressPanoramaResult | DemandPanoramaResult | OrderPanoramaResult | ArbPanoramaResult | RepositoryPanoramaResult;
|
|
176
|
+
export declare function coinOfTypeRaw(typeRaw: unknown): string | null;
|
|
177
177
|
export declare function handleObjectPanorama(v: ProjectInput): Promise<ObjectPanoramaResult>;
|
|
178
178
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Config,LocalMark,query_objects,query_object_last_updated,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{batchReadAddressKeyedFields,fetchObjectLinkerTx}from'../../graph/onchain/sdk-batch.js';const js=a=>{if(typeof a==='bigint')return a['toString']();if(a&&typeof a==='object'&&!Array['isArray'](a)){const b={};for(const [c,d]of Object['entries'](a)){b[c]=js(d);}return b;}if(Array['isArray'](a))return a['map'](js);return a;},str=a=>a===null||a===undefined?null:String(a),ownerAddr=a=>{if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];const c=Object['values'](b)['find'](d=>typeof d==='string'&&d['length']>0x14);if(typeof c==='string')return c;}return null;},num=a=>{if(typeof a==='bigint')return Number(a);if(typeof a==='number')return Number['isFinite'](a)?a:null;if(typeof a==='string'&&a['trim']()!==''){const b=Number(a);return Number['isFinite'](b)?b:null;}return null;},arr=a=>Array['isArray'](a)?a:[],ARB_STATUS_NAMES={0x0:'Principal_confirming',0x1:'Arbitrator_confirming',0x2:'Voting',0x3:'Arbitrated',0x4:'Objectionable',0x5:'Finished',0x6:'Withdrawn'};async function resolveObject(a,b){let c=a;if(!/^0x[0-9a-fA-F]{32,64}$/['test'](c)){const g=await LocalMark['Instance']()['get_address'](c);if(!g)throw new Error('Cannot\x20resolve\x20\x27'+c+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.');c=g;}let d=b??undefined,f=null;if(!d)d=await Config['Instance']()['network_get']();try{const h=await query_objects({'objects':[c],'network':d});f=h?.['objects']?.[0x0]??null;if(!f&&b){const i=await Config['Instance']()['network_get']();if(i&&i!==d){const j=await query_objects({'objects':[c],'network':i,'no_cache':!![]}),k=j?.['objects']?.[0x0]??null;k&&(f=k,d=i);}}}catch(l){throw new Error('Failed\x20to\x20query\x20'+c+'\x20on\x20'+d+':\x20'+(l instanceof Error?l['message']:String(l)));}if(!f)throw new Error(c+'\x20not\x20found\x20on\x20'+d+'.\x20It\x20may\x20not\x20exist\x20on\x20this\x20network.');return f['object']=f['object']??c,{'network':String(d),'obj':f};}async function resolveHead(a,b,c){let d=null,e=[];try{const f=await LocalMark['Instance']()['list']({'address':a});f['length']>0x0&&(d=f[0x0]['name']??null,e=(f[0x0]['tags']??[])['map'](g=>String(g)));}catch{c['push']('head:\x20LocalMark\x20lookup\x20failed');}return{'name':d,'tags':e,'description':str(b['description'])};}async function buildPresenters(a,b,c){const d=[];let e=0x0;try{const f=await fetchObjectLinkerTx(a,b,!![]),g=(f?.['items']??[])['map'](j=>({'service':String(j?.['who']??''),'time':typeof j?.['time']==='number'?j['time']:null}))['filter'](j=>objectTypeFromAddress(j['service'])===ObjectType['Service']);e=g['length'];const h=g['slice'](-0x32)['reverse'](),i=await batchReadAddressKeyedFields(a,h['map'](j=>j['service']),b,!![]);for(const j of h){const k=i['get'](j['service']['toLowerCase']());d['push']({'service':j['service'],'recommend':str(k?.['recommend']),'acceptance_score':num(k?.['acceptance_score']),'feedback':str(k?.['feedback']),'feedback_time':num(k?.['feedback_time']),'update_time':num(k?.['update_time'])??j['time']});}}catch{c['push']('presenters:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}return{'count':e,'items':d};}async function buildRepositoryData(a,b,c){return void a,void b,c['push']('data:\x20per-key\x20enumeration\x20requires\x20the\x20{entity,name}\x20pair\x20—\x20showing\x20count\x20only'),{'count':null,'items':[]};}export async function handleObjectPanorama(b){const c=b['object_address'];if(!c)throw new Error('\x27object_address\x27\x20is\x20required\x20for\x20object_panorama');const {network:d,obj:e}=await resolveObject(c,b['context_network']),f=String(e['object']),g=[],h=await resolveHead(f,e,g),j=String(e['type']??'');if(j==='Progress'){const k=arr(e['session'])[0x0],l=k?{'next_node':str(k['next_node']),'weights':num(k['weights']),'threshold':num(k['threshold']),'forwards':arr(k['forwards'])['map'](n=>{const o=n;return{'forward':str(o['forward'])??'','who':str(o['who']),'accomplished':o['accomplished']===!![],'msg':str(o['msg']),'time':num(o['time'])};})}:null,m={'key':typeof e['machine']==='string'?e['machine']:null,'items':[],'count':0x0};if(m['key'])try{const n=await fetchObjectLinkerTx(m['key'],d,!![]),o=n?.['items']??[];for(const q of o['slice'](-0x32)['reverse']()){const r=typeof q?.['who']==='string'?q['who']:'';if(!r||r['toLowerCase']()===f['toLowerCase']())continue;let s;try{s=objectTypeFromAddress(r);}catch{}if(!s)continue;m['items']['push']({'address':r,'object_type':s,'time':typeof q?.['time']==='number'?q['time']:null});}m['count']=m['items']['length'];}catch{g['push']('related:\x20ObjectLinkerTx(machine)\x20lookup\x20failed');}return{'action':'object_panorama','object':f,'object_type':'Progress','network':d,'head':h,'fields':{'machine':str(e['machine']),'current':str(e['current']),'task':str(e['task']),'history_count':num(e['history_count']),'current_time':num(e['current_time'])},'context_repositories':arr(e['context_repositories'])['map'](t=>String(t)),'operators':arr(e['namedOperator'])['map'](t=>{const u=t;return{'name':str(u['name'])??'','operators':arr(u['operators'])['map'](w=>String(w))};}),'session':l,'related':m,'data_gaps':g};}if(j==='Demand')return{'action':'object_panorama','object':f,'object_type':'Demand','network':d,'head':h,'fields':{'location':str(e['location']),'um':str(e['um']),'permission':str(e['permission']),'presenters_count':num(e['presenters_count'])},'rewards':arr(e['rewards'])['map'](t=>String(t)),'guards':arr(e['guards'])['map'](t=>({'guard':str(t['guard'])??''})),'presenters':await buildPresenters(f,d,g),'data_gaps':g};if(j==='Order'){let t=null;try{const C=await query_object_last_updated({'object':f,'network':d,'previous_transaction':str(e['previousTransaction'])});t=C?.['timestamp_ms']?Number(C['timestamp_ms'])||null:null;}catch{}let u='none',w=null,x=null;const y=str(e['allocation']),z=str(e['progress']),A=[y,z]['filter'](D=>!!D);if(A['length']>0x0)try{const D=await query_objects({'objects':A,'network':d}),E=D?.['objects']??[];if(y){u='pending';const F=E['find'](H=>H?.['object']===y),G=Number(F?.['balance']??NaN);if(Number['isFinite'](G)&&G===0x0)u='allocated';}if(z){const H=E['find'](I=>I?.['object']===z);w=str(H?.['current']),x=num(H?.['current_time']);}}catch{}const B={'key':f,'items':[],'count':0x0};try{const I=await fetchObjectLinkerTx(f,d,!![]),J=I?.['items']??[];for(const K of J['slice'](-0x32)['reverse']()){const L=typeof K?.['who']==='string'?K['who']:'';if(!L||L['toLowerCase']()===f['toLowerCase']())continue;let M;try{M=objectTypeFromAddress(L);}catch{}if(!M)continue;B['items']['push']({'address':L,'object_type':M,'time':typeof K?.['time']==='number'?K['time']:null});}B['count']=B['items']['length'];}catch{g['push']('related:\x20ObjectLinkerTx(order)\x20lookup\x20failed');}return{'action':'object_panorama','object':f,'object_type':'Order','network':d,'head':h,'fields':{'service':str(e['service']),'machine':str(e['machine']),'progress':z,'allocation':y,'discount':str(e['discount']),'amount':str(e['amount']),'owner':ownerAddr(e['builder']??e['owner']),'claimed_by':str(e['claimed_by']),'required_info':str(e['required_info']),'time':num(e['time'])},'updated_ms':t,'related':B,'allocation_state':u,'progress_next':w,'progress_since':x,'items':arr(e['items'])['map'](N=>{const O=N;return{'name':str(O['name']),'price':str(O['price']),'quantity':str(O['quantity']),'wip_hash':str(O['wip_hash'])};}),'disputes':arr(e['dispute'])['map'](N=>String(N)),'agents':arr(e['agent'])['map'](N=>String(N)),'data_gaps':g};}if(j==='Arb'){const N=e['indemnity'];let O=null;try{const S=await query_object_last_updated({'object':f,'network':d,'previous_transaction':str(e['previousTransaction'])});O=S?.['timestamp_ms']?Number(S['timestamp_ms'])||null:null;}catch{}const P=str(e['order']);let Q=null;if(P)try{const T=await query_objects({'objects':[P],'network':d}),U=T?.['objects']?.[0x0];Q=str(U?.['service']);}catch{}const R={'key':f,'items':[],'count':0x0};try{const V=await fetchObjectLinkerTx(f,d,!![]),W=V?.['items']??[];for(const X of W['slice'](-0x32)['reverse']()){const Y=typeof X?.['who']==='string'?X['who']:'';if(!Y||Y['toLowerCase']()===f['toLowerCase']())continue;let Z;try{Z=objectTypeFromAddress(Y);}catch{}if(!Z)continue;R['items']['push']({'address':Y,'object_type':Z,'time':typeof X?.['time']==='number'?X['time']:null});}R['count']=R['items']['length'];}catch{g['push']('related:\x20ObjectLinkerTx(arb)\x20lookup\x20failed');}return{'action':'object_panorama','object':f,'object_type':'Arb','network':d,'head':h,'fields':{'arbitration':str(e['arbitration']),'order':str(e['order']),'service':Q,'fee':str(e['fee']),'feedback':str(e['feedback']),'indemnity':N?{'amount':str(N['amount']),'time':num(N['time'])}:null,'voting_deadline':num(e['voting_deadline']),'objection':str(e['objection']),'status':ARB_STATUS_NAMES[num(e['status'])??-0x1]??str(e['status']),'compensation_time':num(e['compensation_time']),'time':num(e['time']),'type_raw':str(e['type_raw'])},'voted':arr(e['voted'])['map'](a0=>{const a1=a0;return{'voter':str(a1['voter'])??'','agrees':arr(a1['agrees'])['map'](a2=>Number(a2)),'weight':num(a1['weight'])??0x0,'time':num(a1['time'])??0x0};}),'proposition':arr(e['proposition'])['map'](a0=>{const a1=a0;return{'name':str(a1['name'])??'','votes':num(a1['votes'])??0x0};}),'related':R,'updated_ms':O,'data_gaps':g};}if(j==='Repository')return{'action':'object_panorama','object':f,'object_type':'Repository','network':d,'head':h,'fields':{'um':str(e['um']),'permission':str(e['permission']),'data_count':num(e['data_count'])},'policies':arr(e['policies'])['map'](a0=>{const a1=a0;return{'name':str(a1['name'])??'','description':str(a1['description']),'id_from':str(a1['id_from']),'value_type':str(a1['value_type']),'write_guards':arr(a1['write_guard'])['length'],'quote_guard':str(a1['quote_guard'])};}),'rewards':arr(e['rewards'])['map'](a0=>String(a0)),'data_entries':await buildRepositoryData(f,d,g),'data_gaps':g};throw new Error('object_panorama:\x20unsupported\x20object\x20type\x20\x27'+(j||'unknown')+'\x27\x20for\x20'+f+'.\x20'+'Supported:\x20Progress\x20/\x20Demand\x20/\x20Order\x20/\x20Arb\x20/\x20Repository.');}
|
|
1
|
+
import{Config,LocalMark,query_objects,query_object_last_updated,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{batchReadAddressKeyedFields,fetchObjectLinkerTx,ringWindowSaturated}from'../../graph/onchain/sdk-batch.js';import{formatMoneyAnnotation}from'./facet-money.js';const js=a=>{if(typeof a==='bigint')return a['toString']();if(a&&typeof a==='object'&&!Array['isArray'](a)){const b={};for(const [c,d]of Object['entries'](a)){b[c]=js(d);}return b;}if(Array['isArray'](a))return a['map'](js);return a;},str=a=>a===null||a===undefined?null:String(a),ownerAddr=a=>{if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];const c=Object['values'](b)['find'](d=>typeof d==='string'&&d['length']>0x14);if(typeof c==='string')return c;}return null;},num=a=>{if(typeof a==='bigint')return Number(a);if(typeof a==='number')return Number['isFinite'](a)?a:null;if(typeof a==='string'&&a['trim']()!==''){const b=Number(a);return Number['isFinite'](b)?b:null;}return null;},arr=a=>Array['isArray'](a)?a:[];export function coinOfTypeRaw(a){if(typeof a!=='string'||!a)return null;const b=a['match'](/<(.+)>$/),c=b?.[0x1]?.['trim']();return c&&c['includes']('::')?c:null;}const RELATED_PREVIEW_CAP=0x32;async function buildRelatedList(a,b,c,d,e){const f={'key':a,'items':[],'count':0x0,'window_saturated':![],'preview_truncated':![]};if(!a)return f;try{const g=await fetchObjectLinkerTx(a,c,!![]),h=g?.['items']??[];f['window_saturated']=ringWindowSaturated(h['length']);const j=[];for(const k of h){const l=typeof k?.['who']==='string'?k['who']:'';if(!l||l['toLowerCase']()===b['toLowerCase']())continue;let m;try{m=objectTypeFromAddress(l);}catch{}if(!m)continue;j['push']({'address':l,'object_type':m,'time':typeof k?.['time']==='number'?k['time']:null});}f['count']=j['length'],f['items']=j['slice'](-RELATED_PREVIEW_CAP)['reverse'](),f['preview_truncated']=j['length']>f['items']['length'];}catch{d['push']('related:\x20ObjectLinkerTx('+e+')\x20lookup\x20failed');}return f;}const ARB_STATUS_NAMES={0x0:'Principal_confirming',0x1:'Arbitrator_confirming',0x2:'Voting',0x3:'Arbitrated',0x4:'Objectionable',0x5:'Finished',0x6:'Withdrawn'};async function resolveObject(a,b){let c=a;if(!/^0x[0-9a-fA-F]{32,64}$/['test'](c)){const g=await LocalMark['Instance']()['get_address'](c);if(!g)throw new Error('Cannot\x20resolve\x20\x27'+c+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.');c=g;}let d=b??undefined,f=null;if(!d)d=await Config['Instance']()['network_get']();try{const h=await query_objects({'objects':[c],'network':d});f=h?.['objects']?.[0x0]??null;if(!f&&b){const i=await Config['Instance']()['network_get']();if(i&&i!==d){const j=await query_objects({'objects':[c],'network':i,'no_cache':!![]}),k=j?.['objects']?.[0x0]??null;k&&(f=k,d=i);}}}catch(l){throw new Error('Failed\x20to\x20query\x20'+c+'\x20on\x20'+d+':\x20'+(l instanceof Error?l['message']:String(l)));}if(!f)throw new Error(c+'\x20not\x20found\x20on\x20'+d+'.\x20It\x20may\x20not\x20exist\x20on\x20this\x20network.');return f['object']=f['object']??c,{'network':String(d),'obj':f};}async function resolveHead(a,b,c){let d=null,e=[];try{const f=await LocalMark['Instance']()['list']({'address':a});f['length']>0x0&&(d=f[0x0]['name']??null,e=(f[0x0]['tags']??[])['map'](g=>String(g)));}catch{c['push']('head:\x20LocalMark\x20lookup\x20failed');}return{'name':d,'tags':e,'description':str(b['description'])};}async function buildPresenters(a,b,c){const d=[];let e=0x0,f=![];try{const g=await fetchObjectLinkerTx(a,b,!![]),h=Array['isArray'](g?.['items'])?g['items']:[];f=ringWindowSaturated(h['length']);const i=h['map'](l=>({'service':String(l?.['who']??''),'time':typeof l?.['time']==='number'?l['time']:null}))['filter'](l=>objectTypeFromAddress(l['service'])===ObjectType['Service']);e=i['length'];const j=i['slice'](-0x32)['reverse'](),k=await batchReadAddressKeyedFields(a,j['map'](l=>l['service']),b,!![]);for(const l of j){const m=k['get'](l['service']['toLowerCase']());d['push']({'service':l['service'],'recommend':str(m?.['recommend']),'acceptance_score':num(m?.['acceptance_score']),'feedback':str(m?.['feedback']),'feedback_time':num(m?.['feedback_time']),'update_time':num(m?.['update_time'])??l['time']});}}catch{c['push']('presenters:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}return{'count':e,'window_saturated':f,'preview_truncated':e>d['length'],'items':d};}async function buildRepositoryData(a,b,c){return void a,void b,c['push']('data:\x20per-key\x20enumeration\x20requires\x20the\x20{entity,name}\x20pair\x20—\x20showing\x20count\x20only'),{'count':null,'items':[]};}export async function handleObjectPanorama(b){const c=b['object_address']??b['filter'];if(!c)throw new Error('\x27object_address\x27\x20is\x20required\x20for\x20object_panorama\x20(a\x20LocalMark\x20NAME\x20is\x20also\x20accepted).\x20Example:\x20{\x22query_type\x22:\x20\x22object_panorama\x22,\x20\x22object_address\x22:\x20\x220x...\x22}');const {network:d,obj:e}=await resolveObject(c,b['context_network']),f=String(e['object']),g=[],h=await resolveHead(f,e,g),i=String(e['type']??'');if(i==='Progress'){const j=arr(e['session'])[0x0],k=j?{'next_node':str(j['next_node']),'weights':num(j['weights']),'threshold':num(j['threshold']),'forwards':arr(j['forwards'])['map'](m=>{const n=m;return{'forward':str(n['forward'])??'','who':str(n['who']),'accomplished':n['accomplished']===!![],'msg':str(n['msg']),'time':num(n['time'])};})}:null,l=await buildRelatedList(typeof e['machine']==='string'?e['machine']:null,f,d,g,'machine');return{'action':'object_panorama','object':f,'object_type':'Progress','network':d,'head':h,'fields':{'machine':str(e['machine']),'current':str(e['current']),'task':str(e['task']),'history_count':num(e['history_count']),'current_time':num(e['current_time'])},'context_repositories':arr(e['context_repositories'])['map'](m=>String(m)),'operators':arr(e['namedOperator'])['map'](m=>{const n=m;return{'name':str(n['name'])??'','operators':arr(n['operators'])['map'](q=>String(q))};}),'session':k,'related':l,'data_gaps':g};}if(i==='Demand')return{'action':'object_panorama','object':f,'object_type':'Demand','network':d,'head':h,'fields':{'location':str(e['location']),'um':str(e['um']),'permission':str(e['permission']),'presenters_count':num(e['presenters_count'])},'rewards':arr(e['rewards'])['map'](m=>String(m)),'guards':arr(e['guards'])['map'](m=>({'guard':str(m['guard'])??''})),'presenters':await buildPresenters(f,d,g),'data_gaps':g};if(i==='Order'){let m=null;try{const C=await query_object_last_updated({'object':f,'network':d,'previous_transaction':str(e['previousTransaction'])});m=C?.['timestamp_ms']?Number(C['timestamp_ms'])||null:null;}catch{}let n='none',o=null,q=null;const r=str(e['allocation']),t=str(e['progress']),u=str(e['service']),w=[r,t,u]['filter'](D=>!!D);let x=null;if(w['length']>0x0)try{const D=await query_objects({'objects':w,'network':d}),E=D?.['objects']??[];if(r){n='pending';const F=E['find'](H=>H?.['object']===r),G=Number(F?.['balance']??NaN);if(Number['isFinite'](G)&&G===0x0)n='allocated';}if(t){const H=E['find'](I=>I?.['object']===t);o=str(H?.['current']),q=num(H?.['current_time']);}if(u){const I=E['find'](J=>J?.['object']===u);x=coinOfTypeRaw(I?.['type_raw']??I?.['type']);}}catch{}const y=await buildRelatedList(f,f,d,g,'order'),z=str(e['amount']),A=await formatMoneyAnnotation(z,x,d),B=await Promise['all'](arr(e['items'])['map'](async J=>{const K=J,L=str(K['price']),M=await formatMoneyAnnotation(L,x,d);return{'name':str(K['name']),'price':L,'price_display':M['display'],'price_tip':M['tip'],'quantity':str(K['quantity']),'wip_hash':str(K['wip_hash'])};}));return{'action':'object_panorama','object':f,'object_type':'Order','network':d,'head':h,'coin_type':x,'fields':{'service':u,'machine':str(e['machine']),'progress':t,'allocation':r,'discount':str(e['discount']),'amount':z,'amount_display':A['display'],'amount_tip':A['tip'],'owner':ownerAddr(e['builder']??e['owner']),'claimed_by':str(e['claimed_by']),'required_info':str(e['required_info']),'time':num(e['time'])},'updated_ms':m,'related':y,'allocation_state':n,'progress_next':o,'progress_since':q,'items':B,'disputes':arr(e['dispute'])['map'](J=>String(J)),'agents':arr(e['agent'])['map'](J=>String(J)),'data_gaps':g};}if(i==='Arb'){const J=e['indemnity'];let K=null;try{const T=await query_object_last_updated({'object':f,'network':d,'previous_transaction':str(e['previousTransaction'])});K=T?.['timestamp_ms']?Number(T['timestamp_ms'])||null:null;}catch{}const L=str(e['order']);let M=null;if(L)try{const U=await query_objects({'objects':[L],'network':d}),V=U?.['objects']?.[0x0];M=str(V?.['service']);}catch{}const N=await buildRelatedList(f,f,d,g,'arb'),O=coinOfTypeRaw(e['type_raw']),P=str(e['fee']),Q=await formatMoneyAnnotation(P,O,d),R=J?str(J['amount']):null,S=await formatMoneyAnnotation(R,O,d);return{'action':'object_panorama','object':f,'object_type':'Arb','network':d,'head':h,'coin_type':O,'fields':{'arbitration':str(e['arbitration']),'order':str(e['order']),'service':M,'fee':P,'fee_display':Q['display'],'fee_tip':Q['tip'],'feedback':str(e['feedback']),'indemnity':J?{'amount':R,'amount_display':S['display'],'amount_tip':S['tip'],'time':num(J['time'])}:null,'voting_deadline':num(e['voting_deadline']),'objection':str(e['objection']),'status':ARB_STATUS_NAMES[num(e['status'])??-0x1]??str(e['status']),'compensation_time':num(e['compensation_time']),'time':num(e['time']),'type_raw':str(e['type_raw'])},'voted':arr(e['voted'])['map'](W=>{const X=W;return{'voter':str(X['voter'])??'','agrees':arr(X['agrees'])['map'](Y=>Number(Y)),'weight':num(X['weight'])??0x0,'time':num(X['time'])??0x0};}),'proposition':arr(e['proposition'])['map'](W=>{const X=W;return{'name':str(X['name'])??'','votes':num(X['votes'])??0x0};}),'related':N,'updated_ms':K,'data_gaps':g};}if(i==='Repository')return{'action':'object_panorama','object':f,'object_type':'Repository','network':d,'head':h,'fields':{'um':str(e['um']),'permission':str(e['permission']),'data_count':num(e['data_count'])},'policies':arr(e['policies'])['map'](W=>{const X=W;return{'name':str(X['name'])??'','description':str(X['description']),'id_from':str(X['id_from']),'value_type':str(X['value_type']),'write_guards':arr(X['write_guard'])['length'],'quote_guard':str(X['quote_guard'])};}),'rewards':arr(e['rewards'])['map'](W=>String(W)),'data_entries':await buildRepositoryData(f,d,g),'data_gaps':g};throw new Error('object_panorama:\x20unsupported\x20object\x20type\x20\x27'+(i||'unknown')+'\x27\x20for\x20'+f+'.\x20'+'Supported:\x20Progress\x20/\x20Demand\x20/\x20Order\x20/\x20Arb\x20/\x20Repository.');}
|
|
@@ -43,7 +43,7 @@ export interface AggregateRisksInput {
|
|
|
43
43
|
name?: string;
|
|
44
44
|
}[];
|
|
45
45
|
}
|
|
46
|
-
export declare function handleAggregateRisks(v: AggregateRisksInput): {
|
|
46
|
+
export declare function handleAggregateRisks(v: AggregateRisksInput): Promise<{
|
|
47
47
|
intent_echo?: {
|
|
48
48
|
primary_object: string;
|
|
49
49
|
industry: string;
|
|
@@ -75,7 +75,7 @@ export declare function handleAggregateRisks(v: AggregateRisksInput): {
|
|
|
75
75
|
}>>;
|
|
76
76
|
warnings: string[];
|
|
77
77
|
action: "aggregate_risks";
|
|
78
|
-
}
|
|
78
|
+
}>;
|
|
79
79
|
export interface TraceSubstepsInput {
|
|
80
80
|
project?: string;
|
|
81
81
|
version?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{analyzeBusinessIntent}from'./business-puzzle.js';import{Config}from'@wowok/wowok/w/local';import{aggregateProjectRisks}from'./risk-aggregator.js';import{traceSubsteps}from'../../task/substep-trace.js';import{updateStageCache}from'./index.js';import{checkObjectReuseRules,checkImmutabilityRules}from'../../knowledge/safety-rules.js';export function handleAnalyzeIntent(a){const b=(a['intent']??a['project_description']??a['project_name']??'')['trim']();if(!b)throw new Error('analyze_intent\x20requires\x20\x27intent\x27\x20(business\x20description\x20text).\x20'+'Example:\x20intent=\x27I\x20want\x20to\x20open\x20an\x20online\x20toy\x20store\x20with\x20escrow\x20and\x20dispute\x20resolution\x27.');const c=analyzeBusinessIntent({'user_intent':b,'project_name':a['project_name'],'target_objects':a['target_objects'],'industry':a['project_industry']}),d=(a['project']??'')['trim']();return d&&updateStageCache(d,(a['version']??'v1')['trim'](),{'stage':'puzzle','puzzles':c['puzzles'],'business_intent':b,'industry':c['intent_parsed']['industry']}),{'action':'analyze_intent',...c};}export function handleAggregateRisks(a){const b=(a['project']??'')['trim']();if(!b)throw new Error('aggregate_risks\x20requires\x20\x27project\x27\x20(project\x20prefix,\x20e.g.\x20\x27myshop\x27).\x20'+'Use\x20one\x20stable\x20prefix\x20per\x20build\x20so\x20findings\x20map\x20to\x20the\x20service-build\x20stage\x20cache\x20namespace.');const c=(a['version']??'v1')['trim']();let d,e;if(a['puzzles'])d=Object['fromEntries'](Object['entries'](a['puzzles'])['map'](([h,i])=>[h,{'puzzle':i['puzzle'],'completeness':i['completeness'],'missing_dimensions':i['missing_dimensions']}]));else{const h=(a['intent']??a['project_description']??a['project_name']??'')['trim']();if(!h)throw new Error('aggregate_risks\x20requires\x20\x27puzzles\x27\x20(from\x20a\x20prior\x20analyze_intent\x20result)\x20'+'OR\x20\x27intent\x27\x20(business\x20description\x20—\x20analyze_intent\x20runs\x20automatically\x20first).');const i=analyzeBusinessIntent({'user_intent':h,'project_name':a['project_name'],'industry':a['project_industry']});d=i['puzzles'],e={'primary_object':i['intent_parsed']['primary_object'],'industry':i['intent_parsed']['industry'],'overall_completeness':i['overall_completeness']};}const f=aggregateProjectRisks({'project_prefix':b,'version':c,'industry':a['project_industry'],'puzzles':d,'severity_threshold':a['severity_threshold'],'user_confirmed_high_risks':a['user_confirmed_high_risks']}),g=[...a['planned_objects']?checkObjectReuseRules(a['planned_objects']):[],...a['planned_operations']?checkImmutabilityRules(a['planned_operations']):[]];return updateStageCache(b,c,{'stage':'risk','risk_status':f['status'],'risk_can_proceed':f['status']==='RISK_PASSED'}),{'action':'aggregate_risks',...f,...g['length']>0x0?{'safety_findings':g}:{},...e?{'intent_echo':e}:{}};}export async function handleTraceSubsteps(a){const b=(a['project']??'')['trim']();if(!b)throw new Error('trace_substeps\x20requires\x20\x27project\x27\x20(project\x20prefix,\x20e.g.\x20\x27myshop\x27).');if(!a['substeps']||a['substeps']['length']===0x0)throw new Error('trace_substeps\x20requires\x20\x27substeps\x27\x20(non-empty\x20array\x20of\x20substep\x20execution\x20records,\x20'+'63-spec\x20§2.1).\x20Construct\x20them\x20from\x20your\x20deployment\x20execution\x20trace:\x20each\x20onchain_operations\x20'+'call\x20=\x20one\x20substep\x20with\x20step_id\x20\x27T<step>.<substep>\x27,\x20input_refs\x20pointing\x20at\x20upstream\x20substeps.');const c=traceSubsteps({'project_prefix':b,'version':(a['version']??'v1')['trim'](),'network':a['network']??await Config['Instance']()['network_get'](),'substeps':a['substeps'],'edges':a['substep_edges']});return updateStageCache(b,(a['version']??'v1')['trim'](),{'stage':'substeps','trace_coherent':c['coherent'],'trace_can_proceed':c['coherent']}),{'action':'trace_substeps',...c};}
|
|
1
|
+
import{analyzeBusinessIntent}from'./business-puzzle.js';import{Config}from'@wowok/wowok/w/local';import{aggregateProjectRisks}from'./risk-aggregator.js';import{traceSubsteps}from'../../task/substep-trace.js';import{updateStageCache}from'./index.js';import{checkObjectReuseRules,checkImmutabilityRules}from'../../knowledge/safety-rules.js';export function handleAnalyzeIntent(a){const b=(a['intent']??a['project_description']??a['project_name']??'')['trim']();if(!b)throw new Error('analyze_intent\x20requires\x20\x27intent\x27\x20(business\x20description\x20text).\x20'+'Example:\x20intent=\x27I\x20want\x20to\x20open\x20an\x20online\x20toy\x20store\x20with\x20escrow\x20and\x20dispute\x20resolution\x27.');const c=analyzeBusinessIntent({'user_intent':b,'project_name':a['project_name'],'target_objects':a['target_objects'],'industry':a['project_industry']}),d=(a['project']??'')['trim']();return d&&updateStageCache(d,(a['version']??'v1')['trim'](),{'stage':'puzzle','puzzles':c['puzzles'],'business_intent':b,'industry':c['intent_parsed']['industry']}),{'action':'analyze_intent',...c};}export async function handleAggregateRisks(a){const b=(a['project']??'')['trim']();if(!b)throw new Error('aggregate_risks\x20requires\x20\x27project\x27\x20(project\x20prefix,\x20e.g.\x20\x27myshop\x27).\x20'+'Use\x20one\x20stable\x20prefix\x20per\x20build\x20so\x20findings\x20map\x20to\x20the\x20service-build\x20stage\x20cache\x20namespace.');const c=(a['version']??'v1')['trim']();let d,e;if(a['puzzles'])d=Object['fromEntries'](Object['entries'](a['puzzles'])['map'](([h,i])=>[h,{'puzzle':i['puzzle'],'completeness':i['completeness'],'missing_dimensions':i['missing_dimensions']}]));else{const h=(a['intent']??a['project_description']??a['project_name']??'')['trim']();if(!h)throw new Error('aggregate_risks\x20requires\x20\x27puzzles\x27\x20(from\x20a\x20prior\x20analyze_intent\x20result)\x20'+'OR\x20\x27intent\x27\x20(business\x20description\x20—\x20analyze_intent\x20runs\x20automatically\x20first).');const i=analyzeBusinessIntent({'user_intent':h,'project_name':a['project_name'],'industry':a['project_industry']});d=i['puzzles'],e={'primary_object':i['intent_parsed']['primary_object'],'industry':i['intent_parsed']['industry'],'overall_completeness':i['overall_completeness']};}const f=await aggregateProjectRisks({'project_prefix':b,'version':c,'industry':a['project_industry'],'puzzles':d,'severity_threshold':a['severity_threshold'],'user_confirmed_high_risks':a['user_confirmed_high_risks']}),g=[...a['planned_objects']?checkObjectReuseRules(a['planned_objects']):[],...a['planned_operations']?checkImmutabilityRules(a['planned_operations']):[]];return updateStageCache(b,c,{'stage':'risk','risk_status':f['status'],'risk_can_proceed':f['status']==='RISK_PASSED'}),{'action':'aggregate_risks',...f,...g['length']>0x0?{'safety_findings':g}:{},...e?{'intent_echo':e}:{}};}export async function handleTraceSubsteps(a){const b=(a['project']??'')['trim']();if(!b)throw new Error('trace_substeps\x20requires\x20\x27project\x27\x20(project\x20prefix,\x20e.g.\x20\x27myshop\x27).');if(!a['substeps']||a['substeps']['length']===0x0)throw new Error('trace_substeps\x20requires\x20\x27substeps\x27\x20(non-empty\x20array\x20of\x20substep\x20execution\x20records,\x20'+'63-spec\x20§2.1).\x20Construct\x20them\x20from\x20your\x20deployment\x20execution\x20trace:\x20each\x20onchain_operations\x20'+'call\x20=\x20one\x20substep\x20with\x20step_id\x20\x27T<step>.<substep>\x27,\x20input_refs\x20pointing\x20at\x20upstream\x20substeps.');const c=traceSubsteps({'project_prefix':b,'version':(a['version']??'v1')['trim'](),'network':a['network']??await Config['Instance']()['network_get'](),'substeps':a['substeps'],'edges':a['substep_edges']});return updateStageCache(b,(a['version']??'v1')['trim'](),{'stage':'substeps','trace_coherent':c['coherent'],'trace_can_proceed':c['coherent']}),{'action':'trace_substeps',...c};}
|
|
@@ -21,6 +21,7 @@ export interface AggregatedRisk {
|
|
|
21
21
|
actual_value?: unknown;
|
|
22
22
|
expected_value?: unknown;
|
|
23
23
|
rule_source?: string;
|
|
24
|
+
proposal_node?: string;
|
|
24
25
|
};
|
|
25
26
|
}
|
|
26
27
|
export interface RiskAggregationResult {
|
|
@@ -49,7 +50,7 @@ export interface RiskAggregationResult {
|
|
|
49
50
|
}>>;
|
|
50
51
|
warnings: string[];
|
|
51
52
|
}
|
|
52
|
-
export declare function aggregateProjectRisks(input: RiskAggregationInput): RiskAggregationResult
|
|
53
|
+
export declare function aggregateProjectRisks(input: RiskAggregationInput): Promise<RiskAggregationResult>;
|
|
53
54
|
export declare function sortFindings(findings: AggregatedRisk[]): AggregatedRisk[];
|
|
54
55
|
export declare function countBySeverity(findings: AggregatedRisk[]): Record<RiskSeverity, number>;
|
|
55
56
|
export declare function determineStatus(severity_summary: Record<RiskSeverity, number>, threshold: RiskSeverity, user_confirmed_high_risks: string[], findings: AggregatedRisk[]): RiskAggregationResult["status"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ENTRYPOINT}from'@wowok/wowok';import{buildProposalGraph,buildViewport,runNodeAnalyzers}from'../../graph/onchain/index.js';import{RULE_NODE_ANALYZERS}from'../../knowledge/rule-node-analyzers.js';const SEVERITY_ORDER={'CRITICAL':0x0,'HIGH':0x1,'MEDIUM':0x2,'LOW':0x3,'INFO':0x4},ALL_SEVERITIES=['CRITICAL','HIGH','MEDIUM','LOW','INFO'],SEVERITY_OF_FINDING={'critical':'CRITICAL','high':'HIGH','medium':'MEDIUM','low':'LOW','info':'INFO'};function findingToAggregatedRisk(a,b,c){const d=a['ruleId']??'?',e='\x20('+d+')',g=a['title']['endsWith'](e)?a['title']['slice'](0x0,a['title']['length']-e['length']):a['title'];return{'risk_rule_id':d,'object_type':b,'entry_id':c,'severity':SEVERITY_OF_FINDING[a['severity']]??'INFO','message':g,'fix_suggestion':a['suggestion']??'','details':{...a['evidence']?{'field_path':a['evidence']}:{},'rule_source':a['id']['slice'](0x0,a['id']['indexOf'](':')),'proposal_node':a['path'][0x0]}};}export async function aggregateProjectRisks(a){const b=[];(!a||!a['project_prefix'])&&b['push']('input.project_prefix\x20is\x20empty');const c=a?.['puzzles']??{},d=await buildProposalGraph(c,{'network':ENTRYPOINT['Testnet']});for(const o of d['nodes']['values']()){o['proposal']&&!o['objectType']&&b['push']('No\x20analyzer\x20vocabulary\x20for\x20puzzle\x20key\x20\x27'+o['proposal']['sourceKey']+'\x27\x20—\x20key\x20skipped');}const e=buildViewport(d,d['seed'],'neutral'),g=runNodeAnalyzers(e,RULE_NODE_ANALYZERS),h=[];for(const p of g){if(p['ruleId']==null)continue;const q=p['path'][0x0]??'',r=d['nodes']['get'](q),s=r?.['proposal']?.['sourceKey']??q['replace'](/^proposal::/,'');h['push'](findingToAggregatedRisk(p,s,(a['project_prefix']??'project')+'_'+s));}sortFindings(h);const i=countBySeverity(h),j=a['severity_threshold']??'HIGH',k=determineStatus(i,j,a['user_confirmed_high_risks']??[],h);let l;k==='RISK_PENDING_CONFIRM'&&(l=h['filter'](t=>t['severity']==='HIGH')['filter'](t=>!(a['user_confirmed_high_risks']??[])['includes'](t['risk_rule_id']))['map'](t=>({'risk_rule_id':t['risk_rule_id'],'description':t['message'],'fix_suggestion':t['fix_suggestion'],'object_type':t['object_type'],'entry_id':t['entry_id']})));const m={};for(const t of h){const u=t['object_type'];!m[u]&&(m[u]=[]),m[u]['push']({'risk_rule_id':t['risk_rule_id'],'severity':t['severity'],'message':t['message'],'fix_suggestion':t['fix_suggestion'],'entry_id':t['entry_id']});}return{'namespace':{'prefix':a['project_prefix']??'','version':a['version']??'','industry':a['industry']??'general'},'findings':h,'severity_summary':i,'status':k,'pending_confirmations':l,'calibrated_at':Date['now'](),'fix_suggestions_grouped':m,'warnings':b};}export function sortFindings(a){return a['sort']((c,d)=>{const e=SEVERITY_ORDER[c['severity']]-SEVERITY_ORDER[d['severity']];if(e!==0x0)return e;if(c['object_type']!==d['object_type'])return c['object_type']['localeCompare'](d['object_type']);return c['risk_rule_id']['localeCompare'](d['risk_rule_id']);});}export function countBySeverity(a){const b={'CRITICAL':0x0,'HIGH':0x0,'MEDIUM':0x0,'LOW':0x0,'INFO':0x0};for(const c of a){b[c['severity']]++;}return b;}export function determineStatus(a,b,c,d){if(a['CRITICAL']>0x0)return'RISK_BLOCKED';const e=SEVERITY_ORDER[b];if(a['HIGH']>0x0&&e<=SEVERITY_ORDER['HIGH']){const f=d['filter'](g=>g['severity']==='HIGH'&&!c['includes'](g['risk_rule_id']));if(f['length']>0x0)return'RISK_PENDING_CONFIRM';}if(a['MEDIUM']>0x0&&e<=SEVERITY_ORDER['MEDIUM'])return'RISK_BLOCKED';if(a['LOW']>0x0&&e<=SEVERITY_ORDER['LOW'])return'RISK_BLOCKED';return'RISK_PASSED';}export function getCriticalRisks(a){if(!a?.['findings'])return[];return a['findings']['filter'](b=>b['severity']==='CRITICAL');}export function summarizeRiskReport(a){if(!a)return'(no\x20result)';const b=[];b['push']('#\x20Risk\x20Aggregation\x20Report'),b['push'](''),b['push']('-\x20Project:\x20'+a['namespace']['prefix']+'_'+a['namespace']['version']),b['push']('-\x20Status:\x20'+a['status']),b['push']('-\x20Calibrated\x20at:\x20'+new Date(a['calibrated_at'])['toISOString']()),b['push'](''),b['push']('##\x20Severity\x20Summary'),b['push'](''),b['push']('|\x20Severity\x20|\x20Count\x20|'),b['push']('|----------|-------|');for(const c of ALL_SEVERITIES){b['push']('|\x20'+c+'\x20|\x20'+(a['severity_summary'][c]??0x0)+'\x20|');}b['push']('');if(a['findings']['length']===0x0)return b['push']('No\x20risks\x20found.'),b['join']('\x0a');b['push']('##\x20Findings\x20(sorted\x20by\x20severity)'),b['push']('');for(const d of a['findings']){b['push']('-\x20**['+d['severity']+']\x20'+d['risk_rule_id']+'**\x20('+d['object_type']+'\x20/\x20'+d['entry_id']+')'),b['push']('\x20\x20-\x20'+d['message']),d['fix_suggestion']&&b['push']('\x20\x20-\x20Fix:\x20'+d['fix_suggestion']),d['details']?.['proposal_node']&&b['push']('\x20\x20-\x20Evaluated\x20on\x20'+d['details']['proposal_node']+'\x20via\x20'+(d['details']['rule_source']??'unknown\x20analyzer'));}if(a['warnings']['length']>0x0){b['push'](''),b['push']('##\x20Warnings');for(const e of a['warnings'])b['push']('-\x20'+e);}return b['join']('\x0a');}
|
|
@@ -65,16 +65,10 @@ export interface PanoramaPermissionSummary {
|
|
|
65
65
|
tags: string[];
|
|
66
66
|
updated_timestamp_ms: string | null;
|
|
67
67
|
}
|
|
68
|
-
export interface PanoramaTrust {
|
|
69
|
-
trust_score: number;
|
|
70
|
-
trust_level: string;
|
|
71
|
-
trust_summary: string;
|
|
72
|
-
risk_score: number | null;
|
|
73
|
-
risk_level: string | null;
|
|
74
|
-
completeness: number | null;
|
|
75
|
-
}
|
|
76
68
|
export interface PanoramaRecentOrders {
|
|
77
69
|
count: number;
|
|
70
|
+
window_saturated: boolean;
|
|
71
|
+
preview_truncated: boolean;
|
|
78
72
|
items: {
|
|
79
73
|
order: string;
|
|
80
74
|
time: number;
|
|
@@ -113,6 +107,8 @@ export interface ServicePanoramaResult {
|
|
|
113
107
|
setting_lock_duration: string | null;
|
|
114
108
|
customer_required: string[];
|
|
115
109
|
compensation_fund: string | null;
|
|
110
|
+
compensation_fund_display: string;
|
|
111
|
+
compensation_fund_tip: string;
|
|
116
112
|
sales: PanoramaSale[];
|
|
117
113
|
machine: string | null;
|
|
118
114
|
buy_guard: string | null;
|
|
@@ -159,7 +155,6 @@ export interface ServicePanoramaResult {
|
|
|
159
155
|
}[];
|
|
160
156
|
};
|
|
161
157
|
supply_chain: SupplyChainGraph | null;
|
|
162
|
-
trust: PanoramaTrust | null;
|
|
163
158
|
business_report: BusinessReport | null;
|
|
164
159
|
recent_orders: PanoramaRecentOrders | null;
|
|
165
160
|
data_gaps: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Config,LocalMark,query_serviceContext,query_object_last_updated,query_affiliations,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{generateBusinessReport}from'./reverse-mapping.js';import{resolveSupplyChainGraph}from'../../knowledge/supply-chain.js';import{batchQueryObjectsByIds,fetchServiceOrders}from'../../graph/onchain/sdk-batch.js';import{formatChainValue}from'../../knowledge/fund-layer.js';import{buildMachineGraph}from'./machine-nodes.js';import{computeServiceTrustSummary}from'../../tools/handlers/trust.js';function balanceStr(a){if(a===null||a===undefined)return null;if(typeof a==='bigint')return a['toString']();return String(a);}function ownerAddr(a){if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];}return null;}function requireField(a,b){if(a===undefined||a===null)throw new Error('\x27'+b+'\x27\x20is\x20required\x20for\x20this\x20action');return a;}function summarizeGuard(a){if(!a)return null;const b=a,c=Array['isArray'](b['table'])?b['table']:[],d=c['filter'](e=>e?.['b_submission']===!![])['length'];return{'address':b['object']??'','description':b['description']??null,'rep':typeof b['rep']==='boolean'?b['rep']:null,'table_entry_count':c['length'],'submission_slot_count':d,'relies':Array['isArray'](b['relies'])?b['relies']['filter'](e=>typeof e==='string'):[],'relies_logic_and':typeof b['relies_logic_and']==='boolean'?b['relies_logic_and']:null};}function summarizePermission(a,b){if(!a)return null;const c=a,d=Array['isArray'](c['admin'])?c['admin']:[],e=d[0x0],f=typeof e==='string'?e:typeof e?.['account']==='string'?e['account']:c['builder']??null;return{'address':c['object']??'','description':c['description']??null,'builder':c['builder']??null,'owner':f,'owner_name':b?.['name']??null,'admin_count':d['length'],'entity_count':typeof c['entity_count']==='number'?c['entity_count']:null,'perm_remark':Array['isArray'](c['perm_remark'])?c['perm_remark']['map'](g=>({'index':String(g?.['index']??''),'remark':typeof g?.['remark']==='string'?g['remark']:''})):[],'um':c['um']??null,'tags':b?.['tags']??[],'updated_timestamp_ms':b?.['updated_at_ms']!=null?String(b['updated_at_ms']):null};}async function markOf(a){if(!a)return{'name':null,'tags':[],'updated_at_ms':null};try{const b=await LocalMark['Instance']()['get'](a);if(b)return{'name':b['name']??null,'tags':Array['isArray'](b['tags'])?b['tags']:[],'updated_at_ms':typeof b['updatedAt']==='number'?b['updatedAt']:null};}catch{}try{const c=await LocalMark['Instance']()['list']({'address':a}),d=c?.[0x0];if(d)return{'name':d['name']??null,'tags':Array['isArray'](d['tags'])?d['tags']:[],'updated_at_ms':typeof d['updatedAt']==='number'?d['updatedAt']:null};}catch{}return{'name':null,'tags':[],'updated_at_ms':null};}async function markOfMany(a){const b=[...new Set(a['filter'](e=>!!e))],c=await Promise['all'](b['map'](e=>markOf(e))),d=new Map();for(let e=0x0;e<b['length'];e++)d['set'](b[e],c[e]);return d;}export async function handleServicePanorama(b){const c=requireField(b['service_address'],'service_address'),d=b['context_network']??undefined;let f=d??await Config['Instance']()['network_get']();const h=[];let j=c;if(!/^0x[0-9a-fA-F]{32,64}$/['test'](c)){const S=await LocalMark['Instance']()['get_address'](c);if(!S)throw new Error('Cannot\x20resolve\x20service\x20\x27'+c+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.\x20'+'Pass\x20the\x200x\x20Service\x20object\x20address\x20directly\x20or\x20register\x20the\x20name\x20via\x20local_mark_operation.');j=S;}let k=await query_serviceContext({'service':j,'include_machine_nodes':!![],'network':f});if(!k?.['service']&&d){const T=await Config['Instance']()['network_get']();T&&T!==f&&(f=T,k=await query_serviceContext({'service':j,'include_machine_nodes':!![],'network':f}));}const l=k['service'];j=l['object']??j;const m=new Set(),n=U=>{if(U)m['add'](U);};n(j),n(l['machine']),n(l['permission']),n(l['um']);for(const U of l['arbitrations']??[])n(U);for(const V of l['rewards']??[])n(V);for(const W of l['repositories']??[])n(W);const p=k['permission'];if(p){const X=Array['isArray'](p['admin'])?p['admin']:[];X[0x0]&&n(typeof X[0x0]==='string'?X[0x0]:X[0x0]?.['account']);if(p['builder'])n(p['builder']);}const q=await markOfMany([...m]),u=q['get'](j)??{'name':null,'tags':[],'updated_at_ms':null},w=u['name'],x=Y=>Y?q['get'](Y)??{'name':null,'tags':[],'updated_at_ms':null}:{'name':null,'tags':[],'updated_at_ms':null};let y=null;const z=k['machine'],A=k['machine_nodes']??[];if(z||A['length']>0x0){const {nodes:Y,edges:Z}=buildMachineGraph(A);y={'address':z?.['object']??l['machine']??'','name':x(z?.['object']??l['machine'])['name'],'description':z?.['description']??null,'published':typeof z?.['bPublished']==='boolean'?z['bPublished']:null,'paused':typeof z?.['bPaused']==='boolean'?z['bPaused']:null,'node_count':typeof z?.['node_count']==='number'?z['node_count']:null,'consensus_repositories':Array['isArray'](z?.['consensus_repositories'])?z['consensus_repositories']:[],'nodes':Y,'edges':Z};}let B=null;try{const a0=await query_object_last_updated({'object':j,'network':f});a0?.['timestamp_ms']&&(B={'timestamp_ms':a0['timestamp_ms'],'digest':a0['digest']??null,'sender':a0['sender']??null});}catch{h['push']('onchain_last_updated:\x20query\x20failed\x20(non-blocking)');}let C=null;try{C=await computeServiceTrustSummary({'service':j,'depth':'evaluate','network':f});}catch{h['push']('trust:\x20evaluation\x20failed\x20(non-blocking)');}let D=null;try{D=await resolveSupplyChainGraph(j,f);}catch{h['push']('supply_chain:\x20resolution\x20failed\x20(non-blocking)');}let E=null;try{const a1=[l];for(const a2 of Object['values'](k['referenced']??{})){if(a2&&a2['object']!==j)a1['push'](a2);}E=generateBusinessReport({'objects':a1,'machine_nodes':A['map'](a3=>({'name':a3['name']}))});}catch{h['push']('business_report:\x20generation\x20failed\x20(non-blocking)');}const F=l?.['type_raw']??l?.['type']??'',G=F['match'](/<(.+)>$/),H=G?G[0x1]:null,I=(a3,a4)=>{const a5=[];return a3?a5['push']('Pricing\x20&\x20settlement\x20coin:\x20'+a3+'\x20—\x20the\x20Service\x27s\x20generic\x20T,\x20FIXED\x20at\x20creation\x20(immutable).\x20Sales\x20prices\x20and\x20order\x20amounts\x20are\x20denominated\x20in\x20this\x20exact\x20token;\x20buyers\x20must\x20hold\x20it\x20to\x20order.'):a5['push']('Pricing\x20&\x20settlement\x20coin:\x20unavailable\x20from\x20the\x20Service\x20type\x20(no\x20generic\x20found)\x20—\x20treat\x20amounts\x20as\x20raw\x20smallest\x20units.'),a5['push']('To\x20price\x20in\x20a\x20different\x20token,\x20publish\x20a\x20NEW\x20Service\x20with\x20type_parameter\x20set\x20to\x20that\x20token\x27s\x20full\x20type\x20—\x20this\x20one\x20keeps\x20settling\x20in\x20its\x20coin.'),/testnet/i['test'](a4)?a5['push']('Testnet\x20has\x20ONLY\x20WOW\x20(no\x20stablecoins\x20are\x20bridged)\x20—\x20testnet\x20services\x20stay\x20WOW-denominated;\x20multi-token\x20pricing\x20is\x20a\x20mainnet\x20capability.'):a5['push']('Mainnet\x20accepts\x20bridged\x20tokens\x20(USDT\x20/\x20USDC\x20/\x20ETH\x20/\x20WBTC\x20/\x20WOW):\x20buyers\x20bridge\x20them\x20from\x20Ethereum\x20via\x20the\x20cross-chain\x20bridge.\x20Query\x20wowok_buildin_info\x20info=\x27mainnet\x20bridge\x20tokens\x27\x20for\x20each\x20token\x27s\x20exact\x20type\x20tag\x20(wowTypeTag)\x20to\x20use\x20in\x20type_parameter\x20when\x20publishing.'),a5['join']('\x20');},J=async a3=>{if(a3===null||a3===undefined||a3==='')return{'display':'','tip':''};if(!H)return{'display':a3,'tip':''};try{const a4=await formatChainValue(a3,H,f);if(a4['precision_known'])return{'display':a4['symbol']?a4['display']+'\x20'+a4['symbol']:a4['display'],'tip':a4['text']};return{'display':a3,'tip':''};}catch{return{'display':a3,'tip':''};}};let K=null;try{const a3=await fetchServiceOrders(j,f,!![]),a4=Array['isArray'](a3?.['items'])?a3['items']:[],a5=a4['map'](ac=>typeof ac?.['who']==='string'?ac['who']:'')['filter'](ac=>ac!==''),a6=new Map();try{if(a5['length']>0x0){const ac=await batchQueryObjectsByIds(a5,f,!![]);for(const ad of ac){ad&&ad['type']===ObjectType['Order']&&a6['set'](ad['object'],ad);}}}catch{h['push']('recent_orders:\x20order\x20details\x20unavailable\x20(non-blocking)');}const a7=new Map(),a8=new Map(),a9=new Map();try{const ae=new Set();for(const af of a6['values']()){if(af?.['progress'])ae['add'](af['progress']);if(af?.['allocation'])ae['add'](af['allocation']);}if(ae['size']>0x0){const ag=await batchQueryObjectsByIds(Array['from'](ae),f,!![]);for(const ah of ag){if(!ah?.['object'])continue;if(ah['type']===ObjectType['Progress']){const ai=ah?.['current'];a7['set'](ah['object'],typeof ai==='string'&&ai!==''?ai:null),a8['set'](ah['object'],Number(ah?.['current_time'])||null);}else{if(ah['type']===ObjectType['Allocation']){const aj=Number(ah?.['balance']??0x0);a9['set'](ah['object'],Number['isFinite'](aj)&&aj===0x0?'allocated':'pending');}}}}}catch{h['push']('recent_orders:\x20progress/allocation\x20details\x20unavailable\x20(non-blocking)');}const aa=new Map();try{const ak=Array['from'](new Set(a4['map'](am=>typeof am?.['who']==='string'?am['who']:'')['filter'](Boolean))),al=await Promise['allSettled'](ak['map'](am=>query_object_last_updated({'object':am,'network':f})));for(let am=0x0;am<ak['length'];am++){const an=al[am];aa['set'](ak[am],an['status']==='fulfilled'&&an['value']?.['timestamp_ms']?Number(an['value']['timestamp_ms'])||null:null);}}catch{h['push']('recent_orders:\x20order\x20updated\x20times\x20unavailable\x20(non-blocking)');}const ab=await Promise['all'](a4['map'](async ao=>{const ap=typeof ao?.['who']==='string'?ao['who']:'',aq=a6['get'](ap),ar=aq?.['amount']!==null&&aq?.['amount']!==undefined?String(aq['amount']):'',as=await J(ar);return{'order':ap,'time':typeof ao?.['time']==='number'?ao['time']:0x0,'updated_ms':aa['get'](ap)??null,'amount':ar,'amount_display':as['display'],'amount_tip':as['tip'],'progress':aq?.['progress']??null,'allocation':aq?.['allocation']??null,'disputes':Array['isArray'](aq?.['dispute'])?aq['dispute']:[],'agent':Array['isArray'](aq?.['agent'])?aq['agent']:[],'owner':ownerAddr(aq?.['builder']??aq?.['owner']),'claimed_by':aq?.['claimed_by']??null,'required_info':aq?.['required_info']??null,'progress_next':aq?.['progress']?a7['get'](aq['progress'])??null:null,'progress_since':aq?.['progress']?a8['get'](aq['progress'])??null:null,'allocation_state':aq?.['allocation']?a9['get'](aq['allocation'])??'pending':'none','bought':await Promise['all']((Array['isArray'](aq?.['items'])?aq['items']:[])['map'](async at=>({'name':String(at?.['name']??''),'price_display':(await J(at?.['price']!==null&&at?.['price']!==undefined?String(at['price']):'0'))['display'],'quantity':String(at?.['quantity']??'0'),'wip_hash':String(at?.['wip_hash']??'')})))};}));K={'count':a4['length'],'items':ab['filter'](ao=>ao['order']!=='')['slice'](-0x14)['reverse']()};}catch{h['push']('recent_orders:\x20reverse-index\x20query\x20failed\x20(non-blocking)');}const L=[];try{const ao=await query_affiliations({'address':j,'no_cache':!![],'network':f}),ap=new Set(),aq=new Map();for(const as of ao?.['entries']??[]){const at=typeof as?.['who']==='string'?as['who']:'';if(!at||ap['has'](at))continue;ap['add'](at);const au=objectTypeFromAddress(at);if(!au)continue;if(au===ObjectType['Order'])continue;const av=String(au);let aw=aq['get'](av);!aw&&(aw=[],aq['set'](av,aw)),aw['push']({'address':at,'type_label':av,'name':x(at)['name'],'time':typeof as?.['time']==='number'?as['time']:null});}const ar=['Progress','Allocation','Payment','Guard'];for(const ax of ar){const ay=aq['get'](ax);ay&&ay['length']>0x0&&(L['push']({'type_label':ax,'items':ay}),aq['delete'](ax));}for(const [az,aA]of aq){if(aA['length']>0x0)L['push']({'type_label':az,'items':aA});}}catch{h['push']('related:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}const M=[];for(const aB of k['allocator_guards']??[]){const aC=summarizeGuard(aB);if(aC)M['push'](aC);}const N=[];for(const aD of Array['isArray'](l['sales'])?l['sales']:[]){const aE=balanceStr(aD?.['price']),aF=await J(aE);N['push']({'name':typeof aD?.['name']==='string'?aD['name']:'','price':aE,'price_display':aF['display'],'price_tip':aF['tip'],'stock':balanceStr(aD?.['stock']),'suspension':aD?.['suspension']===!![],'wip':typeof aD?.['wip']==='string'?aD['wip']:'','wip_hash':typeof aD?.['wip_hash']==='string'?aD['wip_hash']:''});}const O=l['order_allocators']?{'description':l['order_allocators']['description']??'','threshold':balanceStr(l['order_allocators']['threshold']),'allocators':(l['order_allocators']['allocators']??[])['map'](aG=>({'guard':aG['guard'],'sharing_count':Array['isArray'](aG['sharing'])?aG['sharing']['length']:0x0,'max':balanceStr(aG['max']??null)}))}:null,P=summarizePermission(k['permission'],x(l['permission'])),Q=P?.['owner']??B?.['sender']??null,R=Q?await markOf(Q):null;return{'action':'service_panorama','network':f,'service':{'address':j,'name':w,'description':l['description']??'','location':l['location']??'','published':l['bPublished']===!![],'paused':l['bPaused']===!![],'paused_time':typeof l['paused_time']==='number'?l['paused_time']:null,'setting_lock_duration':balanceStr(l['setting_lock_duration']),'customer_required':Array['isArray'](l['customer_required'])?l['customer_required']:[],'compensation_fund':balanceStr(l['compensation_fund']),'sales':N,'machine':l['machine']??null,'buy_guard':l['buy_guard']??null,'permission':l['permission']??'','um':l['um']??null,'arbitrations':Array['isArray'](l['arbitrations'])?l['arbitrations']:[],'rewards':Array['isArray'](l['rewards'])?l['rewards']:[],'repositories':Array['isArray'](l['repositories'])?l['repositories']:[],'order_allocators':O,'payment_token':{'coin_type':H,'guidance':I(H,f)},'onchain_last_updated':B,'tags':u['tags']??[],'owner':Q,'owner_name':R?.['name']??null},'machine_graph':y,'buy_guard':summarizeGuard(k['buy_guard']),'permission':P,'allocator_guards':M,'related':{'groups':L},'supply_chain':D,'trust':C,'business_report':E,'recent_orders':K,'data_gaps':h};}
|
|
1
|
+
import{Config,LocalMark,query_serviceContext,query_object_last_updated,query_affiliations,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{generateBusinessReport}from'./reverse-mapping.js';import{resolveSupplyChainGraph}from'../../knowledge/supply-chain.js';import{batchQueryObjectsByIds,fetchServiceOrders,ringWindowSaturated}from'../../graph/onchain/sdk-batch.js';import{buildMachineGraph}from'./machine-nodes.js';import{formatMoneyAnnotation}from'./facet-money.js';function balanceStr(a){if(a===null||a===undefined)return null;if(typeof a==='bigint')return a['toString']();return String(a);}function ownerAddr(a){if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];}return null;}function requireField(a,b){if(a===undefined||a===null)throw new Error('\x27'+b+'\x27\x20is\x20required\x20for\x20this\x20action');return a;}function summarizeGuard(a){if(!a)return null;const b=a,c=Array['isArray'](b['table'])?b['table']:[],d=c['filter'](e=>e?.['b_submission']===!![])['length'];return{'address':b['object']??'','description':b['description']??null,'rep':typeof b['rep']==='boolean'?b['rep']:null,'table_entry_count':c['length'],'submission_slot_count':d,'relies':Array['isArray'](b['relies'])?b['relies']['filter'](e=>typeof e==='string'):[],'relies_logic_and':typeof b['relies_logic_and']==='boolean'?b['relies_logic_and']:null};}function summarizePermission(a,b){if(!a)return null;const c=a,d=Array['isArray'](c['admin'])?c['admin']:[],e=d[0x0],f=typeof e==='string'?e:typeof e?.['account']==='string'?e['account']:c['builder']??null;return{'address':c['object']??'','description':c['description']??null,'builder':c['builder']??null,'owner':f,'owner_name':b?.['name']??null,'admin_count':d['length'],'entity_count':typeof c['entity_count']==='number'?c['entity_count']:null,'perm_remark':Array['isArray'](c['perm_remark'])?c['perm_remark']['map'](g=>({'index':String(g?.['index']??''),'remark':typeof g?.['remark']==='string'?g['remark']:''})):[],'um':c['um']??null,'tags':b?.['tags']??[],'updated_timestamp_ms':b?.['updated_at_ms']!=null?String(b['updated_at_ms']):null};}async function markOf(a){if(!a)return{'name':null,'tags':[],'updated_at_ms':null};try{const b=await LocalMark['Instance']()['get'](a);if(b)return{'name':b['name']??null,'tags':Array['isArray'](b['tags'])?b['tags']:[],'updated_at_ms':typeof b['updatedAt']==='number'?b['updatedAt']:null};}catch{}try{const c=await LocalMark['Instance']()['list']({'address':a}),d=c?.[0x0];if(d)return{'name':d['name']??null,'tags':Array['isArray'](d['tags'])?d['tags']:[],'updated_at_ms':typeof d['updatedAt']==='number'?d['updatedAt']:null};}catch{}return{'name':null,'tags':[],'updated_at_ms':null};}async function markOfMany(a){const b=[...new Set(a['filter'](e=>!!e))],c=await Promise['all'](b['map'](e=>markOf(e))),d=new Map();for(let e=0x0;e<b['length'];e++)d['set'](b[e],c[e]);return d;}export async function handleServicePanorama(b){const c=requireField(b['service_address'],'service_address'),d=b['context_network']??undefined;let f=d??await Config['Instance']()['network_get']();const h=[];let j=c;if(!/^0x[0-9a-fA-F]{32,64}$/['test'](c)){const S=await LocalMark['Instance']()['get_address'](c);if(!S)throw new Error('Cannot\x20resolve\x20service\x20\x27'+c+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.\x20'+'Pass\x20the\x200x\x20Service\x20object\x20address\x20directly\x20or\x20register\x20the\x20name\x20via\x20local_mark_operation.');j=S;}let k=await query_serviceContext({'service':j,'include_machine_nodes':!![],'network':f});if(!k?.['service']&&d){const T=await Config['Instance']()['network_get']();T&&T!==f&&(f=T,k=await query_serviceContext({'service':j,'include_machine_nodes':!![],'network':f}));}const l=k['service'];j=l['object']??j;const m=new Set(),n=U=>{if(U)m['add'](U);};n(j),n(l['machine']),n(l['permission']),n(l['um']);for(const U of l['arbitrations']??[])n(U);for(const V of l['rewards']??[])n(V);for(const W of l['repositories']??[])n(W);const p=k['permission'];if(p){const X=Array['isArray'](p['admin'])?p['admin']:[];X[0x0]&&n(typeof X[0x0]==='string'?X[0x0]:X[0x0]?.['account']);if(p['builder'])n(p['builder']);}const q=await markOfMany([...m]),u=q['get'](j)??{'name':null,'tags':[],'updated_at_ms':null},w=u['name'],x=Y=>Y?q['get'](Y)??{'name':null,'tags':[],'updated_at_ms':null}:{'name':null,'tags':[],'updated_at_ms':null};let y=null;const z=k['machine'],A=k['machine_nodes']??[];if(z||A['length']>0x0){const {nodes:Y,edges:Z}=buildMachineGraph(A);y={'address':z?.['object']??l['machine']??'','name':x(z?.['object']??l['machine'])['name'],'description':z?.['description']??null,'published':typeof z?.['bPublished']==='boolean'?z['bPublished']:null,'paused':typeof z?.['bPaused']==='boolean'?z['bPaused']:null,'node_count':typeof z?.['node_count']==='number'?z['node_count']:null,'consensus_repositories':Array['isArray'](z?.['consensus_repositories'])?z['consensus_repositories']:[],'nodes':Y,'edges':Z};}let B=null;try{const a0=await query_object_last_updated({'object':j,'network':f});a0?.['timestamp_ms']&&(B={'timestamp_ms':a0['timestamp_ms'],'digest':a0['digest']??null,'sender':a0['sender']??null});}catch{h['push']('onchain_last_updated:\x20query\x20failed\x20(non-blocking)');}let C=null;try{C=await resolveSupplyChainGraph(j,f);}catch{h['push']('supply_chain:\x20resolution\x20failed\x20(non-blocking)');}let D=null;try{const a1=[l];for(const a2 of Object['values'](k['referenced']??{})){if(a2&&a2['object']!==j)a1['push'](a2);}D=generateBusinessReport({'objects':a1,'machine_nodes':A['map'](a3=>({'name':a3['name']}))});}catch{h['push']('business_report:\x20generation\x20failed\x20(non-blocking)');}const E=l?.['type_raw']??l?.['type']??'',F=E['match'](/<(.+)>$/),G=F?F[0x1]:null,H=(a3,a4)=>{const a5=[];return a3?a5['push']('Pricing\x20&\x20settlement\x20coin:\x20'+a3+'\x20—\x20the\x20Service\x27s\x20generic\x20T,\x20FIXED\x20at\x20creation\x20(immutable).\x20Sales\x20prices\x20and\x20order\x20amounts\x20are\x20denominated\x20in\x20this\x20exact\x20token;\x20buyers\x20must\x20hold\x20it\x20to\x20order.'):a5['push']('Pricing\x20&\x20settlement\x20coin:\x20unavailable\x20from\x20the\x20Service\x20type\x20(no\x20generic\x20found)\x20—\x20treat\x20amounts\x20as\x20raw\x20smallest\x20units.'),a5['push']('To\x20price\x20in\x20a\x20different\x20token,\x20publish\x20a\x20NEW\x20Service\x20with\x20type_parameter\x20set\x20to\x20that\x20token\x27s\x20full\x20type\x20—\x20this\x20one\x20keeps\x20settling\x20in\x20its\x20coin.'),/testnet/i['test'](a4)?a5['push']('Testnet\x20has\x20ONLY\x20WOW\x20(no\x20stablecoins\x20are\x20bridged)\x20—\x20testnet\x20services\x20stay\x20WOW-denominated;\x20multi-token\x20pricing\x20is\x20a\x20mainnet\x20capability.'):a5['push']('Mainnet\x20accepts\x20bridged\x20tokens\x20(USDT\x20/\x20USDC\x20/\x20ETH\x20/\x20WBTC\x20/\x20WOW):\x20buyers\x20bridge\x20them\x20from\x20Ethereum\x20via\x20the\x20cross-chain\x20bridge.\x20Query\x20wowok_buildin_info\x20info=\x27mainnet\x20bridge\x20tokens\x27\x20for\x20each\x20token\x27s\x20exact\x20type\x20tag\x20(wowTypeTag)\x20to\x20use\x20in\x20type_parameter\x20when\x20publishing.'),a5['join']('\x20');},I=a3=>formatMoneyAnnotation(a3,G,f);let J=null;try{const a3=await fetchServiceOrders(j,f,!![]),a4=Array['isArray'](a3?.['items'])?a3['items']:[],a5=a4['map'](ad=>typeof ad?.['who']==='string'?ad['who']:'')['filter'](ad=>ad!==''),a6=new Map();try{if(a5['length']>0x0){const ad=await batchQueryObjectsByIds(a5,f,!![]);for(const ae of ad){ae&&ae['type']===ObjectType['Order']&&a6['set'](ae['object'],ae);}}}catch{h['push']('recent_orders:\x20order\x20details\x20unavailable\x20(non-blocking)');}const a7=new Map(),a8=new Map(),a9=new Map();try{const af=new Set();for(const ag of a6['values']()){if(ag?.['progress'])af['add'](ag['progress']);if(ag?.['allocation'])af['add'](ag['allocation']);}if(af['size']>0x0){const ah=await batchQueryObjectsByIds(Array['from'](af),f,!![]);for(const ai of ah){if(!ai?.['object'])continue;if(ai['type']===ObjectType['Progress']){const aj=ai?.['current'];a7['set'](ai['object'],typeof aj==='string'&&aj!==''?aj:null),a8['set'](ai['object'],Number(ai?.['current_time'])||null);}else{if(ai['type']===ObjectType['Allocation']){const ak=Number(ai?.['balance']??0x0);a9['set'](ai['object'],Number['isFinite'](ak)&&ak===0x0?'allocated':'pending');}}}}}catch{h['push']('recent_orders:\x20progress/allocation\x20details\x20unavailable\x20(non-blocking)');}const aa=new Map();try{const al=Array['from'](new Set(a4['map'](an=>typeof an?.['who']==='string'?an['who']:'')['filter'](Boolean))),am=await Promise['allSettled'](al['map'](an=>query_object_last_updated({'object':an,'network':f})));for(let an=0x0;an<al['length'];an++){const ao=am[an];aa['set'](al[an],ao['status']==='fulfilled'&&ao['value']?.['timestamp_ms']?Number(ao['value']['timestamp_ms'])||null:null);}}catch{h['push']('recent_orders:\x20order\x20updated\x20times\x20unavailable\x20(non-blocking)');}const ab=await Promise['all'](a4['map'](async ap=>{const aq=typeof ap?.['who']==='string'?ap['who']:'',ar=a6['get'](aq),as=ar?.['amount']!==null&&ar?.['amount']!==undefined?String(ar['amount']):'',at=await I(as);return{'order':aq,'time':typeof ap?.['time']==='number'?ap['time']:0x0,'updated_ms':aa['get'](aq)??null,'amount':as,'amount_display':at['display'],'amount_tip':at['tip'],'progress':ar?.['progress']??null,'allocation':ar?.['allocation']??null,'disputes':Array['isArray'](ar?.['dispute'])?ar['dispute']:[],'agent':Array['isArray'](ar?.['agent'])?ar['agent']:[],'owner':ownerAddr(ar?.['builder']??ar?.['owner']),'claimed_by':ar?.['claimed_by']??null,'required_info':ar?.['required_info']??null,'progress_next':ar?.['progress']?a7['get'](ar['progress'])??null:null,'progress_since':ar?.['progress']?a8['get'](ar['progress'])??null:null,'allocation_state':ar?.['allocation']?a9['get'](ar['allocation'])??'pending':'none','bought':await Promise['all']((Array['isArray'](ar?.['items'])?ar['items']:[])['map'](async au=>({'name':String(au?.['name']??''),'price_display':(await I(au?.['price']!==null&&au?.['price']!==undefined?String(au['price']):null))['display'],'quantity':String(au?.['quantity']??'0'),'wip_hash':String(au?.['wip_hash']??'')})))};})),ac=ab['filter'](ap=>ap['order']!=='');J={'count':a4['length'],'window_saturated':a3?.['ring_saturated']??ringWindowSaturated(a4['length']),'preview_truncated':a4['length']>ac['slice'](-0x14)['length'],'items':ac['slice'](-0x14)['reverse']()};}catch{h['push']('recent_orders:\x20reverse-index\x20query\x20failed\x20(non-blocking)');}const K=[];try{const ap=await query_affiliations({'address':j,'no_cache':!![],'network':f}),aq=new Set(),ar=new Map();for(const at of ap?.['entries']??[]){const au=typeof at?.['who']==='string'?at['who']:'';if(!au||aq['has'](au))continue;aq['add'](au);const av=objectTypeFromAddress(au);if(!av)continue;if(av===ObjectType['Order'])continue;const aw=String(av);let ax=ar['get'](aw);!ax&&(ax=[],ar['set'](aw,ax)),ax['push']({'address':au,'type_label':aw,'name':x(au)['name'],'time':typeof at?.['time']==='number'?at['time']:null});}const as=['Progress','Allocation','Payment','Guard'];for(const ay of as){const az=ar['get'](ay);az&&az['length']>0x0&&(K['push']({'type_label':ay,'items':az}),ar['delete'](ay));}for(const [aA,aB]of ar){if(aB['length']>0x0)K['push']({'type_label':aA,'items':aB});}}catch{h['push']('related:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}const L=[];for(const aC of k['allocator_guards']??[]){const aD=summarizeGuard(aC);if(aD)L['push'](aD);}const M=[];for(const aE of Array['isArray'](l['sales'])?l['sales']:[]){const aF=balanceStr(aE?.['price']),aG=await I(aF);M['push']({'name':typeof aE?.['name']==='string'?aE['name']:'','price':aF,'price_display':aG['display'],'price_tip':aG['tip'],'stock':balanceStr(aE?.['stock']),'suspension':aE?.['suspension']===!![],'wip':typeof aE?.['wip']==='string'?aE['wip']:'','wip_hash':typeof aE?.['wip_hash']==='string'?aE['wip_hash']:''});}const N=l['order_allocators']?{'description':l['order_allocators']['description']??'','threshold':balanceStr(l['order_allocators']['threshold']),'allocators':(l['order_allocators']['allocators']??[])['map'](aH=>({'guard':aH['guard'],'sharing_count':Array['isArray'](aH['sharing'])?aH['sharing']['length']:0x0,'max':balanceStr(aH['max']??null)}))}:null,O=summarizePermission(k['permission'],x(l['permission'])),P=O?.['owner']??B?.['sender']??null,Q=P?await markOf(P):null,R=await I(balanceStr(l['compensation_fund']));return{'action':'service_panorama','network':f,'service':{'address':j,'name':w,'description':l['description']??'','location':l['location']??'','published':l['bPublished']===!![],'paused':l['bPaused']===!![],'paused_time':typeof l['paused_time']==='number'?l['paused_time']:null,'setting_lock_duration':balanceStr(l['setting_lock_duration']),'customer_required':Array['isArray'](l['customer_required'])?l['customer_required']:[],'compensation_fund':balanceStr(l['compensation_fund']),'compensation_fund_display':R['display'],'compensation_fund_tip':R['tip'],'sales':M,'machine':l['machine']??null,'buy_guard':l['buy_guard']??null,'permission':l['permission']??'','um':l['um']??null,'arbitrations':Array['isArray'](l['arbitrations'])?l['arbitrations']:[],'rewards':Array['isArray'](l['rewards'])?l['rewards']:[],'repositories':Array['isArray'](l['repositories'])?l['repositories']:[],'order_allocators':N,'payment_token':{'coin_type':G,'guidance':H(G,f)},'onchain_last_updated':B,'tags':u['tags']??[],'owner':P,'owner_name':Q?.['name']??null},'machine_graph':y,'buy_guard':summarizeGuard(k['buy_guard']),'permission':O,'allocator_guards':L,'related':{'groups':K},'supply_chain':C,'business_report':D,'recent_orders':J,'data_gaps':h};}
|
|
@@ -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,fullServiceState}from'../../graph/onchain/fixtures.js';import{EVALUATION_SERVICE_INTENTS,resolveExpansionStrategy,withEvaluationBundle}from'../../graph/onchain/strategy.js';import{registerGraphServiceEvaluations}from'../../evaluation/builtins/graph-service.js';import{handleOnchainTopology}from'./topology-query.js';const NET='mainnet';describe('onchain_topology\x20evaluation\x20projection\x20(Task\x2016)',()=>{it('TR-16.1:\x20full\x20shop\x20—\x20evaluation\x20section\x20with\x20real\x20arbitration\x20conclusion\x20+\x20coverage',async()=>{registerGraphServiceEvaluations();const a=await handleOnchainTopology({'query_type':'onchain_topology','focus':FULL['svc'],'context_network':NET},new FakeDataPlane(fullServiceState()));expect(a['evaluation'])['toBeDefined']();const b=a['evaluation'];expect(Number['isInteger'](b['completeness']))['toBe'](!![]),expect(b['completeness'])['toBeGreaterThan'](0x0),expect(b['completeness'])['toBeLessThanOrEqual'](0x64),expect(b['coverage']['length'])['toBeGreaterThan'](0x0),expect(b['target'])['toBe'](FULL['svc']['toLowerCase']()),expect(b['unverified'])['toEqual']([]);const c=b['trust']['breakdown']['find'](d=>d['rule_id']==='trust_arbitration');expect(c?.['score'])['toBe'](0x64),expect(c?.['matched']?.['length']??0x0)['toBeGreaterThan'](0x0),expect(a['summary'])['toContain']('Evaluation:\x20trust\x20'+b['trust']['total']+'/100,\x20risk\x20'+b['risk']['total']+'/100');}),it('TR-16.2:\x20single\x20expansion\x20—\x20evaluation\x20adds\x20zero\x20fetches,\x20the\x20probe\x20is\x20a\x20dedup\x20hit',async()=>{registerGraphServiceEvaluations();const a=withEvaluationBundle(resolveExpansionStrategy({'defaultIntents':[...EVALUATION_SERVICE_INTENTS]})),b=new FakeDataPlane(fullServiceState()),c=await expandTopology(b,{'network':ENTRYPOINT['Mainnet'],'seed':FULL['svc'],'budget':a['budget'],'edges':a['edges']}),d=new FakeDataPlane(fullServiceState()),e=await handleOnchainTopology({'query_type':'onchain_topology','focus':FULL['svc'],'context_network':NET},d);expect(d['batches']['objects'])['toBe'](b['batches']['objects']),expect(e['stats']['rpc']['batches'])['toBe'](c['rpcReport']['batches']),expect(d['dedupHits'])['toBe'](b['dedupHits']);}),it('wiring:\x20no-intent\x20Service\x20seed\x20defaults\x20to\x20the\x20evaluation\x20bundle\x20with\x20its\x20shaping',async()=>{registerGraphServiceEvaluations();const a=await handleOnchainTopology({'query_type':'onchain_topology','focus':FULL['svc'],'context_network':NET},new FakeDataPlane(fullServiceState()));expect(a['strategy']['intents'])['toEqual']([...EVALUATION_SERVICE_INTENTS]),expect(a['strategy']['trace']['some'](b=>b['startsWith']('intent\x20(default):\x20')))['toBe'](!![]),expect(a['strategy']['trace']['some'](b=>b['startsWith']('evaluation\x20bundle:')))['toBe'](!![]);}),it('wiring:\x20role-default\x20intents\x20UNION\x20onto\x20the\x20evaluation\x20floor,\x20never\x20replace\x20it',async()=>{registerGraphServiceEvaluations();const a=await handleOnchainTopology({'query_type':'onchain_topology','focus':FULL['svc'],'role':'customer','context_network':NET},new FakeDataPlane(fullServiceState()));for(const c of EVALUATION_SERVICE_INTENTS)expect(a['strategy']['intents'])['toContain'](c);expect(a['strategy']['intents'])['toContain']('order_health'),expect(a['strategy']['intents'])['toContain']('counterparty'),expect(a['strategy']['trace']['some'](d=>d['startsWith']('evaluation\x20bundle:')))['toBe'](!![]);const b=a['facets']?.['items']['find'](d=>d['id']==='arbitration');expect(b?.['state'])['toBe']('present'),expect(a['evaluation']['unverified'])['not']['toContain']('risk_trust');}),it('wiring:\x20an\x20explicit\x20intent\x20wins\x20over\x20the\x20default\x20and\x20skips\x20the\x20bundle\x20shaping',async()=>{registerGraphServiceEvaluations();const a=await handleOnchainTopology({'query_type':'onchain_topology','focus':FULL['svc'],'intent':'workflow','context_network':NET},new FakeDataPlane(fullServiceState()));expect(a['strategy']['intents'])['toEqual'](['workflow']),expect(a['strategy']['trace']['some'](b=>b['startsWith']('intent\x20(explicit):\x20workflow')))['toBe'](!![]),expect(a['strategy']['trace']['some'](b=>b['startsWith']('evaluation\x20bundle:')))['toBe'](![]),expect(a['evaluation'])['toBeDefined']();}),it('wiring:\x20a\x20non-Service\x20seed\x20keeps\x20the\x20kernel\x20default\x20posture;\x20gap\x20dims\x20are\x20excluded\x20honestly',async()=>{registerGraphServiceEvaluations();const a=await handleOnchainTopology({'query_type':'onchain_topology','focus':FULL['mac'],'context_network':NET},new FakeDataPlane(fullServiceState()));expect(a['strategy']['intents'])['toEqual'](['full_map']),expect(a['evaluation'])['toBeDefined'](),expect(a['evaluation']['unverified']['length'])['toBeGreaterThan'](0x0);}),it('analyze=false\x20drops\x20the\x20evaluation\x20section\x20(no\x20findings-less\x20all-clear)',async()=>{registerGraphServiceEvaluations();const a=await handleOnchainTopology({'query_type':'onchain_topology','focus':FULL['svc'],'analyze':![],'context_network':NET},new FakeDataPlane(fullServiceState()));expect(a['evaluation'])['toBeUndefined'](),expect(a['findings'])['toEqual']([]);});});
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { type DataPlane, type ExpansionStrategy, type FindingKind, type TopologyGraph } from "../../graph/onchain/index.js";
|
|
2
2
|
import type { OnchainTopologyInput, OnchainTopologyResult } from "../../schema/query/bi.js";
|
|
3
|
+
import { type GraphServiceEvaluation } from "../../evaluation/builtins/graph-service.js";
|
|
4
|
+
import type { UserInjection } from "../../evaluation/types.js";
|
|
5
|
+
import { type ResolvedFacetProfile } from "../../persona/facet-profile.js";
|
|
3
6
|
export interface TopologyShapeOptions {
|
|
4
7
|
analyze?: boolean;
|
|
5
8
|
analyzerKinds?: FindingKind[];
|
|
@@ -9,6 +12,14 @@ export interface TopologyShapeOptions {
|
|
|
9
12
|
interestRole?: string;
|
|
10
13
|
interestObserver?: string;
|
|
11
14
|
interestDrive?: import("../../evaluation/game-strategy.js").PersonaDrive;
|
|
15
|
+
injection?: UserInjection;
|
|
16
|
+
facetProfile?: ResolvedFacetProfile;
|
|
12
17
|
}
|
|
13
|
-
export declare function buildOnchainTopologyResult(graph: TopologyGraph, seed: string, opts?: TopologyShapeOptions): OnchainTopologyResult
|
|
14
|
-
export declare function handleOnchainTopology(v: OnchainTopologyInput, planeOverride?: DataPlane): Promise<OnchainTopologyResult>;
|
|
18
|
+
export declare function buildOnchainTopologyResult(graph: TopologyGraph, seed: string, opts?: TopologyShapeOptions): Promise<OnchainTopologyResult>;
|
|
19
|
+
export declare function handleOnchainTopology(v: OnchainTopologyInput, planeOverride?: DataPlane, evaluationInjection?: UserInjection): Promise<OnchainTopologyResult>;
|
|
20
|
+
export interface GraphServiceEvaluateOptions {
|
|
21
|
+
injection?: UserInjection;
|
|
22
|
+
no_cache?: boolean;
|
|
23
|
+
context_network?: "testnet" | "mainnet" | "localnet";
|
|
24
|
+
}
|
|
25
|
+
export declare function evaluateServiceFromGraph(focus: string, opts?: GraphServiceEvaluateOptions): Promise<GraphServiceEvaluation>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Config}from'@wowok/wowok/w/local';import{SdkDataPlane,expandTopology,buildViewport,buildRoleInterest,runAnalyzers,runNodeAnalyzers,listAnalyzers,toCommercialRole,workflowSubgraphFromEdges,orderCompletionInGraph,resolveExpansionStrategy}from'../../graph/onchain/index.js';import{resolveAddress}from'./relationship-profile.js';import{serviceRiskNodeAnalyzer}from'../../knowledge/service-risk-node.js';import{recommendedCallForForwardBinding}from'../../participation/radar-core.js';import{resolveTopologyContext}from'../../persona/topology-focus.js';const NODE_ANALYZERS=[serviceRiskNodeAnalyzer],NODE_MARK='::node::';function tally(a){const b={};for(const c of a){if(!c)continue;b[c]=(b[c]??0x0)+0x1;}return b;}export function buildOnchainTopologyResult(a,b,c={}){const d=b['toLowerCase'](),f=[],g=new Set();for(const s of a['edges']){if(s['schema']!=='wf.transition')continue;for(const u of[s['from'],s['to']]){const v=u['indexOf'](NODE_MARK);if(v<=0x0)continue;const w=u['slice'](0x0,v)['toLowerCase']();!g['has'](w)&&(g['add'](w),f['push'](w));}}f['sort']();const h=f['map'](x=>{const y=workflowSubgraphFromEdges(a['edges'],x);return{'machine':x,'transitions':y['transitions']['map'](z=>({'node':z['node'],'prev_node':z['prevNode'],...z['forward']!==undefined?{'forward':z['forward']}:{},...z['threshold']!==undefined?{'threshold':z['threshold']}:{},'guard':z['guard']??null,'weight':z['weight']??null,'named_operator':z['namedOperator']??null,'permission_index':z['permissionIndex']??null,'recommended_call':recommendedCallForForwardBinding({'permissionIndex':z['permissionIndex']??null,'namedOperator':z['namedOperator']??null,'hasGuard':!!z['guard']})??null})),'terminal_names':[...y['terminalNames']]['sort']()};}),i=[...a['nodes']['values']()]['filter'](x=>x['kind']==='object'&&x['state']==='fetched'&&x['objectType']==='Order')['map'](x=>({'order':x['id'],...orderCompletionInGraph(a,x['id'])})),j=[...a['gaps']];let k=[],l;if(c['analyze']??!![]){const x=buildViewport(a,d,'neutral'),y=c['analyzerKinds'],z=c['onlyAnalyzers']?new Set(c['onlyAnalyzers']):undefined;try{k=runAnalyzers(x,{...y?{'kinds':y}:{},...z?{'only':[...z]}:{}});}catch(A){j['push']('Analyzer\x20suite\x20failed\x20(topology\x20itself\x20is\x20intact):\x20'+(A?.['message']??String(A)));}try{const B=NODE_ANALYZERS['filter'](C=>(!y||y['includes'](C['kind']))&&(!z||z['has'](C['id'])));k['push'](...runNodeAnalyzers(x,B));}catch(C){j['push']('Node\x20analyzer\x20suite\x20failed\x20(topology\x20itself\x20is\x20intact):\x20'+(C?.['message']??String(C)));}if(c['interestRole']&&c['interestObserver'])try{const D=buildRoleInterest(a,c['interestObserver'],toCommercialRole(c['interestRole']),c['interestDrive']);k['push'](D['finding']),l=D['view'];}catch(E){j['push']('Role\x20interest\x20projection\x20failed\x20(topology\x20itself\x20is\x20intact):\x20'+(E?.['message']??String(E)));}}for(const F of a['truncations']){j['push']('truncated\x20'+F['schema']+'\x20at\x20'+F['nodeId']+':\x20observed\x20at\x20least\x20'+F['observed']+'\x20edge(s)\x20(limit\x20'+F['limit']+')');}if(a['budgetExhausted']['rpcs'])j['push']('RPC\x20batch\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial\x20(raise\x20budget.max_rpcs).');if(a['budgetExhausted']['nodes'])j['push']('Node\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial\x20(raise\x20budget.max_nodes).');if(a['budgetExhausted']['depth'])j['push']('Depth\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial\x20(raise\x20budget.max_depth).');if(a['budgetExhausted']['eventPages'])j['push']('Event-page\x20budget\x20exhausted\x20—\x20event-derived\x20edges\x20are\x20partial.');const m=[...a['nodes']['values']()]['map'](G=>({'id':G['id'],'kind':G['kind'],...G['objectType']?{'object_type':G['objectType']}:{},...G['coinType']?{'coin_type':G['coinType']}:{},'state':G['state'],'depth':G['depth'],...G['error']?{'error':G['error']}:{},...c['includeRaw']&&G['raw']!==undefined?{'raw':G['raw']}:{}})),n=a['edges']['map'](G=>({'id':G['id'],'schema':G['schema'],'family':G['family'],'from':G['from'],'to':G['to'],'retention':G['retention'],'evidence':G['evidence'],...G['key']!==undefined?{'key':G['key']}:{},...G['truncated']!==undefined?{'truncated':G['truncated']}:{},...G['payload']!==undefined?{'payload':G['payload']}:{}})),o=tally(i['map'](G=>G['status'])),p=tally(a['edges']['map'](G=>G['family'])),q=Object['entries'](p)['map'](([G,H])=>G+'×'+H)['join'](',\x20');let r='Topology\x20around\x20'+d+'\x20on\x20'+a['network']+':\x20'+a['nodes']['size']+'\x20node(s),\x20'+a['edges']['length']+'\x20edge(s)'+(q?'\x20('+q+')':'')+(',\x20'+h['length']+'\x20workflow\x20graph(s),\x20'+i['length']+'\x20order(s)')+('\x20['+['completed','in_progress','unknown']['map'](G=>G+'='+(o[G]??0x0))['join'](',\x20')+']')+(',\x20'+k['length']+'\x20finding(s).');return j['length']>0x0&&(r+='\x20'+j['length']+'\x20data\x20gap/partial-data\x20marker(s)\x20—\x20see\x20data_gaps/truncations/budget_exhausted\x20before\x20drawing\x20conclusions.'),{'action':'onchain_topology','seed':d,'network':a['network'],'strategy':{'intents':c['strategy']?.['intents']??['full_map'],...c['strategy']?.['edges']['families']?{'families':c['strategy']['edges']['families']}:{},...c['strategy']?.['edges']['schemas']?{'schemas':c['strategy']['edges']['schemas']}:{},'table_edges':c['strategy']?.['edges']['tableEdges']??['machine.node'],...c['strategy']?.['edges']['familyDepths']?{'family_depths':c['strategy']['edges']['familyDepths']}:{},'budget':{...c['strategy']?.['budget']['maxDepth']!==undefined?{'max_depth':c['strategy']['budget']['maxDepth']}:{},...c['strategy']?.['budget']['maxNodes']!==undefined?{'max_nodes':c['strategy']['budget']['maxNodes']}:{},...c['strategy']?.['budget']['maxFanoutPerNode']!==undefined?{'max_fanout':c['strategy']['budget']['maxFanoutPerNode']}:{},...c['strategy']?.['budget']['maxRpcs']!==undefined?{'max_rpcs':c['strategy']['budget']['maxRpcs']}:{}},'trace':c['strategy']?.['trace']??['kernel\x20default:\x20all\x20families,\x20tables\x20[machine.node],\x20depth\x204']},'analyzers':[...listAnalyzers(),...NODE_ANALYZERS['map'](G=>G['id'])],'stats':{'nodes_total':a['nodes']['size'],'nodes_by_kind':tally([...a['nodes']['values']()]['map'](G=>G['kind'])),'nodes_by_object_type':tally([...a['nodes']['values']()]['map'](G=>G['objectType']??'')),'edges_total':a['edges']['length'],'edges_by_family':p,'edges_by_schema':tally(a['edges']['map'](G=>G['schema'])),'rpc':{'batches':a['rpcReport']['batches'],'by_channel':{'objects':a['rpcReport']['byChannel']['objects'],'keyed_fields':a['rpcReport']['byChannel']['keyedFields'],'tables':a['rpcReport']['byChannel']['tables'],'events':a['rpcReport']['byChannel']['events']},'dedup_hits':a['rpcReport']['dedupHits']}},'nodes':m,'edges':n,'workflows':h,'orders_completion':i,'findings':k,...l?{'role_interest':l}:{},'truncations':a['truncations']['map'](G=>({'node_id':G['nodeId'],'schema':G['schema'],'observed':G['observed'],'limit':G['limit']})),'budget_exhausted':{...a['budgetExhausted']['nodes']?{'nodes':!![]}:{},...a['budgetExhausted']['depth']?{'depth':!![]}:{},...a['budgetExhausted']['rpcs']?{'rpcs':!![]}:{},...a['budgetExhausted']['eventPages']?{'event_pages':!![]}:{}},'data_gaps':j,'summary':r};}export async function handleOnchainTopology(a,b){if(!a['focus'])throw new Error('\x27focus\x27\x20is\x20required\x20for\x20onchain_topology\x20—\x20an\x20on-chain\x20address\x20(0x...)\x20or\x20a\x20LocalMark\x20name.');const c=a['context_network']??await Config['Instance']()['network_get'](),d=await resolveAddress(a['focus'],'focus'),e=b??new SdkDataPlane(c,{'noCache':a['no_cache']});let f={};try{f=await resolveTopologyContext({...a['context_account']?{'account':a['context_account']['toLowerCase']()}:{},...a['industry']?{'industry':a['industry']}:{},...a['role']?{'role':a['role']}:{}});}catch{}const g=resolveExpansionStrategy({...a['intent']?{'intents':[a['intent']]}:{},...f['roleDefault']?{'roleDefault':f['roleDefault']}:{},...f['industryTemplate']?{'industryTemplate':f['industryTemplate']}:{},...f['personaPref']?{'personaPref':{...f['personaPref'],...f['personaPref']['table_edges']?{'tableEdges':f['personaPref']['table_edges']}:{},...f['personaPref']['family_depths']?{'familyDepths':f['personaPref']['family_depths']}:{},...f['personaPref']['max_depth']!==undefined?{'maxDepth':f['personaPref']['max_depth']}:{},...f['personaPref']['max_nodes']!==undefined?{'maxNodes':f['personaPref']['max_nodes']}:{},...f['personaPref']['max_fanout']!==undefined?{'maxFanout':f['personaPref']['max_fanout']}:{}}}:{},'explicitEdges':{...a['table_edges']?{'tableEdges':a['table_edges']}:{},...a['budget']?{'budget':{...a['budget']['max_depth']!==undefined?{'maxDepth':a['budget']['max_depth']}:{},...a['budget']['max_nodes']!==undefined?{'maxNodes':a['budget']['max_nodes']}:{},...a['budget']['max_fanout']!==undefined?{'maxFanoutPerNode':a['budget']['max_fanout']}:{},...a['budget']['max_rpcs']!==undefined?{'maxRpcs':a['budget']['max_rpcs']}:{}}}:{}}}),h=await expandTopology(e,{'network':c,'seed':d,'budget':g['budget'],'edges':g['edges']}),i=a['interest_role']??a['role'];let j=a['context_account']?.['toLowerCase']();if(!j&&d['startsWith']('0x00'))j=d;const k=f['drive'],l=i&&j?toCommercialRole(i):undefined,m=buildOnchainTopologyResult(h,d,{'analyze':a['analyze'],...a['analyzer_kinds']?{'analyzerKinds':a['analyzer_kinds']}:{},...a['only_analyzers']?{'onlyAnalyzers':a['only_analyzers']}:{},'includeRaw':a['include_raw'],'strategy':g,...l&&j?{'interestRole':l,...k?{'interestDrive':k}:{},'interestObserver':j}:{}});return i&&!j&&m['data_gaps']['push']('interest_role\x20given\x20but\x20no\x20observer\x20EOA\x20(pass\x20context_account,\x20or\x20seed\x20an\x20EOA\x20address)\x20—\x20role\x20interest\x20view\x20skipped'),m;}
|
|
1
|
+
import{Config}from'@wowok/wowok/w/local';import{SdkDataPlane,expandTopology,inferObjectType,buildViewport,buildRoleInterest,runAnalyzers,runNodeAnalyzers,listAnalyzers,toCommercialRole,workflowSubgraphFromEdges,orderCompletionInGraph,resolveExpansionStrategy,withEvaluationBundle,EVALUATION_SERVICE_INTENTS,projectEvaluationFacts,projectFacets}from'../../graph/onchain/index.js';import{resolveAddress}from'./relationship-profile.js';import{evaluateGraphServiceFacts}from'../../evaluation/builtins/graph-service.js';import{RULE_NODE_ANALYZERS}from'../../knowledge/rule-node-analyzers.js';import{recommendedCallForForwardBinding}from'../../participation/radar-core.js';import{resolveTopologyContext}from'../../persona/topology-focus.js';import{deriveRuleWeights,resolveFacetProfile}from'../../persona/facet-profile.js';import{annotateFacetMoney}from'./facet-money.js';const NODE_MARK='::node::';function withDerivedFacetWeights(a,b){if(Object['keys'](b)['length']===0x0)return a;const c={...a?.['overrides']?.['rules']??{}};for(const [d,e]of Object['entries'](b)){if(!c[d])c[d]={'weight':e};}return{...a,'overrides':{...a?.['overrides']??{},'rules':c}};}function tally(a){const b={};for(const c of a){if(!c)continue;b[c]=(b[c]??0x0)+0x1;}return b;}export async function buildOnchainTopologyResult(a,b,c={}){const d=b['toLowerCase'](),f=[],g=new Set();for(const w of a['edges']){if(w['schema']!=='wf.transition')continue;for(const x of[w['from'],w['to']]){const y=x['indexOf'](NODE_MARK);if(y<=0x0)continue;const z=x['slice'](0x0,y)['toLowerCase']();!g['has'](z)&&(g['add'](z),f['push'](z));}}f['sort']();const h=f['map'](A=>{const B=workflowSubgraphFromEdges(a['edges'],A);return{'machine':A,'transitions':B['transitions']['map'](C=>({'node':C['node'],'prev_node':C['prevNode'],...C['forward']!==undefined?{'forward':C['forward']}:{},...C['threshold']!==undefined?{'threshold':C['threshold']}:{},'guard':C['guard']??null,'weight':C['weight']??null,'named_operator':C['namedOperator']??null,'permission_index':C['permissionIndex']??null,'recommended_call':recommendedCallForForwardBinding({'permissionIndex':C['permissionIndex']??null,'namedOperator':C['namedOperator']??null,'hasGuard':!!C['guard']})??null})),'terminal_names':[...B['terminalNames']]['sort']()};}),i=[...a['nodes']['values']()]['filter'](A=>A['kind']==='object'&&A['state']==='fetched'&&A['objectType']==='Order')['map'](A=>({'order':A['id'],...orderCompletionInGraph(a,A['id'])})),j=buildViewport(a,d,'neutral'),k=[...a['gaps']];let l=[],m;if(c['analyze']??!![]){const A=c['analyzerKinds'],B=c['onlyAnalyzers']?new Set(c['onlyAnalyzers']):undefined;try{l=runAnalyzers(j,{...A?{'kinds':A}:{},...B?{'only':[...B]}:{}});}catch(C){k['push']('Analyzer\x20suite\x20failed\x20(topology\x20itself\x20is\x20intact):\x20'+(C?.['message']??String(C)));}try{const D=RULE_NODE_ANALYZERS['filter'](E=>(!A||A['includes'](E['kind']))&&(!B||B['has'](E['id'])));l['push'](...runNodeAnalyzers(j,D));}catch(E){k['push']('Node\x20analyzer\x20suite\x20failed\x20(topology\x20itself\x20is\x20intact):\x20'+(E?.['message']??String(E)));}if(c['interestRole']&&c['interestObserver'])try{const F=buildRoleInterest(a,c['interestObserver'],toCommercialRole(c['interestRole']),c['interestDrive']);l['push'](F['finding']),m=F['view'];}catch(G){k['push']('Role\x20interest\x20projection\x20failed\x20(topology\x20itself\x20is\x20intact):\x20'+(G?.['message']??String(G)));}}let n,o;if(c['analyze']??!![])try{const H=projectEvaluationFacts(j,d,l);n=await evaluateGraphServiceFacts(H,c['injection']);if(c['facetProfile'])try{o=projectFacets({'graph':a,'viewport':j,'target':d,'facts':H,'evaluation':n,'workflows':h,'profile':{'role':c['facetProfile']['role'],'industry':c['facetProfile']['industry'],'persona_applied':c['facetProfile']['personaApplied'],'sources':c['facetProfile']['sources'],'facets':c['facetProfile']['facets']},...m?{'roleInterest':m}:{}});}catch(I){k['push']('Facet\x20projection\x20failed\x20(evaluation\x20is\x20intact):\x20'+(I?.['message']??String(I)));}}catch(J){k['push']('Evaluation\x20projection\x20failed\x20(topology\x20itself\x20is\x20intact):\x20'+(J?.['message']??String(J)));}for(const K of a['truncations']){k['push']('truncated\x20'+K['schema']+'\x20at\x20'+K['nodeId']+':\x20observed\x20at\x20least\x20'+K['observed']+'\x20edge(s)\x20(limit\x20'+K['limit']+')');}if(a['budgetExhausted']['rpcs'])k['push']('RPC\x20batch\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial\x20(raise\x20budget.max_rpcs).');if(a['budgetExhausted']['nodes'])k['push']('Node\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial\x20(raise\x20budget.max_nodes).');if(a['budgetExhausted']['depth'])k['push']('Depth\x20budget\x20exhausted\x20—\x20topology\x20is\x20partial\x20(raise\x20budget.max_depth).');if(a['budgetExhausted']['eventPages'])k['push']('Event-page\x20budget\x20exhausted\x20—\x20event-derived\x20edges\x20are\x20partial.');const p=[...a['nodes']['values']()]['map'](L=>({'id':L['id'],'kind':L['kind'],...L['objectType']?{'object_type':L['objectType']}:{},...L['coinType']?{'coin_type':L['coinType']}:{},'state':L['state'],'depth':L['depth'],...L['error']?{'error':L['error']}:{},...c['includeRaw']&&L['raw']!==undefined?{'raw':L['raw']}:{}})),q=a['edges']['map'](L=>({'id':L['id'],'schema':L['schema'],'family':L['family'],'from':L['from'],'to':L['to'],'retention':L['retention'],'evidence':L['evidence'],...L['key']!==undefined?{'key':L['key']}:{},...L['truncated']!==undefined?{'truncated':L['truncated']}:{},...L['payload']!==undefined?{'payload':L['payload']}:{}})),r=tally(i['map'](L=>L['status'])),s=tally(a['edges']['map'](L=>L['family'])),u=Object['entries'](s)['map'](([L,M])=>L+'×'+M)['join'](',\x20');let v='Topology\x20around\x20'+d+'\x20on\x20'+a['network']+':\x20'+a['nodes']['size']+'\x20node(s),\x20'+a['edges']['length']+'\x20edge(s)'+(u?'\x20('+u+')':'')+(',\x20'+h['length']+'\x20workflow\x20graph(s),\x20'+i['length']+'\x20order(s)')+('\x20['+['completed','in_progress','unknown']['map'](L=>L+'='+(r[L]??0x0))['join'](',\x20')+']')+(',\x20'+l['length']+'\x20finding(s).');return n&&(v+='\x20Evaluation:\x20trust\x20'+n['trust']['total']+'/100,\x20risk\x20'+n['risk']['total']+'/100,\x20completeness\x20'+n['completeness']+'%'+(n['unverified']['length']>0x0?'\x20(unverifiable,\x20excluded:\x20'+n['unverified']['join'](',\x20')+')':'')+'.'),k['length']>0x0&&(v+='\x20'+k['length']+'\x20data\x20gap/partial-data\x20marker(s)\x20—\x20see\x20data_gaps/truncations/budget_exhausted\x20before\x20drawing\x20conclusions.'),{'action':'onchain_topology','seed':d,'network':a['network'],'strategy':{'intents':c['strategy']?.['intents']??['full_map'],...c['strategy']?.['edges']['families']?{'families':c['strategy']['edges']['families']}:{},...c['strategy']?.['edges']['schemas']?{'schemas':c['strategy']['edges']['schemas']}:{},'table_edges':c['strategy']?.['edges']['tableEdges']??['machine.node'],...c['strategy']?.['edges']['eventEdges']?{'event_edges':c['strategy']['edges']['eventEdges']}:{},...c['strategy']?.['edges']['familyDepths']?{'family_depths':c['strategy']['edges']['familyDepths']}:{},'budget':{...c['strategy']?.['budget']['maxDepth']!==undefined?{'max_depth':c['strategy']['budget']['maxDepth']}:{},...c['strategy']?.['budget']['maxNodes']!==undefined?{'max_nodes':c['strategy']['budget']['maxNodes']}:{},...c['strategy']?.['budget']['maxFanoutPerNode']!==undefined?{'max_fanout':c['strategy']['budget']['maxFanoutPerNode']}:{},...c['strategy']?.['budget']['maxRpcs']!==undefined?{'max_rpcs':c['strategy']['budget']['maxRpcs']}:{}},'trace':c['strategy']?.['trace']??['kernel\x20default:\x20all\x20families,\x20tables\x20[machine.node],\x20depth\x204']},'analyzers':[...listAnalyzers(),...RULE_NODE_ANALYZERS['map'](L=>L['id'])],'stats':{'nodes_total':a['nodes']['size'],'nodes_by_kind':tally([...a['nodes']['values']()]['map'](L=>L['kind'])),'nodes_by_object_type':tally([...a['nodes']['values']()]['map'](L=>L['objectType']??'')),'edges_total':a['edges']['length'],'edges_by_family':s,'edges_by_schema':tally(a['edges']['map'](L=>L['schema'])),'rpc':{'batches':a['rpcReport']['batches'],'by_channel':{'objects':a['rpcReport']['byChannel']['objects'],'keyed_fields':a['rpcReport']['byChannel']['keyedFields'],'tables':a['rpcReport']['byChannel']['tables'],'events':a['rpcReport']['byChannel']['events']},'dedup_hits':a['rpcReport']['dedupHits']}},'nodes':p,'edges':q,'workflows':h,'orders_completion':i,'findings':l,...n?{'evaluation':n}:{},...o?{'facets':o}:{},...m?{'role_interest':m}:{},'truncations':a['truncations']['map'](L=>({'node_id':L['nodeId'],'schema':L['schema'],'observed':L['observed'],'limit':L['limit']})),'budget_exhausted':{...a['budgetExhausted']['nodes']?{'nodes':!![]}:{},...a['budgetExhausted']['depth']?{'depth':!![]}:{},...a['budgetExhausted']['rpcs']?{'rpcs':!![]}:{},...a['budgetExhausted']['eventPages']?{'event_pages':!![]}:{}},'data_gaps':k,'summary':v};}export async function handleOnchainTopology(a,b,c){if(!a['focus'])throw new Error('\x27focus\x27\x20is\x20required\x20for\x20onchain_topology\x20—\x20an\x20on-chain\x20address\x20(0x...)\x20or\x20a\x20LocalMark\x20name.');const d=a['context_network']??await Config['Instance']()['network_get'](),e=await resolveAddress(a['focus'],'focus'),f=b??new SdkDataPlane(d,{'noCache':a['no_cache']});let g={};try{g=await resolveTopologyContext({...a['context_account']?{'account':a['context_account']['toLowerCase']()}:{},...a['industry']?{'industry':a['industry']}:{},...a['role']?{'role':a['role']}:{}});}catch{}const h=[];for(const x of[...g['roleDefault']?.['intents']??[],...g['personaPref']?.['intents']??[]]){if(!h['includes'](x))h['push'](x);}let j;if(!a['intent']&&(a['analyze']??!![])&&inferObjectType(e)==='Service'){j=[...EVALUATION_SERVICE_INTENTS];for(const y of h)if(!j['includes'](y))j['push'](y);}const k=g['personaPref']?j?((()=>{const {intents:z,...A}=g['personaPref'];return A;})()):g['personaPref']:undefined,l=resolveExpansionStrategy({...a['intent']?{'intents':[a['intent']]}:{},...j?{'defaultIntents':j}:{},...g['roleDefault']&&!j?{'roleDefault':g['roleDefault']}:{},...g['industryTemplate']?{'industryTemplate':g['industryTemplate']}:{},...k?{'personaPref':{...k,...k['table_edges']?{'tableEdges':k['table_edges']}:{},...k['event_edges']?{'eventEdges':k['event_edges']}:{},...k['family_depths']?{'familyDepths':k['family_depths']}:{},...k['schema_hops']?{'schemaHops':k['schema_hops']}:{},...k['max_depth']!==undefined?{'maxDepth':k['max_depth']}:{},...k['max_nodes']!==undefined?{'maxNodes':k['max_nodes']}:{},...k['max_fanout']!==undefined?{'maxFanout':k['max_fanout']}:{}}}:{},'explicitEdges':{...a['table_edges']?{'tableEdges':a['table_edges']}:{},...a['event_edges']?{'eventEdges':a['event_edges']}:{},...a['schema_hops']?{'schemaHops':a['schema_hops']}:{},...a['budget']?{'budget':{...a['budget']['max_depth']!==undefined?{'maxDepth':a['budget']['max_depth']}:{},...a['budget']['max_nodes']!==undefined?{'maxNodes':a['budget']['max_nodes']}:{},...a['budget']['max_fanout']!==undefined?{'maxFanoutPerNode':a['budget']['max_fanout']}:{},...a['budget']['max_rpcs']!==undefined?{'maxRpcs':a['budget']['max_rpcs']}:{}}}:{}}});let m=l;j&&(m=withEvaluationBundle(l),a['budget']&&(m={...m,'budget':l['budget'],'trace':[...m['trace'],'evaluation\x20bundle\x20budget\x20skipped:\x20explicit\x20caller\x20budget\x20wins']}));const n=await expandTopology(f,{'network':d,'seed':e,'budget':m['budget'],'edges':m['edges']}),o=a['interest_role']??a['role']??g['personaRole'];let p=a['context_account']?.['toLowerCase']();if(!p&&e['startsWith']('0x00'))p=e;const q=g['drive'],r=o&&p?toCommercialRole(o):undefined,s=a['role']?a['role']:g['personaRole'],t=resolveFacetProfile({...s?{'role':s}:{},...a['industry']?{'industry':a['industry']}:{},...g['evaluation']?{'personaEvaluation':g['evaluation']}:{},...a['facets']?{'request':a['facets']}:{}}),u=withDerivedFacetWeights(c,deriveRuleWeights(t)),w=await buildOnchainTopologyResult(n,e,{'analyze':a['analyze'],...a['analyzer_kinds']?{'analyzerKinds':a['analyzer_kinds']}:{},...a['only_analyzers']?{'onlyAnalyzers':a['only_analyzers']}:{},'includeRaw':a['include_raw'],'injection':u,'facetProfile':t,'strategy':m,...r&&p?{'interestRole':r,...q?{'interestDrive':q}:{},'interestObserver':p}:{}});if(w['facets']?.['items']['length'])try{await annotateFacetMoney(w['facets']['items'],d);}catch(z){w['data_gaps']['push']('Facet\x20money\x20annotation\x20failed\x20(raw\x20amounts\x20retained):\x20'+(z?.['message']??String(z)));}return o&&!p&&w['data_gaps']['push']('interest_role\x20given\x20but\x20no\x20observer\x20EOA\x20(pass\x20context_account,\x20or\x20seed\x20an\x20EOA\x20address)\x20—\x20role\x20interest\x20view\x20skipped'),w;}export async function evaluateServiceFromGraph(a,b={}){const c=await handleOnchainTopology({'query_type':'onchain_topology','focus':a,'analyze':!![],'include_raw':![],...b['context_network']?{'context_network':b['context_network']}:{},...b['no_cache']!==undefined?{'no_cache':b['no_cache']}:{}},undefined,b['injection']);if(!c['evaluation'])throw new Error('Graph\x20evaluation\x20unavailable\x20for\x20'+a+'\x20—\x20the\x20topology\x20result\x20carries\x20no\x20evaluation\x20section\x20(see\x20its\x20data_gaps).');return c['evaluation'];}
|
package/dist/review/arb.d.ts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import type { ArbPanoramaResult } from "../playbooks/service-build/object-panorama.js";
|
|
2
2
|
import type { ReviewPack } from "./types.js";
|
|
3
|
-
export declare function arbTokenOf(typeRaw: string | null): string | null;
|
|
4
|
-
export declare function fmtArbMoney(raw: string | number | null | undefined, typeRaw: string | null): string | null;
|
|
5
3
|
export declare function arbStatusLabel(status: string | null): string;
|
|
6
4
|
export declare function assembleArbReview(pano: ArbPanoramaResult): ReviewPack;
|