chq 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +271 -0
- package/dist/commands/clean.d.ts +2 -0
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/dispatch.d.ts +3 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/list.d.ts +2 -0
- package/dist/commands/plan.d.ts +2 -0
- package/dist/commands/review.d.ts +2 -0
- package/dist/commands/setup.d.ts +2 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/watch.d.ts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +931 -0
- package/dist/project.d.ts +11 -0
- package/dist/prompts.d.ts +7 -0
- package/dist/topo-sort.d.ts +2 -0
- package/dist/types.d.ts +46 -0
- package/package.json +44 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ChqConfig, GlobalConfig } from "./types.ts";
|
|
2
|
+
export declare const GLOBAL_CONFIG_DIR: string;
|
|
3
|
+
export declare function loadGlobalConfig(): GlobalConfig;
|
|
4
|
+
export declare function saveGlobalConfig(config: GlobalConfig): void;
|
|
5
|
+
export declare function getChqHome(): string;
|
|
6
|
+
export declare function getPollInterval(): number;
|
|
7
|
+
export declare function resolveProject(cwd: string): string;
|
|
8
|
+
export declare function loadConfig(projectDir: string): ChqConfig;
|
|
9
|
+
export declare function saveConfig(projectDir: string, config: ChqConfig): void;
|
|
10
|
+
export declare function ensureProjectDir(projectDir: string): void;
|
|
11
|
+
export declare function resolveRepoPath(repo: string): string;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ChqConfig, Task } from "./types.ts";
|
|
2
|
+
export declare const DEFAULT_SOLVE = "# chq:solve\n\n\u5F15\u6570\u3068\u3057\u3066\u4E0E\u3048\u3089\u308C\u305F\u30BF\u30B9\u30AFID\u300C{{taskId}}\u300D\u306E\u5185\u5BB9\u3092\u5B9F\u88C5\u3057\u3001PR\u3092\u4F5C\u6210\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n\n## \u30BF\u30B9\u30AF\u60C5\u5831\n\n- **Project**: {{projectName}}\n- **Description**: {{projectDescription}}\n- **Task ID**: {{taskId}}\n- **Title**: {{taskTitle}}\n- **Repo**: {{taskRepo}}\n- **Blocked By**: {{blockedBy}}\n\n## \u30BF\u30B9\u30AF\u8A73\u7D30\n\n{{taskDescription}}\n\n## \u624B\u9806\n\n### 1. \u5B9F\u88C5\n\n- \u4E0A\u8A18\u30BF\u30B9\u30AF\u8A73\u7D30\u306B\u8A18\u8F09\u3055\u308C\u305F\u5185\u5BB9\u3092\u30B9\u30B3\u30FC\u30D7\u3068\u3057\u3066\u5B9F\u88C5\u3059\u308B\n- \u3053\u306E\u30BF\u30B9\u30AF\u306E\u30B9\u30B3\u30FC\u30D7\u5916\u306E\u5909\u66F4\u306F\u3057\u306A\u3044\n- \u540C\u4E00\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5185\u306E\u4ED6\u30BF\u30B9\u30AF\u306E worktree\uFF08`sub-*` \u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\uFF09\u3092\u53C2\u7167\u3057\u3066\u6574\u5408\u6027\u3092\u78BA\u8A8D\u3057\u3066\u3082\u3088\u3044\n\n### 2. PR\u4F5C\u6210\n\n\u4EE5\u4E0B\u306E\u30B3\u30DE\u30F3\u30C9\u3067PR\u3092\u4F5C\u6210\u3059\u308B:\n\n```\ngh pr create \\\n --base {{baseBranch}} \\\n --head {{branchName}} \\\n --title \"{{taskTitle}}\" \\{{draftFlag}}\n --body \"## \u6982\u8981\n{{taskDescription}}\n\n## chq\n- Project: {{projectName}}\n- Task: {{taskId}}\n\" \\\n -R {{taskRepo}}\n```\n\n### 3. \u5B8C\u4E86\u901A\u77E5\n\nPR\u4F5C\u6210\u5F8C\u3001\u89AA\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E `chq.json` \u306E\u8A72\u5F53\u30BF\u30B9\u30AF\uFF08id: {{taskId}}\uFF09\u306E `status` \u3092 `\"done\"` \u306B\u66F4\u65B0\u3059\u308B\u3002\n";
|
|
3
|
+
export declare const DEFAULT_PLAN = "# chq:plan\n\n\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u76EE\u7684\u306B\u57FA\u3065\u3044\u3066\u30BF\u30B9\u30AF\u3092\u5206\u89E3\u3057\u3001chq.json \u306B\u66F8\u304D\u51FA\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n\n## \u624B\u9806\n\n### 1. \u73FE\u72B6\u628A\u63E1\n\n- \u30AB\u30EC\u30F3\u30C8\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E `chq.json` \u3092\u8AAD\u307F\u8FBC\u307F\u3001\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u540D\u3092\u78BA\u8A8D\u3059\u308B\n- \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u540D: {{projectName}}\n- \u5927\u76EE\u7684: {{goal}}\n\n### 2. \u30BF\u30B9\u30AF\u5206\u89E3\n\n\u4EE5\u4E0B\u306E\u539F\u5247\u306B\u5F93\u3063\u3066\u30BF\u30B9\u30AF\u3092\u5206\u89E3\u3059\u308B:\n\n- \u5404\u30BF\u30B9\u30AF\u306F **1\u3064\u306EPR** \u306B\u5BFE\u5FDC\u3059\u308B\u7C92\u5EA6\u306B\u3059\u308B\n- \u5404\u30BF\u30B9\u30AF\u306F **1\u3064\u306E\u30EA\u30DD\u30B8\u30C8\u30EA** \u306B\u9589\u3058\u308B\n- \u30BF\u30B9\u30AF\u9593\u306E\u4F9D\u5B58\u95A2\u4FC2\u3092\u660E\u78BA\u306B\u3059\u308B\n- PR\u3068\u3057\u3066\u5B9F\u88C5\u3067\u304D\u306A\u3044\u4F5C\u696D\uFF08\u624B\u52D5\u8A2D\u5B9A\u3001\u78BA\u8A8D\u4F5C\u696D\u306A\u3069\uFF09\u306F\u542B\u3081\u306A\u3044\u3002\u30E6\u30FC\u30B6\u30FC\u306B\u5225\u9014\u4F1D\u3048\u308B\u3053\u3068\n\n### 3. \u30E6\u30FC\u30B6\u30FC\u3078\u306E\u78BA\u8A8D\n\n\u5206\u89E3\u7D50\u679C\u3092\u4EE5\u4E0B\u306E\u5F62\u5F0F\u3067\u8868\u793A\u3057\u3001\u30E6\u30FC\u30B6\u30FC\u306E\u78BA\u8A8D\u3092\u5F97\u308B:\n\n```\n\u30BF\u30B9\u30AF\u5206\u89E3\u6848:\n\nt1: <title> (<repo>)\n <description>\n \u4F9D\u5B58: \u306A\u3057\n\nt2: <title> (<repo>)\n <description>\n \u4F9D\u5B58: \u306A\u3057\n\nt3: <title> (<repo>)\n <description>\n \u4F9D\u5B58: t1, t2\n\n\u4F9D\u5B58\u30B0\u30E9\u30D5:\nt1 \u2500\u2510\n \u251C\u2500\u2192 t3\nt2 \u2500\u2518\n```\n\n### 4. chq.json \u3078\u306E\u66F8\u304D\u51FA\u3057\n\n\u30E6\u30FC\u30B6\u30FC\u304C\u627F\u8A8D\u3057\u305F\u3089\u3001`chq.json` \u306E `tasks` \u914D\u5217\u306B\u30BF\u30B9\u30AF\u3092\u66F8\u304D\u51FA\u3059\u3002\n`description` \u306B\u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5168\u4F53\u306E\u76EE\u7684\u3082\u66F8\u304D\u51FA\u3059\u3002\n\n\u5404\u30BF\u30B9\u30AF\u306E\u30D5\u30A3\u30FC\u30EB\u30C9:\n- `id`: `t1`, `t2`, ... \u306E\u9023\u756A\n- `title`: \u30BF\u30B9\u30AF\u306E\u30BF\u30A4\u30C8\u30EB\n- `description`: \u5B9F\u88C5\u306B\u5FC5\u8981\u306A\u8A73\u7D30\u8AAC\u660E\u3002Claude Code \u304C\u3053\u308C\u3060\u3051\u3092\u8AAD\u3093\u3067\u5B9F\u88C5\u3067\u304D\u308B\u5341\u5206\u306A\u60C5\u5831\u3092\u542B\u3081\u308B\u3053\u3068\n- `repo`: `owner/repo` \u5F62\u5F0F\n- `blockedBy`: \u4F9D\u5B58\u30BF\u30B9\u30AF\u306E id \u914D\u5217\n- `status`: `\"pending\"`\n";
|
|
4
|
+
export declare const DEFAULT_REVIEW = "# chq:review\n\n\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5168\u4F53\u306E\u6574\u5408\u6027\u3092\u30EC\u30D3\u30E5\u30FC\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n\n## \u624B\u9806\n\n### 1. \u5168\u4F53\u628A\u63E1\n\n- `chq.json` \u3092\u8AAD\u307F\u8FBC\u307F\u3001\u5168\u30BF\u30B9\u30AF\u306E\u72B6\u614B\u3092\u78BA\u8A8D\u3059\u308B\n- `CLAUDE.md` \u304B\u3089\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u76EE\u7684\u3092\u628A\u63E1\u3059\u308B\n\n### 2. \u5404\u30BF\u30B9\u30AF\u306E\u5B9F\u88C5\u78BA\u8A8D\n\n- \u5404 `sub-*` \u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u5909\u66F4\u5185\u5BB9\u3092\u78BA\u8A8D\u3059\u308B\n- \u4EE5\u4E0B\u306E\u89B3\u70B9\u3067\u30EC\u30D3\u30E5\u30FC\u3059\u308B:\n - \u5404\u30BF\u30B9\u30AF\u304C\u30B9\u30B3\u30FC\u30D7\u901A\u308A\u306B\u5B9F\u88C5\u3055\u308C\u3066\u3044\u308B\u304B\n - \u30BF\u30B9\u30AF\u9593\u3067\u77DB\u76FE\u3059\u308B\u5909\u66F4\u304C\u306A\u3044\u304B\n - \u30EA\u30DD\u30B8\u30C8\u30EA\u3092\u307E\u305F\u3044\u3060\u6574\u5408\u6027\u304C\u53D6\u308C\u3066\u3044\u308B\u304B\uFF08API \u306E\u4E92\u63DB\u6027\u3001\u8A2D\u5B9A\u5024\u306E\u4E00\u81F4\u306A\u3069\uFF09\n - \u4F9D\u5B58\u95A2\u4FC2\u306E\u9806\u5E8F\u3067\u30DE\u30FC\u30B8\u3057\u305F\u5834\u5408\u306B\u554F\u984C\u304C\u8D77\u304D\u306A\u3044\u304B\n\n### 3. \u30EC\u30DD\u30FC\u30C8\n\n\u30EC\u30D3\u30E5\u30FC\u7D50\u679C\u3092\u5831\u544A\u3059\u308B\u3002\u554F\u984C\u304C\u3042\u308B\u5834\u5408\u306F\u5177\u4F53\u7684\u306A\u4FEE\u6B63\u63D0\u6848\u3092\u542B\u3081\u308B\u3002\n";
|
|
5
|
+
export declare function generateSolvePrompt(config: ChqConfig, task: Task): string;
|
|
6
|
+
export declare function generatePlanPrompt(projectName: string, goal: string): string;
|
|
7
|
+
export declare function generateReviewPrompt(): string;
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
export declare const TaskStatus: z.ZodEnum<{
|
|
3
|
+
pending: "pending";
|
|
4
|
+
running: "running";
|
|
5
|
+
done: "done";
|
|
6
|
+
failed: "failed";
|
|
7
|
+
}>;
|
|
8
|
+
export type TaskStatus = z.infer<typeof TaskStatus>;
|
|
9
|
+
export declare const Task: z.ZodObject<{
|
|
10
|
+
id: z.ZodString;
|
|
11
|
+
title: z.ZodString;
|
|
12
|
+
description: z.ZodString;
|
|
13
|
+
repo: z.ZodString;
|
|
14
|
+
blockedBy: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
15
|
+
status: z.ZodDefault<z.ZodEnum<{
|
|
16
|
+
pending: "pending";
|
|
17
|
+
running: "running";
|
|
18
|
+
done: "done";
|
|
19
|
+
failed: "failed";
|
|
20
|
+
}>>;
|
|
21
|
+
}, z.core.$strip>;
|
|
22
|
+
export type Task = z.infer<typeof Task>;
|
|
23
|
+
export declare const ChqConfig: z.ZodObject<{
|
|
24
|
+
name: z.ZodString;
|
|
25
|
+
description: z.ZodDefault<z.ZodString>;
|
|
26
|
+
createdAt: z.ZodString;
|
|
27
|
+
tasks: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
28
|
+
id: z.ZodString;
|
|
29
|
+
title: z.ZodString;
|
|
30
|
+
description: z.ZodString;
|
|
31
|
+
repo: z.ZodString;
|
|
32
|
+
blockedBy: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
33
|
+
status: z.ZodDefault<z.ZodEnum<{
|
|
34
|
+
pending: "pending";
|
|
35
|
+
running: "running";
|
|
36
|
+
done: "done";
|
|
37
|
+
failed: "failed";
|
|
38
|
+
}>>;
|
|
39
|
+
}, z.core.$strip>>>;
|
|
40
|
+
}, z.core.$strip>;
|
|
41
|
+
export type ChqConfig = z.infer<typeof ChqConfig>;
|
|
42
|
+
export declare const GlobalConfig: z.ZodObject<{
|
|
43
|
+
chqHome: z.ZodOptional<z.ZodString>;
|
|
44
|
+
pollInterval: z.ZodOptional<z.ZodNumber>;
|
|
45
|
+
}, z.core.$strip>;
|
|
46
|
+
export type GlobalConfig = z.infer<typeof GlobalConfig>;
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "chq",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Orchestrate multi-repo tasks with Claude Code in parallel",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "shoppingjaws",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/shoppingjaws/chq.git"
|
|
10
|
+
},
|
|
11
|
+
"type": "module",
|
|
12
|
+
"main": "dist/index.js",
|
|
13
|
+
"module": "dist/index.js",
|
|
14
|
+
"types": "dist/index.d.ts",
|
|
15
|
+
"bin": {
|
|
16
|
+
"chq": "dist/index.js"
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist"
|
|
20
|
+
],
|
|
21
|
+
"exports": {
|
|
22
|
+
".": {
|
|
23
|
+
"import": "./dist/index.js",
|
|
24
|
+
"types": "./dist/index.d.ts"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "bun build src/index.ts --outdir dist --target node --format esm --packages external && bun run build:types",
|
|
29
|
+
"build:types": "tsc -p tsconfig.build.json",
|
|
30
|
+
"typecheck": "tsc --noEmit"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@types/bun": "latest",
|
|
34
|
+
"@types/node": "^22.0.0",
|
|
35
|
+
"typescript": "^5.8.0"
|
|
36
|
+
},
|
|
37
|
+
"dependencies": {
|
|
38
|
+
"commander": "^14.0.2",
|
|
39
|
+
"zod": "^4.3.6"
|
|
40
|
+
},
|
|
41
|
+
"engines": {
|
|
42
|
+
"node": ">=24"
|
|
43
|
+
}
|
|
44
|
+
}
|