@senguoyun/dsh-arkme 0.1.34 → 0.1.36
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 +1 -1
- package/assets/windows/arkme-credential-helper.exe +0 -0
- package/assets/windows/manifest.json +18 -2
- package/cordis.patch.yml +1 -0
- package/docs/consumer-plugin-contract.md +39 -0
- package/docs/plugin-release.md +14 -1
- package/lib/client.js +48246 -36043
- package/lib/client.js.map +1 -1
- package/lib/index.js +715 -99
- package/lib/persistent-extension.js +1 -1
- package/lib/{persistent-runtime-CZQTfyC1.js → persistent-runtime-Bc6X98km.js} +4296 -866
- package/lib/sdk.js +47 -4
- package/lib/types/arkme-service.d.ts +52 -11
- package/lib/types/arkme-service.d.ts.map +1 -1
- package/lib/types/billing-gateway.d.ts.map +1 -1
- package/lib/types/chat-attention.d.ts +27 -0
- package/lib/types/chat-attention.d.ts.map +1 -0
- package/lib/types/client/ArkmeArkoSurface.d.ts +4 -0
- package/lib/types/client/ArkmeArkoSurface.d.ts.map +1 -1
- package/lib/types/client/ArkmeAvatar.d.ts +16 -10
- package/lib/types/client/ArkmeAvatar.d.ts.map +1 -1
- package/lib/types/client/ArkmeBackgroundSoundWaveform.d.ts +11 -0
- package/lib/types/client/ArkmeBackgroundSoundWaveform.d.ts.map +1 -0
- package/lib/types/client/ArkmeBillingSettings.d.ts +4 -0
- package/lib/types/client/ArkmeBillingSettings.d.ts.map +1 -1
- package/lib/types/client/ArkmeBotConversationSurface.d.ts.map +1 -1
- package/lib/types/client/ArkmeBotCreateDialog.d.ts +2 -1
- package/lib/types/client/ArkmeBotCreateDialog.d.ts.map +1 -1
- package/lib/types/client/ArkmeBotSettingsPanel.d.ts.map +1 -1
- package/lib/types/client/ArkmeCalendarSurface.d.ts.map +1 -1
- package/lib/types/client/ArkmeCallHistorySurface.d.ts.map +1 -1
- package/lib/types/client/ArkmeCallSurface.d.ts.map +1 -1
- package/lib/types/client/ArkmeChatMemberActions.d.ts +4 -3
- package/lib/types/client/ArkmeChatMemberActions.d.ts.map +1 -1
- package/lib/types/client/ArkmeExtensionReviews.d.ts +2 -1
- 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 +4 -2
- package/lib/types/client/ArkmeGroupChatControls.d.ts.map +1 -1
- package/lib/types/client/ArkmeLongArticleDialog.d.ts.map +1 -1
- package/lib/types/client/ArkmeMarketplace.d.ts +4 -2
- package/lib/types/client/ArkmeMarketplace.d.ts.map +1 -1
- package/lib/types/client/ArkmeMessageActions.d.ts +41 -0
- package/lib/types/client/ArkmeMessageActions.d.ts.map +1 -0
- package/lib/types/client/ArkmeMessageReportDialog.d.ts +8 -0
- package/lib/types/client/ArkmeMessageReportDialog.d.ts.map +1 -0
- package/lib/types/client/ArkmeMessageSnapshotDialog.d.ts +13 -3
- package/lib/types/client/ArkmeMessageSnapshotDialog.d.ts.map +1 -1
- package/lib/types/client/ArkmeNoteDetails.d.ts.map +1 -1
- package/lib/types/client/ArkmeNotificationPermissionBanner.d.ts +9 -0
- package/lib/types/client/ArkmeNotificationPermissionBanner.d.ts.map +1 -0
- package/lib/types/client/ArkmeOutgoingCallHost.d.ts.map +1 -1
- package/lib/types/client/ArkmePersistentShell.d.ts.map +1 -1
- package/lib/types/client/ArkmeProductNavigation.d.ts.map +1 -1
- package/lib/types/client/ArkmeQuickAdd.d.ts +3 -1
- package/lib/types/client/ArkmeQuickAdd.d.ts.map +1 -1
- package/lib/types/client/ArkmeRecordingSurface.d.ts +19 -4
- package/lib/types/client/ArkmeRecordingSurface.d.ts.map +1 -1
- package/lib/types/client/ArkmeRelatedQuickNotes.d.ts +47 -0
- package/lib/types/client/ArkmeRelatedQuickNotes.d.ts.map +1 -0
- package/lib/types/client/ArkmeRichComposerInput.d.ts.map +1 -1
- package/lib/types/client/ArkmeSearchSurface.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 +44 -4
- package/lib/types/client/ArkmeSidebar.d.ts.map +1 -1
- package/lib/types/client/ArkmeStartupAuthGate.d.ts.map +1 -1
- package/lib/types/client/ArkmeTopicCreateDialog.d.ts.map +1 -1
- package/lib/types/client/ArkmeVirtualWorkspace.d.ts +6 -1
- package/lib/types/client/ArkmeVirtualWorkspace.d.ts.map +1 -1
- package/lib/types/client/ArkmeVoiceContent.d.ts +6 -0
- package/lib/types/client/ArkmeVoiceContent.d.ts.map +1 -1
- package/lib/types/client/ArkmeWorldSurface.d.ts +6 -1
- package/lib/types/client/ArkmeWorldSurface.d.ts.map +1 -1
- package/lib/types/client/api.d.ts +4 -1
- package/lib/types/client/api.d.ts.map +1 -1
- package/lib/types/client/arkme-billing.d.ts +7 -1
- package/lib/types/client/arkme-billing.d.ts.map +1 -1
- package/lib/types/client/attention-summary-store.d.ts +22 -0
- package/lib/types/client/attention-summary-store.d.ts.map +1 -0
- package/lib/types/client/avatar-image-runtime.d.ts +3 -0
- package/lib/types/client/avatar-image-runtime.d.ts.map +1 -0
- package/lib/types/client/avatar-image-store.d.ts +44 -0
- package/lib/types/client/avatar-image-store.d.ts.map +1 -0
- package/lib/types/client/bot-chat-directory-projection.d.ts.map +1 -1
- package/lib/types/client/calendar-invalidation-store.d.ts +26 -0
- package/lib/types/client/calendar-invalidation-store.d.ts.map +1 -0
- package/lib/types/client/chat-directory-store.d.ts +24 -13
- package/lib/types/client/chat-directory-store.d.ts.map +1 -1
- package/lib/types/client/composer-draft-store.d.ts +3 -3
- package/lib/types/client/composer-draft-store.d.ts.map +1 -1
- package/lib/types/client/composer-placeholder.d.ts +13 -0
- package/lib/types/client/composer-placeholder.d.ts.map +1 -0
- package/lib/types/client/conversation-memory-cache.d.ts +11 -14
- package/lib/types/client/conversation-memory-cache.d.ts.map +1 -1
- package/lib/types/client/desktop-notification-runtime.d.ts +34 -1
- package/lib/types/client/desktop-notification-runtime.d.ts.map +1 -1
- package/lib/types/client/file-send-tasks.d.ts +6 -1
- package/lib/types/client/file-send-tasks.d.ts.map +1 -1
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/interwoven-moments.d.ts +13 -2
- package/lib/types/client/interwoven-moments.d.ts.map +1 -1
- package/lib/types/client/navigation-cache.d.ts.map +1 -1
- package/lib/types/client/notification-activation-store.d.ts +12 -2
- package/lib/types/client/notification-activation-store.d.ts.map +1 -1
- package/lib/types/client/presentation-maintenance-runtime.d.ts +13 -0
- package/lib/types/client/presentation-maintenance-runtime.d.ts.map +1 -0
- package/lib/types/client/provider-instance-runtime.d.ts +5 -2
- package/lib/types/client/provider-instance-runtime.d.ts.map +1 -1
- package/lib/types/client/read-intent-visibility.d.ts +7 -0
- package/lib/types/client/read-intent-visibility.d.ts.map +1 -0
- package/lib/types/client/realtime-client-events.d.ts +7 -0
- package/lib/types/client/realtime-client-events.d.ts.map +1 -1
- package/lib/types/client/record-capture-location.d.ts +70 -5
- package/lib/types/client/record-capture-location.d.ts.map +1 -1
- package/lib/types/client/record-input-capture.d.ts +266 -0
- package/lib/types/client/record-input-capture.d.ts.map +1 -0
- package/lib/types/client/recordings/ArkmeRecordingImportDialog.d.ts +15 -0
- package/lib/types/client/recordings/ArkmeRecordingImportDialog.d.ts.map +1 -0
- package/lib/types/client/recordings/ArkmeRecordingSpeakerEditor.d.ts +27 -0
- package/lib/types/client/recordings/ArkmeRecordingSpeakerEditor.d.ts.map +1 -0
- package/lib/types/client/recordings/ArkmeRecordingTimeline.d.ts +58 -0
- package/lib/types/client/recordings/ArkmeRecordingTimeline.d.ts.map +1 -0
- package/lib/types/client/recordings/recording-empty-illustration.d.ts +2 -0
- package/lib/types/client/recordings/recording-empty-illustration.d.ts.map +1 -0
- package/lib/types/client/recordings/recording-import-selection.d.ts +19 -0
- package/lib/types/client/recordings/recording-import-selection.d.ts.map +1 -0
- package/lib/types/client/recordings/recording-speaker-presentation.d.ts +2 -0
- package/lib/types/client/recordings/recording-speaker-presentation.d.ts.map +1 -0
- package/lib/types/client/recordings/useRecordingPlayback.d.ts +14 -0
- package/lib/types/client/recordings/useRecordingPlayback.d.ts.map +1 -0
- package/lib/types/client/redesign/contacts/contacts-tab-store.d.ts.map +1 -1
- package/lib/types/client/related-recordings.d.ts +1 -1
- package/lib/types/client/source-identity.d.ts +6 -0
- package/lib/types/client/source-identity.d.ts.map +1 -0
- package/lib/types/client/ui-controller.d.ts +11 -0
- package/lib/types/client/ui-controller.d.ts.map +1 -1
- package/lib/types/client/use-arkme-avatar-image.d.ts +3 -0
- package/lib/types/client/use-arkme-avatar-image.d.ts.map +1 -0
- package/lib/types/extensions/manager.d.ts.map +1 -1
- package/lib/types/extensions/types.d.ts +1 -0
- package/lib/types/extensions/types.d.ts.map +1 -1
- package/lib/types/file-transfer-contract.d.ts +14 -2
- package/lib/types/file-transfer-contract.d.ts.map +1 -1
- package/lib/types/file-transfer-owner.d.ts +1 -1
- package/lib/types/file-transfer-owner.d.ts.map +1 -1
- package/lib/types/host-api.d.ts.map +1 -1
- package/lib/types/index.d.ts +2 -1
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/local-database.d.ts +9 -2
- package/lib/types/local-database.d.ts.map +1 -1
- package/lib/types/message-action-contract.d.ts +117 -0
- package/lib/types/message-action-contract.d.ts.map +1 -0
- package/lib/types/record-background-sound.d.ts +7 -0
- package/lib/types/record-background-sound.d.ts.map +1 -0
- package/lib/types/recording-import-contract.d.ts +71 -0
- package/lib/types/recording-import-contract.d.ts.map +1 -0
- package/lib/types/recording-import-coordinator.d.ts +34 -0
- package/lib/types/recording-import-coordinator.d.ts.map +1 -0
- package/lib/types/recording-import-probe.d.ts +19 -0
- package/lib/types/recording-import-probe.d.ts.map +1 -0
- package/lib/types/recording-import-ref.d.ts +7 -0
- package/lib/types/recording-import-ref.d.ts.map +1 -0
- package/lib/types/recording-import-routes.d.ts +23 -0
- package/lib/types/recording-import-routes.d.ts.map +1 -0
- package/lib/types/recording-import-shared.d.ts +19 -0
- package/lib/types/recording-import-shared.d.ts.map +1 -0
- package/lib/types/recording-presentation.d.ts +14 -1
- package/lib/types/recording-presentation.d.ts.map +1 -1
- package/lib/types/recording-time.d.ts +5 -0
- package/lib/types/recording-time.d.ts.map +1 -0
- package/lib/types/request-coordinator.d.ts.map +1 -1
- package/lib/types/rich-media-routes.d.ts.map +1 -1
- package/lib/types/sdk/index.d.ts +14 -3
- package/lib/types/sdk/index.d.ts.map +1 -1
- package/lib/types/services/arko-service.d.ts +3 -1
- package/lib/types/services/arko-service.d.ts.map +1 -1
- package/lib/types/services/background-sound-membership-service.d.ts +17 -0
- package/lib/types/services/background-sound-membership-service.d.ts.map +1 -0
- package/lib/types/services/background-sound-preference-service.d.ts +14 -0
- package/lib/types/services/background-sound-preference-service.d.ts.map +1 -0
- package/lib/types/services/bot-conversation-service.d.ts +2 -1
- package/lib/types/services/bot-conversation-service.d.ts.map +1 -1
- package/lib/types/services/chat-realtime-service.d.ts +28 -1
- package/lib/types/services/chat-realtime-service.d.ts.map +1 -1
- package/lib/types/services/chat-service.d.ts +27 -3
- package/lib/types/services/chat-service.d.ts.map +1 -1
- package/lib/types/services/contact-directory-service.d.ts +6 -0
- package/lib/types/services/contact-directory-service.d.ts.map +1 -1
- package/lib/types/services/desktop-attention-bridge.d.ts +61 -0
- package/lib/types/services/desktop-attention-bridge.d.ts.map +1 -0
- package/lib/types/services/file-transfers.d.ts +13 -1
- package/lib/types/services/file-transfers.d.ts.map +1 -1
- package/lib/types/services/group-service.d.ts +7 -6
- package/lib/types/services/group-service.d.ts.map +1 -1
- package/lib/types/services/interwoven-service.d.ts +3 -0
- package/lib/types/services/interwoven-service.d.ts.map +1 -1
- package/lib/types/services/media-service.d.ts +17 -0
- package/lib/types/services/media-service.d.ts.map +1 -1
- package/lib/types/services/message-action-infrastructure.d.ts +29 -0
- package/lib/types/services/message-action-infrastructure.d.ts.map +1 -0
- package/lib/types/services/message-action-service.d.ts +53 -0
- package/lib/types/services/message-action-service.d.ts.map +1 -0
- package/lib/types/services/record-service.d.ts +2 -0
- package/lib/types/services/record-service.d.ts.map +1 -1
- package/lib/types/services/recording-import-gateway.d.ts +33 -0
- package/lib/types/services/recording-import-gateway.d.ts.map +1 -0
- package/lib/types/services/recording-service.d.ts +83 -4
- package/lib/types/services/recording-service.d.ts.map +1 -1
- package/lib/types/services/related-quick-note-service.d.ts +38 -0
- package/lib/types/services/related-quick-note-service.d.ts.map +1 -0
- package/lib/types/services/service.d.ts +15 -0
- package/lib/types/services/service.d.ts.map +1 -1
- package/lib/types/services/source-service.d.ts +8 -1
- package/lib/types/services/source-service.d.ts.map +1 -1
- package/lib/types/services/world-service.d.ts.map +1 -1
- package/lib/types/state-store.d.ts +8 -0
- package/lib/types/state-store.d.ts.map +1 -1
- package/lib/types/tools/business/account/background-sound.d.ts +4 -0
- package/lib/types/tools/business/account/background-sound.d.ts.map +1 -0
- package/lib/types/tools/business/account/index.d.ts.map +1 -1
- package/lib/types/tools/business/media/files.d.ts.map +1 -1
- package/lib/types/tools/ports/groups.d.ts +2 -2
- package/lib/types/tools/ports/groups.d.ts.map +1 -1
- package/lib/types/tools/ports/profile.d.ts +3 -1
- package/lib/types/tools/ports/profile.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/tools/shared/conversational-confirmation.d.ts +15 -2
- package/lib/types/tools/shared/conversational-confirmation.d.ts.map +1 -1
- package/lib/types/types.d.ts +184 -9
- package/lib/types/types.d.ts.map +1 -1
- package/package.json +7 -6
package/README.md
CHANGED
|
@@ -57,7 +57,7 @@ SHA256SUMS
|
|
|
57
57
|
pnpm pack:runtime -- --output-dir /path/to/output
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
-
脚本会运行插件现有构建流程,并校验包名、版本、Release Set
|
|
60
|
+
脚本会运行插件现有构建流程,并校验包名、版本、Release Set 必需入口、归档路径和文件类型;tar 条目顺序、mtime、owner/group 与权限均固定,在同一 Node.js/zstd 构建工具链下,同一源码重复构建会生成相同摘要。校验失败时不会留下不完整制品。
|
|
61
61
|
|
|
62
62
|
## 架构
|
|
63
63
|
|
|
Binary file
|
|
@@ -3,7 +3,23 @@
|
|
|
3
3
|
"platform": "win32",
|
|
4
4
|
"arch": "x64",
|
|
5
5
|
"file": "arkme-credential-helper.exe",
|
|
6
|
-
"sha256": "
|
|
6
|
+
"sha256": "fbfb99a440b2f1fcb83e49f29bb752ae214c4c2fe14890609835b53a8438db58",
|
|
7
7
|
"sourceSha256": "7e2267aa232d4fbe785d2ab88bd707ab6edacd88bd454fda7f8017ddfc0335b6",
|
|
8
|
-
"goVersion": "go version go1.25.5 darwin/arm64"
|
|
8
|
+
"goVersion": "go version go1.25.5 darwin/arm64",
|
|
9
|
+
"helperVersion": "1.0.0.0",
|
|
10
|
+
"pe": {
|
|
11
|
+
"CompanyName": "Senqisi (Wuhan) Technology Co., Ltd.",
|
|
12
|
+
"ProductName": "Arkme Credential Helper",
|
|
13
|
+
"FileDescription": "Arkme Windows Credential Manager Helper",
|
|
14
|
+
"InternalName": "arkme-credential-helper",
|
|
15
|
+
"OriginalFilename": "arkme-credential-helper.exe",
|
|
16
|
+
"FileVersion": "1.0.0.0",
|
|
17
|
+
"ProductVersion": "1.0.0.0"
|
|
18
|
+
},
|
|
19
|
+
"authenticode": {
|
|
20
|
+
"digestAlgorithm": "sha256",
|
|
21
|
+
"signerSubject": "CN=\"Senqisi (Wuhan) Technology Co., Ltd.\", O=\"Senqisi (Wuhan) Technology Co., Ltd.\", L=Wuhan, S=Hubei, C=CN",
|
|
22
|
+
"signerSha1": "00ADCF59ACCC45F4643B4A682E32620C206CE66B",
|
|
23
|
+
"timestampRequired": true
|
|
24
|
+
}
|
|
9
25
|
}
|
package/cordis.patch.yml
CHANGED
|
@@ -141,6 +141,45 @@ Chat items returned by `readSource()` may include an opaque sender `avatarRef`.
|
|
|
141
141
|
|
|
142
142
|
Timeline items may include `contentBlocks` for image, video, audio, and file content. Long articles use the owner contract's `templateKind: 8`; `displayKind: 1` remains accepted only as a compatibility signal for previously sent plugin records. Each block's `mediaRef` is account-bound and short-lived. Render it with `sdk.mediaUrl(mediaRef)`; never decode or persist it. `upload()` sends a browser file only to the same-origin plugin route and returns an Arkme asset descriptor for `sendRich()`.
|
|
143
143
|
|
|
144
|
+
### Text background sound and location capture
|
|
145
|
+
|
|
146
|
+
Background sound is an explicit role, never an audio-MIME heuristic. An ordinary `audio/*` asset passed in `sendRich().assets` remains an ordinary attachment. A direct rich send passes background assets separately:
|
|
147
|
+
|
|
148
|
+
```ts
|
|
149
|
+
const background = await arkme.upload(backgroundBlob, { fileName: 'background.m4a' })
|
|
150
|
+
await arkme.sendRich(sourceRef, {
|
|
151
|
+
textContent: '这是一条带背景音的文字快记',
|
|
152
|
+
backgroundSound: { assets: [background], amplitudes: [0.1, 0.6, 0.3] },
|
|
153
|
+
})
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
The direct `upload()` route reports audio as service `fileKind: 2`, while a locally staged generic file currently reports `fileKind: 4`; both are accepted as background audio only when they appear in the separate `backgroundSound` descriptor. Putting either asset in ordinary `assets` keeps `content_file_role=1`.
|
|
157
|
+
|
|
158
|
+
For durable sends, stage every file first and pass every background ref in both `fileRefs` and `backgroundSound.fileRefs`. `sendFiles()` persists that descriptor with the task, uploads each local file at most once, and reuses the same uploaded asset and descriptor after a retry. A descriptor is rejected when refs are duplicated or not a subset, samples are non-finite or outside `0..1`, or a selected file is not an ordinary `audio/*` file (`fileKind: 4`).
|
|
159
|
+
|
|
160
|
+
The Browser UI may also persist a send-scoped `location` on a durable task after the user has explicitly enabled location recording. The task owner applies it only after the final record UID is confirmed, including reconciliation. External SDK consumers must obtain the same explicit user authorization before supplying precise coordinates. Model-facing file Tools neither accept nor return this field.
|
|
161
|
+
|
|
162
|
+
Gate background-sound sends on `capabilities().features.backgroundSound` so the same Consumer degrades cleanly on older Providers. The built-in message-detail owner remains authoritative for snapshot retrieval and display; this contract only extends that existing detail with optional background playback and the already-authorized location facts.
|
|
163
|
+
|
|
164
|
+
Successful `sendText()`, `sendRich()` and durable `sendFiles()` confirmations may return the same Host-signed `messageActionRef` immediately, before an authoritative timeline refresh. Consumers may use it to enable message actions without waiting for projection convergence, but must treat omission as a compatibility/degraded state and wait for `readSource()`; they must never synthesize or weaken validation of the reference.
|
|
165
|
+
|
|
166
|
+
The switch itself is an account-scoped server owner, not a browser-local preference. `backgroundSoundPreference()` reads `/api/v1/settings/background-voice/query` and the independent record-service membership owner; `updateBackgroundSoundPreference(enabled, signal?, expectedUserId?)` writes only `{ enabled }` to `/api/v1/settings/background-voice/update`. The built-in Host UI, SDK Consumer and confirmed Tool pass the `userId` captured from that verified read as `expectedUserId`; the owner rejects an account switch before the remote write. The Host verifies the returned `user_id` against the active session and returns `{ userId, found, enabled, eligible, memberType?, eligibilityReason, sourceVersion?, updatedAtMillis? }`. Free membership forces `enabled=false`; unknown membership also fails closed but remains distinguishable as `eligibilityReason=membership-unavailable`. Enabling is rejected before the settings write unless the membership owner confirms eligibility; disabling always remains available. A UI may update its local projection optimistically, but it must restore the previous value when the owner write fails. `found=false` means use the local default (`false`) without manufacturing a server fact.
|
|
167
|
+
|
|
168
|
+
Calling `updateBackgroundSoundPreference(true)` is allowed only from a current explicit human UI/SDK action and still does not grant microphone permission; the interactive composer owns that separate browser permission request. Model Tools can read the preference or, after explicit write confirmation, disable it. They intentionally have no enable parameter, because a model must not turn on a recording-affecting preference or trigger a microphone flow.
|
|
169
|
+
|
|
170
|
+
Do not derive subscription eligibility from `profile().accountType`; that field is an account classification, not the Flutter membership owner. `BackgroundSoundMembershipService` reads the authoritative `/api/v1/premium/get/member` `member_type` fact: `0` is free and ineligible, while positive member types are eligible. A failed or malformed membership read is `membership-unavailable`, not proof that the account is free.
|
|
171
|
+
|
|
172
|
+
Capability matrix:
|
|
173
|
+
|
|
174
|
+
| Surface | Entry | Contract and safety boundary |
|
|
175
|
+
| --- | --- | --- |
|
|
176
|
+
| Built-in UI | Settings switch, composer capture and message snapshot dialog | The switch is a reversible local projection of the account owner. One input-capture owner submits the explicit background descriptor; the snapshot dialog reads the same Host detail owner. |
|
|
177
|
+
| Browser SDK | `backgroundSoundPreference()`, `updateBackgroundSoundPreference()`, `sendRich()`, `sendFiles()` | Typed same-origin calls; no credentials, storage paths, implicit microphone grant, raw record id, or inferred background role. Enabling requires a current explicit human action. |
|
|
178
|
+
| DSH Tool | `arkme_background_sound_status`, `arkme_background_sound_disable`, `arkme_files_send` | Disable/file send remain `explicit-user-write`; no Tool can enable or open the microphone. File send reuses only staged opaque refs and never exposes precise location. |
|
|
179
|
+
| Host owner | `BackgroundSoundMembershipService`, `BackgroundSoundPreferenceService`, `ChatService.sendSourceRich()` and the existing snapshot detail owner | The settings owner validates current-account identity. One payload builder merges ordinary assets, mentions and background items. Background refs use `file_type=5`, `content_file_role=4`, `binding_type=4`, `render_role=1`; only-background text keeps the plain-text template. Existing account, source, permission and idempotency checks remain authoritative. |
|
|
180
|
+
|
|
181
|
+
Snapshot `backgroundSound=available` requires an identified media row (`file_asset_uid`, `uid`, `media_id`, or compatible file ID) carrying role `content_file_role=4`, `binding_type=4`, or legacy `file_type/type=5`. Waveform amplitudes without such a file remain `not-recorded`; an ordinary audio MIME never supplies the role.
|
|
182
|
+
|
|
144
183
|
`capabilities().features.forwardContent === true` advertises expanded `readSource()` forward snapshots. `forwardRecords.items` may contain `sourceType`, `segments` (speaker, full text, relative start/end milliseconds), `contentBlocks` and `mediaUnavailable`. Segment audio also uses `contentBlocks`, never raw URLs. The same snapshot is returned to the built-in UI and `arkme_source_read`. Missing optional fields on older Providers mean text-only rendering, not an error. Unknown source types remain `unknown`; filenames must not determine recording type. No original chat name or source access is implied. A transcript with no attachment is not playable. `truncated` marks bounded output (100 flattened records, nesting depth four; up to 500 segments per record / 2000 total; 32 attachments per record). Display it as partial, never silently claim a complete archive.
|
|
145
184
|
|
|
146
185
|
Consumers retain no additional resources for a one-shot `readSource()`. If they call `subscribe()`, invoke its returned unsubscribe function on disposal. Refresh the received timeline when a media reference expires; do not query the private original recording or cache/decode its reference. Unsupported `contractVersion` is rejected by `capabilities()`; an absent optional `forwardContent` feature falls back to the existing text snapshot.
|
package/docs/plugin-release.md
CHANGED
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
该工作流会自动创建 `release/v<版本号>` 发版 PR,并在其中更新版本号、插件内更新说明和 GitHub Release 链接,随后执行完整测试、类型检查和构建。
|
|
6
6
|
|
|
7
|
-
合并该发版 PR 后,发布工作流会再次验证代码,发布 npm 包、创建 `v<版本号>` Git Tag,并生成 GitHub Release
|
|
7
|
+
合并该发版 PR 后,发布工作流会再次验证代码,发布 npm 包、创建 `v<版本号>` Git Tag,并生成 GitHub Release。随后由独立的 production workflow 校验 npm、Tag、GitHub Release 与发布 SHA,检出该精确 SHA,构建 `tar.zst`,通过 Backend 获取单对象 STS 上传 OSS,并在 Runtime 校验通过后自动激活。
|
|
8
|
+
|
|
9
|
+
`pre-release` 分支的每次 push 会走同一套 Runtime 发布链路,但不会发布 npm。测试版本由稳定基准版本的下一补丁与 GitHub run number 组成,例如 `0.1.34` 在 run `128` 中生成 `0.1.35-pre.128`;版本修改只存在于 Action 临时工作区。
|
|
8
10
|
|
|
9
11
|
## 一次性配置
|
|
10
12
|
|
|
@@ -16,6 +18,17 @@
|
|
|
16
18
|
|
|
17
19
|
Trusted Publisher 配置完成后,GitHub Actions 通过短期身份凭据发布 npm,不需要把 npm Token 保存到 GitHub Secrets。
|
|
18
20
|
|
|
21
|
+
另外需要分别在 `production` 和 `pre-release` GitHub Environment 中配置:
|
|
22
|
+
|
|
23
|
+
- `ARKME_BACKEND_BASE_URL`:对应环境 Backend 的 HTTPS origin。
|
|
24
|
+
- `ARKME_CI_TRIGGER_SECRET`:对应环境 Backend 的 CI Bearer Secret。
|
|
25
|
+
|
|
26
|
+
OSS bucket、直传 endpoint、CDN origin 与对象前缀只配置在对应 Backend 中,不进入 GitHub Secrets。测试环境使用 `/app/arkme/test/plugin/`,生产环境使用 `/app/arkme/prod/plugin/`;Backend 会去掉首尾斜杠后生成 OSS Object Key。production 与 pre-release Runtime workflow 都使用全局串行 concurrency,且不会取消正在运行的发布。
|
|
27
|
+
|
|
28
|
+
`pre-release` 分支必须通过 GitHub Ruleset 禁止直接 push,要求 PR 和 CODEOWNERS 审批;`pre-release` Environment 也必须限制为该受保护分支。工作流会在无 Secret 的 job 中构建触发提交,再由持密 job 从受保护的 `master` 检出发布工具和锁定依赖,下载并重新校验制品后发布。
|
|
29
|
+
|
|
30
|
+
对应 OSS bucket 必须为各环境规范化后的 `object-prefix` 启用 Bucket 级覆盖保护规则:测试环境为 `app/arkme/test/plugin/`,生产环境为 `app/arkme/prod/plugin/`。GitHub Actions 上传时也会发送 `x-oss-forbid-overwrite: true`,但 Bucket 级规则才是对临时 STS 凭据的服务端强制约束;未完成该配置前不得启用 `arkme-plugin-ci`。
|
|
31
|
+
|
|
19
32
|
## 版本选择
|
|
20
33
|
|
|
21
34
|
- `patch`:修复和小优化,如 `0.1.19 → 0.1.20`。
|