centy 0.0.25 → 0.0.27

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.
Files changed (121) hide show
  1. package/dist/commands/close/issue.d.ts +16 -0
  2. package/dist/commands/close/issue.d.ts.map +1 -0
  3. package/dist/commands/close/issue.js +54 -0
  4. package/dist/commands/close/issue.js.map +1 -0
  5. package/dist/commands/close/org-issue.d.ts +17 -0
  6. package/dist/commands/close/org-issue.d.ts.map +1 -0
  7. package/dist/commands/close/org-issue.js +69 -0
  8. package/dist/commands/close/org-issue.js.map +1 -0
  9. package/dist/commands/close.d.ts +22 -0
  10. package/dist/commands/close.d.ts.map +1 -0
  11. package/dist/commands/close.js +198 -0
  12. package/dist/commands/close.js.map +1 -0
  13. package/dist/commands/create/issue.d.ts +1 -0
  14. package/dist/commands/create/issue.d.ts.map +1 -1
  15. package/dist/commands/create/issue.js +6 -0
  16. package/dist/commands/create/issue.js.map +1 -1
  17. package/dist/commands/duplicate/doc.d.ts +19 -0
  18. package/dist/commands/duplicate/doc.d.ts.map +1 -0
  19. package/dist/commands/duplicate/doc.js +87 -0
  20. package/dist/commands/duplicate/doc.js.map +1 -0
  21. package/dist/commands/duplicate/issue.d.ts +18 -0
  22. package/dist/commands/duplicate/issue.d.ts.map +1 -0
  23. package/dist/commands/duplicate/issue.js +82 -0
  24. package/dist/commands/duplicate/issue.js.map +1 -0
  25. package/dist/commands/get/issue.d.ts +1 -0
  26. package/dist/commands/get/issue.d.ts.map +1 -1
  27. package/dist/commands/get/issue.js +38 -1
  28. package/dist/commands/get/issue.js.map +1 -1
  29. package/dist/commands/list/issues.d.ts +1 -0
  30. package/dist/commands/list/issues.d.ts.map +1 -1
  31. package/dist/commands/list/issues.js +9 -1
  32. package/dist/commands/list/issues.js.map +1 -1
  33. package/dist/commands/move/doc.d.ts +18 -0
  34. package/dist/commands/move/doc.d.ts.map +1 -0
  35. package/dist/commands/move/doc.js +82 -0
  36. package/dist/commands/move/doc.js.map +1 -0
  37. package/dist/commands/move/issue.d.ts +17 -0
  38. package/dist/commands/move/issue.d.ts.map +1 -0
  39. package/dist/commands/move/issue.js +74 -0
  40. package/dist/commands/move/issue.js.map +1 -0
  41. package/dist/commands/update/issue.d.ts +1 -0
  42. package/dist/commands/update/issue.d.ts.map +1 -1
  43. package/dist/commands/update/issue.js +7 -1
  44. package/dist/commands/update/issue.js.map +1 -1
  45. package/dist/daemon/daemon-duplicate-doc.d.ts +6 -0
  46. package/dist/daemon/daemon-duplicate-doc.d.ts.map +1 -0
  47. package/dist/daemon/daemon-duplicate-doc.js +17 -0
  48. package/dist/daemon/daemon-duplicate-doc.js.map +1 -0
  49. package/dist/daemon/daemon-duplicate-issue.d.ts +6 -0
  50. package/dist/daemon/daemon-duplicate-issue.d.ts.map +1 -0
  51. package/dist/daemon/daemon-duplicate-issue.js +17 -0
  52. package/dist/daemon/daemon-duplicate-issue.js.map +1 -0
  53. package/dist/daemon/daemon-move-doc.d.ts +6 -0
  54. package/dist/daemon/daemon-move-doc.d.ts.map +1 -0
  55. package/dist/daemon/daemon-move-doc.js +17 -0
  56. package/dist/daemon/daemon-move-doc.js.map +1 -0
  57. package/dist/daemon/daemon-move-issue.d.ts +6 -0
  58. package/dist/daemon/daemon-move-issue.d.ts.map +1 -0
  59. package/dist/daemon/daemon-move-issue.js +17 -0
  60. package/dist/daemon/daemon-move-issue.js.map +1 -0
  61. package/dist/daemon/daemon-spawn-agent.d.ts +6 -0
  62. package/dist/daemon/daemon-spawn-agent.d.ts.map +1 -0
  63. package/dist/daemon/daemon-spawn-agent.js +17 -0
  64. package/dist/daemon/daemon-spawn-agent.js.map +1 -0
  65. package/dist/daemon/load-proto.d.ts +6 -1
  66. package/dist/daemon/load-proto.d.ts.map +1 -1
  67. package/dist/daemon/load-proto.js.map +1 -1
  68. package/dist/daemon/types.d.ts +73 -0
  69. package/dist/daemon/types.d.ts.map +1 -1
  70. package/dist/hooks/postrun.d.ts +4 -0
  71. package/dist/hooks/postrun.d.ts.map +1 -0
  72. package/dist/hooks/postrun.js +17 -0
  73. package/dist/hooks/postrun.js.map +1 -0
  74. package/dist/lib/create-issue/create-issue.d.ts.map +1 -1
  75. package/dist/lib/create-issue/create-issue.js +3 -0
  76. package/dist/lib/create-issue/create-issue.js.map +1 -1
  77. package/dist/tui/components/domain/DocCreate.d.ts.map +1 -1
  78. package/dist/tui/components/domain/DocCreate.js +10 -41
  79. package/dist/tui/components/domain/DocCreate.js.map +1 -1
  80. package/dist/tui/components/domain/IssueCreate.d.ts.map +1 -1
  81. package/dist/tui/components/domain/IssueCreate.js +11 -49
  82. package/dist/tui/components/domain/IssueCreate.js.map +1 -1
  83. package/dist/tui/components/domain/IssueEdit.d.ts.map +1 -1
  84. package/dist/tui/components/domain/IssueEdit.js +15 -46
  85. package/dist/tui/components/domain/IssueEdit.js.map +1 -1
  86. package/dist/tui/components/domain/PRCreate.d.ts.map +1 -1
  87. package/dist/tui/components/domain/PRCreate.js +12 -35
  88. package/dist/tui/components/domain/PRCreate.js.map +1 -1
  89. package/dist/tui/components/domain/PREdit.d.ts.map +1 -1
  90. package/dist/tui/components/domain/PREdit.js +17 -39
  91. package/dist/tui/components/domain/PREdit.js.map +1 -1
  92. package/dist/tui/components/domain/ProjectCreate.d.ts.map +1 -1
  93. package/dist/tui/components/domain/ProjectCreate.js +5 -13
  94. package/dist/tui/components/domain/ProjectCreate.js.map +1 -1
  95. package/dist/tui/components/form/FormInput.d.ts +12 -0
  96. package/dist/tui/components/form/FormInput.d.ts.map +1 -0
  97. package/dist/tui/components/form/FormInput.js +6 -0
  98. package/dist/tui/components/form/FormInput.js.map +1 -0
  99. package/dist/tui/components/form/FormTextarea.d.ts +11 -0
  100. package/dist/tui/components/form/FormTextarea.d.ts.map +1 -0
  101. package/dist/tui/components/form/FormTextarea.js +13 -0
  102. package/dist/tui/components/form/FormTextarea.js.map +1 -0
  103. package/dist/tui/components/form/index.d.ts +3 -0
  104. package/dist/tui/components/form/index.d.ts.map +1 -0
  105. package/dist/tui/components/form/index.js +3 -0
  106. package/dist/tui/components/form/index.js.map +1 -0
  107. package/dist/tui/hooks/useNavigation.d.ts +1 -0
  108. package/dist/tui/hooks/useNavigation.d.ts.map +1 -1
  109. package/dist/tui/hooks/useNavigation.js +4 -0
  110. package/dist/tui/hooks/useNavigation.js.map +1 -1
  111. package/dist/tui/state/app-state.d.ts +4 -0
  112. package/dist/tui/state/app-state.d.ts.map +1 -1
  113. package/dist/tui/state/app-state.js +7 -0
  114. package/dist/tui/state/app-state.js.map +1 -1
  115. package/dist/types/create-issue-options.d.ts +2 -0
  116. package/dist/types/create-issue-options.d.ts.map +1 -1
  117. package/dist/utils/is-valid-uuid.js +2 -2
  118. package/dist/utils/is-valid-uuid.js.map +1 -1
  119. package/oclif.manifest.json +445 -27
  120. package/package.json +8 -3
  121. package/proto/centy.proto +4 -0
