@proletariat/cli 0.3.58 → 0.3.59

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 (189) hide show
  1. package/dist/commands/{spec → dashboard}/index.d.ts +4 -4
  2. package/dist/commands/dashboard/index.js +117 -0
  3. package/dist/commands/dashboard/index.js.map +1 -0
  4. package/dist/commands/execution/config.js +5 -4
  5. package/dist/commands/execution/config.js.map +1 -1
  6. package/dist/commands/execution/stop.js +4 -2
  7. package/dist/commands/execution/stop.js.map +1 -1
  8. package/dist/commands/execution/view.js +3 -0
  9. package/dist/commands/execution/view.js.map +1 -1
  10. package/dist/commands/init.d.ts +1 -0
  11. package/dist/commands/init.js +40 -3
  12. package/dist/commands/init.js.map +1 -1
  13. package/dist/commands/mcp-server.js +1 -2
  14. package/dist/commands/mcp-server.js.map +1 -1
  15. package/dist/commands/{spec/link/index.d.ts → session/exec.d.ts} +5 -3
  16. package/dist/commands/session/exec.js +205 -0
  17. package/dist/commands/session/exec.js.map +1 -0
  18. package/dist/commands/session/index.js +12 -0
  19. package/dist/commands/session/index.js.map +1 -1
  20. package/dist/commands/{spec/delete.d.ts → session/inspect.d.ts} +3 -3
  21. package/dist/commands/session/inspect.js +316 -0
  22. package/dist/commands/session/inspect.js.map +1 -0
  23. package/dist/commands/session/peek.d.ts +15 -0
  24. package/dist/commands/session/peek.js +141 -8
  25. package/dist/commands/session/peek.js.map +1 -1
  26. package/dist/commands/session/poke.d.ts +4 -1
  27. package/dist/commands/session/poke.js +175 -20
  28. package/dist/commands/session/poke.js.map +1 -1
  29. package/dist/commands/{spec/link/depends.d.ts → session/restart.d.ts} +6 -4
  30. package/dist/commands/session/restart.js +320 -0
  31. package/dist/commands/session/restart.js.map +1 -0
  32. package/dist/commands/tools/add.d.ts +20 -0
  33. package/dist/commands/tools/add.js +129 -0
  34. package/dist/commands/tools/add.js.map +1 -0
  35. package/dist/commands/tools/check.d.ts +10 -0
  36. package/dist/commands/tools/check.js +75 -0
  37. package/dist/commands/tools/check.js.map +1 -0
  38. package/dist/commands/tools/detect.d.ts +11 -0
  39. package/dist/commands/tools/detect.js +107 -0
  40. package/dist/commands/tools/detect.js.map +1 -0
  41. package/dist/commands/tools/index.d.ts +11 -0
  42. package/dist/commands/tools/index.js +87 -0
  43. package/dist/commands/tools/index.js.map +1 -0
  44. package/dist/commands/tools/remove.d.ts +13 -0
  45. package/dist/commands/tools/remove.js +55 -0
  46. package/dist/commands/tools/remove.js.map +1 -0
  47. package/dist/commands/{spec/view.d.ts → trello/configure.d.ts} +6 -6
  48. package/dist/commands/trello/configure.js +259 -0
  49. package/dist/commands/trello/configure.js.map +1 -0
  50. package/dist/commands/{spec/plan.d.ts → trello/import.d.ts} +3 -5
  51. package/dist/commands/trello/import.js +241 -0
  52. package/dist/commands/trello/import.js.map +1 -0
  53. package/dist/commands/{spec/ticket.d.ts → trello/sync.d.ts} +5 -6
  54. package/dist/commands/trello/sync.js +190 -0
  55. package/dist/commands/trello/sync.js.map +1 -0
  56. package/dist/commands/work/start.d.ts +1 -0
  57. package/dist/commands/work/start.js +17 -39
  58. package/dist/commands/work/start.js.map +1 -1
  59. package/dist/lib/dashboard/data.d.ts +64 -0
  60. package/dist/lib/dashboard/data.js +259 -0
  61. package/dist/lib/dashboard/data.js.map +1 -0
  62. package/dist/lib/dashboard/html.d.ts +7 -0
  63. package/dist/lib/dashboard/html.js +682 -0
  64. package/dist/lib/dashboard/html.js.map +1 -0
  65. package/dist/lib/dashboard/server.d.ts +20 -0
  66. package/dist/lib/dashboard/server.js +114 -0
  67. package/dist/lib/dashboard/server.js.map +1 -0
  68. package/dist/lib/execution/config.d.ts +8 -0
  69. package/dist/lib/execution/config.js +83 -4
  70. package/dist/lib/execution/config.js.map +1 -1
  71. package/dist/lib/execution/runners.d.ts +36 -3
  72. package/dist/lib/execution/runners.js +216 -35
  73. package/dist/lib/execution/runners.js.map +1 -1
  74. package/dist/lib/execution/spawner.d.ts +2 -0
  75. package/dist/lib/execution/spawner.js +22 -31
  76. package/dist/lib/execution/spawner.js.map +1 -1
  77. package/dist/lib/execution/types.d.ts +26 -5
  78. package/dist/lib/execution/types.js +24 -0
  79. package/dist/lib/execution/types.js.map +1 -1
  80. package/dist/lib/external-issues/adapters.d.ts +17 -0
  81. package/dist/lib/external-issues/adapters.js +88 -0
  82. package/dist/lib/external-issues/adapters.js.map +1 -1
  83. package/dist/lib/external-issues/mapping-store.js +1 -1
  84. package/dist/lib/external-issues/trello.d.ts +80 -0
  85. package/dist/lib/external-issues/trello.js +266 -0
  86. package/dist/lib/external-issues/trello.js.map +1 -0
  87. package/dist/lib/external-issues/types.d.ts +3 -3
  88. package/dist/lib/external-issues/types.js +1 -1
  89. package/dist/lib/external-issues/types.js.map +1 -1
  90. package/dist/lib/linear/client.d.ts +4 -3
  91. package/dist/lib/linear/client.js +185 -122
  92. package/dist/lib/linear/client.js.map +1 -1
  93. package/dist/lib/mcp/tools/cli-passthrough.js +77 -0
  94. package/dist/lib/mcp/tools/cli-passthrough.js.map +1 -1
  95. package/dist/lib/mcp/tools/index.d.ts +0 -1
  96. package/dist/lib/mcp/tools/index.js +0 -1
  97. package/dist/lib/mcp/tools/index.js.map +1 -1
  98. package/dist/lib/onboarding/detect-tools.d.ts +15 -0
  99. package/dist/lib/onboarding/detect-tools.js +44 -0
  100. package/dist/lib/onboarding/detect-tools.js.map +1 -0
  101. package/dist/lib/onboarding/index.d.ts +2 -0
  102. package/dist/lib/onboarding/index.js +3 -0
  103. package/dist/lib/onboarding/index.js.map +1 -0
  104. package/dist/lib/onboarding/wizard.d.ts +25 -0
  105. package/dist/lib/onboarding/wizard.js +156 -0
  106. package/dist/lib/onboarding/wizard.js.map +1 -0
  107. package/dist/lib/pmo/schema.d.ts +2 -1
  108. package/dist/lib/pmo/schema.js +3 -1
  109. package/dist/lib/pmo/schema.js.map +1 -1
  110. package/dist/lib/runners/claude-code-runner.js +6 -0
  111. package/dist/lib/runners/claude-code-runner.js.map +1 -1
  112. package/dist/lib/tool-registry/detect.d.ts +20 -0
  113. package/dist/lib/tool-registry/detect.js +95 -0
  114. package/dist/lib/tool-registry/detect.js.map +1 -0
  115. package/dist/lib/tool-registry/index.d.ts +10 -0
  116. package/dist/lib/tool-registry/index.js +13 -0
  117. package/dist/lib/tool-registry/index.js.map +1 -0
  118. package/dist/lib/tool-registry/policy.d.ts +32 -0
  119. package/dist/lib/tool-registry/policy.js +97 -0
  120. package/dist/lib/tool-registry/policy.js.map +1 -0
  121. package/dist/lib/tool-registry/registry.d.ts +42 -0
  122. package/dist/lib/tool-registry/registry.js +120 -0
  123. package/dist/lib/tool-registry/registry.js.map +1 -0
  124. package/dist/lib/tool-registry/spawn.d.ts +50 -0
  125. package/dist/lib/tool-registry/spawn.js +103 -0
  126. package/dist/lib/tool-registry/spawn.js.map +1 -0
  127. package/dist/lib/tool-registry/types.d.ts +56 -0
  128. package/dist/lib/tool-registry/types.js +109 -0
  129. package/dist/lib/tool-registry/types.js.map +1 -0
  130. package/dist/lib/trello/client.d.ts +23 -0
  131. package/dist/lib/trello/client.js +114 -0
  132. package/dist/lib/trello/client.js.map +1 -0
  133. package/dist/lib/trello/config.d.ts +55 -0
  134. package/dist/lib/trello/config.js +127 -0
  135. package/dist/lib/trello/config.js.map +1 -0
  136. package/dist/lib/trello/index.d.ts +5 -0
  137. package/dist/lib/trello/index.js +5 -0
  138. package/dist/lib/trello/index.js.map +1 -0
  139. package/dist/lib/trello/mapper.d.ts +13 -0
  140. package/dist/lib/trello/mapper.js +71 -0
  141. package/dist/lib/trello/mapper.js.map +1 -0
  142. package/dist/lib/trello/sync.d.ts +13 -0
  143. package/dist/lib/trello/sync.js +38 -0
  144. package/dist/lib/trello/sync.js.map +1 -0
  145. package/dist/lib/trello/types.d.ts +53 -0
  146. package/dist/lib/trello/types.js +2 -0
  147. package/dist/lib/trello/types.js.map +1 -0
  148. package/dist/lib/work-source/client.js +17 -0
  149. package/dist/lib/work-source/client.js.map +1 -1
  150. package/dist/lib/work-source/config.d.ts +1 -1
  151. package/dist/lib/work-source/config.js +11 -1
  152. package/dist/lib/work-source/config.js.map +1 -1
  153. package/oclif.manifest.json +3460 -3476
  154. package/package.json +6 -2
  155. package/dist/commands/spec/create.d.ts +0 -20
  156. package/dist/commands/spec/create.js +0 -171
  157. package/dist/commands/spec/create.js.map +0 -1
  158. package/dist/commands/spec/delete.js +0 -112
  159. package/dist/commands/spec/delete.js.map +0 -1
  160. package/dist/commands/spec/edit.d.ts +0 -23
  161. package/dist/commands/spec/edit.js +0 -262
  162. package/dist/commands/spec/edit.js.map +0 -1
  163. package/dist/commands/spec/index.js +0 -88
  164. package/dist/commands/spec/index.js.map +0 -1
  165. package/dist/commands/spec/link/depends.js +0 -87
  166. package/dist/commands/spec/link/depends.js.map +0 -1
  167. package/dist/commands/spec/link/index.js +0 -93
  168. package/dist/commands/spec/link/index.js.map +0 -1
  169. package/dist/commands/spec/link/remove.d.ts +0 -18
  170. package/dist/commands/spec/link/remove.js +0 -91
  171. package/dist/commands/spec/link/remove.js.map +0 -1
  172. package/dist/commands/spec/list.d.ts +0 -14
  173. package/dist/commands/spec/list.js +0 -101
  174. package/dist/commands/spec/list.js.map +0 -1
  175. package/dist/commands/spec/plan.js +0 -102
  176. package/dist/commands/spec/plan.js.map +0 -1
  177. package/dist/commands/spec/ticket.js +0 -144
  178. package/dist/commands/spec/ticket.js.map +0 -1
  179. package/dist/commands/spec/view.js +0 -202
  180. package/dist/commands/spec/view.js.map +0 -1
  181. package/dist/lib/mcp/tools/spec.d.ts +0 -6
  182. package/dist/lib/mcp/tools/spec.js +0 -197
  183. package/dist/lib/mcp/tools/spec.js.map +0 -1
  184. package/dist/lib/pmo/spec-parser.d.ts +0 -25
  185. package/dist/lib/pmo/spec-parser.js +0 -206
  186. package/dist/lib/pmo/spec-parser.js.map +0 -1
  187. package/dist/lib/pmo/spec-types.d.ts +0 -43
  188. package/dist/lib/pmo/spec-types.js +0 -8
  189. package/dist/lib/pmo/spec-types.js.map +0 -1
