local-kanban 1.10.0 → 1.11.0

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/CHANGELOG.md CHANGED
@@ -3,6 +3,18 @@
3
3
  Notable changes, newest first. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
4
4
  and the project uses [semantic versioning](https://semver.org/).
5
5
 
6
+ ## [1.11.0]
7
+
8
+ ### Fixed
9
+
10
+ - **The server fields say which side they are about.** "SSH host" and "Server path" gave no hint of
11
+ whether they meant this computer or the machine you deploy to — a fair question, and the owner of
12
+ the board asked it. A line above the group now answers it, and the ssh field says the part you
13
+ cannot guess: the user, port and key come from your own `~/.ssh/config`, and the board stores no
14
+ secrets. Leaving them empty is a normal state — the project simply stays local. On a Russian board
15
+ the ssh placeholder used to stay in English, and the server path field on the project page had no
16
+ example at all.
17
+
6
18
  ## [1.10.0]
7
19
 
8
20
  ### Fixed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "local-kanban",
3
- "version": "1.10.0",
3
+ "version": "1.11.0",
4
4
  "license": "MIT",
5
5
  "author": "Dannylamao",
6
6
  "repository": {
package/public/js/core.js CHANGED
@@ -413,6 +413,14 @@ const I18N_RU = {
413
413
  'the skill is not installed — the file will be created on save': 'скилл не установлен — файл появится при сохранении',
414
414
  'the update did not go through': 'обновиться не удалось',
415
415
  'Run it yourself': 'Выполни сам',
416
+ 'Below is about the SERVER this project is deployed to, not about this computer. Empty means the project stays local.': 'Ниже — про СЕРВЕР, на который выкатывается проект, а не про этот компьютер. Пусто — проект остаётся локальным.',
417
+ 'user, port and key come from your ~/.ssh/config — the board keeps no secrets': 'пользователь, порт и ключ берутся из твоего ~/.ssh/config — секретов доска не хранит',
418
+ '“Local folder” is on this computer. The rest describes the server this project is deployed to — leave it empty and the project simply stays local.': '«Папка на компьютере» — это здесь, на твоей машине. Остальное про сервер, на который выкатывается проект: оставь пустым — и проект просто останется локальным.',
419
+ 'the board runs ssh <host> — user, port and key come from your ~/.ssh/config, no secrets are kept here': 'доска выполняет ssh <хост> — пользователь, порт и ключ берутся из твоего ~/.ssh/config, секретов доска не хранит',
420
+ 'where the project lies ON THE SERVER — the deploy pulls into this folder': 'где проект лежит НА СЕРВЕРЕ — именно в эту папку деплой делает git pull',
421
+ 'where the code lies on this computer — Claude edits and commits it here': 'где код лежит на этом компьютере — здесь Claude его правит и коммитит',
422
+ 'restarted on the server after a deploy; empty means there is nothing to restart': 'что перезапустить на сервере после выкатки; пусто — перезапускать нечего',
423
+ 'opened after a deploy to check the site answers': 'открывается после выкатки, чтобы убедиться, что сайт отвечает',
416
424
  'The same in the README, in more detail': 'То же самое в README, подробнее',
417
425
  'the board is not allowed to do this — the command is the same one it just tried': 'у доски нет на это прав — команда та же, что она только что пробовала',
418
426
  'Your tasks are not touched: they live in the data directory, apart from the code.': 'Задачи не пострадают: они лежат в папке данных, отдельно от кода.',
@@ -32,7 +32,7 @@ export async function renderProjectSettings(force) {
32
32
  if (!host) return;
33
33
  const p = currentProject();
34
34
  if (!p) {
35
- host.innerHTML = `<div class="ps-wrap"><div class="muted">${tr('This project is gone')}</div></div>`;
35
+ host.innerHTML = `<div class="ps-wrap"><div class="muted">${tr('This project is gone')}</div></div>`;
36
36
  return;
37
37
  }
38
38
  if (!force && host.dataset.slug === p.slug) return;
@@ -65,12 +65,18 @@ export async function renderProjectSettings(force) {
65
65
 
66
66
  <div class="panel ps-block">
67
67
  <div class="panel-h">${tr('Paths & deploy')}</div>
68
+ <div class="kbh-note muted">${tr('“Local folder” is on this computer. The rest describes the server this project is deployed to — leave it empty and the project simply stays local.')}</div>
68
69
  <div class="ps-grid">
69
- <label class="pp-field">${tr('Local folder')}<input id="ps-path" type="text" placeholder="${tr('/path/to/the/folder — may be empty')}"></label>
70
- <label class="pp-field">${tr('Domain')}<input id="ps-domain" type="text"></label>
71
- <label class="pp-field">${tr('SSH host')}<input id="ps-server" type="text" placeholder="${tr('ssh alias or address')}"></label>
72
- <label class="pp-field">${tr('Server path')}<input id="ps-spath" type="text"></label>
73
- <label class="pp-field">${tr('pm2 processes (comma-separated)')}<input id="ps-pm2" type="text"></label>
70
+ <label class="pp-field">${tr('Local folder')}<input id="ps-path" type="text" placeholder="${tr('/path/to/the/folder — may be empty')}">
71
+ <small class="ps-hint">${tr('where the code lies on this computer — Claude edits and commits it here')}</small></label>
72
+ <label class="pp-field">${tr('Domain')}<input id="ps-domain" type="text" placeholder="example.com">
73
+ <small class="ps-hint">${tr('opened after a deploy to check the site answers')}</small></label>
74
+ <label class="pp-field">${tr('SSH host')}<input id="ps-server" type="text" placeholder="${tr('ssh alias or address')}">
75
+ <small class="ps-hint">${tr('the board runs ssh &lt;host&gt; — user, port and key come from your ~/.ssh/config, no secrets are kept here')}</small></label>
76
+ <label class="pp-field">${tr('Server path')}<input id="ps-spath" type="text" placeholder="/var/www/my-project">
77
+ <small class="ps-hint">${tr('where the project lies ON THE SERVER — the deploy pulls into this folder')}</small></label>
78
+ <label class="pp-field">${tr('pm2 processes (comma-separated)')}<input id="ps-pm2" type="text" placeholder="my-api, my-web">
79
+ <small class="ps-hint">${tr('restarted on the server after a deploy; empty means there is nothing to restart')}</small></label>
74
80
  <div class="pp-field">${tr('Deploy skill')}
75
81
  <div class="kbsel" id="ps-skill"></div>
76
82
  <small class="ps-hint" id="ps-skill-hint">${tr('the skill Claude follows to ship this project; “deploy” is the shared one. A new one is created in Settings → Skills.')}</small>
@@ -420,10 +420,12 @@ function openProjectWizard() {
420
420
  <button type="button" class="btn-ghost" id="wiz-browse">${tr('Choose…')}</button>
421
421
  </div>
422
422
  <div id="wiz-browser" class="wiz-browser hidden"></div>
423
- <input id="wiz-git" type="text" class="hidden" placeholder="git@github.com:me/repo.git or https://…"></div>`;
423
+ <input id="wiz-git" type="text" class="hidden" placeholder="git@github.com:me/repo.git"></div>`;
424
424
  }
425
425
  if (withServer) {
426
- html += `<label class="pp-field">${tr('SSH host')}<input id="wiz-server" type="text" placeholder="host for ssh (keys in ~/.ssh/config)"></label>`
426
+ html += `<div class="kbh-note muted">${tr('Below is about the SERVER this project is deployed to, not about this computer. Empty means the project stays local.')}</div>`
427
+ + `<label class="pp-field">${tr('SSH host')}<input id="wiz-server" type="text" placeholder="${tr('ssh alias or address')}">`
428
+ + `<small class="pp-hint">${tr('user, port and key come from your ~/.ssh/config — the board keeps no secrets')}</small></label>`
427
429
  + `<label class="pp-field">${tr('Server path')}<input id="wiz-spath" type="text" placeholder="/var/www/my-project"></label>`
428
430
  + `<label class="pp-field">${tr('pm2 processes (comma-separated)')}<input id="wiz-pm2" type="text" placeholder="my-api, my-web"></label>`
429
431
  + `<label class="pp-field">${tr('Domain (to verify after deploy)')}<input id="wiz-domain" type="text" placeholder="example.com"></label>`
package/public/style.css CHANGED
@@ -614,7 +614,7 @@ body.dragging-board .col-add-ghost { display: none; }
614
614
  .modal-actions { display: flex; gap: 8px; }
615
615
 
616
616
  .modal.wiz { width: 400px; max-width: calc(100vw - 32px); }
617
- .wiz-body { display: flex; flex-direction: column; gap: 9px; max-height: calc(100vh - 190px); overflow-y: auto; }
617
+ .wiz-body { display: flex; flex-direction: column; gap: 8px; max-height: calc(100vh - 170px); overflow-y: auto; }
618
618
  .wiz-type {
619
619
  display: flex; flex-direction: column; gap: 3px; text-align: left; padding: 10px 12px;
620
620
  border: 1px solid var(--border); border-radius: 9px; background: var(--panel); cursor: pointer; font: inherit; color: var(--text);