litclaude-ai 0.4.4 → 0.4.5

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
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4.5 - 2026-09-02 — vendored-corpus companions and Skill-id namespace
4
+
5
+ - Record Claude Code plugin-namespaced Skill tool ids (`plugin:skill`) as the
6
+ unprefixed skill id so skill-loop consultations match `SKILL_ID`.
7
+ - Count vendor license, provenance, and NOTICE companions in family
8
+ payload-parity so packed skills keep the material they name after the
9
+ sibling vendor-layout moves.
10
+ - This is a local release candidate only; no publish, tag, or push was performed.
11
+
3
12
  ## 0.4.4 - 2026-09-02 — inode-reuse hardening and Linux rotation safety
4
13
 
5
14
  - Bind regular-file reads and state transitions to ctime/birthtime-aware identities,
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- <p align="center"><img src="https://cdn.jsdelivr.net/npm/litclaude-ai@0.4.4/cover.png" width="100%" alt="LitClaude — Claude Code-native workflow package" /></p>
1
+ <p align="center"><img src="https://cdn.jsdelivr.net/npm/litclaude-ai@0.4.5/cover.png" width="100%" alt="LitClaude — Claude Code-native workflow package" /></p>
2
2
 
3
3
  ```text
4
4
  ██╗ ██╗████████╗
@@ -22,7 +22,7 @@
22
22
  </p>
23
23
  <p align="center">
24
24
  <img src="https://img.shields.io/badge/npm-litclaude--ai-cb3837" alt="npm: litclaude-ai" />
25
- <img src="https://img.shields.io/badge/version-0.4.4-2ea44f" alt="version 0.4.4" />
25
+ <img src="https://img.shields.io/badge/version-0.4.5-2ea44f" alt="version 0.4.5" />
26
26
  <img src="https://img.shields.io/badge/Claude%20Code-plugin-blueviolet" alt="Claude Code plugin" />
27
27
  <img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT license" />
28
28
  </p>
@@ -92,13 +92,13 @@ npx --yes litclaude-ai@latest install
92
92
  For a reproducible install, pin the current package version:
93
93
 
94
94
  ```bash
95
- npm view litclaude-ai@0.4.4 version
95
+ npm view litclaude-ai@0.4.5 version
96
96
  ```
97
97
 
98
- If that lookup returns `0.4.4`, the exact install is available:
98
+ If that lookup returns `0.4.5`, the exact install is available:
99
99
 
100
100
  ```bash
101
- npx --yes litclaude-ai@0.4.4 install
101
+ npx --yes litclaude-ai@0.4.5 install
102
102
  ```
103
103
 
104
104
  Otherwise, wait for explicit human publication before using that pin. Check the
package/README_ko-KR.md CHANGED
@@ -1,4 +1,4 @@
1
- <p align="center"><img src="https://cdn.jsdelivr.net/npm/litclaude-ai@0.4.4/cover.png" width="100%" alt="LitClaude — Claude Code-native workflow package" /></p>
1
+ <p align="center"><img src="https://cdn.jsdelivr.net/npm/litclaude-ai@0.4.5/cover.png" width="100%" alt="LitClaude — Claude Code-native workflow package" /></p>
2
2
 
3
3
  ```text
4
4
  ██╗ ██╗████████╗
@@ -22,7 +22,7 @@
22
22
  </p>
23
23
  <p align="center">
24
24
  <img src="https://img.shields.io/badge/npm-litclaude--ai-cb3837" alt="npm: litclaude-ai" />
25
- <img src="https://img.shields.io/badge/version-0.4.4-2ea44f" alt="version 0.4.4" />
25
+ <img src="https://img.shields.io/badge/version-0.4.5-2ea44f" alt="version 0.4.5" />
26
26
  <img src="https://img.shields.io/badge/Claude%20Code-plugin-blueviolet" alt="Claude Code plugin" />
27
27
  <img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT license" />
28
28
  </p>
@@ -94,13 +94,13 @@ npx --yes litclaude-ai@latest install
94
94
  뒤 고정합니다.
95
95
 
96
96
  ```bash
97
- npm view litclaude-ai@0.4.4 version
97
+ npm view litclaude-ai@0.4.5 version
98
98
  ```
99
99
 
