程序员阿江(Relakkes) fa5fda24d0 feat: notify users when desktop attention is needed
Add native system notifications as a desktop-wide attention channel for permission prompts and scheduled task completion. The implementation keeps notification presentation owned by the OS, adds a user-facing enable switch with permission handling, and lets scheduled tasks choose desktop notifications without routing that channel through IM adapters.

Constraint: Notifications must use OS-native APIs without custom sound playback.
Constraint: Desktop channel is local-only and must not be sent through IM adapter delivery.
Rejected: Browser Notification API | not reliable inside the packaged Tauri desktop runtime.
Rejected: Treat desktop as an IM channel | would leak a local-only channel into server-side adapter sending.
Confidence: high
Scope-risk: moderate
Directive: Keep notification styling at the OS layer; business code should only provide title, body, dedupe, and routing decisions.
Tested: bun run check:desktop
Tested: bun run quality:pr
Tested: Computer Use macOS debug app verification for settings toggle, permission prompt, scheduled task desktop channel, and task-run polling dedupe
Not-tested: Windows and Linux native runtime smoke tests on physical hosts
2026-05-03 16:45:32 +08:00

108 lines
2.8 KiB
JSON

{
"$schema": "https://raw.githubusercontent.com/nicegui/nicegui/main/nicegui/static/tauri-capabilities-schema-v2.json",
"identifier": "default",
"description": "Default capabilities for Claude Code Desktop",
"windows": ["main"],
"permissions": [
"core:default",
"core:window:allow-close",
"core:window:allow-minimize",
"core:window:allow-start-dragging",
"core:window:allow-toggle-maximize",
"shell:allow-open",
{
"identifier": "shell:allow-execute",
"allow": [
{
"args": [
"server",
{ "validator": "regex", "value": "^(--port|--host|--config)=.+$" }
],
"name": "binaries/claude-sidecar",
"sidecar": true
},
{
"args": [
"adapters",
{ "validator": "regex", "value": "^(feishu|telegram|lark|slack)(:.+)?$" }
],
"name": "binaries/claude-sidecar",
"sidecar": true
},
{
"args": [
"cli",
{ "validator": "regex", "value": "^.+$" }
],
"name": "binaries/claude-sidecar",
"sidecar": true
}
]
},
{
"identifier": "shell:allow-spawn",
"allow": [
{
"args": [
"server",
{ "validator": "regex", "value": "^(--port|--host|--config)=.+$" }
],
"name": "binaries/claude-sidecar",
"sidecar": true
},
{
"args": [
"adapters",
{ "validator": "regex", "value": "^(feishu|telegram|lark|slack)(:.+)?$" }
],
"name": "binaries/claude-sidecar",
"sidecar": true
},
{
"args": [
"cli",
{ "validator": "regex", "value": "^.+$" }
],
"name": "binaries/claude-sidecar",
"sidecar": true
}
]
},
{
"identifier": "shell:allow-kill",
"allow": [
{
"args": [
"server",
{ "validator": "regex", "value": "^(--port|--host|--config)=.+$" }
],
"name": "binaries/claude-sidecar",
"sidecar": true
},
{
"args": [
"adapters",
{ "validator": "regex", "value": "^(feishu|telegram|lark|slack)(:.+)?$" }
],
"name": "binaries/claude-sidecar",
"sidecar": true
},
{
"args": [
"cli",
{ "validator": "regex", "value": "^.+$" }
],
"name": "binaries/claude-sidecar",
"sidecar": true
}
]
},
"dialog:allow-open",
"dialog:allow-save",
"notification:default",
"process:allow-exit",
"process:allow-restart",
"updater:default"
]
}