@rch4com/agent-setup 2.2.0 → 2.2.1

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/lib/engine.mjs CHANGED
@@ -6,19 +6,20 @@ import { createProbe } from './probe.mjs'
6
6
  // 항목처럼 probe를 안 쓰는 detect는 그냥 무시한다.
7
7
  export async function scan(root, items, { probe = null, scope = 'project' } = {}) {
8
8
  const shared = probe ?? createProbe({ root, scope, exec: makeExec(false) })
9
- const states = []
10
- for (const item of items) {
9
+ // 항목 감지를 함께 돌린다 — 감지는 읽기뿐이고 같은 CLI 질의는 probe가 한 번으로
10
+ // 묶는다. 차례로 돌리면 서로 다른 목록 명령(codex 수십 초, npx skills 십여 초)의
11
+ // 시간이 더해져 전역 스캔이 1분을 넘겼다. Promise.all은 순서를 지킨다.
12
+ return Promise.all(items.map(async (item) => {
11
13
  try {
12
14
  const r = await item.detect({ root, probe: shared })
13
15
  // excluded는 "이 머신에 없는 CLI"를 알리는 자리다 — 행 힌트가 supports를
14
16
  // 나열할 때 그 CLI를 빼고 따로 표시한다. result는 감지 결과 전체로,
15
17
  // 레시피 항목의 steps()가 어느 CLI에 이미 있는지(present)를 읽는다.
16
- states.push({ item, status: r.status, detail: r.detail, excluded: r.excluded ?? [], result: r })
18
+ return { item, status: r.status, detail: r.detail, excluded: r.excluded ?? [], result: r }
17
19
  } catch (err) {
18
- states.push({ item, status: 'absent', detail: msg('item.scanFailed', { message: err.message }) })
20
+ return { item, status: 'absent', detail: msg('item.scanFailed', { message: err.message }) }
19
21
  }
20
- }
21
- return states
22
+ }))
22
23
  }
23
24
 
24
25
  // item.exclusive는 "이 항목들은 같은 파일 하나를 두고 다툰다"는 표시다.
@@ -453,6 +453,7 @@ export default {
453
453
  'action.scope.label': 'Install scope',
454
454
  'action.scope.hint': 'now: {current} · Enter switches repo ↔ user-global',
455
455
  'tui.scope.switched': 'Scope: {current}',
456
+ 'tui.scope.scanning': 'Scanning {current} installs — CLI list commands can take up to a minute…',
456
457
  'action.bootstrap.label': 'Run bootstrap',
457
458
  'action.bootstrap.hint': 'guides · skills · per-tool config · {present} of {total} files exist',
458
459
  'action.sync.installed.label': 'Update installed',
@@ -440,6 +440,7 @@ export default {
440
440
  'action.scope.label': '설치 범위',
441
441
  'action.scope.hint': '현재: {current} · Enter로 저장소 ↔ 사용자 전역 전환',
442
442
  'tui.scope.switched': '범위: {current}',
443
+ 'tui.scope.scanning': '{current} 설치 상태를 확인하는 중 — CLI 목록 명령이라 1분 가까이 걸릴 수 있습니다…',
443
444
  'action.bootstrap.label': '부트스트랩 실행',
444
445
  'action.bootstrap.hint': '지침 · 스킬 · 도구별 설정 · 파일 {total}개 중 {present}개 존재',
445
446
  'action.sync.installed.label': '설치본 업데이트',
package/lib/tui/run.mjs CHANGED
@@ -391,6 +391,10 @@ export async function runTui(root, opts = {}) {
391
391
  if (row?.id === 'action.language') { status = await cycleLanguage(); continue }
392
392
  if (row?.id === 'action.scope') {
393
393
  scope = scope === 'project' ? 'user' : 'project'
394
+ // 전역 감지는 CLI 목록 명령(codex plugin list 등)을 돌려 수십 초 걸린다.
395
+ // 그동안 화면이 그대로면 멈춘 것으로 읽힌다 — 먼저 진행 중임을 그린다.
396
+ status = t('tui.scope.scanning', { current: t(`scope.${scope}`) })
397
+ paint()
394
398
  // 다른 범위의 설치 상태로 선택을 다시 맞춘다 — 저장소에서 고르던 체크가
395
399
  // 전역 목록에 남으면 엉뚱한 항목이 설치된다.
396
400
  await rebuild(false)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rch4com/agent-setup",
3
- "version": "2.2.0",
3
+ "version": "2.2.1",
4
4
  "description": "Repository-scoped bootstrap and optional-item installer for using multiple coding-agent CLIs in one repository | 여러 코딩 에이전트 CLI를 한 저장소에서 함께 쓰기 위한 저장소 범위 부트스트랩과 선택 항목 설치기",
5
5
  "keywords": [
6
6
  "agents-md",