input-kanban 0.0.16 → 0.0.17

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.en.md CHANGED
@@ -56,6 +56,8 @@ input-kanban submit --task "Fix the login issue and add regression tests" --labe
56
56
 
57
57
  `submit` creates a run, starts planning, dispatches all batches, and starts the final judge after all workers finish by default. The default workspace is the current directory. If `--label` is omitted, the run label is generated from the task text. It uses the same runs directory, so CLI-created runs are visible in the Web dashboard on port 8787 as long as the dashboard uses the same `--runs-dir`.
58
58
 
59
+ If your Agent can only call the CLI, run `input-kanban guide` or `input-kanban --help` to get a friendlier execution template and control loop.
60
+
59
61
  `input-kanban serve` starts a lightweight background scheduler that keeps refreshing and advancing unfinished runs: it dispatches batches when a plan is ready, starts the next serial batch after the previous one completes, and starts the final judge after all batches complete. CLI `submit --auto` / `input-kanban auto <runId>` and the Web server share the same orchestrator auto-advance path, so progress no longer depends on whether a browser page is open or refreshed.
60
62
 
61
63
  To return immediately and let a background supervisor continue the auto loop, pass `-d` / `--detach`:
package/README.md CHANGED
@@ -56,6 +56,8 @@ input-kanban submit --task "修复登录问题,并补充回归测试" --label
56
56
 
57
57
  `submit` 默认会创建任务批次、发起拆分、自动派发所有批次,并在全部完成后自动发起最终验收。默认 workspace 是当前目录;如果不传 `--label`,任务批次名称会从任务内容自动生成。它使用同一个 runs 目录,所以只要 8787 Web 看板也使用相同的 `--runs-dir`,CLI 创建的任务会在 Web 界面里可见。
58
58
 
59
+ 如果你的 Agent 只能调用 CLI,可以直接运行 `input-kanban guide` 或 `input-kanban --help`,拿到一版更友好的执行模板和控制循环。
60
+
59
61
  如果希望 Planner 拆分完成后先看一眼计划,再放行执行,可以加计划确认 Gate:
60
62
 
61
63
  ```bash
package/RELEASE_NOTES.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Release Notes
2
2
 
3
+ ## v0.0.17
4
+
5
+ ### Highlights
6
+
7
+ - Add a friendly `input-kanban guide` CLI entry that prints an agent-oriented control loop, decision rules, and ready-to-copy execution templates.
8
+ - Extend `input-kanban --help` with a visible agent guide entry point so CLI-only agents can discover the execution flow without reading repository docs.
9
+ - Add a small `docs/input-kanban-cli-README.md` entry page and a reusable `docs/input-kanban-cli-skill.md` execution guide for external-project reuse.
10
+
11
+ ### Verification
12
+
13
+ - `node --test test/cli-submit.test.js` passed locally.
14
+ - `git diff --check` passed locally.
15
+ - Windows-native validation passed on `zhangxing_win` with `npm run check` in the Windows release-candidate working tree.
16
+
3
17
  ## v0.0.16
4
18
 
5
19
  ### Highlights
@@ -7,7 +7,7 @@ import { fileURLToPath } from 'node:url';
7
7
  const PACKAGE_VERSION = JSON.parse(await fsp.readFile(new URL('../package.json', import.meta.url), 'utf8')).version;
8
8
  const VALID_RUNNERS = ['headless', 'tmux'];
9
9
  const VALID_SANDBOXES = ['read-only', 'workspace-write', 'danger-full-access'];
10
- const COMMANDS = new Set(['serve', 'submit', 'runs', 'status', 'result', 'retry', 'stop', 'auto']);
10
+ const COMMANDS = new Set(['serve', 'submit', 'runs', 'status', 'result', 'retry', 'stop', 'auto', 'guide']);
11
11
  const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
12
12
  const STATUS_TEXT = {
13
13
  created: '已创建', planning: '拆分中', plan_failed: '拆分失败', plan_empty: '拆分为空', planned: '已拆分',
@@ -167,6 +167,17 @@ function parseAutoArgs(argv) {
167
167
  return args;
168
168
  }
169
169
 
170
+ function parseGuideArgs(argv) {
171
+ const args = { json: false, help: false };
172
+ for (let i = 0; i < argv.length; i++) {
173
+ const arg = argv[i];
174
+ if (arg === '--help' || arg === '-h') args.help = true;
175
+ else if (arg === '--json' || arg === '-j') args.json = true;
176
+ else throw new Error(`unknown guide argument: ${arg}`);
177
+ }
178
+ return args;
179
+ }
180
+
170
181
  function parseSubmitArgs(argv) {
171
182
  const args = {
172
183
  host: '127.0.0.1', port: 8787, workspace: undefined, repo: undefined, runsDir: undefined, codexBin: undefined,
@@ -234,6 +245,7 @@ Usage:
234
245
  input-kanban [options]
235
246
  input-kanban serve [options]
236
247
  input-kanban submit [options]
248
+ input-kanban guide [options]
237
249
  input-kanban --version
238
250
  input-kanban runs [options]
239
251
  input-kanban status [runId] [options]
@@ -241,6 +253,9 @@ Usage:
241
253
  input-kanban retry <runId> [taskId] [options]
242
254
  input-kanban stop <runId> [options]
243
255
 
256
+ Agent guide:
257
+ input-kanban guide Print a friendly agent-oriented control loop and templates
258
+
244
259
  Serve options:
245
260
  --host <host> Host to bind, default 127.0.0.1
246
261
  -p, --port <port> Port to bind, default 8787
@@ -427,6 +442,64 @@ Options:
427
442
  `);
