@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
@@ -1,102 +0,0 @@
1
- import { Flags, Args } from '@oclif/core';
2
- import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
3
- import { styles } from '../../lib/styles.js';
4
- import { shouldOutputJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
5
- import { FlagResolver } from '../../lib/flags/index.js';
6
- export default class SpecPlan extends PMOCommand {
7
- static description = 'Generate tickets from spec by comparing ideal state vs codebase (uses LLM)';
8
- static examples = [
9
- '<%= config.bin %> <%= command.id %> user-authentication',
10
- '<%= config.bin %> <%= command.id %> --spec api-design --dry-run',
11
- ];
12
- static args = {
13
- spec: Args.string({
14
- description: 'Spec ID',
15
- required: false,
16
- }),
17
- };
18
- static flags = {
19
- ...pmoBaseFlags,
20
- spec: Flags.string({
21
- char: 's',
22
- description: 'Spec ID',
23
- }),
24
- 'dry-run': Flags.boolean({
25
- description: 'Show what would be created without creating tickets',
26
- default: false,
27
- }),
28
- };
29
- async execute() {
30
- const { args, flags } = await this.parse(SpecPlan);
31
- // Check if JSON output mode is active
32
- const jsonMode = shouldOutputJson(flags);
33
- // Helper to handle errors in JSON mode
34
- const handleError = (code, message) => {
35
- if (jsonMode) {
36
- outputErrorAsJson(code, message, createMetadata('spec plan', flags));
37
- this.exit(1);
38
- }
39
- this.error(message);
40
- };
41
- // Get spec ID from args or flags
42
- let specId = args.spec || flags.spec;
43
- if (!specId) {
44
- // List specs and prompt for selection
45
- const specs = await this.storage.listSpecs();
46
- if (specs.length === 0) {
47
- return handleError('NO_SPECS', 'No specs found. Create a spec first with "prlt spec create".');
48
- }
49
- // Use FlagResolver for spec selection
50
- const resolver = new FlagResolver({
51
- commandName: 'spec plan',
52
- baseCommand: 'prlt spec plan',
53
- jsonMode,
54
- flags: { spec: flags.spec },
55
- });
56
- resolver.addPrompt({
57
- flagName: 'spec',
58
- type: 'list',
59
- message: 'Select spec to plan:',
60
- choices: () => specs.map(s => ({
61
- name: `${s.title} [${s.status}]${s.type ? ` (${s.type})` : ''}`,
62
- value: s.id,
63
- })),
64
- });
65
- const resolved = await resolver.resolve();
66
- specId = resolved.spec;
67
- }
68
- // Get the spec
69
- const spec = await this.storage.getSpec(specId);
70
- if (!spec) {
71
- this.error(`Spec not found: ${specId}`);
72
- }
73
- this.log(styles.header(`\n📋 Planning from spec: ${spec.title}`));
74
- this.log('');
75
- // TODO: Call LLM to compare spec vs codebase and generate tickets
76
- // For now, just show the spec content
77
- this.log(styles.muted('Spec content:'));
78
- if (spec.problem) {
79
- this.log(styles.muted(`\nProblem:`));
80
- this.log(` ${spec.problem}`);
81
- }
82
- if (spec.solution) {
83
- this.log(styles.muted(`\nSolution:`));
84
- this.log(` ${spec.solution}`);
85
- }
86
- if (spec.acceptanceCriteria) {
87
- this.log(styles.muted(`\nAcceptance Criteria:`));
88
- this.log(` ${spec.acceptanceCriteria}`);
89
- }
90
- this.log('');
91
- this.log(styles.warning('LLM-based ticket generation not yet implemented.'));
92
- this.log(styles.muted('This command will:'));
93
- this.log(styles.muted(' 1. Read the spec (ideal state)'));
94
- this.log(styles.muted(' 2. Analyze the codebase (current state)'));
95
- this.log(styles.muted(' 3. Generate tickets for the delta'));
96
- this.log('');
97
- if (flags['dry-run']) {
98
- this.log(styles.muted('(dry-run mode - no tickets would be created)'));
99
- }
100
- }
101
- }
102
- //# sourceMappingURL=plan.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/commands/spec/plan.ts"],"names":[],"mappings":"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"}
@@ -1,144 +0,0 @@
1
- import { Flags, Args } from '@oclif/core';
2
- import { PMOCommand, pmoBaseFlags, autoExportToBoard } from '../../lib/pmo/index.js';
3
- import { styles } from '../../lib/styles.js';
4
- import { shouldOutputJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
5
- import { FlagResolver } from '../../lib/flags/index.js';
6
- export default class SpecTicket extends PMOCommand {
7
- static description = 'Assign a ticket to a spec document';
8
- static examples = [
9
- '<%= config.bin %> <%= command.id %> PRLT-001 user-authentication',
10
- '<%= config.bin %> <%= command.id %> --ticket PRLT-001 --spec api-design',
11
- ];
12
- static args = {
13
- ticketId: Args.string({
14
- description: 'Ticket ID',
15
- required: false,
16
- }),
17
- specId: Args.string({
18
- description: 'Spec ID (filename without .md)',
19
- required: false,
20
- }),
21
- };
22
- static flags = {
23
- ...pmoBaseFlags,
24
- ticket: Flags.string({
25
- char: 't',
26
- description: 'Ticket ID',
27
- }),
28
- spec: Flags.string({
29
- char: 's',
30
- description: 'Spec ID (filename without .md)',
31
- }),
32
- };
33
- async execute() {
34
- const { args, flags } = await this.parse(SpecTicket);
35
- // Check if JSON output mode is active
36
- const jsonMode = shouldOutputJson(flags);
37
- // This command requires project context (with JSON mode support)
38
- const projectId = await this.requireProject({
39
- jsonMode: jsonMode ? {
40
- flags,
41
- commandName: 'spec ticket',
42
- baseCommand: 'prlt spec ticket',
43
- } : undefined,
44
- });
45
- // Helper to handle errors in JSON mode
46
- const handleError = (code, message) => {
47
- if (jsonMode) {
48
- outputErrorAsJson(code, message, createMetadata('spec ticket', flags));
49
- this.exit(1);
50
- }
51
- this.error(message);
52
- };
53
- // Get ticket ID
54
- let ticketId = args.ticketId || flags.ticket;
55
- if (!ticketId) {
56
- const tickets = await this.storage.listTickets(projectId);
57
- if (tickets.length === 0) {
58
- return handleError('NO_TICKETS', 'No tickets found. Create one first with: prlt ticket create');
59
- }
60
- // Use FlagResolver for ticket selection
61
- const ticketResolver = new FlagResolver({
62
- commandName: 'spec ticket',
63
- baseCommand: 'prlt spec ticket',
64
- jsonMode,
65
- flags: { ticket: flags.ticket },
66
- context: { projectId },
67
- });
68
- ticketResolver.addPrompt({
69
- flagName: 'ticket',
70
- type: 'list',
71
- message: 'Select ticket to link:',
72
- choices: () => tickets.map(t => ({
73
- name: `${t.id}: ${t.title}`,
74
- value: t.id,
75
- })),
76
- });
77
- const resolved = await ticketResolver.resolve();
78
- ticketId = resolved.ticket;
79
- }
80
- if (!ticketId) {
81
- return handleError('NO_TICKET_SELECTED', 'No ticket selected');
82
- }
83
- // Get ticket
84
- const ticket = await this.storage.getTicket(ticketId);
85
- if (!ticket) {
86
- const projectName = await this.getProjectName(projectId);
87
- return handleError('TICKET_NOT_FOUND', `Ticket "${ticketId}" not found in project "${projectName}"`);
88
- }
89
- // Get spec ID
90
- let specId = args.specId || flags.spec;
91
- if (!specId) {
92
- // List all specs globally (specs are not project-scoped)
93
- const specs = await this.storage.listSpecs();
94
- if (specs.length === 0) {
95
- return handleError('NO_SPECS', 'No specs found. Create one first with: prlt spec create');
96
- }
97
- // Use FlagResolver for spec selection
98
- const specResolver = new FlagResolver({
99
- commandName: 'spec ticket',
100
- baseCommand: `prlt spec ticket --ticket "${ticketId}"`,
101
- jsonMode,
102
- flags: { spec: flags.spec },
103
- context: { projectId, ticketId },
104
- });
105
- specResolver.addPrompt({
106
- flagName: 'spec',
107
- type: 'list',
108
- message: 'Select spec to link:',
109
- choices: () => specs.map(s => ({
110
- name: `${s.title} (${s.status})`,
111
- value: s.id,
112
- })),
113
- });
114
- const resolved = await specResolver.resolve();
115
- specId = resolved.spec;
116
- }
117
- if (!specId) {
118
- this.error('No spec selected');
119
- }
120
- // Verify spec exists globally (specs are not project-scoped)
121
- const spec = await this.storage.getSpec(specId);
122
- if (!spec) {
123
- return handleError('SPEC_NOT_FOUND', `Spec "${specId}" not found`);
124
- }
125
- // Check if already linked
126
- if (ticket.specId === specId) {
127
- this.log(styles.warning(`Ticket "${ticketId}" is already linked to spec "${specId}"`));
128
- return;
129
- }
130
- // Warn if ticket already has a different spec
131
- if (ticket.specId && ticket.specId !== specId) {
132
- this.log(styles.warning(`Ticket "${ticketId}" is currently linked to spec "${ticket.specId}"`));
133
- this.log(styles.muted(`This will replace the existing spec link.`));
134
- }
135
- // Set spec on ticket (single spec per ticket)
136
- await this.storage.updateTicket(ticketId, { specId });
137
- // Auto-export to board.md
138
- await autoExportToBoard(this.pmoPath, this.storage, (msg) => this.log(styles.muted(msg)));
139
- this.log(styles.success(`\n✅ Linked ticket "${styles.emphasis(ticketId)}" to spec "${styles.emphasis(specId)}"`));
140
- this.log(styles.muted(`\nView ticket:`));
141
- this.log(styles.muted(` prlt ticket view ${ticketId}`));
142
- }
143
- }
144
- //# sourceMappingURL=ticket.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ticket.js","sourceRoot":"","sources":["../../../src/commands/spec/ticket.ts"],"names":[],"mappings":"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"}
@@ -1,202 +0,0 @@
1
- import { Flags, Args } from '@oclif/core';
2
- import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
3
- import { styles } from '../../lib/styles.js';
4
- import { shouldOutputJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
5
- import { FlagResolver } from '../../lib/flags/index.js';
6
- export default class SpecView extends PMOCommand {
7
- static description = 'View a spec and its linked tickets';
8
- static examples = [
9
- '<%= config.bin %> <%= command.id %> user-authentication',
10
- '<%= config.bin %> <%= command.id %> --spec api-design',
11
- ];
12
- static args = {
13
- spec: Args.string({
14
- description: 'Spec ID',
15
- required: false,
16
- }),
17
- };
18
- static flags = {
19
- ...pmoBaseFlags,
20
- spec: Flags.string({
21
- char: 's',
22
- description: 'Spec ID',
23
- }),
24
- full: Flags.boolean({
25
- char: 'f',
26
- description: 'Show all spec sections',
27
- default: false,
28
- }),
29
- };
30
- async execute() {
31
- const { args, flags } = await this.parse(SpecView);
32
- // Check if JSON output mode is active
33
- const jsonMode = shouldOutputJson(flags);
34
- // This command requires project context for listing linked tickets (with JSON mode support)
35
- const projectId = await this.requireProject({
36
- jsonMode: jsonMode ? {
37
- flags,
38
- commandName: 'spec view',
39
- baseCommand: 'prlt spec view',
40
- } : undefined,
41
- });
42
- // Helper to handle errors in JSON mode
43
- const handleError = (code, message) => {
44
- if (jsonMode) {
45
- outputErrorAsJson(code, message, createMetadata('spec view', flags));
46
- this.exit(1);
47
- }
48
- this.error(message);
49
- };
50
- // Get spec ID
51
- let specId = args.spec || flags.spec;
52
- if (!specId) {
53
- const specs = await this.storage.listSpecs();
54
- if (specs.length === 0) {
55
- return handleError('NO_SPECS', 'No specs found. Create one first with: prlt spec create');
56
- }
57
- // Use FlagResolver for spec selection
58
- const resolver = new FlagResolver({
59
- commandName: 'spec view',
60
- baseCommand: 'prlt spec view',
61
- jsonMode,
62
- flags: { spec: flags.spec },
63
- });
64
- resolver.addPrompt({
65
- flagName: 'spec',
66
- type: 'list',
67
- message: 'Select spec to view:',
68
- choices: () => specs.map(s => ({
69
- name: `${s.title} [${s.status}]${s.type ? ` (${s.type})` : ''}`,
70
- value: s.id,
71
- })),
72
- });
73
- const resolved = await resolver.resolve();
74
- specId = resolved.spec;
75
- }
76
- // Get the spec
77
- const spec = await this.storage.getSpec(specId);
78
- if (!spec) {
79
- this.error(`Spec not found: ${specId}`);
80
- }
81
- // Get linked tickets
82
- const tickets = await this.storage.getTicketsForSpec(projectId, spec.id);
83
- // Get dependencies
84
- const dependencies = await this.storage.getSpecDependencies(spec.id);
85
- const dependents = await this.storage.getSpecDependents(spec.id);
86
- // JSON output mode
87
- if (jsonMode) {
88
- this.log(JSON.stringify({
89
- success: true,
90
- spec: {
91
- id: spec.id,
92
- title: spec.title,
93
- status: spec.status,
94
- type: spec.type,
95
- problem: spec.problem,
96
- solution: spec.solution,
97
- decisions: spec.decisions,
98
- notNow: spec.notNow,
99
- uiUx: spec.uiUx,
100
- acceptanceCriteria: spec.acceptanceCriteria,
101
- openQuestions: spec.openQuestions,
102
- requirementsFunctional: spec.requirementsFunctional,
103
- requirementsTechnical: spec.requirementsTechnical,
104
- context: spec.context,
105
- tags: spec.tags,
106
- createdAt: spec.createdAt.toISOString(),
107
- updatedAt: spec.updatedAt.toISOString(),
108
- dependencies: dependencies.map(d => ({ id: d.id, title: d.title, status: d.status })),
109
- dependents: dependents.map(d => ({ id: d.id, title: d.title, status: d.status })),
110
- tickets: tickets.map(t => ({ id: t.id, title: t.title, status: t.status })),
111
- },
112
- }, null, 2));
113
- return;
114
- }
115
- // Display spec info
116
- this.log(styles.title(`\n📄 ${spec.title}`));
117
- this.log(styles.muted('═'.repeat(60)));
118
- this.log(styles.muted(`ID: ${spec.id}`));
119
- this.log(styles.muted(`Status: ${spec.status}`));
120
- if (spec.type)
121
- this.log(styles.muted(`Type: ${spec.type}`));
122
- if (spec.tags && spec.tags.length > 0) {
123
- this.log(styles.muted(`Tags: ${spec.tags.join(', ')}`));
124
- }
125
- this.log(styles.muted(`Created: ${spec.createdAt.toLocaleDateString()}`));
126
- this.log(styles.muted(`Updated: ${spec.updatedAt.toLocaleDateString()}`));
127
- // Problem
128
- if (spec.problem) {
129
- this.log(styles.emphasis('\n## Problem'));
130
- this.log(spec.problem);
131
- }
132
- // Solution
133
- if (spec.solution) {
134
- this.log(styles.emphasis('\n## Solution'));
135
- this.log(spec.solution);
136
- }
137
- // Decisions (always show)
138
- if (spec.decisions) {
139
- this.log(styles.emphasis('\n## Decisions'));
140
- this.log(spec.decisions);
141
- }
142
- // Show more sections if --full
143
- if (flags.full) {
144
- if (spec.notNow) {
145
- this.log(styles.emphasis('\n## Not Now'));
146
- this.log(spec.notNow);
147
- }
148
- if (spec.uiUx) {
149
- this.log(styles.emphasis('\n## UI/UX'));
150
- this.log(spec.uiUx);
151
- }
152
- if (spec.acceptanceCriteria) {
153
- this.log(styles.emphasis('\n## Acceptance Criteria'));
154
- this.log(spec.acceptanceCriteria);
155
- }
156
- if (spec.openQuestions) {
157
- this.log(styles.emphasis('\n## Open Questions'));
158
- this.log(spec.openQuestions);
159
- }
160
- if (spec.requirementsFunctional) {
161
- this.log(styles.emphasis('\n## Functional Requirements'));
162
- this.log(spec.requirementsFunctional);
163
- }
164
- if (spec.requirementsTechnical) {
165
- this.log(styles.emphasis('\n## Technical Requirements'));
166
- this.log(spec.requirementsTechnical);
167
- }
168
- if (spec.context) {
169
- this.log(styles.emphasis('\n## Context'));
170
- this.log(spec.context);
171
- }
172
- }
173
- // Dependencies
174
- if (dependencies.length > 0) {
175
- this.log(styles.emphasis(`\n📦 Depends On (${dependencies.length}):`));
176
- for (const dep of dependencies) {
177
- this.log(` ${styles.code(dep.id)}: ${dep.title} [${dep.status}]`);
178
- }
179
- }
180
- if (dependents.length > 0) {
181
- this.log(styles.emphasis(`\n📦 Depended On By (${dependents.length}):`));
182
- for (const dep of dependents) {
183
- this.log(` ${styles.code(dep.id)}: ${dep.title} [${dep.status}]`);
184
- }
185
- }
186
- // Linked tickets
187
- if (tickets.length > 0) {
188
- this.log(styles.emphasis(`\n🎫 Linked Tickets (${tickets.length}):`));
189
- for (const ticket of tickets) {
190
- this.log(` ${styles.code(ticket.id)}: ${ticket.title} [${ticket.status}]`);
191
- }
192
- }
193
- else {
194
- this.log(styles.muted('\n🎫 No linked tickets'));
195
- }
196
- this.log(styles.muted('\n' + '═'.repeat(60)));
197
- if (!flags.full) {
198
- this.log(styles.muted('Use --full to see all sections'));
199
- }
200
- }
201
- }
202
- //# sourceMappingURL=view.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/commands/spec/view.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- /**
2
- * MCP Spec Tools
3
- */
4
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
- import type { McpToolContext } from '../types.js';
6
- export declare function registerSpecTools(server: McpServer, ctx: McpToolContext): void;