sqlew 4.0.5 → 4.1.0
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 +1805 -1782
- package/README.md +409 -468
- package/assets/claude-md-snippets/plan-mode-integration.md +17 -6
- package/assets/config.example.toml +282 -284
- package/assets/sample-agents/README.md +36 -40
- package/assets/sample-agents/sqlew-architect.md +321 -322
- package/assets/sample-agents/sqlew-researcher.md +292 -293
- package/assets/sample-agents/sqlew-scrum-master.md +286 -287
- package/assets/sample-commands/README.md +56 -57
- package/assets/sample-skills/sqlew-plan-guidance/SKILL.md +33 -26
- package/dist/cli/hooks/check-completion.d.ts +19 -0
- package/dist/cli/hooks/check-completion.d.ts.map +1 -0
- package/dist/cli/hooks/check-completion.js +104 -0
- package/dist/cli/hooks/check-completion.js.map +1 -0
- package/dist/cli/hooks/init-hooks.d.ts +35 -0
- package/dist/cli/hooks/init-hooks.d.ts.map +1 -0
- package/dist/cli/hooks/init-hooks.js +425 -0
- package/dist/cli/hooks/init-hooks.js.map +1 -0
- package/dist/cli/hooks/mark-done.d.ts +25 -0
- package/dist/cli/hooks/mark-done.d.ts.map +1 -0
- package/dist/cli/hooks/mark-done.js +128 -0
- package/dist/cli/hooks/mark-done.js.map +1 -0
- package/dist/cli/hooks/plan-id-utils.d.ts +83 -0
- package/dist/cli/hooks/plan-id-utils.d.ts.map +1 -0
- package/dist/cli/hooks/plan-id-utils.js +183 -0
- package/dist/cli/hooks/plan-id-utils.js.map +1 -0
- package/dist/cli/hooks/save.d.ts +23 -0
- package/dist/cli/hooks/save.d.ts.map +1 -0
- package/dist/cli/hooks/save.js +90 -0
- package/dist/cli/hooks/save.js.map +1 -0
- package/dist/cli/hooks/stdin-parser.d.ts +139 -0
- package/dist/cli/hooks/stdin-parser.d.ts.map +1 -0
- package/dist/cli/hooks/stdin-parser.js +127 -0
- package/dist/cli/hooks/stdin-parser.js.map +1 -0
- package/dist/cli/hooks/suggest.d.ts +19 -0
- package/dist/cli/hooks/suggest.d.ts.map +1 -0
- package/dist/cli/hooks/suggest.js +157 -0
- package/dist/cli/hooks/suggest.js.map +1 -0
- package/dist/cli/hooks/track-plan.d.ts +36 -0
- package/dist/cli/hooks/track-plan.d.ts.map +1 -0
- package/dist/cli/hooks/track-plan.js +152 -0
- package/dist/cli/hooks/track-plan.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +56 -16
- package/dist/cli.js.map +1 -1
- package/dist/config/global-config.d.ts +187 -0
- package/dist/config/global-config.d.ts.map +1 -0
- package/dist/config/global-config.js +206 -0
- package/dist/config/global-config.js.map +1 -0
- package/dist/config/loader.d.ts +42 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +96 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/constants.d.ts +4 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +10 -0
- package/dist/constants.js.map +1 -1
- package/dist/database/operations/queries.d.ts.map +1 -1
- package/dist/database/operations/queries.js +11 -2
- package/dist/database/operations/queries.js.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/init-agents.js +0 -1
- package/dist/init-agents.js.map +1 -1
- package/dist/init-skills.d.ts +4 -3
- package/dist/init-skills.d.ts.map +1 -1
- package/dist/init-skills.js +10 -3
- package/dist/init-skills.js.map +1 -1
- package/dist/server/setup.d.ts +8 -0
- package/dist/server/setup.d.ts.map +1 -1
- package/dist/server/setup.js +141 -21
- package/dist/server/setup.js.map +1 -1
- package/dist/sync-agents.d.ts.map +1 -1
- package/dist/sync-agents.js +48 -3
- package/dist/sync-agents.js.map +1 -1
- package/dist/sync-commands.d.ts.map +1 -1
- package/dist/sync-commands.js +43 -3
- package/dist/sync-commands.js.map +1 -1
- package/dist/tools/constraints/actions/get.d.ts.map +1 -1
- package/dist/tools/constraints/actions/get.js +5 -8
- package/dist/tools/constraints/actions/get.js.map +1 -1
- package/dist/tools/constraints/help/help.d.ts.map +1 -1
- package/dist/tools/constraints/help/help.js +1 -6
- package/dist/tools/constraints/help/help.js.map +1 -1
- package/dist/tools/context/actions/get.d.ts.map +1 -1
- package/dist/tools/context/actions/get.js.map +1 -1
- package/dist/tools/context/actions/search-layer.d.ts.map +1 -1
- package/dist/tools/context/actions/search-layer.js +5 -3
- package/dist/tools/context/actions/search-layer.js.map +1 -1
- package/dist/tools/context/actions/set-from-policy.d.ts +2 -1
- package/dist/tools/context/actions/set-from-policy.d.ts.map +1 -1
- package/dist/tools/context/actions/set-from-policy.js.map +1 -1
- package/dist/tools/context/help/help.d.ts.map +1 -1
- package/dist/tools/context/help/help.js +1 -7
- package/dist/tools/context/help/help.js.map +1 -1
- package/dist/tools/context/internal/queries.d.ts.map +1 -1
- package/dist/tools/context/internal/queries.js +5 -2
- package/dist/tools/context/internal/queries.js.map +1 -1
- package/dist/tools/context/types.d.ts +1 -1
- package/dist/tools/context/types.d.ts.map +1 -1
- package/dist/tools/files/actions/get.d.ts.map +1 -1
- package/dist/tools/files/actions/get.js +4 -6
- package/dist/tools/files/actions/get.js.map +1 -1
- package/dist/tools/files/help/help.d.ts.map +1 -1
- package/dist/tools/files/help/help.js +1 -6
- package/dist/tools/files/help/help.js.map +1 -1
- package/dist/tools/suggest/help/constraint-help.d.ts.map +1 -1
- package/dist/tools/suggest/help/constraint-help.js +0 -2
- package/dist/tools/suggest/help/constraint-help.js.map +1 -1
- package/dist/tools/suggest/internal/constraint-queries.d.ts.map +1 -1
- package/dist/tools/suggest/internal/constraint-queries.js +12 -5
- package/dist/tools/suggest/internal/constraint-queries.js.map +1 -1
- package/dist/tools/suggest/internal/queries.js +2 -2
- package/dist/tools/suggest/internal/queries.js.map +1 -1
- package/dist/tools/tasks/help/help.d.ts.map +1 -1
- package/dist/tools/tasks/help/help.js +0 -6
- package/dist/tools/tasks/help/help.js.map +1 -1
- package/dist/tools/tasks/help/use-case.d.ts.map +1 -1
- package/dist/tools/tasks/help/use-case.js +0 -1
- package/dist/tools/tasks/help/use-case.js.map +1 -1
- package/dist/tools/tasks/watcher/status.d.ts.map +1 -1
- package/dist/tools/tasks/watcher/status.js +5 -1
- package/dist/tools/tasks/watcher/status.js.map +1 -1
- package/dist/types/decision/params.d.ts +7 -6
- package/dist/types/decision/params.d.ts.map +1 -1
- package/dist/types/decision/templates.d.ts +3 -2
- package/dist/types/decision/templates.d.ts.map +1 -1
- package/dist/types/view-entities.d.ts +2 -1
- package/dist/types/view-entities.d.ts.map +1 -1
- package/dist/types.d.ts +19 -11
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/enum-converter.d.ts +72 -0
- package/dist/utils/enum-converter.d.ts.map +1 -0
- package/dist/utils/enum-converter.js +76 -0
- package/dist/utils/enum-converter.js.map +1 -0
- package/dist/utils/hook-queue.d.ts +81 -0
- package/dist/utils/hook-queue.d.ts.map +1 -0
- package/dist/utils/hook-queue.js +156 -0
- package/dist/utils/hook-queue.js.map +1 -0
- package/dist/utils/project-root.d.ts +9 -2
- package/dist/utils/project-root.d.ts.map +1 -1
- package/dist/utils/project-root.js +16 -2
- package/dist/utils/project-root.js.map +1 -1
- package/dist/utils/tag-parser.d.ts.map +1 -1
- package/dist/utils/tag-parser.js +6 -0
- package/dist/utils/tag-parser.js.map +1 -1
- package/dist/utils/validators.d.ts +1 -1
- package/dist/utils/validators.d.ts.map +1 -1
- package/dist/utils/validators.js +1 -1
- package/dist/utils/validators.js.map +1 -1
- package/dist/utils/vcs-adapter.d.ts +44 -0
- package/dist/utils/vcs-adapter.d.ts.map +1 -1
- package/dist/utils/vcs-adapter.js +88 -0
- package/dist/utils/vcs-adapter.js.map +1 -1
- package/dist/utils/view-queries.d.ts.map +1 -1
- package/dist/utils/view-queries.js +9 -19
- package/dist/utils/view-queries.js.map +1 -1
- package/dist/watcher/base-watcher.d.ts +69 -0
- package/dist/watcher/base-watcher.d.ts.map +1 -0
- package/dist/watcher/base-watcher.js +130 -0
- package/dist/watcher/base-watcher.js.map +1 -0
- package/dist/watcher/index.d.ts +3 -0
- package/dist/watcher/index.d.ts.map +1 -1
- package/dist/watcher/index.js +2 -0
- package/dist/watcher/index.js.map +1 -1
- package/dist/watcher/queue-watcher.d.ts +64 -0
- package/dist/watcher/queue-watcher.d.ts.map +1 -0
- package/dist/watcher/queue-watcher.js +187 -0
- package/dist/watcher/queue-watcher.js.map +1 -0
- package/docs/ADR_CONCEPTS.md +140 -0
- package/docs/CONFIGURATION.md +922 -925
- package/docs/CROSS_DATABASE.md +153 -0
- package/docs/DATABASE_AUTH.md +70 -356
- package/docs/HOOKS_GUIDE.md +159 -0
- package/docs/SLASH_COMMANDS.md +329 -337
- package/docs/TASK_SYSTEM_DEPRECATED.md +88 -0
- package/docs/changelogs/CHANGELOG_ARCHIVE_v3.4_and_older.md +293 -296
- package/docs/cli/DATA_EXPORT_IMPORT.md +699 -700
- package/docs/cli/README.md +276 -277
- package/package.json +123 -124
- package/docs/ACCEPTANCE_CRITERIA.md +0 -625
- package/docs/AI_AGENT_GUIDE.md +0 -299
- package/docs/ARCHITECTURE.md +0 -167
- package/docs/AUTO_FILE_TRACKING.md +0 -841
- package/docs/BATCH_VALIDATION.md +0 -617
- package/docs/BEST_PRACTICES.md +0 -168
- package/docs/CONSTRAINT_INTELLIGENCE.md +0 -339
- package/docs/DECISION_CONTEXT.md +0 -697
- package/docs/DECISION_INTELLIGENCE.md +0 -605
- package/docs/GIT_AWARE_AUTO_COMPLETE.md +0 -646
- package/docs/MIGRATION_GUIDE_V3.9.0.md +0 -371
- package/docs/SHARED_CONCEPTS.md +0 -225
- package/docs/SPECIALIZED_AGENTS.md +0 -126
- package/docs/TASK_ACTIONS.md +0 -1177
- package/docs/TASK_OVERVIEW.md +0 -452
- package/docs/TASK_PRUNING.md +0 -594
- package/docs/TOOL_REFERENCE.md +0 -1077
- package/docs/TOOL_SELECTION.md +0 -83
- package/docs/WORKFLOWS.md +0 -941
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Suggest Hook Command
|
|
3
|
+
*
|
|
4
|
+
* PreToolUse hook for Task tool - suggests related decisions.
|
|
5
|
+
* Extracts keywords from task description/prompt and finds related decisions.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* echo '{"tool_input": {"description": "implement auth"}}' | sqlew suggest
|
|
9
|
+
*
|
|
10
|
+
* @since v4.1.0
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Main suggest command entry point
|
|
14
|
+
*
|
|
15
|
+
* Called as PreToolUse hook when Task tool is invoked.
|
|
16
|
+
* Finds related decisions and injects them as context.
|
|
17
|
+
*/
|
|
18
|
+
export declare function suggestCommand(): Promise<void>;
|
|
19
|
+
//# sourceMappingURL=suggest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../../src/cli/hooks/suggest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAyFH;;;;;GAKG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CA2EpD"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Suggest Hook Command
|
|
3
|
+
*
|
|
4
|
+
* PreToolUse hook for Task tool - suggests related decisions.
|
|
5
|
+
* Extracts keywords from task description/prompt and finds related decisions.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* echo '{"tool_input": {"description": "implement auth"}}' | sqlew suggest
|
|
9
|
+
*
|
|
10
|
+
* @since v4.1.0
|
|
11
|
+
*/
|
|
12
|
+
import { readStdinJson, sendContinue, getProjectPath } from './stdin-parser.js';
|
|
13
|
+
import { initializeDatabase } from '../../database.js';
|
|
14
|
+
import { suggestByContext } from '../../tools/suggest/actions/by-context.js';
|
|
15
|
+
import { join } from 'path';
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// Constants
|
|
18
|
+
// ============================================================================
|
|
19
|
+
/** Minimum keyword length to use for search */
|
|
20
|
+
const MIN_KEYWORD_LENGTH = 3;
|
|
21
|
+
/** Default limit for suggestions */
|
|
22
|
+
const DEFAULT_LIMIT = 5;
|
|
23
|
+
/** Minimum score for suggestions */
|
|
24
|
+
const MIN_SCORE = 30;
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// Keyword Extraction
|
|
27
|
+
// ============================================================================
|
|
28
|
+
/**
|
|
29
|
+
* Extract meaningful keywords from text
|
|
30
|
+
*
|
|
31
|
+
* Removes common stop words and short words.
|
|
32
|
+
*
|
|
33
|
+
* @param text - Text to extract keywords from
|
|
34
|
+
* @returns Array of keywords
|
|
35
|
+
*/
|
|
36
|
+
function extractKeywords(text) {
|
|
37
|
+
// Common stop words to filter out
|
|
38
|
+
const stopWords = new Set([
|
|
39
|
+
'the', 'a', 'an', 'and', 'or', 'but', 'in', 'on', 'at', 'to', 'for',
|
|
40
|
+
'of', 'with', 'by', 'from', 'as', 'is', 'was', 'are', 'were', 'been',
|
|
41
|
+
'be', 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could',
|
|
42
|
+
'should', 'may', 'might', 'must', 'shall', 'can', 'need', 'this', 'that',
|
|
43
|
+
'these', 'those', 'i', 'you', 'he', 'she', 'it', 'we', 'they', 'what',
|
|
44
|
+
'which', 'who', 'when', 'where', 'why', 'how', 'all', 'each', 'every',
|
|
45
|
+
'both', 'few', 'more', 'most', 'other', 'some', 'such', 'no', 'not',
|
|
46
|
+
'only', 'same', 'so', 'than', 'too', 'very', 'just', 'also', 'now',
|
|
47
|
+
'use', 'using', 'implement', 'create', 'add', 'update', 'fix', 'make',
|
|
48
|
+
'get', 'set', 'new', 'file', 'code', 'function', 'method', 'class',
|
|
49
|
+
]);
|
|
50
|
+
// Split on word boundaries and filter
|
|
51
|
+
const words = text
|
|
52
|
+
.toLowerCase()
|
|
53
|
+
.replace(/[^a-z0-9\s-_]/g, ' ')
|
|
54
|
+
.split(/\s+/)
|
|
55
|
+
.filter(word => word.length >= MIN_KEYWORD_LENGTH &&
|
|
56
|
+
!stopWords.has(word) &&
|
|
57
|
+
!/^\d+$/.test(word) // Filter out pure numbers
|
|
58
|
+
);
|
|
59
|
+
// Deduplicate while preserving order
|
|
60
|
+
return [...new Set(words)];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Extract search context from hook input
|
|
64
|
+
*
|
|
65
|
+
* Combines description and prompt from Task tool input.
|
|
66
|
+
*
|
|
67
|
+
* @param input - Hook input
|
|
68
|
+
* @returns Combined search text
|
|
69
|
+
*/
|
|
70
|
+
function extractSearchContext(input) {
|
|
71
|
+
const parts = [];
|
|
72
|
+
// Task tool uses description and prompt
|
|
73
|
+
if (input.tool_input?.description) {
|
|
74
|
+
parts.push(input.tool_input.description);
|
|
75
|
+
}
|
|
76
|
+
if (input.tool_input?.prompt) {
|
|
77
|
+
parts.push(input.tool_input.prompt);
|
|
78
|
+
}
|
|
79
|
+
return parts.join(' ');
|
|
80
|
+
}
|
|
81
|
+
// ============================================================================
|
|
82
|
+
// Main Entry Point
|
|
83
|
+
// ============================================================================
|
|
84
|
+
/**
|
|
85
|
+
* Main suggest command entry point
|
|
86
|
+
*
|
|
87
|
+
* Called as PreToolUse hook when Task tool is invoked.
|
|
88
|
+
* Finds related decisions and injects them as context.
|
|
89
|
+
*/
|
|
90
|
+
export async function suggestCommand() {
|
|
91
|
+
try {
|
|
92
|
+
const input = await readStdinJson();
|
|
93
|
+
// Only process Task tool
|
|
94
|
+
if (input.tool_name !== 'Task') {
|
|
95
|
+
sendContinue();
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const projectPath = getProjectPath(input);
|
|
99
|
+
if (!projectPath) {
|
|
100
|
+
sendContinue();
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
// Extract search context
|
|
104
|
+
const searchText = extractSearchContext(input);
|
|
105
|
+
if (!searchText.trim()) {
|
|
106
|
+
sendContinue();
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
// Extract keywords for search
|
|
110
|
+
const keywords = extractKeywords(searchText);
|
|
111
|
+
if (keywords.length === 0) {
|
|
112
|
+
sendContinue();
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
// Initialize database
|
|
116
|
+
const dbPath = join(projectPath, '.sqlew', 'sqlew.db');
|
|
117
|
+
try {
|
|
118
|
+
await initializeDatabase({ configPath: dbPath });
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
// Database not initialized - continue without suggestions
|
|
122
|
+
sendContinue();
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
// Build search key from keywords
|
|
126
|
+
const searchKey = keywords.slice(0, 5).join(' ');
|
|
127
|
+
// Find related decisions
|
|
128
|
+
const result = await suggestByContext({
|
|
129
|
+
key: searchKey,
|
|
130
|
+
limit: DEFAULT_LIMIT,
|
|
131
|
+
min_score: MIN_SCORE,
|
|
132
|
+
});
|
|
133
|
+
if (result.suggestions.length === 0) {
|
|
134
|
+
sendContinue();
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
// Format suggestions as context
|
|
138
|
+
const contextLines = [
|
|
139
|
+
'[sqlew] Related decisions found:',
|
|
140
|
+
'',
|
|
141
|
+
];
|
|
142
|
+
for (const suggestion of result.suggestions) {
|
|
143
|
+
contextLines.push(`- **${suggestion.key}**: ${suggestion.value}`);
|
|
144
|
+
if (suggestion.reason) {
|
|
145
|
+
contextLines.push(` (${suggestion.reason})`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
sendContinue(contextLines.join('\n'));
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
// On error, log to stderr but continue execution
|
|
152
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
153
|
+
console.error(`[sqlew suggest] Error: ${message}`);
|
|
154
|
+
sendContinue();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=suggest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../../src/cli/hooks/suggest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Track Plan Hook Command
|
|
3
|
+
*
|
|
4
|
+
* PreToolUse hook for Write tool - tracks plan files.
|
|
5
|
+
* When a .claude/plans/*.md file is being written:
|
|
6
|
+
* 1. Ensures plan has sqlew-plan-id in YAML frontmatter
|
|
7
|
+
* 2. Saves current plan info to session cache
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* echo '{"tool_input": {"file_path": ".claude/plans/my-plan.md"}}' | sqlew track-plan
|
|
11
|
+
*
|
|
12
|
+
* @since v4.1.0
|
|
13
|
+
*/
|
|
14
|
+
import { type CurrentPlanInfo } from '../../config/global-config.js';
|
|
15
|
+
/**
|
|
16
|
+
* Main track-plan command entry point
|
|
17
|
+
*
|
|
18
|
+
* Called as PreToolUse hook when Write tool is invoked.
|
|
19
|
+
* Only processes .claude/plans/*.md files.
|
|
20
|
+
*/
|
|
21
|
+
export declare function trackPlanCommand(): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Check if a plan is currently being tracked for a project
|
|
24
|
+
*
|
|
25
|
+
* @param projectPath - Project root path
|
|
26
|
+
* @returns Current plan info or null
|
|
27
|
+
*/
|
|
28
|
+
export declare function getCurrentTrackedPlan(projectPath: string): CurrentPlanInfo | null;
|
|
29
|
+
/**
|
|
30
|
+
* Get plan ID from a file path (convenience wrapper)
|
|
31
|
+
*
|
|
32
|
+
* @param filePath - Path to plan file
|
|
33
|
+
* @returns Plan ID or null
|
|
34
|
+
*/
|
|
35
|
+
export declare function getPlanIdFromFile(filePath: string): string | null;
|
|
36
|
+
//# sourceMappingURL=track-plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track-plan.d.ts","sourceRoot":"","sources":["../../../src/cli/hooks/track-plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAAoC,KAAK,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAgBvG;;;;;GAKG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAyHtD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAGjF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEjE"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Track Plan Hook Command
|
|
3
|
+
*
|
|
4
|
+
* PreToolUse hook for Write tool - tracks plan files.
|
|
5
|
+
* When a .claude/plans/*.md file is being written:
|
|
6
|
+
* 1. Ensures plan has sqlew-plan-id in YAML frontmatter
|
|
7
|
+
* 2. Saves current plan info to session cache
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* echo '{"tool_input": {"file_path": ".claude/plans/my-plan.md"}}' | sqlew track-plan
|
|
11
|
+
*
|
|
12
|
+
* @since v4.1.0
|
|
13
|
+
*/
|
|
14
|
+
import { readStdinJson, sendContinue, isPlanFile, getProjectPath } from './stdin-parser.js';
|
|
15
|
+
import { ensurePlanId, extractPlanFileName, getPlanId, parseFrontmatter, generatePlanId } from './plan-id-utils.js';
|
|
16
|
+
import { saveCurrentPlan, loadCurrentPlan } from '../../config/global-config.js';
|
|
17
|
+
import { enqueueDecisionCreate } from '../../utils/hook-queue.js';
|
|
18
|
+
import { existsSync } from 'fs';
|
|
19
|
+
import { resolve } from 'path';
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// Constants
|
|
22
|
+
// ============================================================================
|
|
23
|
+
/** Decision key prefix for plan-based decisions */
|
|
24
|
+
const PLAN_DECISION_PREFIX = 'plan/implementation';
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// Main Entry Point
|
|
27
|
+
// ============================================================================
|
|
28
|
+
/**
|
|
29
|
+
* Main track-plan command entry point
|
|
30
|
+
*
|
|
31
|
+
* Called as PreToolUse hook when Write tool is invoked.
|
|
32
|
+
* Only processes .claude/plans/*.md files.
|
|
33
|
+
*/
|
|
34
|
+
export async function trackPlanCommand() {
|
|
35
|
+
try {
|
|
36
|
+
const input = await readStdinJson();
|
|
37
|
+
// Only process plan files
|
|
38
|
+
if (!isPlanFile(input)) {
|
|
39
|
+
// Not a plan file - continue without action
|
|
40
|
+
sendContinue();
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const projectPath = getProjectPath(input);
|
|
44
|
+
if (!projectPath) {
|
|
45
|
+
// No project path - continue without action
|
|
46
|
+
sendContinue();
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const filePath = input.tool_input?.file_path;
|
|
50
|
+
if (!filePath) {
|
|
51
|
+
sendContinue();
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
// Resolve absolute path
|
|
55
|
+
const absolutePath = resolve(projectPath, filePath);
|
|
56
|
+
// Check if file exists (it might be a new file being created)
|
|
57
|
+
if (!existsSync(absolutePath)) {
|
|
58
|
+
// File doesn't exist yet - this is PreToolUse for new file creation
|
|
59
|
+
// Try to extract plan_id from the content being written (tool_input.content)
|
|
60
|
+
const content = input.tool_input?.content;
|
|
61
|
+
if (!content) {
|
|
62
|
+
// No content to parse - continue without action
|
|
63
|
+
sendContinue(`[sqlew] New plan file detected: ${extractPlanFileName(absolutePath)}. ` +
|
|
64
|
+
`No content provided, skipping tracking.`);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
// Parse frontmatter from content being written
|
|
68
|
+
const frontmatter = parseFrontmatter(content);
|
|
69
|
+
let planId = frontmatter.data['sqlew-plan-id'];
|
|
70
|
+
// Generate new plan ID if not present in content
|
|
71
|
+
if (!planId) {
|
|
72
|
+
planId = generatePlanId();
|
|
73
|
+
}
|
|
74
|
+
const planFileName = extractPlanFileName(absolutePath);
|
|
75
|
+
// Save current plan info to session cache
|
|
76
|
+
const planInfo = {
|
|
77
|
+
plan_id: planId,
|
|
78
|
+
plan_file: planFileName,
|
|
79
|
+
plan_updated_at: new Date().toISOString(),
|
|
80
|
+
recorded: false,
|
|
81
|
+
decision_pending: true,
|
|
82
|
+
};
|
|
83
|
+
saveCurrentPlan(projectPath, planInfo);
|
|
84
|
+
// Enqueue draft decision for later processing by MCP server
|
|
85
|
+
const decisionKey = `${PLAN_DECISION_PREFIX}/${planFileName.replace(/\.md$/, '')}`;
|
|
86
|
+
enqueueDecisionCreate(projectPath, {
|
|
87
|
+
key: decisionKey,
|
|
88
|
+
value: `Plan created: ${planFileName}`,
|
|
89
|
+
status: 'draft',
|
|
90
|
+
layer: 'cross-cutting',
|
|
91
|
+
tags: ['plan', 'draft', planId.slice(0, 8)],
|
|
92
|
+
});
|
|
93
|
+
// Continue with context about the tracked plan
|
|
94
|
+
sendContinue(`[sqlew] Tracking new plan: ${planFileName} (ID: ${planId.slice(0, 8)}...)`);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// Ensure plan has an ID (creates one if missing)
|
|
98
|
+
const planId = ensurePlanId(absolutePath);
|
|
99
|
+
const planFileName = extractPlanFileName(absolutePath);
|
|
100
|
+
// Check if we already have cached info for this plan
|
|
101
|
+
const existingPlan = loadCurrentPlan(projectPath);
|
|
102
|
+
const isNewPlan = !existingPlan || existingPlan.plan_id !== planId;
|
|
103
|
+
// Save current plan info to session cache
|
|
104
|
+
const planInfo = {
|
|
105
|
+
plan_id: planId,
|
|
106
|
+
plan_file: planFileName,
|
|
107
|
+
plan_updated_at: new Date().toISOString(),
|
|
108
|
+
recorded: existingPlan?.recorded ?? false,
|
|
109
|
+
decision_pending: isNewPlan ? true : (existingPlan?.decision_pending ?? false),
|
|
110
|
+
};
|
|
111
|
+
saveCurrentPlan(projectPath, planInfo);
|
|
112
|
+
// Enqueue draft decision for new plans
|
|
113
|
+
if (isNewPlan) {
|
|
114
|
+
const decisionKey = `${PLAN_DECISION_PREFIX}/${planFileName.replace(/\.md$/, '')}`;
|
|
115
|
+
enqueueDecisionCreate(projectPath, {
|
|
116
|
+
key: decisionKey,
|
|
117
|
+
value: `Plan created: ${planFileName}`,
|
|
118
|
+
status: 'draft',
|
|
119
|
+
layer: 'cross-cutting',
|
|
120
|
+
tags: ['plan', 'draft', planId.slice(0, 8)],
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
// Continue with context about the tracked plan
|
|
124
|
+
sendContinue(`[sqlew] Tracking plan: ${planFileName} (ID: ${planId.slice(0, 8)}...)`);
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
// On error, log to stderr but continue execution
|
|
128
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
129
|
+
console.error(`[sqlew track-plan] Error: ${message}`);
|
|
130
|
+
sendContinue();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Check if a plan is currently being tracked for a project
|
|
135
|
+
*
|
|
136
|
+
* @param projectPath - Project root path
|
|
137
|
+
* @returns Current plan info or null
|
|
138
|
+
*/
|
|
139
|
+
export function getCurrentTrackedPlan(projectPath) {
|
|
140
|
+
const { loadCurrentPlan } = require('../../config/global-config.js');
|
|
141
|
+
return loadCurrentPlan(projectPath);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get plan ID from a file path (convenience wrapper)
|
|
145
|
+
*
|
|
146
|
+
* @param filePath - Path to plan file
|
|
147
|
+
* @returns Plan ID or null
|
|
148
|
+
*/
|
|
149
|
+
export function getPlanIdFromFile(filePath) {
|
|
150
|
+
return getPlanId(filePath);
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=track-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track-plan.js","sourceRoot":"","sources":["../../../src/cli/hooks/track-plan.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;GAGG;AAuQH;;;;GAIG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2F7D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAOrD"}
|
package/dist/cli.js
CHANGED
|
@@ -9,6 +9,13 @@ import { getFileChanges } from './tools/files/index.js';
|
|
|
9
9
|
import { dbDumpCommand } from './cli/db-dump.js';
|
|
10
10
|
import { dbExportCommand } from './cli/db-export.js';
|
|
11
11
|
import { dbImportCommand } from './cli/db-import.js';
|
|
12
|
+
// Claude Code Hooks commands
|
|
13
|
+
import { suggestCommand } from './cli/hooks/suggest.js';
|
|
14
|
+
import { trackPlanCommand } from './cli/hooks/track-plan.js';
|
|
15
|
+
import { saveCommand } from './cli/hooks/save.js';
|
|
16
|
+
import { checkCompletionCommand } from './cli/hooks/check-completion.js';
|
|
17
|
+
import { markDoneCommand } from './cli/hooks/mark-done.js';
|
|
18
|
+
import { initHooksCommand } from './cli/hooks/init-hooks.js';
|
|
12
19
|
// ============================================================================
|
|
13
20
|
// Helper Functions
|
|
14
21
|
// ============================================================================
|
|
@@ -97,32 +104,35 @@ function showHelp() {
|
|
|
97
104
|
console.log(`
|
|
98
105
|
sqlew CLI - Query and database migration tool for mcp-sqlew
|
|
99
106
|
|
|
100
|
-
NOTE: Database commands must be run via "npm run" from the project directory.
|
|
101
|
-
npx is not supported for database operations.
|
|
102
|
-
|
|
103
107
|
USAGE:
|
|
104
|
-
|
|
108
|
+
sqlew <command> [options]
|
|
105
109
|
|
|
106
110
|
COMMANDS:
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
111
|
+
Database:
|
|
112
|
+
db:dump Generate SQL dump for database migration (schema + data)
|
|
113
|
+
db:export Export project data to JSON format (data-only, for append-import)
|
|
114
|
+
db:import Import project data from JSON export (append to existing database)
|
|
115
|
+
|
|
116
|
+
Claude Code Hooks (v4.1.0+):
|
|
117
|
+
suggest Find related decisions (PreToolUse hook for Task)
|
|
118
|
+
track-plan Track plan files (PreToolUse hook for Write)
|
|
119
|
+
save Save decisions on code edit (PostToolUse hook for Edit|Write)
|
|
120
|
+
check-completion Check task completion (PostToolUse hook for TodoWrite)
|
|
121
|
+
mark-done Mark decisions as implemented (Git hooks or manual)
|
|
122
|
+
init --hooks Initialize Claude Code and Git hooks
|
|
110
123
|
|
|
111
124
|
OPTIONS:
|
|
112
125
|
--help Show this help message
|
|
113
126
|
|
|
114
127
|
EXAMPLES:
|
|
128
|
+
# Initialize hooks for Claude Code integration
|
|
129
|
+
sqlew init --hooks
|
|
130
|
+
|
|
115
131
|
# Generate MySQL dump for database migration
|
|
116
132
|
npm run db:dump -- mysql -o dump-mysql.sql
|
|
117
133
|
|
|
118
|
-
#
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
# Export project data to JSON (for merging data across databases)
|
|
122
|
-
npm run db:export -- --project=visualizer -o data.json
|
|
123
|
-
|
|
124
|
-
# Import project data from JSON export
|
|
125
|
-
npm run db:import -- --source=data.json --project-name=visualizer-v2
|
|
134
|
+
# Test hook commands manually
|
|
135
|
+
echo '{"tool_input": {"description": "auth"}}' | sqlew suggest
|
|
126
136
|
|
|
127
137
|
For more information on commands, run:
|
|
128
138
|
npm run db:dump -- --help
|
|
@@ -225,6 +235,32 @@ export async function runCli(rawArgs) {
|
|
|
225
235
|
await dbImportCommand(rawArgs.slice(1));
|
|
226
236
|
return;
|
|
227
237
|
}
|
|
238
|
+
// Claude Code Hooks commands (v4.1.0+)
|
|
239
|
+
if (args.command === 'suggest') {
|
|
240
|
+
await suggestCommand();
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
if (args.command === 'track-plan') {
|
|
244
|
+
await trackPlanCommand();
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
if (args.command === 'save') {
|
|
248
|
+
await saveCommand();
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
if (args.command === 'check-completion') {
|
|
252
|
+
await checkCompletionCommand();
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
if (args.command === 'mark-done') {
|
|
256
|
+
await markDoneCommand(rawArgs.slice(1));
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
// init --hooks command
|
|
260
|
+
if (args.command === 'init' && rawArgs.includes('--hooks')) {
|
|
261
|
+
await initHooksCommand(rawArgs.slice(1));
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
228
264
|
// Show help if requested or no command
|
|
229
265
|
if (args.help || !args.command) {
|
|
230
266
|
showHelp();
|
|
@@ -268,7 +304,11 @@ export async function runCli(rawArgs) {
|
|
|
268
304
|
* Check if a command is a CLI command (for use by index.ts)
|
|
269
305
|
*/
|
|
270
306
|
export function isCliCommand(command) {
|
|
271
|
-
const cliCommands = [
|
|
307
|
+
const cliCommands = [
|
|
308
|
+
'db:dump', 'db:export', 'db:import', 'query',
|
|
309
|
+
// Claude Code Hooks commands (v4.1.0+)
|
|
310
|
+
'suggest', 'track-plan', 'save', 'check-completion', 'mark-done', 'init',
|
|
311
|
+
];
|
|
272
312
|
return cliCommands.includes(command);
|
|
273
313
|
}
|
|
274
314
|
// Run CLI when executed directly
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAc,cAAc,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|