litclaude-ai 0.3.21 → 0.3.22

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,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.22 - 2026-07-07 — full lit-family bare invocation release prep
4
+
5
+ - Prepare `litclaude-ai@0.3.22` for npm publication after extending bare lit-family prompt-hook routes to inject the installed `SKILL.md` body.
6
+ - Keep the safe natural-language `lit start work` BLOCKED handoff while explicit bare skill routes carry full prompt context.
7
+
3
8
  ## 0.3.21 - 2026-07-07 — full bare skill-body routing
4
9
 
5
10
  - Inject bundled `SKILL.md` bodies for bare `hyperplan`, `litresearch`, `lit research`, `init-deep`, and explicit `$start-work` prompt-hook routes so activation carries the same substantive skill contract as the installed payload.
package/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
  </p>
10
10
  <p align="center">
11
11
  <img src="https://img.shields.io/badge/npm-litclaude--ai-cb3837" />
12
- <img src="https://img.shields.io/badge/version-0.3.21-2ea44f" />
12
+ <img src="https://img.shields.io/badge/version-0.3.22-2ea44f" />
13
13
  <img src="https://img.shields.io/badge/Claude%20Code-plugin-blueviolet" />
14
14
  <img src="https://img.shields.io/badge/license-MIT-blue" />
15
15
  </p>
@@ -22,10 +22,10 @@
22
22
  > `litclaude@litclaude-ai`, so normal `claude` launches can load the
23
23
  > LitClaude skills and hooks without a long `--plugin-dir` command.
24
24
 
25
- This checkout is prepared as `litclaude-ai@0.3.21` for personal install
25
+ This checkout is prepared as `litclaude-ai@0.3.22` for personal install
26
26
  convenience. The repo can remain quiet; preparing npm package metadata here does
27
27
  not imply public repo promotion, marketplace publication, or advertisement.
28
- Future package releases still require explicit user approval. The v0.3.21
28
+ Future package releases still require explicit user approval. The v0.3.22
29
29
  release materials inject the bundled skill bodies for bare `hyperplan`,
30
30
  `litresearch`, `lit research`, `init-deep`, and explicit `$start-work` prompt-hook routes while
31
31
  preserving the v0.3.19 adversarial planning skill, the v0.3.18 read-only `lit-recap` session recap surface, the v0.3.17 separate-worker native `/goal` launcher, the v0.3.16
@@ -113,7 +113,7 @@ directory, the normal install command works:
113
113
 
114
114
  ```bash
115
115
  cd /tmp
116
- npx --yes litclaude-ai@0.3.21 install
116
+ npx --yes litclaude-ai@0.3.22 install
117
117
  ```
118
118
 
119
119
  Validate the installed plugin:
@@ -126,7 +126,7 @@ The installer also sets Claude Code's `statusLine` command to the packaged
126
126
  LitClaude HUD. A typical no-color render starts like:
127
127
 
128
128
  ```text
129
- [🔥LITCLAUDE v0.3.21] | O4.8 │ ctx [▎░░] 9%/1000k │ 5h [▏░] 4% ↻2h15m │ 1w [▊░] 35% ↻3d6h │ git main +3 ✓
129
+ [🔥LITCLAUDE v0.3.22] | O4.8 │ ctx [▎░░] 9%/1000k │ 5h [▏░] 4% ↻2h15m │ 1w [▊░] 35% ↻3d6h │ git main +3 ✓
130
130
  ```
131
131
 
132
132
  The `↻` suffix is a compact rate-limit reset countdown. It is separated from
package/README_ko-KR.md CHANGED
@@ -9,7 +9,7 @@
9
9
  </p>
10
10
  <p align="center">
11
11
  <img src="https://img.shields.io/badge/npm-litclaude--ai-cb3837" />
12
- <img src="https://img.shields.io/badge/version-0.3.21-2ea44f" />
12
+ <img src="https://img.shields.io/badge/version-0.3.22-2ea44f" />
13
13
  <img src="https://img.shields.io/badge/Claude%20Code-plugin-blueviolet" />
14
14
  <img src="https://img.shields.io/badge/license-MIT-blue" />
15
15
  </p>
@@ -26,11 +26,11 @@
26
26
  > 설치되므로, 매번 긴 `--plugin-dir` 없이 일반 `claude` 실행에서
