@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.
@@ -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-assisted
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
- - **codeburn** — Token usage tracking. Install: `npm install -g codeburn` (or `brew install codeburn` on macOS)
44
- - **jq** — JSON processing. Install: `brew install jq` or `sudo apt install jq`
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` environment variable
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. **Commit message**: "Co-Authored-By: Claude" or similar markers → `ai-generated`
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 and `codeburn` is installed, the hook:
67
+ When an AI tool is detected, the hook computes a per-commit delta:
59
68
 
60
- 1. Runs `codeburn report -p all --format json` to get lifetime token totals
61
- 2. Compares against a snapshot from the previous commit (`.prism/tokentracker/<user>.json`)
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 codeburn is not installed or no AI tool is detected, token trailers are omitted.
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 jq fails
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 — Detect AI-generated commits and add origin trailers.
2
+ # prepare-commit-msg — add AI-origin trailers to commit messages.
3
3
  #
4
- # This hook detects if the commit was made via Claude Code, Kiro, or other AI tools
5
- # and adds AI-Origin, AI-Model, AI-Token, and Spec-Ref trailers to the commit message.
6
- # Token tracking powered by codeburn (npm install -g codeburn).
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: metric-hooks/install.sh
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 for merge commits, amend, and squash
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
- # Detect AI tool involvement
29
- # ---------------------------------------------------------------------------
30
- AI_ORIGIN="human"
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
- if [[ -n "${SPEC_REF}" ]]; then
181
- echo "Spec-Ref: ${SPEC_REF}" >> "${COMMIT_MSG_FILE}"
182
- fi
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 CLAUDE_SESSION_HOOK_SCRIPT = `#!/usr/bin/env bash
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
- const binDir = resolve(home, '.local/bin');
145
- const hookScriptPath = resolve(binDir, 'claude-session-id-hook');
146
- mkdirSync(binDir, { recursive: true });
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
- const hook = { matcher: '', hooks: [{ type: 'command', command: 'claude-session-id-hook', timeout: 5000 }] };
167
- if (!settings.hooks.SessionStart) {
168
- settings.hooks.SessionStart = [hook];
169
- }
170
- else if (!settings.hooks.SessionStart.some((e) => e.hooks?.some((h) => h.command === 'claude-session-id-hook'))) {
171
- settings.hooks.SessionStart.push(hook);
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('Claude Code session hook installed.');
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":"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"}
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,7 @@
1
+ declare const _default: {
2
+ description: string;
3
+ options: never[];
4
+ action(): Promise<void>;
5
+ };
6
+ export default _default;
7
+ //# sourceMappingURL=claude-session-context.d.ts.map
@@ -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"}