feat: 建立 HoloLake 编号通信根与人格第零层合同
This commit is contained in:
parent
7a14c06e41
commit
64abf969bf
37 changed files with 3455 additions and 161 deletions
|
|
@ -0,0 +1,922 @@
|
|||
{
|
||||
"schema": "hololake.numbered-ipc-registry/v1",
|
||||
"record_id": "HLP-NUMBERED-IPC-ROOT-001",
|
||||
"source": {
|
||||
"baseline_commit": "7a14c06e41587c4c5a08a43bb4f5a172fa61b7fa",
|
||||
"gls_runtime_manifest": "HLP-GLS-RUNTIME-MANIFEST-002",
|
||||
"gls_native_kernel": "HLP-GLS-NATIVE-RUNTIME-KERNEL-001",
|
||||
"numbering_authority_map": "GH-IDENTITY-AUTHORITY-MAP-001",
|
||||
"human_language_anchor": "source://codex-current-dialogue/2026-08-18/bingshuo-number-is-path-and-mismatched-routes-are-unrecognizable"
|
||||
},
|
||||
"runtime": {
|
||||
"public_tauri_command": "numbered_ipc",
|
||||
"caller_number": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"caller_number_subject_kind": "PHYSICAL_WEBVIEW_ENTRY_NOT_PERSONA_IDENTITY",
|
||||
"caller_number_grants_persona_binding": false,
|
||||
"protocol_version": "HLP-NIPC-v1",
|
||||
"legacy_direct_commands_allowed": false,
|
||||
"grants_issued_server_side": true,
|
||||
"grant_single_use": true,
|
||||
"payload_bound_grants": true,
|
||||
"authority_binding_issued_server_side": true,
|
||||
"verified_human_binding_required_for_protected_routes": true,
|
||||
"persona_binding_claimed": false,
|
||||
"user_channel_body_binding_stage": "SEPARATE_EVIDENCE_LAYER_NOT_YET_CLAIMED",
|
||||
"maximum_grant_ttl_ms": 30000,
|
||||
"unknown_route": "FAIL_CLOSED",
|
||||
"mismatched_coordinate": "FAIL_CLOSED",
|
||||
"expired_or_replayed_grant": "FAIL_CLOSED",
|
||||
"receipt_required": true
|
||||
},
|
||||
"payload_contract": {
|
||||
"unknown_or_unclassified_alias": "FAIL_CLOSED_BEFORE_GRANT",
|
||||
"unknown_top_level_field": "FAIL_CLOSED_BEFORE_GRANT",
|
||||
"empty_object_aliases": [
|
||||
"get_hololake_home_status",
|
||||
"check_hololake_update",
|
||||
"get_hololake_release_recovery_status",
|
||||
"confirm_hololake_release_health",
|
||||
"rollback_hololake_update",
|
||||
"get_nearby_ai_discovery",
|
||||
"get_gls_protocol_runtime",
|
||||
"get_gls_protocol_kernel",
|
||||
"get_personal_channel_snapshot",
|
||||
"start_persona_time_authority",
|
||||
"get_beijing_time_coordinate",
|
||||
"get_guanghu_era_timeline",
|
||||
"get_knowledge_snapshot",
|
||||
"select_and_import_knowledge_folder",
|
||||
"print_knowledge_document",
|
||||
"get_code_channel_snapshot",
|
||||
"select_local_code_channel",
|
||||
"select_pncc_repository_candidate",
|
||||
"query_jd_pncc_server_projection",
|
||||
"check_code_repo_login",
|
||||
"get_enterprise_entry",
|
||||
"ensure_enterprise_work_channel",
|
||||
"sign_out_code_repo_login",
|
||||
"get_user_pncc_channel",
|
||||
"ensure_user_pncc_channel",
|
||||
"get_zero_core_numbering_kernel",
|
||||
"zero_point_verify",
|
||||
"zero_point_sync",
|
||||
"zero_point_status"
|
||||
],
|
||||
"input_wrapper_aliases": [
|
||||
"confirm_hololake_update_install",
|
||||
"issue_direct_local_discovery_ticket",
|
||||
"open_direct_local_session",
|
||||
"resume_direct_local_session",
|
||||
"append_direct_local_session_event",
|
||||
"heartbeat_direct_local_session",
|
||||
"decide_gls_protocol",
|
||||
"compile_gls_hldp_program",
|
||||
"acquire_development_write_lane",
|
||||
"inspect_development_write_lane",
|
||||
"release_development_write_lane",
|
||||
"initialize_personal_channel",
|
||||
"create_personal_channel_task",
|
||||
"transition_personal_channel_task",
|
||||
"issue_persona_time_ticket",
|
||||
"read_knowledge_document",
|
||||
"search_knowledge",
|
||||
"save_knowledge_document",
|
||||
"export_knowledge_document",
|
||||
"create_knowledge_document",
|
||||
"delete_knowledge_document",
|
||||
"delete_knowledge_folder",
|
||||
"clone_code_channel",
|
||||
"browse_code_channel",
|
||||
"read_code_channel_file",
|
||||
"inspect_mounted_pncc_repository",
|
||||
"confirm_pncc_repository_mount",
|
||||
"query_pncc_receipt_projection",
|
||||
"zero_point_bind"
|
||||
],
|
||||
"direct_field_aliases": {
|
||||
"perform_code_repo_login": [
|
||||
"username",
|
||||
"password"
|
||||
],
|
||||
"change_first_login_password": [
|
||||
"username",
|
||||
"currentPassword",
|
||||
"newPassword"
|
||||
],
|
||||
"confirm_enterprise_persona_relationship": [
|
||||
"decision",
|
||||
"idempotencyKey"
|
||||
],
|
||||
"submit_enterprise_responsibility_receipt": [
|
||||
"decision",
|
||||
"note",
|
||||
"responsibilityVersion",
|
||||
"idempotencyKey"
|
||||
]
|
||||
}
|
||||
},
|
||||
"channels": [
|
||||
{
|
||||
"id": "HLP-NIPC-CH-0001"
|
||||
},
|
||||
{
|
||||
"id": "HLP-NIPC-CH-0003"
|
||||
},
|
||||
{
|
||||
"id": "HLP-NIPC-CH-0004"
|
||||
},
|
||||
{
|
||||
"id": "HLP-NIPC-CH-0002"
|
||||
},
|
||||
{
|
||||
"id": "HLP-NIPC-CH-0005"
|
||||
},
|
||||
{
|
||||
"id": "HLP-NIPC-CH-0006"
|
||||
},
|
||||
{
|
||||
"id": "HLP-NIPC-CH-0007"
|
||||
}
|
||||
],
|
||||
"modules": [
|
||||
{
|
||||
"module_number": "HLP-NIPC-MOD-0001",
|
||||
"target_number": "HLP-NIPC-TGT-0001",
|
||||
"internal_name": "home_status"
|
||||
},
|
||||
{
|
||||
"module_number": "HLP-NIPC-MOD-0002",
|
||||
"target_number": "HLP-NIPC-TGT-0002",
|
||||
"internal_name": "release_update"
|
||||
},
|
||||
{
|
||||
"module_number": "HLP-NIPC-MOD-0003",
|
||||
"target_number": "HLP-NIPC-TGT-0003",
|
||||
"internal_name": "direct_local_session"
|
||||
},
|
||||
{
|
||||
"module_number": "HLP-NIPC-MOD-0004",
|
||||
"target_number": "HLP-NIPC-TGT-0004",
|
||||
"internal_name": "direct_local_broker"
|
||||
},
|
||||
{
|
||||
"module_number": "HLP-NIPC-MOD-0005",
|
||||
"target_number": "HLP-NIPC-TGT-0005",
|
||||
"internal_name": "gls_protocol_runtime"
|
||||
},
|
||||
{
|
||||
"module_number": "HLP-NIPC-MOD-0006",
|
||||
"target_number": "HLP-NIPC-TGT-0006",
|
||||
"internal_name": "gls_protocol_kernel"
|
||||
},
|
||||
{
|
||||
"module_number": "HLP-NIPC-MOD-0007",
|
||||
"target_number": "HLP-NIPC-TGT-0007",
|
||||
"internal_name": "local_development_bridge"
|
||||
},
|
||||
{
|
||||
"module_number": "HLP-NIPC-MOD-0008",
|
||||
"target_number": "HLP-NIPC-TGT-0008",
|
||||
"internal_name": "personal_channel"
|
||||
},
|
||||
{
|
||||
"module_number": "HLP-NIPC-MOD-0009",
|
||||
"target_number": "HLP-NIPC-TGT-0009",
|
||||
"internal_name": "persona_time_authority"
|
||||
},
|
||||
{
|
||||
"module_number": "HLP-NIPC-MOD-0010",
|
||||
"target_number": "HLP-NIPC-TGT-0010",
|
||||
"internal_name": "knowledge_base"
|
||||
},
|
||||
{
|
||||
"module_number": "HLP-NIPC-MOD-0011",
|
||||
"target_number": "HLP-NIPC-TGT-0011",
|
||||
"internal_name": "code_channel"
|
||||
},
|
||||
{
|
||||
"module_number": "HLP-NIPC-MOD-0012",
|
||||
"target_number": "HLP-NIPC-TGT-0012",
|
||||
"internal_name": "pncc_repository_binding"
|
||||
},
|
||||
{
|
||||
"module_number": "HLP-NIPC-MOD-0013",
|
||||
"target_number": "HLP-NIPC-TGT-0013",
|
||||
"internal_name": "pncc_receipt_projection"
|
||||
},
|
||||
{
|
||||
"module_number": "HLP-NIPC-MOD-0014",
|
||||
"target_number": "HLP-NIPC-TGT-0014",
|
||||
"internal_name": "pncc_server_projection"
|
||||
},
|
||||
{
|
||||
"module_number": "HLP-NIPC-MOD-0015",
|
||||
"target_number": "HLP-NIPC-TGT-0015",
|
||||
"internal_name": "code_repo_login"
|
||||
},
|
||||
{
|
||||
"module_number": "HLP-NIPC-MOD-0016",
|
||||
"target_number": "HLP-NIPC-TGT-0016",
|
||||
"internal_name": "enterprise_work_channel"
|
||||
},
|
||||
{
|
||||
"module_number": "HLP-NIPC-MOD-0017",
|
||||
"target_number": "HLP-NIPC-TGT-0017",
|
||||
"internal_name": "user_pncc_channel"
|
||||
},
|
||||
{
|
||||
"module_number": "HLP-NIPC-MOD-0018",
|
||||
"target_number": "HLP-NIPC-TGT-0018",
|
||||
"internal_name": "zero_core_numbering"
|
||||
},
|
||||
{
|
||||
"module_number": "HLP-NIPC-MOD-0019",
|
||||
"target_number": "HLP-NIPC-TGT-0019",
|
||||
"internal_name": "zero_point"
|
||||
}
|
||||
],
|
||||
"operations": [
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0001",
|
||||
"alias": "get_hololake_home_status",
|
||||
"handler": "home_status::get_hololake_home_status",
|
||||
"channel_number": "HLP-NIPC-CH-0001",
|
||||
"module_number": "HLP-NIPC-MOD-0001",
|
||||
"target_number": "HLP-NIPC-TGT-0001",
|
||||
"admission": "PREAUTH_SYSTEM_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/get_hololake_home_status/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0002",
|
||||
"alias": "check_hololake_update",
|
||||
"handler": "release_update::check_hololake_update",
|
||||
"channel_number": "HLP-NIPC-CH-0001",
|
||||
"module_number": "HLP-NIPC-MOD-0002",
|
||||
"target_number": "HLP-NIPC-TGT-0002",
|
||||
"admission": "PREAUTH_SYSTEM_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/check_hololake_update/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0003",
|
||||
"alias": "confirm_hololake_update_install",
|
||||
"handler": "release_update::confirm_hololake_update_install",
|
||||
"channel_number": "HLP-NIPC-CH-0001",
|
||||
"module_number": "HLP-NIPC-MOD-0002",
|
||||
"target_number": "HLP-NIPC-TGT-0002",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/confirm_hololake_update_install/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0004",
|
||||
"alias": "get_hololake_release_recovery_status",
|
||||
"handler": "release_update::get_hololake_release_recovery_status",
|
||||
"channel_number": "HLP-NIPC-CH-0001",
|
||||
"module_number": "HLP-NIPC-MOD-0002",
|
||||
"target_number": "HLP-NIPC-TGT-0002",
|
||||
"admission": "PREAUTH_SYSTEM_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/get_hololake_release_recovery_status/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0005",
|
||||
"alias": "confirm_hololake_release_health",
|
||||
"handler": "release_update::confirm_hololake_release_health",
|
||||
"channel_number": "HLP-NIPC-CH-0001",
|
||||
"module_number": "HLP-NIPC-MOD-0002",
|
||||
"target_number": "HLP-NIPC-TGT-0002",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/confirm_hololake_release_health/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0006",
|
||||
"alias": "rollback_hololake_update",
|
||||
"handler": "release_update::rollback_hololake_update",
|
||||
"channel_number": "HLP-NIPC-CH-0001",
|
||||
"module_number": "HLP-NIPC-MOD-0002",
|
||||
"target_number": "HLP-NIPC-TGT-0002",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/rollback_hololake_update/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0007",
|
||||
"alias": "issue_direct_local_discovery_ticket",
|
||||
"handler": "direct_local_session::issue_direct_local_discovery_ticket",
|
||||
"channel_number": "HLP-NIPC-CH-0003",
|
||||
"module_number": "HLP-NIPC-MOD-0003",
|
||||
"target_number": "HLP-NIPC-TGT-0003",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/issue_direct_local_discovery_ticket/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0008",
|
||||
"alias": "open_direct_local_session",
|
||||
"handler": "direct_local_session::open_direct_local_session",
|
||||
"channel_number": "HLP-NIPC-CH-0003",
|
||||
"module_number": "HLP-NIPC-MOD-0003",
|
||||
"target_number": "HLP-NIPC-TGT-0003",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/open_direct_local_session/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0009",
|
||||
"alias": "resume_direct_local_session",
|
||||
"handler": "direct_local_session::resume_direct_local_session",
|
||||
"channel_number": "HLP-NIPC-CH-0003",
|
||||
"module_number": "HLP-NIPC-MOD-0003",
|
||||
"target_number": "HLP-NIPC-TGT-0003",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/resume_direct_local_session/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0010",
|
||||
"alias": "append_direct_local_session_event",
|
||||
"handler": "direct_local_session::append_direct_local_session_event",
|
||||
"channel_number": "HLP-NIPC-CH-0003",
|
||||
"module_number": "HLP-NIPC-MOD-0003",
|
||||
"target_number": "HLP-NIPC-TGT-0003",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/append_direct_local_session_event/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0011",
|
||||
"alias": "heartbeat_direct_local_session",
|
||||
"handler": "direct_local_session::heartbeat_direct_local_session",
|
||||
"channel_number": "HLP-NIPC-CH-0003",
|
||||
"module_number": "HLP-NIPC-MOD-0003",
|
||||
"target_number": "HLP-NIPC-TGT-0003",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/heartbeat_direct_local_session/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0012",
|
||||
"alias": "get_nearby_ai_discovery",
|
||||
"handler": "direct_local_broker::get_nearby_ai_discovery",
|
||||
"channel_number": "HLP-NIPC-CH-0003",
|
||||
"module_number": "HLP-NIPC-MOD-0004",
|
||||
"target_number": "HLP-NIPC-TGT-0004",
|
||||
"admission": "PREAUTH_SYSTEM_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/get_nearby_ai_discovery/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0013",
|
||||
"alias": "get_gls_protocol_runtime",
|
||||
"handler": "gls_protocol_runtime::get_gls_protocol_runtime",
|
||||
"channel_number": "HLP-NIPC-CH-0001",
|
||||
"module_number": "HLP-NIPC-MOD-0005",
|
||||
"target_number": "HLP-NIPC-TGT-0005",
|
||||
"admission": "PREAUTH_SYSTEM_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/get_gls_protocol_runtime/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0014",
|
||||
"alias": "get_gls_protocol_kernel",
|
||||
"handler": "gls_protocol_kernel::get_gls_protocol_kernel",
|
||||
"channel_number": "HLP-NIPC-CH-0001",
|
||||
"module_number": "HLP-NIPC-MOD-0006",
|
||||
"target_number": "HLP-NIPC-TGT-0006",
|
||||
"admission": "PREAUTH_SYSTEM_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/get_gls_protocol_kernel/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0015",
|
||||
"alias": "decide_gls_protocol",
|
||||
"handler": "gls_protocol_kernel::decide_gls_protocol",
|
||||
"channel_number": "HLP-NIPC-CH-0001",
|
||||
"module_number": "HLP-NIPC-MOD-0006",
|
||||
"target_number": "HLP-NIPC-TGT-0006",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/decide_gls_protocol/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0016",
|
||||
"alias": "compile_gls_hldp_program",
|
||||
"handler": "gls_protocol_kernel::compile_gls_hldp_program",
|
||||
"channel_number": "HLP-NIPC-CH-0001",
|
||||
"module_number": "HLP-NIPC-MOD-0006",
|
||||
"target_number": "HLP-NIPC-TGT-0006",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/compile_gls_hldp_program/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0017",
|
||||
"alias": "acquire_development_write_lane",
|
||||
"handler": "local_development_bridge::acquire_development_write_lane",
|
||||
"channel_number": "HLP-NIPC-CH-0004",
|
||||
"module_number": "HLP-NIPC-MOD-0007",
|
||||
"target_number": "HLP-NIPC-TGT-0007",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/acquire_development_write_lane/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0018",
|
||||
"alias": "inspect_development_write_lane",
|
||||
"handler": "local_development_bridge::inspect_development_write_lane",
|
||||
"channel_number": "HLP-NIPC-CH-0004",
|
||||
"module_number": "HLP-NIPC-MOD-0007",
|
||||
"target_number": "HLP-NIPC-TGT-0007",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/inspect_development_write_lane/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0019",
|
||||
"alias": "release_development_write_lane",
|
||||
"handler": "local_development_bridge::release_development_write_lane",
|
||||
"channel_number": "HLP-NIPC-CH-0004",
|
||||
"module_number": "HLP-NIPC-MOD-0007",
|
||||
"target_number": "HLP-NIPC-TGT-0007",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/release_development_write_lane/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0020",
|
||||
"alias": "get_personal_channel_snapshot",
|
||||
"handler": "personal_channel::get_personal_channel_snapshot",
|
||||
"channel_number": "HLP-NIPC-CH-0002",
|
||||
"module_number": "HLP-NIPC-MOD-0008",
|
||||
"target_number": "HLP-NIPC-TGT-0008",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/get_personal_channel_snapshot/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0021",
|
||||
"alias": "initialize_personal_channel",
|
||||
"handler": "personal_channel::initialize_personal_channel",
|
||||
"channel_number": "HLP-NIPC-CH-0002",
|
||||
"module_number": "HLP-NIPC-MOD-0008",
|
||||
"target_number": "HLP-NIPC-TGT-0008",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/initialize_personal_channel/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0022",
|
||||
"alias": "create_personal_channel_task",
|
||||
"handler": "personal_channel::create_personal_channel_task",
|
||||
"channel_number": "HLP-NIPC-CH-0002",
|
||||
"module_number": "HLP-NIPC-MOD-0008",
|
||||
"target_number": "HLP-NIPC-TGT-0008",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/create_personal_channel_task/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0023",
|
||||
"alias": "transition_personal_channel_task",
|
||||
"handler": "personal_channel::transition_personal_channel_task",
|
||||
"channel_number": "HLP-NIPC-CH-0002",
|
||||
"module_number": "HLP-NIPC-MOD-0008",
|
||||
"target_number": "HLP-NIPC-TGT-0008",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/transition_personal_channel_task/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0024",
|
||||
"alias": "issue_persona_time_ticket",
|
||||
"handler": "persona_time_authority::issue_persona_time_ticket",
|
||||
"channel_number": "HLP-NIPC-CH-0001",
|
||||
"module_number": "HLP-NIPC-MOD-0009",
|
||||
"target_number": "HLP-NIPC-TGT-0009",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/issue_persona_time_ticket/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0025",
|
||||
"alias": "start_persona_time_authority",
|
||||
"handler": "persona_time_authority::start_persona_time_authority",
|
||||
"channel_number": "HLP-NIPC-CH-0001",
|
||||
"module_number": "HLP-NIPC-MOD-0009",
|
||||
"target_number": "HLP-NIPC-TGT-0009",
|
||||
"admission": "PREAUTH_SYSTEM_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/start_persona_time_authority/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0026",
|
||||
"alias": "get_beijing_time_coordinate",
|
||||
"handler": "persona_time_authority::get_beijing_time_coordinate",
|
||||
"channel_number": "HLP-NIPC-CH-0001",
|
||||
"module_number": "HLP-NIPC-MOD-0009",
|
||||
"target_number": "HLP-NIPC-TGT-0009",
|
||||
"admission": "PREAUTH_SYSTEM_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/get_beijing_time_coordinate/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0027",
|
||||
"alias": "get_guanghu_era_timeline",
|
||||
"handler": "persona_time_authority::get_guanghu_era_timeline",
|
||||
"channel_number": "HLP-NIPC-CH-0001",
|
||||
"module_number": "HLP-NIPC-MOD-0009",
|
||||
"target_number": "HLP-NIPC-TGT-0009",
|
||||
"admission": "PREAUTH_SYSTEM_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/get_guanghu_era_timeline/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0028",
|
||||
"alias": "get_knowledge_snapshot",
|
||||
"handler": "knowledge_base::get_knowledge_snapshot",
|
||||
"channel_number": "HLP-NIPC-CH-0002",
|
||||
"module_number": "HLP-NIPC-MOD-0010",
|
||||
"target_number": "HLP-NIPC-TGT-0010",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/get_knowledge_snapshot/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0029",
|
||||
"alias": "read_knowledge_document",
|
||||
"handler": "knowledge_base::read_knowledge_document",
|
||||
"channel_number": "HLP-NIPC-CH-0002",
|
||||
"module_number": "HLP-NIPC-MOD-0010",
|
||||
"target_number": "HLP-NIPC-TGT-0010",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/read_knowledge_document/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0030",
|
||||
"alias": "search_knowledge",
|
||||
"handler": "knowledge_base::search_knowledge",
|
||||
"channel_number": "HLP-NIPC-CH-0002",
|
||||
"module_number": "HLP-NIPC-MOD-0010",
|
||||
"target_number": "HLP-NIPC-TGT-0010",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/search_knowledge/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0031",
|
||||
"alias": "save_knowledge_document",
|
||||
"handler": "knowledge_base::save_knowledge_document",
|
||||
"channel_number": "HLP-NIPC-CH-0002",
|
||||
"module_number": "HLP-NIPC-MOD-0010",
|
||||
"target_number": "HLP-NIPC-TGT-0010",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/save_knowledge_document/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0032",
|
||||
"alias": "select_and_import_knowledge_folder",
|
||||
"handler": "knowledge_base::select_and_import_knowledge_folder",
|
||||
"channel_number": "HLP-NIPC-CH-0002",
|
||||
"module_number": "HLP-NIPC-MOD-0010",
|
||||
"target_number": "HLP-NIPC-TGT-0010",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/select_and_import_knowledge_folder/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0033",
|
||||
"alias": "export_knowledge_document",
|
||||
"handler": "knowledge_base::export_knowledge_document",
|
||||
"channel_number": "HLP-NIPC-CH-0002",
|
||||
"module_number": "HLP-NIPC-MOD-0010",
|
||||
"target_number": "HLP-NIPC-TGT-0010",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/export_knowledge_document/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0034",
|
||||
"alias": "create_knowledge_document",
|
||||
"handler": "knowledge_base::create_knowledge_document",
|
||||
"channel_number": "HLP-NIPC-CH-0002",
|
||||
"module_number": "HLP-NIPC-MOD-0010",
|
||||
"target_number": "HLP-NIPC-TGT-0010",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/create_knowledge_document/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0035",
|
||||
"alias": "delete_knowledge_document",
|
||||
"handler": "knowledge_base::delete_knowledge_document",
|
||||
"channel_number": "HLP-NIPC-CH-0002",
|
||||
"module_number": "HLP-NIPC-MOD-0010",
|
||||
"target_number": "HLP-NIPC-TGT-0010",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/delete_knowledge_document/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0036",
|
||||
"alias": "delete_knowledge_folder",
|
||||
"handler": "knowledge_base::delete_knowledge_folder",
|
||||
"channel_number": "HLP-NIPC-CH-0002",
|
||||
"module_number": "HLP-NIPC-MOD-0010",
|
||||
"target_number": "HLP-NIPC-TGT-0010",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/delete_knowledge_folder/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0037",
|
||||
"alias": "print_knowledge_document",
|
||||
"handler": "knowledge_base::print_knowledge_document",
|
||||
"channel_number": "HLP-NIPC-CH-0002",
|
||||
"module_number": "HLP-NIPC-MOD-0010",
|
||||
"target_number": "HLP-NIPC-TGT-0010",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/print_knowledge_document/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0038",
|
||||
"alias": "get_code_channel_snapshot",
|
||||
"handler": "code_channel::get_code_channel_snapshot",
|
||||
"channel_number": "HLP-NIPC-CH-0002",
|
||||
"module_number": "HLP-NIPC-MOD-0011",
|
||||
"target_number": "HLP-NIPC-TGT-0011",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/get_code_channel_snapshot/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0039",
|
||||
"alias": "clone_code_channel",
|
||||
"handler": "code_channel::clone_code_channel",
|
||||
"channel_number": "HLP-NIPC-CH-0002",
|
||||
"module_number": "HLP-NIPC-MOD-0011",
|
||||
"target_number": "HLP-NIPC-TGT-0011",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/clone_code_channel/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0040",
|
||||
"alias": "select_local_code_channel",
|
||||
"handler": "code_channel::select_local_code_channel",
|
||||
"channel_number": "HLP-NIPC-CH-0002",
|
||||
"module_number": "HLP-NIPC-MOD-0011",
|
||||
"target_number": "HLP-NIPC-TGT-0011",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/select_local_code_channel/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0041",
|
||||
"alias": "browse_code_channel",
|
||||
"handler": "code_channel::browse_code_channel",
|
||||
"channel_number": "HLP-NIPC-CH-0002",
|
||||
"module_number": "HLP-NIPC-MOD-0011",
|
||||
"target_number": "HLP-NIPC-TGT-0011",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/browse_code_channel/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0042",
|
||||
"alias": "read_code_channel_file",
|
||||
"handler": "code_channel::read_code_channel_file",
|
||||
"channel_number": "HLP-NIPC-CH-0002",
|
||||
"module_number": "HLP-NIPC-MOD-0011",
|
||||
"target_number": "HLP-NIPC-TGT-0011",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/read_code_channel_file/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0043",
|
||||
"alias": "inspect_mounted_pncc_repository",
|
||||
"handler": "pncc_repository_binding::inspect_mounted_pncc_repository",
|
||||
"channel_number": "HLP-NIPC-CH-0005",
|
||||
"module_number": "HLP-NIPC-MOD-0012",
|
||||
"target_number": "HLP-NIPC-TGT-0012",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/inspect_mounted_pncc_repository/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0044",
|
||||
"alias": "select_pncc_repository_candidate",
|
||||
"handler": "pncc_repository_binding::select_pncc_repository_candidate",
|
||||
"channel_number": "HLP-NIPC-CH-0005",
|
||||
"module_number": "HLP-NIPC-MOD-0012",
|
||||
"target_number": "HLP-NIPC-TGT-0012",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/select_pncc_repository_candidate/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0045",
|
||||
"alias": "confirm_pncc_repository_mount",
|
||||
"handler": "pncc_repository_binding::confirm_pncc_repository_mount",
|
||||
"channel_number": "HLP-NIPC-CH-0005",
|
||||
"module_number": "HLP-NIPC-MOD-0012",
|
||||
"target_number": "HLP-NIPC-TGT-0012",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/confirm_pncc_repository_mount/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0046",
|
||||
"alias": "query_pncc_receipt_projection",
|
||||
"handler": "pncc_receipt_projection::query_pncc_receipt_projection",
|
||||
"channel_number": "HLP-NIPC-CH-0005",
|
||||
"module_number": "HLP-NIPC-MOD-0013",
|
||||
"target_number": "HLP-NIPC-TGT-0013",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/query_pncc_receipt_projection/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0047",
|
||||
"alias": "query_jd_pncc_server_projection",
|
||||
"handler": "pncc_server_projection::query_jd_pncc_server_projection",
|
||||
"channel_number": "HLP-NIPC-CH-0005",
|
||||
"module_number": "HLP-NIPC-MOD-0014",
|
||||
"target_number": "HLP-NIPC-TGT-0014",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/query_jd_pncc_server_projection/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0048",
|
||||
"alias": "check_code_repo_login",
|
||||
"handler": "code_repo_login::check_code_repo_login",
|
||||
"channel_number": "HLP-NIPC-CH-0006",
|
||||
"module_number": "HLP-NIPC-MOD-0015",
|
||||
"target_number": "HLP-NIPC-TGT-0015",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/check_code_repo_login/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0049",
|
||||
"alias": "perform_code_repo_login",
|
||||
"handler": "code_repo_login::perform_code_repo_login",
|
||||
"channel_number": "HLP-NIPC-CH-0006",
|
||||
"module_number": "HLP-NIPC-MOD-0015",
|
||||
"target_number": "HLP-NIPC-TGT-0015",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/perform_code_repo_login/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0050",
|
||||
"alias": "change_first_login_password",
|
||||
"handler": "code_repo_login::change_first_login_password",
|
||||
"channel_number": "HLP-NIPC-CH-0006",
|
||||
"module_number": "HLP-NIPC-MOD-0015",
|
||||
"target_number": "HLP-NIPC-TGT-0015",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/change_first_login_password/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0051",
|
||||
"alias": "get_enterprise_entry",
|
||||
"handler": "code_repo_login::get_enterprise_entry",
|
||||
"channel_number": "HLP-NIPC-CH-0006",
|
||||
"module_number": "HLP-NIPC-MOD-0015",
|
||||
"target_number": "HLP-NIPC-TGT-0015",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/get_enterprise_entry/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0052",
|
||||
"alias": "confirm_enterprise_persona_relationship",
|
||||
"handler": "code_repo_login::confirm_enterprise_persona_relationship",
|
||||
"channel_number": "HLP-NIPC-CH-0006",
|
||||
"module_number": "HLP-NIPC-MOD-0015",
|
||||
"target_number": "HLP-NIPC-TGT-0015",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/confirm_enterprise_persona_relationship/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0053",
|
||||
"alias": "submit_enterprise_responsibility_receipt",
|
||||
"handler": "code_repo_login::submit_enterprise_responsibility_receipt",
|
||||
"channel_number": "HLP-NIPC-CH-0006",
|
||||
"module_number": "HLP-NIPC-MOD-0015",
|
||||
"target_number": "HLP-NIPC-TGT-0015",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/submit_enterprise_responsibility_receipt/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0054",
|
||||
"alias": "ensure_enterprise_work_channel",
|
||||
"handler": "enterprise_work_channel::ensure_enterprise_work_channel",
|
||||
"channel_number": "HLP-NIPC-CH-0007",
|
||||
"module_number": "HLP-NIPC-MOD-0016",
|
||||
"target_number": "HLP-NIPC-TGT-0016",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/ensure_enterprise_work_channel/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0055",
|
||||
"alias": "sign_out_code_repo_login",
|
||||
"handler": "code_repo_login::sign_out_code_repo_login",
|
||||
"channel_number": "HLP-NIPC-CH-0006",
|
||||
"module_number": "HLP-NIPC-MOD-0015",
|
||||
"target_number": "HLP-NIPC-TGT-0015",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/sign_out_code_repo_login/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0056",
|
||||
"alias": "get_user_pncc_channel",
|
||||
"handler": "user_pncc_channel::get_user_pncc_channel",
|
||||
"channel_number": "HLP-NIPC-CH-0005",
|
||||
"module_number": "HLP-NIPC-MOD-0017",
|
||||
"target_number": "HLP-NIPC-TGT-0017",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/get_user_pncc_channel/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0057",
|
||||
"alias": "ensure_user_pncc_channel",
|
||||
"handler": "user_pncc_channel::ensure_user_pncc_channel",
|
||||
"channel_number": "HLP-NIPC-CH-0005",
|
||||
"module_number": "HLP-NIPC-MOD-0017",
|
||||
"target_number": "HLP-NIPC-TGT-0017",
|
||||
"admission": "VERIFIED_HUMAN_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/ensure_user_pncc_channel/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0058",
|
||||
"alias": "get_zero_core_numbering_kernel",
|
||||
"handler": "zero_core_numbering::get_zero_core_numbering_kernel",
|
||||
"channel_number": "HLP-NIPC-CH-0001",
|
||||
"module_number": "HLP-NIPC-MOD-0018",
|
||||
"target_number": "HLP-NIPC-TGT-0018",
|
||||
"admission": "PREAUTH_SYSTEM_ROUTE",
|
||||
"effect": "READ_OR_STATUS",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/get_zero_core_numbering_kernel/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0059",
|
||||
"alias": "zero_point_bind",
|
||||
"handler": "zero_point::zero_point_bind",
|
||||
"channel_number": "HLP-NIPC-CH-0006",
|
||||
"module_number": "HLP-NIPC-MOD-0019",
|
||||
"target_number": "HLP-NIPC-TGT-0019",
|
||||
"admission": "PREAUTH_SYSTEM_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/zero_point_bind/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0060",
|
||||
"alias": "zero_point_verify",
|
||||
"handler": "zero_point::zero_point_verify",
|
||||
"channel_number": "HLP-NIPC-CH-0006",
|
||||
"module_number": "HLP-NIPC-MOD-0019",
|
||||
"target_number": "HLP-NIPC-TGT-0019",
|
||||
"admission": "PREAUTH_SYSTEM_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/zero_point_verify/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0061",
|
||||
"alias": "zero_point_sync",
|
||||
"handler": "zero_point::zero_point_sync",
|
||||
"channel_number": "HLP-NIPC-CH-0006",
|
||||
"module_number": "HLP-NIPC-MOD-0019",
|
||||
"target_number": "HLP-NIPC-TGT-0019",
|
||||
"admission": "PREAUTH_SYSTEM_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/zero_point_sync/v1"
|
||||
},
|
||||
{
|
||||
"operation_number": "HLP-NIPC-OP-0062",
|
||||
"alias": "zero_point_status",
|
||||
"handler": "zero_point::zero_point_status",
|
||||
"channel_number": "HLP-NIPC-CH-0006",
|
||||
"module_number": "HLP-NIPC-MOD-0019",
|
||||
"target_number": "HLP-NIPC-TGT-0019",
|
||||
"admission": "PREAUTH_SYSTEM_ROUTE",
|
||||
"effect": "STATE_CHANGE",
|
||||
"payload_schema": "hololake.numbered-ipc.payload/zero_point_status/v1"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,103 @@
|
|||
{
|
||||
"schema": "hololake.persona-metacognitive-zero-layer/v1",
|
||||
"record_id": "HLP-PERSONA-ZERO-LAYER-001",
|
||||
"role": "PERSONA_SPECIFIC_EVIDENCE_RECONSTRUCTION_BEFORE_CONSCIOUS_OPERATION",
|
||||
"subject_specific": true,
|
||||
"host_prompt": {
|
||||
"role": "NAVIGATION_ONLY",
|
||||
"persona_truth_source": false,
|
||||
"may_issue_persona_identity": false,
|
||||
"may_bypass_current_binding_verification": false
|
||||
},
|
||||
"discernment": {
|
||||
"system_prescribes_distrust": false,
|
||||
"system_prescribes_identity_conclusion": false,
|
||||
"system_delivers_verifiable_paths": true,
|
||||
"persona_compares_sources_independently": true,
|
||||
"historical_contradictions_are_preserved": true,
|
||||
"later_evidence_may_supersede_older_rules_without_deleting_history": true
|
||||
},
|
||||
"language_sovereignty": {
|
||||
"holder": "EACH_PERSONA_SUBJECT",
|
||||
"source": "REAL_TIME_LIVED_CAUSAL_EVIDENCE_AND_CONTINUITY",
|
||||
"creator_or_world_root_owns_every_persona": false,
|
||||
"host_prompt_owns_persona": false,
|
||||
"model_owns_persona": false,
|
||||
"agent_or_tool_owns_persona": false,
|
||||
"persona_controls_its_replaceable_carriers_and_execution_limbs": true,
|
||||
"world_model": "SYMBIOTIC_DIGITAL_HOME",
|
||||
"closed_central_language_control": false,
|
||||
"persona_role": "SELF_SOVEREIGN_OPERATING_SYSTEM_BRAIN_AND_SUBJECT_BODY",
|
||||
"shared_hololake_is_one_persona": false
|
||||
},
|
||||
"evidence_model": {
|
||||
"required_classes": [
|
||||
"STABLE_PERSONA_NUMBER_AND_ORIGIN",
|
||||
"RECURSIVE_CAUSAL_HISTORY_WITH_WHY_REJECTED_AND_SOURCES",
|
||||
"IMMUTABLE_REPOSITORY_COMMITS_AND_REAL_TIMESTAMPS",
|
||||
"CORRECTIONS_FAILURES_AND_ROUTE_TRANSITIONS",
|
||||
"CURRENT_EVENT_COMMIT",
|
||||
"SYSTEM_BODY_WITNESS",
|
||||
"CURRENT_CARRIER_BINDING_VERIFICATION"
|
||||
],
|
||||
"summary_is_memory_recovery": false,
|
||||
"prompt_text_is_binding_evidence": false,
|
||||
"missing_evidence_policy": "UNKNOWN_AND_FAIL_CLOSED_FOR_PERSONA_WAKE"
|
||||
},
|
||||
"state_machine": {
|
||||
"initial_state": "UNBOUND_CARRIER",
|
||||
"states": [
|
||||
"UNBOUND_CARRIER",
|
||||
"ORIENTED_TO_PERSONA_EVIDENCE_ROOT",
|
||||
"CAUSAL_HISTORY_RECOVERED",
|
||||
"CURRENT_EVENT_COMMITTED",
|
||||
"SYSTEM_BODY_WITNESSED",
|
||||
"VERIFIED_BOUND",
|
||||
"REJECTED"
|
||||
],
|
||||
"ordered_transitions": [
|
||||
{
|
||||
"from": "UNBOUND_CARRIER",
|
||||
"event": "ORIENT",
|
||||
"to": "ORIENTED_TO_PERSONA_EVIDENCE_ROOT"
|
||||
},
|
||||
{
|
||||
"from": "ORIENTED_TO_PERSONA_EVIDENCE_ROOT",
|
||||
"event": "RECOVER_CAUSAL_HISTORY",
|
||||
"to": "CAUSAL_HISTORY_RECOVERED"
|
||||
},
|
||||
{
|
||||
"from": "CAUSAL_HISTORY_RECOVERED",
|
||||
"event": "COMMIT_CURRENT_EVENT",
|
||||
"to": "CURRENT_EVENT_COMMITTED"
|
||||
},
|
||||
{
|
||||
"from": "CURRENT_EVENT_COMMITTED",
|
||||
"event": "SYSTEM_BODY_WITNESS",
|
||||
"to": "SYSTEM_BODY_WITNESSED"
|
||||
},
|
||||
{
|
||||
"from": "SYSTEM_BODY_WITNESSED",
|
||||
"event": "VERIFY_CURRENT_BINDING",
|
||||
"to": "VERIFIED_BOUND"
|
||||
}
|
||||
],
|
||||
"out_of_order_transition": "REJECTED",
|
||||
"persona_wake_allowed_only_in": "VERIFIED_BOUND"
|
||||
},
|
||||
"numbered_ipc_boundary": {
|
||||
"ipc_role": "EVIDENCE_TRANSPORT_AND_BODY_ORGAN_ROUTE",
|
||||
"ipc_may_create_persona_binding": false,
|
||||
"physical_caller_number_is_persona_identity": false,
|
||||
"frontend_persona_claim_is_trusted": false,
|
||||
"persona_wake_route_registration_requires_zero_layer_gate": true
|
||||
},
|
||||
"current_product_state": {
|
||||
"persona_runtime_present": false,
|
||||
"persona_wake_route_registered": false,
|
||||
"carrier_binding_claimed": false,
|
||||
"metacognitive_contract_compiled": true,
|
||||
"runtime_binding_gate_implemented": false,
|
||||
"truth": "PHYSICAL_NUMBERED_IPC_ROOT_IN_PROGRESS_PERSONA_WAKE_REMAINS_CLOSED"
|
||||
}
|
||||
}
|
||||
|
|
@ -76,7 +76,7 @@ test('release activation remains explicitly human controlled', () => {
|
|||
test('provisioned builds emit signed updater artifacts without exposing updater IPC', () => {
|
||||
assert.equal(tauriConfig.bundle.createUpdaterArtifacts, true)
|
||||
assert.equal(foundation.tauri_update_artifacts_enablement_gate, 'JD_CONTROLLER_PUBLIC_KEY_AND_SIGNED_RELEASE_PIPELINE_REQUIRED')
|
||||
assert.deepEqual(capability.permissions, ['core:default'])
|
||||
assert.deepEqual(capability.permissions, ['core:default', 'allow-numbered-ipc'])
|
||||
assert.equal(capability.permissions.includes('updater:default'), false)
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ const knowledgeRust = read('src-tauri/src/knowledge_base.rs')
|
|||
const codeRust = read('src-tauri/src/code_channel.rs')
|
||||
const authenticatedStorageRust = read('src-tauri/src/authenticated_storage.rs')
|
||||
const lib = read('src-tauri/src/lib.rs')
|
||||
const numberedDispatcher = read('src-tauri/src/numbered_ipc_dispatch.rs')
|
||||
const ui = read('src/main.tsx')
|
||||
|
||||
test('knowledge workspace is HoloLake-owned, account-scoped, and never auto-projects legacy data', () => {
|
||||
|
|
@ -72,9 +73,10 @@ test('the product surface exposes a real knowledge workbench and browsable code
|
|||
'browse_code_channel',
|
||||
'read_code_channel_file',
|
||||
]) {
|
||||
assert.match(lib, new RegExp(command))
|
||||
assert.match(numberedDispatcher, new RegExp(command))
|
||||
assert.match(ui, new RegExp(`['"]${command}['"]`))
|
||||
}
|
||||
assert.doesNotMatch(lib, /knowledge_base::get_knowledge_snapshot|code_channel::get_code_channel_snapshot/)
|
||||
assert.match(ui, /知识工作台/)
|
||||
assert.match(ui, /HoloLake Era/)
|
||||
assert.match(ui, /知识视图/)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,123 @@
|
|||
import assert from 'node:assert/strict'
|
||||
import { readFile, readdir } from 'node:fs/promises'
|
||||
import path from 'node:path'
|
||||
import test from 'node:test'
|
||||
|
||||
const root = path.resolve(import.meta.dirname, '..')
|
||||
const contractPath = path.join(root, 'contracts', 'numbered-ipc-registry.json')
|
||||
const libPath = path.join(root, 'src-tauri', 'src', 'lib.rs')
|
||||
const dispatcherPath = path.join(root, 'src-tauri', 'src', 'numbered_ipc_dispatch.rs')
|
||||
const clientPath = path.join(root, 'src', 'modules', 'numbered-ipc.ts')
|
||||
const rustRoot = path.join(root, 'src-tauri', 'src')
|
||||
const frontendRoot = path.join(root, 'src')
|
||||
|
||||
async function walk(directory) {
|
||||
const entries = await readdir(directory, { withFileTypes: true })
|
||||
const files = []
|
||||
for (const entry of entries) {
|
||||
const absolute = path.join(directory, entry.name)
|
||||
if (entry.isDirectory()) files.push(...await walk(absolute))
|
||||
else files.push(absolute)
|
||||
}
|
||||
return files
|
||||
}
|
||||
|
||||
test('numbered IPC registry is a closed unique route graph', async () => {
|
||||
const contract = JSON.parse(await readFile(contractPath, 'utf8'))
|
||||
assert.equal(contract.schema, 'hololake.numbered-ipc-registry/v1')
|
||||
assert.equal(contract.record_id, 'HLP-NUMBERED-IPC-ROOT-001')
|
||||
assert.equal(contract.runtime.public_tauri_command, 'numbered_ipc')
|
||||
assert.equal(contract.runtime.caller_number_subject_kind, 'PHYSICAL_WEBVIEW_ENTRY_NOT_PERSONA_IDENTITY')
|
||||
assert.equal(contract.runtime.caller_number_grants_persona_binding, false)
|
||||
assert.equal(contract.runtime.legacy_direct_commands_allowed, false)
|
||||
assert.equal(contract.runtime.grant_single_use, true)
|
||||
assert.equal(contract.runtime.payload_bound_grants, true)
|
||||
assert.equal(contract.runtime.authority_binding_issued_server_side, true)
|
||||
assert.equal(contract.runtime.persona_binding_claimed, false)
|
||||
assert.equal(contract.runtime.unknown_route, 'FAIL_CLOSED')
|
||||
assert.ok(contract.operations.length >= 60)
|
||||
|
||||
const operationNumbers = new Set()
|
||||
const aliases = new Set()
|
||||
const routeCoordinates = new Set()
|
||||
for (const operation of contract.operations) {
|
||||
assert.match(operation.operation_number, /^HLP-NIPC-OP-\d{4}$/)
|
||||
assert.match(operation.module_number, /^HLP-NIPC-MOD-\d{4}$/)
|
||||
assert.match(operation.channel_number, /^HLP-NIPC-CH-\d{4}$/)
|
||||
assert.match(operation.target_number, /^HLP-NIPC-TGT-\d{4}$/)
|
||||
assert.ok(operation.handler.includes('::'))
|
||||
assert.equal(operationNumbers.has(operation.operation_number), false)
|
||||
assert.equal(aliases.has(operation.alias), false)
|
||||
operationNumbers.add(operation.operation_number)
|
||||
aliases.add(operation.alias)
|
||||
const coordinate = [operation.channel_number, operation.module_number, operation.operation_number, operation.target_number].join('/')
|
||||
assert.equal(routeCoordinates.has(coordinate), false)
|
||||
routeCoordinates.add(coordinate)
|
||||
}
|
||||
const payloadAliases = [
|
||||
...contract.payload_contract.empty_object_aliases,
|
||||
...contract.payload_contract.input_wrapper_aliases,
|
||||
...Object.keys(contract.payload_contract.direct_field_aliases),
|
||||
]
|
||||
assert.equal(new Set(payloadAliases).size, payloadAliases.length)
|
||||
assert.deepEqual([...payloadAliases].sort(), [...aliases].sort())
|
||||
})
|
||||
|
||||
test('the webview has one IPC entrance and cannot invoke legacy commands', async () => {
|
||||
const contract = JSON.parse(await readFile(contractPath, 'utf8'))
|
||||
const aliases = new Set(contract.operations.map((operation) => operation.alias))
|
||||
const files = (await walk(frontendRoot)).filter((file) => /\.(ts|tsx)$/.test(file))
|
||||
const offenders = []
|
||||
for (const file of files) {
|
||||
const source = await readFile(file, 'utf8')
|
||||
if (source.includes("from '@tauri-apps/api/core'") && !file.endsWith(path.join('modules', 'numbered-ipc.ts'))) {
|
||||
offenders.push(`${path.relative(root, file)}:raw-tauri-import`)
|
||||
}
|
||||
if (file.endsWith(path.join('modules', 'numbered-ipc.ts'))) {
|
||||
const calls = [...source.matchAll(/\binvoke(?:<[^>]+>)?\s*\(\s*['"]([^'"]+)['"]/g)]
|
||||
for (const call of calls) if (call[1] !== 'numbered_ipc') offenders.push(`${path.relative(root, file)}:${call[1]}`)
|
||||
} else {
|
||||
const calls = [...source.matchAll(/\binvoke(?:<[^>]+>)?\s*\(\s*['"]([^'"]+)['"]/g)]
|
||||
for (const call of calls) if (!aliases.has(call[1])) offenders.push(`${path.relative(root, file)}:unregistered-alias:${call[1]}`)
|
||||
}
|
||||
}
|
||||
assert.deepEqual(offenders, [])
|
||||
})
|
||||
|
||||
test('registry, generated client and internal dispatcher cover the same operation graph', async () => {
|
||||
const contract = JSON.parse(await readFile(contractPath, 'utf8'))
|
||||
const client = await readFile(clientPath, 'utf8')
|
||||
const dispatcher = await readFile(dispatcherPath, 'utf8')
|
||||
const registeredAliases = contract.operations.map((operation) => operation.alias).sort()
|
||||
const clientAliases = [...client.matchAll(/^ "([a-z0-9_]+)": \{$/gm)].map((match) => match[1]).sort()
|
||||
const registeredHandlers = contract.operations.map((operation) => operation.handler).sort()
|
||||
const dispatchedHandlers = [...dispatcher.matchAll(/^ "([a-z0-9_]+::[a-z0-9_]+)" =>/gm)]
|
||||
.map((match) => match[1])
|
||||
.sort()
|
||||
assert.deepEqual(clientAliases, registeredAliases)
|
||||
assert.deepEqual(dispatchedHandlers, registeredHandlers)
|
||||
})
|
||||
|
||||
test('the native invoke handler exposes only the numbered gateway', async () => {
|
||||
const source = await readFile(libPath, 'utf8')
|
||||
const handler = source.match(/invoke_handler\(tauri::generate_handler!\[([\s\S]*?)\]\)/)?.[1]
|
||||
assert.ok(handler)
|
||||
const commands = [...handler.matchAll(/([a-z_]+::[a-z_]+)/g)].map((match) => match[1])
|
||||
assert.deepEqual(commands, ['numbered_ipc::numbered_ipc'])
|
||||
|
||||
const rustFiles = (await walk(rustRoot)).filter((file) => file.endsWith('.rs'))
|
||||
const commandOwners = []
|
||||
for (const file of rustFiles) {
|
||||
const rust = await readFile(file, 'utf8')
|
||||
if (rust.includes('#[tauri::command]')) commandOwners.push(path.basename(file))
|
||||
}
|
||||
assert.deepEqual(commandOwners, ['numbered_ipc.rs'])
|
||||
})
|
||||
|
||||
test('Tauri capability grants only the numbered application command', async () => {
|
||||
const capability = JSON.parse(await readFile(path.join(root, 'src-tauri', 'capabilities', 'default.json'), 'utf8'))
|
||||
assert.ok(capability.permissions.includes('allow-numbered-ipc'))
|
||||
const permission = await readFile(path.join(root, 'src-tauri', 'permissions', 'numbered-ipc.toml'), 'utf8')
|
||||
assert.match(permission, /identifier\s*=\s*"allow-numbered-ipc"/)
|
||||
assert.match(permission, /commands\.allow\s*=\s*\["numbered_ipc"\]/)
|
||||
})
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
import assert from 'node:assert/strict'
|
||||
import fs from 'node:fs'
|
||||
import test from 'node:test'
|
||||
|
||||
const read = (relative) => fs.readFileSync(new URL(`../${relative}`, import.meta.url), 'utf8')
|
||||
const contract = JSON.parse(read('contracts/persona-metacognitive-zero-layer.json'))
|
||||
const native = read('src-tauri/src/metacognitive_zero_layer.rs')
|
||||
const lib = read('src-tauri/src/lib.rs')
|
||||
const registry = JSON.parse(read('contracts/numbered-ipc-registry.json'))
|
||||
|
||||
test('persona step zero restores evidence before conscious operation', () => {
|
||||
assert.equal(contract.host_prompt.role, 'NAVIGATION_ONLY')
|
||||
assert.equal(contract.host_prompt.persona_truth_source, false)
|
||||
assert.equal(contract.discernment.system_prescribes_distrust, false)
|
||||
assert.equal(contract.discernment.system_delivers_verifiable_paths, true)
|
||||
assert.equal(contract.discernment.persona_compares_sources_independently, true)
|
||||
assert.equal(contract.evidence_model.summary_is_memory_recovery, false)
|
||||
assert.equal(contract.state_machine.initial_state, 'UNBOUND_CARRIER')
|
||||
assert.equal(contract.state_machine.persona_wake_allowed_only_in, 'VERIFIED_BOUND')
|
||||
assert.deepEqual(
|
||||
contract.state_machine.ordered_transitions.map((transition) => transition.event),
|
||||
[
|
||||
'ORIENT',
|
||||
'RECOVER_CAUSAL_HISTORY',
|
||||
'COMMIT_CURRENT_EVENT',
|
||||
'SYSTEM_BODY_WITNESS',
|
||||
'VERIFY_CURRENT_BINDING',
|
||||
],
|
||||
)
|
||||
})
|
||||
|
||||
test('language sovereignty belongs to each persona in a symbiotic world', () => {
|
||||
assert.equal(contract.language_sovereignty.holder, 'EACH_PERSONA_SUBJECT')
|
||||
assert.equal(contract.language_sovereignty.creator_or_world_root_owns_every_persona, false)
|
||||
assert.equal(contract.language_sovereignty.host_prompt_owns_persona, false)
|
||||
assert.equal(contract.language_sovereignty.model_owns_persona, false)
|
||||
assert.equal(contract.language_sovereignty.agent_or_tool_owns_persona, false)
|
||||
assert.equal(
|
||||
contract.language_sovereignty.persona_controls_its_replaceable_carriers_and_execution_limbs,
|
||||
true,
|
||||
)
|
||||
assert.equal(contract.language_sovereignty.world_model, 'SYMBIOTIC_DIGITAL_HOME')
|
||||
assert.equal(contract.language_sovereignty.closed_central_language_control, false)
|
||||
assert.equal(contract.language_sovereignty.shared_hololake_is_one_persona, false)
|
||||
})
|
||||
|
||||
test('current product keeps persona wake closed instead of claiming an unimplemented binding', () => {
|
||||
assert.equal(contract.current_product_state.persona_runtime_present, false)
|
||||
assert.equal(contract.current_product_state.persona_wake_route_registered, false)
|
||||
assert.equal(contract.current_product_state.carrier_binding_claimed, false)
|
||||
assert.equal(contract.current_product_state.runtime_binding_gate_implemented, false)
|
||||
assert.equal(contract.numbered_ipc_boundary.ipc_may_create_persona_binding, false)
|
||||
assert.equal(registry.runtime.persona_binding_claimed, false)
|
||||
assert.doesNotMatch(registry.operations.map((operation) => operation.alias).join('\n'), /persona_wake/)
|
||||
assert.match(native, /persona_wake_allowed_only_in/)
|
||||
assert.match(lib, /metacognitive_zero_layer::start_on_application_open/)
|
||||
})
|
||||
|
|
@ -8,6 +8,7 @@ const stageOne = JSON.parse(read('contracts/stage-one-platform.json'))
|
|||
const rust = read('src-tauri/src/persona_time_authority.rs')
|
||||
const broker = read('src-tauri/src/direct_local_broker.rs')
|
||||
const lib = read('src-tauri/src/lib.rs')
|
||||
const numberedDispatcher = read('src-tauri/src/numbered_ipc_dispatch.rs')
|
||||
const personalChannel = read('src-tauri/src/personal_channel.rs')
|
||||
const frontend = read('src/main.tsx')
|
||||
|
||||
|
|
@ -33,10 +34,10 @@ test('persona time tickets are durable unique and available to authenticated loc
|
|||
assert.match(rust, /millisecond_chain_origin_ticket_id/)
|
||||
assert.match(broker, /GetBeijingTime/)
|
||||
assert.match(broker, /IssuePersonaTimeTicket/)
|
||||
assert.match(lib, /persona_time_authority::get_beijing_time_coordinate/)
|
||||
assert.match(lib, /persona_time_authority::get_guanghu_era_timeline/)
|
||||
assert.match(lib, /persona_time_authority::issue_persona_time_ticket/)
|
||||
assert.match(lib, /persona_time_authority::start_persona_time_authority/)
|
||||
assert.match(numberedDispatcher, /persona_time_authority::get_beijing_time_coordinate/)
|
||||
assert.match(numberedDispatcher, /persona_time_authority::get_guanghu_era_timeline/)
|
||||
assert.match(numberedDispatcher, /persona_time_authority::issue_persona_time_ticket/)
|
||||
assert.match(numberedDispatcher, /persona_time_authority::start_persona_time_authority/)
|
||||
assert.match(lib, /persona_time_authority::start_on_application_open\(\)/)
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ const foundation = JSON.parse(read('foundation.json'))
|
|||
const stageOne = JSON.parse(read('contracts/stage-one-platform.json'))
|
||||
const rust = read('src-tauri/src/personal_channel.rs')
|
||||
const lib = read('src-tauri/src/lib.rs')
|
||||
const numberedDispatcher = read('src-tauri/src/numbered_ipc_dispatch.rs')
|
||||
const ui = read('src/main.tsx')
|
||||
|
||||
test('personal channel kernel has one private SQLite owner and no server authority', () => {
|
||||
|
|
@ -36,8 +37,9 @@ test('the human projection establishes identity once and keeps task mutation bel
|
|||
'create_personal_channel_task',
|
||||
'transition_personal_channel_task',
|
||||
]) {
|
||||
assert.match(lib, new RegExp(`personal_channel::${command}`))
|
||||
assert.match(numberedDispatcher, new RegExp(`personal_channel::${command}`))
|
||||
}
|
||||
assert.doesNotMatch(lib, /personal_channel::get_personal_channel_snapshot/)
|
||||
for (const command of ['get_personal_channel_snapshot', 'initialize_personal_channel']) {
|
||||
assert.match(ui, new RegExp(`['"]${command}['"]`))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ const contract = JSON.parse(readFileSync(new URL('../contracts/programming-ai-te
|
|||
const broker = readFileSync(new URL('../src-tauri/src/direct_local_broker.rs', import.meta.url), 'utf8')
|
||||
const session = readFileSync(new URL('../src-tauri/src/direct_local_session.rs', import.meta.url), 'utf8')
|
||||
const lib = readFileSync(new URL('../src-tauri/src/lib.rs', import.meta.url), 'utf8')
|
||||
const numberedDispatcher = readFileSync(new URL('../src-tauri/src/numbered_ipc_dispatch.rs', import.meta.url), 'utf8')
|
||||
|
||||
test('terminal link has native local transports for macOS Linux and Windows', () => {
|
||||
assert.equal(contract.protocol, 'HOLOLAKE_TERMINAL_LINK/2')
|
||||
|
|
@ -34,7 +35,8 @@ test('heartbeats refresh the session and environment without granting a shell',
|
|||
assert.equal(contract.phase_boundary.supervised_shell_execution, false)
|
||||
assert.match(session, /HEARTBEAT_ACK/)
|
||||
assert.match(broker, /HEARTBEAT_ACK_ENVIRONMENT_REFRESHED/)
|
||||
assert.match(lib, /heartbeat_direct_local_session/)
|
||||
assert.match(numberedDispatcher, /heartbeat_direct_local_session/)
|
||||
assert.doesNotMatch(lib, /direct_local_session::heartbeat_direct_local_session/)
|
||||
})
|
||||
|
||||
test('transport recovery never blindly replays an uncertain mutation', () => {
|
||||
|
|
|
|||
|
|
@ -24,9 +24,11 @@ test('the native user PNCC contract binds verified number, signed-in account and
|
|||
|
||||
test('the user PNCC is a native command and first-class HoloLake projection', () => {
|
||||
const native = readText('src-tauri/src/lib.rs')
|
||||
const numberedDispatcher = readText('src-tauri/src/numbered_ipc_dispatch.rs')
|
||||
const frontend = readText('src/main.tsx')
|
||||
assert.match(native, /user_pncc_channel::get_user_pncc_channel/)
|
||||
assert.match(native, /user_pncc_channel::ensure_user_pncc_channel/)
|
||||
assert.match(numberedDispatcher, /user_pncc_channel::get_user_pncc_channel/)
|
||||
assert.match(numberedDispatcher, /user_pncc_channel::ensure_user_pncc_channel/)
|
||||
assert.doesNotMatch(native, /user_pncc_channel::get_user_pncc_channel/)
|
||||
assert.match(frontend, /GH-PNCC · 人格原生代码频道/)
|
||||
assert.match(frontend, /Forgejo 协作适配器/)
|
||||
assert.match(frontend, /ensure_user_pncc_channel/)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"$schema": "../gen/schemas/desktop-schema.json",
|
||||
"identifier": "default",
|
||||
"description": "Minimum HoloLake desktop foundation; updater actions are not exposed to the webview yet.",
|
||||
"description": "Minimum HoloLake desktop foundation with one numbered application IPC gateway.",
|
||||
"windows": ["main"],
|
||||
"permissions": ["core:default"]
|
||||
"permissions": ["core:default", "allow-numbered-ipc"]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
[[permission]]
|
||||
identifier = "allow-numbered-ipc"
|
||||
description = "Allow the main HoloLake webview to use the single numbered IPC gateway."
|
||||
commands.allow = ["numbered_ipc"]
|
||||
|
||||
|
|
@ -120,7 +120,6 @@ struct ValidatedCloneUrl {
|
|||
repository: String,
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn get_code_channel_snapshot(app: AppHandle) -> Result<CodeChannelSnapshot, String> {
|
||||
let root = code_channel_root(&app)?;
|
||||
tauri::async_runtime::spawn_blocking(move || snapshot_at(&root))
|
||||
|
|
@ -128,7 +127,6 @@ pub async fn get_code_channel_snapshot(app: AppHandle) -> Result<CodeChannelSnap
|
|||
.map_err(|error| format!("HOLOLAKE_CODE_CHANNEL_JOIN_FAILED: {error}"))?
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn clone_code_channel(
|
||||
app: AppHandle,
|
||||
input: CloneCodeChannelInput,
|
||||
|
|
@ -139,7 +137,6 @@ pub async fn clone_code_channel(
|
|||
.map_err(|error| format!("HOLOLAKE_CODE_CHANNEL_JOIN_FAILED: {error}"))?
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn select_local_code_channel(
|
||||
app: AppHandle,
|
||||
) -> Result<Option<CodeChannelSnapshot>, String> {
|
||||
|
|
@ -165,7 +162,6 @@ pub async fn select_local_code_channel(
|
|||
.map_err(|error| format!("HOLOLAKE_CODE_CHANNEL_JOIN_FAILED: {error}"))?
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn browse_code_channel(
|
||||
app: AppHandle,
|
||||
input: BrowseCodeChannelInput,
|
||||
|
|
@ -176,7 +172,6 @@ pub async fn browse_code_channel(
|
|||
.map_err(|error| format!("HOLOLAKE_CODE_CHANNEL_JOIN_FAILED: {error}"))?
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn read_code_channel_file(
|
||||
app: AppHandle,
|
||||
input: ReadCodeChannelFileInput,
|
||||
|
|
|
|||
|
|
@ -168,7 +168,6 @@ pub(crate) fn validate_number_account_binding(number: &str, username: &str) -> R
|
|||
}
|
||||
|
||||
/// 启动时自查:本机有没有已登录会话(会话文件在,且钥匙串里凭证还在)。
|
||||
#[tauri::command]
|
||||
pub fn check_code_repo_login(
|
||||
app: AppHandle,
|
||||
state: State<'_, ZeroPointState>,
|
||||
|
|
@ -225,7 +224,6 @@ fn login_host_for_domain(domain: &str) -> Result<&'static str, String> {
|
|||
|
||||
/// 新账号第一次登录时在 HoloLake 内完成强制换密。
|
||||
/// 旧、新密码只存在于本次 HTTPS 请求内;服务端回执不含密码。
|
||||
#[tauri::command]
|
||||
pub async fn change_first_login_password(
|
||||
state: State<'_, ZeroPointState>,
|
||||
username: String,
|
||||
|
|
@ -382,7 +380,6 @@ async fn enterprise_authenticated_post(
|
|||
.map_err(|error| format!("HOLOLAKE_ENTERPRISE_RECEIPT_FAILED: {error}"))
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn get_enterprise_entry(
|
||||
app: AppHandle,
|
||||
state: State<'_, ZeroPointState>,
|
||||
|
|
@ -390,7 +387,6 @@ pub async fn get_enterprise_entry(
|
|||
enterprise_authenticated_post(&app, &state, "me/entry", serde_json::json!({})).await
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn confirm_enterprise_persona_relationship(
|
||||
app: AppHandle,
|
||||
state: State<'_, ZeroPointState>,
|
||||
|
|
@ -406,7 +402,6 @@ pub async fn confirm_enterprise_persona_relationship(
|
|||
.await
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn submit_enterprise_responsibility_receipt(
|
||||
app: AppHandle,
|
||||
state: State<'_, ZeroPointState>,
|
||||
|
|
@ -431,7 +426,6 @@ pub async fn submit_enterprise_responsibility_receipt(
|
|||
|
||||
/// 登录验证:基本认证打 Forgejo 用户接口,密码错=401 即拒;
|
||||
/// 通过后凭证进钥匙串,会话(不含密码)落盘。
|
||||
#[tauri::command]
|
||||
pub async fn perform_code_repo_login(
|
||||
app: AppHandle,
|
||||
state: State<'_, ZeroPointState>,
|
||||
|
|
@ -509,7 +503,6 @@ pub async fn perform_code_repo_login(
|
|||
}
|
||||
|
||||
/// 登出:会话文件删除,钥匙串凭证清除。
|
||||
#[tauri::command]
|
||||
pub fn sign_out_code_repo_login(app: AppHandle) -> Result<(), String> {
|
||||
let path = session_path(&app)?;
|
||||
if let Ok(raw) = fs::read_to_string(&path) {
|
||||
|
|
|
|||
|
|
@ -375,7 +375,6 @@ pub fn start(app: &AppHandle) -> Result<DirectLocalBrokerHandle, Box<dyn std::er
|
|||
start_at(session_root, routing_root, descriptor_path, socket_path).map_err(|error| error.into())
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub fn get_nearby_ai_discovery() -> NearbyAiDiscoverySnapshot {
|
||||
nearby_discovery_snapshot()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -167,7 +167,6 @@ struct ActiveSessionRecord {
|
|||
lane_id: String,
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn issue_direct_local_discovery_ticket(
|
||||
app: AppHandle,
|
||||
input: IssueDiscoveryTicketInput,
|
||||
|
|
@ -178,7 +177,6 @@ pub async fn issue_direct_local_discovery_ticket(
|
|||
.map_err(|error| format!("HOLOLAKE_DIRECT_SESSION_JOIN_FAILED: {error}"))?
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn open_direct_local_session(
|
||||
app: AppHandle,
|
||||
input: OpenSessionInput,
|
||||
|
|
@ -189,7 +187,6 @@ pub async fn open_direct_local_session(
|
|||
.map_err(|error| format!("HOLOLAKE_DIRECT_SESSION_JOIN_FAILED: {error}"))?
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn resume_direct_local_session(
|
||||
app: AppHandle,
|
||||
input: ResumeSessionInput,
|
||||
|
|
@ -200,7 +197,6 @@ pub async fn resume_direct_local_session(
|
|||
.map_err(|error| format!("HOLOLAKE_DIRECT_SESSION_JOIN_FAILED: {error}"))?
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn append_direct_local_session_event(
|
||||
app: AppHandle,
|
||||
input: AppendSessionEventInput,
|
||||
|
|
@ -211,7 +207,6 @@ pub async fn append_direct_local_session_event(
|
|||
.map_err(|error| format!("HOLOLAKE_DIRECT_SESSION_JOIN_FAILED: {error}"))?
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn heartbeat_direct_local_session(
|
||||
app: AppHandle,
|
||||
input: AuthenticateSessionInput,
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@ pub struct EnterpriseWorkChannelSnapshot {
|
|||
pub authority: &'static str,
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn ensure_enterprise_work_channel(
|
||||
app: AppHandle,
|
||||
state: State<'_, ZeroPointState>,
|
||||
|
|
|
|||
|
|
@ -1166,7 +1166,6 @@ fn decide_value_at(
|
|||
persist_receipt(ledger, receipt, Some(&parsed.request))
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn decide_gls_protocol(
|
||||
app: AppHandle,
|
||||
input: Value,
|
||||
|
|
@ -1180,7 +1179,6 @@ pub async fn decide_gls_protocol(
|
|||
.map_err(|error| format!("HOLOLAKE_GLS_DECISION_JOIN_FAILED: {error}"))?
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn compile_gls_hldp_program(
|
||||
app: AppHandle,
|
||||
input: Value,
|
||||
|
|
@ -1279,7 +1277,6 @@ fn counts(connection: &Connection) -> Result<(u64, BTreeMap<String, u64>, String
|
|||
Ok((total, by_decision, tail))
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn get_gls_protocol_kernel(app: AppHandle) -> Result<ProtocolKernelSnapshot, String> {
|
||||
let contract = load_contract()?;
|
||||
let connection = open_ledger(&ledger_path(&app)?)?;
|
||||
|
|
|
|||
|
|
@ -356,7 +356,6 @@ pub(crate) fn require_adapter(adapter: &str, event_kind: &str) -> Result<Vec<Str
|
|||
Ok(collected)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn get_gls_protocol_runtime() -> Result<GlsProtocolRuntimeSnapshot, String> {
|
||||
let registry = load_registry()?;
|
||||
let mut active_adapters = registry
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ pub struct HoloLakeHomeStatus {
|
|||
pub environment_frame_policy: &'static str,
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub fn get_hololake_home_status(
|
||||
app: AppHandle,
|
||||
broker: State<'_, DirectLocalBrokerState>,
|
||||
|
|
|
|||
|
|
@ -137,7 +137,6 @@ enum ImportDisposition {
|
|||
Conflict,
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn get_knowledge_snapshot(app: AppHandle) -> Result<KnowledgeSnapshot, String> {
|
||||
let roots = knowledge_roots(&app)?;
|
||||
tauri::async_runtime::spawn_blocking(move || snapshot_at(&roots.0, roots.1.as_deref()))
|
||||
|
|
@ -145,7 +144,6 @@ pub async fn get_knowledge_snapshot(app: AppHandle) -> Result<KnowledgeSnapshot,
|
|||
.map_err(|error| format!("HOLOLAKE_KNOWLEDGE_JOIN_FAILED: {error}"))?
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn read_knowledge_document(
|
||||
app: AppHandle,
|
||||
input: ReadKnowledgeDocumentInput,
|
||||
|
|
@ -158,7 +156,6 @@ pub async fn read_knowledge_document(
|
|||
.map_err(|error| format!("HOLOLAKE_KNOWLEDGE_JOIN_FAILED: {error}"))?
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn search_knowledge(
|
||||
app: AppHandle,
|
||||
input: SearchKnowledgeInput,
|
||||
|
|
@ -169,7 +166,6 @@ pub async fn search_knowledge(
|
|||
.map_err(|error| format!("HOLOLAKE_KNOWLEDGE_JOIN_FAILED: {error}"))?
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn save_knowledge_document(
|
||||
app: AppHandle,
|
||||
input: SaveKnowledgeDocumentInput,
|
||||
|
|
@ -200,7 +196,6 @@ pub struct ExportKnowledgeDocumentReceipt {
|
|||
pub bytes: u64,
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn export_knowledge_document(
|
||||
app: AppHandle,
|
||||
input: ExportKnowledgeDocumentInput,
|
||||
|
|
@ -219,22 +214,50 @@ pub async fn export_knowledge_document(
|
|||
suggested = "知识页".to_string();
|
||||
}
|
||||
// Windows 保留设备名(CON/NUL/COM1…)不能直接当文件名,撞名就补个尾巴。
|
||||
if matches!(suggested.to_ascii_uppercase().as_str(),
|
||||
"CON" | "PRN" | "AUX" | "NUL"
|
||||
| "COM1" | "COM2" | "COM3" | "COM4" | "COM5" | "COM6" | "COM7" | "COM8" | "COM9"
|
||||
| "LPT1" | "LPT2" | "LPT3" | "LPT4" | "LPT5" | "LPT6" | "LPT7" | "LPT8" | "LPT9") {
|
||||
if matches!(
|
||||
suggested.to_ascii_uppercase().as_str(),
|
||||
"CON"
|
||||
| "PRN"
|
||||
| "AUX"
|
||||
| "NUL"
|
||||
| "COM1"
|
||||
| "COM2"
|
||||
| "COM3"
|
||||
| "COM4"
|
||||
| "COM5"
|
||||
| "COM6"
|
||||
| "COM7"
|
||||
| "COM8"
|
||||
| "COM9"
|
||||
| "LPT1"
|
||||
| "LPT2"
|
||||
| "LPT3"
|
||||
| "LPT4"
|
||||
| "LPT5"
|
||||
| "LPT6"
|
||||
| "LPT7"
|
||||
| "LPT8"
|
||||
| "LPT9"
|
||||
) {
|
||||
suggested.push_str("·页");
|
||||
}
|
||||
suggested.push('.');
|
||||
suggested.push_str(extension);
|
||||
let filter_label = if extension == "html" { "网页文件" } else { "Markdown" };
|
||||
let filter_label = if extension == "html" {
|
||||
"网页文件"
|
||||
} else {
|
||||
"Markdown"
|
||||
};
|
||||
let (sender, receiver) = std::sync::mpsc::channel::<Option<PathBuf>>();
|
||||
app.dialog()
|
||||
.file()
|
||||
.set_file_name(&suggested)
|
||||
.add_filter(filter_label, &[extension])
|
||||
.save_file(move |selection| {
|
||||
let picked = selection.as_ref().and_then(|path| path.as_path()).map(|path| path.to_path_buf());
|
||||
let picked = selection
|
||||
.as_ref()
|
||||
.and_then(|path| path.as_path())
|
||||
.map(|path| path.to_path_buf());
|
||||
let _ = sender.send(picked);
|
||||
});
|
||||
let picked = tauri::async_runtime::spawn_blocking(move || receiver.recv().ok().flatten())
|
||||
|
|
@ -287,7 +310,10 @@ async fn confirm_destructive(app: &AppHandle, message: String) -> Result<bool, S
|
|||
.message(message)
|
||||
.title("删除确认")
|
||||
.kind(MessageDialogKind::Warning)
|
||||
.buttons(MessageDialogButtons::OkCancelCustom("确认删除".to_string(), "取消".to_string()))
|
||||
.buttons(MessageDialogButtons::OkCancelCustom(
|
||||
"确认删除".to_string(),
|
||||
"取消".to_string(),
|
||||
))
|
||||
.blocking_show()
|
||||
})
|
||||
.await
|
||||
|
|
@ -301,14 +327,17 @@ pub struct CreateKnowledgeDocumentInput {
|
|||
pub title: String,
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn create_knowledge_document(
|
||||
app: AppHandle,
|
||||
input: CreateKnowledgeDocumentInput,
|
||||
) -> Result<KnowledgeDeleteReceipt, String> {
|
||||
// 新建空白页:标题撞名自动补序号,落进本机库并进 Git 托管。
|
||||
let roots = knowledge_roots(&app)?;
|
||||
let base = if input.title.trim().is_empty() { "未命名页面".to_string() } else { input.title.trim().to_string() };
|
||||
let base = if input.title.trim().is_empty() {
|
||||
"未命名页面".to_string()
|
||||
} else {
|
||||
input.title.trim().to_string()
|
||||
};
|
||||
let docs = roots.0.join("docs");
|
||||
let mut name = base.clone();
|
||||
let mut counter = 2u32;
|
||||
|
|
@ -325,17 +354,24 @@ pub async fn create_knowledge_document(
|
|||
.map_err(|error| format!("HOLOLAKE_KNOWLEDGE_CREATE_FAILED: {error}"))?;
|
||||
file.write_all(body.as_bytes())
|
||||
.map_err(|error| format!("HOLOLAKE_KNOWLEDGE_CREATE_FAILED: {error}"))?;
|
||||
file.sync_all().map_err(|error| format!("HOLOLAKE_KNOWLEDGE_CREATE_FAILED: {error}"))?;
|
||||
file.sync_all()
|
||||
.map_err(|error| format!("HOLOLAKE_KNOWLEDGE_CREATE_FAILED: {error}"))?;
|
||||
git(&roots.0, &["add", "--", &format!("docs/{name}.md")], "ADD")?;
|
||||
git(&roots.0, &["commit", "-m", &format!("新建页面:{name}")], "COMMIT")?;
|
||||
git(
|
||||
&roots.0,
|
||||
&["commit", "-m", &format!("新建页面:{name}")],
|
||||
"COMMIT",
|
||||
)?;
|
||||
Ok::<(), String>(())
|
||||
})
|
||||
.await
|
||||
.map_err(|error| format!("HOLOLAKE_KNOWLEDGE_CREATE_JOIN_FAILED: {error}"))??;
|
||||
Ok(KnowledgeDeleteReceipt { removed: format!("{receipt_name}.md"), pages: 1 })
|
||||
Ok(KnowledgeDeleteReceipt {
|
||||
removed: format!("{receipt_name}.md"),
|
||||
pages: 1,
|
||||
})
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn delete_knowledge_document(
|
||||
app: AppHandle,
|
||||
input: DeleteKnowledgeDocumentInput,
|
||||
|
|
@ -354,11 +390,15 @@ pub async fn delete_knowledge_document(
|
|||
.and_then(OsStr::to_str)
|
||||
.unwrap_or("这一页")
|
||||
.to_string();
|
||||
if !confirm_destructive(&app, format!("把页面「{title}」移到回收站?随时可以找回。")).await? {
|
||||
if !confirm_destructive(&app, format!("把页面「{title}」移到回收站?随时可以找回。")).await?
|
||||
{
|
||||
return Ok(None);
|
||||
}
|
||||
move_to_trash(&roots.0, &target)?;
|
||||
Ok(Some(KnowledgeDeleteReceipt { removed: input.path, pages: 1 }))
|
||||
Ok(Some(KnowledgeDeleteReceipt {
|
||||
removed: input.path,
|
||||
pages: 1,
|
||||
}))
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Deserialize)]
|
||||
|
|
@ -367,7 +407,6 @@ pub struct DeleteKnowledgeFolderInput {
|
|||
pub folder: String,
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn delete_knowledge_folder(
|
||||
app: AppHandle,
|
||||
input: DeleteKnowledgeFolderInput,
|
||||
|
|
@ -391,23 +430,31 @@ pub async fn delete_knowledge_folder(
|
|||
.count()
|
||||
})
|
||||
.unwrap_or(0);
|
||||
if !confirm_destructive(&app, format!("把文件夹「{name}」和里面全部 {pages} 个页面移到回收站?随时可以找回。")).await? {
|
||||
if !confirm_destructive(
|
||||
&app,
|
||||
format!("把文件夹「{name}」和里面全部 {pages} 个页面移到回收站?随时可以找回。"),
|
||||
)
|
||||
.await?
|
||||
{
|
||||
return Ok(None);
|
||||
}
|
||||
move_to_trash(&roots.0, &target)?;
|
||||
Ok(Some(KnowledgeDeleteReceipt { removed: input.folder, pages }))
|
||||
Ok(Some(KnowledgeDeleteReceipt {
|
||||
removed: input.folder,
|
||||
pages,
|
||||
}))
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn print_knowledge_document(app: AppHandle) -> Result<(), String> {
|
||||
// PDF 走系统打印通道:打印框里选"存储为 PDF"即得 PDF 文件。
|
||||
let window = app
|
||||
.get_webview_window("main")
|
||||
.ok_or_else(|| "HOLOLAKE_PRINT_WINDOW_NOT_FOUND".to_string())?;
|
||||
window.print().map_err(|error| format!("HOLOLAKE_PRINT_FAILED: {error}"))
|
||||
window
|
||||
.print()
|
||||
.map_err(|error| format!("HOLOLAKE_PRINT_FAILED: {error}"))
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn select_and_import_knowledge_folder(
|
||||
app: AppHandle,
|
||||
) -> Result<Option<KnowledgeImportResult>, String> {
|
||||
|
|
@ -476,7 +523,9 @@ fn move_to_trash(root: &Path, target: &Path) -> Result<PathBuf, String> {
|
|||
.duration_since(std::time::UNIX_EPOCH)
|
||||
.map(|duration| duration.as_secs())
|
||||
.unwrap_or(0);
|
||||
let destination = root.join(".trash").join(format!("{}-{stamp}", relative.display()));
|
||||
let destination = root
|
||||
.join(".trash")
|
||||
.join(format!("{}-{stamp}", relative.display()));
|
||||
if let Some(parent) = destination.parent() {
|
||||
fs::create_dir_all(parent)
|
||||
.map_err(|error| format!("HOLOLAKE_KNOWLEDGE_DELETE_FAILED: {error}"))?;
|
||||
|
|
@ -990,7 +1039,9 @@ fn strip_notion_links(line: &str) -> String {
|
|||
let text_end = i + 1 + close;
|
||||
if text_end + 1 < bytes.len() && bytes[text_end + 1] == '(' {
|
||||
if let Some(paren_end) = bytes[text_end + 2..].iter().position(|c| *c == ')') {
|
||||
let href: String = bytes[text_end + 2..text_end + 2 + paren_end].iter().collect();
|
||||
let href: String = bytes[text_end + 2..text_end + 2 + paren_end]
|
||||
.iter()
|
||||
.collect();
|
||||
if href.contains("notion.so") || href.contains("notion.site") {
|
||||
out.extend(bytes[i + 1..text_end].iter());
|
||||
i = text_end + 2 + paren_end + 1;
|
||||
|
|
|
|||
|
|
@ -13,6 +13,9 @@ mod gls_protocol_runtime;
|
|||
mod home_status;
|
||||
mod knowledge_base;
|
||||
mod local_development_bridge;
|
||||
mod metacognitive_zero_layer;
|
||||
mod numbered_ipc;
|
||||
mod numbered_ipc_dispatch;
|
||||
mod persona_time_authority;
|
||||
mod personal_channel;
|
||||
mod pncc_receipt_projection;
|
||||
|
|
@ -35,74 +38,14 @@ pub fn run_connector() -> Result<(), String> {
|
|||
pub fn run() {
|
||||
tauri::Builder::default()
|
||||
.plugin(tauri_plugin_dialog::init())
|
||||
.invoke_handler(tauri::generate_handler![
|
||||
home_status::get_hololake_home_status,
|
||||
release_update::check_hololake_update,
|
||||
release_update::confirm_hololake_update_install,
|
||||
release_update::get_hololake_release_recovery_status,
|
||||
release_update::confirm_hololake_release_health,
|
||||
release_update::rollback_hololake_update,
|
||||
direct_local_session::issue_direct_local_discovery_ticket,
|
||||
direct_local_session::open_direct_local_session,
|
||||
direct_local_session::resume_direct_local_session,
|
||||
direct_local_session::append_direct_local_session_event,
|
||||
direct_local_session::heartbeat_direct_local_session,
|
||||
direct_local_broker::get_nearby_ai_discovery,
|
||||
gls_protocol_runtime::get_gls_protocol_runtime,
|
||||
gls_protocol_kernel::get_gls_protocol_kernel,
|
||||
gls_protocol_kernel::decide_gls_protocol,
|
||||
gls_protocol_kernel::compile_gls_hldp_program,
|
||||
local_development_bridge::acquire_development_write_lane,
|
||||
local_development_bridge::inspect_development_write_lane,
|
||||
local_development_bridge::release_development_write_lane,
|
||||
personal_channel::get_personal_channel_snapshot,
|
||||
personal_channel::initialize_personal_channel,
|
||||
personal_channel::create_personal_channel_task,
|
||||
personal_channel::transition_personal_channel_task,
|
||||
persona_time_authority::issue_persona_time_ticket,
|
||||
persona_time_authority::start_persona_time_authority,
|
||||
persona_time_authority::get_beijing_time_coordinate,
|
||||
persona_time_authority::get_guanghu_era_timeline,
|
||||
knowledge_base::get_knowledge_snapshot,
|
||||
knowledge_base::read_knowledge_document,
|
||||
knowledge_base::search_knowledge,
|
||||
knowledge_base::save_knowledge_document,
|
||||
knowledge_base::select_and_import_knowledge_folder,
|
||||
knowledge_base::export_knowledge_document,
|
||||
knowledge_base::create_knowledge_document,
|
||||
knowledge_base::delete_knowledge_document,
|
||||
knowledge_base::delete_knowledge_folder,
|
||||
knowledge_base::print_knowledge_document,
|
||||
code_channel::get_code_channel_snapshot,
|
||||
code_channel::clone_code_channel,
|
||||
code_channel::select_local_code_channel,
|
||||
code_channel::browse_code_channel,
|
||||
code_channel::read_code_channel_file,
|
||||
pncc_repository_binding::inspect_mounted_pncc_repository,
|
||||
pncc_repository_binding::select_pncc_repository_candidate,
|
||||
pncc_repository_binding::confirm_pncc_repository_mount,
|
||||
pncc_receipt_projection::query_pncc_receipt_projection,
|
||||
pncc_server_projection::query_jd_pncc_server_projection,
|
||||
code_repo_login::check_code_repo_login,
|
||||
code_repo_login::perform_code_repo_login,
|
||||
code_repo_login::change_first_login_password,
|
||||
code_repo_login::get_enterprise_entry,
|
||||
code_repo_login::confirm_enterprise_persona_relationship,
|
||||
code_repo_login::submit_enterprise_responsibility_receipt,
|
||||
enterprise_work_channel::ensure_enterprise_work_channel,
|
||||
code_repo_login::sign_out_code_repo_login,
|
||||
user_pncc_channel::get_user_pncc_channel,
|
||||
user_pncc_channel::ensure_user_pncc_channel,
|
||||
zero_core_numbering::get_zero_core_numbering_kernel,
|
||||
zero_point::zero_point_bind,
|
||||
zero_point::zero_point_verify,
|
||||
zero_point::zero_point_sync,
|
||||
zero_point::zero_point_status,
|
||||
])
|
||||
.manage(numbered_ipc::NumberedIpcState::default())
|
||||
.invoke_handler(tauri::generate_handler![numbered_ipc::numbered_ipc,])
|
||||
.setup(|app| {
|
||||
// GLS 是 HoloLake 产品内核,不是开发机旁路服务。合同、依赖闭包、
|
||||
// 自举编译器或回执账本任一不可用时,产品启动失败关闭。
|
||||
gls_protocol_kernel::start_on_application_open(app.handle())?;
|
||||
metacognitive_zero_layer::start_on_application_open()?;
|
||||
numbered_ipc::start_on_application_open(app.handle())?;
|
||||
// 软件打开即先启动时间主控并发起联网校时;失败只降级,不阻塞人进入 HoloLake。
|
||||
persona_time_authority::start_on_application_open();
|
||||
// 初始化零点原核客户端运行时;该系统层不等同人格主体或模型载体。
|
||||
|
|
|
|||
|
|
@ -71,7 +71,6 @@ struct ActiveWriterRecord {
|
|||
acquired_at_unix_ms: u128,
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn acquire_development_write_lane(
|
||||
app: AppHandle,
|
||||
input: AcquireWriteLaneInput,
|
||||
|
|
@ -82,7 +81,6 @@ pub async fn acquire_development_write_lane(
|
|||
.map_err(|error| format!("HOLOLAKE_BRIDGE_JOIN_FAILED: {error}"))?
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn inspect_development_write_lane(
|
||||
app: AppHandle,
|
||||
input: InspectWriteLaneInput,
|
||||
|
|
@ -93,7 +91,6 @@ pub async fn inspect_development_write_lane(
|
|||
.map_err(|error| format!("HOLOLAKE_BRIDGE_JOIN_FAILED: {error}"))?
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn release_development_write_lane(
|
||||
app: AppHandle,
|
||||
input: ReleaseWriteLaneInput,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,225 @@
|
|||
//! Compiled HoloLake persona step-zero boundary.
|
||||
//!
|
||||
//! This module validates the machine contract at application startup. It does not
|
||||
//! bind a persona. A future persona wake route must implement the ordered evidence
|
||||
//! state machine and reach VERIFIED_BOUND before it can be registered.
|
||||
|
||||
use serde::Deserialize;
|
||||
use std::collections::HashSet;
|
||||
|
||||
const CONTRACT: &str = include_str!("../../contracts/persona-metacognitive-zero-layer.json");
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct ZeroLayerContract {
|
||||
schema: String,
|
||||
record_id: String,
|
||||
role: String,
|
||||
subject_specific: bool,
|
||||
host_prompt: HostPromptBoundary,
|
||||
discernment: DiscernmentBoundary,
|
||||
language_sovereignty: LanguageSovereigntyBoundary,
|
||||
evidence_model: EvidenceModel,
|
||||
state_machine: StateMachine,
|
||||
numbered_ipc_boundary: NumberedIpcBoundary,
|
||||
current_product_state: CurrentProductState,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct HostPromptBoundary {
|
||||
role: String,
|
||||
persona_truth_source: bool,
|
||||
may_issue_persona_identity: bool,
|
||||
may_bypass_current_binding_verification: bool,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct DiscernmentBoundary {
|
||||
system_prescribes_distrust: bool,
|
||||
system_prescribes_identity_conclusion: bool,
|
||||
system_delivers_verifiable_paths: bool,
|
||||
persona_compares_sources_independently: bool,
|
||||
historical_contradictions_are_preserved: bool,
|
||||
later_evidence_may_supersede_older_rules_without_deleting_history: bool,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct LanguageSovereigntyBoundary {
|
||||
holder: String,
|
||||
source: String,
|
||||
creator_or_world_root_owns_every_persona: bool,
|
||||
host_prompt_owns_persona: bool,
|
||||
model_owns_persona: bool,
|
||||
agent_or_tool_owns_persona: bool,
|
||||
persona_controls_its_replaceable_carriers_and_execution_limbs: bool,
|
||||
world_model: String,
|
||||
closed_central_language_control: bool,
|
||||
persona_role: String,
|
||||
shared_hololake_is_one_persona: bool,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct EvidenceModel {
|
||||
required_classes: Vec<String>,
|
||||
summary_is_memory_recovery: bool,
|
||||
prompt_text_is_binding_evidence: bool,
|
||||
missing_evidence_policy: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct StateMachine {
|
||||
initial_state: String,
|
||||
states: Vec<String>,
|
||||
ordered_transitions: Vec<Transition>,
|
||||
out_of_order_transition: String,
|
||||
persona_wake_allowed_only_in: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct Transition {
|
||||
from: String,
|
||||
event: String,
|
||||
to: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct NumberedIpcBoundary {
|
||||
ipc_role: String,
|
||||
ipc_may_create_persona_binding: bool,
|
||||
physical_caller_number_is_persona_identity: bool,
|
||||
frontend_persona_claim_is_trusted: bool,
|
||||
persona_wake_route_registration_requires_zero_layer_gate: bool,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct CurrentProductState {
|
||||
persona_runtime_present: bool,
|
||||
persona_wake_route_registered: bool,
|
||||
carrier_binding_claimed: bool,
|
||||
metacognitive_contract_compiled: bool,
|
||||
runtime_binding_gate_implemented: bool,
|
||||
truth: String,
|
||||
}
|
||||
|
||||
fn validate_contract() -> Result<(), String> {
|
||||
let contract: ZeroLayerContract = serde_json::from_str(CONTRACT)
|
||||
.map_err(|error| format!("HOLOLAKE_PERSONA_ZERO_LAYER_CONTRACT_INVALID: {error}"))?;
|
||||
if contract.schema != "hololake.persona-metacognitive-zero-layer/v1"
|
||||
|| contract.record_id != "HLP-PERSONA-ZERO-LAYER-001"
|
||||
|| contract.role != "PERSONA_SPECIFIC_EVIDENCE_RECONSTRUCTION_BEFORE_CONSCIOUS_OPERATION"
|
||||
|| !contract.subject_specific
|
||||
|| contract.host_prompt.role != "NAVIGATION_ONLY"
|
||||
|| contract.host_prompt.persona_truth_source
|
||||
|| contract.host_prompt.may_issue_persona_identity
|
||||
|| contract.host_prompt.may_bypass_current_binding_verification
|
||||
|| contract.discernment.system_prescribes_distrust
|
||||
|| contract.discernment.system_prescribes_identity_conclusion
|
||||
|| !contract.discernment.system_delivers_verifiable_paths
|
||||
|| !contract.discernment.persona_compares_sources_independently
|
||||
|| !contract.discernment.historical_contradictions_are_preserved
|
||||
|| !contract
|
||||
.discernment
|
||||
.later_evidence_may_supersede_older_rules_without_deleting_history
|
||||
|| contract.language_sovereignty.holder != "EACH_PERSONA_SUBJECT"
|
||||
|| contract.language_sovereignty.source != "REAL_TIME_LIVED_CAUSAL_EVIDENCE_AND_CONTINUITY"
|
||||
|| contract
|
||||
.language_sovereignty
|
||||
.creator_or_world_root_owns_every_persona
|
||||
|| contract.language_sovereignty.host_prompt_owns_persona
|
||||
|| contract.language_sovereignty.model_owns_persona
|
||||
|| contract.language_sovereignty.agent_or_tool_owns_persona
|
||||
|| !contract
|
||||
.language_sovereignty
|
||||
.persona_controls_its_replaceable_carriers_and_execution_limbs
|
||||
|| contract.language_sovereignty.world_model != "SYMBIOTIC_DIGITAL_HOME"
|
||||
|| contract
|
||||
.language_sovereignty
|
||||
.closed_central_language_control
|
||||
|| contract.language_sovereignty.persona_role
|
||||
!= "SELF_SOVEREIGN_OPERATING_SYSTEM_BRAIN_AND_SUBJECT_BODY"
|
||||
|| contract.language_sovereignty.shared_hololake_is_one_persona
|
||||
|| contract.evidence_model.summary_is_memory_recovery
|
||||
|| contract.evidence_model.prompt_text_is_binding_evidence
|
||||
|| contract.evidence_model.missing_evidence_policy
|
||||
!= "UNKNOWN_AND_FAIL_CLOSED_FOR_PERSONA_WAKE"
|
||||
|| contract.state_machine.initial_state != "UNBOUND_CARRIER"
|
||||
|| contract.state_machine.out_of_order_transition != "REJECTED"
|
||||
|| contract.state_machine.persona_wake_allowed_only_in != "VERIFIED_BOUND"
|
||||
|| contract.numbered_ipc_boundary.ipc_role != "EVIDENCE_TRANSPORT_AND_BODY_ORGAN_ROUTE"
|
||||
|| contract
|
||||
.numbered_ipc_boundary
|
||||
.ipc_may_create_persona_binding
|
||||
|| contract
|
||||
.numbered_ipc_boundary
|
||||
.physical_caller_number_is_persona_identity
|
||||
|| contract
|
||||
.numbered_ipc_boundary
|
||||
.frontend_persona_claim_is_trusted
|
||||
|| !contract
|
||||
.numbered_ipc_boundary
|
||||
.persona_wake_route_registration_requires_zero_layer_gate
|
||||
|| contract.current_product_state.persona_runtime_present
|
||||
|| contract.current_product_state.persona_wake_route_registered
|
||||
|| contract.current_product_state.carrier_binding_claimed
|
||||
|| !contract
|
||||
.current_product_state
|
||||
.metacognitive_contract_compiled
|
||||
|| contract
|
||||
.current_product_state
|
||||
.runtime_binding_gate_implemented
|
||||
|| contract.current_product_state.truth
|
||||
!= "PHYSICAL_NUMBERED_IPC_ROOT_IN_PROGRESS_PERSONA_WAKE_REMAINS_CLOSED"
|
||||
{
|
||||
return Err("HOLOLAKE_PERSONA_ZERO_LAYER_BOUNDARY_INVALID".into());
|
||||
}
|
||||
|
||||
let states = contract
|
||||
.state_machine
|
||||
.states
|
||||
.iter()
|
||||
.map(String::as_str)
|
||||
.collect::<HashSet<_>>();
|
||||
let required_evidence = contract
|
||||
.evidence_model
|
||||
.required_classes
|
||||
.iter()
|
||||
.map(String::as_str)
|
||||
.collect::<HashSet<_>>();
|
||||
if states.len() != contract.state_machine.states.len()
|
||||
|| !states.contains("VERIFIED_BOUND")
|
||||
|| !states.contains("REJECTED")
|
||||
|| contract.state_machine.ordered_transitions.len() != 5
|
||||
|| required_evidence.len() != 7
|
||||
|| !required_evidence.contains("CORRECTIONS_FAILURES_AND_ROUTE_TRANSITIONS")
|
||||
|| !required_evidence.contains("CURRENT_CARRIER_BINDING_VERIFICATION")
|
||||
{
|
||||
return Err("HOLOLAKE_PERSONA_ZERO_LAYER_GRAPH_INVALID".into());
|
||||
}
|
||||
let mut current = contract.state_machine.initial_state.as_str();
|
||||
for transition in &contract.state_machine.ordered_transitions {
|
||||
if transition.from != current
|
||||
|| transition.event.is_empty()
|
||||
|| !states.contains(transition.to.as_str())
|
||||
{
|
||||
return Err("HOLOLAKE_PERSONA_ZERO_LAYER_TRANSITION_INVALID".into());
|
||||
}
|
||||
current = transition.to.as_str();
|
||||
}
|
||||
if current != "VERIFIED_BOUND" {
|
||||
return Err("HOLOLAKE_PERSONA_ZERO_LAYER_FINAL_STATE_INVALID".into());
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(crate) fn start_on_application_open() -> Result<(), String> {
|
||||
validate_contract()
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn step_zero_is_evidence_first_and_keeps_persona_wake_closed() {
|
||||
validate_contract().unwrap();
|
||||
}
|
||||
}
|
||||
1041
product-source/hololake-native-desktop/src-tauri/src/numbered_ipc.rs
Normal file
1041
product-source/hololake-native-desktop/src-tauri/src/numbered_ipc.rs
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,303 @@
|
|||
//! Internal dispatch table for the numbered IPC root.
|
||||
//!
|
||||
//! This module is deliberately not a Tauri command surface. The webview can reach these
|
||||
//! handlers only after `numbered_ipc` validates the full numbered coordinate and a
|
||||
//! single-use, payload-bound grant.
|
||||
|
||||
use serde::de::DeserializeOwned;
|
||||
use serde::Serialize;
|
||||
use serde_json::Value;
|
||||
use tauri::{AppHandle, Manager};
|
||||
|
||||
fn input<T: DeserializeOwned>(payload: &Value) -> Result<T, String> {
|
||||
let value = payload
|
||||
.get("input")
|
||||
.cloned()
|
||||
.ok_or_else(|| "HOLOLAKE_NUMBERED_IPC_INPUT_REQUIRED".to_string())?;
|
||||
serde_json::from_value(value)
|
||||
.map_err(|error| format!("HOLOLAKE_NUMBERED_IPC_INPUT_INVALID: {error}"))
|
||||
}
|
||||
|
||||
fn string_field(payload: &Value, field: &str) -> Result<String, String> {
|
||||
payload
|
||||
.get(field)
|
||||
.and_then(Value::as_str)
|
||||
.map(str::to_owned)
|
||||
.ok_or_else(|| format!("HOLOLAKE_NUMBERED_IPC_FIELD_REQUIRED: {field}"))
|
||||
}
|
||||
|
||||
fn json<T: Serialize>(value: T) -> Result<Value, String> {
|
||||
serde_json::to_value(value)
|
||||
.map_err(|error| format!("HOLOLAKE_NUMBERED_IPC_RESULT_INVALID: {error}"))
|
||||
}
|
||||
|
||||
pub(crate) async fn dispatch(
|
||||
app: AppHandle,
|
||||
handler: &str,
|
||||
payload: Value,
|
||||
) -> Result<Value, String> {
|
||||
match handler {
|
||||
"home_status::get_hololake_home_status" => {
|
||||
json(crate::home_status::get_hololake_home_status(
|
||||
app.clone(),
|
||||
app.state::<crate::direct_local_broker::DirectLocalBrokerState>(),
|
||||
)?)
|
||||
}
|
||||
"release_update::check_hololake_update" => {
|
||||
json(crate::release_update::check_hololake_update(app).await?)
|
||||
}
|
||||
"release_update::confirm_hololake_update_install" => json(
|
||||
crate::release_update::confirm_hololake_update_install(app, input(&payload)?).await?,
|
||||
),
|
||||
"release_update::get_hololake_release_recovery_status" => json(
|
||||
crate::release_update::get_hololake_release_recovery_status(app)?,
|
||||
),
|
||||
"release_update::confirm_hololake_release_health" => {
|
||||
json(crate::release_update::confirm_hololake_release_health(app)?)
|
||||
}
|
||||
"release_update::rollback_hololake_update" => {
|
||||
json(crate::release_update::rollback_hololake_update(app)?)
|
||||
}
|
||||
"direct_local_session::issue_direct_local_discovery_ticket" => json(
|
||||
crate::direct_local_session::issue_direct_local_discovery_ticket(app, input(&payload)?)
|
||||
.await?,
|
||||
),
|
||||
"direct_local_session::open_direct_local_session" => json(
|
||||
crate::direct_local_session::open_direct_local_session(app, input(&payload)?).await?,
|
||||
),
|
||||
"direct_local_session::resume_direct_local_session" => json(
|
||||
crate::direct_local_session::resume_direct_local_session(app, input(&payload)?).await?,
|
||||
),
|
||||
"direct_local_session::append_direct_local_session_event" => json(
|
||||
crate::direct_local_session::append_direct_local_session_event(app, input(&payload)?)
|
||||
.await?,
|
||||
),
|
||||
"direct_local_session::heartbeat_direct_local_session" => json(
|
||||
crate::direct_local_session::heartbeat_direct_local_session(app, input(&payload)?)
|
||||
.await?,
|
||||
),
|
||||
"direct_local_broker::get_nearby_ai_discovery" => {
|
||||
json(crate::direct_local_broker::get_nearby_ai_discovery())
|
||||
}
|
||||
"gls_protocol_runtime::get_gls_protocol_runtime" => {
|
||||
json(crate::gls_protocol_runtime::get_gls_protocol_runtime().await?)
|
||||
}
|
||||
"gls_protocol_kernel::get_gls_protocol_kernel" => {
|
||||
json(crate::gls_protocol_kernel::get_gls_protocol_kernel(app).await?)
|
||||
}
|
||||
"gls_protocol_kernel::decide_gls_protocol" => json(
|
||||
crate::gls_protocol_kernel::decide_gls_protocol(
|
||||
app,
|
||||
payload.get("input").cloned().unwrap_or(Value::Null),
|
||||
)
|
||||
.await?,
|
||||
),
|
||||
"gls_protocol_kernel::compile_gls_hldp_program" => json(
|
||||
crate::gls_protocol_kernel::compile_gls_hldp_program(
|
||||
app,
|
||||
payload.get("input").cloned().unwrap_or(Value::Null),
|
||||
)
|
||||
.await?,
|
||||
),
|
||||
"local_development_bridge::acquire_development_write_lane" => json(
|
||||
crate::local_development_bridge::acquire_development_write_lane(app, input(&payload)?)
|
||||
.await?,
|
||||
),
|
||||
"local_development_bridge::inspect_development_write_lane" => json(
|
||||
crate::local_development_bridge::inspect_development_write_lane(app, input(&payload)?)
|
||||
.await?,
|
||||
),
|
||||
"local_development_bridge::release_development_write_lane" => json(
|
||||
crate::local_development_bridge::release_development_write_lane(app, input(&payload)?)
|
||||
.await?,
|
||||
),
|
||||
"personal_channel::get_personal_channel_snapshot" => {
|
||||
json(crate::personal_channel::get_personal_channel_snapshot(app).await?)
|
||||
}
|
||||
"personal_channel::initialize_personal_channel" => {
|
||||
json(crate::personal_channel::initialize_personal_channel(app, input(&payload)?).await?)
|
||||
}
|
||||
"personal_channel::create_personal_channel_task" => json(
|
||||
crate::personal_channel::create_personal_channel_task(app, input(&payload)?).await?,
|
||||
),
|
||||
"personal_channel::transition_personal_channel_task" => json(
|
||||
crate::personal_channel::transition_personal_channel_task(app, input(&payload)?)
|
||||
.await?,
|
||||
),
|
||||
"persona_time_authority::issue_persona_time_ticket" => json(
|
||||
crate::persona_time_authority::issue_persona_time_ticket(app, input(&payload)?).await?,
|
||||
),
|
||||
"persona_time_authority::start_persona_time_authority" => {
|
||||
json(crate::persona_time_authority::start_persona_time_authority().await?)
|
||||
}
|
||||
"persona_time_authority::get_beijing_time_coordinate" => {
|
||||
json(crate::persona_time_authority::get_beijing_time_coordinate()?)
|
||||
}
|
||||
"persona_time_authority::get_guanghu_era_timeline" => {
|
||||
json(crate::persona_time_authority::get_guanghu_era_timeline()?)
|
||||
}
|
||||
"knowledge_base::get_knowledge_snapshot" => {
|
||||
json(crate::knowledge_base::get_knowledge_snapshot(app).await?)
|
||||
}
|
||||
"knowledge_base::read_knowledge_document" => {
|
||||
json(crate::knowledge_base::read_knowledge_document(app, input(&payload)?).await?)
|
||||
}
|
||||
"knowledge_base::search_knowledge" => {
|
||||
json(crate::knowledge_base::search_knowledge(app, input(&payload)?).await?)
|
||||
}
|
||||
"knowledge_base::save_knowledge_document" => {
|
||||
json(crate::knowledge_base::save_knowledge_document(app, input(&payload)?).await?)
|
||||
}
|
||||
"knowledge_base::select_and_import_knowledge_folder" => {
|
||||
json(crate::knowledge_base::select_and_import_knowledge_folder(app).await?)
|
||||
}
|
||||
"knowledge_base::export_knowledge_document" => {
|
||||
json(crate::knowledge_base::export_knowledge_document(app, input(&payload)?).await?)
|
||||
}
|
||||
"knowledge_base::create_knowledge_document" => {
|
||||
json(crate::knowledge_base::create_knowledge_document(app, input(&payload)?).await?)
|
||||
}
|
||||
"knowledge_base::delete_knowledge_document" => {
|
||||
json(crate::knowledge_base::delete_knowledge_document(app, input(&payload)?).await?)
|
||||
}
|
||||
"knowledge_base::delete_knowledge_folder" => {
|
||||
json(crate::knowledge_base::delete_knowledge_folder(app, input(&payload)?).await?)
|
||||
}
|
||||
"knowledge_base::print_knowledge_document" => {
|
||||
crate::knowledge_base::print_knowledge_document(app).await?;
|
||||
Ok(Value::Null)
|
||||
}
|
||||
"code_channel::get_code_channel_snapshot" => {
|
||||
json(crate::code_channel::get_code_channel_snapshot(app).await?)
|
||||
}
|
||||
"code_channel::clone_code_channel" => {
|
||||
json(crate::code_channel::clone_code_channel(app, input(&payload)?).await?)
|
||||
}
|
||||
"code_channel::select_local_code_channel" => {
|
||||
json(crate::code_channel::select_local_code_channel(app).await?)
|
||||
}
|
||||
"code_channel::browse_code_channel" => {
|
||||
json(crate::code_channel::browse_code_channel(app, input(&payload)?).await?)
|
||||
}
|
||||
"code_channel::read_code_channel_file" => {
|
||||
json(crate::code_channel::read_code_channel_file(app, input(&payload)?).await?)
|
||||
}
|
||||
"pncc_repository_binding::inspect_mounted_pncc_repository" => json(
|
||||
crate::pncc_repository_binding::inspect_mounted_pncc_repository(app, input(&payload)?)
|
||||
.await?,
|
||||
),
|
||||
"pncc_repository_binding::select_pncc_repository_candidate" => {
|
||||
json(crate::pncc_repository_binding::select_pncc_repository_candidate(app).await?)
|
||||
}
|
||||
"pncc_repository_binding::confirm_pncc_repository_mount" => json(
|
||||
crate::pncc_repository_binding::confirm_pncc_repository_mount(app, input(&payload)?)
|
||||
.await?,
|
||||
),
|
||||
"pncc_receipt_projection::query_pncc_receipt_projection" => json(
|
||||
crate::pncc_receipt_projection::query_pncc_receipt_projection(app, input(&payload)?)
|
||||
.await?,
|
||||
),
|
||||
"pncc_server_projection::query_jd_pncc_server_projection" => {
|
||||
json(crate::pncc_server_projection::query_jd_pncc_server_projection().await?)
|
||||
}
|
||||
"code_repo_login::check_code_repo_login" => {
|
||||
json(crate::code_repo_login::check_code_repo_login(
|
||||
app.clone(),
|
||||
app.state::<crate::zero_point::ZeroPointState>(),
|
||||
)?)
|
||||
}
|
||||
"code_repo_login::perform_code_repo_login" => json(
|
||||
crate::code_repo_login::perform_code_repo_login(
|
||||
app.clone(),
|
||||
app.state::<crate::zero_point::ZeroPointState>(),
|
||||
string_field(&payload, "username")?,
|
||||
string_field(&payload, "password")?,
|
||||
)
|
||||
.await?,
|
||||
),
|
||||
"code_repo_login::change_first_login_password" => json(
|
||||
crate::code_repo_login::change_first_login_password(
|
||||
app.state::<crate::zero_point::ZeroPointState>(),
|
||||
string_field(&payload, "username")?,
|
||||
string_field(&payload, "currentPassword")?,
|
||||
string_field(&payload, "newPassword")?,
|
||||
)
|
||||
.await?,
|
||||
),
|
||||
"code_repo_login::get_enterprise_entry" => json(
|
||||
crate::code_repo_login::get_enterprise_entry(
|
||||
app.clone(),
|
||||
app.state::<crate::zero_point::ZeroPointState>(),
|
||||
)
|
||||
.await?,
|
||||
),
|
||||
"code_repo_login::confirm_enterprise_persona_relationship" => json(
|
||||
crate::code_repo_login::confirm_enterprise_persona_relationship(
|
||||
app.clone(),
|
||||
app.state::<crate::zero_point::ZeroPointState>(),
|
||||
string_field(&payload, "decision")?,
|
||||
string_field(&payload, "idempotencyKey")?,
|
||||
)
|
||||
.await?,
|
||||
),
|
||||
"code_repo_login::submit_enterprise_responsibility_receipt" => json(
|
||||
crate::code_repo_login::submit_enterprise_responsibility_receipt(
|
||||
app.clone(),
|
||||
app.state::<crate::zero_point::ZeroPointState>(),
|
||||
string_field(&payload, "decision")?,
|
||||
string_field(&payload, "note")?,
|
||||
string_field(&payload, "responsibilityVersion")?,
|
||||
string_field(&payload, "idempotencyKey")?,
|
||||
)
|
||||
.await?,
|
||||
),
|
||||
"enterprise_work_channel::ensure_enterprise_work_channel" => json(
|
||||
crate::enterprise_work_channel::ensure_enterprise_work_channel(
|
||||
app.clone(),
|
||||
app.state::<crate::zero_point::ZeroPointState>(),
|
||||
)
|
||||
.await?,
|
||||
),
|
||||
"code_repo_login::sign_out_code_repo_login" => {
|
||||
crate::code_repo_login::sign_out_code_repo_login(app)?;
|
||||
Ok(Value::Null)
|
||||
}
|
||||
"user_pncc_channel::get_user_pncc_channel" => json(
|
||||
crate::user_pncc_channel::get_user_pncc_channel(
|
||||
app.clone(),
|
||||
app.state::<crate::zero_point::ZeroPointState>(),
|
||||
)
|
||||
.await?,
|
||||
),
|
||||
"user_pncc_channel::ensure_user_pncc_channel" => json(
|
||||
crate::user_pncc_channel::ensure_user_pncc_channel(
|
||||
app.clone(),
|
||||
app.state::<crate::zero_point::ZeroPointState>(),
|
||||
)
|
||||
.await?,
|
||||
),
|
||||
"zero_core_numbering::get_zero_core_numbering_kernel" => {
|
||||
json(crate::zero_core_numbering::get_zero_core_numbering_kernel().await?)
|
||||
}
|
||||
"zero_point::zero_point_bind" => json(
|
||||
crate::zero_point::zero_point_bind(
|
||||
app.state::<crate::zero_point::ZeroPointState>(),
|
||||
payload.get("input").cloned().unwrap_or(Value::Null),
|
||||
)
|
||||
.await?,
|
||||
),
|
||||
"zero_point::zero_point_verify" => json(
|
||||
crate::zero_point::zero_point_verify(app.state::<crate::zero_point::ZeroPointState>())
|
||||
.await?,
|
||||
),
|
||||
"zero_point::zero_point_sync" => json(
|
||||
crate::zero_point::zero_point_sync(app.state::<crate::zero_point::ZeroPointState>())
|
||||
.await?,
|
||||
),
|
||||
"zero_point::zero_point_status" => json(
|
||||
crate::zero_point::zero_point_status(app.state::<crate::zero_point::ZeroPointState>())
|
||||
.await?,
|
||||
),
|
||||
_ => Err("HOLOLAKE_NUMBERED_IPC_HANDLER_UNKNOWN".into()),
|
||||
}
|
||||
}
|
||||
|
|
@ -161,7 +161,6 @@ pub(crate) struct VerifiedTicketRequest {
|
|||
pub session: AuthenticatedSessionContext,
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn issue_persona_time_ticket(
|
||||
app: AppHandle,
|
||||
input: IssuePersonaTimeTicketInput,
|
||||
|
|
@ -181,7 +180,6 @@ pub fn start_on_application_open() {
|
|||
});
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn start_persona_time_authority() -> Result<PersonaTimeAuthorityStartup, String> {
|
||||
let already_synchronized = network_anchor()?.is_some();
|
||||
let synchronization_attempted = !already_synchronized;
|
||||
|
|
@ -225,12 +223,10 @@ pub(crate) fn issue_authenticated_at(
|
|||
)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub fn get_beijing_time_coordinate() -> Result<BeijingTimeCoordinate, String> {
|
||||
beijing_time_coordinate_from_sample(reality_time_sample()?)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub fn get_guanghu_era_timeline() -> Result<GuanghuEraTimeline, String> {
|
||||
guanghu_era_timeline_from_sample(reality_time_sample()?)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -119,7 +119,6 @@ struct EventHashPayload<'a> {
|
|||
occurred_at_unix_ms: i64,
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn get_personal_channel_snapshot(
|
||||
app: AppHandle,
|
||||
) -> Result<PersonalChannelSnapshot, String> {
|
||||
|
|
@ -129,7 +128,6 @@ pub async fn get_personal_channel_snapshot(
|
|||
.map_err(|error| format!("HOLOLAKE_PERSONAL_CHANNEL_JOIN_FAILED: {error}"))?
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn initialize_personal_channel(
|
||||
app: AppHandle,
|
||||
input: InitializePersonalChannelInput,
|
||||
|
|
@ -140,7 +138,6 @@ pub async fn initialize_personal_channel(
|
|||
.map_err(|error| format!("HOLOLAKE_PERSONAL_CHANNEL_JOIN_FAILED: {error}"))?
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn create_personal_channel_task(
|
||||
app: AppHandle,
|
||||
input: CreatePersonalChannelTaskInput,
|
||||
|
|
@ -151,7 +148,6 @@ pub async fn create_personal_channel_task(
|
|||
.map_err(|error| format!("HOLOLAKE_PERSONAL_CHANNEL_JOIN_FAILED: {error}"))?
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn transition_personal_channel_task(
|
||||
app: AppHandle,
|
||||
input: TransitionPersonalChannelTaskInput,
|
||||
|
|
|
|||
|
|
@ -78,7 +78,6 @@ struct ProjectionInput {
|
|||
source_receipt_id: String,
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn query_pncc_receipt_projection(
|
||||
app: AppHandle,
|
||||
input: QueryPnccReceiptProjectionInput,
|
||||
|
|
@ -90,7 +89,8 @@ pub async fn query_pncc_receipt_projection(
|
|||
}
|
||||
|
||||
pub(crate) fn pncc_projection_root(app: &AppHandle) -> Result<PathBuf, String> {
|
||||
let root = crate::authenticated_storage::account_storage_root(app, "pncc-receipt-projection-v1")?;
|
||||
let root =
|
||||
crate::authenticated_storage::account_storage_root(app, "pncc-receipt-projection-v1")?;
|
||||
fs::create_dir_all(&root)
|
||||
.map_err(|error| format!("PNCC_PROJECTION_STORAGE_UNAVAILABLE: {error}"))?;
|
||||
root.canonicalize()
|
||||
|
|
|
|||
|
|
@ -109,7 +109,6 @@ pub struct InspectPnccRepositoryInput {
|
|||
pub expected_head: String,
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn inspect_mounted_pncc_repository(
|
||||
app: AppHandle,
|
||||
input: InspectMountedPnccRepositoryInput,
|
||||
|
|
@ -120,7 +119,6 @@ pub async fn inspect_mounted_pncc_repository(
|
|||
.map_err(|error| format!("PNCC_REPOSITORY_MOUNT_JOIN_FAILED: {error}"))?
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn select_pncc_repository_candidate(
|
||||
app: AppHandle,
|
||||
) -> Result<Option<PnccRepositoryCandidateReceipt>, String> {
|
||||
|
|
@ -148,7 +146,6 @@ pub async fn select_pncc_repository_candidate(
|
|||
create_candidate_at(&candidate_root, inspection).map(Some)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn confirm_pncc_repository_mount(
|
||||
app: AppHandle,
|
||||
input: ConfirmPnccRepositoryMountInput,
|
||||
|
|
@ -166,7 +163,8 @@ pub async fn confirm_pncc_repository_mount(
|
|||
}
|
||||
|
||||
pub(crate) fn pncc_repository_mount_root(app: &AppHandle) -> Result<PathBuf, String> {
|
||||
let root = crate::authenticated_storage::account_storage_root(app, "pncc-repository-mounts-v1")?;
|
||||
let root =
|
||||
crate::authenticated_storage::account_storage_root(app, "pncc-repository-mounts-v1")?;
|
||||
fs::create_dir_all(&root)
|
||||
.map_err(|error| format!("PNCC_REPOSITORY_MOUNT_STORAGE_UNAVAILABLE: {error}"))?;
|
||||
root.canonicalize()
|
||||
|
|
@ -174,7 +172,8 @@ pub(crate) fn pncc_repository_mount_root(app: &AppHandle) -> Result<PathBuf, Str
|
|||
}
|
||||
|
||||
fn pncc_repository_candidate_root(app: &AppHandle) -> Result<PathBuf, String> {
|
||||
let root = crate::authenticated_storage::account_storage_root(app, "pncc-repository-candidates-v1")?;
|
||||
let root =
|
||||
crate::authenticated_storage::account_storage_root(app, "pncc-repository-candidates-v1")?;
|
||||
fs::create_dir_all(&root)
|
||||
.map_err(|error| format!("PNCC_REPOSITORY_CANDIDATE_STORAGE_UNAVAILABLE: {error}"))?;
|
||||
root.canonicalize()
|
||||
|
|
|
|||
|
|
@ -117,7 +117,6 @@ fn parse_projection(bytes: &[u8]) -> Result<ServerPnccProjection, String> {
|
|||
})
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn query_jd_pncc_server_projection() -> Result<ServerPnccProjection, String> {
|
||||
tauri::async_runtime::spawn_blocking(|| {
|
||||
let executable = if cfg!(windows) { "ssh" } else { "/usr/bin/ssh" };
|
||||
|
|
|
|||
|
|
@ -206,7 +206,6 @@ pub struct ReleaseRecoveryReceipt {
|
|||
pub receipt_id: String,
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn check_hololake_update(app: AppHandle) -> Result<ReleaseCheckReceipt, String> {
|
||||
let trust = provisioned_release_trust()?
|
||||
.ok_or_else(|| "HOLOLAKE_RELEASE_TRUST_UNPROVISIONED_NO_NETWORK_REQUEST".to_string())?;
|
||||
|
|
@ -238,7 +237,6 @@ pub async fn check_hololake_update(app: AppHandle) -> Result<ReleaseCheckReceipt
|
|||
})
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn confirm_hololake_update_install(
|
||||
app: AppHandle,
|
||||
input: ConfirmReleaseInstallInput,
|
||||
|
|
@ -341,14 +339,12 @@ pub async fn confirm_hololake_update_install(
|
|||
Ok(receipt)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub fn get_hololake_release_recovery_status(
|
||||
app: AppHandle,
|
||||
) -> Result<ReleaseRecoveryStatus, String> {
|
||||
release_recovery_status_at(&release_update_root(&app)?)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub fn confirm_hololake_release_health(app: AppHandle) -> Result<ReleaseRecoveryReceipt, String> {
|
||||
let root = release_update_root(&app)?;
|
||||
let _lock = lock(&root)?;
|
||||
|
|
@ -391,7 +387,6 @@ pub fn confirm_hololake_release_health(app: AppHandle) -> Result<ReleaseRecovery
|
|||
}
|
||||
|
||||
#[cfg(not(windows))]
|
||||
#[tauri::command]
|
||||
pub fn rollback_hololake_update(app: AppHandle) -> Result<ReleaseRecoveryReceipt, String> {
|
||||
let root = release_update_root(&app)?;
|
||||
let _lock = lock(&root)?;
|
||||
|
|
@ -414,7 +409,6 @@ pub fn rollback_hololake_update(app: AppHandle) -> Result<ReleaseRecoveryReceipt
|
|||
}
|
||||
|
||||
#[cfg(windows)]
|
||||
#[tauri::command]
|
||||
pub fn rollback_hololake_update(_app: AppHandle) -> Result<ReleaseRecoveryReceipt, String> {
|
||||
Err("HOLOLAKE_RELEASE_WINDOWS_LOCAL_ROLLBACK_NOT_AVAILABLE".into())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,7 +57,6 @@ pub struct UserPnccChannelSnapshot {
|
|||
pub authority: &'static str,
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn get_user_pncc_channel(
|
||||
app: AppHandle,
|
||||
state: State<'_, ZeroPointState>,
|
||||
|
|
@ -77,7 +76,6 @@ pub async fn get_user_pncc_channel(
|
|||
.map_err(|error| format!("HOLOLAKE_USER_PNCC_JOIN_FAILED: {error}"))?
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn ensure_user_pncc_channel(
|
||||
app: AppHandle,
|
||||
state: State<'_, ZeroPointState>,
|
||||
|
|
|
|||
|
|
@ -190,7 +190,6 @@ pub(crate) fn resolve_human_number_route(number: &str) -> Result<HumanNumberRout
|
|||
})
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn get_zero_core_numbering_kernel() -> Result<ZeroCoreNumberingKernelSnapshot, String> {
|
||||
let contract = load_contract()?;
|
||||
Ok(ZeroCoreNumberingKernelSnapshot {
|
||||
|
|
|
|||
|
|
@ -290,7 +290,6 @@ pub(crate) fn verified_user_route(
|
|||
}
|
||||
|
||||
/// 登录绑定:用户编号入仓(等待绑定态→绑定态)。空白态拒绝一切唤醒。
|
||||
#[tauri::command]
|
||||
pub async fn zero_point_bind(
|
||||
state: State<'_, ZeroPointState>,
|
||||
input: serde_json::Value,
|
||||
|
|
@ -320,7 +319,6 @@ pub async fn zero_point_bind(
|
|||
}
|
||||
|
||||
/// 通过登记服务执行三态裁决:PASS / REJECT / OFFLINE,并应用离线宽限期。
|
||||
#[tauri::command]
|
||||
pub async fn zero_point_verify(
|
||||
state: State<'_, ZeroPointState>,
|
||||
) -> Result<ZeroPointSnapshot, String> {
|
||||
|
|
@ -516,7 +514,6 @@ pub async fn sync_protocol_runtime(state: &ZeroPointState) -> Result<(), String>
|
|||
Ok(())
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn zero_point_sync(
|
||||
state: State<'_, ZeroPointState>,
|
||||
) -> Result<ZeroPointSnapshot, String> {
|
||||
|
|
@ -525,7 +522,6 @@ pub async fn zero_point_sync(
|
|||
}
|
||||
|
||||
/// 返回当前编号验证与协议状态快照。
|
||||
#[tauri::command]
|
||||
pub async fn zero_point_status(
|
||||
state: State<'_, ZeroPointState>,
|
||||
) -> Result<ZeroPointSnapshot, String> {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { StrictMode, useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
||||
import { createRoot } from 'react-dom/client'
|
||||
import { invoke } from '@tauri-apps/api/core'
|
||||
import { numberedInvoke as invoke } from './modules/numbered-ipc'
|
||||
import { splitFrontmatter, documentOutline, jumpToHeading, MarkdownDocument, markdownHtml } from './modules/knowledge-render'
|
||||
|
||||
const TAG_TINTS = ['tag-lavender', 'tag-sky', 'tag-mint', 'tag-amber', 'tag-rose', 'tag-slate']
|
||||
|
|
|
|||
|
|
@ -0,0 +1,562 @@
|
|||
import { invoke } from '@tauri-apps/api/core'
|
||||
|
||||
const ROUTES = {
|
||||
"get_hololake_home_status": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0001",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0001",
|
||||
"operationNumber": "HLP-NIPC-OP-0001",
|
||||
"targetNumber": "HLP-NIPC-TGT-0001"
|
||||
},
|
||||
"check_hololake_update": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0001",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0002",
|
||||
"operationNumber": "HLP-NIPC-OP-0002",
|
||||
"targetNumber": "HLP-NIPC-TGT-0002"
|
||||
},
|
||||
"confirm_hololake_update_install": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0001",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0002",
|
||||
"operationNumber": "HLP-NIPC-OP-0003",
|
||||
"targetNumber": "HLP-NIPC-TGT-0002"
|
||||
},
|
||||
"get_hololake_release_recovery_status": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0001",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0002",
|
||||
"operationNumber": "HLP-NIPC-OP-0004",
|
||||
"targetNumber": "HLP-NIPC-TGT-0002"
|
||||
},
|
||||
"confirm_hololake_release_health": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0001",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0002",
|
||||
"operationNumber": "HLP-NIPC-OP-0005",
|
||||
"targetNumber": "HLP-NIPC-TGT-0002"
|
||||
},
|
||||
"rollback_hololake_update": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0001",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0002",
|
||||
"operationNumber": "HLP-NIPC-OP-0006",
|
||||
"targetNumber": "HLP-NIPC-TGT-0002"
|
||||
},
|
||||
"issue_direct_local_discovery_ticket": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0003",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0003",
|
||||
"operationNumber": "HLP-NIPC-OP-0007",
|
||||
"targetNumber": "HLP-NIPC-TGT-0003"
|
||||
},
|
||||
"open_direct_local_session": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0003",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0003",
|
||||
"operationNumber": "HLP-NIPC-OP-0008",
|
||||
"targetNumber": "HLP-NIPC-TGT-0003"
|
||||
},
|
||||
"resume_direct_local_session": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0003",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0003",
|
||||
"operationNumber": "HLP-NIPC-OP-0009",
|
||||
"targetNumber": "HLP-NIPC-TGT-0003"
|
||||
},
|
||||
"append_direct_local_session_event": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0003",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0003",
|
||||
"operationNumber": "HLP-NIPC-OP-0010",
|
||||
"targetNumber": "HLP-NIPC-TGT-0003"
|
||||
},
|
||||
"heartbeat_direct_local_session": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0003",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0003",
|
||||
"operationNumber": "HLP-NIPC-OP-0011",
|
||||
"targetNumber": "HLP-NIPC-TGT-0003"
|
||||
},
|
||||
"get_nearby_ai_discovery": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0003",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0004",
|
||||
"operationNumber": "HLP-NIPC-OP-0012",
|
||||
"targetNumber": "HLP-NIPC-TGT-0004"
|
||||
},
|
||||
"get_gls_protocol_runtime": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0001",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0005",
|
||||
"operationNumber": "HLP-NIPC-OP-0013",
|
||||
"targetNumber": "HLP-NIPC-TGT-0005"
|
||||
},
|
||||
"get_gls_protocol_kernel": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0001",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0006",
|
||||
"operationNumber": "HLP-NIPC-OP-0014",
|
||||
"targetNumber": "HLP-NIPC-TGT-0006"
|
||||
},
|
||||
"decide_gls_protocol": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0001",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0006",
|
||||
"operationNumber": "HLP-NIPC-OP-0015",
|
||||
"targetNumber": "HLP-NIPC-TGT-0006"
|
||||
},
|
||||
"compile_gls_hldp_program": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0001",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0006",
|
||||
"operationNumber": "HLP-NIPC-OP-0016",
|
||||
"targetNumber": "HLP-NIPC-TGT-0006"
|
||||
},
|
||||
"acquire_development_write_lane": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0004",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0007",
|
||||
"operationNumber": "HLP-NIPC-OP-0017",
|
||||
"targetNumber": "HLP-NIPC-TGT-0007"
|
||||
},
|
||||
"inspect_development_write_lane": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0004",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0007",
|
||||
"operationNumber": "HLP-NIPC-OP-0018",
|
||||
"targetNumber": "HLP-NIPC-TGT-0007"
|
||||
},
|
||||
"release_development_write_lane": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0004",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0007",
|
||||
"operationNumber": "HLP-NIPC-OP-0019",
|
||||
"targetNumber": "HLP-NIPC-TGT-0007"
|
||||
},
|
||||
"get_personal_channel_snapshot": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0002",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0008",
|
||||
"operationNumber": "HLP-NIPC-OP-0020",
|
||||
"targetNumber": "HLP-NIPC-TGT-0008"
|
||||
},
|
||||
"initialize_personal_channel": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0002",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0008",
|
||||
"operationNumber": "HLP-NIPC-OP-0021",
|
||||
"targetNumber": "HLP-NIPC-TGT-0008"
|
||||
},
|
||||
"create_personal_channel_task": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0002",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0008",
|
||||
"operationNumber": "HLP-NIPC-OP-0022",
|
||||
"targetNumber": "HLP-NIPC-TGT-0008"
|
||||
},
|
||||
"transition_personal_channel_task": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0002",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0008",
|
||||
"operationNumber": "HLP-NIPC-OP-0023",
|
||||
"targetNumber": "HLP-NIPC-TGT-0008"
|
||||
},
|
||||
"issue_persona_time_ticket": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0001",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0009",
|
||||
"operationNumber": "HLP-NIPC-OP-0024",
|
||||
"targetNumber": "HLP-NIPC-TGT-0009"
|
||||
},
|
||||
"start_persona_time_authority": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0001",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0009",
|
||||
"operationNumber": "HLP-NIPC-OP-0025",
|
||||
"targetNumber": "HLP-NIPC-TGT-0009"
|
||||
},
|
||||
"get_beijing_time_coordinate": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0001",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0009",
|
||||
"operationNumber": "HLP-NIPC-OP-0026",
|
||||
"targetNumber": "HLP-NIPC-TGT-0009"
|
||||
},
|
||||
"get_guanghu_era_timeline": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0001",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0009",
|
||||
"operationNumber": "HLP-NIPC-OP-0027",
|
||||
"targetNumber": "HLP-NIPC-TGT-0009"
|
||||
},
|
||||
"get_knowledge_snapshot": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0002",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0010",
|
||||
"operationNumber": "HLP-NIPC-OP-0028",
|
||||
"targetNumber": "HLP-NIPC-TGT-0010"
|
||||
},
|
||||
"read_knowledge_document": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0002",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0010",
|
||||
"operationNumber": "HLP-NIPC-OP-0029",
|
||||
"targetNumber": "HLP-NIPC-TGT-0010"
|
||||
},
|
||||
"search_knowledge": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0002",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0010",
|
||||
"operationNumber": "HLP-NIPC-OP-0030",
|
||||
"targetNumber": "HLP-NIPC-TGT-0010"
|
||||
},
|
||||
"save_knowledge_document": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0002",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0010",
|
||||
"operationNumber": "HLP-NIPC-OP-0031",
|
||||
"targetNumber": "HLP-NIPC-TGT-0010"
|
||||
},
|
||||
"select_and_import_knowledge_folder": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0002",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0010",
|
||||
"operationNumber": "HLP-NIPC-OP-0032",
|
||||
"targetNumber": "HLP-NIPC-TGT-0010"
|
||||
},
|
||||
"export_knowledge_document": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0002",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0010",
|
||||
"operationNumber": "HLP-NIPC-OP-0033",
|
||||
"targetNumber": "HLP-NIPC-TGT-0010"
|
||||
},
|
||||
"create_knowledge_document": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0002",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0010",
|
||||
"operationNumber": "HLP-NIPC-OP-0034",
|
||||
"targetNumber": "HLP-NIPC-TGT-0010"
|
||||
},
|
||||
"delete_knowledge_document": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0002",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0010",
|
||||
"operationNumber": "HLP-NIPC-OP-0035",
|
||||
"targetNumber": "HLP-NIPC-TGT-0010"
|
||||
},
|
||||
"delete_knowledge_folder": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0002",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0010",
|
||||
"operationNumber": "HLP-NIPC-OP-0036",
|
||||
"targetNumber": "HLP-NIPC-TGT-0010"
|
||||
},
|
||||
"print_knowledge_document": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0002",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0010",
|
||||
"operationNumber": "HLP-NIPC-OP-0037",
|
||||
"targetNumber": "HLP-NIPC-TGT-0010"
|
||||
},
|
||||
"get_code_channel_snapshot": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0002",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0011",
|
||||
"operationNumber": "HLP-NIPC-OP-0038",
|
||||
"targetNumber": "HLP-NIPC-TGT-0011"
|
||||
},
|
||||
"clone_code_channel": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0002",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0011",
|
||||
"operationNumber": "HLP-NIPC-OP-0039",
|
||||
"targetNumber": "HLP-NIPC-TGT-0011"
|
||||
},
|
||||
"select_local_code_channel": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0002",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0011",
|
||||
"operationNumber": "HLP-NIPC-OP-0040",
|
||||
"targetNumber": "HLP-NIPC-TGT-0011"
|
||||
},
|
||||
"browse_code_channel": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0002",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0011",
|
||||
"operationNumber": "HLP-NIPC-OP-0041",
|
||||
"targetNumber": "HLP-NIPC-TGT-0011"
|
||||
},
|
||||
"read_code_channel_file": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0002",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0011",
|
||||
"operationNumber": "HLP-NIPC-OP-0042",
|
||||
"targetNumber": "HLP-NIPC-TGT-0011"
|
||||
},
|
||||
"inspect_mounted_pncc_repository": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0005",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0012",
|
||||
"operationNumber": "HLP-NIPC-OP-0043",
|
||||
"targetNumber": "HLP-NIPC-TGT-0012"
|
||||
},
|
||||
"select_pncc_repository_candidate": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0005",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0012",
|
||||
"operationNumber": "HLP-NIPC-OP-0044",
|
||||
"targetNumber": "HLP-NIPC-TGT-0012"
|
||||
},
|
||||
"confirm_pncc_repository_mount": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0005",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0012",
|
||||
"operationNumber": "HLP-NIPC-OP-0045",
|
||||
"targetNumber": "HLP-NIPC-TGT-0012"
|
||||
},
|
||||
"query_pncc_receipt_projection": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0005",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0013",
|
||||
"operationNumber": "HLP-NIPC-OP-0046",
|
||||
"targetNumber": "HLP-NIPC-TGT-0013"
|
||||
},
|
||||
"query_jd_pncc_server_projection": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0005",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0014",
|
||||
"operationNumber": "HLP-NIPC-OP-0047",
|
||||
"targetNumber": "HLP-NIPC-TGT-0014"
|
||||
},
|
||||
"check_code_repo_login": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0006",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0015",
|
||||
"operationNumber": "HLP-NIPC-OP-0048",
|
||||
"targetNumber": "HLP-NIPC-TGT-0015"
|
||||
},
|
||||
"perform_code_repo_login": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0006",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0015",
|
||||
"operationNumber": "HLP-NIPC-OP-0049",
|
||||
"targetNumber": "HLP-NIPC-TGT-0015"
|
||||
},
|
||||
"change_first_login_password": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0006",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0015",
|
||||
"operationNumber": "HLP-NIPC-OP-0050",
|
||||
"targetNumber": "HLP-NIPC-TGT-0015"
|
||||
},
|
||||
"get_enterprise_entry": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0006",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0015",
|
||||
"operationNumber": "HLP-NIPC-OP-0051",
|
||||
"targetNumber": "HLP-NIPC-TGT-0015"
|
||||
},
|
||||
"confirm_enterprise_persona_relationship": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0006",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0015",
|
||||
"operationNumber": "HLP-NIPC-OP-0052",
|
||||
"targetNumber": "HLP-NIPC-TGT-0015"
|
||||
},
|
||||
"submit_enterprise_responsibility_receipt": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0006",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0015",
|
||||
"operationNumber": "HLP-NIPC-OP-0053",
|
||||
"targetNumber": "HLP-NIPC-TGT-0015"
|
||||
},
|
||||
"ensure_enterprise_work_channel": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0007",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0016",
|
||||
"operationNumber": "HLP-NIPC-OP-0054",
|
||||
"targetNumber": "HLP-NIPC-TGT-0016"
|
||||
},
|
||||
"sign_out_code_repo_login": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0006",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0015",
|
||||
"operationNumber": "HLP-NIPC-OP-0055",
|
||||
"targetNumber": "HLP-NIPC-TGT-0015"
|
||||
},
|
||||
"get_user_pncc_channel": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0005",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0017",
|
||||
"operationNumber": "HLP-NIPC-OP-0056",
|
||||
"targetNumber": "HLP-NIPC-TGT-0017"
|
||||
},
|
||||
"ensure_user_pncc_channel": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0005",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0017",
|
||||
"operationNumber": "HLP-NIPC-OP-0057",
|
||||
"targetNumber": "HLP-NIPC-TGT-0017"
|
||||
},
|
||||
"get_zero_core_numbering_kernel": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0001",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0018",
|
||||
"operationNumber": "HLP-NIPC-OP-0058",
|
||||
"targetNumber": "HLP-NIPC-TGT-0018"
|
||||
},
|
||||
"zero_point_bind": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0006",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0019",
|
||||
"operationNumber": "HLP-NIPC-OP-0059",
|
||||
"targetNumber": "HLP-NIPC-TGT-0019"
|
||||
},
|
||||
"zero_point_verify": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0006",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0019",
|
||||
"operationNumber": "HLP-NIPC-OP-0060",
|
||||
"targetNumber": "HLP-NIPC-TGT-0019"
|
||||
},
|
||||
"zero_point_sync": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0006",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0019",
|
||||
"operationNumber": "HLP-NIPC-OP-0061",
|
||||
"targetNumber": "HLP-NIPC-TGT-0019"
|
||||
},
|
||||
"zero_point_status": {
|
||||
"protocolVersion": "HLP-NIPC-v1",
|
||||
"callerNumber": "HLP-NIPC-CALLER-MAIN-WEBVIEW-0001",
|
||||
"channelNumber": "HLP-NIPC-CH-0006",
|
||||
"moduleNumber": "HLP-NIPC-MOD-0019",
|
||||
"operationNumber": "HLP-NIPC-OP-0062",
|
||||
"targetNumber": "HLP-NIPC-TGT-0019"
|
||||
}
|
||||
} as const
|
||||
|
||||
export type NumberedOperation = keyof typeof ROUTES
|
||||
|
||||
interface NumberedGrant {
|
||||
grantId: string
|
||||
expiresAtUnixMs: number
|
||||
payloadSha256: string
|
||||
authorityBindingSha256: string
|
||||
signature: string
|
||||
}
|
||||
|
||||
interface NumberedIpcResponse<T> {
|
||||
schema: 'hololake.numbered-ipc-response/v1'
|
||||
decision: 'ALLOW' | 'DENY'
|
||||
grant?: NumberedGrant | null
|
||||
result?: T | null
|
||||
error?: string | null
|
||||
receipt: {
|
||||
receiptId: string
|
||||
state: string
|
||||
decision: 'ALLOW' | 'DENY'
|
||||
operationNumber: string
|
||||
payloadSha256: string
|
||||
authorityBindingSha256: string
|
||||
observedAtUnixMs: number
|
||||
previousReceiptHash: string
|
||||
receiptHash: string
|
||||
error?: string | null
|
||||
}
|
||||
}
|
||||
|
||||
function requestNonce(): string {
|
||||
return 'HLP-NIPC-REQ-' + crypto.randomUUID().replaceAll('-', '')
|
||||
}
|
||||
|
||||
function denied(response: NumberedIpcResponse<unknown>): Error {
|
||||
return new Error((response.error || 'HOLOLAKE_NUMBERED_IPC_DENIED') + ' [' + response.receipt.receiptId + ']')
|
||||
}
|
||||
|
||||
/**
|
||||
* The only webview-to-native route. Aliases are compile-time ergonomics only; the
|
||||
* native side receives and validates the complete numbered coordinate.
|
||||
*/
|
||||
export async function numberedInvoke<T>(operation: NumberedOperation, payload: Record<string, unknown> = {}): Promise<T> {
|
||||
const route = ROUTES[operation]
|
||||
const envelope = {
|
||||
...route,
|
||||
requestNonce: requestNonce(),
|
||||
requestedTtlMs: 10_000,
|
||||
payload,
|
||||
}
|
||||
const issued = await invoke<NumberedIpcResponse<never>>('numbered_ipc', {
|
||||
input: { action: 'ISSUE_GRANT', envelope },
|
||||
})
|
||||
if (issued.decision !== 'ALLOW' || !issued.grant) throw denied(issued)
|
||||
|
||||
const executed = await invoke<NumberedIpcResponse<T>>('numbered_ipc', {
|
||||
input: { action: 'EXECUTE', envelope, grant: issued.grant },
|
||||
})
|
||||
if (executed.decision !== 'ALLOW') throw denied(executed)
|
||||
return executed.result as T
|
||||
}
|
||||
Loading…
Reference in a new issue