@litfamily/litgrok 1.0.0 → 1.0.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/CHANGELOG.md CHANGED
@@ -2,6 +2,15 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 1.0.1
6
+
7
+ - Make the installer honor explicit `--yes` consent for piped, non-TTY
8
+ invocations while keeping `CI`, `NO_COLOR`, and dry-run previews read-only.
9
+ - Remove empty payload directories during uninstall without touching user files,
10
+ and retain the ownership checks that refuse modified or foreign content.
11
+ - Ship the native `hooks/hooks.json` aggregate so Grok Build discovers all eleven
12
+ package-owned lifecycle registrations from the root plugin manifest.
13
+
5
14
  ## 1.0.0
6
15
 
7
16
  - Release `@litfamily/litgrok` while retaining the `litgrok` and `litgrok-ai` executable aliases, native `.grok` paths, and existing ownership receipts.
package/README.md CHANGED
@@ -1,17 +1,17 @@
1
- <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.0/docs/assets/cover.webp" width="100%" alt="LitGrok v5 armory cover" /></p>
1
+ <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.1/docs/assets/cover.webp" width="100%" alt="LitGrok v5 armory cover" /></p>
2
2
 
3
3
  <h1 align="center">LitGrok</h1>
4
4
  <p align="center"><strong>Keep the work lit.</strong></p>
5
- <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.0/docs/assets/litgrok-wordmark.svg" width="480" alt="LITGROK display type" /></p>
6
- <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.0/docs/assets/litgrok-clay-icon.png" width="160" alt="LitGrok clay mark" /></p>
5
+ <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.1/docs/assets/litgrok-wordmark.svg" width="480" alt="LITGROK display type" /></p>
6
+ <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.1/docs/assets/litgrok-clay-icon.png" width="160" alt="LitGrok clay mark" /></p>
7
7
 
8
8
  Make something useful in Grok Build. Leave the checked result and the next step with your project.
9
9
 
