aiwcli 0.12.6 → 0.12.8
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/bin/dev.cmd +3 -3
- package/bin/dev.js +16 -16
- package/bin/run.cmd +3 -3
- package/bin/run.js +21 -21
- package/dist/commands/branch.js +7 -2
- package/dist/lib/bmad-installer.js +37 -37
- package/dist/lib/terminal.d.ts +2 -0
- package/dist/lib/terminal.js +57 -7
- package/dist/templates/CLAUDE.md +232 -205
- package/dist/templates/_shared/.claude/settings.json +65 -65
- package/dist/templates/_shared/.claude/{commands/handoff.md → skills/handoff/SKILL.md} +13 -12
- package/dist/templates/_shared/.claude/{commands/handoff-resume.md → skills/handoff-resume/SKILL.md} +13 -12
- package/dist/templates/_shared/.codex/workflows/handoff.md +226 -226
- package/dist/templates/_shared/.windsurf/workflows/handoff.md +226 -226
- package/dist/templates/_shared/handoff-system/CLAUDE.md +15 -3
- package/dist/templates/_shared/handoff-system/lib/document-generator.ts +215 -215
- package/dist/templates/_shared/handoff-system/lib/handoff-reader.ts +158 -158
- package/dist/templates/_shared/handoff-system/scripts/resume_handoff.ts +373 -373
- package/dist/templates/_shared/handoff-system/scripts/save_handoff.ts +469 -469
- package/dist/templates/_shared/handoff-system/workflows/handoff-resume.md +66 -66
- package/dist/templates/_shared/handoff-system/workflows/handoff.md +254 -254
- package/dist/templates/_shared/hooks-ts/_utils/git-state.ts +2 -2
- package/dist/templates/_shared/hooks-ts/archive_plan.ts +159 -159
- package/dist/templates/_shared/hooks-ts/context_monitor.ts +147 -147
- package/dist/templates/_shared/hooks-ts/file-suggestion.ts +128 -128
- package/dist/templates/_shared/hooks-ts/pre_compact.ts +49 -49
- package/dist/templates/_shared/hooks-ts/session_end.ts +196 -196
- package/dist/templates/_shared/hooks-ts/session_start.ts +163 -163
- package/dist/templates/_shared/hooks-ts/task_create_capture.ts +48 -48
- package/dist/templates/_shared/hooks-ts/task_update_capture.ts +74 -74
- package/dist/templates/_shared/hooks-ts/user_prompt_submit.ts +93 -93
- package/dist/templates/_shared/lib-ts/CLAUDE.md +367 -367
- package/dist/templates/_shared/lib-ts/base/atomic-write.ts +138 -138
- package/dist/templates/_shared/lib-ts/base/constants.ts +24 -6
- package/dist/templates/_shared/lib-ts/base/git-state.ts +58 -58
- package/dist/templates/_shared/lib-ts/base/hook-utils.ts +582 -582
- package/dist/templates/_shared/lib-ts/base/inference.ts +301 -301
- package/dist/templates/_shared/lib-ts/base/logger.ts +247 -247
- package/dist/templates/_shared/lib-ts/base/state-io.ts +202 -202
- package/dist/templates/_shared/lib-ts/base/stop-words.ts +184 -184
- package/dist/templates/_shared/lib-ts/base/utils.ts +184 -184
- package/dist/templates/_shared/lib-ts/context/CLAUDE.md +134 -0
- package/dist/templates/_shared/lib-ts/context/context-formatter.ts +566 -566
- package/dist/templates/_shared/lib-ts/context/context-selector.ts +524 -524
- package/dist/templates/_shared/lib-ts/context/context-store.ts +712 -712
- package/dist/templates/_shared/lib-ts/context/plan-manager.ts +312 -312
- package/dist/templates/_shared/lib-ts/context/task-tracker.ts +185 -185
- package/dist/templates/_shared/lib-ts/package.json +20 -20
- package/dist/templates/_shared/lib-ts/templates/formatters.ts +102 -102
- package/dist/templates/_shared/lib-ts/templates/plan-context.ts +58 -58
- package/dist/templates/_shared/lib-ts/tsconfig.json +13 -13
- package/dist/templates/_shared/lib-ts/types.ts +186 -186
- package/dist/templates/_shared/scripts/resolve_context.ts +33 -33
- package/dist/templates/_shared/scripts/status_line.ts +687 -690
- package/dist/templates/cc-native/.claude/commands/cc-native/rlm/ask.md +136 -136
- package/dist/templates/cc-native/.claude/commands/cc-native/rlm/index.md +21 -21
- package/dist/templates/cc-native/.claude/commands/cc-native/rlm/overview.md +56 -56
- package/dist/templates/cc-native/.claude/commands/cc-native/specdev.md +10 -10
- package/dist/templates/cc-native/.claude/settings.json +3 -2
- package/dist/templates/cc-native/.windsurf/workflows/cc-native/fix.md +8 -8
- package/dist/templates/cc-native/.windsurf/workflows/cc-native/implement.md +8 -8
- package/dist/templates/cc-native/.windsurf/workflows/cc-native/research.md +8 -8
- package/dist/templates/cc-native/CC-NATIVE-README.md +189 -189
- package/dist/templates/cc-native/TEMPLATE-SCHEMA.md +304 -304
- package/dist/templates/cc-native/_cc-native/agents/CLAUDE.md +143 -143
- package/dist/templates/cc-native/_cc-native/agents/PLAN-ORCHESTRATOR.md +213 -213
- package/dist/templates/cc-native/_cc-native/agents/plan-questions/PLAN-QUESTIONER.md +70 -70
- package/dist/templates/cc-native/_cc-native/artifacts/CLAUDE.md +64 -0
- package/dist/templates/cc-native/_cc-native/{lib-ts/artifacts → artifacts/lib}/format.ts +1 -1
- package/dist/templates/cc-native/_cc-native/{lib-ts/artifacts → artifacts/lib}/write.ts +2 -2
- package/dist/templates/cc-native/_cc-native/cc-native.config.json +96 -96
- package/dist/templates/cc-native/_cc-native/hooks/CLAUDE.md +14 -24
- package/dist/templates/cc-native/_cc-native/hooks/cc-native-plan-review.ts +1 -1
- package/dist/templates/cc-native/_cc-native/hooks/enhance_plan_post_subagent.ts +54 -54
- package/dist/templates/cc-native/_cc-native/hooks/enhance_plan_post_write.ts +51 -51
- package/dist/templates/cc-native/_cc-native/hooks/mark_questions_asked.ts +53 -53
- package/dist/templates/cc-native/_cc-native/hooks/plan_questions_early.ts +61 -61
- package/dist/templates/cc-native/_cc-native/hooks/validate_task_prompt.ts +76 -0
- package/dist/templates/cc-native/_cc-native/lib-ts/aggregate-agents.ts +9 -2
- package/dist/templates/cc-native/_cc-native/lib-ts/cc-native-state.ts +319 -319
- package/dist/templates/cc-native/_cc-native/lib-ts/cli-output-parser.ts +144 -144
- package/dist/templates/cc-native/_cc-native/lib-ts/config.ts +57 -57
- package/dist/templates/cc-native/_cc-native/lib-ts/constants.ts +83 -83
- package/dist/templates/cc-native/_cc-native/lib-ts/debug.ts +79 -79
- package/dist/templates/cc-native/_cc-native/lib-ts/index.ts +4 -4
- package/dist/templates/cc-native/_cc-native/lib-ts/json-parser.ts +168 -168
- package/dist/templates/cc-native/_cc-native/lib-ts/plan-discovery.ts +80 -80
- package/dist/templates/cc-native/_cc-native/lib-ts/plan-enhancement.ts +41 -41
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/CLAUDE.md +480 -480
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/embedding-indexer.ts +287 -287
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/hyde.ts +148 -148
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/index.ts +54 -54
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/logger.ts +58 -58
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/ollama-client.ts +208 -208
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/retrieval-pipeline.ts +460 -460
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/transcript-indexer.ts +446 -446
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/transcript-loader.ts +280 -280
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/transcript-searcher.ts +274 -274
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/types.ts +201 -201
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/vector-store.ts +278 -278
- package/dist/templates/cc-native/_cc-native/lib-ts/settings.ts +184 -184
- package/dist/templates/cc-native/_cc-native/lib-ts/state.ts +275 -275
- package/dist/templates/cc-native/_cc-native/lib-ts/tsconfig.json +18 -18
- package/dist/templates/cc-native/_cc-native/lib-ts/types.ts +1 -1
- package/dist/templates/cc-native/_cc-native/plan-review/CLAUDE.md +149 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/CLAUDE.md +143 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/PLAN-ORCHESTRATOR.md +213 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-questions/PLAN-QUESTIONER.md +70 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/ARCH-EVOLUTION.md +62 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/ARCH-PATTERNS.md +61 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/ARCH-STRUCTURE.md +62 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/ASSUMPTION-TRACER.md +56 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/CLARITY-AUDITOR.md +53 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/COMPLETENESS-FEASIBILITY.md +66 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/COMPLETENESS-GAPS.md +70 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/COMPLETENESS-ORDERING.md +62 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/CONSTRAINT-VALIDATOR.md +72 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/DESIGN-ADR-VALIDATOR.md +61 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/DESIGN-SCALE-MATCHER.md +64 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/DEVILS-ADVOCATE.md +56 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/DOCUMENTATION-PHILOSOPHY.md +86 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/HANDOFF-READINESS.md +59 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/HIDDEN-COMPLEXITY.md +58 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/INCREMENTAL-DELIVERY.md +66 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/RISK-DEPENDENCY.md +62 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/RISK-FMEA.md +66 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/RISK-PREMORTEM.md +71 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/RISK-REVERSIBILITY.md +74 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/SCOPE-BOUNDARY.md +77 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/SIMPLICITY-GUARDIAN.md +62 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/SKEPTIC.md +68 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TESTDRIVEN-BEHAVIOR-AUDITOR.md +61 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TESTDRIVEN-CHARACTERIZATION.md +71 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TESTDRIVEN-FIRST-VALIDATOR.md +61 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TESTDRIVEN-PYRAMID-ANALYZER.md +61 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TRADEOFF-COSTS.md +67 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TRADEOFF-STAKEHOLDERS.md +65 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/VERIFY-COVERAGE.md +74 -0
- package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/VERIFY-STRENGTH.md +69 -0
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/agent-selection.ts +3 -3
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/corroboration.ts +1 -1
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/graduation.ts +1 -1
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/orchestrator.ts +2 -2
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/output-builder.ts +3 -3
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/plan-questions.ts +6 -6
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/review-pipeline.ts +15 -15
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/reviewers/agent.ts +5 -5
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/reviewers/base/base-agent.ts +4 -4
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/reviewers/providers/claude-agent.ts +4 -4
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/reviewers/providers/codex-agent.ts +6 -6
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/reviewers/providers/gemini-agent.ts +1 -1
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/reviewers/providers/orchestrator-claude-agent.ts +4 -4
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/reviewers/types.ts +3 -3
- package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/verdict.ts +1 -1
- package/oclif.manifest.json +1 -1
- package/package.json +108 -108
- package/dist/templates/cc-native/_cc-native/lib-ts/artifacts.ts +0 -21
- package/dist/templates/cc-native/_cc-native/lib-ts/nul +0 -3
- /package/dist/templates/cc-native/_cc-native/{lib-ts/artifacts → artifacts/lib}/index.ts +0 -0
- /package/dist/templates/cc-native/_cc-native/{lib-ts/artifacts → artifacts/lib}/tracker.ts +0 -0
- /package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/reviewers/index.ts +0 -0
- /package/dist/templates/cc-native/_cc-native/{lib-ts → plan-review/lib}/reviewers/schemas.ts +0 -0
- /package/dist/templates/cc-native/_cc-native/{workflows → plan-review/workflows}/specdev.md +0 -0
|
@@ -1,93 +1,93 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
/**
|
|
3
|
-
* UserPromptSubmit hook: Context enforcement — ensures every prompt belongs
|
|
4
|
-
* to a tracked context. The most complex shared hook.
|
|
5
|
-
*
|
|
6
|
-
* Uses emitContext() for output — context text is passed via hookSpecificOutput JSON.
|
|
7
|
-
* Catches BlockRequest and uses emitBlock() to block the prompt.
|
|
8
|
-
*/
|
|
9
|
-
import {
|
|
10
|
-
loadHookInput, runHookAsync, logDebug, logInfo, logWarn, logBlocking, logDiagnostic, hookLog, emitContext, emitBlock,
|
|
11
|
-
} from "../lib-ts/base/hook-utils.js";
|
|
12
|
-
import { getProjectRoot } from "../lib-ts/base/constants.js";
|
|
13
|
-
import {
|
|
14
|
-
getContextBySessionId, bindSession, maybeActivate, saveState,
|
|
15
|
-
} from "../lib-ts/context/context-store.js";
|
|
16
|
-
import { determineContext, BlockRequest } from "../lib-ts/context/context-selector.js";
|
|
17
|
-
import { buildContextInventory } from "../lib-ts/context/context-formatter.js";
|
|
18
|
-
|
|
19
|
-
async function asyncMain(): Promise<void> {
|
|
20
|
-
const payload = loadHookInput();
|
|
21
|
-
if (!payload) return;
|
|
22
|
-
|
|
23
|
-
const prompt = (payload as any).prompt as string | undefined;
|
|
24
|
-
const sessionId = payload.session_id;
|
|
25
|
-
const permissionMode = payload.permission_mode ?? "";
|
|
26
|
-
const projectRoot = getProjectRoot(payload.cwd);
|
|
27
|
-
|
|
28
|
-
if (!sessionId) {
|
|
29
|
-
logDebug("user_prompt_submit", "No session_id");
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const outputs: string[] = [];
|
|
34
|
-
|
|
35
|
-
// Check if session is already bound to a context
|
|
36
|
-
const existingCtx = getContextBySessionId(sessionId, projectRoot);
|
|
37
|
-
|
|
38
|
-
if (existingCtx) {
|
|
39
|
-
// Returning user — context already bound (stderr: false to avoid "hook error" display)
|
|
40
|
-
try {
|
|
41
|
-
maybeActivate(existingCtx.id, permissionMode, projectRoot, "user_prompt_submit");
|
|
42
|
-
} catch (e) {
|
|
43
|
-
hookLog("warn", "user_prompt_submit", `maybeActivate failed (non-critical): ${e}`, { stderr: false });
|
|
44
|
-
}
|
|
45
|
-
hookLog("debug", "user_prompt_submit", `Session bound to ${existingCtx.id}`, { stderr: false });
|
|
46
|
-
} else if (prompt) {
|
|
47
|
-
// First prompt — need to determine context
|
|
48
|
-
try {
|
|
49
|
-
const [contextId, method, outputText] = await determineContext(prompt, sessionId, projectRoot);
|
|
50
|
-
|
|
51
|
-
if (contextId) {
|
|
52
|
-
bindSession(contextId, sessionId, projectRoot);
|
|
53
|
-
maybeActivate(contextId, permissionMode, projectRoot, "user_prompt_submit");
|
|
54
|
-
|
|
55
|
-
// Clear handoff_path after binding (prevents re-injection)
|
|
56
|
-
const state = getContextBySessionId(sessionId, projectRoot);
|
|
57
|
-
if (state && state.handoff_path) {
|
|
58
|
-
state.handoff_path = null;
|
|
59
|
-
saveState(state.id, state, projectRoot);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
logInfo("user_prompt_submit", `Context ${contextId} via ${method}`);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (outputText) {
|
|
66
|
-
outputs.push(outputText);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// Append context folder inventory
|
|
70
|
-
try {
|
|
71
|
-
const boundState = getContextBySessionId(sessionId, projectRoot);
|
|
72
|
-
if (boundState) {
|
|
73
|
-
const inventory = buildContextInventory(boundState, projectRoot);
|
|
74
|
-
if (inventory) outputs.push(inventory);
|
|
75
|
-
}
|
|
76
|
-
} catch (e) {
|
|
77
|
-
logWarn("user_prompt_submit", `Inventory failed (non-critical): ${e}`);
|
|
78
|
-
}
|
|
79
|
-
} catch (e) {
|
|
80
|
-
if (e instanceof BlockRequest) {
|
|
81
|
-
emitBlock((e as Error).message);
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
throw e; // Re-throw unexpected errors
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
if (outputs.length > 0) {
|
|
89
|
-
emitContext(outputs.join("\n\n"));
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
runHookAsync(asyncMain, "user_prompt_submit");
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
/**
|
|
3
|
+
* UserPromptSubmit hook: Context enforcement — ensures every prompt belongs
|
|
4
|
+
* to a tracked context. The most complex shared hook.
|
|
5
|
+
*
|
|
6
|
+
* Uses emitContext() for output — context text is passed via hookSpecificOutput JSON.
|
|
7
|
+
* Catches BlockRequest and uses emitBlock() to block the prompt.
|
|
8
|
+
*/
|
|
9
|
+
import {
|
|
10
|
+
loadHookInput, runHookAsync, logDebug, logInfo, logWarn, logBlocking, logDiagnostic, hookLog, emitContext, emitBlock,
|
|
11
|
+
} from "../lib-ts/base/hook-utils.js";
|
|
12
|
+
import { getProjectRoot } from "../lib-ts/base/constants.js";
|
|
13
|
+
import {
|
|
14
|
+
getContextBySessionId, bindSession, maybeActivate, saveState,
|
|
15
|
+
} from "../lib-ts/context/context-store.js";
|
|
16
|
+
import { determineContext, BlockRequest } from "../lib-ts/context/context-selector.js";
|
|
17
|
+
import { buildContextInventory } from "../lib-ts/context/context-formatter.js";
|
|
18
|
+
|
|
19
|
+
async function asyncMain(): Promise<void> {
|
|
20
|
+
const payload = loadHookInput();
|
|
21
|
+
if (!payload) return;
|
|
22
|
+
|
|
23
|
+
const prompt = (payload as any).prompt as string | undefined;
|
|
24
|
+
const sessionId = payload.session_id;
|
|
25
|
+
const permissionMode = payload.permission_mode ?? "";
|
|
26
|
+
const projectRoot = getProjectRoot(payload.cwd);
|
|
27
|
+
|
|
28
|
+
if (!sessionId) {
|
|
29
|
+
logDebug("user_prompt_submit", "No session_id");
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const outputs: string[] = [];
|
|
34
|
+
|
|
35
|
+
// Check if session is already bound to a context
|
|
36
|
+
const existingCtx = getContextBySessionId(sessionId, projectRoot);
|
|
37
|
+
|
|
38
|
+
if (existingCtx) {
|
|
39
|
+
// Returning user — context already bound (stderr: false to avoid "hook error" display)
|
|
40
|
+
try {
|
|
41
|
+
maybeActivate(existingCtx.id, permissionMode, projectRoot, "user_prompt_submit");
|
|
42
|
+
} catch (e) {
|
|
43
|
+
hookLog("warn", "user_prompt_submit", `maybeActivate failed (non-critical): ${e}`, { stderr: false });
|
|
44
|
+
}
|
|
45
|
+
hookLog("debug", "user_prompt_submit", `Session bound to ${existingCtx.id}`, { stderr: false });
|
|
46
|
+
} else if (prompt) {
|
|
47
|
+
// First prompt — need to determine context
|
|
48
|
+
try {
|
|
49
|
+
const [contextId, method, outputText] = await determineContext(prompt, sessionId, projectRoot);
|
|
50
|
+
|
|
51
|
+
if (contextId) {
|
|
52
|
+
bindSession(contextId, sessionId, projectRoot);
|
|
53
|
+
maybeActivate(contextId, permissionMode, projectRoot, "user_prompt_submit");
|
|
54
|
+
|
|
55
|
+
// Clear handoff_path after binding (prevents re-injection)
|
|
56
|
+
const state = getContextBySessionId(sessionId, projectRoot);
|
|
57
|
+
if (state && state.handoff_path) {
|
|
58
|
+
state.handoff_path = null;
|
|
59
|
+
saveState(state.id, state, projectRoot);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
logInfo("user_prompt_submit", `Context ${contextId} via ${method}`);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (outputText) {
|
|
66
|
+
outputs.push(outputText);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Append context folder inventory
|
|
70
|
+
try {
|
|
71
|
+
const boundState = getContextBySessionId(sessionId, projectRoot);
|
|
72
|
+
if (boundState) {
|
|
73
|
+
const inventory = buildContextInventory(boundState, projectRoot);
|
|
74
|
+
if (inventory) outputs.push(inventory);
|
|
75
|
+
}
|
|
76
|
+
} catch (e) {
|
|
77
|
+
logWarn("user_prompt_submit", `Inventory failed (non-critical): ${e}`);
|
|
78
|
+
}
|
|
79
|
+
} catch (e) {
|
|
80
|
+
if (e instanceof BlockRequest) {
|
|
81
|
+
emitBlock((e as Error).message);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
throw e; // Re-throw unexpected errors
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (outputs.length > 0) {
|
|
89
|
+
emitContext(outputs.join("\n\n"));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
runHookAsync(asyncMain, "user_prompt_submit");
|