chief-clancy 0.2.0-beta.3 → 0.3.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/README.md +13 -24
- package/dist/installer/file-ops/file-ops.d.ts +32 -0
- package/dist/installer/file-ops/file-ops.d.ts.map +1 -0
- package/dist/installer/file-ops/file-ops.js +58 -0
- package/dist/installer/file-ops/file-ops.js.map +1 -0
- package/dist/installer/hook-installer/hook-installer.d.ts +29 -0
- package/dist/installer/hook-installer/hook-installer.d.ts.map +1 -0
- package/dist/installer/hook-installer/hook-installer.js +96 -0
- package/dist/installer/hook-installer/hook-installer.js.map +1 -0
- package/dist/installer/install.d.ts +3 -0
- package/dist/installer/install.d.ts.map +1 -0
- package/dist/installer/install.js +227 -0
- package/dist/installer/install.js.map +1 -0
- package/dist/installer/manifest/manifest.d.ts +41 -0
- package/dist/installer/manifest/manifest.d.ts.map +1 -0
- package/dist/installer/manifest/manifest.js +97 -0
- package/dist/installer/manifest/manifest.js.map +1 -0
- package/dist/installer/prompts/prompts.d.ts +33 -0
- package/dist/installer/prompts/prompts.d.ts.map +1 -0
- package/dist/installer/prompts/prompts.js +55 -0
- package/dist/installer/prompts/prompts.js.map +1 -0
- package/dist/schemas/env.d.ts +75 -0
- package/dist/schemas/env.d.ts.map +1 -0
- package/dist/schemas/env.js +40 -0
- package/dist/schemas/env.js.map +1 -0
- package/dist/schemas/github.d.ts +27 -0
- package/dist/schemas/github.d.ts.map +1 -0
- package/dist/schemas/github.js +17 -0
- package/dist/schemas/github.js.map +1 -0
- package/dist/schemas/index.d.ts +9 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +5 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/jira.d.ts +37 -0
- package/dist/schemas/jira.d.ts.map +1 -0
- package/dist/schemas/jira.js +37 -0
- package/dist/schemas/jira.js.map +1 -0
- package/dist/schemas/linear.d.ts +67 -0
- package/dist/schemas/linear.d.ts.map +1 -0
- package/dist/schemas/linear.js +50 -0
- package/dist/schemas/linear.js.map +1 -0
- package/dist/scripts/afk/afk.d.ts +21 -0
- package/dist/scripts/afk/afk.d.ts.map +1 -0
- package/dist/scripts/afk/afk.js +116 -0
- package/dist/scripts/afk/afk.js.map +1 -0
- package/dist/scripts/board/github/github.d.ts +56 -0
- package/dist/scripts/board/github/github.d.ts.map +1 -0
- package/dist/scripts/board/github/github.js +142 -0
- package/dist/scripts/board/github/github.js.map +1 -0
- package/dist/scripts/board/jira/jira.d.ts +90 -0
- package/dist/scripts/board/jira/jira.d.ts.map +1 -0
- package/dist/scripts/board/jira/jira.js +251 -0
- package/dist/scripts/board/jira/jira.js.map +1 -0
- package/dist/scripts/board/linear/linear.d.ts +85 -0
- package/dist/scripts/board/linear/linear.d.ts.map +1 -0
- package/dist/scripts/board/linear/linear.js +209 -0
- package/dist/scripts/board/linear/linear.js.map +1 -0
- package/dist/scripts/once/once.d.ts +12 -0
- package/dist/scripts/once/once.d.ts.map +1 -0
- package/dist/scripts/once/once.js +323 -0
- package/dist/scripts/once/once.js.map +1 -0
- package/dist/scripts/shared/branch/branch.d.ts +50 -0
- package/dist/scripts/shared/branch/branch.d.ts.map +1 -0
- package/dist/scripts/shared/branch/branch.js +61 -0
- package/dist/scripts/shared/branch/branch.js.map +1 -0
- package/dist/scripts/shared/claude-cli/claude-cli.d.ts +17 -0
- package/dist/scripts/shared/claude-cli/claude-cli.d.ts.map +1 -0
- package/dist/scripts/shared/claude-cli/claude-cli.js +35 -0
- package/dist/scripts/shared/claude-cli/claude-cli.js.map +1 -0
- package/dist/scripts/shared/env-parser/env-parser.d.ts +30 -0
- package/dist/scripts/shared/env-parser/env-parser.d.ts.map +1 -0
- package/dist/scripts/shared/env-parser/env-parser.js +64 -0
- package/dist/scripts/shared/env-parser/env-parser.js.map +1 -0
- package/dist/scripts/shared/env-schema/env-schema.d.ts +27 -0
- package/dist/scripts/shared/env-schema/env-schema.d.ts.map +1 -0
- package/dist/scripts/shared/env-schema/env-schema.js +46 -0
- package/dist/scripts/shared/env-schema/env-schema.js.map +1 -0
- package/dist/scripts/shared/git-ops/git-ops.d.ts +52 -0
- package/dist/scripts/shared/git-ops/git-ops.d.ts.map +1 -0
- package/dist/scripts/shared/git-ops/git-ops.js +107 -0
- package/dist/scripts/shared/git-ops/git-ops.js.map +1 -0
- package/dist/scripts/shared/http/http.d.ts +52 -0
- package/dist/scripts/shared/http/http.d.ts.map +1 -0
- package/dist/scripts/shared/http/http.js +74 -0
- package/dist/scripts/shared/http/http.js.map +1 -0
- package/dist/scripts/shared/notify/notify.d.ts +46 -0
- package/dist/scripts/shared/notify/notify.d.ts.map +1 -0
- package/dist/scripts/shared/notify/notify.js +88 -0
- package/dist/scripts/shared/notify/notify.js.map +1 -0
- package/dist/scripts/shared/preflight/preflight.d.ts +40 -0
- package/dist/scripts/shared/preflight/preflight.d.ts.map +1 -0
- package/dist/scripts/shared/preflight/preflight.js +84 -0
- package/dist/scripts/shared/preflight/preflight.js.map +1 -0
- package/dist/scripts/shared/progress/progress.d.ts +25 -0
- package/dist/scripts/shared/progress/progress.d.ts.map +1 -0
- package/dist/scripts/shared/progress/progress.js +46 -0
- package/dist/scripts/shared/progress/progress.js.map +1 -0
- package/dist/scripts/shared/prompt/prompt.d.ts +38 -0
- package/dist/scripts/shared/prompt/prompt.d.ts.map +1 -0
- package/dist/scripts/shared/prompt/prompt.js +77 -0
- package/dist/scripts/shared/prompt/prompt.js.map +1 -0
- package/dist/types/board.d.ts +13 -0
- package/dist/types/board.d.ts.map +1 -0
- package/dist/types/board.js +5 -0
- package/dist/types/board.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/ansi/ansi.d.ts +55 -0
- package/dist/utils/ansi/ansi.d.ts.map +1 -0
- package/dist/utils/ansi/ansi.js +55 -0
- package/dist/utils/ansi/ansi.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/parse-json/parse-json.d.ts +20 -0
- package/dist/utils/parse-json/parse-json.d.ts.map +1 -0
- package/dist/utils/parse-json/parse-json.js +27 -0
- package/dist/utils/parse-json/parse-json.js.map +1 -0
- package/hooks/clancy-check-update.js +2 -2
- package/hooks/clancy-credential-guard.js +8 -1
- package/package.json +52 -8
- package/registry/boards.json +3 -6
- package/src/templates/CLAUDE.md +1 -1
- package/src/workflows/doctor.md +32 -23
- package/src/workflows/init.md +88 -19
- package/src/workflows/logs.md +13 -6
- package/src/workflows/map-codebase.md +17 -16
- package/src/workflows/once.md +22 -12
- package/src/workflows/review.md +40 -27
- package/src/workflows/run.md +20 -12
- package/src/workflows/scaffold.md +12 -1023
- package/src/workflows/settings.md +9 -6
- package/src/workflows/status.md +17 -8
- package/src/workflows/uninstall.md +11 -6
- package/src/workflows/update.md +13 -11
- package/bin/install.js +0 -362
- package/src/templates/scripts/clancy-afk.sh +0 -111
- package/src/templates/scripts/clancy-once-github.sh +0 -249
- package/src/templates/scripts/clancy-once-linear.sh +0 -320
- package/src/templates/scripts/clancy-once.sh +0 -322
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format a date as `YYYY-MM-DD HH:MM`.
|
|
3
|
+
*
|
|
4
|
+
* @param date - The date to format.
|
|
5
|
+
* @returns The formatted date string.
|
|
6
|
+
*/
|
|
7
|
+
export declare function formatTimestamp(date: Date): string;
|
|
8
|
+
/**
|
|
9
|
+
* Append a progress entry to `.clancy/progress.txt`.
|
|
10
|
+
*
|
|
11
|
+
* Creates the file and parent directories if they don't exist.
|
|
12
|
+
*
|
|
13
|
+
* @param projectRoot - The root directory of the project.
|
|
14
|
+
* @param key - The ticket key (e.g., `'PROJ-123'`, `'#42'`).
|
|
15
|
+
* @param summary - The ticket summary/title.
|
|
16
|
+
* @param status - The completion status (`'DONE'` or `'SKIPPED'`).
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* appendProgress('/path/to/project', 'PROJ-123', 'Add login page', 'DONE');
|
|
21
|
+
* // Appends: "2024-01-15 14:30 | PROJ-123 | Add login page | DONE"
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare function appendProgress(projectRoot: string, key: string, summary: string, status: 'DONE' | 'SKIPPED'): void;
|
|
25
|
+
//# sourceMappingURL=progress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../../src/scripts/shared/progress/progress.ts"],"names":[],"mappings":"AASA;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAQlD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,IAAI,CASN"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress logger for completed tickets.
|
|
3
|
+
*
|
|
4
|
+
* Appends entries to `.clancy/progress.txt` with a timestamp,
|
|
5
|
+
* ticket key, summary, and status.
|
|
6
|
+
*/
|
|
7
|
+
import { appendFileSync, mkdirSync } from 'node:fs';
|
|
8
|
+
import { dirname, join } from 'node:path';
|
|
9
|
+
/**
|
|
10
|
+
* Format a date as `YYYY-MM-DD HH:MM`.
|
|
11
|
+
*
|
|
12
|
+
* @param date - The date to format.
|
|
13
|
+
* @returns The formatted date string.
|
|
14
|
+
*/
|
|
15
|
+
export function formatTimestamp(date) {
|
|
16
|
+
const y = date.getFullYear();
|
|
17
|
+
const mo = String(date.getMonth() + 1).padStart(2, '0');
|
|
18
|
+
const d = String(date.getDate()).padStart(2, '0');
|
|
19
|
+
const h = String(date.getHours()).padStart(2, '0');
|
|
20
|
+
const mi = String(date.getMinutes()).padStart(2, '0');
|
|
21
|
+
return `${y}-${mo}-${d} ${h}:${mi}`;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Append a progress entry to `.clancy/progress.txt`.
|
|
25
|
+
*
|
|
26
|
+
* Creates the file and parent directories if they don't exist.
|
|
27
|
+
*
|
|
28
|
+
* @param projectRoot - The root directory of the project.
|
|
29
|
+
* @param key - The ticket key (e.g., `'PROJ-123'`, `'#42'`).
|
|
30
|
+
* @param summary - The ticket summary/title.
|
|
31
|
+
* @param status - The completion status (`'DONE'` or `'SKIPPED'`).
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```ts
|
|
35
|
+
* appendProgress('/path/to/project', 'PROJ-123', 'Add login page', 'DONE');
|
|
36
|
+
* // Appends: "2024-01-15 14:30 | PROJ-123 | Add login page | DONE"
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export function appendProgress(projectRoot, key, summary, status) {
|
|
40
|
+
const filePath = join(projectRoot, '.clancy', 'progress.txt');
|
|
41
|
+
mkdirSync(dirname(filePath), { recursive: true });
|
|
42
|
+
const timestamp = formatTimestamp(new Date());
|
|
43
|
+
const line = `${timestamp} | ${key} | ${summary} | ${status}\n`;
|
|
44
|
+
appendFileSync(filePath, line, 'utf8');
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../../../src/scripts/shared/progress/progress.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAU;IACxC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAEtD,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,cAAc,CAC5B,WAAmB,EACnB,GAAW,EACX,OAAe,EACf,MAA0B;IAE1B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IAE9D,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAElD,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,GAAG,SAAS,MAAM,GAAG,MAAM,OAAO,MAAM,MAAM,IAAI,CAAC;IAEhE,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude prompt builder for ticket implementation.
|
|
3
|
+
*
|
|
4
|
+
* Generates the full prompt string piped to `claude --dangerously-skip-permissions`.
|
|
5
|
+
* The prompt structure matches the original shell scripts exactly.
|
|
6
|
+
*/
|
|
7
|
+
import type { BoardProvider } from '../../../types/index.js';
|
|
8
|
+
type PromptInput = {
|
|
9
|
+
provider: BoardProvider;
|
|
10
|
+
key: string;
|
|
11
|
+
title: string;
|
|
12
|
+
description: string;
|
|
13
|
+
/** Epic/milestone/parent info string (e.g., `'PROJ-100'`, `'Sprint 3'`, `'none'`). */
|
|
14
|
+
parentInfo: string;
|
|
15
|
+
/** Blocker info string (e.g., `'Blocked by: PROJ-99, PROJ-98'` or `'None'`). */
|
|
16
|
+
blockers?: string;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Build the full Claude prompt for implementing a ticket.
|
|
20
|
+
*
|
|
21
|
+
* @param input - The ticket data for the prompt.
|
|
22
|
+
* @returns The complete prompt string.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* const prompt = buildPrompt({
|
|
27
|
+
* provider: 'jira',
|
|
28
|
+
* key: 'PROJ-123',
|
|
29
|
+
* title: 'Add login page',
|
|
30
|
+
* description: 'Create a login page with email/password fields.',
|
|
31
|
+
* parentInfo: 'PROJ-100',
|
|
32
|
+
* blockers: 'None',
|
|
33
|
+
* });
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function buildPrompt(input: PromptInput): string;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../../src/scripts/shared/prompt/prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,aAAa,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,sFAAsF;IACtF,UAAU,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AA6BF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAkCtD"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get the board-specific label for the ticket type.
|
|
3
|
+
*
|
|
4
|
+
* @param provider - The board provider.
|
|
5
|
+
* @returns The label used in prompts (e.g., `'Jira ticket'`, `'GitHub Issue'`).
|
|
6
|
+
*/
|
|
7
|
+
function ticketLabel(provider) {
|
|
8
|
+
switch (provider) {
|
|
9
|
+
case 'jira':
|
|
10
|
+
return 'Jira ticket';
|
|
11
|
+
case 'github':
|
|
12
|
+
return 'GitHub Issue';
|
|
13
|
+
case 'linear':
|
|
14
|
+
return 'Linear issue';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Get the board-specific label for the parent grouping.
|
|
19
|
+
*
|
|
20
|
+
* @param provider - The board provider.
|
|
21
|
+
* @returns The label (e.g., `'Epic'`, `'Milestone'`).
|
|
22
|
+
*/
|
|
23
|
+
function parentLabel(provider) {
|
|
24
|
+
return provider === 'github' ? 'Milestone' : 'Epic';
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Build the full Claude prompt for implementing a ticket.
|
|
28
|
+
*
|
|
29
|
+
* @param input - The ticket data for the prompt.
|
|
30
|
+
* @returns The complete prompt string.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```ts
|
|
34
|
+
* const prompt = buildPrompt({
|
|
35
|
+
* provider: 'jira',
|
|
36
|
+
* key: 'PROJ-123',
|
|
37
|
+
* title: 'Add login page',
|
|
38
|
+
* description: 'Create a login page with email/password fields.',
|
|
39
|
+
* parentInfo: 'PROJ-100',
|
|
40
|
+
* blockers: 'None',
|
|
41
|
+
* });
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export function buildPrompt(input) {
|
|
45
|
+
const label = ticketLabel(input.provider);
|
|
46
|
+
const pLabel = parentLabel(input.provider);
|
|
47
|
+
const blockerLine = input.blockers && input.provider !== 'github'
|
|
48
|
+
? `\nBlockers: ${input.blockers}`
|
|
49
|
+
: '';
|
|
50
|
+
return `You are implementing ${label} ${input.key}.
|
|
51
|
+
|
|
52
|
+
${input.provider === 'github' ? 'Title' : 'Summary'}: ${input.title}
|
|
53
|
+
${pLabel}: ${input.parentInfo}${blockerLine}
|
|
54
|
+
|
|
55
|
+
Description:
|
|
56
|
+
${input.description}
|
|
57
|
+
|
|
58
|
+
Step 0 — Executability check (do this before any git or file operation):
|
|
59
|
+
Read the ${input.provider === 'github' ? 'issue title and description' : 'ticket summary and description'} above. Can this ${input.provider === 'github' ? 'issue' : 'ticket'} be implemented entirely
|
|
60
|
+
as a code change committed to this repo? Consult the 'Executability check' section of
|
|
61
|
+
CLAUDE.md for the full list of skip conditions.
|
|
62
|
+
|
|
63
|
+
If you must SKIP this ${input.provider === 'github' ? 'issue' : 'ticket'}:
|
|
64
|
+
1. Output: ⚠ Skipping [${input.key}]: {one-line reason}
|
|
65
|
+
2. Output: Ticket skipped — update it to be codebase-only work, then re-run.
|
|
66
|
+
3. Append to .clancy/progress.txt: YYYY-MM-DD HH:MM | ${input.key} | {reason} | SKIPPED
|
|
67
|
+
4. Stop — no branches, no file changes, no git operations.
|
|
68
|
+
|
|
69
|
+
If the ${input.provider === 'github' ? 'issue' : 'ticket'} IS implementable, continue:
|
|
70
|
+
1. Read core docs in .clancy/docs/: STACK.md, ARCHITECTURE.md, CONVENTIONS.md, GIT.md, DEFINITION-OF-DONE.md, CONCERNS.md
|
|
71
|
+
Also read if relevant to this ticket: INTEGRATIONS.md (external APIs/services/auth), TESTING.md (tests/specs/coverage), DESIGN-SYSTEM.md (UI/components/styles), ACCESSIBILITY.md (accessibility/ARIA/WCAG)
|
|
72
|
+
2. Follow the conventions in GIT.md exactly
|
|
73
|
+
3. Implement the ${input.provider === 'github' ? 'issue' : 'ticket'} fully
|
|
74
|
+
4. Commit your work following the conventions in GIT.md
|
|
75
|
+
5. When done, confirm you are finished.`;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../../src/scripts/shared/prompt/prompt.ts"],"names":[],"mappings":"AAmBA;;;;;GAKG;AACH,SAAS,WAAW,CAAC,QAAuB;IAC1C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,MAAM;YACT,OAAO,aAAa,CAAC;QACvB,KAAK,QAAQ;YACX,OAAO,cAAc,CAAC;QACxB,KAAK,QAAQ;YACX,OAAO,cAAc,CAAC;IAC1B,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,QAAuB;IAC1C,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;AACtD,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,WAAW,CAAC,KAAkB;IAC5C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,WAAW,GACf,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ;QAC3C,CAAC,CAAC,eAAe,KAAK,CAAC,QAAQ,EAAE;QACjC,CAAC,CAAC,EAAE,CAAC;IAET,OAAO,wBAAwB,KAAK,IAAI,KAAK,CAAC,GAAG;;EAEjD,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,KAAK;EACjE,MAAM,KAAK,KAAK,CAAC,UAAU,GAAG,WAAW;;;EAGzC,KAAK,CAAC,WAAW;;;WAGR,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,gCAAgC,oBAAoB,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;;;;wBAIrJ,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;yBAC/C,KAAK,CAAC,GAAG;;wDAEsB,KAAK,CAAC,GAAG;;;SAGxD,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;;;;mBAItC,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;;wCAE3B,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Board-related types shared across board scripts.
|
|
3
|
+
*/
|
|
4
|
+
/** Supported board providers. */
|
|
5
|
+
export type BoardProvider = 'jira' | 'github' | 'linear';
|
|
6
|
+
/** A normalised ticket from any board provider. */
|
|
7
|
+
export type Ticket = {
|
|
8
|
+
key: string;
|
|
9
|
+
title: string;
|
|
10
|
+
description: string;
|
|
11
|
+
provider: BoardProvider;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=board.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../../src/types/board.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,iCAAiC;AACjC,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEzD,mDAAmD;AACnD,MAAM,MAAM,MAAM,GAAG;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,aAAa,CAAC;CACzB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board.js","sourceRoot":"","sources":["../../src/types/board.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACxD,YAAY,EACV,WAAW,EACX,SAAS,EACT,OAAO,EACP,SAAS,EACT,SAAS,GACV,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ANSI escape code helpers for terminal output.
|
|
3
|
+
*
|
|
4
|
+
* Wraps strings in ANSI sequences for styling in CLI environments.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Dim the given string (reduced intensity).
|
|
8
|
+
*
|
|
9
|
+
* @param s - The string to style.
|
|
10
|
+
* @returns The string wrapped in ANSI dim codes.
|
|
11
|
+
*/
|
|
12
|
+
export declare const dim: (s: string) => string;
|
|
13
|
+
/**
|
|
14
|
+
* Bold the given string.
|
|
15
|
+
*
|
|
16
|
+
* @param s - The string to style.
|
|
17
|
+
* @returns The string wrapped in ANSI bold codes.
|
|
18
|
+
*/
|
|
19
|
+
export declare const bold: (s: string) => string;
|
|
20
|
+
/**
|
|
21
|
+
* Colour the given string blue (bold).
|
|
22
|
+
*
|
|
23
|
+
* @param s - The string to style.
|
|
24
|
+
* @returns The string wrapped in ANSI blue codes.
|
|
25
|
+
*/
|
|
26
|
+
export declare const blue: (s: string) => string;
|
|
27
|
+
/**
|
|
28
|
+
* Colour the given string cyan.
|
|
29
|
+
*
|
|
30
|
+
* @param s - The string to style.
|
|
31
|
+
* @returns The string wrapped in ANSI cyan codes.
|
|
32
|
+
*/
|
|
33
|
+
export declare const cyan: (s: string) => string;
|
|
34
|
+
/**
|
|
35
|
+
* Colour the given string green.
|
|
36
|
+
*
|
|
37
|
+
* @param s - The string to style.
|
|
38
|
+
* @returns The string wrapped in ANSI green codes.
|
|
39
|
+
*/
|
|
40
|
+
export declare const green: (s: string) => string;
|
|
41
|
+
/**
|
|
42
|
+
* Colour the given string red.
|
|
43
|
+
*
|
|
44
|
+
* @param s - The string to style.
|
|
45
|
+
* @returns The string wrapped in ANSI red codes.
|
|
46
|
+
*/
|
|
47
|
+
export declare const red: (s: string) => string;
|
|
48
|
+
/**
|
|
49
|
+
* Colour the given string yellow.
|
|
50
|
+
*
|
|
51
|
+
* @param s - The string to style.
|
|
52
|
+
* @returns The string wrapped in ANSI yellow codes.
|
|
53
|
+
*/
|
|
54
|
+
export declare const yellow: (s: string) => string;
|
|
55
|
+
//# sourceMappingURL=ansi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ansi.d.ts","sourceRoot":"","sources":["../../../src/utils/ansi/ansi.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,KAAG,MAA8B,CAAC;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,KAAG,MAA8B,CAAC;AAEhE;;;;;GAKG;AACH,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,KAAG,MAAiC,CAAC;AAEnE;;;;;GAKG;AACH,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,KAAG,MAA+B,CAAC;AAEjE;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,KAAG,MAA+B,CAAC;AAElE;;;;;GAKG;AACH,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,KAAG,MAA+B,CAAC;AAEhE;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAI,GAAG,MAAM,KAAG,MAA+B,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ANSI escape code helpers for terminal output.
|
|
3
|
+
*
|
|
4
|
+
* Wraps strings in ANSI sequences for styling in CLI environments.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Dim the given string (reduced intensity).
|
|
8
|
+
*
|
|
9
|
+
* @param s - The string to style.
|
|
10
|
+
* @returns The string wrapped in ANSI dim codes.
|
|
11
|
+
*/
|
|
12
|
+
export const dim = (s) => `\x1b[2m${s}\x1b[0m`;
|
|
13
|
+
/**
|
|
14
|
+
* Bold the given string.
|
|
15
|
+
*
|
|
16
|
+
* @param s - The string to style.
|
|
17
|
+
* @returns The string wrapped in ANSI bold codes.
|
|
18
|
+
*/
|
|
19
|
+
export const bold = (s) => `\x1b[1m${s}\x1b[0m`;
|
|
20
|
+
/**
|
|
21
|
+
* Colour the given string blue (bold).
|
|
22
|
+
*
|
|
23
|
+
* @param s - The string to style.
|
|
24
|
+
* @returns The string wrapped in ANSI blue codes.
|
|
25
|
+
*/
|
|
26
|
+
export const blue = (s) => `\x1b[1;34m${s}\x1b[0m`;
|
|
27
|
+
/**
|
|
28
|
+
* Colour the given string cyan.
|
|
29
|
+
*
|
|
30
|
+
* @param s - The string to style.
|
|
31
|
+
* @returns The string wrapped in ANSI cyan codes.
|
|
32
|
+
*/
|
|
33
|
+
export const cyan = (s) => `\x1b[36m${s}\x1b[0m`;
|
|
34
|
+
/**
|
|
35
|
+
* Colour the given string green.
|
|
36
|
+
*
|
|
37
|
+
* @param s - The string to style.
|
|
38
|
+
* @returns The string wrapped in ANSI green codes.
|
|
39
|
+
*/
|
|
40
|
+
export const green = (s) => `\x1b[32m${s}\x1b[0m`;
|
|
41
|
+
/**
|
|
42
|
+
* Colour the given string red.
|
|
43
|
+
*
|
|
44
|
+
* @param s - The string to style.
|
|
45
|
+
* @returns The string wrapped in ANSI red codes.
|
|
46
|
+
*/
|
|
47
|
+
export const red = (s) => `\x1b[31m${s}\x1b[0m`;
|
|
48
|
+
/**
|
|
49
|
+
* Colour the given string yellow.
|
|
50
|
+
*
|
|
51
|
+
* @param s - The string to style.
|
|
52
|
+
* @returns The string wrapped in ANSI yellow codes.
|
|
53
|
+
*/
|
|
54
|
+
export const yellow = (s) => `\x1b[33m${s}\x1b[0m`;
|
|
55
|
+
//# sourceMappingURL=ansi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ansi.js","sourceRoot":"","sources":["../../../src/utils/ansi/ansi.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC;AAElE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safely parse a JSON string, returning `undefined` on failure.
|
|
3
|
+
*
|
|
4
|
+
* Hooks and scripts receive JSON from external sources — this helper
|
|
5
|
+
* avoids try/catch boilerplate and never throws.
|
|
6
|
+
*
|
|
7
|
+
* @param raw - The JSON string to parse.
|
|
8
|
+
* @returns The parsed value cast to `T`, or `undefined` if parsing fails.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* const data = parseJson<{ name: string }>('{"name":"clancy"}');
|
|
13
|
+
* // data?.name === 'clancy'
|
|
14
|
+
*
|
|
15
|
+
* const bad = parseJson('not json');
|
|
16
|
+
* // bad === undefined
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare function parseJson<T = unknown>(raw: string): T | undefined;
|
|
20
|
+
//# sourceMappingURL=parse-json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-json.d.ts","sourceRoot":"","sources":["../../../src/utils/parse-json/parse-json.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAMjE"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safely parse a JSON string, returning `undefined` on failure.
|
|
3
|
+
*
|
|
4
|
+
* Hooks and scripts receive JSON from external sources — this helper
|
|
5
|
+
* avoids try/catch boilerplate and never throws.
|
|
6
|
+
*
|
|
7
|
+
* @param raw - The JSON string to parse.
|
|
8
|
+
* @returns The parsed value cast to `T`, or `undefined` if parsing fails.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* const data = parseJson<{ name: string }>('{"name":"clancy"}');
|
|
13
|
+
* // data?.name === 'clancy'
|
|
14
|
+
*
|
|
15
|
+
* const bad = parseJson('not json');
|
|
16
|
+
* // bad === undefined
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export function parseJson(raw) {
|
|
20
|
+
try {
|
|
21
|
+
return JSON.parse(raw);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=parse-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-json.js","sourceRoot":"","sources":["../../../src/utils/parse-json/parse-json.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,SAAS,CAAc,GAAW;IAChD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -37,7 +37,7 @@ if (!fs.existsSync(cacheDir)) {
|
|
|
37
37
|
// This script returns immediately so it never delays session start.
|
|
38
38
|
const child = spawn(process.execPath, ['-e', `
|
|
39
39
|
const fs = require('fs');
|
|
40
|
-
const {
|
|
40
|
+
const { execFileSync } = require('child_process');
|
|
41
41
|
|
|
42
42
|
const cacheFile = ${JSON.stringify(cacheFile)};
|
|
43
43
|
const versionFile = ${JSON.stringify(versionFile)};
|
|
@@ -47,7 +47,7 @@ const child = spawn(process.execPath, ['-e', `
|
|
|
47
47
|
|
|
48
48
|
let latest = null;
|
|
49
49
|
try {
|
|
50
|
-
latest =
|
|
50
|
+
latest = execFileSync('npm', ['view', 'chief-clancy', 'version'], {
|
|
51
51
|
encoding: 'utf8',
|
|
52
52
|
timeout: 10000,
|
|
53
53
|
windowsHide: true,
|
|
@@ -66,8 +66,15 @@ function scanForCredentials(content) {
|
|
|
66
66
|
return matches;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
// Read hook input — Claude Code passes PreToolUse data as a JSON argument.
|
|
70
|
+
// Fall back to stdin for forward compatibility with potential API changes.
|
|
71
|
+
function readInput() {
|
|
72
|
+
if (process.argv[2]) return process.argv[2];
|
|
73
|
+
try { return require('fs').readFileSync('/dev/stdin', 'utf8'); } catch { return '{}'; }
|
|
74
|
+
}
|
|
75
|
+
|
|
69
76
|
try {
|
|
70
|
-
const input = JSON.parse(
|
|
77
|
+
const input = JSON.parse(readInput());
|
|
71
78
|
const toolName = input.tool_name || '';
|
|
72
79
|
const toolInput = input.tool_input || {};
|
|
73
80
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "chief-clancy",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
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",
|
|
@@ -23,21 +23,65 @@
|
|
|
23
23
|
},
|
|
24
24
|
"license": "MIT",
|
|
25
25
|
"author": "Alex Clapperton",
|
|
26
|
+
"type": "module",
|
|
26
27
|
"bin": {
|
|
27
|
-
"clancy": "
|
|
28
|
+
"clancy": "dist/installer/install.js"
|
|
29
|
+
},
|
|
30
|
+
"main": "dist/installer/install.js",
|
|
31
|
+
"exports": {
|
|
32
|
+
"./scripts/once": "./dist/scripts/once/once.js",
|
|
33
|
+
"./scripts/afk": "./dist/scripts/afk/afk.js"
|
|
28
34
|
},
|
|
29
|
-
"main": "bin/install.js",
|
|
30
35
|
"files": [
|
|
31
|
-
"
|
|
36
|
+
"dist/",
|
|
32
37
|
"hooks/",
|
|
33
|
-
"src/",
|
|
38
|
+
"src/commands/",
|
|
39
|
+
"src/workflows/",
|
|
40
|
+
"src/agents/",
|
|
41
|
+
"src/templates/",
|
|
34
42
|
"registry/"
|
|
35
43
|
],
|
|
36
44
|
"scripts": {
|
|
37
|
-
"
|
|
38
|
-
"
|
|
45
|
+
"clean": "rm -rf dist",
|
|
46
|
+
"build": "npm run clean && tsc && tsc-alias",
|
|
47
|
+
"dev": "vitest",
|
|
48
|
+
"test": "vitest run",
|
|
49
|
+
"test:coverage": "vitest run --coverage",
|
|
50
|
+
"lint": "eslint .",
|
|
51
|
+
"lint:fix": "eslint . --fix",
|
|
52
|
+
"format": "prettier --write .",
|
|
53
|
+
"format:check": "prettier --check .",
|
|
54
|
+
"typecheck": "tsc --noEmit",
|
|
55
|
+
"prepublishOnly": "npm run build",
|
|
56
|
+
"prepare": "husky"
|
|
57
|
+
},
|
|
58
|
+
"lint-staged": {
|
|
59
|
+
"*.ts": [
|
|
60
|
+
"eslint --fix",
|
|
61
|
+
"prettier --write"
|
|
62
|
+
]
|
|
39
63
|
},
|
|
40
64
|
"engines": {
|
|
41
|
-
"node": ">=
|
|
65
|
+
"node": ">=22.0.0"
|
|
66
|
+
},
|
|
67
|
+
"devDependencies": {
|
|
68
|
+
"@eslint/js": "^10.0.1",
|
|
69
|
+
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
|
|
70
|
+
"@types/node": "^25.4.0",
|
|
71
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
72
|
+
"eslint": "^10.0.3",
|
|
73
|
+
"eslint-config-prettier": "^10.1.8",
|
|
74
|
+
"eslint-plugin-prettier": "^5.5.5",
|
|
75
|
+
"husky": "^9.1.7",
|
|
76
|
+
"jiti": "^2.6.1",
|
|
77
|
+
"lint-staged": "^16.3.3",
|
|
78
|
+
"prettier": "^3.8.1",
|
|
79
|
+
"tsc-alias": "^1.8.16",
|
|
80
|
+
"typescript": "^5.9.3",
|
|
81
|
+
"typescript-eslint": "^8.57.0",
|
|
82
|
+
"vitest": "^4.0.18"
|
|
83
|
+
},
|
|
84
|
+
"dependencies": {
|
|
85
|
+
"zod": "^4.3.6"
|
|
42
86
|
}
|
|
43
87
|
}
|
package/registry/boards.json
CHANGED
|
@@ -14,8 +14,7 @@
|
|
|
14
14
|
"CLANCY_JQL_SPRINT",
|
|
15
15
|
"CLANCY_LABEL",
|
|
16
16
|
"CLANCY_BASE_BRANCH"
|
|
17
|
-
]
|
|
18
|
-
"script": "clancy-once.sh"
|
|
17
|
+
]
|
|
19
18
|
},
|
|
20
19
|
{
|
|
21
20
|
"id": "github",
|
|
@@ -27,8 +26,7 @@
|
|
|
27
26
|
"GITHUB_REPO",
|
|
28
27
|
"CLANCY_LABEL",
|
|
29
28
|
"CLANCY_BASE_BRANCH"
|
|
30
|
-
]
|
|
31
|
-
"script": "clancy-once-github.sh"
|
|
29
|
+
]
|
|
32
30
|
},
|
|
33
31
|
{
|
|
34
32
|
"id": "linear",
|
|
@@ -40,8 +38,7 @@
|
|
|
40
38
|
"LINEAR_TEAM_ID",
|
|
41
39
|
"CLANCY_LABEL",
|
|
42
40
|
"CLANCY_BASE_BRANCH"
|
|
43
|
-
]
|
|
44
|
-
"script": "clancy-once-linear.sh"
|
|
41
|
+
]
|
|
45
42
|
}
|
|
46
43
|
]
|
|
47
44
|
}
|
package/src/templates/CLAUDE.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
This project uses Clancy for autonomous ticket-driven development.
|
|
5
5
|
|
|
6
6
|
### Version check
|
|
7
|
-
At the start of each session, read `~/.claude/cache/clancy-update-check.json` (use the
|
|
7
|
+
At the start of each session, read `~/.claude/cache/clancy-update-check.json` (use the Read tool). If it exists and `update_available` is true, display exactly:
|
|
8
8
|
`⚠ Clancy update available: v{installed} → v{latest}. Run /clancy:update to upgrade.`
|
|
9
9
|
Then continue normally. If the file is missing or unreadable, continue silently.
|
|
10
10
|
|