claude-alfred 0.3.8 → 0.3.9

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/README.ja.md CHANGED
@@ -157,10 +157,6 @@ npm update -g claude-alfred # CLI、hooks、MCP サーバー、ダッシ
157
157
  | スキル | やること |
158
158
  |--------|----------|
159
159
  | `/alfred:init` | プロジェクト初期化。マルチエージェントでコードベースを探索し、ステアリングドキュメントを生成 |
160
- | `/alfred:quarters` | Claude Code のプロジェクト設定ウィザード(settings, hooks, rules) |
161
- | `/alfred:furnish` | 設定ファイルを1つ作成・ブラッシュアップ(skill, rule, hook, CLAUDE.md 等) |
162
- | `/alfred:valet` | Anthropic 公式ガイドに基づくスキル品質監査。6カテゴリ21チェック |
163
- | `/alfred:concierge` | 全機能のクイックリファレンス |
164
160
 
165
161
  ## MCP ツール
166
162
 
@@ -176,7 +172,7 @@ npm update -g claude-alfred # CLI、hooks、MCP サーバー、ダッシ
176
172
 
177
173
  | イベント | 動作 |
178
174
  |----------|------|
179
- | SessionStart | Spec コンテキスト復元、ナレッジ同期、セットアップ提案(`/alfred:init`, `/alfred:quarters`) |
175
+ | SessionStart | Spec コンテキスト復元、ナレッジ同期、セットアップ提案(`/alfred:init`) |
180
176
  | UserPromptSubmit | セマンティック検索 + スキル提案 + Spec enforcement(Spec なし実装ブロック、未承認 M/L/XL ブロック) |
181
177
  | PreToolUse | 3層 enforcement — review gate, intent guard, approval gate。ゲートが有効な間は Edit/Write をブロック |
182
178
  | PostToolUse | tasks.md / session.md の進捗自動更新。Wave 完了検知とレビューゲート設定。コミット後のドリフト検出。PR マージ後の `/alfred:harvest` 提案、大きな参照ファイル読み込み時の `/alfred:archive` 提案 |
package/README.md CHANGED
@@ -157,10 +157,6 @@ Run `alfred doctor` to verify both are in sync.
157
157
  | Skill | What it does |
158
158
  |-------|-------------|
159
159
  | `/alfred:init` | Project onboarding. Multi-agent codebase exploration, steering docs, template setup |
160
- | `/alfred:quarters` | Project-wide Claude Code configuration wizard (settings, hooks, rules) |
161
- | `/alfred:furnish` | Creates or polishes a single config file (skill, rule, hook, CLAUDE.md, etc.) |
162
- | `/alfred:valet` | Audits skills against Anthropic's official guide. Scores 21 checks across 6 categories |
163
- | `/alfred:concierge` | Quick reference for all alfred capabilities |
164
160
 
165
161
  ## MCP tools
166
162
 
@@ -176,7 +172,7 @@ These run automatically. You don't configure them.
176
172
 
177
173
  | Event | What happens |
178
174
  |-------|-------------|
179
- | SessionStart | Restores spec context, syncs knowledge index, suggests missing setup (`/alfred:init`, `/alfred:quarters`) |
175
+ | SessionStart | Restores spec context, syncs knowledge index, suggests missing setup (`/alfred:init`) |
180
176
  | UserPromptSubmit | Semantic search + skill suggestions + spec enforcement (blocks implementation without a spec, blocks unapproved M/L/XL) |
181
177
  | PreToolUse | Three-layer enforcement — review gate, intent guard, approval gate. Blocks Edit/Write when gates are active |
182
178
  | PostToolUse | Auto-updates task progress in tasks.md and session.md. Detects wave completion and sets review gates. Drift detection after commits. Suggests `/alfred:harvest` after PR merge, `/alfred:archive` for large reference files |
