tink-harness 1.6.2 → 1.6.3
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/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +14 -0
- package/README.ko.md +8 -1
- package/README.md +9 -1
- package/VERSIONING.md +1 -1
- package/bin/install.js +68 -16
- package/docs/pr/2026-06-09-v1.6.3.ko.md +27 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,20 @@ All notable changes to Tink are tracked here.
|
|
|
7
7
|
No unreleased changes yet.
|
|
8
8
|
|
|
9
9
|
|
|
10
|
+
## [1.6.3] - 2026-06-09
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Interactive install/update now includes an `Advanced options` step so `--dry-run`, `--force`, and `--clean-codex-picker` are available as visible choices instead of CLI-only flags.
|
|
15
|
+
- Install/update output now prints selected option state for preview, force overwrite, and Codex picker cleanup.
|
|
16
|
+
- Non-interactive CLI flags still work and seed the same option state used by the interactive wizard.
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- Regression coverage for visible advanced option labels and selected option output.
|
|
21
|
+
- Korean PR history draft for the v1.6.3 patch in `docs/pr/2026-06-09-v1.6.3.ko.md`.
|
|
22
|
+
|
|
23
|
+
|
|
10
24
|
## [1.6.2] - 2026-06-09
|
|
11
25
|
|
|
12
26
|
### Changed
|
package/README.ko.md
CHANGED
|
@@ -8,7 +8,7 @@ Claude Code와 Codex를 위한 작은 하네스 레이어입니다.
|
|
|
8
8
|
|
|
9
9
|
Tink는 지금 작업에 맞는 하네스를 고르고, 실행 상태를 보이게 만들고, 실제 사용 중 생긴 실패와 피드백으로 하네스 세트를 개선합니다.
|
|
10
10
|
|
|
11
|
-
**최신 패키지:** v1.6.
|
|
11
|
+
**최신 패키지:** v1.6.3 — interactive install/update에서 preview, force overwrite, Codex picker cleanup 같은 고급 옵션을 실제 선택지로 제공합니다. 최신 마이너 릴리스 노트: [v1.6.0](https://github.com/dotoricode/tink-harness/releases/tag/v1.6.0).
|
|
12
12
|
|
|
13
13
|
[English](README.md) · **한국어**
|
|
14
14
|
|
|
@@ -59,6 +59,13 @@ npx tink-harness@latest update
|
|
|
59
59
|
|
|
60
60
|
업데이트 후 Codex skill, schema, Windows 경고가 이상해 보이면 `docs/update-troubleshooting.ko.md` 또는 `docs/update-troubleshooting.md`를 확인하세요.
|
|
61
61
|
|
|
62
|
+
## 1.6.3에서 달라진 점
|
|
63
|
+
|
|
64
|
+
이번 패치는 CLI 옵션을 interactive installer 안에서 직접 고를 수 있게 만듭니다.
|
|
65
|
+
|
|
66
|
+
- wizard에 `Advanced options` 단계가 추가되어 `Preview only (--dry-run)`, `Overwrite user-modified files (--force)`, `Clean Codex picker (--clean-codex-picker)`를 선택할 수 있습니다.
|
|
67
|
+
- install/update 출력에 선택된 옵션 상태를 표시해서 preview, force overwrite, Codex picker cleanup이 켜졌는지 바로 볼 수 있습니다.
|
|
68
|
+
- 기존 CLI flag는 그대로 동작하며, interactive wizard에서는 같은 옵션의 초기 선택값으로 반영됩니다.
|
|
62
69
|
## 1.6.2에서 달라진 점
|
|
63
70
|
|
|
64
71
|
이번 패치는 Claude Code와 Codex를 함께 쓰는 설치 흐름을 더 명확하게 만듭니다.
|
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
<a href="https://github.com/dotoricode/tink-harness/stargazers"><img src="https://img.shields.io/github/stars/dotoricode/tink-harness?style=social" alt="GitHub stars"></a>
|
|
25
25
|
</p>
|
|
26
26
|
|
|
27
|
-
<p><strong>Latest package:</strong> v1.6.
|
|
27
|
+
<p><strong>Latest package:</strong> v1.6.3 - Interactive install/update now offers advanced options such as preview, force overwrite, and Codex picker cleanup as real choices. Latest minor release notes: <a href="https://github.com/dotoricode/tink-harness/releases/tag/v1.6.0">v1.6.0</a>.</p>
|
|
28
28
|
|
|
29
29
|
**English** · [한국어](README.ko.md)
|
|
30
30
|
|
|
@@ -124,6 +124,14 @@ To quickly verify the updated install, see `docs/update-verification-recipe.md`
|
|
|
124
124
|
|
|
125
125
|
If an update looks stale or incomplete, see `docs/update-troubleshooting.md` or `docs/update-troubleshooting.ko.md`.
|
|
126
126
|
|
|
127
|
+
## What's new in 1.6.3
|
|
128
|
+
|
|
129
|
+
This patch makes CLI options visible in the interactive installer.
|
|
130
|
+
|
|
131
|
+
- The wizard now has an `Advanced options` step with `Preview only (--dry-run)`, `Overwrite user-modified files (--force)`, and `Clean Codex picker (--clean-codex-picker)` when Codex is selected.
|
|
132
|
+
- Install/update output now prints the selected option state, so you can see whether preview, force overwrite, or Codex picker cleanup is active.
|
|
133
|
+
- CLI flags still work for non-interactive runs and seed the same visible choices when the wizard is used.
|
|
134
|
+
|
|
127
135
|
## What's new in 1.6.2
|
|
128
136
|
|
|
129
137
|
This patch makes the installer clearer for mixed Claude Code + Codex setups.
|
package/VERSIONING.md
CHANGED
package/bin/install.js
CHANGED
|
@@ -12,9 +12,9 @@ const root = path.resolve(__dirname, '..');
|
|
|
12
12
|
const args = process.argv.slice(2);
|
|
13
13
|
const command = args[0] || 'install';
|
|
14
14
|
const isUpdate = command === 'update';
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
let dryRun = args.includes('--dry-run');
|
|
16
|
+
let force = args.includes('--force');
|
|
17
|
+
let cleanCodexPicker = args.includes('--clean-codex-picker') || process.env.TINK_CLEAN_CODEX_PICKER === '1';
|
|
18
18
|
const yes = args.includes('--yes') || args.includes('-y');
|
|
19
19
|
const interactive = process.stdin.isTTY && process.stdout.isTTY && !yes && !dryRun;
|
|
20
20
|
const source = 'https://github.com/dotoricode/tink-harness.git';
|
|
@@ -220,16 +220,6 @@ function componentOptionsFor(agent, language) {
|
|
|
220
220
|
return [claudeSkill, codexSkills];
|
|
221
221
|
});
|
|
222
222
|
|
|
223
|
-
if (includesCodex(agent)) {
|
|
224
|
-
options.push({
|
|
225
|
-
value: 'codex-picker-cleanup',
|
|
226
|
-
label: 'Codex picker cleanup',
|
|
227
|
-
hint: language === 'ko'
|
|
228
|
-
? '현재 repo의 repo-local Claude Tink surface를 정리해 Codex의 Source Command Tink 항목을 줄입니다.'
|
|
229
|
-
: 'Remove repo-local Claude Tink surfaces so Codex shows focused Tink skills.'
|
|
230
|
-
});
|
|
231
|
-
}
|
|
232
|
-
|
|
233
223
|
return options;
|
|
234
224
|
}
|
|
235
225
|
|
|
@@ -245,6 +235,57 @@ function wantsCodexPickerCleanup(components, agent) {
|
|
|
245
235
|
return cleanCodexPicker || components.includes('codex-picker-cleanup') || agent === 'codex';
|
|
246
236
|
}
|
|
247
237
|
|
|
238
|
+
function advancedOptionChoices(agent, language) {
|
|
239
|
+
const choices = [
|
|
240
|
+
{
|
|
241
|
+
value: 'dry-run',
|
|
242
|
+
label: 'Preview only (--dry-run)',
|
|
243
|
+
hint: language === 'ko'
|
|
244
|
+
? '파일을 쓰거나 지우지 않고 어떤 작업을 할지만 보여줍니다.'
|
|
245
|
+
: 'Show planned writes/removals without changing files.'
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
value: 'force',
|
|
249
|
+
label: 'Overwrite user-modified files (--force)',
|
|
250
|
+
hint: language === 'ko'
|
|
251
|
+
? '사용자가 수정한 파일도 덮어쓸 수 있는 위험 옵션입니다.'
|
|
252
|
+
: 'Risky. Allows overwriting user-modified files.'
|
|
253
|
+
}
|
|
254
|
+
];
|
|
255
|
+
if (includesCodex(agent)) {
|
|
256
|
+
choices.push({
|
|
257
|
+
value: 'clean-codex-picker',
|
|
258
|
+
label: 'Clean Codex picker (--clean-codex-picker)',
|
|
259
|
+
hint: language === 'ko'
|
|
260
|
+
? '현재 repo의 repo-local Claude Tink surface를 정리해 Source Command Tink 항목을 줄입니다.'
|
|
261
|
+
: 'Remove repo-local Claude Tink surfaces that show as Source Command Tink entries.'
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
return choices;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
function defaultAdvancedValues(agent) {
|
|
268
|
+
return [
|
|
269
|
+
dryRun ? 'dry-run' : null,
|
|
270
|
+
force ? 'force' : null,
|
|
271
|
+
includesCodex(agent) && cleanCodexPicker ? 'clean-codex-picker' : null
|
|
272
|
+
].filter(Boolean);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
function applyAdvancedOptions(values) {
|
|
276
|
+
dryRun = values.includes('dry-run');
|
|
277
|
+
force = values.includes('force');
|
|
278
|
+
cleanCodexPicker = values.includes('clean-codex-picker');
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
function optionsSummary(agent) {
|
|
282
|
+
return [
|
|
283
|
+
`Preview only (--dry-run): ${dryRun ? 'yes' : 'no'}`,
|
|
284
|
+
`Overwrite user-modified files (--force): ${force ? 'yes' : 'no'}`,
|
|
285
|
+
includesCodex(agent) ? `Clean Codex picker (--clean-codex-picker): ${cleanCodexPicker ? 'yes' : 'no'}` : null
|
|
286
|
+
].filter(Boolean).join('\n');
|
|
287
|
+
}
|
|
288
|
+
|
|
248
289
|
function locationSummary(agent, scope) {
|
|
249
290
|
const repoTarget = process.cwd();
|
|
250
291
|
const installTarget = scope === 'global' ? os.homedir() : repoTarget;
|
|
@@ -254,16 +295,15 @@ function locationSummary(agent, scope) {
|
|
|
254
295
|
includesClaude(agent) ? `Claude Code command target: ${path.join(installTarget, '.claude/commands/tink')}` : null,
|
|
255
296
|
includesClaude(agent) ? `Claude Code skill target: ${path.join(installTarget, '.claude/skills/tink')}` : null,
|
|
256
297
|
includesCodex(agent) ? `Codex skills target: ${path.join(codexHome(), 'skills')}` : null,
|
|
257
|
-
includesCodex(agent) ? `Codex picker cleanup target: ${path.join(
|
|
298
|
+
includesCodex(agent) ? `Codex picker cleanup target: ${path.join(process.cwd(), '.claude')}` : null
|
|
258
299
|
].filter(Boolean).join('\n');
|
|
259
300
|
}
|
|
260
301
|
|
|
261
302
|
function defaultComponentValues(agent, language) {
|
|
262
303
|
return componentOptionsFor(agent, language)
|
|
263
304
|
.map((item) => item.value)
|
|
264
|
-
.filter((value) => value !== 'hook'
|
|
305
|
+
.filter((value) => value !== 'hook');
|
|
265
306
|
}
|
|
266
|
-
|
|
267
307
|
function colorLine(line, color) {
|
|
268
308
|
if (!process.stdout.isTTY && !interactive) return line;
|
|
269
309
|
const [r, g, b] = color;
|
|
@@ -720,6 +760,7 @@ async function resolveChoices() {
|
|
|
720
760
|
|
|
721
761
|
let components = defaultComponentValues(agent, language);
|
|
722
762
|
if (includesClaude(agent) && args.includes('--with-hook')) components.push('hook');
|
|
763
|
+
let advancedOptions = defaultAdvancedValues(agent);
|
|
723
764
|
let gitPolicy = 'harnesses';
|
|
724
765
|
let hookScope = 'off';
|
|
725
766
|
|
|
@@ -768,6 +809,7 @@ async function resolveChoices() {
|
|
|
768
809
|
})));
|
|
769
810
|
components = defaultComponentValues(agent, language);
|
|
770
811
|
if (includesClaude(agent) && args.includes('--with-hook')) components.push('hook');
|
|
812
|
+
advancedOptions = defaultAdvancedValues(agent);
|
|
771
813
|
|
|
772
814
|
components = handleCancel(await multiselect({
|
|
773
815
|
message: copy.components,
|
|
@@ -801,6 +843,15 @@ async function resolveChoices() {
|
|
|
801
843
|
initialValue: scope || 'repo'
|
|
802
844
|
}));
|
|
803
845
|
|
|
846
|
+
advancedOptions = handleCancel(await multiselect({
|
|
847
|
+
message: language === 'ko' ? '실행 옵션을 선택하세요 (space로 토글)' : 'Select run options (space to toggle)',
|
|
848
|
+
options: advancedOptionChoices(agent, language),
|
|
849
|
+
initialValues: advancedOptions,
|
|
850
|
+
required: false
|
|
851
|
+
}));
|
|
852
|
+
applyAdvancedOptions(advancedOptions);
|
|
853
|
+
note(optionsSummary(agent), language === 'ko' ? '선택된 옵션' : 'Selected options');
|
|
854
|
+
|
|
804
855
|
note(locationSummary(agent, scope), language === 'ko' ? '설치 위치' : 'Install locations');
|
|
805
856
|
|
|
806
857
|
if (scope === 'repo' && components.some((item) => ['harnesses', 'memory', 'hook'].includes(item))) {
|
|
@@ -864,6 +915,7 @@ async function main() {
|
|
|
864
915
|
console.log(`language ${language}`);
|
|
865
916
|
console.log(`scope ${scope}`);
|
|
866
917
|
console.log(`components ${components.join(', ')}`);
|
|
918
|
+
console.log(optionsSummary(agent));
|
|
867
919
|
console.log(locationSummary(agent, scope));
|
|
868
920
|
}
|
|
869
921
|
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# v1.6.3 패치 이력 초안
|
|
2
|
+
|
|
3
|
+
## 문제
|
|
4
|
+
|
|
5
|
+
- `--clean-codex-picker`처럼 사용자가 알아야 하는 옵션이 CLI flag로는 있었지만, interactive install/update 흐름에서는 별도 선택지로 충분히 드러나지 않았음.
|
|
6
|
+
- 사용자는 설치 중 “지금 어떤 옵션이 켜져 있는지”를 출력으로 확인하기 어려웠음.
|
|
7
|
+
- `--dry-run`, `--force`, `--clean-codex-picker`가 모두 실행 방식에 영향을 주는데, 일부는 선택 화면이 아니라 명령어를 알아야만 쓸 수 있었음.
|
|
8
|
+
|
|
9
|
+
## 해결
|
|
10
|
+
|
|
11
|
+
- interactive wizard에 `Advanced options` 단계를 추가했음.
|
|
12
|
+
- `Preview only (--dry-run)`, `Overwrite user-modified files (--force)`, `Clean Codex picker (--clean-codex-picker)`를 실제 선택지로 제공함.
|
|
13
|
+
- 선택된 옵션 상태를 install/update 출력에 표시함.
|
|
14
|
+
- 기존 CLI flag는 그대로 유지하고, interactive wizard에서는 같은 옵션의 초기 선택값으로 반영되도록 했음.
|
|
15
|
+
|
|
16
|
+
## 검증
|
|
17
|
+
|
|
18
|
+
- `npm test`로 installer 문구, 선택 상태 출력, package metadata 회귀 테스트를 확인할 예정임.
|
|
19
|
+
- `git diff --check`로 공백 문제를 확인할 예정임.
|
|
20
|
+
- `npm pack --dry-run --json`으로 패키지 포함 파일을 확인할 예정임.
|
|
21
|
+
- publish 후 `@latest` smoke에서 option state 출력과 `--clean-codex-picker` 동작을 확인할 예정임.
|
|
22
|
+
|
|
23
|
+
## 참고
|
|
24
|
+
|
|
25
|
+
- patch 릴리스이므로 GitHub Release는 새로 만들지 않음.
|
|
26
|
+
- 최신 마이너 릴리스 노트는 v1.6.0에 유지함.
|
|
27
|
+
- 이 변경은 새 명령을 추가하지 않고 기존 installer/update wizard의 선택 흐름만 명확하게 만듦.
|