centy 0.0.20 → 0.0.22

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 (193) hide show
  1. package/bin/run.js +19 -2
  2. package/dist/commands/add/asset.d.ts +1 -0
  3. package/dist/commands/add/asset.d.ts.map +1 -1
  4. package/dist/commands/add/asset.js +14 -5
  5. package/dist/commands/add/asset.js.map +1 -1
  6. package/dist/commands/compact.d.ts.map +1 -1
  7. package/dist/commands/compact.js +9 -4
  8. package/dist/commands/compact.js.map +1 -1
  9. package/dist/commands/config.d.ts.map +1 -1
  10. package/dist/commands/config.js +9 -4
  11. package/dist/commands/config.js.map +1 -1
  12. package/dist/commands/create/doc.d.ts +1 -0
  13. package/dist/commands/create/doc.d.ts.map +1 -1
  14. package/dist/commands/create/doc.js +14 -5
  15. package/dist/commands/create/doc.js.map +1 -1
  16. package/dist/commands/create/issue.d.ts +1 -0
  17. package/dist/commands/create/issue.d.ts.map +1 -1
  18. package/dist/commands/create/issue.js +5 -2
  19. package/dist/commands/create/issue.js.map +1 -1
  20. package/dist/commands/create/pr.d.ts +1 -0
  21. package/dist/commands/create/pr.d.ts.map +1 -1
  22. package/dist/commands/create/pr.js +5 -1
  23. package/dist/commands/create/pr.js.map +1 -1
  24. package/dist/commands/delete/asset.d.ts +1 -0
  25. package/dist/commands/delete/asset.d.ts.map +1 -1
  26. package/dist/commands/delete/asset.js +14 -5
  27. package/dist/commands/delete/asset.js.map +1 -1
  28. package/dist/commands/delete/doc.d.ts +1 -0
  29. package/dist/commands/delete/doc.d.ts.map +1 -1
  30. package/dist/commands/delete/doc.js +14 -5
  31. package/dist/commands/delete/doc.js.map +1 -1
  32. package/dist/commands/delete/issue.d.ts +1 -0
  33. package/dist/commands/delete/issue.d.ts.map +1 -1
  34. package/dist/commands/delete/issue.js +14 -5
  35. package/dist/commands/delete/issue.js.map +1 -1
  36. package/dist/commands/delete/pr.d.ts +1 -0
  37. package/dist/commands/delete/pr.d.ts.map +1 -1
  38. package/dist/commands/delete/pr.js +14 -5
  39. package/dist/commands/delete/pr.js.map +1 -1
  40. package/dist/commands/get/asset.d.ts +2 -0
  41. package/dist/commands/get/asset.d.ts.map +1 -1
  42. package/dist/commands/get/asset.js +15 -5
  43. package/dist/commands/get/asset.js.map +1 -1
  44. package/dist/commands/get/doc.d.ts +3 -0
  45. package/dist/commands/get/doc.d.ts.map +1 -1
  46. package/dist/commands/get/doc.js +98 -17
  47. package/dist/commands/get/doc.js.map +1 -1
  48. package/dist/commands/get/issue.d.ts +3 -0
  49. package/dist/commands/get/issue.d.ts.map +1 -1
  50. package/dist/commands/get/issue.js +121 -27
  51. package/dist/commands/get/issue.js.map +1 -1
  52. package/dist/commands/get/pr.d.ts +3 -0
  53. package/dist/commands/get/pr.d.ts.map +1 -1
  54. package/dist/commands/get/pr.js +136 -40
  55. package/dist/commands/get/pr.js.map +1 -1
  56. package/dist/commands/get/project.d.ts +1 -0
  57. package/dist/commands/get/project.d.ts.map +1 -1
  58. package/dist/commands/get/project.js +1 -0
  59. package/dist/commands/get/project.js.map +1 -1
  60. package/dist/commands/list/assets.d.ts +1 -0
  61. package/dist/commands/list/assets.d.ts.map +1 -1
  62. package/dist/commands/list/assets.js +14 -5
  63. package/dist/commands/list/assets.js.map +1 -1
  64. package/dist/commands/list/docs.d.ts +1 -0
  65. package/dist/commands/list/docs.d.ts.map +1 -1
  66. package/dist/commands/list/docs.js +14 -5
  67. package/dist/commands/list/docs.js.map +1 -1
  68. package/dist/commands/list/issues.d.ts +1 -0
  69. package/dist/commands/list/issues.d.ts.map +1 -1
  70. package/dist/commands/list/issues.js +14 -5
  71. package/dist/commands/list/issues.js.map +1 -1
  72. package/dist/commands/list/prs.d.ts +1 -0
  73. package/dist/commands/list/prs.d.ts.map +1 -1
  74. package/dist/commands/list/prs.js +14 -5
  75. package/dist/commands/list/prs.js.map +1 -1
  76. package/dist/commands/manifest.d.ts.map +1 -1
  77. package/dist/commands/manifest.js +9 -4
  78. package/dist/commands/manifest.js.map +1 -1
  79. package/dist/commands/start.d.ts +2 -0
  80. package/dist/commands/start.d.ts.map +1 -1
  81. package/dist/commands/start.js +56 -2
  82. package/dist/commands/start.js.map +1 -1
  83. package/dist/commands/update/doc.d.ts +1 -0
  84. package/dist/commands/update/doc.d.ts.map +1 -1
  85. package/dist/commands/update/doc.js +14 -5
  86. package/dist/commands/update/doc.js.map +1 -1
  87. package/dist/commands/update/issue.d.ts +1 -0
  88. package/dist/commands/update/issue.d.ts.map +1 -1
  89. package/dist/commands/update/issue.js +14 -5
  90. package/dist/commands/update/issue.js.map +1 -1
  91. package/dist/commands/update/pr.d.ts +1 -0
  92. package/dist/commands/update/pr.d.ts.map +1 -1
  93. package/dist/commands/update/pr.js +14 -5
  94. package/dist/commands/update/pr.js.map +1 -1
  95. package/dist/commands/update.d.ts.map +1 -1
  96. package/dist/commands/update.js +9 -4
  97. package/dist/commands/update.js.map +1 -1
  98. package/dist/commands/version.d.ts.map +1 -1
  99. package/dist/commands/version.js +9 -4
  100. package/dist/commands/version.js.map +1 -1
  101. package/dist/daemon/daemon-get-docs-by-slug.d.ts +6 -0
  102. package/dist/daemon/daemon-get-docs-by-slug.d.ts.map +1 -0
  103. package/dist/daemon/daemon-get-docs-by-slug.js +17 -0
  104. package/dist/daemon/daemon-get-docs-by-slug.js.map +1 -0
  105. package/dist/daemon/daemon-get-issues-by-uuid.d.ts +6 -0
  106. package/dist/daemon/daemon-get-issues-by-uuid.d.ts.map +1 -0
  107. package/dist/daemon/daemon-get-issues-by-uuid.js +17 -0
  108. package/dist/daemon/daemon-get-issues-by-uuid.js.map +1 -0
  109. package/dist/daemon/daemon-get-prs-by-uuid.d.ts +6 -0
  110. package/dist/daemon/daemon-get-prs-by-uuid.d.ts.map +1 -0
  111. package/dist/daemon/daemon-get-prs-by-uuid.js +17 -0
  112. package/dist/daemon/daemon-get-prs-by-uuid.js.map +1 -0
  113. package/dist/daemon/load-proto.d.ts +4 -1
  114. package/dist/daemon/load-proto.d.ts.map +1 -1
  115. package/dist/daemon/load-proto.js.map +1 -1
  116. package/dist/daemon/types.d.ts +39 -0
  117. package/dist/daemon/types.d.ts.map +1 -1
  118. package/dist/flags/project-flag.d.ts +6 -0
  119. package/dist/flags/project-flag.d.ts.map +1 -0
  120. package/dist/flags/project-flag.js +9 -0
  121. package/dist/flags/project-flag.js.map +1 -0
  122. package/dist/lib/start/prompt-for-install.d.ts +13 -0
  123. package/dist/lib/start/prompt-for-install.d.ts.map +1 -0
  124. package/dist/lib/start/prompt-for-install.js +12 -0
  125. package/dist/lib/start/prompt-for-install.js.map +1 -0
  126. package/dist/tui/App.d.ts.map +1 -1
  127. package/dist/tui/App.js +17 -5
  128. package/dist/tui/App.js.map +1 -1
  129. package/dist/tui/components/domain/DocDetail.d.ts.map +1 -1
  130. package/dist/tui/components/domain/DocDetail.js +20 -0
  131. package/dist/tui/components/domain/DocDetail.js.map +1 -1
  132. package/dist/tui/components/domain/DocList.d.ts.map +1 -1
  133. package/dist/tui/components/domain/DocList.js +16 -0
  134. package/dist/tui/components/domain/DocList.js.map +1 -1
  135. package/dist/tui/components/domain/IssueDetail.d.ts.map +1 -1
  136. package/dist/tui/components/domain/IssueDetail.js +14 -0
  137. package/dist/tui/components/domain/IssueDetail.js.map +1 -1
  138. package/dist/tui/components/domain/IssueList.d.ts.map +1 -1
  139. package/dist/tui/components/domain/IssueList.js +16 -0
  140. package/dist/tui/components/domain/IssueList.js.map +1 -1
  141. package/dist/tui/components/domain/PRDetail.d.ts.map +1 -1
  142. package/dist/tui/components/domain/PRDetail.js +14 -0
  143. package/dist/tui/components/domain/PRDetail.js.map +1 -1
  144. package/dist/tui/components/domain/PRList.d.ts.map +1 -1
  145. package/dist/tui/components/domain/PRList.js +16 -0
  146. package/dist/tui/components/domain/PRList.js.map +1 -1
  147. package/dist/tui/components/layout/StatusBar.d.ts +2 -1
  148. package/dist/tui/components/layout/StatusBar.d.ts.map +1 -1
  149. package/dist/tui/components/layout/StatusBar.js +2 -2
  150. package/dist/tui/components/layout/StatusBar.js.map +1 -1
  151. package/dist/tui/hooks/useClipboard.d.ts +6 -0
  152. package/dist/tui/hooks/useClipboard.d.ts.map +1 -0
  153. package/dist/tui/hooks/useClipboard.js +46 -0
  154. package/dist/tui/hooks/useClipboard.js.map +1 -0
  155. package/dist/tui/services/clipboard-service.d.ts +18 -0
  156. package/dist/tui/services/clipboard-service.d.ts.map +1 -0
  157. package/dist/tui/services/clipboard-service.js +37 -0
  158. package/dist/tui/services/clipboard-service.js.map +1 -0
  159. package/dist/tui/state/app-state.d.ts +4 -0
  160. package/dist/tui/state/app-state.d.ts.map +1 -1
  161. package/dist/tui/state/app-state.js +3 -0
  162. package/dist/tui/state/app-state.js.map +1 -1
  163. package/dist/utils/ask-yes-no.d.ts +10 -0
  164. package/dist/utils/ask-yes-no.d.ts.map +1 -0
  165. package/dist/utils/ask-yes-no.js +26 -0
  166. package/dist/utils/ask-yes-no.js.map +1 -0
  167. package/dist/utils/cross-project-search.d.ts +7 -0
  168. package/dist/utils/cross-project-search.d.ts.map +1 -0
  169. package/dist/utils/cross-project-search.js +7 -0
  170. package/dist/utils/cross-project-search.js.map +1 -0
  171. package/dist/utils/ensure-initialized.d.ts +10 -0
  172. package/dist/utils/ensure-initialized.d.ts.map +1 -0
  173. package/dist/utils/ensure-initialized.js +26 -0
  174. package/dist/utils/ensure-initialized.js.map +1 -0
  175. package/dist/utils/format-cross-project-hint.d.ts +9 -0
  176. package/dist/utils/format-cross-project-hint.d.ts.map +1 -0
  177. package/dist/utils/format-cross-project-hint.js +17 -0
  178. package/dist/utils/format-cross-project-hint.js.map +1 -0
  179. package/dist/utils/format-cross-project-json.d.ts +9 -0
  180. package/dist/utils/format-cross-project-json.d.ts.map +1 -0
  181. package/dist/utils/format-cross-project-json.js +16 -0
  182. package/dist/utils/format-cross-project-json.js.map +1 -0
  183. package/dist/utils/is-not-found-error.d.ts +5 -0
  184. package/dist/utils/is-not-found-error.d.ts.map +1 -0
  185. package/dist/utils/is-not-found-error.js +14 -0
  186. package/dist/utils/is-not-found-error.js.map +1 -0
  187. package/dist/utils/resolve-project-path.d.ts +17 -0
  188. package/dist/utils/resolve-project-path.d.ts.map +1 -0
  189. package/dist/utils/resolve-project-path.js +72 -0
  190. package/dist/utils/resolve-project-path.js.map +1 -0
  191. package/oclif.manifest.json +270 -71
  192. package/package.json +2 -1
  193. package/proto/centy.proto +294 -1
