chief-clancy 0.6.0 → 0.7.1
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/README.md +3 -2
- package/dist/bundle/clancy-afk.js +6 -2
- package/dist/bundle/clancy-once.js +49 -48
- package/dist/installer/hook-installer/hook-installer.d.ts +2 -0
- package/dist/installer/hook-installer/hook-installer.d.ts.map +1 -1
- package/dist/installer/hook-installer/hook-installer.js +36 -1
- package/dist/installer/hook-installer/hook-installer.js.map +1 -1
- package/dist/installer/install.js +8 -0
- package/dist/installer/install.js.map +1 -1
- package/hooks/clancy-branch-guard.js +129 -0
- package/hooks/clancy-context-monitor.js +134 -46
- package/hooks/clancy-post-compact.js +53 -0
- package/hooks/package.json +3 -0
- package/package.json +7 -3
- package/src/agents/verification-gate.md +128 -0
- package/src/roles/setup/workflows/init.md +45 -0
- package/src/roles/setup/workflows/scaffold.md +30 -0
- package/src/roles/setup/workflows/settings.md +56 -0
- package/src/templates/.env.example.github +19 -1
- package/src/templates/.env.example.jira +25 -1
- package/src/templates/.env.example.linear +19 -1
- package/dist/schemas/bitbucket-pr.d.ts +0 -137
- package/dist/schemas/bitbucket-pr.d.ts.map +0 -1
- package/dist/schemas/bitbucket-pr.js +0 -75
- package/dist/schemas/bitbucket-pr.js.map +0 -1
- package/dist/schemas/env.d.ts +0 -150
- package/dist/schemas/env.d.ts.map +0 -1
- package/dist/schemas/env.js +0 -63
- package/dist/schemas/env.js.map +0 -1
- package/dist/schemas/github-issues.d.ts +0 -105
- package/dist/schemas/github-issues.d.ts.map +0 -1
- package/dist/schemas/github-issues.js +0 -54
- package/dist/schemas/github-issues.js.map +0 -1
- package/dist/schemas/gitlab-mr.d.ts +0 -73
- package/dist/schemas/gitlab-mr.d.ts.map +0 -1
- package/dist/schemas/gitlab-mr.js +0 -33
- package/dist/schemas/gitlab-mr.js.map +0 -1
- package/dist/schemas/jira.d.ts +0 -59
- package/dist/schemas/jira.d.ts.map +0 -1
- package/dist/schemas/jira.js +0 -56
- package/dist/schemas/jira.js.map +0 -1
- package/dist/schemas/linear.d.ts +0 -108
- package/dist/schemas/linear.d.ts.map +0 -1
- package/dist/schemas/linear.js +0 -84
- package/dist/schemas/linear.js.map +0 -1
- package/dist/scripts/afk/afk.d.ts +0 -21
- package/dist/scripts/afk/afk.d.ts.map +0 -1
- package/dist/scripts/afk/afk.js +0 -118
- package/dist/scripts/afk/afk.js.map +0 -1
- package/dist/scripts/board/github/github.d.ts +0 -104
- package/dist/scripts/board/github/github.d.ts.map +0 -1
- package/dist/scripts/board/github/github.js +0 -291
- package/dist/scripts/board/github/github.js.map +0 -1
- package/dist/scripts/board/jira/jira.d.ts +0 -139
- package/dist/scripts/board/jira/jira.d.ts.map +0 -1
- package/dist/scripts/board/jira/jira.js +0 -378
- package/dist/scripts/board/jira/jira.js.map +0 -1
- package/dist/scripts/board/linear/linear.d.ts +0 -129
- package/dist/scripts/board/linear/linear.d.ts.map +0 -1
- package/dist/scripts/board/linear/linear.js +0 -393
- package/dist/scripts/board/linear/linear.js.map +0 -1
- package/dist/scripts/once/board-ops/board-ops.d.ts +0 -26
- package/dist/scripts/once/board-ops/board-ops.d.ts.map +0 -1
- package/dist/scripts/once/board-ops/board-ops.js +0 -113
- package/dist/scripts/once/board-ops/board-ops.js.map +0 -1
- package/dist/scripts/once/deliver/deliver.d.ts +0 -37
- package/dist/scripts/once/deliver/deliver.d.ts.map +0 -1
- package/dist/scripts/once/deliver/deliver.js +0 -236
- package/dist/scripts/once/deliver/deliver.js.map +0 -1
- package/dist/scripts/once/fetch-ticket/fetch-ticket.d.ts +0 -22
- package/dist/scripts/once/fetch-ticket/fetch-ticket.d.ts.map +0 -1
- package/dist/scripts/once/fetch-ticket/fetch-ticket.js +0 -123
- package/dist/scripts/once/fetch-ticket/fetch-ticket.js.map +0 -1
- package/dist/scripts/once/git-token/git-token.d.ts +0 -13
- package/dist/scripts/once/git-token/git-token.d.ts.map +0 -1
- package/dist/scripts/once/git-token/git-token.js +0 -30
- package/dist/scripts/once/git-token/git-token.js.map +0 -1
- package/dist/scripts/once/once.d.ts +0 -12
- package/dist/scripts/once/once.d.ts.map +0 -1
- package/dist/scripts/once/once.js +0 -356
- package/dist/scripts/once/once.js.map +0 -1
- package/dist/scripts/once/pr-creation/pr-creation.d.ts +0 -11
- package/dist/scripts/once/pr-creation/pr-creation.d.ts.map +0 -1
- package/dist/scripts/once/pr-creation/pr-creation.js +0 -50
- package/dist/scripts/once/pr-creation/pr-creation.js.map +0 -1
- package/dist/scripts/once/rework/rework.d.ts +0 -32
- package/dist/scripts/once/rework/rework.d.ts.map +0 -1
- package/dist/scripts/once/rework/rework.js +0 -208
- package/dist/scripts/once/rework/rework.js.map +0 -1
- package/dist/scripts/once/types/types.d.ts +0 -13
- package/dist/scripts/once/types/types.d.ts.map +0 -1
- package/dist/scripts/once/types/types.js +0 -2
- package/dist/scripts/once/types/types.js.map +0 -1
- package/dist/scripts/shared/branch/branch.d.ts +0 -50
- package/dist/scripts/shared/branch/branch.d.ts.map +0 -1
- package/dist/scripts/shared/branch/branch.js +0 -61
- package/dist/scripts/shared/branch/branch.js.map +0 -1
- package/dist/scripts/shared/claude-cli/claude-cli.d.ts +0 -31
- package/dist/scripts/shared/claude-cli/claude-cli.d.ts.map +0 -1
- package/dist/scripts/shared/claude-cli/claude-cli.js +0 -60
- package/dist/scripts/shared/claude-cli/claude-cli.js.map +0 -1
- package/dist/scripts/shared/env-schema/env-schema.d.ts +0 -27
- package/dist/scripts/shared/env-schema/env-schema.d.ts.map +0 -1
- package/dist/scripts/shared/env-schema/env-schema.js +0 -47
- package/dist/scripts/shared/env-schema/env-schema.js.map +0 -1
- package/dist/scripts/shared/feasibility/feasibility.d.ts +0 -30
- package/dist/scripts/shared/feasibility/feasibility.d.ts.map +0 -1
- package/dist/scripts/shared/feasibility/feasibility.js +0 -68
- package/dist/scripts/shared/feasibility/feasibility.js.map +0 -1
- package/dist/scripts/shared/format/format.d.ts +0 -11
- package/dist/scripts/shared/format/format.d.ts.map +0 -1
- package/dist/scripts/shared/format/format.js +0 -18
- package/dist/scripts/shared/format/format.js.map +0 -1
- package/dist/scripts/shared/git-ops/git-ops.d.ts +0 -90
- package/dist/scripts/shared/git-ops/git-ops.d.ts.map +0 -1
- package/dist/scripts/shared/git-ops/git-ops.js +0 -190
- package/dist/scripts/shared/git-ops/git-ops.js.map +0 -1
- package/dist/scripts/shared/http/http.d.ts +0 -54
- package/dist/scripts/shared/http/http.d.ts.map +0 -1
- package/dist/scripts/shared/http/http.js +0 -76
- package/dist/scripts/shared/http/http.js.map +0 -1
- package/dist/scripts/shared/notify/notify.d.ts +0 -46
- package/dist/scripts/shared/notify/notify.d.ts.map +0 -1
- package/dist/scripts/shared/notify/notify.js +0 -88
- package/dist/scripts/shared/notify/notify.js.map +0 -1
- package/dist/scripts/shared/preflight/preflight.d.ts +0 -40
- package/dist/scripts/shared/preflight/preflight.d.ts.map +0 -1
- package/dist/scripts/shared/preflight/preflight.js +0 -96
- package/dist/scripts/shared/preflight/preflight.js.map +0 -1
- package/dist/scripts/shared/progress/progress.d.ts +0 -75
- package/dist/scripts/shared/progress/progress.d.ts.map +0 -1
- package/dist/scripts/shared/progress/progress.js +0 -210
- package/dist/scripts/shared/progress/progress.js.map +0 -1
- package/dist/scripts/shared/prompt/prompt.d.ts +0 -58
- package/dist/scripts/shared/prompt/prompt.d.ts.map +0 -1
- package/dist/scripts/shared/prompt/prompt.js +0 -123
- package/dist/scripts/shared/prompt/prompt.js.map +0 -1
- package/dist/scripts/shared/pull-request/bitbucket/bitbucket.d.ts +0 -82
- package/dist/scripts/shared/pull-request/bitbucket/bitbucket.d.ts.map +0 -1
- package/dist/scripts/shared/pull-request/bitbucket/bitbucket.js +0 -301
- package/dist/scripts/shared/pull-request/bitbucket/bitbucket.js.map +0 -1
- package/dist/scripts/shared/pull-request/github/github.d.ts +0 -72
- package/dist/scripts/shared/pull-request/github/github.d.ts.map +0 -1
- package/dist/scripts/shared/pull-request/github/github.js +0 -226
- package/dist/scripts/shared/pull-request/github/github.js.map +0 -1
- package/dist/scripts/shared/pull-request/gitlab/gitlab.d.ts +0 -74
- package/dist/scripts/shared/pull-request/gitlab/gitlab.d.ts.map +0 -1
- package/dist/scripts/shared/pull-request/gitlab/gitlab.js +0 -220
- package/dist/scripts/shared/pull-request/gitlab/gitlab.js.map +0 -1
- package/dist/scripts/shared/pull-request/post-pr/post-pr.d.ts +0 -31
- package/dist/scripts/shared/pull-request/post-pr/post-pr.d.ts.map +0 -1
- package/dist/scripts/shared/pull-request/post-pr/post-pr.js +0 -61
- package/dist/scripts/shared/pull-request/post-pr/post-pr.js.map +0 -1
- package/dist/scripts/shared/pull-request/pr-body/pr-body.d.ts +0 -40
- package/dist/scripts/shared/pull-request/pr-body/pr-body.d.ts.map +0 -1
- package/dist/scripts/shared/pull-request/pr-body/pr-body.js +0 -84
- package/dist/scripts/shared/pull-request/pr-body/pr-body.js.map +0 -1
- package/dist/scripts/shared/pull-request/rework-comment/rework-comment.d.ts +0 -23
- package/dist/scripts/shared/pull-request/rework-comment/rework-comment.d.ts.map +0 -1
- package/dist/scripts/shared/pull-request/rework-comment/rework-comment.js +0 -30
- package/dist/scripts/shared/pull-request/rework-comment/rework-comment.js.map +0 -1
- package/dist/scripts/shared/remote/remote.d.ts +0 -41
- package/dist/scripts/shared/remote/remote.d.ts.map +0 -1
- package/dist/scripts/shared/remote/remote.js +0 -227
- package/dist/scripts/shared/remote/remote.js.map +0 -1
- package/dist/types/board.d.ts +0 -13
- package/dist/types/board.d.ts.map +0 -1
- package/dist/types/board.js +0 -5
- package/dist/types/board.js.map +0 -1
- package/dist/types/index.d.ts +0 -4
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -2
- package/dist/types/index.js.map +0 -1
- package/dist/types/remote.d.ts +0 -55
- package/dist/types/remote.d.ts.map +0 -1
- package/dist/types/remote.js +0 -5
- package/dist/types/remote.js.map +0 -1
- package/dist/utils/parse-json/parse-json.d.ts +0 -20
- package/dist/utils/parse-json/parse-json.d.ts.map +0 -1
- package/dist/utils/parse-json/parse-json.js +0 -27
- package/dist/utils/parse-json/parse-json.js.map +0 -1
|
@@ -4,6 +4,8 @@ type HookInstallerOptions = {
|
|
|
4
4
|
claudeConfigDir: string;
|
|
5
5
|
/** Path to the directory containing compiled hook JS files. */
|
|
6
6
|
hooksSourceDir: string;
|
|
7
|
+
/** Optional prompt text for the verification gate Stop agent hook. */
|
|
8
|
+
verificationGatePrompt?: string;
|
|
7
9
|
};
|
|
8
10
|
/**
|
|
9
11
|
* Install Clancy hooks into the Claude config directory.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-installer.d.ts","sourceRoot":"","sources":["../../../src/installer/hook-installer/hook-installer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hook-installer.d.ts","sourceRoot":"","sources":["../../../src/installer/hook-installer/hook-installer.ts"],"names":[],"mappings":"AAwBA,sCAAsC;AACtC,KAAK,oBAAoB,GAAG;IAC1B,sEAAsE;IACtE,eAAe,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,cAAc,EAAE,MAAM,CAAC;IACvB,sEAAsE;IACtE,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,CAAC;AAkEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAuFnE"}
|
|
@@ -16,11 +16,35 @@ import { join } from 'node:path';
|
|
|
16
16
|
function registerHook(hooks, event, command) {
|
|
17
17
|
if (!hooks[event])
|
|
18
18
|
hooks[event] = [];
|
|
19
|
-
const already = hooks[event].some((h) => h.hooks &&
|
|
19
|
+
const already = hooks[event].some((h) => h.hooks &&
|
|
20
|
+
h.hooks.some((hh) => hh.type === 'command' && 'command' in hh && hh.command === command));
|
|
20
21
|
if (!already) {
|
|
21
22
|
hooks[event].push({ hooks: [{ type: 'command', command }] });
|
|
22
23
|
}
|
|
23
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Add an agent hook to a settings event array if not already registered.
|
|
27
|
+
*
|
|
28
|
+
* Agent hooks are identified by their prompt content (first 100 chars) to
|
|
29
|
+
* avoid duplicates on re-install.
|
|
30
|
+
*
|
|
31
|
+
* @param hooks - The hooks record from settings.json.
|
|
32
|
+
* @param event - The hook event name (e.g., `'Stop'`).
|
|
33
|
+
* @param prompt - The agent prompt text.
|
|
34
|
+
* @param timeout - Timeout in seconds for the agent hook.
|
|
35
|
+
*/
|
|
36
|
+
function registerAgentHook(hooks, event, prompt, timeout) {
|
|
37
|
+
if (!hooks[event])
|
|
38
|
+
hooks[event] = [];
|
|
39
|
+
const fingerprint = prompt.slice(0, 100);
|
|
40
|
+
const already = hooks[event].some((h) => h.hooks &&
|
|
41
|
+
h.hooks.some((hh) => hh.type === 'agent' &&
|
|
42
|
+
'prompt' in hh &&
|
|
43
|
+
hh.prompt.slice(0, 100) === fingerprint));
|
|
44
|
+
if (!already) {
|
|
45
|
+
hooks[event].push({ hooks: [{ type: 'agent', prompt, timeout }] });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
24
48
|
/**
|
|
25
49
|
* Install Clancy hooks into the Claude config directory.
|
|
26
50
|
*
|
|
@@ -49,6 +73,8 @@ export function installHooks(options) {
|
|
|
49
73
|
'clancy-statusline.js',
|
|
50
74
|
'clancy-context-monitor.js',
|
|
51
75
|
'clancy-credential-guard.js',
|
|
76
|
+
'clancy-branch-guard.js',
|
|
77
|
+
'clancy-post-compact.js',
|
|
52
78
|
];
|
|
53
79
|
try {
|
|
54
80
|
mkdirSync(hooksInstallDir, { recursive: true });
|
|
@@ -75,9 +101,18 @@ export function installHooks(options) {
|
|
|
75
101
|
const statuslineScript = join(hooksInstallDir, 'clancy-statusline.js');
|
|
76
102
|
const monitorScript = join(hooksInstallDir, 'clancy-context-monitor.js');
|
|
77
103
|
const guardScript = join(hooksInstallDir, 'clancy-credential-guard.js');
|
|
104
|
+
const branchGuardScript = join(hooksInstallDir, 'clancy-branch-guard.js');
|
|
105
|
+
const postCompactScript = join(hooksInstallDir, 'clancy-post-compact.js');
|
|
78
106
|
registerHook(hooks, 'SessionStart', `node ${JSON.stringify(updateScript)}`);
|
|
79
107
|
registerHook(hooks, 'PostToolUse', `node ${JSON.stringify(monitorScript)}`);
|
|
80
108
|
registerHook(hooks, 'PreToolUse', `node ${JSON.stringify(guardScript)}`);
|
|
109
|
+
registerHook(hooks, 'PreToolUse', `node ${JSON.stringify(branchGuardScript)}`);
|
|
110
|
+
registerHook(hooks, 'PostCompact', `node ${JSON.stringify(postCompactScript)}`);
|
|
111
|
+
// Verification gate: registered as a Stop agent hook with the prompt inline.
|
|
112
|
+
// The prompt is read from the agents directory at install time.
|
|
113
|
+
if (options.verificationGatePrompt) {
|
|
114
|
+
registerAgentHook(hooks, 'Stop', options.verificationGatePrompt, 120);
|
|
115
|
+
}
|
|
81
116
|
// Statusline: registered as top-level key, not inside hooks
|
|
82
117
|
if (!settings.statusLine) {
|
|
83
118
|
settings.statusLine = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-installer.js","sourceRoot":"","sources":["../../../src/installer/hook-installer/hook-installer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,YAAY,EACZ,UAAU,EACV,SAAS,EACT,YAAY,EACZ,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"hook-installer.js","sourceRoot":"","sources":["../../../src/installer/hook-installer/hook-installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,7 @@ const PKG = require('../../package.json');
|
|
|
26
26
|
const ROLES_SRC = join(__dirname, '..', '..', 'src', 'roles');
|
|
27
27
|
const HOOKS_SRC = join(__dirname, '..', '..', 'hooks');
|
|
28
28
|
const BUNDLE_SRC = join(__dirname, '..', 'bundle');
|
|
29
|
+
const AGENTS_SRC = join(__dirname, '..', '..', 'src', 'agents');
|
|
29
30
|
const _homeDir = process.env.HOME ?? process.env.USERPROFILE;
|
|
30
31
|
if (!_homeDir) {
|
|
31
32
|
process.stderr.write('\x1b[31m\n Error: HOME or USERPROFILE environment variable is not set.\x1b[0m\n');
|
|
@@ -366,9 +367,16 @@ async function main() {
|
|
|
366
367
|
const claudeConfigDir = dest === GLOBAL_DEST
|
|
367
368
|
? join(homeDir, '.claude')
|
|
368
369
|
: join(process.cwd(), '.claude');
|
|
370
|
+
// Read verification gate agent prompt (best-effort — skip if missing)
|
|
371
|
+
let verificationGatePrompt;
|
|
372
|
+
const gatePromptPath = join(AGENTS_SRC, 'verification-gate.md');
|
|
373
|
+
if (existsSync(gatePromptPath)) {
|
|
374
|
+
verificationGatePrompt = readFileSync(gatePromptPath, 'utf8');
|
|
375
|
+
}
|
|
369
376
|
installHooks({
|
|
370
377
|
claudeConfigDir,
|
|
371
378
|
hooksSourceDir: HOOKS_SRC,
|
|
379
|
+
verificationGatePrompt,
|
|
372
380
|
});
|
|
373
381
|
printSuccess(enabledRoles);
|
|
374
382
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/installer/install.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/installer/install.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG;AACH,OAAO,EACL,YAAY,EACZ,UAAU,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EACX,UAAU,EACV,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,8CAA8C,CAAC;AAC5E,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,mBAAmB,GACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAEzE,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AAEjE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACvD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACnD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAEhE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AAE7D,IAAI,CAAC,QAAQ,EAAE,CAAC;IACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,kFAAkF,CACnF,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,OAAO,GAAW,QAAQ,CAAC;AAEjC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AACnE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAExE,MAAM,qBAAqB,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AAC9E,MAAM,oBAAoB,GAAG,IAAI,CAC/B,OAAO,CAAC,GAAG,EAAE,EACb,SAAS,EACT,QAAQ,EACR,WAAW,CACZ,CAAC;AAEF,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E;;GAEG;AACH,SAAS,WAAW;IAClB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CACT,IAAI;QACF,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QACvB,GAAG,CAAC,yDAAyD,CAAC,CACjE,CAAC;IACF,OAAO,CAAC,GAAG,CACT,GAAG,CACD,sFAAsF,CACvF,CACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,YAAgC;IACpD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAErC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAmC;QAC7C;YACE,YAAY;YACZ;gBACE,CAAC,eAAe,EAAE,0CAA0C,CAAC;gBAC7D,CAAC,uBAAuB,EAAE,kCAAkC,CAAC;aAC9D;SACF;QACD;YACE,SAAS;YACT;gBACE,CAAC,cAAc,EAAE,mCAAmC,CAAC;gBACrD,CAAC,sBAAsB,EAAE,oCAAoC,CAAC;aAC/D;SACF;QACD;YACE,aAAa;YACb;gBACE,CAAC,cAAc,EAAE,6BAA6B,CAAC;gBAC/C,CAAC,aAAa,EAAE,yBAAyB,CAAC;gBAC1C,CAAC,iBAAiB,EAAE,qCAAqC,CAAC;aAC3D;SACF;QACD;YACE,UAAU;YACV;gBACE,CAAC,gBAAgB,EAAE,2CAA2C,CAAC;gBAC/D,CAAC,gBAAgB,EAAE,mCAAmC,CAAC;gBACvD,CAAC,cAAc,EAAE,sBAAsB,CAAC;aACzC;SACF;QACD;YACE,qBAAqB;YACrB;gBACE,CAAC,cAAc,EAAE,+BAA+B,CAAC;gBACjD,CAAC,sBAAsB,EAAE,sCAAsC,CAAC;gBAChE,CAAC,kBAAkB,EAAE,+BAA+B,CAAC;gBACrD,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;gBACzC,CAAC,qBAAqB,EAAE,gCAAgC,CAAC;gBACzD,CAAC,gBAAgB,EAAE,iCAAiC,CAAC;gBACrD,CAAC,mBAAmB,EAAE,iCAAiC,CAAC;gBACxD,CAAC,cAAc,EAAE,mBAAmB,CAAC;aACtC;SACF;KACF,CAAC;IAEF,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAChC,IACE,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;YACxB,YAAY,KAAK,IAAI;YACrB,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;YAEtB,SAAS;QAEX,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,qEAAqE;AACrE,MAAM,YAAY,GAAG,2CAA2C,CAAC;AAEjE;;;;;;;;;GASG;AACH,SAAS,eAAe,CAAC,WAAmB,EAAE,YAAoB;IAChE,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAS;QAEpC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAE1C,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,SAAS;QAExC,MAAM,eAAe,GAAG,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC3D,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E,kEAAkE;AAClE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;AAEjE;;;;;;;;GAQG;AACH,SAAS,iBAAiB;IACxB,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC;IAC/B,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAE7B,OAAO,IAAI,GAAG,CACZ,KAAK;SACF,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SAClC,MAAM,CAAC,OAAO,CAAC,CACnB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,aAAa,CACpB,QAAgB,EAChB,MAAc,EACd,IAAY,EACZ,YAAgC;IAEhC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAErC,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACxE,CAAC,CAAC,WAAW,EAAE,CAChB,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,SAAS;QAElC,iEAAiE;QACjE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YACxD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,gEAAgE;gBAChE,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;oBACvC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBAChC,IAAI,UAAU,CAAC,MAAM,CAAC;wBAAE,UAAU,CAAC,MAAM,CAAC,CAAC;gBAC7C,CAAC;gBACD,SAAS;YACX,CAAC;QACH,CAAC;QAED,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;;;;GAMG;AACH,SAAS,gBAAgB;IACvB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,OAAO,CAAC;IAE7C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,OAAO;AACP,8EAA8E;AAE9E,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;IAChC,MAAM,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;IAErC,WAAW,EAAE,CAAC;IAEd,IAAI,IAAY,CAAC;IACjB,IAAI,aAAqB,CAAC;IAE1B,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,IAAI,GAAG,WAAW,CAAC;QACnB,aAAa,GAAG,qBAAqB,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;IACrD,CAAC;SAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,IAAI,GAAG,UAAU,CAAC;QAClB,aAAa,GAAG,oBAAoB,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,kCAAkC,EAAE;YACrE,WAAW,GAAG,CAAC,aAAa,CAAC,gCAAgC;YAC7D,WAAW,GAAG,CAAC,aAAa,CAAC,uBAAuB;SACrD,CAAC,CAAC;QAEH,IAAI,aAAa,KAAK,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;YACtE,IAAI,GAAG,WAAW,CAAC;YACnB,aAAa,GAAG,qBAAqB,CAAC;QACxC,CAAC;aAAM,IACL,aAAa,KAAK,GAAG;YACrB,aAAa,CAAC,WAAW,EAAE,KAAK,OAAO,EACvC,CAAC;YACD,IAAI,GAAG,UAAU,CAAC;YAClB,aAAa,GAAG,oBAAoB,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,GAAG,CAAC,kEAAkE,CAAC,CACxE,CAAC;YACF,YAAY,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI;QACzB,CAAC,OAAO,EAAE,SAAS,CAAC;QACpB,CAAC,iBAAiB,EAAE,UAAU,CAAC;KACvB,EAAE,CAAC;QACX,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,KAAK,sBAAsB,GAAG,EAAE,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,KAAK,CACX,GAAG,CAAC,kEAAkE,CAAC,CACxE,CAAC;YACF,YAAY,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,KAAK,MAAM,MAAM,IAAI,CAAC,gBAAgB,EAAE,eAAe,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,wCAAwC,MAAM,EAAE,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,KAAK,CACX,GAAG,CAAC,kEAAkE,CAAC,CACxE,CAAC;YACF,YAAY,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW;QACrD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;QAChE,MAAM,qBAAqB,GAAG,IAAI,CAChC,SAAS,EACT,QAAQ,EACR,yBAAyB,CAC1B,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;QAE9D,+BAA+B;QAC/B,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YACzD,MAAM,iBAAiB,GAAG,mBAAmB,CAC3C,aAAa,EACb,qBAAqB,CACtB,CAAC;YACF,MAAM,WAAW,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,iBAAiB,CAAC,CAAC;YAExD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;gBAChD,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,WAAW,EAAE,CAAC;oBAClC,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;gBACxC,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CACT,GAAG,CAAC,4DAA4D,CAAC,CAClE,CAAC;gBACF,OAAO,CAAC,GAAG,CACT,GAAG,CAAC,8DAA8D,CAAC,CACpE,CAAC;gBACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CACT,GAAG,CACD,kEAAkE,CACnE,CACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,SAAS,GAAG,MAAM,GAAG,CACzB,IAAI,CAAC,+BAA+B,IAAI,qBAAqB,CAAC,CAC/D,CAAC;gBAEF,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;oBAC9C,YAAY,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,mBAAmB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;gBAC7C,OAAO,CAAC,GAAG,CACT,KAAK,CACH,SAAS,WAAW,CAAC,MAAM,+CAA+C,CAC3E,CACF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,kEAAkE;QAClE,yEAAyE;QACzE,MAAM,YAAY,GAAG,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;QACvE,aAAa,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QACzD,aAAa,CAAC,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;QAEnE,uCAAuC;QACvC,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YACzB,eAAe,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACvC,CAAC;QAED,qBAAqB;QACrB,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAElD,8CAA8C;QAC9C,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1E,aAAa,CACX,qBAAqB,EACrB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CACtD,CAAC;QAEF,mEAAmE;QACnE,wEAAwE;QACxE,8DAA8D;QAC9D,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QAExD,SAAS,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEjD,KAAK,MAAM,MAAM,IAAI,CAAC,gBAAgB,EAAE,eAAe,CAAC,EAAE,CAAC;YACzD,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;QACzE,CAAC;QAED,8EAA8E;QAC9E,aAAa,CACX,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC,EACtC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CACnD,CAAC;QAEF,gBAAgB;QAChB,MAAM,eAAe,GACnB,IAAI,KAAK,WAAW;YAClB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;YAC1B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QAErC,sEAAsE;QACtE,IAAI,sBAA0C,CAAC;QAC/C,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC;QAChE,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/B,sBAAsB,GAAG,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAChE,CAAC;QAED,YAAY,CAAC;YACX,eAAe;YACf,cAAc,EAAE,SAAS;YACzB,sBAAsB;SACvB,CAAC,CAAC;QAEH,YAAY,CAAC,YAAY,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC,CAAC;QACrD,YAAY,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,YAAY,EAAE,CAAC;AACjB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Clancy Branch Guard — PreToolUse hook.
|
|
3
|
+
// Blocks dangerous git operations: force push, push to protected branches,
|
|
4
|
+
// hard reset, clean, bulk discard, and force branch deletion.
|
|
5
|
+
// Best-effort — never blocks on error (fail-open).
|
|
6
|
+
|
|
7
|
+
'use strict';
|
|
8
|
+
|
|
9
|
+
// Protected branch names — pushes to these are blocked.
|
|
10
|
+
// CLANCY_BASE_BRANCH is added dynamically if set and not already in the list.
|
|
11
|
+
const PROTECTED_BRANCHES = ['main', 'master', 'develop'];
|
|
12
|
+
if (process.env.CLANCY_BASE_BRANCH && !PROTECTED_BRANCHES.includes(process.env.CLANCY_BASE_BRANCH)) {
|
|
13
|
+
PROTECTED_BRANCHES.push(process.env.CLANCY_BASE_BRANCH);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Check whether a command string contains a dangerous git operation.
|
|
18
|
+
* Returns a reason string if blocked, or null if allowed.
|
|
19
|
+
*/
|
|
20
|
+
function checkCommand(cmd) {
|
|
21
|
+
if (!cmd || typeof cmd !== 'string') return null;
|
|
22
|
+
|
|
23
|
+
// --- git push --force / -f (without --force-with-lease) ---
|
|
24
|
+
// Match any occurrence of "git push" with --force or -f flag
|
|
25
|
+
if (/\bgit\s+push\b/.test(cmd)) {
|
|
26
|
+
const hasForceFlag = /\s--force\b/.test(cmd) || /\s-f\b/.test(cmd);
|
|
27
|
+
const hasForceWithLease = /--force-with-lease\b/.test(cmd);
|
|
28
|
+
if (hasForceFlag && !hasForceWithLease) {
|
|
29
|
+
return 'Blocked: git push --force destroys remote history. Use --force-with-lease instead.';
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// --- git push to protected branches ---
|
|
33
|
+
// Pattern: git push <remote> <protected-branch>
|
|
34
|
+
// We look for "git push" followed by any remote name, then a protected branch.
|
|
35
|
+
// The branch must be a standalone token — \b treats hyphens as word boundaries,
|
|
36
|
+
// so we match the branch as a complete whitespace-delimited token instead.
|
|
37
|
+
for (const branch of PROTECTED_BRANCHES) {
|
|
38
|
+
// Matches: git push origin main, git push origin main:main, etc.
|
|
39
|
+
// Does NOT match: git push origin main-feature
|
|
40
|
+
// Escape regex metacharacters in branch name (e.g. release/1.0 → release\/1\.0)
|
|
41
|
+
const escaped = branch.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
42
|
+
const pattern = new RegExp(`\\bgit\\s+push\\s+\\S+\\s+${escaped}(?:\\s|$|:)`);
|
|
43
|
+
if (pattern.test(cmd)) {
|
|
44
|
+
return `Blocked: direct push to protected branch '${branch}'. Create a PR instead.`;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// --- git reset --hard ---
|
|
50
|
+
if (/\bgit\s+reset\s+--hard\b/.test(cmd)) {
|
|
51
|
+
return 'Blocked: git reset --hard destroys uncommitted work. Use --soft or --mixed instead.';
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// --- git clean -f (any variant with -f but not just -n) ---
|
|
55
|
+
// Block git clean with -f flag (e.g. -f, -fd, -fdx, -xfd, etc.) but allow -n (dry run)
|
|
56
|
+
if (/\bgit\s+clean\b/.test(cmd)) {
|
|
57
|
+
// Check for -f flag in the clean arguments
|
|
58
|
+
// Match short flags like -f, -fd, -fdx, -xf, etc.
|
|
59
|
+
const cleanMatch = cmd.match(/\bgit\s+clean\s+(.*)/);
|
|
60
|
+
if (cleanMatch) {
|
|
61
|
+
const args = cleanMatch[1];
|
|
62
|
+
// Check for -f in combined short flags or standalone
|
|
63
|
+
if (/(?:^|\s)-[a-zA-Z]*f/.test(args) && !/(?:^|\s)-n\b/.test(args)) {
|
|
64
|
+
return 'Blocked: git clean -f deletes untracked files permanently. Use -n for a dry run first.';
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// --- git checkout -- . (discard all changes) ---
|
|
70
|
+
if (/\bgit\s+checkout\s+--\s+\./.test(cmd)) {
|
|
71
|
+
return 'Blocked: git checkout -- . discards all uncommitted changes.';
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// --- git restore . (discard all changes) ---
|
|
75
|
+
// Only block bare "git restore ." (all files), not "git restore ./specific-file"
|
|
76
|
+
if (/\bgit\s+restore\s+\.(?:\s*$|\s*[;&|])/.test(cmd)) {
|
|
77
|
+
return 'Blocked: git restore . discards all uncommitted changes.';
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// --- git branch -D (force delete) ---
|
|
81
|
+
// Block uppercase -D only, not lowercase -d
|
|
82
|
+
if (/\bgit\s+branch\s+.*-D\b/.test(cmd)) {
|
|
83
|
+
return 'Blocked: git branch -D force-deletes a branch irrecoverably. Use -d for safe deletion.';
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Read hook input — Claude Code passes PreToolUse data as a JSON argument.
|
|
90
|
+
// Fall back to stdin for forward compatibility with potential API changes.
|
|
91
|
+
function readInput() {
|
|
92
|
+
if (process.argv[2]) return process.argv[2];
|
|
93
|
+
try { return require('fs').readFileSync('/dev/stdin', 'utf8'); } catch { return '{}'; }
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
try {
|
|
97
|
+
// Check if guard is disabled
|
|
98
|
+
if (process.env.CLANCY_BRANCH_GUARD === 'false') {
|
|
99
|
+
console.log(JSON.stringify({ decision: 'approve' }));
|
|
100
|
+
process.exit(0);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const input = JSON.parse(readInput());
|
|
104
|
+
const toolName = input.tool_name || '';
|
|
105
|
+
const toolInput = input.tool_input || {};
|
|
106
|
+
|
|
107
|
+
// Only check Bash tool calls
|
|
108
|
+
if (toolName !== 'Bash') {
|
|
109
|
+
console.log(JSON.stringify({ decision: 'approve' }));
|
|
110
|
+
process.exit(0);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const cmd = (toolInput.command || '').trim();
|
|
114
|
+
const reason = checkCommand(cmd);
|
|
115
|
+
|
|
116
|
+
if (reason) {
|
|
117
|
+
console.log(JSON.stringify({ decision: 'block', reason }));
|
|
118
|
+
} else {
|
|
119
|
+
console.log(JSON.stringify({ decision: 'approve' }));
|
|
120
|
+
}
|
|
121
|
+
} catch {
|
|
122
|
+
// Best-effort — never block on error
|
|
123
|
+
console.log(JSON.stringify({ decision: 'approve' }));
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Export for testing
|
|
127
|
+
if (typeof module !== 'undefined') {
|
|
128
|
+
module.exports = { checkCommand };
|
|
129
|
+
}
|
|
@@ -3,11 +3,17 @@
|
|
|
3
3
|
// Reads context metrics from the bridge file written by clancy-statusline.js
|
|
4
4
|
// and injects warnings into Claude's conversation when context runs low.
|
|
5
5
|
//
|
|
6
|
-
//
|
|
6
|
+
// Context thresholds:
|
|
7
7
|
// WARNING (remaining <= 35%): wrap up analysis, move to implementation
|
|
8
8
|
// CRITICAL (remaining <= 25%): commit current work, log to .clancy/progress.txt, stop
|
|
9
9
|
//
|
|
10
|
+
// Time guard:
|
|
11
|
+
// Reads .clancy/lock.json for startedAt timestamp.
|
|
12
|
+
// WARNING (elapsed >= 80% of CLANCY_TIME_LIMIT): wrap up implementation
|
|
13
|
+
// CRITICAL (elapsed >= 100% of CLANCY_TIME_LIMIT): stop and deliver
|
|
14
|
+
//
|
|
10
15
|
// Debounce: 5 tool uses between warnings; severity escalation bypasses debounce.
|
|
16
|
+
// Context and time guards use independent debounce counters.
|
|
11
17
|
|
|
12
18
|
'use strict';
|
|
13
19
|
|
|
@@ -19,6 +25,7 @@ const WARNING_THRESHOLD = 35;
|
|
|
19
25
|
const CRITICAL_THRESHOLD = 25;
|
|
20
26
|
const STALE_SECONDS = 60;
|
|
21
27
|
const DEBOUNCE_CALLS = 5;
|
|
28
|
+
const DEFAULT_TIME_LIMIT = 30; // minutes
|
|
22
29
|
|
|
23
30
|
let input = '';
|
|
24
31
|
const stdinTimeout = setTimeout(() => process.exit(0), 3000);
|
|
@@ -31,66 +38,147 @@ process.stdin.on('end', () => {
|
|
|
31
38
|
const session = data.session_id;
|
|
32
39
|
if (!session) process.exit(0);
|
|
33
40
|
|
|
34
|
-
const
|
|
35
|
-
if (!fs.existsSync(bridgePath)) process.exit(0); // no statusline data yet
|
|
36
|
-
|
|
37
|
-
const metrics = JSON.parse(fs.readFileSync(bridgePath, 'utf8'));
|
|
38
|
-
const now = Math.floor(Date.now() / 1000);
|
|
39
|
-
|
|
40
|
-
// Ignore stale metrics (statusline may not have run this session)
|
|
41
|
-
if (metrics.timestamp && (now - metrics.timestamp) > STALE_SECONDS) process.exit(0);
|
|
42
|
-
|
|
43
|
-
const remaining = metrics.remaining_percentage;
|
|
44
|
-
const usedPct = metrics.used_pct;
|
|
45
|
-
|
|
46
|
-
if (remaining > WARNING_THRESHOLD) process.exit(0);
|
|
41
|
+
const messages = [];
|
|
47
42
|
|
|
48
|
-
//
|
|
43
|
+
// ── Warn file (shared by context + time debounce) ───────────
|
|
49
44
|
const warnPath = path.join(os.tmpdir(), `clancy-ctx-${session}-warned.json`);
|
|
50
|
-
let warnData = {
|
|
51
|
-
|
|
45
|
+
let warnData = {
|
|
46
|
+
callsSinceWarn: 0,
|
|
47
|
+
lastLevel: null,
|
|
48
|
+
timeCallsSinceWarn: 0,
|
|
49
|
+
timeLastLevel: null,
|
|
50
|
+
};
|
|
51
|
+
let firstContextWarn = true;
|
|
52
|
+
let firstTimeWarn = true;
|
|
52
53
|
|
|
53
54
|
if (fs.existsSync(warnPath)) {
|
|
54
|
-
try {
|
|
55
|
+
try {
|
|
56
|
+
const existing = JSON.parse(fs.readFileSync(warnPath, 'utf8'));
|
|
57
|
+
warnData = { ...warnData, ...existing };
|
|
58
|
+
firstContextWarn = !existing.lastLevel;
|
|
59
|
+
firstTimeWarn = !existing.timeLastLevel;
|
|
60
|
+
} catch {}
|
|
55
61
|
}
|
|
56
62
|
|
|
57
|
-
|
|
63
|
+
// ── Context guard ───────────────────────────────────────────
|
|
64
|
+
const bridgePath = path.join(os.tmpdir(), `clancy-ctx-${session}.json`);
|
|
65
|
+
let contextFired = false;
|
|
66
|
+
|
|
67
|
+
if (fs.existsSync(bridgePath)) {
|
|
68
|
+
const metrics = JSON.parse(fs.readFileSync(bridgePath, 'utf8'));
|
|
69
|
+
const now = Math.floor(Date.now() / 1000);
|
|
70
|
+
|
|
71
|
+
const isStale = metrics.timestamp && (now - metrics.timestamp) > STALE_SECONDS;
|
|
72
|
+
if (!isStale) {
|
|
73
|
+
const remaining = metrics.remaining_percentage;
|
|
74
|
+
const usedPct = metrics.used_pct;
|
|
75
|
+
|
|
76
|
+
if (remaining <= WARNING_THRESHOLD) {
|
|
77
|
+
warnData.callsSinceWarn = (warnData.callsSinceWarn || 0) + 1;
|
|
78
|
+
|
|
79
|
+
const isCritical = remaining <= CRITICAL_THRESHOLD;
|
|
80
|
+
const currentLevel = isCritical ? 'critical' : 'warning';
|
|
81
|
+
const severityEscalated = currentLevel === 'critical' && warnData.lastLevel === 'warning';
|
|
82
|
+
|
|
83
|
+
const shouldFire = firstContextWarn ||
|
|
84
|
+
warnData.callsSinceWarn >= DEBOUNCE_CALLS ||
|
|
85
|
+
severityEscalated;
|
|
86
|
+
|
|
87
|
+
if (shouldFire) {
|
|
88
|
+
warnData.callsSinceWarn = 0;
|
|
89
|
+
warnData.lastLevel = currentLevel;
|
|
90
|
+
contextFired = true;
|
|
91
|
+
|
|
92
|
+
if (isCritical) {
|
|
93
|
+
messages.push(
|
|
94
|
+
`CONTEXT CRITICAL: Usage at ${usedPct}%. Remaining: ${remaining}%. ` +
|
|
95
|
+
'Context is nearly exhausted. Stop reading files and wrap up immediately:\n' +
|
|
96
|
+
'1. Commit whatever work is staged on the current feature branch\n' +
|
|
97
|
+
'2. Append a WIP entry to .clancy/progress.txt: ' +
|
|
98
|
+
'YYYY-MM-DD HH:MM | TICKET-KEY | Summary | WIP — context exhausted\n' +
|
|
99
|
+
'3. Inform the user what was completed and what remains.\n' +
|
|
100
|
+
'Do NOT start any new work.'
|
|
101
|
+
);
|
|
102
|
+
} else {
|
|
103
|
+
messages.push(
|
|
104
|
+
`CONTEXT WARNING: Usage at ${usedPct}%. Remaining: ${remaining}%. ` +
|
|
105
|
+
'Context is getting limited. Stop exploring and move to implementation. ' +
|
|
106
|
+
'Avoid reading additional files unless strictly necessary. ' +
|
|
107
|
+
'Commit completed work as soon as it is ready.'
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
58
114
|
|
|
59
|
-
|
|
60
|
-
const
|
|
61
|
-
const
|
|
115
|
+
// ── Time guard ──────────────────────────────────────────────
|
|
116
|
+
const timeLimitEnv = process.env.CLANCY_TIME_LIMIT;
|
|
117
|
+
const timeLimit = timeLimitEnv !== undefined ? Number(timeLimitEnv) : DEFAULT_TIME_LIMIT;
|
|
118
|
+
|
|
119
|
+
if (timeLimit > 0) {
|
|
120
|
+
// Look for lock.json in the working directory's .clancy/
|
|
121
|
+
const cwd = data.cwd || process.cwd();
|
|
122
|
+
const lockPath = path.join(cwd, '.clancy', 'lock.json');
|
|
123
|
+
|
|
124
|
+
if (fs.existsSync(lockPath)) {
|
|
125
|
+
try {
|
|
126
|
+
const lock = JSON.parse(fs.readFileSync(lockPath, 'utf8'));
|
|
127
|
+
const startedAt = new Date(lock.startedAt);
|
|
128
|
+
|
|
129
|
+
if (!isNaN(startedAt.getTime())) {
|
|
130
|
+
const elapsedMs = Date.now() - startedAt.getTime();
|
|
131
|
+
const elapsedMin = Math.floor(elapsedMs / 60000);
|
|
132
|
+
const limitMs = timeLimit * 60000;
|
|
133
|
+
const pct = Math.floor((elapsedMs / limitMs) * 100);
|
|
134
|
+
|
|
135
|
+
if (pct >= 80) {
|
|
136
|
+
warnData.timeCallsSinceWarn = (warnData.timeCallsSinceWarn || 0) + 1;
|
|
137
|
+
|
|
138
|
+
const isTimeCritical = pct >= 100;
|
|
139
|
+
const currentTimeLevel = isTimeCritical ? 'critical' : 'warning';
|
|
140
|
+
const timeSeverityEscalated =
|
|
141
|
+
currentTimeLevel === 'critical' && warnData.timeLastLevel === 'warning';
|
|
142
|
+
|
|
143
|
+
const shouldFireTime = firstTimeWarn ||
|
|
144
|
+
warnData.timeCallsSinceWarn >= DEBOUNCE_CALLS ||
|
|
145
|
+
timeSeverityEscalated;
|
|
146
|
+
|
|
147
|
+
if (shouldFireTime) {
|
|
148
|
+
warnData.timeCallsSinceWarn = 0;
|
|
149
|
+
warnData.timeLastLevel = currentTimeLevel;
|
|
150
|
+
|
|
151
|
+
if (isTimeCritical) {
|
|
152
|
+
messages.push(
|
|
153
|
+
`TIME CRITICAL: Time limit reached (${elapsedMin}min of ${timeLimit}min).\n` +
|
|
154
|
+
'STOP implementation immediately. Commit current work, push the branch,\n' +
|
|
155
|
+
'and create the PR with whatever is ready. Log a WIP entry if incomplete.'
|
|
156
|
+
);
|
|
157
|
+
} else {
|
|
158
|
+
messages.push(
|
|
159
|
+
`TIME WARNING: Ticket implementation at ${elapsedMin}min of ${timeLimit}min limit (${pct}%).\n` +
|
|
160
|
+
'Wrap up implementation and prepare for delivery. Avoid starting new approaches.'
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
} catch {}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
62
169
|
|
|
63
|
-
|
|
170
|
+
// ── Persist debounce state (only when a threshold was reached) ──
|
|
171
|
+
if (messages.length > 0 || contextFired || warnData.callsSinceWarn > 0 || warnData.timeCallsSinceWarn > 0) {
|
|
64
172
|
fs.writeFileSync(warnPath, JSON.stringify(warnData));
|
|
65
|
-
process.exit(0);
|
|
66
173
|
}
|
|
67
174
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
fs.writeFileSync(warnPath, JSON.stringify(warnData));
|
|
71
|
-
|
|
72
|
-
let message;
|
|
73
|
-
if (isCritical) {
|
|
74
|
-
message =
|
|
75
|
-
`CONTEXT CRITICAL: Usage at ${usedPct}%. Remaining: ${remaining}%. ` +
|
|
76
|
-
'Context is nearly exhausted. Stop reading files and wrap up immediately:\n' +
|
|
77
|
-
'1. Commit whatever work is staged on the current feature branch\n' +
|
|
78
|
-
'2. Append a WIP entry to .clancy/progress.txt: ' +
|
|
79
|
-
'YYYY-MM-DD HH:MM | TICKET-KEY | Summary | WIP — context exhausted\n' +
|
|
80
|
-
'3. Inform the user what was completed and what remains.\n' +
|
|
81
|
-
'Do NOT start any new work.';
|
|
82
|
-
} else {
|
|
83
|
-
message =
|
|
84
|
-
`CONTEXT WARNING: Usage at ${usedPct}%. Remaining: ${remaining}%. ` +
|
|
85
|
-
'Context is getting limited. Stop exploring and move to implementation. ' +
|
|
86
|
-
'Avoid reading additional files unless strictly necessary. ' +
|
|
87
|
-
'Commit completed work as soon as it is ready.';
|
|
88
|
-
}
|
|
175
|
+
// ── Output ──────────────────────────────────────────────────
|
|
176
|
+
if (messages.length === 0) process.exit(0);
|
|
89
177
|
|
|
90
178
|
const output = {
|
|
91
179
|
hookSpecificOutput: {
|
|
92
180
|
hookEventName: 'PostToolUse',
|
|
93
|
-
additionalContext:
|
|
181
|
+
additionalContext: messages.join('\n'),
|
|
94
182
|
},
|
|
95
183
|
};
|
|
96
184
|
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Clancy PostCompact Hook — re-injects ticket context after context compaction.
|
|
3
|
+
// Reads .clancy/lock.json for current ticket info. If no lock file exists
|
|
4
|
+
// (not in a Clancy run), exits silently.
|
|
5
|
+
//
|
|
6
|
+
// PostCompact is a non-blocking event — this hook injects additionalContext
|
|
7
|
+
// but cannot prevent compaction.
|
|
8
|
+
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
const fs = require('fs');
|
|
12
|
+
const path = require('path');
|
|
13
|
+
|
|
14
|
+
let input = '';
|
|
15
|
+
const stdinTimeout = setTimeout(() => process.exit(0), 3000);
|
|
16
|
+
process.stdin.setEncoding('utf8');
|
|
17
|
+
process.stdin.on('data', chunk => { input += chunk; });
|
|
18
|
+
process.stdin.on('end', () => {
|
|
19
|
+
clearTimeout(stdinTimeout);
|
|
20
|
+
try {
|
|
21
|
+
const data = JSON.parse(input);
|
|
22
|
+
const cwd = data.cwd || process.cwd();
|
|
23
|
+
|
|
24
|
+
// Read lock file for ticket context
|
|
25
|
+
const lockPath = path.join(cwd, '.clancy', 'lock.json');
|
|
26
|
+
if (!fs.existsSync(lockPath)) process.exit(0); // Not in a Clancy run
|
|
27
|
+
|
|
28
|
+
const lock = JSON.parse(fs.readFileSync(lockPath, 'utf8'));
|
|
29
|
+
|
|
30
|
+
// Validate minimum required fields — skip if lock is malformed
|
|
31
|
+
if (!lock.ticketKey || !lock.ticketBranch) process.exit(0);
|
|
32
|
+
|
|
33
|
+
// Truncate description to 2000 chars to avoid consuming too much fresh context
|
|
34
|
+
const desc = (lock.description || '').slice(0, 2000);
|
|
35
|
+
|
|
36
|
+
const context = [
|
|
37
|
+
`CONTEXT RESTORED: You are implementing ticket [${lock.ticketKey}] ${lock.ticketTitle || 'Unknown'}.`,
|
|
38
|
+
`Branch: ${lock.ticketBranch} targeting ${lock.targetBranch || 'main'}.`,
|
|
39
|
+
lock.parentKey && lock.parentKey !== 'none' ? `Parent: ${lock.parentKey}.` : '',
|
|
40
|
+
desc ? `Requirements: ${desc}` : '',
|
|
41
|
+
'Continue your implementation. Do not start over.',
|
|
42
|
+
].filter(Boolean).join('\n');
|
|
43
|
+
|
|
44
|
+
process.stdout.write(JSON.stringify({
|
|
45
|
+
hookSpecificOutput: {
|
|
46
|
+
hookEventName: 'PostCompact',
|
|
47
|
+
additionalContext: context,
|
|
48
|
+
},
|
|
49
|
+
}));
|
|
50
|
+
} catch {
|
|
51
|
+
process.exit(0); // Best-effort — never crash
|
|
52
|
+
}
|
|
53
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "chief-clancy",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"description": "Autonomous, board-driven development for Claude Code — scaffolds docs, integrates Kanban boards, runs tickets in a loop.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude",
|
|
@@ -29,8 +29,12 @@
|
|
|
29
29
|
},
|
|
30
30
|
"main": "dist/installer/install.js",
|
|
31
31
|
"files": [
|
|
32
|
-
"dist/",
|
|
33
|
-
"
|
|
32
|
+
"dist/bundle/",
|
|
33
|
+
"dist/installer/",
|
|
34
|
+
"dist/scripts/shared/env-parser/",
|
|
35
|
+
"dist/utils/ansi/",
|
|
36
|
+
"hooks/*.js",
|
|
37
|
+
"hooks/package.json",
|
|
34
38
|
"src/roles/",
|
|
35
39
|
"src/agents/",
|
|
36
40
|
"src/templates/",
|