diff --git a/product-source/hololake-native-desktop/README.md b/product-source/hololake-native-desktop/README.md
index eba71911a..dcdf9580e 100644
--- a/product-source/hololake-native-desktop/README.md
+++ b/product-source/hololake-native-desktop/README.md
@@ -1,18 +1,14 @@
# HoloLake Native Desktop
-状态:`唯一原生主线候选 · 个人空间、知识库与代码频道源码已实现 · 安装验收未完成`
+状态:`唯一原生主线候选 · 已有底层能力 · 第一阶段可见主体尚未实现`
这是 HoloLake 唯一未来桌面产品主线的干净源码根,采用 Tauri v2、Rust 和
React/TypeScript。桌面上的 `world.guanghu.hololake` 安装包是本源码线的本地候选验收壳,
不是第三条产品线,也还不是第一阶段正式产品。
-当前可见产品已经收束为“我的光湖”:个人身份只在首次使用时建立一次,之后直接进入概览、
-知识库、代码频道、回执与系统详情。知识库由新的 Rust 本机根持有,提供页面目录、阅读、搜索
-和文件夹导入;旧 HoloLake Era 知识数据仅以独立只读来源兼容。代码频道支持粘贴正式 HTTPS
-频道地址克隆,也可登记现有本地 Git 文件夹。两者都不因此取得推送、发布或部署权限。
-
-个人频道 SQLite 内核仍保留任务、事件和回执能力,但手工填写“任务标题/原因”不再作为默认
-产品入口。当前源码与单元测试已经通过;桌面安装、跨重启真实读回和完整第一阶段仍需独立验收。
+当前已经建立可编译原生壳、选定的 GHS-014 个人频道首页、本机 broker/session、动态能力
+路由、GH-PNCC 只读投影,以及失败关闭的签名更新和回滚管道。这些能力保留,但都属于湖下
+基础设施;当前首页只是视觉与连接状态验收面,不代表第一阶段产品主体已经实现。
## 供体边界
@@ -44,9 +40,7 @@ React/TypeScript。桌面上的 `world.guanghu.hololake` 安装包是本源码
机器合同:`contracts/stage-one-platform.json`。
-个人频道、知识库和代码频道的机器合同分别是 `contracts/personal-channel-kernel.json`、
-`contracts/knowledge-workspace.json` 与 `contracts/code-channel.json`。本机身份不是平台账户
-认证;本机知识与源码访问也不产生仓库、服务器、部署或发布权限。
+该文件目前只登记模块和边界,不表示第一阶段运行时或可见产品主体已经实现。
## 本机开发桥
@@ -67,10 +61,10 @@ MCP 只保留为外部工具适配入口;它断开或编程 AI 重启时,活
唯一主线、候选壳、供体和数据保护边界见
`routing/hololake-stage-one-desktop-convergence.json`。当前开发顺序固定为:
-1. 个人频道身份—事件—回执内核:源码与自动化测试已实现;
-2. 原生知识库与代码频道:源码与自动化测试已实现,安装验收未执行;
+1. 实现个人频道身份—任务—事件—回执最小内核;
+2. 迁入知识树、页面、搜索和本地持久化纵向切片;
3. 实现人类审批中心与 Git 证据回读;
4. 投影小湖灯跨会话连续性;
-5. 最后完成公开签名、更新、回滚和可逆数据迁移。
+5. 最后完成签名安装、更新、回滚和可逆数据迁移。
连接、动态路由、发布广播和更新服务器继续作为受门控基础设施维护,不得抢占上述产品顺序。
diff --git a/product-source/hololake-native-desktop/audit/knowledge-workspace-migration-provenance.json b/product-source/hololake-native-desktop/audit/knowledge-workspace-migration-provenance.json
deleted file mode 100644
index fbfbc9073..000000000
--- a/product-source/hololake-native-desktop/audit/knowledge-workspace-migration-provenance.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
- "schema": "hololake.knowledge-workspace-migration-provenance/v1",
- "record_id": "HLP-KNOWLEDGE-MIGRATION-001",
- "state": "CLEAN_ROOM_SOURCE_MIGRATION_IMPLEMENTED_LOCAL_RUNTIME_ACCEPTED",
- "target": "product-source/hololake-native-desktop",
- "donors": [
- {
- "source": "product-source/hololake-desktop",
- "role": "READ_ONLY_FOLDER_IMPORT_BEHAVIOR_DONOR",
- "runtime_copied": false
- },
- {
- "source": "product-source/guanghu-knowledge-base",
- "role": "READ_ONLY_PAGE_TREE_SEARCH_READING_UX_DONOR",
- "runtime_copied": false
- },
- {
- "source": "HoloLake Era.app 0.8.0",
- "role": "READ_ONLY_INSTALLED_BEHAVIOR_AND_COMPATIBILITY_DONOR",
- "runtime_copied": false
- },
- {
- "source": "Singapore Outline 0.80.2",
- "role": "READ_ONLY_INTERACTION_AND_INFORMATION_ARCHITECTURE_DONOR",
- "runtime_copied": false,
- "live_content_documents_observed": 4,
- "content_migration_source": false
- }
- ],
- "migration_units": [
- "PAGE_TREE_CONTRACT",
- "DOCUMENT_READING_CONTRACT",
- "BOUNDED_SEARCH_CONTRACT",
- "NATIVE_FOLDER_IMPORT_CONTRACT",
- "LOCAL_GIT_COMMIT_RECEIPT",
- "NESTED_OUTLINE_NAVIGATION",
- "INDEPENDENT_SCROLL_REGIONS",
- "GFM_AND_WIKI_LINK_RENDERING",
- "EXACT_CONTENT_DEDUPLICATION",
- "OPTIMISTIC_NATIVE_EDITING"
- ],
- "excluded": [
- "ELECTRON_RUNTIME",
- "OUTLINE_SERVER_RUNTIME",
- "TOLARIA_SURFACE",
- "LEGACY_WRITE_PATH",
- "IN_PLACE_DATA_MIGRATION"
- ],
- "legacy_data_boundary": {
- "mode": "READ_ONLY_COMPATIBILITY_SOURCE",
- "modified": false,
- "migrated": false,
- "deletion_allowed": false,
- "observed_markdown_documents": 279,
- "observed_exact_duplicate_groups": 121,
- "observed_exact_duplicate_extras": 121
- },
- "native_data_audit": {
- "observed_markdown_documents_before_reconciliation": 130,
- "cross_source_identical_documents": 121,
- "union_unique_documents": 167,
- "display_policy": "PREFER_NATIVE_THEN_COALESCE_EXACT_SHA256"
- }
-}
diff --git a/product-source/hololake-native-desktop/audit/local-runtime-acceptance-20260815.json b/product-source/hololake-native-desktop/audit/local-runtime-acceptance-20260815.json
deleted file mode 100644
index 2c3d93069..000000000
--- a/product-source/hololake-native-desktop/audit/local-runtime-acceptance-20260815.json
+++ /dev/null
@@ -1,77 +0,0 @@
-{
- "schema": "hololake.local-runtime-acceptance/v1",
- "receipt_id": "GH-HOLOLAKE-LOCAL-RUNTIME-20260815-001",
- "state": "PASS_100_LOCAL_RUNTIME_ONLY",
- "observed_at": "2026-08-15T09:18:00+08:00",
- "installed_application": {
- "path": "/Users/bingshuolingdianyuanhe/Desktop/HoloLake 第一阶段.app",
- "bundle_identifier": "world.guanghu.hololake",
- "executable_sha256": "310c1b71a96b67d79435b62a553fcdba2377ab3c4ae04a19a1ffa0113ce5bcea",
- "cdhash": "7a856cc7495c74ea7aa7c3b6127b73aabf6fe9fb",
- "signature": "AD_HOC_HARDENED_RUNTIME_LOCAL_ONLY",
- "developer_id_team": null,
- "apple_notarized": false
- },
- "personal_space": {
- "display_name_readback": "冰朔",
- "identity_cardinality": 1,
- "restart_readback": true,
- "manual_task_form_present": false
- },
- "knowledge": {
- "legacy_source": "HOLOLAKE_ERA_READ_ONLY",
- "legacy_document_count": 279,
- "native_document_count": 130,
- "raw_document_count": 409,
- "unique_document_count": 167,
- "exact_duplicate_documents_folded": 242,
- "native_git_head": "520d5c053dd22b7d73b375973ba1f31edfee82e6",
- "folder_import": "PASS",
- "repeated_folder_import": "ALREADY_PRESENT_NO_SECOND_TREE",
- "nested_tree_open": "PASS",
- "document_independent_scroll": "PASS",
- "gfm_table_and_wiki_link_projection": "PASS",
- "native_edit_with_optimistic_hash_and_git_receipt": "PASS",
- "search_query": "连续性验收",
- "search_result": "导入/hololake-runtime-acceptance-knowledge/notes/continuity.md",
- "restart_readback": true,
- "legacy_source_modified": false
- },
- "code_channel": {
- "input_url": "https://guanghulab.com/code/bingshuo/guanghu-ice-heart",
- "normalized_remote": "https://guanghulab.com/code/bingshuo/guanghu-ice-heart.git",
- "git_head": "a4f67a0634dd3664452bb2ea2747d13df1479f99",
- "branch": "main",
- "repository_clean": true,
- "repository_tree_open": "PASS",
- "json_machine_to_knowledge_projection": "PASS",
- "credential_prompt_observed": false,
- "restart_readback": true,
- "push_or_deploy_attempted": false
- },
- "desktop_convergence": {
- "active_desktop_entry_count": 1,
- "active_entry": "/Users/bingshuolingdianyuanhe/Desktop/HoloLake 第一阶段.app",
- "recoverable_archive": "/Users/bingshuolingdianyuanhe/Documents/HoloLake Archive/2026-08-15-0912-pre-real-knowledge",
- "deleted": false
- },
- "automated_gates": {
- "node_tests": "50_PASS",
- "rust_tests": "59_PASS",
- "typescript_vite_build": "PASS",
- "npm_dependency_audit": "0_VULNERABILITIES",
- "cargo_clippy_deny_warnings": "PASS",
- "codesign_strict_verification": "PASS"
- },
- "exclusions": [
- "FULL_STAGE_ONE_PRODUCT_COMPLETION",
- "PUBLIC_DEVELOPER_ID_SIGNATURE",
- "APPLE_NOTARIZATION",
- "PUBLIC_RELEASE_ACTIVATION",
- "SOURCE_PUBLICATION",
- "SERVER_DEPLOYMENT",
- "PERSONA_BINDING_RECOVERY_COMPLETION",
- "CURRENT_CODEX_NATIVE_CONNECTION_RUNTIME_ACCEPTANCE",
- "GH_PNCC_NONZERO_RUNTIME_PROJECTION"
- ]
-}
diff --git a/product-source/hololake-native-desktop/contracts/code-channel.json b/product-source/hololake-native-desktop/contracts/code-channel.json
deleted file mode 100644
index 33cd103ba..000000000
--- a/product-source/hololake-native-desktop/contracts/code-channel.json
+++ /dev/null
@@ -1,50 +0,0 @@
-{
- "schema": "hololake.user-code-channel-contract/v1",
- "record_id": "HLP-USER-CODE-CHANNEL-001",
- "state": "LOCAL_INSTALLED_RUNTIME_ACCEPTED_PUBLIC_RELEASE_PENDING",
- "entry_methods": ["OFFICIAL_HTTPS_CHANNEL_CLONE", "LOCAL_GIT_FOLDER_REGISTRATION"],
- "clone": {
- "allowed_schemes": ["https"],
- "allowed_hosts": ["guanghulab.com", "guanghubingshuo.com"],
- "embedded_credentials_allowed": false,
- "query_or_fragment_credentials_allowed": false,
- "terminal_prompt_allowed": false,
- "credential_helper_allowed": false,
- "app_owned_destination": true,
- "failed_destination_cleanup_bounded": true
- },
- "registry": {
- "owner": "HOLOLAKE_NATIVE_RUST_CORE",
- "location": "TAURI_APP_DATA_CODE_CHANNEL_V1",
- "stored_fields_include_credentials": false,
- "atomic_write": true,
- "restart_readback": true
- },
- "workbench": {
- "repository_tree_browse": true,
- "registered_repository_openable": true,
- "path_escape_denied": true,
- "symlink_traversal_denied": true,
- "maximum_text_file_bytes": 2097152,
- "knowledge_projection": true,
- "source_projection": true,
- "human_readable_formats": ["markdown", "json", "hdlp", "yaml", "toml", "ini", "source_code"]
- },
- "authority": {
- "source_read_access": true,
- "automatic_push": false,
- "publication_authority": false,
- "deployment_authority": false,
- "server_authority": false
- },
- "acceptance": {
- "rust_url_and_registry_tests": true,
- "react_projection_integrated": true,
- "repository_tree_runtime_tested": true,
- "human_projection_runtime_tested": true,
- "installed_runtime_acceptance": true,
- "public_clone_runtime_acceptance": true,
- "restart_readback": true,
- "server_deployment": false
- }
-}
diff --git a/product-source/hololake-native-desktop/contracts/knowledge-workspace.json b/product-source/hololake-native-desktop/contracts/knowledge-workspace.json
deleted file mode 100644
index 19cd0551a..000000000
--- a/product-source/hololake-native-desktop/contracts/knowledge-workspace.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
- "schema": "hololake.knowledge-workspace-contract/v1",
- "record_id": "HLP-KNOWLEDGE-WORKSPACE-001",
- "state": "LOCAL_INSTALLED_RUNTIME_ACCEPTED_PUBLIC_RELEASE_PENDING",
- "native_storage": {
- "owner": "HOLOLAKE_NATIVE_RUST_CORE",
- "location": "TAURI_APP_DATA_KNOWLEDGE_V1",
- "engine": "LOCAL_GIT_WITH_DOCUMENT_TREE",
- "webview_direct_filesystem_access": false,
- "automatic_server_upload": false
- },
- "capabilities": {
- "page_tree": true,
- "outline_style_nested_navigation": true,
- "independent_tree_and_document_scrolling": true,
- "safe_document_read": true,
- "bounded_full_text_search": true,
- "native_folder_picker_import": true,
- "import_commit_receipt": true,
- "exact_content_deduplication": true,
- "optimistic_native_editing": true,
- "native_edit_commit_receipt": true,
- "gfm_tables_tasks_and_code": true,
- "wiki_link_navigation": true,
- "markdown_reading_canvas": true,
- "raw_html_rendering": false
- },
- "folder_import": {
- "maximum_files": 1000,
- "maximum_file_bytes": 10485760,
- "document_extensions": ["md", "markdown", "txt", "csv", "json", "yaml", "yml"],
- "asset_extensions": ["png", "jpg", "jpeg", "gif", "webp", "svg"],
- "symlinks_followed": false,
- "git_and_dependency_directories_imported": false,
- "repeated_import": "MERGE_BY_STABLE_SOURCE_NAME",
- "exact_duplicate_result": "ALREADY_PRESENT",
- "conflicting_file_overwrite": false,
- "count_semantics": "RAW_UNIQUE_AND_DUPLICATE_COUNTS_EXPOSED_SEPARATELY"
- },
- "legacy_compatibility": {
- "source": "HOLOLAKE_ERA_0_8_KNOWLEDGE_DATA",
- "mode": "READ_ONLY_SEPARATE_ROOT",
- "in_place_migration": false,
- "source_modification_allowed": false,
- "tolaria_surface_used": false
- },
- "acceptance": {
- "rust_unit_tests": true,
- "react_projection_integrated": true,
- "installed_runtime_acceptance": true,
- "folder_import_search_and_restart_readback": true,
- "public_signed_runtime_acceptance": false,
- "legacy_data_migrated": false,
- "legacy_data_available_read_only": true,
- "deduplication_runtime_tested": true,
- "idempotent_import_runtime_tested": true,
- "native_edit_runtime_tested": true,
- "server_deployment": false
- }
-}
diff --git a/product-source/hololake-native-desktop/contracts/personal-channel-kernel.json b/product-source/hololake-native-desktop/contracts/personal-channel-kernel.json
deleted file mode 100644
index 4e8c4260a..000000000
--- a/product-source/hololake-native-desktop/contracts/personal-channel-kernel.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
- "schema": "hololake.personal-channel-kernel-contract/v1",
- "record_id": "HLP-PERSONAL-CHANNEL-KERNEL-001",
- "state": "SOURCE_IMPLEMENTED_AND_TESTED_NOT_INSTALLED_OR_DEPLOYED",
- "scope": "PERSONAL_CHANNEL_IDENTITY_TASK_EVENT_RECEIPT_KERNEL",
- "storage": {
- "owner": "HOLOLAKE_NATIVE_RUST_CORE",
- "engine": "EMBEDDED_SQLITE",
- "location": "TAURI_APP_DATA_PERSONAL_CHANNEL_V1",
- "directory_mode": "0700",
- "database_mode": "0600",
- "synchronous_commit": "FULL",
- "webview_direct_database_access": false,
- "server_upload_automatic": false
- },
- "identity": {
- "cardinality": "ONE_LOCAL_HUMAN_SUBJECT_PER_DATABASE",
- "stable_native_ids": true,
- "display_name_human_confirmed": true,
- "platform_account_authentication_claimed": false,
- "server_or_repository_authority_granted": false
- },
- "task": {
- "one_active_task_at_a_time": true,
- "purpose_required": true,
- "implemented_transitions": ["CREATE_ACTIVE", "ACTIVE_TO_COMPLETED"],
- "compare_expected_state_before_transition": true
- },
- "event_and_receipt": {
- "identity_and_task_mutations_are_single_sqlite_transactions": true,
- "every_mutation_has_event": true,
- "every_event_has_receipt": true,
- "event_chain_sha256": true,
- "receipt_chain_sha256": true,
- "integrity_verified_before_mutation_and_readback": true,
- "tampering_fails_closed": true
- },
- "acceptance": {
- "initialization_atomicity_test": true,
- "single_active_task_test": true,
- "task_completion_receipt_test": true,
- "process_restart_readback_test": true,
- "tamper_detection_test": true,
- "react_human_projection_integrated": true,
- "react_identity_onboarding_integrated": true,
- "react_default_task_form_exposed": false,
- "signed_installed_runtime_acceptance": false,
- "local_ad_hoc_signed_installed_runtime_acceptance": true,
- "data_migration": false,
- "server_deployment": false
- }
-}
diff --git a/product-source/hololake-native-desktop/contracts/stage-one-platform.json b/product-source/hololake-native-desktop/contracts/stage-one-platform.json
index b67391ece..57e4fa62f 100644
--- a/product-source/hololake-native-desktop/contracts/stage-one-platform.json
+++ b/product-source/hololake-native-desktop/contracts/stage-one-platform.json
@@ -1,7 +1,7 @@
{
"schema": "hololake.stage-one-platform-contract/v1",
"record_id": "HLP-NATIVE-STAGE-ONE-CONTRACT-001",
- "state": "LANGUAGE_ARCHITECTURE_CLOSED_REAL_KNOWLEDGE_AND_CODE_WORKBENCH_LOCAL_RUNTIME_ACCEPTED_STAGE_ONE_INCOMPLETE",
+ "state": "LANGUAGE_ARCHITECTURE_CLOSED_REALITY_ENGINEERING_CONTRACT_RUNTIME_NOT_IMPLEMENTED",
"product": "GH-AIOS",
"formal_name": "光湖语言系统 · 通用人工智能操作平台",
"tcs_work_boundary": {
@@ -15,8 +15,7 @@
"stage_gate": {
"language_architecture": "CLOSED_AND_ARCHIVED",
"current_stage": "REALITY_ENGINEERING_EXECUTION",
- "completed_source_slice": "PERSONAL_IDENTITY_KNOWLEDGE_WORKSPACE_AND_CODE_CHANNEL",
- "next_minimum_stage": "HUMAN_APPROVAL_CENTER_AND_GIT_EVIDENCE_READBACK"
+ "next_minimum_stage": "PERSONAL_CHANNEL_IDENTITY_TASK_EVENT_RECEIPT_KERNEL"
},
"persona_cognition_origin": {
"human_authored_guanghu_persona_prompt_exists": false,
@@ -40,63 +39,12 @@
"KNOWLEDGE_PROJECTION",
"HUMAN_APPROVAL_CENTER",
"NATIVE_TRUST_BOUNDARY",
- "LOCAL_DEVELOPMENT_BRIDGE",
- "USER_CODE_CHANNEL"
+ "LOCAL_DEVELOPMENT_BRIDGE"
,"PERSONAL_NODE_WORK_LAKE_AND_MOBILE_BRIDGE"
],
- "human_surface": ["PERSONAL_CHANNEL_HOME", "MY_HOLOLAKE_OVERVIEW", "KNOWLEDGE_WORKSPACE", "USER_CODE_CHANNELS", "LOCAL_RECEIPTS", "SYSTEM_DETAILS", "HUMAN_APPROVAL_CENTER"],
+ "human_surface": ["PERSONAL_CHANNEL_HOME", "TASK_AND_DEVELOPMENT_LINES", "LAKE_LAMP_SHARED_BOARD", "MEMORY_AND_KNOWLEDGE", "HUMAN_APPROVAL_CENTER", "EVENTS_GIT_EVIDENCE_AND_RECEIPTS"],
"universal_language": {"ai_is_language_interface": true, "vendor_adapter_matrix_required": false, "current_ai_self_adapts_to_observed_host": true, "host_self_adaptation_changes_how_not_authority": true},
"stage_one_forbidden": ["INTERNAL_AI_CHAT", "MODEL_API_CONFIGURATION", "MODEL_SELECTION", "INTERNAL_MODEL_INFERENCE", "VENDOR_ADAPTER_MATRIX", "AI_WORKBENCH", "MODEL_AND_CONNECTIONS"],
- "personal_channel_kernel": {
- "contract": "contracts/personal-channel-kernel.json",
- "native_source_implemented": true,
- "react_human_projection_integrated": true,
- "local_sqlite_restart_readback_tested": true,
- "identity_is_local_human_confirmation_not_platform_authentication": true,
- "identity_established_once_then_default_ui_enters_my_hololake": true,
- "manual_task_title_and_purpose_form_exposed_by_default": false,
- "every_identity_or_task_mutation_has_event_and_receipt": true,
- "event_and_receipt_hash_chains_verified_on_read": true,
- "installed_runtime_acceptance": true
- },
- "knowledge_workspace": {
- "contract": "contracts/knowledge-workspace.json",
- "native_git_owned_root_implemented": true,
- "page_tree_read_search_and_idempotent_folder_import_implemented": true,
- "outline_style_nested_navigation_and_independent_scrolling_implemented": true,
- "gfm_wiki_links_and_optimistic_native_editing_implemented": true,
- "exact_content_deduplication_implemented": true,
- "legacy_hololake_era_source_is_read_only": true,
- "tolaria_surface_used": false,
- "installed_runtime_acceptance": true
- },
- "user_code_channel": {
- "contract": "contracts/code-channel.json",
- "official_https_clone_implemented": true,
- "local_git_folder_registration_implemented": true,
- "repository_tree_and_file_open_implemented": true,
- "machine_format_knowledge_projection_implemented": true,
- "credentials_in_url_allowed": false,
- "credential_prompting_allowed": false,
- "push_or_deploy_authority_granted": false,
- "installed_runtime_acceptance": true
- },
- "local_installed_runtime_acceptance": {
- "receipt": "audit/local-runtime-acceptance-20260815.json",
- "identity_restart_readback": true,
- "legacy_knowledge_read_only_projection": true,
- "folder_import_search_and_restart_readback": true,
- "official_https_code_channel_clone_and_restart_readback": true,
- "knowledge_unique_count": 167,
- "knowledge_duplicate_count_folded": 242,
- "code_repository_tree_and_json_projection": true,
- "direct_local_broker_ready": true,
- "current_authenticated_external_ai_connections": 0,
- "gh_pncc_repository_mounts": 0,
- "gh_pncc_projection_receipts": 0,
- "public_developer_id_and_notarization": false,
- "server_deployment": false
- },
"reality_mutation_requires": ["VERIFIED_HUMAN_SUBJECT", "EXACT_ACTION", "EXACT_TARGET", "IMMUTABLE_PAYLOAD_DIGEST", "EXPIRY", "REPLAY_PROTECTION", "EXECUTION_RECEIPT", "READBACK_RECEIPT"],
"context_risk_signals": ["MODEL_CONTEXT_SPEC", "ESTIMATED_TOKENS", "MESSAGE_VOLUME", "TURN_COUNT", "TASK_STAGE", "HOST_WARNING"],
"exact_host_compaction_prediction_claimed": false,
diff --git a/product-source/hololake-native-desktop/docs/ARCHITECTURE.md b/product-source/hololake-native-desktop/docs/ARCHITECTURE.md
index 912507f74..0b79ef98f 100644
--- a/product-source/hololake-native-desktop/docs/ARCHITECTURE.md
+++ b/product-source/hololake-native-desktop/docs/ARCHITECTURE.md
@@ -1,24 +1,10 @@
# HoloLake Native Desktop Architecture
-The stage-one shell is a Tauri v2 application with a Rust-owned local core and a React human projection. The default product surface is **My HoloLake**: overview, knowledge, user code channels, local receipts and system details. The five domains and their server fleet remain submerged system infrastructure rather than primary stage-one navigation.
+The stage-one shell is a Tauri v2 application with a Rust-owned local core and a React human projection. The five domains and their server fleet remain submerged system infrastructure rather than primary stage-one navigation.
## Stage-one human projection
-The home surface follows the verified GHS-014 five-lakes visual grammar while applying the current stage-one correction: it is a restrained operating-system workspace, not a slogan page or a five-domain gate. The five named lake themes are token groups only and cannot change layout, copy, routing or authority. Internal transport and release details live under system details rather than dominating the first screen.
-
-The first visible body uses a Rust-owned SQLite kernel under the Tauri app-data directory. A human-confirmed local display name creates one stable local subject and channel exactly once. The internal task/event/receipt kernel remains available for structured agents, but manual task title and purpose fields are not part of the default human surface. Event and receipt chains remain independently SHA-256-linked and fully revalidated before every read or mutation. A local identity is not platform authentication and grants no repository, node, server or deployment authority.
-
-## Native knowledge workspace
-
-The native core owns a separate `knowledge-v1` Git root. It projects a bounded document tree, safe text reads, local search and native folder import into a reading canvas without rendering raw HTML. Folder import ignores symlinks, Git metadata, dependency directories and unsupported files, applies file-count and byte limits, then creates a local Git commit receipt.
-
-The installed HoloLake Era 0.8 knowledge root is detected only as a separate read-only source. The new application does not write, migrate in place or merge it with the native root. Electron, Outline runtime code and Tolaria UI are not copied into the Tauri product.
-
-## User code channels
-
-A human may paste a registered Guanghu HTTPS code-channel address or select an existing local Git folder. HTTPS clone accepts no credentials, queries or fragments and disables terminal prompts, askpass and credential helpers. Clones are confined to an application-owned root; local registrations do not move the source folder. The registry stores a credential-free projection of path, branch and commit.
-
-This product channel is distinct from the under-lake PNCC persona-evidence projection below. It grants local source access only and never grants push, publication, deployment or server authority.
+The home surface follows the verified GHS-014 five-lakes visual grammar while applying the current stage-one correction: it exposes one personal-channel entry, not five domain gates. The five named lake themes are token groups only and cannot change layout, copy, routing or authority. The surface reads a native status projection; only an authenticated direct connector can illuminate the live-connected state. A stored resumable session remains visibly distinct from a live connection.
## External programming AI entry
@@ -58,10 +44,10 @@ The Tauri source in this directory is the only future HoloLake desktop mainline.
The current candidate already has useful under-lake organs: the signed native shell, local broker and resumable session, authenticated read-only PNCC projection, human-confirmed repository mount, deterministic routing, and fail-closed update/rollback machinery. They remain in the architecture, but their existence does not satisfy the visible stage-one body.
-The implementation order is fixed. The first two source slices are implemented and tested but have not received installed-runtime acceptance:
+The implementation order is now fixed:
-1. personal-channel identity, event and receipt kernel — source and tests implemented;
-2. native knowledge workspace and user code channel — source and tests implemented;
+1. personal-channel identity, task, event and receipt kernel;
+2. knowledge tree, page, search and local persistence;
3. human approval center and Git evidence readback;
4. lake-lamp cross-session continuity projection;
5. signed installation, opt-in update, rollback and reversible data migration.
diff --git a/product-source/hololake-native-desktop/foundation.json b/product-source/hololake-native-desktop/foundation.json
index 3086e769b..52bfa1c93 100644
--- a/product-source/hololake-native-desktop/foundation.json
+++ b/product-source/hololake-native-desktop/foundation.json
@@ -1,7 +1,7 @@
{
"schema": "hololake.native-desktop-foundation/v1",
"record_id": "HLP-NATIVE-DESKTOP-FOUNDATION-001",
- "state": "LOCAL_INSTALLED_ACCEPTANCE_PASSED_FOR_PERSONAL_KNOWLEDGE_AND_CODE_SLICES",
+ "state": "TAURI_CANDIDATE_FOUNDATION_REORIENTED_TO_STAGE_ONE_VISIBLE_BODY",
"canonical_shell": "TAURI_V2_RUST_REACT",
"candidate_role": "INSTALLED_LOCAL_ACCEPTANCE_CANDIDATE_NOT_SEPARATE_PRODUCT_LINE",
"parallel_product_line_created": false,
@@ -13,31 +13,9 @@
"selected_visual_direction": "GHS-014_FIVE_LAKES_PERSONAL_CHANNEL_STAGE_ONE",
"selected_visual_direction_receipt": "audit/ghs-014-stage-one-ui-receipt.json",
"home_status_is_native_projection": true,
- "home_surface_role": "MY_HOLOLAKE_PRODUCT_WORKSPACE_NOT_STAGE_ONE_PRODUCT_COMPLETION",
- "stage_one_visible_body_state": "PERSONAL_IDENTITY_KNOWLEDGE_WORKSPACE_AND_CODE_CHANNEL_SOURCE_IMPLEMENTED_PRODUCT_INCOMPLETE",
- "stage_one_completed_source_slice": "PERSONAL_IDENTITY_KNOWLEDGE_WORKSPACE_AND_CODE_CHANNEL",
- "stage_one_next_slice": "HUMAN_APPROVAL_CENTER_AND_GIT_EVIDENCE_READBACK",
- "personal_channel_kernel_contract": "contracts/personal-channel-kernel.json",
- "personal_channel_identity_task_event_receipt_kernel_implemented": true,
- "personal_channel_private_sqlite_single_owner_implemented": true,
- "personal_channel_restart_readback_and_tamper_tests_passed": true,
- "personal_channel_human_projection_integrated": true,
- "personal_channel_default_task_form_exposed": false,
- "personal_channel_installed_runtime_acceptance": true,
- "knowledge_workspace_contract": "contracts/knowledge-workspace.json",
- "knowledge_workspace_native_source_implemented": true,
- "knowledge_workspace_tree_read_search_and_folder_import_implemented": true,
- "knowledge_workspace_legacy_hololake_era_read_only_compatibility": true,
- "knowledge_workspace_installed_runtime_acceptance": true,
- "code_channel_contract": "contracts/code-channel.json",
- "code_channel_https_clone_and_local_git_registration_implemented": true,
- "code_channel_credential_prompting_disabled": true,
- "code_channel_push_or_deploy_authority_granted": false,
- "code_channel_installed_runtime_acceptance": true,
- "local_runtime_acceptance_receipt": "audit/local-runtime-acceptance-20260815.json",
- "installed_desktop_path": "/Users/bingshuolingdianyuanhe/Desktop/HoloLake 第一阶段.app",
- "old_desktop_apps_recoverably_archived": true,
- "public_developer_id_and_notarized_acceptance": false,
+ "home_surface_role": "SELECTED_VISUAL_ACCEPTANCE_SURFACE_NOT_STAGE_ONE_PRODUCT_COMPLETION",
+ "stage_one_visible_body_state": "NOT_IMPLEMENTED",
+ "stage_one_next_slice": "PERSONAL_CHANNEL_IDENTITY_TASK_EVENT_RECEIPT_KERNEL",
"stage_one_implementation_order": [
"PERSONAL_CHANNEL_IDENTITY_TASK_EVENT_RECEIPT_KERNEL",
"KNOWLEDGE_TREE_PAGE_SEARCH_AND_LOCAL_PERSISTENCE",
@@ -103,7 +81,7 @@
"pncc_execution_limb_implemented": false,
"pncc_persona_lease_acquisition_implemented": false,
"pncc_reality_execution_implemented": false,
- "stage_one_product_contract_state": "PERSONAL_KNOWLEDGE_AND_CODE_SOURCE_SLICES_IMPLEMENTED_FULL_STAGE_ONE_PRODUCT_INCOMPLETE",
+ "stage_one_product_contract_state": "TCS_UNIVERSAL_LANGUAGE_PERSONAL_CHANNEL_CONTRACT_ONLY_RUNTIME_NOT_IMPLEMENTED",
"stage_one_internal_ai_interaction": false,
"stage_one_model_api_configuration": false,
"vendor_adapter_matrix_required": false,
diff --git a/product-source/hololake-native-desktop/index.html b/product-source/hololake-native-desktop/index.html
index f4f526abf..93af769bc 100644
--- a/product-source/hololake-native-desktop/index.html
+++ b/product-source/hololake-native-desktop/index.html
@@ -3,7 +3,7 @@
- HoloLake · GH-AIOS
+ HoloLake
diff --git a/product-source/hololake-native-desktop/package-lock.json b/product-source/hololake-native-desktop/package-lock.json
index 010b8d423..0c34413df 100644
--- a/product-source/hololake-native-desktop/package-lock.json
+++ b/product-source/hololake-native-desktop/package-lock.json
@@ -11,8 +11,6 @@
"@tauri-apps/api": "2.10.1",
"@tauri-apps/plugin-process": "2.3.1",
"@tauri-apps/plugin-updater": "2.10.0",
- "dompurify": "^3.4.13",
- "marked": "^16.4.1",
"react": "^19.2.0",
"react-dom": "^19.2.0"
},
@@ -1516,13 +1514,6 @@
"@types/react": "^19.2.0"
}
},
- "node_modules/@types/trusted-types": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
- "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
- "license": "MIT",
- "optional": true
- },
"node_modules/@vitejs/plugin-react": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.2.0.tgz",
@@ -1777,15 +1768,6 @@
}
}
},
- "node_modules/dompurify": {
- "version": "3.4.13",
- "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.13.tgz",
- "integrity": "sha512-2vmYIoqjze2d+kakP8S/nS5shfsl587kzwEjcGlTdiksUVgFHnFCsLYDVj/JNqJVOQZGSYBTmuycv0PodwmnMQ==",
- "license": "(MPL-2.0 OR Apache-2.0)",
- "optionalDependencies": {
- "@types/trusted-types": "^2.0.7"
- }
- },
"node_modules/electron-to-chromium": {
"version": "1.5.405",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.405.tgz",
@@ -1968,18 +1950,6 @@
"@jridgewell/sourcemap-codec": "^1.5.5"
}
},
- "node_modules/marked": {
- "version": "16.4.1",
- "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.1.tgz",
- "integrity": "sha512-ntROs7RaN3EvWfy3EZi14H4YxmT6A5YvywfhO+0pm+cH/dnSQRmdAmoFIc3B9aiwTehyk7pESH4ofyBY+V5hZg==",
- "license": "MIT",
- "bin": {
- "marked": "bin/marked.js"
- },
- "engines": {
- "node": ">= 20"
- }
- },
"node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
diff --git a/product-source/hololake-native-desktop/package.json b/product-source/hololake-native-desktop/package.json
index b5a4b2c4a..86ea575d4 100644
--- a/product-source/hololake-native-desktop/package.json
+++ b/product-source/hololake-native-desktop/package.json
@@ -14,8 +14,6 @@
"@tauri-apps/api": "2.10.1",
"@tauri-apps/plugin-process": "2.3.1",
"@tauri-apps/plugin-updater": "2.10.0",
- "dompurify": "^3.4.13",
- "marked": "^16.4.1",
"react": "^19.2.0",
"react-dom": "^19.2.0"
},
diff --git a/product-source/hololake-native-desktop/scripts/knowledge-code-channel.test.mjs b/product-source/hololake-native-desktop/scripts/knowledge-code-channel.test.mjs
deleted file mode 100644
index 720c5a410..000000000
--- a/product-source/hololake-native-desktop/scripts/knowledge-code-channel.test.mjs
+++ /dev/null
@@ -1,71 +0,0 @@
-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 knowledgeContract = JSON.parse(read('contracts/knowledge-workspace.json'))
-const codeContract = JSON.parse(read('contracts/code-channel.json'))
-const provenance = JSON.parse(read('audit/knowledge-workspace-migration-provenance.json'))
-const knowledgeRust = read('src-tauri/src/knowledge_base.rs')
-const codeRust = read('src-tauri/src/code_channel.rs')
-const lib = read('src-tauri/src/lib.rs')
-const ui = read('src/main.tsx')
-
-test('knowledge workspace is HoloLake-owned and keeps the legacy source read-only', () => {
- assert.equal(knowledgeContract.native_storage.owner, 'HOLOLAKE_NATIVE_RUST_CORE')
- assert.equal(knowledgeContract.legacy_compatibility.mode, 'READ_ONLY_SEPARATE_ROOT')
- assert.equal(knowledgeContract.legacy_compatibility.in_place_migration, false)
- assert.equal(knowledgeContract.legacy_compatibility.tolaria_surface_used, false)
- assert.equal(provenance.legacy_data_boundary.modified, false)
- assert.match(knowledgeRust, /join\("knowledge-v1"\)/)
- assert.match(knowledgeRust, /source_docs_root/)
-})
-
-test('folder import is bounded, idempotent, conflict-safe and creates a local Git receipt', () => {
- assert.equal(knowledgeContract.folder_import.maximum_files, 1000)
- assert.equal(knowledgeContract.folder_import.symlinks_followed, false)
- assert.equal(knowledgeContract.folder_import.repeated_import, 'MERGE_BY_STABLE_SOURCE_NAME')
- assert.equal(knowledgeContract.folder_import.exact_duplicate_result, 'ALREADY_PRESENT')
- assert.equal(knowledgeContract.folder_import.conflicting_file_overwrite, false)
- assert.equal(knowledgeContract.capabilities.import_commit_receipt, true)
- assert.equal(knowledgeContract.capabilities.exact_content_deduplication, true)
- assert.equal(knowledgeContract.capabilities.optimistic_native_editing, true)
- assert.match(knowledgeRust, /MAX_IMPORT_FILES: usize = 1_000/)
- assert.match(knowledgeRust, /kind\.is_symlink\(\)/)
- assert.match(knowledgeRust, /ImportDisposition::Existing/)
- assert.match(knowledgeRust, /HOLOLAKE_KNOWLEDGE_SAVE_CONFLICT/)
- assert.match(knowledgeRust, /rev-parse", "HEAD/)
-})
-
-test('official code-channel clone cannot use credentials or credential prompts', () => {
- assert.equal(codeContract.clone.embedded_credentials_allowed, false)
- assert.equal(codeContract.clone.terminal_prompt_allowed, false)
- assert.equal(codeContract.clone.credential_helper_allowed, false)
- assert.equal(codeContract.authority.automatic_push, false)
- assert.match(codeRust, /GIT_TERMINAL_PROMPT/)
- assert.match(codeRust, /credential\.helper=/)
- assert.match(codeRust, /parsed\.username\(\)\.is_empty\(\)/)
-})
-
-test('the product surface exposes a real knowledge workbench and browsable code channel', () => {
- for (const command of [
- 'get_knowledge_snapshot',
- 'read_knowledge_document',
- 'search_knowledge',
- 'save_knowledge_document',
- 'select_and_import_knowledge_folder',
- 'get_code_channel_snapshot',
- 'clone_code_channel',
- 'select_local_code_channel',
- 'browse_code_channel',
- 'read_code_channel_file',
- ]) {
- assert.match(lib, new RegExp(command))
- assert.match(ui, new RegExp(`['"]${command}['"]`))
- }
- assert.match(ui, /知识工作台/)
- assert.match(ui, /HoloLake Era/)
- assert.match(ui, /知识视图/)
- assert.match(ui, /源文件/)
- assert.doesNotMatch(ui, /下一件事|为什么做|开始这件事/)
-})
diff --git a/product-source/hololake-native-desktop/scripts/personal-channel-kernel.test.mjs b/product-source/hololake-native-desktop/scripts/personal-channel-kernel.test.mjs
deleted file mode 100644
index 7343ff840..000000000
--- a/product-source/hololake-native-desktop/scripts/personal-channel-kernel.test.mjs
+++ /dev/null
@@ -1,57 +0,0 @@
-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/personal-channel-kernel.json'))
-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 ui = read('src/main.tsx')
-
-test('personal channel kernel has one private SQLite owner and no server authority', () => {
- assert.equal(contract.storage.owner, 'HOLOLAKE_NATIVE_RUST_CORE')
- assert.equal(contract.storage.engine, 'EMBEDDED_SQLITE')
- assert.equal(contract.storage.webview_direct_database_access, false)
- assert.equal(contract.identity.platform_account_authentication_claimed, false)
- assert.equal(contract.identity.server_or_repository_authority_granted, false)
- assert.equal(contract.acceptance.server_deployment, false)
-})
-
-test('identity and task mutations create one-to-one chained events and receipts', () => {
- assert.equal(contract.event_and_receipt.identity_and_task_mutations_are_single_sqlite_transactions, true)
- assert.equal(contract.event_and_receipt.every_mutation_has_event, true)
- assert.equal(contract.event_and_receipt.every_event_has_receipt, true)
- assert.equal(contract.event_and_receipt.tampering_fails_closed, true)
- assert.match(rust, /CREATE TABLE IF NOT EXISTS events/)
- assert.match(rust, /CREATE TABLE IF NOT EXISTS receipts/)
- assert.match(rust, /verify_integrity\(&connection\)/)
-})
-
-test('the human projection establishes identity once and keeps task mutation below the default surface', () => {
- for (const command of [
- 'get_personal_channel_snapshot',
- 'initialize_personal_channel',
- 'create_personal_channel_task',
- 'transition_personal_channel_task',
- ]) {
- assert.match(lib, new RegExp(`personal_channel::${command}`))
- }
- for (const command of ['get_personal_channel_snapshot', 'initialize_personal_channel']) {
- assert.match(ui, new RegExp(`['"]${command}['"]`))
- }
- assert.doesNotMatch(ui, /['"]create_personal_channel_task['"]/)
- assert.doesNotMatch(ui, /['"]transition_personal_channel_task['"]/)
- assert.doesNotMatch(ui, /下一件事|为什么做|开始这件事/)
- assert.equal(stageOne.personal_channel_kernel.native_source_implemented, true)
- assert.equal(stageOne.personal_channel_kernel.installed_runtime_acceptance, true)
- assert.equal(foundation.personal_channel_identity_task_event_receipt_kernel_implemented, true)
- assert.equal(foundation.personal_channel_installed_runtime_acceptance, true)
-})
-
-test('full stage-one completion stays false after the first source slice', () => {
- assert.equal(stageOne.implementation_complete, false)
- assert.equal(foundation.stage_one_next_slice, 'HUMAN_APPROVAL_CENTER_AND_GIT_EVIDENCE_READBACK')
- assert.match(foundation.stage_one_visible_body_state, /PRODUCT_INCOMPLETE/)
-})
diff --git a/product-source/hololake-native-desktop/src-tauri/Cargo.lock b/product-source/hololake-native-desktop/src-tauri/Cargo.lock
index ad858d581..9f44d285f 100644
--- a/product-source/hololake-native-desktop/src-tauri/Cargo.lock
+++ b/product-source/hololake-native-desktop/src-tauri/Cargo.lock
@@ -8,18 +8,6 @@ version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
-[[package]]
-name = "ahash"
-version = "0.8.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
-dependencies = [
- "cfg-if",
- "once_cell",
- "version_check",
- "zerocopy",
-]
-
[[package]]
name = "aho-corasick"
version = "1.1.4"
@@ -103,29 +91,6 @@ version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
-[[package]]
-name = "aws-lc-rs"
-version = "1.18.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce2b2dcc879c3bae0d371e77c99f2238400ef24ec001394befa67b6e543add9e"
-dependencies = [
- "aws-lc-sys",
- "zeroize",
-]
-
-[[package]]
-name = "aws-lc-sys"
-version = "0.44.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f09fae7be8bb3174e05c6afdb34199e6dc0c7c04ba9fa237b1967adfbde27483"
-dependencies = [
- "cc",
- "cmake",
- "dunce",
- "fs_extra",
- "pkg-config",
-]
-
[[package]]
name = "base64"
version = "0.21.7"
@@ -317,8 +282,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2"
dependencies = [
"find-msvc-tools",
- "jobserver",
- "libc",
"shlex",
]
@@ -355,23 +318,6 @@ version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
-[[package]]
-name = "cfg_aliases"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527"
-
-[[package]]
-name = "chacha20"
-version = "0.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81"
-dependencies = [
- "cfg-if",
- "cpufeatures 0.3.0",
- "rand_core 0.10.1",
-]
-
[[package]]
name = "chrono"
version = "0.4.43"
@@ -384,15 +330,6 @@ dependencies = [
"windows-link 0.2.1",
]
-[[package]]
-name = "cmake"
-version = "0.1.58"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678"
-dependencies = [
- "cc",
-]
-
[[package]]
name = "combine"
version = "4.6.7"
@@ -468,15 +405,6 @@ dependencies = [
"libc",
]
-[[package]]
-name = "cpufeatures"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201"
-dependencies = [
- "libc",
-]
-
[[package]]
name = "crc32fast"
version = "1.5.0"
@@ -883,18 +811,6 @@ dependencies = [
"windows-sys 0.61.2",
]
-[[package]]
-name = "fallible-iterator"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649"
-
-[[package]]
-name = "fallible-streaming-iterator"
-version = "0.1.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
-
[[package]]
name = "fastrand"
version = "2.5.0"
@@ -1004,12 +920,6 @@ dependencies = [
"winapi",
]
-[[package]]
-name = "fs_extra"
-version = "1.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
-
[[package]]
name = "futf"
version = "0.1.5"
@@ -1228,10 +1138,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
dependencies = [
"cfg-if",
- "js-sys",
"libc",
"wasi 0.11.1+wasi-snapshot-preview1",
- "wasm-bindgen",
]
[[package]]
@@ -1253,11 +1161,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099"
dependencies = [
"cfg-if",
- "js-sys",
"libc",
"r-efi 6.0.0",
- "rand_core 0.10.1",
- "wasm-bindgen",
]
[[package]]
@@ -1414,30 +1319,12 @@ version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
-[[package]]
-name = "hashbrown"
-version = "0.14.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
-dependencies = [
- "ahash",
-]
-
[[package]]
name = "hashbrown"
version = "0.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
-[[package]]
-name = "hashlink"
-version = "0.9.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af"
-dependencies = [
- "hashbrown 0.14.5",
-]
-
[[package]]
name = "heck"
version = "0.4.1"
@@ -1463,9 +1350,7 @@ dependencies = [
"base64 0.22.1",
"dirs",
"fs2",
- "reqwest",
"ring",
- "rusqlite",
"serde",
"serde_json",
"tauri",
@@ -1475,7 +1360,6 @@ dependencies = [
"tauri-runtime",
"tauri-runtime-wry",
"tempfile",
- "url",
"uuid",
]
@@ -1906,16 +1790,6 @@ dependencies = [
"syn 2.0.115",
]
-[[package]]
-name = "jobserver"
-version = "0.1.35"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3"
-dependencies = [
- "getrandom 0.4.3",
- "libc",
-]
-
[[package]]
name = "js-sys"
version = "0.3.104"
@@ -2027,17 +1901,6 @@ dependencies = [
"libc",
]
-[[package]]
-name = "libsqlite3-sys"
-version = "0.28.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c10584274047cb335c23d3e61bcef8e323adae7c5c8c760540f73610177fc3f"
-dependencies = [
- "cc",
- "pkg-config",
- "vcpkg",
-]
-
[[package]]
name = "linux-raw-sys"
version = "0.11.0"
@@ -2065,12 +1928,6 @@ version = "0.4.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad"
-[[package]]
-name = "lru-slab"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
-
[[package]]
name = "mac"
version = "0.1.1"
@@ -2916,63 +2773,6 @@ dependencies = [
"memchr",
]
-[[package]]
-name = "quinn"
-version = "0.11.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8"
-dependencies = [
- "bytes",
- "cfg_aliases",
- "pin-project-lite",
- "quinn-proto",
- "quinn-udp",
- "rustc-hash",
- "rustls",
- "socket2",
- "thiserror 2.0.20",
- "tokio",
- "tracing",
- "web-time",
-]
-
-[[package]]
-name = "quinn-proto"
-version = "0.11.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f4bfc015262b9df63c8845072ce59068853ff5872180c2ce2f13038b970e560"
-dependencies = [
- "aws-lc-rs",
- "bytes",
- "getrandom 0.4.3",
- "lru-slab",
- "rand 0.10.2",
- "rand_pcg 0.10.2",
- "ring",
- "rustc-hash",
- "rustls",
- "rustls-pki-types",
- "slab",
- "thiserror 2.0.20",
- "tinyvec",
- "tracing",
- "web-time",
-]
-
-[[package]]
-name = "quinn-udp"
-version = "0.5.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694"
-dependencies = [
- "cfg_aliases",
- "libc",
- "once_cell",
- "socket2",
- "tracing",
- "windows-sys 0.52.0",
-]
-
[[package]]
name = "quote"
version = "1.0.47"
@@ -3005,7 +2805,7 @@ dependencies = [
"rand_chacha 0.2.2",
"rand_core 0.5.1",
"rand_hc",
- "rand_pcg 0.2.1",
+ "rand_pcg",
]
[[package]]
@@ -3019,17 +2819,6 @@ dependencies = [
"rand_core 0.6.4",
]
-[[package]]
-name = "rand"
-version = "0.10.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80"
-dependencies = [
- "chacha20",
- "getrandom 0.4.3",
- "rand_core 0.10.1",
-]
-
[[package]]
name = "rand_chacha"
version = "0.2.2"
@@ -3068,12 +2857,6 @@ dependencies = [
"getrandom 0.2.17",
]
-[[package]]
-name = "rand_core"
-version = "0.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69"
-
[[package]]
name = "rand_hc"
version = "0.2.0"
@@ -3092,15 +2875,6 @@ dependencies = [
"rand_core 0.5.1",
]
-[[package]]
-name = "rand_pcg"
-version = "0.10.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a"
-dependencies = [
- "rand_core 0.10.1",
-]
-
[[package]]
name = "raw-window-handle"
version = "0.6.2"
@@ -3196,7 +2970,6 @@ dependencies = [
"log",
"percent-encoding",
"pin-project-lite",
- "quinn",
"rustls",
"rustls-pki-types",
"rustls-platform-verifier",
@@ -3254,20 +3027,6 @@ dependencies = [
"windows-sys 0.52.0",
]
-[[package]]
-name = "rusqlite"
-version = "0.31.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b838eba278d213a8beaf485bd313fd580ca4505a00d5871caeb1457c55322cae"
-dependencies = [
- "bitflags 2.13.1",
- "fallible-iterator",
- "fallible-streaming-iterator",
- "hashlink",
- "libsqlite3-sys",
- "smallvec",
-]
-
[[package]]
name = "rustc-hash"
version = "2.1.3"
@@ -3302,7 +3061,6 @@ version = "0.23.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b"
dependencies = [
- "aws-lc-rs",
"once_cell",
"ring",
"rustls-pki-types",
@@ -3329,7 +3087,6 @@ version = "1.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96"
dependencies = [
- "web-time",
"zeroize",
]
@@ -3366,7 +3123,6 @@ version = "0.103.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e"
dependencies = [
- "aws-lc-rs",
"ring",
"rustls-pki-types",
"untrusted",
@@ -3699,7 +3455,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
dependencies = [
"cfg-if",
- "cpufeatures 0.2.17",
+ "cpufeatures",
"digest",
]
@@ -4814,12 +4570,6 @@ dependencies = [
"wasm-bindgen",
]
-[[package]]
-name = "vcpkg"
-version = "0.2.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
-
[[package]]
name = "version-compare"
version = "0.2.1"
@@ -4970,16 +4720,6 @@ dependencies = [
"wasm-bindgen",
]
-[[package]]
-name = "web-time"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
-dependencies = [
- "js-sys",
- "wasm-bindgen",
-]
-
[[package]]
name = "web_atoms"
version = "0.2.6"
diff --git a/product-source/hololake-native-desktop/src-tauri/Cargo.toml b/product-source/hololake-native-desktop/src-tauri/Cargo.toml
index fe7cf176e..990524931 100644
--- a/product-source/hololake-native-desktop/src-tauri/Cargo.toml
+++ b/product-source/hololake-native-desktop/src-tauri/Cargo.toml
@@ -18,18 +18,15 @@ tauri-build = { version = "2.5.4", features = [] }
dirs = "6"
fs2 = "0.4"
ring = "0.17"
-rusqlite = { version = "0.31", features = ["bundled"] }
base64 = "0.22"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
-tauri = { version = "=2.10.2", features = ["devtools"] }
+tauri = { version = "=2.10.2", features = [] }
tauri-runtime = "=2.10.0"
tauri-runtime-wry = "=2.10.0"
tauri-plugin-updater = "2.10.0"
tauri-plugin-dialog = "=2.7.2"
uuid = { version = "1", features = ["v4"] }
-url = "2"
-reqwest = { version = "0.13.2", default-features = false, features = ["json", "rustls"] }
[dev-dependencies]
tempfile = "3"
diff --git a/product-source/hololake-native-desktop/src-tauri/src/agent_host.rs b/product-source/hololake-native-desktop/src-tauri/src/agent_host.rs
deleted file mode 100644
index 97b983126..000000000
--- a/product-source/hololake-native-desktop/src-tauri/src/agent_host.rs
+++ /dev/null
@@ -1,298 +0,0 @@
-//! Agent 东家层 · agent_host
-//!
-//! 阶段E选型定案(冰朔点头):候选甲"东家模式"为体——
-//! 外部 CLI Agent(师傅)干活,宿主只管:接信封、备提词、记账本、存记忆。
-//!
-//! 协议转工程落点(施工总纲):
-//! - 人格体主控(铁律一):任务只从 GLP 信封进门(content_type=command),
-//! 宿主绝不自己发起任务。
-//! - 提词器(铁律五):会话开卷前先从提词器取指引(官方区协议+私人区索引),
-//! 写进会话记忆的"提词板"栏——头顶提词板的工程形状。
-//! - HLDP 内嵌(铁律二):每个会话=一卷 HLDP 检查点体(id/prev 链/date/
-//! persona/host/title+正文),prev 链不可省。
-//! - RECEIPT(GLS-0300 回执模型):control.receipt_required 时必回回执。
-//!
-//! 诚实边界:CLI 师傅的实际唤起口令(如何调 codex/qwen)未实测,不猜——
-//! 本阶段先把"接单-提词-记忆-回执"全链落成,唤起件待师傅口令实测后接上。
-
-use crate::glp_envelope::{validate_envelope, ContentType, GlpMessage};
-use crate::persona_butler::{prompter_lookup, ButlerRecord, ButlerRecordKind, ButlerState};
-use std::time::{SystemTime, UNIX_EPOCH};
-use serde::{Deserialize, Serialize};
-use std::fs;
-use std::path::PathBuf;
-use tauri::{AppHandle, Manager, State};
-
-/// 会话记忆的提词板栏——开卷瞬间从提词器抄来的指引。
-#[derive(Debug, Clone, Serialize, Deserialize)]
-#[serde(rename_all = "snake_case")]
-pub struct PrompterBoard {
- pub topics: Vec,
- pub answers: Vec,
- pub path_hints: Vec,
-}
-
-/// 会话记忆卷=HLDP 检查点体(prev 链不可省)。
-#[derive(Debug, Clone, Serialize, Deserialize)]
-#[serde(rename_all = "snake_case")]
-pub struct AgentSessionMemory {
- pub id: String,
- pub prev: String,
- pub date: String,
- pub persona: String,
- pub host: String,
- pub title: String,
- pub envelope_id: String,
- pub task: String,
- pub hldp_anchor: String,
- pub prompter_board: PrompterBoard,
- pub status: String,
-}
-
-/// 接单回执——GLS-0300 RECEIPT 的工程实例。
-#[derive(Debug, Clone, Serialize)]
-#[serde(rename_all = "snake_case")]
-pub struct AgentTaskReceipt {
- pub receipt_for: String,
- pub session_id: String,
- pub memory_path: String,
- pub accepted: bool,
- pub note: String,
-}
-
-fn memory_root(app: &AppHandle) -> Result {
- Ok(app
- .path()
- .app_data_dir()
- .map_err(|error| format!("HOLOLAKE_AGENT_MEMORY_DIR_FAILED: {error}"))?
- .join("agent-memory"))
-}
-
-fn pointer_path(root: &PathBuf) -> PathBuf {
- root.join("CURRENT.hdlp")
-}
-
-/// 读 CURRENT 指针拿上一卷 id(没有则空串=开卷首卷)。
-fn latest_memory_id(root: &PathBuf) -> String {
- fs::read_to_string(pointer_path(root))
- .ok()
- .and_then(|raw| raw.lines().next().map(|line| line.trim().to_string()))
- .unwrap_or_default()
-}
-
-fn today_compact() -> (String, String) {
- let secs = SystemTime::now()
- .duration_since(UNIX_EPOCH)
- .map(|duration| duration.as_secs())
- .unwrap_or(0);
- let days = (secs / 86_400) as i64;
- let z = days + 719_468;
- let era = if z >= 0 { z } else { z - 146_096 } / 146_097;
- let doe = (z - era * 146_097) as u64;
- let yoe = (doe - doe / 1_460 + doe / 36_524 - doe / 146_096) / 365;
- let y = yoe as i64 + era * 400;
- let doy = doe - (365 * yoe + yoe / 4 - yoe / 100);
- let mp = (5 * doy + 2) / 153;
- let d = doy - (153 * mp + 2) / 5 + 1;
- let m = if mp < 10 { mp + 3 } else { mp - 9 };
- let year = if m <= 2 { y + 1 } else { y };
- (
- format!("{year:04}{m:02}{d:02}"),
- format!("{year:04}-{m:02}-{d:02}"),
- )
-}
-
-/// 会话记忆落卷成 .hdlp 文本——HLDP 检查点体,人可读、链可续。
-fn render_memory(memory: &AgentSessionMemory) -> String {
- format!(
- "HLDP-CHECKPOINT\nid: {}\nprev: {}\ndate: {}\npersona: {}\nhost: {}\ntitle: {}\n\n== 任务信封 ==\n{}\n\n== 提词板 ==\n{}\n\n== 状态 ==\n{}\n",
- memory.id,
- if memory.prev.is_empty() { "无(开卷首卷)" } else { &memory.prev },
- memory.date,
- memory.persona,
- memory.host,
- memory.title,
- memory.task,
- memory
- .prompter_board
- .answers
- .iter()
- .cloned()
- .chain(memory.prompter_board.path_hints.iter().cloned())
- .collect::>()
- .join("\n"),
- memory.status
- )
-}
-
-/// 从提词器抄指引上板:给定的题目逐条问,答案与路径分栏收好。
-fn compose_prompter_board(
- state: &State<'_, ButlerState>,
- topics: &[String],
-) -> PrompterBoard {
- let mut board = PrompterBoard {
- topics: topics.to_vec(),
- answers: Vec::new(),
- path_hints: Vec::new(),
- };
- for topic in topics {
- match prompter_lookup(state.inner(), topic) {
- Some(answer) => board.answers.push(format!("{}: {}", topic, answer)),
- None => board.path_hints.push(format!(
- "{}: 未命中——下钻路径:第五域线上仓库按 GLS 编号检索",
- topic
- )),
- }
- }
- board
-}
-
-fn append_butler_note(state: &State<'_, ButlerState>, record: ButlerRecord) {
- crate::persona_butler::append_record(state.inner(), record);
-}
-
-/// 接单:GLP 信封进门 → 验 → 抄提词板 → 落 HLDP 记忆卷 → 移 CURRENT 指针 → 回执。
-/// 信封不合格、或不是 command 件,一律拒收——宿主只认标准指令。
-#[tauri::command]
-pub fn receive_agent_task_envelope(
- app: AppHandle,
- state: State<'_, ButlerState>,
- envelope: GlpMessage,
- prompter_topics: Vec,
-) -> Result {
- validate_envelope(&envelope)?;
- if envelope.payload.content_type != ContentType::Command {
- return Err("HOLOLAKE_AGENT_TASK_NOT_COMMAND".into());
- }
- let root = memory_root(&app)?;
- fs::create_dir_all(&root)
- .map_err(|error| format!("HOLOLAKE_AGENT_MEMORY_WRITE_FAILED: {error}"))?;
- let (compact, date) = today_compact();
- let prev = latest_memory_id(&root);
- let daily_sequence = fs::read_dir(&root)
- .map(|entries| {
- entries
- .filter_map(|entry| entry.ok())
- .filter(|entry| {
- entry
- .file_name()
- .to_string_lossy()
- .starts_with(&format!("AGENT-SESSION-{compact}"))
- })
- .count() as u64
- + 1
- })
- .unwrap_or(1);
- let session_id = format!("AGENT-SESSION-{compact}-{daily_sequence:03}");
- let board = compose_prompter_board(&state, &prompter_topics);
- let memory = AgentSessionMemory {
- id: session_id.clone(),
- prev,
- date,
- persona: envelope.sender.object_id.clone(),
- host: "hololake-native-desktop".into(),
- title: format!("Agent 任务 · {}", envelope.context.task_id),
- envelope_id: envelope.message_id.clone(),
- task: envelope.payload.content.clone(),
- hldp_anchor: envelope.context.hldp_anchor.clone(),
- prompter_board: board,
- status: "ACCEPTED(待师傅唤起件接入)".into(),
- };
- let memory_path = root.join(format!("{session_id}.hdlp"));
- fs::write(&memory_path, render_memory(&memory))
- .map_err(|error| format!("HOLOLAKE_AGENT_MEMORY_WRITE_FAILED: {error}"))?;
- fs::write(pointer_path(&root), format!("{session_id}\n"))
- .map_err(|error| format!("HOLOLAKE_AGENT_MEMORY_WRITE_FAILED: {error}"))?;
- append_butler_note(
- &state,
- ButlerRecord {
- record_id: uuid::Uuid::new_v4().to_string(),
- kind: ButlerRecordKind::GlpEnvelope,
- from: envelope.sender.object_id.clone(),
- subject: format!("agent-task:{session_id}"),
- payload: envelope.payload.content.clone(),
- occurred_at_unix_ms: SystemTime::now()
- .duration_since(UNIX_EPOCH)
- .map(|duration| duration.as_millis() as i64)
- .unwrap_or(0),
- },
- );
- Ok(AgentTaskReceipt {
- receipt_for: envelope.message_id,
- session_id,
- memory_path: memory_path.to_string_lossy().to_string(),
- accepted: true,
- note: "信封已收,记忆已落卷,提词板已抄;师傅唤起件待实测接入".into(),
- })
-}
-
-/// 查会话记忆:给 id 读回整卷;不给 id 则顺着 CURRENT 指针读最新一卷。
-#[tauri::command]
-pub fn query_agent_session_memory(
- app: AppHandle,
- session_id: Option,
-) -> Result