@@ -1,6 +1,8 @@
1
1
  import { Args, Command, Flags } from '@oclif/core';
2
2
  import { daemonDeleteIssue } from '../../daemon/daemon-delete-issue.js';
3
- import { daemonIsInitialized } from '../../daemon/daemon-is-initialized.js';
3
+ import { projectFlag } from '../../flags/project-flag.js';
4
+ import { ensureInitialized, NotInitializedError, } from '../../utils/ensure-initialized.js';
5
+ import { resolveProjectPath } from '../../utils/resolve-project-path.js';
4
6
  /**
5
7
  * Delete an issue
6
8
  */
@@ -16,6 +18,7 @@ export default class DeleteIssue extends Command {
16
18
  '<%= config.bin %> delete issue 1',
17
19
  '<%= config.bin %> delete issue abc123-uuid',
18
20
  '<%= config.bin %> delete issue 1 --force',
21
+ '<%= config.bin %> delete issue 1 --project centy-daemon',
19
22
  ];
20
23
  static flags = {
21
24
  force: Flags.boolean({
@@ -23,13 +26,19 @@ export default class DeleteIssue extends Command {
23
26
  description: 'Skip confirmation prompt',
24
27
  default: false,
25
28
  }),
29
+ project: projectFlag,
26
30
  };
27
31
  async run() {
28
32
  const { args, flags } = await this.parse(DeleteIssue);
29
- const cwd = process.env['CENTY_CWD'] ?? process.cwd();
30
- const initStatus = await daemonIsInitialized({ projectPath: cwd });
31
- if (!initStatus.initialized) {
32
- this.error('.centy folder not initialized. Run "centy init" first.');
33
+ const cwd = await resolveProjectPath(flags.project);
34
+ try {
35
+ await ensureInitialized(cwd);
36
+ }
37
+ catch (error) {
38
+ if (error instanceof NotInitializedError) {
39
+ this.error(error.message);
40
+ }
41
+ throw error instanceof Error ? error : new Error(String(error));
33
42
  }
34
43
  if (!flags.force) {
35
44
  const readline = await import('node:readline');
@@ -1 +1 @@
1
- {"version":3,"file":"issue.js","sourceRoot":"","sources":["../../../src/commands/delete/issue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAA;AAE3E;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,OAAO;IAC9C,MAAM,CAAU,IAAI,GAAG;QACrB,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC;YACd,WAAW,EAAE,mCAAmC;YAChD,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAA;IAED,MAAM,CAAU,WAAW,GAAG,iBAAiB,CAAA;IAE/C,MAAM,CAAU,QAAQ,GAAG;QACzB,kCAAkC;QAClC,4CAA4C;QAC5C,0CAA0C;KAC3C,CAAA;IAED,MAAM,CAAU,KAAK,GAAG;QACtB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,0BAA0B;YACvC,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;QACrD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;QAErD,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAA;QAClE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAA;QACtE,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAA;YAC9C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;gBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAA;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,OAAO,CAAC,EAAE;gBACjD,EAAE,CAAC,QAAQ,CACT,yCAAyC,IAAI,CAAC,EAAE,UAAU,EAC1D,OAAO,CACR,CAAA;YACH,CAAC,CAAC,CAAA;YACF,EAAE,CAAC,KAAK,EAAE,CAAA;YACV,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;gBACjC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;gBACtB,OAAM;YACR,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC;YACvC,WAAW,EAAE,GAAG;YAChB,OAAO,EAAE,IAAI,CAAC,EAAE;SACjB,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;IACtC,CAAC"}
1
+ {"version":3,"file":"issue.js","sourceRoot":"","sources":["../../../src/commands/delete/issue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EACL,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAA;AAExE;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,OAAO;IAC9C,MAAM,CAAU,IAAI,GAAG;QACrB,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC;YACd,WAAW,EAAE,mCAAmC;YAChD,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAA;IAED,MAAM,CAAU,WAAW,GAAG,iBAAiB,CAAA;IAE/C,MAAM,CAAU,QAAQ,GAAG;QACzB,kCAAkC;QAClC,4CAA4C;QAC5C,0CAA0C;QAC1C,yDAAyD;KAC1D,CAAA;IAED,MAAM,CAAU,KAAK,GAAG;QACtB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,0BAA0B;YACvC,OAAO,EAAE,KAAK;SACf,CAAC;QACF,OAAO,EAAE,WAAW;KACrB,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;QACrD,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAEnD,IAAI,CAAC;YACH,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAA;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,mBAAmB,EAAE,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAC3B,CAAC;YACD,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QACjE,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAA;YAC9C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;gBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAA;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,OAAO,CAAC,EAAE;gBACjD,EAAE,CAAC,QAAQ,CACT,yCAAyC,IAAI,CAAC,EAAE,UAAU,EAC1D,OAAO,CACR,CAAA;YACH,CAAC,CAAC,CAAA;YACF,EAAE,CAAC,KAAK,EAAE,CAAA;YACV,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;gBACjC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;gBACtB,OAAM;YACR,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC;YACvC,WAAW,EAAE,GAAG;YAChB,OAAO,EAAE,IAAI,CAAC,EAAE;SACjB,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;IACtC,CAAC"}
@@ -10,6 +10,7 @@ export default class DeletePr extends Command {
10
10
  static examples: string[];
11
11
  static flags: {
12
12
  force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
14
  };
14
15
  run(): Promise<void>;
15
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../../src/commands/delete/pr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAKlD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,OAAgB,IAAI;;MAKnB;IAED,OAAgB,WAAW,SAA0B;IAErD,OAAgB,QAAQ,WAIvB;IAED,OAAgB,KAAK;;MAMpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuClC"}
1
+ {"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../../src/commands/delete/pr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAUlD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,OAAgB,IAAI;;MAKnB;IAED,OAAgB,WAAW,SAA0B;IAErD,OAAgB,QAAQ,WAKvB;IAED,OAAgB,KAAK;;;MAOpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA2ClC"}
@@ -1,6 +1,8 @@
1
1
  import { Args, Command, Flags } from '@oclif/core';
2
2
  import { daemonDeletePr } from '../../daemon/daemon-delete-pr.js';
3
- import { daemonIsInitialized } from '../../daemon/daemon-is-initialized.js';
3
+ import { projectFlag } from '../../flags/project-flag.js';
4
+ import { ensureInitialized, NotInitializedError, } from '../../utils/ensure-initialized.js';
5
+ import { resolveProjectPath } from '../../utils/resolve-project-path.js';
4
6
  /**
5
7
  * Delete a pull request
6
8
  */
@@ -16,6 +18,7 @@ export default class DeletePr extends Command {
16
18
  '<%= config.bin %> delete pr 1',
17
19
  '<%= config.bin %> delete pr abc123-uuid',
18
20
  '<%= config.bin %> delete pr 1 --force',
21
+ '<%= config.bin %> delete pr 1 --project centy-daemon',
19
22
  ];
20
23
  static flags = {
21
24
  force: Flags.boolean({
@@ -23,13 +26,19 @@ export default class DeletePr extends Command {
23
26
  description: 'Skip confirmation prompt',
24
27
  default: false,
25
28
  }),
29
+ project: projectFlag,
26
30
  };
27
31
  async run() {
28
32
  const { args, flags } = await this.parse(DeletePr);
29
- const cwd = process.env['CENTY_CWD'] ?? process.cwd();
30
- const initStatus = await daemonIsInitialized({ projectPath: cwd });
31
- if (!initStatus.initialized) {
32
- this.error('.centy folder not initialized. Run "centy init" first.');
33
+ const cwd = await resolveProjectPath(flags.project);
34
+ try {
35
+ await ensureInitialized(cwd);
36
+ }
37
+ catch (error) {
38
+ if (error instanceof NotInitializedError) {
39
+ this.error(error.message);
40
+ }
41
+ throw error instanceof Error ? error : new Error(String(error));
33
42
  }
34
43
  if (!flags.force) {
35
44
  const readline = await import('node:readline');
@@ -1 +1 @@
1
- {"version":3,"file":"pr.js","sourceRoot":"","sources":["../../../src/commands/delete/pr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAA;AAE3E;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,MAAM,CAAU,IAAI,GAAG;QACrB,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC;YACd,WAAW,EAAE,gCAAgC;YAC7C,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAA;IAED,MAAM,CAAU,WAAW,GAAG,uBAAuB,CAAA;IAErD,MAAM,CAAU,QAAQ,GAAG;QACzB,+BAA+B;QAC/B,yCAAyC;QACzC,uCAAuC;KACxC,CAAA;IAED,MAAM,CAAU,KAAK,GAAG;QACtB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,0BAA0B;YACvC,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAClD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;QAErD,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAA;QAClE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAA;QACtE,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAA;YAC9C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;gBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAA;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,OAAO,CAAC,EAAE;gBACjD,EAAE,CAAC,QAAQ,CACT,sCAAsC,IAAI,CAAC,EAAE,UAAU,EACvD,OAAO,CACR,CAAA;YACH,CAAC,CAAC,CAAA;YACF,EAAE,CAAC,KAAK,EAAE,CAAA;YACV,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;gBACjC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;gBACtB,OAAM;YACR,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC;YACpC,WAAW,EAAE,GAAG;YAChB,IAAI,EAAE,IAAI,CAAC,EAAE;SACd,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;IACnC,CAAC"}
1
+ {"version":3,"file":"pr.js","sourceRoot":"","sources":["../../../src/commands/delete/pr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EACL,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAA;AAExE;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,MAAM,CAAU,IAAI,GAAG;QACrB,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC;YACd,WAAW,EAAE,gCAAgC;YAC7C,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAA;IAED,MAAM,CAAU,WAAW,GAAG,uBAAuB,CAAA;IAErD,MAAM,CAAU,QAAQ,GAAG;QACzB,+BAA+B;QAC/B,yCAAyC;QACzC,uCAAuC;QACvC,sDAAsD;KACvD,CAAA;IAED,MAAM,CAAU,KAAK,GAAG;QACtB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,0BAA0B;YACvC,OAAO,EAAE,KAAK;SACf,CAAC;QACF,OAAO,EAAE,WAAW;KACrB,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAClD,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAEnD,IAAI,CAAC;YACH,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAA;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,mBAAmB,EAAE,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAC3B,CAAC;YACD,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QACjE,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAA;YAC9C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;gBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAA;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,OAAO,CAAC,EAAE;gBACjD,EAAE,CAAC,QAAQ,CACT,sCAAsC,IAAI,CAAC,EAAE,UAAU,EACvD,OAAO,CACR,CAAA;YACH,CAAC,CAAC,CAAA;YACF,EAAE,CAAC,KAAK,EAAE,CAAA;YACV,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;gBACjC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;gBACtB,OAAM;YACR,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC;YACpC,WAAW,EAAE,GAAG;YAChB,IAAI,EAAE,IAAI,CAAC,EAAE;SACd,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;IACnC,CAAC"}
@@ -3,6 +3,7 @@ import { Command } from '@oclif/core';
3
3
  * Get an asset and save it to a file
4
4
  */
5
5
  export default class GetAsset extends Command {
6
+ static aliases: string[];
6
7
  static args: {
7
8
  filename: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
8
9
  };
@@ -12,6 +13,7 @@ export default class GetAsset extends Command {
12
13
  issue: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
14
  shared: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
15
  output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
17
  };
16
18
  run(): Promise<void>;
17
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../../src/commands/get/asset.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAKlD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,OAAgB,IAAI;;MAKnB;IAED,OAAgB,WAAW,SAAuC;IAElE,OAAgB,QAAQ,WAGvB;IAED,OAAgB,KAAK;;;;MAcpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA+BlC"}
1
+ {"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../../src/commands/get/asset.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAUlD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,OAAgB,OAAO,WAAiB;IAExC,OAAgB,IAAI;;MAKnB;IAED,OAAgB,WAAW,SAAuC;IAElE,OAAgB,QAAQ,WAIvB;IAED,OAAgB,KAAK;;;;;MAepB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAmClC"}
@@ -1,11 +1,14 @@
1
1
  import { writeFile } from 'node:fs/promises';
2
2
  import { Args, Command, Flags } from '@oclif/core';
3
3
  import { daemonGetAsset } from '../../daemon/daemon-get-asset.js';
4
- import { daemonIsInitialized } from '../../daemon/daemon-is-initialized.js';
4
+ import { projectFlag } from '../../flags/project-flag.js';
5
+ import { ensureInitialized, NotInitializedError, } from '../../utils/ensure-initialized.js';
6
+ import { resolveProjectPath } from '../../utils/resolve-project-path.js';
5
7
  /**
6
8
  * Get an asset and save it to a file
7
9
  */
8
10
  export default class GetAsset extends Command {
11
+ static aliases = ['show:asset'];
9
12
  static args = {
10
13
  filename: Args.string({
11
14
  description: 'Asset filename',
@@ -16,6 +19,7 @@ export default class GetAsset extends Command {
16
19
  static examples = [
17
20
  '<%= config.bin %> get asset screenshot.png --issue 1 --output ./screenshot.png',
18
21
  '<%= config.bin %> get asset logo.svg --shared --output ./logo.svg',
22
+ '<%= config.bin %> get asset screenshot.png --issue 1 --project centy-daemon',
19
23
  ];
20
24
  static flags = {
21
25
  issue: Flags.string({
@@ -31,13 +35,19 @@ export default class GetAsset extends Command {
31
35
  char: 'o',
32
36
  description: 'Output file path (defaults to asset filename)',
33
37
  }),
38
+ project: projectFlag,
34
39
  };
35
40
  async run() {
36
41
  const { args, flags } = await this.parse(GetAsset);
37
- const cwd = process.env['CENTY_CWD'] ?? process.cwd();
38
- const initStatus = await daemonIsInitialized({ projectPath: cwd });
39
- if (!initStatus.initialized) {
40
- this.error('.centy folder not initialized. Run "centy init" first.');
42
+ const cwd = await resolveProjectPath(flags.project);
43
+ try {
44
+ await ensureInitialized(cwd);
45
+ }
46
+ catch (error) {
47
+ if (error instanceof NotInitializedError) {
48
+ this.error(error.message);
49
+ }
50
+ throw error instanceof Error ? error : new Error(String(error));
41
51
  }
42
52
  if (!flags.issue && !flags.shared) {
43
53
  this.error('Either --issue or --shared must be specified.');
@@ -1 +1 @@
1
- {"version":3,"file":"asset.js","sourceRoot":"","sources":["../../../src/commands/get/asset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAA;AAE3E;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,MAAM,CAAU,IAAI,GAAG;QACrB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,gBAAgB;YAC7B,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAA;IAED,MAAM,CAAU,WAAW,GAAG,oCAAoC,CAAA;IAElE,MAAM,CAAU,QAAQ,GAAG;QACzB,gFAAgF;QAChF,mEAAmE;KACpE,CAAA;IAED,MAAM,CAAU,KAAK,GAAG;QACtB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;YAClB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,4BAA4B;SAC1C,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;YACpB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,oBAAoB;YACjC,OAAO,EAAE,KAAK;SACf,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,+CAA+C;SAC7D,CAAC;KACH,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAClD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;QAErD,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAA;QAClE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAA;QACtE,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAA;QAC7D,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC;YACpC,WAAW,EAAE,GAAG;YAChB,OAAO,EAAE,KAAK,CAAC,KAAK;YACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,KAAK,CAAC,MAAM;SACvB,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC;QAED,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAA;QAChD,MAAM,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;QAE1C,IAAI,CAAC,GAAG,CAAC,kBAAkB,UAAU,EAAE,CAAC,CAAA;QACxC,IAAI,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAA;QAChD,IAAI,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;IAChD,CAAC"}
1
+ {"version":3,"file":"asset.js","sourceRoot":"","sources":["../../../src/commands/get/asset.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { Command } from '@oclif/core';
3
3
  * Get a single doc by slug
4
4
  */
5
5
  export default class GetDoc extends Command {
6
+ static aliases: string[];
6
7
  static args: {
7
8
  slug: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
8
9
  };
@@ -10,6 +11,8 @@ export default class GetDoc extends Command {
10
11
  static examples: string[];
11
12
  static flags: {
12
13
  json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ global: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
16
  };
14
17
  run(): Promise<void>;
15
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"doc.d.ts","sourceRoot":"","sources":["../../../src/commands/get/doc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAKlD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,OAAgB,IAAI;;MAKnB;IAED,OAAgB,WAAW,SAAqC;IAEhE,OAAgB,QAAQ,WAGvB;IAED,OAAgB,KAAK;;MAKpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA6BlC"}
1
+ {"version":3,"file":"doc.d.ts","sourceRoot":"","sources":["../../../src/commands/get/doc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAgBlD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,OAAgB,OAAO,WAAe;IAEtC,OAAgB,IAAI;;MAKnB;IAED,OAAgB,WAAW,SAAqC;IAEhE,OAAgB,QAAQ,WAMvB;IAED,OAAgB,KAAK;;;;MAWpB;IAGY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAiHlC"}
@@ -1,10 +1,15 @@
1
1
  import { Args, Command, Flags } from '@oclif/core';
2
2
  import { daemonGetDoc } from '../../daemon/daemon-get-doc.js';
3
- import { daemonIsInitialized } from '../../daemon/daemon-is-initialized.js';
3
+ import { daemonGetDocsBySlug } from '../../daemon/daemon-get-docs-by-slug.js';
4
+ import { projectFlag } from '../../flags/project-flag.js';
5
+ import { formatCrossProjectHint, formatCrossProjectJson, isNotFoundError, } from '../../utils/cross-project-search.js';
6
+ import { ensureInitialized, NotInitializedError, } from '../../utils/ensure-initialized.js';
7
+ import { resolveProjectPath } from '../../utils/resolve-project-path.js';
4
8
  /**
5
9
  * Get a single doc by slug
6
10
  */
7
11
  export default class GetDoc extends Command {
12
+ static aliases = ['show:doc'];
8
13
  static args = {
9
14
  slug: Args.string({
10
15
  description: 'Doc slug',
@@ -15,33 +20,109 @@ export default class GetDoc extends Command {
15
20
  static examples = [
16
21
  '<%= config.bin %> get doc getting-started',
17
22
  '<%= config.bin %> get doc api-reference --json',
23
+ '<%= config.bin %> get doc getting-started --global',
24
+ '<%= config.bin %> get doc getting-started -g --json',
25
+ '<%= config.bin %> get doc api-reference --project centy-daemon',
18
26
  ];
19
27
  static flags = {
20
28
  json: Flags.boolean({
21
29
  description: 'Output as JSON',
22
30
  default: false,
23
31
  }),
32
+ global: Flags.boolean({
33
+ char: 'g',
34
+ description: 'Search across all tracked projects',
35
+ default: false,
36
+ }),
37
+ project: projectFlag,
24
38
  };
39
+ // eslint-disable-next-line max-lines-per-function
25
40
  async run() {
26
41
  const { args, flags } = await this.parse(GetDoc);
27
- const cwd = process.env['CENTY_CWD'] ?? process.cwd();
28
- const initStatus = await daemonIsInitialized({ projectPath: cwd });
29
- if (!initStatus.initialized) {
30
- this.error('.centy folder not initialized. Run "centy init" first.');
31
- }
32
- const doc = await daemonGetDoc({
33
- projectPath: cwd,
34
- slug: args.slug,
35
- });
36
- if (flags.json) {
37
- this.log(JSON.stringify(doc, null, 2));
42
+ const cwd = await resolveProjectPath(flags.project);
43
+ // Handle global search
44
+ if (flags.global) {
45
+ const result = await daemonGetDocsBySlug({ slug: args.slug });
46
+ if (flags.json) {
47
+ this.log(JSON.stringify(result, null, 2));
48
+ return;
49
+ }
50
+ if (result.docs.length === 0) {
51
+ this.log(`No docs found with slug: ${args.slug}`);
52
+ if (result.errors.length > 0) {
53
+ this.warn('Some projects could not be searched:');
54
+ for (const err of result.errors) {
55
+ this.warn(` - ${err}`);
56
+ }
57
+ }
58
+ return;
59
+ }
60
+ this.log(`Found ${result.totalCount} doc(s) matching slug: ${args.slug}\n`);
61
+ for (const dwp of result.docs) {
62
+ const doc = dwp.doc;
63
+ this.log(`--- Project: ${dwp.projectName} (${dwp.projectPath}) ---`);
64
+ this.log(`Title: ${doc.title}`);
65
+ this.log(`Slug: ${doc.slug}`);
66
+ this.log(`Created: ${doc.metadata !== undefined ? doc.metadata.createdAt : 'unknown'}`);
67
+ this.log(`Updated: ${doc.metadata !== undefined ? doc.metadata.updatedAt : 'unknown'}`);
68
+ if (doc.content) {
69
+ this.log(`\nContent:\n${doc.content}`);
70
+ }
71
+ this.log('');
72
+ }
73
+ if (result.errors.length > 0) {
74
+ this.warn('Some projects could not be searched:');
75
+ for (const err of result.errors) {
76
+ this.warn(` - ${err}`);
77
+ }
78
+ }
38
79
  return;
39
80
  }
40
- this.log(`Title: ${doc.title}`);
41
- this.log(`Slug: ${doc.slug}`);
42
- this.log(`Created: ${doc.metadata !== undefined ? doc.metadata.createdAt : 'unknown'}`);
43
- this.log(`Updated: ${doc.metadata !== undefined ? doc.metadata.updatedAt : 'unknown'}`);
44
- this.log(`\nContent:\n${doc.content}`);
81
+ // Local search
82
+ try {
83
+ await ensureInitialized(cwd);
84
+ }
85
+ catch (error) {
86
+ if (error instanceof NotInitializedError) {
87
+ this.error(error.message);
88
+ }
89
+ throw error instanceof Error ? error : new Error(String(error));
90
+ }
91
+ try {
92
+ const doc = await daemonGetDoc({
93
+ projectPath: cwd,
94
+ slug: args.slug,
95
+ });
96
+ if (flags.json) {
97
+ this.log(JSON.stringify(doc, null, 2));
98
+ return;
99
+ }
100
+ this.log(`Title: ${doc.title}`);
101
+ this.log(`Slug: ${doc.slug}`);
102
+ this.log(`Created: ${doc.metadata !== undefined ? doc.metadata.createdAt : 'unknown'}`);
103
+ this.log(`Updated: ${doc.metadata !== undefined ? doc.metadata.updatedAt : 'unknown'}`);
104
+ this.log(`\nContent:\n${doc.content}`);
105
+ }
106
+ catch (error) {
107
+ // For NOT_FOUND errors, try cross-project search to provide helpful hints
108
+ if (isNotFoundError(error)) {
109
+ // Try global search to see if the doc exists in another project
110
+ const result = await daemonGetDocsBySlug({ slug: args.slug });
111
+ if (result.docs.length > 0) {
112
+ const matches = result.docs.map(dwp => ({
113
+ projectName: dwp.projectName,
114
+ projectPath: dwp.projectPath,
115
+ }));
116
+ if (flags.json) {
117
+ this.log(JSON.stringify(formatCrossProjectJson('doc', args.slug, matches), null, 2));
118
+ this.exit(1);
119
+ }
120
+ this.error(formatCrossProjectHint('doc', args.slug, matches));
121
+ }
122
+ }
123
+ // Re-throw original error if not found anywhere or not a NOT_FOUND error
124
+ throw error instanceof Error ? error : new Error(String(error));
125
+ }
45
126
  }
46
127
  }
47
128
  //# sourceMappingURL=doc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"doc.js","sourceRoot":"","sources":["../../../src/commands/get/doc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAA;AAE3E;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,MAAM,CAAU,IAAI,GAAG;QACrB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;YAChB,WAAW,EAAE,UAAU;YACvB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAA;IAED,MAAM,CAAU,WAAW,GAAG,kCAAkC,CAAA;IAEhE,MAAM,CAAU,QAAQ,GAAG;QACzB,2CAA2C;QAC3C,gDAAgD;KACjD,CAAA;IAED,MAAM,CAAU,KAAK,GAAG;QACtB,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;YAClB,WAAW,EAAE,gBAAgB;YAC7B,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAChD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;QAErD,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAA;QAClE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAA;QACtE,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC;YAC7B,WAAW,EAAE,GAAG;YAChB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAA;QAEF,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YACtC,OAAM;QACR,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,KAAK,EAAE,CAAC,CAAA;QAC/B,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;QAC7B,IAAI,CAAC,GAAG,CACN,YAAY,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAC9E,CAAA;QACD,IAAI,CAAC,GAAG,CACN,YAAY,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAC9E,CAAA;QACD,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IACxC,CAAC"}
1
+ {"version":3,"file":"doc.js","sourceRoot":"","sources":["../../../src/commands/get/doc.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { Command } from '@oclif/core';
3
3
  * Get a single issue by ID or display number
4
4
  */
5
5
  export default class GetIssue extends Command {
6
+ static aliases: string[];
6
7
  static args: {
7
8
  id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
8
9
  };
@@ -10,6 +11,8 @@ export default class GetIssue extends Command {
10
11
  static examples: string[];
11
12
  static flags: {
12
13
  json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ global: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
16
  };
14
17
  run(): Promise<void>;
15
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../../../src/commands/get/issue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAMlD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,OAAgB,IAAI;;MAKnB;IAED,OAAgB,WAAW,SAA+C;IAE1E,OAAgB,QAAQ,WAIvB;IAED,OAAgB,KAAK;;MAKpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA6ClC"}
1
+ {"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../../../src/commands/get/issue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAiBlD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,OAAgB,OAAO,WAAiB;IAExC,OAAgB,IAAI;;MAKnB;IAED,OAAgB,WAAW,SAA+C;IAE1E,OAAgB,QAAQ,WAQvB;IAED,OAAgB,KAAK;;;;MAWpB;IAGY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgJlC"}
@@ -1,11 +1,16 @@
1
1
  import { Args, Command, Flags } from '@oclif/core';
2
2
  import { daemonGetIssue } from '../../daemon/daemon-get-issue.js';
3
3
  import { daemonGetIssueByDisplayNumber } from '../../daemon/daemon-get-issue-by-display-number.js';
4
- import { daemonIsInitialized } from '../../daemon/daemon-is-initialized.js';
4
+ import { daemonGetIssuesByUuid } from '../../daemon/daemon-get-issues-by-uuid.js';
5
+ import { projectFlag } from '../../flags/project-flag.js';
6
+ import { formatCrossProjectHint, formatCrossProjectJson, isNotFoundError, } from '../../utils/cross-project-search.js';
7
+ import { ensureInitialized, NotInitializedError, } from '../../utils/ensure-initialized.js';
8
+ import { resolveProjectPath } from '../../utils/resolve-project-path.js';
5
9
  /**
6
10
  * Get a single issue by ID or display number
7
11
  */
8
12
  export default class GetIssue extends Command {
13
+ static aliases = ['show:issue'];
9
14
  static args = {
10
15
  id: Args.string({
11
16
  description: 'Issue ID (UUID) or display number',
@@ -17,48 +22,137 @@ export default class GetIssue extends Command {
17
22
  '<%= config.bin %> get issue 1',
18
23
  '<%= config.bin %> get issue abc123-uuid',
19
24
  '<%= config.bin %> get issue 1 --json',
25
+ '<%= config.bin %> get issue abc12345-1234-1234-1234-123456789abc --global',
26
+ '<%= config.bin %> get issue abc12345-1234-1234-1234-123456789abc -g --json',
27
+ '<%= config.bin %> get issue 1 --project centy-daemon',
28
+ '<%= config.bin %> get issue 1 --project /path/to/project',
20
29
  ];
21
30
  static flags = {
22
31
  json: Flags.boolean({
23
32
  description: 'Output as JSON',
24
33
  default: false,
25
34
  }),
35
+ global: Flags.boolean({
36
+ char: 'g',
37
+ description: 'Search across all tracked projects (UUID only)',
38
+ default: false,
39
+ }),
40
+ project: projectFlag,
26
41
  };
42
+ // eslint-disable-next-line max-lines-per-function
27
43
  async run() {
28
44
  const { args, flags } = await this.parse(GetIssue);
29
- const cwd = process.env['CENTY_CWD'] ?? process.cwd();
30
- const initStatus = await daemonIsInitialized({ projectPath: cwd });
31
- if (!initStatus.initialized) {
32
- this.error('.centy folder not initialized. Run "centy init" first.');
45
+ const cwd = await resolveProjectPath(flags.project);
46
+ // Handle global search
47
+ if (flags.global) {
48
+ // Validate UUID format for global search
49
+ const uuidRegex = /^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/i;
50
+ if (!uuidRegex.test(args.id)) {
51
+ this.error('Global search requires a valid UUID. Display numbers are not supported for global search.');
52
+ }
53
+ const result = await daemonGetIssuesByUuid({ uuid: args.id });
54
+ if (flags.json) {
55
+ this.log(JSON.stringify(result, null, 2));
56
+ return;
57
+ }
58
+ if (result.issues.length === 0) {
59
+ this.log(`No issues found with UUID: ${args.id}`);
60
+ if (result.errors.length > 0) {
61
+ this.warn('Some projects could not be searched:');
62
+ for (const err of result.errors) {
63
+ this.warn(` - ${err}`);
64
+ }
65
+ }
66
+ return;
67
+ }
68
+ this.log(`Found ${result.totalCount} issue(s) matching UUID: ${args.id}\n`);
69
+ for (const iwp of result.issues) {
70
+ const issue = iwp.issue;
71
+ const meta = issue.metadata;
72
+ this.log(`--- Project: ${iwp.projectName} (${iwp.projectPath}) ---`);
73
+ this.log(`Issue #${issue.displayNumber}`);
74
+ this.log(`ID: ${issue.id}`);
75
+ this.log(`Title: ${issue.title}`);
76
+ this.log(`Status: ${meta !== undefined ? meta.status : 'unknown'}`);
77
+ this.log(`Priority: ${meta !== undefined ? (meta.priorityLabel !== '' ? meta.priorityLabel : `P${meta.priority}`) : 'P?'}`);
78
+ this.log(`Created: ${meta !== undefined ? meta.createdAt : 'unknown'}`);
79
+ this.log(`Updated: ${meta !== undefined ? meta.updatedAt : 'unknown'}`);
80
+ if (issue.description) {
81
+ this.log(`\nDescription:\n${issue.description}`);
82
+ }
83
+ this.log('');
84
+ }
85
+ if (result.errors.length > 0) {
86
+ this.warn('Some projects could not be searched:');
87
+ for (const err of result.errors) {
88
+ this.warn(` - ${err}`);
89
+ }
90
+ }
91
+ return;
92
+ }
93
+ // Local search (existing behavior)
94
+ try {
95
+ await ensureInitialized(cwd);
96
+ }
97
+ catch (error) {
98
+ if (error instanceof NotInitializedError) {
99
+ this.error(error.message);
100
+ }
101
+ throw error instanceof Error ? error : new Error(String(error));
33
102
  }
34
103
  // Try to parse as display number first
35
104
  // Only treat as display number if the entire string is digits (not UUIDs like "3981508f-...")
36
105
  const isAllDigits = /^\d+$/.test(args.id);
37
106
  const displayNumber = isAllDigits ? Number.parseInt(args.id, 10) : NaN;
38
107
  const isDisplayNumber = isAllDigits && !Number.isNaN(displayNumber) && displayNumber > 0;
39
- const issue = isDisplayNumber
40
- ? await daemonGetIssueByDisplayNumber({
41
- projectPath: cwd,
42
- displayNumber,
43
- })
44
- : await daemonGetIssue({
45
- projectPath: cwd,
46
- issueId: args.id,
47
- });
48
- if (flags.json) {
49
- this.log(JSON.stringify(issue, null, 2));
50
- return;
108
+ try {
109
+ const issue = isDisplayNumber
110
+ ? await daemonGetIssueByDisplayNumber({
111
+ projectPath: cwd,
112
+ displayNumber,
113
+ })
114
+ : await daemonGetIssue({
115
+ projectPath: cwd,
116
+ issueId: args.id,
117
+ });
118
+ if (flags.json) {
119
+ this.log(JSON.stringify(issue, null, 2));
120
+ return;
121
+ }
122
+ const meta = issue.metadata;
123
+ this.log(`Issue #${issue.displayNumber}`);
124
+ this.log(`ID: ${issue.id}`);
125
+ this.log(`Title: ${issue.title}`);
126
+ this.log(`Status: ${meta !== undefined ? meta.status : 'unknown'}`);
127
+ this.log(`Priority: ${meta !== undefined ? (meta.priorityLabel !== '' ? meta.priorityLabel : `P${meta.priority}`) : 'P?'}`);
128
+ this.log(`Created: ${meta !== undefined ? meta.createdAt : 'unknown'}`);
129
+ this.log(`Updated: ${meta !== undefined ? meta.updatedAt : 'unknown'}`);
130
+ if (issue.description) {
131
+ this.log(`\nDescription:\n${issue.description}`);
132
+ }
51
133
  }
52
- const meta = issue.metadata;
53
- this.log(`Issue #${issue.displayNumber}`);
54
- this.log(`ID: ${issue.id}`);
55
- this.log(`Title: ${issue.title}`);
56
- this.log(`Status: ${meta !== undefined ? meta.status : 'unknown'}`);
57
- this.log(`Priority: ${meta !== undefined ? (meta.priorityLabel !== '' ? meta.priorityLabel : `P${meta.priority}`) : 'P?'}`);
58
- this.log(`Created: ${meta !== undefined ? meta.createdAt : 'unknown'}`);
59
- this.log(`Updated: ${meta !== undefined ? meta.updatedAt : 'unknown'}`);
60
- if (issue.description) {
61
- this.log(`\nDescription:\n${issue.description}`);
134
+ catch (error) {
135
+ // For UUID lookups that fail, try cross-project search to provide helpful hints
136
+ if (!isDisplayNumber && isNotFoundError(error)) {
137
+ const uuidRegex = /^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/i;
138
+ if (uuidRegex.test(args.id)) {
139
+ // Try global search to see if the issue exists in another project
140
+ const result = await daemonGetIssuesByUuid({ uuid: args.id });
141
+ if (result.issues.length > 0) {
142
+ const matches = result.issues.map(iwp => ({
143
+ projectName: iwp.projectName,
144
+ projectPath: iwp.projectPath,
145
+ }));
146
+ if (flags.json) {
147
+ this.log(JSON.stringify(formatCrossProjectJson('issue', args.id, matches), null, 2));
148
+ this.exit(1);
149
+ }
150
+ this.error(formatCrossProjectHint('issue', args.id, matches));
151
+ }
152
+ }
153
+ }
154
+ // Re-throw original error if not found anywhere or not a NOT_FOUND error
155
+ throw error instanceof Error ? error : new Error(String(error));
62
156
  }
63
157
  }
64
158
  }
@@ -1 +1 @@
1
- {"version":3,"file":"issue.js","sourceRoot":"","sources":["../../../src/commands/get/issue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"issue.js","sourceRoot":"","sources":["../../../src/commands/get/issue.ts"],"names":[],"mappings":"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"}