@@ -1,5 +1,74 @@
1
1
  {
2
2
  "commands": {
3
+ "close": {
4
+ "aliases": [],
5
+ "args": {
6
+ "identifier": {
7
+ "description": "Display number (#N or N) or UUID",
8
+ "name": "identifier",
9
+ "required": true
10
+ }
11
+ },
12
+ "description": "Close an issue, PR, or org-issue by display number",
13
+ "examples": [
14
+ "<%= config.bin %> close 1",
15
+ "<%= config.bin %> close #1",
16
+ "<%= config.bin %> close 1 --type issue",
17
+ "<%= config.bin %> close 1 --type pr",
18
+ "<%= config.bin %> close 1 --org my-org",
19
+ "<%= config.bin %> close 1 --project centy-daemon"
20
+ ],
21
+ "flags": {
22
+ "type": {
23
+ "char": "t",
24
+ "description": "Entity type (issue, pr, org-issue)",
25
+ "name": "type",
26
+ "hasDynamicHelp": false,
27
+ "multiple": false,
28
+ "options": [
29
+ "issue",
30
+ "pr",
31
+ "org-issue"
32
+ ],
33
+ "type": "option"
34
+ },
35
+ "org": {
36
+ "char": "o",
37
+ "description": "Organization slug (for org-issues)",
38
+ "name": "org",
39
+ "hasDynamicHelp": false,
40
+ "multiple": false,
41
+ "type": "option"
42
+ },
43
+ "project": {
44
+ "description": "Project name or path (defaults to current directory)",
45
+ "name": "project",
46
+ "hasDynamicHelp": false,
47
+ "multiple": false,
48
+ "type": "option"
49
+ },
50
+ "json": {
51
+ "description": "Output as JSON",
52
+ "name": "json",
53
+ "allowNo": false,
54
+ "type": "boolean"
55
+ }
56
+ },
57
+ "hasDynamicHelp": false,
58
+ "hiddenAliases": [],
59
+ "id": "close",
60
+ "pluginAlias": "centy",
61
+ "pluginName": "centy",
62
+ "pluginType": "core",
63
+ "strict": true,
64
+ "enableJsonFlag": false,
65
+ "isESM": true,
66
+ "relativePath": [
67
+ "dist",
68
+ "commands",
69
+ "close.js"
70
+ ]
71
+ },
3
72
  "compact": {
4
73
  "aliases": [],
5
74
  "args": {},
@@ -585,38 +654,81 @@
585
654
  "issue.js"
586
655
  ]
587
656
  },
588
- "daemon:autostart": {
657
+ "close:issue": {
589
658
  "aliases": [],
590
- "args": {},
591
- "description": "Configure daemon to start automatically on boot",
659
+ "args": {
660
+ "id": {
661
+ "description": "Issue ID (UUID) or display number",
662
+ "name": "id",
663
+ "required": true
664
+ }
665
+ },
666
+ "description": "Close an issue",
592
667
  "examples": [
593
- "<%= config.bin %> daemon autostart",
594
- "<%= config.bin %> daemon autostart --enable",
595
- "<%= config.bin %> daemon autostart --disable"
668
+ "<%= config.bin %> close issue 1",
669
+ "<%= config.bin %> close issue abc123-uuid",
670
+ "<%= config.bin %> close issue 1 --project centy-daemon"
596
671
  ],
597
672
  "flags": {
598
- "enable": {
599
- "description": "Enable autostart on boot",
600
- "exclusive": [
601
- "disable"
602
- ],
603
- "name": "enable",
604
- "allowNo": false,
605
- "type": "boolean"
673
+ "project": {
674
+ "description": "Project name or path (defaults to current directory)",
675
+ "name": "project",
676
+ "hasDynamicHelp": false,
677
+ "multiple": false,
678
+ "type": "option"
679
+ }
680
+ },
681
+ "hasDynamicHelp": false,
682
+ "hiddenAliases": [],
683
+ "id": "close:issue",
684
+ "pluginAlias": "centy",
685
+ "pluginName": "centy",
686
+ "pluginType": "core",
687
+ "strict": true,
688
+ "enableJsonFlag": false,
689
+ "isESM": true,
690
+ "relativePath": [
691
+ "dist",
692
+ "commands",
693
+ "close",
694
+ "issue.js"
695
+ ]
696
+ },
697
+ "close:org-issue": {
698
+ "aliases": [],
699
+ "args": {
700
+ "identifier": {
701
+ "description": "Issue ID or display number (#N or just N)",
702
+ "name": "identifier",
703
+ "required": true
704
+ }
705
+ },
706
+ "description": "Close an organization-level issue",
707
+ "examples": [
708
+ "<%= config.bin %> close org-issue --org my-org 1",
709
+ "<%= config.bin %> close org-issue --org my-org #1",
710
+ "<%= config.bin %> close org-issue -o centy-io abc123"
711
+ ],
712
+ "flags": {
713
+ "org": {
714
+ "char": "o",
715
+ "description": "Organization slug",
716
+ "name": "org",
717
+ "required": true,
718
+ "hasDynamicHelp": false,
719
+ "multiple": false,
720
+ "type": "option"
606
721
  },
607
- "disable": {
608
- "description": "Disable autostart on boot",
609
- "exclusive": [
610
- "enable"
611
- ],
612
- "name": "disable",
722
+ "json": {
723
+ "description": "Output as JSON",
724
+ "name": "json",
613
725
  "allowNo": false,
614
726
  "type": "boolean"
615
727
  }
616
728
  },
617
729
  "hasDynamicHelp": false,
618
730
  "hiddenAliases": [],
619
- "id": "daemon:autostart",
731
+ "id": "close:org-issue",
620
732
  "pluginAlias": "centy",
621
733
  "pluginName": "centy",
622
734
  "pluginType": "core",
@@ -626,8 +738,8 @@
626
738
  "relativePath": [
627
739
  "dist",
628
740
  "commands",
629
- "daemon",
630
- "autostart.js"
741
+ "close",
742
+ "org-issue.js"
631
743
  ]
632
744
  },
633
745
  "create:doc": {
@@ -705,7 +817,8 @@
705
817
  "<%= config.bin %> create issue",
706
818
  "<%= config.bin %> create issue --title \"Bug in login\" --priority high",
707
819
  "<%= config.bin %> create issue -t \"Add feature\" -d \"Implement dark mode\"",
708
- "<%= config.bin %> create issue -t \"Add feature\" --project centy-daemon"
820
+ "<%= config.bin %> create issue -t \"Add feature\" --project centy-daemon",
821
+ "<%= config.bin %> create issue --title \"WIP feature\" --draft"
709
822
  ],
710
823
  "flags": {
711
824
  "title": {
@@ -746,6 +859,12 @@
746
859
  "multiple": false,
747
860
  "type": "option"
748
861
  },
862
+ "draft": {
863
+ "description": "Create as draft",
864
+ "name": "draft",
865
+ "allowNo": false,
866
+ "type": "boolean"
867
+ },
749
868
  "project": {
750
869
  "description": "Project name or path (defaults to current directory)",
751
870
  "name": "project",
@@ -1102,6 +1221,51 @@
1102
1221
  "user.js"
1103
1222
  ]
1104
1223
  },
1224
+ "daemon:autostart": {
1225
+ "aliases": [],
1226
+ "args": {},
1227
+ "description": "Configure daemon to start automatically on boot",
1228
+ "examples": [
1229
+ "<%= config.bin %> daemon autostart",
1230
+ "<%= config.bin %> daemon autostart --enable",
1231
+ "<%= config.bin %> daemon autostart --disable"
1232
+ ],
1233
+ "flags": {
1234
+ "enable": {
1235
+ "description": "Enable autostart on boot",
1236
+ "exclusive": [
1237
+ "disable"
1238
+ ],
1239
+ "name": "enable",
1240
+ "allowNo": false,
1241
+ "type": "boolean"
1242
+ },
1243
+ "disable": {
1244
+ "description": "Disable autostart on boot",
1245
+ "exclusive": [
1246
+ "enable"
1247
+ ],
1248
+ "name": "disable",
1249
+ "allowNo": false,
1250
+ "type": "boolean"
1251
+ }
1252
+ },
1253
+ "hasDynamicHelp": false,
1254
+ "hiddenAliases": [],
1255
+ "id": "daemon:autostart",
1256
+ "pluginAlias": "centy",
1257
+ "pluginName": "centy",
1258
+ "pluginType": "core",
1259
+ "strict": true,
1260
+ "enableJsonFlag": false,
1261
+ "isESM": true,
1262
+ "relativePath": [
1263
+ "dist",
1264
+ "commands",
1265
+ "daemon",
1266
+ "autostart.js"
1267
+ ]
1268
+ },
1105
1269
  "delete:asset": {
1106
1270
  "aliases": [],
1107
1271
  "args": {
@@ -1499,6 +1663,126 @@
1499
1663
  "user.js"
1500
1664
  ]
1501
1665
  },
1666
+ "duplicate:doc": {
1667
+ "aliases": [],
1668
+ "args": {
1669
+ "slug": {
1670
+ "description": "Doc slug",
1671
+ "name": "slug",
1672
+ "required": true
1673
+ }
1674
+ },
1675
+ "description": "Duplicate a doc (same project or different project)",
1676
+ "examples": [
1677
+ "<%= config.bin %> duplicate doc my-doc",
1678
+ "<%= config.bin %> duplicate doc readme --new-slug readme-v2",
1679
+ "<%= config.bin %> duplicate doc api-guide --to /path/to/other/project",
1680
+ "<%= config.bin %> duplicate doc spec --to ../other --new-slug spec-copy --title \"Spec Copy\""
1681
+ ],
1682
+ "flags": {
1683
+ "to": {
1684
+ "char": "t",
1685
+ "description": "Target project path (defaults to same project if not specified)",
1686
+ "name": "to",
1687
+ "hasDynamicHelp": false,
1688
+ "multiple": false,
1689
+ "type": "option"
1690
+ },
1691
+ "new-slug": {
1692
+ "char": "s",
1693
+ "description": "Slug for the duplicate (defaults to \"{slug}-copy\")",
1694
+ "name": "new-slug",
1695
+ "hasDynamicHelp": false,
1696
+ "multiple": false,
1697
+ "type": "option"
1698
+ },
1699
+ "title": {
1700
+ "description": "Title for the duplicate (defaults to \"Copy of {original}\")",
1701
+ "name": "title",
1702
+ "hasDynamicHelp": false,
1703
+ "multiple": false,
1704
+ "type": "option"
1705
+ },
1706
+ "project": {
1707
+ "description": "Project name or path (defaults to current directory)",
1708
+ "name": "project",
1709
+ "hasDynamicHelp": false,
1710
+ "multiple": false,
1711
+ "type": "option"
1712
+ }
1713
+ },
1714
+ "hasDynamicHelp": false,
1715
+ "hiddenAliases": [],
1716
+ "id": "duplicate:doc",
1717
+ "pluginAlias": "centy",
1718
+ "pluginName": "centy",
1719
+ "pluginType": "core",
1720
+ "strict": true,
1721
+ "enableJsonFlag": false,
1722
+ "isESM": true,
1723
+ "relativePath": [
1724
+ "dist",
1725
+ "commands",
1726
+ "duplicate",
1727
+ "doc.js"
1728
+ ]
1729
+ },
1730
+ "duplicate:issue": {
1731
+ "aliases": [],
1732
+ "args": {
1733
+ "id": {
1734
+ "description": "Issue ID (UUID) or display number",
1735
+ "name": "id",
1736
+ "required": true
1737
+ }
1738
+ },
1739
+ "description": "Duplicate an issue (same project or different project)",
1740
+ "examples": [
1741
+ "<%= config.bin %> duplicate issue 1",
1742
+ "<%= config.bin %> duplicate issue 1 --title \"New feature branch\"",
1743
+ "<%= config.bin %> duplicate issue abc123-uuid --to /path/to/other/project",
1744
+ "<%= config.bin %> duplicate issue 5 --to ../other --title \"Copy for testing\""
1745
+ ],
1746
+ "flags": {
1747
+ "to": {
1748
+ "char": "t",
1749
+ "description": "Target project path (defaults to same project if not specified)",
1750
+ "name": "to",
1751
+ "hasDynamicHelp": false,
1752
+ "multiple": false,
1753
+ "type": "option"
1754
+ },
1755
+ "title": {
1756
+ "description": "Title for the duplicate (defaults to \"Copy of {original}\")",
1757
+ "name": "title",
1758
+ "hasDynamicHelp": false,
1759
+ "multiple": false,
1760
+ "type": "option"
1761
+ },
1762
+ "project": {
1763
+ "description": "Project name or path (defaults to current directory)",
1764
+ "name": "project",
1765
+ "hasDynamicHelp": false,
1766
+ "multiple": false,
1767
+ "type": "option"
1768
+ }
1769
+ },
1770
+ "hasDynamicHelp": false,
1771
+ "hiddenAliases": [],
1772
+ "id": "duplicate:issue",
1773
+ "pluginAlias": "centy",
1774
+ "pluginName": "centy",
1775
+ "pluginType": "core",
1776
+ "strict": true,
1777
+ "enableJsonFlag": false,
1778
+ "isESM": true,
1779
+ "relativePath": [
1780
+ "dist",
1781
+ "commands",
1782
+ "duplicate",
1783
+ "issue.js"
1784
+ ]
1785
+ },
1502
1786
  "get:asset": {
1503
1787
  "aliases": [
1504
1788
  "show:asset"
@@ -1641,7 +1925,9 @@
1641
1925
  "<%= config.bin %> get issue abc12345-1234-1234-1234-123456789abc --global",
1642
1926
  "<%= config.bin %> get issue abc12345-1234-1234-1234-123456789abc -g --json",
1643
1927
  "<%= config.bin %> get issue 1 --project centy-daemon",
1644
- "<%= config.bin %> get issue 1 --project /path/to/project"
1928
+ "<%= config.bin %> get issue 1 --project /path/to/project",
1929
+ "<%= config.bin %> issue 1 --action plan",
1930
+ "<%= config.bin %> issue 1 -a implement"
1645
1931
  ],
1646
1932
  "flags": {
1647
1933
  "json": {
@@ -1663,6 +1949,18 @@
1663
1949
  "hasDynamicHelp": false,
1664
1950
  "multiple": false,
1665
1951
  "type": "option"
1952
+ },
1953
+ "action": {
1954
+ "char": "a",
1955
+ "description": "Spawn AI agent with action (plan or implement)",
1956
+ "name": "action",
1957
+ "hasDynamicHelp": false,
1958
+ "multiple": false,
1959
+ "options": [
1960
+ "plan",
1961
+ "implement"
1962
+ ],
1963
+ "type": "option"
1666
1964
  }
1667
1965
  },
1668
1966
  "hasDynamicHelp": false,
@@ -2125,7 +2423,9 @@
2125
2423
  "<%= config.bin %> list issues",
2126
2424
  "<%= config.bin %> list issues --status open",
2127
2425
  "<%= config.bin %> list issues --priority 1",
2128
- "<%= config.bin %> list issues --project centy-daemon"
2426
+ "<%= config.bin %> list issues --project centy-daemon",
2427
+ "<%= config.bin %> list issues --draft",
2428
+ "<%= config.bin %> list issues --no-draft"
2129
2429
  ],
2130
2430
  "flags": {
2131
2431
  "status": {
@@ -2150,6 +2450,12 @@
2150
2450
  "allowNo": false,
2151
2451
  "type": "boolean"
2152
2452
  },
2453
+ "draft": {
2454
+ "description": "Filter by draft status (--draft for drafts only, --no-draft for non-drafts)",
2455
+ "name": "draft",
2456
+ "allowNo": true,
2457
+ "type": "boolean"
2458
+ },
2153
2459
  "project": {
2154
2460
  "description": "Project name or path (defaults to current directory)",
2155
2461
  "name": "project",
@@ -2455,6 +2761,112 @@
2455
2761
  "users.js"
2456
2762
  ]
2457
2763
  },
2764
+ "move:doc": {
2765
+ "aliases": [],
2766
+ "args": {
2767
+ "slug": {
2768
+ "description": "Doc slug",
2769
+ "name": "slug",
2770
+ "required": true
2771
+ }
2772
+ },
2773
+ "description": "Move a doc to a different project",
2774
+ "examples": [
2775
+ "<%= config.bin %> move doc my-doc --to /path/to/target/project",
2776
+ "<%= config.bin %> move doc readme --to ../other-project --new-slug new-readme",
2777
+ "<%= config.bin %> move doc api-guide --to ~/projects/target --project ./source"
2778
+ ],
2779
+ "flags": {
2780
+ "to": {
2781
+ "char": "t",
2782
+ "description": "Target project path",
2783
+ "name": "to",
2784
+ "required": true,
2785
+ "hasDynamicHelp": false,
2786
+ "multiple": false,
2787
+ "type": "option"
2788
+ },
2789
+ "new-slug": {
2790
+ "char": "s",
2791
+ "description": "New slug for the doc (if slug already exists in target)",
2792
+ "name": "new-slug",
2793
+ "hasDynamicHelp": false,
2794
+ "multiple": false,
2795
+ "type": "option"
2796
+ },
2797
+ "project": {
2798
+ "description": "Project name or path (defaults to current directory)",
2799
+ "name": "project",
2800
+ "hasDynamicHelp": false,
2801
+ "multiple": false,
2802
+ "type": "option"
2803
+ }
2804
+ },
2805
+ "hasDynamicHelp": false,
2806
+ "hiddenAliases": [],
2807
+ "id": "move:doc",
2808
+ "pluginAlias": "centy",
2809
+ "pluginName": "centy",
2810
+ "pluginType": "core",
2811
+ "strict": true,
2812
+ "enableJsonFlag": false,
2813
+ "isESM": true,
2814
+ "relativePath": [
2815
+ "dist",
2816
+ "commands",
2817
+ "move",
2818
+ "doc.js"
2819
+ ]
2820
+ },
2821
+ "move:issue": {
2822
+ "aliases": [],
2823
+ "args": {
2824
+ "id": {
2825
+ "description": "Issue ID (UUID) or display number",
2826
+ "name": "id",
2827
+ "required": true
2828
+ }
2829
+ },
2830
+ "description": "Move an issue to a different project",
2831
+ "examples": [
2832
+ "<%= config.bin %> move issue 1 --to /path/to/target/project",
2833
+ "<%= config.bin %> move issue abc123-uuid --to ../other-project",
2834
+ "<%= config.bin %> move issue 5 --to ~/projects/target --project ./source"
2835
+ ],
2836
+ "flags": {
2837
+ "to": {
2838
+ "char": "t",
2839
+ "description": "Target project path",
2840
+ "name": "to",
2841
+ "required": true,
2842
+ "hasDynamicHelp": false,
2843
+ "multiple": false,
2844
+ "type": "option"
2845
+ },
2846
+ "project": {
2847
+ "description": "Project name or path (defaults to current directory)",
2848
+ "name": "project",
2849
+ "hasDynamicHelp": false,
2850
+ "multiple": false,
2851
+ "type": "option"
2852
+ }
2853
+ },
2854
+ "hasDynamicHelp": false,
2855
+ "hiddenAliases": [],
2856
+ "id": "move:issue",
2857
+ "pluginAlias": "centy",
2858
+ "pluginName": "centy",
2859
+ "pluginType": "core",
2860
+ "strict": true,
2861
+ "enableJsonFlag": false,
2862
+ "isESM": true,
2863
+ "relativePath": [
2864
+ "dist",
2865
+ "commands",
2866
+ "move",
2867
+ "issue.js"
2868
+ ]
2869
+ },
2458
2870
  "project:archive": {
2459
2871
  "aliases": [],
2460
2872
  "args": {
@@ -2945,6 +3357,12 @@
2945
3357
  "multiple": false,
2946
3358
  "type": "option"
2947
3359
  },
3360
+ "draft": {
3361
+ "description": "Mark as draft (use --no-draft to unmark)",
3362
+ "name": "draft",
3363
+ "allowNo": true,
3364
+ "type": "boolean"
3365
+ },
2948
3366
  "project": {
2949
3367
  "description": "Project name or path (defaults to current directory)",
2950
3368
  "name": "project",
@@ -3319,5 +3737,5 @@
3319
3737
  ]
3320
3738
  }
3321
3739
  },
3322
- "version": "0.0.25"
3740
+ "version": "0.0.27"
3323
3741
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "centy",
3
- "version": "0.0.25",
3
+ "version": "0.0.27",
4
4
  "description": "CLI for managing project issues and docs via code in the .centy folder",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -44,7 +44,8 @@
44
44
  "target": "./dist/commands"
45
45
  },
46
46
  "hooks": {
47
- "prerun": "./dist/hooks/prerun.js"
47
+ "prerun": "./dist/hooks/prerun.js",
48
+ "postrun": "./dist/hooks/postrun.js"
48
49
  },
49
50
  "plugins": [
50
51
  "@oclif/plugin-help"
@@ -57,6 +58,8 @@
57
58
  "@cspell/dict-he": "^4.0.5",
58
59
  "@types/node": "^24.10.1",
59
60
  "@types/react": "^19.2.7",
61
+ "@types/update-notifier": "^6.0.8",
62
+ "@types/uuid": "^11.0.0",
60
63
  "@vitest/coverage-v8": "^4.0.15",
61
64
  "bun-types": "^1.3.3",
62
65
  "cspell": "^9.4.0",
@@ -84,7 +87,9 @@
84
87
  "@opentui/react": "^0.1.56",
85
88
  "clipboardy": "^5.0.1",
86
89
  "react": "^19.2.1",
87
- "tar": "^7.5.2"
90
+ "tar": "^7.5.2",
91
+ "update-notifier": "^7.3.1",
92
+ "uuid": "^13.0.0"
88
93
  },
89
94
  "scripts": {
90
95
  "build": "pnpm run build:tsc && pnpm run manifest",
package/proto/centy.proto CHANGED
@@ -323,6 +323,7 @@ message CreateIssueRequest {
323
323
  string status = 5; // default: "open"
324
324
  map<string, string> custom_fields = 6;
325
325
  string template = 7; // Optional template name (without .md extension)
326
+ bool draft = 8; // Create as draft (default: false)
326
327
  }
327
328
 
328
329
  message CreateIssueResponse {
@@ -381,6 +382,7 @@ message IssueMetadata {
381
382
  string priority_label = 7; // Human-readable label (e.g., "high", "P1")
382
383
  bool compacted = 8; // Whether issue has been compacted into features
383
384
  string compacted_at = 9; // ISO timestamp when compacted (empty if not)
385
+ bool draft = 10; // Whether this issue is a draft
384
386
  }
385
387
 
386
388
  message GetIssueRequest {
@@ -419,6 +421,7 @@ message ListIssuesRequest {
419
421
  // Optional filters
420
422
  string status = 2; // Filter by status (empty = all)
421
423
  int32 priority = 3; // Filter by priority (0 = all)
424
+ optional bool draft = 4; // Filter by draft status (absent = all, true = drafts only, false = non-drafts only)
422
425
  }
423
426
 
424
427
  message ListIssuesResponse {
@@ -436,6 +439,7 @@ message UpdateIssueRequest {
436
439
  string status = 5;
437
440
  int32 priority = 6; // 0 = don't update, otherwise 1-N
438
441
  map<string, string> custom_fields = 7;
442
+ optional bool draft = 8; // Update draft status (absent = don't update)
439
443
  }
440
444
 
441
445
  message UpdateIssueResponse {