@wowok/agent-mcp 2.7.8 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/config/runtime.d.ts +1 -1
- package/dist/config/runtime.js +1 -1
- package/dist/examples/rental-ziroom-machine-create.json +1 -2
- package/dist/examples/rental-ziroom-permission-create.json +1 -2
- package/dist/examples/rental-ziroom-service-create.json +1 -2
- package/dist/experience/experience-reuse.js +1 -1
- package/dist/experience/index.d.ts +2 -1
- package/dist/experience/index.js +1 -1
- package/dist/experience/persistence-config.d.ts +6 -0
- package/dist/experience/persistence-config.js +1 -0
- package/dist/experience/persistence.d.ts +21 -0
- package/dist/experience/persistence.js +1 -0
- package/dist/experience/realtime-feedback.js +1 -1
- package/dist/experience/user-profile.js +1 -1
- package/dist/extensions/business-modules.d.ts +1 -1
- package/dist/extensions/capability-manifest.d.ts +2 -83
- package/dist/extensions/capability-manifest.js +1 -1
- package/dist/extensions/constraint-registry.d.ts +6 -4
- package/dist/extensions/constraint-registry.js +1 -1
- package/dist/extensions/index.d.ts +4 -5
- package/dist/extensions/index.js +1 -1
- package/dist/extensions/industry-pack.js +1 -1
- package/dist/extensions/metric-registry.d.ts +6 -4
- package/dist/extensions/metric-registry.js +1 -1
- package/dist/extensions/mode-evaluator.d.ts +2 -3
- package/dist/extensions/mode-evaluator.js +1 -1
- package/dist/extensions/registry.d.ts +3 -25
- package/dist/extensions/registry.js +1 -1
- package/dist/extensions/types.d.ts +1 -69
- package/dist/goal/GoalClassifier.d.ts +17 -0
- package/dist/goal/GoalClassifier.js +1 -0
- package/dist/goal/GoalEngine.d.ts +155 -0
- package/dist/goal/GoalEngine.js +1 -0
- package/dist/goal/GoalStore.d.ts +27 -0
- package/dist/goal/GoalStore.js +1 -0
- package/dist/goal/plan-approval.d.ts +5 -0
- package/dist/goal/plan-approval.js +1 -0
- package/dist/goal/types.d.ts +80 -0
- package/dist/goal/types.js +1 -0
- package/dist/harness/index.d.ts +2 -7
- package/dist/harness/index.js +1 -1
- package/dist/harness/plan.d.ts +1 -1
- package/dist/harness/types.d.ts +0 -35
- package/dist/index.js +1 -1
- package/dist/knowledge/account-marks.d.ts +36 -0
- package/dist/knowledge/account-marks.js +1 -0
- package/dist/knowledge/audit-rules.d.ts +3 -1
- package/dist/knowledge/audit-rules.js +1 -1
- package/dist/knowledge/examples-scanner-cli.js +1 -1
- package/dist/knowledge/examples-scanner.js +1 -1
- package/dist/knowledge/fund-layer.d.ts +13 -9
- package/dist/knowledge/fund-layer.js +1 -1
- package/dist/knowledge/goal-completion.d.ts +19 -0
- package/dist/knowledge/goal-completion.js +1 -0
- package/dist/knowledge/guard-bindings.d.ts +21 -0
- package/dist/knowledge/guard-bindings.js +1 -0
- package/dist/knowledge/guard-translation.js +1 -1
- package/dist/knowledge/index.d.ts +6 -3
- 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/operation-dictionary.js +1 -1
- package/dist/knowledge/passport-confirm.js +1 -1
- package/dist/knowledge/passport-puzzle.js +1 -1
- package/dist/knowledge/passport-translation.js +1 -1
- package/dist/knowledge/proof-risk.js +1 -1
- package/dist/knowledge/reward-risk.d.ts +1 -1
- package/dist/knowledge/reward-risk.js +1 -1
- package/dist/knowledge/safety-rules.d.ts +2 -1
- package/dist/knowledge/safety-rules.js +1 -1
- package/dist/knowledge/scenario-topology.d.ts +43 -0
- package/dist/knowledge/scenario-topology.js +1 -0
- package/dist/knowledge/service-translation.js +1 -1
- package/dist/knowledge/supply-chain.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 +36 -0
- package/dist/knowledge/workflow-guidance.js +1 -1
- package/dist/knowledge/workspace-lists.d.ts +57 -0
- package/dist/knowledge/workspace-lists.js +1 -0
- package/dist/loop-engineering/context-collect.d.ts +1 -1
- package/dist/monitor/EventRouter.d.ts +10 -0
- package/dist/monitor/EventRouter.js +1 -0
- package/dist/monitor/EventStore.d.ts +32 -12
- package/dist/monitor/EventStore.js +1 -1
- package/dist/monitor/MonitorLoop.d.ts +81 -0
- package/dist/monitor/MonitorLoop.js +1 -0
- package/dist/monitor/ProblemBridge.d.ts +32 -0
- package/dist/monitor/ProblemBridge.js +1 -0
- package/dist/monitor/ScopeResolver.d.ts +59 -0
- package/dist/monitor/ScopeResolver.js +1 -0
- package/dist/monitor/SubscriptionStore.d.ts +13 -0
- package/dist/monitor/SubscriptionStore.js +1 -0
- package/dist/monitor/SuggestionBridge.d.ts +38 -0
- package/dist/monitor/SuggestionBridge.js +1 -0
- package/dist/monitor/normalize.d.ts +8 -0
- package/dist/monitor/normalize.js +1 -0
- package/dist/monitor/types.d.ts +89 -0
- package/dist/monitor/types.js +1 -0
- package/dist/participation/arbitrator-interest.d.ts +20 -0
- package/dist/participation/arbitrator-interest.js +1 -0
- package/dist/participation/demander-interest.d.ts +23 -0
- package/dist/participation/demander-interest.js +1 -0
- package/dist/persona/address-format.d.ts +1 -1
- package/dist/persona/address-format.js +1 -1
- package/dist/persona/distill-goal.d.ts +20 -0
- package/dist/persona/distill-goal.js +1 -0
- package/dist/persona/index.d.ts +2 -0
- package/dist/persona/index.js +1 -1
- package/dist/persona/model.js +1 -1
- package/dist/playbooks/service-build/business-puzzle.js +1 -0
- package/dist/{project → playbooks/service-build}/context-assembly.d.ts +9 -4
- package/dist/playbooks/service-build/context-assembly.js +1 -0
- package/dist/{project → playbooks/service-build}/game-theory.d.ts +1 -1
- package/dist/playbooks/service-build/index.d.ts +14 -0
- package/dist/playbooks/service-build/index.js +1 -0
- package/dist/{project → playbooks/service-build}/intent-analyzer.d.ts +1 -1
- package/dist/playbooks/service-build/intent-analyzer.js +1 -0
- package/dist/playbooks/service-build/machine-nodes.js +1 -0
- package/dist/{project → playbooks/service-build}/machine-panorama.d.ts +5 -3
- package/dist/playbooks/service-build/machine-panorama.js +1 -0
- package/dist/{project → playbooks/service-build}/merchant-guide.d.ts +21 -1
- package/dist/playbooks/service-build/merchant-guide.js +1 -0
- package/dist/{project → playbooks/service-build}/mode-actions.d.ts +32 -8
- package/dist/playbooks/service-build/mode-actions.js +1 -0
- package/dist/playbooks/service-build/namespace.d.ts +2 -0
- package/dist/playbooks/service-build/namespace.js +1 -0
- package/dist/{project → playbooks/service-build}/object-panorama.d.ts +2 -3
- package/dist/playbooks/service-build/object-panorama.js +1 -0
- package/dist/{project → playbooks/service-build}/participation-radar.d.ts +4 -5
- package/dist/playbooks/service-build/participation-radar.js +1 -0
- package/dist/{project → playbooks/service-build}/pipeline-actions.d.ts +9 -9
- package/dist/playbooks/service-build/pipeline-actions.js +1 -0
- package/dist/playbooks/service-build/process.d.ts +6 -0
- package/dist/playbooks/service-build/process.js +1 -0
- package/dist/playbooks/service-build/relationship-profile.d.ts +2 -0
- package/dist/playbooks/service-build/relationship-profile.js +1 -0
- package/dist/playbooks/service-build/risk-aggregator.js +1 -0
- package/dist/{project → playbooks/service-build}/semantic-graph.d.ts +7 -3
- package/dist/playbooks/service-build/semantic-graph.js +1 -0
- package/dist/{project → playbooks/service-build}/service-panorama.d.ts +3 -19
- package/dist/playbooks/service-build/service-panorama.js +1 -0
- package/dist/relationship/derivation.d.ts +88 -0
- package/dist/relationship/derivation.js +1 -0
- package/dist/relationship/incentive.d.ts +38 -0
- package/dist/relationship/incentive.js +1 -0
- package/dist/relationship/index.d.ts +4 -0
- package/dist/relationship/index.js +1 -0
- package/dist/relationship/registry.d.ts +13 -0
- package/dist/relationship/registry.js +1 -0
- package/dist/relationship/types.d.ts +45 -0
- package/dist/relationship/types.js +1 -0
- package/dist/review/arb.d.ts +6 -0
- package/dist/review/arb.js +1 -0
- package/dist/review/demand.d.ts +3 -0
- package/dist/review/demand.js +1 -0
- package/dist/review/index.d.ts +3 -0
- package/dist/review/index.js +1 -0
- package/dist/review/machine.d.ts +3 -0
- package/dist/review/machine.js +1 -0
- package/dist/review/order.d.ts +9 -0
- package/dist/review/order.js +1 -0
- package/dist/review/progress.d.ts +3 -0
- package/dist/review/progress.js +1 -0
- package/dist/review/repository.d.ts +3 -0
- package/dist/review/repository.js +1 -0
- package/dist/review/service.d.ts +5 -0
- package/dist/review/service.js +1 -0
- package/dist/review/types.d.ts +156 -0
- package/dist/review/types.js +1 -0
- package/dist/rules.d.ts +2 -2
- package/dist/rules.js +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/safety/index.d.ts +1 -1
- package/dist/safety/index.js +1 -1
- package/dist/safety/preview.d.ts +1 -0
- package/dist/safety/preview.js +1 -1
- package/dist/schema/call/allocation.d.ts +1 -1
- package/dist/schema/call/arbitration.d.ts +1 -1
- package/dist/schema/call/base.d.ts +1 -1
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/bridge.d.ts +29 -7
- package/dist/schema/call/bridge.js +1 -1
- package/dist/schema/call/contact.d.ts +1 -1
- package/dist/schema/call/contact.js +1 -1
- package/dist/schema/call/demand.d.ts +1 -1
- package/dist/schema/call/demand.js +1 -1
- package/dist/schema/call/guard.d.ts +3 -3
- package/dist/schema/call/handler.d.ts +0 -3
- package/dist/schema/call/handler.js +1 -1
- package/dist/schema/call/machine.d.ts +2 -2
- package/dist/schema/call/order.d.ts +1 -1
- package/dist/schema/call/payment.d.ts +1 -1
- package/dist/schema/call/permission.d.ts +1 -1
- package/dist/schema/call/personal.d.ts +1 -1
- package/dist/schema/call/progress.d.ts +1 -1
- package/dist/schema/call/proof.d.ts +2 -2
- package/dist/schema/call/repository.d.ts +1 -1
- package/dist/schema/call/repository.js +1 -1
- package/dist/schema/call/reward.d.ts +1 -1
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.d.ts +1 -1
- package/dist/schema/call/service.js +1 -1
- package/dist/schema/call/treasury.d.ts +1 -1
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/goal/index.d.ts +343 -0
- package/dist/schema/goal/index.js +1 -0
- package/dist/schema/goal/planning.d.ts +465 -0
- package/dist/schema/goal/planning.js +1 -0
- package/dist/schema/index.d.ts +1 -2
- package/dist/schema/index.js +1 -1
- package/dist/schema/industry-pack/index.d.ts +323 -1
- package/dist/schema/industry-pack/index.js +1 -1
- package/dist/schema/industry-pack/modes.d.ts +326 -0
- package/dist/schema/industry-pack/modes.js +1 -0
- package/dist/schema/intent-radar/index.d.ts +19 -19
- package/dist/schema/local/index.d.ts +11 -0
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/operations.d.ts +258 -19
- package/dist/schema/operations.js +1 -1
- package/dist/schema/permission/index.d.ts +1 -0
- package/dist/schema/permission/index.js +1 -1
- package/dist/schema/persona/index.d.ts +40 -0
- package/dist/schema/persona/index.js +1 -1
- package/dist/schema/query/bi.d.ts +912 -0
- package/dist/schema/query/bi.js +1 -0
- package/dist/schema/query/index.d.ts +663 -2
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/utils/skills-recommendation.d.ts +0 -1
- package/dist/schema/utils/skills-recommendation.js +1 -1
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/account_operation.output.json +32 -3
- package/dist/schemas/account_operation.schema.json +8 -4
- package/dist/schemas/bridge_operation.output.json +26 -3
- package/dist/schemas/bridge_operation.schema.json +85 -13
- package/dist/schemas/config_operation.output.json +1 -1
- package/dist/schemas/config_operation.schema.json +1 -1
- package/dist/schemas/goal_operation.schema.json +1092 -0
- package/dist/schemas/guard2file.schema.json +3 -3
- package/dist/schemas/index.json +12 -13
- package/dist/schemas/industry_pack_operation.output.json +1073 -0
- package/dist/schemas/industry_pack_operation.schema.json +236 -2
- package/dist/schemas/local_info_operation.output.json +2 -2
- package/dist/schemas/local_mark_operation.output.json +2 -2
- package/dist/schemas/machineNode2file.schema.json +3 -3
- package/dist/schemas/messenger_operation.output.json +2 -2
- package/dist/schemas/monitor_events.output.json +78 -3
- package/dist/schemas/monitor_events.schema.json +24 -1
- package/dist/schemas/monitor_subscription.output.json +1462 -0
- package/dist/schemas/monitor_subscription.schema.json +327 -0
- package/dist/schemas/onchain_events.output.json +5 -5
- package/dist/schemas/onchain_operations.output.json +2 -2
- package/dist/schemas/onchain_operations.schema.json +100 -100
- package/dist/schemas/onchain_operations_allocation.schema.json +7 -7
- package/dist/schemas/onchain_operations_arbitration.schema.json +6 -6
- package/dist/schemas/onchain_operations_contact.schema.json +6 -6
- package/dist/schemas/onchain_operations_demand.schema.json +6 -6
- package/dist/schemas/onchain_operations_gen_passport.schema.json +3 -3
- package/dist/schemas/onchain_operations_gen_proof.schema.json +3 -3
- package/dist/schemas/onchain_operations_guard.schema.json +3 -3
- package/dist/schemas/onchain_operations_machine.schema.json +5 -5
- package/dist/schemas/onchain_operations_order.schema.json +5 -5
- package/dist/schemas/onchain_operations_payment.schema.json +4 -4
- package/dist/schemas/onchain_operations_permission.schema.json +5 -5
- package/dist/schemas/onchain_operations_personal.schema.json +3 -3
- package/dist/schemas/onchain_operations_progress.schema.json +5 -5
- package/dist/schemas/onchain_operations_proof.schema.json +3 -3
- package/dist/schemas/onchain_operations_repository.schema.json +7 -7
- package/dist/schemas/onchain_operations_reward.schema.json +9 -9
- package/dist/schemas/onchain_operations_service.schema.json +11 -11
- package/dist/schemas/onchain_operations_treasury.schema.json +9 -9
- package/dist/schemas/onchain_table_data.output.json +399 -2
- package/dist/schemas/onchain_table_data.schema.json +22 -22
- package/dist/schemas/permission_operation.schema.json +6 -2
- package/dist/schemas/persona_operation.output.json +145 -0
- package/dist/schemas/persona_operation.schema.json +28 -2
- package/dist/schemas/query_toolkit.output.json +1514 -22
- package/dist/schemas/query_toolkit.schema.json +465 -11
- package/dist/schemas/workflow_operation.schema.json +4 -4
- package/dist/task/ProcessStore.d.ts +98 -0
- package/dist/task/ProcessStore.js +1 -0
- package/dist/task/playbook.d.ts +11 -0
- package/dist/task/playbook.js +1 -0
- package/dist/task/stage-gate.d.ts +22 -0
- package/dist/task/stage-gate.js +1 -0
- package/dist/{project → task}/substep-trace.d.ts +6 -45
- package/dist/task/types.d.ts +144 -0
- package/dist/task/types.js +1 -0
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/evaluation.js +1 -1
- package/dist/tools/handlers/goal.d.ts +4 -0
- package/dist/tools/handlers/goal.js +1 -0
- package/dist/tools/handlers/industry-pack.js +1 -1
- package/dist/tools/handlers/local.d.ts +4 -3
- package/dist/tools/handlers/local.js +1 -1
- package/dist/tools/handlers/monitor.d.ts +24 -0
- package/dist/tools/handlers/monitor.js +1 -1
- package/dist/tools/handlers/network.d.ts +1 -0
- package/dist/tools/handlers/network.js +1 -0
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/permission.js +1 -1
- package/dist/tools/handlers/persona.js +1 -1
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/watch.js +1 -1
- package/dist/tools/handlers/workflow.js +1 -1
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.js +1 -1
- package/dist/tools/rules-hook.d.ts +1 -0
- package/dist/tools/rules-hook.js +1 -1
- package/dist/tools/shared.js +1 -1
- package/dist/tools/wrap.js +1 -1
- package/package.json +5 -4
- package/dist/harness/checkpoint.d.ts +0 -8
- package/dist/harness/checkpoint.js +0 -1
- package/dist/knowledge/deployment-scanner.d.ts +0 -66
- package/dist/knowledge/deployment-scanner.js +0 -1
- package/dist/mode-market/index.d.ts +0 -3
- package/dist/mode-market/index.js +0 -1
- package/dist/mode-market/registry.d.ts +0 -53
- package/dist/mode-market/registry.js +0 -1
- package/dist/mode-market/review.d.ts +0 -27
- package/dist/mode-market/review.js +0 -1
- package/dist/mode-market/submission.d.ts +0 -25
- package/dist/mode-market/submission.js +0 -1
- package/dist/project/business-puzzle.js +0 -1
- package/dist/project/context-assembly.js +0 -1
- package/dist/project/deployment-bridge.d.ts +0 -5
- package/dist/project/deployment-bridge.js +0 -1
- package/dist/project/deployment-doc.d.ts +0 -190
- package/dist/project/deployment-doc.js +0 -1
- package/dist/project/edit-planner.d.ts +0 -123
- package/dist/project/edit-planner.js +0 -1
- package/dist/project/evaluation-fix.spec.d.ts +0 -1
- package/dist/project/evaluation-fix.spec.js +0 -1
- package/dist/project/evaluation.d.ts +0 -127
- package/dist/project/evaluation.js +0 -1
- package/dist/project/graph-builder.d.ts +0 -51
- package/dist/project/graph-builder.js +0 -1
- package/dist/project/graph.d.ts +0 -70
- package/dist/project/graph.js +0 -1
- package/dist/project/handlers.d.ts +0 -524
- package/dist/project/handlers.js +0 -1
- package/dist/project/index.d.ts +0 -91
- package/dist/project/index.js +0 -1
- package/dist/project/intent-analyzer.js +0 -1
- package/dist/project/machine-nodes.js +0 -1
- package/dist/project/machine-panorama.js +0 -1
- package/dist/project/merchant-guide.js +0 -1
- package/dist/project/mode-actions.js +0 -1
- package/dist/project/namespace.d.ts +0 -72
- package/dist/project/namespace.js +0 -1
- package/dist/project/object-panorama.js +0 -1
- package/dist/project/participation-radar.js +0 -1
- package/dist/project/pipeline-actions.js +0 -1
- package/dist/project/project-store.d.ts +0 -110
- package/dist/project/project-store.js +0 -1
- package/dist/project/query.d.ts +0 -43
- package/dist/project/query.js +0 -1
- package/dist/project/risk-aggregator.js +0 -1
- package/dist/project/semantic-assembler.d.ts +0 -93
- package/dist/project/semantic-assembler.js +0 -1
- package/dist/project/semantic-graph.js +0 -1
- package/dist/project/service-panorama.js +0 -1
- package/dist/project/stage-gate.d.ts +0 -52
- package/dist/project/stage-gate.js +0 -1
- package/dist/project/task-tracker.d.ts +0 -30
- package/dist/project/task-tracker.js +0 -1
- package/dist/schema/project/index.d.ts +0 -2021
- package/dist/schema/project/index.js +0 -1
- package/dist/schema/task-status.d.ts +0 -62
- package/dist/schema/task-status.js +0 -1
- package/dist/schemas/project_operation.output.json +0 -7877
- package/dist/schemas/project_operation.schema.json +0 -1139
- package/dist/schemas/query_task_status.output.json +0 -211
- package/dist/schemas/query_task_status.schema.json +0 -18
- package/dist/tools/handlers/project.d.ts +0 -2
- package/dist/tools/handlers/project.js +0 -1
- package/dist/tools/handlers/task-status.d.ts +0 -2
- package/dist/tools/handlers/task-status.js +0 -1
- /package/dist/{project → playbooks/service-build}/business-puzzle.d.ts +0 -0
- /package/dist/{project → playbooks/service-build}/game-theory.js +0 -0
- /package/dist/{project → playbooks/service-build}/machine-nodes.d.ts +0 -0
- /package/dist/{project → playbooks/service-build}/object-type.d.ts +0 -0
- /package/dist/{project → playbooks/service-build}/object-type.js +0 -0
- /package/dist/{project → playbooks/service-build}/reverse-mapping.d.ts +0 -0
- /package/dist/{project → playbooks/service-build}/reverse-mapping.js +0 -0
- /package/dist/{project → playbooks/service-build}/risk-aggregator.d.ts +0 -0
- /package/dist/{project → playbooks/service-build}/workflow-design-assessment.d.ts +0 -0
- /package/dist/{project → playbooks/service-build}/workflow-design-assessment.js +0 -0
- /package/dist/{project → task}/substep-trace.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function buildSemanticGraph(a,b,c,d){const e=[],f=[],h=[],j=c?.['machine_shape']??[],k=c?.['allocator'],l=!!k&&!d?.['paymentExplicit']&&(k['count']>0x1||k['recipient']!=='signer');e['push']({'id':'main_permission','type':'permission','purpose':'Role-based\x20access\x20control\x20for\x20merchant,\x20customer,\x20and\x20optional\x20arbitrator','derivedFrom':{'intentField':'roles','rationale':'All\x20WOW\x20services\x20require\x20a\x20Permission\x20object\x20for\x20role\x20management'},'config':{'name':{'type':'string','value':a['description']['slice'](0x0,0x14)+'_permission','mapsTo':'object.name'}},'expectedState':{'published':!![],'paused':![]}});(a['intent']['startsWith']('sell_')||a['intent']==='rent_asset')&&(e['push']({'id':'main_service','type':'service','purpose':'Main\x20service\x20offering:\x20'+a['description'],'derivedFrom':{'intentField':'description','rationale':'Service\x20is\x20the\x20primary\x20object\x20representing\x20the\x20merchant\x20offering'},'config':{'name':{'type':'string','value':a['description']['slice'](0x0,0x14)+'_service','mapsTo':'object.name'},'type_parameter':{'type':'string','value':a['payment']['currency'],'mapsTo':'object.type_parameter'},'permission':{'type':'address_ref','targetId':'main_permission','mapsTo':'object.permission'}},'expectedState':{'published':!![],'paused':![]}}),f['push']({'from':'main_service','to':'main_permission','relation':'has_permission','required':!![],'derivedFrom':{'intentField':'roles','rationale':'Service\x20must\x20reference\x20its\x20Permission\x20object'}}));(a['payment']['model']==='milestone'||a['deliverables']['length']>0x1||j['length']>0x0)&&(e['push']({'id':'main_machine','type':'machine','purpose':'Workflow\x20controlling\x20deliverable\x20milestones\x20and\x20acceptance','derivedFrom':j['length']>0x0?{'intentField':'industry','rationale':'Mode\x20\x27'+c['name']+'\x27\x20machine_shape\x20prior:\x20'+j['length']+'\x20nodes'}:{'intentField':'deliverables','rationale':'Multiple\x20deliverables\x20or\x20milestone\x20payment\x20requires\x20Machine\x20workflow'},'config':{'name':{'type':'string','value':a['description']['slice'](0x0,0x14)+'_machine','mapsTo':'object.name'},'permission':{'type':'address_ref','targetId':'main_permission','mapsTo':'object.permission'},...j['length']>0x0?{'nodes':{'type':'string','value':j['map'](s=>s['name'])['join']('\x20→\x20'),'mapsTo':'machine.nodes'}}:{}},'expectedState':{'published':!![],'paused':![]}}),e['find'](s=>s['id']==='main_service')&&f['push']({'from':'main_service','to':'main_machine','relation':'uses_machine','required':!![],'derivedFrom':{'intentField':'deliverables','rationale':'Service\x20binds\x20to\x20Machine\x20for\x20workflow\x20execution'}}));(a['payment']['model']==='milestone'||a['payment']['model']==='escrow'||a['trust']['escrow']||l)&&(e['push']({'id':'main_allocation','type':'allocation','purpose':'Fund\x20distribution\x20among\x20merchant\x20and\x20optional\x20suppliers','derivedFrom':l&&a['payment']['model']!=='milestone'&&a['payment']['model']!=='escrow'&&!a['trust']['escrow']?{'intentField':'industry','rationale':'Mode\x20\x27'+c['name']+'\x27\x20allocator\x20prior:\x20'+k['description']}:{'intentField':'payment.allocation','rationale':'Escrow/milestone\x20requires\x20Allocation\x20for\x20fund\x20routing'},'config':{'name':{'type':'string','value':a['description']['slice'](0x0,0x14)+'_allocation','mapsTo':'object.name'},'type_parameter':{'type':'string','value':a['payment']['currency'],'mapsTo':'object.type_parameter'},'permission':{'type':'address_ref','targetId':'main_permission','mapsTo':'object.permission'},...k?{'allocator_strategy':{'type':'string','value':k['description'],'mapsTo':'allocation.strategy'},'allocator_mode':{'type':'enum','value':k['mode'],'allowed':['amount','rate','surplus'],'mapsTo':'allocation.mode'},'allocator_recipient_count':{'type':'number','value':k['count'],'mapsTo':'allocation.recipients'}}:{}},'expectedState':{'published':!![],'paused':![]}}),e['find'](s=>s['id']==='main_service')&&f['push']({'from':'main_service','to':'main_allocation','relation':'has_order_allocators','required':!![],'derivedFrom':{'intentField':'payment','rationale':'Service\x20must\x20bind\x20Allocation\x20for\x20order\x20fund\x20routing'}}));a['trust']['arbitration']!=='none'&&(e['push']({'id':'main_arbitration','type':'arb','purpose':'Independent\x20dispute\x20resolution','derivedFrom':{'intentField':'trust.arbitration','rationale':'Arbitration\x20object\x20provides\x20binding\x20dispute\x20resolution'},'config':{'name':{'type':'string','value':a['description']['slice'](0x0,0x14)+'_arbitration','mapsTo':'object.name'},'type_parameter':{'type':'string','value':a['payment']['currency'],'mapsTo':'object.type_parameter'}},'expectedState':{'published':!![],'paused':![]}}),e['push']({'id':'arb_permission','type':'permission','purpose':'Independent\x20permission\x20for\x20arbitration\x20(MUST\x20differ\x20from\x20Service.permission)','derivedFrom':{'intentField':'trust.arbitration','rationale':'Contract-enforced:\x20arbitration.permission\x20!=\x20service.permission\x20(E_ARBITRATION_PERMISSION_CONFLICT=33)'},'config':{'name':{'type':'string','value':a['description']['slice'](0x0,0x14)+'_arb_permission','mapsTo':'object.name'}},'expectedState':{'published':!![],'paused':![]}}),f['push']({'from':'main_arbitration','to':'arb_permission','relation':'has_permission','required':!![],'derivedFrom':{'intentField':'trust.arbitration','rationale':'Arbitration\x20requires\x20its\x20own\x20Permission'}}),e['find'](s=>s['id']==='main_service')&&f['push']({'from':'main_service','to':'main_arbitration','relation':'has_arbitration','required':![],'derivedFrom':{'intentField':'trust.arbitration','rationale':'Service\x20references\x20Arbitration\x20in\x20arbitrations\x20list'}}));const m=b['some'](s=>s['id']==='wip_provenance'||s['id']==='subscription_with_proof'||s['id']==='damage_attestation');m&&e['push']({'id':'main_repository','type':'repository','purpose':'Store\x20WIP\x20hashes\x20and\x20delivery\x20evidence','derivedFrom':{'intentField':'deliverables','rationale':'WIP\x20provenance\x20requires\x20Repository\x20for\x20hash\x20commitments'},'config':{'name':{'type':'string','value':a['description']['slice'](0x0,0x14)+'_repository','mapsTo':'object.name'},'permission':{'type':'address_ref','targetId':'main_permission','mapsTo':'object.permission'}},'expectedState':{'published':!![],'paused':![]}});for(const s of b){for(const t of s['templateRefs']){if(t['object_type']==='guard')e['push']({'id':'guard_'+s['id'],'type':'guard','purpose':t['purpose'],'derivedFrom':{'intentField':'trust','rationale':'Guard\x20for\x20'+s['name']+'\x20module'},'config':{'name':{'type':'string','value':a['description']['slice'](0x0,0x14)+'_'+s['id']+'_guard','mapsTo':'object.name'}},'expectedState':{'published':!![],'paused':![]}});else{if(t['template_id']['startsWith']('supplier-')){const u='supplier_'+s['id']+'_'+t['object_type'];if(e['some'](w=>w['id']===u))continue;e['push']({'id':u,'type':t['object_type'],'purpose':t['purpose'],'derivedFrom':{'intentField':'roles.suppliers','rationale':'Supplier\x20'+t['object_type']+'\x20for\x20'+s['name']+'\x20(B-6\x20two-hop\x20waterfall)'},'config':{'name':{'type':'string','value':a['description']['slice'](0x0,0x14)+'_'+s['id']+'_'+t['object_type'],'mapsTo':'object.name'}},'expectedState':{'published':!![],'paused':![]}});const v=e['find'](w=>w['id']==='main_service');v&&f['push']({'from':'main_service','to':u,'relation':'sub_order','required':![],'derivedFrom':{'intentField':'payment.allocation','rationale':'Two-hop\x20waterfall:\x20main\x20order\x20→\x20tier-1\x20allocation\x20→\x20supplier\x20sub-order\x20→\x20tier-2\x20allocation\x20('+s['name']+')'}});}}}}if(a['intent']['startsWith']('sell_')||a['intent']==='rent_asset'){e['push']({'id':'main_contact','type':'contact','purpose':'Public\x20contact/IM\x20channel\x20so\x20customers\x20can\x20reach\x20the\x20merchant\x20before\x20ordering','derivedFrom':{'intentField':'description','rationale':'A\x20discoverable\x20contact\x20object\x20improves\x20customer\x20trust\x20and\x20order\x20conversion'},'config':{'name':{'type':'string','value':a['description']['slice'](0x0,0x14)+'_contact','mapsTo':'object.name'},'description':{'type':'string','value':a['description'],'mapsTo':'object.description'}},'expectedState':{'published':!![],'paused':![]}});const w=e['find'](x=>x['id']==='main_service');w&&(w['config']['um']={'type':'address_ref','targetId':'main_contact','mapsTo':'object.um'},f['push']({'from':'main_service','to':'main_contact','relation':'has_contact','required':![],'derivedFrom':{'intentField':'description','rationale':'Service\x20binds\x20Contact\x20via\x20um\x20so\x20customers\x20can\x20reach\x20the\x20merchant'}}));}(a['intent']['startsWith']('sell_')||a['intent']==='rent_asset')&&(e['push']({'id':'main_reward','type':'reward','purpose':'Optional\x20incentive\x20pool\x20(discount/referral)\x20to\x20attract\x20and\x20retain\x20customers','derivedFrom':{'intentField':'payment','rationale':'Rewards\x20lower\x20acquisition\x20cost\x20and\x20boost\x20conversion'},'config':{'name':{'type':'string','value':a['description']['slice'](0x0,0x14)+'_reward','mapsTo':'object.name'},'type_parameter':{'type':'string','value':a['payment']['currency'],'mapsTo':'object.type_parameter'},'permission':{'type':'address_ref','targetId':'main_permission','mapsTo':'object.permission'}},'expectedState':{'published':!![],'paused':![]}}),e['find'](x=>x['id']==='main_service')&&f['push']({'from':'main_service','to':'main_reward','relation':'has_rewards','required':![],'derivedFrom':{'intentField':'payment','rationale':'Service\x20can\x20reference\x20Reward\x20in\x20its\x20rewards\x20list'}}));if(c?.['guards']?.['length']){const x=y=>{switch(y){case'service':return e['find'](z=>z['id']==='main_service')?.['id'];case'machine':return e['find'](z=>z['id']==='main_machine')?.['id'];case'reward':return e['find'](z=>z['id']==='main_reward')?.['id'];case'repository':return e['find'](z=>z['id']==='main_repository')?.['id'];case'arbitration':return e['find'](z=>z['id']==='main_arbitration')?.['id'];default:return undefined;}};for(const y of c['guards']){const z='guard_'+y['template_id'];if(e['some'](B=>B['id']===z))continue;const A=x(y['host']);if(!A)continue;e['push']({'id':z,'type':'guard','purpose':y['purpose'],'derivedFrom':{'intentField':'industry','rationale':'Mode\x20\x27'+c['name']+'\x27\x20guard\x20prior\x20('+y['host']+'\x20host)'},'config':{'name':{'type':'string','value':a['description']['slice'](0x0,0x14)+'_'+y['template_id'],'mapsTo':'object.name'},'template':{'type':'string','value':y['template_id'],'mapsTo':'guard.template'}},'expectedState':{'published':!![],'paused':![]}}),f['push']({'from':A,'to':z,'relation':'has_guard','required':![],'derivedFrom':{'intentField':'industry','rationale':'Mode\x20\x27'+c['name']+'\x27\x20attaches\x20'+y['template_id']+'\x20to\x20'+y['host']}});}}if(c?.['config_overrides'])for(const [B,C]of Object['entries'](c['config_overrides'])){for(const D of e){if(D['type']!==B)continue;for(const [E,F]of Object['entries'](C)){if(D['config'][E]!==undefined)continue;if(typeof F==='string')D['config'][E]={'type':'string','value':F,'mapsTo':'object.'+E};else{if(typeof F==='number')D['config'][E]={'type':'number','value':F,'mapsTo':'object.'+E};else typeof F==='boolean'&&(D['config'][E]={'type':'boolean','value':F,'mapsTo':'object.'+E});}}}}h['push']({'id':'service_permission_bound','level':'hard','description':'Service\x20must\x20be\x20bound\x20to\x20a\x20Permission\x20object','source':{'layer':'contract','reference':'service.move:\x20permission\x20field\x20is\x20required'},'fixSuggestion':'Create\x20Permission\x20object\x20first,\x20then\x20reference\x20it\x20in\x20Service.object.permission'});a['trust']['arbitration']!=='none'&&h['push']({'id':'arbitration_permission_independent','level':'hard','description':'Arbitration.permission\x20MUST\x20be\x20different\x20from\x20Service.permission','source':{'layer':'contract','reference':'service.move:433-436\x20E_ARBITRATION_PERMISSION_CONFLICT=33'},'fixSuggestion':'Create\x20a\x20dedicated\x20Permission\x20object\x20for\x20Arbitration,\x20do\x20NOT\x20reuse\x20Service.permission'});a['payment']['model']==='milestone'&&h['push']({'id':'machine_bound_before_publish','level':'hard','description':'Machine\x20must\x20be\x20published\x20and\x20bound\x20to\x20Service\x20before\x20Service.publish','source':{'layer':'contract','reference':'service.move:\x20machine\x20is\x20IMMUTABLE\x20after\x20publish'},'fixSuggestion':'Create\x20and\x20publish\x20Machine\x20before\x20calling\x20Service.publish.\x20Machine\x20cannot\x20be\x20changed\x20after\x20Service\x20is\x20published.'});if(c){h['push']({'id':'mode_key_risk','level':'info','description':'['+c['display_name']+']\x20key\x20risk:\x20'+c['key_risk'],'source':{'layer':'industry_mode','reference':c['name']},'fixSuggestion':c['build_notes']?.[0x0]??'Adopt\x20the\x20mode\x27s\x20guard/allocator\x20priors\x20when\x20materializing\x20objects'});for(let G=0x0;G<(c['build_notes']??[])['length'];G++){h['push']({'id':'mode_build_note_'+G,'level':'info','description':'['+c['display_name']+']\x20'+c['build_notes'][G],'source':{'layer':'industry_mode','reference':c['name']},'fixSuggestion':'Apply\x20this\x20note\x20during\x20object\x20materialization'});}c['risk_constraints']['require_arbitration']&&a['trust']['arbitration']==='none'&&h['push']({'id':'mode_requires_arbitration','level':'soft','description':'Mode\x20\x27'+c['display_name']+'\x27\x20requires\x20arbitration,\x20but\x20intent\x20trust.arbitration\x20is\x20\x27none\x27','source':{'layer':'industry_mode','reference':c['name']+'.risk_constraints.require_arbitration'},'fixSuggestion':'Set\x20guide_confirm.trust.arbitration\x20to\x20a\x20dispute\x20resolution\x20mode,\x20or\x20the\x20plan\x20ships\x20without\x20the\x20mode\x27s\x20safety\x20net'});}const n=calculateModuleScoreBoost(b),o=Math['min'](0x64,0x28+Object['values'](n)['reduce']((H,I)=>H+I,0x0)/0x2),p=Math['min'](0x64,0x32+(n['trust']??0x0)+(n['fund_safety']??0x0)),q=Math['min'](0x64,0x1e+b['length']*0x8),r={'estimatedRiskScore':o,'estimatedTrustScore':p,'estimatedCompletenessScore':q,'keyRisks':[...c?['['+c['display_name']+']\x20'+c['key_risk']]:[],...a['trust']['arbitration']==='none'?['No\x20arbitration\x20configured\x20—\x20disputes\x20have\x20no\x20resolution\x20path']:[],...a['payment']['model']==='upfront'&&a['trust']['refundPolicy']==='no_refund'?['Full\x20upfront\x20+\x20no\x20refund\x20=\x20high\x20user\x20risk']:[]],'strengths':[...b['map'](H=>H['name']+':\x20'+H['description']['slice'](0x0,0x3c)+'...'),...(c?.['expected_benefits']??[])['map'](H=>H['metric']+':\x20'+H['expected_value']+'\x20('+H['evidence']+')')],'moduleBoosts':n};return{'nodes':e,'edges':f,'constraints':h,'evaluationPreview':r,'adoptedModules':b['map'](H=>H['id']),'businessIntent':a};}function calculateModuleScoreBoost(a){const b={};for(const c of a){for(const d of c['evaluationImpact']){const e=d['effect']==='required'?0xf:d['effect']==='boost'?0x8:0x3;b[d['dimension']]=(b[d['dimension']]??0x0)+e;}}return b;}export function validateGraph(a){const b=[],c=[],d=[];for(const e of a['constraints']){if(e['id']==='service_permission_bound'){const f=a['nodes']['some'](h=>h['type']==='service'),g=a['edges']['some'](h=>h['relation']==='has_permission'&&h['from']['startsWith']('main_service'));f&&!g&&b['push'](e);}if(e['id']==='arbitration_permission_independent'){const h=a['nodes']['find'](j=>j['id']==='main_service'),i=a['nodes']['find'](j=>j['id']==='main_arbitration');if(h&&i){const j=a['edges']['find'](l=>l['from']==='main_service'&&l['relation']==='has_permission')?.['to'],k=a['edges']['find'](l=>l['from']==='main_arbitration'&&l['relation']==='has_permission')?.['to'];j&&k&&j===k&&b['push'](e);}}if(e['level']==='soft')c['push'](e);else e['level']==='info'&&d['push'](e);}return{'valid':b['length']===0x0,'hardViolations':b,'softViolations':c,'infoNotes':d};}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { type Evaluation } from "@wowok/wowok";
|
|
3
|
-
import type { ProjectOperationInputSchema } from "../schema/project/index.js";
|
|
1
|
+
import type { ServicePanoramaInput } from "../../schema/query/bi.js";
|
|
4
2
|
import { type BusinessReport } from "./reverse-mapping.js";
|
|
5
|
-
import { type SupplyChainGraph } from "
|
|
6
|
-
type ProjectInput =
|
|
3
|
+
import { type SupplyChainGraph } from "../../knowledge/supply-chain.js";
|
|
4
|
+
type ProjectInput = ServicePanoramaInput;
|
|
7
5
|
export interface PanoramaSale {
|
|
8
6
|
name: string;
|
|
9
7
|
price: string | null;
|
|
@@ -101,19 +99,6 @@ export interface PanoramaRecentOrders {
|
|
|
101
99
|
}[];
|
|
102
100
|
}[];
|
|
103
101
|
}
|
|
104
|
-
export interface PanoramaLinkedProject {
|
|
105
|
-
id: string;
|
|
106
|
-
prefix: string;
|
|
107
|
-
name: string;
|
|
108
|
-
status: string;
|
|
109
|
-
perspective: string;
|
|
110
|
-
network: string;
|
|
111
|
-
currentVersion: string | null;
|
|
112
|
-
objectCount: number;
|
|
113
|
-
versionCount: number;
|
|
114
|
-
evaluationCount: number;
|
|
115
|
-
evaluations: Evaluation[];
|
|
116
|
-
}
|
|
117
102
|
export interface ServicePanoramaResult {
|
|
118
103
|
action: "service_panorama";
|
|
119
104
|
network: string;
|
|
@@ -173,7 +158,6 @@ export interface ServicePanoramaResult {
|
|
|
173
158
|
trust: PanoramaTrust | null;
|
|
174
159
|
business_report: BusinessReport | null;
|
|
175
160
|
recent_orders: PanoramaRecentOrders | null;
|
|
176
|
-
linked_project: PanoramaLinkedProject | null;
|
|
177
161
|
data_gaps: string[];
|
|
178
162
|
}
|
|
179
163
|
export declare function handleServicePanorama(v: ProjectInput): Promise<ServicePanoramaResult>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Config,LocalMark,query_serviceContext,query_object_last_updated,query_affiliations,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{generateBusinessReport}from'./reverse-mapping.js';import{resolveSupplyChainGraph}from'../../knowledge/supply-chain.js';import{batchQueryObjectsByIds,fetchServiceOrders}from'../../knowledge/workflow-guidance.js';import{formatChainValue}from'../../knowledge/fund-layer.js';import{buildMachineGraph}from'./machine-nodes.js';import{computeServiceTrustSummary}from'../../tools/handlers/trust.js';function balanceStr(a){if(a===null||a===undefined)return null;if(typeof a==='bigint')return a['toString']();return String(a);}function ownerAddr(a){if(typeof a==='string')return a;const b=a;if(b&&typeof b==='object'){if(typeof b['AddressOwner']==='string')return b['AddressOwner'];if(typeof b['ObjectOwner']==='string')return b['ObjectOwner'];}return null;}function requireField(a,b){if(a===undefined||a===null)throw new Error('\x27'+b+'\x27\x20is\x20required\x20for\x20this\x20action');return a;}function summarizeGuard(a){if(!a)return null;const b=a,c=Array['isArray'](b['table'])?b['table']:[],d=c['filter'](e=>e?.['b_submission']===!![])['length'];return{'address':b['object']??'','description':b['description']??null,'rep':typeof b['rep']==='boolean'?b['rep']:null,'table_entry_count':c['length'],'submission_slot_count':d,'relies':Array['isArray'](b['relies'])?b['relies']['filter'](e=>typeof e==='string'):[],'relies_logic_and':typeof b['relies_logic_and']==='boolean'?b['relies_logic_and']:null};}function summarizePermission(a,b){if(!a)return null;const c=a,d=Array['isArray'](c['admin'])?c['admin']:[],e=d[0x0],f=typeof e==='string'?e:typeof e?.['account']==='string'?e['account']:c['builder']??null;return{'address':c['object']??'','description':c['description']??null,'builder':c['builder']??null,'owner':f,'owner_name':b?.['name']??null,'admin_count':d['length'],'entity_count':typeof c['entity_count']==='number'?c['entity_count']:null,'perm_remark':Array['isArray'](c['perm_remark'])?c['perm_remark']['map'](g=>({'index':String(g?.['index']??''),'remark':typeof g?.['remark']==='string'?g['remark']:''})):[],'um':c['um']??null,'tags':b?.['tags']??[],'updated_timestamp_ms':b?.['updated_at_ms']!=null?String(b['updated_at_ms']):null};}async function markOf(a){if(!a)return{'name':null,'tags':[],'updated_at_ms':null};try{const b=await LocalMark['Instance']()['get'](a);if(b)return{'name':b['name']??null,'tags':Array['isArray'](b['tags'])?b['tags']:[],'updated_at_ms':typeof b['updatedAt']==='number'?b['updatedAt']:null};}catch{}try{const c=await LocalMark['Instance']()['list']({'address':a}),d=c?.[0x0];if(d)return{'name':d['name']??null,'tags':Array['isArray'](d['tags'])?d['tags']:[],'updated_at_ms':typeof d['updatedAt']==='number'?d['updatedAt']:null};}catch{}return{'name':null,'tags':[],'updated_at_ms':null};}async function markOfMany(a){const b=[...new Set(a['filter'](e=>!!e))],c=await Promise['all'](b['map'](e=>markOf(e))),d=new Map();for(let e=0x0;e<b['length'];e++)d['set'](b[e],c[e]);return d;}export async function handleServicePanorama(b){const c=requireField(b['service_address'],'service_address'),d=b['context_network']??undefined;let f=d??await Config['Instance']()['network_get']();const h=[];let j=c;if(!/^0x[0-9a-fA-F]{32,64}$/['test'](c)){const R=await LocalMark['Instance']()['get_address'](c);if(!R)throw new Error('Cannot\x20resolve\x20service\x20\x27'+c+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.\x20'+'Pass\x20the\x200x\x20Service\x20object\x20address\x20directly\x20or\x20register\x20the\x20name\x20via\x20local_mark_operation.');j=R;}let k=await query_serviceContext({'service':j,'include_machine_nodes':!![],'network':f});if(!k?.['service']&&d){const S=await Config['Instance']()['network_get']();S&&S!==f&&(f=S,k=await query_serviceContext({'service':j,'include_machine_nodes':!![],'network':f}));}const l=k['service'];j=l['object']??j;const m=new Set(),n=T=>{if(T)m['add'](T);};n(j),n(l['machine']),n(l['permission']),n(l['um']);for(const T of l['arbitrations']??[])n(T);for(const U of l['rewards']??[])n(U);for(const V of l['repositories']??[])n(V);const p=k['permission'];if(p){const W=Array['isArray'](p['admin'])?p['admin']:[];W[0x0]&&n(typeof W[0x0]==='string'?W[0x0]:W[0x0]?.['account']);if(p['builder'])n(p['builder']);}const q=await markOfMany([...m]),u=q['get'](j)??{'name':null,'tags':[],'updated_at_ms':null},w=u['name'],x=X=>X?q['get'](X)??{'name':null,'tags':[],'updated_at_ms':null}:{'name':null,'tags':[],'updated_at_ms':null};let y=null;const z=k['machine'],A=k['machine_nodes']??[];if(z||A['length']>0x0){const {nodes:X,edges:Y}=buildMachineGraph(A);y={'address':z?.['object']??l['machine']??'','name':x(z?.['object']??l['machine'])['name'],'description':z?.['description']??null,'published':typeof z?.['bPublished']==='boolean'?z['bPublished']:null,'paused':typeof z?.['bPaused']==='boolean'?z['bPaused']:null,'node_count':typeof z?.['node_count']==='number'?z['node_count']:null,'consensus_repositories':Array['isArray'](z?.['consensus_repositories'])?z['consensus_repositories']:[],'nodes':X,'edges':Y};}let B=null;try{const Z=await query_object_last_updated({'object':j,'network':f});Z?.['timestamp_ms']&&(B={'timestamp_ms':Z['timestamp_ms'],'digest':Z['digest']??null,'sender':Z['sender']??null});}catch{h['push']('onchain_last_updated:\x20query\x20failed\x20(non-blocking)');}let C=null;try{C=await computeServiceTrustSummary({'service':j,'depth':'evaluate','network':f});}catch{h['push']('trust:\x20evaluation\x20failed\x20(non-blocking)');}let D=null;try{D=await resolveSupplyChainGraph(j,f);}catch{h['push']('supply_chain:\x20resolution\x20failed\x20(non-blocking)');}let E=null;try{const a0=[l];for(const a1 of Object['values'](k['referenced']??{})){if(a1&&a1['object']!==j)a0['push'](a1);}E=generateBusinessReport({'objects':a0,'machine_nodes':A['map'](a2=>({'name':a2['name']}))});}catch{h['push']('business_report:\x20generation\x20failed\x20(non-blocking)');}const F=l?.['type_raw']??l?.['type']??'',G=F['match'](/<(.+)>$/),H=G?G[0x1]:null,I=async a2=>{if(a2===null||a2===undefined||a2==='')return{'display':'','tip':''};if(!H)return{'display':a2,'tip':''};try{const a3=await formatChainValue(a2,H,f);if(a3['precision_known'])return{'display':a3['symbol']?a3['display']+'\x20'+a3['symbol']:a3['display'],'tip':a3['text']};return{'display':a2,'tip':''};}catch{return{'display':a2,'tip':''};}};let J=null;try{const a2=await fetchServiceOrders(j,f,!![]),a3=Array['isArray'](a2?.['items'])?a2['items']:[],a4=a3['map'](ab=>typeof ab?.['who']==='string'?ab['who']:'')['filter'](ab=>ab!==''),a5=new Map();try{if(a4['length']>0x0){const ab=await batchQueryObjectsByIds(a4,f,!![]);for(const ac of ab){ac&&ac['type']===ObjectType['Order']&&a5['set'](ac['object'],ac);}}}catch{h['push']('recent_orders:\x20order\x20details\x20unavailable\x20(non-blocking)');}const a6=new Map(),a7=new Map(),a8=new Map();try{const ad=new Set();for(const ae of a5['values']()){if(ae?.['progress'])ad['add'](ae['progress']);if(ae?.['allocation'])ad['add'](ae['allocation']);}if(ad['size']>0x0){const af=await batchQueryObjectsByIds(Array['from'](ad),f,!![]);for(const ag of af){if(!ag?.['object'])continue;if(ag['type']===ObjectType['Progress']){const ah=ag?.['current'];a6['set'](ag['object'],typeof ah==='string'&&ah!==''?ah:null),a7['set'](ag['object'],Number(ag?.['current_time'])||null);}else{if(ag['type']===ObjectType['Allocation']){const ai=Number(ag?.['balance']??0x0);a8['set'](ag['object'],Number['isFinite'](ai)&&ai===0x0?'allocated':'pending');}}}}}catch{h['push']('recent_orders:\x20progress/allocation\x20details\x20unavailable\x20(non-blocking)');}const a9=new Map();try{const aj=Array['from'](new Set(a3['map'](al=>typeof al?.['who']==='string'?al['who']:'')['filter'](Boolean))),ak=await Promise['allSettled'](aj['map'](al=>query_object_last_updated({'object':al,'network':f})));for(let al=0x0;al<aj['length'];al++){const am=ak[al];a9['set'](aj[al],am['status']==='fulfilled'&&am['value']?.['timestamp_ms']?Number(am['value']['timestamp_ms'])||null:null);}}catch{h['push']('recent_orders:\x20order\x20updated\x20times\x20unavailable\x20(non-blocking)');}const aa=await Promise['all'](a3['map'](async an=>{const ao=typeof an?.['who']==='string'?an['who']:'',ap=a5['get'](ao),aq=ap?.['amount']!==null&&ap?.['amount']!==undefined?String(ap['amount']):'',ar=await I(aq);return{'order':ao,'time':typeof an?.['time']==='number'?an['time']:0x0,'updated_ms':a9['get'](ao)??null,'amount':aq,'amount_display':ar['display'],'amount_tip':ar['tip'],'progress':ap?.['progress']??null,'allocation':ap?.['allocation']??null,'disputes':Array['isArray'](ap?.['dispute'])?ap['dispute']:[],'agent':Array['isArray'](ap?.['agent'])?ap['agent']:[],'owner':ownerAddr(ap?.['builder']??ap?.['owner']),'claimed_by':ap?.['claimed_by']??null,'required_info':ap?.['required_info']??null,'progress_next':ap?.['progress']?a6['get'](ap['progress'])??null:null,'progress_since':ap?.['progress']?a7['get'](ap['progress'])??null:null,'allocation_state':ap?.['allocation']?a8['get'](ap['allocation'])??'pending':'none','bought':await Promise['all']((Array['isArray'](ap?.['items'])?ap['items']:[])['map'](async as=>({'name':String(as?.['name']??''),'price_display':(await I(as?.['price']!==null&&as?.['price']!==undefined?String(as['price']):'0'))['display'],'quantity':String(as?.['quantity']??'0'),'wip_hash':String(as?.['wip_hash']??'')})))};}));J={'count':a3['length'],'items':aa['filter'](an=>an['order']!=='')['slice'](-0x14)['reverse']()};}catch{h['push']('recent_orders:\x20reverse-index\x20query\x20failed\x20(non-blocking)');}const K=[];try{const an=await query_affiliations({'address':j,'no_cache':!![],'network':f}),ao=new Set(),ap=new Map();for(const ar of an?.['entries']??[]){const as=typeof ar?.['who']==='string'?ar['who']:'';if(!as||ao['has'](as))continue;ao['add'](as);const at=objectTypeFromAddress(as);if(!at)continue;if(at===ObjectType['Order'])continue;const au=String(at);let av=ap['get'](au);!av&&(av=[],ap['set'](au,av)),av['push']({'address':as,'type_label':au,'name':x(as)['name'],'time':typeof ar?.['time']==='number'?ar['time']:null});}const aq=['Progress','Allocation','Payment','Guard'];for(const aw of aq){const ax=ap['get'](aw);ax&&ax['length']>0x0&&(K['push']({'type_label':aw,'items':ax}),ap['delete'](aw));}for(const [ay,az]of ap){if(az['length']>0x0)K['push']({'type_label':ay,'items':az});}}catch{h['push']('related:\x20global-table\x20lookup\x20failed\x20(non-blocking)');}const L=[];for(const aA of k['allocator_guards']??[]){const aB=summarizeGuard(aA);if(aB)L['push'](aB);}const M=[];for(const aC of Array['isArray'](l['sales'])?l['sales']:[]){const aD=balanceStr(aC?.['price']),aE=await I(aD);M['push']({'name':typeof aC?.['name']==='string'?aC['name']:'','price':aD,'price_display':aE['display'],'price_tip':aE['tip'],'stock':balanceStr(aC?.['stock']),'suspension':aC?.['suspension']===!![],'wip':typeof aC?.['wip']==='string'?aC['wip']:'','wip_hash':typeof aC?.['wip_hash']==='string'?aC['wip_hash']:''});}const N=l['order_allocators']?{'description':l['order_allocators']['description']??'','threshold':balanceStr(l['order_allocators']['threshold']),'allocators':(l['order_allocators']['allocators']??[])['map'](aF=>({'guard':aF['guard'],'sharing_count':Array['isArray'](aF['sharing'])?aF['sharing']['length']:0x0,'max':balanceStr(aF['max']??null)}))}:null,O=summarizePermission(k['permission'],x(l['permission'])),P=O?.['owner']??B?.['sender']??null,Q=P?await markOf(P):null;return{'action':'service_panorama','network':f,'service':{'address':j,'name':w,'description':l['description']??'','location':l['location']??'','published':l['bPublished']===!![],'paused':l['bPaused']===!![],'paused_time':typeof l['paused_time']==='number'?l['paused_time']:null,'setting_lock_duration':balanceStr(l['setting_lock_duration']),'customer_required':Array['isArray'](l['customer_required'])?l['customer_required']:[],'compensation_fund':balanceStr(l['compensation_fund']),'sales':M,'machine':l['machine']??null,'buy_guard':l['buy_guard']??null,'permission':l['permission']??'','um':l['um']??null,'arbitrations':Array['isArray'](l['arbitrations'])?l['arbitrations']:[],'rewards':Array['isArray'](l['rewards'])?l['rewards']:[],'repositories':Array['isArray'](l['repositories'])?l['repositories']:[],'order_allocators':N,'onchain_last_updated':B,'tags':u['tags']??[],'owner':P,'owner_name':Q?.['name']??null},'machine_graph':y,'buy_guard':summarizeGuard(k['buy_guard']),'permission':O,'allocator_guards':L,'related':{'groups':K},'supply_chain':D,'trust':C,'business_report':E,'recent_orders':J,'data_gaps':h};}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { RelationshipProfile } from "./types.js";
|
|
2
|
+
export interface PermissionFacts {
|
|
3
|
+
address: string;
|
|
4
|
+
owner: string;
|
|
5
|
+
admins: string[];
|
|
6
|
+
entities: Array<{
|
|
7
|
+
address: string;
|
|
8
|
+
perm_indices: number[];
|
|
9
|
+
}>;
|
|
10
|
+
anchor_role_bits?: number;
|
|
11
|
+
managed_objects?: Array<{
|
|
12
|
+
object_type: string;
|
|
13
|
+
address: string;
|
|
14
|
+
}>;
|
|
15
|
+
}
|
|
16
|
+
export interface MachineFacts {
|
|
17
|
+
address: string;
|
|
18
|
+
permission_address?: string;
|
|
19
|
+
forwards?: Array<{
|
|
20
|
+
node: string;
|
|
21
|
+
next_node: string;
|
|
22
|
+
forward_name: string;
|
|
23
|
+
named_operator?: string | null;
|
|
24
|
+
permission_index?: number | null;
|
|
25
|
+
guard?: string | null;
|
|
26
|
+
}>;
|
|
27
|
+
}
|
|
28
|
+
export interface OrderFacts {
|
|
29
|
+
address: string;
|
|
30
|
+
owner: string;
|
|
31
|
+
agents: string[];
|
|
32
|
+
service: string;
|
|
33
|
+
amount?: string;
|
|
34
|
+
service_owner?: string;
|
|
35
|
+
allocation?: string;
|
|
36
|
+
dispute_arbitrations?: string[];
|
|
37
|
+
claimed_by?: string | null;
|
|
38
|
+
}
|
|
39
|
+
export interface DemandFacts {
|
|
40
|
+
address: string;
|
|
41
|
+
owner: string;
|
|
42
|
+
presenters?: Array<{
|
|
43
|
+
address: string;
|
|
44
|
+
service?: string;
|
|
45
|
+
acceptance_score?: number;
|
|
46
|
+
}>;
|
|
47
|
+
}
|
|
48
|
+
export interface AllocationFacts {
|
|
49
|
+
address: string;
|
|
50
|
+
owner?: string;
|
|
51
|
+
sharing?: Array<{
|
|
52
|
+
who: {
|
|
53
|
+
Entity: string;
|
|
54
|
+
} | {
|
|
55
|
+
Signer: true;
|
|
56
|
+
} | {
|
|
57
|
+
GuardIdentifier: number;
|
|
58
|
+
};
|
|
59
|
+
mode: "Amount" | "Rate" | "Surplus";
|
|
60
|
+
sharing?: string;
|
|
61
|
+
guard?: string;
|
|
62
|
+
}>;
|
|
63
|
+
}
|
|
64
|
+
export interface ContactFacts {
|
|
65
|
+
address: string;
|
|
66
|
+
ims: string[];
|
|
67
|
+
owner: string;
|
|
68
|
+
}
|
|
69
|
+
export interface ArbitrationFacts {
|
|
70
|
+
address: string;
|
|
71
|
+
voters?: Array<{
|
|
72
|
+
address: string;
|
|
73
|
+
weight?: number;
|
|
74
|
+
}>;
|
|
75
|
+
bound_services?: string[];
|
|
76
|
+
}
|
|
77
|
+
export interface RelationshipInput {
|
|
78
|
+
anchor: string;
|
|
79
|
+
permissions?: PermissionFacts[];
|
|
80
|
+
machines?: MachineFacts[];
|
|
81
|
+
orders?: OrderFacts[];
|
|
82
|
+
demands?: DemandFacts[];
|
|
83
|
+
allocations?: AllocationFacts[];
|
|
84
|
+
contacts?: ContactFacts[];
|
|
85
|
+
arbitrations?: ArbitrationFacts[];
|
|
86
|
+
service_owners?: Record<string, string>;
|
|
87
|
+
}
|
|
88
|
+
export declare function deriveRelationshipProfile(input: RelationshipInput): RelationshipProfile;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{RELATIONSHIP_KIND_REGISTRY,interestHintsFor}from'./registry.js';function eq(c,d){return c['toLowerCase']()===d['toLowerCase']();}function isAddressLike(a){return/^0x[0-9a-fA-F]{4,}$/i['test'](a);}function edge(a,b,c,d,e,f=[]){return{'anchor':a,'counterparty':b,'kind':c,'power':e,'interest':d,'value_flows':f,'tension':RELATIONSHIP_KIND_REGISTRY[c]['tension']};}function pushEdge(a,b){const c=b['counterparty']['toLowerCase']()+'|'+b['kind'],d=a['get'](c);if(d){d['power']['objects']['push'](...b['power']['objects']),d['value_flows']['push'](...b['value_flows']);b['power']['perm_indices']['length']>0x0&&(d['power']['perm_indices']=[...new Set([...d['power']['perm_indices'],...b['power']['perm_indices']])]);return;}a['set'](c,b);}export function deriveRelationshipProfile(a){const b=a['anchor'],c=new Map(),d=[],f=a['service_owners']??{};for(const i of a['permissions']??[]){const j=eq(i['owner'],b),k=i['admins']['some'](m=>eq(m,b)),l=i['entities']['find'](m=>eq(m['address'],b));if(j||k)for(const m of i['entities']){if(eq(m['address'],b))continue;const n='employment';pushEdge(c,edge(b,m['address'],n,interestHintsFor(n,!![]),{'role_bits':(j?0x1:0x0)|(k?0x2:0x0),'perm_indices':[],'objects':(i['managed_objects']??[])['map'](p=>({'object_type':p['object_type'],'address':p['address'],'capacity':'merchant-side\x20authority'})),'carrier':'permission'}));}else{if(l)for(const o of[i['owner'],...i['admins']]){if(!o||eq(o,b))continue;const p='employment';pushEdge(c,edge(b,o,p,interestHintsFor(p,![]),{'role_bits':0x4,'perm_indices':l['perm_indices'],'objects':(i['managed_objects']??[])['map'](q=>({'object_type':q['object_type'],'address':q['address'],'capacity':'entity\x20(perm\x20indices:\x20'+(l['perm_indices']['join'](',\x20')||'none')+')'})),'carrier':'permission'}));}}}for(const q of a['machines']??[]){for(const r of q['forwards']??[]){const t=r['named_operator'];if(!t||eq(t,b))continue;const u='process_operation';isAddressLike(t)?pushEdge(c,edge(b,t,u,interestHintsFor(u,!![]),{'role_bits':0x0,'perm_indices':[],'objects':[{'object_type':'Machine','address':q['address'],'capacity':r['node']+'\x20→\x20'+r['next_node']+'\x20('+r['forward_name']+')\x20named\x20operator'}],'carrier':'machine_forward'})):d['push']('Machine\x20'+q['address']+'\x20forward\x20\x27'+r['forward_name']+'\x27\x20('+r['node']+'\x20→\x20'+r['next_node']+')\x20has\x20named\x20operator\x20\x27'+t+'\x27\x20—\x20named\x20operators\x20resolve\x20per-order\x20via\x20the\x20Progress\x20namedOperator\x20table,\x20so\x20no\x20static\x20edge\x20is\x20derived.');}}for(const v of a['orders']??[]){const w=eq(v['owner'],b),x=v['agents']['some'](A=>eq(A,b)),y=v['service_owner']??f[v['service']],z='transaction';if((w||x)&&y){const A=[];v['amount']&&v['amount']!=='0'&&A['push']({'from':w?b:v['owner'],'to':y,'carrier_object':v['address'],'carrier_type':v['allocation']?'Order\x20→\x20Allocation':'Order\x20(escrow)','amount':v['amount'],'trigger':'workflow\x20reaches\x20a\x20completion\x20terminal\x20(guard-gated)'});const B=edge(b,y,z,interestHintsFor(z,!![]),{'role_bits':w?0x1:0x2,'perm_indices':[],'objects':[{'object_type':'Order','address':v['address'],'capacity':w?'buyer\x20(owner)':'buyer\x27s\x20agent'}],'carrier':'order'},A);v['dispute_arbitrations']?.['length']&&B['power']['objects']['push']({'object_type':'Arbitration','address':v['dispute_arbitrations']['join'](',\x20'),'capacity':'bound\x20dispute\x20paths'}),pushEdge(c,B);}else y&&eq(y,b)&&pushEdge(c,edge(b,v['owner'],z,interestHintsFor(z,![]),{'role_bits':0x4,'perm_indices':[],'objects':[{'object_type':'Order','address':v['address'],'capacity':'merchant\x20side\x20(service)'}],'carrier':'order'},v['amount']&&v['amount']!=='0'?[{'from':v['owner'],'to':b,'carrier_object':v['address'],'carrier_type':v['allocation']?'Order\x20→\x20Allocation':'Order\x20(escrow)','amount':v['amount'],'trigger':'workflow\x20reaches\x20a\x20completion\x20terminal\x20(guard-gated)'}]:[]));if(w)for(const C of v['agents']){if(eq(C,b))continue;const D='agency';pushEdge(c,edge(b,C,D,interestHintsFor(D,!![]),{'role_bits':0x1,'perm_indices':[],'objects':[{'object_type':'Order','address':v['address'],'capacity':'principal'}],'carrier':'order'}));}else{if(x){const E='agency';pushEdge(c,edge(b,v['owner'],E,interestHintsFor(E,![]),{'role_bits':0x2,'perm_indices':[],'objects':[{'object_type':'Order','address':v['address'],'capacity':'agent'}],'carrier':'order'}));}}}for(const F of a['demands']??[]){const G=eq(F['owner'],b);for(const H of F['presenters']??[]){if(eq(H['address'],b)&&G)continue;if(G&&!eq(H['address'],b)){const I='supply',J=edge(b,H['address'],I,interestHintsFor(I,!![]),{'role_bits':0x1,'perm_indices':[],'objects':[{'object_type':'Demand','address':F['address'],'capacity':'presenter\x20(service\x20'+(H['service']??'?')+',\x20score\x20'+(H['acceptance_score']??'n/a')+')'}],'carrier':'demand_presenter'});pushEdge(c,J);}else{if(!G&&eq(H['address'],b)){const K='supply';pushEdge(c,edge(b,F['owner'],K,interestHintsFor(K,![]),{'role_bits':0x4,'perm_indices':[],'objects':[{'object_type':'Demand','address':F['address'],'capacity':'I\x20presented\x20service\x20'+(H['service']??'?')+'\x20(score\x20'+(H['acceptance_score']??'n/a')+')'}],'carrier':'demand_presenter'}));}}}}for(const L of a['allocations']??[]){const M=!!L['owner']&&eq(L['owner'],b),N=(L['sharing']??[])['some'](O=>typeof O['who']==='object'&&'Entity'in O['who']&&eq(O['who']['Entity'],b));if(M)for(const O of L['sharing']??[]){if(typeof O['who']!=='object'||!('Entity'in O['who']))continue;const P=O['who']['Entity'];if(!P||eq(P,b))continue;const Q='value_distribution';pushEdge(c,edge(b,P,Q,interestHintsFor(Q,!![]),{'role_bits':0x1,'perm_indices':[],'objects':[{'object_type':'Allocation','address':L['address'],'capacity':'payer\x20/\x20allocation\x20owner'}],'carrier':'allocation_sharing'},[{'from':b,'to':P,'carrier_object':L['address'],'carrier_type':'Allocation\x20Sharing\x20('+O['mode']+(O['sharing']?'\x20'+O['sharing']:'')+')','trigger':O['guard']?'guard\x20'+O['guard']+'\x20passes':'allocator\x20guard\x20passes'}]));}else{if(N&&L['owner']&&!eq(L['owner'],b)){const R='value_distribution';pushEdge(c,edge(b,L['owner'],R,interestHintsFor(R,![]),{'role_bits':0x4,'perm_indices':[],'objects':[{'object_type':'Allocation','address':L['address'],'capacity':'declared\x20recipient'}],'carrier':'allocation_sharing'},[{'from':L['owner'],'to':b,'carrier_object':L['address'],'carrier_type':'Allocation\x20Sharing','trigger':'allocator\x20guard\x20passes'}]));}}for(const S of L['sharing']??[]){if(typeof S['who']==='object'&&'Signer'in S['who'])d['push']('Allocation\x20'+L['address']+'\x20has\x20a\x20Signer\x20recipient\x20('+S['mode']+')\x20—\x20value\x20flows\x20to\x20the\x20account\x20that\x20executes\x20the\x20guard-gated\x20alloc\x20call,\x20not\x20to\x20a\x20fixed\x20counterparty.');else typeof S['who']==='object'&&'GuardIdentifier'in S['who']&&d['push']('Allocation\x20'+L['address']+'\x20has\x20a\x20GuardIdentifier\x20recipient\x20('+S['mode']+')\x20—\x20the\x20recipient\x20address\x20is\x20resolved\x20from\x20a\x20guard\x20submission\x20at\x20alloc\x20time,\x20not\x20statically.');}}for(const T of a['arbitrations']??[]){for(const U of T['voters']??[]){if(eq(U['address'],b))continue;const V='arbitration_delegation';pushEdge(c,edge(b,U['address'],V,interestHintsFor(V,!![]),{'role_bits':0x1,'perm_indices':[],'objects':[{'object_type':'Arbitration','address':T['address'],'capacity':'bound\x20arbitration\x20(voter\x20weight\x20'+(U['weight']??'n/a')+')'}],'carrier':'arbitration_binding'}));}}for(const W of a['contacts']??[]){const X=eq(W['owner'],b);for(const Y of W['ims']){if(eq(Y,b))continue;const Z='contact_membership';pushEdge(c,edge(b,Y,Z,interestHintsFor(Z,X),{'role_bits':X?0x1:0x4,'perm_indices':[],'objects':[{'object_type':'Contact','address':W['address'],'capacity':X?'contact\x20owner':'IM\x20member'}],'carrier':'contact_im'}));}}const g=[...c['values']()],h={};for(const a0 of g){const a1=a0['counterparty']['toLowerCase']();(h[a1]??=[])['push'](a0['kind']);}for(const a2 of new Set(g['map'](a3=>a3['kind']))){const a3=RELATIONSHIP_KIND_REGISTRY[a2];a3?.['tension']&&d['push'](a2+':\x20anchor('+a3['anchor_role']+')\x20wants\x20\x22'+a3['tension']['anchor_goal']+'\x22;\x20counterparty('+a3['counterparty_role']+')\x20wants\x20\x22'+a3['tension']['counterparty_goal']+'\x22.\x20Divergence:\x20'+a3['tension']['divergence']);}return{'anchor':b,'edges':g,'by_counterparty':h,'notes':d};}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { LiabilityResolution, ReactionKpi } from "../participation/employee-kpi.js";
|
|
2
|
+
export interface AcceptanceEvidence {
|
|
3
|
+
node: string;
|
|
4
|
+
wip_hashes: string[];
|
|
5
|
+
submitted_at?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface AcceptanceVerdict {
|
|
8
|
+
node: string;
|
|
9
|
+
passed: boolean;
|
|
10
|
+
criteria: string[];
|
|
11
|
+
gaps: string[];
|
|
12
|
+
}
|
|
13
|
+
export interface IncentiveInput {
|
|
14
|
+
employee: string;
|
|
15
|
+
kpis: ReactionKpi[];
|
|
16
|
+
acceptance: AcceptanceEvidence[];
|
|
17
|
+
liability?: LiabilityResolution;
|
|
18
|
+
available_rewards?: Array<{
|
|
19
|
+
address: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
}>;
|
|
22
|
+
prior_compensation?: string;
|
|
23
|
+
}
|
|
24
|
+
export type SuggestionKind = "reward_grant" | "compensation_offset" | "correction_notice" | "none";
|
|
25
|
+
export interface RewardSuggestion {
|
|
26
|
+
employee: string;
|
|
27
|
+
kind: SuggestionKind;
|
|
28
|
+
rationale: string;
|
|
29
|
+
requires_confirmation: true;
|
|
30
|
+
reward_candidates: Array<{
|
|
31
|
+
address: string;
|
|
32
|
+
description?: string;
|
|
33
|
+
}>;
|
|
34
|
+
execution_hint: string;
|
|
35
|
+
kpi_rollup: string;
|
|
36
|
+
}
|
|
37
|
+
export declare function evaluateAcceptance(node: string, evidence?: AcceptanceEvidence): AcceptanceVerdict;
|
|
38
|
+
export declare function suggestIncentive(input: IncentiveInput): RewardSuggestion;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function evaluateAcceptance(a,b){const c=[],d=[];if(!b)return{'node':a,'passed':![],'criteria':['WIP\x20evidence\x20submitted\x20for\x20the\x20node'],'gaps':['No\x20evidence\x20submitted\x20—\x20node\x20advanced\x20without\x20verifiable\x20WIP']};return c['push']('WIP\x20evidence\x20submitted\x20for\x20the\x20node'),b['wip_hashes']['length']===0x0?d['push']('Evidence\x20entry\x20exists\x20but\x20contains\x20no\x20WIP\x20hash'):c['push']('WIP\x20hashes\x20present\x20('+b['wip_hashes']['length']+')'),{'node':a,'passed':d['length']===0x0,'criteria':c,'gaps':d};}export function suggestIncentive(a){const b=a['kpis']['length']?a['kpis']['map'](h=>h['node']+':\x20'+h['status']+(h['reaction_ms']>=0x0?'\x20('+Math['round'](h['reaction_ms']/0x36ee80)+'h)':'\x20(pending)'))['join'](';\x20'):'No\x20node\x20KPIs\x20recorded',c=a['kpis']['filter'](h=>h['status']==='fail'),d=a['kpis']['filter'](h=>h['status']==='warn'),e=a['kpis']['filter'](h=>h['status']==='pass'),f=a['kpis']['filter'](h=>h['status']!=='warn')['map'](h=>evaluateAcceptance(h['node'],a['acceptance']['find'](i=>i['node']===h['node']))),g=f['filter'](h=>!h['passed']);if(a['liability']&&a['liability']['bears']==='employee')return{'employee':a['employee'],'kind':'compensation_offset','rationale':'Liability\x20resolution\x20assigns\x20the\x20loss\x20to\x20the\x20employee\x20('+a['liability']['note']+').\x20'+(a['liability']['must_compensate_before_resume']?'The\x20order\x20user\x20must\x20be\x20compensated\x20BEFORE\x20the\x20workflow\x20resumes.\x20':'')+'Suggest\x20offsetting\x20the\x20loss\x20against\x20the\x20employee\x27s\x20next\x20distribution\x20(Allocation\x20guard\x20or\x20reward\x20amount),\x20with\x20the\x20employee\x27s\x20visibility.','requires_confirmation':!![],'reward_candidates':[],'execution_hint':'After\x20merchant\x20confirmation:\x20adjust\x20the\x20employee\x27s\x20Allocation\x20Sharing\x20amount/guard\x20for\x20the\x20relevant\x20order,\x20or\x20deduct\x20from\x20the\x20next\x20reward\x20grant.\x20All\x20changes\x20are\x20on-chain\x20and\x20auditable.','kpi_rollup':b};if(g['length']>0x0||c['length']>0x0){const h=g['map'](i=>i['node']+':\x20'+i['gaps']['join'](';\x20'))['join']('\x20|\x20');return{'employee':a['employee'],'kind':'correction_notice','rationale':(c['length']>0x0?c['length']+'\x20KPI\x20failure(s).\x20':'')+(g['length']>0x0?'Acceptance\x20gaps:\x20'+h:'')+'\x20No\x20reward\x20suggested.\x20Surface\x20the\x20gaps\x20to\x20the\x20employee\x20via\x20Messenger\x20with\x20the\x20on-chain\x20evidence\x20links.','requires_confirmation':!![],'reward_candidates':[],'execution_hint':'After\x20merchant\x20confirmation:\x20send\x20a\x20Messenger\x20message\x20to\x20the\x20employee\x20with\x20the\x20KPI\x20rollup\x20and\x20WIP\x20evidence\x20gaps;\x20optionally\x20set\x20a\x20stricter\x20response_time_budget_ms\x20on\x20the\x20employee\x20profile.','kpi_rollup':b};}if(e['length']>0x0&&c['length']===0x0&&g['length']===0x0){const i=a['available_rewards']??[];return{'employee':a['employee'],'kind':i['length']>0x0?'reward_grant':'none','rationale':'All\x20'+e['length']+'\x20node\x20KPI(s)\x20passed\x20with\x20complete,\x20verifiable\x20WIP\x20evidence.\x20'+(i['length']>0x0?'Suggest\x20granting\x20one\x20of\x20the\x20available\x20rewards\x20—\x20aligns\x20employee\x20compensation\x20with\x20delivered\x20output\x20(principal-agent\x20alignment).':'No\x20reward\x20objects\x20configured\x20on\x20the\x20service\x20—\x20suggest\x20the\x20merchant\x20add\x20a\x20Reward\x20(guard-gated\x20claim)\x20to\x20make\x20future\x20incentive\x20alignment\x20executable\x20on-chain.'),'requires_confirmation':!![],'reward_candidates':i,'execution_hint':i['length']>0x0?'After\x20merchant\x20confirmation:\x20set\x20the\x20employee\x20as\x20the\x20RewardGuard\x20recipient\x20(guard-gated\x20claim\x20by\x20the\x20employee),\x20or\x20transfer\x20the\x20reward\x20directly\x20via\x20the\x20existing\x20reward/payment\x20ops.':'After\x20merchant\x20confirmation:\x20create\x20a\x20Reward\x20bound\x20to\x20a\x20guard\x20the\x20employee\x20satisfies\x20(reward.operation),\x20then\x20notify\x20the\x20employee\x20via\x20Messenger.','kpi_rollup':b};}return{'employee':a['employee'],'kind':'none','rationale':d['length']>0x0?d['length']+'\x20node(s)\x20still\x20pending\x20employee\x20action\x20—\x20no\x20verdict\x20possible\x20until\x20they\x20advance.':'No\x20KPI\x20data\x20to\x20evaluate.','requires_confirmation':!![],'reward_candidates':[],'execution_hint':'No\x20action.\x20Monitor\x20pending\x20nodes;\x20re-run\x20when\x20they\x20complete.','kpi_rollup':b};}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export*from'./types.js';export*from'./registry.js';export*from'./derivation.js';export*from'./incentive.js';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { RelationshipKind, RelationshipTension } from "./types.js";
|
|
2
|
+
export interface RelationshipKindMeta {
|
|
3
|
+
kind: RelationshipKind;
|
|
4
|
+
semantics: string;
|
|
5
|
+
anchor_role: string;
|
|
6
|
+
counterparty_role: string;
|
|
7
|
+
tension?: RelationshipTension;
|
|
8
|
+
}
|
|
9
|
+
export declare const RELATIONSHIP_KIND_REGISTRY: Record<RelationshipKind, RelationshipKindMeta>;
|
|
10
|
+
export declare function interestHintsFor(kind: RelationshipKind, asAnchorRole: boolean): {
|
|
11
|
+
gains: string[];
|
|
12
|
+
exposures: string[];
|
|
13
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const EMPLOYMENT={'kind':'employment','semantics':'Merchant\x27s\x20internal\x20staff\x20via\x20Permission\x20entity\x20membership\x20(no\x20node\x20operator\x20power\x20of\x20their\x20own)\x20—\x20principal-agent.','anchor_role':'merchant','counterparty_role':'employee','tension':{'anchor_goal':'Maximize\x20delivered\x20output\x20quality\x20at\x20fixed\x20labor\x20cost;\x20errors\x20are\x20attributed\x20to\x20the\x20merchant\x20outwardly.','counterparty_goal':'Maximize\x20compensation\x20while\x20minimizing\x20effort\x20and\x20personal\x20liability\x20exposure.','divergence':'Fixed\x20pay\x20decouples\x20effort\x20from\x20outcome:\x20the\x20employee\x20bears\x20only\x20bounded\x20liability\x20(resolveLiability)\x20while\x20the\x20merchant\x27s\x20reputation\x20and\x20compensation_fund\x20absorb\x20the\x20residue.','alignment_mechanisms':['Employee\x20KPI:\x20assessReactionKpi\x20measures\x20node\x20reaction\x20time\x20against\x20a\x20budget\x20(participation/employee-kpi.ts)','Acceptance\x20gate:\x20node\x20advancement\x20requires\x20the\x20merchant-side\x20permission\x20or\x20evidence\x20upload\x20(machine.move\x20forwards)','Compensation-before-resume:\x20an\x20employee-error\x20loss\x20must\x20compensate\x20the\x20order\x20user\x20before\x20the\x20workflow\x20resumes\x20(resolveLiability)','Incentive\x20bridge:\x20KPI\x20+\x20acceptance\x20→\x20Reward\x20suggestion,\x20executed\x20only\x20after\x20merchant\x20confirmation\x20(relationship/incentive.ts)']}},PROCESS_OPERATION={'kind':'process_operation','semantics':'Machine\x20node\x20operators\x20—\x20namedOperator\x20addresses,\x20permissionIndex\x20entities,\x20or\x20guard\x20proofs\x20(machine.move\x20Forward).','anchor_role':'machine/merchant\x20side','counterparty_role':'node\x20operator','tension':{'anchor_goal':'Workflow\x20advances\x20correctly\x20and\x20on\x20schedule;\x20WIP\x20evidence\x20is\x20complete.','counterparty_goal':'Complete\x20assigned\x20nodes\x20with\x20minimal\x20friction;\x20parallel\x20forwards\x20let\x20operators\x20pick\x20favorable\x20edges.','divergence':'Multi-path\x20forwards\x20(multiple\x20forwards\x20from\x20one\x20prev_node)\x20let\x20operators\x20choose\x20the\x20cheap\x20edge,\x20not\x20the\x20quality\x20edge.','alignment_mechanisms':['Forward\x20guard:\x20each\x20edge\x20can\x20require\x20a\x20guard\x20proof\x20(machine.move\x20Forward.guard)','Threshold\x20accumulation:\x20parallel\x20edges\x20need\x20accumulated\x20weights\x20to\x20migrate\x20the\x20node','WIP\x20evidence:\x20progress\x20records\x20who\x20advanced\x20what\x20and\x20when\x20(progress.move\x20Holder)']}},AGENCY={'kind':'agency','semantics':'Order\x20owner\x20(buyer)\x20delegates\x20purchasing\x20power\x20to\x20order\x20agents\x20(order.move\x20agent[]).','anchor_role':'buyer','counterparty_role':'agent','tension':{'anchor_goal':'Agent\x20acts\x20strictly\x20within\x20the\x20principal\x27s\x20interest\x20when\x20spending\x20escrowed\x20funds.','counterparty_goal':'Operational\x20latitude;\x20agents\x20may\x20face\x20incentives\x20from\x20the\x20merchant\x20side.','divergence':'The\x20agent\x20spends\x20the\x20principal\x27s\x20money:\x20classic\x20delegated-spending\x20moral\x20hazard.','alignment_mechanisms':['has_op_permission:\x20only\x20owner/agent\x20can\x20operate\x20the\x20order\x20(order.move)','Order\x20agent_set\x20is\x20revocable\x20at\x20any\x20time\x20by\x20the\x20owner','All\x20agent\x20operations\x20are\x20on-chain\x20auditable\x20events']}},TRANSACTION={'kind':'transaction','semantics':'Customer\x20(order\x20owner)\x20↔\x20merchant\x20(service\x20side)\x20—\x20the\x20core\x20adversarial-cooperative\x20exchange.','anchor_role':'customer','counterparty_role':'merchant','tension':{'anchor_goal':'Receive\x20the\x20agreed\x20deliverable;\x20keep\x20the\x20refund\x20path\x20available\x20until\x20acceptance.','counterparty_goal':'Get\x20escrowed\x20funds\x20released\x20as\x20early\x20as\x20possible;\x20minimize\x20dispute\x20surface.','divergence':'Fund\x20release\x20vs\x20acceptance\x20timing:\x20the\x20customer\x20wants\x20evidence\x20before\x20release,\x20the\x20merchant\x20wants\x20release\x20on\x20completion\x20terminal.','alignment_mechanisms':['Escrow:\x20order\x20amount\x20is\x20locked\x20until\x20the\x20workflow\x20reaches\x20a\x20terminal\x20(order.move)','buy_guard:\x20merchant\x20can\x20pre-screen\x20buyers\x20(service.move)','compensation_fund\x20+\x20bound\x20arbitrations:\x20breach\x20recourse\x20without\x20a\x20platform\x20(service.move\x20publish\x20rule)','Registrar\x20votes\x20(BIT_LIKE/BIT_DISLIKE/BIT_FAVOR):\x20post-transaction\x20reputation\x20accumulation','Demand\x20feedback\x20acceptance_score:\x20demander\x20rates\x20the\x20supplier\x20on-chain\x20(demand.move\x20feedback)']}},SUPPLY={'kind':'supply','semantics':'Demander\x20(demand\x20permission\x20owner)\x20×\x20presenter\x20(supplier\x20presenting\x20a\x20service\x20to\x20the\x20demand).','anchor_role':'demander','counterparty_role':'supplier/presenter','tension':{'anchor_goal':'Select\x20the\x20best-fitting\x20service;\x20personalized\x20support\x20before\x20committing.','counterparty_goal':'Win\x20the\x20selection;\x20the\x20present\x20call\x20is\x20cheap\x20so\x20over-presenting\x20is\x20rational.','divergence':'Presentation\x20is\x20free\x20for\x20the\x20supplier\x20but\x20selection\x20is\x20costly\x20for\x20the\x20demander\x20—\x20asymmetric\x20effort.','alignment_mechanisms':['Presenters\x20map\x20with\x20recommend\x20field\x20and\x20update_time\x20(demand.move\x20present)','On-chain\x20acceptance_score\x20feedback\x20loop\x20(demand.move\x20feedback)\x20—\x20bad\x20presentations\x20get\x20scored','Demand\x20guards:\x20present/claim\x20can\x20be\x20gated\x20(demand.move\x20guards)','Demand\x20rewards:\x20only\x20the\x20selected\x20winner\x27s\x20claim\x20guard\x20passes\x20(reward.move)']}},ARBITRATION_DELEGATION={'kind':'arbitration_delegation','semantics':'Service\x20owner\x20delegates\x20dispute\x20resolution\x20to\x20an\x20Arbitration\x27s\x20voting\x20guards\x20(service.move\x20arbitrations).','anchor_role':'service\x20owner\x20(merchant)','counterparty_role':'arbitrators\x20(voting\x20guard\x20members)','tension':{'anchor_goal':'Fair\x20verdicts\x20that\x20protect\x20the\x20merchant\x27s\x20reputation;\x20predictable\x20fee\x20costs.','counterparty_goal':'Earn\x20arbitration\x20fees;\x20vote\x20throughput\x20matters\x20more\x20than\x20deep\x20investigation.','divergence':'Vote\x20cost\x20asymmetry:\x20fast\x20votes\x20earn\x20the\x20same\x20fee\x20as\x20investigated\x20votes.','alignment_mechanisms':['Separation\x20of\x20powers:\x20arbitration\x20permission\x20must\x20differ\x20from\x20the\x20service\x20permission\x20(service.move\x20arbitration_add\x20rule)','vote_weight\x20per\x20voting\x20guard\x20member\x20—\x20weighted,\x20not\x20majority-count\x20(arbitration.move)','Arb\x20indemnity\x20is\x20paid\x20from\x20the\x20merchant\x27s\x20compensation_fund\x20—\x20verdicts\x20cost\x20the\x20merchant\x20real\x20money\x20(arb.move)','Registrar\x20reputation\x20for\x20the\x20arbitration\x20object\x20itself']}},DISPUTE_RESOLUTION={'kind':'dispute_resolution','semantics':'Arbitrator\x20↔\x20disputants\x20through\x20Arb\x20lifecycle\x20(order.move\x20dispute[]\x20/\x20claimed_by,\x20arb.move).','anchor_role':'arbitrator','counterparty_role':'disputants','tension':{'anchor_goal':'Resolve\x20with\x20a\x20defensible\x20proposition\x20before\x20the\x20voting\x20deadline.','counterparty_goal':'Maximize\x20own-side\x20indemnity\x20/\x20minimize\x20own-side\x20loss.','divergence':'Zero-sum\x20over\x20the\x20indemnity\x20amount\x20within\x20the\x20voting\x20deadline\x20window.','alignment_mechanisms':['voting_deadline\x20forces\x20resolution\x20(arb.move)','Voted\x20records\x20are\x20on-chain\x20and\x20auditable','compensation\x20claim\x20is\x20single-shot\x20(order\x20claimed_by\x20guard,\x20E_ORDER_ALREADY_CLAIMED)']}},VALUE_DISTRIBUTION={'kind':'value_distribution','semantics':'Declared\x20value\x20flow:\x20allocation\x20recipients\x20(Entity\x20/\x20Signer\x20/\x20GuardIdentifier)\x20sharing\x20escrowed\x20funds.','anchor_role':'payer\x20/\x20allocation\x20owner','counterparty_role':'recipient','tension':{'anchor_goal':'Control\x20outflow:\x20threshold,\x20max\x20cap,\x20guard-gated\x20release.','counterparty_goal':'Receive\x20distribution\x20as\x20early\x20and\x20as\x20fully\x20as\x20possible.','divergence':'Every\x20basis\x20point\x20of\x20Rate\x20sharing\x20is\x20contested;\x20Surplus\x20absorbs\x20the\x20remainder.','alignment_mechanisms':['Allocator\x20guard\x20must\x20pass\x20before\x20any\x20split\x20(allocation.move\x20alloc)','Rate\x20total\x20must\x20be\x20exactly\x2010000\x20without\x20Surplus\x20/\x20at\x20most\x2010000\x20with\x20one\x20(contract\x20invariants)','max\x20cap\x20for\x20Amount-mode\x20allocators\x20(allocation.move)','Payment\x20objects\x20record\x20the\x20per-recipient\x20breakdown\x20(payment.move\x20NewPaymentEvent)']}},CONTACT_MEMBERSHIP={'kind':'contact_membership','semantics':'Communication\x20channel\x20membership\x20(contact.move\x20ims[]).','anchor_role':'contact\x20owner','counterparty_role':'IM\x20member','tension':undefined};export const RELATIONSHIP_KIND_REGISTRY={'employment':EMPLOYMENT,'process_operation':PROCESS_OPERATION,'agency':AGENCY,'transaction':TRANSACTION,'supply':SUPPLY,'arbitration_delegation':ARBITRATION_DELEGATION,'dispute_resolution':DISPUTE_RESOLUTION,'value_distribution':VALUE_DISTRIBUTION,'contact_membership':CONTACT_MEMBERSHIP};export function interestHintsFor(a,b){const c=RELATIONSHIP_KIND_REGISTRY[a];if(!c?.['tension'])return{'gains':[],'exposures':[]};return b?{'gains':['Aligned\x20outcome\x20of:\x20'+c['tension']['anchor_goal']],'exposures':[c['tension']['divergence']]}:{'gains':['Aligned\x20outcome\x20of:\x20'+c['tension']['counterparty_goal']],'exposures':[c['tension']['divergence']]};}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export type PowerCarrier = "permission" | "machine_forward" | "order" | "demand_presenter" | "allocation_sharing" | "arbitration_binding" | "contact_im";
|
|
2
|
+
export type RelationshipKind = "employment" | "process_operation" | "agency" | "transaction" | "supply" | "arbitration_delegation" | "dispute_resolution" | "value_distribution" | "contact_membership";
|
|
3
|
+
export interface PowerDimension {
|
|
4
|
+
role_bits: number;
|
|
5
|
+
perm_indices: number[];
|
|
6
|
+
objects: Array<{
|
|
7
|
+
object_type: string;
|
|
8
|
+
address: string;
|
|
9
|
+
capacity: string;
|
|
10
|
+
}>;
|
|
11
|
+
carrier: PowerCarrier;
|
|
12
|
+
}
|
|
13
|
+
export interface InterestDimension {
|
|
14
|
+
gains: string[];
|
|
15
|
+
exposures: string[];
|
|
16
|
+
}
|
|
17
|
+
export interface ValueFlow {
|
|
18
|
+
from: string;
|
|
19
|
+
to: string;
|
|
20
|
+
carrier_object: string;
|
|
21
|
+
carrier_type: string;
|
|
22
|
+
amount?: string;
|
|
23
|
+
trigger: string;
|
|
24
|
+
}
|
|
25
|
+
export interface RelationshipEdge {
|
|
26
|
+
anchor: string;
|
|
27
|
+
counterparty: string;
|
|
28
|
+
kind: RelationshipKind;
|
|
29
|
+
power: PowerDimension;
|
|
30
|
+
interest: InterestDimension;
|
|
31
|
+
value_flows: ValueFlow[];
|
|
32
|
+
tension?: RelationshipTension;
|
|
33
|
+
}
|
|
34
|
+
export interface RelationshipTension {
|
|
35
|
+
anchor_goal: string;
|
|
36
|
+
counterparty_goal: string;
|
|
37
|
+
divergence: string;
|
|
38
|
+
alignment_mechanisms: string[];
|
|
39
|
+
}
|
|
40
|
+
export interface RelationshipProfile {
|
|
41
|
+
anchor: string;
|
|
42
|
+
edges: RelationshipEdge[];
|
|
43
|
+
by_counterparty: Record<string, RelationshipKind[]>;
|
|
44
|
+
notes: string[];
|
|
45
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ArbPanoramaResult } from "../playbooks/service-build/object-panorama.js";
|
|
2
|
+
import type { ReviewPack } from "./types.js";
|
|
3
|
+
export declare function arbTokenOf(typeRaw: string | null): string | null;
|
|
4
|
+
export declare function fmtArbMoney(raw: string | number | null | undefined, typeRaw: string | null): string | null;
|
|
5
|
+
export declare function arbStatusLabel(status: string | null): string;
|
|
6
|
+
export declare function assembleArbReview(pano: ArbPanoramaResult): ReviewPack;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{groupRelated}from'./order.js';export function arbTokenOf(a){if(!a)return null;const b=a['match'](/<([0-9a-zA-Z_:]+)>\s*$/),c=b?.[0x1]?.['split']('::')['pop']()??'';return c||null;}const TOKEN_DECIMALS={'WOW':0x9};export function fmtArbMoney(a,c){if(a===null||a===undefined||a==='')return null;const d=typeof a==='number'?Math['trunc'](a):Number(a['trim']());if(!Number['isFinite'](d)||d<0x0)return null;const e=arbTokenOf(c)??'WOW',f=TOKEN_DECIMALS[e['toUpperCase']()]??0x9;try{const g=BigInt(d),h=0xan**BigInt(f),i=g/h,j=(g%h)['toString']()['padStart'](f,'0')['slice'](0x0,0x4);return i['toString']()+'.'+j+'\x20'+e;}catch{return d+'\x20'+e;}}export function arbStatusLabel(a){return(a??'')['replace'](/_/g,'\x20')['trim']()||'--';}const ARB_STATUS_META={'principal\x20confirming':{'tone':'amber','desc':'Principal\x20(re)submits\x20case\x20materials\x20—\x20reached\x20via\x20reset.'},'arbitrator\x20confirming':{'tone':'blue','desc':'Arbitrator\x20reviewing\x20and\x20confirming\x20the\x20case\x20(creation\x20state).'},'voting':{'tone':'yellow','desc':'Voting\x20in\x20progress.'},'arbitrated':{'tone':'blue','desc':'Ruling\x20made\x20(definitive\x20arbitration\x20result).'},'objectionable':{'tone':'red','desc':'Objection\x20window\x20—\x20case\x20can\x20be\x20reset\x20or\x20withdrawn\x20after\x2030\x20days.'},'finished':{'tone':'green','desc':'Terminal\x20—\x20completed;\x20fee\x20can\x20be\x20withdrawn\x20immediately.'},'withdrawn':{'tone':'gray','desc':'Terminal\x20—\x20withdrawn\x20by\x20the\x20complainant.'}};function agreesLabel(a,b){if(!a||a['length']===0x0)return'--';return a['map'](c=>{const d=b[c]?.['name'];return'#'+(c+0x1)+(d?'\x20'+d:'');})['join'](',\x20');}export function assembleArbReview(a){const b=a['fields'],c=arbStatusLabel(b['status']),d=ARB_STATUS_META[c['toLowerCase']()],e=fmtArbMoney(b['fee'],b['type_raw']),g=[{'v':c,'tone':d?.['tone']??'gray','tip':d?.['desc']??'ArbStatus\x20lifecycle\x20state\x20of\x20this\x20case.'}],h=[{'label':'Order','tip':'The\x20disputed\x20order.','value':b['order']?{'t':'addr','v':b['order'],'obj_type':'Order'}:null},{'label':'Votes','tip':'Total\x20votes\x20cast\x20by\x20voting\x20guards\x20on\x20this\x20case\x20(click\x20for\x20the\x20voter\x20list).','value':{'t':'count','n':a['voted']['length'],'panel_title':'Voted','addrs':a['voted']['map'](p=>p['voter'])}},...b['voting_deadline']?[{'label':'Deadline','tip':'Voting\x20deadline\x20(None\x20=\x20open-ended\x20voting\x20until\x20the\x20arbitrator\x20finalizes).','value':{'t':'deadline','v':b['voting_deadline']}}]:[],{'label':'Propositions','tip':'Resolution\x20plans\x20voters\x20agree\x20with\x20(count\x20only).','value':{'t':'text','v':String(a['proposition']['length']),'tone':'strong'}},{'label':'Create\x20at','tip':'Time\x20when\x20the\x20case\x20was\x20opened\x20(Arb.time).','value':b['time']!=null?{'t':'time','v':b['time']}:null}],i=[{'label':'Service','tip':'The\x20Service\x20the\x20disputed\x20Order\x20belongs\x20to.','value':b['service']?{'t':'addr','v':b['service'],'obj_type':'Service'}:null},{'label':'Indemnity','tip':'Compensation\x20award\x20recorded\x20on\x20this\x20case\x20(none\x20until\x20the\x20arbitrator\x20awards\x20it).','value':b['indemnity']?.['amount']!=null?{'t':'text','v':fmtArbMoney(b['indemnity']['amount'],b['type_raw'])??'--','tone':'strong'}:null}],j={'kind':'items','title':'Vote\x20('+a['proposition']['length']+')','empty':'No\x20propositions\x20submitted\x20yet.','items':a['proposition']['map']((q,r)=>({'name':'#'+(r+0x1)+'\x20'+q['name'],'meta':[{'label':'votes','value':String(q['votes'])}]}))},k={'kind':'items','title':'Voters\x20('+a['voted']['length']+')','empty':'No\x20votes\x20cast\x20yet\x20—\x20voting\x20guards\x20have\x20not\x20weighed\x20in.','items':a['voted']['map']((p,q)=>({'name':'#'+(q+0x1),'ref':{'address':p['voter'],'obj_type':'Account'},'meta':[{'label':'agrees','value':agreesLabel(p['agrees'],a['proposition'])},{'label':'weight','value':String(p['weight'])}]}))},l={'kind':'fields','columns':0x1,'fields':[{'label':'Feedback','tip':'The\x20arbitrator\x27s\x20ruling\x20statement,\x20recorded\x20when\x20the\x20case\x20is\x20decided\x20(arbitration\x20→\x20feedback);\x20rewritten\x20via\x20feedback\x20/\x20reset\x20while\x20the\x20case\x20is\x20open.','value':b['feedback']?{'t':'longtext','v':b['feedback']}:null},{'label':'Objection','tip':'The\x20losing\x20party\x27s\x20objection\x20statement\x20filed\x20during\x20the\x20objectionable\x20window\x20after\x20the\x20ruling.','value':b['objection']?{'t':'longtext','v':b['objection']}:null}]},m={'kind':'fields','columns':0x2,'fields':[{'label':'Status','tip':'ArbStatus\x20lifecycle:\x20Principal_confirming\x20→\x20Arbitrator_confirming\x20→\x20Voting\x20→\x20Arbitrated\x20→\x20Objectionable\x20→\x20Finished\x20(or\x20Withdrawn).','value':{'t':'text','v':c,'tone':'strong'}},{'label':'Fee','tip':'Arbitration\x20fee\x20locked\x20by\x20the\x20dispute\x20opener,\x20in\x20the\x20case\x27s\x20payment\x20token\x20(raw\x20balance\x20→\x20human\x20amount).','value':e?{'t':'text','v':e,'tone':'strong'}:null},{'label':'Arbitration','tip':'The\x20Arbitration\x20service\x20object\x20adjudicating\x20this\x20case.','value':b['arbitration']?{'t':'addr','v':b['arbitration'],'obj_type':'Arbitration'}:null},{'label':'Deadline','tip':'Voting\x20deadline\x20(None\x20=\x20open-ended\x20voting\x20until\x20the\x20arbitrator\x20finalizes).','value':b['voting_deadline']?{'t':'deadline','v':b['voting_deadline']}:null},{'label':'Indemnity','tip':'Compensation\x20the\x20losing\x20side\x20must\x20pay\x20(awarded\x20amount,\x20in\x20the\x20case\x27s\x20payment\x20token).','value':b['indemnity']?{'t':'text','v':fmtArbMoney(b['indemnity']['amount'],b['type_raw'])??'--'}:null},{'label':'Indemnity\x20time','tip':'When\x20the\x20indemnity\x20award\x20was\x20recorded\x20on\x20this\x20case.','value':b['indemnity']?.['time']!=null?{'t':'time','v':b['indemnity']['time']}:null},{'label':'Compensation\x20time','tip':'When\x20the\x20compensation\x20was\x20executed\x20on-chain\x20(arb.compensation_time).','value':b['compensation_time']!=null?{'t':'time','v':b['compensation_time']}:null}]},n=a['related']?.['items']??[],o={'kind':'related','title':'Related\x20objects'+(a['related']?.['count']?'\x20('+a['related']['count']+')':''),'empty':'No\x20other\x20on-chain\x20objects\x20reference\x20or\x20use\x20this\x20Arb\x20case\x20yet.','groups':groupRelated(n),'count':a['related']?.['count']??n['length']};return{'action':'review_pack','object_type':'Arb','head':{'address':a['object'],'network':a['network'],'name':a['head']['name'],'description':a['head']['description'],'tags':a['head']['tags'],'last_active_ms':a['updated_ms'],'badges':g,...e!=null?{'amount':{'text':e,'tip':'Arbitration\x20fee\x20locked\x20by\x20the\x20dispute\x20opener\x20—\x20denominated\x20in\x20the\x20case\x27s\x20payment\x20token\x20(the\x20Arb<T>\x20generic).'}}:{},'info_rows':[h,i]},'sections':[j,k,l,m,o],'data_gaps':a['data_gaps']};}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function assembleDemandReview(a){const b=a['fields'],c=[{'label':'Location','tip':'Location\x20—\x20where\x20the\x20demanded\x20work\x20is\x20performed,\x20declared\x20on-chain.','value':b['location']?{'t':'text','v':b['location'],'tone':'strong'}:null}],d={'kind':'items','title':'Present\x20Guards\x20('+a['guards']['length']+')','empty':'No\x20present\x20guards\x20—\x20any\x20service\x20can\x20present\x20directly,\x20no\x20passport\x20required.','items':a['guards']['map']((j,k)=>({'name':'#'+(k+0x1),'ref':{'address':j['guard'],'obj_type':'Guard'},'meta':[]}))},e={'kind':'core','title':'Permission','rows':b['permission']?[{'label':'Permission','ref':{'address':b['permission'],'obj_type':'Permission'}}]:[]},g={'kind':'fields','columns':0x2,'fields':[{'label':'Location','tip':'Where\x20the\x20demanded\x20work\x20should\x20happen\x20(free-form\x20location\x20string).','value':b['location']?{'t':'text','v':b['location']}:null},{'label':'UM','tip':'Update\x20Manager\x20(demand.um)\x20—\x20a\x20Contact\x20designated\x20as\x20this\x20Demand\x27s\x20customer-service\x20/\x20update\x20channel.','value':b['um']?{'t':'addr','v':b['um'],'obj_type':'Contact'}:null},{'label':'Permission','tip':'The\x20Permission\x20list\x20gating\x20administration\x20operations\x20on\x20this\x20Demand.','value':b['permission']?{'t':'addr','v':b['permission'],'obj_type':'Permission'}:null},{'label':'Rewards','tip':'Reward\x20objects\x20offered\x20by\x20this\x20demand\x20(paid\x20out\x20on\x20fulfillment\x20milestones).','value':{'t':'count','n':a['rewards']['length'],'panel_title':'Rewards','addrs':a['rewards']}}]},h={'kind':'items','title':'Presenters\x20('+a['presenters']['count']+')','empty':'No\x20services\x20have\x20presented\x20against\x20this\x20demand\x20yet.','items':a['presenters']['items']['map']((j,k)=>({'name':'#'+(k+0x1),...j['service']?{'ref':{'address':j['service'],'obj_type':'Service'}}:{},'meta':[...j['acceptance_score']!=null?[{'label':'acceptance','value':String(j['acceptance_score']),'tip':'The\x20demand\x20owner\x27s\x20acceptance\x20score\x20for\x20this\x20presenter\x20(from\x20the\x20presenter\x20table).'}]:[],...j['feedback']?[{'label':'feedback','value':j['feedback'],'tip':'The\x20demand\x20owner\x27s\x20feedback\x20note\x20for\x20this\x20presenter.'}]:[]],'note':j['recommend']??undefined}))};return{'action':'review_pack','object_type':'Demand','head':{'address':a['object'],'network':a['network'],'name':a['head']['name'],'description':a['head']['description'],'tags':a['head']['tags'],'last_active_ms':null,'badges':[],'info_rows':[c]},'sections':[d,e,g,h],'data_gaps':a['data_gaps']};}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{LocalMark,objectTypeFromAddress,ObjectType}from'@wowok/wowok';import{handleObjectPanorama}from'../playbooks/service-build/object-panorama.js';import{handleServicePanorama}from'../playbooks/service-build/service-panorama.js';import{handleMachinePanorama}from'../playbooks/service-build/machine-panorama.js';import{assembleOrderReview}from'./order.js';import{assembleServiceReview}from'./service.js';import{assembleMachineReview}from'./machine.js';import{assembleArbReview}from'./arb.js';import{assembleDemandReview}from'./demand.js';import{assembleRepositoryReview}from'./repository.js';import{assembleProgressReview}from'./progress.js';export const REVIEW_PACK_TYPES=['Order','Service','Arb','Demand','Repository','Progress','Machine'];export async function handleReviewPack(a){const b=a['object_address'];if(!b)throw new Error('\x27object_address\x27\x20is\x20required\x20for\x20review_pack');let c=b;if(!/^0x[0-9a-fA-F]{32,64}$/['test'](c)){const g=await LocalMark['Instance']()['get_address'](c);if(!g)throw new Error('Cannot\x20resolve\x20\x27'+c+'\x27\x20—\x20not\x20a\x20valid\x20address\x20and\x20no\x20LocalMark\x20entry\x20found.');c=g;}const d=objectTypeFromAddress(c);if(d===ObjectType['Order']){const h=await handleObjectPanorama(a);if(h['object_type']!=='Order')throw new Error('review_pack:\x20expected\x20an\x20Order,\x20resolved\x20to\x20'+h['object_type']);return assembleOrderReview(h);}if(d===ObjectType['Service']){const i=await handleServicePanorama({...a,'service_address':c});return assembleServiceReview(i);}if(d===ObjectType['Machine']){const j=await handleMachinePanorama({...a,'object_address':c});if(j['machineAddress']?.['toLowerCase']()!==c['toLowerCase']())throw new Error('review_pack:\x20expected\x20a\x20Machine,\x20resolved\x20to\x20'+j['machineAddress']);return assembleMachineReview(j);}const e={[ObjectType['Arb']]:assembleArbReview,[ObjectType['Demand']]:assembleDemandReview,[ObjectType['Repository']]:assembleRepositoryReview,[ObjectType['Progress']]:assembleProgressReview},f=d?e[d]:undefined;if(f){const k=await handleObjectPanorama(a);if(k['object_type']!==d)throw new Error('review_pack:\x20expected\x20a\x20'+d+',\x20resolved\x20to\x20'+k['object_type']);return f(k);}throw new Error('review_pack:\x20unsupported\x20object\x20type\x20\x27'+(d??'unknown')+'\x27\x20—\x20supported:\x20'+REVIEW_PACK_TYPES['join'](',\x20')+'.\x20Other\x20types\x20keep\x20object_panorama\x20/\x20machine_panorama\x20/\x20service_panorama.');}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function assembleMachineReview(a){const b=a['head'],c=a['fields'],d=a['graph']['nodes'],e=a['graph']['edges'],g=[b['published']===![]?{'v':'UNPUBLISHED','tone':'amber','tip':'Machine\x20is\x20not\x20published\x20—\x20a\x20draft\x20template;\x20orders\x20cannot\x20advance\x20through\x20it.'}:b['paused']?{'v':'PAUSED','tone':'red','tip':'Machine\x20is\x20paused\x20—\x20progress\x20objects\x20cannot\x20advance\x20until\x20it\x20is\x20resumed.'}:{'v':'LIVE','tone':'green','tip':'Machine\x20is\x20published\x20and\x20running\x20—\x20progress\x20objects\x20can\x20advance\x20through\x20its\x20workflow.'}],i=[{'label':'Nodes','tip':'Workflow\x20nodes\x20(stages)\x20defined\x20in\x20this\x20Machine.','value':{'t':'text','v':String(c['node_count']??d['length']),'tone':'strong'}},{'label':'Edges','tip':'Workflow\x20edges\x20(node\x20transitions)\x20defined\x20in\x20this\x20Machine.','value':{'t':'text','v':String(e['length']),'tone':'strong'}},{'label':'Progress','tip':'Progress\x20objects\x20currently\x20registered\x20under\x20this\x20Machine\x20in\x20the\x20global\x20tx\x20table\x20(click\x20for\x20the\x20list).','value':{'t':'count','n':a['progresses']['count'],'panel_title':'Progress','addrs':a['progresses']['items']['map'](m=>m['progress'])}}],j={'kind':'core','title':'Permission','rows':c['permission']?[{'label':'Permission','ref':{'address':c['permission'],'obj_type':'Permission'}}]:[]},k={'kind':'fields','columns':0x2,'fields':[{'label':'Published','tip':'YES\x20—\x20the\x20Machine\x20is\x20published\x20on-chain\x20and\x20can\x20accept\x20progress\x20objects.\x20no\x20—\x20still\x20a\x20draft\x20template;\x20orders\x20cannot\x20advance\x20through\x20it.','value':{'t':'text','v':b['published']==null?'unknown':b['published']?'YES':'no'}},{'label':'Paused','tip':b['paused']?'The\x20workflow\x20is\x20paused\x20—\x20progress\x20objects\x20cannot\x20advance\x20until\x20it\x20is\x20resumed.':'The\x20workflow\x20is\x20running\x20normally.','value':{'t':'text','v':b['paused']==null?'unknown':b['paused']?'YES':'no'}},{'label':'Node\x20count','tip':'Number\x20of\x20workflow\x20nodes\x20(stages)\x20defined\x20in\x20this\x20Machine.','value':{'t':'text','v':String(c['node_count']??d['length']),'tone':'strong'}},{'label':'Consensus\x20repositories','tip':'Repositories\x20consulted\x20for\x20machine\x20consensus\x20(evidence\x20/\x20data\x20verification).','value':{'t':'count','n':c['consensus_repositories']['length'],'panel_title':'Consensus\x20repositories','addrs':c['consensus_repositories']}},{'label':'UM','tip':'UM\x20(um:\x20Option<address>)\x20—\x20a\x20Contact\x20designated\x20as\x20this\x20Machine\x27s\x20customer-service\x20/\x20update\x20channel\x20(um_set\x20/\x20um_none).','value':c['um']?{'t':'addr','v':c['um'],'obj_type':'Contact'}:null}]},l={'kind':'graph','title':'Graph','empty':'No\x20workflow\x20topology\x20defined\x20for\x20this\x20Machine.','graph':{'machineAddress':a['machineAddress'],'machineName':b['name'],'published':b['published'],'paused':b['paused'],'nodes':d,'edges':e}};return{'action':'review_pack','object_type':'Machine','head':{'address':a['machineAddress'],'network':a['network'],'name':b['name'],'description':b['description'],'tags':b['tags'],'last_active_ms':null,'badges':g,'info_rows':[i]},'sections':[j,k,l],'data_gaps':a['data_gaps']};}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { OrderPanoramaResult } from "../playbooks/service-build/object-panorama.js";
|
|
2
|
+
import type { ReviewPack, ReviewRelatedGroup } from "./types.js";
|
|
3
|
+
export declare function fmtWow(v: string | null): string | null;
|
|
4
|
+
export declare function groupRelated(items: {
|
|
5
|
+
address: string;
|
|
6
|
+
object_type: string;
|
|
7
|
+
time: number | null;
|
|
8
|
+
}[]): ReviewRelatedGroup[];
|
|
9
|
+
export declare function assembleOrderReview(pano: OrderPanoramaResult): ReviewPack;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const WOW_DECIMALS=0x9;export function fmtWow(a){if(a===null||a===undefined||a==='')return null;try{const b=BigInt(a['trim']()),c=0xan**BigInt(WOW_DECIMALS),d=b/c,e=(b%c)['toString']()['padStart'](WOW_DECIMALS,'0')['slice'](0x0,0x4);return d['toString']()+'.'+e;}catch{return null;}}export function groupRelated(a){const b=new Map();for(const c of a){const d=c['object_type']||'Unknown',e=b['get'](d);if(e)e['push']({'address':c['address'],'time':c['time']});else b['set'](d,[{'address':c['address'],'time':c['time']}]);}return[...b['entries']()]['map'](([f,g])=>({'label':f,'items':g}))['sort']((f,g)=>(g['items'][0x0]?.['time']??0x0)-(f['items'][0x0]?.['time']??0x0));}export function assembleOrderReview(a){const b=a['fields'],c=fmtWow(b['amount']),d=[{'label':'Required\x20info','tip':'Buyer-submitted\x20private\x20info\x20(order.required_info,\x20set\x20via\x20required_info_update):\x20the\x20buyer\x27s\x20messenger\x20Contact\x20object\x20or\x20a\x20WTS\x20proof\x20id,\x20shared\x20with\x20the\x20merchant\x20to\x20satisfy\x20the\x20Service\x27s\x20customer\x20requirements.','value':b['required_info']?{'t':'addr','v':b['required_info']}:null},{'label':'Owner','tip':'The\x20account\x20that\x20created\x20(bought)\x20this\x20order\x20(order.owner)','value':b['owner']?{'t':'addr','v':b['owner']}:null},{'label':'Created\x20at','tip':'When\x20the\x20buyer\x20created\x20this\x20order\x20(order.time).\x20The\x20top-right\x20stamp\x20is\x20the\x20UPDATED\x20time\x20(last\x20on-chain\x20tx)\x20—\x20two\x20distinct\x20clocks.','value':b['time']!=null?{'t':'time','v':b['time']}:null}],e=[{'label':'Progress','value':{'t':'progress','v':b['progress']??'','node':a['progress_next'],'since':a['progress_since'],'machine':b['machine']??null}},{'label':'Disputes','tip':'Arbitration\x20objects\x20that\x20opened\x20a\x20dispute\x20on\x20this\x20order\x20(order.dispute,\x20max\x2010)','value':{'t':'count','n':a['disputes']['length'],'panel_title':'Disputes','addrs':a['disputes']}},...b['claimed_by']?[{'label':'Claimed\x20by','tip':'Compensation\x20claimant\x20—\x20the\x20Arbitration\x20object\x20that\x20claimed\x20the\x20order\x27s\x20compensation\x20(order.compensate).\x20Once\x20set,\x20the\x20order\x20can\x20no\x20longer\x20be\x20claimed\x20or\x20disputed.','value':{'t':'addr','v':b['claimed_by']}}]:[]],g={'kind':'items','title':'Bought\x20('+a['items']['length']+')','empty':'No\x20purchased\x20items\x20on\x20this\x20order\x20yet.','items':a['items']['map'](k=>({'name':k['name']??'--','meta':[{'label':'price','value':fmtWow(k['price'])??'--'},{'label':'qty','value':k['quantity']??'--'}],'hash':k['wip_hash']??null}))},h={'kind':'fields','columns':0x2,'fields':[{'label':'Service','tip':'The\x20Service\x20this\x20order\x20was\x20placed\x20against.','value':b['service']?{'t':'addr','v':b['service'],'obj_type':'Service'}:null},{'label':'Machine','tip':'The\x20Machine\x20workflow\x20template\x20this\x20order\x20runs\x20through.\x20Empty\x20for\x20machine-less\x20orders.','value':b['machine']?{'t':'addr','v':b['machine'],'obj_type':'Machine'}:null},{'label':'Discount','tip':'The\x20Discount\x20object\x20applied\x20to\x20this\x20order\x20at\x20purchase\x20time.','value':b['discount']?{'t':'addr','v':b['discount'],'obj_type':'Discount'}:null},{'label':'Agents','tip':'Operator\x20accounts\x20besides\x20the\x20owner\x20that\x20can\x20act\x20on\x20this\x20order.','value':{'t':'count','n':a['agents']['length'],'panel_title':'Agents','addrs':a['agents']}},{'label':'Allocation','tip':'The\x20fund-splitting\x20object\x20bound\x20to\x20this\x20order\x20(order.allocation).\x20Green\x20\x27allocated\x27\x20=\x20balance\x20==\x200,\x20fully\x20split\x20to\x20recipients\x20(allocation.alloc);\x20amber\x20\x27pending\x27\x20=\x20balance\x20>\x200.','value':b['allocation']?{'t':'addr','v':b['allocation'],'obj_type':'Allocation','badge':a['allocation_state']==='allocated'?{'v':'allocated','tone':'green'}:a['allocation_state']==='pending'?{'v':'pending','tone':'amber'}:undefined}:null},{'label':'Progress','tip':'The\x20Progress\x20object\x20tracking\x20this\x20order\x20through\x20the\x20machine\x20workflow\x20(order.progress);\x20its\x20latest\x20node\x20and\x20elapsed\x20time\x20show\x20on\x20the\x20header\x20card.','value':b['progress']?{'t':'addr','v':b['progress'],'obj_type':'Progress'}:null}]},i=a['related']?.['items']??[],j={'kind':'related','title':'Related\x20objects'+(a['related']?.['count']?'\x20('+a['related']['count']+')':''),'empty':'No\x20other\x20on-chain\x20objects\x20reference\x20or\x20use\x20this\x20Order\x20yet.','groups':groupRelated(i),'count':a['related']?.['count']??i['length']};return{'action':'review_pack','object_type':'Order','head':{'address':a['object'],'network':a['network'],'name':a['head']['name'],'description':a['head']['description'],'tags':a['head']['tags'],'last_active_ms':a['updated_ms'],'badges':[],...c!=null?{'amount':{'text':c+'\x20WOW','tip':'Order\x20amount\x20(payment\x20token:\x20WOW)'}}:{},'info_rows':[d,e]},'sections':[g,h,j],'data_gaps':a['data_gaps']};}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{groupRelated}from'./order.js';export function assembleProgressReview(a){const b=a['fields'],c=[{'label':'Machine','tip':'The\x20Machine\x20workflow\x20template\x20this\x20progress\x20runs\x20through\x20(progress.machine).','value':b['machine']?{'t':'addr','v':b['machine'],'obj_type':'Machine'}:null},{'label':'Current\x20node','tip':'The\x20workflow\x20node\x20this\x20progress\x20currently\x20sits\x20at\x20(progress.current).','value':b['current']?{'t':'text','v':b['current'],'tone':'strong'}:null},{'label':'Since','tip':'When\x20the\x20current\x20node\x20was\x20entered\x20(progress.current_time)\x20—\x20drives\x20the\x20elapsed\x20readout.','value':b['current_time']!=null?{'t':'time','v':b['current_time']}:null}],d={'kind':'fields','columns':0x2,'fields':[{'label':'Machine','tip':'The\x20Machine\x20workflow\x20template\x20this\x20progress\x20runs\x20through.','value':b['machine']?{'t':'addr','v':b['machine'],'obj_type':'Machine'}:null},{'label':'Current\x20node','tip':'The\x20workflow\x20node\x20this\x20progress\x20currently\x20sits\x20at.','value':b['current']?{'t':'text','v':b['current']}:null},{'label':'Task','tip':'The\x20Order\x20this\x20progress\x20is\x20working\x20on\x20(progress.task).','value':b['task']?{'t':'addr','v':b['task'],'obj_type':'Order'}:null},{'label':'History','tip':'Node-entry\x20records\x20kept\x20for\x20this\x20progress\x20(the\x20history\x20table\x27s\x20entry\x20count).','value':b['history_count']!=null?{'t':'text','v':String(b['history_count']),'tone':'strong'}:null},{'label':'Node\x20since','tip':'When\x20the\x20current\x20node\x20was\x20entered\x20(progress.current_time).','value':b['current_time']!=null?{'t':'time','v':b['current_time']}:null},{'label':'Context\x20repositories','tip':'Repositories\x20this\x20progress\x20may\x20consult\x20for\x20fulfillment\x20proofs\x20(machine\x20context\x20binding).','value':{'t':'count','n':a['context_repositories']['length'],'panel_title':'Context\x20repositories','addrs':a['context_repositories']}}]},e=a['session']?{'kind':'items','title':'Session\x20—\x20waiting\x20forwards\x20('+a['session']['forwards']['length']+')','empty':'No\x20live\x20session\x20—\x20this\x20progress\x20is\x20not\x20waiting\x20on\x20any\x20forward\x20approvals.','items':a['session']['forwards']['map']((j,k)=>({'name':'#'+(k+0x1)+'\x20'+j['forward'],...j['who']?{'ref':{'address':j['who'],'obj_type':'Account'}}:{},'meta':[...j['msg']?[{'label':'msg','value':j['msg'],'tip':'The\x20message\x20attached\x20to\x20this\x20forward.'}]:[]],'badge':j['accomplished']?{'v':'accomplished','tone':'green'}:{'v':'waiting','tone':'amber'}}))}:null,g={'kind':'items','title':'Operators\x20('+a['operators']['length']+')','empty':'No\x20named\x20operators\x20—\x20forwards\x20are\x20gated\x20by\x20the\x20machine\x27s\x20rules\x20only.','items':a['operators']['map']((j,k)=>({'name':'#'+(k+0x1)+'\x20'+j['name'],'meta':[...j['operators']['length']>0x0?[{'label':'accounts','value':String(j['operators']['length']),'tip':'Accounts\x20designated\x20under\x20this\x20operator\x20name\x20(machine.named_operator).'}]:[]]}))},h=a['related']?.['items']??[],i={'kind':'related','title':'Related\x20objects'+(a['related']?.['count']?'\x20('+a['related']['count']+')':''),'empty':a['related']?.['key']?'No\x20other\x20on-chain\x20objects\x20are\x20related\x20to\x20this\x20Progress\x20yet.':'Related\x20objects\x20unavailable\x20—\x20the\x20machine\x20bound\x20to\x20this\x20Progress\x20is\x20unresolved,\x20so\x20sibling\x20progresses\x20cannot\x20be\x20listed.','groups':groupRelated(h),'count':a['related']?.['count']??h['length']};return{'action':'review_pack','object_type':'Progress','head':{'address':a['object'],'network':a['network'],'name':a['head']['name'],'description':a['head']['description'],'tags':a['head']['tags'],'last_active_ms':b['current_time'],'badges':[],'info_rows':[c]},'sections':[d,...e?[e]:[],g,i],'data_gaps':a['data_gaps']};}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function assembleRepositoryReview(a){const b=a['fields'],c=[{'label':'Data','tip':'Records\x20stored\x20in\x20this\x20repository\x27s\x20on-chain\x20table\x20(ParentTable<DataKey,\x20vector<u8>>).','value':b['data_count']!=null?{'t':'text','v':String(b['data_count']),'tone':'strong'}:null}],d={'kind':'core','title':'Permission','rows':b['permission']?[{'label':'Permission','ref':{'address':b['permission'],'obj_type':'Permission'}}]:[]},e={'kind':'items','title':'Policies\x20('+a['policies']['length']+')','empty':'No\x20write\x20policies\x20—\x20the\x20repository\x20accepts\x20no\x20governed\x20data\x20writes.','items':a['policies']['map']((j,k)=>({'name':'#'+(k+0x1)+'\x20'+j['name'],'meta':[...j['id_from']!=null?[{'label':'id\x20from','value':String(j['id_from']),'tip':'The\x20passport\x20submission\x20field\x20the\x20record\x20id\x20is\x20taken\x20from.'}]:[],...j['value_type']!=null?[{'label':'value\x20type','value':String(j['value_type']),'tip':'The\x20BCS\x20value\x20type\x20data\x20writes\x20must\x20match.'}]:[],{'label':'write\x20guards','value':String(j['write_guards']),'tip':'Guards\x20that\x20must\x20pass\x20before\x20a\x20data\x20write\x20under\x20this\x20policy\x20is\x20accepted.'},...j['quote_guard']?[{'label':'quote','value':j['quote_guard'],'tip':'The\x20guard\x20consulted\x20when\x20quoting\x20this\x20policy\x27s\x20data.'}]:[]],'note':j['description']??undefined}))},g={'kind':'items','title':'Rewards\x20('+a['rewards']['length']+')','empty':'No\x20Reward\x20objects\x20back\x20this\x20Repository\x20yet.','items':a['rewards']['map']((j,k)=>({'name':'#'+(k+0x1),'ref':{'address':j,'obj_type':'Reward'},'meta':[]}))},h={'kind':'fields','columns':0x2,'fields':[{'label':'UM','tip':'Update\x20Manager\x20(repository.um)\x20—\x20a\x20Contact\x20designated\x20as\x20this\x20Repository\x27s\x20customer-service\x20/\x20update\x20channel.','value':b['um']?{'t':'addr','v':b['um'],'obj_type':'Contact'}:null},{'label':'Permission','tip':'The\x20Permission\x20list\x20gating\x20administration\x20operations\x20(description\x20/\x20policies\x20/\x20rewards\x20/\x20owner_receive\x20/\x20um).','value':b['permission']?{'t':'addr','v':b['permission'],'obj_type':'Permission'}:null},{'label':'Data','tip':'Records\x20stored\x20in\x20this\x20repository\x27s\x20on-chain\x20table.','value':b['data_count']!=null?{'t':'text','v':String(b['data_count']),'tone':'strong'}:null}]};return{'action':'review_pack','object_type':'Repository','head':{'address':a['object'],'network':a['network'],'name':a['head']['name'],'description':a['head']['description'],'tags':a['head']['tags'],'last_active_ms':null,'badges':[],'info_rows':[c]},'sections':[d,e,g,h],'data_gaps':a['data_gaps']};}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ServicePanoramaResult } from "../playbooks/service-build/service-panorama.js";
|
|
2
|
+
import type { ReviewPack } from "./types.js";
|
|
3
|
+
export declare function shortHex(a: string): string;
|
|
4
|
+
export declare function fmtDuration(ms: string | number | null | undefined): string;
|
|
5
|
+
export declare function assembleServiceReview(pano: ServicePanoramaResult): ReviewPack;
|