27
27
  > LitClaude skill과 hook을 불러올 수 있습니다.
28
28
 
29
- 현재 checkout은 `litclaude-ai@0.3.21` 배포 준비용으로 정리되어 있습니다. 목적은
29
+ 현재 checkout은 `litclaude-ai@0.3.22` 배포 준비용으로 정리되어 있습니다. 목적은
30
30
  다른 PC에서도 빠르게 설치하기 위한 개인용 package metadata를 갖추는 것입니다.
31
31
  npm package metadata를 준비했다고 해서 홍보, 공개 저장소 운영, Claude
32
32
  marketplace 등록을 의미하지는 않습니다. 새 버전 배포는 항상 별도의 명시적
33
- 승인 후에 진행합니다. v0.3.21 release material은 bare `hyperplan`,
33
+ 승인 후에 진행합니다. v0.3.22 release material은 bare `hyperplan`,
34
34
  `litresearch`, `lit research`, `init-deep`, explicit `$start-work` prompt-hook route에
35
35
  bundled skill body를 주입하면서, v0.3.19 adversarial planning
36
36
  skill, v0.3.18 read-only `lit-recap` session recap surface, v0.3.17 별도 worker 기반 native `/goal`
@@ -117,7 +117,7 @@ checkout을 먼저 해석해서 `sh: litclaude-ai: command not found`로 실패
117
117
 
118
118
  ```bash
119
119
  cd /tmp
120
- npx --yes litclaude-ai@0.3.21 install
120
+ npx --yes litclaude-ai@0.3.22 install
121
121
  ```
122
122
 
123
123
  설치 상태를 확인합니다.
@@ -130,7 +130,7 @@ installer는 Claude Code의 `statusLine` command도 packaged LitClaude HUD로
130
130
  설정합니다. 색상을 제거한 예시는 다음처럼 시작합니다.
131
131
 
132
132
  ```text
133
- [🔥LITCLAUDE v0.3.21] | O4.8 │ ctx [▎░░] 9%/1000k │ 5h [▏░] 4% ↻2h15m │ 1w [▊░] 35% ↻3d6h │ git main +3 ✓
133
+ [🔥LITCLAUDE v0.3.22] | O4.8 │ ctx [▎░░] 9%/1000k │ 5h [▏░] 4% ↻2h15m │ 1w [▊░] 35% ↻3d6h │ git main +3 ✓
134
134
  ```
135
135
 
136
136
  `↻` 표시는 rate-limit reset까지 남은 시간을 짧게 보여주는 countdown입니다.
@@ -1,6 +1,6 @@
1
1
  # LitClaude Release Checklist
2
2
 
3
- Status: `litclaude-ai@0.3.21` is the current release candidate — a full bare
3
+ Status: `litclaude-ai@0.3.22` is the current release candidate — a full bare
4
4
  skill-body prompt-hook routing release on top of the planning-only Hyperplan skill and read-only `lit-recap`
5
5
  session recap surface (command, skill, and bounded hook routing
6
6
  including the Korean `리캡` trigger), the dry-run-first native `/goal`
@@ -12,9 +12,9 @@ side-effect-free, the launcher starts only a separate Claude Code
12
12
  print/background worker, and the release preserves the Korean polishing
13
13
  command, strict multi-agent review pipeline, fidelity guardrails, package
14
14
  hygiene checks, native route gates, and safe start-work handoff behavior.
15
- `package.json` is aligned to `0.3.21`,
16
- `plugins/litclaude/.claude-plugin/plugin.json` is aligned to `0.3.21`, and the
17
- plugin-local MCP server reports `0.3.21`.
15
+ `package.json` is aligned to `0.3.22`,
16
+ `plugins/litclaude/.claude-plugin/plugin.json` is aligned to `0.3.22`, and the
17
+ plugin-local MCP server reports `0.3.22`.
18
18
 
19
19
  This release carries the v0.2.2 Dynamic workflow hardening surfaces:
20
20
  `/dynamic-workflow`, `workflow-check --json`, native `/goal` fallback guidance,
@@ -63,9 +63,9 @@ No npm publication is required for this track.
63
63
  Before requesting publication approval, confirm these artifacts from the current
