@unbrained/pm-cli 2026.3.9
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/.pi/extensions/pm-cli/index.ts +778 -0
- package/AGENTS.md +475 -0
- package/LICENSE +21 -0
- package/PRD.md +1390 -0
- package/README.md +655 -0
- package/dist/cli/commands/activity.d.ts +14 -0
- package/dist/cli/commands/activity.js +80 -0
- package/dist/cli/commands/activity.js.map +1 -0
- package/dist/cli/commands/append.d.ts +13 -0
- package/dist/cli/commands/append.js +46 -0
- package/dist/cli/commands/append.js.map +1 -0
- package/dist/cli/commands/beads.d.ts +15 -0
- package/dist/cli/commands/beads.js +475 -0
- package/dist/cli/commands/beads.js.map +1 -0
- package/dist/cli/commands/claim.d.ts +19 -0
- package/dist/cli/commands/claim.js +79 -0
- package/dist/cli/commands/claim.js.map +1 -0
- package/dist/cli/commands/close.d.ts +12 -0
- package/dist/cli/commands/close.js +58 -0
- package/dist/cli/commands/close.js.map +1 -0
- package/dist/cli/commands/comments.d.ts +15 -0
- package/dist/cli/commands/comments.js +80 -0
- package/dist/cli/commands/comments.js.map +1 -0
- package/dist/cli/commands/completion.d.ts +10 -0
- package/dist/cli/commands/completion.js +469 -0
- package/dist/cli/commands/completion.js.map +1 -0
- package/dist/cli/commands/config.d.ts +15 -0
- package/dist/cli/commands/config.js +72 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/create.d.ts +60 -0
- package/dist/cli/commands/create.js +456 -0
- package/dist/cli/commands/create.js.map +1 -0
- package/dist/cli/commands/delete.d.ts +12 -0
- package/dist/cli/commands/delete.js +33 -0
- package/dist/cli/commands/delete.js.map +1 -0
- package/dist/cli/commands/docs.d.ts +16 -0
- package/dist/cli/commands/docs.js +113 -0
- package/dist/cli/commands/docs.js.map +1 -0
- package/dist/cli/commands/files.d.ts +17 -0
- package/dist/cli/commands/files.js +113 -0
- package/dist/cli/commands/files.js.map +1 -0
- package/dist/cli/commands/gc.d.ts +9 -0
- package/dist/cli/commands/gc.js +80 -0
- package/dist/cli/commands/gc.js.map +1 -0
- package/dist/cli/commands/get.d.ts +12 -0
- package/dist/cli/commands/get.js +28 -0
- package/dist/cli/commands/get.js.map +1 -0
- package/dist/cli/commands/health.d.ts +15 -0
- package/dist/cli/commands/health.js +288 -0
- package/dist/cli/commands/health.js.map +1 -0
- package/dist/cli/commands/history.d.ts +13 -0
- package/dist/cli/commands/history.js +72 -0
- package/dist/cli/commands/history.js.map +1 -0
- package/dist/cli/commands/index.d.ts +26 -0
- package/dist/cli/commands/index.js +27 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +10 -0
- package/dist/cli/commands/init.js +59 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +18 -0
- package/dist/cli/commands/install.js +87 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/list.d.ts +21 -0
- package/dist/cli/commands/list.js +137 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/reindex.d.ts +16 -0
- package/dist/cli/commands/reindex.js +154 -0
- package/dist/cli/commands/reindex.js.map +1 -0
- package/dist/cli/commands/restore.d.ts +20 -0
- package/dist/cli/commands/restore.js +208 -0
- package/dist/cli/commands/restore.js.map +1 -0
- package/dist/cli/commands/search.d.ts +45 -0
- package/dist/cli/commands/search.js +531 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/stats.d.ts +13 -0
- package/dist/cli/commands/stats.js +88 -0
- package/dist/cli/commands/stats.js.map +1 -0
- package/dist/cli/commands/test-all.d.ts +30 -0
- package/dist/cli/commands/test-all.js +157 -0
- package/dist/cli/commands/test-all.js.map +1 -0
- package/dist/cli/commands/test.d.ts +29 -0
- package/dist/cli/commands/test.js +492 -0
- package/dist/cli/commands/test.js.map +1 -0
- package/dist/cli/commands/update.d.ts +52 -0
- package/dist/cli/commands/update.js +467 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/extension-command-options.d.ts +1 -0
- package/dist/cli/extension-command-options.js +76 -0
- package/dist/cli/extension-command-options.js.map +1 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +1494 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +3 -0
- package/dist/cli.js.map +1 -0
- package/dist/command-types.d.ts +1 -0
- package/dist/command-types.js +2 -0
- package/dist/command-types.js.map +1 -0
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -0
- package/dist/core/extensions/builtins.d.ts +3 -0
- package/dist/core/extensions/builtins.js +47 -0
- package/dist/core/extensions/builtins.js.map +1 -0
- package/dist/core/extensions/index.d.ts +13 -0
- package/dist/core/extensions/index.js +88 -0
- package/dist/core/extensions/index.js.map +1 -0
- package/dist/core/extensions/loader.d.ts +301 -0
- package/dist/core/extensions/loader.js +917 -0
- package/dist/core/extensions/loader.js.map +1 -0
- package/dist/core/fs/fs-utils.d.ts +6 -0
- package/dist/core/fs/fs-utils.js +58 -0
- package/dist/core/fs/fs-utils.js.map +1 -0
- package/dist/core/fs/index.d.ts +1 -0
- package/dist/core/fs/index.js +2 -0
- package/dist/core/fs/index.js.map +1 -0
- package/dist/core/history/history.d.ts +12 -0
- package/dist/core/history/history.js +44 -0
- package/dist/core/history/history.js.map +1 -0
- package/dist/core/history/index.d.ts +1 -0
- package/dist/core/history/index.js +2 -0
- package/dist/core/history/index.js.map +1 -0
- package/dist/core/item/id.d.ts +3 -0
- package/dist/core/item/id.js +54 -0
- package/dist/core/item/id.js.map +1 -0
- package/dist/core/item/index.d.ts +3 -0
- package/dist/core/item/index.js +4 -0
- package/dist/core/item/index.js.map +1 -0
- package/dist/core/item/item-format.d.ts +9 -0
- package/dist/core/item/item-format.js +363 -0
- package/dist/core/item/item-format.js.map +1 -0
- package/dist/core/item/parse.d.ts +3 -0
- package/dist/core/item/parse.js +72 -0
- package/dist/core/item/parse.js.map +1 -0
- package/dist/core/lock/index.d.ts +1 -0
- package/dist/core/lock/index.js +2 -0
- package/dist/core/lock/index.js.map +1 -0
- package/dist/core/lock/lock.d.ts +1 -0
- package/dist/core/lock/lock.js +100 -0
- package/dist/core/lock/lock.js.map +1 -0
- package/dist/core/output/output.d.ts +7 -0
- package/dist/core/output/output.js +79 -0
- package/dist/core/output/output.js.map +1 -0
- package/dist/core/search/cache.d.ts +17 -0
- package/dist/core/search/cache.js +212 -0
- package/dist/core/search/cache.js.map +1 -0
- package/dist/core/search/embedding-batches.d.ts +7 -0
- package/dist/core/search/embedding-batches.js +54 -0
- package/dist/core/search/embedding-batches.js.map +1 -0
- package/dist/core/search/providers.d.ts +59 -0
- package/dist/core/search/providers.js +265 -0
- package/dist/core/search/providers.js.map +1 -0
- package/dist/core/search/vector-stores.d.ts +89 -0
- package/dist/core/search/vector-stores.js +546 -0
- package/dist/core/search/vector-stores.js.map +1 -0
- package/dist/core/shared/command-types.d.ts +7 -0
- package/dist/core/shared/command-types.js +2 -0
- package/dist/core/shared/command-types.js.map +1 -0
- package/dist/core/shared/constants.d.ts +19 -0
- package/dist/core/shared/constants.js +134 -0
- package/dist/core/shared/constants.js.map +1 -0
- package/dist/core/shared/errors.d.ts +4 -0
- package/dist/core/shared/errors.js +9 -0
- package/dist/core/shared/errors.js.map +1 -0
- package/dist/core/shared/index.d.ts +3 -0
- package/dist/core/shared/index.js +4 -0
- package/dist/core/shared/index.js.map +1 -0
- package/dist/core/shared/serialization.d.ts +3 -0
- package/dist/core/shared/serialization.js +70 -0
- package/dist/core/shared/serialization.js.map +1 -0
- package/dist/core/shared/time.d.ts +3 -0
- package/dist/core/shared/time.js +28 -0
- package/dist/core/shared/time.js.map +1 -0
- package/dist/core/store/index.d.ts +3 -0
- package/dist/core/store/index.js +4 -0
- package/dist/core/store/index.js.map +1 -0
- package/dist/core/store/item-store.d.ts +42 -0
- package/dist/core/store/item-store.js +186 -0
- package/dist/core/store/item-store.js.map +1 -0
- package/dist/core/store/paths.d.ts +8 -0
- package/dist/core/store/paths.js +29 -0
- package/dist/core/store/paths.js.map +1 -0
- package/dist/core/store/settings.d.ts +4 -0
- package/dist/core/store/settings.js +148 -0
- package/dist/core/store/settings.js.map +1 -0
- package/dist/errors.d.ts +1 -0
- package/dist/errors.js +2 -0
- package/dist/errors.js.map +1 -0
- package/dist/extensions/builtins/beads/index.d.ts +8 -0
- package/dist/extensions/builtins/beads/index.js +29 -0
- package/dist/extensions/builtins/beads/index.js.map +1 -0
- package/dist/extensions/builtins/todos/import-export.d.ts +26 -0
- package/dist/extensions/builtins/todos/import-export.js +460 -0
- package/dist/extensions/builtins/todos/import-export.js.map +1 -0
- package/dist/extensions/builtins/todos/index.d.ts +8 -0
- package/dist/extensions/builtins/todos/index.js +38 -0
- package/dist/extensions/builtins/todos/index.js.map +1 -0
- package/dist/fs-utils.d.ts +1 -0
- package/dist/fs-utils.js +2 -0
- package/dist/fs-utils.js.map +1 -0
- package/dist/history.d.ts +1 -0
- package/dist/history.js +2 -0
- package/dist/history.js.map +1 -0
- package/dist/id.d.ts +1 -0
- package/dist/id.js +2 -0
- package/dist/id.js.map +1 -0
- package/dist/item-format.d.ts +1 -0
- package/dist/item-format.js +2 -0
- package/dist/item-format.js.map +1 -0
- package/dist/item-store.d.ts +1 -0
- package/dist/item-store.js +2 -0
- package/dist/item-store.js.map +1 -0
- package/dist/lock.d.ts +1 -0
- package/dist/lock.js +2 -0
- package/dist/lock.js.map +1 -0
- package/dist/output.d.ts +1 -0
- package/dist/output.js +2 -0
- package/dist/output.js.map +1 -0
- package/dist/parse.d.ts +1 -0
- package/dist/parse.js +2 -0
- package/dist/parse.js.map +1 -0
- package/dist/paths.d.ts +1 -0
- package/dist/paths.js +2 -0
- package/dist/paths.js.map +1 -0
- package/dist/serialization.d.ts +1 -0
- package/dist/serialization.js +2 -0
- package/dist/serialization.js.map +1 -0
- package/dist/settings.d.ts +1 -0
- package/dist/settings.js +2 -0
- package/dist/settings.js.map +1 -0
- package/dist/time.d.ts +1 -0
- package/dist/time.js +2 -0
- package/dist/time.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types.d.ts +179 -0
- package/dist/types.js +21 -0
- package/dist/types.js.map +1 -0
- package/docs/ARCHITECTURE.md +246 -0
- package/docs/EXTENSIONS.md +329 -0
- package/docs/RELEASING.md +65 -0
- package/package.json +79 -0
- package/scripts/install.ps1 +112 -0
- package/scripts/install.sh +113 -0
|
@@ -0,0 +1,469 @@
|
|
|
1
|
+
import { EXIT_CODE } from "../../core/shared/constants.js";
|
|
2
|
+
import { PmCliError } from "../../core/shared/errors.js";
|
|
3
|
+
const VALID_SHELLS = ["bash", "zsh", "fish"];
|
|
4
|
+
const ALL_COMMANDS = [
|
|
5
|
+
"init",
|
|
6
|
+
"config",
|
|
7
|
+
"install",
|
|
8
|
+
"create",
|
|
9
|
+
"list",
|
|
10
|
+
"list-all",
|
|
11
|
+
"list-draft",
|
|
12
|
+
"list-open",
|
|
13
|
+
"list-in-progress",
|
|
14
|
+
"list-blocked",
|
|
15
|
+
"list-closed",
|
|
16
|
+
"list-canceled",
|
|
17
|
+
"get",
|
|
18
|
+
"search",
|
|
19
|
+
"reindex",
|
|
20
|
+
"history",
|
|
21
|
+
"activity",
|
|
22
|
+
"restore",
|
|
23
|
+
"update",
|
|
24
|
+
"close",
|
|
25
|
+
"delete",
|
|
26
|
+
"append",
|
|
27
|
+
"comments",
|
|
28
|
+
"files",
|
|
29
|
+
"docs",
|
|
30
|
+
"test",
|
|
31
|
+
"test-all",
|
|
32
|
+
"stats",
|
|
33
|
+
"health",
|
|
34
|
+
"gc",
|
|
35
|
+
"claim",
|
|
36
|
+
"release",
|
|
37
|
+
"beads",
|
|
38
|
+
"todos",
|
|
39
|
+
"completion",
|
|
40
|
+
"help",
|
|
41
|
+
];
|
|
42
|
+
const LIST_FLAGS = "--type --tag --priority --deadline-before --deadline-after --assignee --sprint --release --limit --json --quiet --path --no-extensions --profile --help";
|
|
43
|
+
const CREATE_FLAGS = "-t --title -d --description --type -s --status -p --priority --tags -b --body --deadline --estimate --estimated-minutes --acceptance-criteria --ac --author --message --assignee --parent --reviewer --risk --confidence --sprint --release --blocked-by --blocked-reason --unblock-note --reporter --severity --environment --repro-steps --resolution --expected-result --actual-result --affected-version --fixed-version --component --regression --customer-impact --definition-of-ready --order --rank --goal --objective --value --impact --outcome --why-now --dep --comment --note --learning --file --test --doc --json --quiet --path --no-extensions --profile --help";
|
|
44
|
+
const UPDATE_FLAGS = "-t --title -d --description -s --status -p --priority --type --tags --deadline --estimate --estimated-minutes --acceptance-criteria --ac --assignee --parent --reviewer --risk --confidence --sprint --release --blocked-by --blocked-reason --unblock-note --reporter --severity --environment --repro-steps --resolution --expected-result --actual-result --affected-version --fixed-version --component --regression --customer-impact --definition-of-ready --order --rank --goal --objective --value --impact --outcome --why-now --author --message --force --json --quiet --path --no-extensions --profile --help";
|
|
45
|
+
const SEARCH_FLAGS = "--mode --include-linked --limit --type --tag --priority --deadline-before --deadline-after --json --quiet --path --no-extensions --profile --help";
|
|
46
|
+
const MUTATION_FLAGS = "--author --message --force --json --quiet --path --no-extensions --profile --help";
|
|
47
|
+
const GLOBAL_FLAGS = "--json --quiet --path --no-extensions --profile --version --help";
|
|
48
|
+
export function generateBashScript() {
|
|
49
|
+
const cmds = ALL_COMMANDS.join(" ");
|
|
50
|
+
// Note: "${...}" inside regular (non-template) strings are literal characters,
|
|
51
|
+
// not JS interpolation. Only backtick template literals interpolate ${...}.
|
|
52
|
+
const compgen = (flags) => `$(compgen -W "${flags}" -- "$cur")`;
|
|
53
|
+
return [
|
|
54
|
+
"# bash completion for pm",
|
|
55
|
+
'# Source this file or add \'eval "$(pm completion bash)"\' to ~/.bashrc',
|
|
56
|
+
"",
|
|
57
|
+
"_pm_completion() {",
|
|
58
|
+
" local cur prev words cword",
|
|
59
|
+
" _init_completion 2>/dev/null || {",
|
|
60
|
+
' cur="${COMP_WORDS[COMP_CWORD]}"',
|
|
61
|
+
' prev="${COMP_WORDS[COMP_CWORD-1]}"',
|
|
62
|
+
" cword=$COMP_CWORD",
|
|
63
|
+
" }",
|
|
64
|
+
"",
|
|
65
|
+
" if [[ $cword -eq 1 ]]; then",
|
|
66
|
+
` COMPREPLY=(${compgen(cmds)})`,
|
|
67
|
+
" return 0",
|
|
68
|
+
" fi",
|
|
69
|
+
"",
|
|
70
|
+
' local cmd="${COMP_WORDS[1]}"',
|
|
71
|
+
"",
|
|
72
|
+
' case "$cmd" in',
|
|
73
|
+
" list|list-all|list-draft|list-open|list-in-progress|list-blocked|list-closed|list-canceled)",
|
|
74
|
+
` COMPREPLY=(${compgen(LIST_FLAGS)})`,
|
|
75
|
+
" ;;",
|
|
76
|
+
" create)",
|
|
77
|
+
` COMPREPLY=(${compgen(CREATE_FLAGS)})`,
|
|
78
|
+
" ;;",
|
|
79
|
+
" update)",
|
|
80
|
+
` COMPREPLY=(${compgen(UPDATE_FLAGS)})`,
|
|
81
|
+
" ;;",
|
|
82
|
+
" search)",
|
|
83
|
+
` COMPREPLY=(${compgen(SEARCH_FLAGS)})`,
|
|
84
|
+
" ;;",
|
|
85
|
+
" reindex)",
|
|
86
|
+
` COMPREPLY=(${compgen("--mode --json --quiet --path --no-extensions --profile --help")})`,
|
|
87
|
+
" ;;",
|
|
88
|
+
" config)",
|
|
89
|
+
` COMPREPLY=(${compgen("--criterion --json --quiet --path --no-extensions --profile --help")})`,
|
|
90
|
+
" ;;",
|
|
91
|
+
" install)",
|
|
92
|
+
` COMPREPLY=(${compgen("pi --project --global --json --quiet --path --no-extensions --profile --help")})`,
|
|
93
|
+
" ;;",
|
|
94
|
+
" comments)",
|
|
95
|
+
` COMPREPLY=(${compgen("--add --limit --json --quiet --path --no-extensions --profile --help")})`,
|
|
96
|
+
" ;;",
|
|
97
|
+
" files|docs)",
|
|
98
|
+
` COMPREPLY=(${compgen("--add --remove --json --quiet --path --no-extensions --profile --help")})`,
|
|
99
|
+
" ;;",
|
|
100
|
+
" test)",
|
|
101
|
+
` COMPREPLY=(${compgen("--add --remove --run --timeout --json --quiet --path --no-extensions --profile --help")})`,
|
|
102
|
+
" ;;",
|
|
103
|
+
" test-all)",
|
|
104
|
+
` COMPREPLY=(${compgen("--status --timeout --json --quiet --path --no-extensions --profile --help")})`,
|
|
105
|
+
" ;;",
|
|
106
|
+
" history|activity)",
|
|
107
|
+
` COMPREPLY=(${compgen("--limit --json --quiet --path --no-extensions --profile --help")})`,
|
|
108
|
+
" ;;",
|
|
109
|
+
" claim|release|close|delete|append|restore)",
|
|
110
|
+
` COMPREPLY=(${compgen(MUTATION_FLAGS)})`,
|
|
111
|
+
" ;;",
|
|
112
|
+
" beads)",
|
|
113
|
+
` COMPREPLY=(${compgen("import")})`,
|
|
114
|
+
" ;;",
|
|
115
|
+
" todos)",
|
|
116
|
+
` COMPREPLY=(${compgen("import export")})`,
|
|
117
|
+
" ;;",
|
|
118
|
+
" completion)",
|
|
119
|
+
` COMPREPLY=(${compgen("bash zsh fish")})`,
|
|
120
|
+
" ;;",
|
|
121
|
+
" *)",
|
|
122
|
+
` COMPREPLY=(${compgen(GLOBAL_FLAGS)})`,
|
|
123
|
+
" ;;",
|
|
124
|
+
" esac",
|
|
125
|
+
" return 0",
|
|
126
|
+
"}",
|
|
127
|
+
"",
|
|
128
|
+
"complete -F _pm_completion pm",
|
|
129
|
+
].join("\n");
|
|
130
|
+
}
|
|
131
|
+
export function generateZshScript() {
|
|
132
|
+
const cmds = ALL_COMMANDS.map((c) => `'${c}'`).join(" ");
|
|
133
|
+
return `#compdef pm
|
|
134
|
+
# zsh completion for pm
|
|
135
|
+
# Source this file or add 'eval "$(pm completion zsh)"' to ~/.zshrc
|
|
136
|
+
|
|
137
|
+
_pm_commands() {
|
|
138
|
+
local -a commands
|
|
139
|
+
commands=(
|
|
140
|
+
'init:Initialize .agents/pm storage and settings'
|
|
141
|
+
'config:Read or update deterministic pm settings'
|
|
142
|
+
'install:Install supported integrations'
|
|
143
|
+
'create:Create a new item'
|
|
144
|
+
'list:List items with optional filters'
|
|
145
|
+
'list-all:List all items with optional filters'
|
|
146
|
+
'list-draft:List draft items'
|
|
147
|
+
'list-open:List open items'
|
|
148
|
+
'list-in-progress:List in-progress items'
|
|
149
|
+
'list-blocked:List blocked items'
|
|
150
|
+
'list-closed:List closed items'
|
|
151
|
+
'list-canceled:List canceled items'
|
|
152
|
+
'get:Get item details by id'
|
|
153
|
+
'search:Search items across keyword and optional semantic/hybrid modes'
|
|
154
|
+
'reindex:Rebuild deterministic search artifacts'
|
|
155
|
+
'history:Show item history'
|
|
156
|
+
'activity:Show recent activity'
|
|
157
|
+
'restore:Restore item to previous state'
|
|
158
|
+
'update:Update item fields'
|
|
159
|
+
'close:Close an item with required reason text'
|
|
160
|
+
'delete:Delete an item'
|
|
161
|
+
'append:Append text to item body'
|
|
162
|
+
'comments:List or append comments for an item'
|
|
163
|
+
'files:Manage linked files'
|
|
164
|
+
'docs:Manage linked docs'
|
|
165
|
+
'test:Manage linked tests and optionally run them'
|
|
166
|
+
'test-all:Run linked test commands across many items'
|
|
167
|
+
'stats:Show tracker statistics summary'
|
|
168
|
+
'health:Show tracker health checks summary'
|
|
169
|
+
'gc:Collect optional cache artifacts'
|
|
170
|
+
'claim:Claim ownership of an item'
|
|
171
|
+
'release:Release ownership of an item'
|
|
172
|
+
'beads:Built-in Beads extension commands'
|
|
173
|
+
'todos:Built-in todos extension commands'
|
|
174
|
+
'completion:Generate shell completion script'
|
|
175
|
+
'help:Display help for a command'
|
|
176
|
+
)
|
|
177
|
+
_describe 'command' commands
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
_pm() {
|
|
181
|
+
local context state line
|
|
182
|
+
_arguments -C \\
|
|
183
|
+
'--json[Output JSON instead of TOON]' \\
|
|
184
|
+
'--quiet[Suppress stdout output]' \\
|
|
185
|
+
'--path[Override PM path for this command]:path:_files -/' \\
|
|
186
|
+
'--no-extensions[Disable extension loading]' \\
|
|
187
|
+
'--profile[Print deterministic timing diagnostics]' \\
|
|
188
|
+
'(-V --version)--version[Output the version number]' \\
|
|
189
|
+
'(-h --help)--help[Display help]' \\
|
|
190
|
+
'1: :_pm_commands' \\
|
|
191
|
+
'*:: :->args' && return 0
|
|
192
|
+
|
|
193
|
+
case $state in
|
|
194
|
+
args)
|
|
195
|
+
case $line[1] in
|
|
196
|
+
list|list-all|list-draft|list-open|list-in-progress|list-blocked|list-closed|list-canceled)
|
|
197
|
+
_arguments \\
|
|
198
|
+
'--type[Filter by item type]:(Epic Feature Task Chore Issue)' \\
|
|
199
|
+
'--tag[Filter by tag]:tag' \\
|
|
200
|
+
'--priority[Filter by priority]:(0 1 2 3 4)' \\
|
|
201
|
+
'--deadline-before[Filter by deadline upper bound]:date' \\
|
|
202
|
+
'--deadline-after[Filter by deadline lower bound]:date' \\
|
|
203
|
+
'--assignee[Filter by assignee (use none for unassigned)]:assignee' \\
|
|
204
|
+
'--sprint[Filter by sprint]:sprint' \\
|
|
205
|
+
'--release[Filter by release]:release' \\
|
|
206
|
+
'--limit[Limit returned item count]:number' \\
|
|
207
|
+
'--json[Output JSON]' \\
|
|
208
|
+
'--quiet[Suppress stdout]' \\
|
|
209
|
+
'--path[Override PM path]:path:_files -/'
|
|
210
|
+
;;
|
|
211
|
+
create)
|
|
212
|
+
_arguments \\
|
|
213
|
+
'(-t --title)'{-t,--title}'[Item title]:title' \\
|
|
214
|
+
'(-d --description)'{-d,--description}'[Item description]:description' \\
|
|
215
|
+
'--type[Item type]:(Epic Feature Task Chore Issue)' \\
|
|
216
|
+
'(-s --status)'{-s,--status}'[Item status]:(draft open in_progress blocked)' \\
|
|
217
|
+
'(-p --priority)'{-p,--priority}'[Priority (0-4)]:(0 1 2 3 4)' \\
|
|
218
|
+
'--tags[Comma-separated tags]:tags' \\
|
|
219
|
+
'(-b --body)'{-b,--body}'[Item body]:body' \\
|
|
220
|
+
'--deadline[Deadline (ISO or relative +1d/+2w)]:deadline' \\
|
|
221
|
+
'--estimate[Estimated minutes]:minutes' \\
|
|
222
|
+
'--acceptance-criteria[Acceptance criteria]:criteria' \\
|
|
223
|
+
'--author[Mutation author]:author' \\
|
|
224
|
+
'--message[History message]:message' \\
|
|
225
|
+
'--assignee[Assignee (none to unset)]:assignee' \\
|
|
226
|
+
'--json[Output JSON]' \\
|
|
227
|
+
'--quiet[Suppress stdout]'
|
|
228
|
+
;;
|
|
229
|
+
update)
|
|
230
|
+
_arguments \\
|
|
231
|
+
'(-t --title)'{-t,--title}'[Item title]:title' \\
|
|
232
|
+
'(-d --description)'{-d,--description}'[Item description]:description' \\
|
|
233
|
+
'(-s --status)'{-s,--status}'[Item status]:(draft open in_progress blocked canceled)' \\
|
|
234
|
+
'(-p --priority)'{-p,--priority}'[Priority (0-4)]:(0 1 2 3 4)' \\
|
|
235
|
+
'--type[Item type]:(Epic Feature Task Chore Issue)' \\
|
|
236
|
+
'--tags[Comma-separated tags]:tags' \\
|
|
237
|
+
'--author[Mutation author]:author' \\
|
|
238
|
+
'--message[History message]:message' \\
|
|
239
|
+
'--force[Force override]' \\
|
|
240
|
+
'--json[Output JSON]' \\
|
|
241
|
+
'--quiet[Suppress stdout]'
|
|
242
|
+
;;
|
|
243
|
+
search)
|
|
244
|
+
_arguments \\
|
|
245
|
+
'--mode[Search mode]:(keyword semantic hybrid)' \\
|
|
246
|
+
'--include-linked[Include linked content in scoring]' \\
|
|
247
|
+
'--limit[Max results]:number' \\
|
|
248
|
+
'--type[Filter by type]:(Epic Feature Task Chore Issue)' \\
|
|
249
|
+
'--tag[Filter by tag]:tag' \\
|
|
250
|
+
'--priority[Filter by priority]:(0 1 2 3 4)' \\
|
|
251
|
+
'--json[Output JSON]' \\
|
|
252
|
+
'--quiet[Suppress stdout]'
|
|
253
|
+
;;
|
|
254
|
+
reindex)
|
|
255
|
+
_arguments \\
|
|
256
|
+
'--mode[Reindex mode]:(keyword semantic hybrid)' \\
|
|
257
|
+
'--json[Output JSON]' \\
|
|
258
|
+
'--quiet[Suppress stdout]'
|
|
259
|
+
;;
|
|
260
|
+
history|activity)
|
|
261
|
+
_arguments \\
|
|
262
|
+
'--limit[Max entries]:number' \\
|
|
263
|
+
'--json[Output JSON]' \\
|
|
264
|
+
'--quiet[Suppress stdout]'
|
|
265
|
+
;;
|
|
266
|
+
test-all)
|
|
267
|
+
_arguments \\
|
|
268
|
+
'--status[Filter by status]:(open in_progress)' \\
|
|
269
|
+
'--timeout[Default timeout seconds]:seconds' \\
|
|
270
|
+
'--json[Output JSON]' \\
|
|
271
|
+
'--quiet[Suppress stdout]'
|
|
272
|
+
;;
|
|
273
|
+
install)
|
|
274
|
+
_arguments \\
|
|
275
|
+
'--project[Install Pi extension into current project .pi/extensions]' \\
|
|
276
|
+
'--global[Install Pi extension into global PI_CODING_AGENT_DIR or ~/.pi/agent]' \\
|
|
277
|
+
'--json[Output JSON]' \\
|
|
278
|
+
'--quiet[Suppress stdout]' \\
|
|
279
|
+
'1:target:(pi)'
|
|
280
|
+
;;
|
|
281
|
+
completion)
|
|
282
|
+
_arguments '1:shell:(bash zsh fish)'
|
|
283
|
+
;;
|
|
284
|
+
beads)
|
|
285
|
+
local -a beads_cmds
|
|
286
|
+
beads_cmds=('import:Import Beads JSONL records')
|
|
287
|
+
_describe 'beads command' beads_cmds
|
|
288
|
+
;;
|
|
289
|
+
todos)
|
|
290
|
+
local -a todos_cmds
|
|
291
|
+
todos_cmds=('import:Import todos markdown files' 'export:Export todos markdown files')
|
|
292
|
+
_describe 'todos command' todos_cmds
|
|
293
|
+
;;
|
|
294
|
+
esac
|
|
295
|
+
;;
|
|
296
|
+
esac
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
compdef _pm pm`;
|
|
300
|
+
}
|
|
301
|
+
export function generateFishScript() {
|
|
302
|
+
const listCmds = [
|
|
303
|
+
"list",
|
|
304
|
+
"list-all",
|
|
305
|
+
"list-draft",
|
|
306
|
+
"list-open",
|
|
307
|
+
"list-in-progress",
|
|
308
|
+
"list-blocked",
|
|
309
|
+
"list-closed",
|
|
310
|
+
"list-canceled",
|
|
311
|
+
].join(" ");
|
|
312
|
+
return `# Fish shell completion for pm
|
|
313
|
+
# Save to ~/.config/fish/completions/pm.fish
|
|
314
|
+
# or run: pm completion fish > ~/.config/fish/completions/pm.fish
|
|
315
|
+
|
|
316
|
+
# Disable file completion by default
|
|
317
|
+
complete -c pm -f
|
|
318
|
+
|
|
319
|
+
# Global flags (available for all subcommands)
|
|
320
|
+
complete -c pm -l json -d 'Output JSON instead of TOON'
|
|
321
|
+
complete -c pm -l quiet -d 'Suppress stdout output'
|
|
322
|
+
complete -c pm -l path -d 'Override PM path for this command' -r
|
|
323
|
+
complete -c pm -l no-extensions -d 'Disable extension loading'
|
|
324
|
+
complete -c pm -l profile -d 'Print deterministic timing diagnostics'
|
|
325
|
+
complete -c pm -s V -l version -d 'Output the version number'
|
|
326
|
+
complete -c pm -s h -l help -d 'Display help'
|
|
327
|
+
|
|
328
|
+
# Helper: true when no subcommand has been given yet
|
|
329
|
+
function __pm_no_subcommand
|
|
330
|
+
not __fish_seen_subcommand_from init config install create list list-all list-draft list-open list-in-progress list-blocked list-closed list-canceled get search reindex history activity restore update close delete append comments files docs test test-all stats health gc claim release beads todos completion help
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
# Subcommands
|
|
334
|
+
complete -c pm -n __pm_no_subcommand -a init -d 'Initialize .agents/pm storage and settings'
|
|
335
|
+
complete -c pm -n __pm_no_subcommand -a config -d 'Read or update deterministic pm settings'
|
|
336
|
+
complete -c pm -n __pm_no_subcommand -a install -d 'Install supported integrations'
|
|
337
|
+
complete -c pm -n __pm_no_subcommand -a create -d 'Create a new item'
|
|
338
|
+
complete -c pm -n __pm_no_subcommand -a list -d 'List items with optional filters'
|
|
339
|
+
complete -c pm -n __pm_no_subcommand -a list-all -d 'List all items with optional filters'
|
|
340
|
+
complete -c pm -n __pm_no_subcommand -a list-draft -d 'List draft items'
|
|
341
|
+
complete -c pm -n __pm_no_subcommand -a list-open -d 'List open items'
|
|
342
|
+
complete -c pm -n __pm_no_subcommand -a list-in-progress -d 'List in-progress items'
|
|
343
|
+
complete -c pm -n __pm_no_subcommand -a list-blocked -d 'List blocked items'
|
|
344
|
+
complete -c pm -n __pm_no_subcommand -a list-closed -d 'List closed items'
|
|
345
|
+
complete -c pm -n __pm_no_subcommand -a list-canceled -d 'List canceled items'
|
|
346
|
+
complete -c pm -n __pm_no_subcommand -a get -d 'Get item details by id'
|
|
347
|
+
complete -c pm -n __pm_no_subcommand -a search -d 'Search items across keyword and optional semantic/hybrid modes'
|
|
348
|
+
complete -c pm -n __pm_no_subcommand -a reindex -d 'Rebuild deterministic search artifacts'
|
|
349
|
+
complete -c pm -n __pm_no_subcommand -a history -d 'Show item history'
|
|
350
|
+
complete -c pm -n __pm_no_subcommand -a activity -d 'Show recent activity'
|
|
351
|
+
complete -c pm -n __pm_no_subcommand -a restore -d 'Restore item to previous state'
|
|
352
|
+
complete -c pm -n __pm_no_subcommand -a update -d 'Update item fields'
|
|
353
|
+
complete -c pm -n __pm_no_subcommand -a close -d 'Close an item with required reason text'
|
|
354
|
+
complete -c pm -n __pm_no_subcommand -a delete -d 'Delete an item'
|
|
355
|
+
complete -c pm -n __pm_no_subcommand -a append -d 'Append text to item body'
|
|
356
|
+
complete -c pm -n __pm_no_subcommand -a comments -d 'List or append comments for an item'
|
|
357
|
+
complete -c pm -n __pm_no_subcommand -a files -d 'Manage linked files'
|
|
358
|
+
complete -c pm -n __pm_no_subcommand -a docs -d 'Manage linked docs'
|
|
359
|
+
complete -c pm -n __pm_no_subcommand -a test -d 'Manage linked tests and optionally run them'
|
|
360
|
+
complete -c pm -n __pm_no_subcommand -a test-all -d 'Run linked test commands across many items'
|
|
361
|
+
complete -c pm -n __pm_no_subcommand -a stats -d 'Show tracker statistics summary'
|
|
362
|
+
complete -c pm -n __pm_no_subcommand -a health -d 'Show tracker health checks summary'
|
|
363
|
+
complete -c pm -n __pm_no_subcommand -a gc -d 'Collect optional cache artifacts'
|
|
364
|
+
complete -c pm -n __pm_no_subcommand -a claim -d 'Claim ownership of an item'
|
|
365
|
+
complete -c pm -n __pm_no_subcommand -a release -d 'Release ownership of an item'
|
|
366
|
+
complete -c pm -n __pm_no_subcommand -a beads -d 'Built-in Beads extension commands'
|
|
367
|
+
complete -c pm -n __pm_no_subcommand -a todos -d 'Built-in todos extension commands'
|
|
368
|
+
complete -c pm -n __pm_no_subcommand -a completion -d 'Generate shell completion script'
|
|
369
|
+
|
|
370
|
+
# list* flags
|
|
371
|
+
for list_cmd in ${listCmds}
|
|
372
|
+
complete -c pm -n "__fish_seen_subcommand_from $list_cmd" -l type -d 'Filter by item type' -r -a 'Epic Feature Task Chore Issue'
|
|
373
|
+
complete -c pm -n "__fish_seen_subcommand_from $list_cmd" -l tag -d 'Filter by tag' -r
|
|
374
|
+
complete -c pm -n "__fish_seen_subcommand_from $list_cmd" -l priority -d 'Filter by priority' -r -a '0 1 2 3 4'
|
|
375
|
+
complete -c pm -n "__fish_seen_subcommand_from $list_cmd" -l assignee -d 'Filter by assignee (none for unassigned)' -r
|
|
376
|
+
complete -c pm -n "__fish_seen_subcommand_from $list_cmd" -l sprint -d 'Filter by sprint' -r
|
|
377
|
+
complete -c pm -n "__fish_seen_subcommand_from $list_cmd" -l release -d 'Filter by release' -r
|
|
378
|
+
complete -c pm -n "__fish_seen_subcommand_from $list_cmd" -l limit -d 'Limit returned item count' -r
|
|
379
|
+
complete -c pm -n "__fish_seen_subcommand_from $list_cmd" -l deadline-before -d 'Filter by deadline upper bound' -r
|
|
380
|
+
complete -c pm -n "__fish_seen_subcommand_from $list_cmd" -l deadline-after -d 'Filter by deadline lower bound' -r
|
|
381
|
+
end
|
|
382
|
+
|
|
383
|
+
# create flags
|
|
384
|
+
complete -c pm -n '__fish_seen_subcommand_from create' -s t -l title -d 'Item title' -r
|
|
385
|
+
complete -c pm -n '__fish_seen_subcommand_from create' -s d -l description -d 'Item description' -r
|
|
386
|
+
complete -c pm -n '__fish_seen_subcommand_from create' -l type -d 'Item type' -r -a 'Epic Feature Task Chore Issue'
|
|
387
|
+
complete -c pm -n '__fish_seen_subcommand_from create' -s s -l status -d 'Item status' -r -a 'draft open in_progress blocked'
|
|
388
|
+
complete -c pm -n '__fish_seen_subcommand_from create' -s p -l priority -d 'Priority (0-4)' -r -a '0 1 2 3 4'
|
|
389
|
+
complete -c pm -n '__fish_seen_subcommand_from create' -l tags -d 'Comma-separated tags' -r
|
|
390
|
+
complete -c pm -n '__fish_seen_subcommand_from create' -s b -l body -d 'Item body' -r
|
|
391
|
+
complete -c pm -n '__fish_seen_subcommand_from create' -l deadline -d 'Deadline (ISO or relative +1d/+2w)' -r
|
|
392
|
+
complete -c pm -n '__fish_seen_subcommand_from create' -l estimate -d 'Estimated minutes' -r
|
|
393
|
+
complete -c pm -n '__fish_seen_subcommand_from create' -l acceptance-criteria -d 'Acceptance criteria' -r
|
|
394
|
+
complete -c pm -n '__fish_seen_subcommand_from create' -l author -d 'Mutation author' -r
|
|
395
|
+
complete -c pm -n '__fish_seen_subcommand_from create' -l message -d 'History message' -r
|
|
396
|
+
complete -c pm -n '__fish_seen_subcommand_from create' -l assignee -d 'Assignee (none to unset)' -r
|
|
397
|
+
|
|
398
|
+
# update flags
|
|
399
|
+
complete -c pm -n '__fish_seen_subcommand_from update' -s t -l title -d 'Item title' -r
|
|
400
|
+
complete -c pm -n '__fish_seen_subcommand_from update' -s d -l description -d 'Item description' -r
|
|
401
|
+
complete -c pm -n '__fish_seen_subcommand_from update' -s s -l status -d 'Item status' -r -a 'draft open in_progress blocked canceled'
|
|
402
|
+
complete -c pm -n '__fish_seen_subcommand_from update' -s p -l priority -d 'Priority (0-4)' -r -a '0 1 2 3 4'
|
|
403
|
+
complete -c pm -n '__fish_seen_subcommand_from update' -l type -d 'Item type' -r -a 'Epic Feature Task Chore Issue'
|
|
404
|
+
complete -c pm -n '__fish_seen_subcommand_from update' -l author -d 'Mutation author' -r
|
|
405
|
+
complete -c pm -n '__fish_seen_subcommand_from update' -l message -d 'History message' -r
|
|
406
|
+
complete -c pm -n '__fish_seen_subcommand_from update' -l force -d 'Force override'
|
|
407
|
+
|
|
408
|
+
# search flags
|
|
409
|
+
complete -c pm -n '__fish_seen_subcommand_from search' -l mode -d 'Search mode' -r -a 'keyword semantic hybrid'
|
|
410
|
+
complete -c pm -n '__fish_seen_subcommand_from search' -l include-linked -d 'Include linked content in scoring'
|
|
411
|
+
complete -c pm -n '__fish_seen_subcommand_from search' -l limit -d 'Max results' -r
|
|
412
|
+
complete -c pm -n '__fish_seen_subcommand_from search' -l type -d 'Filter by type' -r -a 'Epic Feature Task Chore Issue'
|
|
413
|
+
complete -c pm -n '__fish_seen_subcommand_from search' -l tag -d 'Filter by tag' -r
|
|
414
|
+
complete -c pm -n '__fish_seen_subcommand_from search' -l priority -d 'Filter by priority' -r -a '0 1 2 3 4'
|
|
415
|
+
|
|
416
|
+
# reindex flags
|
|
417
|
+
complete -c pm -n '__fish_seen_subcommand_from reindex' -l mode -d 'Reindex mode' -r -a 'keyword semantic hybrid'
|
|
418
|
+
|
|
419
|
+
# history / activity flags
|
|
420
|
+
complete -c pm -n '__fish_seen_subcommand_from history' -l limit -d 'Max history entries' -r
|
|
421
|
+
complete -c pm -n '__fish_seen_subcommand_from activity' -l limit -d 'Max activity entries' -r
|
|
422
|
+
|
|
423
|
+
# test-all flags
|
|
424
|
+
complete -c pm -n '__fish_seen_subcommand_from test-all' -l status -d 'Filter by status' -r -a 'open in_progress'
|
|
425
|
+
complete -c pm -n '__fish_seen_subcommand_from test-all' -l timeout -d 'Default timeout seconds' -r
|
|
426
|
+
|
|
427
|
+
# completion shell argument
|
|
428
|
+
complete -c pm -n '__fish_seen_subcommand_from completion' -a 'bash zsh fish' -d 'Shell type'
|
|
429
|
+
|
|
430
|
+
# install target and flags
|
|
431
|
+
complete -c pm -n '__fish_seen_subcommand_from install' -a 'pi' -d 'Install pm Pi extension'
|
|
432
|
+
complete -c pm -n '__fish_seen_subcommand_from install' -l project -d 'Install into current project .pi/extensions'
|
|
433
|
+
complete -c pm -n '__fish_seen_subcommand_from install' -l global -d 'Install into PI_CODING_AGENT_DIR or ~/.pi/agent'
|
|
434
|
+
|
|
435
|
+
# beads subcommands
|
|
436
|
+
complete -c pm -n '__fish_seen_subcommand_from beads' -a import -d 'Import Beads JSONL records'
|
|
437
|
+
|
|
438
|
+
# todos subcommands
|
|
439
|
+
complete -c pm -n '__fish_seen_subcommand_from todos' -a import -d 'Import todos markdown files'
|
|
440
|
+
complete -c pm -n '__fish_seen_subcommand_from todos' -a export -d 'Export todos markdown files'`;
|
|
441
|
+
}
|
|
442
|
+
const SETUP_HINTS = {
|
|
443
|
+
bash: 'Add to ~/.bashrc or ~/.bash_profile: eval "$(pm completion bash)"',
|
|
444
|
+
zsh: 'Add to ~/.zshrc: eval "$(pm completion zsh)"',
|
|
445
|
+
fish: "Run: pm completion fish > ~/.config/fish/completions/pm.fish",
|
|
446
|
+
};
|
|
447
|
+
export function runCompletion(shell) {
|
|
448
|
+
const normalized = shell.trim().toLowerCase();
|
|
449
|
+
if (!VALID_SHELLS.includes(normalized)) {
|
|
450
|
+
throw new PmCliError(`Unknown shell: "${shell}". Supported shells: ${VALID_SHELLS.join(", ")}.`, EXIT_CODE.USAGE);
|
|
451
|
+
}
|
|
452
|
+
const validShell = normalized;
|
|
453
|
+
let script;
|
|
454
|
+
if (validShell === "bash") {
|
|
455
|
+
script = generateBashScript();
|
|
456
|
+
}
|
|
457
|
+
else if (validShell === "zsh") {
|
|
458
|
+
script = generateZshScript();
|
|
459
|
+
}
|
|
460
|
+
else {
|
|
461
|
+
script = generateFishScript();
|
|
462
|
+
}
|
|
463
|
+
return {
|
|
464
|
+
shell: validShell,
|
|
465
|
+
script,
|
|
466
|
+
setup_hint: SETUP_HINTS[validShell],
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
//# sourceMappingURL=completion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../../src/cli/commands/completion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { GlobalOptions } from "../../core/shared/command-types.js";
|
|
2
|
+
declare const CONFIG_SCOPE_VALUES: readonly ["project", "global"];
|
|
3
|
+
type ConfigScope = (typeof CONFIG_SCOPE_VALUES)[number];
|
|
4
|
+
export interface ConfigCommandOptions {
|
|
5
|
+
criterion?: string[];
|
|
6
|
+
}
|
|
7
|
+
export interface ConfigResult {
|
|
8
|
+
scope: ConfigScope;
|
|
9
|
+
key: "definition_of_done";
|
|
10
|
+
criteria: string[];
|
|
11
|
+
settings_path: string;
|
|
12
|
+
changed: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function runConfig(scopeValue: string, actionValue: string, keyValue: string, options: ConfigCommandOptions, global: GlobalOptions): Promise<ConfigResult>;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { pathExists } from "../../core/fs/fs-utils.js";
|
|
2
|
+
import { EXIT_CODE } from "../../core/shared/constants.js";
|
|
3
|
+
import { PmCliError } from "../../core/shared/errors.js";
|
|
4
|
+
import { getSettingsPath, resolveGlobalPmRoot, resolvePmRoot, } from "../../core/store/paths.js";
|
|
5
|
+
import { readSettings, writeSettings } from "../../core/store/settings.js";
|
|
6
|
+
const CONFIG_SCOPE_VALUES = ["project", "global"];
|
|
7
|
+
const CONFIG_KEY_VALUES = ["definition-of-done", "definition_of_done"];
|
|
8
|
+
function normalizeScope(value) {
|
|
9
|
+
if (CONFIG_SCOPE_VALUES.includes(value)) {
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
throw new PmCliError(`Invalid config scope "${value}". Allowed: ${CONFIG_SCOPE_VALUES.join(", ")}`, EXIT_CODE.USAGE);
|
|
13
|
+
}
|
|
14
|
+
function normalizeAction(value) {
|
|
15
|
+
if (value === "get" || value === "set") {
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
throw new PmCliError(`Invalid config action "${value}". Allowed: get, set`, EXIT_CODE.USAGE);
|
|
19
|
+
}
|
|
20
|
+
function normalizeKey(value) {
|
|
21
|
+
if (CONFIG_KEY_VALUES.includes(value)) {
|
|
22
|
+
return "definition_of_done";
|
|
23
|
+
}
|
|
24
|
+
throw new PmCliError(`Invalid config key "${value}". Supported: ${CONFIG_KEY_VALUES.join(", ")}`, EXIT_CODE.USAGE);
|
|
25
|
+
}
|
|
26
|
+
function normalizeCriteria(values) {
|
|
27
|
+
const normalized = [...new Set((values ?? []).map((value) => value.trim()).filter((value) => value.length > 0))].sort((left, right) => left.localeCompare(right));
|
|
28
|
+
if (normalized.length === 0) {
|
|
29
|
+
throw new PmCliError("Config set definition-of-done requires at least one non-empty --criterion value", EXIT_CODE.USAGE);
|
|
30
|
+
}
|
|
31
|
+
return normalized;
|
|
32
|
+
}
|
|
33
|
+
async function resolveSettingsTarget(scope, global) {
|
|
34
|
+
const cwd = process.cwd();
|
|
35
|
+
const pmRoot = scope === "project" ? resolvePmRoot(cwd, global.path) : resolveGlobalPmRoot(cwd);
|
|
36
|
+
const settingsPath = getSettingsPath(pmRoot);
|
|
37
|
+
if (scope === "project" && !(await pathExists(settingsPath))) {
|
|
38
|
+
throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
|
|
39
|
+
}
|
|
40
|
+
return { pmRoot, settingsPath };
|
|
41
|
+
}
|
|
42
|
+
export async function runConfig(scopeValue, actionValue, keyValue, options, global) {
|
|
43
|
+
const scope = normalizeScope(scopeValue);
|
|
44
|
+
const action = normalizeAction(actionValue);
|
|
45
|
+
const key = normalizeKey(keyValue);
|
|
46
|
+
const target = await resolveSettingsTarget(scope, global);
|
|
47
|
+
const settings = await readSettings(target.pmRoot);
|
|
48
|
+
if (action === "get") {
|
|
49
|
+
return {
|
|
50
|
+
scope,
|
|
51
|
+
key,
|
|
52
|
+
criteria: [...settings.workflow.definition_of_done],
|
|
53
|
+
settings_path: target.settingsPath,
|
|
54
|
+
changed: false,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const nextCriteria = normalizeCriteria(options.criterion);
|
|
58
|
+
const changed = nextCriteria.length !== settings.workflow.definition_of_done.length ||
|
|
59
|
+
nextCriteria.some((value, index) => value !== settings.workflow.definition_of_done[index]);
|
|
60
|
+
settings.workflow.definition_of_done = nextCriteria;
|
|
61
|
+
if (changed) {
|
|
62
|
+
await writeSettings(target.pmRoot, settings, "config:set:definition_of_done");
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
scope,
|
|
66
|
+
key,
|
|
67
|
+
criteria: [...settings.workflow.definition_of_done],
|
|
68
|
+
settings_path: target.settingsPath,
|
|
69
|
+
changed,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { GlobalOptions } from "../../core/shared/command-types.js";
|
|
2
|
+
import type { ItemFrontMatter } from "../../types/index.js";
|
|
3
|
+
export interface CreateCommandOptions {
|
|
4
|
+
title: string;
|
|
5
|
+
description: string;
|
|
6
|
+
type: string;
|
|
7
|
+
status: string;
|
|
8
|
+
priority: string;
|
|
9
|
+
tags: string;
|
|
10
|
+
body: string;
|
|
11
|
+
deadline: string;
|
|
12
|
+
estimatedMinutes: string;
|
|
13
|
+
acceptanceCriteria: string;
|
|
14
|
+
definitionOfReady?: string;
|
|
15
|
+
order?: string;
|
|
16
|
+
rank?: string;
|
|
17
|
+
goal?: string;
|
|
18
|
+
objective?: string;
|
|
19
|
+
value?: string;
|
|
20
|
+
impact?: string;
|
|
21
|
+
outcome?: string;
|
|
22
|
+
whyNow?: string;
|
|
23
|
+
author: string;
|
|
24
|
+
message: string;
|
|
25
|
+
assignee: string;
|
|
26
|
+
parent?: string;
|
|
27
|
+
reviewer?: string;
|
|
28
|
+
risk?: string;
|
|
29
|
+
confidence?: string;
|
|
30
|
+
sprint?: string;
|
|
31
|
+
release?: string;
|
|
32
|
+
blockedBy?: string;
|
|
33
|
+
blockedReason?: string;
|
|
34
|
+
unblockNote?: string;
|
|
35
|
+
reporter?: string;
|
|
36
|
+
severity?: string;
|
|
37
|
+
environment?: string;
|
|
38
|
+
reproSteps?: string;
|
|
39
|
+
resolution?: string;
|
|
40
|
+
expectedResult?: string;
|
|
41
|
+
actualResult?: string;
|
|
42
|
+
affectedVersion?: string;
|
|
43
|
+
fixedVersion?: string;
|
|
44
|
+
component?: string;
|
|
45
|
+
regression?: string;
|
|
46
|
+
customerImpact?: string;
|
|
47
|
+
dep?: string[];
|
|
48
|
+
comment?: string[];
|
|
49
|
+
note?: string[];
|
|
50
|
+
learning?: string[];
|
|
51
|
+
file?: string[];
|
|
52
|
+
test?: string[];
|
|
53
|
+
doc?: string[];
|
|
54
|
+
}
|
|
55
|
+
export interface CreateResult {
|
|
56
|
+
item: ItemFrontMatter;
|
|
57
|
+
changed_fields: string[];
|
|
58
|
+
warnings: string[];
|
|
59
|
+
}
|
|
60
|
+
export declare function runCreate(options: CreateCommandOptions, global: GlobalOptions): Promise<CreateResult>;
|