@@ -0,0 +1,259 @@
1
+ import { Flags } from '@oclif/core';
2
+ import inquirer from 'inquirer';
3
+ import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
4
+ import { colors } from '../../lib/colors.js';
5
+ import { shouldOutputJson, outputSuccessAsJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
6
+ import { TrelloClient, clearTrelloConfig, getTrelloApiKey, getTrelloApiToken, isTrelloConfigured, loadTrelloConfig, saveTrelloApiKey, saveTrelloApiToken, saveTrelloBoard, } from '../../lib/trello/index.js';
7
+ export default class TrelloConfigure extends PMOCommand {
8
+ static description = 'Connect to Trello and configure authentication';
9
+ static examples = [
10
+ '<%= config.bin %> <%= command.id %>',
11
+ '<%= config.bin %> <%= command.id %> --check',
12
+ '<%= config.bin %> <%= command.id %> --force',
13
+ '<%= config.bin %> <%= command.id %> --disconnect',
14
+ 'TRELLO_API_KEY=... TRELLO_API_TOKEN=... <%= config.bin %> <%= command.id %>',
15
+ '<%= config.bin %> <%= command.id %> --json',
16
+ ];
17
+ static flags = {
18
+ ...pmoBaseFlags,
19
+ check: Flags.boolean({
20
+ description: 'Only check if Trello credentials are valid (do not prompt)',
21
+ default: false,
22
+ }),
23
+ force: Flags.boolean({
24
+ description: 'Force re-authentication even if credentials exist',
25
+ default: false,
26
+ }),
27
+ disconnect: Flags.boolean({
28
+ description: 'Remove stored Trello credentials and configuration',
29
+ default: false,
30
+ }),
31
+ board: Flags.string({
32
+ description: 'Default board ID or name',
33
+ }),
34
+ };
35
+ async execute() {
36
+ const { flags } = await this.parse(TrelloConfigure);
37
+ const jsonMode = shouldOutputJson(flags);
38
+ const db = this.storage.getDatabase();
39
+ // Handle --disconnect
40
+ if (flags.disconnect) {
41
+ clearTrelloConfig(db);
42
+ if (jsonMode) {
43
+ outputSuccessAsJson({
44
+ disconnected: true,
45
+ message: 'Trello credentials and configuration removed.',
46
+ }, createMetadata('trello configure', flags));
47
+ return;
48
+ }
49
+ this.log(colors.success('Trello credentials and configuration removed.'));
50
+ return;
51
+ }
52
+ // Handle --check (health check)
53
+ if (flags.check) {
54
+ return this.handleCheck(flags, jsonMode, db);
55
+ }
56
+ // Check for existing config
57
+ const existingConfig = loadTrelloConfig(db);
58
+ if (existingConfig && !flags.force) {
59
+ try {
60
+ const client = new TrelloClient(existingConfig.apiKey, existingConfig.apiToken);
61
+ const member = await client.verify();
62
+ if (jsonMode) {
63
+ outputSuccessAsJson({
64
+ authenticated: true,
65
+ user: member.fullName,
66
+ username: member.username,
67
+ board: existingConfig.boardName ?? existingConfig.boardId ?? null,
68
+ message: 'Already connected. Use --force to re-authenticate.',
69
+ }, createMetadata('trello configure', flags));
70
+ return;
71
+ }
72
+ this.log(colors.success('Already connected to Trello'));
73
+ this.log(colors.textMuted(` User: ${member.fullName} (@${member.username})`));
74
+ if (existingConfig.boardName) {
75
+ this.log(colors.textMuted(` Board: ${existingConfig.boardName}`));
76
+ }
77
+ this.log('');
78
+ this.log(colors.textMuted('Use --force to re-authenticate.'));
79
+ return;
80
+ }
81
+ catch {
82
+ // Stored credentials are bad, proceed with re-auth
83
+ }
84
+ }
85
+ // Try environment variable first
86
+ let apiKey = getTrelloApiKey(db);
87
+ let apiToken = getTrelloApiToken(db);
88
+ if (!apiKey) {
89
+ if (jsonMode) {
90
+ outputErrorAsJson('API_KEY_REQUIRED', 'Trello API key required. Set TRELLO_API_KEY or PRLT_TRELLO_API_KEY environment variable, or run interactively.', createMetadata('trello configure', flags));
91
+ this.exit(1);
92
+ }
93
+ this.log('');
94
+ this.log(colors.primary('Trello Authentication'));
95
+ this.log('');
96
+ this.log('Get your API key at:');
97
+ this.log(colors.textSecondary(' https://trello.com/power-ups/admin'));
98
+ this.log('');
99
+ const { inputKey } = await inquirer.prompt([{
100
+ type: 'password',
101
+ name: 'inputKey',
102
+ message: 'Enter your Trello API key:',
103
+ mask: '*',
104
+ validate: (input) => {
105
+ if (!input.trim())
106
+ return 'API key is required';
107
+ return true;
108
+ },
109
+ }]);
110
+ apiKey = inputKey;
111
+ }
112
+ if (!apiToken) {
113
+ if (jsonMode) {
114
+ outputErrorAsJson('API_TOKEN_REQUIRED', 'Trello API token required. Set TRELLO_API_TOKEN or PRLT_TRELLO_API_TOKEN environment variable, or run interactively.', createMetadata('trello configure', flags));
115
+ this.exit(1);
116
+ }
117
+ this.log('');
118
+ this.log('Generate an API token at:');
119
+ this.log(colors.textSecondary(` https://trello.com/1/authorize?expiration=never&scope=read,write&response_type=token&name=prlt&key=${apiKey}`));
120
+ this.log('');
121
+ const { inputToken } = await inquirer.prompt([{
122
+ type: 'password',
123
+ name: 'inputToken',
124
+ message: 'Enter your Trello API token:',
125
+ mask: '*',
126
+ validate: (input) => {
127
+ if (!input.trim())
128
+ return 'API token is required';
129
+ return true;
130
+ },
131
+ }]);
132
+ apiToken = inputToken;
133
+ }
134
+ // Verify the credentials
135
+ if (!jsonMode) {
136
+ this.log('');
137
+ this.log(colors.textMuted('Verifying Trello credentials...'));
138
+ }
139
+ try {
140
+ const client = new TrelloClient(apiKey, apiToken);
141
+ const member = await client.verify();
142
+ // Save credentials
143
+ saveTrelloApiKey(db, apiKey);
144
+ saveTrelloApiToken(db, apiToken);
145
+ if (!jsonMode) {
146
+ this.log(colors.success('Connected to Trello'));
147
+ this.log(colors.textMuted(` Signed in as ${member.fullName} (@${member.username})`));
148
+ }
149
+ // Board selection
150
+ let boardId;
151
+ let boardName;
152
+ if (flags.board) {
153
+ const boards = await client.getBoards();
154
+ const matched = boards.find(b => b.id === flags.board || b.name.toLowerCase() === flags.board.toLowerCase());
155
+ if (matched) {
156
+ boardId = matched.id;
157
+ boardName = matched.name;
158
+ }
159
+ else {
160
+ throw new Error(`Board "${flags.board}" not found`);
161
+ }
162
+ }
163
+ else if (!jsonMode) {
164
+ const boards = await client.getBoards();
165
+ if (boards.length > 0) {
166
+ const { selectedBoard } = await inquirer.prompt([{
167
+ type: 'list',
168
+ name: 'selectedBoard',
169
+ message: 'Select default Trello board (optional):',
170
+ choices: [
171
+ { name: 'Skip', value: null },
172
+ ...boards.map((board) => ({
173
+ name: board.name,
174
+ value: board.id,
175
+ })),
176
+ ],
177
+ default: null,
178
+ }]);
179
+ if (selectedBoard) {
180
+ const selected = boards.find(b => b.id === selectedBoard);
181
+ boardId = selected?.id;
182
+ boardName = selected?.name;
183
+ }
184
+ }
185
+ }
186
+ if (boardId && boardName) {
187
+ saveTrelloBoard(db, boardId, boardName);
188
+ }
189
+ if (jsonMode) {
190
+ outputSuccessAsJson({
191
+ authenticated: true,
192
+ user: member.fullName,
193
+ username: member.username,
194
+ board: boardName ?? null,
195
+ }, createMetadata('trello configure', flags));
196
+ return;
197
+ }
198
+ if (boardName) {
199
+ this.log(colors.textMuted(` Board: ${boardName}`));
200
+ }
201
+ this.log('');
202
+ this.log(colors.success('Trello integration configured!'));
203
+ this.log(colors.textMuted(' Run "prlt trello import" to import cards as tickets'));
204
+ this.log(colors.textMuted(' Run "prlt trello sync" to sync mapped tickets'));
205
+ }
206
+ catch (error) {
207
+ const message = `Authentication failed: ${error instanceof Error ? error.message : String(error)}`;
208
+ if (jsonMode) {
209
+ outputErrorAsJson('TRELLO_CONNECT_FAILED', message, createMetadata('trello configure', flags));
210
+ this.exit(1);
211
+ }
212
+ this.error(message);
213
+ }
214
+ }
215
+ async handleCheck(flags, jsonMode, db) {
216
+ if (!isTrelloConfigured(db)) {
217
+ if (jsonMode) {
218
+ outputErrorAsJson('TRELLO_NOT_CONFIGURED', 'Trello is not configured. Run "prlt trello configure" to authenticate.', createMetadata('trello configure', flags));
219
+ this.exit(1);
220
+ }
221
+ this.log(colors.warning('Trello is not configured.'));
222
+ this.log(colors.textMuted('Run "prlt trello configure" to authenticate.'));
223
+ this.exit(1);
224
+ return;
225
+ }
226
+ const config = loadTrelloConfig(db);
227
+ try {
228
+ const client = new TrelloClient(config.apiKey, config.apiToken);
229
+ const member = await client.verify();
230
+ if (jsonMode) {
231
+ outputSuccessAsJson({
232
+ authenticated: true,
233
+ connected: true,
234
+ user: member.fullName,
235
+ username: member.username,
236
+ board: config.boardName ?? config.boardId ?? null,
237
+ }, createMetadata('trello configure', flags));
238
+ return;
239
+ }
240
+ this.log(colors.success('Trello connection is active'));
241
+ this.log(colors.textMuted(` User: ${member.fullName} (@${member.username})`));
242
+ if (config.boardName) {
243
+ this.log(colors.textMuted(` Board: ${config.boardName}`));
244
+ }
245
+ }
246
+ catch (error) {
247
+ const message = error instanceof Error ? error.message : String(error);
248
+ if (jsonMode) {
249
+ outputErrorAsJson('TRELLO_AUTH_INVALID', `Stored Trello credentials are invalid or expired: ${message}`, createMetadata('trello configure', flags));
250
+ this.exit(1);
251
+ }
252
+ this.log(colors.error('Stored Trello credentials are invalid or expired.'));
253
+ this.log(colors.textMuted(` Error: ${message}`));
254
+ this.log(colors.textMuted('Run "prlt trello configure --force" to re-authenticate.'));
255
+ this.exit(1);
256
+ }
257
+ }
258
+ }
259
+ //# sourceMappingURL=configure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure.js","sourceRoot":"","sources":["../../../src/commands/trello/configure.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,10 @@
1
1
  import { PMOCommand } from '../../lib/pmo/index.js';
2
- export default class SpecPlan extends PMOCommand {
2
+ export default class TrelloImport extends PMOCommand {
3
3
  static description: string;
4
4
  static examples: string[];
5
- static args: {
6
- spec: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
- };
8
5
  static flags: {
9
- spec: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
6
+ limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
7
+ all: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
8
  'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
9
  json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
10
  machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
@@ -0,0 +1,241 @@
1
+ import { Flags } from '@oclif/core';
2
+ import inquirer from 'inquirer';
3
+ import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
4
+ import { colors } from '../../lib/colors.js';
5
+ import { shouldOutputJson, outputSuccessAsJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
6
+ import { TrelloClient, isTrelloConfigured, loadTrelloConfig, getTrelloApiKey, getTrelloApiToken, } from '../../lib/trello/index.js';
7
+ import { normalizeTrelloCardToEnvelope, buildTrelloTicketDescription, buildTrelloMetadata, } from '../../lib/external-issues/trello.js';
8
+ export default class TrelloImport extends PMOCommand {
9
+ static description = 'Import Trello cards into PMO as tickets';
10
+ static examples = [
11
+ '<%= config.bin %> <%= command.id %> # Interactive: select cards from board',
12
+ '<%= config.bin %> <%= command.id %> --limit 50 # Import up to 50 cards',
13
+ '<%= config.bin %> <%= command.id %> --all # Import all matching cards',
14
+ '<%= config.bin %> <%= command.id %> --dry-run # Preview what would be imported',
15
+ '<%= config.bin %> <%= command.id %> --json # JSON output for scripting',
16
+ ];
17
+ static flags = {
18
+ ...pmoBaseFlags,
19
+ limit: Flags.integer({
20
+ char: 'n',
21
+ description: 'Maximum number of cards to import',
22
+ default: 50,
23
+ }),
24
+ all: Flags.boolean({
25
+ char: 'a',
26
+ description: 'Import all matching cards without interactive selection',
27
+ default: false,
28
+ }),
29
+ 'dry-run': Flags.boolean({
30
+ description: 'Preview cards that would be imported without creating tickets',
31
+ default: false,
32
+ }),
33
+ };
34
+ async execute() {
35
+ const { flags } = await this.parse(TrelloImport);
36
+ const jsonMode = shouldOutputJson(flags);
37
+ const db = this.storage.getDatabase();
38
+ if (!isTrelloConfigured(db)) {
39
+ if (jsonMode) {
40
+ outputErrorAsJson('TRELLO_NOT_CONFIGURED', 'Trello is not configured. Run "prlt trello configure" first.', createMetadata('trello import', flags));
41
+ this.exit(1);
42
+ }
43
+ this.error('Trello is not configured. Run "prlt trello configure" first.');
44
+ }
45
+ const config = loadTrelloConfig(db);
46
+ const apiKey = getTrelloApiKey(db);
47
+ const apiToken = getTrelloApiToken(db);
48
+ if (!apiKey || !apiToken) {
49
+ if (jsonMode) {
50
+ outputErrorAsJson('TRELLO_NO_CREDENTIALS', 'Trello credentials not found.', createMetadata('trello import', flags));
51
+ this.exit(1);
52
+ }
53
+ this.error('Trello credentials not found. Run "prlt trello configure" first.');
54
+ }
55
+ if (!config.boardId) {
56
+ if (jsonMode) {
57
+ outputErrorAsJson('TRELLO_NO_BOARD', 'No Trello board configured. Run "prlt trello configure" and select a board.', createMetadata('trello import', flags));
58
+ this.exit(1);
59
+ }
60
+ this.error('No Trello board configured. Run "prlt trello configure" and select a board.');
61
+ }
62
+ const client = new TrelloClient(apiKey, apiToken);
63
+ const projectId = await this.requireProject({
64
+ jsonMode: jsonMode ? {
65
+ flags,
66
+ commandName: 'trello import',
67
+ baseCommand: `${this.config.bin} trello import`,
68
+ } : undefined,
69
+ });
70
+ this.log(colors.textMuted(`Fetching cards from Trello board "${config.boardName || config.boardId}"...`));
71
+ let trelloCards;
72
+ try {
73
+ trelloCards = await client.getBoardCards(config.boardId, { limit: flags.limit });
74
+ }
75
+ catch (error) {
76
+ const msg = error instanceof Error ? error.message : 'Failed to fetch cards from Trello.';
77
+ if (jsonMode) {
78
+ outputErrorAsJson('TRELLO_FETCH_FAILED', msg, createMetadata('trello import', flags));
79
+ this.exit(1);
80
+ }
81
+ this.error(msg);
82
+ }
83
+ if (trelloCards.length === 0) {
84
+ if (jsonMode) {
85
+ outputSuccessAsJson({
86
+ imported: 0,
87
+ message: 'No open cards found on the Trello board.',
88
+ }, createMetadata('trello import', flags));
89
+ return;
90
+ }
91
+ this.log(colors.warning('No open cards found on the Trello board.'));
92
+ return;
93
+ }
94
+ // Check which are already imported
95
+ const tickets = await this.storage.listTickets(projectId);
96
+ const newCards = [];
97
+ const alreadyImported = [];
98
+ for (const card of trelloCards) {
99
+ const existing = tickets.find((ticket) => {
100
+ const source = ticket.metadata?.external_source;
101
+ const key = ticket.metadata?.external_key;
102
+ const id = ticket.metadata?.external_id;
103
+ return source === 'trello' && (key === card.id || id === card.id);
104
+ });
105
+ if (existing) {
106
+ alreadyImported.push(card);
107
+ }
108
+ else {
109
+ newCards.push(card);
110
+ }
111
+ }
112
+ if (newCards.length === 0) {
113
+ if (jsonMode) {
114
+ outputSuccessAsJson({
115
+ imported: 0,
116
+ skipped: alreadyImported.length,
117
+ message: 'All matching cards are already imported.',
118
+ }, createMetadata('trello import', flags));
119
+ return;
120
+ }
121
+ this.log(colors.textMuted(`All ${alreadyImported.length} matching card(s) already imported.`));
122
+ return;
123
+ }
124
+ // Interactive selection (unless --all)
125
+ let selectedCards = newCards;
126
+ if (!flags.all && !jsonMode) {
127
+ const cardChoices = newCards.map((card) => ({
128
+ name: `${card.id.slice(0, 8)} ${card.name} [${card.closed ? 'Closed' : 'Open'}]`,
129
+ value: card.id,
130
+ checked: true,
131
+ }));
132
+ const { selectedIds } = await inquirer.prompt([{
133
+ type: 'checkbox',
134
+ name: 'selectedIds',
135
+ message: `Select cards to import (${newCards.length} new, ${alreadyImported.length} already imported):`,
136
+ choices: cardChoices,
137
+ }]);
138
+ selectedCards = newCards.filter((c) => selectedIds.includes(c.id));
139
+ }
140
+ if (selectedCards.length === 0) {
141
+ this.log(colors.textMuted('No cards selected.'));
142
+ return;
143
+ }
144
+ // Dry run mode
145
+ if (flags['dry-run']) {
146
+ if (jsonMode) {
147
+ outputSuccessAsJson({
148
+ dryRun: true,
149
+ wouldImport: selectedCards.map((c) => ({
150
+ id: c.id,
151
+ name: c.name,
152
+ closed: c.closed,
153
+ })),
154
+ }, createMetadata('trello import', flags));
155
+ return;
156
+ }
157
+ this.log('');
158
+ this.log(colors.primary('Dry run - would import:'));
159
+ for (const card of selectedCards) {
160
+ this.log(` ${colors.textSecondary(card.id.slice(0, 8))} ${card.name}`);
161
+ }
162
+ this.log('');
163
+ this.log(colors.textMuted(`${selectedCards.length} card(s) would be imported.`));
164
+ return;
165
+ }
166
+ // Import cards
167
+ this.log('');
168
+ this.log(colors.textMuted(`Importing ${selectedCards.length} card(s)...`));
169
+ let imported = 0;
170
+ let updated = 0;
171
+ const errors = [];
172
+ for (const card of selectedCards) {
173
+ try {
174
+ const envelope = normalizeTrelloCardToEnvelope(card);
175
+ const description = buildTrelloTicketDescription(envelope);
176
+ const metadata = buildTrelloMetadata(envelope);
177
+ // Check if already exists (shouldn't given our filter, but be safe)
178
+ const existingTicket = tickets.find((ticket) => {
179
+ const source = ticket.metadata?.external_source;
180
+ const key = ticket.metadata?.external_key;
181
+ return source === 'trello' && key === card.id;
182
+ });
183
+ if (existingTicket) {
184
+ await this.storage.updateTicket(existingTicket.id, {
185
+ title: envelope.title,
186
+ description,
187
+ priority: envelope.priority ?? undefined,
188
+ category: envelope.category ?? undefined,
189
+ labels: envelope.labels,
190
+ metadata: {
191
+ ...existingTicket.metadata,
192
+ ...metadata,
193
+ },
194
+ });
195
+ updated++;
196
+ }
197
+ else {
198
+ await this.storage.createTicket(projectId, {
199
+ title: envelope.title,
200
+ description,
201
+ priority: envelope.priority ?? undefined,
202
+ category: envelope.category ?? undefined,
203
+ labels: envelope.labels,
204
+ metadata,
205
+ });
206
+ imported++;
207
+ }
208
+ }
209
+ catch (error) {
210
+ const msg = error instanceof Error ? error.message : 'Unknown error';
211
+ errors.push({ id: card.id, error: msg });
212
+ }
213
+ }
214
+ if (jsonMode) {
215
+ outputSuccessAsJson({
216
+ imported,
217
+ updated,
218
+ skipped: alreadyImported.length,
219
+ errors,
220
+ }, createMetadata('trello import', flags));
221
+ return;
222
+ }
223
+ this.log('');
224
+ if (imported > 0) {
225
+ this.log(colors.success(`Imported ${imported} card(s) into PMO`));
226
+ }
227
+ if (updated > 0) {
228
+ this.log(colors.textMuted(` Updated ${updated} existing ticket(s)`));
229
+ }
230
+ if (alreadyImported.length > 0) {
231
+ this.log(colors.textMuted(` Skipped ${alreadyImported.length} (already imported)`));
232
+ }
233
+ if (errors.length > 0) {
234
+ this.log(colors.error(` ${errors.length} error(s):`));
235
+ for (const err of errors) {
236
+ this.log(colors.textMuted(` ${err.id}: ${err.error}`));
237
+ }
238
+ }
239
+ }
240
+ }
241
+ //# sourceMappingURL=import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../../src/commands/trello/import.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,13 @@
1
1
  import { PMOCommand } from '../../lib/pmo/index.js';
2
- export default class SpecTicket extends PMOCommand {
2
+ export default class TrelloSyncCommand extends PMOCommand {
3
3
  static description: string;
4
4
  static examples: string[];
5
- static args: {
6
- ticketId: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
- specId: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
8
- };
9
5
  static flags: {
10
6
  ticket: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
- spec: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ card: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ list: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ 'create-missing': import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ 'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
11
  json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
12
  machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
13
  project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;