claude-task-worker 0.89.0 → 0.91.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 +2 -16
- package/dist/index.js +126 -193
- package/package.json +2 -2
- package/dist/pen-baseuri-fix.mjs +0 -31
package/README.md
CHANGED
|
@@ -66,7 +66,7 @@ CLI が GitHub ラベルを検知してタスクを起動し、プラグイン
|
|
|
66
66
|
| [Git](https://git-scm.com/) | worktree の作成・ブランチ操作 |
|
|
67
67
|
| [jq](https://jqlang.org/) | プラグインスキル内での JSON 加工 |
|
|
68
68
|
| [CodeGraph](https://www.npmjs.com/package/@colbymchenry/codegraph) | コード探索用インデックス。任意(未導入でも探索がテキスト検索に落ちるだけ) |
|
|
69
|
-
| [Pen CLI](https://docs.pencil.dev/for-developers/pen-cli) | `.pen` デザインファイルの編集・参照。UIデザイン先行ワークフロー使用時のみ(要ログイン。呼び出しは `
|
|
69
|
+
| [Pen CLI](https://docs.pencil.dev/for-developers/pen-cli) | `.pen` デザインファイルの編集・参照。UIデザイン先行ワークフロー使用時のみ(要ログイン。呼び出しは `pencil` 経由) |
|
|
70
70
|
| [herdr](https://herdr.dev) | `--project` / `mode: "herdr"` 使用時のみ |
|
|
71
71
|
|
|
72
72
|
CLI 本体に npm の実行時依存はない(esbuild で `dist/index.js` に単一バンドルされ、Node.js 標準モジュールのみで動作する)。
|
|
@@ -91,7 +91,7 @@ herdr が必要な場合は `curl -fsSL https://herdr.dev/install.sh | sh` ま
|
|
|
91
91
|
|
|
92
92
|
### Pen CLI のログイン
|
|
93
93
|
|
|
94
|
-
`.pen` を扱うスキル(`edit-pencil-design` / `inspect-pencil-node` / `resolve-pencil-conflict`)は Pen CLI の認証を必要とする。未ログインだと `.pen` の読み書きが失敗するため、UI
|
|
94
|
+
`.pen` を扱うスキル(`edit-pencil-design` / `inspect-pencil-node` / `resolve-pencil-conflict`)は Pen CLI の認証を必要とする。未ログインだと `.pen` の読み書きが失敗するため、UIデザイン先行ワークフローを使うなら**インストール後に一度ログインしておく**。
|
|
95
95
|
|
|
96
96
|
```bash
|
|
97
97
|
pencil login # メールアドレス + パスワード、またはメールアドレス + OTP コード
|
|
@@ -168,22 +168,8 @@ claude-task-worker <command> [--epic <issue-number>]... [--label <label>]... [--
|
|
|
168
168
|
| `init` | ラベル・テンプレート・設定ファイルの作成と CodeGraph セットアップ |
|
|
169
169
|
| `install` / `update` | 上記「セットアップ」を参照 |
|
|
170
170
|
| `usage` | Claude API 使用状況(5時間/7日間の利用率とリセット時刻)を表示し、Slack にも通知 |
|
|
171
|
-
| `pencil <args...>` | Pencil CLI をアセット URI 修正パッチ付きで実行するラッパー(下記参照) |
|
|
172
171
|
| `version` | CLI のバージョンを表示(`--version` / `-v` も可) |
|
|
173
172
|
|
|
174
|
-
### `pencil <args...>`
|
|
175
|
-
|
|
176
|
-
`@pen.dev/cli`(`pencil`)にはアセットのベース URI を絶対 URI として解決できないバグがあり、`.pen` を開くと `Base URI must be absolute!` で失敗する。本コマンドはその修正を Node の loader hook(`dist/pen-baseuri-fix.mjs`)として `NODE_OPTIONS` 経由で注入したうえで `pencil` を実行するラッパー。
|
|
177
|
-
|
|
178
|
-
```bash
|
|
179
|
-
claude-task-worker pencil version
|
|
180
|
-
claude-task-worker pencil interactive -i designs/login.pen -o designs/login.pen <<'EOF'
|
|
181
|
-
...
|
|
182
|
-
EOF
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
引数・stdin・stdout・stderr・終了コードはすべて素通しするため、使い方は `pencil` と同じ。`.pen` を扱うスキル・エージェント(`edit-pencil-design` / `inspect-pencil-node` / `resolve-pencil-conflict` / `pencil-design-updater` など)はすべてこのラッパー経由で `pencil` を呼ぶ。
|
|
186
|
-
|
|
187
173
|
### `--epic <issue-number>`
|
|
188
174
|
|
|
189
175
|
指定したエピック Issue のサブ Issue のみを処理対象に絞る。`all` / `yolo` と Issue 系ワーカーで有効。複数指定するといずれかのエピックを親に持つサブ Issue が対象になる(OR)。
|
package/dist/index.js
CHANGED
|
@@ -820,9 +820,13 @@ var init_herdr_runner = __esm({
|
|
|
820
820
|
// src/commands/run-command.ts
|
|
821
821
|
var run_command_exports = {};
|
|
822
822
|
__export(run_command_exports, {
|
|
823
|
+
npmInstallGlobalLatest: () => npmInstallGlobalLatest,
|
|
823
824
|
runCommand: () => runCommand
|
|
824
825
|
});
|
|
825
826
|
import { spawn as spawn2 } from "node:child_process";
|
|
827
|
+
function npmInstallGlobalLatest(pkg) {
|
|
828
|
+
return runCommand("npm", ["install", "-g", `${pkg}@latest`, "--prefer-online"]);
|
|
829
|
+
}
|
|
826
830
|
function runCommand(command, args) {
|
|
827
831
|
return new Promise((resolve3, reject) => {
|
|
828
832
|
const child = spawn2(command, args, {
|
|
@@ -1923,7 +1927,6 @@ function buildClaudeArgs({
|
|
|
1923
1927
|
...mode === "herdr" ? [] : ["-p", prompt],
|
|
1924
1928
|
"--permission-mode",
|
|
1925
1929
|
permission,
|
|
1926
|
-
"--chrome",
|
|
1927
1930
|
"--disallowedTools",
|
|
1928
1931
|
DISALLOWED_TOOLS_ARG,
|
|
1929
1932
|
"--append-system-prompt-file",
|
|
@@ -4141,7 +4144,7 @@ var updateDesignMdWorker = createScheduledWorker({
|
|
|
4141
4144
|
init_table();
|
|
4142
4145
|
|
|
4143
4146
|
// src/commands/init.ts
|
|
4144
|
-
import { mkdir as mkdir2, writeFile as writeFile2,
|
|
4147
|
+
import { mkdir as mkdir2, writeFile as writeFile2, access } from "node:fs/promises";
|
|
4145
4148
|
|
|
4146
4149
|
// src/commands/codegraph.ts
|
|
4147
4150
|
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
@@ -4171,8 +4174,8 @@ ${entry}
|
|
|
4171
4174
|
async function installCodegraphCli(logPrefix) {
|
|
4172
4175
|
console.log(`[${logPrefix}] Installing CodeGraph CLI (npm install -g ${CODEGRAPH_PACKAGE}@latest)...`);
|
|
4173
4176
|
try {
|
|
4174
|
-
const {
|
|
4175
|
-
await
|
|
4177
|
+
const { npmInstallGlobalLatest: npmInstallGlobalLatest2 } = await loadRunCommand();
|
|
4178
|
+
await npmInstallGlobalLatest2(CODEGRAPH_PACKAGE);
|
|
4176
4179
|
console.log(`[${logPrefix}] CodeGraph CLI installed.`);
|
|
4177
4180
|
return true;
|
|
4178
4181
|
} catch (err) {
|
|
@@ -4229,122 +4232,6 @@ async function ensureCodegraphGitIgnore(logPrefix) {
|
|
|
4229
4232
|
}
|
|
4230
4233
|
}
|
|
4231
4234
|
|
|
4232
|
-
// src/commands/design-md.ts
|
|
4233
|
-
async function loadRunCommand2() {
|
|
4234
|
-
return await Promise.resolve().then(() => (init_run_command(), run_command_exports));
|
|
4235
|
-
}
|
|
4236
|
-
var DESIGN_MD_PACKAGE = "@google/design.md";
|
|
4237
|
-
async function installDesignMdCli(logPrefix) {
|
|
4238
|
-
console.log(`[${logPrefix}] Installing DESIGN.md CLI (npm install -g ${DESIGN_MD_PACKAGE}@latest)...`);
|
|
4239
|
-
try {
|
|
4240
|
-
const { runCommand: runCommand2 } = await loadRunCommand2();
|
|
4241
|
-
await runCommand2("npm", ["install", "-g", `${DESIGN_MD_PACKAGE}@latest`]);
|
|
4242
|
-
console.log(`[${logPrefix}] DESIGN.md CLI installed.`);
|
|
4243
|
-
return true;
|
|
4244
|
-
} catch (err) {
|
|
4245
|
-
console.error(`[${logPrefix}] Failed to install DESIGN.md CLI: ${err.message}`);
|
|
4246
|
-
return false;
|
|
4247
|
-
}
|
|
4248
|
-
}
|
|
4249
|
-
|
|
4250
|
-
// src/commands/pen.ts
|
|
4251
|
-
async function loadRunCommand3() {
|
|
4252
|
-
return await Promise.resolve().then(() => (init_run_command(), run_command_exports));
|
|
4253
|
-
}
|
|
4254
|
-
var PEN_PACKAGE = "@pen.dev/cli";
|
|
4255
|
-
var LEGACY_PEN_PACKAGE = "@pencil.dev/cli";
|
|
4256
|
-
async function installPenCli(logPrefix) {
|
|
4257
|
-
console.log(`[${logPrefix}] Removing legacy Pen CLI (npm uninstall -g ${LEGACY_PEN_PACKAGE})...`);
|
|
4258
|
-
const { runCommand: runCommand2 } = await loadRunCommand3();
|
|
4259
|
-
try {
|
|
4260
|
-
await runCommand2("npm", ["uninstall", "-g", LEGACY_PEN_PACKAGE]);
|
|
4261
|
-
} catch (err) {
|
|
4262
|
-
console.error(`[${logPrefix}] Skipped removing legacy Pen CLI: ${err.message}`);
|
|
4263
|
-
}
|
|
4264
|
-
console.log(`[${logPrefix}] Installing Pen CLI (npm install -g ${PEN_PACKAGE}@latest)...`);
|
|
4265
|
-
try {
|
|
4266
|
-
await runCommand2("npm", ["install", "-g", `${PEN_PACKAGE}@latest`]);
|
|
4267
|
-
console.log(`[${logPrefix}] Pen CLI installed.`);
|
|
4268
|
-
} catch (err) {
|
|
4269
|
-
console.error(`[${logPrefix}] Failed to install Pen CLI: ${err.message}`);
|
|
4270
|
-
return false;
|
|
4271
|
-
}
|
|
4272
|
-
await warnIfPenLoggedOut(logPrefix);
|
|
4273
|
-
return true;
|
|
4274
|
-
}
|
|
4275
|
-
async function warnIfPenLoggedOut(logPrefix) {
|
|
4276
|
-
const { runCommand: runCommand2 } = await loadRunCommand3();
|
|
4277
|
-
try {
|
|
4278
|
-
await runCommand2("pencil", ["status"]);
|
|
4279
|
-
} catch {
|
|
4280
|
-
console.log(
|
|
4281
|
-
`[${logPrefix}] Pen CLI is not authenticated. Run \`pencil login\` (or set PEN_CLI_KEY) before using .pen designs.`
|
|
4282
|
-
);
|
|
4283
|
-
}
|
|
4284
|
-
}
|
|
4285
|
-
|
|
4286
|
-
// src/commands/install.ts
|
|
4287
|
-
init_run_command();
|
|
4288
|
-
var PLUGIN_NAME = "claude-task-worker";
|
|
4289
|
-
var MARKETPLACE_NAME = "claude-task-worker";
|
|
4290
|
-
var MARKETPLACE_SOURCE = "getty104/claude-task-worker";
|
|
4291
|
-
var GLOBAL_NPM_PACKAGES = [PLUGIN_NAME, CODEGRAPH_PACKAGE, DESIGN_MD_PACKAGE, PEN_PACKAGE];
|
|
4292
|
-
async function printGlobalPackageVersions(logPrefix) {
|
|
4293
|
-
console.log(`[${logPrefix}] Installed versions:`);
|
|
4294
|
-
try {
|
|
4295
|
-
await runCommand("npm", ["ls", "-g", "--depth=0", ...GLOBAL_NPM_PACKAGES]);
|
|
4296
|
-
} catch (err) {
|
|
4297
|
-
console.error(`[${logPrefix}] Some packages are missing from the global install: ${err.message}`);
|
|
4298
|
-
}
|
|
4299
|
-
}
|
|
4300
|
-
async function addMarketplace() {
|
|
4301
|
-
console.log(`[install] Adding marketplace: ${MARKETPLACE_SOURCE}...`);
|
|
4302
|
-
try {
|
|
4303
|
-
await runCommand("claude", ["plugin", "marketplace", "add", MARKETPLACE_SOURCE]);
|
|
4304
|
-
console.log("[install] Marketplace added.");
|
|
4305
|
-
} catch (err) {
|
|
4306
|
-
console.error(
|
|
4307
|
-
`[install] Failed to add marketplace (already added is expected and safe to ignore): ${err.message}`
|
|
4308
|
-
);
|
|
4309
|
-
}
|
|
4310
|
-
}
|
|
4311
|
-
async function installPlugin() {
|
|
4312
|
-
console.log(`[install] Installing plugin: ${PLUGIN_NAME}@${MARKETPLACE_NAME}...`);
|
|
4313
|
-
try {
|
|
4314
|
-
await runCommand("claude", ["plugin", "install", `${PLUGIN_NAME}@${MARKETPLACE_NAME}`]);
|
|
4315
|
-
console.log("[install] Plugin installed. Restart your Claude Code session to apply.");
|
|
4316
|
-
return true;
|
|
4317
|
-
} catch (err) {
|
|
4318
|
-
console.error(`[install] Failed to install plugin: ${err.message}`);
|
|
4319
|
-
return false;
|
|
4320
|
-
}
|
|
4321
|
-
}
|
|
4322
|
-
async function installCli() {
|
|
4323
|
-
console.log("[install] Installing claude-task-worker CLI (npm install -g claude-task-worker@latest)...");
|
|
4324
|
-
try {
|
|
4325
|
-
await runCommand("npm", ["install", "-g", "claude-task-worker@latest"]);
|
|
4326
|
-
console.log("[install] claude-task-worker CLI installed.");
|
|
4327
|
-
return true;
|
|
4328
|
-
} catch (err) {
|
|
4329
|
-
console.error(`[install] Failed to install claude-task-worker CLI: ${err.message}`);
|
|
4330
|
-
return false;
|
|
4331
|
-
}
|
|
4332
|
-
}
|
|
4333
|
-
async function install() {
|
|
4334
|
-
console.log("[install] Starting install...");
|
|
4335
|
-
await addMarketplace();
|
|
4336
|
-
const pluginOk = await installPlugin();
|
|
4337
|
-
const cliOk = await installCli();
|
|
4338
|
-
const codegraphOk = await installCodegraphCli("install");
|
|
4339
|
-
const designMdOk = await installDesignMdCli("install");
|
|
4340
|
-
const penOk = await installPenCli("install");
|
|
4341
|
-
await printGlobalPackageVersions("install");
|
|
4342
|
-
if (!pluginOk || !cliOk || !codegraphOk || !designMdOk || !penOk) {
|
|
4343
|
-
process.exitCode = 1;
|
|
4344
|
-
}
|
|
4345
|
-
console.log("[install] Done.");
|
|
4346
|
-
}
|
|
4347
|
-
|
|
4348
4235
|
// src/commands/init.ts
|
|
4349
4236
|
var LABELS = [
|
|
4350
4237
|
{ name: "cc-need-human-check", color: "eb1700" },
|
|
@@ -4444,45 +4331,6 @@ async function createConfig(force) {
|
|
|
4444
4331
|
const result = await writeFileWithMode(CONFIG_PATH, JSON.stringify(initialConfig, null, 2), force);
|
|
4445
4332
|
logWriteResult(result, CONFIG_PATH);
|
|
4446
4333
|
}
|
|
4447
|
-
var PROJECT_SETTINGS_PATH = ".claude/settings.json";
|
|
4448
|
-
function mergePluginSettings(current) {
|
|
4449
|
-
const marketplaces = { ...current.extraKnownMarketplaces ?? {} };
|
|
4450
|
-
marketplaces[MARKETPLACE_NAME] = { source: { source: "github", repo: MARKETPLACE_SOURCE } };
|
|
4451
|
-
const plugins = { ...current.enabledPlugins ?? {} };
|
|
4452
|
-
plugins[`${PLUGIN_NAME}@${MARKETPLACE_NAME}`] = true;
|
|
4453
|
-
return { ...current, extraKnownMarketplaces: marketplaces, enabledPlugins: plugins };
|
|
4454
|
-
}
|
|
4455
|
-
async function registerPluginInSettings() {
|
|
4456
|
-
let current = {};
|
|
4457
|
-
try {
|
|
4458
|
-
const raw = await readFile2(PROJECT_SETTINGS_PATH, "utf-8");
|
|
4459
|
-
const parsed = JSON.parse(raw);
|
|
4460
|
-
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
4461
|
-
console.log(`[init] Skipped: ${PROJECT_SETTINGS_PATH} is not a JSON object`);
|
|
4462
|
-
return;
|
|
4463
|
-
}
|
|
4464
|
-
current = parsed;
|
|
4465
|
-
} catch (err) {
|
|
4466
|
-
if (err.code !== "ENOENT") {
|
|
4467
|
-
console.log(`[init] Skipped: failed to read ${PROJECT_SETTINGS_PATH}: ${err.message}`);
|
|
4468
|
-
return;
|
|
4469
|
-
}
|
|
4470
|
-
}
|
|
4471
|
-
const merged = mergePluginSettings(current);
|
|
4472
|
-
if (JSON.stringify(merged) === JSON.stringify(current)) {
|
|
4473
|
-
console.log(`[init] Already registered: ${PLUGIN_NAME}@${MARKETPLACE_NAME} in ${PROJECT_SETTINGS_PATH}`);
|
|
4474
|
-
return;
|
|
4475
|
-
}
|
|
4476
|
-
try {
|
|
4477
|
-
await mkdir2(".claude", { recursive: true });
|
|
4478
|
-
await writeFile2(PROJECT_SETTINGS_PATH, `${JSON.stringify(merged, null, 2)}
|
|
4479
|
-
`, "utf-8");
|
|
4480
|
-
} catch (err) {
|
|
4481
|
-
console.log(`[init] Skipped: failed to write ${PROJECT_SETTINGS_PATH}: ${err.message}`);
|
|
4482
|
-
return;
|
|
4483
|
-
}
|
|
4484
|
-
console.log(`[init] Registered ${PLUGIN_NAME}@${MARKETPLACE_NAME} in ${PROJECT_SETTINGS_PATH}`);
|
|
4485
|
-
}
|
|
4486
4334
|
async function init(options = {}) {
|
|
4487
4335
|
const force = options.force ?? false;
|
|
4488
4336
|
console.log(`[init] Creating labels...${force ? " (force mode)" : ""}`);
|
|
@@ -4502,8 +4350,6 @@ async function init(options = {}) {
|
|
|
4502
4350
|
await mkdir2(".github/workflows", { recursive: true });
|
|
4503
4351
|
const workflowPath = ".github/workflows/assign-creator-on-cc-triage-scope.yml";
|
|
4504
4352
|
logWriteResult(await writeFileWithMode(workflowPath, ASSIGN_CREATOR_WORKFLOW, force), workflowPath);
|
|
4505
|
-
console.log("[init] Registering the plugin in project settings...");
|
|
4506
|
-
await registerPluginInSettings();
|
|
4507
4353
|
console.log("[init] Creating config file...");
|
|
4508
4354
|
await createConfig(force);
|
|
4509
4355
|
console.log("[init] Setting up CodeGraph...");
|
|
@@ -4512,6 +4358,122 @@ async function init(options = {}) {
|
|
|
4512
4358
|
console.log("[init] Done.");
|
|
4513
4359
|
}
|
|
4514
4360
|
|
|
4361
|
+
// src/commands/design-md.ts
|
|
4362
|
+
async function loadRunCommand2() {
|
|
4363
|
+
return await Promise.resolve().then(() => (init_run_command(), run_command_exports));
|
|
4364
|
+
}
|
|
4365
|
+
var DESIGN_MD_PACKAGE = "@google/design.md";
|
|
4366
|
+
async function installDesignMdCli(logPrefix) {
|
|
4367
|
+
console.log(`[${logPrefix}] Installing DESIGN.md CLI (npm install -g ${DESIGN_MD_PACKAGE}@latest)...`);
|
|
4368
|
+
try {
|
|
4369
|
+
const { npmInstallGlobalLatest: npmInstallGlobalLatest2 } = await loadRunCommand2();
|
|
4370
|
+
await npmInstallGlobalLatest2(DESIGN_MD_PACKAGE);
|
|
4371
|
+
console.log(`[${logPrefix}] DESIGN.md CLI installed.`);
|
|
4372
|
+
return true;
|
|
4373
|
+
} catch (err) {
|
|
4374
|
+
console.error(`[${logPrefix}] Failed to install DESIGN.md CLI: ${err.message}`);
|
|
4375
|
+
return false;
|
|
4376
|
+
}
|
|
4377
|
+
}
|
|
4378
|
+
|
|
4379
|
+
// src/commands/pen.ts
|
|
4380
|
+
async function loadRunCommand3() {
|
|
4381
|
+
return await Promise.resolve().then(() => (init_run_command(), run_command_exports));
|
|
4382
|
+
}
|
|
4383
|
+
var PEN_PACKAGE = "@pen.dev/cli";
|
|
4384
|
+
var LEGACY_PEN_PACKAGE = "@pencil.dev/cli";
|
|
4385
|
+
async function installPenCli(logPrefix) {
|
|
4386
|
+
console.log(`[${logPrefix}] Removing legacy Pen CLI (npm uninstall -g ${LEGACY_PEN_PACKAGE})...`);
|
|
4387
|
+
const { runCommand: runCommand2, npmInstallGlobalLatest: npmInstallGlobalLatest2 } = await loadRunCommand3();
|
|
4388
|
+
try {
|
|
4389
|
+
await runCommand2("npm", ["uninstall", "-g", LEGACY_PEN_PACKAGE]);
|
|
4390
|
+
} catch (err) {
|
|
4391
|
+
console.error(`[${logPrefix}] Skipped removing legacy Pen CLI: ${err.message}`);
|
|
4392
|
+
}
|
|
4393
|
+
console.log(`[${logPrefix}] Installing Pen CLI (npm install -g ${PEN_PACKAGE}@latest)...`);
|
|
4394
|
+
try {
|
|
4395
|
+
await npmInstallGlobalLatest2(PEN_PACKAGE);
|
|
4396
|
+
console.log(`[${logPrefix}] Pen CLI installed.`);
|
|
4397
|
+
} catch (err) {
|
|
4398
|
+
console.error(`[${logPrefix}] Failed to install Pen CLI: ${err.message}`);
|
|
4399
|
+
return false;
|
|
4400
|
+
}
|
|
4401
|
+
await warnIfPenLoggedOut(logPrefix);
|
|
4402
|
+
return true;
|
|
4403
|
+
}
|
|
4404
|
+
async function warnIfPenLoggedOut(logPrefix) {
|
|
4405
|
+
const { runCommand: runCommand2 } = await loadRunCommand3();
|
|
4406
|
+
try {
|
|
4407
|
+
await runCommand2("pencil", ["status"]);
|
|
4408
|
+
} catch {
|
|
4409
|
+
console.log(
|
|
4410
|
+
`[${logPrefix}] Pen CLI is not authenticated. Run \`pencil login\` (or set PEN_CLI_KEY) before using .pen designs.`
|
|
4411
|
+
);
|
|
4412
|
+
}
|
|
4413
|
+
}
|
|
4414
|
+
|
|
4415
|
+
// src/commands/install.ts
|
|
4416
|
+
init_run_command();
|
|
4417
|
+
var PLUGIN_NAME = "claude-task-worker";
|
|
4418
|
+
var MARKETPLACE_NAME = "claude-task-worker";
|
|
4419
|
+
var MARKETPLACE_SOURCE = "getty104/claude-task-worker";
|
|
4420
|
+
var GLOBAL_NPM_PACKAGES = [PLUGIN_NAME, CODEGRAPH_PACKAGE, DESIGN_MD_PACKAGE, PEN_PACKAGE];
|
|
4421
|
+
async function printGlobalPackageVersions(logPrefix) {
|
|
4422
|
+
console.log(`[${logPrefix}] Installed versions:`);
|
|
4423
|
+
try {
|
|
4424
|
+
await runCommand("npm", ["ls", "-g", "--depth=0", ...GLOBAL_NPM_PACKAGES]);
|
|
4425
|
+
} catch (err) {
|
|
4426
|
+
console.error(`[${logPrefix}] Some packages are missing from the global install: ${err.message}`);
|
|
4427
|
+
}
|
|
4428
|
+
}
|
|
4429
|
+
async function addMarketplace() {
|
|
4430
|
+
console.log(`[install] Adding marketplace: ${MARKETPLACE_SOURCE}...`);
|
|
4431
|
+
try {
|
|
4432
|
+
await runCommand("claude", ["plugin", "marketplace", "add", MARKETPLACE_SOURCE]);
|
|
4433
|
+
console.log("[install] Marketplace added.");
|
|
4434
|
+
} catch (err) {
|
|
4435
|
+
console.error(
|
|
4436
|
+
`[install] Failed to add marketplace (already added is expected and safe to ignore): ${err.message}`
|
|
4437
|
+
);
|
|
4438
|
+
}
|
|
4439
|
+
}
|
|
4440
|
+
async function installPlugin() {
|
|
4441
|
+
console.log(`[install] Installing plugin: ${PLUGIN_NAME}@${MARKETPLACE_NAME}...`);
|
|
4442
|
+
try {
|
|
4443
|
+
await runCommand("claude", ["plugin", "install", `${PLUGIN_NAME}@${MARKETPLACE_NAME}`]);
|
|
4444
|
+
console.log("[install] Plugin installed. Restart your Claude Code session to apply.");
|
|
4445
|
+
return true;
|
|
4446
|
+
} catch (err) {
|
|
4447
|
+
console.error(`[install] Failed to install plugin: ${err.message}`);
|
|
4448
|
+
return false;
|
|
4449
|
+
}
|
|
4450
|
+
}
|
|
4451
|
+
async function installCli() {
|
|
4452
|
+
console.log("[install] Installing claude-task-worker CLI (npm install -g claude-task-worker@latest)...");
|
|
4453
|
+
try {
|
|
4454
|
+
await npmInstallGlobalLatest(PLUGIN_NAME);
|
|
4455
|
+
console.log("[install] claude-task-worker CLI installed.");
|
|
4456
|
+
return true;
|
|
4457
|
+
} catch (err) {
|
|
4458
|
+
console.error(`[install] Failed to install claude-task-worker CLI: ${err.message}`);
|
|
4459
|
+
return false;
|
|
4460
|
+
}
|
|
4461
|
+
}
|
|
4462
|
+
async function install() {
|
|
4463
|
+
console.log("[install] Starting install...");
|
|
4464
|
+
await addMarketplace();
|
|
4465
|
+
const pluginOk = await installPlugin();
|
|
4466
|
+
const cliOk = await installCli();
|
|
4467
|
+
const codegraphOk = await installCodegraphCli("install");
|
|
4468
|
+
const designMdOk = await installDesignMdCli("install");
|
|
4469
|
+
const penOk = await installPenCli("install");
|
|
4470
|
+
await printGlobalPackageVersions("install");
|
|
4471
|
+
if (!pluginOk || !cliOk || !codegraphOk || !designMdOk || !penOk) {
|
|
4472
|
+
process.exitCode = 1;
|
|
4473
|
+
}
|
|
4474
|
+
console.log("[install] Done.");
|
|
4475
|
+
}
|
|
4476
|
+
|
|
4515
4477
|
// src/commands/update.ts
|
|
4516
4478
|
init_run_command();
|
|
4517
4479
|
var PLUGIN_NAME2 = "claude-task-worker";
|
|
@@ -4541,7 +4503,7 @@ async function updatePlugin() {
|
|
|
4541
4503
|
async function updateCli() {
|
|
4542
4504
|
console.log("[update] Updating claude-task-worker CLI (npm install -g claude-task-worker@latest)...");
|
|
4543
4505
|
try {
|
|
4544
|
-
await
|
|
4506
|
+
await npmInstallGlobalLatest(PLUGIN_NAME2);
|
|
4545
4507
|
console.log("[update] claude-task-worker CLI updated.");
|
|
4546
4508
|
return true;
|
|
4547
4509
|
} catch (err) {
|
|
@@ -4611,34 +4573,8 @@ function version() {
|
|
|
4611
4573
|
}
|
|
4612
4574
|
}
|
|
4613
4575
|
|
|
4614
|
-
// src/commands/pencil.ts
|
|
4615
|
-
import { spawn as spawn3 } from "node:child_process";
|
|
4616
|
-
import { dirname as dirname4, join as join9 } from "node:path";
|
|
4617
|
-
import { fileURLToPath as fileURLToPath2, pathToFileURL } from "node:url";
|
|
4618
|
-
var HOOK_FILE = "pen-baseuri-fix.mjs";
|
|
4619
|
-
function buildPencilNodeOptions(existing, hookUrl) {
|
|
4620
|
-
return [`--import ${hookUrl}`, existing?.trim()].filter(Boolean).join(" ");
|
|
4621
|
-
}
|
|
4622
|
-
function pencil(args) {
|
|
4623
|
-
const hookPath = join9(dirname4(fileURLToPath2(import.meta.url)), HOOK_FILE);
|
|
4624
|
-
const child = spawn3("pencil", args, {
|
|
4625
|
-
stdio: "inherit",
|
|
4626
|
-
env: {
|
|
4627
|
-
...process.env,
|
|
4628
|
-
NODE_OPTIONS: buildPencilNodeOptions(process.env.NODE_OPTIONS, pathToFileURL(hookPath).href)
|
|
4629
|
-
}
|
|
4630
|
-
});
|
|
4631
|
-
child.on("error", (err) => {
|
|
4632
|
-
console.error(`[pencil] Failed to run pencil: ${err.message}`);
|
|
4633
|
-
process.exit(127);
|
|
4634
|
-
});
|
|
4635
|
-
child.on("exit", (code, signal) => {
|
|
4636
|
-
process.exit(signal ? 1 : code ?? 1);
|
|
4637
|
-
});
|
|
4638
|
-
}
|
|
4639
|
-
|
|
4640
4576
|
// src/dispatch-args.ts
|
|
4641
|
-
var PROJECT_INCOMPATIBLE_COMMANDS = ["init", "install", "update", "usage", "version"
|
|
4577
|
+
var PROJECT_INCOMPATIBLE_COMMANDS = ["init", "install", "update", "usage", "version"];
|
|
4642
4578
|
function collectFlagValues(argv, flag) {
|
|
4643
4579
|
const values = [];
|
|
4644
4580
|
for (let i = 0; i < argv.length; i++) {
|
|
@@ -4706,7 +4642,6 @@ Commands:
|
|
|
4706
4642
|
install Add the claude-task-worker marketplace, install the plugin, and install/update the CLI
|
|
4707
4643
|
update Update the claude-task-worker plugin/marketplace and the CLI itself
|
|
4708
4644
|
usage Notify current usage to Slack
|
|
4709
|
-
pencil <args...> Run the Pencil CLI with the asset base-URI fix loaded (passes every argument and stdin through)
|
|
4710
4645
|
version Print the installed claude-task-worker CLI version (aliases: --version, -v)
|
|
4711
4646
|
|
|
4712
4647
|
Workers:
|
|
@@ -4756,7 +4691,7 @@ if (!workerType) {
|
|
|
4756
4691
|
printUsage();
|
|
4757
4692
|
process.exit(1);
|
|
4758
4693
|
}
|
|
4759
|
-
if (workerType !== "all" && workerType !== "yolo" && workerType !== "init" && workerType !== "install" && workerType !== "update" && workerType !== "usage" &&
|
|
4694
|
+
if (workerType !== "all" && workerType !== "yolo" && workerType !== "init" && workerType !== "install" && workerType !== "update" && workerType !== "usage" && !WORKERS[workerType]) {
|
|
4760
4695
|
console.error(`Unknown command: ${workerType}`);
|
|
4761
4696
|
printUsage();
|
|
4762
4697
|
process.exit(1);
|
|
@@ -4887,8 +4822,6 @@ if (hasProjectFilter()) {
|
|
|
4887
4822
|
(async () => {
|
|
4888
4823
|
await update();
|
|
4889
4824
|
})();
|
|
4890
|
-
} else if (workerType === "pencil") {
|
|
4891
|
-
pencil(process.argv.slice(3));
|
|
4892
4825
|
} else if (workerType === "usage") {
|
|
4893
4826
|
(async () => {
|
|
4894
4827
|
const text = await buildTokenLimitText();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-task-worker",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.91.0",
|
|
4
4
|
"description": "CLI tool that polls GitHub Issues/PRs and delegates work to Claude CLI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"claude-task-worker": "dist/index.js"
|
|
9
9
|
},
|
|
10
10
|
"scripts": {
|
|
11
|
-
"build": "tsc --noEmit && esbuild src/index.ts --bundle --platform=node --format=esm --outfile=dist/index.js
|
|
11
|
+
"build": "tsc --noEmit && esbuild src/index.ts --bundle --platform=node --format=esm --outfile=dist/index.js",
|
|
12
12
|
"dev": "tsc --noEmit --watch",
|
|
13
13
|
"lint": "eslint .",
|
|
14
14
|
"lint:fix": "eslint . --fix",
|
package/dist/pen-baseuri-fix.mjs
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
// src/pen-baseuri-fix.ts
|
|
2
|
-
import { registerHooks } from "node:module";
|
|
3
|
-
import { resolve } from "node:path";
|
|
4
|
-
var BASE_URI_GETTER = /\[(_0x[0-9a-f]+)\((0x[0-9a-f]+)\)\]\(\)\{return this\[\1\((0x[0-9a-f]+)\)\]\|\|this\[\1\((0x[0-9a-f]+)\)\];\}/;
|
|
5
|
-
var PEN_CLI_MODULE = /@pen\.dev\/cli\/dist\/[^/]*\.mjs$/;
|
|
6
|
-
var ABSOLUTE_URI = /^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//;
|
|
7
|
-
function toAbsoluteUri(path) {
|
|
8
|
-
if (!path || ABSOLUTE_URI.test(path)) return path;
|
|
9
|
-
return `file://${resolve(path)}`;
|
|
10
|
-
}
|
|
11
|
-
globalThis.__penAbsURI = toAbsoluteUri;
|
|
12
|
-
registerHooks({
|
|
13
|
-
load(url, ctx, next) {
|
|
14
|
-
const loaded = next(url, ctx);
|
|
15
|
-
if (!PEN_CLI_MODULE.test(url) || !loaded.source) return loaded;
|
|
16
|
-
const source = String(loaded.source);
|
|
17
|
-
const match = BASE_URI_GETTER.exec(source);
|
|
18
|
-
if (!match) return loaded;
|
|
19
|
-
const [all, decode, methodKey, primaryKey, fallbackKey] = match;
|
|
20
|
-
return {
|
|
21
|
-
...loaded,
|
|
22
|
-
source: source.replace(
|
|
23
|
-
all,
|
|
24
|
-
`[${decode}(${methodKey})](){return globalThis.__penAbsURI(this[${decode}(${primaryKey})]||this[${decode}(${fallbackKey})]);}`
|
|
25
|
-
)
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
export {
|
|
30
|
-
toAbsoluteUri
|
|
31
|
-
};
|