10
10
  [한국어](./README_ko-KR.md) · [Install](#install-in-30-seconds) · [First use](#first-lit-use) · [Reference](./docs/reference.md)
11
11
 
12
12
  <p align="center">
13
- <a href="#install-in-30-seconds"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.0/docs/assets/readme/badge-version.svg" alt="1.0.0" /></a>
14
- <a href="./LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.0/docs/assets/readme/badge-license.svg" alt="MIT license" /></a>
13
+ <a href="#install-in-30-seconds"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.1/docs/assets/readme/badge-version.svg" alt="1.0.1" /></a>
14
+ <a href="./LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.1/docs/assets/readme/badge-license.svg" alt="MIT license" /></a>
15
15
  </p>
16
16
 
17
17
  <p align="center">
@@ -28,7 +28,7 @@ Make something useful in Grok Build. Leave the checked result and the next step
28
28
 
29
29
  It ships 34 skills, 11 agents, one project rule, and eleven hook registrations. The installer copies the complete payload into your project; Grok Build runs the session and owns model selection.
30
30
 
31
- Package: **@litfamily/litgrok** · Version: **1.0.0** · [MIT](./LICENSE)
31
+ Package: **@litfamily/litgrok** · Version: **1.0.1** · [MIT](./LICENSE)
32
32
 
33
33
  The scientific visualization corpus is packaged at `.grok/vendor/scientific-visualization/`; the numeric `045_scientific-visualization` label remains only in license and provenance filenames.
34
34
 
@@ -52,7 +52,7 @@ Grok Build uses the explicit `/litwork` route for a bounded task. It owns model
52
52
 
53
53
  In Grok Build, `/litwork` starts the bounded work checklist; `handoff` or `/lit-handoff` carries the checked result and next step; `/lit-plan` records a plan with checks; `/start-work <approved-plan>` executes that plan; `/review-work` inspects the change and its evidence; and `/litresearch` runs bounded, source-traceable research. The expected effect is a resumable, checked project record. The host limit is explicit: Grok Build owns execution and model selection, while LitGrok installs the `.grok` payload; hooks require a trusted Git root and a plain folder may load skills and rules without hooks. These images are static route cues, not proof of live host behavior.
54
54
 
55
- <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.0/docs/assets/litgrok-ignition-1600.webp" width="48%" alt="LitGrok ignition apparatus" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.0/docs/assets/litgrok-continuity-1600.webp" width="48%" alt="LitGrok continuity apparatus" /></p>
55
+ <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.1/docs/assets/litgrok-ignition-1600.webp" width="48%" alt="LitGrok ignition apparatus" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.1/docs/assets/litgrok-continuity-1600.webp" width="48%" alt="LitGrok continuity apparatus" /></p>
56
56
 
57
57
  <p align="center"><a href="./docs/assets/readme/ignition-film.mp4"><img src="./docs/assets/readme/ignition-poster.png" width="720" alt="Ignition motion poster" /></a></p>
58
58
 
@@ -75,11 +75,11 @@ LITGROK_PACK='/absolute/path/to/the-provided-package.tgz'
75
75
  npm exec --yes --package "$LITGROK_PACK" -- litgrok install
76
76
  ```
77
77
 
78
- The default destination is `<project>/.grok/`. Use `--package @litfamily/litgrok@1.0.0` for a pinned install, or add `--user` to install under `~/.grok/`. [Install and upgrade details](./docs/reference.md#install).
78
+ The default destination is `<project>/.grok/`. Use `--package @litfamily/litgrok@1.0.1` for a pinned install, or add `--user` to install under `~/.grok/`. [Install and upgrade details](./docs/reference.md#install).
79
79
 
80
80
  Project hooks need a trusted Git project root in Grok Build. A plain folder can still load the installed skills and rules while hooks remain unavailable. For a new disposable project, run `git init` yourself before trusting it; for an existing repository, open Grok Build from its actual root. The installer never runs `git init` or changes trust. In the observed Grok Build 1.0.13 host, `grok --trust inspect --json` accepted the trust-and-inspect route even though `--trust` was omitted from `grok --help`; this is version-specific behavior.
81
81
 
82
- If `CI` or `NO_COLOR` is set, even to an empty value, installation is a no-write preview. So are `--no-color` and non-interactive runs. Check that the installer reports actual writes before continuing.
82
+ If `CI` or `NO_COLOR` is set, even to an empty value, installation is a no-write preview. So is `--no-color`. Without `--yes`, a non-interactive run is also a no-write preview; with `--yes`, installation proceeds without a TTY as long as none of the above apply. Check that the installer reports actual writes before continuing.
83
83
 
84
84
  ## First lit use
85
85
 
@@ -152,7 +152,7 @@ Preview the exact destinations before writing:
152
152
  npm exec --yes --package "$LITGROK_PACK" -- litgrok install --dry-run
153
153
  ```
154
154
 
155
- The installer verifies file ownership before upgrades or removal. Modified, foreign, or unsafe destination files cause the operation to refuse rather than overwrite them. `CI`, `NO_COLOR` (even empty), `--no-color`, and non-interactive runs are no-write previews, including with `--yes`.
155
+ The installer verifies file ownership before upgrades or removal. Modified, foreign, or unsafe destination files cause the operation to refuse rather than overwrite them. `CI`, `NO_COLOR` (even empty), `--no-color`, and `--dry-run` are no-write previews regardless of `--yes`. Without `--yes`, a non-interactive run is also a no-write preview; with `--yes`, it proceeds without a TTY as long as none of the above apply.
156
156
 
157
157
  For a local-package install, remove it with the same package in the same project. Add `--user` only to remove an installation made with `--user`.
158
158
 
package/README_ko-KR.md CHANGED
@@ -1,17 +1,17 @@
1
- <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.0/docs/assets/cover.webp" width="100%" alt="LitGrok v5 armory cover" /></p>
1
+ <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.1/docs/assets/cover.webp" width="100%" alt="LitGrok v5 armory cover" /></p>
2
2
 
3
3
  <h1 align="center">LitGrok</h1>
4
4
  <p align="center"><strong>Keep the work lit.</strong></p>
5
- <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.0/docs/assets/litgrok-wordmark.svg" width="480" alt="LITGROK 디스플레이 타입" /></p>
6
- <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.0/docs/assets/litgrok-clay-icon.png" width="160" alt="LitGrok 클레이 마크" /></p>
5
+ <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.1/docs/assets/litgrok-wordmark.svg" width="480" alt="LITGROK 디스플레이 타입" /></p>
6
+ <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.1/docs/assets/litgrok-clay-icon.png" width="160" alt="LitGrok 클레이 마크" /></p>
7
7
 
8
8
  Grok Build에서 작은 결과물을 만들고, 확인한 내용과 다음 할 일을 프로젝트에 남기세요.
9
9
 
10
10
  [English](./README.md) · [설치](#30초-설치) · [처음 사용하기](#첫-lit-작업) · [상세 안내](./docs/reference_ko-KR.md)
11
11
 
12
12
  <p align="center">
13
- <a href="#30초-설치"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.0/docs/assets/readme/badge-version.svg" alt="1.0.0" /></a>
14
- <a href="./LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.0/docs/assets/readme/badge-license.svg" alt="MIT 라이선스" /></a>
13
+ <a href="#30초-설치"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.1/docs/assets/readme/badge-version.svg" alt="1.0.1" /></a>
14
+ <a href="./LICENSE"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.1/docs/assets/readme/badge-license.svg" alt="MIT 라이선스" /></a>
15
15
  </p>
16
16
 
17
17
  <p align="center">
@@ -28,7 +28,7 @@ Grok Build에서 작은 결과물을 만들고, 확인한 내용과 다음 할
28
28
 
29
29
  skill 34개, agent 11개, project rule 하나, hook 등록 열한 개를 제공합니다. Installer가 프로젝트에 전체 파일을 복사하고, 세션 실행과 모델 선택은 Grok Build가 담당합니다.
30
30
 
31
- 패키지: **@litfamily/litgrok** · 버전: **1.0.0** · [MIT](./LICENSE)
31
+ 패키지: **@litfamily/litgrok** · 버전: **1.0.1** · [MIT](./LICENSE)
32
32
 
33
33
  과학 시각화 corpus는 `.grok/vendor/scientific-visualization/`에 포함되며, 숫자 `045_scientific-visualization` 표기는 라이선스와 provenance 파일명에만 남습니다.
34
34
 
@@ -52,7 +52,7 @@ Grok Build에서는 명시적인 `/litwork` 경로로 작은 작업을 시작합
52
52
 
53
53
  Grok Build에서 `/litwork`는 범위를 정한 작업 체크리스트를 시작하고, `handoff` 또는 `/lit-handoff`는 확인한 결과와 다음 단계를 건네며, `/lit-plan`은 확인 기준이 있는 계획을 남기고, `/start-work <승인된 계획>`은 그 계획을 실행하며, `/review-work`는 변경과 근거를 검토하고, `/litresearch`는 출처를 추적할 수 있는 범위 있는 조사를 합니다. 기대하는 효과는 확인 결과를 남기고 다음 세션에서 이어갈 수 있는 프로젝트 기록입니다. 호스트 제약도 분명합니다. 실행과 모델 선택은 Grok Build가 담당하고 LitGrok은 `.grok` payload를 설치합니다. Hook은 신뢰한 Git root에서만 제공되며, 일반 폴더에서는 skill과 rule만 로드되고 hook은 없을 수 있습니다. 이 이미지는 실제 호스트 동작을 증명하지 않는 정적 경로 안내입니다.
54
54
 
55
- <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.0/docs/assets/litgrok-ignition-1600.webp" width="48%" alt="LitGrok 점화 장치" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.0/docs/assets/litgrok-continuity-1600.webp" width="48%" alt="LitGrok 연속 장치" /></p>
55
+ <p align="center"><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.1/docs/assets/litgrok-ignition-1600.webp" width="48%" alt="LitGrok 점화 장치" /><img src="https://cdn.jsdelivr.net/npm/@litfamily/litgrok@1.0.1/docs/assets/litgrok-continuity-1600.webp" width="48%" alt="LitGrok 연속 장치" /></p>
56
56
 
57
57
  <p align="center"><a href="./docs/assets/readme/ignition-film.mp4"><img src="./docs/assets/readme/ignition-poster.png" width="720" alt="Ignition 모션 포스터" /></a></p>
58
58
 
@@ -75,11 +75,11 @@ LITGROK_PACK='/absolute/path/to/the-provided-package.tgz'
75
75
  npm exec --yes --package "$LITGROK_PACK" -- litgrok install
76
76
  ```
77
77
 
78
- 기본 설치 위치는 `<project>/.grok/`입니다. 버전을 고정하려면 `--package @litfamily/litgrok@1.0.0`를 사용하세요. `--user`를 붙이면 `~/.grok/`에 설치합니다. [설치·업데이트 상세 안내](./docs/reference_ko-KR.md#설치).
78
+ 기본 설치 위치는 `<project>/.grok/`입니다. 버전을 고정하려면 `--package @litfamily/litgrok@1.0.1`를 사용하세요. `--user`를 붙이면 `~/.grok/`에 설치합니다. [설치·업데이트 상세 안내](./docs/reference_ko-KR.md#설치).
79
79
 
80
80
  Project hook은 Grok Build에서 신뢰한 Git 프로젝트 루트가 있어야 발견됩니다. 일반 폴더에서도 설치된 skill과 rule은 로드될 수 있지만 hook은 0개로 남을 수 있습니다. 새 disposable project라면 사용자가 직접 `git init`을 실행한 뒤 trust를 허용하세요. 기존 저장소라면 실제 root에서 Grok Build를 여세요. Installer는 `git init`을 실행하거나 trust를 바꾸지 않습니다. 관찰된 Grok Build 1.0.13에서는 `grok --trust inspect --json`이 동작했지만 `grok --help`에는 global `--trust`가 표시되지 않았습니다. 이는 이 버전에서 확인한 동작입니다.
81
81
 
82
- `CI`나 `NO_COLOR`가 설정되어 있으면 값이 비어 있어도 설치는 파일을 쓰지 않는 미리보기로 끝납니다. `--no-color`와 비대화형 실행도 같습니다. 설치 메시지에서 파일이 쓰였는지 확인한 뒤 다음 단계로 넘어가세요.
82
+ `CI`나 `NO_COLOR`가 설정되어 있으면 값이 비어 있어도 설치는 파일을 쓰지 않는 미리보기로 끝납니다. `--no-color`도 같습니다. `--yes` 없이 실행한 비대화형 설치도 미리보기이며, `--yes`를 쓰면 위 조건이 없는 한 TTY 없이도 설치가 진행됩니다. 설치 메시지에서 파일이 쓰였는지 확인한 뒤 다음 단계로 넘어가세요.
83
83
 
84
84
  ## 첫 lit 작업
85
85
 
@@ -152,7 +152,7 @@ Hook의 `.grok/litgrok/session-ledger/`는 이벤트가 발생한 순서를 남
152
152
  npm exec --yes --package "$LITGROK_PACK" -- litgrok install --dry-run
153
153
  ```
154
154
 
155
- Installer는 업데이트·삭제 전에 파일 소유권을 확인합니다. 사용자가 수정했거나 소유권을 확인할 수 없는 파일, 안전하지 않은 경로가 있으면 작업을 거부합니다. `CI`, `NO_COLOR`는 값이 비어 있어도 적용됩니다. `--no-color` 또는 비대화형 실행도 파일을 쓰지 않는 미리보기이며 `--yes`로 건너뛸 수 없습니다.
155
+ Installer는 업데이트·삭제 전에 파일 소유권을 확인합니다. 사용자가 수정했거나 소유권을 확인할 수 없는 파일, 안전하지 않은 경로가 있으면 작업을 거부합니다. `CI`, `NO_COLOR`(값이 비어 있어도 적용), `--no-color`, `--dry-run`은 `--yes`와 무관하게 항상 파일을 쓰지 않는 미리보기입니다. `--yes` 없이 실행한 비대화형 설치도 미리보기이며, `--yes`를 쓰면 위 조건이 없는 한 TTY 없이도 진행됩니다.
156
156
 
157
157
  로컬 패키지로 설치했다면 같은 프로젝트에서 같은 패키지로 제거합니다. `--user` 설치만 제거할 때는 제거 명령에도 `--user`를 붙이세요.
158
158
 
package/bin/litgrok.mjs CHANGED
@@ -526,6 +526,39 @@ function removeRetiredDirectories(directories) {
526
526
  }
527
527
  }
528
528
 
529
+ function payloadDirectories(root, files) {
530
+ const directories = new Set();
531
+ for (const { target } of files) {
532
+ let directory = dirname(target);
533
+ while (directory !== root && directory.startsWith(`${root}${sep}`)) {
534
+ directories.add(directory);
535
+ directory = dirname(directory);
536
+ }
537
+ }
538
+ // Deepest first, so a parent only empties out after its children are gone.
539
+ return [...directories].sort((left, right) => right.length - left.length);
540
+ }
541
+
542
+ function removeEmptyPayloadDirectories(directories) {
543
+ for (const directory of directories) {
544
+ let stat;
545
+ try {
546
+ stat = lstatSync(directory);
547
+ } catch (error) {
548
+ if (error?.code === 'ENOENT') continue;
549
+ throw error;
550
+ }
551
+ if (stat.isSymbolicLink() || !stat.isDirectory()) continue;
552
+ try {
553
+ // rmdir refuses non-empty contents; a user file left in a payload directory keeps it.
554
+ rmdirSync(directory);
555
+ } catch (error) {
556
+ if (error?.code === 'ENOTEMPTY' || error?.code === 'ENOTDIR') continue;
557
+ throw error;
558
+ }
559
+ }
560
+ }
561
+
529
562
  function manifestContent(files) {
530
563
  const hashes = Object.fromEntries(
531
564
  files
@@ -707,7 +740,8 @@ export async function run(args, context = {}) {
707
740
  const reasons = [];
708
741
  if (options.dryRun) reasons.push('DRY RUN');
709
742
  if (options.noColor || Object.hasOwn(env, 'NO_COLOR')) reasons.push('NO COLOR');
710
- if (!stdin.isTTY || !stdout.isTTY || Object.hasOwn(env, 'CI')) reasons.push('NON-INTERACTIVE');
743
+ // --yes accepts a non-TTY stdin/stdout, but never overrides CI: CI stays a forced preview.
744
+ if (Object.hasOwn(env, 'CI') || (!options.yes && (!stdin.isTTY || !stdout.isTTY))) reasons.push('NON-INTERACTIVE');
711
745
 
712
746
  if (reasons.length > 0) {
713
747
  stdout.write(`${reasons.join(' / ')} — no files written\n`);
@@ -790,6 +824,7 @@ export async function run(args, context = {}) {
790
824
  }
791
825
  removed += removeLegacyFiles(states.legacyEntries);
792
826
  removeRetiredDirectories(states.retiredDirectories);
827
+ removeEmptyPayloadDirectories(payloadDirectories(root, files));
793
828
  removeOwnershipManifest(root, states.manifest);
794
829
  progress.finish('ok', 'WRITE', `${removed} removed · ${states.counts.missing} already absent`, elapsedSince(writeStarted));
795
830
  } catch (error) {
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="146" height="20" role="img" aria-label="local: 1.0.0"><title>local: 1.0.0</title><g shape-rendering="crispEdges"><rect width="49" height="20" fill="#080d14"/><rect x="49" width="97" height="20" fill="#ff6337"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text x="255" y="140" textLength="290" transform="scale(.1)">local</text><text x="965" y="140" textLength="870" transform="scale(.1)" fill="#080D14">1.0.0</text></g></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="146" height="20" role="img" aria-label="local: 1.0.1"><title>local: 1.0.1</title><g shape-rendering="crispEdges"><rect width="49" height="20" fill="#080d14"/><rect x="49" width="97" height="20" fill="#ff6337"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text x="255" y="140" textLength="290" transform="scale(.1)">local</text><text x="965" y="140" textLength="870" transform="scale(.1)" fill="#080D14">1.0.1</text></g></svg>
package/docs/reference.md CHANGED
@@ -76,7 +76,7 @@ npm exec --yes --package @litfamily/litgrok@latest -- litgrok install
76
76
  Pin a version when you need a reproducible install:
77
77
 
78
78
  ```bash
79
- npm exec --yes --package @litfamily/litgrok@1.0.0 -- litgrok install
79
+ npm exec --yes --package @litfamily/litgrok@1.0.1 -- litgrok install
80
80
  ```
81
81
 
82
82
  Preview without writing files:
@@ -91,7 +91,7 @@ Default install writes the whole payload into the current project's `.grok/` tre
91
91
  npm exec --yes --package @litfamily/litgrok@latest -- litgrok install --user
92
92
  ```
93
93
 
94
- `--user` targets `~/.grok/skills`, `~/.grok/rules`, and `~/.grok/hooks`. Dry-run, `--no-color`, `NO_COLOR`, `CI`, and non-interactive runs do not mutate files; variable presence includes an empty value and `--yes` does not bypass these previews. The installer records SHA-256 ownership in `.grok/.litgrok-install-manifest.json`: byte-identical files stay untouched, and files matching a previously recorded payload hash may be replaced during an upgrade. A user-modified or otherwise unrecognized file refuses the whole install rather than being overwritten. A pristine pre-manifest 0.2.5 payload is recognized through the bundled migration snapshot while no manifest exists and receives a new manifest after the upgrade.
94
+ `--user` targets `~/.grok/skills`, `~/.grok/rules`, and `~/.grok/hooks`. Dry-run, `--no-color`, `NO_COLOR`, and `CI` do not mutate files regardless of `--yes`; variable presence includes an empty value. Without `--yes`, a non-interactive run is also a no-write preview; with `--yes`, the installer writes without a TTY as long as none of the above apply. The installer records SHA-256 ownership in `.grok/.litgrok-install-manifest.json`: byte-identical files stay untouched, and files matching a previously recorded payload hash may be replaced during an upgrade. A user-modified or otherwise unrecognized file refuses the whole install rather than being overwritten. A pristine pre-manifest 0.2.5 payload is recognized through the bundled migration snapshot while no manifest exists and receives a new manifest after the upgrade.
95
95
 
96
96
  ### Install output
97
97
 
@@ -221,12 +221,12 @@ Review is proposal-only. `autoApply` is always false, transcript text is inert d
221
221
  From an installed project, use the package CLI directly when you want a replayable foreground command:
222
222
 
223
223
  ```bash
224
- npm exec --yes --package @litfamily/litgrok@1.0.0 -- litgrok skill-loop review <session-id>
225
- npm exec --yes --package @litfamily/litgrok@1.0.0 -- litgrok skill-loop list
226
- npm exec --yes --package @litfamily/litgrok@1.0.0 -- litgrok skill-loop apply <proposal-id>
227
- npm exec --yes --package @litfamily/litgrok@1.0.0 -- litgrok skill-loop reject <proposal-id>
228
- npm exec --yes --package @litfamily/litgrok@1.0.0 -- litgrok skill-loop rollback <ledger-id>
229
- npm exec --yes --package @litfamily/litgrok@1.0.0 -- litgrok skill-loop curator
224
+ npm exec --yes --package @litfamily/litgrok@1.0.1 -- litgrok skill-loop review <session-id>
225
+ npm exec --yes --package @litfamily/litgrok@1.0.1 -- litgrok skill-loop list
226
+ npm exec --yes --package @litfamily/litgrok@1.0.1 -- litgrok skill-loop apply <proposal-id>
227
+ npm exec --yes --package @litfamily/litgrok@1.0.1 -- litgrok skill-loop reject <proposal-id>
228
+ npm exec --yes --package @litfamily/litgrok@1.0.1 -- litgrok skill-loop rollback <ledger-id>
229
+ npm exec --yes --package @litfamily/litgrok@1.0.1 -- litgrok skill-loop curator
230
230
  ```
231
231
 
232
232
  `apply` prints the ledger id needed for rollback. The deterministic curator is also user-invoked: by default it runs at most once every seven days, requires at least two idle hours, marks eligible unpinned agent-owned skills stale after 30 idle days, and archives them outside discovery after 90 idle days. It makes a full backup before a transition and never deletes a skill package; `--force` bypasses only the seven-day run interval for an explicit test or maintenance invocation.
@@ -266,6 +266,6 @@ MIT. See [LICENSE](../LICENSE).
266
266
 
267
267
  For an existing installation, use the scoped `install --dry-run` command above in the same project, or with the same `--user` scope. Review its paths, then run `install` in an interactive terminal. No uninstall or deletion of the old receipt is required. Known owned files are upgraded; repeating the install leaves current bytes unchanged. Modified, foreign, forged-owner, or symlinked destinations refuse before writing. Back up and reconcile a changed file yourself; do not delete the ownership receipt to force an upgrade. Uninstall uses the same scope and preserves unrelated settings and generated session state.
268
268
 
269
- For local archive verification, substitute an absolute tarball path in `npm exec --yes --package /absolute/path/to/package.tgz -- litgrok install`. Install the preserved old-name tarball first, then the scoped tarball into the same disposable scope. A tarball probe establishes local migration behavior only. `CI`, `NO_COLOR`, `--no-color`, and non-interactive modes remain no-write previews even with `--yes`. Existing globally installed aliases are not automatically replaced by a one-off npm execution.
269
+ For local archive verification, substitute an absolute tarball path in `npm exec --yes --package /absolute/path/to/package.tgz -- litgrok install`. Install the preserved old-name tarball first, then the scoped tarball into the same disposable scope. A tarball probe establishes local migration behavior only. `CI`, `NO_COLOR`, `--no-color`, and `--dry-run` remain no-write previews even with `--yes`. Without `--yes`, non-interactive modes are also a no-write preview; with `--yes`, they proceed without a TTY as long as none of the above apply. Existing globally installed aliases are not automatically replaced by a one-off npm execution.
270
270
 
271
271
  See [privacy](./privacy.md), [support](../SUPPORT.md), and [contributing](../CONTRIBUTING.md). The README uses an Ignition SVG cover constructed from explicit geometry and outlined glyphs, with a WebP fallback rendered from the same vector master. Its interlocking symbol and orange/lime/ivory palette match the terminal mark. The current master does not use image generation. Installation commands remain in the documentation text.
@@ -76,7 +76,7 @@ npm exec --yes --package @litfamily/litgrok@latest -- litgrok install
76
76
  재현 가능한 설치는 버전을 고정합니다.
77
77
 
78
78
  ```bash
79
- npm exec --yes --package @litfamily/litgrok@1.0.0 -- litgrok install
79
+ npm exec --yes --package @litfamily/litgrok@1.0.1 -- litgrok install
80
80
  ```
81
81
 
82
82
  파일을 쓰지 않고 미리보기:
@@ -91,7 +91,7 @@ npm exec --yes --package @litfamily/litgrok@latest -- litgrok install --dry-run
91
91
  npm exec --yes --package @litfamily/litgrok@latest -- litgrok install --user
92
92
  ```
93
93
 
94
- `--user`는 `~/.grok/skills`, `~/.grok/rules`, `~/.grok/hooks`를 대상으로 합니다. dry-run, `--no-color`, `NO_COLOR`, `CI`, non-interactive는 파일을 바꾸지 않습니다. 환경 변수 값이 비어 있어도 적용되며 `--yes`로 건너뛸 수 없습니다. installer는 `.grok/.litgrok-install-manifest.json`에 SHA-256 소유권을 기록합니다. byte가 같은 파일은 다시 쓰지 않고, 이전 payload hash와 일치하는 installer 소유 파일은 업그레이드에서 교체할 수 있습니다. 사용자가 바꿨거나 소유권을 확인할 수 없는 파일이 있으면 전체 설치를 거절하고 덮어쓰지 않습니다. manifest가 없을 때 0.2.5의 pristine payload는 내장 migration snapshot으로 인식하며 업그레이드 뒤 새 manifest를 기록합니다.
94
+ `--user`는 `~/.grok/skills`, `~/.grok/rules`, `~/.grok/hooks`를 대상으로 합니다. dry-run, `--no-color`, `NO_COLOR`, `CI`는 `--yes`와 무관하게 파일을 바꾸지 않습니다. 환경 변수 값이 비어 있어도 적용됩니다. `--yes` 없이 실행한 non-interactive 역시 파일을 바꾸지 않는 미리보기이며, `--yes`를 쓰면 위 조건이 없는 한 TTY 없이도 설치가 진행됩니다. installer는 `.grok/.litgrok-install-manifest.json`에 SHA-256 소유권을 기록합니다. byte가 같은 파일은 다시 쓰지 않고, 이전 payload hash와 일치하는 installer 소유 파일은 업그레이드에서 교체할 수 있습니다. 사용자가 바꿨거나 소유권을 확인할 수 없는 파일이 있으면 전체 설치를 거절하고 덮어쓰지 않습니다. manifest가 없을 때 0.2.5의 pristine payload는 내장 migration snapshot으로 인식하며 업그레이드 뒤 새 manifest를 기록합니다.
95
95
 
96
96
  ### 설치 출력
97
97
 
@@ -217,12 +217,12 @@ Review는 proposal만 만듭니다. `autoApply`는 항상 false이고 transcript
217
217
  설치된 project에서는 다음 package CLI를 foreground command로 실행할 수 있습니다.
218
218
 
219
219
  ```bash
220
- npm exec --yes --package @litfamily/litgrok@1.0.0 -- litgrok skill-loop review <session-id>
221
- npm exec --yes --package @litfamily/litgrok@1.0.0 -- litgrok skill-loop list
222
- npm exec --yes --package @litfamily/litgrok@1.0.0 -- litgrok skill-loop apply <proposal-id>
223
- npm exec --yes --package @litfamily/litgrok@1.0.0 -- litgrok skill-loop reject <proposal-id>
224
- npm exec --yes --package @litfamily/litgrok@1.0.0 -- litgrok skill-loop rollback <ledger-id>
225
- npm exec --yes --package @litfamily/litgrok@1.0.0 -- litgrok skill-loop curator
220
+ npm exec --yes --package @litfamily/litgrok@1.0.1 -- litgrok skill-loop review <session-id>
221
+ npm exec --yes --package @litfamily/litgrok@1.0.1 -- litgrok skill-loop list
222
+ npm exec --yes --package @litfamily/litgrok@1.0.1 -- litgrok skill-loop apply <proposal-id>
223
+ npm exec --yes --package @litfamily/litgrok@1.0.1 -- litgrok skill-loop reject <proposal-id>
224
+ npm exec --yes --package @litfamily/litgrok@1.0.1 -- litgrok skill-loop rollback <ledger-id>
225
+ npm exec --yes --package @litfamily/litgrok@1.0.1 -- litgrok skill-loop curator
226
226
  ```
227
227
 
228
228
  `apply`는 rollback에 필요한 ledger id를 출력합니다. Deterministic curator도 user-invoked입니다. 기본적으로 7일에 한 번만 실행되고, 마지막 activity 뒤 최소 2시간이 지나야 하며, pin되지 않은 agent-owned skill을 30일 idle 뒤 stale로 표시하고 90일 idle 뒤 discovery 밖으로 archive합니다. Transition 전에는 전체 backup을 만들고 skill package를 삭제하지 않습니다. `--force`는 명시적인 test 또는 maintenance 실행에서 7일 interval만 건너뜁니다.
@@ -262,6 +262,6 @@ MIT. [LICENSE](../LICENSE)를 보세요.
262
262
 
263
263
  기존 설치가 있는 같은 프로젝트에서 위 scoped `install --dry-run` 명령을 실행하세요. 사용자 범위였다면 동일하게 `--user`를 붙입니다. 경로를 검토한 뒤 대화형 터미널에서 `install`을 실행합니다. 먼저 삭제하거나 기존 소유권 영수증을 지울 필요가 없습니다. 소유권이 확인된 파일은 갱신하고, 재실행 시 같은 파일은 유지합니다. 수정·외부 파일, 위조한 소유자 또는 심볼릭 링크가 있으면 쓰기 전에 거부합니다. 수정 파일은 직접 백업하고 조정하세요. 업그레이드를 강제하려고 영수증을 지우지 마세요. 제거도 같은 범위를 사용하며 관련 없는 설정과 생성된 세션 상태는 보존합니다.
264
264
 
265
- 로컬 후보는 `npm exec --yes --package /absolute/path/to/candidate.tgz -- litgrok install`로 확인할 수 있습니다. 격리된 같은 범위에 보존한 기존 이름 tarball을 먼저 설치하고 scoped tarball을 적용하세요. 이는 로컬 이전 검증이며 공개 설치나 인증된 호스트 검증이 아닙니다. `CI`, `NO_COLOR`, `--no-color`, 비대화형 실행은 `--yes`가 있어도 쓰지 않는 미리보기입니다. 일회성 npm 실행은 기존 전역 설치 별칭을 자동 교체하지 않습니다.
265
+ 로컬 후보는 `npm exec --yes --package /absolute/path/to/candidate.tgz -- litgrok install`로 확인할 수 있습니다. 격리된 같은 범위에 보존한 기존 이름 tarball을 먼저 설치하고 scoped tarball을 적용하세요. 이는 로컬 이전 검증이며 공개 설치나 인증된 호스트 검증이 아닙니다. `CI`, `NO_COLOR`, `--no-color`, `--dry-run`은 `--yes`가 있어도 쓰지 않는 미리보기입니다. `--yes` 없이 실행한 비대화형 실행 역시 미리보기이며, `--yes`를 쓰면 위 조건이 없는 한 TTY 없이도 진행됩니다. 일회성 npm 실행은 기존 전역 설치 별칭을 자동 교체하지 않습니다.
266
266
 
267
267
  [개인정보와 로컬 데이터](./privacy.md), [지원](../SUPPORT.md), [기여 안내](../CONTRIBUTING.md)를 참고하세요. README에는 명시적인 도형과 윤곽선으로 변환한 글리프로 구성한 Ignition SVG 표지를 사용합니다. 맞물리는 심벌과 주황·라임·ivory 색상은 터미널 mark와 일치합니다. WebP 대체 이미지는 같은 벡터 원본에서 렌더링했으며, 현재 원본 제작에는 이미지 생성을 사용하지 않습니다. 설치 명령은 문서 본문에서 관리합니다.
@@ -0,0 +1,127 @@
1
+ {
2
+ "hooks": {
3
+ "SessionStart": [
4
+ {
5
+ "hooks": [
6
+ {
7
+ "type": "command",
8
+ "command": "node \"$GROK_PLUGIN_ROOT/.grok/hooks/session-start.mjs\"",
9
+ "timeout": 5
10
+ }
11
+ ]
12
+ }
13
+ ],
14
+ "UserPromptSubmit": [
15
+ {
16
+ "hooks": [
17
+ {
18
+ "type": "command",
19
+ "command": "node \"$GROK_PLUGIN_ROOT/.grok/hooks/user-prompt-submit.mjs\"",
20
+ "timeout": 5
21
+ }
22
+ ]
23
+ }
24
+ ],
25
+ "PreToolUse": [
26
+ {
27
+ "matcher": "^(Edit|edit|Write|write)$",
28
+ "hooks": [
29
+ {
30
+ "type": "command",
31
+ "command": "node \"$GROK_PLUGIN_ROOT/.grok/hooks/deliverable-hedge-guard.mjs\"",
32
+ "timeout": 5
33
+ }
34
+ ]
35
+ }
36
+ ],
37
+ "PostToolUse": [
38
+ {
39
+ "matcher": "^(Edit|edit|Write|write)$",
40
+ "hooks": [
41
+ {
42
+ "type": "command",
43
+ "command": "node \"$GROK_PLUGIN_ROOT/.grok/hooks/post-tool-use.mjs\"",
44
+ "timeout": 5
45
+ }
46
+ ]
47
+ }
48
+ ],
49
+ "PostToolUseFailure": [
50
+ {
51
+ "hooks": [
52
+ {
53
+ "type": "command",
54
+ "command": "node \"$GROK_PLUGIN_ROOT/.grok/hooks/post-tool-use-failure.mjs\"",
55
+ "timeout": 5
56
+ }
57
+ ]
58
+ }
59
+ ],
60
+ "Stop": [
61
+ {
62
+ "hooks": [
63
+ {
64
+ "type": "command",
65
+ "command": "node \"$GROK_PLUGIN_ROOT/.grok/hooks/stop.mjs\"",
66
+ "timeout": 5
67
+ }
68
+ ]
69
+ }
70
+ ],
71
+ "StopFailure": [
72
+ {
73
+ "hooks": [
74
+ {
75
+ "type": "command",
76
+ "command": "node \"$GROK_PLUGIN_ROOT/.grok/hooks/stop-failure.mjs\"",
77
+ "timeout": 5
78
+ }
79
+ ]
80
+ }
81
+ ],
82
+ "SubagentStart": [
83
+ {
84
+ "hooks": [
85
+ {
86
+ "type": "command",
87
+ "command": "node \"$GROK_PLUGIN_ROOT/.grok/hooks/subagent-start.mjs\"",
88
+ "timeout": 5
89
+ }
90
+ ]
91
+ }
92
+ ],
93
+ "SubagentStop": [
94
+ {
95
+ "hooks": [
96
+ {
97
+ "type": "command",
98
+ "command": "node \"$GROK_PLUGIN_ROOT/.grok/hooks/subagent-stop.mjs\"",
99
+ "timeout": 5
100
+ }
101
+ ]
102
+ }
103
+ ],
104
+ "PreCompact": [
105
+ {
106
+ "hooks": [
107
+ {
108
+ "type": "command",
109
+ "command": "node \"$GROK_PLUGIN_ROOT/.grok/hooks/pre-compact.mjs\"",
110
+ "timeout": 5
111
+ }
112
+ ]
113
+ }
114
+ ],
115
+ "PostCompact": [
116
+ {
117
+ "hooks": [
118
+ {
119
+ "type": "command",
120
+ "command": "node \"$GROK_PLUGIN_ROOT/.grok/hooks/post-compact.mjs\"",
121
+ "timeout": 5
122
+ }
123
+ ]
124
+ }
125
+ ]
126
+ }
127
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@litfamily/litgrok",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Grok Build skills, project rules, and hooks installer.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -18,6 +18,7 @@
18
18
  ".grok/agents",
19
19
  ".grok/rules",
20
20
  ".grok/hooks",
21
+ "hooks",
21
22
  "bin",
22
23
  "README.md",
23
24
  "README_ko-KR.md",
package/plugin.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "litgrok",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Grok Build skills, project rules, and bounded lifecycle hooks for evidence-first lit work.",
5
5
  "author": {
6
6
  "name": "LitGrok contributors"
@@ -11,17 +11,5 @@
11
11
  "keywords": ["grok-build", "skills", "hooks", "workflow", "evidence"],
12
12
  "skills": "./.grok/skills",
13
13
  "agents": "./.grok/agents",
14
- "hooks": [
15
- "./.grok/hooks/deliverable-hedge-guard.json",
16
- "./.grok/hooks/post-compact.json",
17
- "./.grok/hooks/post-tool-use-failure.json",
18
- "./.grok/hooks/post-tool-use.json",
19
- "./.grok/hooks/pre-compact.json",
20
- "./.grok/hooks/session-start.json",
21
- "./.grok/hooks/stop-failure.json",
22
- "./.grok/hooks/stop.json",
23
- "./.grok/hooks/subagent-start.json",
24
- "./.grok/hooks/subagent-stop.json",
25
- "./.grok/hooks/user-prompt-submit.json"
26
- ]
14
+ "hooks": "./hooks/hooks.json"
27
15
  }