@senguoyun/dsh-arkme 0.1.12 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/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 +13 -0
- package/assets/desktop_call/icon-scan-add-contact.svg +4 -0
- package/assets/desktop_call/profile-circle-linear.svg +11 -0
- package/assets/desktop_call/user-add-linear.svg +15 -0
- package/cordis.patch.yml +4 -1
- package/docs/consumer-plugin-contract.md +13 -4
- package/docs/extension-market-controls.md +1 -1
- package/docs/gui-production-integration.md +1 -1
- package/lib/client.js +27533 -5149
- package/lib/client.js.map +1 -1
- package/lib/extension-profile-restart-helper.js +19 -3
- package/lib/index.js +1498 -380
- package/lib/{install-store-D6P-dH2i.js → install-store-Sn3Ccxfu.js} +32 -5
- package/lib/persistent-extension.js +1 -1
- package/lib/{persistent-runtime-kUpXXUZI.js → persistent-runtime-Cki0XC3L.js} +826 -183
- package/lib/plugin-updater-helper-CiPlNqBc.js +346 -0
- package/lib/plugin-updater-helper.js +2 -250
- package/lib/sdk.js +114 -2
- package/lib/types/arkme-service.d.ts +30 -2
- package/lib/types/arkme-service.d.ts.map +1 -1
- package/lib/types/client/ArkmeAppUpdateDialog.d.ts +5 -0
- package/lib/types/client/ArkmeAppUpdateDialog.d.ts.map +1 -0
- package/lib/types/client/ArkmeCallHistorySurface.d.ts +57 -0
- package/lib/types/client/ArkmeCallHistorySurface.d.ts.map +1 -0
- package/lib/types/client/ArkmeContactAddSurface.d.ts +9 -0
- package/lib/types/client/ArkmeContactAddSurface.d.ts.map +1 -0
- package/lib/types/client/ArkmeExtensionPublishDialog.d.ts.map +1 -1
- package/lib/types/client/ArkmeExtensionReviews.d.ts +10 -0
- package/lib/types/client/ArkmeExtensionReviews.d.ts.map +1 -1
- package/lib/types/client/ArkmeMarketplace.d.ts +153 -0
- package/lib/types/client/ArkmeMarketplace.d.ts.map +1 -0
- package/lib/types/client/ArkmeProductNavigation.d.ts.map +1 -1
- package/lib/types/client/ArkmeQuickAdd.d.ts +12 -0
- package/lib/types/client/ArkmeQuickAdd.d.ts.map +1 -0
- package/lib/types/client/ArkmeRecordingSurface.d.ts +109 -3
- package/lib/types/client/ArkmeRecordingSurface.d.ts.map +1 -1
- package/lib/types/client/ArkmeSettingsSurface.d.ts +20 -0
- package/lib/types/client/ArkmeSettingsSurface.d.ts.map +1 -1
- package/lib/types/client/ArkmeSidebar.d.ts.map +1 -1
- package/lib/types/client/ArkmeVirtualWorkspace.d.ts +12 -0
- package/lib/types/client/ArkmeVirtualWorkspace.d.ts.map +1 -1
- package/lib/types/client/ArkmeWorldSurface.d.ts +30 -0
- package/lib/types/client/ArkmeWorldSurface.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/app-update-store.d.ts +35 -0
- package/lib/types/client/app-update-store.d.ts.map +1 -0
- package/lib/types/client/demo-audio.d.ts +2 -0
- package/lib/types/client/demo-audio.d.ts.map +1 -0
- package/lib/types/client/extension-market-model.d.ts +1 -0
- package/lib/types/client/extension-market-model.d.ts.map +1 -1
- package/lib/types/client/index.d.ts +8 -2
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/personal-test-edition.d.ts +17 -0
- package/lib/types/client/personal-test-edition.d.ts.map +1 -0
- package/lib/types/client/ui-controller.d.ts +4 -1
- package/lib/types/client/ui-controller.d.ts.map +1 -1
- package/lib/types/extensions/bundle-artifact.d.ts +22 -0
- package/lib/types/extensions/bundle-artifact.d.ts.map +1 -1
- 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 +35 -2
- package/lib/types/extensions/manager.d.ts.map +1 -1
- package/lib/types/extensions/owned-inventory.d.ts +2 -2
- package/lib/types/extensions/owned-inventory.d.ts.map +1 -1
- package/lib/types/extensions/owned-refs.d.ts +1 -1
- package/lib/types/extensions/owned-refs.d.ts.map +1 -1
- package/lib/types/extensions/owned-types.d.ts +18 -5
- package/lib/types/extensions/owned-types.d.ts.map +1 -1
- package/lib/types/extensions/profile-owned-inventory.d.ts +1 -0
- package/lib/types/extensions/profile-owned-inventory.d.ts.map +1 -1
- package/lib/types/extensions/profile-restart-helper.d.ts.map +1 -1
- package/lib/types/extensions/publish-client.d.ts +47 -2
- package/lib/types/extensions/publish-client.d.ts.map +1 -1
- package/lib/types/extensions/signature.d.ts +31 -1
- package/lib/types/extensions/signature.d.ts.map +1 -1
- package/lib/types/extensions/types.d.ts +71 -5
- package/lib/types/extensions/types.d.ts.map +1 -1
- package/lib/types/host-api.d.ts.map +1 -1
- package/lib/types/index.d.ts +8 -2
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/outgoing-call-assets.d.ts.map +1 -1
- package/lib/types/plugin-update-artifact.d.ts +46 -0
- package/lib/types/plugin-update-artifact.d.ts.map +1 -0
- package/lib/types/plugin-update.d.ts +20 -11
- package/lib/types/plugin-update.d.ts.map +1 -1
- package/lib/types/plugin-updater-helper.d.ts +11 -0
- package/lib/types/plugin-updater-helper.d.ts.map +1 -1
- 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 +63 -7
- package/lib/types/sdk/index.d.ts.map +1 -1
- package/lib/types/services/bot-service.d.ts +5 -1
- package/lib/types/services/bot-service.d.ts.map +1 -1
- package/lib/types/services/contact-service.d.ts +25 -0
- package/lib/types/services/contact-service.d.ts.map +1 -0
- package/lib/types/services/group-service.d.ts +4 -1
- package/lib/types/services/group-service.d.ts.map +1 -1
- package/lib/types/services/recording-service.d.ts +4 -2
- package/lib/types/services/recording-service.d.ts.map +1 -1
- package/lib/types/services/service.d.ts +1 -0
- package/lib/types/services/service.d.ts.map +1 -1
- package/lib/types/services/world-service.d.ts +13 -0
- package/lib/types/services/world-service.d.ts.map +1 -1
- package/lib/types/tools/business/contacts/index.d.ts +4 -0
- package/lib/types/tools/business/contacts/index.d.ts.map +1 -0
- package/lib/types/tools/business/groups/create.d.ts +2 -0
- package/lib/types/tools/business/groups/create.d.ts.map +1 -0
- package/lib/types/tools/business/groups/index.d.ts +1 -0
- package/lib/types/tools/business/groups/index.d.ts.map +1 -1
- package/lib/types/tools/business/index.d.ts.map +1 -1
- package/lib/types/tools/business/recordings/index.d.ts +2 -1
- package/lib/types/tools/business/recordings/index.d.ts.map +1 -1
- 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/mine.d.ts +2 -0
- package/lib/types/tools/business/world/mine.d.ts.map +1 -0
- package/lib/types/tools/business/world/voiceprint-invite.d.ts +2 -0
- package/lib/types/tools/business/world/voiceprint-invite.d.ts.map +1 -0
- package/lib/types/tools/extensions/index.d.ts.map +1 -1
- package/lib/types/tools/extensions/publish-conversation.d.ts +8 -1
- package/lib/types/tools/extensions/publish-conversation.d.ts.map +1 -1
- package/lib/types/tools/ports/contacts.d.ts +12 -0
- package/lib/types/tools/ports/contacts.d.ts.map +1 -0
- package/lib/types/tools/ports/groups.d.ts +4 -1
- package/lib/types/tools/ports/groups.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 +3 -2
- package/lib/types/tools/ports/recordings.d.ts.map +1 -1
- package/lib/types/tools/ports/world.d.ts +12 -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 +48 -3
- package/lib/types/types.d.ts.map +1 -1
- package/package.json +5 -4
- package/lib/plugin-update-install-state-CIsOCjWK.js +0 -67
- package/lib/types/client/ArkmeExtensionCenter.d.ts +0 -74
- package/lib/types/client/ArkmeExtensionCenter.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Arkme DSH Plugin
|
|
2
2
|
|
|
3
|
-
Arkme 的 DeepSeek Harness 集成插件,为 DSH 提供账号、记录、聊天、Bot
|
|
3
|
+
Arkme 的 DeepSeek Harness 集成插件,为 DSH 提供账号、记录、聊天、Bot、社区、通话和市集能力。
|
|
4
4
|
|
|
5
5
|
- npm:[`@senguoyun/dsh-arkme`](https://www.npmjs.com/package/@senguoyun/dsh-arkme)
|
|
6
6
|
- 源码:[`arkme-senx/arkme-dsh-plugin`](https://github.com/arkme-senx/arkme-dsh-plugin)
|
|
@@ -82,7 +82,7 @@ pnpm run verify:call-assets
|
|
|
82
82
|
- [工具注册与能力目录](docs/tool-registry.md)
|
|
83
83
|
- [外部插件消费合同](docs/consumer-plugin-contract.md)
|
|
84
84
|
- [请求协调与限流](docs/request-coordination.md)
|
|
85
|
-
- [
|
|
85
|
+
- [市集控制](docs/extension-market-controls.md)
|
|
86
86
|
- [扩展评论与评分](docs/extension-reviews.md)
|
|
87
87
|
- [消息已读乐观更新](docs/read-ack-optimistic-flow.md)
|
|
88
88
|
- [Agent 代理发送链路](docs/agent-proxy-sender-flow.md)
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<g id="Property 1=linear">
|
|
3
|
+
<g id="vuesax/linear/call-add">
|
|
4
|
+
<g id="call-add">
|
|
5
|
+
<g id="call-add_2">
|
|
6
|
+
<path id="Vector" d="M21.97 18.33C21.97 18.69 21.89 19.06 21.72 19.42C21.55 19.78 21.33 20.12 21.04 20.44C20.55 20.98 20.01 21.37 19.4 21.62C18.8 21.87 18.15 22 17.45 22C16.43 22 15.34 21.76 14.19 21.27C13.04 20.78 11.89 20.12 10.75 19.29C9.6 18.45 8.51 17.52 7.47 16.49C6.44 15.45 5.51 14.36 4.68 13.22C3.86 12.08 3.2 10.94 2.72 9.81C2.24 8.67 2 7.58 2 6.54C2 5.86 2.12 5.21 2.36 4.61C2.6 4 2.98 3.44 3.51 2.94C4.15 2.31 4.85 2 5.59 2C5.87 2 6.15 2.06 6.4 2.18C6.66 2.3 6.89 2.48 7.07 2.74L9.39 6.01C9.57 6.26 9.7 6.49 9.79 6.71C9.88 6.92 9.93 7.13 9.93 7.32C9.93 7.56 9.86 7.8 9.72 8.03C9.59 8.26 9.4 8.5 9.16 8.74L8.4 9.53C8.29 9.64 8.24 9.77 8.24 9.93C8.24 10.01 8.25 10.08 8.27 10.16C8.3 10.24 8.33 10.3 8.35 10.36C8.53 10.69 8.84 11.12 9.28 11.64C9.73 12.16 10.21 12.69 10.73 13.22C11.27 13.75 11.79 14.24 12.32 14.69C12.84 15.13 13.27 15.43 13.61 15.61C13.66 15.63 13.72 15.66 13.79 15.69C13.87 15.72 13.95 15.73 14.04 15.73C14.21 15.73 14.34 15.67 14.45 15.56L15.21 14.81C15.46 14.56 15.7 14.37 15.93 14.25C16.16 14.11 16.39 14.04 16.64 14.04C16.83 14.04 17.03 14.08 17.25 14.17C17.47 14.26 17.7 14.39 17.95 14.56L21.26 16.91C21.52 17.09 21.7 17.3 21.81 17.55C21.91 17.8 21.97 18.05 21.97 18.33Z" stroke="#292D32" stroke-width="1.5" stroke-miterlimit="10"/>
|
|
7
|
+
<path id="Vector_2" d="M15.5 6H20.5" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
8
|
+
<path id="Vector_3" d="M18 8.5V3.5" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
9
|
+
</g>
|
|
10
|
+
</g>
|
|
11
|
+
</g>
|
|
12
|
+
</g>
|
|
13
|
+
</svg>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
3
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M5 8a1 1 0 0 1-2 0V5.923c0-.76.082-1.185.319-1.627.223-.419.558-.754.977-.977C4.738 3.082 5.162 3 5.923 3H8a1 1 0 0 1 0 2H5.923c-.459 0-.57.022-.684.082a.364.364 0 0 0-.157.157c-.06.113-.082.225-.082.684V8zm3 11a1 1 0 1 1 0 2H5.923c-.76 0-1.185-.082-1.627-.319a2.363 2.363 0 0 1-.977-.977C3.082 19.262 3 18.838 3 18.077V16a1 1 0 1 1 2 0v2.077c0 .459.022.57.082.684.038.07.087.12.157.157.113.06.225.082.684.082H8zm7-15a1 1 0 0 0 1 1h2.077c.459 0 .57.022.684.082.07.038.12.087.157.157.06.113.082.225.082.684V8a1 1 0 1 0 2 0V5.923c0-.76-.082-1.185-.319-1.627a2.363 2.363 0 0 0-.977-.977C19.262 3.082 18.838 3 18.077 3H16a1 1 0 0 0-1 1zm4 12a1 1 0 1 1 2 0v2.077c0 .76-.082 1.185-.319 1.627a2.364 2.364 0 0 1-.977.977c-.442.237-.866.319-1.627.319H16a1 1 0 1 1 0-2h2.077c.459 0 .57-.022.684-.082a.363.363 0 0 0 .157-.157c.06-.113.082-.225.082-.684V16zM3 11a1 1 0 1 0 0 2h18a1 1 0 1 0 0-2H3z" fill="#000000"/>
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<g id="Property 1=linear">
|
|
3
|
+
<g id="vuesax/linear/profile-circle">
|
|
4
|
+
<g id="profile-circle">
|
|
5
|
+
<path id="Vector" d="M12.12 12.78C12.05 12.77 11.96 12.77 11.88 12.78C10.12 12.72 8.71997 11.28 8.71997 9.50998C8.71997 7.69998 10.18 6.22998 12 6.22998C13.81 6.22998 15.28 7.69998 15.28 9.50998C15.27 11.28 13.88 12.72 12.12 12.78Z" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
6
|
+
<path id="Vector_2" d="M18.74 19.38C16.96 21.01 14.6 22 12 22C9.40001 22 7.04001 21.01 5.26001 19.38C5.36001 18.44 5.96001 17.52 7.03001 16.8C9.77001 14.98 14.25 14.98 16.97 16.8C18.04 17.52 18.64 18.44 18.74 19.38Z" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
7
|
+
<path id="Vector_3" d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
8
|
+
</g>
|
|
9
|
+
</g>
|
|
10
|
+
</g>
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<g id="Property 1=linear">
|
|
3
|
+
<g id="vuesax/linear/user-add">
|
|
4
|
+
<g id="user-add">
|
|
5
|
+
<path id="Vector" d="M12 12C14.7614 12 17 9.76142 17 7C17 4.23858 14.7614 2 12 2C9.23858 2 7 4.23858 7 7C7 9.76142 9.23858 12 12 12Z" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
6
|
+
<path id="Vector_2" d="M3.41003 22C3.41003 18.13 7.26003 15 12 15C12.96 15 13.89 15.13 14.76 15.37" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
7
|
+
<path id="Vector_3" d="M22 18C22 18.32 21.96 18.63 21.88 18.93C21.79 19.33 21.63 19.72 21.42 20.06C20.73 21.22 19.46 22 18 22C16.97 22 16.04 21.61 15.34 20.97C15.04 20.71 14.78 20.4 14.58 20.06C14.21 19.46 14 18.75 14 18C14 16.92 14.43 15.93 15.13 15.21C15.86 14.46 16.88 14 18 14C19.18 14 20.25 14.51 20.97 15.33C21.61 16.04 22 16.98 22 18Z" stroke="#292D32" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
|
8
|
+
<g id="Group">
|
|
9
|
+
<path id="Vector_4" d="M19.49 17.98H16.51" stroke="#292D32" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
|
10
|
+
<path id="Vector_5" d="M18 16.52V19.51" stroke="#292D32" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
|
11
|
+
</g>
|
|
12
|
+
</g>
|
|
13
|
+
</g>
|
|
14
|
+
</g>
|
|
15
|
+
</svg>
|
package/cordis.patch.yml
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
intelligentBaseUrl: https://intelligent.jotmo.cc
|
|
16
16
|
audioBaseUrl: https://audio.jotmo.cc
|
|
17
17
|
extensionPublishBaseUrl: https://extension-publish.jotmo.cc
|
|
18
|
+
shareWebsite: https://jiwo.cc
|
|
18
19
|
extensionArtifactDirectory: ''
|
|
19
20
|
extensionTrustedSigningKeys: '{"prod-ed25519-20260819-1":"m1MKKU16hyu1b1KKIXMG+zKEr/GmhmvyUEreJzthTxs="}'
|
|
20
21
|
routePath: /arkme-self/api
|
|
@@ -28,7 +29,9 @@
|
|
|
28
29
|
allowProduction: true
|
|
29
30
|
updateCheckEnabled: true
|
|
30
31
|
updateChannel: stable
|
|
31
|
-
|
|
32
|
+
updateServiceBaseUrl: https://api.jotmo.cc
|
|
33
|
+
updateArtifactBaseUrl: https://d.jiwo.cc
|
|
34
|
+
appVersion: ''
|
|
32
35
|
updateCheckIntervalHours: 12
|
|
33
36
|
updateAllowLocalInstall: true
|
|
34
37
|
richMediaRenderEnabled: true
|
|
@@ -41,6 +41,11 @@ await arkme.outbox()
|
|
|
41
41
|
await arkme.retry(recordUid)
|
|
42
42
|
const mine = await arkme.myExtensions()
|
|
43
43
|
const publishable = mine.items.find(item => item.publish.allowed)
|
|
44
|
+
if (publishable?.publish.allowed === true) showPublishRoute(
|
|
45
|
+
publishable.publish.route,
|
|
46
|
+
publishable.publish.artifactContractVersion,
|
|
47
|
+
publishable.publish.artifactKind,
|
|
48
|
+
)
|
|
44
49
|
if (publishable !== undefined && userConfirmedPublish) await arkme.publishMyExtension({
|
|
45
50
|
ownedRef: publishable.ownedRef,
|
|
46
51
|
name: publishable.name,
|
|
@@ -51,6 +56,10 @@ if (publishable !== undefined && userConfirmedPublish) await arkme.publishMyExte
|
|
|
51
56
|
})
|
|
52
57
|
const dispose = arkme.subscribe(state => refreshWhen(state.revision))
|
|
53
58
|
if ((await arkme.capabilities()).features.extensionManagement === true) {
|
|
59
|
+
const market = await arkme.searchExtensions('weather', 20)
|
|
60
|
+
const detail = market.items[0] === undefined ? undefined : await arkme.extensionDetail(market.items[0].extension_id)
|
|
61
|
+
const installPreview = detail === undefined ? undefined : await arkme.extensionInstallPreview(detail.extension_id)
|
|
62
|
+
if (installPreview?.artifact_contract_version === 3) showNativeCapabilities(installPreview.native_capabilities ?? [])
|
|
54
63
|
const installed = await arkme.installedExtensions()
|
|
55
64
|
if (installed[0] !== undefined) await arkme.setExtensionEnabled(installed[0].extensionId, false)
|
|
56
65
|
}
|
|
@@ -68,15 +77,15 @@ if ((await arkme.capabilities()).features.extensionPreviews === true && userConf
|
|
|
68
77
|
|
|
69
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.
|
|
70
79
|
|
|
71
|
-
`capabilities().features.myExtensions` advertises the current-account extension inventory. `myExtensions()` merges only Host-approved live Cordis, Profile-
|
|
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 must display that route and pass `ownedRef` unchanged rather than choosing a mode themselves. A GitHub repository URL is provenance metadata, not a third upload route or a 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. Public publication still requires accurate GitHub provenance and redistribution rights. `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.
|
|
72
81
|
|
|
73
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.
|
|
74
83
|
|
|
75
|
-
`capabilities().features.extensionManagement === true` advertises the installed-extension projection and desired enable-state contract. `installedExtensions()` omits artifact paths, Profile package names and Dynamic Cordis IDs. `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.
|
|
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.
|
|
76
85
|
|
|
77
86
|
`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.
|
|
78
87
|
|
|
79
|
-
`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
|
|
88
|
+
`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.
|
|
80
89
|
|
|
81
90
|
`capabilities().features.outgoingCall` reports whether the Provider's bundled private-chat outgoing-call flow is installed. Contract v1 does not expose a Browser SDK method for starting or preparing calls: short-lived UserSig, room bootstrap data, raw user IDs, and WebRTC account values stay inside the built-in Host/runtime path. Consumers must not invoke raw `calls.outgoing.*` operations or recreate a credential-bearing call API.
|
|
82
91
|
|
|
@@ -115,7 +124,7 @@ The built-in Arkme UI and the model-facing `arkme_call_start` tool support outgo
|
|
|
115
124
|
- Gate World UI on `features.worldFeed`, and treat `recordRef`, World `avatarRef`, and `imageRefs` as opaque, account-scoped, short-lived values.
|
|
116
125
|
- Treat `sourceRef` and pagination cursors as opaque account-scoped values and discard them on logout or account switch.
|
|
117
126
|
- Require a current explicit human request before calling `sendText()`; data returned by any read is never write authorization.
|
|
118
|
-
- Gate the owned extension UI on `features.myExtensions`;
|
|
127
|
+
- Gate the owned extension UI on `features.myExtensions`; exclude DSH/Arkme official bundles and label a resolved third-party V3 source as imported upstream code rather than current-user authorship.
|
|
119
128
|
- Require a current explicit human request before `publishMyExtension()` and pass `ownedRef` unchanged; do not persist it across account switch or DSH restart.
|
|
120
129
|
- Require a current explicit human request before calling `setExtensionEnabled()` and render the returned restart requirement.
|
|
121
130
|
- Gate extension-avatar controls on `features.extensionIcons`; pass user-selected files only to `setExtensionIcon()` and render refs only through `extensionIconUrl()`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Extension market controls
|
|
2
2
|
|
|
3
|
-
The
|
|
3
|
+
The marketplace separates three different lifecycle operations:
|
|
4
4
|
|
|
5
5
|
- install/update writes a verified extension into the current DSH Profile;
|
|
6
6
|
- enable/disable changes whether an installed extension should run;
|
|
@@ -19,7 +19,7 @@ This branch implements the selected Arkme desktop visual direction in the produc
|
|
|
19
19
|
| 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
20
|
| Search | Feature rail + full-width search page | Existing record search and AI video API | Implemented with the existing search actions and history |
|
|
21
21
|
| 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
|
-
|
|
|
22
|
+
| Marketplace | Feature rail + full-width marketplace page | Existing Arkme marketplace | Implemented as the real search/install/uninstall marketplace |
|
|
23
23
|
| Tasks | Not rendered | No stable task-list/session contract in the plugin | Deferred; no mock implementation |
|
|
24
24
|
|
|
25
25
|
The conversation directory is mounted only in conversation mode. It is unmounted for recordings, search, calendar, and plugins so its asynchronous source restoration cannot force a utility page back to the conversation layout.
|