100
- 조회 결과가 `0.4.4`이면 exact install을 사용할 수 있습니다.
100
+ 조회 결과가 `0.4.5`이면 exact install을 사용할 수 있습니다.
101
101
 
102
102
  ```bash
103
- npx --yes litclaude-ai@0.4.4 install
103
+ npx --yes litclaude-ai@0.4.5 install
104
104
  ```
105
105
 
106
106
  그렇지 않으면 명시적인 human publication을 기다립니다. Pin은 그 뒤에 사용합니다.
@@ -1,6 +1,6 @@
1
1
  # LitClaude Release Checklist
2
2
 
3
- Status: `litclaude-ai@0.4.4` is the current release candidate — exact canonical
3
+ Status: `litclaude-ai@0.4.5` is the current release candidate — exact canonical
4
4
  frontend corpus plus Claude-native `autoresearch`, `autoconference`, and `wikify`
5
5
  workflow-family integration. It byte-pins the frontend library, legal companions,
6
6
  family source closures, and adapters through independent commitments and package
@@ -45,9 +45,9 @@ side-effect-free, the launcher starts only a separate Claude Code
45
45
  print/background worker, and the release preserves the Korean polishing
46
46
  command, strict multi-agent review pipeline, fidelity guardrails, package
47
47
  hygiene checks, native route gates, and safe start-work handoff behavior.
48
- `package.json` is aligned to `0.4.4`,
49
- `plugins/litclaude/.claude-plugin/plugin.json` is aligned to `0.4.4`, and the
50
- plugin-local MCP server reports `0.4.4`.
48
+ `package.json` is aligned to `0.4.5`,
49
+ `plugins/litclaude/.claude-plugin/plugin.json` is aligned to `0.4.5`, and the
50
+ plugin-local MCP server reports `0.4.5`.
51
51
 
52
52
  This candidate adds an approval-gated skill learning loop. Validated
53
53
  consultations, bounded corrections, iteration signals, and coverage gaps may
@@ -295,9 +295,9 @@ checkout and from an isolated install of the packed tarball:
295
295
  Before requesting publication approval, confirm these artifacts from the current
296
296
  checkout:
297
297
 
298
- - `package.json` version is `0.4.4`.
299
- - `plugins/litclaude/.claude-plugin/plugin.json` version is `0.4.4`.
300
- - `plugins/litclaude/bin/litclaude-mcp.js` reports server version `0.4.4`.
298
+ - `package.json` version is `0.4.5`.
299
+ - `plugins/litclaude/.claude-plugin/plugin.json` version is `0.4.5`.
300
+ - `plugins/litclaude/bin/litclaude-mcp.js` reports server version `0.4.5`.
301
301
  - Prompt-hook tests cover bundled `SKILL.md` body injection for bare `hyperplan`, `litresearch`, `lit research`, `init-deep`, and explicit leading `$start-work`; diagnostic/copy mentions stay inert while leading natural-language `lit start work` stays BLOCKED.
302
302
  - `lit search` and `lit query` route to `/litclaude:litresearch` without activating on slash mentions, code spans, or non-lit prompts.
303
303
  - Litresearch web lanes require public API/feed preference, validator-first checks, route traces, prompt-injection quarantine, and honest auth/paywall/private-data stop reasons.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "litclaude-ai",
3
- "version": "0.4.4",
3
+ "version": "0.4.5",
4
4
  "description": "Claude Code-native workflow distribution.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "litclaude",
3
3
  "description": "Claude Code-native workflow plugin with a bounded-authority start-work lifecycle.",
4
- "version": "0.4.4",
4
+ "version": "0.4.5",
5
5
  "author": {
6
6
  "name": "LitClaude contributors"
7
7
  },
@@ -9,7 +9,7 @@ import {
9
9
  } from "../lib/wikify-knowledge.mjs";
10
10
 
11
11
  const protocolVersion = "2024-11-05";
12
- const serverVersion = "0.4.4";
12
+ const serverVersion = "0.4.5";
13
13
 
14
14
  const publicSourceReadTool = {
15
15
  name: "public_source_read",
@@ -26,7 +26,7 @@
26
26
  ],
