@prism-d1/cli 1.0.58 → 1.0.60
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/dist/assets/metric-hooks/README.md +21 -12
- package/dist/assets/metric-hooks/prepare-commit-msg +16 -162
- package/dist/src/commands/bootstrapper/install-git-hooks.js +11 -27
- package/dist/src/commands/bootstrapper/install-git-hooks.js.map +1 -1
- package/dist/src/commands/git/claude-session-context.d.ts +7 -0
- package/dist/src/commands/git/claude-session-context.d.ts.map +1 -0
- package/dist/src/commands/git/claude-session-context.js +58 -0
- package/dist/src/commands/git/claude-session-context.js.map +1 -0
- package/dist/src/commands/git/commit-trailers.d.ts +14 -0
- package/dist/src/commands/git/commit-trailers.d.ts.map +1 -0
- package/dist/src/commands/git/commit-trailers.js +217 -0
- package/dist/src/commands/git/commit-trailers.js.map +1 -0
- package/dist/src/commands/parse-code-tool/kiro-cli.d.ts +24 -0
- package/dist/src/commands/parse-code-tool/kiro-cli.d.ts.map +1 -1
- package/dist/src/commands/parse-code-tool/kiro-cli.js +75 -65
- package/dist/src/commands/parse-code-tool/kiro-cli.js.map +1 -1
- package/dist/src/commands/parse-code-tool/kiro-ide.d.ts +6 -0
- package/dist/src/commands/parse-code-tool/kiro-ide.d.ts.map +1 -1
- package/dist/src/commands/parse-code-tool/kiro-ide.js +164 -103
- package/dist/src/commands/parse-code-tool/kiro-ide.js.map +1 -1
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +62 -24
- package/dist/src/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -9,7 +9,7 @@ Every commit gets trailers appended to the message:
|
|
|
9
9
|
```
|
|
10
10
|
feat: add order creation endpoint
|
|
11
11
|
|
|
12
|
-
AI-Origin: ai-
|
|
12
|
+
AI-Origin: ai-generated
|
|
13
13
|
AI-Tool: claude-code
|
|
14
14
|
AI-Model: us.anthropic.claude-sonnet-4-5-20250929-v1:0
|
|
15
15
|
AI-Input-Tokens: 12450
|
|
@@ -38,31 +38,40 @@ To remove:
|
|
|
38
38
|
bash prism-cli bootstrapper install-git-hooks --uninstall
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
+
The installer also registers a Claude Code `SessionStart` hook in
|
|
42
|
+
`~/.claude/settings.json` (served by `prism-cli git claude-session-context`).
|
|
43
|
+
It captures the Claude session id into the environment so commits made during a
|
|
44
|
+
Claude Code session are attributed correctly.
|
|
45
|
+
|
|
41
46
|
## Prerequisites
|
|
42
47
|
|
|
43
|
-
- **
|
|
44
|
-
- **
|
|
48
|
+
- **prism-cli** — Runs the hook logic (`prism-cli git commit-trailers`). Install: `npm install -g @prism-d1/cli`
|
|
49
|
+
- **codeburn** *(optional)* — Token usage tracking for non-Kiro tools. Install: `npm install -g codeburn` (or `brew install codeburn` on macOS). Kiro sessions are parsed directly by prism-cli, no codeburn needed.
|
|
50
|
+
|
|
51
|
+
> The hook is a thin bash delegator to prism-cli. It requires only `git` and
|
|
52
|
+
> `bash` (with `prism-cli` on PATH) — **no `jq`, `bc`, or `sed`** — so it works
|
|
53
|
+
> on Linux, macOS, and Windows Git Bash. If `prism-cli` is not installed, the
|
|
54
|
+
> commit proceeds normally without trailers.
|
|
45
55
|
|
|
46
56
|
## How AI Detection Works
|
|
47
57
|
|
|
48
|
-
The hook checks for AI tool involvement:
|
|
58
|
+
The hook (via `prism-cli git commit-trailers`) checks for AI tool involvement, in order:
|
|
49
59
|
|
|
50
60
|
1. **Claude Code**: `CLAUDE_CODE` or `CLAUDE_CODE_SESSION_ID` environment variable
|
|
51
|
-
2. **Kiro**: `KIRO_SESSION`
|
|
61
|
+
2. **Kiro**: `KIRO_SESSION_ID` / `KIRO_SESSION` env var, `TERM_PROGRAM=kiro` (IDE terminal), or a `kiro` path in `VSCODE_GIT_ASKPASS_NODE` / `GIT_ASKPASS` (Source Control panel commits)
|
|
52
62
|
3. **Q Developer**: `Q_DEVELOPER_SESSION` environment variable
|
|
53
|
-
4. **
|
|
54
|
-
5. **Default**: No indicators → `AI-Origin: human`
|
|
63
|
+
4. **Default**: No indicators → `AI-Origin: human`
|
|
55
64
|
|
|
56
65
|
## Token Tracking
|
|
57
66
|
|
|
58
|
-
When an AI tool is detected
|
|
67
|
+
When an AI tool is detected, the hook computes a per-commit delta:
|
|
59
68
|
|
|
60
|
-
1.
|
|
61
|
-
2. Compares against a snapshot from the previous commit (
|
|
69
|
+
1. Collects lifetime token totals — Kiro sessions are parsed directly by prism-cli; other tools use `codeburn report -p all --format json`
|
|
70
|
+
2. Compares against a snapshot from the previous commit (`~/.prism/tokentracker/<project-basename>.json`)
|
|
62
71
|
3. Writes the delta as `AI-Input-Tokens` and `AI-Output-Tokens` trailers
|
|
63
72
|
4. Saves the new snapshot for next time
|
|
64
73
|
|
|
65
|
-
If
|
|
74
|
+
If no usage data is available (e.g. codeburn absent for a non-Kiro tool) or no AI tool is detected, token trailers are omitted.
|
|
66
75
|
|
|
67
76
|
## Configuration
|
|
68
77
|
|
|
@@ -92,7 +101,7 @@ Values exceeding bounds are clamped to the configured maximum. The workflow (`pr
|
|
|
92
101
|
|
|
93
102
|
## Safety
|
|
94
103
|
|
|
95
|
-
- Never blocks a commit — exits 0 even if codeburn or
|
|
104
|
+
- Never blocks a commit — exits 0 even if prism-cli or codeburn is missing or errors
|
|
96
105
|
- Only appends trailers — never modifies code
|
|
97
106
|
- Skips merge and squash commits
|
|
98
107
|
- Won't duplicate trailers if already present
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# prepare-commit-msg —
|
|
2
|
+
# prepare-commit-msg — add AI-origin trailers to commit messages.
|
|
3
3
|
#
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
#
|
|
4
|
+
# All detection, token accounting, and cost math now live in
|
|
5
|
+
# `prism-cli git commit-trailers` (Node). This keeps the hook fully portable
|
|
6
|
+
# (Linux/macOS/Windows Git Bash) with NO dependency on jq, bc, sed, or grep -P.
|
|
7
|
+
# Token tracking powered by codeburn / prism-cli.
|
|
7
8
|
#
|
|
8
|
-
# Installation:
|
|
9
|
+
# Installation: prism-cli bootstrapper install-git-hooks
|
|
9
10
|
|
|
10
11
|
set -uo pipefail
|
|
11
12
|
|
|
12
13
|
COMMIT_MSG_FILE="$1"
|
|
13
14
|
COMMIT_SOURCE="${2:-}"
|
|
14
|
-
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || echo ".")
|
|
15
|
-
SHA="${3:-}"
|
|
16
15
|
|
|
17
|
-
# Skip
|
|
16
|
+
# Skip merge and squash commits
|
|
18
17
|
if [[ "${COMMIT_SOURCE}" == "merge" || "${COMMIT_SOURCE}" == "squash" ]]; then
|
|
19
18
|
exit 0
|
|
20
19
|
fi
|
|
@@ -24,161 +23,16 @@ if grep -q '^AI-Origin:' "${COMMIT_MSG_FILE}" 2>/dev/null; then
|
|
|
24
23
|
exit 0
|
|
25
24
|
fi
|
|
26
25
|
|
|
27
|
-
#
|
|
28
|
-
#
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
AI_MODEL=""
|
|
32
|
-
AI_TOOL=""
|
|
33
|
-
|
|
34
|
-
# Check for Claude Code session
|
|
35
|
-
# Claude Code sets CLAUDE_CODE environment variable or leaves markers
|
|
36
|
-
if [[ -n "${CLAUDE_CODE:-}" || -n "${CLAUDE_CODE_SESSION_ID:-}" ]]; then
|
|
37
|
-
AI_ORIGIN="ai-generated"
|
|
38
|
-
AI_TOOL="claude-code"
|
|
39
|
-
AI_MODEL="${ANTHROPIC_MODEL:-us.anthropic.claude-sonnet-4-5-20250929-v1:0}"
|
|
40
|
-
fi
|
|
41
|
-
|
|
42
|
-
# Check for Kiro markers
|
|
43
|
-
# Kiro CLI sets KIRO_SESSION_ID; Kiro IDE sets TERM_PROGRAM=kiro
|
|
44
|
-
# Kiro Source Control panel sets VSCODE_GIT_ASKPASS_NODE with "kiro" in path
|
|
45
|
-
if [[ -n "${KIRO_SESSION_ID:-}" || -n "${KIRO_SESSION:-}" || "${TERM_PROGRAM:-}" == "kiro" || "${VSCODE_GIT_ASKPASS_NODE:-}" == *"kiro"* || "${GIT_ASKPASS:-}" == *"kiro"* ]]; then
|
|
46
|
-
AI_ORIGIN="ai-generated"
|
|
47
|
-
AI_TOOL="kiro"
|
|
48
|
-
fi
|
|
49
|
-
|
|
50
|
-
# Check for Amazon Q Developer
|
|
51
|
-
if [[ -n "${Q_DEVELOPER_SESSION:-}" ]]; then
|
|
52
|
-
AI_ORIGIN="ai-generated"
|
|
53
|
-
AI_TOOL="q-developer"
|
|
54
|
-
fi
|
|
55
|
-
|
|
56
|
-
# ---------------------------------------------------------------------------
|
|
57
|
-
# Detect spec references
|
|
58
|
-
# ---------------------------------------------------------------------------
|
|
59
|
-
SPEC_REF=""
|
|
60
|
-
|
|
61
|
-
# Check if any staged file is a spec
|
|
62
|
-
STAGED_SPECS=$(git diff --cached --name-only 2>/dev/null | grep -E '(specs/|\.kiro/specs/)' | head -1 || true)
|
|
63
|
-
if [[ -n "${STAGED_SPECS}" ]]; then
|
|
64
|
-
SPEC_REF="${STAGED_SPECS}"
|
|
65
|
-
fi
|
|
66
|
-
|
|
67
|
-
# Check for spec reference in commit message
|
|
68
|
-
MSG_SPEC=$(grep -oP '(?<=Spec-Ref: ).*' "${COMMIT_MSG_FILE}" 2>/dev/null | head -1 || true)
|
|
69
|
-
if [[ -n "${MSG_SPEC}" ]]; then
|
|
70
|
-
SPEC_REF="${MSG_SPEC}"
|
|
71
|
-
fi
|
|
72
|
-
|
|
73
|
-
# ---------------------------------------------------------------------------
|
|
74
|
-
# Track AI token usage via codeburn (per-project snapshot delta)
|
|
75
|
-
# ---------------------------------------------------------------------------
|
|
76
|
-
AI_INPUT_TOKENS=""
|
|
77
|
-
AI_OUTPUT_TOKENS=""
|
|
78
|
-
AI_COST=""
|
|
79
|
-
|
|
80
|
-
if [[ -n "${AI_TOOL}" ]] && (command -v codeburn &>/dev/null || command -v prism-cli &>/dev/null); then
|
|
81
|
-
PROJECT_FILTER=$(echo "$REPO_ROOT" | sed 's|^/||; s|/|-|g')
|
|
82
|
-
PROJECT_BASENAME=$(basename "$REPO_ROOT")
|
|
83
|
-
TRACKER_DIR="${HOME}/.prism/tokentracker"
|
|
84
|
-
TRACKER_FILE="${TRACKER_DIR}/${PROJECT_BASENAME}.json"
|
|
85
|
-
|
|
86
|
-
# Kiro: CLI (KIRO_SESSION_ID) uses kiro-cli, IDE uses kiro-ide
|
|
87
|
-
# Everything else: use codeburn
|
|
88
|
-
CODEBURN_JSON=""
|
|
89
|
-
if [[ "${AI_TOOL}" == "kiro" ]] && command -v prism-cli &>/dev/null; then
|
|
90
|
-
if [[ -n "${KIRO_SESSION_ID:-}" ]]; then
|
|
91
|
-
CODEBURN_JSON=$(prism-cli parse-code-tool kiro-cli --session-id "${KIRO_SESSION_ID}" --project "${PROJECT_BASENAME}" --format json 2>/dev/null || echo "")
|
|
92
|
-
fi
|
|
93
|
-
# Fall back to kiro-ide (covers IDE env vars and CLI sessions without KIRO_SESSION_ID)
|
|
94
|
-
if [[ -z "${CODEBURN_JSON}" || "$(echo "${CODEBURN_JSON}" | jq -r '.overview.calls // 0')" == "0" ]]; then
|
|
95
|
-
CODEBURN_JSON=$(prism-cli parse-code-tool kiro-ide --project "${PROJECT_BASENAME}" --format json 2>/dev/null || echo "")
|
|
96
|
-
fi
|
|
97
|
-
elif command -v codeburn &>/dev/null; then
|
|
98
|
-
CODEBURN_JSON=$(codeburn report -p all --project "${PROJECT_FILTER}" --format json 2>/dev/null || echo "")
|
|
99
|
-
if [[ -z "${CODEBURN_JSON}" || "$(echo "${CODEBURN_JSON}" | jq -r '.overview.calls // 0')" == "0" ]]; then
|
|
100
|
-
CODEBURN_JSON=$(codeburn report -p all --project "${PROJECT_BASENAME}" --format json 2>/dev/null || echo "")
|
|
101
|
-
fi
|
|
102
|
-
else
|
|
103
|
-
CODEBURN_JSON=""
|
|
104
|
-
fi
|
|
105
|
-
|
|
106
|
-
if [[ -n "${CODEBURN_JSON}" ]]; then
|
|
107
|
-
CURRENT_INPUT=$(echo "${CODEBURN_JSON}" | jq -r '[.models[]?.inputTokens // 0] | add // 0' 2>/dev/null || echo "0")
|
|
108
|
-
CURRENT_OUTPUT=$(echo "${CODEBURN_JSON}" | jq -r '[.models[]?.outputTokens // 0] | add // 0' 2>/dev/null || echo "0")
|
|
109
|
-
CURRENT_COST=$(echo "${CODEBURN_JSON}" | jq -r '.overview.cost // 0' 2>/dev/null || echo "0")
|
|
110
|
-
|
|
111
|
-
if [[ -f "${TRACKER_FILE}" ]]; then
|
|
112
|
-
PREV_INPUT=$(jq -r '.inputTokens // 0' "${TRACKER_FILE}" 2>/dev/null || echo "0")
|
|
113
|
-
PREV_OUTPUT=$(jq -r '.outputTokens // 0' "${TRACKER_FILE}" 2>/dev/null || echo "0")
|
|
114
|
-
PREV_COST=$(jq -r '.cost // 0' "${TRACKER_FILE}" 2>/dev/null || echo "0")
|
|
115
|
-
AI_INPUT_TOKENS=$(( CURRENT_INPUT - PREV_INPUT ))
|
|
116
|
-
AI_OUTPUT_TOKENS=$(( CURRENT_OUTPUT - PREV_OUTPUT ))
|
|
117
|
-
AI_COST=$(echo "${CURRENT_COST} - ${PREV_COST}" | bc 2>/dev/null || echo "0")
|
|
118
|
-
[[ "${AI_INPUT_TOKENS}" -lt 0 ]] && AI_INPUT_TOKENS=0
|
|
119
|
-
[[ "${AI_OUTPUT_TOKENS}" -lt 0 ]] && AI_OUTPUT_TOKENS=0
|
|
120
|
-
AI_COST_NEGATIVE=$(echo "${AI_COST} < 0" | bc 2>/dev/null || echo "0")
|
|
121
|
-
[[ "${AI_COST_NEGATIVE}" == "1" ]] && AI_COST="0"
|
|
122
|
-
else
|
|
123
|
-
AI_INPUT_TOKENS=0; AI_OUTPUT_TOKENS=0; AI_COST="0"
|
|
124
|
-
fi
|
|
125
|
-
|
|
126
|
-
mkdir -p "${TRACKER_DIR}"
|
|
127
|
-
printf '{"inputTokens":%s,"outputTokens":%s,"cost":%s}\n' \
|
|
128
|
-
"$CURRENT_INPUT" "$CURRENT_OUTPUT" "$CURRENT_COST" > "${TRACKER_FILE}"
|
|
129
|
-
fi
|
|
130
|
-
fi
|
|
131
|
-
|
|
132
|
-
# ---------------------------------------------------------------------------
|
|
133
|
-
# Load configurable bounds from .prism/config.json
|
|
134
|
-
# ---------------------------------------------------------------------------
|
|
135
|
-
REPO_CONFIG="${REPO_ROOT}/.prism/config.json"
|
|
136
|
-
MAX_TOKENS=1000000
|
|
137
|
-
MAX_COST=100
|
|
138
|
-
if [[ -f "${REPO_CONFIG}" ]] && command -v jq &>/dev/null; then
|
|
139
|
-
MAX_TOKENS=$(jq -r '.max_tokens // 1000000' "${REPO_CONFIG}" 2>/dev/null || echo "1000000")
|
|
140
|
-
MAX_COST=$(jq -r '.max_cost // 100' "${REPO_CONFIG}" 2>/dev/null || echo "100")
|
|
141
|
-
fi
|
|
142
|
-
|
|
143
|
-
# ---------------------------------------------------------------------------
|
|
144
|
-
# Append trailers to commit message
|
|
145
|
-
# ---------------------------------------------------------------------------
|
|
146
|
-
|
|
147
|
-
# Ensure there is a blank line before trailers
|
|
148
|
-
if [[ -s "${COMMIT_MSG_FILE}" ]]; then
|
|
149
|
-
LAST_LINE=$(tail -1 "${COMMIT_MSG_FILE}")
|
|
150
|
-
if [[ -n "${LAST_LINE}" ]]; then
|
|
151
|
-
echo "" >> "${COMMIT_MSG_FILE}"
|
|
152
|
-
fi
|
|
153
|
-
fi
|
|
154
|
-
|
|
155
|
-
echo "AI-Origin: ${AI_ORIGIN}" >> "${COMMIT_MSG_FILE}"
|
|
156
|
-
|
|
157
|
-
if [[ -n "${AI_TOOL}" ]]; then
|
|
158
|
-
echo "AI-Tool: ${AI_TOOL}" >> "${COMMIT_MSG_FILE}"
|
|
159
|
-
fi
|
|
160
|
-
|
|
161
|
-
if [[ -n "${AI_MODEL}" ]]; then
|
|
162
|
-
echo "AI-Model: ${AI_MODEL}" >> "${COMMIT_MSG_FILE}"
|
|
163
|
-
fi
|
|
164
|
-
|
|
165
|
-
if [[ -n "${AI_INPUT_TOKENS}" ]]; then
|
|
166
|
-
[[ ${AI_INPUT_TOKENS} -gt ${MAX_TOKENS} ]] && AI_INPUT_TOKENS=${MAX_TOKENS}
|
|
167
|
-
echo "AI-Input-Tokens: ${AI_INPUT_TOKENS}" >> "${COMMIT_MSG_FILE}"
|
|
168
|
-
fi
|
|
169
|
-
|
|
170
|
-
if [[ -n "${AI_OUTPUT_TOKENS}" ]]; then
|
|
171
|
-
[[ ${AI_OUTPUT_TOKENS} -gt ${MAX_TOKENS} ]] && AI_OUTPUT_TOKENS=${MAX_TOKENS}
|
|
172
|
-
echo "AI-Output-Tokens: ${AI_OUTPUT_TOKENS}" >> "${COMMIT_MSG_FILE}"
|
|
173
|
-
fi
|
|
174
|
-
|
|
175
|
-
if [[ -n "${AI_COST}" ]]; then
|
|
176
|
-
(( $(echo "${AI_COST} > ${MAX_COST}" | bc -l 2>/dev/null) )) && AI_COST="${MAX_COST}.00"
|
|
177
|
-
echo "AI-Cost: \$${AI_COST}" >> "${COMMIT_MSG_FILE}"
|
|
26
|
+
# prism-cli is required. If it isn't installed, the commit proceeds without
|
|
27
|
+
# trailers rather than failing.
|
|
28
|
+
if ! command -v prism-cli >/dev/null 2>&1; then
|
|
29
|
+
exit 0
|
|
178
30
|
fi
|
|
179
31
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
32
|
+
# Delegate everything to prism-cli. It appends the trailers to the commit
|
|
33
|
+
# message file directly. Never block the commit on failure.
|
|
34
|
+
prism-cli git commit-trailers \
|
|
35
|
+
--commit-msg-file "${COMMIT_MSG_FILE}" \
|
|
36
|
+
--source "${COMMIT_SOURCE}" >/dev/null 2>&1 || true
|
|
183
37
|
|
|
184
38
|
exit 0
|
|
@@ -130,27 +130,12 @@ export default {
|
|
|
130
130
|
installClaudeSessionHook();
|
|
131
131
|
},
|
|
132
132
|
};
|
|
133
|
-
const
|
|
134
|
-
INPUT=$(cat)
|
|
135
|
-
SESSION_ID=$(echo "$INPUT" | jq -r '.session_id // empty')
|
|
136
|
-
jq -n --arg ctx "CLAUDE_CODE_SESSION_ID=$SESSION_ID" \\
|
|
137
|
-
'{ hookSpecificOutput: { hookEventName: "SessionStart", additionalContext: $ctx } }'
|
|
138
|
-
if [ -n "$CLAUDE_ENV_FILE" ] && ! grep -q "CLAUDE_CODE_SESSION_ID" "$CLAUDE_ENV_FILE" 2>/dev/null; then
|
|
139
|
-
echo "export CLAUDE_CODE_SESSION_ID=\\"$SESSION_ID\\"" > "$CLAUDE_ENV_FILE"
|
|
140
|
-
fi
|
|
141
|
-
`;
|
|
133
|
+
const CLAUDE_HOOK_COMMAND = 'prism-cli git claude-session-context';
|
|
142
134
|
function installClaudeSessionHook() {
|
|
143
135
|
const home = homedir();
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
writeFileSync(hookScriptPath, CLAUDE_SESSION_HOOK_SCRIPT, { mode: 0o755 });
|
|
148
|
-
const pathDirs = (process.env.PATH || '').split(':');
|
|
149
|
-
if (!pathDirs.includes(binDir)) {
|
|
150
|
-
console.log(`\n ⚠️ ${binDir} is not in your PATH.`);
|
|
151
|
-
console.log(` Add to your shell profile: export PATH="$HOME/.local/bin:$PATH"\n`);
|
|
152
|
-
}
|
|
153
|
-
// Register in ~/.claude/settings.json
|
|
136
|
+
// Register the SessionStart hook in ~/.claude/settings.json.
|
|
137
|
+
// The hook is served by `prism-cli git claude-session-context` (Node, no jq),
|
|
138
|
+
// so there's no standalone script in ~/.local/bin and no PATH requirement.
|
|
154
139
|
const claudeDir = resolve(home, '.claude');
|
|
155
140
|
const settingsPath = resolve(claudeDir, 'settings.json');
|
|
156
141
|
mkdirSync(claudeDir, { recursive: true });
|
|
@@ -163,14 +148,13 @@ function installClaudeSessionHook() {
|
|
|
163
148
|
}
|
|
164
149
|
if (!settings.hooks)
|
|
165
150
|
settings.hooks = {};
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
}
|
|
151
|
+
let sessionStart = Array.isArray(settings.hooks.SessionStart) ? settings.hooks.SessionStart : [];
|
|
152
|
+
// Drop any prior PRISM entry (legacy 'claude-session-id-hook' script or this
|
|
153
|
+
// command) so re-running the installer upgrades cleanly without duplicates.
|
|
154
|
+
sessionStart = sessionStart.filter((e) => !e?.hooks?.some((h) => h.command === 'claude-session-id-hook' || h.command === CLAUDE_HOOK_COMMAND));
|
|
155
|
+
sessionStart.push({ matcher: '', hooks: [{ type: 'command', command: CLAUDE_HOOK_COMMAND, timeout: 5000 }] });
|
|
156
|
+
settings.hooks.SessionStart = sessionStart;
|
|
173
157
|
writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n');
|
|
174
|
-
console.log(
|
|
158
|
+
console.log(`Claude Code session hook installed (${CLAUDE_HOOK_COMMAND}).`);
|
|
175
159
|
}
|
|
176
160
|
//# sourceMappingURL=install-git-hooks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-git-hooks.js","sourceRoot":"","sources":["../../../../src/commands/bootstrapper/install-git-hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACtG,OAAO,EAAE,OAAO,EAAE,OAAO,EAAY,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,2BAA2B,CAAC,CAAC;AAEhF,SAAS,MAAM,CAAC,QAAgB;IAC9B,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,eAAe;IACb,WAAW,EAAE,kEAAkE;IAC/E,OAAO,EAAE;QACP,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,oCAAoC,EAAE;QAC9E,EAAE,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,0CAA0C,EAAE;QACtF,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,2CAA2C,EAAE;QACrF,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,6DAA6D,EAAE;QACjG,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,oBAAoB,EAAE;KAC5D;IACD,KAAK,CAAC,MAAM,CAAC,IAAsG;QACjH,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,OAAO,GAAG,QAAQ,CAAC,+BAA+B,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACpH,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,0FAA0F,CAAC,CAAC;gBAC1G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,8DAA8D;QAC9D,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;YAC3D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAAC,OAAO,CAAC,KAAK,CAAC,0BAA0B,MAAM,EAAE,CAAC,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YAChG,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;YACvB,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YAC/D,SAAS,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACjD,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC,CAAC;YACtE,SAAS,CAAC,OAAO,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,EAAE,KAAK,CAAC,CAAC;YAClE,QAAQ,CAAC,yCAAyC,OAAO,CAAC,IAAI,EAAE,gBAAgB,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5G,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;YAC5F,OAAO,CAAC,GAAG,CAAC,4EAA4E,CAAC,CAAC;YAC1F,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAEpD,oBAAoB;QACpB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;YACvD,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7E,QAAQ,CAAC,OAAO,MAAM,GAAG,CAAC,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACtC,CAAC;YACD,OAAO;QACT,CAAC;QAED,0BAA0B;QAC1B,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;gBAC9D,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;oBAC5D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,qBAAqB,QAAQ,CAAC,OAAO,gBAAgB,CAAC,CAAC;oBACjF,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG;wBAAE,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC;gBAC9D,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,MAAM,MAAM,CAAC,4CAA4C,CAAC,CAAC;YACpE,IAAI,CAAC,MAAM,EAAE,CAAC;gBAAC,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;QACjF,CAAC;QAED,yBAAyB;QACzB,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE,EAAE,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;QAClD,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACzH,OAAO,CAAC,GAAG,CAAC,WAAW,UAAU,EAAE,CAAC,CAAC;QAErC,kFAAkF;QAClF,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,SAAS,CAAC;QAC9B,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAChD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;gBAChF,8DAA8D;YAChE,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;QAEvD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,0BAA0B,MAAM,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,kCAAkC;QAClC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9E,YAAY,CAAC,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;QACvF,CAAC;QAED,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAElD,8CAA8C;QAC9C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;YACvB,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YAC/D,SAAS,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACjD,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC,CAAC;YACtE,SAAS,CAAC,OAAO,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,EAAE,KAAK,CAAC,CAAC;YAClE,QAAQ,CAAC,yCAAyC,OAAO,CAAC,IAAI,EAAE,gBAAgB,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5G,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;QAC9F,CAAC;QAED,kBAAkB;QAClB,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,iFAAiF,CAAC,CAAC;QAE/F,mCAAmC;QACnC,wBAAwB,EAAE,CAAC;IAC7B,CAAC;CACF,CAAC;AAEF,MAAM,
|
|
1
|
+
{"version":3,"file":"install-git-hooks.js","sourceRoot":"","sources":["../../../../src/commands/bootstrapper/install-git-hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-session-context.d.ts","sourceRoot":"","sources":["../../../../src/commands/git/claude-session-context.ts"],"names":[],"mappings":";;;;;AAoBA,wBA+BE"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
/**
|
|
3
|
+
* Claude Code SessionStart hook (Node port — no jq).
|
|
4
|
+
*
|
|
5
|
+
* Claude Code pipes a JSON event ({ session_id, ... }) to this command on
|
|
6
|
+
* session start. We (a) echo the id back as `additionalContext` so the model
|
|
7
|
+
* sees it, and (b) persist `CLAUDE_CODE_SESSION_ID` to the env file Claude
|
|
8
|
+
* sources, so later `git commit`s detect claude-code and attribute tokens.
|
|
9
|
+
*
|
|
10
|
+
* Registered in ~/.claude/settings.json by `bootstrapper install-git-hooks`.
|
|
11
|
+
*/
|
|
12
|
+
async function readStdin() {
|
|
13
|
+
if (process.stdin.isTTY)
|
|
14
|
+
return '';
|
|
15
|
+
const chunks = [];
|
|
16
|
+
for await (const chunk of process.stdin)
|
|
17
|
+
chunks.push(chunk);
|
|
18
|
+
return Buffer.concat(chunks).toString('utf8');
|
|
19
|
+
}
|
|
20
|
+
export default {
|
|
21
|
+
description: 'Claude Code SessionStart hook: capture the session id for AI-origin commit attribution (no jq required)',
|
|
22
|
+
options: [],
|
|
23
|
+
async action() {
|
|
24
|
+
const raw = await readStdin();
|
|
25
|
+
let sessionId = '';
|
|
26
|
+
try {
|
|
27
|
+
const evt = JSON.parse(raw);
|
|
28
|
+
sessionId = evt.session_id || '';
|
|
29
|
+
}
|
|
30
|
+
catch { /* malformed/empty input → no session id */ }
|
|
31
|
+
// Feed the id back to Claude Code as additional context
|
|
32
|
+
process.stdout.write(JSON.stringify({
|
|
33
|
+
hookSpecificOutput: {
|
|
34
|
+
hookEventName: 'SessionStart',
|
|
35
|
+
additionalContext: `CLAUDE_CODE_SESSION_ID=${sessionId}`,
|
|
36
|
+
},
|
|
37
|
+
}));
|
|
38
|
+
// Persist to the env file Claude sources, so subsequent git commits see it.
|
|
39
|
+
// Only write when we actually resolved an id and it's not already present.
|
|
40
|
+
const envFile = process.env.CLAUDE_ENV_FILE;
|
|
41
|
+
if (envFile && sessionId) {
|
|
42
|
+
let existing = '';
|
|
43
|
+
if (existsSync(envFile)) {
|
|
44
|
+
try {
|
|
45
|
+
existing = readFileSync(envFile, 'utf8');
|
|
46
|
+
}
|
|
47
|
+
catch { /* ignore */ }
|
|
48
|
+
}
|
|
49
|
+
if (!existing.includes('CLAUDE_CODE_SESSION_ID')) {
|
|
50
|
+
try {
|
|
51
|
+
writeFileSync(envFile, `export CLAUDE_CODE_SESSION_ID="${sessionId}"\n`);
|
|
52
|
+
}
|
|
53
|
+
catch { /* non-fatal */ }
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=claude-session-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-session-context.js","sourceRoot":"","sources":["../../../../src/commands/git/claude-session-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAElE;;;;;;;;;GASG;AAEH,KAAK,UAAU,SAAS;IACtB,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;IACtE,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC;AAED,eAAe;IACb,WAAW,EAAE,yGAAyG;IACtH,OAAO,EAAE,EAAE;IACX,KAAK,CAAC,MAAM;QACV,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;QAE9B,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;YACvD,SAAS,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC,CAAC,2CAA2C,CAAC,CAAC;QAEvD,wDAAwD;QACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAClC,kBAAkB,EAAE;gBAClB,aAAa,EAAE,cAAc;gBAC7B,iBAAiB,EAAE,0BAA0B,SAAS,EAAE;aACzD;SACF,CAAC,CAAC,CAAC;QAEJ,4EAA4E;QAC5E,2EAA2E;QAC3E,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QAC5C,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;YACzB,IAAI,QAAQ,GAAG,EAAE,CAAC;YAClB,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAAC,IAAI,CAAC;oBAAC,QAAQ,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAAC,CAAC;YACrG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;gBACjD,IAAI,CAAC;oBAAC,aAAa,CAAC,OAAO,EAAE,kCAAkC,SAAS,KAAK,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;YAC7G,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
description: string;
|
|
3
|
+
options: {
|
|
4
|
+
flags: string;
|
|
5
|
+
description: string;
|
|
6
|
+
}[];
|
|
7
|
+
action(opts: {
|
|
8
|
+
commitMsgFile?: string;
|
|
9
|
+
source?: string;
|
|
10
|
+
repo?: string;
|
|
11
|
+
}): Promise<void>;
|
|
12
|
+
};
|
|
13
|
+
export default _default;
|
|
14
|
+
//# sourceMappingURL=commit-trailers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commit-trailers.d.ts","sourceRoot":"","sources":["../../../../src/commands/git/commit-trailers.ts"],"names":[],"mappings":";;;;;;iBAkIqB;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE;;AAP/E,wBA0FE"}
|