64
64
  checkout:
65
65
 
66
- - `package.json` version is `0.3.21`.
67
- - `plugins/litclaude/.claude-plugin/plugin.json` version is `0.3.21`.
68
- - `plugins/litclaude/bin/litclaude-mcp.js` reports server version `0.3.21`.
66
+ - `package.json` version is `0.3.22`.
67
+ - `plugins/litclaude/.claude-plugin/plugin.json` version is `0.3.22`.
68
+ - `plugins/litclaude/bin/litclaude-mcp.js` reports server version `0.3.22`.
69
69
  - Prompt-hook tests cover bundled `SKILL.md` body injection for bare `hyperplan`, `litresearch`, `lit research`, `init-deep`, and explicit `$start-work`, while natural-language `lit start work` stays BLOCKED.
70
70
  - `lit search` and `lit query` route to `/litclaude:litresearch` without activating on slash mentions, code spans, or non-lit prompts.
71
71
  - 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.3.21",
3
+ "version": "0.3.22",
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.",
4
- "version": "0.3.21",
4
+ "version": "0.3.22",
5
5
  "author": {
6
6
  "name": "LitClaude contributors"
7
7
  },
@@ -48,17 +48,17 @@ const plainWordBoundary = /^[A-Za-z0-9]$/u;
48
48
  const compoundWordBoundary = /^[A-Za-z0-9_-]$/u;
49
49
 
50
50
  const triggerByToken = {
51
- "deep-interview": { command: "/litclaude:deep-interview", skill: "Skill(deep-interview)", discipline: "deep-interview" },
52
- "dynamic-workflow": { command: "/litclaude:dynamic-workflow", skill: "Skill(lit-loop)", discipline: "dynamic-workflow" },
53
- "agent-team": { command: "/litclaude:lit-loop", skill: "Skill(lit-loop)", discipline: "agent-team" },
51
+ "deep-interview": { command: "/litclaude:deep-interview", skill: "Skill(deep-interview)", skillId: "deep-interview", discipline: "deep-interview" },
52
+ "dynamic-workflow": { command: "/litclaude:dynamic-workflow", skill: "Skill(lit-loop)", skillId: "lit-loop", discipline: "dynamic-workflow" },
53
+ "agent-team": { command: "/litclaude:lit-loop", skill: "Skill(lit-loop)", skillId: "lit-loop", discipline: "agent-team" },
54
54
  hyperplan: { command: "/litclaude:lit-plan", skill: "Skill(hyperplan)", skillId: "hyperplan", discipline: "lit-plan" },
55
55
  "init-deep": { command: "/litclaude:init-deep", skill: "Skill(init-deep)", skillId: "init-deep", discipline: "init-deep" },
56
- "lit-plan": { command: "/litclaude:lit-plan", skill: "Skill(lit-plan)", discipline: "lit-plan" },
57
- "lit-recap": { command: "/litclaude:lit-recap", skill: "Skill(lit-recap)", discipline: "lit-recap" },
58
- "lit-loop": { command: "/litclaude:lit-loop", skill: "Skill(lit-loop)", discipline: "lit-loop" },
56
+ "lit-plan": { command: "/litclaude:lit-plan", skill: "Skill(lit-plan)", skillId: "lit-plan", discipline: "lit-plan" },
57
+ "lit-recap": { command: "/litclaude:lit-recap", skill: "Skill(lit-recap)", skillId: "lit-recap", discipline: "lit-recap" },
58
+ "lit-loop": { command: "/litclaude:lit-loop", skill: "Skill(lit-loop)", skillId: "lit-loop", discipline: "lit-loop" },
59
59
  "start-work": { command: "/litclaude:start-work", skill: "Skill(start-work)", skillId: "start-work", discipline: "start-work" },
60
- "review-work": { command: "/litclaude:review-work", skill: "Skill(review-work)", discipline: "review-work" },
61
- litgoal: { command: "/litclaude:litgoal", skill: "Skill(litgoal)", discipline: "litgoal" },
60
+ "review-work": { command: "/litclaude:review-work", skill: "Skill(review-work)", skillId: "review-work", discipline: "review-work" },
61
+ litgoal: { command: "/litclaude:litgoal", skill: "Skill(litgoal)", skillId: "litgoal", discipline: "litgoal" },
62
62
  litresearch: { command: "/litclaude:litresearch", skill: "Skill(litresearch)", skillId: "litresearch", discipline: "litresearch" },
63
63
  };
