@wowok/agent-mcp 3.0.0 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/communication/evidence.d.ts +6 -0
- package/dist/communication/evidence.js +1 -0
- package/dist/evaluation/acceptance.d.ts +24 -0
- package/dist/evaluation/acceptance.js +1 -0
- package/dist/evaluation/builtins/demand-match.d.ts +3 -2
- package/dist/evaluation/builtins/demand-match.js +1 -1
- package/dist/evaluation/builtins/service-risk.d.ts +2 -1
- package/dist/evaluation/builtins/service-risk.js +1 -1
- package/dist/evaluation/index.d.ts +1 -0
- package/dist/evaluation/index.js +1 -1
- package/dist/evaluation/match-operation.d.ts +14 -0
- package/dist/evaluation/match-operation.js +1 -0
- package/dist/experience/realtime-feedback.js +1 -1
- package/dist/extensions/modes.js +1 -1
- package/dist/goal/GoalClassifier.js +1 -1
- package/dist/goal/GoalEngine.d.ts +8 -0
- package/dist/goal/GoalEngine.js +1 -1
- package/dist/goal/types.d.ts +1 -1
- package/dist/harness/auto-escalation.d.ts +0 -12
- package/dist/harness/auto-escalation.js +1 -1
- package/dist/harness/index.d.ts +1 -14
- package/dist/harness/index.js +1 -1
- package/dist/harness/types.d.ts +0 -38
- package/dist/keeper/KeeperScan.d.ts +39 -0
- package/dist/keeper/KeeperScan.js +1 -0
- package/dist/keeper/KeeperStore.d.ts +43 -0
- package/dist/keeper/KeeperStore.js +1 -0
- package/dist/keeper/detectors.d.ts +23 -0
- package/dist/keeper/detectors.js +1 -0
- package/dist/keeper/keeper.spec.d.ts +1 -0
- package/dist/keeper/keeper.spec.js +1 -0
- package/dist/keeper/types.d.ts +65 -0
- package/dist/keeper/types.js +1 -0
- package/dist/knowledge/demand-risk.js +1 -1
- package/dist/knowledge/event-semantics.d.ts +3 -0
- package/dist/knowledge/event-semantics.js +1 -1
- package/dist/knowledge/event-semantics.spec.d.ts +1 -0
- package/dist/knowledge/event-semantics.spec.js +1 -0
- package/dist/knowledge/evidence-review.d.ts +23 -0
- package/dist/knowledge/evidence-review.js +1 -1
- package/dist/knowledge/examples-scanner-cli.js +1 -1
- package/dist/knowledge/examples-scanner.js +1 -1
- package/dist/knowledge/guard-bytecode-spec.d.ts +82 -0
- package/dist/knowledge/guard-bytecode-spec.js +1 -0
- package/dist/knowledge/guard-design-patterns.d.ts +1 -1
- package/dist/knowledge/guard-design-patterns.js +1 -1
- package/dist/knowledge/index.d.ts +10 -6
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/mcp-schema-audit-cli.js +1 -1
- package/dist/knowledge/mcp-schema-audit.js +1 -1
- package/dist/knowledge/scenario-modes.d.ts +1 -1
- package/dist/knowledge/scenario-modes.js +1 -1
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/knowledge/workflow-guidance.d.ts +20 -0
- package/dist/knowledge/workflow-guidance.js +1 -1
- package/dist/monitor/MonitorLoop.d.ts +1 -0
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/monitor/ScopeResolver.js +1 -1
- package/dist/monitor/SuggestionBridge.d.ts +1 -1
- package/dist/monitor/SuggestionBridge.js +1 -1
- package/dist/monitor/SuggestionBridge.spec.d.ts +1 -0
- package/dist/monitor/SuggestionBridge.spec.js +1 -0
- package/dist/monitor/types.d.ts +0 -1
- package/dist/monitor/types.js +1 -1
- package/dist/participation/employee-kpi.d.ts +12 -0
- package/dist/participation/employee-kpi.js +1 -1
- package/dist/participation/employee-kpi.spec.d.ts +1 -0
- package/dist/participation/employee-kpi.spec.js +1 -0
- package/dist/playbooks/service-build/business-puzzle.js +1 -1
- package/dist/playbooks/service-build/mode-actions.d.ts +0 -6
- package/dist/playbooks/service-build/mode-actions.js +1 -1
- package/dist/playbooks/service-build/relationship-profile.js +1 -1
- package/dist/relationship/derivation.d.ts +6 -0
- package/dist/relationship/derivation.js +1 -1
- package/dist/relationship/derivation.spec.d.ts +1 -0
- package/dist/relationship/derivation.spec.js +1 -0
- package/dist/role/index.d.ts +2 -2
- package/dist/role/index.js +1 -1
- package/dist/role/model.d.ts +2 -1
- package/dist/role/model.js +1 -1
- package/dist/role/types.d.ts +5 -0
- package/dist/rules.d.ts +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/employee/index.d.ts +61 -1
- package/dist/schema/employee/index.js +1 -1
- package/dist/schema/evaluation/index.d.ts +70 -5
- 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/industry-pack/index.d.ts +1 -7
- package/dist/schema/industry-pack/modes.d.ts +0 -6
- package/dist/schema/industry-pack/modes.js +1 -1
- package/dist/schema/keeper/index.d.ts +475 -0
- package/dist/schema/keeper/index.js +1 -0
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/messenger/index.d.ts +2 -0
- package/dist/schema/messenger/index.js +1 -1
- package/dist/schema/operations.d.ts +6 -0
- package/dist/schema/query/bi.d.ts +99 -0
- package/dist/schema/query/bi.js +1 -1
- package/dist/schema/schema-query/index.d.ts +2 -11
- package/dist/schema/schema-query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/utils/skills-recommendation.js +1 -1
- package/dist/schema/watch/index.d.ts +4 -0
- package/dist/schema/watch/index.js +1 -1
- package/dist/schema-query-impl/index.d.ts +33 -14
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/employee_operation.output.json +100 -0
- package/dist/schemas/employee_operation.schema.json +148 -5
- package/dist/schemas/evaluation_operation.output.json +135 -9
- package/dist/schemas/evaluation_operation.schema.json +176 -7
- package/dist/schemas/index.json +7 -1
- package/dist/schemas/industry_pack_operation.output.json +2 -32
- package/dist/schemas/keeper_operation.output.json +1274 -0
- package/dist/schemas/keeper_operation.schema.json +359 -0
- package/dist/schemas/messenger_operation.schema.json +8 -0
- package/dist/schemas/onchain_table_data.output.json +18 -0
- package/dist/schemas/query_toolkit.output.json +245 -0
- package/dist/schemas/query_toolkit.schema.json +18 -0
- package/dist/schemas/schema_query.output.json +1 -64
- package/dist/schemas/schema_query.schema.json +18 -3
- package/dist/schemas/watch_operation.output.json +21 -1
- package/dist/task/playbook.js +1 -1
- package/dist/task/types.d.ts +1 -1
- package/dist/tools/handlers/bridge.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/employee.d.ts +6 -0
- package/dist/tools/handlers/employee.js +1 -1
- package/dist/tools/handlers/employee.spec.d.ts +1 -0
- package/dist/tools/handlers/employee.spec.js +1 -0
- package/dist/tools/handlers/evaluation.js +1 -1
- package/dist/tools/handlers/evaluation.spec.d.ts +1 -0
- package/dist/tools/handlers/evaluation.spec.js +1 -0
- package/dist/tools/handlers/keeper.d.ts +12 -0
- package/dist/tools/handlers/keeper.js +1 -0
- package/dist/tools/handlers/messenger.js +1 -1
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/schema-query.js +1 -1
- package/dist/tools/handlers/watch.js +1 -1
- package/dist/tools/handlers/workflow.js +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/registry/agent.d.ts +2 -0
- package/dist/tools/registry/agent.js +1 -0
- package/dist/tools/registry/bridge.d.ts +2 -0
- package/dist/tools/registry/bridge.js +1 -0
- package/dist/tools/registry/business.d.ts +2 -0
- package/dist/tools/registry/business.js +1 -0
- package/dist/tools/registry/config.d.ts +2 -0
- package/dist/tools/registry/config.js +1 -0
- package/dist/tools/registry/files.d.ts +2 -0
- package/dist/tools/registry/files.js +1 -0
- package/dist/tools/registry/identity.d.ts +2 -0
- package/dist/tools/registry/identity.js +1 -0
- package/dist/tools/registry/local.d.ts +2 -0
- package/dist/tools/registry/local.js +1 -0
- package/dist/tools/registry/messenger.d.ts +2 -0
- package/dist/tools/registry/messenger.js +1 -0
- package/dist/tools/registry/monitor.d.ts +2 -0
- package/dist/tools/registry/monitor.js +1 -0
- package/dist/tools/registry/onchain.d.ts +2 -0
- package/dist/tools/registry/onchain.js +1 -0
- package/dist/tools/registry/query.d.ts +2 -0
- package/dist/tools/registry/query.js +1 -0
- package/dist/tools/registry/trust.d.ts +2 -0
- package/dist/tools/registry/trust.js +1 -0
- package/dist/tools/shared.js +1 -1
- package/dist/tools/wrap.js +1 -1
- package/package.json +2 -2
- package/dist/examples/arbitration-dispute-create.json +0 -41
- package/dist/examples/arbitration-vote-weighted.json +0 -35
- package/dist/examples/arbitration-voting-guard-add.json +0 -38
- package/dist/examples/demand-present-service.json +0 -33
- package/dist/examples/education-contact-create.json +0 -40
- package/dist/examples/freelance-contact-create.json +0 -40
- package/dist/examples/gen-passport-verify-guard.json +0 -48
- package/dist/examples/guard-template-balance-check.json +0 -59
- package/dist/examples/guard-template-time-lock.json +0 -60
- package/dist/examples/insurance-guard-claim-timelock.json +0 -75
- package/dist/examples/insurance-guard-withdraw-allocation.json +0 -96
- package/dist/examples/insurance-machine-create.json +0 -75
- package/dist/examples/insurance-service-allocators.json +0 -55
- package/dist/examples/machine-multisig-threshold.json +0 -87
- package/dist/examples/machine-publish.json +0 -30
- package/dist/examples/machine-template-7node-rental.json +0 -119
- package/dist/examples/payment-scenario-bound.json +0 -45
- package/dist/examples/rental-ziroom-machine-create.json +0 -148
- package/dist/examples/rental-ziroom-permission-create.json +0 -41
- package/dist/examples/rental-ziroom-service-create.json +0 -36
- package/dist/examples/retail-adv-guard-customer-win-create.json +0 -80
- package/dist/examples/retail-adv-guard-messenger-proof-create.json +0 -65
- package/dist/examples/retail-adv-guard-reward-timeout-create.json +0 -92
- package/dist/examples/retail-adv-reward-guard-add.json +0 -51
- package/dist/examples/retail-myshop-allocation-activate.json +0 -55
- package/dist/examples/retail-myshop-arbitration-create.json +0 -40
- package/dist/examples/retail-myshop-contact-create.json +0 -43
- package/dist/examples/retail-myshop-order-create.json +0 -56
- package/dist/examples/retail-myshop-progress-operate.json +0 -38
- package/dist/examples/retail-myshop-reward-create.json +0 -35
- package/dist/examples/retail-myshop-service-create.json +0 -38
- package/dist/examples/retail-myshop-service-customer-required.json +0 -31
- package/dist/examples/service-discount-issue.json +0 -46
- package/dist/examples/subscription-contact-create.json +0 -40
- package/dist/examples/threebody-guard-create.json +0 -56
- package/dist/examples/threebody-machine-create.json +0 -71
- package/dist/examples/threebody-permission-create.json +0 -38
- package/dist/examples/threebody-service-allocators.json +0 -48
- package/dist/examples/travel-guard-time-lock.json +0 -69
- package/dist/examples/travel-guard-weather-oracle.json +0 -70
- package/dist/examples/travel-machine-create.json +0 -135
- package/dist/examples/travel-repository-create.json +0 -47
- package/dist/examples/travel-service-create.json +0 -34
- package/dist/examples/travel-treasury-create.json +0 -34
- package/dist/examples/treasury-deposit.json +0 -37
- package/dist/examples/treasury-withdraw.json +0 -38
- package/dist/harness/plan.d.ts +0 -33
- package/dist/harness/plan.js +0 -1
- package/dist/knowledge/demand-matching.d.ts +0 -29
- package/dist/knowledge/demand-matching.js +0 -1
- package/dist/knowledge/guard-context.d.ts +0 -56
- package/dist/knowledge/guard-context.js +0 -1
- package/dist/knowledge/guard-migration.d.ts +0 -48
- package/dist/knowledge/guard-migration.js +0 -1
- package/dist/schemas/guard-node-schema.json +0 -1000
- package/dist/task/stage-gate.d.ts +0 -22
- package/dist/task/stage-gate.js +0 -1
|
@@ -1238,6 +1238,24 @@
|
|
|
1238
1238
|
"additionalProperties": false,
|
|
1239
1239
|
"description": "Business Relationship Graph (K3/19): derive ONE account's full relationship web from on-chain power carriers (Permission memberships, Machine forwards, Orders, Demand presenters, Allocation sharing, Arbitration bindings, Contact ims). Each edge carries the three dimensions — 权属 power (what each side CAN do, and where that power lives on-chain), 利益 interest (gains/exposures, with registry-declared goal tensions like principal-agent divergence), and 价值交互 value flows (escrow → allocation → payment chains). Read-only; roles are DERIVED from chain data, never asserted."
|
|
1240
1240
|
},
|
|
1241
|
+
{
|
|
1242
|
+
"type": "object",
|
|
1243
|
+
"properties": {
|
|
1244
|
+
"query_type": {
|
|
1245
|
+
"type": "string",
|
|
1246
|
+
"const": "scenario_topology"
|
|
1247
|
+
},
|
|
1248
|
+
"chain_id": {
|
|
1249
|
+
"description": "Optional scenario-chain id (chain.standard_ecommerce | chain.procurement_tender | chain.data_subscription | chain.collaborative_operations). When given, only that chain is returned; otherwise ALL scenario chains + bridges are returned.",
|
|
1250
|
+
"type": "string"
|
|
1251
|
+
}
|
|
1252
|
+
},
|
|
1253
|
+
"required": [
|
|
1254
|
+
"query_type"
|
|
1255
|
+
],
|
|
1256
|
+
"additionalProperties": false,
|
|
1257
|
+
"description": "Scenario Topology knowledge (K3 03 §3.5 / Part 2): the STATIC registry of how WoWok objects INTEGRATE each other. Bridges weld object pairs into a capability that belongs to no single object (e.g. Demand.present(service) grants MATCHMAKING); chains compose bridges into whole applications (e.g. standard e-commerce, procurement tender). Pure knowledge, read-only — no on-chain reads. Use to explain HOW a business scenario is assembled from on-chain objects and why the integration (not the objects themselves) yields the capability."
|
|
1258
|
+
},
|
|
1241
1259
|
{
|
|
1242
1260
|
"type": "object",
|
|
1243
1261
|
"properties": {
|
|
@@ -40,69 +40,6 @@
|
|
|
40
40
|
},
|
|
41
41
|
"description": "List of schema summaries (list/search/list_operations)."
|
|
42
42
|
},
|
|
43
|
-
{
|
|
44
|
-
"type": "array",
|
|
45
|
-
"items": {
|
|
46
|
-
"type": "object",
|
|
47
|
-
"properties": {
|
|
48
|
-
"file": {
|
|
49
|
-
"type": "string",
|
|
50
|
-
"description": "Example file name (e.g. 'rental-ziroom-service-create.json')."
|
|
51
|
-
},
|
|
52
|
-
"title": {
|
|
53
|
-
"type": "string",
|
|
54
|
-
"description": "Human-readable title from the example metadata."
|
|
55
|
-
},
|
|
56
|
-
"description": {
|
|
57
|
-
"type": "string",
|
|
58
|
-
"description": "Longer description from the example metadata."
|
|
59
|
-
},
|
|
60
|
-
"tags": {
|
|
61
|
-
"type": "array",
|
|
62
|
-
"items": {
|
|
63
|
-
"type": "string"
|
|
64
|
-
},
|
|
65
|
-
"description": "Tags from the example metadata."
|
|
66
|
-
},
|
|
67
|
-
"industry": {
|
|
68
|
-
"type": "string",
|
|
69
|
-
"description": "Industry category (e.g. 'rental', 'retail', 'general')."
|
|
70
|
-
},
|
|
71
|
-
"operation_type": {
|
|
72
|
-
"type": "string",
|
|
73
|
-
"description": "Operation type (e.g. 'service', 'machine', 'guard', 'permission')."
|
|
74
|
-
},
|
|
75
|
-
"verified": {
|
|
76
|
-
"type": "boolean",
|
|
77
|
-
"description": "Whether the example is marked as verified."
|
|
78
|
-
},
|
|
79
|
-
"score": {
|
|
80
|
-
"type": "number",
|
|
81
|
-
"description": "Relevance score — number of fields that matched the query (0-5)."
|
|
82
|
-
},
|
|
83
|
-
"matched_fields": {
|
|
84
|
-
"type": "array",
|
|
85
|
-
"items": {
|
|
86
|
-
"type": "string"
|
|
87
|
-
},
|
|
88
|
-
"description": "List of fields that matched the query."
|
|
89
|
-
}
|
|
90
|
-
},
|
|
91
|
-
"required": [
|
|
92
|
-
"file",
|
|
93
|
-
"title",
|
|
94
|
-
"description",
|
|
95
|
-
"tags",
|
|
96
|
-
"industry",
|
|
97
|
-
"operation_type",
|
|
98
|
-
"verified",
|
|
99
|
-
"score",
|
|
100
|
-
"matched_fields"
|
|
101
|
-
],
|
|
102
|
-
"additionalProperties": false
|
|
103
|
-
},
|
|
104
|
-
"description": "List of matching examples (search_examples)."
|
|
105
|
-
},
|
|
106
43
|
{
|
|
107
44
|
"type": "object",
|
|
108
45
|
"propertyNames": {
|
|
@@ -116,7 +53,7 @@
|
|
|
116
53
|
"description": "No data — lookup failed or returned nothing, or data was written to output_file."
|
|
117
54
|
}
|
|
118
55
|
],
|
|
119
|
-
"description": "Response data — array of schema summaries for list-like actions,
|
|
56
|
+
"description": "Response data — array of schema summaries for list-like actions, JSON Schema object for get/get_output/get_field, Guard template data for get_guard_templates, null on failure or when output_file is used."
|
|
120
57
|
},
|
|
121
58
|
"message": {
|
|
122
59
|
"type": "string",
|
|
@@ -15,13 +15,13 @@
|
|
|
15
15
|
"list_operations",
|
|
16
16
|
"get_guard_templates",
|
|
17
17
|
"get_field",
|
|
18
|
-
"search_examples",
|
|
19
18
|
"get_tool_reference",
|
|
20
19
|
"get_guard_design_patterns",
|
|
21
20
|
"get_safety_rules",
|
|
22
|
-
"get_templates"
|
|
21
|
+
"get_templates",
|
|
22
|
+
"analyze_guard_semantics"
|
|
23
23
|
],
|
|
24
|
-
"description": "Action to perform: 'list' (all schemas), 'get' (specific input schema), 'get_output' (tool output schema), 'get_field' (field-path query e.g. field_path='data.node'), 'search' (by keyword), 'list_operations' (on-chain operations), 'get_guard_templates' (Guard creation templates + best practices), '
|
|
24
|
+
"description": "Action to perform: 'list' (all schemas), 'get' (specific input schema), 'get_output' (tool output schema), 'get_field' (field-path query e.g. field_path='data.node'), 'search' (by keyword), 'list_operations' (on-chain operations), 'get_guard_templates' (Guard creation templates + best practices), 'get_tool_reference' (MCP tool usage reference: summaries, actions, prerequisites, notes — sunk from wowok-tools skill), 'get_guard_design_patterns' (curated Guard design pattern catalog: business requirement → logic tree template — sunk from wowok-guard skill), 'get_safety_rules' (object reuse/immutability/operation-classification/naming rules — sunk from wowok-safety skill), 'get_templates' (unified template registry: ~90 parameterized templates across 11 object types — guard/machine/service/order/progress/arbitration/treasury/permission/passport/allocation/reward; omit 'template' to list metadata, provide 'template' for full detail, provide 'template' + 'params' to instantiate into executable JSON), 'analyze_guard_semantics' (parse + evaluate any Guard JSON: rendered logic tree, lint diagnostics, risk assessment, and a party-perspective reading — who can trigger, under what conditions, with what evidence. Both transacting parties should run this BEFORE relying on a Guard)."
|
|
25
25
|
},
|
|
26
26
|
"name": {
|
|
27
27
|
"description": "Schema/tool name for 'get'/'get_output'/'get_field'/'get_tool_reference' action (e.g., 'onchain_operations', 'onchain_operations_machine'), or pattern id for 'get_guard_design_patterns' (e.g., 'pattern.identity_check_allowlist').",
|
|
@@ -63,6 +63,21 @@
|
|
|
63
63
|
"output_file": {
|
|
64
64
|
"description": "When set, writes the response data to this file path (relative to cwd) and returns the path instead of inline data. Use for large schemas that would be truncated. Prefer workspace paths like '.trae/tmp/schema.json' so the Read tool can access them.",
|
|
65
65
|
"type": "string"
|
|
66
|
+
},
|
|
67
|
+
"guard": {
|
|
68
|
+
"description": "Guard JSON for 'analyze_guard_semantics' action (object or JSON-encoded string). Shape: {description?, table: [{identifier, b_submission?, value_type?, value?, name?, object_type?}], root: {...}, rely?: {guards, logic_or?}, binding_hint?: {host_object?, binding_field?, action?, sharing_recipients?}}. This is the export format of guard2file / the 'data' payload of onchain_operations guard creation.",
|
|
69
|
+
"anyOf": [
|
|
70
|
+
{
|
|
71
|
+
"type": "string"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"type": "object",
|
|
75
|
+
"propertyNames": {
|
|
76
|
+
"type": "string"
|
|
77
|
+
},
|
|
78
|
+
"additionalProperties": {}
|
|
79
|
+
}
|
|
80
|
+
]
|
|
66
81
|
}
|
|
67
82
|
},
|
|
68
83
|
"required": [
|
|
@@ -598,6 +598,25 @@
|
|
|
598
598
|
"sensitivity": {
|
|
599
599
|
"type": "number",
|
|
600
600
|
"description": "Risk sensitivity (1.0 neutral; >1 more risk-averse)."
|
|
601
|
+
},
|
|
602
|
+
"value_proposition": {
|
|
603
|
+
"type": "object",
|
|
604
|
+
"properties": {
|
|
605
|
+
"offers": {
|
|
606
|
+
"type": "string",
|
|
607
|
+
"description": "What this role contributes / provides into the transaction."
|
|
608
|
+
},
|
|
609
|
+
"seeks": {
|
|
610
|
+
"type": "string",
|
|
611
|
+
"description": "What this role wants / gets out of the transaction."
|
|
612
|
+
}
|
|
613
|
+
},
|
|
614
|
+
"required": [
|
|
615
|
+
"offers",
|
|
616
|
+
"seeks"
|
|
617
|
+
],
|
|
618
|
+
"additionalProperties": false,
|
|
619
|
+
"description": "Value proposition — what the role offers and seeks (K3 27 G6)."
|
|
601
620
|
}
|
|
602
621
|
},
|
|
603
622
|
"required": [
|
|
@@ -605,7 +624,8 @@
|
|
|
605
624
|
"interest_analyzer",
|
|
606
625
|
"prefer",
|
|
607
626
|
"avoid",
|
|
608
|
-
"sensitivity"
|
|
627
|
+
"sensitivity",
|
|
628
|
+
"value_proposition"
|
|
609
629
|
],
|
|
610
630
|
"additionalProperties": false
|
|
611
631
|
},
|
package/dist/task/playbook.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const registry=new Map();export function registerPlaybook(a){if(!a['name'])throw new Error('playbook\x20requires\x20a\x20name');if(a['stages']['length']===0x0)throw new Error('playbook\x20\x27'+a['name']+'\x27\x20requires\x20stages');registry['set'](a['name'],{...a,'stages':[...a['stages']]});}export function getPlaybook(a){return registry['get'](a);}export function listPlaybooks(){return[...registry['values']()];}export function hasPlaybook(a){return registry['has'](a);}export const GENERIC_PLAYBOOK='generic';export function playbookForGoalType(a){switch(a){case'publish_service':return registry['get']('service-build');case'fulfill_order':return registry['get']('order-fulfillment');case'capture_demand':return registry['get']('demand-capture');case'publish_demand':return registry['get']('demand-publish');case'purchase_service':return registry['get']('purchase');default:return registry['get'](GENERIC_PLAYBOOK);}}registerPlaybook({'name':GENERIC_PLAYBOOK,'stages':['prepare','execute','verify','close'],'description':'Fallback\x20stage\x20sequence\x20for\x20goals\x20without\x20a\x20dedicated\x20playbook.'}),registerPlaybook({'name':'service-build','stages':['namespace','puzzle','risk','doc','substeps'],'description':'Design\x20&\x20publish\x20a\x20commercial\x20service\x20(content:\x20src/playbooks/service-build/).'}),registerPlaybook({'name':'order-fulfillment','stages':['confirm','deliver','accept','settle'],'description':'Merchant-side\x20order\x20fulfillment.'}),registerPlaybook({'name':'demand-capture','stages':['discover','evaluate','engage','close'],'description':'Discover\x20and\x20capture\x20demand\x20opportunities.'}),registerPlaybook({'name':'demand-publish','stages':['draft','fund','publish','close'],'description':'Publish\x20a\x20funded\x20demand.'}),registerPlaybook({'name':'purchase','stages':['select','order','monitor','review'],'description':'Purchase\x20a\x20service\x20and\x20see\x20it\x20delivered.'});
|
|
1
|
+
const registry=new Map();export function registerPlaybook(a){if(!a['name'])throw new Error('playbook\x20requires\x20a\x20name');if(a['stages']['length']===0x0)throw new Error('playbook\x20\x27'+a['name']+'\x27\x20requires\x20stages');registry['set'](a['name'],{...a,'stages':[...a['stages']]});}export function getPlaybook(a){return registry['get'](a);}export function listPlaybooks(){return[...registry['values']()];}export function hasPlaybook(a){return registry['has'](a);}export const GENERIC_PLAYBOOK='generic';export function playbookForGoalType(a){switch(a){case'publish_service':return registry['get']('service-build');case'fulfill_order':return registry['get']('order-fulfillment');case'capture_demand':return registry['get']('demand-capture');case'publish_demand':return registry['get']('demand-publish');case'purchase_service':return registry['get']('purchase');case'manage_assets':return registry['get']('governance');default:return registry['get'](GENERIC_PLAYBOOK);}}registerPlaybook({'name':GENERIC_PLAYBOOK,'stages':['prepare','execute','verify','close'],'description':'Fallback\x20stage\x20sequence\x20for\x20goals\x20without\x20a\x20dedicated\x20playbook.'}),registerPlaybook({'name':'service-build','stages':['namespace','puzzle','risk','doc','substeps'],'description':'Design\x20&\x20publish\x20a\x20commercial\x20service\x20(content:\x20src/playbooks/service-build/).'}),registerPlaybook({'name':'order-fulfillment','stages':['confirm','deliver','accept','settle'],'description':'Merchant-side\x20order\x20fulfillment.'}),registerPlaybook({'name':'demand-capture','stages':['discover','evaluate','engage','close'],'description':'Discover\x20and\x20capture\x20demand\x20opportunities.'}),registerPlaybook({'name':'demand-publish','stages':['draft','fund','publish','close'],'description':'Publish\x20a\x20funded\x20demand.'}),registerPlaybook({'name':'purchase','stages':['select','order','monitor','review'],'description':'Purchase\x20a\x20service\x20and\x20see\x20it\x20delivered.'}),registerPlaybook({'name':'governance','stages':['inventory','decide','execute','audit'],'description':'On-chain\x20permission/data/financial\x20governance\x20loop\x20(08\x20§七\x20N-4;\x20skill:\x20wowok-governance).'});
|
package/dist/task/types.d.ts
CHANGED
|
@@ -58,7 +58,7 @@ export interface ProblemRecord {
|
|
|
58
58
|
event_type: string;
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
|
-
export type SuggestionKind = "advance_stage" | "complete_goal" | "register_object" | "note";
|
|
61
|
+
export type SuggestionKind = "advance_stage" | "complete_goal" | "register_object" | "note" | "incentive";
|
|
62
62
|
export interface SuggestionRecord {
|
|
63
63
|
id: string;
|
|
64
64
|
created_at: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{BridgeClient,LocalMark}from'@wowok/wowok';import{classifyError,buildSemantic,buildDataSemantic}from'../../schema/call/semantic.js';let _bridgeClient=null,_bridgeClientEnv=null;function getBridgeClient(a){const b=a||{},c=b?.['account'];return(_bridgeClient===null||_bridgeClientEnv===null||c!==_bridgeClientEnv?.['account'])&&(_bridgeClient=new BridgeClient({'wowEnv':b}),_bridgeClientEnv=b),_bridgeClient;}function getBridgeClientForQuery(){if(_bridgeClient!==null)return _bridgeClient;return _bridgeClient=new BridgeClient({}),_bridgeClientEnv={},_bridgeClient;}function validateMainnet(a){const b=a?.['network'];if(b&&b!=='mainnet')throw new Error('Bridge\x20only\x20supports\x20WOW\x20mainnet\x20(current\x20network:\x20\x27'+b+'\x27).\x20Only\x20mainnet\x20provides\x20cross-chain\x20functionality.');}async function resolveWowAddress(a,b){if(!a){const c=b?.['account'];return c;}if(/^0x[0-9a-fA-F]{64}$/['test'](a))return a;try{const d=await LocalMark['Instance']()['get_address'](a);if(d)return d;return a;}catch{return a;}}function safeJson(a){return JSON['stringify'](a,(b,c)=>typeof c==='bigint'?c['toString']():c,0x2);}function convertBigInts(a){if(typeof a==='bigint')return a['toString']();if(Array['isArray'](a))return a['map'](convertBigInts);if(a&&typeof a==='object'){const b={};for(const c of Object['keys'](a))b[c]=convertBigInts(a[c]);return b;}return a;}function ok(a,b,c){const d=convertBigInts(b),e=buildSemantic(d,c),f={'message':a,'result':{'type':'data','data':d},'semantic':e};return{'content':[{'type':'text','text':a},{'type':'text','text':safeJson(d)}],'structuredContent':f};}function err(a,b){const c=classifyError(a),d=buildDataSemantic(undefined,b,!![],a),e={'message':a,'result':{'type':'error','error':a,'error_code':c['error_code'],'retryable':c['retryable'],'recovery_hint':c['recovery_hint']},'semantic':d};return{'content':[{'type':'text','text':a}],'structuredContent':e};}export async function handleBridgeOperations(a){if(!a||typeof a!=='object')return err('Invalid\x20args:\x20expected\x20an\x20object\x20with\x20operation_type');let b;try{const {strictParse:f}=await import('../../schema/call/base.js');b=f((await import('../../schema/call/bridge.js'))['BridgeOperationsSchema'],a,'bridge_operations\x20input');}catch(g){return err('Parameter\x20validation\x20failed:\x20'+(g?.['message']??String(g)));}const c=b['env'],d={'operation_type':'bridge_'+b['operation_type'],'data':b['data']};try{switch(b['operation_type']){case'cross_chain_wow_to_evm':{validateMainnet(c);const h=b['data'],i=getBridgeClient(c),j=await i['bridgeWowToEvmSimple']({'token':h['token'],'amount':BigInt(h['amount']),'withdrawTo':h['withdrawTo'],'waitForFinalization':![],'idempotencyKey':h['idempotencyKey'],'idempotentByParams':h['idempotentByParams']}),k=j['idempotentHit']?'\x20[IDEMPOTENT\x20HIT\x20—\x20no\x20new\x20deposit]':'';return ok('WOW→EVM\x20cross-chain\x20step\x201\x20(deposit)\x20submitted.\x20transferId='+j['transferId']+',\x20activeEvmAccount='+j['activeEvmAccount']+'.'+k+'\x20'+'Next:\x20poll\x20query_transfer_status\x20until\x20bridge\x20signs\x20(~1-5\x20min),\x20then\x20call\x20claim_wow_to_evm\x20to\x20complete.',j,d);}case'cross_chain_evm_to_wow':{validateMainnet(c);const l=b['data'],m=await resolveWowAddress(l['recipientWowAddress'],c),n=getBridgeClient(c),o=await n['bridgeEvmToWowSimple']({'token':l['token'],'amount':BigInt(l['amount']),'recipientWowAddress':m,'waitForFinalization':![],'idempotencyKey':l['idempotencyKey'],'idempotentByParams':l['idempotentByParams']}),p=o['idempotentHit']?'\x20[IDEMPOTENT\x20HIT\x20—\x20no\x20new\x20deposit]':'';return ok('EVM→WOW\x20cross-chain\x20submitted.\x20transferId='+o['transferId']+',\x20activeEvmAccount='+o['activeEvmAccount']+'.'+p+'\x20'+'Bridge\x20will\x20auto-claim\x20on\x20WOW\x20(~10-20\x20min).\x20Poll\x20query_transfer_status\x20to\x20monitor\x20progress.',o,d);}case'claim_wow_to_evm':{validateMainnet(c);const q=b['data'],r=getBridgeClient(c),s=await r['claimWowToEvm'](q['transferId']);return ok('WOW→EVM\x20claim\x20(step\x202)\x20completed.\x20transferId='+s['transferId']+',\x20claimTxHash='+s['claimTxHash'],s,d);}case'resume_transfer':{validateMainnet(c);const t=b['data'],u=getBridgeClient(c),v=await u['resumeTransfer'](t['transferId']);return ok('Transfer\x20'+t['transferId']+'\x20resumed.\x20Current\x20step:\x20'+v['step']+',\x20status:\x20'+v['status']+'.',v,d);}case'withdraw':{const w=b['data'],x=getBridgeClientForQuery();let y=w['tokenAddress'];if(!y&&w['token']&&w['token']!=='ETH'){const A=x['config'],B=A?.['evmChains']?.['find'](D=>D['name']===(w['network']??'mainnet')),C=B?.['tokens']?.['find'](D=>D['symbol']===w['token']);y=C?.['evmAddress'];if(!y)return err('Cannot\x20resolve\x20ERC20\x20token\x20address\x20for\x20symbol\x20\x27'+w['token']+'\x27\x20on\x20chain\x20\x27'+(w['network']??'mainnet')+'\x27.\x20Please\x20pass\x20tokenAddress\x20explicitly.',d);}const z=await x['withdrawFromActiveEvmAccount']({'to':w['to'],'amount':BigInt(w['amount']),'tokenAddress':y,'token':w['token']?w['token']:undefined,'network':w['network']});return ok('Withdrawal\x20submitted.\x20transferId='+z['transferId']+',\x20txHash='+z['txHash'],z,d);}case'query_active_evm_account':{const D=b['data']??{},E=getBridgeClientForQuery(),F=await E['queryActiveEvmAccount']({'network':D['network'],'tokens':D['tokens']});return ok('activeEvmAccount:\x20'+F['address']+'\x20('+F['chains']['length']+'\x20chain(s))',F,d);}case'query_supported_evm_chains':{const G=getBridgeClientForQuery(),H=await G['querySupportedEvmChains']();return ok(H['length']+'\x20EVM\x20chain(s)\x20supported:\x20'+H['map'](I=>I['name']+'(chainId='+I['chainId']+')')['join'](',\x20'),H,d);}case'query_supported_tokens':{const I=b['data']??{},J=getBridgeClientForQuery(),K=await J['querySupportedTokens']({'network':I['network']}),L=K['reduce']((M,N)=>M+N['tokens']['length'],0x0);return ok(K['length']+'\x20chain(s),\x20'+L+'\x20token\x20entries:\x20'+K['map'](M=>M['chainName']+'('+M['tokens']['length']+'\x20tokens)')['join'](',\x20'),K,d);}case'query_transfer_list':{const M=b['data']??{},N=getBridgeClientForQuery();let O=await N['queryTransferList']({'onlyActive':M['onlyActive']});M['status']&&(O=O['filter'](Q=>Q['status']===M['status']));M['direction']&&(O=O['filter'](Q=>Q['direction']===M['direction']));M['token']&&(O=O['filter'](Q=>Q['token']===M['token']));M['limit']&&M['limit']>0x0&&(O=O['slice'](0x0,M['limit']));const P=O['filter'](Q=>Q['status']!=='success'&&Q['status']!=='failed')['length'];return ok(O['length']+'\x20transfer\x20record(s)\x20('+P+'\x20in\x20progress)'+(M['status']||M['direction']||M['token']?'\x20(filtered)':''),O,d);}case'query_transfer_status':{const Q=b['data'],R=getBridgeClientForQuery(),S=Q['refresh']!==![];if(S)try{await Promise['race']([R['refreshTransferStatus'](Q['transferId']),new Promise((U,V)=>setTimeout(()=>V(new Error('refresh\x20timeout')),0x3a98))]);}catch{}const T=await R['queryTransferStatus'](Q['transferId']);if(!T)return err('transferId\x20\x27'+Q['transferId']+'\x27\x20not\x20found.\x20'+'Use\x20query_transfer_list\x20to\x20see\x20all\x20valid\x20transferIds.\x20'+'Note:\x20transfer\x20history\x20is\x20persisted\x20in\x20cache.db\x20and\x20restored\x20on\x20MCP\x20restart,\x20'+'so\x20this\x20transferId\x20may\x20never\x20have\x20been\x20created\x20in\x20this\x20environment.',d);return ok('Transfer\x20'+Q['transferId']+':\x20'+T['direction']+'\x20/\x20'+T['step']+'\x20/\x20'+T['status'],T,d);}case'manage_evm_rpc':{const U=b['data'],V=getBridgeClientForQuery(),W=await V['manageEvmRpc']({'op':U['op'],'network':U['network'],'rpcUrls':U['rpcUrls']});return ok('RPC\x20\x27'+U['op']+'\x27\x20operation\x20'+(W['success']?'succeeded':'failed'),W,d);}default:{return err('Unsupported\x20operation_type:\x20'+b['operation_type'],d);}}}catch(X){const Y=X?.['message']??String(X);return err('Bridge\x20operation\x20failed:\x20'+Y,d);}}
|
|
1
|
+
import{BridgeClient,LocalMark}from'@wowok/wowok';import{classifyError,buildSemantic,buildDataSemantic}from'../../schema/call/semantic.js';let _bridgeClient=null,_bridgeClientEnv=null;function getBridgeClient(a){const b=a||{},c=b?.['account'],d=b?.['network'];return(_bridgeClient===null||_bridgeClientEnv===null||c!==_bridgeClientEnv?.['account']||d!==_bridgeClientEnv?.['network'])&&(_bridgeClient=new BridgeClient({'wowEnv':b}),_bridgeClientEnv=b),_bridgeClient;}function getBridgeClientForQuery(){if(_bridgeClient!==null)return _bridgeClient;return _bridgeClient=new BridgeClient({}),_bridgeClientEnv={},_bridgeClient;}function validateMainnet(a){const b=a?.['network'];if(b&&b!=='mainnet')throw new Error('Bridge\x20only\x20supports\x20WOW\x20mainnet\x20(current\x20network:\x20\x27'+b+'\x27).\x20Only\x20mainnet\x20provides\x20cross-chain\x20functionality.');}async function resolveWowAddress(a,b){if(!a){const c=b?.['account'];return c;}if(/^0x[0-9a-fA-F]{64}$/['test'](a))return a;try{const d=await LocalMark['Instance']()['get_address'](a);if(d)return d;return a;}catch{return a;}}function safeJson(a){return JSON['stringify'](a,(b,c)=>typeof c==='bigint'?c['toString']():c,0x2);}function convertBigInts(a){if(typeof a==='bigint')return a['toString']();if(Array['isArray'](a))return a['map'](convertBigInts);if(a&&typeof a==='object'){const b={};for(const c of Object['keys'](a))b[c]=convertBigInts(a[c]);return b;}return a;}function ok(a,b,c){const d=convertBigInts(b),e=buildSemantic(d,c),f={'message':a,'result':{'type':'data','data':d},'semantic':e};return{'content':[{'type':'text','text':a},{'type':'text','text':safeJson(d)}],'structuredContent':f};}function err(a,b){const c=classifyError(a),d=buildDataSemantic(undefined,b,!![],a),e={'message':a,'result':{'type':'error','error':a,'error_code':c['error_code'],'retryable':c['retryable'],'recovery_hint':c['recovery_hint']},'semantic':d};return{'content':[{'type':'text','text':a}],'structuredContent':e};}export async function handleBridgeOperations(a){if(!a||typeof a!=='object')return err('Invalid\x20args:\x20expected\x20an\x20object\x20with\x20operation_type');let b;try{const {strictParse:f}=await import('../../schema/call/base.js');b=f((await import('../../schema/call/bridge.js'))['BridgeOperationsSchema'],a,'bridge_operations\x20input');}catch(g){return err('Parameter\x20validation\x20failed:\x20'+(g?.['message']??String(g)));}const c=b['env'],d={'operation_type':'bridge_'+b['operation_type'],'data':b['data']};try{switch(b['operation_type']){case'cross_chain_wow_to_evm':{validateMainnet(c);const h=b['data'],i=getBridgeClient(c),j=await i['bridgeWowToEvmSimple']({'token':h['token'],'amount':BigInt(h['amount']),'withdrawTo':h['withdrawTo'],'waitForFinalization':![],'idempotencyKey':h['idempotencyKey'],'idempotentByParams':h['idempotentByParams']}),k=j['idempotentHit']?'\x20[IDEMPOTENT\x20HIT\x20—\x20no\x20new\x20deposit]':'';return ok('WOW→EVM\x20cross-chain\x20step\x201\x20(deposit)\x20submitted.\x20transferId='+j['transferId']+',\x20activeEvmAccount='+j['activeEvmAccount']+'.'+k+'\x20'+'Next:\x20poll\x20query_transfer_status\x20until\x20bridge\x20signs\x20(~1-5\x20min),\x20then\x20call\x20claim_wow_to_evm\x20to\x20complete.',j,d);}case'cross_chain_evm_to_wow':{validateMainnet(c);const l=b['data'],m=await resolveWowAddress(l['recipientWowAddress'],c),n=getBridgeClient(c),o=await n['bridgeEvmToWowSimple']({'token':l['token'],'amount':BigInt(l['amount']),'recipientWowAddress':m,'waitForFinalization':![],'idempotencyKey':l['idempotencyKey'],'idempotentByParams':l['idempotentByParams']}),p=o['idempotentHit']?'\x20[IDEMPOTENT\x20HIT\x20—\x20no\x20new\x20deposit]':'';return ok('EVM→WOW\x20cross-chain\x20submitted.\x20transferId='+o['transferId']+',\x20activeEvmAccount='+o['activeEvmAccount']+'.'+p+'\x20'+'Bridge\x20will\x20auto-claim\x20on\x20WOW\x20(~10-20\x20min).\x20Poll\x20query_transfer_status\x20to\x20monitor\x20progress.',o,d);}case'claim_wow_to_evm':{validateMainnet(c);const q=b['data'],r=getBridgeClient(c),s=await r['claimWowToEvm'](q['transferId']);return ok('WOW→EVM\x20claim\x20(step\x202)\x20completed.\x20transferId='+s['transferId']+',\x20claimTxHash='+s['claimTxHash'],s,d);}case'resume_transfer':{validateMainnet(c);const t=b['data'],u=getBridgeClient(c),v=await u['resumeTransfer'](t['transferId']);return ok('Transfer\x20'+t['transferId']+'\x20resumed.\x20Current\x20step:\x20'+v['step']+',\x20status:\x20'+v['status']+'.',v,d);}case'withdraw':{const w=b['data'],x=getBridgeClientForQuery();let y=w['tokenAddress'];if(!y&&w['token']&&w['token']!=='ETH'){const A=x['config'],B=A?.['evmChains']?.['find'](D=>D['name']===(w['network']??'mainnet')),C=B?.['tokens']?.['find'](D=>D['symbol']===w['token']);y=C?.['evmAddress'];if(!y)return err('Cannot\x20resolve\x20ERC20\x20token\x20address\x20for\x20symbol\x20\x27'+w['token']+'\x27\x20on\x20chain\x20\x27'+(w['network']??'mainnet')+'\x27.\x20Please\x20pass\x20tokenAddress\x20explicitly.',d);}const z=await x['withdrawFromActiveEvmAccount']({'to':w['to'],'amount':BigInt(w['amount']),'tokenAddress':y,'token':w['token']?w['token']:undefined,'network':w['network']});return ok('Withdrawal\x20submitted.\x20transferId='+z['transferId']+',\x20txHash='+z['txHash'],z,d);}case'query_active_evm_account':{const D=b['data']??{},E=getBridgeClientForQuery(),F=await E['queryActiveEvmAccount']({'network':D['network'],'tokens':D['tokens']});return ok('activeEvmAccount:\x20'+F['address']+'\x20('+F['chains']['length']+'\x20chain(s))',F,d);}case'query_supported_evm_chains':{const G=getBridgeClientForQuery(),H=await G['querySupportedEvmChains']();return ok(H['length']+'\x20EVM\x20chain(s)\x20supported:\x20'+H['map'](I=>I['name']+'(chainId='+I['chainId']+')')['join'](',\x20'),H,d);}case'query_supported_tokens':{const I=b['data']??{},J=getBridgeClientForQuery(),K=await J['querySupportedTokens']({'network':I['network']}),L=K['reduce']((M,N)=>M+N['tokens']['length'],0x0);return ok(K['length']+'\x20chain(s),\x20'+L+'\x20token\x20entries:\x20'+K['map'](M=>M['chainName']+'('+M['tokens']['length']+'\x20tokens)')['join'](',\x20'),K,d);}case'query_transfer_list':{const M=b['data']??{},N=getBridgeClientForQuery();let O=await N['queryTransferList']({'onlyActive':M['onlyActive']});M['status']&&(O=O['filter'](Q=>Q['status']===M['status']));M['direction']&&(O=O['filter'](Q=>Q['direction']===M['direction']));M['token']&&(O=O['filter'](Q=>Q['token']===M['token']));M['limit']&&M['limit']>0x0&&(O=O['slice'](0x0,M['limit']));const P=O['filter'](Q=>Q['status']!=='success'&&Q['status']!=='failed')['length'];return ok(O['length']+'\x20transfer\x20record(s)\x20('+P+'\x20in\x20progress)'+(M['status']||M['direction']||M['token']?'\x20(filtered)':''),O,d);}case'query_transfer_status':{const Q=b['data'],R=getBridgeClientForQuery(),S=Q['refresh']!==![];if(S)try{await Promise['race']([R['refreshTransferStatus'](Q['transferId']),new Promise((U,V)=>setTimeout(()=>V(new Error('refresh\x20timeout')),0x3a98))]);}catch{}const T=await R['queryTransferStatus'](Q['transferId']);if(!T)return err('transferId\x20\x27'+Q['transferId']+'\x27\x20not\x20found.\x20'+'Use\x20query_transfer_list\x20to\x20see\x20all\x20valid\x20transferIds.\x20'+'Note:\x20transfer\x20history\x20is\x20persisted\x20in\x20cache.db\x20and\x20restored\x20on\x20MCP\x20restart,\x20'+'so\x20this\x20transferId\x20may\x20never\x20have\x20been\x20created\x20in\x20this\x20environment.',d);return ok('Transfer\x20'+Q['transferId']+':\x20'+T['direction']+'\x20/\x20'+T['step']+'\x20/\x20'+T['status'],T,d);}case'manage_evm_rpc':{const U=b['data'],V=getBridgeClientForQuery(),W=await V['manageEvmRpc']({'op':U['op'],'network':U['network'],'rpcUrls':U['rpcUrls']});return ok('RPC\x20\x27'+U['op']+'\x27\x20operation\x20'+(W['success']?'succeeded':'failed'),W,d);}default:{return err('Unsupported\x20operation_type:\x20'+b['operation_type'],d);}}}catch(X){const Y=X?.['message']??String(X);return err('Bridge\x20operation\x20failed:\x20'+Y,d);}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{listServices,getServiceInfo,toggle as
|
|
1
|
+
import{listServices,getServiceInfo,toggle as a400a,setEnabled as a400b,reset as a400c}from'../../config/index.js';import{strictParse}from'../../schema/index.js';import{ConfigOperationInputSchema}from'../../schema/config/index.js';export async function handleConfigOperation(a){const b=strictParse(ConfigOperationInputSchema,a,'config_operation\x20input'),{action:c,service:d}=b;let e;switch(c){case'list':e={'action':'list','services':listServices()};break;case'toggle':{if(!d)throw new Error('\x27service\x27\x20param\x20is\x20required\x20for\x20toggle');const f=d,g=getServiceInfo(f);if(!g)throw new Error('Unknown\x20service:\x20'+f+'.\x20Use\x20action=\x27list\x27\x20to\x20see\x20all\x20valid\x20services.');const h=a400a(f);e={'action':'toggle','service':f,'enabled':h,'reminder':g['reminder']};break;}case'enable':{if(!d)throw new Error('\x27service\x27\x20param\x20is\x20required\x20for\x20enable');const i=d,j=getServiceInfo(i);if(!j)throw new Error('Unknown\x20service:\x20'+i+'.\x20Use\x20action=\x27list\x27\x20to\x20see\x20all\x20valid\x20services.');a400b(i,!![]),e={'action':'enable','service':i,'enabled':!![],'reminder':j['reminder']};break;}case'disable':{if(!d)throw new Error('\x27service\x27\x20param\x20is\x20required\x20for\x20disable');const k=d,l=getServiceInfo(k);if(!l)throw new Error('Unknown\x20service:\x20'+k+'.\x20Use\x20action=\x27list\x27\x20to\x20see\x20all\x20valid\x20services.');a400b(k,![]),e={'action':'disable','service':k,'enabled':![],'reminder':l['reminder']};break;}case'reset':{if(!d)throw new Error('\x27service\x27\x20param\x20is\x20required\x20for\x20reset');const m=d,n=getServiceInfo(m);if(!n)throw new Error('Unknown\x20service:\x20'+m+'.\x20Use\x20action=\x27list\x27\x20to\x20see\x20all\x20valid\x20services.');a400c(m),e={'action':'reset','service':m,'enabled':getServiceInfo(m)?.['enabled'],'reminder':n['reminder'],'reset':!![]};break;}case'info':{if(!d)throw new Error('\x27service\x27\x20param\x20is\x20required\x20for\x20info');const o=d,p=getServiceInfo(o);if(!p)throw new Error('Unknown\x20service:\x20'+o+'.\x20Use\x20action=\x27list\x27\x20to\x20see\x20all\x20valid\x20services.');e={'action':'info',...p};break;}default:throw new Error('Unknown\x20config_operation\x20action:\x20'+String(c));}return{'content':[{'type':'text','text':JSON['stringify']({'result':e})}],'structuredContent':{'result':e}};}
|
|
@@ -1,2 +1,8 @@
|
|
|
1
|
+
import { type MonitorEventStore } from "../../monitor/EventStore.js";
|
|
1
2
|
import type { ToolDispatchResult } from "../types.js";
|
|
3
|
+
export interface AssessKpiDeps {
|
|
4
|
+
events: Pick<MonitorEventStore, "list">;
|
|
5
|
+
resolveNetwork: (network?: string) => Promise<string>;
|
|
6
|
+
}
|
|
7
|
+
export declare function setAssessKpiDeps(deps?: AssessKpiDeps): void;
|
|
2
8
|
export declare function handleEmployeeOperation(args: unknown): Promise<ToolDispatchResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{strictParse}from'../../schema/index.js';import{EmployeeOperationInputSchema}from'../../schema/employee/index.js';import{getEmployeeStore}from'../../participation/employee-store.js';import{assessReactionKpi,resolveLiability}from'../../participation/employee-kpi.js';export async function handleEmployeeOperation(a){const b=strictParse(EmployeeOperationInputSchema,a,'employee_operation\x20input'),c=getEmployeeStore();let d;switch(b['action']){case'set':{await c['save'](b['account'],b['profile']),d={'action':'set','account':b['account'],'profile':b['profile']};break;}case'get':{d={'action':'get','account':b['account'],'profile':await c['get'](b['account'])};break;}case'remove':{d={'action':'remove','account':b['account'],'removed':await c['remove'](b['account'])};break;}case'assess_kpi':{let e=b['budget_ms'];if(e===undefined&&b['account']){const
|
|
1
|
+
import{strictParse}from'../../schema/index.js';import{EmployeeOperationInputSchema}from'../../schema/employee/index.js';import{getEmployeeStore}from'../../participation/employee-store.js';import{assessReactionKpi,deriveNodeTiming,resolveLiability}from'../../participation/employee-kpi.js';import{suggestIncentive}from'../../relationship/incentive.js';import{monitorEventStore}from'../../monitor/EventStore.js';import{resolveNetwork}from'./network.js';let assessKpiDeps;export function setAssessKpiDeps(a){assessKpiDeps=a;}const PROGRESS_EVENT_SCAN_LIMIT=0x1f4;function normalizeAddress(b){return b['toLowerCase']()['replace'](/^0x/,'')['padStart'](0x40,'0');}export async function handleEmployeeOperation(a){const b=strictParse(EmployeeOperationInputSchema,a,'employee_operation\x20input'),c=getEmployeeStore();let d;switch(b['action']){case'set':{await c['save'](b['account'],b['profile']),d={'action':'set','account':b['account'],'profile':b['profile']};break;}case'get':{d={'action':'get','account':b['account'],'profile':await c['get'](b['account'])};break;}case'remove':{d={'action':'remove','account':b['account'],'removed':await c['remove'](b['account'])};break;}case'assess_kpi':{let e=b['budget_ms'];if(e===undefined&&b['account']){const i=await c['get'](b['account']);e=i?.['response_time_budget_ms'];}let f=b['assigned_at'],g=b['advanced_at'],h;if((f===undefined||g===undefined)&&b['progress']){const j=assessKpiDeps??{'events':monitorEventStore,'resolveNetwork':resolveNetwork},k=await j['resolveNetwork'](b['network']),l=await j['events']['list'](k,{'module':'progress','eventType':'ProgressEvent','relevantOnly':![],'limit':PROGRESS_EVENT_SCAN_LIMIT}),m=normalizeAddress(b['progress']),n=l['events']['filter'](o=>{const q=o['event']?.['progress'];return typeof q==='string'&&normalizeAddress(q)===m;})['map'](o=>{const p=o['event'];return{'node':p['node'],'time':o['time'],'hold':p['hold']};})['sort']((o,p)=>o['time']-p['time']);h=deriveNodeTiming(n,b['node']),f=f??h['assigned_at'],g=g??h['advanced_at'];}if(f===undefined){if(h?.['gap'])throw new Error('assess_kpi\x20could\x20not\x20derive\x20timing:\x20'+h['gap']);throw new Error('assess_kpi\x20requires\x20`assigned_at`\x20(explicit)\x20or\x20`progress`\x20with\x20monitored\x20'+'ProgressEvents\x20to\x20derive\x20it\x20from');}d={'action':'assess_kpi',...assessReactionKpi(b['node'],f,g,e),...h?{'timing':h}:{}};break;}case'resolve_liability':{let o=b['liability'];if(o===undefined&&b['account']){const p=await c['get'](b['account']);o=p?.['liability'];}if(o===undefined)throw new Error('resolve_liability\x20requires\x20`account`\x20(with\x20a\x20stored\x20profile)\x20or\x20an\x20explicit\x20`liability`');d={'action':'resolve_liability',...resolveLiability(o,b['loss_amount'],b['hybrid_threshold']??0x0)};break;}case'suggest_incentive':{d={'action':'suggest_incentive',...suggestIncentive({'employee':b['account'],'kpis':b['kpis'],'acceptance':b['acceptance']??[],'liability':b['liability'],'available_rewards':b['available_rewards'],'prior_compensation':b['prior_compensation']})};break;}default:throw new Error('Unknown\x20employee_operation\x20action');}return{'content':[{'type':'text','text':JSON['stringify']({'result':d})}],'structuredContent':{'result':d}};}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{afterEach,beforeAll,describe,expect,it}from'vitest';import{handleEmployeeOperation,setAssessKpiDeps}from'./employee.js';import{setEmployeeStore}from'../../participation/employee-store.js';const EMP='0xaaa111';beforeAll(()=>{const a={'save':async()=>{},'get':async()=>null,'remove':async()=>![]};setEmployeeStore(a);}),afterEach(()=>setAssessKpiDeps(undefined));function resultOf(a){return a['structuredContent']['result'];}describe('employee_operation\x20suggest_incentive',()=>{it('all-pass\x20KPIs\x20+\x20available\x20rewards\x20→\x20reward_grant\x20requiring\x20confirmation',async()=>{const a=await handleEmployeeOperation({'action':'suggest_incentive','account':EMP,'kpis':[{'node':'deliver','reaction_ms':0x36ee80,'within_budget':!![],'status':'pass'}],'acceptance':[{'node':'deliver','wip_hashes':['0xhash1']}],'available_rewards':[{'address':'0xreward1','description':'bonus'}]}),b=resultOf(a);expect(b['action'])['toBe']('suggest_incentive'),expect(b['kind'])['toBe']('reward_grant'),expect(b['requires_confirmation'])['toBe'](!![]),expect(b['reward_candidates'])['toHaveLength'](0x1),expect(b['employee'])['toBe'](EMP);}),it('employee\x20liability\x20→\x20compensation_offset\x20takes\x20precedence',async()=>{const a=await handleEmployeeOperation({'action':'suggest_incentive','account':EMP,'kpis':[{'node':'deliver','reaction_ms':0x36ee80,'within_budget':!![],'status':'pass'}],'acceptance':[{'node':'deliver','wip_hashes':['0xhash1']}],'liability':{'bears':'employee','must_compensate_before_resume':!![],'note':'self_bears\x20rule'}});expect(resultOf(a)['kind'])['toBe']('compensation_offset');}),it('acceptance\x20gap\x20(missing\x20evidence)\x20→\x20correction_notice',async()=>{const a=await handleEmployeeOperation({'action':'suggest_incentive','account':EMP,'kpis':[{'node':'deliver','reaction_ms':0x36ee80,'within_budget':!![],'status':'pass'}]});expect(resultOf(a)['kind'])['toBe']('correction_notice');}),it('pending\x20(warn)\x20nodes\x20only\x20→\x20none',async()=>{const a=await handleEmployeeOperation({'action':'suggest_incentive','account':EMP,'kpis':[{'node':'deliver','reaction_ms':-0x1,'within_budget':![],'status':'warn'}]});expect(resultOf(a)['kind'])['toBe']('none');}),it('schema\x20gate\x20rejects\x20malformed\x20input',async()=>{await expect(handleEmployeeOperation({'action':'suggest_incentive','account':EMP,'kpis':[{'node':'x'}]}))['rejects']['toThrow']();});});const PROGRESS='0x'+'0'['repeat'](0x3a)+'abc123',OTHER_PROGRESS='0x'+'0'['repeat'](0x3a)+'fff999';function progressEvent(a,b,c,d=null){return{'id':c+':tx','seen':!![],'module':'progress','type':'ProgressEvent','time':c,'event':{'progress':a,'machine':null,'task':null,'node':b,'forward':d===null?null:'f','hold':d}};}function listResult(a){return{'events':a,'total':a['length'],'moduleCounts':{},'unreadByModule':{},'totalUnread':0x0};}function injectEvents(a){setAssessKpiDeps({'events':{'list':async()=>listResult(a)},'resolveNetwork':async()=>'testnet'});}describe('employee_operation\x20assess_kpi\x20timing\x20derivation\x20(P1-3)',()=>{it('derives\x20assigned_at/advanced_at\x20from\x20the\x20progress\x20object\x27s\x20ProgressEvents',async()=>{injectEvents([progressEvent(PROGRESS,'received',0x3e8),progressEvent(OTHER_PROGRESS,'received',0x5dc),progressEvent(PROGRESS,'preparing',0x7d0),progressEvent(PROGRESS,'shipped',0x9c4,!![]),progressEvent(PROGRESS,'shipped',0x2328)]);const a=await handleEmployeeOperation({'action':'assess_kpi','node':'preparing','progress':'0xABC123','budget_ms':0x1388}),b=resultOf(a);expect(b['node'])['toBe']('preparing'),expect(b['reaction_ms'])['toBe'](0x1b58),expect(b['within_budget'])['toBe'](![]),expect(b['status'])['toBe']('fail'),expect(b['timing'])['toEqual']({'node':'preparing','assigned_at':0x7d0,'advanced_at':0x2328,'source':'monitor_events'});}),it('explicit\x20timestamps\x20win\x20and\x20skip\x20the\x20event\x20lookup\x20entirely',async()=>{setAssessKpiDeps({'events':{'list':async()=>{throw new Error('list\x20must\x20not\x20be\x20called');}},'resolveNetwork':async()=>'testnet'});const a=await handleEmployeeOperation({'action':'assess_kpi','node':'preparing','assigned_at':0x3e8,'advanced_at':0x7d0,'progress':'0xABC123','budget_ms':0x1388}),b=resultOf(a);expect(b['reaction_ms'])['toBe'](0x3e8),expect(b['status'])['toBe']('pass'),expect(b['timing'])['toBeUndefined']();}),it('partial\x20override:\x20explicit\x20assigned_at\x20+\x20derived\x20advanced_at',async()=>{injectEvents([progressEvent(PROGRESS,'received',0x3e8),progressEvent(PROGRESS,'preparing',0x7d0),progressEvent(PROGRESS,'shipped',0x2328)]);const a=await handleEmployeeOperation({'action':'assess_kpi','node':'preparing','assigned_at':0x5dc,'progress':PROGRESS,'budget_ms':0x1f40}),b=resultOf(a);expect(b['reaction_ms'])['toBe'](0x1d4c),expect(b['status'])['toBe']('pass'),expect(b['timing']['assigned_at'])['toBe'](0x7d0),expect(b['timing']['advanced_at'])['toBe'](0x2328);}),it('node\x20still\x20current\x20→\x20status\x20warn\x20(still\x20waiting),\x20timing\x20without\x20advanced_at',async()=>{injectEvents([progressEvent(PROGRESS,'received',0x3e8),progressEvent(PROGRESS,'preparing',0x7d0)]);const a=await handleEmployeeOperation({'action':'assess_kpi','node':'preparing','progress':PROGRESS}),b=resultOf(a);expect(b['reaction_ms'])['toBe'](-0x1),expect(b['status'])['toBe']('warn'),expect(b['timing']['assigned_at'])['toBe'](0x7d0),expect(b['timing']['advanced_at'])['toBeUndefined']();}),it('node\x20not\x20found\x20in\x20the\x20monitored\x20window\x20→\x20actionable\x20error\x20naming\x20the\x20gap',async()=>{injectEvents([progressEvent(PROGRESS,'received',0x3e8)]),await expect(handleEmployeeOperation({'action':'assess_kpi','node':'preparing','progress':PROGRESS}))['rejects']['toThrow'](/could not derive timing.*no ProgressEvent entering node 'preparing'/);}),it('no\x20assigned_at\x20and\x20no\x20progress\x20→\x20error\x20asking\x20for\x20one\x20of\x20them',async()=>{await expect(handleEmployeeOperation({'action':'assess_kpi','node':'preparing'}))['rejects']['toThrow'](/requires `assigned_at` \(explicit\) or `progress`/);});});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{strictParse}from'../../schema/index.js';import{EvaluationOperationInputSchema}from'../../schema/evaluation/index.js';import{evaluateArbGame}from'../../evaluation/arbitration-game.js';import{evaluateNodeGame}from'../../evaluation/node-game.js';import{evaluatePathReasoning}from'../../evaluation/path-reasoning.js';import{assessEvidenceReview}from'../../knowledge/evidence-review.js';import{expandSearchScope,inferSensitivity,rankByLocation}from'../../evaluation/location-match.js';import{query_objects,ArbStatus}from'@wowok/wowok';import{enumerateServices,enumerateDemands,enumerateArbs}from'../../knowledge/jsonrpc-enum.js';import{fetchObjectLinkerCore,batchQueryObjectsByIds}from'../../knowledge/index.js';import{summarizeCapabilityGaps}from'../../evaluation/gap.js';import{composeServicesForDemand}from'../../evaluation/composer.js';import{matchDemandToServices,matchServiceToDemands}from'../../evaluation/builtins/demand-match.js';import{extractDemandCapability}from'../../evaluation/extract.js';import{assessServiceRisk}from'../../evaluation/builtins/service-risk.js';import{assessArbitration}from'../../evaluation/builtins/arbitration-score.js';import{resolveCategoryMatchRules,toSoftWeightInjection,applyHardConstraints}from'../../evaluation/category-match-rules.js';import{computeMarketMetrics,computeOrderFlow}from'../../knowledge/market-metrics.js';import{assessAntiCheat}from'../../knowledge/anti-cheat.js';import{computeJourneyFunnel,attributeReferrals,buildCustomerRelationships}from'../../knowledge/market-operations.js';import{suggestPricing}from'../../knowledge/dynamic-pricing.js';import{runAccountEventWatchers}from'../../customer/account-events.js';import{registerBuiltinEvaluations}from'../../evaluation/builtins/index.js';import{getEffectivePersona,mergeInjections}from'../../persona/index.js';import{buildUserInjection}from'../../evaluation/injection.js';registerBuiltinEvaluations();function arbCaseFromObject(b){const c=typeof b['time']==='number'?b['time']:Number(b['time']??0x0);return{'status':b['status'],'time':Number['isFinite'](c)?c:undefined,'resolved_time':typeof b['indemnity']?.['time']==='number'?b['indemnity']['time']:b['compensation_time']??undefined,'indemnity_amount':b['indemnity']?.['amount'],'objected':b['status']===ArbStatus['Objectionable']||b['objection']!=null&&b['objection']['length']>0x0};}async function arbCasesWithRoles(a,b){const c=a['map'](arbCaseFromObject),d=Array['from'](new Set(a['map'](j=>j['order'])['filter'](Boolean))),e=new Map(),f=[];if(d['length']>0x0){const j=await batchQueryObjectsByIds(d,b);for(const k of j){const l=k;if(!l?.['object'])continue;e['set'](l['object'],l);if(l['service'])f['push'](l['service']);}}const g=new Map(),h=Array['from'](new Set(f));if(h['length']>0x0){const m=await batchQueryObjectsByIds(h,b);for(const n of m){const p=n;if(p?.['object'])g['set'](p['object'],p);}}for(let q=0x0;q<a['length'];q++){const r=e['get'](a[q]['order']);if(!r)continue;c[q]['customer']=r['builder']||undefined;const t=g['get'](r['service']);if(t)c[q]['merchant']=t['permission']||undefined;}return c;}function capabilityFromInput(a){return{'id':a['id'],'kind':a['kind'],'owner':a['owner']??'','industry':a['industry'],'industry_confidence':a['industry_confidence']??0x0,'region':a['region'],'price_min':a['price_min']!==undefined?BigInt(a['price_min']):undefined,'price_max':a['price_max']!==undefined?BigInt(a['price_max']):undefined,'token_type':a['token_type']??'','ticket_size':a['ticket_size']??'medium','trust_score':a['trust_score']??0x32,'reputation_like_ratio':a['reputation_like_ratio']??0x1,'arbitration_independent':a['arbitration_independent']??![],'merchant_history_count':a['merchant_history_count']??0x0,'capabilities':a['capabilities'],'tags':a['tags']??[],'keywords':a['keywords']??[]};}function puzzleRawFromInput(a){return{'service':{...a['service'],'priceRaw':a['service']['priceRaw']!==undefined?BigInt(a['service']['priceRaw']):undefined,'compensation_fund':a['service']['compensation_fund']?{'balance':a['service']['compensation_fund']['balance']!==undefined?BigInt(a['service']['compensation_fund']['balance']):undefined}:undefined},'machine_nodes':a['machine_nodes'],'machine_published':a['machine_published'],'machine_paused':a['machine_paused'],'reviews':a['reviews'],'events':a['events'],'similar_services':a['similar_services']?.['map'](b=>({'price':BigInt(b['price'])})),'order_amount':a['order_amount']!==undefined?BigInt(a['order_amount']):undefined,'trust_score':a['trust_score'],'arbitration_owner':a['arbitration_owner'],'service_owner':a['service_owner'],'wip_verified':a['wip_verified'],'order_history':a['order_history'],'merchant_reputation':a['merchant_reputation']};}async function resolveInjection(a,b){return mergeInjections(await buildUserInjection(a),b);}function serviceSummaryToExtract(a){const b=a['json']??{},c=f=>typeof f==='string'?f:undefined,d=f=>typeof f==='string'?f:null,e=Array['isArray'](b['sales'])?b['sales']['map'](f=>({'name':typeof f?.['name']==='string'?f['name']:undefined,'price':typeof f?.['price']==='string'?f['price']:f?.['price']!=null?String(f['price']):'0','wip_hash':typeof f?.['wip_hash']==='string'?f['wip_hash']:undefined})):[];return{'object':a['object'],'description':c(b['description'])??'','location':a['location']??c(b['location'])??'','sales':e,'arbitrations':Array['isArray'](b['arbitrations'])?b['arbitrations']['map'](String):[],'compensation_fund':c(b['compensation_fund']),'buy_guard':d(b['buy_guard']),'machine':d(b['machine']),'um':d(b['um']),'bPublished':b['bPublished']===!![],'bPaused':b['bPaused']===!![]};}export async function handleEvaluationOperation(a){const b=strictParse(EvaluationOperationInputSchema,a,'evaluation_operation\x20input');let c;switch(b['action']){case'arb_game':{const e=b['account']?await getEffectivePersona(b['account']):null,f=b['appetite']??e?.['layer']['preferences']?.['risk_appetite'],g=b['requirements']??e?.['layer']['requirements'];c={'action':'arb_game',...evaluateArbGame(b['status'],b['perspective'],{'risk_appetite':f,'requirements':g})};break;}case'node_game':{const h=b['account']?await getEffectivePersona(b['account']):null,i=b['appetite']??h?.['layer']['preferences']?.['risk_appetite'],j=b['requirements']??h?.['layer']['requirements'];c={'action':'node_game',...evaluateNodeGame({'current_node':b['current_node'],'perspective':b['perspective'],'appetite':i,'requirements':j,'threshold':b['threshold'],'allocation':b['allocation'],'order_amount':b['order_amount'],'compensation_fund':b['compensation_fund'],'operable':b['operable'],'waiting_on':b['waiting_on']??[]})};break;}case'capability_gap':{c={'action':'capability_gap','report':summarizeCapabilityGaps(capabilityFromInput(b['demand']),capabilityFromInput(b['service']))};break;}case'compose_service':{c={'action':'compose_service','plan':composeServicesForDemand(capabilityFromInput(b['demand']),b['services']['map'](capabilityFromInput))};break;}case'demand_match':{c={'action':'demand_match','matches':await matchDemandToServices(capabilityFromInput(b['demand_cap']),b['services'],await resolveInjection(b['account'],b['injection']))};break;}case'service_match':{c={'action':'service_match','matches':await matchServiceToDemands(capabilityFromInput(b['service_cap']),b['demands'],await resolveInjection(b['account'],b['injection']))};break;}case'service_risk':{c={'action':'service_risk','result':await assessServiceRisk(b['service_id'],puzzleRawFromInput(b['puzzle_raw']),await resolveInjection(b['account'],b['injection']),b['depth']??'preorder')};break;}case'path_reasoning':{const k=b['account']?await getEffectivePersona(b['account']):null,l=b['appetite']??k?.['layer']['preferences']?.['risk_appetite'],m=b['requirements']??k?.['layer']['requirements'];c={'action':'path_reasoning',...evaluatePathReasoning({'current_node':b['current_node'],'perspective':b['perspective'],'machine_nodes':b['machine_nodes'],'node_annotations':b['node_annotations'],'appetite':l,'requirements':m,'order_amount':b['order_amount'],'max_depth':b['max_depth']})};break;}case'evidence_review':{c={'action':'evidence_review','review':assessEvidenceReview({'kind':b['kind'],'hash_committed':b['hash_committed'],'digital_check_passed':b['digital_check_passed'],'contradiction':b['contradiction']})};break;}case'discover_services':{const n=!b['sensitivity']?inferSensitivity(b['description']??''):null,o=b['sensitivity']??n['sensitivity'],p=n?.['signals']??[],q=b['context_network']??'testnet',r={'raw':b['location'],...b['region']??{}},s=expandSearchScope(o,r),t=await enumerateServices(q,{'max_objects':b['max_objects'],'no_cache':b['no_cache'],'location_any':s['search_terms']}),u=rankByLocation(o,r,t['services']['map'](v=>({'id':v['object'],'name':v['name'],'location':v['location']})));c={'action':'discover_services','sensitivity':o,'inference_signals':p,'services':u['map'](v=>{const w=t['services']['find'](x=>x['object']===v['id']);return{'object':v['id'],'name':w?.['name'],'location':w?.['location'],'relation':v['relation'],'satisfied':v['satisfied'],'score':v['score'],'reason':v['reason']};}),'total_enumerated':t['total_enumerated'],'has_more':t['has_more'],'scope_advice':{'search_terms':s['search_terms'],'ai_enrichment_note':s['ai_enrichment_note']}};break;}case'discover_demands':{const v=b['context_network']??'testnet',w=await enumerateDemands(v,{'max_objects':b['max_objects'],'no_cache':b['no_cache']}),x=b['location']?.['toLowerCase'](),y=w['demands']['filter'](z=>!x||(z['location']??'')['toLowerCase']()['includes'](x))['map'](z=>({'object':z['object'],'description':z['description']??'','location':z['location']??'','presenters_count':z['presenters_count']??0x0,'permission':z['permission']??''}));c={'action':'discover_demands','demands':y,'total_enumerated':w['total_enumerated'],'has_more':w['has_more']};break;}case'demand_present':{const z=b['context_network']??'testnet',A=await enumerateDemands(z,{'max_objects':b['max_objects'],'no_cache':b['no_cache']}),B=b['location']?.['toLowerCase'](),C=A['demands']['filter'](G=>!B||(G['location']??'')['toLowerCase']()['includes'](B)),D=new Map(C['map'](G=>[G['object'],(G['guards']?.['length']??0x0)>0x0])),E=C['map'](G=>({'object':G['object'],'description':G['description']??'','location':G['location']??'','rewards':G['rewards']??[],'um':G['um']??null})),F=await matchServiceToDemands(capabilityFromInput(b['service_cap']),E,await resolveInjection(b['account'],b['injection']),b['limit']??0x5);c={'action':'demand_present','matches':F['map'](G=>{const H=D['get'](G['demand']['object'])??![];return{'demand':G['demand'],'result':G['result'],'present':{'operation':H?'demand.present_service_with_passport':'demand.present_service','guard_required':H}};}),'total_enumerated':A['total_enumerated'],'has_more':A['has_more']};break;}case'market_metrics':{const G=b['context_network']??'testnet',H=await computeMarketMetrics(G,b['no_cache']),I=await computeOrderFlow(G,b['limit'],b['no_cache']);c={'action':'market_metrics',...H,'order_flow':I};break;}case'anti_cheat':{const J=assessAntiCheat({'service':{'object':b['service']['object'],'arbitrations':b['service']['arbitrations'],'compensation_fund':b['service']['compensation_fund'],'machine':b['service']['machine'],'bPublished':b['service']['bPublished']},'orders':b['orders'],'reviews':b['reviews']});c={'action':'anti_cheat','signals':J};break;}case'market_operations':{if(b['op']==='journey_funnel')c={'action':'market_operations','result':computeJourneyFunnel({'due_diligence':b['due_diligence']??0x0,'orders':b['orders']??0x0,'completed':b['completed']??0x0,'reviews':b['reviews']??0x0})};else{if(b['op']==='referral_attribution')c={'action':'market_operations','result':attributeReferrals(b['referral_orders']??[])};else{if(b['op']==='dynamic_pricing'){const K=b['market_signals'];if(!K)throw new Error('dynamic_pricing\x20op\x20requires\x20market_signals');c={'action':'market_operations','result':suggestPricing({'supplyCount':K['supplyCount'],'demandCount':K['demandCount'],'avgPrice':K['avgPrice'],'myPrice':K['myPrice'],'competitorPrices':K['competitorPrices'],'recentOrderCount':K['recentOrderCount'],'repeatCustomerRate':K['repeatCustomerRate']})};}else c={'action':'market_operations','result':buildCustomerRelationships(b['customer_orders']??[])};}}break;}case'match_discover':{const L=!b['sensitivity']?inferSensitivity(b['description']??''):null,M=b['sensitivity']??L['sensitivity'],N=L?.['signals']??[],O=b['context_network']??'testnet',P={'raw':b['location'],...b['region']??{}},Q=expandSearchScope(M,P),R=await enumerateServices(O,{'max_objects':b['max_objects'],'no_cache':b['no_cache'],'location_any':Q['search_terms']}),S=new Set(b['required_capabilities']??[]),T=extractDemandCapability({'object':'intent','description':b['description'],'location':b['location'],'owner':b['account']},{'price_max':b['budget']!==undefined?BigInt(b['budget']):undefined,'capabilities':{'has_arbitration':S['has']('has_arbitration'),'has_refund_path':S['has']('has_refund_path'),'has_milestone_nodes':S['has']('has_milestone_nodes'),'has_compensation_fund':S['has']('has_compensation_fund'),'has_wip_verification':S['has']('has_wip_verification'),'has_messenger':S['has']('has_messenger'),'has_buy_guard':S['has']('has_buy_guard'),'has_dynamic_pricing':S['has']('has_dynamic_pricing'),'is_published':!![],'is_paused':![]}}),U=rankByLocation(M,P,R['services']['map'](a5=>({'id':a5['object'],'name':a5['name'],'location':a5['location']}))),V=U['filter'](a5=>a5['satisfied']),W=R['services']['filter'](a5=>V['some'](a6=>a6['id']===a5['object']))['map'](serviceSummaryToExtract),X=resolveCategoryMatchRules(b['category']);let Y=W;const Z=[];if(X){const a5=applyHardConstraints(X,W);Y=a5['passed'];for(const a6 of a5['dropped']){Z['push']({'object':a6['candidate']['object'],'reason':a6['constraint']['description']});}}let a0=await resolveInjection(b['account'],b['injection']);X&&(a0=mergeInjections(a0,toSoftWeightInjection(X)));const a1=await matchDemandToServices(T,Y,a0,Y['length']),a2=new Map(a1['map'](a7=>[a7['service']['object'],a7['result']])),a3=new Set(Y['map'](a7=>a7['object'])),a4=V['filter'](a7=>a3['has'](a7['id']))['map'](a7=>{const a8=R['services']['find'](a9=>a9['object']===a7['id']);return{'service':serviceSummaryToExtract(a8),'location':{'relation':a7['relation'],'satisfied':a7['satisfied'],'score':a7['score'],'reason':a7['reason']},'result':a2['get'](a7['id'])};});c={'action':'match_discover','sensitivity':M,'inference_signals':N,'matches':a4,'total_enumerated':R['total_enumerated'],'has_more':R['has_more'],'scope_advice':{'search_terms':Q['search_terms'],'ai_enrichment_note':Q['ai_enrichment_note']}};break;}case'arbitration_score':{let a7=b['history'];const a8=b['context_network']??'testnet';if((!a7||a7['length']===0x0)&&b['arbitration']['object'])try{const aa=await enumerateArbs(a8,{'arbitration':b['arbitration']['object']});a7=await arbCasesWithRoles(aa['arbs'],a8);}catch{a7=b['history'];}if((!a7||a7['length']===0x0)&&b['arbitration']['object'])try{const ab=await query_objects({'objects':[b['arbitration']['object']],'network':a8}),ac=ab?.['objects']?.[0x0];if(ac?.['permission']){const ad=await fetchObjectLinkerCore(ac['permission'],a8),ae=(ad?.['items']??[])['map'](ag=>ag['who'])['filter'](ag=>ag!==b['arbitration']['object']),af=[];for(const ag of ae['slice'](0x0,0xa)){const ah=await enumerateArbs(a8,{'arbitration':ag})['catch'](()=>undefined);ah?.['arbs']?.['length']&&af['push'](...await arbCasesWithRoles(ah['arbs'],a8));}if(af['length']>0x0)a7=af;}}catch{}const a9=await assessArbitration({'arbitration':{'object':b['arbitration']['object'],'fee':b['arbitration']['fee'],'balance':b['arbitration']['balance'],'voting_guard_count':b['arbitration']['voting_guard_count'],'bPaused':b['arbitration']['bPaused'],'location':b['arbitration']['location'],'has_verified_identity':b['arbitration']['has_verified_identity']},'history':a7,'entity_votes':b['entity_votes'],'fee_median':b['fee_median']},await resolveInjection(b['account'],b['injection']));c={'action':'arbitration_score',...a9};break;}case'account_events':{const ai=await runAccountEventWatchers({'account':b['account'],'network':b['context_network']??'testnet','reviews':b['reviews']?.['map'](aj=>({'reviewer':aj['reviewer'],'rating':aj['rating'],'tags':aj['tags'],'comment':aj['comment'],'orderRef':aj['orderRef'],'timestamp':aj['timestamp'],'verified':aj['verified']??![]})),'order_history':b['order_history']},b['categories']);c={'action':'account_events','events':ai};break;}default:throw new Error('Unknown\x20evaluation_operation\x20action');}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c}};}
|
|
1
|
+
import{strictParse}from'../../schema/index.js';import{EvaluationOperationInputSchema}from'../../schema/evaluation/index.js';import{evaluateArbGame}from'../../evaluation/arbitration-game.js';import{evaluateNodeGame}from'../../evaluation/node-game.js';import{evaluatePathReasoning}from'../../evaluation/path-reasoning.js';import{assessEvidenceReview,reviewEvidenceList}from'../../knowledge/evidence-review.js';import{expandSearchScope,inferSensitivity,rankByLocation}from'../../evaluation/location-match.js';import{query_objects,ArbStatus}from'@wowok/wowok';import{enumerateServices,enumerateDemands,enumerateArbs}from'../../knowledge/jsonrpc-enum.js';import{fetchObjectLinkerCore,batchQueryObjectsByIds}from'../../knowledge/index.js';import{summarizeCapabilityGaps}from'../../evaluation/gap.js';import{composeServicesForDemand}from'../../evaluation/composer.js';import{matchDemandToServices,matchServiceToDemands}from'../../evaluation/builtins/demand-match.js';import{nextOperationForServiceMatch,nextOperationForDemandMatch,nextOperationForServiceOrder}from'../../evaluation/match-operation.js';import{extractDemandCapability}from'../../evaluation/extract.js';import{assessServiceRisk}from'../../evaluation/builtins/service-risk.js';import{assessArbitration}from'../../evaluation/builtins/arbitration-score.js';import{resolveCategoryMatchRules,toSoftWeightInjection,applyHardConstraints}from'../../evaluation/category-match-rules.js';import{computeMarketMetrics,computeOrderFlow}from'../../knowledge/market-metrics.js';import{assessAntiCheat}from'../../knowledge/anti-cheat.js';import{computeJourneyFunnel,attributeReferrals,buildCustomerRelationships}from'../../knowledge/market-operations.js';import{suggestPricing}from'../../knowledge/dynamic-pricing.js';import{runAccountEventWatchers}from'../../customer/account-events.js';import{registerBuiltinEvaluations}from'../../evaluation/builtins/index.js';import{getEffectivePersona,mergeInjections}from'../../persona/index.js';import{buildUserInjection}from'../../evaluation/injection.js';registerBuiltinEvaluations();function arbCaseFromObject(b){const c=typeof b['time']==='number'?b['time']:Number(b['time']??0x0);return{'status':b['status'],'time':Number['isFinite'](c)?c:undefined,'resolved_time':typeof b['indemnity']?.['time']==='number'?b['indemnity']['time']:b['compensation_time']??undefined,'indemnity_amount':b['indemnity']?.['amount'],'objected':b['status']===ArbStatus['Objectionable']||b['objection']!=null&&b['objection']['length']>0x0};}async function arbCasesWithRoles(a,b){const c=a['map'](arbCaseFromObject),d=Array['from'](new Set(a['map'](j=>j['order'])['filter'](Boolean))),e=new Map(),f=[];if(d['length']>0x0){const j=await batchQueryObjectsByIds(d,b);for(const k of j){const l=k;if(!l?.['object'])continue;e['set'](l['object'],l);if(l['service'])f['push'](l['service']);}}const g=new Map(),h=Array['from'](new Set(f));if(h['length']>0x0){const m=await batchQueryObjectsByIds(h,b);for(const n of m){const p=n;if(p?.['object'])g['set'](p['object'],p);}}for(let q=0x0;q<a['length'];q++){const r=e['get'](a[q]['order']);if(!r)continue;c[q]['customer']=r['builder']||undefined;const t=g['get'](r['service']);if(t)c[q]['merchant']=t['permission']||undefined;}return c;}function capabilityFromInput(a){return{'id':a['id'],'kind':a['kind'],'owner':a['owner']??'','industry':a['industry'],'industry_confidence':a['industry_confidence']??0x0,'region':a['region'],'price_min':a['price_min']!==undefined?BigInt(a['price_min']):undefined,'price_max':a['price_max']!==undefined?BigInt(a['price_max']):undefined,'token_type':a['token_type']??'','ticket_size':a['ticket_size']??'medium','trust_score':a['trust_score']??0x32,'reputation_like_ratio':a['reputation_like_ratio']??0x1,'arbitration_independent':a['arbitration_independent']??![],'merchant_history_count':a['merchant_history_count']??0x0,'capabilities':a['capabilities'],'tags':a['tags']??[],'keywords':a['keywords']??[]};}function puzzleRawFromInput(a){return{'service':{...a['service'],'priceRaw':a['service']['priceRaw']!==undefined?BigInt(a['service']['priceRaw']):undefined,'compensation_fund':a['service']['compensation_fund']?{'balance':a['service']['compensation_fund']['balance']!==undefined?BigInt(a['service']['compensation_fund']['balance']):undefined}:undefined},'machine_nodes':a['machine_nodes'],'machine_published':a['machine_published'],'machine_paused':a['machine_paused'],'reviews':a['reviews'],'events':a['events'],'similar_services':a['similar_services']?.['map'](b=>({'price':BigInt(b['price'])})),'order_amount':a['order_amount']!==undefined?BigInt(a['order_amount']):undefined,'trust_score':a['trust_score'],'arbitration_owner':a['arbitration_owner'],'service_owner':a['service_owner'],'wip_verified':a['wip_verified'],'order_history':a['order_history'],'merchant_reputation':a['merchant_reputation']};}async function resolveInjection(a,b){return mergeInjections(await buildUserInjection(a),b);}function serviceSummaryToExtract(a){const b=a['json']??{},c=f=>typeof f==='string'?f:undefined,d=f=>typeof f==='string'?f:null,e=Array['isArray'](b['sales'])?b['sales']['map'](f=>({'name':typeof f?.['name']==='string'?f['name']:undefined,'price':typeof f?.['price']==='string'?f['price']:f?.['price']!=null?String(f['price']):'0','wip_hash':typeof f?.['wip_hash']==='string'?f['wip_hash']:undefined})):[];return{'object':a['object'],'description':c(b['description'])??'','location':a['location']??c(b['location'])??'','sales':e,'arbitrations':Array['isArray'](b['arbitrations'])?b['arbitrations']['map'](String):[],'compensation_fund':c(b['compensation_fund']),'buy_guard':d(b['buy_guard']),'machine':d(b['machine']),'um':d(b['um']),'bPublished':b['bPublished']===!![],'bPaused':b['bPaused']===!![]};}export async function handleEvaluationOperation(a){const b=strictParse(EvaluationOperationInputSchema,a,'evaluation_operation\x20input');let c;switch(b['action']){case'arb_game':{const e=b['account']?await getEffectivePersona(b['account']):null,f=b['appetite']??e?.['layer']['preferences']?.['risk_appetite'],g=b['requirements']??e?.['layer']['requirements'];c={'action':'arb_game',...evaluateArbGame(b['status'],b['perspective'],{'risk_appetite':f,'requirements':g})};break;}case'node_game':{const h=b['account']?await getEffectivePersona(b['account']):null,i=b['appetite']??h?.['layer']['preferences']?.['risk_appetite'],j=b['requirements']??h?.['layer']['requirements'];c={'action':'node_game',...evaluateNodeGame({'current_node':b['current_node'],'perspective':b['perspective'],'appetite':i,'requirements':j,'threshold':b['threshold'],'allocation':b['allocation'],'order_amount':b['order_amount'],'compensation_fund':b['compensation_fund'],'operable':b['operable'],'waiting_on':b['waiting_on']??[]})};break;}case'capability_gap':{c={'action':'capability_gap','report':summarizeCapabilityGaps(capabilityFromInput(b['demand']),capabilityFromInput(b['service']))};break;}case'compose_service':{c={'action':'compose_service','plan':composeServicesForDemand(capabilityFromInput(b['demand']),b['services']['map'](capabilityFromInput))};break;}case'demand_match':{const k=await matchDemandToServices(capabilityFromInput(b['demand_cap']),b['services'],await resolveInjection(b['account'],b['injection']),0x5,b['presenter_history']);c={'action':'demand_match','matches':k['map'](l=>({'service':l['service'],'result':l['result'],'next':nextOperationForDemandMatch(l['service']),'order':nextOperationForServiceOrder(l['service'])}))};break;}case'service_match':{const l=await matchServiceToDemands(capabilityFromInput(b['service_cap']),b['demands'],await resolveInjection(b['account'],b['injection']),0x5,b['presenter_history']);c={'action':'service_match','matches':l['map'](n=>({'demand':n['demand'],'result':n['result'],'next':nextOperationForServiceMatch(n['demand'],null)}))};break;}case'service_risk':{c={'action':'service_risk','result':await assessServiceRisk(b['service_id'],puzzleRawFromInput(b['puzzle_raw']),await resolveInjection(b['account'],b['injection']),b['depth']??'preorder',b['presenter_history'])};break;}case'path_reasoning':{const m=b['account']?await getEffectivePersona(b['account']):null,n=b['appetite']??m?.['layer']['preferences']?.['risk_appetite'],o=b['requirements']??m?.['layer']['requirements'];c={'action':'path_reasoning',...evaluatePathReasoning({'current_node':b['current_node'],'perspective':b['perspective'],'machine_nodes':b['machine_nodes'],'node_annotations':b['node_annotations'],'appetite':n,'requirements':o,'order_amount':b['order_amount'],'max_depth':b['max_depth']})};break;}case'evidence_review':{b['items']&&b['items']['length']>0x0?c={'action':'evidence_review','list':reviewEvidenceList(b['items'])}:c={'action':'evidence_review','review':assessEvidenceReview({'kind':b['kind'],'hash_committed':b['hash_committed'],'digital_check_passed':b['digital_check_passed'],'contradiction':b['contradiction']})};break;}case'discover_services':{const p=!b['sensitivity']?inferSensitivity(b['description']??''):null,q=b['sensitivity']??p['sensitivity'],r=p?.['signals']??[],s=b['context_network']??'testnet',t={'raw':b['location'],...b['region']??{}},u=expandSearchScope(q,t),v=await enumerateServices(s,{'max_objects':b['max_objects'],'no_cache':b['no_cache'],'location_any':u['search_terms']}),w=rankByLocation(q,t,v['services']['map'](x=>({'id':x['object'],'name':x['name'],'location':x['location']})));c={'action':'discover_services','sensitivity':q,'inference_signals':r,'services':w['map'](x=>{const y=v['services']['find'](z=>z['object']===x['id']);return{'object':x['id'],'name':y?.['name'],'location':y?.['location'],'relation':x['relation'],'satisfied':x['satisfied'],'score':x['score'],'reason':x['reason']};}),'total_enumerated':v['total_enumerated'],'has_more':v['has_more'],'scope_advice':{'search_terms':u['search_terms'],'ai_enrichment_note':u['ai_enrichment_note']}};break;}case'discover_demands':{const x=b['context_network']??'testnet',y=await enumerateDemands(x,{'max_objects':b['max_objects'],'no_cache':b['no_cache']}),z=b['location']?.['toLowerCase'](),A=y['demands']['filter'](B=>!z||(B['location']??'')['toLowerCase']()['includes'](z))['map'](B=>({'object':B['object'],'description':B['description']??'','location':B['location']??'','presenters_count':B['presenters_count']??0x0,'permission':B['permission']??''}));c={'action':'discover_demands','demands':A,'total_enumerated':y['total_enumerated'],'has_more':y['has_more']};break;}case'demand_present':{const B=b['context_network']??'testnet',C=await enumerateDemands(B,{'max_objects':b['max_objects'],'no_cache':b['no_cache']}),D=b['location']?.['toLowerCase'](),E=C['demands']['filter'](I=>!D||(I['location']??'')['toLowerCase']()['includes'](D)),F=new Map(E['map'](I=>[I['object'],(I['guards']?.['length']??0x0)>0x0])),G=E['map'](I=>({'object':I['object'],'description':I['description']??'','location':I['location']??'','rewards':I['rewards']??[],'um':I['um']??null})),H=await matchServiceToDemands(capabilityFromInput(b['service_cap']),G,await resolveInjection(b['account'],b['injection']),b['limit']??0x5);c={'action':'demand_present','matches':H['map'](I=>{const J=F['get'](I['demand']['object'])??![];return{'demand':I['demand'],'result':I['result'],'next':nextOperationForServiceMatch(I['demand'],J)};}),'total_enumerated':C['total_enumerated'],'has_more':C['has_more']};break;}case'market_metrics':{const I=b['context_network']??'testnet',J=await computeMarketMetrics(I,b['no_cache']),K=await computeOrderFlow(I,b['limit'],b['no_cache']);c={'action':'market_metrics',...J,'order_flow':K};break;}case'anti_cheat':{const L=assessAntiCheat({'service':{'object':b['service']['object'],'arbitrations':b['service']['arbitrations'],'compensation_fund':b['service']['compensation_fund'],'machine':b['service']['machine'],'bPublished':b['service']['bPublished']},'orders':b['orders'],'reviews':b['reviews']});c={'action':'anti_cheat','signals':L};break;}case'market_operations':{if(b['op']==='journey_funnel')c={'action':'market_operations','result':computeJourneyFunnel({'due_diligence':b['due_diligence']??0x0,'orders':b['orders']??0x0,'completed':b['completed']??0x0,'reviews':b['reviews']??0x0})};else{if(b['op']==='referral_attribution')c={'action':'market_operations','result':attributeReferrals(b['referral_orders']??[])};else{if(b['op']==='dynamic_pricing'){const M=b['market_signals'];if(!M)throw new Error('dynamic_pricing\x20op\x20requires\x20market_signals');c={'action':'market_operations','result':suggestPricing({'supplyCount':M['supplyCount'],'demandCount':M['demandCount'],'avgPrice':M['avgPrice'],'myPrice':M['myPrice'],'competitorPrices':M['competitorPrices'],'recentOrderCount':M['recentOrderCount'],'repeatCustomerRate':M['repeatCustomerRate']})};}else c={'action':'market_operations','result':buildCustomerRelationships(b['customer_orders']??[])};}}break;}case'match_discover':{const N=!b['sensitivity']?inferSensitivity(b['description']??''):null,O=b['sensitivity']??N['sensitivity'],P=N?.['signals']??[],Q=b['context_network']??'testnet',R={'raw':b['location'],...b['region']??{}},S=expandSearchScope(O,R),T=await enumerateServices(Q,{'max_objects':b['max_objects'],'no_cache':b['no_cache'],'location_any':S['search_terms']}),U=new Set(b['required_capabilities']??[]),V=extractDemandCapability({'object':'intent','description':b['description'],'location':b['location'],'owner':b['account']},{'price_max':b['budget']!==undefined?BigInt(b['budget']):undefined,'capabilities':{'has_arbitration':U['has']('has_arbitration'),'has_refund_path':U['has']('has_refund_path'),'has_milestone_nodes':U['has']('has_milestone_nodes'),'has_compensation_fund':U['has']('has_compensation_fund'),'has_wip_verification':U['has']('has_wip_verification'),'has_messenger':U['has']('has_messenger'),'has_buy_guard':U['has']('has_buy_guard'),'has_dynamic_pricing':U['has']('has_dynamic_pricing'),'is_published':!![],'is_paused':![]}}),W=rankByLocation(O,R,T['services']['map'](a7=>({'id':a7['object'],'name':a7['name'],'location':a7['location']}))),X=W['filter'](a7=>a7['satisfied']),Y=T['services']['filter'](a7=>X['some'](a8=>a8['id']===a7['object']))['map'](serviceSummaryToExtract),Z=resolveCategoryMatchRules(b['category']);let a0=Y;const a1=[];if(Z){const a7=applyHardConstraints(Z,Y);a0=a7['passed'];for(const a8 of a7['dropped']){a1['push']({'object':a8['candidate']['object'],'reason':a8['constraint']['description']});}}let a2=await resolveInjection(b['account'],b['injection']);Z&&(a2=mergeInjections(a2,toSoftWeightInjection(Z)));const a3=await matchDemandToServices(V,a0,a2,a0['length'],b['presenter_history']),a4=new Map(a3['map'](a9=>[a9['service']['object'],a9['result']])),a5=new Set(a0['map'](a9=>a9['object'])),a6=X['filter'](a9=>a5['has'](a9['id']))['map'](a9=>{const aa=T['services']['find'](ab=>ab['object']===a9['id']);return{'service':serviceSummaryToExtract(aa),'location':{'relation':a9['relation'],'satisfied':a9['satisfied'],'score':a9['score'],'reason':a9['reason']},'result':a4['get'](a9['id'])};});c={'action':'match_discover','sensitivity':O,'inference_signals':P,'matches':a6,'total_enumerated':T['total_enumerated'],'has_more':T['has_more'],'scope_advice':{'search_terms':S['search_terms'],'ai_enrichment_note':S['ai_enrichment_note']}};break;}case'arbitration_score':{let a9=b['history'];const aa=b['context_network']??'testnet';if((!a9||a9['length']===0x0)&&b['arbitration']['object'])try{const ac=await enumerateArbs(aa,{'arbitration':b['arbitration']['object']});a9=await arbCasesWithRoles(ac['arbs'],aa);}catch{a9=b['history'];}if((!a9||a9['length']===0x0)&&b['arbitration']['object'])try{const ad=await query_objects({'objects':[b['arbitration']['object']],'network':aa}),ae=ad?.['objects']?.[0x0];if(ae?.['permission']){const af=await fetchObjectLinkerCore(ae['permission'],aa),ag=(af?.['items']??[])['map'](ai=>ai['who'])['filter'](ai=>ai!==b['arbitration']['object']),ah=[];for(const ai of ag['slice'](0x0,0xa)){const aj=await enumerateArbs(aa,{'arbitration':ai})['catch'](()=>undefined);aj?.['arbs']?.['length']&&ah['push'](...await arbCasesWithRoles(aj['arbs'],aa));}if(ah['length']>0x0)a9=ah;}}catch{}const ab=await assessArbitration({'arbitration':{'object':b['arbitration']['object'],'fee':b['arbitration']['fee'],'balance':b['arbitration']['balance'],'voting_guard_count':b['arbitration']['voting_guard_count'],'bPaused':b['arbitration']['bPaused'],'location':b['arbitration']['location'],'has_verified_identity':b['arbitration']['has_verified_identity']},'history':a9,'entity_votes':b['entity_votes'],'fee_median':b['fee_median']},await resolveInjection(b['account'],b['injection']));c={'action':'arbitration_score',...ab};break;}case'account_events':{const ak=await runAccountEventWatchers({'account':b['account'],'network':b['context_network']??'testnet','reviews':b['reviews']?.['map'](al=>({'reviewer':al['reviewer'],'rating':al['rating'],'tags':al['tags'],'comment':al['comment'],'orderRef':al['orderRef'],'timestamp':al['timestamp'],'verified':al['verified']??![]})),'order_history':b['order_history']},b['categories']);c={'action':'account_events','events':ak};break;}default:throw new Error('Unknown\x20evaluation_operation\x20action');}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c}};}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe,expect,it}from'vitest';import{handleEvaluationOperation}from'./evaluation.js';function resultOf(a){return a['structuredContent']['result'];}const demandCap={'id':'0xdemand1','kind':'demand','industry':'freelance','region':{'mode':'physical','city':'Shanghai','raw':'Shanghai'},'keywords':['design'],'capabilities':{'has_arbitration':![],'has_refund_path':![],'has_milestone_nodes':![],'has_compensation_fund':![],'has_wip_verification':![],'has_messenger':![],'has_buy_guard':![],'has_dynamic_pricing':![],'is_published':!![],'is_paused':![]}},service={'object':'0xsvc1','description':'freelance\x20logo\x20design','location':'Shanghai','sales':[{'price':'100','wip_hash':'abc'}],'bPublished':!![],'bPaused':![]};describe('evaluation_operation\x20demand_match\x20presenter_history\x20(P2-2)',()=>{it('acceptance\x20rule\x20scores\x20the\x20rated\x20history\x20in\x20the\x20breakdown',async()=>{const a=await handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service],'presenter_history':[{'acceptance_score':0x50},{'acceptance_score':0x5a}]}),c=resultOf(a);expect(c['action'])['toBe']('demand_match');const d=c['matches'][0x0]['result']['breakdown']['find'](e=>e['rule_id']==='acceptance');expect(d)['toBeDefined'](),expect(d['score'])['toBe'](0x55);}),it('omitted\x20history\x20→\x20acceptance\x20stays\x20neutral',async()=>{const a=await handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service]}),c=resultOf(a)['matches'][0x0]['result']['breakdown']['find'](d=>d['rule_id']==='acceptance');expect(c)['toBeDefined'](),expect(c['score'])['toBe'](0x32),expect(c['reason'])['toContain']('neutral');}),it('schema\x20rejects\x20a\x20malformed\x20presenter_history\x20entry',async()=>{await expect(handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service],'presenter_history':[{'acceptance_score':0x50,'bogus':!![]}]}))['rejects']['toThrow']();});}),describe('evaluation_operation\x20demand_match\x20order\x20bridge\x20(N-2\x20/\x2008\x20§七)',()=>{it('each\x20match\x20carries\x20the\x20service.order_new\x20transaction-formation\x20bridge',async()=>{const a=await handleEvaluationOperation({'action':'demand_match','demand_cap':demandCap,'services':[service]}),b=resultOf(a)['matches'][0x0];expect(b['order'])['toBeDefined'](),expect(b['order']['operation'])['toBe']('service.order_new'),expect(b['order']['operation_type'])['toBe']('service'),expect(b['order']['preconditions']['some'](c=>c['includes']('acceptance_score')))['toBe'](!![]),expect(b['order']['rationale'])['toContain']('0xsvc1'),expect(b['next']['operation'])['toBe']('demand.publish'),expect(b['next']['operation_type'])['toBe']('demand'),expect(b['next']['rationale'])['toContain']('service.order_new');});}),describe('evaluation_operation\x20evidence_review\x20list\x20mode\x20(P2-3)',()=>{it('items\x20mode\x20→\x20structured\x20usable/manual/rejected\x20+\x20proof\x20candidates',async()=>{const a=await handleEvaluationOperation({'action':'evidence_review','items':[{'id':'chat.wts','kind':'signature_photo','hash_committed':!![],'digital_check_passed':!![],'proof_ref':'0xproof1'},{'id':'waybill.jpg','kind':'delivery_proof','hash_committed':!![]},{'id':'voice.mp3','kind':'voice_recording','hash_committed':![]}]}),b=resultOf(a);expect(b['action'])['toBe']('evidence_review'),expect(b['list']['items'])['toHaveLength'](0x3),expect(b['list']['usable'])['toHaveLength'](0x1),expect(b['list']['manual'])['toHaveLength'](0x1),expect(b['list']['rejected'])['toHaveLength'](0x1),expect(b['list']['proof_candidates'])['toHaveLength'](0x1),expect(b['list']['proof_candidates'][0x0]['proof_ref'])['toBe']('0xproof1'),expect(b['list']['dispute_hint'])['toContain']('1\x20Proof\x20reference\x20candidate(s)\x20ready');}),it('single-item\x20mode\x20still\x20works\x20(backwards\x20compatible)',async()=>{const a=await handleEvaluationOperation({'action':'evidence_review','kind':'signature_photo','hash_committed':!![],'digital_check_passed':!![]});expect(resultOf(a)['review']['status'])['toBe']('auto_pass');}),it('schema\x20refinement:\x20neither\x20items\x20nor\x20kind+hash_committed\x20→\x20error',async()=>{await expect(handleEvaluationOperation({'action':'evidence_review'}))['rejects']['toThrow']();});});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ToolDispatchResult } from "../types.js";
|
|
2
|
+
import { type KeeperStore } from "../../keeper/KeeperStore.js";
|
|
3
|
+
import { type KeeperScanDeps } from "../../keeper/KeeperScan.js";
|
|
4
|
+
import type { ScopeSnapshot } from "../../monitor/types.js";
|
|
5
|
+
export interface KeeperOperationDeps {
|
|
6
|
+
store: KeeperStore;
|
|
7
|
+
scan: Pick<KeeperScanDeps, "payment" | "progress" | "execute" | "now" | "logger">;
|
|
8
|
+
loadScope(network: string): Promise<ScopeSnapshot | undefined>;
|
|
9
|
+
resolveScope(network: string): Promise<ScopeSnapshot>;
|
|
10
|
+
}
|
|
11
|
+
export declare function setKeeperOperationDeps(deps?: KeeperOperationDeps): void;
|
|
12
|
+
export declare function handleKeeperOperation(args: unknown): Promise<ToolDispatchResult>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{KeeperOperationInputSchema,strictParse}from'../../schema/index.js';import{buildDataSemantic}from'../../schema/call/semantic.js';import{keeperStore}from'../../keeper/KeeperStore.js';import{executeKeeperTask,realKeeperScanDeps,runKeeperScan}from'../../keeper/KeeperScan.js';import{AUTO_EXECUTABLE_DETECTORS,KEEPER_DEFAULTS,KEEPER_MIN,newKeeperRuleId}from'../../keeper/types.js';import{loadScopeSnapshot,resolveScope}from'../../monitor/ScopeResolver.js';import{subscriptionStore}from'../../monitor/SubscriptionStore.js';import{formatShortAddress}from'../../persona/address-format.js';import{resolveNetwork}from'./network.js';let depsOverride;export function setKeeperOperationDeps(a){depsOverride=a;}function keeperDeps(){if(depsOverride)return depsOverride;const a=realKeeperScanDeps();return{'store':keeperStore,'scan':a,'loadScope':b=>loadScopeSnapshot(b),'resolveScope':async b=>{const c=await subscriptionStore['getConfig'](b);return(await resolveScope(b,c))['snapshot'];}};}function scanDeps(a){return{'store':a['store'],...a['scan']};}async function scopeForScan(a,b){const c=await b['loadScope'](a);if(c)return c;try{return await b['resolveScope'](a);}catch{return undefined;}}export async function handleKeeperOperation(a){const b=strictParse(KeeperOperationInputSchema,a,'keeper_operation\x20input'),c=await resolveNetwork(b['network']),e=keeperDeps(),f=e['store'];let g;switch(b['action']){case'tasks':{const h=await f['listTasks'](c,{'status':b['status'],'detector':b['detector'],'beneficiary':b['beneficiary']}),i=l=>l==='pending'?0x0:0x1;h['sort']((l,m)=>i(l['status'])-i(m['status'])||m['updated_at']-l['updated_at']);const j=b['limit']??0x32,k=b['offset']??0x0;g={'action':'tasks','total':h['length'],'pending':h['filter'](l=>l['status']==='pending')['length'],'tasks':h['slice'](k,k+j)['map'](l=>({...l,'beneficiary_short':formatShortAddress(l['beneficiary']),...l['object']?{'object_short':formatShortAddress(l['object'])}:{}}))};break;}case'dismiss':{const l=[],m=[];for(const n of b['task_ids']){const o=await f['resolveTask'](c,n,'dismissed',Date['now'](),'dismissed\x20by\x20user');(o?l:m)['push'](n);}g={'action':'dismiss','dismissed':l,'missing':m};break;}case'execute':{const p=await f['getTask'](c,b['task_id']);if(!p)throw new Error('keeper\x20task\x20\x27'+b['task_id']+'\x27\x20not\x20found\x20on\x20'+c);if(p['status']!=='pending')throw new Error('keeper\x20task\x20\x27'+b['task_id']+'\x27\x20is\x20'+p['status']+'\x20—\x20only\x20pending\x20tasks\x20can\x20execute');const q=await executeKeeperTask(c,p,scanDeps(e));g={'action':'execute','task_id':p['id'],'detector':p['detector'],'beneficiary':p['beneficiary'],'executed':q['ok'],...q['digest']?{'digest':q['digest']}:{},...q['error']?{'error':q['error']}:{}};break;}case'rules':{const r=await f['listRules'](c);g={'action':'rules','auto_executable_detectors':[...AUTO_EXECUTABLE_DETECTORS],'rules':r};break;}case'rule_set':{const s=b['detector'],u=b['auto_execute']??![];if(u&&!AUTO_EXECUTABLE_DETECTORS['includes'](s))throw new Error('auto_execute\x20is\x20not\x20available\x20for\x20\x27'+s+'\x27\x20—\x20v1\x20restricts\x20auto-execution\x20to\x20'+(AUTO_EXECUTABLE_DETECTORS['join'](',\x20')+'\x20(claim-to-self\x20only).\x20')+('\x27'+s+'\x27\x20advances\x20business\x20state\x20that\x20may\x20release\x20funds\x20to\x20a\x20counterparty,\x20')+'so\x20each\x20execution\x20stays\x20an\x20explicit\x20user\x20decision.');const v=await f['listRules'](c),w=b['rule_id']?v['find'](z=>z['id']===b['rule_id']):undefined;if(b['rule_id']&&!w)throw new Error('keeper\x20rule\x20\x27'+b['rule_id']+'\x27\x20not\x20found\x20on\x20'+c);const x={'id':w?.['id']??newKeeperRuleId(),'detector':s,'enabled':b['enabled']??w?.['enabled']??!![],'accounts':(b['accounts']??w?.['accounts']??[])['map'](z=>z['toLowerCase']()),'auto_execute':u,'created_at':w?.['created_at']??Date['now'](),...b['note']??w?.['note']?{'note':b['note']??w?.['note']}:{}},y=await f['upsertRule'](c,x);g={'action':'rule_set','rule':x,'total_rules':y['length'],'audit':'Auto-execution\x20with\x20this\x20rule\x20signs\x20as\x20the\x20covered\x20beneficiary\x20account(s)\x20through\x20the\x20'+'existing\x20onchain\x20pipeline;\x20every\x20auto-exec\x20stamps\x20this\x20rule\x20id\x20into\x20the\x20task\x27s\x20resolution.\x20'+'Disable\x20anytime\x20(rule_set\x20enabled=false\x20or\x20rule_remove).'};break;}case'rule_remove':{const z=await f['removeRule'](c,b['rule_id']);g={'action':'rule_remove','removed':b['rule_id'],'total_rules':z['length']};break;}case'config':{const A=await f['getConfig'](c);g={'action':'config','config':A,'bounds':{'defaults':KEEPER_DEFAULTS,'min':KEEPER_MIN}};break;}case'config_set':{const {action:B,network:C,...D}=b,E=await f['saveConfig'](c,D);g={'action':'config_set','config':E};break;}case'scan':{const F=await scopeForScan(c,e);if(!F)throw new Error('No\x20monitor\x20scope\x20on\x20'+c+'\x20yet\x20—\x20start\x20the\x20monitor\x20(or\x20save\x20a\x20monitor_subscription)\x20first;\x20'+'the\x20keeper\x20scans\x20the\x20scope\x27s\x20accounts/orders.');const G=await runKeeperScan(c,F,scanDeps(e),{'force':!![]});g={'action':'scan','summary':G};break;}case'status':{const H=await f['getConfig'](c),I=await f['getLastScanAt'](c),J=await f['listTasks'](c,{'status':'pending'}),K={};for(const L of J)K[L['detector']]=(K[L['detector']]??0x0)+0x1;g={'action':'status','enabled':H['enabled'],'detectors':H['detectors'],'scan_interval_ms':H['scan_interval_ms'],'last_scan_at':I,'next_scan_due_at':I>0x0?I+H['scan_interval_ms']:0x0,'pending_total':J['length'],'pending_by_detector':K};break;}}return{'content':[{'type':'text','text':JSON['stringify']({'result':g})}],'structuredContent':{'result':g,'semantic':buildDataSemantic(g,{'operation_type':'keeper_operation','data':b})}};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{strictParse,MessengerOperationInputSchema}from'../../schema/index.js';import{watch_conversations,send_message,send_file,watch_messages,extract_zip_messages,pull_messages,generate_wts,verify_wts,sign_wts,wts2html,proof_message,mark_messages_as_viewed,mark_conversation_as_viewed,blacklist,friendslist,guardlist,settings,LocalInfo}from'@wowok/wowok';import{classifyError,buildDataSemantic}from'../../schema/call/semantic.js';export function normalizeAccountOrMark(a){if(typeof a==='string')return{'name_or_address':a,'local_mark_first':!![]};return a;}export function normalizeManyAccountOrMark(a){if(Array['isArray'](a))return{'entities':a['map'](b=>typeof b==='string'?{'name_or_address':b,'local_mark_first':!![]}:b),'check_all_founded':!![]};return a;}export async function handleMessengerOperation(a){let b;try{b=strictParse(MessengerOperationInputSchema,a,'messenger_operation\x20input');const c=b['operation'];let d;switch(b['operation']){case'watch_conversations':{const
|
|
1
|
+
import{strictParse,MessengerOperationInputSchema}from'../../schema/index.js';import{watch_conversations,send_message,send_file,watch_messages,extract_zip_messages,pull_messages,generate_wts,verify_wts,sign_wts,wts2html,proof_message,mark_messages_as_viewed,mark_conversation_as_viewed,blacklist,friendslist,guardlist,settings,LocalInfo}from'@wowok/wowok';import{classifyError,buildDataSemantic}from'../../schema/call/semantic.js';import{classifyCommunicationEvidence}from'../../communication/evidence.js';import{goalEngine}from'../../goal/GoalEngine.js';export function normalizeAccountOrMark(a){if(typeof a==='string')return{'name_or_address':a,'local_mark_first':!![]};return a;}export function normalizeManyAccountOrMark(a){if(Array['isArray'](a))return{'entities':a['map'](b=>typeof b==='string'?{'name_or_address':b,'local_mark_first':!![]}:b),'check_all_founded':!![]};return a;}function communicationEvidencePayload(a,b){const c=b??{};switch(a){case'send_message':case'send_file':{const d=typeof c['messageId']==='string'?c['messageId']:undefined;return{'detail':d?'message\x20'+d:'message\x20sent','data':d?{'message_id':d}:{}};}case'send_required_info':{const e=typeof c['messageId']==='string'?c['messageId']:undefined,f=Array['isArray'](c['sent_fields'])?c['sent_fields']:undefined;return{'detail':'required-info\x20confirmation\x20sent','data':{...e?{'message_id':e}:{},...f?{'sent_fields':f}:{}}};}case'generate_wts':{const g=typeof c['totalMessageCount']==='number'?c['totalMessageCount']:undefined,h=Array['isArray'](c['files'])?c['files']:undefined;return{'detail':'WTS\x20evidence\x20packet\x20generated','data':{...g!==undefined?{'message_count':g}:{},...h?{'files':h}:{}}};}case'verify_wts':{return{'detail':'WTS\x20evidence\x20verification','data':{'valid':c['valid']===!![]}};}case'sign_wts':{return{'detail':typeof b==='string'?b:'WTS\x20evidence\x20signed','data':{}};}case'proof_message':{const i=typeof c['proofAddress']==='string'?c['proofAddress']:undefined;return{'detail':i?'proof\x20'+i:'message\x20proofed\x20on-chain','data':i?{'proof_address':i}:{}};}default:return{'detail':a,'data':{}};}}export async function handleMessengerOperation(a){let b;try{b=strictParse(MessengerOperationInputSchema,a,'messenger_operation\x20input');const c=b['operation'];let d;switch(b['operation']){case'watch_conversations':{const g=await watch_conversations(b['filter']);d={'operation':'watch_conversations','result':g};break;}case'send_message':{const h=await send_message(b['from'],normalizeAccountOrMark(b['to']),b['content'],b['options']),i={...h,'merkleData':h['merkleData']?{'leafIndex':h['merkleData']['leafIndex'],'prevRoot':h['merkleData']['prevRoot'],'newRoot':h['merkleData']['newRoot'],'serverSignature':h['merkleData']['serverSignature'],'serverTimestamp':h['merkleData']['serverTimestamp'],'serverPublicKey':h['merkleData']['serverPublicKey']}:undefined};d={'operation':'send_message','result':i};break;}case'send_file':{const j=await send_file(b['from'],normalizeAccountOrMark(b['to']),b['filePath'],b['options']),k={...j,'merkleData':j['merkleData']?{'leafIndex':j['merkleData']['leafIndex'],'prevRoot':j['merkleData']['prevRoot'],'newRoot':j['merkleData']['newRoot'],'serverSignature':j['merkleData']['serverSignature'],'serverTimestamp':j['merkleData']['serverTimestamp'],'serverPublicKey':j['merkleData']['serverPublicKey']}:undefined};d={'operation':'send_file','result':k};break;}case'send_required_info':{let l=b['content'];const m=[];if(!l){const p=await LocalInfo['Instance']()['list'](),q=b['fields'],r=q&&q['length']>0x0?p['filter'](s=>q['includes'](s['name'])):p;if(r['length']===0x0)throw new Error('No\x20LocalInfo\x20fields\x20available.\x20Add\x20private\x20info\x20first\x20via\x20local_info_operation.');l=r['map'](s=>s['name']+':\x20'+s['default'])['join']('\x0a'),m['push'](...r['map'](s=>s['name']));}const n=await send_message(b['from'],normalizeAccountOrMark(b['to']),l,b['options']),o={...n,'merkleData':n['merkleData']?{'leafIndex':n['merkleData']['leafIndex'],'prevRoot':n['merkleData']['prevRoot'],'newRoot':n['merkleData']['newRoot'],'serverSignature':n['merkleData']['serverSignature'],'serverTimestamp':n['merkleData']['serverTimestamp'],'serverPublicKey':n['merkleData']['serverPublicKey']}:undefined,'sent_fields':m};d={'operation':'send_required_info','result':o};break;}case'watch_messages':{const s=b['filter']?{...b['filter'],'peerAddress':b['filter']['peerAddress']?normalizeAccountOrMark(b['filter']['peerAddress']):undefined}:undefined,t=await watch_messages(s);d={'operation':'watch_messages','result':t};break;}case'extract_zip_messages':{const u=await extract_zip_messages(b['account'],b['messages'],b['outputDir']);d={'operation':'extract_zip_messages','result':u};break;}case'generate_wts':{const v=b['params']?{...b['params'],'peerAccount':normalizeAccountOrMark(b['params']['peerAccount'])}:undefined,w=await generate_wts(v);d={'operation':'generate_wts','result':w};break;}case'verify_wts':{const x=await verify_wts(b['wtsFilePath']);d={'operation':'verify_wts','result':x};break;}case'sign_wts':{const y=await sign_wts(b['wtsFilePath'],b['account'],b['outputPath']);d={'operation':'sign_wts','result':y};break;}case'wts2html':{const z=await wts2html(b['wtsPath'],b['options']);d={'operation':'wts2html','result':z};break;}case'proof_message':{const A=await proof_message(b['account'],b['messageId'],b['network']);d={'operation':'proof_message','result':A};break;}case'blacklist':{const B={'account':b['account'],'op':b['blacklist']['op']};'users'in b['blacklist']&&(B['users']=normalizeManyAccountOrMark(b['blacklist']['users']));const C=await blacklist(B);d={'operation':'blacklist','op':b['blacklist']['op'],'result':C['result']};break;}case'friendslist':{const D={'account':b['account'],'op':b['friendslist']['op']};'users'in b['friendslist']&&(D['users']=normalizeManyAccountOrMark(b['friendslist']['users']));const E=await friendslist(D);d={'operation':'friendslist','op':b['friendslist']['op'],'result':E['result']};break;}case'guardlist':{const F=await guardlist({'account':b['account'],...b['guardlist']});d={'operation':'guardlist','op':b['guardlist']['op'],'result':F['result']};break;}case'settings':{const G=await settings({'account':b['account'],...b['settings']});d={'operation':'settings','op':b['settings']['op'],'result':G['result']};break;}case'mark_messages_as_viewed':{const H=await mark_messages_as_viewed(b['messageIds'],b['account']);d={'operation':'mark_messages_as_viewed','result':H};break;}case'mark_conversation_as_viewed':{const I=await mark_conversation_as_viewed(normalizeAccountOrMark(b['peerAddress']),b['account']);d={'operation':'mark_conversation_as_viewed','result':I};break;}case'pull_messages':{const J=await pull_messages(b['account'],b['limit']);d={'operation':'pull_messages','result':J};break;}default:throw new Error('Unknown\x20messenger\x20operation:\x20'+c);}const e=classifyCommunicationEvidence(c),f=b['goal_id'];if(e&&f){const K=d['result'],{detail:L,data:M}=communicationEvidencePayload(c,K);await goalEngine['recordCommunicationEvidence'](f,{'operation':c,'kind':e['kind'],'title':e['title'],'detail':L,'data':M},b['network']??'default');}return{'content':[{'type':'text','text':JSON['stringify'](d)}],'structuredContent':{'result':d}};}catch(N){const O=N instanceof Error?N['message']:String(N),P=b?{'operation_type':'messenger_'+b['operation'],'data':b}:undefined,Q=classifyError(O),R={'operation':'error','error':O};if(Q['error_code']!==undefined)R['error_code']=Q['error_code'];if(Q['retryable']!==undefined)R['retryable']=Q['retryable'];if(Q['recovery_hint']!==undefined)R['recovery_hint']=Q['recovery_hint'];return{'content':[{'type':'text','text':'Error:\x20'+O}],'structuredContent':{'result':R,'semantic':buildDataSemantic(undefined,P,!![],O)}};}}
|