mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-28 22:25:24 +00:00
chore: rework plugin readmes, json changelogs and standalone repo setup
This commit is contained in:
1 parent
a8f383d2b3
commit
29a946d02e
500 files changed
+6729
-1250
No files matched your search
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"extends": ["@commitlint/config-conventional"],
|
||||
"rules": {
|
||||
"type-enum": [
|
||||
2,
|
||||
"always",
|
||||
[
|
||||
"feat",
|
||||
"fix",
|
||||
"docs",
|
||||
"style",
|
||||
"refactor",
|
||||
"perf",
|
||||
"test",
|
||||
"chore",
|
||||
"revert"
|
||||
]
|
||||
],
|
||||
"subject-case": [0]
|
||||
}
|
||||
}
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
custom: https://donate.termix.site/
|
||||
@@ -0,0 +1,34 @@
|
||||
# Overview
|
||||
|
||||
_Short summary of what this PR does_
|
||||
|
||||
- [ ] Added: ...
|
||||
- [ ] Updated: ...
|
||||
- [ ] Removed: ...
|
||||
- [ ] Fixed: ...
|
||||
|
||||
# Changes Made
|
||||
|
||||
_Detailed explanation of changes (if needed)_
|
||||
|
||||
- ...
|
||||
|
||||
# Related Issues
|
||||
|
||||
_Link any issues this PR addresses_
|
||||
|
||||
- Closes #ISSUE_NUMBER
|
||||
- Related to #ISSUE_NUMBER
|
||||
|
||||
# Screenshots / Demos
|
||||
|
||||
_(Optional: add before/after screenshots, GIFs, or console output)_
|
||||
|
||||
# Checklist
|
||||
|
||||
- [ ] Code follows project style guidelines
|
||||
- [ ] Supports mobile and desktop UI/app (if applicable)
|
||||
- [ ] Added the change to `CHANGELOG.json`
|
||||
- [ ] `npm run test`, `npm run typecheck` and `npm run validate` pass
|
||||
- [ ] I have read `CONTRIBUTING.md`
|
||||
- [ ] This is not a translation request. See [docs](https://docs.termix.site/translations)
|
||||
@@ -0,0 +1,9 @@
|
||||
node_modules
|
||||
dist
|
||||
coverage
|
||||
*.log
|
||||
.env
|
||||
*.tmxplug
|
||||
*.tmxplug.sig
|
||||
termix-plugin-signing.key
|
||||
.termix-tables-*
|
||||
@@ -0,0 +1 @@
|
||||
npx --no -- commitlint --edit "$1"
|
||||
@@ -0,0 +1 @@
|
||||
npx lint-staged
|
||||
@@ -0,0 +1,4 @@
|
||||
dist
|
||||
coverage
|
||||
node_modules
|
||||
package-lock.json
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"semi": true,
|
||||
"singleQuote": false,
|
||||
"tabWidth": 2,
|
||||
"trailingComma": "all",
|
||||
"printWidth": 80,
|
||||
"arrowParens": "always",
|
||||
"endOfLine": "lf"
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/Termix-SSH/Termix/main/packages/plugin-sdk/schema/changelog.schema.json",
|
||||
"releases": [
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"changes": [
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Certificates from Let's Encrypt or any ACME directory"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "HTTP challenge on port 80, or a Cloudflare DNS challenge when port 80 is closed"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Renews before the certificate expires"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Swaps in the new certificate without a restart"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
# Changelog
|
||||
|
||||
## 1.0.0
|
||||
|
||||
First release, bundled with Termix 2.9.0.
|
||||
|
||||
Gets the HTTPS certificate Termix serves from Let's Encrypt or another ACME provider and renews it before it expires. Supports the HTTP challenge and the Cloudflare DNS challenge.
|
||||
@@ -0,0 +1,27 @@
|
||||
# Contributing to ACME Certificates
|
||||
|
||||
## Development
|
||||
|
||||
```bash
|
||||
npm run build # build into dist/
|
||||
npm run test # run this plugin's tests
|
||||
npm run typecheck # type-check this plugin
|
||||
npm run validate # check manifest.json
|
||||
npm run format # format the code with Prettier
|
||||
```
|
||||
|
||||
## Settings
|
||||
|
||||
### Admin
|
||||
|
||||
- **Renew automatically:** checks twice a day and renews when there is no certificate, it is self-signed, it does not cover the domain, or it expires within 30 days
|
||||
- **Domain:** the public domain name the certificate covers
|
||||
- **Email:** the contact email for the ACME account
|
||||
- **Certificate authority:** Let's Encrypt, Let's Encrypt staging, or a custom ACME directory
|
||||
- **ACME directory URL:** only for a custom authority, and must be https
|
||||
- **Challenge type:** HTTP or DNS (Cloudflare)
|
||||
- **Cloudflare API token:** used by the DNS challenge, stored encrypted
|
||||
|
||||
## Permissions
|
||||
|
||||
- `acme-ssl.manage`: see the certificate status and request a new certificate. Only admins have it by default.
|
||||
+27
-30
@@ -1,41 +1,38 @@
|
||||
# ACME Certificates
|
||||
<div align="center">
|
||||
|
||||
Gets and renews the Termix HTTPS certificate from Let's Encrypt or another ACME provider.
|
||||
<img src="https://raw.githubusercontent.com/Termix-SSH/Termix/main/public/icon.svg" width="120" height="120" alt="Termix Logo" />
|
||||
|
||||
<h1>ACME Certificates</h1>
|
||||
|
||||
<p>Free HTTPS certificates for your Termix server, renewed for you</p>
|
||||
|
||||
</div>
|
||||
|
||||
<br />
|
||||
|
||||
## Overview
|
||||
|
||||
ACME Certificates gets the HTTPS certificate Termix serves from Let's Encrypt or any other ACME provider and keeps it renewed.
|
||||
|
||||
<br />
|
||||
|
||||
## Features
|
||||
|
||||
- Gets a certificate from Let's Encrypt, Let's Encrypt staging or any ACME directory URL.
|
||||
- Checks twice a day and renews when there is no certificate, the current one is self-signed, it does not cover the domain or it expires within 30 days.
|
||||
- Swaps in the new certificate without a restart.
|
||||
- Shows the current certificate and the last attempt, with a button to request one now.
|
||||
- Certificates from Let's Encrypt or any ACME directory
|
||||
- HTTP challenge on port 80, or a Cloudflare DNS challenge when port 80 is closed
|
||||
- Renews before the certificate expires
|
||||
- Swaps in the new certificate without a restart
|
||||
|
||||
## Setup
|
||||
<br />
|
||||
|
||||
Pick a challenge type:
|
||||
## Support
|
||||
|
||||
- HTTP: the provider fetches `http://<domain>/.well-known/acme-challenge/...`, so port 80 must reach Termix.
|
||||
- DNS (Cloudflare): needs a Cloudflare API token with Zone:DNS:Edit. Works when port 80 is closed.
|
||||
To report a bug or request a feature, open a [support ticket](https://github.com/Termix-SSH/Support/issues/new/choose). You need to be logged in to GitHub. Please be as detailed as possible, preferably in English.
|
||||
|
||||
If you turn this plugin off, Termix keeps serving the current certificate but nothing renews it. Admin Settings > HTTPS certificate warns you before it expires. Uploading your own certificate is still done there.
|
||||
For discussions and questions, join the [Discord](https://discord.gg/jVQGdvHDrf) server.
|
||||
|
||||
## Settings
|
||||
<br />
|
||||
|
||||
### Admin
|
||||
## License
|
||||
|
||||
- Renew automatically: turn automatic renewal on or off.
|
||||
- Domain and Email: the domain to cover and the contact email for the provider.
|
||||
- Certificate authority: Let's Encrypt, Let's Encrypt staging or a custom ACME directory URL.
|
||||
- Challenge type: HTTP or DNS (Cloudflare).
|
||||
- Cloudflare API token: used by the DNS challenge. Stored encrypted.
|
||||
|
||||
## Permissions
|
||||
|
||||
- `acme-ssl.manage`: Manage ACME certificates. Only admins have it by default.
|
||||
|
||||
## Development
|
||||
|
||||
```bash
|
||||
npm run build # build into dist/
|
||||
npm run test # run this plugin's tests
|
||||
npm run typecheck # type-check this plugin
|
||||
```
|
||||
Distributed under the Apache License Version 2.0. See [LICENSE](https://github.com/Termix-SSH/Termix/blob/main/LICENSE) for more information.
|
||||
@@ -2,16 +2,16 @@
|
||||
"id": "acme-ssl",
|
||||
"name": "ACME Certificates",
|
||||
"version": "1.0.0",
|
||||
"description": "Gets and renews the Termix HTTPS certificate from Let's Encrypt or another ACME provider.",
|
||||
"description": "Gets the Termix HTTPS certificate from Let's Encrypt or any ACME provider and renews it for you.",
|
||||
"author": {
|
||||
"name": "Termix"
|
||||
},
|
||||
"license": "MIT",
|
||||
"license": "Apache-2.0",
|
||||
"repository": "https://github.com/Termix-SSH/Termix",
|
||||
"category": "Access & Security",
|
||||
"icon": "Lock",
|
||||
"engine": {
|
||||
"termix": ">=2.9.0",
|
||||
"termix": ">=26.10.0",
|
||||
"api": "1"
|
||||
},
|
||||
"capabilities": [
|
||||
|
||||
@@ -7,19 +7,27 @@
|
||||
"build": "termix-plugin build",
|
||||
"test": "termix-plugin test",
|
||||
"typecheck": "tsc -p .",
|
||||
"validate": "termix-plugin validate"
|
||||
"validate": "termix-plugin validate",
|
||||
"format": "prettier --write .",
|
||||
"format:check": "prettier --check .",
|
||||
"prepare": "husky || true"
|
||||
},
|
||||
"dependencies": {
|
||||
"acme-client": "^5.4.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@commitlint/cli": "^21.2.2",
|
||||
"@commitlint/config-conventional": "^21.2.0",
|
||||
"@termix/plugin-sdk": "^1.0.0",
|
||||
"@testing-library/dom": "^10.4.2",
|
||||
"@testing-library/react": "^16.3.3",
|
||||
"@types/node": "^26.2.0",
|
||||
"@types/react": "^19.2.18",
|
||||
"@types/react-dom": "^19.2.4",
|
||||
"husky": "^9.1.7",
|
||||
"jsdom": "^30.0.1",
|
||||
"lint-staged": "^17.2.0",
|
||||
"prettier": "3.9.9",
|
||||
"vitest": "^4.1.11"
|
||||
},
|
||||
"peerDependencies": {
|
||||
@@ -27,5 +35,10 @@
|
||||
"express": "^5.2.1",
|
||||
"react": "^19.2.8",
|
||||
"sonner": "^2.0.8"
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.{ts,tsx,js,jsx,mjs,cjs,json,css,md}": [
|
||||
"prettier --write"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"extends": ["@commitlint/config-conventional"],
|
||||
"rules": {
|
||||
"type-enum": [
|
||||
2,
|
||||
"always",
|
||||
[
|
||||
"feat",
|
||||
"fix",
|
||||
"docs",
|
||||
"style",
|
||||
"refactor",
|
||||
"perf",
|
||||
"test",
|
||||
"chore",
|
||||
"revert"
|
||||
]
|
||||
],
|
||||
"subject-case": [0]
|
||||
}
|
||||
}
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
custom: https://donate.termix.site/
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
# Overview
|
||||
|
||||
_Short summary of what this PR does_
|
||||
|
||||
- [ ] Added: ...
|
||||
- [ ] Updated: ...
|
||||
- [ ] Removed: ...
|
||||
- [ ] Fixed: ...
|
||||
|
||||
# Changes Made
|
||||
|
||||
_Detailed explanation of changes (if needed)_
|
||||
|
||||
- ...
|
||||
|
||||
# Related Issues
|
||||
|
||||
_Link any issues this PR addresses_
|
||||
|
||||
- Closes #ISSUE_NUMBER
|
||||
- Related to #ISSUE_NUMBER
|
||||
|
||||
# Screenshots / Demos
|
||||
|
||||
_(Optional: add before/after screenshots, GIFs, or console output)_
|
||||
|
||||
# Checklist
|
||||
|
||||
- [ ] Code follows project style guidelines
|
||||
- [ ] Supports mobile and desktop UI/app (if applicable)
|
||||
- [ ] Added the change to `CHANGELOG.json`
|
||||
- [ ] `npm run test`, `npm run typecheck` and `npm run validate` pass
|
||||
- [ ] I have read `CONTRIBUTING.md`
|
||||
- [ ] This is not a translation request. See [docs](https://docs.termix.site/translations)
|
||||
@@ -0,0 +1,9 @@
|
||||
node_modules
|
||||
dist
|
||||
coverage
|
||||
*.log
|
||||
.env
|
||||
*.tmxplug
|
||||
*.tmxplug.sig
|
||||
termix-plugin-signing.key
|
||||
.termix-tables-*
|
||||
@@ -0,0 +1 @@
|
||||
npx --no -- commitlint --edit "$1"
|
||||
@@ -0,0 +1 @@
|
||||
npx lint-staged
|
||||
@@ -0,0 +1,4 @@
|
||||
dist
|
||||
coverage
|
||||
node_modules
|
||||
package-lock.json
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"semi": true,
|
||||
"singleQuote": false,
|
||||
"tabWidth": 2,
|
||||
"trailingComma": "all",
|
||||
"printWidth": 80,
|
||||
"arrowParens": "always",
|
||||
"endOfLine": "lf"
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/Termix-SSH/Termix/main/packages/plugin-sdk/schema/changelog.schema.json",
|
||||
"releases": [
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"changes": [
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Ask about your hosts, snippets, fleets, alerts, automations and more"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Proposes changes instead of making them, and nothing runs until you approve it"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Can run safe read-only commands like `df` and `uptime` if you allow it"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Ask about a host right from its terminal"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Works with Ollama, Anthropic, OpenAI, Google Gemini and any OpenAI compatible endpoint"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "AI Agents: run Pi, OpenCode, Claude Code or Codex on an SSH host using one of your Termix providers, with tool approvals, queued messages, attachments, Git diffs and worktrees"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "One-click install of the selected agent and Node.js, and a button to set up SSH loopback forwarding"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
# Changelog
|
||||
|
||||
## 1.0.0
|
||||
|
||||
First release, bundled with Termix 2.9.0.
|
||||
|
||||
Adds an AI assistant that can read your hosts, snippets, fleets, alerts and automations and suggest changes for you to approve. Works with Ollama, Anthropic, OpenAI, Google Gemini and any OpenAI compatible provider.
|
||||
@@ -0,0 +1,37 @@
|
||||
# Contributing to AI Assistant
|
||||
|
||||
## Development
|
||||
|
||||
```bash
|
||||
npm run build # build into dist/
|
||||
npm run test # run this plugin's tests
|
||||
npm run typecheck # type-check this plugin
|
||||
npm run validate # check manifest.json
|
||||
npm run format # format the code with Prettier
|
||||
```
|
||||
|
||||
## Settings
|
||||
|
||||
### Admin
|
||||
|
||||
- **AI assistant:** let users turn the assistant on. While this is off it is hidden and blocked for everyone
|
||||
- **Allowed private AI hosts:** hosts on your private network a provider may point at, such as a self-hosted Ollama
|
||||
|
||||
### User
|
||||
|
||||
- **Enable the AI assistant:** turn the assistant on for yourself
|
||||
- **Allow read-only diagnostic commands:** let the assistant run safe commands without asking
|
||||
- **Providers:** your AI providers, models and API keys
|
||||
|
||||
### Host
|
||||
|
||||
- **Enable AI Assistant:** let the assistant help in this host's terminal. Off by default
|
||||
|
||||
## Permissions
|
||||
|
||||
- `ai.use`: use the assistant. Admins and users have it by default.
|
||||
- `ai.manage_providers`: add, edit and remove AI providers and their API keys. Admins and users have it by default.
|
||||
- `ai.apply_proposals`: let the assistant carry out the changes it suggests. Admins and users have it by default.
|
||||
- `ai.services.use`: let other features call the assistant for you. Admins and users have it by default.
|
||||
- `ai.secrets.share`: let other features use the stored API key without seeing it. Admins and users have it by default.
|
||||
- `ai.agents`: run coding agents on SSH hosts. Only admins have it by default.
|
||||
+37
-39
@@ -1,50 +1,48 @@
|
||||
# AI Assistant
|
||||
<div align="center">
|
||||
|
||||
An AI assistant that can read your hosts, snippets, fleets, alerts and automations, and suggest changes for you to approve.
|
||||
<img src="https://raw.githubusercontent.com/Termix-SSH/Termix/main/public/icon.svg" width="120" height="120" alt="Termix Logo" />
|
||||
|
||||
<h1>AI Assistant</h1>
|
||||
|
||||
<p>An optional AI assistant that knows your servers</p>
|
||||
|
||||
</div>
|
||||
|
||||
<br />
|
||||
|
||||
## Overview
|
||||
|
||||
AI Assistant is a chat that can read your Termix setup and propose changes for you to approve. It can also run coding agents on your SSH hosts.
|
||||
|
||||
<br />
|
||||
|
||||
## Features
|
||||
|
||||
- Chat with an assistant that can read your hosts, snippets, fleets, alerts, automations, workspaces, network graph and homepage.
|
||||
- The assistant suggests changes, and nothing is applied until you approve it.
|
||||
- Can run read-only diagnostic commands on a host if you allow it.
|
||||
- Open the assistant from the terminal toolbar with the current session as context.
|
||||
- Works with Ollama, Anthropic, OpenAI, Google Gemini and any OpenAI compatible provider.
|
||||
- Ask about your hosts, snippets, fleets, alerts, automations and more
|
||||
- Proposes changes instead of making them, and nothing runs until you approve it
|
||||
- Can run safe read-only commands like `df` and `uptime` if you allow it
|
||||
- Ask about a host right from its terminal
|
||||
- Works with Ollama, Anthropic, OpenAI, Google Gemini and any OpenAI compatible endpoint
|
||||
- Run Pi, OpenCode, Claude Code or Codex as a coding agent on an SSH host, using your own provider
|
||||
|
||||
## Settings
|
||||
|
||||
### Admin
|
||||
|
||||
- AI assistant: let users turn the assistant on. While this is off it is hidden for everyone.
|
||||
- Allowed private AI hosts: hosts on your private network a provider may point at, such as a self-hosted Ollama.
|
||||
|
||||
### User
|
||||
|
||||
- Enable the AI assistant: turn the assistant on for yourself.
|
||||
- Allow read-only diagnostic commands: let the assistant run safe commands on your hosts.
|
||||
- Providers: the AI providers, models and API keys you use.
|
||||
|
||||
### Host
|
||||
|
||||
- Enable AI Assistant: allow the assistant to work with this host.
|
||||
|
||||
## Permissions
|
||||
|
||||
- `ai.use`: Open the assistant and ask it things. Admins and users have it by default.
|
||||
- `ai.manage_providers`: Add, edit and remove AI providers and their API keys. Admins and users have it by default.
|
||||
- `ai.apply_proposals`: Let the assistant carry out the changes it suggests. Admins and users have it by default.
|
||||
- `ai.services.use`: Let other features call the assistant for you. Admins and users have it by default.
|
||||
- `ai.secrets.share`: Let other features use the stored AI API key without seeing it. Admins and users have it by default.
|
||||
<br />
|
||||
|
||||
## Services
|
||||
|
||||
Uses from other plugins:
|
||||
Uses from other plugins, each one optional:
|
||||
|
||||
- `workspaces.saved`, `network-topology.graph`, `snippets.access`, `fleets.access`, `terminal.history`, `automations.access` and `homepage.items` to read your data. Each one is optional.
|
||||
- `workspaces.saved`, `network-topology.graph`, `snippets.access`, `fleets.access`, `terminal.history`, `automations.access` and `homepage.items` to read your data
|
||||
|
||||
## Development
|
||||
<br />
|
||||
|
||||
```bash
|
||||
npm run build # build into dist/
|
||||
npm run test # run this plugin's tests
|
||||
npm run typecheck # type-check this plugin
|
||||
```
|
||||
## Support
|
||||
|
||||
To report a bug or request a feature, open a [support ticket](https://github.com/Termix-SSH/Support/issues/new/choose). You need to be logged in to GitHub. Please be as detailed as possible, preferably in English.
|
||||
|
||||
For discussions and questions, join the [Discord](https://discord.gg/jVQGdvHDrf) server.
|
||||
|
||||
<br />
|
||||
|
||||
## License
|
||||
|
||||
Distributed under the Apache License Version 2.0. See [LICENSE](https://github.com/Termix-SSH/Termix/blob/main/LICENSE) for more information.
|
||||
@@ -2,16 +2,16 @@
|
||||
"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.",
|
||||
"description": "An optional AI assistant that reads your setup and proposes changes for you to approve.",
|
||||
"author": {
|
||||
"name": "Termix"
|
||||
},
|
||||
"license": "MIT",
|
||||
"license": "Apache-2.0",
|
||||
"repository": "https://github.com/Termix-SSH/Termix",
|
||||
"category": "Productivity",
|
||||
"icon": "Sparkles",
|
||||
"engine": {
|
||||
"termix": ">=2.9.0",
|
||||
"termix": ">=26.10.0",
|
||||
"api": "1"
|
||||
},
|
||||
"capabilities": [
|
||||
|
||||
+14
-1
@@ -7,7 +7,10 @@
|
||||
"build": "termix-plugin build",
|
||||
"test": "termix-plugin test",
|
||||
"typecheck": "tsc -p .",
|
||||
"validate": "termix-plugin validate"
|
||||
"validate": "termix-plugin validate",
|
||||
"format": "prettier --write .",
|
||||
"format:check": "prettier --check .",
|
||||
"prepare": "husky || true"
|
||||
},
|
||||
"dependencies": {
|
||||
"@anthropic-ai/sdk": "^0.120.0",
|
||||
@@ -16,6 +19,8 @@
|
||||
"remark-gfm": "^4.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@commitlint/cli": "^21.2.2",
|
||||
"@commitlint/config-conventional": "^21.2.0",
|
||||
"@termix/plugin-sdk": "^1.0.0",
|
||||
"@testing-library/dom": "^10.4.2",
|
||||
"@testing-library/react": "^16.3.3",
|
||||
@@ -23,7 +28,10 @@
|
||||
"@types/react": "^19.2.18",
|
||||
"@types/react-dom": "^19.2.4",
|
||||
"better-sqlite3": "^13.0.3",
|
||||
"husky": "^9.1.7",
|
||||
"jsdom": "^30.0.1",
|
||||
"lint-staged": "^17.2.0",
|
||||
"prettier": "3.9.9",
|
||||
"vitest": "^4.1.11"
|
||||
},
|
||||
"peerDependencies": {
|
||||
@@ -33,5 +41,10 @@
|
||||
"react": "^19.2.8",
|
||||
"sonner": "^2.0.8",
|
||||
"ssh2": "^1.17.0"
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.{ts,tsx,js,jsx,mjs,cjs,json,css,md}": [
|
||||
"prettier --write"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"extends": ["@commitlint/config-conventional"],
|
||||
"rules": {
|
||||
"type-enum": [
|
||||
2,
|
||||
"always",
|
||||
[
|
||||
"feat",
|
||||
"fix",
|
||||
"docs",
|
||||
"style",
|
||||
"refactor",
|
||||
"perf",
|
||||
"test",
|
||||
"chore",
|
||||
"revert"
|
||||
]
|
||||
],
|
||||
"subject-case": [0]
|
||||
}
|
||||
}
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
custom: https://donate.termix.site/
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
# Overview
|
||||
|
||||
_Short summary of what this PR does_
|
||||
|
||||
- [ ] Added: ...
|
||||
- [ ] Updated: ...
|
||||
- [ ] Removed: ...
|
||||
- [ ] Fixed: ...
|
||||
|
||||
# Changes Made
|
||||
|
||||
_Detailed explanation of changes (if needed)_
|
||||
|
||||
- ...
|
||||
|
||||
# Related Issues
|
||||
|
||||
_Link any issues this PR addresses_
|
||||
|
||||
- Closes #ISSUE_NUMBER
|
||||
- Related to #ISSUE_NUMBER
|
||||
|
||||
# Screenshots / Demos
|
||||
|
||||
_(Optional: add before/after screenshots, GIFs, or console output)_
|
||||
|
||||
# Checklist
|
||||
|
||||
- [ ] Code follows project style guidelines
|
||||
- [ ] Supports mobile and desktop UI/app (if applicable)
|
||||
- [ ] Added the change to `CHANGELOG.json`
|
||||
- [ ] `npm run test`, `npm run typecheck` and `npm run validate` pass
|
||||
- [ ] I have read `CONTRIBUTING.md`
|
||||
- [ ] This is not a translation request. See [docs](https://docs.termix.site/translations)
|
||||
@@ -0,0 +1,9 @@
|
||||
node_modules
|
||||
dist
|
||||
coverage
|
||||
*.log
|
||||
.env
|
||||
*.tmxplug
|
||||
*.tmxplug.sig
|
||||
termix-plugin-signing.key
|
||||
.termix-tables-*
|
||||
@@ -0,0 +1 @@
|
||||
npx --no -- commitlint --edit "$1"
|
||||
@@ -0,0 +1 @@
|
||||
npx lint-staged
|
||||
@@ -0,0 +1,4 @@
|
||||
dist
|
||||
coverage
|
||||
node_modules
|
||||
package-lock.json
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"semi": true,
|
||||
"singleQuote": false,
|
||||
"tabWidth": 2,
|
||||
"trailingComma": "all",
|
||||
"printWidth": 80,
|
||||
"arrowParens": "always",
|
||||
"endOfLine": "lf"
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/Termix-SSH/Termix/main/packages/plugin-sdk/schema/changelog.schema.json",
|
||||
"releases": [
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"changes": [
|
||||
{
|
||||
"type": "added",
|
||||
"text": "One inbox for alerts from every part of Termix"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Popups for new alerts"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Send alerts to Discord, ntfy, email or a webhook"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Rules that pick which alerts go where"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Optional news from the Termix team, like security notices and releases"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
# Changelog
|
||||
|
||||
## 1.0.0
|
||||
|
||||
First release, bundled with Termix 2.9.0.
|
||||
|
||||
Adds one inbox for every alert in Termix. Alerts can also be sent to webhooks, ntfy, Discord and email, with delivery rules to pick what goes where.
|
||||
@@ -0,0 +1,27 @@
|
||||
# Contributing to Alerts
|
||||
|
||||
## Development
|
||||
|
||||
```bash
|
||||
npm run build # build into dist/
|
||||
npm run test # run this plugin's tests
|
||||
npm run typecheck # type-check this plugin
|
||||
npm run validate # check manifest.json
|
||||
npm run format # format the code with Prettier
|
||||
```
|
||||
|
||||
## Settings
|
||||
|
||||
### Admin
|
||||
|
||||
- **Termix announcements:** show news from the Termix team in everyone's inbox
|
||||
- **Keep alerts for (days):** older alerts are removed from every inbox
|
||||
- **SMTP server, port, TLS, username, password and from address:** needed for email channels. Leave the server empty to turn email off
|
||||
|
||||
### User
|
||||
|
||||
- **Alert popups:** all alerts, warnings and critical, critical only, or none
|
||||
|
||||
## Permissions
|
||||
|
||||
- `alerts.use`: get alerts in the inbox and send them to your own channels. Admins and users have it by default.
|
||||
+28
-28
@@ -1,39 +1,39 @@
|
||||
# Alerts
|
||||
<div align="center">
|
||||
|
||||
One inbox for every alert, with delivery to webhooks, ntfy, Discord and email.
|
||||
<img src="https://raw.githubusercontent.com/Termix-SSH/Termix/main/public/icon.svg" width="120" height="120" alt="Termix Logo" />
|
||||
|
||||
<h1>Alerts</h1>
|
||||
|
||||
<p>One inbox for every alert in Termix</p>
|
||||
|
||||
</div>
|
||||
|
||||
<br />
|
||||
|
||||
## Overview
|
||||
|
||||
Alerts is the inbox every Termix alert lands in, with delivery to Discord, ntfy, email or a webhook.
|
||||
|
||||
<br />
|
||||
|
||||
## Features
|
||||
|
||||
- One inbox for alerts from every part of Termix.
|
||||
- Popups for new alerts, filtered by severity.
|
||||
- Channels that send alerts to webhooks, ntfy, Discord and email.
|
||||
- Delivery rules that pick which alerts go to which channel.
|
||||
- Optional news from the Termix team, like security notices and new releases.
|
||||
- One inbox for alerts from every part of Termix
|
||||
- Popups for new alerts
|
||||
- Send alerts to Discord, ntfy, email or a webhook
|
||||
- Rules that pick which alerts go where
|
||||
- Optional news from the Termix team, like security notices and releases
|
||||
|
||||
## Settings
|
||||
<br />
|
||||
|
||||
### Admin
|
||||
## Support
|
||||
|
||||
- Termix announcements: show news from the Termix team in everyone's inbox.
|
||||
- Keep alerts for (days): older alerts are removed from every inbox.
|
||||
- SMTP server, port, TLS, username, password and from address: needed for email channels. Leave the server empty to turn email off.
|
||||
To report a bug or request a feature, open a [support ticket](https://github.com/Termix-SSH/Support/issues/new/choose). You need to be logged in to GitHub. Please be as detailed as possible, preferably in English.
|
||||
|
||||
### User
|
||||
For discussions and questions, join the [Discord](https://discord.gg/jVQGdvHDrf) server.
|
||||
|
||||
- Alert popups: all alerts, warnings and critical, critical only, or none.
|
||||
<br />
|
||||
|
||||
## Permissions
|
||||
## License
|
||||
|
||||
- `alerts.use`: Get alerts in the inbox and send them to your own channels. Admins and users have it by default.
|
||||
|
||||
## For plugin authors
|
||||
|
||||
Send an alert from any plugin with `ctx.notify.send()`. This plugin stores it and delivers it. Do not build a separate notification system into a plugin.
|
||||
|
||||
## Development
|
||||
|
||||
```bash
|
||||
npm run build # build into dist/
|
||||
npm run test # run this plugin's tests
|
||||
npm run typecheck # type-check this plugin
|
||||
```
|
||||
Distributed under the Apache License Version 2.0. See [LICENSE](https://github.com/Termix-SSH/Termix/blob/main/LICENSE) for more information.
|
||||
@@ -2,16 +2,16 @@
|
||||
"id": "alerts",
|
||||
"name": "Alerts",
|
||||
"version": "1.0.0",
|
||||
"description": "One inbox for every alert, with delivery to webhooks, ntfy, Discord and email.",
|
||||
"description": "One inbox for every alert in Termix, with delivery to webhooks, ntfy, Discord and email.",
|
||||
"author": {
|
||||
"name": "Termix"
|
||||
},
|
||||
"license": "MIT",
|
||||
"license": "Apache-2.0",
|
||||
"repository": "https://github.com/Termix-SSH/Termix",
|
||||
"category": "Monitoring",
|
||||
"icon": "Bell",
|
||||
"engine": {
|
||||
"termix": ">=2.9.0",
|
||||
"termix": ">=26.10.0",
|
||||
"api": "1"
|
||||
},
|
||||
"capabilities": [
|
||||
|
||||
@@ -7,13 +7,18 @@
|
||||
"build": "termix-plugin build",
|
||||
"test": "termix-plugin test",
|
||||
"typecheck": "tsc -p .",
|
||||
"validate": "termix-plugin validate"
|
||||
"validate": "termix-plugin validate",
|
||||
"format": "prettier --write .",
|
||||
"format:check": "prettier --check .",
|
||||
"prepare": "husky || true"
|
||||
},
|
||||
"dependencies": {
|
||||
"lucide-react": "^1.33.0",
|
||||
"nodemailer": "^10.0.10"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@commitlint/cli": "^21.2.2",
|
||||
"@commitlint/config-conventional": "^21.2.0",
|
||||
"@termix/plugin-sdk": "^1.0.0",
|
||||
"@testing-library/dom": "^10.4.2",
|
||||
"@testing-library/react": "^16.3.3",
|
||||
@@ -21,7 +26,10 @@
|
||||
"@types/react": "^19.2.18",
|
||||
"@types/react-dom": "^19.2.4",
|
||||
"better-sqlite3": "^13.0.3",
|
||||
"husky": "^9.1.7",
|
||||
"jsdom": "^30.0.1",
|
||||
"lint-staged": "^17.2.0",
|
||||
"prettier": "3.9.9",
|
||||
"vitest": "^4.1.11"
|
||||
},
|
||||
"peerDependencies": {
|
||||
@@ -30,5 +38,10 @@
|
||||
"express": "^5.2.1",
|
||||
"react": "^19.2.8",
|
||||
"sonner": "^2.0.8"
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.{ts,tsx,js,jsx,mjs,cjs,json,css,md}": [
|
||||
"prettier --write"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"extends": ["@commitlint/config-conventional"],
|
||||
"rules": {
|
||||
"type-enum": [
|
||||
2,
|
||||
"always",
|
||||
[
|
||||
"feat",
|
||||
"fix",
|
||||
"docs",
|
||||
"style",
|
||||
"refactor",
|
||||
"perf",
|
||||
"test",
|
||||
"chore",
|
||||
"revert"
|
||||
]
|
||||
],
|
||||
"subject-case": [0]
|
||||
}
|
||||
}
|
||||
+1
@@ -0,0 +1 @@
|
||||
custom: https://donate.termix.site/
|
||||
@@ -0,0 +1,34 @@
|
||||
# Overview
|
||||
|
||||
_Short summary of what this PR does_
|
||||
|
||||
- [ ] Added: ...
|
||||
- [ ] Updated: ...
|
||||
- [ ] Removed: ...
|
||||
- [ ] Fixed: ...
|
||||
|
||||
# Changes Made
|
||||
|
||||
_Detailed explanation of changes (if needed)_
|
||||
|
||||
- ...
|
||||
|
||||
# Related Issues
|
||||
|
||||
_Link any issues this PR addresses_
|
||||
|
||||
- Closes #ISSUE_NUMBER
|
||||
- Related to #ISSUE_NUMBER
|
||||
|
||||
# Screenshots / Demos
|
||||
|
||||
_(Optional: add before/after screenshots, GIFs, or console output)_
|
||||
|
||||
# Checklist
|
||||
|
||||
- [ ] Code follows project style guidelines
|
||||
- [ ] Supports mobile and desktop UI/app (if applicable)
|
||||
- [ ] Added the change to `CHANGELOG.json`
|
||||
- [ ] `npm run test`, `npm run typecheck` and `npm run validate` pass
|
||||
- [ ] I have read `CONTRIBUTING.md`
|
||||
- [ ] This is not a translation request. See [docs](https://docs.termix.site/translations)
|
||||
@@ -0,0 +1,9 @@
|
||||
node_modules
|
||||
dist
|
||||
coverage
|
||||
*.log
|
||||
.env
|
||||
*.tmxplug
|
||||
*.tmxplug.sig
|
||||
termix-plugin-signing.key
|
||||
.termix-tables-*
|
||||
@@ -0,0 +1 @@
|
||||
npx --no -- commitlint --edit "$1"
|
||||
@@ -0,0 +1 @@
|
||||
npx lint-staged
|
||||
@@ -0,0 +1,4 @@
|
||||
dist
|
||||
coverage
|
||||
node_modules
|
||||
package-lock.json
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"semi": true,
|
||||
"singleQuote": false,
|
||||
"tabWidth": 2,
|
||||
"trailingComma": "all",
|
||||
"printWidth": 80,
|
||||
"arrowParens": "always",
|
||||
"endOfLine": "lf"
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/Termix-SSH/Termix/main/packages/plugin-sdk/schema/changelog.schema.json",
|
||||
"releases": [
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"changes": [
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Triggers for metrics, hosts going up or down, health checks, schedules, container events and webhooks"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Steps that run commands and snippets, control containers and tunnels, wake hosts, call URLs and send alerts"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Conditions, waits and variables for more complex flows"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Run on one host, a fleet or every host"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Test runs and a history of every run"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Maintenance windows that pause automations while you work on a host"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
# Changelog
|
||||
|
||||
## 1.0.0
|
||||
|
||||
First release, bundled with Termix 2.9.0.
|
||||
|
||||
Runs actions on your hosts on a schedule or when something happens, like a host going down, a metric crossing a limit, a container event or an incoming webhook. Each automation is a list of steps, such as running a command, sending an alert or calling a URL.
|
||||
@@ -0,0 +1,19 @@
|
||||
# Contributing to Automations
|
||||
|
||||
## Development
|
||||
|
||||
```bash
|
||||
npm run build # build into dist/
|
||||
npm run test # run this plugin's tests
|
||||
npm run typecheck # type-check this plugin
|
||||
npm run validate # check manifest.json
|
||||
npm run format # format the code with Prettier
|
||||
```
|
||||
|
||||
## Permissions
|
||||
|
||||
- `automations.view`: see automations and their runs. Admins and users have it by default.
|
||||
- `automations.create`: create automations. Admins and users have it by default.
|
||||
- `automations.edit`: change automations. Admins and users have it by default.
|
||||
- `automations.delete`: delete automations. Admins and users have it by default.
|
||||
- `automations.run`: run automations by hand. Admins and users have it by default.
|
||||
@@ -1,51 +1,53 @@
|
||||
# Automations
|
||||
<div align="center">
|
||||
|
||||
Run actions on your hosts on a schedule or when something happens, like a host going down or a metric crossing a limit.
|
||||
<img src="https://raw.githubusercontent.com/Termix-SSH/Termix/main/public/icon.svg" width="120" height="120" alt="Termix Logo" />
|
||||
|
||||
<h1>Automations</h1>
|
||||
|
||||
<p>Make your servers react on their own</p>
|
||||
|
||||
</div>
|
||||
|
||||
<br />
|
||||
|
||||
## Overview
|
||||
|
||||
Automations runs steps on your hosts when something happens, like cleaning up a disk when it fills or restarting a container when it stops.
|
||||
|
||||
<br />
|
||||
|
||||
## Features
|
||||
|
||||
- Triggers: a schedule, a host going up or down, a metric crossing a limit, a health check change, a container event, a Termix event or an incoming webhook.
|
||||
- Steps: send an alert, call a URL, run a snippet or command, control a container or tunnel, wake a host, wait, set a variable, branch with if / otherwise, run another automation or stop.
|
||||
- Run an automation on the host that triggered it or on any host or fleet you pick.
|
||||
- See the output and errors of each step for every run.
|
||||
- Triggers for metrics, hosts going up or down, health checks, schedules, container events and webhooks
|
||||
- Steps that run commands and snippets, control containers and tunnels, wake hosts, call URLs and send alerts
|
||||
- Conditions, waits and variables for more complex flows
|
||||
- Run on one host, a fleet or every host
|
||||
- Test runs and a history of every run
|
||||
- Maintenance windows that pause automations while you work on a host
|
||||
|
||||
## Permissions
|
||||
|
||||
- `automations.view`: See automations and their runs. Admins and users have it by default.
|
||||
- `automations.create`: Create automations. Admins and users have it by default.
|
||||
- `automations.edit`: Change automations. Admins and users have it by default.
|
||||
- `automations.delete`: Delete automations. Admins and users have it by default.
|
||||
- `automations.run`: Run automations by hand. Admins and users have it by default.
|
||||
<br />
|
||||
|
||||
## Services
|
||||
|
||||
Provides to other plugins:
|
||||
|
||||
- `automations.access`: list and run automations.
|
||||
- `automations.access`: list and run automations
|
||||
|
||||
Uses from other plugins:
|
||||
|
||||
- `snippets.access` for the run snippet step. Required.
|
||||
- `fleets.access`, `tunnels.access`, `docker.containers`, `docker.events`, `host-metrics.viewers` and `wake-on-lan.send` for their steps and triggers. Each one is optional.
|
||||
- `snippets.access` for the run snippet step. Required
|
||||
- `fleets.access`, `tunnels.access`, `docker.containers`, `docker.events`, `host-metrics.viewers` and `wake-on-lan.send` for their steps and triggers. Each one is optional
|
||||
|
||||
## Development
|
||||
<br />
|
||||
|
||||
```bash
|
||||
npm run build # build into dist/
|
||||
npm run test # run this plugin's tests
|
||||
npm run typecheck # type-check this plugin
|
||||
```
|
||||
## Support
|
||||
|
||||
## Host maintenance
|
||||
To report a bug or request a feature, open a [support ticket](https://github.com/Termix-SSH/Support/issues/new/choose). You need to be logged in to GitHub. Please be as detailed as possible, preferably in English.
|
||||
|
||||
Open **Maintenance** from a saved host's actions. Its owner can start maintenance now, record a reason and estimated duration, or add a one-time, weekly or monthly schedule. Viewing requires `automations.view`; changes require `automations.edit`. Active maintenance appears as a host badge. The Automations plugin must remain enabled for maintenance scheduling and suppression to operate.
|
||||
For discussions and questions, join the [Discord](https://discord.gg/jVQGdvHDrf) server.
|
||||
|
||||
Schedules use UTC, including through daylight-saving changes. A monthly schedule for a day missing from a month skips that month. Up to 20 plans per host are stored; remove completed one-time plans when no longer needed. Planned windows cannot overlap (touching endpoints are allowed), and recurring conflicts are checked over the Gregorian calendar cycle. Removing a plan cancels future occurrences, not maintenance already in progress.
|
||||
<br />
|
||||
|
||||
The estimated completion time is informational. Maintenance **only ends when its owner explicitly ends it**. If work overruns into another scheduled window, the host stays in maintenance and the estimate extends to the later planned end. After server downtime, due plans are caught up without briefly exposing an outage between maintenance windows. Each plan's next occurrence and the active state survive restarts.
|
||||
## License
|
||||
|
||||
While active, maintenance suppresses new host-status, health-check, metric-threshold, container-event and tunnel-disconnection automation runs for that host. This pauses the entire triggered automation, including any remediation steps. Monitoring continues to report the real status; observed status/health baselines still advance and metric dwell windows are reset. Manual runs, schedules, webhooks, security login events and runs already in progress continue normally. Maintenance does not globally silence alerts from unrelated plugins.
|
||||
|
||||
An optional overdue reminder uses the estimate plus a configurable grace period (20 minutes by default). It only sends after core has observed the host offline at or after that deadline; an unknown, online or older cached status does not qualify. Enable host status checks to supply those observations. Reminders use the Alerts hub and category `automations.maintenance_overdue`, which can be routed through the user's notification rules. A successful reminder is remembered across restarts; an extended estimate permits another reminder for the new deadline. No reminder automatically ends maintenance.
|
||||
|
||||
Maintenance rows reference their owner and host with cascading deletion. SQLite, PostgreSQL and MySQL migrations add only the new maintenance table.
|
||||
Distributed under the Apache License Version 2.0. See [LICENSE](https://github.com/Termix-SSH/Termix/blob/main/LICENSE) for more information.
|
||||
@@ -2,16 +2,16 @@
|
||||
"id": "automations",
|
||||
"name": "Automations",
|
||||
"version": "1.0.0",
|
||||
"description": "Run actions on your hosts on a schedule or when something happens, like a host going down or a metric crossing a limit.",
|
||||
"description": "Run steps on your hosts on a schedule or when something happens, like a host going down or a metric crossing a limit.",
|
||||
"author": {
|
||||
"name": "Termix"
|
||||
},
|
||||
"license": "MIT",
|
||||
"license": "Apache-2.0",
|
||||
"repository": "https://github.com/Termix-SSH/Termix",
|
||||
"category": "Infrastructure",
|
||||
"icon": "Workflow",
|
||||
"engine": {
|
||||
"termix": ">=2.9.0",
|
||||
"termix": ">=26.10.0",
|
||||
"api": "1"
|
||||
},
|
||||
"capabilities": [
|
||||
|
||||
@@ -7,12 +7,17 @@
|
||||
"build": "termix-plugin build",
|
||||
"test": "termix-plugin test",
|
||||
"typecheck": "tsc -p .",
|
||||
"validate": "termix-plugin validate"
|
||||
"validate": "termix-plugin validate",
|
||||
"format": "prettier --write .",
|
||||
"format:check": "prettier --check .",
|
||||
"prepare": "husky || true"
|
||||
},
|
||||
"dependencies": {
|
||||
"lucide-react": "^1.33.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@commitlint/cli": "^21.2.2",
|
||||
"@commitlint/config-conventional": "^21.2.0",
|
||||
"@termix/plugin-sdk": "^1.0.0",
|
||||
"@testing-library/dom": "^10.4.2",
|
||||
"@testing-library/react": "^16.3.3",
|
||||
@@ -20,7 +25,10 @@
|
||||
"@types/react": "^19.2.18",
|
||||
"@types/react-dom": "^19.2.4",
|
||||
"better-sqlite3": "^13.0.3",
|
||||
"husky": "^9.1.7",
|
||||
"jsdom": "^30.0.1",
|
||||
"lint-staged": "^17.2.0",
|
||||
"prettier": "3.9.9",
|
||||
"vitest": "^4.1.11"
|
||||
},
|
||||
"peerDependencies": {
|
||||
@@ -30,5 +38,10 @@
|
||||
"react": "^19.2.8",
|
||||
"sonner": "^2.0.8",
|
||||
"ssh2": "^1.17.0"
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.{ts,tsx,js,jsx,mjs,cjs,json,css,md}": [
|
||||
"prettier --write"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"extends": ["@commitlint/config-conventional"],
|
||||
"rules": {
|
||||
"type-enum": [
|
||||
2,
|
||||
"always",
|
||||
[
|
||||
"feat",
|
||||
"fix",
|
||||
"docs",
|
||||
"style",
|
||||
"refactor",
|
||||
"perf",
|
||||
"test",
|
||||
"chore",
|
||||
"revert"
|
||||
]
|
||||
],
|
||||
"subject-case": [0]
|
||||
}
|
||||
}
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
custom: https://donate.termix.site/
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
# Overview
|
||||
|
||||
_Short summary of what this PR does_
|
||||
|
||||
- [ ] Added: ...
|
||||
- [ ] Updated: ...
|
||||
- [ ] Removed: ...
|
||||
- [ ] Fixed: ...
|
||||
|
||||
# Changes Made
|
||||
|
||||
_Detailed explanation of changes (if needed)_
|
||||
|
||||
- ...
|
||||
|
||||
# Related Issues
|
||||
|
||||
_Link any issues this PR addresses_
|
||||
|
||||
- Closes #ISSUE_NUMBER
|
||||
- Related to #ISSUE_NUMBER
|
||||
|
||||
# Screenshots / Demos
|
||||
|
||||
_(Optional: add before/after screenshots, GIFs, or console output)_
|
||||
|
||||
# Checklist
|
||||
|
||||
- [ ] Code follows project style guidelines
|
||||
- [ ] Supports mobile and desktop UI/app (if applicable)
|
||||
- [ ] Added the change to `CHANGELOG.json`
|
||||
- [ ] `npm run test`, `npm run typecheck` and `npm run validate` pass
|
||||
- [ ] I have read `CONTRIBUTING.md`
|
||||
- [ ] This is not a translation request. See [docs](https://docs.termix.site/translations)
|
||||
@@ -0,0 +1,9 @@
|
||||
node_modules
|
||||
dist
|
||||
coverage
|
||||
*.log
|
||||
.env
|
||||
*.tmxplug
|
||||
*.tmxplug.sig
|
||||
termix-plugin-signing.key
|
||||
.termix-tables-*
|
||||
@@ -0,0 +1 @@
|
||||
npx --no -- commitlint --edit "$1"
|
||||
@@ -0,0 +1 @@
|
||||
npx lint-staged
|
||||
@@ -0,0 +1,4 @@
|
||||
dist
|
||||
coverage
|
||||
node_modules
|
||||
package-lock.json
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"semi": true,
|
||||
"singleQuote": false,
|
||||
"tabWidth": 2,
|
||||
"trailingComma": "all",
|
||||
"printWidth": 80,
|
||||
"arrowParens": "always",
|
||||
"endOfLine": "lf"
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/Termix-SSH/Termix/main/packages/plugin-sdk/schema/changelog.schema.json",
|
||||
"releases": [
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"changes": [
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Start, stop, restart, pause and remove containers"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Live CPU, memory, network and disk stats"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Read and download container logs"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Open a shell inside a container"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Works with Docker and Podman"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
# Changelog
|
||||
|
||||
## 1.0.0
|
||||
|
||||
First release, bundled with Termix 2.9.0.
|
||||
|
||||
Manages Docker and Podman containers over SSH. List, inspect, start, stop and remove containers, read their logs and open a console inside them.
|
||||
@@ -0,0 +1,22 @@
|
||||
# Contributing to Docker
|
||||
|
||||
## Development
|
||||
|
||||
```bash
|
||||
npm run build # build into dist/
|
||||
npm run test # run this plugin's tests
|
||||
npm run typecheck # type-check this plugin
|
||||
npm run validate # check manifest.json
|
||||
npm run format # format the code with Prettier
|
||||
```
|
||||
|
||||
## Settings
|
||||
|
||||
### Host
|
||||
|
||||
- **Enable Docker:** show the Docker tab for this host
|
||||
- **Container Runtime:** Docker or Podman
|
||||
|
||||
## Permissions
|
||||
|
||||
- `docker.use`: open the Docker manager and container consoles on hosts with Docker turned on. Admins and users have it by default.
|
||||
+36
-25
@@ -1,37 +1,48 @@
|
||||
# Docker
|
||||
<div align="center">
|
||||
|
||||
Manage Docker and Podman containers over SSH, with logs and a container console.
|
||||
<img src="https://raw.githubusercontent.com/Termix-SSH/Termix/main/public/icon.svg" width="120" height="120" alt="Termix Logo" />
|
||||
|
||||
<h1>Docker</h1>
|
||||
|
||||
<p>Manage Docker and Podman containers on your hosts</p>
|
||||
|
||||
</div>
|
||||
|
||||
<br />
|
||||
|
||||
## Overview
|
||||
|
||||
Docker manages the containers running on your hosts over SSH. It is not meant to replace Portainer or Dockge, just to handle the containers you already have.
|
||||
|
||||
<br />
|
||||
|
||||
## Features
|
||||
|
||||
- List, inspect, start, stop, restart, pause and remove containers.
|
||||
- Read and download container logs.
|
||||
- Open an interactive console inside a container.
|
||||
- Works with Docker or Podman.
|
||||
- Adds a Docker widget to the homepage.
|
||||
- Start, stop, restart, pause and remove containers
|
||||
- Live CPU, memory, network and disk stats
|
||||
- Read and download container logs
|
||||
- Open a shell inside a container
|
||||
- Works with Docker and Podman
|
||||
|
||||
## Settings
|
||||
|
||||
### Host
|
||||
|
||||
- Enable Docker: show the Docker tab for this host.
|
||||
- Container Runtime: Docker or Podman.
|
||||
|
||||
## Permissions
|
||||
|
||||
- `docker.use`: Use Docker. Admins and users have it by default.
|
||||
<br />
|
||||
|
||||
## Services
|
||||
|
||||
Provides to other plugins:
|
||||
|
||||
- `docker.containers`: list containers and start, stop, restart, pause, unpause or remove them.
|
||||
- `docker.events`: get notified when a container starts, exits, restarts or turns unhealthy.
|
||||
- `docker.containers`: list containers and start, stop, restart, pause, unpause or remove them
|
||||
- `docker.events`: get notified when a container starts, exits, restarts or turns unhealthy
|
||||
|
||||
## Development
|
||||
<br />
|
||||
|
||||
```bash
|
||||
npm run build # build into dist/
|
||||
npm run test # run this plugin's tests
|
||||
npm run typecheck # type-check this plugin
|
||||
```
|
||||
## Support
|
||||
|
||||
To report a bug or request a feature, open a [support ticket](https://github.com/Termix-SSH/Support/issues/new/choose). You need to be logged in to GitHub. Please be as detailed as possible, preferably in English.
|
||||
|
||||
For discussions and questions, join the [Discord](https://discord.gg/jVQGdvHDrf) server.
|
||||
|
||||
<br />
|
||||
|
||||
## License
|
||||
|
||||
Distributed under the Apache License Version 2.0. See [LICENSE](https://github.com/Termix-SSH/Termix/blob/main/LICENSE) for more information.
|
||||
@@ -2,16 +2,16 @@
|
||||
"id": "docker",
|
||||
"name": "Docker",
|
||||
"version": "1.0.0",
|
||||
"description": "Manage Docker and Podman containers over SSH, with logs and a container console.",
|
||||
"description": "Manage Docker and Podman containers on your hosts over SSH, with logs, stats and a console.",
|
||||
"author": {
|
||||
"name": "Termix"
|
||||
},
|
||||
"license": "MIT",
|
||||
"license": "Apache-2.0",
|
||||
"repository": "https://github.com/Termix-SSH/Termix",
|
||||
"category": "Infrastructure",
|
||||
"icon": "Box",
|
||||
"engine": {
|
||||
"termix": ">=2.9.0",
|
||||
"termix": ">=26.10.0",
|
||||
"api": "1"
|
||||
},
|
||||
"capabilities": [
|
||||
|
||||
@@ -7,7 +7,10 @@
|
||||
"build": "termix-plugin build",
|
||||
"test": "termix-plugin test",
|
||||
"typecheck": "tsc -p .",
|
||||
"validate": "termix-plugin validate"
|
||||
"validate": "termix-plugin validate",
|
||||
"format": "prettier --write .",
|
||||
"format:check": "prettier --check .",
|
||||
"prepare": "husky || true"
|
||||
},
|
||||
"dependencies": {
|
||||
"@xterm/addon-clipboard": "^0.2.0",
|
||||
@@ -18,13 +21,18 @@
|
||||
"react-xtermjs": "^1.0.10"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@commitlint/cli": "^21.2.2",
|
||||
"@commitlint/config-conventional": "^21.2.0",
|
||||
"@termix/plugin-sdk": "^1.0.0",
|
||||
"@testing-library/dom": "^10.4.2",
|
||||
"@testing-library/react": "^16.3.3",
|
||||
"@types/node": "^26.2.0",
|
||||
"@types/react": "^19.2.18",
|
||||
"@types/react-dom": "^19.2.4",
|
||||
"husky": "^9.1.7",
|
||||
"jsdom": "^30.0.1",
|
||||
"lint-staged": "^17.2.0",
|
||||
"prettier": "3.9.9",
|
||||
"vitest": "^4.1.11"
|
||||
},
|
||||
"peerDependencies": {
|
||||
@@ -44,5 +52,10 @@
|
||||
"react-xtermjs": {
|
||||
"@xterm/xterm": "$@xterm/xterm"
|
||||
}
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.{ts,tsx,js,jsx,mjs,cjs,json,css,md}": [
|
||||
"prettier --write"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"extends": ["@commitlint/config-conventional"],
|
||||
"rules": {
|
||||
"type-enum": [
|
||||
2,
|
||||
"always",
|
||||
[
|
||||
"feat",
|
||||
"fix",
|
||||
"docs",
|
||||
"style",
|
||||
"refactor",
|
||||
"perf",
|
||||
"test",
|
||||
"chore",
|
||||
"revert"
|
||||
]
|
||||
],
|
||||
"subject-case": [0]
|
||||
}
|
||||
}
|
||||
+1
@@ -0,0 +1 @@
|
||||
custom: https://donate.termix.site/
|
||||
@@ -0,0 +1,34 @@
|
||||
# Overview
|
||||
|
||||
_Short summary of what this PR does_
|
||||
|
||||
- [ ] Added: ...
|
||||
- [ ] Updated: ...
|
||||
- [ ] Removed: ...
|
||||
- [ ] Fixed: ...
|
||||
|
||||
# Changes Made
|
||||
|
||||
_Detailed explanation of changes (if needed)_
|
||||
|
||||
- ...
|
||||
|
||||
# Related Issues
|
||||
|
||||
_Link any issues this PR addresses_
|
||||
|
||||
- Closes #ISSUE_NUMBER
|
||||
- Related to #ISSUE_NUMBER
|
||||
|
||||
# Screenshots / Demos
|
||||
|
||||
_(Optional: add before/after screenshots, GIFs, or console output)_
|
||||
|
||||
# Checklist
|
||||
|
||||
- [ ] Code follows project style guidelines
|
||||
- [ ] Supports mobile and desktop UI/app (if applicable)
|
||||
- [ ] Added the change to `CHANGELOG.json`
|
||||
- [ ] `npm run test`, `npm run typecheck` and `npm run validate` pass
|
||||
- [ ] I have read `CONTRIBUTING.md`
|
||||
- [ ] This is not a translation request. See [docs](https://docs.termix.site/translations)
|
||||
@@ -0,0 +1,9 @@
|
||||
node_modules
|
||||
dist
|
||||
coverage
|
||||
*.log
|
||||
.env
|
||||
*.tmxplug
|
||||
*.tmxplug.sig
|
||||
termix-plugin-signing.key
|
||||
.termix-tables-*
|
||||
@@ -0,0 +1 @@
|
||||
npx --no -- commitlint --edit "$1"
|
||||
@@ -0,0 +1 @@
|
||||
npx lint-staged
|
||||
@@ -0,0 +1,4 @@
|
||||
dist
|
||||
coverage
|
||||
node_modules
|
||||
package-lock.json
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"semi": true,
|
||||
"singleQuote": false,
|
||||
"tabWidth": 2,
|
||||
"trailingComma": "all",
|
||||
"printWidth": 80,
|
||||
"arrowParens": "always",
|
||||
"endOfLine": "lf"
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/Termix-SSH/Termix/main/packages/plugin-sdk/schema/changelog.schema.json",
|
||||
"releases": [
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"changes": [
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Browse, upload, download, rename, move and delete files, with sudo support"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Edit files in a built-in code editor"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Preview images, PDFs, audio and video"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "A trash you can restore deleted files from"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Copy files between two hosts, with the fastest route picked for you and an integrity check"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "A side by side local and remote view in the desktop app"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
# Changelog
|
||||
|
||||
## 1.0.0
|
||||
|
||||
First release, bundled with Termix 2.9.0.
|
||||
|
||||
Browse, edit and transfer files over SFTP. Includes a code editor, a trash you can restore from, bookmarks and transfers between two hosts.
|
||||
@@ -0,0 +1,28 @@
|
||||
# Contributing to File Manager
|
||||
|
||||
## Development
|
||||
|
||||
```bash
|
||||
npm run build # build into dist/
|
||||
npm run test # run this plugin's tests
|
||||
npm run typecheck # type-check this plugin
|
||||
npm run validate # check manifest.json
|
||||
npm run format # format the code with Prettier
|
||||
```
|
||||
|
||||
## Settings
|
||||
|
||||
### User
|
||||
|
||||
- **Simultaneous File Transfers:** how many uploads and downloads run at once
|
||||
- **Confirm before moving files to trash:** ask before a delete. Permanent deletes always ask
|
||||
|
||||
### Host
|
||||
|
||||
- **Enable File Manager:** show the file manager for this host
|
||||
- **Default Path:** the folder to open first
|
||||
- **SCP Legacy Mode:** use SCP for hosts without a working SFTP server
|
||||
|
||||
## Permissions
|
||||
|
||||
- `file-manager.use`: browse, edit and transfer files. Admins and users have it by default.
|
||||
@@ -1,38 +1,48 @@
|
||||
# File Manager
|
||||
<div align="center">
|
||||
|
||||
Browse, edit and transfer files over SFTP, including between two hosts.
|
||||
<img src="https://raw.githubusercontent.com/Termix-SSH/Termix/main/public/icon.svg" width="120" height="120" alt="Termix Logo" />
|
||||
|
||||
<h1>File Manager</h1>
|
||||
|
||||
<p>Browse, edit and move files on your servers over SFTP</p>
|
||||
|
||||
</div>
|
||||
|
||||
<br />
|
||||
|
||||
## Overview
|
||||
|
||||
File Manager lets you work with the files on your hosts over SFTP, and copy files straight from one server to another.
|
||||
|
||||
<br />
|
||||
|
||||
## Features
|
||||
|
||||
- Browse, upload, download, rename, move and delete files over SFTP.
|
||||
- Edit files in a built-in code editor.
|
||||
- Transfer files between two hosts in the SFTP tab.
|
||||
- Restore deleted files from the trash until they are cleaned up.
|
||||
- Save bookmarks to folders you use often.
|
||||
- Browse local files in the desktop app.
|
||||
- Browse, upload, download, rename, move and delete files, with sudo support
|
||||
- Edit files in a built-in code editor
|
||||
- Preview images, PDFs, audio and video
|
||||
- A trash you can restore deleted files from
|
||||
- Copy files between two hosts, with the fastest route picked for you and an integrity check
|
||||
- A side by side local and remote view in the desktop app
|
||||
|
||||
## Settings
|
||||
|
||||
### Host
|
||||
|
||||
- Enable File Manager: show the file manager for this host.
|
||||
- Default Path: the folder to open first.
|
||||
- SCP Legacy Mode: use SCP for hosts without a working SFTP server.
|
||||
|
||||
## Permissions
|
||||
|
||||
- `file-manager.use`: Browse, edit and transfer files. Admins and users have it by default.
|
||||
<br />
|
||||
|
||||
## Services
|
||||
|
||||
Provides to other plugins:
|
||||
|
||||
- `files.sftp`: read and write files on a host.
|
||||
- `files.sftp`: read and write files on a host
|
||||
|
||||
## Development
|
||||
<br />
|
||||
|
||||
```bash
|
||||
npm run build # build into dist/
|
||||
npm run test # run this plugin's tests
|
||||
npm run typecheck # type-check this plugin
|
||||
```
|
||||
## Support
|
||||
|
||||
To report a bug or request a feature, open a [support ticket](https://github.com/Termix-SSH/Support/issues/new/choose). You need to be logged in to GitHub. Please be as detailed as possible, preferably in English.
|
||||
|
||||
For discussions and questions, join the [Discord](https://discord.gg/jVQGdvHDrf) server.
|
||||
|
||||
<br />
|
||||
|
||||
## License
|
||||
|
||||
Distributed under the Apache License Version 2.0. See [LICENSE](https://github.com/Termix-SSH/Termix/blob/main/LICENSE) for more information.
|
||||
@@ -2,16 +2,16 @@
|
||||
"id": "file-manager",
|
||||
"name": "File Manager",
|
||||
"version": "1.0.0",
|
||||
"description": "Browse, edit and transfer files over SFTP, including between two hosts.",
|
||||
"description": "Browse, edit and move files over SFTP, including straight from one server to another.",
|
||||
"author": {
|
||||
"name": "Termix"
|
||||
},
|
||||
"license": "MIT",
|
||||
"license": "Apache-2.0",
|
||||
"repository": "https://github.com/Termix-SSH/Termix",
|
||||
"category": "Files & Transfer",
|
||||
"icon": "FolderSearch",
|
||||
"engine": {
|
||||
"termix": ">=2.9.0",
|
||||
"termix": ">=26.10.0",
|
||||
"api": "1"
|
||||
},
|
||||
"capabilities": [
|
||||
|
||||
@@ -7,7 +7,10 @@
|
||||
"build": "termix-plugin build",
|
||||
"test": "termix-plugin test",
|
||||
"typecheck": "tsc -p .",
|
||||
"validate": "termix-plugin validate"
|
||||
"validate": "termix-plugin validate",
|
||||
"format": "prettier --write .",
|
||||
"format:check": "prettier --check .",
|
||||
"prepare": "husky || true"
|
||||
},
|
||||
"dependencies": {
|
||||
"@codemirror/autocomplete": "^6.20.3",
|
||||
@@ -33,6 +36,8 @@
|
||||
"remark-gfm": "^4.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@commitlint/cli": "^21.2.2",
|
||||
"@commitlint/config-conventional": "^21.2.0",
|
||||
"@termix/plugin-sdk": "^1.0.0",
|
||||
"@testing-library/dom": "^10.4.2",
|
||||
"@testing-library/jest-dom": "^7.0.1",
|
||||
@@ -42,7 +47,10 @@
|
||||
"@types/react": "^19.2.18",
|
||||
"@types/react-dom": "^19.2.4",
|
||||
"better-sqlite3": "^13.0.3",
|
||||
"husky": "^9.1.7",
|
||||
"jsdom": "^30.0.1",
|
||||
"lint-staged": "^17.2.0",
|
||||
"prettier": "3.9.9",
|
||||
"vitest": "^4.1.11"
|
||||
},
|
||||
"peerDependencies": {
|
||||
@@ -57,5 +65,10 @@
|
||||
"react-i18next": "^17.0.14",
|
||||
"sonner": "^2.0.8",
|
||||
"ssh2": "^1.17.0"
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.{ts,tsx,js,jsx,mjs,cjs,json,css,md}": [
|
||||
"prettier --write"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"extends": ["@commitlint/config-conventional"],
|
||||
"rules": {
|
||||
"type-enum": [
|
||||
2,
|
||||
"always",
|
||||
[
|
||||
"feat",
|
||||
"fix",
|
||||
"docs",
|
||||
"style",
|
||||
"refactor",
|
||||
"perf",
|
||||
"test",
|
||||
"chore",
|
||||
"revert"
|
||||
]
|
||||
],
|
||||
"subject-case": [0]
|
||||
}
|
||||
}
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
custom: https://donate.termix.site/
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
# Overview
|
||||
|
||||
_Short summary of what this PR does_
|
||||
|
||||
- [ ] Added: ...
|
||||
- [ ] Updated: ...
|
||||
- [ ] Removed: ...
|
||||
- [ ] Fixed: ...
|
||||
|
||||
# Changes Made
|
||||
|
||||
_Detailed explanation of changes (if needed)_
|
||||
|
||||
- ...
|
||||
|
||||
# Related Issues
|
||||
|
||||
_Link any issues this PR addresses_
|
||||
|
||||
- Closes #ISSUE_NUMBER
|
||||
- Related to #ISSUE_NUMBER
|
||||
|
||||
# Screenshots / Demos
|
||||
|
||||
_(Optional: add before/after screenshots, GIFs, or console output)_
|
||||
|
||||
# Checklist
|
||||
|
||||
- [ ] Code follows project style guidelines
|
||||
- [ ] Supports mobile and desktop UI/app (if applicable)
|
||||
- [ ] Added the change to `CHANGELOG.json`
|
||||
- [ ] `npm run test`, `npm run typecheck` and `npm run validate` pass
|
||||
- [ ] I have read `CONTRIBUTING.md`
|
||||
- [ ] This is not a translation request. See [docs](https://docs.termix.site/translations)
|
||||
@@ -0,0 +1,9 @@
|
||||
node_modules
|
||||
dist
|
||||
coverage
|
||||
*.log
|
||||
.env
|
||||
*.tmxplug
|
||||
*.tmxplug.sig
|
||||
termix-plugin-signing.key
|
||||
.termix-tables-*
|
||||
@@ -0,0 +1 @@
|
||||
npx --no -- commitlint --edit "$1"
|
||||
@@ -0,0 +1 @@
|
||||
npx lint-staged
|
||||
@@ -0,0 +1,4 @@
|
||||
dist
|
||||
coverage
|
||||
node_modules
|
||||
package-lock.json
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"semi": true,
|
||||
"singleQuote": false,
|
||||
"tabWidth": 2,
|
||||
"trailingComma": "all",
|
||||
"printWidth": 80,
|
||||
"arrowParens": "always",
|
||||
"endOfLine": "lf"
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/Termix-SSH/Termix/main/packages/plugin-sdk/schema/changelog.schema.json",
|
||||
"releases": [
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"changes": [
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Group hosts by hand or with tag rules, so new hosts join on their own"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Run one command on every host and see each result"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Install, remove or upgrade packages across the fleet"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Push and pull files on every host"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Collect an inventory of OS, kernel, architecture and uptime"
|
||||
},
|
||||
{
|
||||
"type": "added",
|
||||
"text": "Share a fleet with users or roles"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
# Changelog
|
||||
|
||||
## 1.0.0
|
||||
|
||||
First release, bundled with Termix 2.9.0.
|
||||
|
||||
Groups hosts into fleets, either by hand or by tag. Run commands, package actions and file transfers on every host in a fleet at once, and see an inventory of its hosts.
|
||||
@@ -0,0 +1,17 @@
|
||||
# Contributing to Fleets
|
||||
|
||||
## Development
|
||||
|
||||
```bash
|
||||
npm run build # build into dist/
|
||||
npm run test # run this plugin's tests
|
||||
npm run typecheck # type-check this plugin
|
||||
npm run validate # check manifest.json
|
||||
npm run format # format the code with Prettier
|
||||
```
|
||||
|
||||
## Permissions
|
||||
|
||||
- `fleets.view`: see fleets, their hosts and their inventory. Admins and users have it by default.
|
||||
- `fleets.manage`: create, edit, delete and share fleets. Admins and users have it by default.
|
||||
- `fleets.execute`: run commands, package actions and file transfers on a fleet. Admins and users have it by default.
|
||||
+36
-20
@@ -1,32 +1,48 @@
|
||||
# Fleets
|
||||
<div align="center">
|
||||
|
||||
Group hosts into fleets and run commands, package actions and file transfers on all of them at once.
|
||||
<img src="https://raw.githubusercontent.com/Termix-SSH/Termix/main/public/icon.svg" width="120" height="120" alt="Termix Logo" />
|
||||
|
||||
<h1>Fleets</h1>
|
||||
|
||||
<p>Run commands and actions across many hosts at once</p>
|
||||
|
||||
</div>
|
||||
|
||||
<br />
|
||||
|
||||
## Overview
|
||||
|
||||
Fleets groups your hosts so you can act on all of them together.
|
||||
|
||||
<br />
|
||||
|
||||
## Features
|
||||
|
||||
- Group hosts into fleets by hand or by tag. Hosts with a matching tag join on their own.
|
||||
- Run a command on every host in a fleet at once and see each result.
|
||||
- Run package actions, like updates, across a fleet.
|
||||
- Transfer files to and from every host in a fleet.
|
||||
- See an inventory of the hosts in a fleet.
|
||||
- Share fleets with other users or roles.
|
||||
- Group hosts by hand or with tag rules, so new hosts join on their own
|
||||
- Run one command on every host and see each result
|
||||
- Install, remove or upgrade packages across the fleet
|
||||
- Push and pull files on every host
|
||||
- Collect an inventory of OS, kernel, architecture and uptime
|
||||
- Share a fleet with users or roles
|
||||
|
||||
## Permissions
|
||||
|
||||
- `fleets.view`: See fleets, their hosts and inventory. Admins and users have it by default.
|
||||
- `fleets.manage`: Create, edit, delete and share fleets. Admins and users have it by default.
|
||||
- `fleets.execute`: Run commands, package actions and file transfers on a fleet. Admins and users have it by default.
|
||||
<br />
|
||||
|
||||
## Services
|
||||
|
||||
Provides to other plugins:
|
||||
|
||||
- `fleets.access`: list fleets and run actions on them.
|
||||
- `fleets.access`: list fleets and run actions on them
|
||||
|
||||
## Development
|
||||
<br />
|
||||
|
||||
```bash
|
||||
npm run build # build into dist/
|
||||
npm run test # run this plugin's tests
|
||||
npm run typecheck # type-check this plugin
|
||||
```
|
||||
## Support
|
||||
|
||||
To report a bug or request a feature, open a [support ticket](https://github.com/Termix-SSH/Support/issues/new/choose). You need to be logged in to GitHub. Please be as detailed as possible, preferably in English.
|
||||
|
||||
For discussions and questions, join the [Discord](https://discord.gg/jVQGdvHDrf) server.
|
||||
|
||||
<br />
|
||||
|
||||
## License
|
||||
|
||||
Distributed under the Apache License Version 2.0. See [LICENSE](https://github.com/Termix-SSH/Termix/blob/main/LICENSE) for more information.
|
||||
@@ -6,12 +6,12 @@
|
||||
"author": {
|
||||
"name": "Termix"
|
||||
},
|
||||
"license": "MIT",
|
||||
"license": "Apache-2.0",
|
||||
"repository": "https://github.com/Termix-SSH/Termix",
|
||||
"category": "Infrastructure",
|
||||
"icon": "Boxes",
|
||||
"engine": {
|
||||
"termix": ">=2.9.0",
|
||||
"termix": ">=26.10.0",
|
||||
"api": "1"
|
||||
},
|
||||
"capabilities": [
|
||||
|
||||
@@ -7,7 +7,10 @@
|
||||
"build": "termix-plugin build",
|
||||
"test": "termix-plugin test",
|
||||
"typecheck": "tsc -p .",
|
||||
"validate": "termix-plugin validate"
|
||||
"validate": "termix-plugin validate",
|
||||
"format": "prettier --write .",
|
||||
"format:check": "prettier --check .",
|
||||
"prepare": "husky || true"
|
||||
},
|
||||
"dependencies": {
|
||||
"clsx": "^2.1.1",
|
||||
@@ -16,12 +19,17 @@
|
||||
"tailwind-merge": "^3.5.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@commitlint/cli": "^21.2.2",
|
||||
"@commitlint/config-conventional": "^21.2.0",
|
||||
"@termix/plugin-sdk": "^1.0.0",
|
||||
"@types/node": "^26.2.0",
|
||||
"@types/react": "^19.2.18",
|
||||
"@types/react-dom": "^19.2.4",
|
||||
"better-sqlite3": "^13.0.3",
|
||||
"husky": "^9.1.7",
|
||||
"jsdom": "^30.0.1",
|
||||
"lint-staged": "^17.2.0",
|
||||
"prettier": "3.9.9",
|
||||
"vitest": "^4.1.11"
|
||||
},
|
||||
"peerDependencies": {
|
||||
@@ -32,5 +40,10 @@
|
||||
"react": "^19.2.8",
|
||||
"sonner": "^2.0.8",
|
||||
"ssh2": "^1.17.0"
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.{ts,tsx,js,jsx,mjs,cjs,json,css,md}": [
|
||||
"prettier --write"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"extends": ["@commitlint/config-conventional"],
|
||||
"rules": {
|
||||
"type-enum": [
|
||||
2,
|
||||
"always",
|
||||
[
|
||||
"feat",
|
||||
"fix",
|
||||
"docs",
|
||||
"style",
|
||||
"refactor",
|
||||
"perf",
|
||||
"test",
|
||||
"chore",
|
||||
"revert"
|
||||
]
|
||||
],
|
||||
"subject-case": [0]
|
||||
}
|
||||
}
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
custom: https://donate.termix.site/
|
||||
Loaded 100 of 500 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user