428
443
  }
429
444
 
445
+ function printAgentGuide(json = false) {
446
+ const quickStart = [
447
+ 'Use `input-kanban` as the execution tool.',
448
+ 'Treat `submit` as a new task identity.',
449
+ 'Treat `retry` as a new attempt for the same task.',
450
+ 'Use `status` before any state-dependent action.',
451
+ 'Use `result` for the final outcome.',
452
+ 'Use `stop` only with a known `runId`.'
453
+ ];
454
+ const templates = [
455
+ 'input-kanban submit --task "Implement the new gate workflow" --label "gate-workflow"',
456
+ 'input-kanban submit --task-file task.md',
457
+ 'input-kanban submit --task-file task.md --plan-approval',
458
+ 'input-kanban submit --task-file task.md --detach',
459
+ 'input-kanban status run_1234567890',
460
+ 'input-kanban status run_1234567890 --watch',
461
+ 'input-kanban result run_1234567890',
462
+ 'input-kanban result run_1234567890 --copy',
463
+ 'input-kanban retry run_1234567890',
464
+ 'input-kanban stop run_1234567890'
465
+ ];
466
+ if (json) {
467
+ printJson({
468
+ ok: true,
469
+ command: 'guide',
470
+ title: 'Input Kanban Agent Guide',
471
+ quickStart,
472
+ templates,
473
+ rules: [
474
+ 'submit = new task identity',
475
+ 'retry = same task definition, new attempt',
476
+ 'status = inspect before acting',
477
+ 'result = final confirmation',
478
+ 'stop = only with explicit runId'
479
+ ]
480
+ });
481
+ return;
482
+ }
483
+ console.log(`Input Kanban Agent Guide
484
+
485
+ Quick start:
486
+ ${quickStart.map(item => ` - ${item}`).join('\n')}
487
+
488
+ Core commands:
489
+ submit Create a new run for a new task identity
490
+ retry Re-attempt the same task definition with a new attempt
491
+ status Inspect current progress before acting
492
+ result Read the final outcome
493
+ stop Halt a known run
494
+
495
+ Example templates:
496
+ ${templates.map((item, index) => ` ${String(index + 1).padStart(2, '0')}. ${item}`).join('\n')}
497
+
498
+ See also:
499
+ input-kanban --help
500
+ `);
501
+ }
502
+
430
503
  function openBrowser(url) {
431
504
  const command = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'cmd' : 'xdg-open';
432
505
  const args = process.platform === 'win32' ? ['/c', 'start', '', url] : [url];
@@ -778,6 +851,11 @@ try {
778
851
  args.json = args.json || globals.json;
779
852
  if (args.help) { printSubmitHelp(); process.exit(0); }
780
853
  await submit(args);
854
+ } else if (command === 'guide') {
855
+ const args = parseGuideArgs(rest);
856
+ args.json = args.json || globals.json;
857
+ if (args.help) { printAgentGuide(args.json); process.exit(0); }
858
+ printAgentGuide(args.json);
781
859
  } else if (command === 'runs') {
782
860
  const args = parseRunsArgs(rest);
783
861
  args.json = args.json || globals.json;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "input-kanban",
3
- "version": "0.0.16",
3
+ "version": "0.0.17",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "input-kanban": "bin/input-kanban.js"