64
64
 
@@ -160,6 +160,12 @@ const findDollarCommandTrigger = (raw) => {
160
160
  return { ...triggerByToken[match[1]], source: "dollar-command" };
161
161
  };
162
162
 
163
+ const findLeadingBareCommandTrigger = (raw) => {
164
+ const match = /^\s*(deep-interview|init-deep|lit-plan|lit-recap|lit-loop|start-work|review-work|litgoal|litresearch)(?=$|[^\w-])/u.exec(raw);
165
+ if (!match) return undefined;
166
+ return { ...triggerByToken[match[1]], source: "bare-command" };
167
+ };
168
+
163
169
  const hasLitTrigger = (raw) => containsCompoundBoundedWord(raw, "lit") || containsCompoundBoundedWord(raw, "litwork");
164
170
 
165
171
  const hangulSyllable = /^[가-힣]$/u;
@@ -211,6 +217,8 @@ const findWorkflowTrigger = (prompt) => {
211
217
  const dollarTrigger = findDollarCommandTrigger(raw);
212
218
  if (dollarTrigger) return dollarTrigger;
213
219
  if (containsSlashCommandMention(raw)) return undefined;
220
+ const bareCommandTrigger = findLeadingBareCommandTrigger(raw);
221
+ if (bareCommandTrigger) return bareCommandTrigger;
214
222
  if (containsCompoundBoundedWord(raw, "hyperplan")) return { ...triggerByToken.hyperplan, source: "bare-command" };
215
223
  if (containsCompoundBoundedWord(raw, "init-deep")) return { ...triggerByToken["init-deep"], source: "bare-command" };
216
224
  const recapTrigger = findRecapTrigger(raw);
@@ -250,12 +258,13 @@ const teamGateContext = (discipline) => {
250
258
  return ["Native agent team setup gate: CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 is not set, so do not claim a teammate launch. To enable native teams, launch with `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 claude --teammate-mode auto` or set `env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` plus optional `teammateMode: auto`; fallback to subagent delegation or Dynamic workflow meanwhile."];
251
259
  };
252
260
 
253
- const recapContext = ({ command, skill, discipline, source }) => [
261
+ const recapContext = ({ command, skill, skillId, discipline, source }) => [
254
262
  `Treat this prompt as an explicit request to use LitClaude ${discipline} discipline now; load or follow ${command} / ${skill} semantics before ordinary task execution.`,
255
263
  modeContracts[discipline],
256
264
  "Read-only recap surfaces: read .litclaude/litgoal/goals.json, .litclaude/litgoal/ledger.jsonl, and .litclaude/litgoal/brief.md when present (plus repo-level evidence/ paths), and combine them with current-session context. The read-only `litclaude-ai litgoal status --json` and `criteria` subcommands are the only litgoal CLI reads allowed.",
257
265
  "Output contract: reply in Korean by default using the fixed lit-recap headers from Skill(lit-recap); switch the body to English only when the user asks (--en / in English / 영어); produce the brief `## ⚡ 요약` digest on --brief / 짧게; keep technical tokens (paths, commands, identifiers) verbatim.",
258
266
  `Activation source: ${source ?? "legacy"}. Slash commands and slash-command mentions are handled by Claude Code's native command surface and do not activate this prompt hook. Code spans, code fences, substrings, and compound tokens are ignored. Secret-bearing prompt material is never persisted raw; recap output may only reference redacted summaries and evidence paths.`,
267
+ ...staticSkillBodyContext({ skillId }),
259
268
  ].join(" ");
260
269
 
261
270
  const litworkContext = ({ command, skill, skillId, discipline, softConfirm, safetyBlock, source }, input) => [
@@ -3,7 +3,7 @@
3
3
  import { readPublicSource } from "../lib/public-source-reader/reader.mjs";
4
4
 
5
5
  const protocolVersion = "2024-11-05";
6
- const serverVersion = "0.3.21";
6
+ const serverVersion = "0.3.22";
7
7
 
8
8
  const publicSourceReadTool = {
9
9
  name: "public_source_read",