27
27
  "PreToolUse": [
28
28
  {
29
- "matcher": "^(Read|Grep|Glob|Write|Edit|MultiEdit|NotebookEdit|Bash|Agent)$",
29
+ "matcher": "^(Read|Grep|Glob|Write|Edit|MultiEdit|NotebookEdit|Bash|Agent|Skill)$",
30
30
  "hooks": [
31
31
  {
32
32
  "type": "command",
@@ -29,7 +29,7 @@ export const canonicalSkillResourceManifest = Object.freeze(
29
29
  ["lib/skill-loop/common.mjs", "c65eec46eaad369b989337876960dcba9a0f25f40320862dc1c4a298a7e7a730"],
30
30
  ["lib/skill-loop/config.mjs", "833e73f74ffdf43068a95aa6c50dc29e9080b0549871bdc0a5669a01c752cba6"],
31
31
  ["lib/skill-loop/curator.mjs", "6776eb46fb0c1f79a2a217f495b2195e54cac044f61dfe9298447c9b2bd2de76"],
32
- ["lib/skill-loop/hook-runtime.mjs", "128f7ce2897a1197d90b49bf9284d0a2b8d53d8e5b68ef9dcbb84e0021f83b5e"],
32
+ ["lib/skill-loop/hook-runtime.mjs", "34af32eb44e04aed2f452dcc01556f4f113b9e4896bcdb633402c4e273763006"],
33
33
  ["lib/skill-loop/hook-state.mjs", "cbe544247069ee004acb389f70ef7d9f25f0afd8a5df9c5567c365bf47989938"],
34
34
  ["lib/skill-loop/ledger.mjs", "5367b62c21f8bad2e8efb34caa9e2a5c79de85d9d762d7a583cc66ea9da325e5"],
35
35
  ["lib/skill-loop/mutation-transaction.mjs", "485b871b3cc5e8c3234df9bf0a84f240fddc4f91dbff94607d1e046248bf33f9"],
@@ -4,6 +4,7 @@ import { dirname, isAbsolute, join, relative, resolve } from "node:path";
4
4
 
5
5
  import { containsSecret } from "../secret-shapes.mjs";
6
6
  import { recordObservation } from "../skill-observer.mjs";
7
+ import { SKILL_ID } from "./common.mjs";
7
8
  import { readSkillLoopConfig } from "./config.mjs";
8
9
  import { runCurator, SESSION_START_CURATOR_LIMITS } from "./curator.mjs";
9
10
  import {
@@ -73,7 +74,20 @@ function resolveInsideSkillRoot(skillRoot, requested) {
73
74
  return /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u.test(skillId) ? skillId : null;
74
75
  }
75
76
 
76
- export function skillIdFromRead(input, workspaceRoot, pluginRoot) {
77
+ function skillIdFromSkillTool(raw) {
78
+ if (typeof raw !== "string") return null;
79
+ const separator = raw.indexOf(":");
80
+ if (separator === -1) return SKILL_ID.test(raw) ? raw : null;
81
+ const plugin = raw.slice(0, separator);
82
+ const name = raw.slice(separator + 1);
83
+ if (plugin.length === 0 || name.length === 0 || name.includes(":")) return null;
84
+ return SKILL_ID.test(name) ? name : null;
85
+ }
86
+
87
+ export function skillIdFromToolUse(input, workspaceRoot, pluginRoot) {
88
+ if (input?.tool_name === "Skill") {
89
+ return skillIdFromSkillTool(input?.tool_input?.skill);
90
+ }
77
91
  if (input?.tool_name !== "Read" || typeof input?.tool_input?.file_path !== "string"
78
92
  || input.tool_input.file_path.length < 1 || input.tool_input.file_path.length > MAX_READ_PATH_CHARS) return null;
79
93
  const requested = isAbsolute(input.tool_input.file_path)
@@ -85,7 +99,7 @@ export function skillIdFromRead(input, workspaceRoot, pluginRoot) {
85
99
 
86
100
  export function observePreToolUse(root, input, pluginRoot) {
87
101
  if (typeof input?.session_id !== "string") return null;
88
- const skillId = skillIdFromRead(input, root, pluginRoot);
102
+ const skillId = skillIdFromToolUse(input, root, pluginRoot);
89
103
  const recorded = recordToolIteration(root, input.session_id, skillId ?? undefined);
90
104
  if (recorded && skillId) recordSkillConsult(root, skillId);
91
105
  return recorded ? skillId : null;