fix(settings): say plainly which AI categories are context-only
Demo images / Build & push demo images (push) Successful in 4m9s

All ten AI data-access categories offer a context toggle, but only five
(Apps, System, Network, Media, Bitcoin) have any tool behind them — Wallet,
Files, Search, Local AI and Notes grant the assistant visibility with
nothing to act on. The Settings copy implied actions that do not exist.

Operator decision (2026-08-09): ship honest copy now, build the tools as
ordinary backlog. Each of the five carries a contextOnly flag, a "context
only" badge, and an appended description line saying the assistant can see
this but can't take actions with it yet. Drop the flag per category as
real tools land.

Verified: vue-tsc clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
archipelago
2026-08-09 07:11:24 -04:00
co-authored by Claude Fable 5
parent 43a26c9784
commit 7ec4bdb22d
2 changed files with 19 additions and 2 deletions
+11
View File
@@ -10,6 +10,12 @@ export interface AIPermissionCategory {
description: string
icon: string
group: string
/** True when the assistant can SEE this data but has no tools to act on it.
* Five categories (wallet, files, search, ai-local, notes) currently have a
* context arm and zero tools — the toggle copy must say so, or Settings
* implies actions that do not exist (operator decision, 2026-08-09). Remove
* per-category as real tools land. */
contextOnly?: boolean
}
export const AI_PERMISSION_CATEGORIES: AIPermissionCategory[] = [
@@ -50,6 +56,7 @@ export const AI_PERMISSION_CATEGORIES: AIPermissionCategory[] = [
},
{
id: 'files',
contextOnly: true,
label: 'File Names',
description: 'Folder and file names in Cloud — no file contents',
icon: 'M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z',
@@ -57,6 +64,7 @@ export const AI_PERMISSION_CATEGORIES: AIPermissionCategory[] = [
},
{
id: 'notes',
contextOnly: true,
label: 'Documents & Notes',
description: 'Document and note titles — no contents',
icon: 'M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z',
@@ -64,6 +72,7 @@ export const AI_PERMISSION_CATEGORIES: AIPermissionCategory[] = [
},
{
id: 'search',
contextOnly: true,
label: 'Web Search',
description: 'Web search via your private SearXNG instance',
icon: 'M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z',
@@ -71,6 +80,7 @@ export const AI_PERMISSION_CATEGORIES: AIPermissionCategory[] = [
},
{
id: 'ai-local',
contextOnly: true,
label: 'Local AI Models',
description: 'Local AI models via Ollama — model names and availability',
icon: 'M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z',
@@ -78,6 +88,7 @@ export const AI_PERMISSION_CATEGORIES: AIPermissionCategory[] = [
},
{
id: 'wallet',
contextOnly: true,
label: 'Wallet Overview',
description: 'Balance, channel count — no private keys, seeds, or addresses',
icon: 'M17 9V7a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2m2 4h10a2 2 0 002-2v-6a2 2 0 00-2-2H9a2 2 0 00-2 2v6a2 2 0 002 2zm7-5a2 2 0 11-4 0 2 2 0 014 0z',
@@ -61,8 +61,14 @@ const aiCategoryGroups = computed(() => {
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" :d="cat.icon" />
</svg>
<div class="flex-1 min-w-0">
<p class="text-sm font-medium" :class="aiPermissions.isEnabled(cat.id) ? 'text-white/95' : 'text-white/70'">{{ cat.label }}</p>
<p class="text-xs text-white/50 mt-0.5">{{ cat.description }}</p>
<div class="flex items-center gap-2">
<p class="text-sm font-medium" :class="aiPermissions.isEnabled(cat.id) ? 'text-white/95' : 'text-white/70'">{{ cat.label }}</p>
<!-- Honest-copy rule: these categories grant the assistant
visibility only it has no tools to act on them yet, and
the toggle must not imply otherwise. -->
<span v-if="cat.contextOnly" class="shrink-0 px-1.5 py-0.5 text-[10px] rounded bg-white/10 text-white/50" title="The assistant can see this information but has no actions for it yet">context only</span>
</div>
<p class="text-xs text-white/50 mt-0.5">{{ cat.description }}<template v-if="cat.contextOnly"> the assistant can see this but can't take actions with it yet</template></p>
</div>
<ToggleSwitch :model-value="aiPermissions.isEnabled(cat.id)" @update:model-value="aiPermissions.toggle(cat.id)" @click.stop />
</button>