@senguoyun/dsh-arkme 0.1.13 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/consumer-plugin-contract.md +3 -1
- package/docs/extension-market-controls.md +46 -7
- package/docs/gui-production-integration.md +10 -9
- package/lib/client.js +45125 -43501
- package/lib/client.js.map +1 -1
- package/lib/extension-profile-restart-helper.js +2 -2
- package/lib/index.js +1180 -442
- package/lib/{install-store-Sn3Ccxfu.js → install-store-Beau1y-o.js} +12 -6
- package/lib/persistent-extension.js +1 -1
- package/lib/{persistent-runtime-Cki0XC3L.js → persistent-runtime-D_hNgTX3.js} +1479 -249
- package/lib/{plugin-updater-helper-CiPlNqBc.js → plugin-updater-helper-BEYBTOld.js} +5 -5
- package/lib/plugin-updater-helper.js +1 -1
- package/lib/{profile-package-manager-DvzGgkqe.js → profile-package-manager-DwuQu8ZL.js} +91 -3
- package/lib/sdk.js +74 -17
- package/lib/types/arkme-service.d.ts +62 -9
- package/lib/types/arkme-service.d.ts.map +1 -1
- package/lib/types/bot-avatar-ref.d.ts +3 -0
- package/lib/types/bot-avatar-ref.d.ts.map +1 -0
- package/lib/types/client/ArkmeArkoSurface.d.ts.map +1 -1
- package/lib/types/client/ArkmeAvatar.d.ts.map +1 -1
- package/lib/types/client/ArkmeBotCreateDialog.d.ts +6 -0
- package/lib/types/client/ArkmeBotCreateDialog.d.ts.map +1 -0
- package/lib/types/client/ArkmeCalendarSurface.d.ts +4 -1
- package/lib/types/client/ArkmeCalendarSurface.d.ts.map +1 -1
- package/lib/types/client/ArkmeChatMemberActions.d.ts +48 -0
- package/lib/types/client/ArkmeChatMemberActions.d.ts.map +1 -0
- package/lib/types/client/ArkmeConversationSurface.d.ts +8 -18
- package/lib/types/client/ArkmeConversationSurface.d.ts.map +1 -1
- package/lib/types/client/ArkmeExtensionPublishDialog.d.ts.map +1 -1
- package/lib/types/client/ArkmeExtensionReviews.d.ts +4 -2
- package/lib/types/client/ArkmeExtensionReviews.d.ts.map +1 -1
- package/lib/types/client/ArkmeFooterDropdown.d.ts.map +1 -1
- package/lib/types/client/ArkmeGroupChatControls.d.ts +3 -1
- package/lib/types/client/ArkmeGroupChatControls.d.ts.map +1 -1
- package/lib/types/client/ArkmeLogin.d.ts.map +1 -1
- package/lib/types/client/ArkmeMarketplace.d.ts +31 -6
- package/lib/types/client/ArkmeMarketplace.d.ts.map +1 -1
- package/lib/types/client/ArkmeMentionTextarea.d.ts +13 -0
- package/lib/types/client/ArkmeMentionTextarea.d.ts.map +1 -0
- package/lib/types/client/ArkmePersistentShell.d.ts +20 -0
- package/lib/types/client/ArkmePersistentShell.d.ts.map +1 -0
- package/lib/types/client/ArkmeProductNavigation.d.ts +4 -3
- package/lib/types/client/ArkmeProductNavigation.d.ts.map +1 -1
- package/lib/types/client/ArkmeQuickAdd.d.ts.map +1 -1
- package/lib/types/client/ArkmeRecordingSurface.d.ts +3 -109
- package/lib/types/client/ArkmeRecordingSurface.d.ts.map +1 -1
- package/lib/types/client/ArkmeRichContent.d.ts +7 -1
- package/lib/types/client/ArkmeRichContent.d.ts.map +1 -1
- package/lib/types/client/ArkmeSettingsRow.d.ts +1 -1
- package/lib/types/client/ArkmeSettingsRow.d.ts.map +1 -1
- package/lib/types/client/ArkmeSettingsSurface.d.ts +4 -1
- package/lib/types/client/ArkmeSettingsSurface.d.ts.map +1 -1
- package/lib/types/client/ArkmeSidebar.d.ts +9 -1
- package/lib/types/client/ArkmeSidebar.d.ts.map +1 -1
- package/lib/types/client/ArkmeStartupAuthGate.d.ts +4 -2
- package/lib/types/client/ArkmeStartupAuthGate.d.ts.map +1 -1
- package/lib/types/client/ArkmeVirtualWorkspace.d.ts +9 -9
- package/lib/types/client/ArkmeVirtualWorkspace.d.ts.map +1 -1
- package/lib/types/client/ArkmeVoiceprintSurface.d.ts +61 -0
- package/lib/types/client/ArkmeVoiceprintSurface.d.ts.map +1 -0
- package/lib/types/client/ArkmeWorldSurface.d.ts +104 -4
- package/lib/types/client/ArkmeWorldSurface.d.ts.map +1 -1
- package/lib/types/client/DeepSeekHarnessSurface.d.ts +6 -0
- package/lib/types/client/DeepSeekHarnessSurface.d.ts.map +1 -0
- package/lib/types/client/api.d.ts +1 -1
- package/lib/types/client/api.d.ts.map +1 -1
- package/lib/types/client/arkme-emoji.d.ts +3 -0
- package/lib/types/client/arkme-emoji.d.ts.map +1 -0
- package/lib/types/client/composer-draft-store.d.ts +18 -0
- package/lib/types/client/composer-draft-store.d.ts.map +1 -1
- package/lib/types/client/composer-focus.d.ts +8 -0
- package/lib/types/client/composer-focus.d.ts.map +1 -0
- package/lib/types/client/conversation-composer-presentation.d.ts +47 -0
- package/lib/types/client/conversation-composer-presentation.d.ts.map +1 -0
- package/lib/types/client/conversation-memory-cache.d.ts +30 -1
- package/lib/types/client/conversation-memory-cache.d.ts.map +1 -1
- package/lib/types/client/index.d.ts +6 -4
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/interwoven-moments.d.ts +2 -1
- package/lib/types/client/interwoven-moments.d.ts.map +1 -1
- package/lib/types/client/marketplace-sort-preference.d.ts +5 -0
- package/lib/types/client/marketplace-sort-preference.d.ts.map +1 -0
- package/lib/types/client/navigation-cache.d.ts +4 -0
- package/lib/types/client/navigation-cache.d.ts.map +1 -1
- package/lib/types/client/provider-instance-runtime.d.ts +20 -0
- package/lib/types/client/provider-instance-runtime.d.ts.map +1 -0
- package/lib/types/client/redesign/ArkmeRootFrame.d.ts +19 -0
- package/lib/types/client/redesign/ArkmeRootFrame.d.ts.map +1 -0
- package/lib/types/client/redesign/ArkmeTaskSurface.d.ts +15 -0
- package/lib/types/client/redesign/ArkmeTaskSurface.d.ts.map +1 -0
- package/lib/types/client/redesign/ArkmeWorkspaceDialog.d.ts +9 -0
- package/lib/types/client/redesign/ArkmeWorkspaceDialog.d.ts.map +1 -0
- package/lib/types/client/redesign/layout-controller.d.ts +17 -0
- package/lib/types/client/redesign/layout-controller.d.ts.map +1 -0
- package/lib/types/client/redesign/styles.d.ts +3 -0
- package/lib/types/client/redesign/styles.d.ts.map +1 -0
- package/lib/types/client/redesign/task-session.d.ts +14 -0
- package/lib/types/client/redesign/task-session.d.ts.map +1 -0
- package/lib/types/client/redesign/theme-presenter.d.ts +10 -0
- package/lib/types/client/redesign/theme-presenter.d.ts.map +1 -0
- package/lib/types/client/related-recordings.d.ts +1 -0
- package/lib/types/client/related-recordings.d.ts.map +1 -1
- package/lib/types/client/slots-contract.d.ts +2 -2
- package/lib/types/client/slots-contract.d.ts.map +1 -1
- package/lib/types/client/source-list.d.ts +4 -0
- package/lib/types/client/source-list.d.ts.map +1 -1
- package/lib/types/client/ui-controller.d.ts +20 -9
- package/lib/types/client/ui-controller.d.ts.map +1 -1
- package/lib/types/client/voiceprint-enrollment-client.d.ts +12 -0
- package/lib/types/client/voiceprint-enrollment-client.d.ts.map +1 -0
- package/lib/types/client/voiceprint-recorder.d.ts +23 -0
- package/lib/types/client/voiceprint-recorder.d.ts.map +1 -0
- package/lib/types/client/world-voiceprint-expectation-copy.d.ts +7 -0
- package/lib/types/client/world-voiceprint-expectation-copy.d.ts.map +1 -0
- package/lib/types/client/world-voiceprint-playback.d.ts +41 -0
- package/lib/types/client/world-voiceprint-playback.d.ts.map +1 -0
- package/lib/types/extensions/install-store.d.ts +1 -0
- package/lib/types/extensions/install-store.d.ts.map +1 -1
- package/lib/types/extensions/manager.d.ts +5 -0
- package/lib/types/extensions/manager.d.ts.map +1 -1
- package/lib/types/extensions/owned-inventory.d.ts +30 -2
- package/lib/types/extensions/owned-inventory.d.ts.map +1 -1
- package/lib/types/extensions/owned-refs.d.ts +1 -0
- package/lib/types/extensions/owned-refs.d.ts.map +1 -1
- package/lib/types/extensions/owned-store.d.ts +9 -0
- package/lib/types/extensions/owned-store.d.ts.map +1 -1
- package/lib/types/extensions/profile-installer.d.ts.map +1 -1
- package/lib/types/extensions/publish-client.d.ts +2 -0
- package/lib/types/extensions/publish-client.d.ts.map +1 -1
- package/lib/types/extensions/publisher-role.d.ts +9 -0
- package/lib/types/extensions/publisher-role.d.ts.map +1 -0
- package/lib/types/extensions/types.d.ts +11 -0
- package/lib/types/extensions/types.d.ts.map +1 -1
- package/lib/types/host-api.d.ts +1 -1
- package/lib/types/host-api.d.ts.map +1 -1
- package/lib/types/index.d.ts +2 -2
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/local-database.d.ts +1 -0
- package/lib/types/local-database.d.ts.map +1 -1
- package/lib/types/openclaw/secret-provider.d.ts.map +1 -1
- package/lib/types/outgoing-call-assets.d.ts.map +1 -1
- package/lib/types/plugin-update-install-state.d.ts.map +1 -1
- package/lib/types/plugin-update-state.d.ts.map +1 -1
- package/lib/types/plugin-update.d.ts +6 -0
- package/lib/types/plugin-update.d.ts.map +1 -1
- package/lib/types/private-filesystem.d.ts +5 -0
- package/lib/types/private-filesystem.d.ts.map +1 -0
- package/lib/types/recording-presentation.d.ts +2 -2
- package/lib/types/recording-presentation.d.ts.map +1 -1
- package/lib/types/sdk/index.d.ts +31 -8
- package/lib/types/sdk/index.d.ts.map +1 -1
- package/lib/types/services/bot-service.d.ts.map +1 -1
- package/lib/types/services/chat-realtime-service.d.ts +1 -1
- package/lib/types/services/chat-realtime-service.d.ts.map +1 -1
- package/lib/types/services/chat-service.d.ts +21 -2
- package/lib/types/services/chat-service.d.ts.map +1 -1
- package/lib/types/services/contact-service.d.ts +2 -0
- package/lib/types/services/contact-service.d.ts.map +1 -1
- package/lib/types/services/group-service.d.ts.map +1 -1
- package/lib/types/services/record-service.d.ts +2 -1
- package/lib/types/services/record-service.d.ts.map +1 -1
- package/lib/types/services/recording-service.d.ts +2 -4
- package/lib/types/services/recording-service.d.ts.map +1 -1
- package/lib/types/services/service.d.ts +5 -2
- package/lib/types/services/service.d.ts.map +1 -1
- package/lib/types/services/source-service.d.ts.map +1 -1
- package/lib/types/services/voiceprint-service.d.ts +79 -0
- package/lib/types/services/voiceprint-service.d.ts.map +1 -0
- package/lib/types/services/world-service.d.ts +41 -6
- package/lib/types/services/world-service.d.ts.map +1 -1
- package/lib/types/state-store.d.ts.map +1 -1
- package/lib/types/tools/business/bots/create.d.ts.map +1 -1
- package/lib/types/tools/business/conversation/index.d.ts.map +1 -1
- package/lib/types/tools/business/conversation/member-records.d.ts +3 -0
- package/lib/types/tools/business/conversation/member-records.d.ts.map +1 -0
- package/lib/types/tools/business/index.d.ts.map +1 -1
- package/lib/types/tools/business/recordings/index.d.ts +1 -2
- package/lib/types/tools/business/recordings/index.d.ts.map +1 -1
- package/lib/types/tools/business/voiceprint/grants.d.ts +2 -0
- package/lib/types/tools/business/voiceprint/grants.d.ts.map +1 -0
- package/lib/types/tools/business/voiceprint/index.d.ts +3 -0
- package/lib/types/tools/business/voiceprint/index.d.ts.map +1 -0
- package/lib/types/tools/business/voiceprint/invite.d.ts +2 -0
- package/lib/types/tools/business/voiceprint/invite.d.ts.map +1 -0
- package/lib/types/tools/business/voiceprint/recognized-invite.d.ts +2 -0
- package/lib/types/tools/business/voiceprint/recognized-invite.d.ts.map +1 -0
- package/lib/types/tools/business/voiceprint/recognized-people.d.ts +2 -0
- package/lib/types/tools/business/voiceprint/recognized-people.d.ts.map +1 -0
- package/lib/types/tools/business/voiceprint/restore.d.ts +2 -0
- package/lib/types/tools/business/voiceprint/restore.d.ts.map +1 -0
- package/lib/types/tools/business/voiceprint/revoke.d.ts +2 -0
- package/lib/types/tools/business/voiceprint/revoke.d.ts.map +1 -0
- package/lib/types/tools/business/voiceprint/status.d.ts +2 -0
- package/lib/types/tools/business/voiceprint/status.d.ts.map +1 -0
- package/lib/types/tools/business/world/index.d.ts +2 -0
- package/lib/types/tools/business/world/index.d.ts.map +1 -1
- package/lib/types/tools/business/world/user.d.ts +2 -0
- package/lib/types/tools/business/world/user.d.ts.map +1 -0
- package/lib/types/tools/business/world/voiceprint-social-context.d.ts +2 -0
- package/lib/types/tools/business/world/voiceprint-social-context.d.ts.map +1 -0
- package/lib/types/tools/extensions/index.d.ts.map +1 -1
- package/lib/types/tools/ports/conversations.d.ts +10 -1
- package/lib/types/tools/ports/conversations.d.ts.map +1 -1
- package/lib/types/tools/ports/index.d.ts +3 -2
- package/lib/types/tools/ports/index.d.ts.map +1 -1
- package/lib/types/tools/ports/recordings.d.ts +2 -3
- package/lib/types/tools/ports/recordings.d.ts.map +1 -1
- package/lib/types/tools/ports/voiceprint.d.ts +37 -0
- package/lib/types/tools/ports/voiceprint.d.ts.map +1 -0
- package/lib/types/tools/ports/world.d.ts +10 -1
- package/lib/types/tools/ports/world.d.ts.map +1 -1
- package/lib/types/tools/prompts/business.d.ts.map +1 -1
- package/lib/types/tools/registry/registrar.d.ts.map +1 -1
- package/lib/types/types.d.ts +150 -16
- package/lib/types/types.d.ts.map +1 -1
- package/lib/types/voiceprint-routes.d.ts +11 -0
- package/lib/types/voiceprint-routes.d.ts.map +1 -0
- package/lib/types/voiceprint-wav.d.ts +6 -0
- package/lib/types/voiceprint-wav.d.ts.map +1 -0
- package/package.json +7 -4
- package/assets/desktop_call/avatar-lin-xiaoman.jpeg +0 -0
- package/assets/desktop_call/avatar-mother.jpg +0 -0
- package/assets/desktop_call/avatar-self.png +0 -0
- package/assets/desktop_call/call-add-linear.svg +0 -13
- package/assets/desktop_call/icon-scan-add-contact.svg +0 -4
- package/assets/desktop_call/profile-circle-linear.svg +0 -11
- package/assets/desktop_call/user-add-linear.svg +0 -15
- package/lib/types/client/ArkmeCallHistorySurface.d.ts +0 -57
- package/lib/types/client/ArkmeCallHistorySurface.d.ts.map +0 -1
- package/lib/types/client/demo-audio.d.ts +0 -2
- package/lib/types/client/demo-audio.d.ts.map +0 -1
- package/lib/types/client/personal-test-edition.d.ts +0 -17
- package/lib/types/client/personal-test-edition.d.ts.map +0 -1
|
@@ -77,12 +77,14 @@ if ((await arkme.capabilities()).features.extensionPreviews === true && userConf
|
|
|
77
77
|
|
|
78
78
|
The SDK communicates only with the same-origin Provider route. Consumers must not read OS credential-store entries, SQLite files, state files, or tokens directly.
|
|
79
79
|
|
|
80
|
-
`capabilities().features.myExtensions` advertises the current-account extension inventory. `myExtensions()` merges only Host-approved live Cordis, Profile-resolved and cloud-owned facts; consumers must use its states and `publish` result without rescanning Profile files or inferring ownership from names. Every publishable item carries one Host-derived route: `dynamic-cordis-v2` means `artifactContractVersion=2` and `artifactKind=dsh-bundle-tgz` for a live current-session Dynamic Cordis Package; `profile-native-v3` means `artifactContractVersion=3` and `artifactKind=dsh-native-package-tgz` for an installed or Profile-local DSH Bundle. Callers
|
|
80
|
+
`capabilities().features.myExtensions` advertises the current-account extension inventory. `myExtensions()` merges only Host-approved live Cordis, Profile-resolved and cloud-owned facts; consumers must use its states and `publish` result without rescanning Profile files or inferring ownership from names. Every publishable item carries one Host-derived route: `dynamic-cordis-v2` means `artifactContractVersion=2` and `artifactKind=dsh-bundle-tgz` for a live current-session Dynamic Cordis Package; `profile-native-v3` means `artifactContractVersion=3` and `artifactKind=dsh-native-package-tgz` for an installed or Profile-local DSH Bundle. Callers pass `ownedRef` unchanged and never choose a mode themselves. A GitHub repository URL is optional provenance metadata, not a third upload route, publication credential or cloud clone/build request. A third-party registry/Git dependency appears only when its actually resolved package declares `dsh.bundle.patch`; it is a V3 publication candidate rather than an assertion that the current account authored the upstream code. `publisher_role` is server-owned: explicit values win, while historical rows without a role resolve to importer only when they have GitHub provenance. Consumers never submit this role. `ownedRef` is short-lived and account-bound. `publishMyExtension()` requires a current explicit human request and can publish only the exact Cordis Package, resolved Bundle directory or local Bundle tgz behind that ref; consumers must refresh the list after expiry or account switch. Profile paths, Agent IDs, source archives, artifact upload requests and signing material never enter this contract.
|
|
81
81
|
|
|
82
82
|
Plugin update discovery and acknowledgement are lifecycle concerns owned by the bundled Arkme UI. They are intentionally absent from the public Browser SDK, Host `arkmeData` service and model tool catalog. Consumers must not invoke raw `plugin.update.*` operations or attempt to mutate a DSH profile.
|
|
83
83
|
|
|
84
84
|
`capabilities().features.extensionManagement === true` advertises market queries, install preview, the installed-extension projection and desired enable-state contract. `searchExtensions()` and `extensionDetail()` return the same V1/V2/V3 version projection as the built-in UI and model Tool. `extensionInstallPreview()` is read-only and returns `artifact_contract_version`, `artifact_kind`, `execution_model`, `requires_native_confirmation` and server-derived `native_capabilities`; a Consumer must show those capabilities and obtain explicit human confirmation before starting installation through its product flow. `installedExtensions()` omits artifact paths, Profile package names and Dynamic Cordis IDs while retaining V3 contract/capability facts. `setExtensionEnabled()` retains the verified artifact and installed version; its result distinguishes desired `enabled`, observed Host `active`, and `restart_required`. Consumers must call it only from a current explicit human action, must display restart/error results, and must never turn an enable/disable control into uninstall. The Provider remains the only writer of the Profile manifest and install-state database.
|
|
85
85
|
|
|
86
|
+
`deleteExtension()` is the owner-only destructive lifecycle action and likewise requires a current explicit human action. The registry keeps soft-deleted rows and artifacts only for controlled recovery; successful user-visible deletion removes catalog and owned projections, current installation/runtime state, linked Profile/Cordis sources, lineage rows, and outstanding opaque source references. Consumers must remove all local projections immediately and display `restart_required` instead of presenting the retained registry data as an active or installed extension.
|
|
87
|
+
|
|
86
88
|
`capabilities().features.extensionIcons === true` advertises the extension-owned icon contract. `setExtensionIcon()` accepts a user-selected PNG, JPEG or WebP `Blob` up to 2 MiB for an extension owned by the current account. `extensionIconUrl()` turns the catalog's opaque current `icon_ref` into a same-origin image URL. Consumers must refresh catalog state after replacement, render the generic extension mark when an icon is missing or unreadable, and must never persist an old ref or receive, reconstruct, or fetch an object-storage URL directly.
|
|
87
89
|
|
|
88
90
|
`capabilities().features.extensionPreviews === true` advertises the extension-owned preview gallery MVP. `addExtensionPreview()` accepts a user-selected PNG, JPEG or WebP `Blob` up to 5 MiB. A gallery contains at most 20 ordered items; index zero is the cover. `deleteExtensionPreview()` and `reorderExtensionPreviews()` require the current `preview_revision`; a conflict means the Consumer must refresh and ask the user again instead of silently overwriting the newer gallery. Render refs only through `extensionPreviewUrl()`. The built-in marketplace detail renders the ordered gallery and its Edit dialog stages local multi-file add/delete/reorder before saving. Agent Tools can consume captured latest direct-user-message attachments, a compatible Arkme `image_ref`, or PNG/JPEG/WebP/restricted-SVG files inside the current Agent workspace. They accept only relative `workspace_paths`, reject path traversal and symlink escapes, and never accept arbitrary host paths or URLs. Icon and preview addition use Host-enforced conversational `prepare`/`confirm` state bound to a later direct-user reply and unchanged content fingerprints rather than a DSH ACK card.
|
|
@@ -6,6 +6,8 @@ The marketplace separates three different lifecycle operations:
|
|
|
6
6
|
- enable/disable changes whether an installed extension should run;
|
|
7
7
|
- uninstall removes the installed artifact and Profile dependency.
|
|
8
8
|
|
|
9
|
+
Author deletion is stronger than unpublishing. The registry uses a soft-delete internally so an operator can restore retained rows and artifacts, but the user-visible operation removes the extension from catalog/owned projections, uninstalls its current local copy, removes linked Cordis and Profile sources, deletes persisted lineage, and invalidates outstanding opaque source references. A required DSH restart is reported explicitly.
|
|
10
|
+
|
|
9
11
|
`enabled` is the durable desired state. `active` is the current Host runtime
|
|
10
12
|
observation. The UI must not infer one from the other, and must surface a
|
|
11
13
|
restart requirement when the current DSH process cannot reach the desired
|
|
@@ -19,12 +21,49 @@ dependency merely because it remains installed.
|
|
|
19
21
|
|
|
20
22
|
## Capability matrix
|
|
21
23
|
|
|
22
|
-
| Surface | Enable/disable |
|
|
24
|
+
| Surface | Enable/disable | Complete author deletion | Extension icon management |
|
|
23
25
|
| --- | --- | --- | --- |
|
|
24
|
-
| DSH Tool | `arkme_extension_set_enabled` with explicit confirmation |
|
|
25
|
-
| Public SDK | typed installed-list and enable/disable methods |
|
|
26
|
-
| Built-in UI | switch in every installed projection, with busy/error/restart states |
|
|
27
|
-
| Host owner | `ArkmeExtensionManager.setEnabled()` owns persistence, Cordis disposal/activation, Profile projection and errors |
|
|
26
|
+
| DSH Tool | `arkme_extension_set_enabled` with explicit confirmation | `arkme_extension_delete` confirms one exact owned identity and returns cleanup/restart facts | `arkme_extension_icon_set` uses `prepare → later direct human reply → confirm` for exactly one authorized Arkme `image_ref` or current-session-relative `workspace_path`; it does not use an ACK card |
|
|
27
|
+
| Public SDK | typed installed-list and enable/disable methods | `deleteExtension()` is restricted by contract to an explicit current human action | `setExtensionIcon()` uploads a local `Blob`; `extensionIconUrl()` returns only a same-origin URL |
|
|
28
|
+
| Built-in UI | switch in every installed projection, with busy/error/restart states | one confirmation removes the row from every tab and surfaces manual restart when required | publish, replace, list and detail surfaces share the current `icon_ref` with a generic fallback |
|
|
29
|
+
| Host owner | `ArkmeExtensionManager.setEnabled()` owns persistence, Cordis disposal/activation, Profile projection and errors | `ArkmeOwnedExtensionInventory.delete()` coordinates registry soft-delete, install/runtime/Profile cleanup, lineage deletion and opaque-ref invalidation | owns file/image-ref validation, workspace confinement and normalization, signed PUT/GET transport, digest verification and bounded cache invalidation |
|
|
30
|
+
|
|
31
|
+
## Detail AI audit entry
|
|
32
|
+
|
|
33
|
+
The one-click audit entry is owned by the shared extension detail modal. The
|
|
34
|
+
legacy inline dialog detail path has been removed so all marketplace containers
|
|
35
|
+
show the same audit action and feedback rendering.
|
|
36
|
+
|
|
37
|
+
```mermaid
|
|
38
|
+
flowchart TB
|
|
39
|
+
Modal[Extension detail modal] --> Lead[Identity, metrics, author]
|
|
40
|
+
Lead --> Actions[Primary action column]
|
|
41
|
+
Actions --> AuditButton[AI audit button]
|
|
42
|
+
Actions --> Install[Install, update, or toggle]
|
|
43
|
+
Lead --> Preview[Preview gallery]
|
|
44
|
+
Modal --> Feedback[Audit result or error panel]
|
|
45
|
+
Modal --> Facts[About and detail facts]
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
```mermaid
|
|
49
|
+
sequenceDiagram
|
|
50
|
+
participant User
|
|
51
|
+
participant UI as Marketplace detail UI
|
|
52
|
+
participant Host as Arkme Host API
|
|
53
|
+
participant Owner as Extension manager
|
|
54
|
+
User->>UI: Click AI audit
|
|
55
|
+
UI->>UI: Show busy state and clear stale result
|
|
56
|
+
UI->>Host: extensions.audit.check(extensionId)
|
|
57
|
+
Host->>Owner: auditExtension(trigger=market_detail)
|
|
58
|
+
alt audit succeeds
|
|
59
|
+
Owner-->>Host: verdict, risk, summary, reasons
|
|
60
|
+
Host-->>UI: structured audit result
|
|
61
|
+
UI-->>User: Show result panel
|
|
62
|
+
else audit fails
|
|
63
|
+
Host-->>UI: structured error
|
|
64
|
+
UI-->>User: Keep detail open and show retryable error
|
|
65
|
+
end
|
|
66
|
+
```
|
|
28
67
|
|
|
29
68
|
The extension registry owns one replaceable icon for each extension identity;
|
|
30
69
|
changing it does not create an extension version. Public catalog, detail and
|
|
@@ -56,6 +95,6 @@ The gallery is extension-owned, independent from versions, limited to 20 PNG/JPE
|
|
|
56
95
|
| DSH Tool | `arkme_extension_publish` accepts an optional repository-root URL and keeps the fixed `github_repository` type inside the Host | `arkme_extension_share` rotates an owned link only after the normal DSH write confirmation | Tool schema and manager tests |
|
|
57
96
|
| Public SDK | `publishMyExtension()` accepts `githubRepositoryUrl` and normalizes it without exposing eligibility credentials | `rotateExtensionShare()` returns only `{ref,url}` | SDK consumer tests and emitted declarations |
|
|
58
97
|
| Built-in UI | the publish dialog has one optional GitHub URL field and no type selector | published public/private items open a detail view with copy and owner-only rotation controls | server-render and full UI tests |
|
|
59
|
-
| Host owner | `ArkmeExtensionManager` validates/normalizes
|
|
98
|
+
| Host owner | `ArkmeExtensionManager` validates/normalizes optional provenance once; the registry derives author/importer and gates only its controlled importer context | the same manager validates the registry link before UI, Tool or SDK receives it | manager and authenticated Host-route tests |
|
|
60
99
|
|
|
61
|
-
Source metadata is an extension-level listing fact and never enters Bundle/source bytes, digests or signatures. Share links display public or private metadata through the Web page only; they do not authorize install, comments, execution or writes. The browser and model never receive internal eligibility tokens, object keys or signed artifact transport.
|
|
100
|
+
Source metadata is an extension-level listing fact and never enters Bundle/source bytes, digests or signatures. Ordinary UI/Tool/SDK publication is always author-owned and never exposes the controlled importer mode. The registry returns `publisher_role`; Host applies the no-write legacy fallback (empty role plus GitHub means importer), enriches the current account nickname/avatar only for authors, and leaves GitHub as a separate source for explicit author rows. Share links display public or private metadata through the Web page only; they do not authorize install, comments, execution or writes. The browser and model never receive internal eligibility tokens, object keys or signed artifact transport.
|
|
@@ -4,25 +4,26 @@ This branch implements the selected Arkme desktop visual direction in the produc
|
|
|
4
4
|
|
|
5
5
|
## Modification boundary
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
- The
|
|
7
|
+
- Arkme is the permanent product shell while the plugin is enabled. It registers the public DSH `sidebar`, `conversation`, and `details` slots during client initialization; registration does not depend on an open/closed UI state.
|
|
8
|
+
- The official DSH `ui-layout` plugin remains the `root` owner. Arkme shadows only its visible child seats: the sidebar becomes the compact Arkme feature rail, conversation becomes the Arkme directory plus content surface, and details is claimed empty and kept closed.
|
|
9
|
+
- Login, loading, error, existing-account, and first-user states render inside the same permanent Arkme shell. Escape, Session navigation, refresh, and notification activation never reveal the official DSH sidebar or conversation.
|
|
9
10
|
- The product navigation and all new visual styles render below nodes marked with `data-arkme-owned`.
|
|
10
|
-
- No global stylesheet, DSH
|
|
11
|
-
-
|
|
12
|
-
- DSH
|
|
11
|
+
- No global stylesheet, DSH private-source import, DSH source patch, or write to a DSH repository is used.
|
|
12
|
+
- Arkme no longer queries the host DOM, measures the host conversation region, or portals a floating card over DSH. The permanent conversation owner renders inline at full width and height.
|
|
13
|
+
- DSH continues to own root geometry, theme presentation, Sessions, Workspaces, Agents, Tools, and Host transports. Those runtime capabilities remain mounted but their official sidebar/conversation presentation is not visible.
|
|
13
14
|
|
|
14
15
|
## Supported visual routes
|
|
15
16
|
|
|
16
17
|
| Route | Layout inside the Arkme surface | Production owner | Status |
|
|
17
18
|
| --- | --- | --- | --- |
|
|
18
|
-
| Conversations |
|
|
19
|
+
| Conversations | Permanent feature rail + conversation directory + content | Existing Arkme source directory and timeline | Implemented |
|
|
19
20
|
| Recordings | Feature rail + full-width recording page | Existing recording calendar/day API | Implemented with the updated Demo's date browser, selected-day list, day timeline, and content tabs |
|
|
20
21
|
| Search | Feature rail + full-width search page | Existing record search and AI video API | Implemented with the existing search actions and history |
|
|
21
22
|
| Calendar | Feature rail + floating month calendar + day-content panel | Baseline calendar bucket/day APIs | Implemented with real counts, date switching, paging, loading, empty, and error states |
|
|
22
23
|
| Marketplace | Feature rail + full-width marketplace page | Existing Arkme marketplace | Implemented as the real search/install/uninstall marketplace |
|
|
23
24
|
| Tasks | Not rendered | No stable task-list/session contract in the plugin | Deferred; no mock implementation |
|
|
24
25
|
|
|
25
|
-
The conversation directory is mounted only in conversation mode
|
|
26
|
+
The feature rail remains mounted for every route. The conversation directory is mounted only in conversation mode and is unmounted for recordings, search, calendar, and plugins so its asynchronous source restoration cannot force a utility page back to the conversation layout.
|
|
26
27
|
|
|
27
28
|
The conversation route keeps the existing production composer for this iteration. Its add-content `+` is moved to the far-left edge of the toolbar, while the remaining redesign is limited to the surrounding three-column shell, directory density, header alignment, message typography and bubbles, member drawer alignment, and list metadata placement.
|
|
28
29
|
|
|
@@ -41,6 +42,6 @@ The plugin page keeps the production extension operations. The embedded discover
|
|
|
41
42
|
|
|
42
43
|
The final acceptance artifact must be an immutable `.tgz` built from this worktree and installed into a fresh profile of an unmodified supported DSH runtime. A standalone Vite preview is not acceptance evidence.
|
|
43
44
|
|
|
44
|
-
Final acceptance used the
|
|
45
|
+
Final acceptance used the unchanged-version `@senguoyun/dsh-arkme@0.1.11` package as an immutable `.tgz` installed through the official DSH plugin command into a fresh isolated DSH home. The runtime was a clean `@deepseek-ai/dsh@0.1.1-rc.1` install; no DSH checkout was created or modified.
|
|
45
46
|
|
|
46
|
-
Typecheck, production build, and the complete test suite passed. The suite result is
|
|
47
|
+
Typecheck, production build, and the complete test suite passed. The suite result is 157 test files passed and 3 skipped, with 861 tests passed and 3 skipped. Browser acceptance verified cold load, authenticated conversation rendering, route switching, and refresh: the permanent Arkme sidebar/workspace remained the visible winners, the sidebar settled at the official 56px compact width, and neither `DSH Local Build` nor `探索未至之境` appeared.
|