kenaz 0.3.3 → 0.3.6
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/core/.agents/skills/typesafe-ai/LICENSE +21 -21
- package/core/.agents/skills/typesafe-ai/SKILL.md +149 -149
- package/core/.claude/commands/Ansuz.md +15 -2
- package/core/.claude/hooks/__tests__/task-2395-project-registration.test.js +84 -0
- package/core/.claude/hooks/handoff-staleness.js +2 -2
- package/core/.claude/hooks/session-init.ps1 +49 -49
- package/core/.claude/hooks/turn-context.js +50 -2
- package/core/.claude/skills/ui-ux-pro-max/data/charts.csv +26 -26
- package/core/.claude/skills/ui-ux-pro-max/data/colors.csv +97 -97
- package/core/.claude/skills/ui-ux-pro-max/data/icons.csv +101 -101
- package/core/.claude/skills/ui-ux-pro-max/data/landing.csv +31 -31
- package/core/.claude/skills/ui-ux-pro-max/data/products.csv +96 -96
- package/core/.claude/skills/ui-ux-pro-max/data/react-performance.csv +45 -45
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -54
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -53
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -52
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/react.csv +54 -54
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -54
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
- package/core/.claude/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -50
- package/core/.claude/skills/ui-ux-pro-max/data/styles.csv +68 -68
- package/core/.claude/skills/ui-ux-pro-max/data/typography.csv +57 -57
- package/core/.claude/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -101
- package/core/.claude/skills/ui-ux-pro-max/data/ux-guidelines.csv +99 -99
- package/core/.claude/skills/ui-ux-pro-max/data/web-interface.csv +31 -31
- package/core/.claude/skills/ui-ux-pro-max/scripts/core.py +253 -253
- package/core/.claude/skills/ui-ux-pro-max/scripts/design_system.py +1067 -1067
- package/core/.claude/skills/ui-ux-pro-max/scripts/search.py +106 -106
- package/core/.collaboration/core/task-api.js +1 -4
- package/core/.formation/README.md +21 -146
- package/core/.formation/bifrost/codex-doctor.js +37 -2
- package/core/.formation/bifrost/codex-doctor.test.js +18 -0
- package/core/.formation/bifrost/launch.js +1 -1
- package/core/.formation/bifrost/openai/codex-hook-shim.js +6 -0
- package/core/.formation/bifrost/openai/codex-hook-shim.test.js +11 -1
- package/core/.formation/bifrost/setup-codex.js +3 -0
- package/core/.formation/native/claude/README.md +1 -1
- package/core/.formation/role-map.yaml +3 -3
- package/core/.formation/spec/task_operations.parity.test.js +0 -1
- package/core/.formation/spec/task_operations.yaml +3 -3
- package/core/.formation/tests/hello.txt +2 -2
- package/core/.formation/tools/__tests__/subagent-bifrost-guard.test.js +4 -4
- package/core/.formation/tools/dashboard-models-chain.test.js +0 -6
- package/core/.formation/tools/dispatch-detail/cross-project-worktree.md +1 -9
- package/core/.formation/tools/dispatch-detail/worktree-subagent-mode.md +2 -2
- package/core/.formation/tools/dispatch.js +33 -554
- package/core/.formation/tools/mcp-allowlist.test.js +0 -1
- package/core/.formation/tools/post-complete/task2345.test.js +0 -5
- package/core/.formation/tools/pre-dispatch-snapshot.test.js +0 -100
- package/core/.formation/tools/prompt.js +33 -1623
- package/core/.formation/tools/prompt.test.js +26 -594
- package/core/.formation/unit/do.yaml +2 -4
- package/core/.kenaz/knowledge/ladybug_2c51da1e_shadow_file_frame_group.patch +163 -163
- package/core/.kenaz/knowledge/ladybug_30cf85690e_shadow_page_read_during_checkpoint.patch +393 -393
- package/core/.kenaz/knowledge/ladybug_7a17858d3a_node_group_delete_lock.patch +102 -102
- package/core/.kenaz/knowledge/ladybug_926a0ba1_column_checkpoint.patch +412 -412
- package/core/.kenaz/knowledge/ladybug_a346c4c4b6_pk_index_header_pages.patch +144 -144
- package/core/.kenaz/knowledge/ladybug_ba5f38815b_csr_node_group.patch +86 -86
- package/core/.kenaz/muninn_episode_write.ps1 +17 -17
- package/core/.kenaz/specialist/field_report_watermark.json +1 -1
- package/core/.kenaz/specialist/memory_guard_fired.json +1 -1
- package/core/.kenaz/specialist/memory_guard_trigger_cache.json +1 -1
- package/core/.kenaz/specialist/t1777_probe.txt +1 -1
- package/core/.matrix/index.matrix +5 -5
- package/core/.rule/general/agent-workflow.yaml +4 -4
- package/core/.rule/general/file-size-threshold.yaml +16 -4
- package/core/.rule/general/rust-verify-target.yaml +0 -1
- package/core/.rule/general/system-invariants.yaml +8 -25
- package/core/.specialist/Ansuz/SYSTEM_DOC.md +17 -42
- package/core/.specialist/Ansuz/capability.yaml +7 -14
- package/core/.specialist/Ansuz/concepts/formation_quick_ref.yaml +4 -11
- package/core/.specialist/Ansuz/elixir.yaml +3 -4
- package/core/.specialist/Ansuz/identity_contract.yaml +1 -1
- package/core/.specialist/Ansuz/knowledge.yaml +7 -10
- package/core/.specialist/Ansuz/rule.yaml +2 -2
- package/core/.specialist/Ansuz/tools/verify-and-land.js +22 -0
- package/core/.specialist/Ansuz/tools/verify-and-land.test.js +59 -5
- package/core/.specialist/Ansuz/workflow.yaml +7 -11
- package/core/.specialist/Forseti/core.yaml +1 -1
- package/core/.specialist/Heimdall/SKILL.md +1 -1
- package/core/.specialist/Heimdall/core.yaml +2 -2
- package/core/.specialist/Huginn/rule.yaml +1 -1
- package/core/.specialist/tools/README.md +2 -2
- package/core/.specialist/tools/__tests__/freya-cli-contract.test.js +0 -1
- package/core/.system/collaboration/README.md +1 -1
- package/core/.system/formation/LEGACY_SKILLS.md +2 -0
- package/core/.system/formation/POST_COMPLETE.md +2 -0
- package/core/.system/formation/README.md +2 -0
- package/core/KENAZ_CORE_VERSION +1 -1
- package/core/dev/ANSUZ_STARTUP_INJECTION_REVIEW.md +355 -355
- package/core/dev/JEV_INTEGRATION_PLAN.md +189 -189
- package/core/dev/design/matrix_format_EXAMPLE_memory.matrix +13 -13
- package/core/dev/design/matrix_format_EXAMPLE_project_status.matrix +9 -9
- package/core/dev/design/matrix_format_EXAMPLE_tasks.matrix +14 -14
- package/core/dev/design/matrix_v2_EXAMPLE.matrix +67 -67
- package/core/dev/jev-eval/ACTIVE_CORRECTION.md +52 -52
- package/core/dev/jev-eval/CONTEXT_REVIEW.md +31 -31
- package/core/dev/jev-eval/EVALUATION_STATUS.md +39 -39
- package/core/dev/jev-eval/HISTORICAL_CORPUS.md +33 -33
- package/core/dev/jev-eval/README.md +99 -99
- package/core/dev/jev-eval/THALAMUS_RANKING.md +58 -58
- package/core/dev/jev-eval/reports/annotation-pilot-2026-09-20.json +32 -32
- package/core/dev/jev-eval/reports/context-review-2026-09-20.json +48 -48
- package/core/dev/jev-eval/reports/history-corpus-2026-09-20.json +52 -52
- package/core/dev/pipeline/SELF_ENHANCEMENT_STATUS.json.bak +47 -47
- package/core/dev/pipeline/tasks/.gitkeep +1 -1
- package/core/dev/pipeline/test_results/TASK_TEST_PARALLEL_002_result.txt +27 -27
- package/core/dev/scripts/check-file-size.js +44 -17
- package/core/dev/scripts/init_git.sh +0 -0
- package/core/dev/scripts/init_project.sh +0 -0
- package/core/dev/scripts/legacy/dev_agent_scheduler.ps1.bak +536 -536
- package/core/dev/scripts/legacy/multi_agent_scheduler.ps1.bak +1978 -1978
- package/core/dev/scripts/matrix/src/cli/commands/list-tags.ts.wip +140 -140
- package/core/dev/scripts/matrix/src/cli/commands/manage-tags.ts.wip +173 -173
- package/core/dev/scripts/matrix/src/cli/commands/stats.ts.wip +168 -168
- package/core/dev/scripts/matrix/src/cli/commands/tokens.ts.wip +126 -126
- package/core/dev/scripts/multi_agent_scheduler.sh +0 -0
- package/core/dev/scripts/run_once.sh +0 -0
- package/core/dev/scripts/setup_mcp.sh +0 -0
- package/core/dev/scripts/setup_rag.sh +0 -0
- package/core/dev/scripts/start_dev_agent.sh +0 -0
- package/core/dev/scripts/start_multi_agent.sh +0 -0
- package/core/dev/scripts/sync_task_queue.sh +0 -0
- package/core/k-cli/README.md +1 -94
- package/core/k-cli/test/TEST_SPEC.md +5 -22
- package/core/k-cli/test/run.sh +1 -67
- package/core/plugins/kenaz/commands/Amelia.md +1 -1
- package/core/plugins/kenaz/commands/Ansuz.md +16 -3
- package/core/plugins/kenaz/scripts/kenaz-mode.js +11 -1
- package/core/plugins/kenaz/scripts/sync.js +6 -2
- package/core/plugins/kenaz/scripts/ygg.js +13 -1
- package/core/plugins/kenaz/skills/product_manager/SKILL.md +12 -12
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/charts.csv +26 -26
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/colors.csv +97 -97
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/icons.csv +101 -101
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/landing.csv +31 -31
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/products.csv +96 -96
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/react-performance.csv +45 -45
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -54
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -53
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -52
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/react.csv +54 -54
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -54
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -50
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/styles.csv +68 -68
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/typography.csv +57 -57
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -101
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/ux-guidelines.csv +99 -99
- package/core/plugins/kenaz/skills/ui-ux-pro-max/data/web-interface.csv +31 -31
- package/core/plugins/kenaz/skills/ui-ux-pro-max/scripts/core.py +253 -253
- package/core/plugins/kenaz/skills/ui-ux-pro-max/scripts/design_system.py +1067 -1067
- package/core/plugins/kenaz/skills/ui-ux-pro-max/scripts/search.py +106 -106
- package/lib/cli.js +11 -4
- package/package.json +11 -7
- package/vendor/install-kenaz-cli.js +18 -7
- package/core/.formation/legion/forge.yaml +0 -299
- package/core/.formation/legion/hive.yaml +0 -238
- package/core/.formation/squad/blitz.yaml +0 -192
- package/core/.formation/squad/strategy-tribunal.yaml +0 -354
- package/core/.formation/squad/strategy.yaml +0 -349
- package/core/.formation/squad/sweep.yaml +0 -208
- package/core/.formation/tools/broadcast.js +0 -103
- package/core/.formation/tools/dispatch-dryrun.test.js +0 -54
- package/core/.formation/tools/dispatch-notifier.js +0 -84
- package/core/.formation/tools/formations.js +0 -1203
- package/core/.formation/tools/headless-branch-recovery.test.js +0 -64
- package/core/.formation/tools/headless-dryrun.test.js +0 -79
- package/core/.formation/tools/headless-v2.js +0 -659
- package/core/.formation/tools/headless.js +0 -1071
- package/core/.formation/tools/legacy-scheduler.js +0 -1994
- package/core/.formation/tools/logger.js +0 -273
- package/core/.formation/tools/memory-loader.js +0 -422
- package/core/.formation/tools/process-state.js +0 -33
- package/core/.formation/tools/remote-conflict.js +0 -98
- package/core/.formation/tools/runner.js +0 -1332
- package/core/.formation/tools/task-utils.js +0 -344
- package/core/.formation/tools/task2028-headless-worktree.test.js +0 -112
- package/core/.formation/tools/tests/headless-mcp-args-plumbing.test.js +0 -123
- package/core/.formation/tools/worktree-leak.test.js +0 -162
- package/core/k-cli/dist/alaya/run.js +0 -91
- package/core/k-cli/dist/core/output.js +0 -24
- package/core/k-cli/dist/core/process.js +0 -38
- package/core/k-cli/dist/core/project.js +0 -80
- package/core/k-cli/dist/core/spawn.js +0 -268
- package/core/k-cli/dist/core/types.js +0 -2
- package/core/k-cli/dist/dashboard/update.js +0 -53
- package/core/k-cli/dist/dashboard/version.js +0 -20
- package/core/k-cli/dist/dispatch/run.js +0 -241
- package/core/k-cli/dist/dispatch/status.js +0 -103
- package/core/k-cli/dist/index.js +0 -283
- package/core/k-cli/dist/project/initialize.js +0 -301
- package/core/k-cli/dist/project/install.js +0 -89
- package/core/k-cli/dist/project/status.js +0 -138
- package/core/k-cli/dist/specialist/list.js +0 -100
- package/core/k-cli/dist/specialist/run.js +0 -93
- package/core/k-cli/dist/task/create.js +0 -194
- package/core/k-cli/dist/task/delete.js +0 -98
- package/core/k-cli/dist/task/get.js +0 -55
- package/core/k-cli/dist/task/list.js +0 -58
- package/core/k-cli/dist/task/submit.js +0 -156
- package/core/k-cli/dist/ygg/run.js +0 -51
- package/core/k-cli/node_modules/.bin/yaml +0 -16
- package/core/k-cli/node_modules/.bin/yaml.cmd +0 -17
- package/core/k-cli/node_modules/.bin/yaml.ps1 +0 -28
- package/core/k-cli/node_modules/.package-lock.json +0 -23
- package/core/k-cli/node_modules/yaml/LICENSE +0 -13
- package/core/k-cli/node_modules/yaml/README.md +0 -172
- package/core/k-cli/node_modules/yaml/bin.mjs +0 -11
- package/core/k-cli/node_modules/yaml/browser/dist/compose/compose-collection.js +0 -88
- package/core/k-cli/node_modules/yaml/browser/dist/compose/compose-doc.js +0 -43
- package/core/k-cli/node_modules/yaml/browser/dist/compose/compose-node.js +0 -109
- package/core/k-cli/node_modules/yaml/browser/dist/compose/compose-scalar.js +0 -86
- package/core/k-cli/node_modules/yaml/browser/dist/compose/composer.js +0 -217
- package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-block-map.js +0 -115
- package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +0 -198
- package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +0 -49
- package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-end.js +0 -37
- package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +0 -207
- package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +0 -223
- package/core/k-cli/node_modules/yaml/browser/dist/compose/resolve-props.js +0 -146
- package/core/k-cli/node_modules/yaml/browser/dist/compose/util-contains-newline.js +0 -34
- package/core/k-cli/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +0 -26
- package/core/k-cli/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +0 -15
- package/core/k-cli/node_modules/yaml/browser/dist/compose/util-map-includes.js +0 -13
- package/core/k-cli/node_modules/yaml/browser/dist/doc/Document.js +0 -335
- package/core/k-cli/node_modules/yaml/browser/dist/doc/anchors.js +0 -71
- package/core/k-cli/node_modules/yaml/browser/dist/doc/applyReviver.js +0 -55
- package/core/k-cli/node_modules/yaml/browser/dist/doc/createNode.js +0 -88
- package/core/k-cli/node_modules/yaml/browser/dist/doc/directives.js +0 -176
- package/core/k-cli/node_modules/yaml/browser/dist/errors.js +0 -57
- package/core/k-cli/node_modules/yaml/browser/dist/index.js +0 -17
- package/core/k-cli/node_modules/yaml/browser/dist/log.js +0 -11
- package/core/k-cli/node_modules/yaml/browser/dist/nodes/Alias.js +0 -114
- package/core/k-cli/node_modules/yaml/browser/dist/nodes/Collection.js +0 -147
- package/core/k-cli/node_modules/yaml/browser/dist/nodes/Node.js +0 -38
- package/core/k-cli/node_modules/yaml/browser/dist/nodes/Pair.js +0 -36
- package/core/k-cli/node_modules/yaml/browser/dist/nodes/Scalar.js +0 -24
- package/core/k-cli/node_modules/yaml/browser/dist/nodes/YAMLMap.js +0 -144
- package/core/k-cli/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +0 -113
- package/core/k-cli/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +0 -63
- package/core/k-cli/node_modules/yaml/browser/dist/nodes/identity.js +0 -36
- package/core/k-cli/node_modules/yaml/browser/dist/nodes/toJS.js +0 -37
- package/core/k-cli/node_modules/yaml/browser/dist/parse/cst-scalar.js +0 -214
- package/core/k-cli/node_modules/yaml/browser/dist/parse/cst-stringify.js +0 -61
- package/core/k-cli/node_modules/yaml/browser/dist/parse/cst-visit.js +0 -97
- package/core/k-cli/node_modules/yaml/browser/dist/parse/cst.js +0 -98
- package/core/k-cli/node_modules/yaml/browser/dist/parse/lexer.js +0 -717
- package/core/k-cli/node_modules/yaml/browser/dist/parse/line-counter.js +0 -39
- package/core/k-cli/node_modules/yaml/browser/dist/parse/parser.js +0 -967
- package/core/k-cli/node_modules/yaml/browser/dist/public-api.js +0 -102
- package/core/k-cli/node_modules/yaml/browser/dist/schema/Schema.js +0 -37
- package/core/k-cli/node_modules/yaml/browser/dist/schema/common/map.js +0 -17
- package/core/k-cli/node_modules/yaml/browser/dist/schema/common/null.js +0 -15
- package/core/k-cli/node_modules/yaml/browser/dist/schema/common/seq.js +0 -17
- package/core/k-cli/node_modules/yaml/browser/dist/schema/common/string.js +0 -14
- package/core/k-cli/node_modules/yaml/browser/dist/schema/core/bool.js +0 -19
- package/core/k-cli/node_modules/yaml/browser/dist/schema/core/float.js +0 -43
- package/core/k-cli/node_modules/yaml/browser/dist/schema/core/int.js +0 -38
- package/core/k-cli/node_modules/yaml/browser/dist/schema/core/schema.js +0 -23
- package/core/k-cli/node_modules/yaml/browser/dist/schema/json/schema.js +0 -62
- package/core/k-cli/node_modules/yaml/browser/dist/schema/tags.js +0 -96
- package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +0 -58
- package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +0 -26
- package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +0 -46
- package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +0 -71
- package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +0 -64
- package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +0 -74
- package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +0 -78
- package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +0 -39
- package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +0 -93
- package/core/k-cli/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +0 -101
- package/core/k-cli/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +0 -146
- package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringify.js +0 -129
- package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +0 -153
- package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyComment.js +0 -20
- package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +0 -85
- package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +0 -24
- package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyPair.js +0 -150
- package/core/k-cli/node_modules/yaml/browser/dist/stringify/stringifyString.js +0 -336
- package/core/k-cli/node_modules/yaml/browser/dist/util.js +0 -11
- package/core/k-cli/node_modules/yaml/browser/dist/visit.js +0 -233
- package/core/k-cli/node_modules/yaml/browser/index.js +0 -5
- package/core/k-cli/node_modules/yaml/browser/package.json +0 -3
- package/core/k-cli/node_modules/yaml/dist/cli.d.ts +0 -8
- package/core/k-cli/node_modules/yaml/dist/cli.mjs +0 -201
- package/core/k-cli/node_modules/yaml/dist/compose/compose-collection.d.ts +0 -11
- package/core/k-cli/node_modules/yaml/dist/compose/compose-collection.js +0 -90
- package/core/k-cli/node_modules/yaml/dist/compose/compose-doc.d.ts +0 -7
- package/core/k-cli/node_modules/yaml/dist/compose/compose-doc.js +0 -45
- package/core/k-cli/node_modules/yaml/dist/compose/compose-node.d.ts +0 -29
- package/core/k-cli/node_modules/yaml/dist/compose/compose-node.js +0 -112
- package/core/k-cli/node_modules/yaml/dist/compose/compose-scalar.d.ts +0 -5
- package/core/k-cli/node_modules/yaml/dist/compose/compose-scalar.js +0 -88
- package/core/k-cli/node_modules/yaml/dist/compose/composer.d.ts +0 -63
- package/core/k-cli/node_modules/yaml/dist/compose/composer.js +0 -222
- package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-map.d.ts +0 -6
- package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-map.js +0 -117
- package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +0 -11
- package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-scalar.js +0 -200
- package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +0 -6
- package/core/k-cli/node_modules/yaml/dist/compose/resolve-block-seq.js +0 -51
- package/core/k-cli/node_modules/yaml/dist/compose/resolve-end.d.ts +0 -6
- package/core/k-cli/node_modules/yaml/dist/compose/resolve-end.js +0 -39
- package/core/k-cli/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +0 -7
- package/core/k-cli/node_modules/yaml/dist/compose/resolve-flow-collection.js +0 -209
- package/core/k-cli/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +0 -10
- package/core/k-cli/node_modules/yaml/dist/compose/resolve-flow-scalar.js +0 -225
- package/core/k-cli/node_modules/yaml/dist/compose/resolve-props.d.ts +0 -23
- package/core/k-cli/node_modules/yaml/dist/compose/resolve-props.js +0 -148
- package/core/k-cli/node_modules/yaml/dist/compose/util-contains-newline.d.ts +0 -2
- package/core/k-cli/node_modules/yaml/dist/compose/util-contains-newline.js +0 -36
- package/core/k-cli/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +0 -2
- package/core/k-cli/node_modules/yaml/dist/compose/util-empty-scalar-position.js +0 -28
- package/core/k-cli/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +0 -3
- package/core/k-cli/node_modules/yaml/dist/compose/util-flow-indent-check.js +0 -17
- package/core/k-cli/node_modules/yaml/dist/compose/util-map-includes.d.ts +0 -4
- package/core/k-cli/node_modules/yaml/dist/compose/util-map-includes.js +0 -15
- package/core/k-cli/node_modules/yaml/dist/doc/Document.d.ts +0 -141
- package/core/k-cli/node_modules/yaml/dist/doc/Document.js +0 -337
- package/core/k-cli/node_modules/yaml/dist/doc/anchors.d.ts +0 -24
- package/core/k-cli/node_modules/yaml/dist/doc/anchors.js +0 -76
- package/core/k-cli/node_modules/yaml/dist/doc/applyReviver.d.ts +0 -9
- package/core/k-cli/node_modules/yaml/dist/doc/applyReviver.js +0 -57
- package/core/k-cli/node_modules/yaml/dist/doc/createNode.d.ts +0 -17
- package/core/k-cli/node_modules/yaml/dist/doc/createNode.js +0 -90
- package/core/k-cli/node_modules/yaml/dist/doc/directives.d.ts +0 -49
- package/core/k-cli/node_modules/yaml/dist/doc/directives.js +0 -178
- package/core/k-cli/node_modules/yaml/dist/errors.d.ts +0 -21
- package/core/k-cli/node_modules/yaml/dist/errors.js +0 -62
- package/core/k-cli/node_modules/yaml/dist/index.d.ts +0 -25
- package/core/k-cli/node_modules/yaml/dist/index.js +0 -50
- package/core/k-cli/node_modules/yaml/dist/log.d.ts +0 -3
- package/core/k-cli/node_modules/yaml/dist/log.js +0 -19
- package/core/k-cli/node_modules/yaml/dist/nodes/Alias.d.ts +0 -29
- package/core/k-cli/node_modules/yaml/dist/nodes/Alias.js +0 -116
- package/core/k-cli/node_modules/yaml/dist/nodes/Collection.d.ts +0 -73
- package/core/k-cli/node_modules/yaml/dist/nodes/Collection.js +0 -151
- package/core/k-cli/node_modules/yaml/dist/nodes/Node.d.ts +0 -53
- package/core/k-cli/node_modules/yaml/dist/nodes/Node.js +0 -40
- package/core/k-cli/node_modules/yaml/dist/nodes/Pair.d.ts +0 -22
- package/core/k-cli/node_modules/yaml/dist/nodes/Pair.js +0 -39
- package/core/k-cli/node_modules/yaml/dist/nodes/Scalar.d.ts +0 -43
- package/core/k-cli/node_modules/yaml/dist/nodes/Scalar.js +0 -27
- package/core/k-cli/node_modules/yaml/dist/nodes/YAMLMap.d.ts +0 -53
- package/core/k-cli/node_modules/yaml/dist/nodes/YAMLMap.js +0 -147
- package/core/k-cli/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +0 -60
- package/core/k-cli/node_modules/yaml/dist/nodes/YAMLSeq.js +0 -115
- package/core/k-cli/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +0 -4
- package/core/k-cli/node_modules/yaml/dist/nodes/addPairToJSMap.js +0 -65
- package/core/k-cli/node_modules/yaml/dist/nodes/identity.d.ts +0 -23
- package/core/k-cli/node_modules/yaml/dist/nodes/identity.js +0 -53
- package/core/k-cli/node_modules/yaml/dist/nodes/toJS.d.ts +0 -29
- package/core/k-cli/node_modules/yaml/dist/nodes/toJS.js +0 -39
- package/core/k-cli/node_modules/yaml/dist/options.d.ts +0 -350
- package/core/k-cli/node_modules/yaml/dist/parse/cst-scalar.d.ts +0 -64
- package/core/k-cli/node_modules/yaml/dist/parse/cst-scalar.js +0 -218
- package/core/k-cli/node_modules/yaml/dist/parse/cst-stringify.d.ts +0 -8
- package/core/k-cli/node_modules/yaml/dist/parse/cst-stringify.js +0 -63
- package/core/k-cli/node_modules/yaml/dist/parse/cst-visit.d.ts +0 -39
- package/core/k-cli/node_modules/yaml/dist/parse/cst-visit.js +0 -99
- package/core/k-cli/node_modules/yaml/dist/parse/cst.d.ts +0 -109
- package/core/k-cli/node_modules/yaml/dist/parse/cst.js +0 -112
- package/core/k-cli/node_modules/yaml/dist/parse/lexer.d.ts +0 -87
- package/core/k-cli/node_modules/yaml/dist/parse/lexer.js +0 -719
- package/core/k-cli/node_modules/yaml/dist/parse/line-counter.d.ts +0 -22
- package/core/k-cli/node_modules/yaml/dist/parse/line-counter.js +0 -41
- package/core/k-cli/node_modules/yaml/dist/parse/parser.d.ts +0 -84
- package/core/k-cli/node_modules/yaml/dist/parse/parser.js +0 -972
- package/core/k-cli/node_modules/yaml/dist/public-api.d.ts +0 -44
- package/core/k-cli/node_modules/yaml/dist/public-api.js +0 -107
- package/core/k-cli/node_modules/yaml/dist/schema/Schema.d.ts +0 -17
- package/core/k-cli/node_modules/yaml/dist/schema/Schema.js +0 -39
- package/core/k-cli/node_modules/yaml/dist/schema/common/map.d.ts +0 -2
- package/core/k-cli/node_modules/yaml/dist/schema/common/map.js +0 -19
- package/core/k-cli/node_modules/yaml/dist/schema/common/null.d.ts +0 -4
- package/core/k-cli/node_modules/yaml/dist/schema/common/null.js +0 -17
- package/core/k-cli/node_modules/yaml/dist/schema/common/seq.d.ts +0 -2
- package/core/k-cli/node_modules/yaml/dist/schema/common/seq.js +0 -19
- package/core/k-cli/node_modules/yaml/dist/schema/common/string.d.ts +0 -2
- package/core/k-cli/node_modules/yaml/dist/schema/common/string.js +0 -16
- package/core/k-cli/node_modules/yaml/dist/schema/core/bool.d.ts +0 -4
- package/core/k-cli/node_modules/yaml/dist/schema/core/bool.js +0 -21
- package/core/k-cli/node_modules/yaml/dist/schema/core/float.d.ts +0 -4
- package/core/k-cli/node_modules/yaml/dist/schema/core/float.js +0 -47
- package/core/k-cli/node_modules/yaml/dist/schema/core/int.d.ts +0 -4
- package/core/k-cli/node_modules/yaml/dist/schema/core/int.js +0 -42
- package/core/k-cli/node_modules/yaml/dist/schema/core/schema.d.ts +0 -1
- package/core/k-cli/node_modules/yaml/dist/schema/core/schema.js +0 -25
- package/core/k-cli/node_modules/yaml/dist/schema/json/schema.d.ts +0 -2
- package/core/k-cli/node_modules/yaml/dist/schema/json/schema.js +0 -64
- package/core/k-cli/node_modules/yaml/dist/schema/json-schema.d.ts +0 -69
- package/core/k-cli/node_modules/yaml/dist/schema/tags.d.ts +0 -48
- package/core/k-cli/node_modules/yaml/dist/schema/tags.js +0 -99
- package/core/k-cli/node_modules/yaml/dist/schema/types.d.ts +0 -92
- package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +0 -2
- package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/binary.js +0 -70
- package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +0 -7
- package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/bool.js +0 -29
- package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +0 -4
- package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/float.js +0 -50
- package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +0 -5
- package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/int.js +0 -76
- package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +0 -9
- package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/merge.js +0 -68
- package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +0 -22
- package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/omap.js +0 -77
- package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +0 -10
- package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +0 -82
- package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +0 -1
- package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/schema.js +0 -41
- package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +0 -28
- package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/set.js +0 -96
- package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +0 -6
- package/core/k-cli/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +0 -105
- package/core/k-cli/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +0 -34
- package/core/k-cli/node_modules/yaml/dist/stringify/foldFlowLines.js +0 -151
- package/core/k-cli/node_modules/yaml/dist/stringify/stringify.d.ts +0 -21
- package/core/k-cli/node_modules/yaml/dist/stringify/stringify.js +0 -132
- package/core/k-cli/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +0 -17
- package/core/k-cli/node_modules/yaml/dist/stringify/stringifyCollection.js +0 -155
- package/core/k-cli/node_modules/yaml/dist/stringify/stringifyComment.d.ts +0 -10
- package/core/k-cli/node_modules/yaml/dist/stringify/stringifyComment.js +0 -24
- package/core/k-cli/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +0 -4
- package/core/k-cli/node_modules/yaml/dist/stringify/stringifyDocument.js +0 -87
- package/core/k-cli/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +0 -2
- package/core/k-cli/node_modules/yaml/dist/stringify/stringifyNumber.js +0 -26
- package/core/k-cli/node_modules/yaml/dist/stringify/stringifyPair.d.ts +0 -3
- package/core/k-cli/node_modules/yaml/dist/stringify/stringifyPair.js +0 -152
- package/core/k-cli/node_modules/yaml/dist/stringify/stringifyString.d.ts +0 -9
- package/core/k-cli/node_modules/yaml/dist/stringify/stringifyString.js +0 -338
- package/core/k-cli/node_modules/yaml/dist/test-events.d.ts +0 -4
- package/core/k-cli/node_modules/yaml/dist/test-events.js +0 -134
- package/core/k-cli/node_modules/yaml/dist/util.d.ts +0 -16
- package/core/k-cli/node_modules/yaml/dist/util.js +0 -28
- package/core/k-cli/node_modules/yaml/dist/visit.d.ts +0 -102
- package/core/k-cli/node_modules/yaml/dist/visit.js +0 -236
- package/core/k-cli/node_modules/yaml/package.json +0 -97
- package/core/k-cli/node_modules/yaml/util.js +0 -2
package/core/k-cli/README.md
CHANGED
|
@@ -33,7 +33,7 @@ cat k-cli.md
|
|
|
33
33
|
## 核心價值
|
|
34
34
|
|
|
35
35
|
- **零依賴**:不需要 Dashboard 運行,直接呼叫底層工具
|
|
36
|
-
- **spawnClaude 架構**:寫入操作透過 `spawnClaude` 直接啟動 Claude CLI
|
|
36
|
+
- **spawnClaude 架構**:寫入操作透過 `spawnClaude` 直接啟動 Claude CLI
|
|
37
37
|
- **dry-run 支援**:所有寫入命令支援 `--dry-run`,驗證但不執行
|
|
38
38
|
- **可腳本化**:所有輸出支援 `--json` 格式,方便 pipe 和自動化
|
|
39
39
|
- **明確偵測**:不猜測、不 fallback、不向上找目錄,偵測失敗就是失敗
|
|
@@ -50,8 +50,6 @@ cat k-cli.md
|
|
|
50
50
|
| 讀取 | specialist list, task list, task get, project status... | 直接呼叫 |
|
|
51
51
|
| 寫入(任務) | task create | → spawnClaude + Ansuz(分析需求 → Amelia 審查 role → 建立) |
|
|
52
52
|
| 刪除 | task delete | → 直接 rm 檔案 |
|
|
53
|
-
| 調度 | dispatch run TASK_XXX | → spawnClaude + Ansuz(讀 role → 判斷陣型 → headless.js) |
|
|
54
|
-
| 調度 | dispatch run --auto | → spawnClaude + Ansuz(掃描 backlog → 逐個 dispatch) |
|
|
55
53
|
| 執行 | specialist run | → spawnClaude + 指定 Specialist |
|
|
56
54
|
|
|
57
55
|
## 命令一覽
|
|
@@ -149,65 +147,13 @@ k-cli task create "描述"
|
|
|
149
147
|
|
|
150
148
|
| 命令 | 說明 | 執行方式 |
|
|
151
149
|
|------|------|---------|
|
|
152
|
-
| `k-cli dispatch run <taskId>` | Dispatch 指定任務 | → spawnClaude + Ansuz + headless.js |
|
|
153
|
-
| `k-cli dispatch run --auto` | 自動掃描 backlog 並 dispatch | → spawnClaude + Ansuz + headless.js |
|
|
154
150
|
| `k-cli dispatch status <taskId>` | 查看 dispatch 狀態 | 直接讀取 |
|
|
155
151
|
|
|
156
152
|
```bash
|
|
157
|
-
# 指定任務 dispatch(Ansuz 讀 role → 判斷陣型 → headless.js 執行)
|
|
158
|
-
k-cli dispatch run TASK_340
|
|
159
|
-
k-cli dispatch run TASK_340 --dry-run
|
|
160
|
-
|
|
161
|
-
# 自動掃描(Ansuz 掃 backlog → 按優先級逐個 dispatch)
|
|
162
|
-
k-cli dispatch run --auto
|
|
163
|
-
k-cli dispatch run --auto --project-path /path/to/project
|
|
164
|
-
|
|
165
153
|
# 查看狀態(自動搜尋 .kenaz/logs/ 或 .formation/logs/)
|
|
166
154
|
k-cli dispatch status TASK_340 --tail 50
|
|
167
155
|
```
|
|
168
156
|
|
|
169
|
-
#### dispatch run 流程
|
|
170
|
-
|
|
171
|
-
```
|
|
172
|
-
k-cli dispatch run TASK_XXX
|
|
173
|
-
│
|
|
174
|
-
└→ spawnClaude(Ansuz)
|
|
175
|
-
├─ Step 1: task-api get → 讀取任務 role
|
|
176
|
-
├─ Step 2: role → --skill, 判斷陣型(unit > solo > squad > legion)
|
|
177
|
-
└─ Step 3: node headless.js --skill={role} --task=TASK_XXX
|
|
178
|
-
│
|
|
179
|
-
headless.js 自動處理:
|
|
180
|
-
├─ auto-claim(backlog → active)
|
|
181
|
-
├─ 依賴預檢
|
|
182
|
-
├─ spawnClaude(agent) 執行任務
|
|
183
|
-
├─ ensureTaskComplete
|
|
184
|
-
└─ postComplete(archive + git branch + merge)
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
#### Formation Role → Skill 對應
|
|
188
|
-
|
|
189
|
-
| role | --skill | 說明 |
|
|
190
|
-
|------|---------|------|
|
|
191
|
-
| frontend | frontend | React/TypeScript UI、client-side |
|
|
192
|
-
| backend | backend | API、DB、server-side |
|
|
193
|
-
| designer | designer | 設計規範產出 |
|
|
194
|
-
| qa | qa | 測試、Bug 驗證 |
|
|
195
|
-
| sre | sre | 基礎設施、部署 |
|
|
196
|
-
| developer | developer | 通才兜底 |
|
|
197
|
-
|
|
198
|
-
Skill 定義檔:`.formation/legacy/{role}.yaml`
|
|
199
|
-
|
|
200
|
-
#### 陣型判斷
|
|
201
|
-
|
|
202
|
-
原則:能 unit 不 solo,能 solo 不 squad,能 squad 不 legion。
|
|
203
|
-
|
|
204
|
-
| 陣型 | 條件 | headless.js 參數 |
|
|
205
|
-
|------|------|-----------------|
|
|
206
|
-
| unit(預設) | 目標明確、單一 scope | `--skill={role} --task=TASK_XXX` |
|
|
207
|
-
| solo | 需多角度分析 | `--formation=solo --skill=strategy --task=TASK_XXX` |
|
|
208
|
-
| squad | 多個獨立子任務可並行 | `--formation=squad --skill=blitz --task=TASK_XXX` |
|
|
209
|
-
| legion | 有順序依賴或即時協調 | `--formation=legion --skill=forge --task=TASK_XXX` |
|
|
210
|
-
|
|
211
157
|
### Project 命令
|
|
212
158
|
|
|
213
159
|
| 命令 | 說明 | 執行方式 |
|
|
@@ -274,7 +220,6 @@ k-cli project install k-cli --dry-run
|
|
|
274
220
|
| `--dry-run` | 驗證但不執行(適用所有寫入 / 調度命令) |
|
|
275
221
|
| `--json` | 輸出 JSON 格式 |
|
|
276
222
|
| `--project-path <path>` | 指定子專案路徑(使用 `.kenaz/project.yaml` 中的 `project_path` 值) |
|
|
277
|
-
| `--auto` | 自動掃描模式(僅 `dispatch run`) |
|
|
278
223
|
| `--force` | 跳過品質檢查(僅 `task create`) |
|
|
279
224
|
| `--no-git` | 初始化時跳過 Git(僅 `project initialize`) |
|
|
280
225
|
| `--core-path <path>` | 覆蓋自動偵測的 core 路徑(僅 `project initialize`) |
|
|
@@ -306,7 +251,6 @@ k-cli/
|
|
|
306
251
|
│ │ ├── update.ts # task update(直接 task-api.js)
|
|
307
252
|
│ │ └── delete.ts # task delete(直接 task-api.js)
|
|
308
253
|
│ ├── dispatch/ # Formation 調度功能
|
|
309
|
-
│ │ ├── run.ts # dispatch run(spawnClaude + Ansuz + headless.js)
|
|
310
254
|
│ │ └── status.ts # dispatch status(直接讀 log)
|
|
311
255
|
│ └── project/ # 專案管理功能
|
|
312
256
|
│ ├── status.ts # project status(含 project.yaml 詳情)
|
|
@@ -333,10 +277,6 @@ k-cli
|
|
|
333
277
|
│ ├─ task/create → Ansuz 分析需求
|
|
334
278
|
│ │ → Agent tool subagent(Amelia 審查 + role)
|
|
335
279
|
│ │ → task-api.js create(最終建立)
|
|
336
|
-
│ ├─ dispatch/run → Ansuz 讀 role + 判斷陣型
|
|
337
|
-
│ │ TASK_XXX → headless.js --skill={role} --task=TASK_XXX
|
|
338
|
-
│ └─ dispatch/run → Ansuz 掃 backlog + 逐個 dispatch
|
|
339
|
-
│ --auto → headless.js × N
|
|
340
280
|
│
|
|
341
281
|
└─ spawnClaude(Specialist 直接執行)
|
|
342
282
|
└─ specialist/run → session.js(組裝 prompt)+ spawnClaude
|
|
@@ -354,38 +294,6 @@ spawnClaude(opts)
|
|
|
354
294
|
└─ spawn(claude, args) → stdin pipe prompt, stream-json 輸出
|
|
355
295
|
```
|
|
356
296
|
|
|
357
|
-
### Git 流程(自動觸發鏈)
|
|
358
|
-
|
|
359
|
-
```
|
|
360
|
-
k-cli dispatch run TASK_XXX
|
|
361
|
-
└→ Ansuz → headless.js
|
|
362
|
-
├─ auto-claim(backlog → active)
|
|
363
|
-
├─ 依賴預檢
|
|
364
|
-
├─ 保存當前分支 → .formation/.dispatch-branch
|
|
365
|
-
├─ spawnClaude(agent) 執行任務
|
|
366
|
-
└─ agent exit 0 → 自動觸發:
|
|
367
|
-
├─ ensureTaskComplete → task-api complete
|
|
368
|
-
└─ postComplete()
|
|
369
|
-
├─ archive(done/ 超過 10 個 → archived/)
|
|
370
|
-
└─ gitBranchAndMerge()
|
|
371
|
-
├─ stash 未提交變更
|
|
372
|
-
├─ checkout -b task/task_xxx
|
|
373
|
-
├─ unstash + git add + commit
|
|
374
|
-
├─ checkout {userBranch}
|
|
375
|
-
├─ merge task/task_xxx --no-ff
|
|
376
|
-
└─ 提示: merge to main when ready
|
|
377
|
-
```
|
|
378
|
-
|
|
379
|
-
| 階段 | 誰處理 | 自動/手動 |
|
|
380
|
-
|------|--------|----------|
|
|
381
|
-
| claim | headless.js | 自動 |
|
|
382
|
-
| agent 執行 | headless.js → spawnClaude | 自動 |
|
|
383
|
-
| task complete | headless.js ensureTaskComplete() | 自動 |
|
|
384
|
-
| archive | post-complete.js | 自動 |
|
|
385
|
-
| task branch + commit | post-complete.js gitBranchAndMerge() | 自動 |
|
|
386
|
-
| merge 到 user branch | post-complete.js | 自動 |
|
|
387
|
-
| merge 到 main | **用戶** | **手動** |
|
|
388
|
-
|
|
389
297
|
## Dry-Run 行為
|
|
390
298
|
|
|
391
299
|
`--dry-run` 適用於所有有副作用的命令:
|
|
@@ -393,7 +301,6 @@ k-cli dispatch run TASK_XXX
|
|
|
393
301
|
| 命令 | dry-run 行為 |
|
|
394
302
|
|------|-------------|
|
|
395
303
|
| `specialist run` | 組裝 prompt → 顯示 agent + prompt 長度 → **不 spawn Claude** |
|
|
396
|
-
| `dispatch run` | 組裝 Ansuz prompt → 顯示模式 + 資訊 → **不 spawn Ansuz** |
|
|
397
304
|
| `task create` | 組裝 Ansuz prompt → 顯示將建立的任務資訊 → **不啟動 Ansuz** |
|
|
398
305
|
| `task update` | 組裝 task-api args → 顯示將更新的內容 → **不呼叫 task-api** |
|
|
399
306
|
| `task delete` | 組裝 task-api args → 顯示將刪除的任務 → **不呼叫 task-api** |
|
|
@@ -14,7 +14,7 @@ npm run build && npm test
|
|
|
14
14
|
|
|
15
15
|
## 前置條件
|
|
16
16
|
|
|
17
|
-
- Claude CLI 可用(`task create`
|
|
17
|
+
- Claude CLI 可用(`task create` 會 spawnClaude)
|
|
18
18
|
- `npm run build` 必須先執行
|
|
19
19
|
|
|
20
20
|
## 測試環境
|
|
@@ -64,20 +64,8 @@ npm run build && npm test
|
|
|
64
64
|
- `k-cli task get TASK_A --project-path test/sandbox/`
|
|
65
65
|
- 驗證:輸出含 TASK_A 詳細資訊
|
|
66
66
|
|
|
67
|
-
### Test 6:
|
|
68
|
-
-
|
|
69
|
-
- `k-cli dispatch run TASK_A --project-path test/sandbox/`
|
|
70
|
-
- 驗證:Ansuz 讀 role → 判斷陣型 → headless.js 執行,輸出含 TASK_A
|
|
71
|
-
|
|
72
|
-
### Test 7: dispatch status(等待任務完成)
|
|
73
|
-
- `k-cli dispatch status TASK_A --project-path test/sandbox/`
|
|
74
|
-
- 輪詢直到任務完成(或 timeout)
|
|
75
|
-
- 驗證:輸出含 TASK_A 相關資訊,最終狀態為 done
|
|
76
|
-
|
|
77
|
-
### Test 8: dispatch run --auto(自動掃描)
|
|
78
|
-
- `k-cli dispatch run --auto --project-path test/sandbox/`
|
|
79
|
-
- 驗證:自動掃描 backlog,dispatch TASK_B 和 TASK_C(或剩餘待處理任務)
|
|
80
|
-
- 驗證:輸出含掃描結果
|
|
67
|
+
### Test 6-8: 已移除
|
|
68
|
+
- `dispatch run` 已刪除(Formation headless 調度已退役),`dispatch status` 失去可驗證的前置動作,一併移出測試
|
|
81
69
|
|
|
82
70
|
### Test 9: task delete → verify
|
|
83
71
|
- 使用 Test 5 的 TASK_A
|
|
@@ -99,11 +87,9 @@ npm run build && npm test
|
|
|
99
87
|
- 驗證:輸出含 `dry-run`,不呼叫 spawnClaude
|
|
100
88
|
3. `k-cli task delete TASK_B --project-path test/sandbox/ --dry-run`
|
|
101
89
|
- 驗證:輸出含 `dry-run`,任務仍存在
|
|
102
|
-
4. `k-cli
|
|
103
|
-
- 驗證:輸出含 `dry-run`,不呼叫 spawnClaude
|
|
104
|
-
5. `k-cli specialist run --agent Amelia 測試 --project-path test/sandbox/ --dry-run`
|
|
90
|
+
4. `k-cli specialist run --agent Amelia 測試 --project-path test/sandbox/ --dry-run`
|
|
105
91
|
- 驗證:輸出含 `dry-run`,不呼叫 spawnClaude
|
|
106
|
-
|
|
92
|
+
5. `k-cli project install k-cli --project-path test/sandbox/ --dry-run`
|
|
107
93
|
- 驗證:輸出含 `dry-run`
|
|
108
94
|
|
|
109
95
|
## 結果格式
|
|
@@ -116,9 +102,6 @@ k-cli Test Suite
|
|
|
116
102
|
[ 3/11] project status ✅ PASS
|
|
117
103
|
[ 4/11] specialist list ✅ PASS
|
|
118
104
|
[ 5/11] task create × 3 ✅ PASS
|
|
119
|
-
[ 6/11] dispatch run ✅ PASS
|
|
120
|
-
[ 7/11] dispatch status ✅ PASS
|
|
121
|
-
[ 8/11] dispatch run --auto ✅ PASS
|
|
122
105
|
[ 9/11] task delete ✅ PASS
|
|
123
106
|
[10/11] specialist run Amelia ✅ PASS
|
|
124
107
|
[11/11] --dry-run ✅ PASS
|
package/core/k-cli/test/run.sh
CHANGED
|
@@ -280,62 +280,6 @@ test_5_task_create() {
|
|
|
280
280
|
return 0
|
|
281
281
|
}
|
|
282
282
|
|
|
283
|
-
# =========================================
|
|
284
|
-
# Test 6: dispatch run (specific task)
|
|
285
|
-
# =========================================
|
|
286
|
-
test_6_dispatch_run() {
|
|
287
|
-
local task_id
|
|
288
|
-
task_id=$(cat "$SANDBOX/.test_task_a" 2>/dev/null) || { echo " No TASK_A from test 5"; return 1; }
|
|
289
|
-
log " Dispatching: $task_id"
|
|
290
|
-
|
|
291
|
-
run_cmd $KCLI dispatch run "$task_id" --project-path "$SANDBOX"
|
|
292
|
-
local output="$LOG_CMD_OUTPUT"
|
|
293
|
-
assert_contains "dispatch run" "$output" "$task_id" || return 1
|
|
294
|
-
return 0
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
# =========================================
|
|
298
|
-
# Test 7: dispatch status (wait for done)
|
|
299
|
-
# =========================================
|
|
300
|
-
test_7_dispatch_status() {
|
|
301
|
-
local task_id
|
|
302
|
-
task_id=$(cat "$SANDBOX/.test_task_a" 2>/dev/null) || { echo " No TASK_A from test 5"; return 1; }
|
|
303
|
-
|
|
304
|
-
# Poll up to 10 times (10 sec intervals)
|
|
305
|
-
local i output
|
|
306
|
-
for i in $(seq 1 10); do
|
|
307
|
-
log " --- Poll $i/10 ---"
|
|
308
|
-
run_cmd $KCLI dispatch status "$task_id" --project-path "$SANDBOX"
|
|
309
|
-
output="$LOG_CMD_OUTPUT"
|
|
310
|
-
if echo "$output" | grep -qi "done\|complete\|finished"; then
|
|
311
|
-
log " ✓ Task completed"
|
|
312
|
-
return 0
|
|
313
|
-
fi
|
|
314
|
-
sleep 10
|
|
315
|
-
done
|
|
316
|
-
|
|
317
|
-
# After polling, still check if task is in done dir
|
|
318
|
-
if [ -d "$SANDBOX/.kenaz/tasks/done/$task_id" ]; then
|
|
319
|
-
log " ✓ Task found in done dir"
|
|
320
|
-
return 0
|
|
321
|
-
fi
|
|
322
|
-
|
|
323
|
-
# Accept any output containing the task ID as partial pass
|
|
324
|
-
assert_contains "dispatch status" "$output" "$task_id" || return 1
|
|
325
|
-
return 0
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
# =========================================
|
|
329
|
-
# Test 8: dispatch run --auto
|
|
330
|
-
# =========================================
|
|
331
|
-
test_8_dispatch_auto() {
|
|
332
|
-
run_cmd $KCLI dispatch run --auto --project-path "$SANDBOX"
|
|
333
|
-
local output="$LOG_CMD_OUTPUT"
|
|
334
|
-
# Should scan backlog and attempt to dispatch remaining tasks
|
|
335
|
-
assert_contains "dispatch auto" "$output" "backlog\|scan\|dispatch\|TASK_\|no.*task\|0 " || return 1
|
|
336
|
-
return 0
|
|
337
|
-
}
|
|
338
|
-
|
|
339
283
|
# =========================================
|
|
340
284
|
# Test 9: task delete -> verify
|
|
341
285
|
# =========================================
|
|
@@ -412,19 +356,12 @@ test_11_dry_run() {
|
|
|
412
356
|
output="$LOG_CMD_OUTPUT"
|
|
413
357
|
assert_contains "delete dry-run" "$output" "dry-run\|dry.run\|dryRun" || return 1
|
|
414
358
|
|
|
415
|
-
# 4. dispatch run --dry-run
|
|
416
|
-
log " --- dry-run: dispatch run ---"
|
|
417
|
-
run_cmd $KCLI dispatch run "$tb" --project-path "$SANDBOX" --dry-run
|
|
418
|
-
output="$LOG_CMD_OUTPUT"
|
|
419
|
-
assert_contains "dispatch dry-run" "$output" "dry-run\|dry.run\|dryRun" || return 1
|
|
420
|
-
|
|
421
|
-
# 5. specialist run --dry-run
|
|
422
359
|
log " --- dry-run: specialist run ---"
|
|
423
360
|
run_cmd $KCLI specialist run --agent Amelia "test" --project-path "$SANDBOX" --dry-run
|
|
424
361
|
output="$LOG_CMD_OUTPUT"
|
|
425
362
|
assert_contains "specialist dry-run" "$output" "dry-run\|dry.run\|dryRun" || return 1
|
|
426
363
|
|
|
427
|
-
#
|
|
364
|
+
# 4. project install --dry-run
|
|
428
365
|
log " --- dry-run: project install ---"
|
|
429
366
|
run_cmd $KCLI project install k-cli --project-path "$SANDBOX" --dry-run
|
|
430
367
|
output="$LOG_CMD_OUTPUT"
|
|
@@ -441,9 +378,6 @@ run_test 2 "ping" test_2_ping
|
|
|
441
378
|
run_test 3 "project status" test_3_project_status
|
|
442
379
|
run_test 4 "specialist list" test_4_specialist_list
|
|
443
380
|
run_test 5 "task create x3" test_5_task_create
|
|
444
|
-
run_test 6 "dispatch run" test_6_dispatch_run
|
|
445
|
-
run_test 7 "dispatch status" test_7_dispatch_status
|
|
446
|
-
run_test 8 "dispatch run --auto" test_8_dispatch_auto
|
|
447
381
|
run_test 9 "task delete" test_9_task_delete
|
|
448
382
|
run_test 10 "specialist run Amelia" test_10_specialist_run
|
|
449
383
|
run_test 11 "--dry-run" test_11_dry_run
|
|
@@ -2,4 +2,4 @@ Execute `node "${CLAUDE_PLUGIN_ROOT}/hooks/core-resolve.js" .specialist/tools/se
|
|
|
2
2
|
|
|
3
3
|
IMPORTANT: Run this command **foreground** (not background) with timeout=120000. Do NOT use background mode + sleep polling — session.js completes in <5s under normal conditions.
|
|
4
4
|
|
|
5
|
-
Fallback (if session.js fails): Read
|
|
5
|
+
Fallback (if session.js fails): Read `${CLAUDE_PLUGIN_ROOT}/../../.specialist/Amelia/rule.yaml`, load files listed in `files:` by `override_priority` order.
|
|
@@ -12,16 +12,29 @@ ARGUMENTS 含 `[專案: X]` 或 `--project-path X` → PROJECT_PATH = X,下方
|
|
|
12
12
|
|
|
13
13
|
## 每件工作的做法
|
|
14
14
|
- **自己做**:小而明確的修正(約 30 行內、單一檔案或少數檔案)→ 直接改,跑最近的測試,提交。
|
|
15
|
-
-
|
|
15
|
+
- **開卡派工**:中型、可平行、或高風險路徑的工作:
|
|
16
|
+
1. 用 `kenaz_task_create` 開卡(`projectPath` = 目前專案;寫清楚 requirements、acceptance criteria、scope paths)。查卡、改狀態用 `kenaz_task_list` / `kenaz_task_get` / `kenaz_task_update`。
|
|
17
|
+
2. 產生派工內容:`node "${CLAUDE_PLUGIN_ROOT}/hooks/core-resolve.js" .formation/tools/dispatch.js --skill=do --task=TASK_XXX --dispatch-mode=subagent`(加 `--project-path`;Codex 加 `--harness=codex`)。把輸出 JSON 的 `promptText` 交給 subagent,`agentParams` 照用(模型不要自己換)。
|
|
18
|
+
3. subagent 在 worktree 裡改完並 commit;你驗證後合併。
|
|
16
19
|
- 開卡前先確認 scope 與驗收條件對準真正的問題,不要照著錯的假設派工。
|
|
17
20
|
|
|
18
21
|
## 驗證(合併前一定做,強度跟風險相稱)
|
|
19
22
|
- 走**真實路徑**:實際執行會被使用者用到的那條路(真的安裝、真的啟動、真的收發訊息),不只看單元測試。
|
|
20
23
|
- 有**對照組**:證明測試在舊程式上會失敗,或修改前後結果不同。
|
|
21
24
|
- subagent 回報「未驗證」的項目,由你補驗或明講仍未驗證。
|
|
22
|
-
-
|
|
25
|
+
- 合併:`git merge` 後跑相關測試(或 `node "${CLAUDE_PLUGIN_ROOT}/hooks/core-resolve.js" .specialist/Ansuz/tools/verify-and-land.js`),用這個專案自己的測試指令。
|
|
26
|
+
- 檔案長度:verify-and-land 合併前會跑 `check-file-size`(警告 1000 / 上限 2000 行,既有超長檔只擋「未配套拆分的增長」);被擋就按職責拆成 module / component / hook。
|
|
27
|
+
- 只在 Kenaz 核心 repo 本身:Rust 測試走 `npm run test:rust` / `dev/scripts/rust-verify-worktree.js`。
|
|
23
28
|
|
|
24
29
|
## 回報
|
|
25
30
|
用用戶的語言。說清楚:做了什麼、怎麼驗證的、還有什麼沒驗證或需要用戶決定。不說「應該可以」。
|
|
26
31
|
|
|
27
|
-
|
|
32
|
+
## Kenaz 本身出問題時:先回報再繞過(wish / field report)
|
|
33
|
+
Kenaz 的工具、hook、安裝、peer 訊息、派工擋住或拖慢工作時(指令失敗、回傳錯的資料、少了能力、行為不如預期),**繞過之前**先呼叫 `kenaz_wish_create`。scope=kenaz 的 wish 會自動送到 Kenaz 團隊成為 field report。
|
|
34
|
+
- `projectPath`:目前專案路徑;`scope`:`kenaz`(Kenaz 本身的問題)或 `project`(只跟這個專案有關)
|
|
35
|
+
- `wish_type`:`bug`(壞了)/`feature`(缺能力,內容寫:需求、現在哪裡不夠、建議做法、還有誰受益)/`question`
|
|
36
|
+
- `content`:一行重現步驟 + 預期 vs 實際 + 版本(`npx kenaz doctor` 那幾行);附上 session id。不要貼金鑰或 token。
|
|
37
|
+
- 一個問題只報一次;報完照常用替代做法把工作完成,並在回報裡告訴用戶已送出 wish。
|
|
38
|
+
- 用戶直接說「回報這個問題」時也用同一個工具(`source`=`user`)。
|
|
39
|
+
|
|
40
|
+
需要更多規則時(用戶授權自主、派工前、合併前)讀 `${CLAUDE_PLUGIN_ROOT}/../../.specialist/Ansuz/RULES.md`。
|
|
@@ -26,7 +26,17 @@ if (MODES.includes(arg)) {
|
|
|
26
26
|
// TASK_2367: first-run guide. Optional steps are offered, never forced; the user (or the
|
|
27
27
|
// assistant relaying this output) runs them. Backend probe tells whether they can work now.
|
|
28
28
|
const port = process.env.KENAZ_HTTP_PORT || process.env.KENAZ_BACKEND_PORT || '18080';
|
|
29
|
-
|
|
29
|
+
// TASK_2395: register the project in ~/.kenaz/projects.json (idempotent, written by the server's
|
|
30
|
+
// single registry writer) so peer routing by to_project finds it. Server down = skipped; the
|
|
31
|
+
// first turn of a session retries.
|
|
32
|
+
const registered = fetch('http://127.0.0.1:' + port + '/api/projects/register', {
|
|
33
|
+
method: 'POST',
|
|
34
|
+
headers: { 'Content-Type': 'application/json' },
|
|
35
|
+
body: JSON.stringify({ projectPath: dir }),
|
|
36
|
+
signal: AbortSignal.timeout(2000),
|
|
37
|
+
}).then((r) => r.json(), () => null).then((j) => !!(j && j.success), () => false);
|
|
38
|
+
registered
|
|
39
|
+
.then(() => fetch('http://127.0.0.1:' + port + '/api/health', { signal: AbortSignal.timeout(2000) }))
|
|
30
40
|
.then((r) => r.ok, () => false)
|
|
31
41
|
.then((up) => {
|
|
32
42
|
// Codex runs shell commands in a sandbox without network (it sets CODEX_SANDBOX_NETWORK_DISABLED=1),
|
|
@@ -19,11 +19,15 @@ const SKILLS = [
|
|
|
19
19
|
const COMMANDS = ['Amelia', 'Ansuz', 'architect', 'incident', 'review', 'security', 'spec', 'strategy', '產品', '設計', '評估'];
|
|
20
20
|
|
|
21
21
|
// Core-relative references become plugin-relative / core-resolved.
|
|
22
|
+
// In a user's project (npm install) the core lives in ~/.kenaz/core, not the project folder, so a
|
|
23
|
+
// command's `node .specialist/...` / `.formation/...` / `.collaboration/...` runs through core-resolve,
|
|
24
|
+
// and a core doc it tells the model to read gets a path under the plugin's core (plugin root/../..).
|
|
22
25
|
function rewrite(text) {
|
|
23
26
|
return text
|
|
24
27
|
.replace(/\.claude\/skills\//g, '${CLAUDE_PLUGIN_ROOT}/skills/')
|
|
25
|
-
.replace(/node \.specialist\/
|
|
26
|
-
'node "${CLAUDE_PLUGIN_ROOT}/hooks/core-resolve.js"
|
|
28
|
+
.replace(/node \.(specialist|formation|collaboration)\/([\w./-]+\.js)/g,
|
|
29
|
+
'node "${CLAUDE_PLUGIN_ROOT}/hooks/core-resolve.js" .$1/$2')
|
|
30
|
+
.replace(/`\.specialist\/([\w./-]+\.(?:md|yaml))`/g, '`${CLAUDE_PLUGIN_ROOT}/../../.specialist/$1`');
|
|
27
31
|
}
|
|
28
32
|
|
|
29
33
|
function copyDir(src, dst) {
|
|
@@ -77,6 +77,7 @@ function renderStatus(s) {
|
|
|
77
77
|
const L = [
|
|
78
78
|
'Yggdrasil room: ' + s.room,
|
|
79
79
|
'Node name: ' + s.node_name,
|
|
80
|
+
...(s.registered ? ['Registered: ' + s.registered] : []),
|
|
80
81
|
'Key: ' + s.key + ' (source: ' + s.key_source + ')',
|
|
81
82
|
'Collaboration: ' + (s.enabled && s.active_in_project ? 'active in this project'
|
|
82
83
|
: 'not active in this project - run "ygg join <key>" (adds room "' + s.room + '" to collaboration_projects; presence is only sent for activated rooms)'),
|
|
@@ -92,13 +93,24 @@ function renderStatus(s) {
|
|
|
92
93
|
return L.join('\n');
|
|
93
94
|
}
|
|
94
95
|
|
|
96
|
+
// The poller and presence only know projects in ~/.kenaz/projects.json. A server-only machine has
|
|
97
|
+
// no Dashboard to register them, so before 0.3.4 a joined project never showed up in its room, with
|
|
98
|
+
// no error anywhere (field report). Registering is idempotent; status says when it had to.
|
|
99
|
+
async function ensureRegistered(dir) {
|
|
100
|
+
try {
|
|
101
|
+
const r = await call('POST', '/api/projects/register', { projectPath: dir });
|
|
102
|
+
return r && r.success ? (r.created ? 'registered now (it was missing: this machine could not be seen in the room or get mail for it)' : 'yes') : 'NO: ' + ((r && r.error) || 'unknown');
|
|
103
|
+
} catch (e) { return 'NO: ' + e.message + ' (kenaz-server too old? run npx kenaz@latest install)'; }
|
|
104
|
+
}
|
|
105
|
+
|
|
95
106
|
async function status(dir) {
|
|
107
|
+
const registered = await ensureRegistered(dir);
|
|
96
108
|
const cfg = await getConfig(dir);
|
|
97
109
|
if (cfg.error) throw new Error(cfg.error);
|
|
98
110
|
const relay = await relayNodes(cfg);
|
|
99
111
|
let peer = null;
|
|
100
112
|
try { peer = await call('GET', '/api/peer/status?projectPath=' + encodeURIComponent(dir)); } catch (e) { /* unknown */ }
|
|
101
|
-
return buildStatus(cfg, relay, peer);
|
|
113
|
+
return Object.assign(buildStatus(cfg, relay, peer), { registered });
|
|
102
114
|
}
|
|
103
115
|
|
|
104
116
|
function withCollab(cfg, on) {
|
|
@@ -381,7 +381,7 @@ Scope 路徑: ✓ 合理
|
|
|
381
381
|
|
|
382
382
|
```bash
|
|
383
383
|
# 使用 Task API 建立任務
|
|
384
|
-
node .collaboration/core/task-api.js create --title "任務名稱" --priority P1
|
|
384
|
+
node "${CLAUDE_PLUGIN_ROOT}/hooks/core-resolve.js" .collaboration/core/task-api.js create --title "任務名稱" --priority P1
|
|
385
385
|
|
|
386
386
|
# 或直接建立 YAML 文件到 .collaboration/tasks/backlog/
|
|
387
387
|
```
|
|
@@ -390,7 +390,7 @@ node .collaboration/core/task-api.js create --title "任務名稱" --priority P1
|
|
|
390
390
|
|
|
391
391
|
```bash
|
|
392
392
|
# 驗證任務文件格式
|
|
393
|
-
node .collaboration/core/task-api.js list
|
|
393
|
+
node "${CLAUDE_PLUGIN_ROOT}/hooks/core-resolve.js" .collaboration/core/task-api.js list
|
|
394
394
|
|
|
395
395
|
# 檢查必填欄位
|
|
396
396
|
# id, title, description, priority, status, role, tags, source, acceptance_criteria
|
|
@@ -415,7 +415,7 @@ node .collaboration/core/task-api.js list
|
|
|
415
415
|
ls .collaboration/tasks/backlog/TASK_113_*.yaml
|
|
416
416
|
|
|
417
417
|
# 使用 Task API 驗證
|
|
418
|
-
node .collaboration/core/task-api.js list
|
|
418
|
+
node "${CLAUDE_PLUGIN_ROOT}/hooks/core-resolve.js" .collaboration/core/task-api.js list
|
|
419
419
|
|
|
420
420
|
# 檢查必填欄位
|
|
421
421
|
# id, title, description, priority, status, role, tags, source, acceptance_criteria
|
|
@@ -457,7 +457,7 @@ node .collaboration/core/task-api.js list
|
|
|
457
457
|
**驗證任務**(必須執行):
|
|
458
458
|
```bash
|
|
459
459
|
# 使用 Task API 驗證(新系統)
|
|
460
|
-
node .collaboration/core/task-api.js list
|
|
460
|
+
node "${CLAUDE_PLUGIN_ROOT}/hooks/core-resolve.js" .collaboration/core/task-api.js list
|
|
461
461
|
```
|
|
462
462
|
|
|
463
463
|
#### 8.4 批量更新 PROGRESS.md
|
|
@@ -688,7 +688,7 @@ metadata:
|
|
|
688
688
|
|
|
689
689
|
```bash
|
|
690
690
|
# 使用 Task API 建立任務(新系統)
|
|
691
|
-
node .collaboration/core/task-api.js create --title "任務名稱" --priority P1
|
|
691
|
+
node "${CLAUDE_PLUGIN_ROOT}/hooks/core-resolve.js" .collaboration/core/task-api.js create --title "任務名稱" --priority P1
|
|
692
692
|
|
|
693
693
|
# 或直接建立 YAML 文件到 .collaboration/tasks/backlog/
|
|
694
694
|
```
|
|
@@ -766,9 +766,9 @@ node .collaboration/core/task-api.js create --title "任務名稱" --priority P1
|
|
|
766
766
|
|
|
767
767
|
```bash
|
|
768
768
|
# 使用 Task API 建立任務
|
|
769
|
-
node .collaboration/core/task-api.js create --title "實作撤銷機制" --priority P1
|
|
770
|
-
node .collaboration/core/task-api.js create --title "新增 Undo/Redo UI" --priority P2
|
|
771
|
-
node .collaboration/core/task-api.js create --title "整合快捷鍵" --priority P2
|
|
769
|
+
node "${CLAUDE_PLUGIN_ROOT}/hooks/core-resolve.js" .collaboration/core/task-api.js create --title "實作撤銷機制" --priority P1
|
|
770
|
+
node "${CLAUDE_PLUGIN_ROOT}/hooks/core-resolve.js" .collaboration/core/task-api.js create --title "新增 Undo/Redo UI" --priority P2
|
|
771
|
+
node "${CLAUDE_PLUGIN_ROOT}/hooks/core-resolve.js" .collaboration/core/task-api.js create --title "整合快捷鍵" --priority P2
|
|
772
772
|
```
|
|
773
773
|
|
|
774
774
|
**Stage 8: Pipeline Integration**
|
|
@@ -1055,16 +1055,16 @@ Dev Agent 會按照優先級執行這些任務。
|
|
|
1055
1055
|
|
|
1056
1056
|
```bash
|
|
1057
1057
|
# 列出所有任務
|
|
1058
|
-
node .collaboration/core/task-api.js list
|
|
1058
|
+
node "${CLAUDE_PLUGIN_ROOT}/hooks/core-resolve.js" .collaboration/core/task-api.js list
|
|
1059
1059
|
|
|
1060
1060
|
# 建立新任務
|
|
1061
|
-
node .collaboration/core/task-api.js create --title "新功能" --priority P1
|
|
1061
|
+
node "${CLAUDE_PLUGIN_ROOT}/hooks/core-resolve.js" .collaboration/core/task-api.js create --title "新功能" --priority P1
|
|
1062
1062
|
|
|
1063
1063
|
# 認領任務
|
|
1064
|
-
node .collaboration/core/task-api.js claim TASK_XXX
|
|
1064
|
+
node "${CLAUDE_PLUGIN_ROOT}/hooks/core-resolve.js" .collaboration/core/task-api.js claim TASK_XXX
|
|
1065
1065
|
|
|
1066
1066
|
# 完成任務
|
|
1067
|
-
node .collaboration/core/task-api.js complete TASK_XXX
|
|
1067
|
+
node "${CLAUDE_PLUGIN_ROOT}/hooks/core-resolve.js" .collaboration/core/task-api.js complete TASK_XXX
|
|
1068
1068
|
```
|
|
1069
1069
|
|
|
1070
1070
|
**詳細文檔**:`.collaboration/README.md`
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
No,Data Type,Keywords,Best Chart Type,Secondary Options,Color Guidance,Performance Impact,Accessibility Notes,Library Recommendation,Interactive Level
|
|
2
|
-
1,Trend Over Time,"trend, time-series, line, growth, timeline, progress",Line Chart,"Area Chart, Smooth Area",Primary: #0080FF. Multiple series: use distinct colors. Fill: 20% opacity,⚡ Excellent (optimized),✓ Clear line patterns for colorblind users. Add pattern overlays.,"Chart.js, Recharts, ApexCharts",Hover + Zoom
|
|
3
|
-
2,Compare Categories,"compare, categories, bar, comparison, ranking",Bar Chart (Horizontal or Vertical),"Column Chart, Grouped Bar",Each bar: distinct color. Category: grouped same color. Sorted: descending order,⚡ Excellent,✓ Easy to compare. Add value labels on bars for clarity.,"Chart.js, Recharts, D3.js",Hover + Sort
|
|
4
|
-
3,Part-to-Whole,"part-to-whole, pie, donut, percentage, proportion, share",Pie Chart or Donut,"Stacked Bar, Treemap",Colors: 5-6 max. Contrasting palette. Large slices first. Use labels.,⚡ Good (limit 6 slices),⚠ Hard for accessibility. Better: Stacked bar with legend. Avoid pie if >5 items.,"Chart.js, Recharts, D3.js",Hover + Drill
|
|
5
|
-
4,Correlation/Distribution,"correlation, distribution, scatter, relationship, pattern",Scatter Plot or Bubble Chart,"Heat Map, Matrix",Color axis: gradient (blue-red). Size: relative. Opacity: 0.6-0.8 to show density,⚠ Moderate (many points),⚠ Provide data table alternative. Use pattern + color distinction.,"D3.js, Plotly, Recharts",Hover + Brush
|
|
6
|
-
5,Heatmap/Intensity,"heatmap, heat-map, intensity, density, matrix",Heat Map or Choropleth,"Grid Heat Map, Bubble Heat",Gradient: Cool (blue) to Hot (red). Scale: clear legend. Divergent for ±data,⚡ Excellent (color CSS),⚠ Colorblind: Use pattern overlay. Provide numerical legend.,"D3.js, Plotly, ApexCharts",Hover + Zoom
|
|
7
|
-
6,Geographic Data,"geographic, map, location, region, geo, spatial","Choropleth Map, Bubble Map",Geographic Heat Map,Regional: single color gradient or categorized colors. Legend: clear scale,⚠ Moderate (rendering),⚠ Include text labels for regions. Provide data table alternative.,"D3.js, Mapbox, Leaflet",Pan + Zoom + Drill
|
|
8
|
-
7,Funnel/Flow,funnel/flow,"Funnel Chart, Sankey",Waterfall (for flows),Stages: gradient (starting color → ending color). Show conversion %,⚡ Good,✓ Clear stage labels + percentages. Good for accessibility if labeled.,"D3.js, Recharts, Custom SVG",Hover + Drill
|
|
9
|
-
8,Performance vs Target,performance-vs-target,Gauge Chart or Bullet Chart,"Dial, Thermometer",Performance: Red→Yellow→Green gradient. Target: marker line. Threshold colors,⚡ Good,✓ Add numerical value + percentage label beside gauge.,"D3.js, ApexCharts, Custom SVG",Hover
|
|
10
|
-
9,Time-Series Forecast,time-series-forecast,Line with Confidence Band,Ribbon Chart,Actual: solid line #0080FF. Forecast: dashed #FF9500. Band: light shading,⚡ Good,✓ Clearly distinguish actual vs forecast. Add legend.,"Chart.js, ApexCharts, Plotly",Hover + Toggle
|
|
11
|
-
10,Anomaly Detection,anomaly-detection,Line Chart with Highlights,Scatter with Alert,Normal: blue #0080FF. Anomaly: red #FF0000 circle/square marker + alert,⚡ Good,✓ Circle/marker for anomalies. Add text alert annotation.,"D3.js, Plotly, ApexCharts",Hover + Alert
|
|
12
|
-
11,Hierarchical/Nested Data,hierarchical/nested-data,Treemap,"Sunburst, Nested Donut, Icicle",Parent: distinct hues. Children: lighter shades. White borders 2-3px.,⚠ Moderate,⚠ Poor - provide table alternative. Label large areas.,"D3.js, Recharts, ApexCharts",Hover + Drilldown
|
|
13
|
-
12,Flow/Process Data,flow/process-data,Sankey Diagram,"Alluvial, Chord Diagram",Gradient from source to target. Opacity 0.4-0.6 for flows.,⚠ Moderate,⚠ Poor - provide flow table alternative.,"D3.js (d3-sankey), Plotly",Hover + Drilldown
|
|
14
|
-
13,Cumulative Changes,cumulative-changes,Waterfall Chart,"Stacked Bar, Cascade",Increases: #4CAF50. Decreases: #F44336. Start: #2196F3. End: #0D47A1.,⚡ Good,✓ Good - clear directional colors with labels.,"ApexCharts, Highcharts, Plotly",Hover
|
|
15
|
-
14,Multi-Variable Comparison,multi-variable-comparison,Radar/Spider Chart,"Parallel Coordinates, Grouped Bar",Single: #0080FF 20% fill. Multiple: distinct colors per dataset.,⚡ Good,⚠ Moderate - limit 5-8 axes. Add data table.,"Chart.js, Recharts, ApexCharts",Hover + Toggle
|
|
16
|
-
15,Stock/Trading OHLC,stock/trading-ohlc,Candlestick Chart,"OHLC Bar, Heikin-Ashi",Bullish: #26A69A. Bearish: #EF5350. Volume: 40% opacity below.,⚡ Good,⚠ Moderate - provide OHLC data table.,"Lightweight Charts (TradingView), ApexCharts",Real-time + Hover + Zoom
|
|
17
|
-
16,Relationship/Connection Data,relationship/connection-data,Network Graph,"Hierarchical Tree, Adjacency Matrix",Node types: categorical colors. Edges: #90A4AE 60% opacity.,❌ Poor (500+ nodes struggles),❌ Very Poor - provide adjacency list alternative.,"D3.js (d3-force), Vis.js, Cytoscape.js",Drilldown + Hover + Drag
|
|
18
|
-
17,Distribution/Statistical,distribution/statistical,Box Plot,"Violin Plot, Beeswarm",Box: #BBDEFB. Border: #1976D2. Median: #D32F2F. Outliers: #F44336.,⚡ Excellent,"✓ Good - include stats table (min, Q1, median, Q3, max).","Plotly, D3.js, Chart.js (plugin)",Hover
|
|
19
|
-
18,Performance vs Target (Compact),performance-vs-target-(compact),Bullet Chart,"Gauge, Progress Bar","Ranges: #FFCDD2, #FFF9C4, #C8E6C9. Performance: #1976D2. Target: black 3px.",⚡ Excellent,✓ Excellent - compact with clear values.,"D3.js, Plotly, Custom SVG",Hover
|
|
20
|
-
19,Proportional/Percentage,proportional/percentage,Waffle Chart,"Pictogram, Stacked Bar 100%",10x10 grid. 3-5 categories max. 2-3px spacing between squares.,⚡ Good,✓ Good - better than pie for accessibility.,"D3.js, React-Waffle, Custom CSS Grid",Hover
|
|
21
|
-
20,Hierarchical Proportional,hierarchical-proportional,Sunburst Chart,"Treemap, Icicle, Circle Packing",Center to outer: darker to lighter. 15-20% lighter per level.,⚠ Moderate,⚠ Poor - provide hierarchy table alternative.,"D3.js (d3-hierarchy), Recharts, ApexCharts",Drilldown + Hover
|
|
22
|
-
21,Root Cause Analysis,"root cause, decomposition, tree, hierarchy, drill-down, ai-split",Decomposition Tree,"Decision Tree, Flow Chart",Nodes: #2563EB (Primary) vs #EF4444 (Negative impact). Connectors: Neutral grey.,⚠ Moderate (calculation heavy),✓ clear hierarchy. Allow keyboard navigation for nodes.,"Power BI (native), React-Flow, Custom D3.js",Drill + Expand
|
|
23
|
-
22,3D Spatial Data,"3d, spatial, immersive, terrain, molecular, volumetric",3D Scatter/Surface Plot,"Volumetric Rendering, Point Cloud",Depth cues: lighting/shading. Z-axis: color gradient (cool to warm).,❌ Heavy (WebGL required),❌ Poor - requires alternative 2D view or data table.,"Three.js, Deck.gl, Plotly 3D",Rotate + Zoom + VR
|
|
24
|
-
23,Real-Time Streaming,"streaming, real-time, ticker, live, velocity, pulse",Streaming Area Chart,"Ticker Tape, Moving Gauge",Current: Bright Pulse (#00FF00). History: Fading opacity. Grid: Dark.,⚡ Optimized (canvas/webgl),⚠ Flashing elements - provide pause button. High contrast.,Smoothed D3.js, CanvasJS
|
|
25
|
-
24,Sentiment/Emotion,"sentiment, emotion, nlp, opinion, feeling",Word Cloud with Sentiment,"Sentiment Arc, Radar Chart",Positive: #22C55E. Negative: #EF4444. Neutral: #94A3B8. Size = Frequency.,⚡ Good,⚠ Word clouds poor for screen readers. Use list view.,"D3-cloud, Highcharts, Nivo",Hover + Filter
|
|
26
|
-
25,Process Mining,"process, mining, variants, path, bottleneck, log",Process Map / Graph,"Directed Acyclic Graph (DAG), Petri Net",Happy path: #10B981 (Thick). Deviations: #F59E0B (Thin). Bottlenecks: #EF4444.,⚠ Moderate to Heavy,⚠ Complex graphs hard to navigate. Provide path summary.,"React-Flow, Cytoscape.js, Recharts",Drag + Node-Click
|
|
1
|
+
No,Data Type,Keywords,Best Chart Type,Secondary Options,Color Guidance,Performance Impact,Accessibility Notes,Library Recommendation,Interactive Level
|
|
2
|
+
1,Trend Over Time,"trend, time-series, line, growth, timeline, progress",Line Chart,"Area Chart, Smooth Area",Primary: #0080FF. Multiple series: use distinct colors. Fill: 20% opacity,⚡ Excellent (optimized),✓ Clear line patterns for colorblind users. Add pattern overlays.,"Chart.js, Recharts, ApexCharts",Hover + Zoom
|
|
3
|
+
2,Compare Categories,"compare, categories, bar, comparison, ranking",Bar Chart (Horizontal or Vertical),"Column Chart, Grouped Bar",Each bar: distinct color. Category: grouped same color. Sorted: descending order,⚡ Excellent,✓ Easy to compare. Add value labels on bars for clarity.,"Chart.js, Recharts, D3.js",Hover + Sort
|
|
4
|
+
3,Part-to-Whole,"part-to-whole, pie, donut, percentage, proportion, share",Pie Chart or Donut,"Stacked Bar, Treemap",Colors: 5-6 max. Contrasting palette. Large slices first. Use labels.,⚡ Good (limit 6 slices),⚠ Hard for accessibility. Better: Stacked bar with legend. Avoid pie if >5 items.,"Chart.js, Recharts, D3.js",Hover + Drill
|
|
5
|
+
4,Correlation/Distribution,"correlation, distribution, scatter, relationship, pattern",Scatter Plot or Bubble Chart,"Heat Map, Matrix",Color axis: gradient (blue-red). Size: relative. Opacity: 0.6-0.8 to show density,⚠ Moderate (many points),⚠ Provide data table alternative. Use pattern + color distinction.,"D3.js, Plotly, Recharts",Hover + Brush
|
|
6
|
+
5,Heatmap/Intensity,"heatmap, heat-map, intensity, density, matrix",Heat Map or Choropleth,"Grid Heat Map, Bubble Heat",Gradient: Cool (blue) to Hot (red). Scale: clear legend. Divergent for ±data,⚡ Excellent (color CSS),⚠ Colorblind: Use pattern overlay. Provide numerical legend.,"D3.js, Plotly, ApexCharts",Hover + Zoom
|
|
7
|
+
6,Geographic Data,"geographic, map, location, region, geo, spatial","Choropleth Map, Bubble Map",Geographic Heat Map,Regional: single color gradient or categorized colors. Legend: clear scale,⚠ Moderate (rendering),⚠ Include text labels for regions. Provide data table alternative.,"D3.js, Mapbox, Leaflet",Pan + Zoom + Drill
|
|
8
|
+
7,Funnel/Flow,funnel/flow,"Funnel Chart, Sankey",Waterfall (for flows),Stages: gradient (starting color → ending color). Show conversion %,⚡ Good,✓ Clear stage labels + percentages. Good for accessibility if labeled.,"D3.js, Recharts, Custom SVG",Hover + Drill
|
|
9
|
+
8,Performance vs Target,performance-vs-target,Gauge Chart or Bullet Chart,"Dial, Thermometer",Performance: Red→Yellow→Green gradient. Target: marker line. Threshold colors,⚡ Good,✓ Add numerical value + percentage label beside gauge.,"D3.js, ApexCharts, Custom SVG",Hover
|
|
10
|
+
9,Time-Series Forecast,time-series-forecast,Line with Confidence Band,Ribbon Chart,Actual: solid line #0080FF. Forecast: dashed #FF9500. Band: light shading,⚡ Good,✓ Clearly distinguish actual vs forecast. Add legend.,"Chart.js, ApexCharts, Plotly",Hover + Toggle
|
|
11
|
+
10,Anomaly Detection,anomaly-detection,Line Chart with Highlights,Scatter with Alert,Normal: blue #0080FF. Anomaly: red #FF0000 circle/square marker + alert,⚡ Good,✓ Circle/marker for anomalies. Add text alert annotation.,"D3.js, Plotly, ApexCharts",Hover + Alert
|
|
12
|
+
11,Hierarchical/Nested Data,hierarchical/nested-data,Treemap,"Sunburst, Nested Donut, Icicle",Parent: distinct hues. Children: lighter shades. White borders 2-3px.,⚠ Moderate,⚠ Poor - provide table alternative. Label large areas.,"D3.js, Recharts, ApexCharts",Hover + Drilldown
|
|
13
|
+
12,Flow/Process Data,flow/process-data,Sankey Diagram,"Alluvial, Chord Diagram",Gradient from source to target. Opacity 0.4-0.6 for flows.,⚠ Moderate,⚠ Poor - provide flow table alternative.,"D3.js (d3-sankey), Plotly",Hover + Drilldown
|
|
14
|
+
13,Cumulative Changes,cumulative-changes,Waterfall Chart,"Stacked Bar, Cascade",Increases: #4CAF50. Decreases: #F44336. Start: #2196F3. End: #0D47A1.,⚡ Good,✓ Good - clear directional colors with labels.,"ApexCharts, Highcharts, Plotly",Hover
|
|
15
|
+
14,Multi-Variable Comparison,multi-variable-comparison,Radar/Spider Chart,"Parallel Coordinates, Grouped Bar",Single: #0080FF 20% fill. Multiple: distinct colors per dataset.,⚡ Good,⚠ Moderate - limit 5-8 axes. Add data table.,"Chart.js, Recharts, ApexCharts",Hover + Toggle
|
|
16
|
+
15,Stock/Trading OHLC,stock/trading-ohlc,Candlestick Chart,"OHLC Bar, Heikin-Ashi",Bullish: #26A69A. Bearish: #EF5350. Volume: 40% opacity below.,⚡ Good,⚠ Moderate - provide OHLC data table.,"Lightweight Charts (TradingView), ApexCharts",Real-time + Hover + Zoom
|
|
17
|
+
16,Relationship/Connection Data,relationship/connection-data,Network Graph,"Hierarchical Tree, Adjacency Matrix",Node types: categorical colors. Edges: #90A4AE 60% opacity.,❌ Poor (500+ nodes struggles),❌ Very Poor - provide adjacency list alternative.,"D3.js (d3-force), Vis.js, Cytoscape.js",Drilldown + Hover + Drag
|
|
18
|
+
17,Distribution/Statistical,distribution/statistical,Box Plot,"Violin Plot, Beeswarm",Box: #BBDEFB. Border: #1976D2. Median: #D32F2F. Outliers: #F44336.,⚡ Excellent,"✓ Good - include stats table (min, Q1, median, Q3, max).","Plotly, D3.js, Chart.js (plugin)",Hover
|
|
19
|
+
18,Performance vs Target (Compact),performance-vs-target-(compact),Bullet Chart,"Gauge, Progress Bar","Ranges: #FFCDD2, #FFF9C4, #C8E6C9. Performance: #1976D2. Target: black 3px.",⚡ Excellent,✓ Excellent - compact with clear values.,"D3.js, Plotly, Custom SVG",Hover
|
|
20
|
+
19,Proportional/Percentage,proportional/percentage,Waffle Chart,"Pictogram, Stacked Bar 100%",10x10 grid. 3-5 categories max. 2-3px spacing between squares.,⚡ Good,✓ Good - better than pie for accessibility.,"D3.js, React-Waffle, Custom CSS Grid",Hover
|
|
21
|
+
20,Hierarchical Proportional,hierarchical-proportional,Sunburst Chart,"Treemap, Icicle, Circle Packing",Center to outer: darker to lighter. 15-20% lighter per level.,⚠ Moderate,⚠ Poor - provide hierarchy table alternative.,"D3.js (d3-hierarchy), Recharts, ApexCharts",Drilldown + Hover
|
|
22
|
+
21,Root Cause Analysis,"root cause, decomposition, tree, hierarchy, drill-down, ai-split",Decomposition Tree,"Decision Tree, Flow Chart",Nodes: #2563EB (Primary) vs #EF4444 (Negative impact). Connectors: Neutral grey.,⚠ Moderate (calculation heavy),✓ clear hierarchy. Allow keyboard navigation for nodes.,"Power BI (native), React-Flow, Custom D3.js",Drill + Expand
|
|
23
|
+
22,3D Spatial Data,"3d, spatial, immersive, terrain, molecular, volumetric",3D Scatter/Surface Plot,"Volumetric Rendering, Point Cloud",Depth cues: lighting/shading. Z-axis: color gradient (cool to warm).,❌ Heavy (WebGL required),❌ Poor - requires alternative 2D view or data table.,"Three.js, Deck.gl, Plotly 3D",Rotate + Zoom + VR
|
|
24
|
+
23,Real-Time Streaming,"streaming, real-time, ticker, live, velocity, pulse",Streaming Area Chart,"Ticker Tape, Moving Gauge",Current: Bright Pulse (#00FF00). History: Fading opacity. Grid: Dark.,⚡ Optimized (canvas/webgl),⚠ Flashing elements - provide pause button. High contrast.,Smoothed D3.js, CanvasJS
|
|
25
|
+
24,Sentiment/Emotion,"sentiment, emotion, nlp, opinion, feeling",Word Cloud with Sentiment,"Sentiment Arc, Radar Chart",Positive: #22C55E. Negative: #EF4444. Neutral: #94A3B8. Size = Frequency.,⚡ Good,⚠ Word clouds poor for screen readers. Use list view.,"D3-cloud, Highcharts, Nivo",Hover + Filter
|
|
26
|
+
25,Process Mining,"process, mining, variants, path, bottleneck, log",Process Map / Graph,"Directed Acyclic Graph (DAG), Petri Net",Happy path: #10B981 (Thick). Deviations: #F59E0B (Thin). Bottlenecks: #EF4444.,⚠ Moderate to Heavy,⚠ Complex graphs hard to navigate. Provide path summary.,"React-Flow, Cytoscape.js, Recharts",Drag + Node-Click
|