kanbango 3.6.2 → 5.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/AGENTS.md +25 -18
- package/API.md +58 -170
- package/CHANGELOG.md +76 -0
- package/LLM_AGENTS.md +21 -502
- package/README.md +45 -12
- package/agent-playbook.js +27 -49
- package/bin/kanban.js +395 -300
- package/config-wizard.js +441 -0
- package/index.html +124 -36
- package/kanban.js +892 -263
- package/mcp-server.js +319 -196
- package/package.json +1 -1
- package/plan.js +39 -40
- package/plugins/tui-kanban-controller.js +117 -0
- package/plugins/tui-kanban.tsx +314 -0
- package/workflow.js +368 -21
- package/.ai/lessons.jsonl +0 -9
- package/.ai/retro/close.json +0 -1
- package/.ai/retro/last-run.json +0 -1
- package/.ait-quality.yml +0 -25
- package/bin/kanban-cmd.js +0 -40
- package/kan2.md +0 -76
- package/kanbango.md +0 -48
- package/planv2.md +0 -317
- package/tests/fixtures/fake-opencode.js +0 -69
- package/tests/index.js +0 -19
- package/tests/kanban-cli.js +0 -118
- package/tests/kanban.js +0 -104
- package/tests/run.js +0 -33
package/agent-playbook.js
CHANGED
|
@@ -8,56 +8,40 @@ const DROP_IN_RULE = [
|
|
|
8
8
|
'Kanbango MCP — token rules:',
|
|
9
9
|
'- hierarchy: epic (context) → task (work+plan) → subtasks (steps)',
|
|
10
10
|
'- list: col filter, view=summary; keep task_ids; no full-board re-list after writes',
|
|
11
|
-
'-
|
|
12
|
-
'-
|
|
13
|
-
'-
|
|
14
|
-
'-
|
|
11
|
+
'- context: omit operation = context (wake compass: unblocked active, failed/blocked gate, manual testing/review, else next unblocked planned, else idle); optional epic=E001; prefer over list+show',
|
|
12
|
+
'- after context: one show view=planning (SPEC) or view=execution (coding); do not re-list the board',
|
|
13
|
+
'- context next_action: advance|evidence|move_testing|move_review|move_done|fix_gate|start|idle; evidence/gates need diff|summary|test_command',
|
|
14
|
+
'- PARSE_ERROR: corrupt JSON on list/context/all is an error with file path; never a partial board or idle',
|
|
15
|
+
'- list_epics default = live only (hides done + archived); include_archived / include_done / status to widen',
|
|
16
|
+
'- list default hides column=done and tasks under done/archived epics; include_done/include_archived or col=done to widen; show/show_epic by id always works',
|
|
17
|
+
'- show: view=planning for SPEC; view=execution while coding; full only if needed',
|
|
18
|
+
'- show planning/full task views may return epic_goals (parent compass); empty fields are omitted — check drift vs goal',
|
|
15
19
|
'- log architecture decisions: update adr={decision,why} append; show_epic full rolls up adrs',
|
|
16
20
|
'- epic_create with description/goals; create tasks with epic=E001 (prefer id)',
|
|
17
21
|
'- create once with description,specs,in_scope,out_of_scope,acceptance_criteria',
|
|
18
|
-
'- move/update/delete
|
|
22
|
+
'- move/update/delete/plan_*: return=none (no full card / subtasks / evidence echo); return=summary|full only when needed',
|
|
19
23
|
'- cleanup: delete (task), epic_delete (cascade tasks), epic_archive / epic_unarchive',
|
|
20
|
-
'-
|
|
21
|
-
'-
|
|
24
|
+
'- steps on create/plan_create become subtasks (no forced TDD steps); test runner optional (null if none)',
|
|
25
|
+
'- optional plan_*: plan_create → plan_advance → plan_evidence (diff|summary|test_command) → plan_done',
|
|
26
|
+
'- plan_done completes into first enabled gate (testing|review) or done; after implement move testing when that column is enabled',
|
|
27
|
+
'- depends_on: task ids that must be done before active/gates; blocked move → TASK_BLOCKED; cycle → CIRCULAR_DEPENDENCY',
|
|
28
|
+
'- list/show: blocked + unmet_dependencies + blocks; move to done returns unblocked_tasks',
|
|
29
|
+
'- files: touched paths on create/update/plan_evidence (scope for QA/review)',
|
|
22
30
|
'- move validates transitions; illegal move → INVALID_TRANSITION + allowed_columns',
|
|
23
|
-
'- allowed: icebox→planned; planned→active|icebox|testing; active→planned|testing|icebox; testing→active|review; review→active|done; done→active',
|
|
24
|
-
'-
|
|
25
|
-
'-
|
|
31
|
+
'- default allowed: icebox→planned; planned→active|icebox|testing; active→planned|testing|icebox; testing→active|review; review→active|done; done→active',
|
|
32
|
+
'- backlog/kanbango.json may disable testing/review columns (labels + migrate cards to planned) and/or disable QA/Temida spawn (manual gate)',
|
|
33
|
+
'- do not skip enabled gates: active→done illegal when testing|review on; gates spawn agents only when workflow+agent enabled',
|
|
34
|
+
'- enter testing|review (and done when gates on) only with evidence[] having diff|summary|test_command; fail/blocked cannot skip forward — EVIDENCE_REQUIRED',
|
|
35
|
+
'- gui: status before start; stop only owned; external_running = do not kill',
|
|
36
|
+
'- errors: next_tool_call only when repair is unique (TASK_NOT_FOUND, INVALID_TRANSITION); omit otherwise'
|
|
26
37
|
].join('\n');
|
|
27
38
|
|
|
28
39
|
const TOOL_DESCRIPTIONS = {
|
|
29
|
-
kanban_read:
|
|
30
|
-
'Read board. TOKEN RULES:
|
|
31
|
-
'Hierarchy: epic (container/context) → task (work) → subtasks (steps).',
|
|
32
|
-
'Always pass col when possible. Prefer show+view=execution over full.',
|
|
33
|
-
'show task (planning/execution/full) includes epic_goals (parent epic goals; "" if none) — use as compass; check progress toward goal.',
|
|
34
|
-
'execution/full also include adr[]; show_epic full rolls up child adrs (not stored on epic file).',
|
|
35
|
-
'list_epics default live only (empty|planned|active; hides done+archived).',
|
|
36
|
-
'Pass include_archived=true or status=done|archived to see closed initiatives.',
|
|
37
|
-
'list hides tasks under done/archived epics unless include_archived/include_done; show/show_epic by id always works.',
|
|
38
|
-
'Do not re-list the whole board after every write — keep task_id from create/move.',
|
|
39
|
-
'Task IDs numeric ("014"); epic IDs "E001". views: summary|planning|execution|full; fields[] overrides view.',
|
|
40
|
-
'operation=help returns this playbook as short text (no board I/O).'
|
|
41
|
-
].join(' '),
|
|
40
|
+
kanban_read:
|
|
41
|
+
'Read board. TOKEN RULES: omit operation=context on wake; list view=summary; operation=help for the playbook.',
|
|
42
42
|
|
|
43
|
-
kanban_manage:
|
|
44
|
-
'Write board / plan. TOKEN RULES: one create
|
|
45
|
-
'after write use return=none (or summary). Do not dump full task unless needed.',
|
|
46
|
-
'Actions: create|move|update|delete (daily); epic_create|epic_update|epic_archive|epic_unarchive|epic_delete;',
|
|
47
|
-
'plan_create→plan_advance→plan_evidence→plan_done (non-trivial only; plan_done → testing gate).',
|
|
48
|
-
'After implement: move testing (return=none). Illegal move → INVALID_TRANSITION with allowed_columns.',
|
|
49
|
-
'Transitions: icebox→planned; planned→active|icebox|testing; active→planned|testing|icebox;',
|
|
50
|
-
'testing→active|review; review→active|done; done→active. active→done is illegal.',
|
|
51
|
-
'epic_create: title + description/goals/in_scope/out_of_scope. Link tasks via epic=E001.',
|
|
52
|
-
'Log architecture decisions on the task: update with adr={decision,why} appends one entry (why this choice).',
|
|
53
|
-
'delete: task_id (hard remove). epic_delete: epic_id, always cascades child tasks.',
|
|
54
|
-
'epic_archive/epic_unarchive: epic_id — hide/restore initiative without deleting history.',
|
|
55
|
-
'create/plan_create: title required; also send description,specs,in_scope,out_of_scope,acceptance_criteria',
|
|
56
|
-
'(missing → warnings, not failure). move: task_id+column. update: task_id + fields or subtasks[] full list',
|
|
57
|
-
'(no toggle). plan_evidence needs real test run: diff,test_command,stdout,stderr,exit_code — truncate logs.',
|
|
58
|
-
'Example create: {"action":"create","title":"Ship image","epic":"E001","description":"...","specs":"...",',
|
|
59
|
-
'"in_scope":["CLI"],"out_of_scope":["GUI"],"acceptance_criteria":["npm test passes"],"col":"planned"}'
|
|
60
|
-
].join(' '),
|
|
43
|
+
kanban_manage:
|
|
44
|
+
'Write board / plan. TOKEN RULES: one create beats many updates; after write return=none; kanban_read operation=help for the playbook.',
|
|
61
45
|
|
|
62
46
|
kanban_gui: [
|
|
63
47
|
'Web GUI control. Prefer status before start. stop only kills GUI this MCP spawned;',
|
|
@@ -70,14 +54,8 @@ const MUST_CONTAIN = [
|
|
|
70
54
|
'TOKEN RULES',
|
|
71
55
|
'view=summary',
|
|
72
56
|
'return=none',
|
|
73
|
-
'
|
|
74
|
-
'external_running'
|
|
75
|
-
'subtasks',
|
|
76
|
-
'epic_create',
|
|
77
|
-
'epic_archive',
|
|
78
|
-
'epic_delete',
|
|
79
|
-
'epic_goals',
|
|
80
|
-
'adr'
|
|
57
|
+
'help',
|
|
58
|
+
'external_running'
|
|
81
59
|
];
|
|
82
60
|
|
|
83
61
|
function playbookHelpPayload() {
|