@iwonz/ywtc 4.0.1 → 4.1.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
@@ -2,6 +2,20 @@
2
2
 
3
3
  Notable changes to `ywtc` are documented in this file. Versions follow [Semantic Versioning](https://semver.org/).
4
4
 
5
+ ## [4.1.0](https://github.com/iwonz/ywtc/compare/v4.0.1...v4.1.0) (2026-10-16)
6
+
7
+
8
+ ### Features
9
+
10
+ * **cli:** add interactive migration wizard ([b185d42](https://github.com/iwonz/ywtc/commit/b185d421ec1ed46643a9e0d899a4d8c47e259bd5))
11
+ * **reports:** replace report UI with Mantine ([8ca093d](https://github.com/iwonz/ywtc/commit/8ca093de620fdfb762a6946a04ee868c14a11b0f))
12
+
13
+
14
+ ### Maintenance
15
+
16
+ * **homebrew:** update formula to v4.0.1 ([e3d7aa6](https://github.com/iwonz/ywtc/commit/e3d7aa6450d78c23fbab33b6ba14d96baf919f81))
17
+ * **release:** retry validated release workflow ([b1fca35](https://github.com/iwonz/ywtc/commit/b1fca35926dccb8616d04d4b5901263f99f2ec74))
18
+
5
19
  ## [4.0.1](https://github.com/iwonz/ywtc/compare/v4.0.0...v4.0.1) (2026-10-16)
6
20
 
7
21
 
package/README.md CHANGED
@@ -66,11 +66,9 @@ ywtc update --install --via brew # явно через Homebrew
66
66
 
67
67
  ## Минимальный сценарий
68
68
 
69
- - [ ] Установите CLI одним из способов выше.
70
- - [ ] Запустите `ywtc init --interactive` и настройте обязательные подключения Yandex Wiki и Confluence.
71
- - [ ] Дождитесь read-only проверки API и авторизации: конфиг сохраняется только после её успеха.
72
- - [ ] Выполните предложенную wizard команду первой миграции с `--dry-run`, подставив полные URL страниц.
73
- - [ ] Проверьте план и повторите команду без `--dry-run`.
69
+ - [ ] Установите `ywtc` одним из способов выше.
70
+ - [ ] Выполните `ywtc init --interactive`.
71
+ - [ ] Выполните `ywtc migrate --interactive`.
74
72
 
75
73
  ## Конфигурация
76
74
 
@@ -84,6 +82,8 @@ ywtc update --install --via brew # явно через Homebrew
84
82
 
85
83
  `ywtc init --interactive` требует TTY, проводит через обязательные настройки обоих провайдеров, скрывает токены и делает только read-only connection probes. Проверка подтверждает API и авторизацию, но не права конкретных страниц: они проверяются `doctor` или `migrate`. Для существующего workspace доступны изменение выбранных профилей, выход без изменений и настройка с нуля с backup прежнего YAML в `.states/backups/`; state не удаляется.
86
84
 
85
+ `ywtc migrate --interactive` использует тот же порядок выбора workspace, последовательно настраивает source, destination, scope, комментарии и файловый ZIP, а затем по умолчанию запускает dry-run. После него можно открыть отчёт, изменить параметры, повторить проверку или явно начать live-перенос. При неполном inventory, root error, `failed`, `blocked` или настоящем `conflict` live-действие скрывается.
86
+
87
87
  Обычный `ywtc init` без wizard создаёт безопасный пустой шаблон для автоматизации или ручного управления. Полный пример с Yandex Wiki, Confluence Data Center, Confluence Cloud и сетевыми лимитами: [`ywtc.config.example.yaml`](ywtc.config.example.yaml).
88
88
 
89
89
  ### Поля профилей
@@ -165,7 +165,8 @@ Confluence Server, Data Center Basic Auth и OAuth app-flow не поддерж
165
165
  | --- | --- |
166
166
  | `ywtc init [--workdir <path>] [--interactive]` | Создать шаблон либо настроить и проверить подключения в TTY wizard |
167
167
  | `ywtc doctor [options]` | Проверить workspace; с source и destination выполнить read-only preflight |
168
- | `ywtc migrate --source <locator> --destination <locator\|directory> [options]` | Перенести или экспортировать выбранный граф страниц |
168
+ | `ywtc migrate --interactive` | Выбрать параметры, выполнить dry-run и явно продолжить live-перенос в TTY wizard |
169
+ | `ywtc migrate --source <locator> --destination <locator\|directory> [options]` | Неинтерактивно перенести или экспортировать выбранный граф страниц |
169
170
  | `ywtc reports list [--workdir <path>]` | Показать локальные отчёты от новых к старым |
170
171
  | `ywtc reports open [run-id\|last] [--workdir <path>]` | Открыть выбранный отчёт; `last` или отсутствие аргумента открывает последний корректный |
171
172
  | `ywtc update [--install] [--via npm\|brew]` | Проверить или установить обновление безопасным для текущего канала способом |
@@ -174,28 +175,30 @@ Confluence Server, Data Center Basic Auth и OAuth app-flow не поддерж
174
175
 
175
176
  ### Опции
176
177
 
177
- | Опция | Команды | Обязательность / значения | Назначение |
178
- | --- | --- | --- | --- |
179
- | `--source <value>` | `doctor`, `migrate` | обязательно для `migrate`; в `doctor` вместе с destination | URL, page ID или Yandex slug |
180
- | `--destination <value>` | `doctor`, `migrate` | обязательно для `migrate`; в `doctor` вместе с source | Родительская страница или каталог экспорта |
181
- | `--source-profile <name>` | `doctor`, `migrate` | при неоднозначном коротком locator | Профиль source из `connections` |
182
- | `--destination-profile <name>` | `doctor`, `migrate` | при неоднозначном remote locator | Профиль destination; несовместим с файловым экспортом |
183
- | `--scope <mode>` | `doctor`, `migrate` | `page`, `subtree` (default), `linked` | Граница выбора страниц |
184
- | `--source-status <status>` | `doctor`, `migrate` | `all` (default) или `current` | Статус автоматически обнаруживаемых страниц; явно заданный root включается всегда |
185
- | `--comments`, `--no-comments` | `doctor`, `migrate` | комментарии включены по умолчанию | Архивировать page comments или полностью отключить их чтение и запись |
186
- | `--format <format>` | `doctor`, `migrate` | `markdown` или `html` | Делает destination файловым каталогом |
187
- | `--archive` | `migrate` | только вместе с `--format` | Дополнительно создать ZIP рядом с каталогом |
188
- | `--dry-run` | `migrate` | default `false` | Discovery и план без записи в destination |
189
- | `--fresh` | `migrate` | default `false` | Игнорировать mappings текущего state |
190
- | `--open-report` | `migrate` | default `false` | Открыть итоговый HTML-отчёт; ошибка браузера не меняет результат миграции |
191
- | `--concurrency <n>` | `migrate` | `1..64`; иначе config default | Общая параллельность; профильные лимиты сохраняются |
192
- | `--state <path>` | `migrate` | внутри workspace | Явный state вместо автоматического |
193
- | `--workdir <path>` | `init`, `doctor`, `migrate`, `reports` | config в CWD или `~/.ywtc` | Явно выбрать workspace; поддерживается `~/...` |
194
- | `--interactive` | `init` | требует stdin/stdout TTY | Обязательный wizard Yandex Wiki + Confluence; без частично сохранённого конфига |
195
- | `--install` | `update` | default `false` | Установить найденное обновление |
196
- | `--via <channel>` | `update` | `npm` или `brew` | Явно выбрать совместимый канал обновления |
197
- | `-h`, `--help` | CLI и команды | необязательно | Справка |
198
- | `-v`, `--version` | CLI | необязательно | Версия |
178
+ | Полная опция | Short | Команды | Обязательность / значения | Назначение |
179
+ | --- | --- | --- | --- | --- |
180
+ | `--interactive` | `-i` | `init`, `migrate` | требует stdin/stdout TTY | Запустить обязательный мастер настройки или миграции |
181
+ | `--workdir <path>` | `-w` | `init`, `doctor`, `migrate`, `reports` | config в CWD или `~/.ywtc` | Явно выбрать workspace; поддерживается `~/...` |
182
+ | `--source <value>` | `-s` | `doctor`, `migrate` | обязательно для неинтерактивного `migrate`; в `doctor` вместе с destination | URL, page ID или Yandex slug |
183
+ | `--destination <value>` | `-d` | `doctor`, `migrate` | обязательно для неинтерактивного `migrate`; в `doctor` вместе с source | Родительская страница или каталог экспорта |
184
+ | `--source-profile <name>` | `-S` | `doctor`, `migrate` | при неоднозначном коротком locator | Профиль source из `connections` |
185
+ | `--destination-profile <name>` | `-D` | `doctor`, `migrate` | при неоднозначном remote locator | Профиль destination; несовместим с файловым экспортом |
186
+ | `--scope <mode>` | `-m` | `doctor`, `migrate` | `page`, `subtree` (default), `linked` | Граница выбора страниц |
187
+ | `--source-status <status>` | `-t` | `doctor`, `migrate` | `all` (default) или `current` | Статус автоматически обнаруживаемых страниц; явно заданный root включается всегда |
188
+ | `--comments` / `--no-comments` | `-C` / `-N` | `doctor`, `migrate` | комментарии включены по умолчанию | Архивировать page comments или полностью отключить их чтение и запись |
189
+ | `--format <format>` | `-f` | `doctor`, `migrate` | `markdown` или `html` | Делает destination файловым каталогом |
190
+ | `--archive` | `-a` | `migrate` | только с файловым destination | Дополнительно создать ZIP рядом с каталогом |
191
+ | `--dry-run` | `-n` | `migrate` | default `false`; default-действие wizard | Discovery и план без записи в destination |
192
+ | `--fresh` | `-F` | `migrate` | default `false` | Игнорировать mappings текущего state |
193
+ | `--open-report` | `-o` | `migrate` | default `false` | Открыть итоговый HTML-отчёт; ошибка браузера не меняет результат миграции |
194
+ | `--concurrency <n>` | `-j` | `migrate` | `1..64`; иначе config default | Общая параллельность; профильные лимиты сохраняются |
195
+ | `--state <path>` | `-r` | `migrate` | внутри workspace | Явный state вместо автоматического |
196
+ | `--install` | `-i` | `update` | default `false` | Установить найденное обновление |
197
+ | `--via <channel>` | `-c` | `update` | `npm` или `brew` | Явно выбрать совместимый канал обновления |
198
+ | `--help` | `-h` | CLI и команды | необязательно | Справка |
199
+ | `--version` | `-v` | CLI | необязательно | Версия |
200
+
201
+ Одинаковые short-алиасы относятся только к своей команде: например, `migrate -i` запускает wizard, а `update -i` устанавливает обновление. В интерактивном режиме переданные опции становятся редактируемыми начальными значениями; без него `source` и `destination` обязательны.
199
202
 
200
203
  ### Локаторы
201
204
 
@@ -223,15 +226,10 @@ ywtc migrate --source https://wiki.example.com/team/start \
223
226
  --destination https://confluence.example.com/confluence/pages/viewpage.action?pageId=123 \
224
227
  --scope linked
225
228
 
226
- # Перенести только исходную страницу
227
- ywtc migrate --source https://wiki.example.com/team/start \
228
- --destination https://confluence.example.com/confluence/pages/viewpage.action?pageId=123 \
229
- --scope page
230
-
231
- # Создать автономный HTML-экспорт
229
+ # Создать автономный HTML-экспорт и ZIP
232
230
  ywtc migrate --source https://wiki.example.com/team/start \
233
231
  --destination ./exports/knowledge-base \
234
- --format html
232
+ --format html --archive
235
233
 
236
234
  # Открыть последний корректный отчёт
237
235
  ywtc reports open last
@@ -275,7 +273,9 @@ Markdown создаёт `index.md`, `pages/`, `attachments/`, `.ywtc-export.json
275
273
 
276
274
  Каждый запуск создаёт `<workdir>/.states/reports/<run-id>/index.html` и очищенный `report.json`, затем печатает run ID, `file://` URL и команду повторного открытия. `--open-report` открывает отчёт сразу; `ywtc reports list` показывает историю, `ywtc reports open <run-id>` — выбранный запуск, а `ywtc reports open last` или `ywtc reports open` — последний корректный.
277
275
 
278
- Автономный HTML-отчёт работает без сети. Единый верхний блок объединяет статус и параметры запуска, progress, source/destination-сводку страниц, файлов, комментариев, объёма и качества, result/state/report paths и скачивание `report.json`. Ниже находится раскрытое дерево исходной иерархии, включая исключённые страницы; доступны поиск, фильтры проблем и прямые ссылки на source/destination. Строка страницы открывает детали файлов, комментариев, родителей, причин и рекомендуемых действий, а вкладка сравнения показывает sandboxed source/destination preview. Ошибки и зависимые `blocked` объекты видны в подсвеченном дереве и во вкладке проблем конкретной страницы. RU/EN и режимы system/light/dark переключаются компактными кнопками-иконками; выбор сохраняется локально. Интерфейс адаптирован для мобильного экрана.
276
+ Автономный HTML-отчёт работает без сети. Компактный Mantine-интерфейс объединяет статус, progress, source/destination-сводку и ссылки на результат, state и `report.json`. Нулевые необязательные счётчики, пустые секции сводки и пустые вкладки деталей скрываются; обязательные totals, статусы и идентификаторы остаются видимыми.
277
+
278
+ Ниже находится раскрытое дерево исходной иерархии, включая исключённые страницы; доступны поиск, фильтры проблем и прямые ссылки на source/destination. Строка страницы открывает только доступные вкладки файлов, комментариев, сравнения и проблем. Ошибки и зависимые `blocked` объекты подсвечиваются в дереве и объясняются в деталях. RU/EN и system/light/dark переключаются иконками; выбор сохраняется локально. Интерфейс адаптирован для мобильного экрана.
279
279
 
280
280
  HTML/JSON, итог терминала и `reports list` используют одинаковые счётчики. Известный source volume отделён от подтверждённых transferred bytes; неизвестные размеры отмечены явно. `report.json` не содержит содержимое страниц, тексты комментариев или preview HTML — они остаются только в локальном `index.html`.
281
281
 
@@ -23,8 +23,8 @@ export type CliCommand = {
23
23
  format?: ExportFormat;
24
24
  } | {
25
25
  command: 'migrate';
26
- source: string;
27
- destination: string;
26
+ source?: string;
27
+ destination?: string;
28
28
  sourceProfile?: string;
29
29
  destinationProfile?: string;
30
30
  scope: TransferScope;
@@ -38,6 +38,7 @@ export type CliCommand = {
38
38
  concurrency?: number;
39
39
  stateFilename?: string;
40
40
  openReport: boolean;
41
+ interactive: boolean;
41
42
  } | {
42
43
  command: 'reports-list';
43
44
  workdir?: string;
@@ -23,24 +23,24 @@ export function createCliProgram(onCommand = () => undefined) {
23
23
  .showSuggestionAfterError(true);
24
24
  program.command('init')
25
25
  .description('Create a workspace or configure it with a guided terminal wizard')
26
- .option('--workdir <path>', 'workspace to initialize')
27
- .option('--interactive', 'configure Yandex Wiki and Confluence in a TTY wizard', false)
26
+ .option('-w, --workdir <path>', 'workspace to initialize')
27
+ .option('-i, --interactive', 'configure Yandex Wiki and Confluence in a TTY wizard', false)
28
28
  .action((options) => {
29
29
  const workdir = nonEmpty(options.workdir, '--workdir');
30
30
  onCommand({ command: 'init', interactive: options.interactive, ...(workdir ? { workdir } : {}) });
31
31
  });
32
32
  program.command('doctor')
33
33
  .description('Validate profiles and optionally perform read-only endpoint preflight')
34
- .option('--workdir <path>', 'workspace to inspect')
35
- .option('--source <locator>', 'source page URL, ID, or slug')
36
- .option('--destination <locator>', 'destination page URL, ID, slug, or directory')
37
- .option('--source-profile <name>', 'named source connection')
38
- .option('--destination-profile <name>', 'named destination connection')
39
- .addOption(new Option('--scope <scope>', 'selection scope').choices(['page', 'subtree', 'linked']).default('subtree'))
40
- .addOption(new Option('--source-status <status>', 'automatically discovered page status').choices(['all', 'current']).default('all'))
41
- .option('--comments', 'read and archive page comments (default)', true)
42
- .option('--no-comments', 'skip all comment API calls and archive work')
43
- .addOption(new Option('--format <format>', 'filesystem format').choices(['markdown', 'html']))
34
+ .option('-w, --workdir <path>', 'workspace to inspect')
35
+ .option('-s, --source <locator>', 'source page URL, ID, or slug')
36
+ .option('-d, --destination <locator>', 'destination page URL, ID, slug, or directory')
37
+ .option('-S, --source-profile <name>', 'named source connection')
38
+ .option('-D, --destination-profile <name>', 'named destination connection')
39
+ .addOption(new Option('-m, --scope <scope>', 'selection scope').choices(['page', 'subtree', 'linked']).default('subtree'))
40
+ .addOption(new Option('-t, --source-status <status>', 'automatically discovered page status').choices(['all', 'current']).default('all'))
41
+ .option('-C, --comments', 'read and archive page comments (default)', true)
42
+ .option('-N, --no-comments', 'skip all comment API calls and archive work')
43
+ .addOption(new Option('-f, --format <format>', 'filesystem format').choices(['markdown', 'html']))
44
44
  .action((options) => {
45
45
  const source = nonEmpty(options.source, '--source');
46
46
  const destination = nonEmpty(options.destination, '--destination');
@@ -62,23 +62,24 @@ export function createCliProgram(onCommand = () => undefined) {
62
62
  });
63
63
  });
64
64
  program.command('migrate')
65
- .description('Transfer or export a page graph')
66
- .requiredOption('--source <locator>', 'source page URL, ID, or slug')
67
- .requiredOption('--destination <locator>', 'destination page URL, ID, slug, or directory')
68
- .option('--source-profile <name>', 'named source connection')
69
- .option('--destination-profile <name>', 'named destination connection')
70
- .addOption(new Option('--scope <scope>', 'selection scope').choices(['page', 'subtree', 'linked']).default('subtree'))
71
- .addOption(new Option('--source-status <status>', 'automatically discovered page status').choices(['all', 'current']).default('all'))
72
- .option('--comments', 'read and archive page comments (default)', true)
73
- .option('--no-comments', 'skip all comment API calls and archive work')
74
- .addOption(new Option('--format <format>', 'filesystem format').choices(['markdown', 'html']))
75
- .option('--archive', 'also create a ZIP for filesystem output', false)
76
- .option('--workdir <path>', 'workspace (configured CWD, then ~/.ywtc)')
77
- .option('--dry-run', 'discover and render without destination writes', false)
78
- .option('--fresh', 'ignore mappings and preserve existing live state as a backup', false)
79
- .option('--open-report', 'open the generated HTML report in the system browser', false)
80
- .option('--concurrency <n>', 'orchestration concurrency from 1 to 64', concurrency)
81
- .option('--state <path>', 'state path inside workdir')
65
+ .description('Transfer or export a page graph, optionally through a TTY wizard')
66
+ .option('-i, --interactive', 'choose migration parameters and dry-run/live actions in a TTY wizard', false)
67
+ .option('-s, --source <locator>', 'source page URL, ID, or slug (required without --interactive)')
68
+ .option('-d, --destination <locator>', 'destination page URL, ID, slug, or directory (required without --interactive)')
69
+ .option('-S, --source-profile <name>', 'named source connection')
70
+ .option('-D, --destination-profile <name>', 'named destination connection')
71
+ .addOption(new Option('-m, --scope <scope>', 'selection scope').choices(['page', 'subtree', 'linked']).default('subtree'))
72
+ .addOption(new Option('-t, --source-status <status>', 'automatically discovered page status').choices(['all', 'current']).default('all'))
73
+ .option('-C, --comments', 'read and archive page comments (default)', true)
74
+ .option('-N, --no-comments', 'skip all comment API calls and archive work')
75
+ .addOption(new Option('-f, --format <format>', 'filesystem format').choices(['markdown', 'html']))
76
+ .option('-a, --archive', 'also create a ZIP for filesystem output', false)
77
+ .option('-w, --workdir <path>', 'workspace (configured CWD, then ~/.ywtc)')
78
+ .option('-n, --dry-run', 'discover and render without destination writes', false)
79
+ .option('-F, --fresh', 'ignore mappings and preserve existing live state as a backup', false)
80
+ .option('-o, --open-report', 'open the generated HTML report in the system browser', false)
81
+ .option('-j, --concurrency <n>', 'orchestration concurrency from 1 to 64', concurrency)
82
+ .option('-r, --state <path>', 'state path inside workdir')
82
83
  .action((options) => {
83
84
  const source = nonEmpty(options.source, '--source');
84
85
  const destination = nonEmpty(options.destination, '--destination');
@@ -86,14 +87,15 @@ export function createCliProgram(onCommand = () => undefined) {
86
87
  const destinationProfile = nonEmpty(options.destinationProfile, '--destination-profile');
87
88
  const workdir = nonEmpty(options.workdir, '--workdir');
88
89
  const stateFilename = nonEmpty(options.state, '--state');
89
- if (options.archive && !options.format)
90
+ if (!options.interactive && (!source || !destination)) {
91
+ throw new Error('migrate requires both --source and --destination unless --interactive is used.');
92
+ }
93
+ if (!options.interactive && options.archive && !options.format)
90
94
  throw new Error('--archive requires --format markdown|html and a directory destination.');
91
- if (options.format && /^https?:\/\//i.test(destination))
95
+ if (!options.interactive && options.format && destination && /^https?:\/\//i.test(destination))
92
96
  throw new Error('--format cannot be used with a remote HTTP(S) destination.');
93
97
  onCommand({
94
98
  command: 'migrate',
95
- source,
96
- destination,
97
99
  scope: options.scope,
98
100
  sourceStatus: options.sourceStatus,
99
101
  comments: options.comments,
@@ -101,6 +103,9 @@ export function createCliProgram(onCommand = () => undefined) {
101
103
  dryRun: options.dryRun,
102
104
  fresh: options.fresh,
103
105
  openReport: options.openReport,
106
+ interactive: options.interactive,
107
+ ...(source ? { source } : {}),
108
+ ...(destination ? { destination } : {}),
104
109
  ...(sourceProfile ? { sourceProfile } : {}),
105
110
  ...(destinationProfile ? { destinationProfile } : {}),
106
111
  ...(options.format ? { format: options.format } : {}),
@@ -112,7 +117,7 @@ export function createCliProgram(onCommand = () => undefined) {
112
117
  const reports = program.command('reports').description('List and open local migration reports');
113
118
  reports.command('list')
114
119
  .description('List valid reports from newest to oldest')
115
- .option('--workdir <path>', 'workspace containing reports')
120
+ .option('-w, --workdir <path>', 'workspace containing reports')
116
121
  .action((options) => {
117
122
  const workdir = nonEmpty(options.workdir, '--workdir');
118
123
  onCommand({ command: 'reports-list', ...(workdir ? { workdir } : {}) });
@@ -120,7 +125,7 @@ export function createCliProgram(onCommand = () => undefined) {
120
125
  reports.command('open')
121
126
  .description('Open a report by run ID, or the latest report with "last" or no selector')
122
127
  .argument('[run-id|last]', 'report run ID from "ywtc reports list", or "last"')
123
- .option('--workdir <path>', 'workspace containing reports')
128
+ .option('-w, --workdir <path>', 'workspace containing reports')
124
129
  .action((runIdValue, options) => {
125
130
  const runId = nonEmpty(runIdValue, 'run-id');
126
131
  const workdir = nonEmpty(options.workdir, '--workdir');
@@ -128,8 +133,8 @@ export function createCliProgram(onCommand = () => undefined) {
128
133
  });
129
134
  program.command('update')
130
135
  .description('Check for a newer release and optionally update a safe installation')
131
- .option('--install', 'install after checking', false)
132
- .addOption(new Option('--via <channel>', 'force a compatible installation channel').choices(['npm', 'brew']))
136
+ .option('-i, --install', 'install after checking', false)
137
+ .addOption(new Option('-c, --via <channel>', 'force a compatible installation channel').choices(['npm', 'brew']))
133
138
  .action((options) => onCommand({
134
139
  command: 'update',
135
140
  install: options.install,
@@ -1 +1 @@
1
- {"version":3,"file":"cli-arguments.js","sourceRoot":"","sources":["../src/cli-arguments.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-arguments.js","sourceRoot":"","sources":["../src/cli-arguments.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -1,150 +1,17 @@
1
1
  #!/usr/bin/env node
2
- import { Listr } from 'listr2';
3
2
  import { cliHelp, parseCliArguments } from './cli-arguments.js';
4
- import { readWorkspaceConfig, secretValues, validateProfileSecrets } from './config.js';
3
+ import { readWorkspaceConfig, validateProfileSecrets } from './config.js';
5
4
  import { resolveDestinationLocator, resolveSourceLocator } from './locators.js';
6
- import { createLogger, redact } from './logger.js';
5
+ import { redact } from './logger.js';
6
+ import { readyMigrationCommand, runMigrationCommand } from './migration-command.js';
7
7
  import { runUpdate } from './updater.js';
8
8
  import { packageVersion } from './version.js';
9
- import { initializeWorkspace, resolveInitWorkspace, resolveWorkspace, resolveWorkspacePath, workspaceIsInitialized, } from './workspace.js';
9
+ import { initializeWorkspace, resolveInitWorkspace, resolveWorkspace, workspaceIsInitialized, } from './workspace.js';
10
10
  const color = process.stdout.isTTY && !process.env.NO_COLOR;
11
11
  const paint = (code, value) => color ? `\u001b[${code}m${value}\u001b[0m` : value;
12
12
  function heading(label) {
13
13
  console.log(`\n${paint(36, '◆')} ${paint(1, label)}`);
14
14
  }
15
- function reportBearingError(error) {
16
- return error instanceof Error
17
- && typeof error.reportPaths === 'object'
18
- && typeof error.stateFilename === 'string';
19
- }
20
- async function printAndMaybeOpenReport(paths, workdir, shouldOpen) {
21
- const { openReportFile, reportAccessDetails } = await import('./report-catalog.js');
22
- const access = reportAccessDetails(paths, workdir);
23
- console.log(` Run ID ${access.runId}`);
24
- console.log(` Report ${access.report}`);
25
- console.log(` URL ${access.url}`);
26
- console.log(` Open ${access.command}`);
27
- if (!shouldOpen)
28
- return;
29
- try {
30
- await openReportFile(paths.html);
31
- console.log(` Opened ${access.url}`);
32
- }
33
- catch (error) {
34
- console.log(` ${paint(33, 'Warning')} ${error instanceof Error ? error.message : String(error)}`);
35
- }
36
- }
37
- async function migrate(command) {
38
- const workspace = await resolveWorkspace(command.workdir ? { explicit: command.workdir } : {});
39
- const initialized = await initializeWorkspace(workspace);
40
- const config = readWorkspaceConfig(workspace.configFile);
41
- const secrets = secretValues(config);
42
- const source = resolveSourceLocator(config, command.source, command.sourceProfile);
43
- const destination = resolveDestinationLocator({
44
- config,
45
- value: command.destination,
46
- ...(command.destinationProfile ? { profile: command.destinationProfile } : {}),
47
- ...(command.format ? { format: command.format } : {}),
48
- cwd: process.cwd(),
49
- });
50
- validateProfileSecrets(config, [source.profile, ...(destination.type === 'remote' ? [destination.profile] : [])]);
51
- const stateFilename = command.stateFilename ? resolveWorkspacePath(workspace, command.stateFilename) : undefined;
52
- const logger = createLogger(secrets);
53
- const { Migrator: MigratorImplementation } = await import('./migrator.js');
54
- const migrator = new MigratorImplementation(config, logger);
55
- const controller = new AbortController();
56
- let signalCode;
57
- const interrupt = () => { signalCode = 130; controller.abort(new Error('Interrupted by SIGINT')); };
58
- const terminate = () => { signalCode = 143; controller.abort(new Error('Interrupted by SIGTERM')); };
59
- process.once('SIGINT', interrupt);
60
- process.once('SIGTERM', terminate);
61
- heading('ywtc transfer');
62
- console.log(` Workdir ${workspace.root} ${paint(90, `(${workspace.source})`)}`);
63
- console.log(` Source ${command.source} ${paint(90, `[${source.profile.name}]`)}`);
64
- console.log(` Destination ${command.destination}${destination.type === 'remote' ? ` ${paint(90, `[${destination.profile.name}]`)}` : ` ${paint(90, `[${destination.format}]`)}`}`);
65
- console.log(` Scope ${command.scope}`);
66
- console.log(` Source state ${command.sourceStatus}`);
67
- console.log(` Comments ${command.comments ? 'enabled' : 'disabled'}`);
68
- console.log(` Mode ${command.dryRun ? paint(33, 'dry-run · read-only') : paint(35, 'live')}`);
69
- if (initialized.created.length > 0)
70
- console.log(` Initialized ${initialized.created.join(', ')}`);
71
- let result;
72
- const tasks = new Listr([
73
- {
74
- title: 'Discover, transfer, and verify',
75
- task: async (_context, task) => {
76
- result = await migrator.run({
77
- source,
78
- destination,
79
- scope: command.scope,
80
- sourceStatus: command.sourceStatus,
81
- comments: command.comments,
82
- dryRun: command.dryRun,
83
- archive: command.archive,
84
- fresh: command.fresh,
85
- concurrency: command.concurrency ?? config.concurrency,
86
- runtimeDirectory: workspace.statesDirectory,
87
- cacheDirectory: workspace.cacheDirectory,
88
- reportsDirectory: workspace.reportsDirectory,
89
- signal: controller.signal,
90
- ...(stateFilename ? { stateFilename } : {}),
91
- onStatus: (message) => { task.output = message; },
92
- });
93
- },
94
- },
95
- ], {
96
- renderer: process.stdout.isTTY ? 'default' : 'simple',
97
- rendererOptions: { collapseErrors: false, collapseSubtasks: false },
98
- collectErrors: true,
99
- });
100
- try {
101
- await tasks.run();
102
- }
103
- catch (error) {
104
- if (signalCode) {
105
- heading('Transfer interrupted');
106
- console.log(` Status cancelled by ${signalCode === 130 ? 'SIGINT' : 'SIGTERM'}`);
107
- console.log(` Workdir ${workspace.root}`);
108
- console.log(` Reports ${workspace.reportsDirectory}`);
109
- if (reportBearingError(error))
110
- await printAndMaybeOpenReport(error.reportPaths, workspace.root, command.openReport);
111
- console.log(` Resume ywtc migrate --source "${command.source}" --destination "${command.destination}" --scope ${command.scope}${command.sourceStatus === 'all' ? '' : ` --source-status ${command.sourceStatus}`} --workdir "${workspace.root}"`);
112
- return signalCode;
113
- }
114
- if (reportBearingError(error)) {
115
- heading('Transfer failed');
116
- console.log(` Status failed`);
117
- console.log(` State ${error.stateFilename}`);
118
- await printAndMaybeOpenReport(error.reportPaths, workspace.root, command.openReport);
119
- }
120
- throw error;
121
- }
122
- finally {
123
- process.removeListener('SIGINT', interrupt);
124
- process.removeListener('SIGTERM', terminate);
125
- }
126
- if (!result)
127
- throw new Error('Transfer completed without a result');
128
- heading(result.status === 'completed' ? 'Transfer complete' : 'Transfer finished');
129
- console.log(` Status ${result.status}`);
130
- console.log(` State ${result.stateFilename}`);
131
- await printAndMaybeOpenReport(result.reportPaths, workspace.root, command.openReport);
132
- console.log(` Source root + ${result.summary.selectedDescendants}/${result.summary.returnedDescendants} descendants · ${result.summary.excludedPages} excluded · depth ${result.summary.maximumDepth}`);
133
- console.log(` Assets ${result.summary.pages} pages · ${result.summary.resources} files · ${result.summary.sourceBytes} known bytes${result.summary.bytesUnknown ? ` · ${result.summary.bytesUnknown} sizes unknown` : ''}`);
134
- console.log(` Pages ${result.summary.complete} complete · ${result.summary.partial} partial · ${result.summary.failed} failed · ${result.summary.blocked} blocked · ${result.summary.conflicts} conflicts · ${result.summary.notStartedPages} not started`);
135
- console.log(` Files ${result.summary.resourcesComplete} complete · ${result.summary.resourcesPartial} partial · ${result.summary.resourcesFailed} failed · ${result.summary.resourcesBlocked} blocked · ${result.summary.resourcesNotStarted} not started${result.summary.resourcesPlanned ? ` · ${result.summary.resourcesPlanned} planned` : ''} · ${result.summary.bytes} transferred bytes`);
136
- console.log(` Causes ${result.summary.rootErrors} root errors · ${result.summary.dependentPages} dependent pages · ${result.summary.dependentFiles} dependent files · ${result.summary.dependentComments} dependent comment archives`);
137
- console.log(` Content ${result.summary.links} links · ${result.summary.cycles} traversal cycles · inventory ${result.summary.inventoryComplete ? 'complete' : 'incomplete'}`);
138
- console.log(` Comments ${result.summary.comments} entries · ${result.summary.commentThreads} threads · ${result.summary.commentParticipants} participants · ${result.summary.commentAttachments} files · ${result.summary.commentBytes} bytes`);
139
- console.log(` Quality ${result.summary.errors} errors · ${result.summary.warnings} warnings · ${result.summary.degradations} degradations · ${result.summary.adaptations} adaptations · ${result.summary.normalizations} safe normalizations · ${result.summary.preservedExternalReferences} external references preserved`);
140
- if (result.output)
141
- console.log(` Output ${result.output}`);
142
- if (result.archive)
143
- console.log(` Archive ${result.archive}`);
144
- if (result.hasErrors)
145
- console.log(` Resume ywtc migrate --source "${command.source}" --destination "${command.destination}" --scope ${command.scope}${command.sourceStatus === 'all' ? '' : ` --source-status ${command.sourceStatus}`}`);
146
- return result.hasErrors ? 1 : 0;
147
- }
148
15
  export async function main(argv = process.argv.slice(2)) {
149
16
  const command = parseCliArguments(argv);
150
17
  if (command.command === 'help') {
@@ -157,14 +24,14 @@ export async function main(argv = process.argv.slice(2)) {
157
24
  }
158
25
  if (command.command === 'init') {
159
26
  if (command.interactive) {
160
- const [{ assertInteractiveTerminal, runInteractiveInit }, { ClackInitPrompter }] = await Promise.all([
27
+ const [{ assertInteractiveTerminal, runInteractiveInit }, { ClackPrompter }] = await Promise.all([
161
28
  import('./interactive-init.js'),
162
- import('./init-prompts.js'),
29
+ import('./wizard-prompts.js'),
163
30
  ]);
164
31
  assertInteractiveTerminal(process.stdin.isTTY, process.stdout.isTTY);
165
32
  const result = await runInteractiveInit({
166
33
  ...(command.workdir ? { workdir: command.workdir } : {}),
167
- prompter: new ClackInitPrompter(),
34
+ prompter: new ClackPrompter(),
168
35
  });
169
36
  return result.code;
170
37
  }
@@ -259,7 +126,17 @@ export async function main(argv = process.argv.slice(2)) {
259
126
  console.log(` URL ${selected.report.url}`);
260
127
  return 0;
261
128
  }
262
- return migrate(command);
129
+ if (command.interactive) {
130
+ const [{ assertInteractiveTerminal }, { runInteractiveMigration }, { ClackPrompter }] = await Promise.all([
131
+ import('./interactive-init.js'),
132
+ import('./interactive-migrate.js'),
133
+ import('./wizard-prompts.js'),
134
+ ]);
135
+ assertInteractiveTerminal(process.stdin.isTTY, process.stdout.isTTY, 'migrate');
136
+ const result = await runInteractiveMigration({ command, prompter: new ClackPrompter() });
137
+ return result.code;
138
+ }
139
+ return (await runMigrationCommand(readyMigrationCommand(command))).code;
263
140
  }
264
141
  main().then((code) => { process.exitCode = code; }).catch((error) => {
265
142
  console.error(`ERROR ${redact(error, [])}`);