package/dist/cli.mjs CHANGED
@@ -371,7 +371,7 @@ const main = defineCommand({
371
371
  async run() {
372
372
  const { Store } = await import("./store-8O9WUwMu.mjs").then((n) => (n.t(), n.r));
373
373
  const { Embedder } = await import("./embedder-D3hJoryD.mjs");
374
- const { serveMCP } = await import("./server-BheF_pZr.mjs");
374
+ const { serveMCP } = await import("./server-BTRnvbYy.mjs");
375
375
  const store = Store.openDefault();
376
376
  let emb = null;
377
377
  try {
@@ -422,7 +422,7 @@ const main = defineCommand({
422
422
  description: "Event name"
423
423
  } },
424
424
  async run({ args }) {
425
- const { runHook } = await import("./dispatcher-BjpWdTBs.mjs").then((n) => (n.i(), n.t));
425
+ const { runHook } = await import("./dispatcher-VEw4zMBd.mjs").then((n) => (n.i(), n.t));
426
426
  await runHook(args.event);
427
427
  }
428
428
  }),
@@ -3,7 +3,7 @@ import { n as __esmMin } from "./chunk-CAm0Jl7e.mjs";
3
3
  import { c as incrementHitCount, f as searchKnowledgeKeyword, i as getKnowledgeByIDs, l as init_knowledge } from "./knowledge-C7rEfFSX.mjs";
4
4
  import { i as vectorSearchKnowledge, r as init_vectors } from "./vectors-C3yIO_A5.mjs";
5
5
  import { a as subTypeHalfLife, i as subTypeBoost, n as init_fts, r as searchKnowledgeFTS } from "./fts-DUZkPJPD.mjs";
6
- import { i as init_dispatcher, n as emitAdditionalContext } from "./dispatcher-BjpWdTBs.mjs";
6
+ import { i as init_dispatcher, n as emitAdditionalContext } from "./dispatcher-VEw4zMBd.mjs";
7
7
  //#region src/mcp/helpers.ts
8
8
  function truncate(s, maxLen) {
9
9
  const runes = [...s];
@@ -89,27 +89,27 @@ async function runHook(event) {
89
89
  }
90
90
  }
91
91
  async function handleSessionStart(ev, signal) {
92
- const { sessionStart } = await import("./session-start-Bul0GicD.mjs");
92
+ const { sessionStart } = await import("./session-start-ctDzNSg-.mjs");
93
93
  await sessionStart(ev, signal);
94
94
  }
95
95
  async function handlePreCompact(ev, signal) {
96
- const { preCompact } = await import("./pre-compact-Cdjtld4A.mjs");
96
+ const { preCompact } = await import("./pre-compact-CvLJa1rL.mjs");
97
97
  await preCompact(ev, signal);
98
98
  }
99
99
  async function handleUserPromptSubmit(ev, signal) {
100
- const { userPromptSubmit } = await import("./user-prompt-Bzfgl80c.mjs");
100
+ const { userPromptSubmit } = await import("./user-prompt-BqSQPh2W.mjs");
101
101
  await userPromptSubmit(ev, signal);
102
102
  }
103
103
  async function handlePostToolUse(ev, signal) {
104
- const { postToolUse } = await import("./post-tool-CfnMwY6j.mjs");
104
+ const { postToolUse } = await import("./post-tool-BYBYLgt7.mjs");
105
105
  await postToolUse(ev, signal);
106
106
  }
107
107
  async function handlePreToolUse(ev, _signal) {
108
- const { preToolUse } = await import("./pre-tool-KpwIhe2F.mjs");
108
+ const { preToolUse } = await import("./pre-tool-QmdClB53.mjs");
109
109
  await preToolUse(ev);
110
110
  }
111
111
  async function handleStop(ev, _signal) {
112
- const { stop } = await import("./stop-BQzq19WO.mjs");
112
+ const { stop } = await import("./stop-B2wfqVpM.mjs");
113
113
  await stop(ev);
114
114
  }
115
115
  var init_dispatcher = __esmMin((() => {}));
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import "./types-BBT-j5-a.mjs";
3
3
  import "./audit-BoZ1ny8J.mjs";
4
- import "./dispatcher-BjpWdTBs.mjs";
5
- import "./directives-DjcVEEC8.mjs";
6
- import { n as init_post_tool, o as postToolUse } from "./post-tool-O8S54qat.mjs";
4
+ import "./dispatcher-VEw4zMBd.mjs";
5
+ import "./directives-COYpcrJX.mjs";
6
+ import { n as init_post_tool, o as postToolUse } from "./post-tool-BdPgHCy0.mjs";
7
7
  import "./store-8O9WUwMu.mjs";
8
8
  import "./state-7LLZFgmO.mjs";
9
- import "./review-gate-DM_o8MKx.mjs";
9
+ import "./review-gate-Bst0t7jH.mjs";
10
10
  init_post_tool();
11
11
  export { postToolUse };
@@ -5,11 +5,11 @@ import { n as init_audit, t as appendAudit } from "./audit-BoZ1ny8J.mjs";
5
5
  import { a as getKnowledgeStats, d as promoteSubType, l as init_knowledge, m as upsertKnowledge, o as getPromotionCandidates, r as getKnowledgeByID } from "./knowledge-C7rEfFSX.mjs";
6
6
  import { n as init_fts, r as searchKnowledgeFTS, t as detectKnowledgeConflicts } from "./fts-DUZkPJPD.mjs";
7
7
  import { n as init_project, t as detectProject } from "./project-DCKke4_Q.mjs";
8
- import { a as notifyUser, i as init_dispatcher, r as extractSection } from "./dispatcher-BjpWdTBs.mjs";
9
- import { a as trackHitCounts, i as searchPipeline, n as init_directives, o as truncate, r as init_helpers, t as emitDirectives } from "./directives-DjcVEEC8.mjs";
8
+ import { a as notifyUser, i as init_dispatcher, r as extractSection } from "./dispatcher-VEw4zMBd.mjs";
9
+ import { a as trackHitCounts, i as searchPipeline, n as init_directives, o as truncate, r as init_helpers, t as emitDirectives } from "./directives-COYpcrJX.mjs";
10
10
  import { n as openDefaultCached, t as init_store } from "./store-8O9WUwMu.mjs";
11
11
  import { c as readWaveProgress, i as parseWaveProgress, m as writeWaveProgress, n as addWorkedSlug, p as writeStateText, r as init_state, s as readStateText } from "./state-7LLZFgmO.mjs";
12
- import { a as writeReviewGate, n as init_review_gate } from "./review-gate-DM_o8MKx.mjs";
12
+ import { a as writeReviewGate, n as init_review_gate } from "./review-gate-Bst0t7jH.mjs";
13
13
  import { mkdirSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
14
14
  import { join } from "node:path";
15
15
  import { createHash } from "node:crypto";
@@ -5,7 +5,7 @@ import { r as init_epic, s as syncTaskStatus } from "./epic-s_BVNu2z.mjs";
5
5
  import { n as init_audit, t as appendAudit } from "./audit-BoZ1ny8J.mjs";
6
6
  import { l as init_knowledge, m as upsertKnowledge } from "./knowledge-C7rEfFSX.mjs";
7
7
  import { n as init_project, t as detectProject } from "./project-DCKke4_Q.mjs";
8
- import { a as notifyUser, i as init_dispatcher } from "./dispatcher-BjpWdTBs.mjs";
8
+ import { a as notifyUser, i as init_dispatcher } from "./dispatcher-VEw4zMBd.mjs";
9
9
  import { n as openDefaultCached, t as init_store } from "./store-8O9WUwMu.mjs";
10
10
  import { readFileSync, writeFileSync } from "node:fs";
11
11
  import { join } from "node:path";
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { n as __esmMin } from "./chunk-CAm0Jl7e.mjs";
3
- import "./dispatcher-BjpWdTBs.mjs";
3
+ import "./dispatcher-VEw4zMBd.mjs";
4
4
  import { a as readLastIntent, r as init_state, t as IMPLEMENT_INTENTS } from "./state-7LLZFgmO.mjs";
5
- import { c as denyTool, d as isSpecFilePath, f as tryReadActiveSpec, n as init_review_gate, r as isGateActive, u as init_spec_guard } from "./review-gate-DM_o8MKx.mjs";
5
+ import { c as denyTool, d as isSpecFilePath, f as tryReadActiveSpec, n as init_review_gate, r as isGateActive, u as init_spec_guard } from "./review-gate-Bst0t7jH.mjs";
6
6
  import { existsSync } from "node:fs";
7
7
  import { join } from "node:path";
8
8
  //#region src/hooks/pre-tool.ts
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { n as __esmMin } from "./chunk-CAm0Jl7e.mjs";
3
- import { i as init_dispatcher, r as extractSection } from "./dispatcher-BjpWdTBs.mjs";
3
+ import { i as init_dispatcher, r as extractSection } from "./dispatcher-VEw4zMBd.mjs";
4
4
  import { f as writeStateJSON, o as readStateJSON, r as init_state } from "./state-7LLZFgmO.mjs";
5
5
  import { readFileSync } from "node:fs";
6
6
  import { join, resolve } from "node:path";
@@ -6,12 +6,12 @@ import { n as init_audit, t as appendAudit } from "./audit-BoZ1ny8J.mjs";
6
6
  import { i as getKnowledgeByIDs, l as init_knowledge } from "./knowledge-C7rEfFSX.mjs";
7
7
  import { i as vectorSearchKnowledge, r as init_vectors } from "./vectors-C3yIO_A5.mjs";
8
8
  import { i as subTypeBoost, n as init_fts, r as searchKnowledgeFTS } from "./fts-DUZkPJPD.mjs";
9
- import "./dispatcher-BjpWdTBs.mjs";
10
- import { o as truncate, r as init_helpers } from "./directives-DjcVEEC8.mjs";
11
- import { c as handleLedger, l as init_ledger, n as init_post_tool, s as post_tool_exports } from "./post-tool-O8S54qat.mjs";
9
+ import "./dispatcher-VEw4zMBd.mjs";
10
+ import { o as truncate, r as init_helpers } from "./directives-COYpcrJX.mjs";
11
+ import { c as handleLedger, l as init_ledger, n as init_post_tool, s as post_tool_exports } from "./post-tool-BdPgHCy0.mjs";
12
12
  import "./store-8O9WUwMu.mjs";
13
13
  import { c as readWaveProgress, m as writeWaveProgress, r as init_state } from "./state-7LLZFgmO.mjs";
14
- import { a as writeReviewGate, i as readReviewGate, n as init_review_gate, t as clearReviewGate } from "./review-gate-DM_o8MKx.mjs";
14
+ import { a as writeReviewGate, i as readReviewGate, n as init_review_gate, t as clearReviewGate } from "./review-gate-Bst0t7jH.mjs";
15
15
  import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from "node:fs";
16
16
  import { join, resolve } from "node:path";
17
17
  import process$1 from "node:process";
@@ -3,8 +3,8 @@ import { n as __esmMin } from "./chunk-CAm0Jl7e.mjs";
3
3
  import { c as readActiveState, o as init_types, s as readActive, t as SpecDir } from "./types-BBT-j5-a.mjs";
4
4
  import { l as init_knowledge, m as upsertKnowledge, n as deleteOrphanKnowledge, s as getRecentDecisions, t as countKnowledge } from "./knowledge-C7rEfFSX.mjs";
5
5
  import { n as init_project, t as detectProject } from "./project-DCKke4_Q.mjs";
6
- import { a as notifyUser, i as init_dispatcher, r as extractSection } from "./dispatcher-BjpWdTBs.mjs";
7
- import { n as init_directives, o as truncate, r as init_helpers, t as emitDirectives } from "./directives-DjcVEEC8.mjs";
6
+ import { a as notifyUser, i as init_dispatcher, r as extractSection } from "./dispatcher-VEw4zMBd.mjs";
7
+ import { n as init_directives, o as truncate, r as init_helpers, t as emitDirectives } from "./directives-COYpcrJX.mjs";
8
8
  import { n as openDefaultCached, t as init_store } from "./store-8O9WUwMu.mjs";
9
9
  import { r as init_state, u as resetWorkedSlugs } from "./state-7LLZFgmO.mjs";
10
10
  import { existsSync, readFileSync, readdirSync } from "node:fs";
@@ -26,13 +26,11 @@ async function sessionStart(ev, _signal) {
26
26
  notifyUser("warning: knowledge sync failed: %s", err);
27
27
  }
28
28
  if (!existsSync(join(join(ev.cwd, ".alfred", "steering"), "product.md"))) notifyUser("tip: run `/alfred:init` to set up project steering docs, templates, and knowledge index");
29
- const claudeDir = join(ev.cwd, ".claude");
30
- if (!existsSync(join(claudeDir, "settings.json")) && existsSync(claudeDir)) notifyUser("tip: run `/alfred:quarters` for a guided Claude Code project setup (settings, hooks, rules)");
31
29
  suggestLedgerReflect(store);
32
30
  const items = [];
33
31
  if (existsSync(join(ev.cwd, ".alfred"))) items.push({
34
32
  level: "CONTEXT",
35
- message: "If there is even a small chance an alfred skill applies to this task, invoke it. Check /alfred:concierge for available skills."
33
+ message: "If there is even a small chance an alfred skill applies to this task, invoke it."
36
34
  });
37
35
  items.push(...buildSpecContextItems(ev.cwd, ev.source ?? "", store));
38
36
  if (items.length > 0) emitDirectives("SessionStart", items);
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { n as __esmMin } from "./chunk-CAm0Jl7e.mjs";
3
- import "./dispatcher-BjpWdTBs.mjs";
3
+ import "./dispatcher-VEw4zMBd.mjs";
4
4
  import { l as readWorkedSlugs, r as init_state } from "./state-7LLZFgmO.mjs";
5
- import { f as tryReadActiveSpec, l as hasUncheckedSelfReview, n as init_review_gate, o as blockStop, r as isGateActive, s as countUncheckedNextSteps, u as init_spec_guard } from "./review-gate-DM_o8MKx.mjs";
5
+ import { f as tryReadActiveSpec, l as hasUncheckedSelfReview, n as init_review_gate, o as blockStop, r as isGateActive, s as countUncheckedNextSteps, u as init_spec_guard } from "./review-gate-Bst0t7jH.mjs";
6
6
  //#region src/hooks/stop.ts
7
7
  /**
8
8
  * Stop handler:
@@ -3,8 +3,8 @@ import { n as __esmMin } from "./chunk-CAm0Jl7e.mjs";
3
3
  import { c as readActiveState, o as init_types } from "./types-BBT-j5-a.mjs";
4
4
  import { i as subTypeBoost, n as init_fts } from "./fts-DUZkPJPD.mjs";
5
5
  import { Embedder, t as init_embedder } from "./embedder-D3hJoryD.mjs";
6
- import "./dispatcher-BjpWdTBs.mjs";
7
- import { a as trackHitCounts, i as searchPipeline, n as init_directives, o as truncate, r as init_helpers, t as emitDirectives } from "./directives-DjcVEEC8.mjs";
6
+ import "./dispatcher-VEw4zMBd.mjs";
7
+ import { a as trackHitCounts, i as searchPipeline, n as init_directives, o as truncate, r as init_helpers, t as emitDirectives } from "./directives-COYpcrJX.mjs";
8
8
  import { n as openDefaultCached, t as init_store } from "./store-8O9WUwMu.mjs";
9
9
  import { d as writeLastIntent, f as writeStateJSON, l as readWorkedSlugs, o as readStateJSON, r as init_state, t as IMPLEMENT_INTENTS } from "./state-7LLZFgmO.mjs";
10
10
  import { existsSync } from "node:fs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-alfred",
3
- "version": "0.3.8",
3
+ "version": "0.3.9",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "alfred": "dist/cli.mjs"