sqlew 5.1.0 → 5.2.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 +29 -0
- package/README.md +17 -8
- package/dist/cli/hooks/on-exit-plan.d.ts.map +1 -1
- package/dist/cli/hooks/on-exit-plan.js +42 -1
- package/dist/cli/hooks/on-exit-plan.js.map +1 -1
- package/dist/cli/hooks/on-prompt.d.ts.map +1 -1
- package/dist/cli/hooks/on-prompt.js +5 -0
- package/dist/cli/hooks/on-prompt.js.map +1 -1
- package/dist/cli/hooks/plan-processor.d.ts.map +1 -1
- package/dist/cli/hooks/plan-processor.js +16 -2
- package/dist/cli/hooks/plan-processor.js.map +1 -1
- package/dist/cli/hooks/stdin-parser.d.ts +41 -0
- package/dist/cli/hooks/stdin-parser.d.ts.map +1 -1
- package/dist/cli/hooks/stdin-parser.js +140 -4
- package/dist/cli/hooks/stdin-parser.js.map +1 -1
- package/dist/cli/hooks/track-plan.d.ts +13 -0
- package/dist/cli/hooks/track-plan.d.ts.map +1 -1
- package/dist/cli/hooks/track-plan.js +58 -3
- package/dist/cli/hooks/track-plan.js.map +1 -1
- package/dist/config/global-config.d.ts +7 -1
- package/dist/config/global-config.d.ts.map +1 -1
- package/dist/config/global-config.js +24 -45
- package/dist/config/global-config.js.map +1 -1
- package/dist/database/migrations/v4/20251126000001_v4_migrate_data.d.ts.map +1 -1
- package/dist/database/migrations/v4/20251126000001_v4_migrate_data.js +2 -1
- package/dist/database/migrations/v4/20251126000001_v4_migrate_data.js.map +1 -1
- package/dist/tests/unit/hooks/grok-hook-normalization.test.d.ts +9 -0
- package/dist/tests/unit/hooks/grok-hook-normalization.test.d.ts.map +1 -0
- package/dist/tests/unit/hooks/grok-hook-normalization.test.js +98 -0
- package/dist/tests/unit/hooks/grok-hook-normalization.test.js.map +1 -0
- package/dist/tests/unit/hooks/grok-plan-template-injection.test.d.ts +7 -0
- package/dist/tests/unit/hooks/grok-plan-template-injection.test.d.ts.map +1 -0
- package/dist/tests/unit/hooks/grok-plan-template-injection.test.js +55 -0
- package/dist/tests/unit/hooks/grok-plan-template-injection.test.js.map +1 -0
- package/dist/utils/path-normalize.d.ts +23 -0
- package/dist/utils/path-normalize.d.ts.map +1 -0
- package/dist/utils/path-normalize.js +38 -0
- package/dist/utils/path-normalize.js.map +1 -0
- package/dist/utils/project-root.d.ts +6 -3
- package/dist/utils/project-root.d.ts.map +1 -1
- package/dist/utils/project-root.js +11 -3
- package/dist/utils/project-root.js.map +1 -1
- package/dist/watcher/base-watcher.d.ts +0 -4
- package/dist/watcher/base-watcher.d.ts.map +1 -1
- package/dist/watcher/base-watcher.js +11 -22
- package/dist/watcher/base-watcher.js.map +1 -1
- package/docs/HOOKS_GUIDE.md +40 -6
- package/package.json +3 -3
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path Normalization Utilities
|
|
3
|
+
*
|
|
4
|
+
* Cross-platform path normalization for Windows environments.
|
|
5
|
+
* Handles Git Bash/MSYS2 path conversion and drive letter consistency.
|
|
6
|
+
*
|
|
7
|
+
* @since v5.2.0
|
|
8
|
+
*/
|
|
9
|
+
import { resolve } from 'path';
|
|
10
|
+
/**
|
|
11
|
+
* Normalize a path for Windows cross-platform consistency.
|
|
12
|
+
*
|
|
13
|
+
* Performs:
|
|
14
|
+
* 1. Git Bash/MSYS2 path conversion (/c/Users/... -> C:\Users\...)
|
|
15
|
+
* 2. Absolute path resolution via resolve()
|
|
16
|
+
* 3. Drive letter lowercase normalization
|
|
17
|
+
*
|
|
18
|
+
* On non-Windows platforms, only resolve() is applied.
|
|
19
|
+
*
|
|
20
|
+
* @param inputPath - Path to normalize
|
|
21
|
+
* @returns Normalized absolute path
|
|
22
|
+
*/
|
|
23
|
+
export function normalizeWindowsPath(inputPath) {
|
|
24
|
+
let normalizedPath = inputPath;
|
|
25
|
+
// Convert Git Bash/MSYS2 paths (/c/Users/...) to Windows paths (C:\Users\...)
|
|
26
|
+
if (process.platform === 'win32' && /^\/[a-zA-Z]\//.test(normalizedPath)) {
|
|
27
|
+
const driveLetter = normalizedPath[1].toUpperCase();
|
|
28
|
+
normalizedPath = driveLetter + ':' + normalizedPath.slice(2).replace(/\//g, '\\');
|
|
29
|
+
}
|
|
30
|
+
// Resolve to absolute path
|
|
31
|
+
normalizedPath = resolve(normalizedPath);
|
|
32
|
+
// Lowercase drive letter for consistency
|
|
33
|
+
if (process.platform === 'win32' && /^[A-Z]:/.test(normalizedPath)) {
|
|
34
|
+
normalizedPath = normalizedPath[0].toLowerCase() + normalizedPath.slice(1);
|
|
35
|
+
}
|
|
36
|
+
return normalizedPath;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=path-normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-normalize.js","sourceRoot":"","sources":["../../src/utils/path-normalize.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,IAAI,cAAc,GAAG,SAAS,CAAC;IAE/B,8EAA8E;IAC9E,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QACzE,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACpD,cAAc,GAAG,WAAW,GAAG,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpF,CAAC;IAED,2BAA2B;IAC3B,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAEzC,yCAAyC;IACzC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QACnE,cAAc,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC"}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Project Root Determination Utility
|
|
3
3
|
*
|
|
4
4
|
* Determines the project root directory with correct priority order:
|
|
5
|
-
* 0. CLAUDE_PROJECT_DIR environment variable (Claude Code
|
|
5
|
+
* 0. CLAUDE_PROJECT_DIR environment variable (Claude Code / Grok Build hooks)
|
|
6
|
+
* 0b. GROK_WORKSPACE_ROOT environment variable (Grok Build hooks / MCP)
|
|
6
7
|
* 1. SQLEW_PROJECT_ROOT environment variable (MCP client can set this)
|
|
7
8
|
* 2. CLI --db-path argument (absolute path) → use dirname
|
|
8
9
|
* 3. CLI --config-path argument (absolute path) → use dirname
|
|
@@ -13,7 +14,8 @@
|
|
|
13
14
|
* like C:\Windows\System32 (e.g., by MCP hosts like Claude Desktop or Junie AI).
|
|
14
15
|
*
|
|
15
16
|
* Environment Variable Support:
|
|
16
|
-
* - CLAUDE_PROJECT_DIR: Set automatically by Claude Code
|
|
17
|
+
* - CLAUDE_PROJECT_DIR: Set automatically by Claude Code / Grok Build hooks (v4.1.0+)
|
|
18
|
+
* - GROK_WORKSPACE_ROOT: Set automatically by Grok Build hooks (v5.2.0+)
|
|
17
19
|
* - SQLEW_PROJECT_ROOT: MCP clients can set this (Serena-MCP pattern)
|
|
18
20
|
* This allows project-relative database paths without absolute CLI arguments.
|
|
19
21
|
*/
|
|
@@ -38,7 +40,8 @@ export interface ProjectRootOptions {
|
|
|
38
40
|
* Determines the project root directory based on available path information.
|
|
39
41
|
*
|
|
40
42
|
* Priority order (highest to lowest):
|
|
41
|
-
* 0. CLAUDE_PROJECT_DIR environment variable (Claude Code
|
|
43
|
+
* 0. CLAUDE_PROJECT_DIR environment variable (Claude Code / Grok Build hooks)
|
|
44
|
+
* 0b. GROK_WORKSPACE_ROOT environment variable (Grok Build)
|
|
42
45
|
* 1. SQLEW_PROJECT_ROOT environment variable
|
|
43
46
|
* 2. CLI --db-path (absolute)
|
|
44
47
|
* 3. CLI --config-path (absolute)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-root.d.ts","sourceRoot":"","sources":["../../src/utils/project-root.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"project-root.d.ts","sourceRoot":"","sources":["../../src/utils/project-root.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,CAiD7E;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAiB1D"}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Project Root Determination Utility
|
|
3
3
|
*
|
|
4
4
|
* Determines the project root directory with correct priority order:
|
|
5
|
-
* 0. CLAUDE_PROJECT_DIR environment variable (Claude Code
|
|
5
|
+
* 0. CLAUDE_PROJECT_DIR environment variable (Claude Code / Grok Build hooks)
|
|
6
|
+
* 0b. GROK_WORKSPACE_ROOT environment variable (Grok Build hooks / MCP)
|
|
6
7
|
* 1. SQLEW_PROJECT_ROOT environment variable (MCP client can set this)
|
|
7
8
|
* 2. CLI --db-path argument (absolute path) → use dirname
|
|
8
9
|
* 3. CLI --config-path argument (absolute path) → use dirname
|
|
@@ -13,7 +14,8 @@
|
|
|
13
14
|
* like C:\Windows\System32 (e.g., by MCP hosts like Claude Desktop or Junie AI).
|
|
14
15
|
*
|
|
15
16
|
* Environment Variable Support:
|
|
16
|
-
* - CLAUDE_PROJECT_DIR: Set automatically by Claude Code
|
|
17
|
+
* - CLAUDE_PROJECT_DIR: Set automatically by Claude Code / Grok Build hooks (v4.1.0+)
|
|
18
|
+
* - GROK_WORKSPACE_ROOT: Set automatically by Grok Build hooks (v5.2.0+)
|
|
17
19
|
* - SQLEW_PROJECT_ROOT: MCP clients can set this (Serena-MCP pattern)
|
|
18
20
|
* This allows project-relative database paths without absolute CLI arguments.
|
|
19
21
|
*/
|
|
@@ -22,7 +24,8 @@ import * as path from 'path';
|
|
|
22
24
|
* Determines the project root directory based on available path information.
|
|
23
25
|
*
|
|
24
26
|
* Priority order (highest to lowest):
|
|
25
|
-
* 0. CLAUDE_PROJECT_DIR environment variable (Claude Code
|
|
27
|
+
* 0. CLAUDE_PROJECT_DIR environment variable (Claude Code / Grok Build hooks)
|
|
28
|
+
* 0b. GROK_WORKSPACE_ROOT environment variable (Grok Build)
|
|
26
29
|
* 1. SQLEW_PROJECT_ROOT environment variable
|
|
27
30
|
* 2. CLI --db-path (absolute)
|
|
28
31
|
* 3. CLI --config-path (absolute)
|
|
@@ -64,6 +67,11 @@ export function determineProjectRoot(options = {}) {
|
|
|
64
67
|
// Normalize to forward slashes for cross-platform consistency
|
|
65
68
|
return claudeProjectDir.replace(/\\/g, '/');
|
|
66
69
|
}
|
|
70
|
+
// Priority 0b: GROK_WORKSPACE_ROOT (Grok Build hooks inject this on every hook process)
|
|
71
|
+
const grokWorkspaceRoot = process.env.GROK_WORKSPACE_ROOT;
|
|
72
|
+
if (grokWorkspaceRoot && path.isAbsolute(grokWorkspaceRoot)) {
|
|
73
|
+
return grokWorkspaceRoot.replace(/\\/g, '/');
|
|
74
|
+
}
|
|
67
75
|
// Priority 1: SQLEW_PROJECT_ROOT environment variable
|
|
68
76
|
// MCP clients (Junie, Claude Desktop, etc.) can set this to specify project directory
|
|
69
77
|
const envProjectRoot = process.env.SQLEW_PROJECT_ROOT;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-root.js","sourceRoot":"","sources":["../../src/utils/project-root.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"project-root.js","sourceRoot":"","sources":["../../src/utils/project-root.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,10 +37,6 @@ export declare abstract class BaseWatcher {
|
|
|
37
37
|
protected readonly debounceMs: number;
|
|
38
38
|
protected readonly watcherName: string;
|
|
39
39
|
constructor(name: string, debounceMs?: number);
|
|
40
|
-
/**
|
|
41
|
-
* Detect if running on WSL (Windows Subsystem for Linux)
|
|
42
|
-
*/
|
|
43
|
-
protected isWSL(): boolean;
|
|
44
40
|
/**
|
|
45
41
|
* Initialize chokidar watcher with common options
|
|
46
42
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-watcher.d.ts","sourceRoot":"","sources":["../../src/watcher/base-watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAiB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAI/C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,qBAAqB;IACrB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACpC,4CAA4C;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,8BAAsB,WAAW;IAC/B,SAAS,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,CAAQ;IAC3C,SAAS,CAAC,SAAS,EAAE,OAAO,CAAS;IACrC,SAAS,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAa;IAClE,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IACtC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAE3B,IAAI,EAAE,MAAM,EAAE,UAAU,GAAE,MAAa;IAKnD;;OAEG;IACH,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"base-watcher.d.ts","sourceRoot":"","sources":["../../src/watcher/base-watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAiB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAI/C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,qBAAqB;IACrB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACpC,4CAA4C;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,8BAAsB,WAAW;IAC/B,SAAS,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,CAAQ;IAC3C,SAAS,CAAC,SAAS,EAAE,OAAO,CAAS;IACrC,SAAS,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAa;IAClE,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IACtC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAE3B,IAAI,EAAE,MAAM,EAAE,UAAU,GAAE,MAAa;IAKnD;;OAEG;IACH,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS;IAmC/D;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAsB1E;;OAEG;aACa,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAEtC;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBlC;;OAEG;IACI,YAAY,IAAI,OAAO;IAI9B;;OAEG;IACI,OAAO,IAAI,MAAM;CAGzB"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* @since v4.1.0
|
|
11
11
|
*/
|
|
12
12
|
import chokidar from 'chokidar';
|
|
13
|
-
import {
|
|
13
|
+
import { detectEnvironment } from '../utils/environment-detector.js';
|
|
14
14
|
import { debugLog } from '../utils/debug-logger.js';
|
|
15
15
|
/**
|
|
16
16
|
* Abstract base class for file watchers
|
|
@@ -25,33 +25,22 @@ export class BaseWatcher {
|
|
|
25
25
|
this.watcherName = name;
|
|
26
26
|
this.debounceMs = debounceMs;
|
|
27
27
|
}
|
|
28
|
-
/**
|
|
29
|
-
* Detect if running on WSL (Windows Subsystem for Linux)
|
|
30
|
-
*/
|
|
31
|
-
isWSL() {
|
|
32
|
-
if (process.platform !== 'linux') {
|
|
33
|
-
return false;
|
|
34
|
-
}
|
|
35
|
-
try {
|
|
36
|
-
const result = execSync('uname -r', {
|
|
37
|
-
encoding: 'utf-8',
|
|
38
|
-
stdio: ['pipe', 'pipe', 'ignore'],
|
|
39
|
-
});
|
|
40
|
-
return (result.toLowerCase().includes('microsoft') ||
|
|
41
|
-
result.toLowerCase().includes('wsl'));
|
|
42
|
-
}
|
|
43
|
-
catch {
|
|
44
|
-
return false;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
28
|
/**
|
|
48
29
|
* Initialize chokidar watcher with common options
|
|
49
30
|
*/
|
|
50
31
|
initializeWatcher(options) {
|
|
51
|
-
const
|
|
32
|
+
const env = detectEnvironment();
|
|
33
|
+
const isWSL = env === 'wsl';
|
|
52
34
|
if (isWSL) {
|
|
53
35
|
debugLog('INFO', `${this.watcherName}: WSL detected`);
|
|
54
36
|
}
|
|
37
|
+
// WSL2 + Windows FS (/mnt/) requires polling because inotify doesn't work
|
|
38
|
+
const paths = Array.isArray(options.paths) ? options.paths : [options.paths];
|
|
39
|
+
const needsPolling = isWSL && paths.some(p => p.startsWith('/mnt/'));
|
|
40
|
+
const usePolling = options.usePolling ?? needsPolling;
|
|
41
|
+
if (needsPolling && options.usePolling === undefined) {
|
|
42
|
+
debugLog('INFO', `${this.watcherName}: Auto-enabling polling for WSL2 Windows FS`);
|
|
43
|
+
}
|
|
55
44
|
const watcherConfig = {
|
|
56
45
|
persistent: true,
|
|
57
46
|
ignoreInitial: options.ignoreInitial ?? true,
|
|
@@ -60,7 +49,7 @@ export class BaseWatcher {
|
|
|
60
49
|
stabilityThreshold: Math.max(options.debounceMs ?? this.debounceMs, 1000),
|
|
61
50
|
pollInterval: 500, // Reduced polling frequency to avoid duplicate events
|
|
62
51
|
},
|
|
63
|
-
usePolling
|
|
52
|
+
usePolling,
|
|
64
53
|
interval: options.pollInterval ?? 500, // Match polling interval
|
|
65
54
|
};
|
|
66
55
|
if (options.ignored && watcherConfig) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-watcher.js","sourceRoot":"","sources":["../../src/watcher/base-watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,QAAuB,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"base-watcher.js","sourceRoot":"","sources":["../../src/watcher/base-watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,QAAuB,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAoBpD;;GAEG;AACH,MAAM,OAAgB,WAAW;IACrB,OAAO,GAAqB,IAAI,CAAC;IACjC,SAAS,GAAY,KAAK,CAAC;IAC3B,cAAc,GAAgC,IAAI,GAAG,EAAE,CAAC;IAC/C,UAAU,CAAS;IACnB,WAAW,CAAS;IAEvC,YAAY,IAAY,EAAE,aAAqB,IAAI;QACjD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;OAEG;IACO,iBAAiB,CAAC,OAAuB;QACjD,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,GAAG,KAAK,KAAK,CAAC;QAC5B,IAAI,KAAK,EAAE,CAAC;YACV,QAAQ,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,gBAAgB,CAAC,CAAC;QACxD,CAAC;QAED,0EAA0E;QAC1E,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7E,MAAM,YAAY,GAAG,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,YAAY,CAAC;QAEtD,IAAI,YAAY,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACrD,QAAQ,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,6CAA6C,CAAC,CAAC;QACrF,CAAC;QAED,MAAM,aAAa,GAAyC;YAC1D,UAAU,EAAE,IAAI;YAChB,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI;YAC5C,gBAAgB,EAAE;gBAChB,oFAAoF;gBACpF,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;gBACzE,YAAY,EAAE,GAAG,EAAG,sDAAsD;aAC3E;YACD,UAAU;YACV,QAAQ,EAAE,OAAO,CAAC,YAAY,IAAI,GAAG,EAAG,yBAAyB;SAClE,CAAC;QAEF,IAAI,OAAO,CAAC,OAAO,IAAI,aAAa,EAAE,CAAC;YACrC,aAAa,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC1C,CAAC;QAED,OAAO,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACO,QAAQ,CAAC,GAAW,EAAE,OAAmC;QACjE,oCAAoC;QACpC,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnD,IAAI,aAAa,EAAE,CAAC;YAClB,YAAY,CAAC,aAAa,CAAC,CAAC;QAC9B,CAAC;QAED,gBAAgB;QAChB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;YAClC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,OAAO,EAAE,CAAC;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,8BAA8B,EAAE;oBACnE,KAAK;iBACN,CAAC,CAAC;YACL,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAEpB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAOD;;OAEG;IACI,KAAK,CAAC,IAAI;QACf,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,4BAA4B;YAC5B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;YAE5B,gBAAgB;YAChB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,CAAC;YAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,QAAQ,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,WAAW,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,kBAAkB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACpE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACI,YAAY;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACI,OAAO;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;CACF"}
|
package/docs/HOOKS_GUIDE.md
CHANGED
|
@@ -51,17 +51,51 @@ To uninstall, remove the copied skill directories and config entries.
|
|
|
51
51
|
|
|
52
52
|
Source: https://github.com/sqlew-io/sqlew-codex
|
|
53
53
|
|
|
54
|
+
## Grok Build
|
|
55
|
+
|
|
56
|
+
sqlew-plugin provides unified support for Claude Code and Grok Build (v5.2+).
|
|
57
|
+
No separate adapter is required.
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
npm i -g sqlew
|
|
61
|
+
grok plugin install sqlew-io/sqlew-plugin --trust
|
|
62
|
+
grok plugin update
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
For local development, install from a cloned directory instead:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
git clone https://github.com/sqlew-io/sqlew-plugin.git
|
|
69
|
+
grok plugin install ./sqlew-plugin --trust
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Verify installation:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
grok plugin list # sqlew enabled + trusted
|
|
76
|
+
grok inspect # hooks, MCP, skills visible
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Important**:
|
|
80
|
+
- Do NOT register sqlew hooks in `~/.grok/hooks/` (causes double-firing with plugin hooks)
|
|
81
|
+
- Do NOT add `[mcp_servers.sqlew]` to `~/.grok/config.toml` (plugin `.mcp.json` handles MCP)
|
|
82
|
+
- Plan mode guidance uses plugin skills (`sqlew-plan-guidance`, `sqlew-decision-format`), not hook injection
|
|
83
|
+
- Plan-to-ADR extracts `### 📌 Decision:` / `### 🚫 Constraint:` from `plan.md` on `exit_plan_mode`
|
|
84
|
+
|
|
85
|
+
Source: https://github.com/sqlew-io/sqlew-plugin
|
|
86
|
+
|
|
54
87
|
## What Gets Configured
|
|
55
88
|
|
|
56
|
-
| Feature | Claude Code | Codex |
|
|
57
|
-
|
|
58
|
-
| MCP server | Auto-configured | Manual (config.toml) |
|
|
59
|
-
| Plan-to-ADR | Skills + Hooks | Skills + System prompt |
|
|
60
|
-
| PR enrichment | Skill (sqlew-pr-adr) | Skill (sqlew-pr-adr) |
|
|
61
|
-
| Decision format guidance | Skill (sqlew-decision-format) | Skill (sqlew-decision-format) |
|
|
89
|
+
| Feature | Claude Code | Codex | Grok Build |
|
|
90
|
+
|---------|-------------|-------|------------|
|
|
91
|
+
| MCP server | Auto-configured | Manual (config.toml) | Plugin `.mcp.json` |
|
|
92
|
+
| Plan-to-ADR | Skills + Hooks | Skills + System prompt | Skills + Hooks |
|
|
93
|
+
| PR enrichment | Skill (sqlew-pr-adr) | Skill (sqlew-pr-adr) | Skill (sqlew-pr-adr) |
|
|
94
|
+
| Decision format guidance | Skill (sqlew-decision-format) | Skill (sqlew-decision-format) | Skill (sqlew-decision-format) |
|
|
62
95
|
|
|
63
96
|
## Version History
|
|
64
97
|
|
|
98
|
+
- **v5.2.0**: Grok Build support via sqlew-plugin (hook normalization, Grok plan path, skills-based plan guidance)
|
|
65
99
|
- **v5.0.0**: Plugin-first architecture (sqlew-plugin for Claude Code, sqlew-codex for Codex)
|
|
66
100
|
- **v4.3.0**: Plan-to-ADR - Automatic ADR from Plan Mode
|
|
67
101
|
- **v4.1.0**: Initial Claude Code Hooks integration
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sqlew",
|
|
3
|
-
"description": "Automated ADR (Architecture Decision Records) for
|
|
4
|
-
"version": "5.
|
|
3
|
+
"description": "Automated ADR (Architecture Decision Records) for AI Coding Agents - MCP server with SQL-backed decision repository",
|
|
4
|
+
"version": "5.2.0",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"migrate:rollback": "npm run knex migrate:rollback",
|
|
36
36
|
"test:backend": "node --test --test-force-exit --import tsx \"src/tests/backend/**/*.test.ts\" | node scripts/filter-test-output.js",
|
|
37
37
|
"test:backend:verbose": "node --test --test-force-exit --import tsx \"src/tests/backend/**/*.test.ts\"",
|
|
38
|
-
"migrate:status": "npm run knex migrate:status"
|
|
38
|
+
"migrate:status": "npm run knex migrate:status"
|
|
39
39
|
},
|
|
40
40
|
"engines": {
|
|
41
41
|
"node": ">=20.0.0"
|