@wowok/agent-mcp 2.7.6 → 2.7.8
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/customer/index.d.ts +3 -4
- package/dist/customer/index.js +1 -1
- package/dist/customer/info-puzzle.js +1 -1
- package/dist/customer/order-monitor.d.ts +0 -9
- package/dist/customer/order-monitor.js +1 -1
- package/dist/customer/order-strategy.d.ts +0 -19
- package/dist/customer/order-strategy.js +1 -1
- package/dist/customer/reminder-system.d.ts +0 -5
- package/dist/customer/reminder-system.js +1 -1
- package/dist/evaluation/game-strategy.js +1 -1
- package/dist/evaluation/injection.d.ts +6 -0
- package/dist/evaluation/injection.js +1 -0
- package/dist/evaluation/node-game.js +1 -1
- package/dist/examples/machine-multisig-threshold.json +1 -0
- package/dist/harness/recover.js +1 -1
- package/dist/harness/types.d.ts +1 -1
- package/dist/harness/verify.js +1 -1
- package/dist/intent/enrich.js +1 -1
- package/dist/intent/matcher.js +1 -1
- package/dist/intent/types.d.ts +1 -1
- package/dist/intent/types.js +1 -1
- package/dist/knowledge/arbitration-ledger.js +1 -1
- package/dist/knowledge/contract-invariants.d.ts +53 -0
- package/dist/knowledge/contract-invariants.js +1 -0
- package/dist/knowledge/deployment-scanner.js +1 -1
- package/dist/knowledge/dynamic-pricing.d.ts +0 -2
- package/dist/knowledge/dynamic-pricing.js +1 -1
- package/dist/knowledge/event-semantics.d.ts +20 -0
- package/dist/knowledge/event-semantics.js +1 -0
- package/dist/knowledge/examples-scanner-cli.js +1 -1
- package/dist/knowledge/examples-scanner.js +1 -1
- package/dist/knowledge/glossary.js +1 -1
- package/dist/knowledge/guard-submission-prompt.js +1 -1
- package/dist/knowledge/immutability.d.ts +11 -0
- package/dist/knowledge/immutability.js +1 -0
- package/dist/knowledge/index.d.ts +12 -6
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/intent-metrics.d.ts +1 -1
- package/dist/knowledge/jsonrpc-enum.d.ts +37 -0
- package/dist/knowledge/jsonrpc-enum.js +1 -0
- package/dist/knowledge/machine-confirm.js +1 -1
- package/dist/knowledge/machine-risk.js +1 -1
- package/dist/knowledge/machine-topology.d.ts +11 -0
- package/dist/knowledge/machine-topology.js +1 -1
- package/dist/knowledge/machine-translation.js +1 -1
- package/dist/knowledge/market-metrics.d.ts +11 -0
- package/dist/knowledge/market-metrics.js +1 -1
- package/dist/knowledge/mcp-schema-audit-cli.js +1 -1
- package/dist/knowledge/mcp-schema-audit.d.ts +1 -0
- package/dist/knowledge/mcp-schema-audit.js +1 -1
- package/dist/knowledge/messenger-guard-guidance.d.ts +17 -0
- package/dist/knowledge/messenger-guard-guidance.js +1 -0
- package/dist/knowledge/operation-dictionary.d.ts +18 -0
- package/dist/knowledge/operation-dictionary.js +1 -0
- package/dist/knowledge/service-ledger.js +1 -1
- package/dist/knowledge/service-risk.js +1 -1
- package/dist/knowledge/service-translation.js +1 -1
- package/dist/knowledge/supply-chain.d.ts +24 -0
- package/dist/knowledge/supply-chain.js +1 -0
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/knowledge/trust-metrics.d.ts +27 -2
- package/dist/knowledge/trust-metrics.js +1 -1
- package/dist/knowledge/workflow-guidance.d.ts +22 -1
- package/dist/knowledge/workflow-guidance.js +1 -1
- package/dist/monitor/EventStore.d.ts +78 -0
- package/dist/monitor/EventStore.js +1 -0
- package/dist/participation/radar-core.d.ts +0 -1
- package/dist/participation/radar-core.js +1 -1
- package/dist/persona/address-format.d.ts +6 -0
- package/dist/persona/address-format.js +1 -0
- package/dist/persona/analyzer.js +1 -1
- package/dist/persona/index.d.ts +3 -0
- package/dist/persona/index.js +1 -1
- package/dist/persona/types.d.ts +1 -1
- package/dist/persona/types.js +1 -1
- package/dist/project/business-puzzle.js +1 -1
- package/dist/project/edit-planner.js +1 -1
- package/dist/project/evaluation-fix.spec.d.ts +1 -0
- package/dist/project/evaluation-fix.spec.js +1 -0
- package/dist/project/evaluation.js +1 -1
- package/dist/project/graph-builder.js +1 -1
- package/dist/project/handlers.d.ts +2 -18
- package/dist/project/handlers.js +1 -1
- package/dist/project/index.js +1 -1
- package/dist/project/machine-nodes.d.ts +23 -0
- package/dist/project/machine-nodes.js +1 -1
- package/dist/project/machine-panorama.d.ts +41 -0
- package/dist/project/machine-panorama.js +1 -0
- package/dist/project/object-panorama.d.ts +179 -0
- package/dist/project/object-panorama.js +1 -0
- package/dist/project/object-type.d.ts +1 -0
- package/dist/project/object-type.js +1 -0
- package/dist/project/participation-radar.js +1 -1
- package/dist/project/semantic-assembler.js +1 -1
- package/dist/project/service-panorama.d.ts +180 -0
- package/dist/project/service-panorama.js +1 -0
- package/dist/project/stage-gate.d.ts +0 -1
- package/dist/project/stage-gate.js +1 -1
- package/dist/project/task-tracker.d.ts +4 -0
- package/dist/project/task-tracker.js +1 -1
- package/dist/role/derivation.d.ts +19 -2
- package/dist/role/derivation.js +1 -1
- package/dist/role/index.d.ts +2 -2
- package/dist/role/index.js +1 -1
- package/dist/role/model.js +1 -1
- package/dist/role/resolution.d.ts +16 -0
- package/dist/role/resolution.js +1 -1
- package/dist/role/types.d.ts +1 -1
- package/dist/role/types.js +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/call/allocation.d.ts +10 -0
- package/dist/schema/call/arbitration.d.ts +14 -3
- package/dist/schema/call/arbitration.js +1 -1
- package/dist/schema/call/base.d.ts +16 -0
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/bridge.d.ts +7 -0
- package/dist/schema/call/contact.d.ts +11 -0
- package/dist/schema/call/demand.d.ts +11 -0
- package/dist/schema/call/guard.d.ts +3 -0
- package/dist/schema/call/handler.js +1 -1
- package/dist/schema/call/machine.d.ts +12 -0
- package/dist/schema/call/machine.js +1 -1
- package/dist/schema/call/order.d.ts +11 -0
- package/dist/schema/call/payment.d.ts +4 -3
- package/dist/schema/call/payment.js +1 -1
- package/dist/schema/call/permission.d.ts +11 -0
- package/dist/schema/call/personal.d.ts +38 -0
- package/dist/schema/call/personal.js +1 -1
- package/dist/schema/call/progress.d.ts +11 -0
- package/dist/schema/call/proof.d.ts +2 -0
- package/dist/schema/call/repository.d.ts +15 -4
- package/dist/schema/call/reward.d.ts +17 -12
- package/dist/schema/call/reward.js +1 -1
- package/dist/schema/call/semantic.d.ts +3 -2
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.d.ts +17 -0
- package/dist/schema/call/service.js +1 -1
- package/dist/schema/call/treasury.d.ts +17 -0
- package/dist/schema/common/index.d.ts +21 -0
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/evaluation/index.d.ts +146 -0
- package/dist/schema/evaluation/index.js +1 -1
- package/dist/schema/index.d.ts +1 -0
- package/dist/schema/index.js +1 -1
- package/dist/schema/intent-radar/index.d.ts +30 -3
- package/dist/schema/intent-radar/index.js +1 -1
- package/dist/schema/local/index.d.ts +9 -0
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/messenger/index.d.ts +54 -0
- package/dist/schema/messenger/index.js +1 -1
- package/dist/schema/operations.d.ts +932 -9
- package/dist/schema/operations.js +1 -1
- package/dist/schema/permission/index.d.ts +17 -0
- package/dist/schema/permission/index.js +1 -1
- package/dist/schema/project/index.d.ts +6 -0
- package/dist/schema/project/index.js +1 -1
- package/dist/schema/query/index.d.ts +663 -56
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/trust/index.d.ts +17 -0
- package/dist/schema/trust/index.js +1 -1
- package/dist/schema/watch/index.d.ts +204 -0
- package/dist/schema/watch/index.js +1 -0
- package/dist/schema/workflow/index.d.ts +301 -0
- package/dist/schema/workflow/index.js +1 -1
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/account_operation.output.json +5 -2
- package/dist/schemas/bridge_operation.output.json +5 -2
- package/dist/schemas/bridge_operation.schema.json +25 -9
- package/dist/schemas/evaluation_operation.output.json +276 -1
- package/dist/schemas/evaluation_operation.schema.json +307 -0
- package/dist/schemas/guard2file.schema.json +6 -2
- package/dist/schemas/index.json +13 -1
- package/dist/schemas/intent_radar.output.json +20 -2
- package/dist/schemas/intent_radar.schema.json +10 -1
- package/dist/schemas/local_info_operation.output.json +5 -2
- package/dist/schemas/local_mark_operation.output.json +5 -2
- package/dist/schemas/machineNode2file.schema.json +6 -2
- package/dist/schemas/messenger_operation.output.json +105 -2
- package/dist/schemas/messenger_operation.schema.json +98 -0
- package/dist/schemas/monitor_events.output.json +1360 -0
- package/dist/schemas/monitor_events.schema.json +62 -0
- package/dist/schemas/onchain_events.output.json +237 -14
- package/dist/schemas/onchain_events.schema.json +20 -0
- package/dist/schemas/onchain_operations.output.json +10 -5
- package/dist/schemas/onchain_operations.schema.json +768 -409
- package/dist/schemas/onchain_operations_allocation.schema.json +23 -7
- package/dist/schemas/onchain_operations_arbitration.schema.json +34 -9
- package/dist/schemas/onchain_operations_contact.schema.json +29 -5
- package/dist/schemas/onchain_operations_demand.schema.json +29 -5
- package/dist/schemas/onchain_operations_gen_passport.schema.json +6 -2
- package/dist/schemas/onchain_operations_gen_proof.schema.json +6 -2
- package/dist/schemas/onchain_operations_guard.schema.json +6 -2
- package/dist/schemas/onchain_operations_machine.schema.json +34 -10
- package/dist/schemas/onchain_operations_order.schema.json +29 -5
- package/dist/schemas/onchain_operations_payment.schema.json +13 -10
- package/dist/schemas/onchain_operations_permission.schema.json +29 -5
- package/dist/schemas/onchain_operations_personal.schema.json +44 -2
- package/dist/schemas/onchain_operations_progress.schema.json +29 -5
- package/dist/schemas/onchain_operations_proof.schema.json +6 -2
- package/dist/schemas/onchain_operations_repository.schema.json +310 -305
- package/dist/schemas/onchain_operations_reward.schema.json +46 -10
- package/dist/schemas/onchain_operations_service.schema.json +49 -13
- package/dist/schemas/onchain_operations_treasury.schema.json +46 -10
- package/dist/schemas/onchain_table_data.output.json +3750 -208
- package/dist/schemas/onchain_table_data.schema.json +311 -0
- package/dist/schemas/permission_operation.output.json +32 -0
- package/dist/schemas/project_operation.schema.json +14 -8
- package/dist/schemas/query_toolkit.output.json +425 -320
- package/dist/schemas/query_toolkit.schema.json +139 -1
- package/dist/schemas/trust_score.output.json +38 -0
- package/dist/schemas/trust_score.schema.json +32 -0
- package/dist/schemas/watch_operation.output.json +827 -0
- package/dist/schemas/watch_operation.schema.json +145 -0
- package/dist/schemas/workflow_operation.output.json +263 -5
- package/dist/schemas/workflow_operation.schema.json +597 -2
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/evaluation.js +1 -1
- package/dist/tools/handlers/intent-radar.js +1 -1
- package/dist/tools/handlers/messenger.js +1 -1
- package/dist/tools/handlers/monitor.d.ts +2 -0
- package/dist/tools/handlers/monitor.js +1 -0
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/permission.js +1 -1
- package/dist/tools/handlers/project.js +1 -1
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/trust.d.ts +14 -0
- package/dist/tools/handlers/trust.js +1 -1
- package/dist/tools/handlers/watch.d.ts +2 -0
- package/dist/tools/handlers/watch.js +1 -0
- package/dist/tools/handlers/workflow.js +1 -1
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.js +1 -1
- package/dist/tools/shared.js +1 -1
- package/package.json +2 -2
- package/dist/customer/post-purchase.d.ts +0 -44
- package/dist/customer/post-purchase.js +0 -1
- package/dist/project/migration.d.ts +0 -22
- package/dist/project/migration.js +0 -1
- package/dist/project/rollback-policy.d.ts +0 -45
- package/dist/project/rollback-policy.js +0 -1
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import type { z } from "zod";
|
|
2
|
+
import type { ProjectOperationInputSchema } from "../schema/project/index.js";
|
|
3
|
+
type ProjectInput = z.infer<typeof ProjectOperationInputSchema>;
|
|
4
|
+
interface PanoBase {
|
|
5
|
+
action: "object_panorama";
|
|
6
|
+
object: string;
|
|
7
|
+
network: string;
|
|
8
|
+
head: {
|
|
9
|
+
name: string | null;
|
|
10
|
+
tags: string[];
|
|
11
|
+
description: string | null;
|
|
12
|
+
};
|
|
13
|
+
data_gaps: string[];
|
|
14
|
+
}
|
|
15
|
+
export interface ProgressPanoramaResult extends PanoBase {
|
|
16
|
+
object_type: "Progress";
|
|
17
|
+
fields: {
|
|
18
|
+
machine: string | null;
|
|
19
|
+
current: string | null;
|
|
20
|
+
task: string | null;
|
|
21
|
+
history_count: number | null;
|
|
22
|
+
current_time: number | null;
|
|
23
|
+
};
|
|
24
|
+
context_repositories: string[];
|
|
25
|
+
operators: {
|
|
26
|
+
name: string;
|
|
27
|
+
operators: string[];
|
|
28
|
+
}[];
|
|
29
|
+
session: {
|
|
30
|
+
next_node: string | null;
|
|
31
|
+
weights: number | null;
|
|
32
|
+
threshold: number | null;
|
|
33
|
+
forwards: {
|
|
34
|
+
forward: string;
|
|
35
|
+
who: string | null;
|
|
36
|
+
accomplished: boolean;
|
|
37
|
+
msg: string | null;
|
|
38
|
+
time: number | null;
|
|
39
|
+
}[];
|
|
40
|
+
} | null;
|
|
41
|
+
related: {
|
|
42
|
+
key: string | null;
|
|
43
|
+
items: {
|
|
44
|
+
address: string;
|
|
45
|
+
object_type: string;
|
|
46
|
+
time: number | null;
|
|
47
|
+
}[];
|
|
48
|
+
count: number;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export interface DemandPanoramaResult extends PanoBase {
|
|
52
|
+
object_type: "Demand";
|
|
53
|
+
fields: {
|
|
54
|
+
location: string | null;
|
|
55
|
+
um: string | null;
|
|
56
|
+
permission: string | null;
|
|
57
|
+
presenters_count: number | null;
|
|
58
|
+
};
|
|
59
|
+
rewards: string[];
|
|
60
|
+
guards: {
|
|
61
|
+
guard: string;
|
|
62
|
+
}[];
|
|
63
|
+
presenters: {
|
|
64
|
+
count: number;
|
|
65
|
+
items: {
|
|
66
|
+
service: string;
|
|
67
|
+
recommend: string | null;
|
|
68
|
+
acceptance_score: number | null;
|
|
69
|
+
feedback: string | null;
|
|
70
|
+
feedback_time: number | null;
|
|
71
|
+
update_time: number | null;
|
|
72
|
+
}[];
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
export interface OrderPanoramaResult extends PanoBase {
|
|
76
|
+
object_type: "Order";
|
|
77
|
+
fields: {
|
|
78
|
+
service: string | null;
|
|
79
|
+
machine: string | null;
|
|
80
|
+
progress: string | null;
|
|
81
|
+
allocation: string | null;
|
|
82
|
+
discount: string | null;
|
|
83
|
+
amount: string | null;
|
|
84
|
+
owner: string | null;
|
|
85
|
+
claimed_by: string | null;
|
|
86
|
+
required_info: string | null;
|
|
87
|
+
time: number | null;
|
|
88
|
+
};
|
|
89
|
+
items: {
|
|
90
|
+
name: string | null;
|
|
91
|
+
price: string | null;
|
|
92
|
+
quantity: string | null;
|
|
93
|
+
wip_hash: string | null;
|
|
94
|
+
}[];
|
|
95
|
+
allocation_state: "none" | "pending" | "allocated";
|
|
96
|
+
progress_next: string | null;
|
|
97
|
+
progress_since: number | null;
|
|
98
|
+
disputes: string[];
|
|
99
|
+
agents: string[];
|
|
100
|
+
updated_ms: number | null;
|
|
101
|
+
related: {
|
|
102
|
+
key: string | null;
|
|
103
|
+
items: {
|
|
104
|
+
address: string;
|
|
105
|
+
object_type: string;
|
|
106
|
+
time: number | null;
|
|
107
|
+
}[];
|
|
108
|
+
count: number;
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
export interface ArbPanoramaResult extends PanoBase {
|
|
112
|
+
object_type: "Arb";
|
|
113
|
+
fields: {
|
|
114
|
+
arbitration: string | null;
|
|
115
|
+
order: string | null;
|
|
116
|
+
service: string | null;
|
|
117
|
+
fee: string | null;
|
|
118
|
+
feedback: string | null;
|
|
119
|
+
indemnity: {
|
|
120
|
+
amount: string | null;
|
|
121
|
+
time: number | null;
|
|
122
|
+
} | null;
|
|
123
|
+
voting_deadline: number | null;
|
|
124
|
+
objection: string | null;
|
|
125
|
+
status: string | null;
|
|
126
|
+
compensation_time: number | null;
|
|
127
|
+
time: number | null;
|
|
128
|
+
type_raw: string | null;
|
|
129
|
+
};
|
|
130
|
+
voted: {
|
|
131
|
+
voter: string;
|
|
132
|
+
agrees: number[];
|
|
133
|
+
weight: number;
|
|
134
|
+
time: number;
|
|
135
|
+
}[];
|
|
136
|
+
proposition: {
|
|
137
|
+
name: string;
|
|
138
|
+
votes: number;
|
|
139
|
+
}[];
|
|
140
|
+
updated_ms: number | null;
|
|
141
|
+
related: {
|
|
142
|
+
key: string | null;
|
|
143
|
+
items: {
|
|
144
|
+
address: string;
|
|
145
|
+
object_type: string;
|
|
146
|
+
time: number | null;
|
|
147
|
+
}[];
|
|
148
|
+
count: number;
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
export interface RepositoryPanoramaResult extends PanoBase {
|
|
152
|
+
object_type: "Repository";
|
|
153
|
+
fields: {
|
|
154
|
+
um: string | null;
|
|
155
|
+
permission: string | null;
|
|
156
|
+
data_count: number | null;
|
|
157
|
+
};
|
|
158
|
+
policies: {
|
|
159
|
+
name: string;
|
|
160
|
+
description: string | null;
|
|
161
|
+
id_from: string | null;
|
|
162
|
+
value_type: string | null;
|
|
163
|
+
write_guards: number;
|
|
164
|
+
quote_guard: string | null;
|
|
165
|
+
}[];
|
|
166
|
+
rewards: string[];
|
|
167
|
+
data_entries: {
|
|
168
|
+
count: number | null;
|
|
169
|
+
items: {
|
|
170
|
+
entity: string | null;
|
|
171
|
+
name: string | null;
|
|
172
|
+
value: string | null;
|
|
173
|
+
value_type: string | null;
|
|
174
|
+
}[];
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
export type ObjectPanoramaResult = ProgressPanoramaResult | DemandPanoramaResult | OrderPanoramaResult | ArbPanoramaResult | RepositoryPanoramaResult;
|
|
178
|
+
export declare function handleObjectPanorama(v: ProjectInput): Promise<ObjectPanoramaResult>;
|
|
179
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Config,LocalMark,query_objects,query_object_last_updated,queryTableItem_ObjectLinkerTx,queryTableItem_DemandPresenter,objectTypeFromAddress,ObjectType}from'@wowok/wowok';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 queryTableItem_ObjectLinkerTx({'address':a,'no_cache':!![],'network':b}),g=(f?.['items']??[])['map'](j=>({'service':String(j?.['who']??''),'time':typeof j?.['time']==='number'?j['time']:null}))['filter'](i=>objectTypeFromAddress(i['service'])===ObjectType['Service']);e=g['length'];const h=g['slice'](-0x32)['reverse']();for(const i of h){let j;try{j=await queryTableItem_DemandPresenter({'parent':a,'address':i['service'],'no_cache':!![],'network':b});}catch{c['push']('presenters:\x20detail\x20fetch\x20failed\x20for\x20one\x20entry');}d['push']({'service':i['service'],'recommend':str(j?.['recommend']),'acceptance_score':num(j?.['acceptance_score']),'feedback':str(j?.['feedback']),'feedback_time':num(j?.['feedback_time']),'update_time':num(j?.['update_time'])??i['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 queryTableItem_ObjectLinkerTx({'address':m['key'],'no_cache':!![],'network':d}),o=n?.['items']??[];m['count']=o['length'];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='Account';try{s=objectTypeFromAddress(r)??'Account';}catch{}m['items']['push']({'address':r,'object_type':s,'time':typeof q?.['time']==='number'?q['time']:null});}}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});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 queryTableItem_ObjectLinkerTx({'address':f,'no_cache':!![],'network':d}),J=I?.['items']??[];B['count']=J['length'];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='Account';try{M=objectTypeFromAddress(L)??'Account';}catch{}B['items']['push']({'address':L,'object_type':M,'time':typeof K?.['time']==='number'?K['time']:null});}}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});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 queryTableItem_ObjectLinkerTx({'address':f,'no_cache':!![],'network':d}),W=V?.['items']??[];R['count']=W['length'];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='Account';try{Z=objectTypeFromAddress(Y)??'Account';}catch{}R['items']['push']({'address':Y,'object_type':Z,'time':typeof X?.['time']==='number'?X['time']:null});}}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.');}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function normalizeObjectType(objectType: string | null | undefined): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function normalizeObjectType(a){if(!a)return'unknown';const b=a['replace'](/<.*>/,'')['trim'](),c=b['split']('::'),d=c[c['length']-0x1]||'unknown';if(d['length']>0x0&&d===d['toLowerCase']())return d['charAt'](0x0)['toUpperCase']()+d['slice'](0x1);return d;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{LocalMark,query_objects,query_table,watch_conversations}from'@wowok/wowok';import{analyzeOrderParticipation,aggregateRadar,isConsequenceNode}from'../participation/radar-core.js';import{monitorOrder}from'../customer/order-monitor.js';import{analyzeMerchantInterest}from'../participation/merchant-interest.js';import{analyzeCustomerInterest}from'../participation/customer-interest.js';import{analyzeSupplierInterest}from'../participation/supplier-interest.js';import{analyzeCollaboratorInterest}from'../participation/collaborator-interest.js';import{fetchMachineNodes}from'./machine-nodes.js';import{extractGenericTokenType,registryDisplayHint}from'../knowledge/fund-layer.js';const QUERY_BATCH=0x32;function fld(a,b){return a?.[b]??a?.['data']?.[b];}async function resolveAddress(a,b){const c=await LocalMark['Instance']()['get_address'](a);if(!c)throw new Error('Cannot\x20resolve\x20'+b+'\x20\x27'+a+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.\x20'+'Register\x20it\x20via\x20local_mark_operation\x20or\x20pass\x20the\x200x\x20address\x20directly.');return c;}function balanceStr(a){if(a==null)return undefined;if(typeof a==='object'&&'balance'in a)return String(a['balance']);return String(a);}function balanceToken(a){if(a!=null&&typeof a==='object'&&typeof a['token_type']==='string')return a['token_type'];return undefined;}function summarizeAllocation(a,b){const c=Array['isArray'](a)?a:Array['isArray'](a?.['allocators'])?a['allocators']:[];if(c['length']===0x0)return undefined;let d=0x0,e=0x0,f=0x0,g=0x0;const h=b['toLowerCase']();for(const i of c){for(const j of i?.['sharing']??[]){d++;const k=j?.['who'];if(k==null)continue;if(typeof k==='object'&&'GuardIdentifier'in k)e++;else{if(typeof k==='object'&&'Signer'in k)g++;else{if(typeof k==='object'&&'Entity'in k){const l=k['Entity'],m=typeof l==='string'?l:l?.['name_or_address'];if(typeof m==='string'&&m['toLowerCase']()===h)f++;}else typeof k==='string'&&k['toLowerCase']()===h&&f++;}}}}return{'recipient_slots':d,'guard_gated_slots':e,'direct_to_me_slots':f,'to_payer_slots':g};}async function queryObjectsBatched(a,b){const c=[];for(let d=0x0;d<a['length'];d+=QUERY_BATCH){const e=a['slice'](d,d+QUERY_BATCH),f=await query_objects({'objects':e,'network':b});c['push'](...f?.['objects']??[]);}return c;}async function fetchEntityPermissions(a,b){const c=new Map(),d=[];let e=undefined;for(;;){const g=await query_table({'parent':a,'cursor':e??undefined,'network':b});if(!g?.['items']||g['items']['length']===0x0)break;for(const h of g['items']){if(h['object'])d['push'](h['object']);}if(!g['hasNextPage']||!g['nextCursor'])break;e=g['nextCursor'];}const f=await queryObjectsBatched(d,b);for(const i of f){if(i?.['type']!=='TableItem_PermissionPerm')continue;const j=fld(i,'address'),k=fld(i,'perm')??[],l=k['map'](m=>typeof m==='number'?m:typeof m?.['index']==='number'?m['index']:null)['filter'](m=>m!==null);if(j)c['set'](j,l);}return c;}function toRadarMachineNodes(a){return a['map'](b=>({'name':b['name'],'pairs':(Array['isArray'](b['value'])?b['value']:[])['map'](c=>({'prev_node':c['prev_node'],'threshold':c['threshold']??undefined,'forwards':(c['forwards']??[])['map'](d=>({'name':d['name'],'permissionIndex':d['permissionIndex']??null,'namedOperator':d['namedOperator']??null,'guard':d['guard']?.['guard']??(typeof d['guard']==='string'?d['guard']:null),'weight':d['weight']??null}))}))}));}export async function handleParticipationRadar(a){if(!a['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20participation_radar');if(!a['radar_targets']||a['radar_targets']['length']===0x0)throw new Error('\x27radar_targets\x27\x20(1-20\x20in-flight\x20orders)\x20is\x20required\x20for\x20participation_radar');const b=a['network']??'testnet',d=a['radar_include_alerts']??!![],f=[],g=await resolveAddress(a['radar_account'],'radar_account'),h=await Promise['all'](a['radar_targets']['map'](async I=>({'progress':await resolveAddress(I['progress'],'progress'),'order':I['order']?await resolveAddress(I['order'],'order'):undefined}))),i=h['flatMap'](I=>I['order']?[I['progress'],I['order']]:[I['progress']]),j=await queryObjectsBatched(i,b),k=new Map();for(const I of j){const J=fld(I,'object');if(J)k['set'](J,I);}const l=new Map(),m=new Map();for(const K of h){const L=k['get'](K['progress']);if(!L){f['push']('Progress\x20'+K['progress']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20target\x20skipped.');continue;}l['set'](K['progress'],L);if(K['order']){const M=k['get'](K['order']);if(M)m['set'](K['order'],M);else f['push']('Order\x20'+K['order']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20order-holder\x20detection\x20disabled\x20for\x20'+K['progress']+'.');}}h['length']>0x0&&l['size']===0x0&&f['push']('NETWORK\x20MISMATCH\x20SUSPECTED:\x200/'+h['length']+'\x20radar\x20targets\x20exist\x20on\x20network=\x27'+b+'\x27.\x20'+'These\x20objects\x20most\x20likely\x20live\x20on\x20a\x20different\x20network\x20—\x20re-run\x20with\x20the\x20matching\x20\x27network\x27\x20parameter.');const q=[...new Set([...l['values']()]['map'](N=>fld(N,'machine'))['filter'](N=>!!N))],s=[...new Set([...m['values']()]['map'](N=>fld(N,'service'))['filter'](N=>!!N))],u=[...new Set([...m['values']()]['flatMap'](N=>{const O=fld(N,'dispute');return Array['isArray'](O)?O:[];}))],w=new Map(),x=new Map(),y=new Map(),z=new Map();await Promise['all']([...q['map'](async N=>{try{const [O,P]=await Promise['all']([queryObjectsBatched([N],b),fetchMachineNodes(N,b)]);if(O[0x0])w['set'](N,O[0x0]);x['set'](N,toRadarMachineNodes(P));}catch(Q){f['push']('Machine\x20'+N+'\x20fetch\x20failed:\x20'+Q['message']+'\x20—\x20workflow\x20unknown\x20for\x20its\x20orders.');}}),((async()=>{if(s['length']===0x0)return;try{const N=await queryObjectsBatched(s,b);for(const O of N){const P=fld(O,'object');if(P)y['set'](P,O);}}catch(Q){f['push']('Service\x20query\x20failed:\x20'+Q['message']+'\x20—\x20compensation/reward\x20context\x20degraded.');}})()),((async()=>{if(u['length']===0x0)return;try{const N=await queryObjectsBatched(u,b);for(const O of N){const P=fld(O,'object');if(P)z['set'](P,O);}}catch(Q){f['push']('Arb\x20query\x20failed:\x20'+Q['message']+'\x20—\x20compensation\x20claim\x20detection\x20disabled.');}})())]);const A=new Map(),B=[...new Set(q['map'](N=>fld(w['get'](N),'permission'))['filter'](N=>!!N))],C=new Map();await Promise['all'](B['map'](async N=>{try{const [O,P]=await Promise['all']([queryObjectsBatched([N],b),fetchEntityPermissions(N,b)]),Q=O[0x0];C['set'](N,{'address':N,'entity_count':fld(Q,'entity_count'),'perm_remark':fld(Q,'perm_remark'),'entityPermissions':P,'owner':fld(Q,'builder')});}catch(R){f['push']('Permission\x20'+N+'\x20fetch\x20failed:\x20'+R['message']+'\x20—\x20operator\x20permission\x20matching\x20degraded.');}}));for(const N of q){const O=fld(w['get'](N),'permission');if(O&&C['has'](O))A['set'](N,C['get'](O));}let D=0x0;const E=new Map();try{const P=await watch_conversations({'account':g,'unreadOnly':!![],'previewMessageCount':0x0,'skipAutoMarkViewed':!![]}),Q=Array['isArray'](P)?P:P?.['conversations']??[];for(const R of Q){const S=R?.['peerAddress'],T=typeof R?.['unreadCount']==='number'?R['unreadCount']:0x0;typeof S==='string'&&T>0x0&&(E['set'](S['toLowerCase'](),T),D+=T);}}catch{f['push']('Messenger\x20unread\x20unavailable\x20(radar\x20account\x20is\x20not\x20a\x20local\x20messenger\x20account,\x20or\x20messenger\x20storage\x20offline)\x20'+'—\x20unread_messages_total\x20reported\x20as\x200.');}const F=[],G=Date['now']();for(const U of h){const V=l['get'](U['progress']);if(!V)continue;const W=U['order']?m['get'](U['order']):undefined,X=fld(V,'machine'),Y=fld(V,'current')??'',Z=fld(V,'namedOperator')??[],a0={};for(const ae of Z){if(ae?.['name'])a0[ae['name']]=Array['isArray'](ae['operators'])?ae['operators']:[];}const a1=W?fld(W,'service'):undefined,a2=a1?y['get'](a1):undefined;let a3;const a4=W?fld(W,'builder'):undefined;if(W&&a4===g){const af=fld(W,'dispute')??[];for(const ag of af){const ah=z['get'](ag);if(!ah)continue;const ai=fld(ah,'indemnity');if(ai){a3={'arbitration':fld(ah,'arbitration')??ag,'note':'Arbitration\x20verdict\x20recorded\x20an\x20indemnity\x20(Arb\x20'+ag+').\x20'+'Claim\x20via\x20service\x20op=\x27compensation_claim\x27\x20—\x20paid\x20directly\x20from\x20the\x20Service\x20compensation_fund.\x20'+'(Claimed-status\x20is\x20not\x20readable\x20from\x20the\x20Arb\x20object;\x20the\x20contract\x20rejects\x20double-claims.)'};break;}}}const a5=[];if(a2&&a4===g){const aj=fld(a2,'rewards')??[];for(const ak of aj){a5['push']({'address':ak,'description':'Service\x20reward\x20'+ak+'\x20(guard-gated\x20—\x20eligibility\x20verified\x20at\x20claim\x20time)'});}}const a6=isConsequenceNode(Y,'completed'),a7=isConsequenceNode(Y,'refunded');let a8=0x0;if(E['size']>0x0){const al=new Set();if(a4)al['add'](a4['toLowerCase']());for(const am of Object['values'](a0)){for(const an of am)al['add'](an['toLowerCase']());}al['delete'](g['toLowerCase']());for(const ao of al){a8+=E['get'](ao)??0x0;}}const a9={'account':g,'progress_address':U['progress'],'order_address':U['order'],'current_node':Y,'order_holder':a4,'machine_nodes':X?x['get'](X):undefined,'permission':X?A['get'](X)??null:null,'named_accounts':a0,'service_builder':X?A['get'](X)?.['owner']:undefined,'claimable_rewards':a5['length']>0x0?a5:undefined,'pending_compensation':a3,'rating_pending':a6&&a4===g,'unread_messages':a8>0x0?a8:undefined,'last_progress_at':fld(V,'current_time')??undefined,'now':G},aa=analyzeOrderParticipation(a9),ab=(fld(a2,'arbitrations')??[])['length']>0x0,ac=a6?'completed':a7?'refunded':null,ad=a9['last_progress_at']!=null?(G-a9['last_progress_at'])/0x36ee80:undefined;if(aa['perspective']==='merchant')aa['interest_analysis']=analyzeMerchantInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'allocation':summarizeAllocation(fld(a2,'order_allocators'),g),'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'arbitration_bound':ab,'rewards_count':(fld(a2,'rewards')??[])['length'],'stalled_hours':ad,'terminal':ac,'unread_messages':a8>0x0?a8:undefined});else{if(aa['perspective']==='supplier')aa['interest_analysis']=analyzeSupplierInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'arbitration_bound':ab,'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined});else{if(aa['perspective']==='collaborator')aa['interest_analysis']=analyzeCollaboratorInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'collaborator_kind':aa['collaborator_kind'],'arbitration_bound':ab,'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined});else aa['perspective']==='customer'&&(aa['interest_analysis']=analyzeCustomerInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'arbitration_bound':ab,'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined}));}}if(d&&W){const ap={'order_id':U['order'],'service_id':a1??'','current_node':Y||undefined,'created_at':Number(fld(W,'time')??G)||G,'last_progress_at':fld(V,'current_time')??undefined,'now':G,'order_amount':((()=>{try{return BigInt(fld(W,'amount')??0x0);}catch{return undefined;}})()),'compensation_balance':((()=>{try{const aq=fld(a2,'compensation_fund');return aq!=null?BigInt(aq):undefined;}catch{return undefined;}})()),'token':registryDisplayHint(extractGenericTokenType(fld(a2,'type_raw'))),'has_arbitration':(fld(a2,'arbitrations')??[])['length']>0x0,'pending_user_action':aa['operable']['some'](aq=>aq['execution_path']==='order_holder'),'completed':a6,'refunded':a7};try{const aq=monitorOrder({'current':ap,'thresholds':a['radar_monitor_thresholds']});aq['length']>0x0&&(aa['attached_alerts']=aq);}catch(ar){f['push']('Order\x20monitor\x20failed\x20for\x20'+U['order']+':\x20'+ar['message']+'.');}}F['push'](aa);}const H=aggregateRadar(F,D);return{'action':'participation_radar','account':g,'orders_analyzed':H['orders_analyzed'],'actionable':H['actionable'],'waiting':H['waiting'],'all_pending_claims':H['all_pending_claims'],'unread_messages_total':H['unread_messages_total'],'data_gaps':f,'summary':H['summary']};}
|
|
1
|
+
import{LocalMark,query_objects,query_table,watch_conversations}from'@wowok/wowok';import{analyzeOrderParticipation,aggregateRadar,isConsequenceNode}from'../participation/radar-core.js';import{monitorOrder}from'../customer/order-monitor.js';import{analyzeMerchantInterest}from'../participation/merchant-interest.js';import{analyzeCustomerInterest}from'../participation/customer-interest.js';import{analyzeSupplierInterest}from'../participation/supplier-interest.js';import{analyzeCollaboratorInterest}from'../participation/collaborator-interest.js';import{fetchMachineNodes}from'./machine-nodes.js';import{extractGenericTokenType,registryDisplayHint}from'../knowledge/fund-layer.js';const QUERY_BATCH=0x32;function fld(a,b){return a?.[b]??a?.['data']?.[b];}async function resolveAddress(a,b){const c=await LocalMark['Instance']()['get_address'](a);if(!c)throw new Error('Cannot\x20resolve\x20'+b+'\x20\x27'+a+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.\x20'+'Register\x20it\x20via\x20local_mark_operation\x20or\x20pass\x20the\x200x\x20address\x20directly.');return c;}function balanceStr(a){if(a==null)return undefined;if(typeof a==='object'&&'balance'in a)return String(a['balance']);return String(a);}function balanceToken(a){if(a!=null&&typeof a==='object'&&typeof a['token_type']==='string')return a['token_type'];return undefined;}function summarizeAllocation(a,b){const c=Array['isArray'](a)?a:Array['isArray'](a?.['allocators'])?a['allocators']:[];if(c['length']===0x0)return undefined;let d=0x0,e=0x0,f=0x0,g=0x0;const h=b['toLowerCase']();for(const i of c){for(const j of i?.['sharing']??[]){d++;const k=j?.['who'];if(k==null)continue;if(typeof k==='object'&&'GuardIdentifier'in k)e++;else{if(typeof k==='object'&&'Signer'in k)g++;else{if(typeof k==='object'&&'Entity'in k){const l=k['Entity'],m=typeof l==='string'?l:l?.['name_or_address'];if(typeof m==='string'&&m['toLowerCase']()===h)f++;}else typeof k==='string'&&k['toLowerCase']()===h&&f++;}}}}return{'recipient_slots':d,'guard_gated_slots':e,'direct_to_me_slots':f,'to_payer_slots':g};}async function queryObjectsBatched(a,b){const c=[];for(let d=0x0;d<a['length'];d+=QUERY_BATCH){const e=a['slice'](d,d+QUERY_BATCH),f=await query_objects({'objects':e,'network':b});c['push'](...f?.['objects']??[]);}return c;}async function fetchEntityPermissions(a,b){const c=new Map(),d=[];let e=undefined;for(;;){const g=await query_table({'parent':a,'cursor':e??undefined,'network':b});if(!g?.['items']||g['items']['length']===0x0)break;for(const h of g['items']){if(h['object'])d['push'](h['object']);}if(!g['hasNextPage']||!g['nextCursor'])break;e=g['nextCursor'];}const f=await queryObjectsBatched(d,b);for(const i of f){if(i?.['type']!=='TableItem_PermissionPerm')continue;const j=fld(i,'address'),k=fld(i,'perm')??[],l=k['map'](m=>typeof m==='number'?m:typeof m?.['index']==='number'?m['index']:null)['filter'](m=>m!==null);if(j)c['set'](j,l);}return c;}function toRadarMachineNodes(a){return a['map'](b=>({'name':b['name'],'pairs':(Array['isArray'](b['value'])?b['value']:[])['map'](c=>({'prev_node':c['prev_node'],'threshold':c['threshold']??undefined,'forwards':(c['forwards']??[])['map'](d=>({'name':d['name'],'permissionIndex':d['permissionIndex']??null,'namedOperator':d['namedOperator']??null,'guard':d['guard']?.['guard']??(typeof d['guard']==='string'?d['guard']:null),'weight':d['weight']??null}))}))}));}export async function handleParticipationRadar(a){if(!a['radar_account'])throw new Error('\x27radar_account\x27\x20is\x20required\x20for\x20participation_radar');if(!a['radar_targets']||a['radar_targets']['length']===0x0)throw new Error('\x27radar_targets\x27\x20(1-20\x20in-flight\x20orders)\x20is\x20required\x20for\x20participation_radar');const b=a['network']??'testnet',d=a['radar_include_alerts']??!![],f=[],g=await resolveAddress(a['radar_account'],'radar_account'),h=await Promise['all'](a['radar_targets']['map'](async I=>({'progress':await resolveAddress(I['progress'],'progress'),'order':I['order']?await resolveAddress(I['order'],'order'):undefined}))),i=h['flatMap'](I=>I['order']?[I['progress'],I['order']]:[I['progress']]),j=await queryObjectsBatched(i,b),k=new Map();for(const I of j){const J=fld(I,'object');if(J)k['set'](J,I);}const l=new Map(),m=new Map();for(const K of h){const L=k['get'](K['progress']);if(!L){f['push']('Progress\x20'+K['progress']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20target\x20skipped.');continue;}l['set'](K['progress'],L);if(K['order']){const M=k['get'](K['order']);if(M)m['set'](K['order'],M);else f['push']('Order\x20'+K['order']+'\x20not\x20found\x20on\x20'+b+'\x20—\x20order-holder\x20detection\x20disabled\x20for\x20'+K['progress']+'.');}}h['length']>0x0&&l['size']===0x0&&f['push']('NETWORK\x20MISMATCH\x20SUSPECTED:\x200/'+h['length']+'\x20radar\x20targets\x20exist\x20on\x20network=\x27'+b+'\x27.\x20'+'These\x20objects\x20most\x20likely\x20live\x20on\x20a\x20different\x20network\x20—\x20re-run\x20with\x20the\x20matching\x20\x27network\x27\x20parameter.');const q=[...new Set([...l['values']()]['map'](N=>fld(N,'machine'))['filter'](N=>!!N))],s=[...new Set([...m['values']()]['map'](N=>fld(N,'service'))['filter'](N=>!!N))],u=[...new Set([...m['values']()]['flatMap'](N=>{const O=fld(N,'dispute');return Array['isArray'](O)?O:[];}))],w=new Map(),x=new Map(),y=new Map(),z=new Map();await Promise['all']([...q['map'](async N=>{try{const [O,P]=await Promise['all']([queryObjectsBatched([N],b),fetchMachineNodes(N,b)]);if(O[0x0])w['set'](N,O[0x0]);x['set'](N,toRadarMachineNodes(P));}catch(Q){f['push']('Machine\x20'+N+'\x20fetch\x20failed:\x20'+Q['message']+'\x20—\x20workflow\x20unknown\x20for\x20its\x20orders.');}}),((async()=>{if(s['length']===0x0)return;try{const N=await queryObjectsBatched(s,b);for(const O of N){const P=fld(O,'object');if(P)y['set'](P,O);}}catch(Q){f['push']('Service\x20query\x20failed:\x20'+Q['message']+'\x20—\x20compensation/reward\x20context\x20degraded.');}})()),((async()=>{if(u['length']===0x0)return;try{const N=await queryObjectsBatched(u,b);for(const O of N){const P=fld(O,'object');if(P)z['set'](P,O);}}catch(Q){f['push']('Arb\x20query\x20failed:\x20'+Q['message']+'\x20—\x20compensation\x20claim\x20detection\x20disabled.');}})())]);const A=new Map(),B=[...new Set(q['map'](N=>fld(w['get'](N),'permission'))['filter'](N=>!!N))],C=new Map();await Promise['all'](B['map'](async N=>{try{const [O,P]=await Promise['all']([queryObjectsBatched([N],b),fetchEntityPermissions(N,b)]),Q=O[0x0];C['set'](N,{'address':N,'entity_count':fld(Q,'entity_count'),'perm_remark':fld(Q,'perm_remark'),'entityPermissions':P,'owner':fld(Q,'builder')});}catch(R){f['push']('Permission\x20'+N+'\x20fetch\x20failed:\x20'+R['message']+'\x20—\x20operator\x20permission\x20matching\x20degraded.');}}));for(const N of q){const O=fld(w['get'](N),'permission');if(O&&C['has'](O))A['set'](N,C['get'](O));}let D=0x0;const E=new Map();try{const P=await watch_conversations({'account':g,'unreadOnly':!![],'previewMessageCount':0x0,'skipAutoMarkViewed':!![]}),Q=Array['isArray'](P)?P:P?.['conversations']??[];for(const R of Q){const S=R?.['peerAddress'],T=typeof R?.['unreadCount']==='number'?R['unreadCount']:0x0;typeof S==='string'&&T>0x0&&(E['set'](S['toLowerCase'](),T),D+=T);}}catch{f['push']('Messenger\x20unread\x20unavailable\x20(radar\x20account\x20is\x20not\x20a\x20local\x20messenger\x20account,\x20or\x20messenger\x20storage\x20offline)\x20'+'—\x20unread_messages_total\x20reported\x20as\x200.');}const F=[],G=Date['now']();for(const U of h){const V=l['get'](U['progress']);if(!V)continue;const W=U['order']?m['get'](U['order']):undefined,X=fld(V,'machine'),Y=fld(V,'current')??'',Z=fld(V,'namedOperator')??[],a0={};for(const ae of Z){if(ae?.['name'])a0[ae['name']]=Array['isArray'](ae['operators'])?ae['operators']:[];}const a1=W?fld(W,'service'):undefined,a2=a1?y['get'](a1):undefined;let a3;const a4=W?fld(W,'builder'):undefined;if(W&&a4===g){const af=fld(W,'dispute')??[];for(const ag of af){const ah=z['get'](ag);if(!ah)continue;const ai=fld(ah,'indemnity');if(ai){a3={'arbitration':fld(ah,'arbitration')??ag,'note':'Arbitration\x20verdict\x20recorded\x20an\x20indemnity\x20(Arb\x20'+ag+').\x20'+'Claim\x20via\x20service\x20op=\x27compensation_claim\x27\x20—\x20paid\x20directly\x20from\x20the\x20Service\x20compensation_fund.\x20'+'(Claimed-status\x20is\x20not\x20readable\x20from\x20the\x20Arb\x20object;\x20the\x20contract\x20rejects\x20double-claims.)'};break;}}}const a5=[];if(a2&&a4===g){const aj=fld(a2,'rewards')??[];for(const ak of aj){a5['push']({'address':ak,'description':'Service\x20reward\x20'+ak+'\x20(guard-gated\x20—\x20eligibility\x20verified\x20at\x20claim\x20time)'});}}const a6=isConsequenceNode(Y,'completed'),a7=isConsequenceNode(Y,'refunded');let a8=0x0;if(E['size']>0x0){const al=new Set();if(a4)al['add'](a4['toLowerCase']());for(const am of Object['values'](a0)){for(const an of am)al['add'](an['toLowerCase']());}al['delete'](g['toLowerCase']());for(const ao of al){a8+=E['get'](ao)??0x0;}}const a9={'account':g,'progress_address':U['progress'],'order_address':U['order'],'current_node':Y,'order_holder':a4,'machine_nodes':X?x['get'](X):undefined,'permission':X?A['get'](X)??null:null,'named_accounts':a0,'claimable_rewards':a5['length']>0x0?a5:undefined,'pending_compensation':a3,'rating_pending':a6&&a4===g,'unread_messages':a8>0x0?a8:undefined,'last_progress_at':fld(V,'current_time')??undefined,'now':G},aa=analyzeOrderParticipation(a9),ab=(fld(a2,'arbitrations')??[])['length']>0x0,ac=a6?'completed':a7?'refunded':null,ad=a9['last_progress_at']!=null?(G-a9['last_progress_at'])/0x36ee80:undefined;if(aa['perspective']==='merchant')aa['interest_analysis']=analyzeMerchantInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'allocation':summarizeAllocation(fld(a2,'order_allocators'),g),'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'arbitration_bound':ab,'rewards_count':(fld(a2,'rewards')??[])['length'],'stalled_hours':ad,'terminal':ac,'unread_messages':a8>0x0?a8:undefined});else{if(aa['perspective']==='supplier')aa['interest_analysis']=analyzeSupplierInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'arbitration_bound':ab,'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined});else{if(aa['perspective']==='collaborator')aa['interest_analysis']=analyzeCollaboratorInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'collaborator_kind':aa['collaborator_kind'],'arbitration_bound':ab,'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined});else aa['perspective']==='customer'&&(aa['interest_analysis']=analyzeCustomerInterest({'account':g,'current_node':Y,'operable':aa['operable'],'waiting_on':aa['waiting_on'],'order_amount':balanceStr(fld(W,'amount')),'token_type':balanceToken(fld(W,'amount')),'compensation_fund':balanceStr(fld(a2,'compensation_fund')),'arbitration_bound':ab,'terminal':ac,'stalled_hours':ad,'unread_messages':a8>0x0?a8:undefined}));}}if(d&&W){const ap={'order_id':U['order'],'service_id':a1??'','current_node':Y||undefined,'created_at':Number(fld(W,'time')??G)||G,'last_progress_at':fld(V,'current_time')??undefined,'now':G,'order_amount':((()=>{try{return BigInt(fld(W,'amount')??0x0);}catch{return undefined;}})()),'compensation_balance':((()=>{try{const aq=fld(a2,'compensation_fund');return aq!=null?BigInt(aq):undefined;}catch{return undefined;}})()),'token':registryDisplayHint(extractGenericTokenType(fld(a2,'type_raw'))),'has_arbitration':(fld(a2,'arbitrations')??[])['length']>0x0,'pending_user_action':aa['operable']['some'](aq=>aq['execution_path']==='order_holder'),'completed':a6,'refunded':a7};try{const aq=monitorOrder({'current':ap,'thresholds':a['radar_monitor_thresholds']});aq['length']>0x0&&(aa['attached_alerts']=aq);}catch(ar){f['push']('Order\x20monitor\x20failed\x20for\x20'+U['order']+':\x20'+ar['message']+'.');}}F['push'](aa);}const H=aggregateRadar(F,D);return{'action':'participation_radar','account':g,'orders_analyzed':H['orders_analyzed'],'actionable':H['actionable'],'waiting':H['waiting'],'all_pending_claims':H['all_pending_claims'],'unread_messages_total':H['unread_messages_total'],'data_gaps':f,'summary':H['summary']};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{LocalProject}from'@wowok/wowok';const FRESH_THRESHOLD_MS=0x1*0x3c*0x3c*0x3e8,STALE_THRESHOLD_MS=0x18*0x3c*0x3c*0x3e8;export class SemanticAssembler{['localProject'];constructor(){this['localProject']=LocalProject['Instance']();}async['assemble'](a,b,c,d){const e=await this['assembleObjects'](b),f=this['assembleGraph'](c),g=this['assembleReputation'](b,d),h=this['computeFreshnessSummary'](e);return{'project':{'prefix':a['prefix'],'name':a['name'],'description':a['description'],'industry':a['industry'],'perspective':a['perspective'],'status':a['status'],'network':a['network'],'serviceAddress':a['serviceAddress'],'currentVersion':a['currentVersion']},'objects':e,'graph':f,'reputation':g,'freshnessSummary':h};}async['assembleObjects'](a){const b=[];for(const c of a){const d=await this['localProject']['getCachedObject'](c['objectAddress']),e=d?this['describeObject'](c,d):'Object\x20'+c['objectAddress']+'\x20(no\x20cached\x20on-chain\x20data)',f=d?this['extractKeyFields'](c['objectType'],d):{},g=d?this['classifyFreshness'](d['fetchedAt']):'unknown';b['push']({'address':c['objectAddress'],'name':c['objectName'],'objectType':c['objectType'],'role':c['role'],'description':e,'keyFields':f,'cacheFreshness':g});}return b;}['describeObject'](a,b){const c=a['objectType']??'unknown',d=a['objectName']??abbreviateAddress(a['objectAddress']);let e=c+'\x20\x22'+d+'\x22\x20at\x20'+abbreviateAddress(a['objectAddress']);try{const f=JSON['parse'](b['data']);switch(c){case'Service':{const g=f['bPublished'],h=f['bPaused'],i=f['sales'];e+=g?h?'\x20(published\x20but\x20PAUSED)':'\x20(published,\x20active)':'\x20(not\x20yet\x20published)';i&&Array['isArray'](i)&&i['length']>0x0&&(e+='\x20with\x20'+i['length']+'\x20sale\x20option(s)');break;}case'Machine':{const j=f['node_count']??f['nodeCount'],k=f['bPublished'];e+=k?'\x20(published,\x20'+j+'\x20nodes)':'\x20(draft,\x20'+j+'\x20nodes)';break;}case'Treasury':{e+='\x20(compensation\x20fund)';break;}case'Guard':{e+='\x20(validation\x20rules)';break;}default:break;}}catch{}return e;}['extractKeyFields'](a,b){const c={};try{const d=JSON['parse'](b['data']);switch(a){case'Service':c['bPublished']=d['bPublished'],c['bPaused']=d['bPaused'],c['sales']=d['sales'],c['machine']=d['machine'],c['buy_guard']=d['buy_guard'],c['permission']=d['permission'],c['compensation_fund']=d['compensation_fund'],c['order_allocators']=d['order_allocators'],c['arbitrations']=d['arbitrations'],c['rewards']=d['rewards'],c['repositories']=d['repositories'];break;case'Machine':c['bPublished']=d['bPublished'],c['bPaused']=d['bPaused'],c['node_count']=d['node_count']??d['nodeCount'],c['permission']=d['permission'];break;case'Treasury':c['permission']=d['permission'],c['guard']=d['guard'];break;case'Allocation':case'Arbitration':case'Reward':case'Repository':case'Demand':c['permission']=d['permission'],c['guard']=d['guard'];break;default:break;}}catch{}return c;}['assembleGraph'](a){const b={},c={},d=[],e=[];for(const f of a){b[f['relationshipType']]=(b[f['relationshipType']]??0x0)+0x1,c[f['edgeSource']]=(c[f['edgeSource']]??0x0)+0x1;f['edgeSource']==='internal'&&f['depth']===0x0&&d['push']({'target':f['targetObject'],'targetType':null,'fieldName':f['fieldName'],'relationshipType':f['relationshipType']});if(f['edgeSource']==='potential'){const g=f['metadata']?.['reason'];e['push']({'target':f['targetObject'],'targetType':f['metadata']?.['expected_target_type'],'fieldName':f['fieldName']??'unknown','reason':typeof g==='string'?g:'expected_relationship_missing'});}}return{'nodeCount':new Set([...a['map'](h=>h['sourceObject']),...a['map'](h=>h['targetObject'])])['size'],'edgeCount':a['length'],'edgesByType':b,'edgesBySource':c,'directDependencies':d,'potentialGaps':e};}['assembleReputation'](a,b){if(!b||b['size']===0x0)return[];const c=[];for(const d of a){const e=b['get'](d['objectAddress']);if(!e)continue;const f=e['likes']+e['dislikes'],g=f>0x0?e['likes']/f:0.5;c['push']({'address':d['objectAddress'],'likes':e['likes'],'dislikes':e['dislikes'],'favorites':e['favorites'],'sentimentScore':g,'notableVoters':e['voters']['slice'](0x0,0x5)['map'](h=>({'who':abbreviateAddress(h['who']),'like':h['like'],'dislike':h['dislike'],'favor':h['favor']}))});}return c;}['classifyFreshness'](a){const b=Date['now']()-a;if(b<FRESH_THRESHOLD_MS)return'fresh';if(b<STALE_THRESHOLD_MS)return'stale';return'stale';}['computeFreshnessSummary'](a){let b=0x0,c=0x0,d=0x0,e=null,f=null;for(const g of a){switch(g['cacheFreshness']){case'fresh':b++;break;case'stale':c++;break;case'unknown':d++;break;}}return{'freshCount':b,'staleCount':c,'unknownCount':d,'oldestFetch':e,'newestFetch':f};}['buildEvaluationPrompt'](a,b){const c=this['getScoringCriteria'](a),d=this['formatPrompt'](a,b,c);return{'evaluationType':a,'context':b,'prompt':d,'scoringCriteria':c};}['getScoringCriteria'](a){switch(a){case'risk':return[{'name':'structural_risk','description':'Risk\x20from\x20missing\x20bindings,\x20broken\x20workflows,\x20incomplete\x20setup','weight':0.3,'minScore':0x0,'maxScore':0x64},{'name':'fund_safety','description':'Risk\x20from\x20Treasury/Allocation\x20misconfiguration,\x20missing\x20compensation\x20fund','weight':0.25,'minScore':0x0,'maxScore':0x64},{'name':'operational_risk','description':'Risk\x20from\x20Machine/Guard\x20complexity,\x20pause\x20state,\x20missing\x20arbitration','weight':0.25,'minScore':0x0,'maxScore':0x64},{'name':'governance_risk','description':'Risk\x20from\x20Permission\x20setup,\x20missing\x20UM,\x20overly\x20permissive\x20rules','weight':0.2,'minScore':0x0,'maxScore':0x64}];case'trust':return[{'name':'reputation','description':'Registrar\x20like/dislike\x20ratio\x20and\x20favor\x20count','weight':0.3,'minScore':0x0,'maxScore':0x64},{'name':'arbitration_coverage','description':'Presence\x20and\x20quality\x20of\x20arbitration\x20arrangements','weight':0.25,'minScore':0x0,'maxScore':0x64},{'name':'guard_quality','description':'Guard\x20rule\x20complexity\x20and\x20coverage\x20of\x20business\x20scenarios','weight':0.25,'minScore':0x0,'maxScore':0x64},{'name':'transparency','description':'Object\x20descriptions,\x20repository\x20data,\x20contact\x20information\x20availability','weight':0.2,'minScore':0x0,'maxScore':0x64}];case'worth_buying':return[{'name':'price_reasonableness','description':'Service\x20pricing\x20vs.\x20comparable\x20services\x20and\x20market\x20norms','weight':0.3,'minScore':0x0,'maxScore':0x64},{'name':'refund_protection','description':'Compensation\x20fund\x20balance,\x20lock\x20duration,\x20refund\x20workflow\x20availability','weight':0.25,'minScore':0x0,'maxScore':0x64},{'name':'risk_adjusted_value','description':'Value\x20proposition\x20adjusted\x20for\x20project\x20risk\x20score','weight':0.25,'minScore':0x0,'maxScore':0x64},{'name':'trust_adjusted_value','description':'Value\x20proposition\x20adjusted\x20for\x20merchant\x20trust\x20score','weight':0.2,'minScore':0x0,'maxScore':0x64}];case'completeness':return[{'name':'object_coverage','description':'Expected\x20objects\x20present\x20vs.\x20missing\x20(based\x20on\x20EXPECTED_RELATIONSHIPS)','weight':0.3,'minScore':0x0,'maxScore':0x64},{'name':'binding_completeness','description':'Required\x20bindings\x20established\x20(Service→Machine,\x20Guard,\x20Permission,\x20etc.)','weight':0.3,'minScore':0x0,'maxScore':0x64},{'name':'workflow_rationality','description':'Machine\x20node\x20topology\x20is\x20sound,\x20no\x20dangling\x20nodes\x20or\x20cycles','weight':0.2,'minScore':0x0,'maxScore':0x64},{'name':'deployment_readiness','description':'Service\x20publishable,\x20all\x20prerequisites\x20met','weight':0.2,'minScore':0x0,'maxScore':0x64}];case'value':return[{'name':'market_positioning','description':'Service\x20differentiation\x20and\x20competitive\x20positioning','weight':0.3,'minScore':0x0,'maxScore':0x64},{'name':'revenue_potential','description':'Pricing\x20strategy\x20and\x20revenue\x20model\x20viability','weight':0.3,'minScore':0x0,'maxScore':0x64},{'name':'scalability','description':'Ability\x20to\x20handle\x20growth\x20(Machine\x20capacity,\x20Allocation\x20flexibility)','weight':0.2,'minScore':0x0,'maxScore':0x64},{'name':'ecosystem_fit','description':'Integration\x20with\x20WoWok\x20ecosystem\x20(rewards,\x20demands,\x20repositories)','weight':0.2,'minScore':0x0,'maxScore':0x64}];}}['formatPrompt'](a,b,d){const e=[];e['push']('#\x20Project\x20Evaluation:\x20'+a['toUpperCase']()),e['push'](''),e['push']('##\x20Project:\x20'+b['project']['name']+'\x20('+b['project']['prefix']+')'),e['push']('-\x20Perspective:\x20'+b['project']['perspective']),e['push']('-\x20Status:\x20'+b['project']['status']),e['push']('-\x20Network:\x20'+b['project']['network']),e['push']('-\x20Industry:\x20'+(b['project']['industry']??'unspecified')),e['push']('-\x20Service:\x20'+(b['project']['serviceAddress']??'not\x20set')),e['push'](''),e['push']('##\x20Objects');for(const f of b['objects']){e['push']('-\x20'+f['description']);}e['push'](''),e['push']('##\x20Relationship\x20Graph'),e['push']('-\x20Total\x20nodes:\x20'+b['graph']['nodeCount']),e['push']('-\x20Total\x20edges:\x20'+b['graph']['edgeCount']),e['push']('-\x20Edge\x20sources:\x20'+JSON['stringify'](b['graph']['edgesBySource'])),e['push']('-\x20Edge\x20types:\x20'+JSON['stringify'](b['graph']['edgesByType'])),e['push']('-\x20Direct\x20dependencies:\x20'+b['graph']['directDependencies']['length']);if(b['graph']['potentialGaps']['length']>0x0){e['push']('-\x20**Missing\x20relationships\x20(potential\x20gaps):\x20'+b['graph']['potentialGaps']['length']+'**');for(const g of b['graph']['potentialGaps']['slice'](0x0,0xa)){e['push']('\x20\x20-\x20'+g['fieldName']+'\x20→\x20'+(g['targetType']??'unknown')+'\x20('+g['reason']+')');}}e['push']('');if(b['reputation']['length']>0x0){e['push']('##\x20Reputation\x20Data\x20(from\x20Registrar)');for(const h of b['reputation']){e['push']('-\x20'+abbreviateAddress(h['address'])+':\x20'+h['likes']+'\x20likes,\x20'+h['dislikes']+'\x20dislikes,\x20'+h['favorites']+'\x20favorites\x20(sentiment:\x20'+(h['sentimentScore']*0x64)['toFixed'](0x0)+'%)');}e['push']('');}e['push']('##\x20Cache\x20Freshness'),e['push']('-\x20Fresh:\x20'+b['freshnessSummary']['freshCount']),e['push']('-\x20Stale:\x20'+b['freshnessSummary']['staleCount']),e['push']('-\x20Unknown:\x20'+b['freshnessSummary']['unknownCount']),e['push'](''),e['push']('##\x20Scoring\x20Criteria'),e['push']('Please\x20score\x20each\x20criterion\x20(0-100,\x20higher\x20=\x20better)\x20and\x20provide\x20a\x20brief\x20justification:');for(const i of d){e['push']('-\x20**'+i['name']+'**\x20(weight:\x20'+i['weight']+'):\x20'+i['description']);}return e['push'](''),e['push']('##\x20Instructions'),e['push']('1.\x20Analyze\x20the\x20project\x20from\x20the\x20\x22'+a+'\x22\x20perspective.'),e['push']('2.\x20Score\x20each\x20criterion\x20above\x20(0-100).'),e['push']('3.\x20Compute\x20a\x20weighted\x20overall\x20score.'),e['push']('4.\x20Provide\x20a\x201-2\x20sentence\x20summary\x20of\x20your\x20assessment.'),e['push']('5.\x20Return\x20the\x20result\x20as\x20JSON:\x20{\x20score:\x20number,\x20summary:\x20string,\x20details:\x20{\x20criterion_scores:\x20{...},\x20justification:\x20string\x20}\x20}'),e['join']('\x0a');}}function abbreviateAddress(a){if(!a||a['length']<0xc)return a;return a['slice'](0x0,0x6)+'...'+a['slice'](-0x4);}
|
|
1
|
+
import{LocalProject}from'@wowok/wowok';import{normalizeObjectType}from'./object-type.js';const FRESH_THRESHOLD_MS=0x1*0x3c*0x3c*0x3e8,STALE_THRESHOLD_MS=0x18*0x3c*0x3c*0x3e8;export class SemanticAssembler{['localProject'];constructor(){this['localProject']=LocalProject['Instance']();}async['assemble'](a,b,c,d){const e=await this['assembleObjects'](b),f=this['assembleGraph'](c),g=this['assembleReputation'](b,d),h=this['computeFreshnessSummary'](e);return{'project':{'prefix':a['prefix'],'name':a['name'],'description':a['description'],'industry':a['industry'],'perspective':a['perspective'],'status':a['status'],'network':a['network'],'serviceAddress':a['serviceAddress'],'currentVersion':a['currentVersion']},'objects':e,'graph':f,'reputation':g,'freshnessSummary':h};}async['assembleObjects'](a){const b=[];for(const c of a){const d=await this['localProject']['getCachedObject'](c['objectAddress']),e=d?this['describeObject'](c,d):'Object\x20'+c['objectAddress']+'\x20(no\x20cached\x20on-chain\x20data)',f=d?this['extractKeyFields'](c['objectType'],d):{},g=d?this['classifyFreshness'](d['fetchedAt']):'unknown';b['push']({'address':c['objectAddress'],'name':c['objectName'],'objectType':c['objectType'],'role':c['role'],'description':e,'keyFields':f,'cacheFreshness':g});}return b;}['describeObject'](a,b){const c=normalizeObjectType(a['objectType']),d=a['objectName']??abbreviateAddress(a['objectAddress']);let e=c+'\x20\x22'+d+'\x22\x20at\x20'+abbreviateAddress(a['objectAddress']);try{const f=JSON['parse'](b['data']);switch(c){case'Service':{const g=f['bPublished'],h=f['bPaused'],i=f['sales'];e+=g?h?'\x20(published\x20but\x20PAUSED)':'\x20(published,\x20active)':'\x20(not\x20yet\x20published)';i&&Array['isArray'](i)&&i['length']>0x0&&(e+='\x20with\x20'+i['length']+'\x20sale\x20option(s)');break;}case'Machine':{const j=f['node_count']??f['nodeCount'],k=f['bPublished'];e+=k?'\x20(published,\x20'+j+'\x20nodes)':'\x20(draft,\x20'+j+'\x20nodes)';break;}case'Treasury':{e+='\x20(compensation\x20fund)';break;}case'Guard':{e+='\x20(validation\x20rules)';break;}default:break;}}catch{}return e;}['extractKeyFields'](a,b){const c={};try{const d=JSON['parse'](b['data']);switch(normalizeObjectType(a)){case'Service':c['bPublished']=d['bPublished'],c['bPaused']=d['bPaused'],c['sales']=d['sales'],c['machine']=d['machine'],c['buy_guard']=d['buy_guard'],c['permission']=d['permission'],c['compensation_fund']=d['compensation_fund'],c['order_allocators']=d['order_allocators'],c['arbitrations']=d['arbitrations'],c['rewards']=d['rewards'],c['repositories']=d['repositories'];break;case'Machine':c['bPublished']=d['bPublished'],c['bPaused']=d['bPaused'],c['node_count']=d['node_count']??d['nodeCount'],c['permission']=d['permission'];break;case'Treasury':c['permission']=d['permission'],c['guard']=d['guard'];break;case'Allocation':case'Arbitration':case'Reward':case'Repository':case'Demand':c['permission']=d['permission'],c['guard']=d['guard'];break;default:break;}}catch{}return c;}['assembleGraph'](a){const b={},c={},d=[],e=[];for(const f of a){b[f['relationshipType']]=(b[f['relationshipType']]??0x0)+0x1,c[f['edgeSource']]=(c[f['edgeSource']]??0x0)+0x1;f['edgeSource']==='internal'&&f['depth']===0x0&&d['push']({'target':f['targetObject'],'targetType':null,'fieldName':f['fieldName'],'relationshipType':f['relationshipType']});if(f['edgeSource']==='potential'){const g=f['metadata']?.['reason'];e['push']({'target':f['targetObject'],'targetType':f['metadata']?.['expected_target_type'],'fieldName':f['fieldName']??'unknown','reason':typeof g==='string'?g:'expected_relationship_missing'});}}return{'nodeCount':new Set([...a['map'](h=>h['sourceObject']),...a['map'](h=>h['targetObject'])])['size'],'edgeCount':a['length'],'edgesByType':b,'edgesBySource':c,'directDependencies':d,'potentialGaps':e};}['assembleReputation'](a,b){if(!b||b['size']===0x0)return[];const c=[];for(const d of a){const e=b['get'](d['objectAddress']);if(!e)continue;const f=e['likes']+e['dislikes'],g=f>0x0?e['likes']/f:0.5;c['push']({'address':d['objectAddress'],'likes':e['likes'],'dislikes':e['dislikes'],'favorites':e['favorites'],'sentimentScore':g,'notableVoters':e['voters']['slice'](0x0,0x5)['map'](h=>({'who':abbreviateAddress(h['who']),'like':h['like'],'dislike':h['dislike'],'favor':h['favor']}))});}return c;}['classifyFreshness'](a){const b=Date['now']()-a;if(b<FRESH_THRESHOLD_MS)return'fresh';if(b<STALE_THRESHOLD_MS)return'stale';return'stale';}['computeFreshnessSummary'](a){let b=0x0,c=0x0,d=0x0,e=null,f=null;for(const g of a){switch(g['cacheFreshness']){case'fresh':b++;break;case'stale':c++;break;case'unknown':d++;break;}}return{'freshCount':b,'staleCount':c,'unknownCount':d,'oldestFetch':e,'newestFetch':f};}['buildEvaluationPrompt'](a,b){const c=this['getScoringCriteria'](a),d=this['formatPrompt'](a,b,c);return{'evaluationType':a,'context':b,'prompt':d,'scoringCriteria':c};}['getScoringCriteria'](a){switch(a){case'risk':return[{'name':'structural_risk','description':'Risk\x20from\x20missing\x20bindings,\x20broken\x20workflows,\x20incomplete\x20setup','weight':0.3,'minScore':0x0,'maxScore':0x64},{'name':'fund_safety','description':'Risk\x20from\x20Treasury/Allocation\x20misconfiguration,\x20missing\x20compensation\x20fund','weight':0.25,'minScore':0x0,'maxScore':0x64},{'name':'operational_risk','description':'Risk\x20from\x20Machine/Guard\x20complexity,\x20pause\x20state,\x20missing\x20arbitration','weight':0.25,'minScore':0x0,'maxScore':0x64},{'name':'governance_risk','description':'Risk\x20from\x20Permission\x20setup,\x20missing\x20UM,\x20overly\x20permissive\x20rules','weight':0.2,'minScore':0x0,'maxScore':0x64}];case'trust':return[{'name':'reputation','description':'Registrar\x20like/dislike\x20ratio\x20and\x20favor\x20count','weight':0.3,'minScore':0x0,'maxScore':0x64},{'name':'arbitration_coverage','description':'Presence\x20and\x20quality\x20of\x20arbitration\x20arrangements','weight':0.25,'minScore':0x0,'maxScore':0x64},{'name':'guard_quality','description':'Guard\x20rule\x20complexity\x20and\x20coverage\x20of\x20business\x20scenarios','weight':0.25,'minScore':0x0,'maxScore':0x64},{'name':'transparency','description':'Object\x20descriptions,\x20repository\x20data,\x20contact\x20information\x20availability','weight':0.2,'minScore':0x0,'maxScore':0x64}];case'worth_buying':return[{'name':'price_reasonableness','description':'Service\x20pricing\x20vs.\x20comparable\x20services\x20and\x20market\x20norms','weight':0.3,'minScore':0x0,'maxScore':0x64},{'name':'refund_protection','description':'Compensation\x20fund\x20balance,\x20lock\x20duration,\x20refund\x20workflow\x20availability','weight':0.25,'minScore':0x0,'maxScore':0x64},{'name':'risk_adjusted_value','description':'Value\x20proposition\x20adjusted\x20for\x20project\x20risk\x20score','weight':0.25,'minScore':0x0,'maxScore':0x64},{'name':'trust_adjusted_value','description':'Value\x20proposition\x20adjusted\x20for\x20merchant\x20trust\x20score','weight':0.2,'minScore':0x0,'maxScore':0x64}];case'completeness':return[{'name':'object_coverage','description':'Expected\x20objects\x20present\x20vs.\x20missing\x20(based\x20on\x20EXPECTED_RELATIONSHIPS)','weight':0.3,'minScore':0x0,'maxScore':0x64},{'name':'binding_completeness','description':'Required\x20bindings\x20established\x20(Service→Machine,\x20Guard,\x20Permission,\x20etc.)','weight':0.3,'minScore':0x0,'maxScore':0x64},{'name':'workflow_rationality','description':'Machine\x20node\x20topology\x20is\x20sound,\x20no\x20dangling\x20nodes\x20or\x20cycles','weight':0.2,'minScore':0x0,'maxScore':0x64},{'name':'deployment_readiness','description':'Service\x20publishable,\x20all\x20prerequisites\x20met','weight':0.2,'minScore':0x0,'maxScore':0x64}];case'value':return[{'name':'market_positioning','description':'Service\x20differentiation\x20and\x20competitive\x20positioning','weight':0.3,'minScore':0x0,'maxScore':0x64},{'name':'revenue_potential','description':'Pricing\x20strategy\x20and\x20revenue\x20model\x20viability','weight':0.3,'minScore':0x0,'maxScore':0x64},{'name':'scalability','description':'Ability\x20to\x20handle\x20growth\x20(Machine\x20capacity,\x20Allocation\x20flexibility)','weight':0.2,'minScore':0x0,'maxScore':0x64},{'name':'ecosystem_fit','description':'Integration\x20with\x20WoWok\x20ecosystem\x20(rewards,\x20demands,\x20repositories)','weight':0.2,'minScore':0x0,'maxScore':0x64}];}}['formatPrompt'](a,b,d){const e=[];e['push']('#\x20Project\x20Evaluation:\x20'+a['toUpperCase']()),e['push'](''),e['push']('##\x20Project:\x20'+b['project']['name']+'\x20('+b['project']['prefix']+')'),e['push']('-\x20Perspective:\x20'+b['project']['perspective']),e['push']('-\x20Status:\x20'+b['project']['status']),e['push']('-\x20Network:\x20'+b['project']['network']),e['push']('-\x20Industry:\x20'+(b['project']['industry']??'unspecified')),e['push']('-\x20Service:\x20'+(b['project']['serviceAddress']??'not\x20set')),e['push'](''),e['push']('##\x20Objects');for(const f of b['objects']){e['push']('-\x20'+f['description']);}e['push'](''),e['push']('##\x20Relationship\x20Graph'),e['push']('-\x20Total\x20nodes:\x20'+b['graph']['nodeCount']),e['push']('-\x20Total\x20edges:\x20'+b['graph']['edgeCount']),e['push']('-\x20Edge\x20sources:\x20'+JSON['stringify'](b['graph']['edgesBySource'])),e['push']('-\x20Edge\x20types:\x20'+JSON['stringify'](b['graph']['edgesByType'])),e['push']('-\x20Direct\x20dependencies:\x20'+b['graph']['directDependencies']['length']);if(b['graph']['potentialGaps']['length']>0x0){e['push']('-\x20**Missing\x20relationships\x20(potential\x20gaps):\x20'+b['graph']['potentialGaps']['length']+'**');for(const g of b['graph']['potentialGaps']['slice'](0x0,0xa)){e['push']('\x20\x20-\x20'+g['fieldName']+'\x20→\x20'+(g['targetType']??'unknown')+'\x20('+g['reason']+')');}}e['push']('');if(b['reputation']['length']>0x0){e['push']('##\x20Reputation\x20Data\x20(from\x20Registrar)');for(const h of b['reputation']){e['push']('-\x20'+abbreviateAddress(h['address'])+':\x20'+h['likes']+'\x20likes,\x20'+h['dislikes']+'\x20dislikes,\x20'+h['favorites']+'\x20favorites\x20(sentiment:\x20'+(h['sentimentScore']*0x64)['toFixed'](0x0)+'%)');}e['push']('');}e['push']('##\x20Cache\x20Freshness'),e['push']('-\x20Fresh:\x20'+b['freshnessSummary']['freshCount']),e['push']('-\x20Stale:\x20'+b['freshnessSummary']['staleCount']),e['push']('-\x20Unknown:\x20'+b['freshnessSummary']['unknownCount']),e['push'](''),e['push']('##\x20Scoring\x20Criteria'),e['push']('Please\x20score\x20each\x20criterion\x20(0-100,\x20higher\x20=\x20better)\x20and\x20provide\x20a\x20brief\x20justification:');for(const i of d){e['push']('-\x20**'+i['name']+'**\x20(weight:\x20'+i['weight']+'):\x20'+i['description']);}return e['push'](''),e['push']('##\x20Instructions'),e['push']('1.\x20Analyze\x20the\x20project\x20from\x20the\x20\x22'+a+'\x22\x20perspective.'),e['push']('2.\x20Score\x20each\x20criterion\x20above\x20(0-100).'),e['push']('3.\x20Compute\x20a\x20weighted\x20overall\x20score.'),e['push']('4.\x20Provide\x20a\x201-2\x20sentence\x20summary\x20of\x20your\x20assessment.'),e['push']('5.\x20Return\x20the\x20result\x20as\x20JSON:\x20{\x20score:\x20number,\x20summary:\x20string,\x20details:\x20{\x20criterion_scores:\x20{...},\x20justification:\x20string\x20}\x20}'),e['join']('\x0a');}}function abbreviateAddress(a){if(!a||a['length']<0xc)return a;return a['slice'](0x0,0x6)+'...'+a['slice'](-0x4);}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import type { z } from "zod";
|
|
2
|
+
import { type Evaluation } from "@wowok/wowok";
|
|
3
|
+
import type { ProjectOperationInputSchema } from "../schema/project/index.js";
|
|
4
|
+
import { type BusinessReport } from "./reverse-mapping.js";
|
|
5
|
+
import { type SupplyChainGraph } from "../knowledge/supply-chain.js";
|
|
6
|
+
type ProjectInput = z.infer<typeof ProjectOperationInputSchema>;
|
|
7
|
+
export interface PanoramaSale {
|
|
8
|
+
name: string;
|
|
9
|
+
price: string | null;
|
|
10
|
+
price_display: string;
|
|
11
|
+
price_tip: string;
|
|
12
|
+
stock: string | null;
|
|
13
|
+
suspension: boolean;
|
|
14
|
+
wip: string;
|
|
15
|
+
wip_hash: string;
|
|
16
|
+
}
|
|
17
|
+
export interface PanoramaForward {
|
|
18
|
+
name: string;
|
|
19
|
+
weight: number;
|
|
20
|
+
guard: string | null;
|
|
21
|
+
retained_submission: number[] | null;
|
|
22
|
+
named_operator: string | null;
|
|
23
|
+
permission_index: number | null;
|
|
24
|
+
}
|
|
25
|
+
export interface PanoramaMachineEdge {
|
|
26
|
+
from: string;
|
|
27
|
+
to: string;
|
|
28
|
+
threshold: number;
|
|
29
|
+
forwards: PanoramaForward[];
|
|
30
|
+
}
|
|
31
|
+
export interface PanoramaMachineGraph {
|
|
32
|
+
address: string;
|
|
33
|
+
name: string | null;
|
|
34
|
+
description: string | null;
|
|
35
|
+
published: boolean | null;
|
|
36
|
+
paused: boolean | null;
|
|
37
|
+
node_count: number | null;
|
|
38
|
+
consensus_repositories: string[];
|
|
39
|
+
nodes: {
|
|
40
|
+
name: string;
|
|
41
|
+
description: string | null;
|
|
42
|
+
}[];
|
|
43
|
+
edges: PanoramaMachineEdge[];
|
|
44
|
+
}
|
|
45
|
+
export interface PanoramaGuardSummary {
|
|
46
|
+
address: string;
|
|
47
|
+
description: string | null;
|
|
48
|
+
rep: boolean | null;
|
|
49
|
+
table_entry_count: number;
|
|
50
|
+
submission_slot_count: number;
|
|
51
|
+
relies: string[];
|
|
52
|
+
relies_logic_and: boolean | null;
|
|
53
|
+
}
|
|
54
|
+
export interface PanoramaPermissionSummary {
|
|
55
|
+
address: string;
|
|
56
|
+
description: string | null;
|
|
57
|
+
builder: string | null;
|
|
58
|
+
owner: string | null;
|
|
59
|
+
owner_name: string | null;
|
|
60
|
+
admin_count: number;
|
|
61
|
+
entity_count: number | null;
|
|
62
|
+
perm_remark: {
|
|
63
|
+
index: string;
|
|
64
|
+
remark: string;
|
|
65
|
+
}[];
|
|
66
|
+
um: string | null;
|
|
67
|
+
tags: string[];
|
|
68
|
+
updated_timestamp_ms: string | null;
|
|
69
|
+
}
|
|
70
|
+
export interface PanoramaTrust {
|
|
71
|
+
trust_score: number;
|
|
72
|
+
trust_level: string;
|
|
73
|
+
trust_summary: string;
|
|
74
|
+
risk_score: number | null;
|
|
75
|
+
risk_level: string | null;
|
|
76
|
+
completeness: number | null;
|
|
77
|
+
}
|
|
78
|
+
export interface PanoramaRecentOrders {
|
|
79
|
+
count: number;
|
|
80
|
+
items: {
|
|
81
|
+
order: string;
|
|
82
|
+
time: number;
|
|
83
|
+
updated_ms: number | null;
|
|
84
|
+
amount: string;
|
|
85
|
+
amount_display: string;
|
|
86
|
+
amount_tip: string;
|
|
87
|
+
progress: string | null;
|
|
88
|
+
allocation: string | null;
|
|
89
|
+
disputes: string[];
|
|
90
|
+
agent: string[];
|
|
91
|
+
owner: string | null;
|
|
92
|
+
claimed_by: string | null;
|
|
93
|
+
required_info: string | null;
|
|
94
|
+
progress_next: string | null;
|
|
95
|
+
allocation_state: "none" | "pending" | "allocated";
|
|
96
|
+
bought: {
|
|
97
|
+
name: string;
|
|
98
|
+
price_display: string;
|
|
99
|
+
quantity: string;
|
|
100
|
+
wip_hash: string;
|
|
101
|
+
}[];
|
|
102
|
+
}[];
|
|
103
|
+
}
|
|
104
|
+
export interface PanoramaLinkedProject {
|
|
105
|
+
id: string;
|
|
106
|
+
prefix: string;
|
|
107
|
+
name: string;
|
|
108
|
+
status: string;
|
|
109
|
+
perspective: string;
|
|
110
|
+
network: string;
|
|
111
|
+
currentVersion: string | null;
|
|
112
|
+
objectCount: number;
|
|
113
|
+
versionCount: number;
|
|
114
|
+
evaluationCount: number;
|
|
115
|
+
evaluations: Evaluation[];
|
|
116
|
+
}
|
|
117
|
+
export interface ServicePanoramaResult {
|
|
118
|
+
action: "service_panorama";
|
|
119
|
+
network: string;
|
|
120
|
+
service: {
|
|
121
|
+
address: string;
|
|
122
|
+
name: string | null;
|
|
123
|
+
description: string;
|
|
124
|
+
location: string;
|
|
125
|
+
published: boolean;
|
|
126
|
+
paused: boolean;
|
|
127
|
+
paused_time: number | null;
|
|
128
|
+
setting_lock_duration: string | null;
|
|
129
|
+
customer_required: string[];
|
|
130
|
+
compensation_fund: string | null;
|
|
131
|
+
sales: PanoramaSale[];
|
|
132
|
+
machine: string | null;
|
|
133
|
+
buy_guard: string | null;
|
|
134
|
+
permission: string;
|
|
135
|
+
um: string | null;
|
|
136
|
+
arbitrations: string[];
|
|
137
|
+
rewards: string[];
|
|
138
|
+
repositories: string[];
|
|
139
|
+
order_allocators: {
|
|
140
|
+
description: string;
|
|
141
|
+
threshold: string | null;
|
|
142
|
+
allocators: {
|
|
143
|
+
guard: string;
|
|
144
|
+
sharing_count: number;
|
|
145
|
+
max: string | null;
|
|
146
|
+
}[];
|
|
147
|
+
} | null;
|
|
148
|
+
onchain_last_updated: {
|
|
149
|
+
timestamp_ms: string;
|
|
150
|
+
digest: string | null;
|
|
151
|
+
sender: string | null;
|
|
152
|
+
} | null;
|
|
153
|
+
tags: string[];
|
|
154
|
+
owner: string | null;
|
|
155
|
+
owner_name: string | null;
|
|
156
|
+
};
|
|
157
|
+
machine_graph: PanoramaMachineGraph | null;
|
|
158
|
+
buy_guard: PanoramaGuardSummary | null;
|
|
159
|
+
permission: PanoramaPermissionSummary | null;
|
|
160
|
+
allocator_guards: PanoramaGuardSummary[];
|
|
161
|
+
related: {
|
|
162
|
+
groups: {
|
|
163
|
+
type_label: string;
|
|
164
|
+
items: {
|
|
165
|
+
address: string;
|
|
166
|
+
type_label: string;
|
|
167
|
+
name: string | null;
|
|
168
|
+
time: number | null;
|
|
169
|
+
}[];
|
|
170
|
+
}[];
|
|
171
|
+
};
|
|
172
|
+
supply_chain: SupplyChainGraph | null;
|
|
173
|
+
trust: PanoramaTrust | null;
|
|
174
|
+
business_report: BusinessReport | null;
|
|
175
|
+
recent_orders: PanoramaRecentOrders | null;
|
|
176
|
+
linked_project: PanoramaLinkedProject | null;
|
|
177
|
+
data_gaps: string[];
|
|
178
|
+
}
|
|
179
|
+
export declare function handleServicePanorama(v: ProjectInput): Promise<ServicePanoramaResult>;
|
|
180
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Config,LocalMark,LocalProject,query_serviceContext,query_object_last_updated,queryTableItem_ServiceOrders,query_affiliations,query_objects,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{generateBusinessReport}from'./reverse-mapping.js';import{resolveSupplyChainGraph}from'../knowledge/supply-chain.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']??b['project_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=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 J=null;try{const a3=await queryTableItem_ServiceOrders({'address':j,'no_cache':!![],'network':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 query_objects({'objects':a5,'network':f});for(const ad of ac?.['objects']??[]){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 query_objects({'objects':Array['from'](ae),'network':f});for(const ah of ag?.['objects']??[]){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 I(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 I(at?.['price']!==null&&at?.['price']!==undefined?String(at['price']):'0'))['display'],'quantity':String(at?.['quantity']??'0'),'wip_hash':String(at?.['wip_hash']??'')})))};}));J={'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 K=[];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);if(objectTypeFromAddress(at)===ObjectType['Order'])continue;const au=objectTypeFromAddress(at),av=au?String(au):'Unknown';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&&(K['push']({'type_label':ax,'items':ay}),aq['delete'](ax));}for(const [az,aA]of aq){if(aA['length']>0x0)K['push']({'type_label':az,'items':aA});}}catch{h['push']('related:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}const L=[];for(const aB of k['allocator_guards']??[]){const aC=summarizeGuard(aB);if(aC)L['push'](aC);}let M=null;try{const aD=j['toLowerCase'](),aE=await LocalProject['Instance']()['listProjects'](),aF=aE['filter'](aH=>(aH['serviceAddress']??'')['toLowerCase']()===aD),aG=aF['find'](aH=>aH['network']===f)??aF[0x0]??null;if(aG){const [aH,aI,aJ]=await Promise['all']([LocalProject['Instance']()['listObjects'](aG['id']),LocalProject['Instance']()['listEvaluations'](aG['id']),LocalProject['Instance']()['listVersions'](aG['id'])]);M={'id':aG['id'],'prefix':aG['prefix'],'name':aG['name'],'status':aG['status'],'perspective':aG['perspective'],'network':aG['network'],'currentVersion':aG['currentVersion']??null,'objectCount':aH['length'],'versionCount':aJ['length'],'evaluationCount':aI['length'],'evaluations':aI};}}catch{h['push']('linked_project:\x20local\x20lookup\x20failed\x20(non-blocking)');}const N=[];for(const aK of Array['isArray'](l['sales'])?l['sales']:[]){const aL=balanceStr(aK?.['price']),aM=await I(aL);N['push']({'name':typeof aK?.['name']==='string'?aK['name']:'','price':aL,'price_display':aM['display'],'price_tip':aM['tip'],'stock':balanceStr(aK?.['stock']),'suspension':aK?.['suspension']===!![],'wip':typeof aK?.['wip']==='string'?aK['wip']:'','wip_hash':typeof aK?.['wip_hash']==='string'?aK['wip_hash']:''});}const O=l['order_allocators']?{'description':l['order_allocators']['description']??'','threshold':balanceStr(l['order_allocators']['threshold']),'allocators':(l['order_allocators']['allocators']??[])['map'](aN=>({'guard':aN['guard'],'sharing_count':Array['isArray'](aN['sharing'])?aN['sharing']['length']:0x0,'max':balanceStr(aN['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,'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':L,'related':{'groups':K},'supply_chain':D,'trust':C,'business_report':E,'recent_orders':J,'linked_project':M,'data_gaps':h};}
|
|
@@ -50,4 +50,3 @@ export interface StageGateResult {
|
|
|
50
50
|
export declare const STAGE5_RISK_SCORE_BLOCK = 50;
|
|
51
51
|
export declare const STAGE5_RISK_SCORE_WARN = 80;
|
|
52
52
|
export declare function validateStageGate(input: StageGateInput): StageGateResult;
|
|
53
|
-
export declare function validateStageGateFromDisk(prefix: string, version: string, stage?: ProjectStage, extra?: Partial<StageGateInput>): StageGateResult;
|