mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-28 14:15:24 +00:00
* feat(ai): add host coding agent sessions with configured providers * Wait for agent initialization and shutdown before resuming sessions * Keep Pi transcripts outside its configuration migration directory * Cover Pi session directory separation * Update core permission catalog expectations for remote agents * Install remote agent runtimes from verified official sources * Wait for the identity panel credentials request in its test * Add scoped SSH forwarding setup for remote agents * Verify forwarding setup through a fresh SSH connection * Bound the SSH forwarding verification timeout * Return the forwarding verification callback result * fix(ai): support agent send and interrupt keyboard shortcuts * feat(ai): add agent queues attachments worktrees and session recovery * fix(ai): handle deleted workspace paths and duplicate status events * fix(ai): accept file references in root workspaces * fix(ai): refresh paused queues after agent errors * fix(ai): store agent sessions in plugin tables and lock down OpenCode Agent sessions lived in a single ctx.kv value holding up to 2000 events, which passed the 256 KB kv limit within minutes of a normal run. Every save after that failed, so history, nativeId, queue and archive changes were lost and every event wrote a kv audit row. Sessions, events and queued prompts now have their own tables. A running agent appends events in batches at most once a second with a lazy save; session and queue changes save immediately. Prompts, drafts and stored event text are capped in UTF-8 bytes to fit MySQL TEXT. kv:own is no longer requested. The OpenCode server now requires a per-session password, so other local accounts on the host cannot drive the agent through its loopback port. * test(upgrade): include agent session tables in the reviewed upgrade SQL
208 lines
5.3 KiB
JSON
208 lines
5.3 KiB
JSON
{
|
|
"id": "ai",
|
|
"name": "AI Assistant",
|
|
"version": "1.0.0",
|
|
"description": "An AI assistant that can read your hosts, snippets, fleets, alerts and automations, and suggest changes for you to approve.",
|
|
"author": {
|
|
"name": "Termix"
|
|
},
|
|
"license": "MIT",
|
|
"repository": "https://github.com/Termix-SSH/Termix",
|
|
"category": "Productivity",
|
|
"icon": "Sparkles",
|
|
"engine": {
|
|
"termix": ">=2.9.0",
|
|
"api": "1"
|
|
},
|
|
"capabilities": [
|
|
"hosts:read",
|
|
"hosts:write",
|
|
"credentials:use",
|
|
"ssh:connect",
|
|
"db:own",
|
|
"secrets:own",
|
|
"network:outbound",
|
|
"notify:send",
|
|
"network:serve",
|
|
"ui:surface",
|
|
"users:impersonate",
|
|
"events:core"
|
|
],
|
|
"optionalDependencies": {
|
|
"workspaces": "^1.0.0",
|
|
"network-topology": "^1.0.0",
|
|
"snippets": "^1.0.0",
|
|
"fleets": "^1.0.0",
|
|
"ssh-terminal": "^1.0.0",
|
|
"automations": "^1.0.0",
|
|
"homepage": "^1.0.0"
|
|
},
|
|
"requires": [
|
|
{
|
|
"service": "workspaces.saved",
|
|
"versionRange": "^1.0.0",
|
|
"optional": true
|
|
},
|
|
{
|
|
"service": "network-topology.graph",
|
|
"versionRange": "^1.0.0",
|
|
"optional": true
|
|
},
|
|
{
|
|
"service": "snippets.access",
|
|
"versionRange": "^1.0.0",
|
|
"optional": true
|
|
},
|
|
{
|
|
"service": "fleets.access",
|
|
"versionRange": "^1.0.0",
|
|
"optional": true
|
|
},
|
|
{
|
|
"service": "terminal.history",
|
|
"versionRange": "^1.0.0",
|
|
"optional": true
|
|
},
|
|
{
|
|
"service": "automations.access",
|
|
"versionRange": "^1.0.0",
|
|
"optional": true
|
|
},
|
|
{
|
|
"service": "homepage.items",
|
|
"versionRange": "^1.0.0",
|
|
"optional": true
|
|
}
|
|
],
|
|
"providesSecret": [
|
|
{
|
|
"key": "api-key",
|
|
"permission": "ai.secrets.share",
|
|
"descriptionKey": "ai.secrets.shareApiKey"
|
|
}
|
|
],
|
|
"contributes": {
|
|
"tabs": [
|
|
{
|
|
"id": "ai",
|
|
"titleKey": "nav.ai",
|
|
"icon": "Sparkles",
|
|
"openFrom": ["rail", "palette"]
|
|
},
|
|
{
|
|
"id": "ai-agents",
|
|
"titleKey": "agents.title",
|
|
"icon": "Bot",
|
|
"openFrom": ["host-context-menu", "palette"]
|
|
}
|
|
],
|
|
"actions": [
|
|
{
|
|
"id": "ai.openWithContext",
|
|
"titleKey": "ai.assistant",
|
|
"handler": "openWithContext",
|
|
"icon": "Bot",
|
|
"permission": "ai.services.use",
|
|
"slot": "terminal.toolbar",
|
|
"kind": "button"
|
|
}
|
|
],
|
|
"permissions": [
|
|
{
|
|
"name": "use",
|
|
"titleKey": "permissions.use.title",
|
|
"descriptionKey": "permissions.use.description",
|
|
"defaultRoles": ["user"]
|
|
},
|
|
{
|
|
"name": "manage_providers",
|
|
"titleKey": "permissions.manage_providers.title",
|
|
"descriptionKey": "permissions.manage_providers.description",
|
|
"defaultRoles": ["user"]
|
|
},
|
|
{
|
|
"name": "apply_proposals",
|
|
"titleKey": "permissions.apply_proposals.title",
|
|
"descriptionKey": "permissions.apply_proposals.description",
|
|
"defaultRoles": ["user"]
|
|
},
|
|
{
|
|
"name": "services.use",
|
|
"titleKey": "permissions.services.use.title",
|
|
"descriptionKey": "permissions.services.use.description",
|
|
"defaultRoles": ["user"]
|
|
},
|
|
{
|
|
"name": "secrets.share",
|
|
"titleKey": "permissions.secrets.share.title",
|
|
"descriptionKey": "permissions.secrets.share.description",
|
|
"defaultRoles": ["user"]
|
|
},
|
|
{
|
|
"name": "agents",
|
|
"titleKey": "agents.permissionTitle",
|
|
"descriptionKey": "agents.permissionDescription",
|
|
"defaultRoles": ["admin"]
|
|
}
|
|
],
|
|
"settings": {
|
|
"admin": [
|
|
{
|
|
"key": "globallyEnabled",
|
|
"type": "boolean",
|
|
"labelKey": "settings.admin.globallyEnabled.label",
|
|
"descriptionKey": "settings.admin.globallyEnabled.description",
|
|
"default": false
|
|
},
|
|
{
|
|
"key": "privateEndpoints",
|
|
"type": "textarea",
|
|
"labelKey": "settings.admin.privateEndpoints.label",
|
|
"descriptionKey": "settings.admin.privateEndpoints.description",
|
|
"requires": "globallyEnabled",
|
|
"default": "localhost\n127.0.0.1\n::1\nhost.docker.internal"
|
|
}
|
|
],
|
|
"user": [
|
|
{
|
|
"key": "enabled",
|
|
"type": "boolean",
|
|
"labelKey": "ai.enableTitle",
|
|
"descriptionKey": "ai.enableDescription",
|
|
"default": false
|
|
},
|
|
{
|
|
"key": "allowReadOnlyCommands",
|
|
"type": "boolean",
|
|
"labelKey": "ai.readOnlyCommands",
|
|
"descriptionKey": "ai.readOnlyCommandsDescription",
|
|
"requires": "enabled",
|
|
"default": false
|
|
},
|
|
{
|
|
"key": "providers",
|
|
"type": "custom",
|
|
"component": "providers",
|
|
"permission": "manage_providers"
|
|
}
|
|
],
|
|
"host": {
|
|
"editorGroup": "ssh",
|
|
"editorOrder": 90,
|
|
"fields": [
|
|
{
|
|
"key": "enableAiAssistant",
|
|
"type": "boolean",
|
|
"labelKey": "settings.host.enableAiAssistant.label",
|
|
"descriptionKey": "settings.host.enableAiAssistant.description",
|
|
"default": false
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"uses": ["terminal.sidePanel", "terminal.toolbar"]
|
|
},
|
|
"locales": "locales",
|
|
"platforms": ["linux", "win32", "darwin"]
|
|
}
|