@proletariat/cli 0.3.35 → 0.3.40

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 (148) hide show
  1. package/README.md +37 -2
  2. package/bin/dev.js +0 -0
  3. package/dist/commands/agent/auth.d.ts +12 -2
  4. package/dist/commands/agent/auth.js +128 -4
  5. package/dist/commands/agent/list.js +16 -7
  6. package/dist/commands/agent/status.js +32 -4
  7. package/dist/commands/board/watch.js +6 -0
  8. package/dist/commands/branch/list.d.ts +1 -0
  9. package/dist/commands/branch/list.js +43 -12
  10. package/dist/commands/branch/where.js +9 -19
  11. package/dist/commands/category/list.d.ts +2 -1
  12. package/dist/commands/category/list.js +38 -13
  13. package/dist/commands/{claude.d.ts → claude/index.d.ts} +1 -1
  14. package/dist/commands/{claude.js → claude/index.js} +12 -12
  15. package/dist/commands/claude/open.d.ts +13 -0
  16. package/dist/commands/claude/open.js +175 -0
  17. package/dist/commands/diet.js +18 -2
  18. package/dist/commands/docker/logs.js +7 -3
  19. package/dist/commands/docker/shell.js +6 -0
  20. package/dist/commands/docker/start.js +20 -4
  21. package/dist/commands/docker/sync.d.ts +4 -0
  22. package/dist/commands/docker/sync.js +30 -2
  23. package/dist/commands/epic/show.d.ts +13 -0
  24. package/dist/commands/epic/show.js +16 -0
  25. package/dist/commands/epic/ticket.js +7 -24
  26. package/dist/commands/epic/view.js +27 -0
  27. package/dist/commands/execution/config.d.ts +0 -4
  28. package/dist/commands/execution/config.js +14 -46
  29. package/dist/commands/execution/index.js +2 -1
  30. package/dist/commands/execution/logs.js +7 -1
  31. package/dist/commands/execution/stop.js +2 -1
  32. package/dist/commands/execution/view.js +30 -26
  33. package/dist/commands/init.js +2 -19
  34. package/dist/commands/label/create.js +2 -1
  35. package/dist/commands/label/delete.js +2 -1
  36. package/dist/commands/label/group/create.js +2 -1
  37. package/dist/commands/label/group/list.js +2 -1
  38. package/dist/commands/label/list.js +2 -1
  39. package/dist/commands/mcp-server.js +27 -1
  40. package/dist/commands/phase/template/list.js +2 -1
  41. package/dist/commands/pmo/init.js +12 -40
  42. package/dist/commands/project/create.js +3 -4
  43. package/dist/commands/project/update.js +5 -6
  44. package/dist/commands/pull.js +24 -0
  45. package/dist/commands/qa/index.d.ts +54 -0
  46. package/dist/commands/qa/index.js +762 -0
  47. package/dist/commands/repo/view.js +2 -8
  48. package/dist/commands/session/attach.js +4 -4
  49. package/dist/commands/session/create.d.ts +19 -0
  50. package/dist/commands/session/create.js +102 -0
  51. package/dist/commands/session/health.js +4 -23
  52. package/dist/commands/session/index.js +14 -1
  53. package/dist/commands/session/list.js +9 -8
  54. package/dist/commands/session/peek.d.ts +38 -0
  55. package/dist/commands/session/peek.js +316 -0
  56. package/dist/commands/session/poke.d.ts +27 -0
  57. package/dist/commands/session/poke.js +219 -0
  58. package/dist/commands/spec/view.js +29 -0
  59. package/dist/commands/template/list.js +2 -1
  60. package/dist/commands/theme/add-names.d.ts +4 -0
  61. package/dist/commands/theme/add-names.js +11 -1
  62. package/dist/commands/theme/create.d.ts +2 -0
  63. package/dist/commands/theme/create.js +8 -0
  64. package/dist/commands/ticket/bulk.js +2 -2
  65. package/dist/commands/ticket/complete.js +2 -2
  66. package/dist/commands/ticket/create.js +21 -0
  67. package/dist/commands/ticket/delete.js +8 -0
  68. package/dist/commands/ticket/edit.js +25 -0
  69. package/dist/commands/ticket/epic.js +17 -43
  70. package/dist/commands/ticket/index.js +2 -2
  71. package/dist/commands/ticket/move.js +25 -2
  72. package/dist/commands/ticket/resolve.js +3 -4
  73. package/dist/commands/ticket/show.d.ts +13 -0
  74. package/dist/commands/ticket/show.js +16 -0
  75. package/dist/commands/ticket/template/list.js +2 -1
  76. package/dist/commands/ticket/view.d.ts +0 -1
  77. package/dist/commands/ticket/view.js +30 -1
  78. package/dist/commands/work/index.js +4 -0
  79. package/dist/commands/work/spawn-all.js +1 -1
  80. package/dist/commands/work/spawn.js +15 -4
  81. package/dist/commands/work/start.js +186 -103
  82. package/dist/commands/work/status.d.ts +14 -0
  83. package/dist/commands/work/status.js +60 -0
  84. package/dist/commands/work/watch.js +1 -1
  85. package/dist/commands/workflow/index.js +2 -1
  86. package/dist/commands/workflow/show.d.ts +13 -0
  87. package/dist/commands/workflow/show.js +16 -0
  88. package/dist/commands/workspace/add.js +15 -0
  89. package/dist/commands/workspace/list.js +2 -1
  90. package/dist/commands/workspace/prune.js +7 -7
  91. package/dist/hooks/init.js +10 -2
  92. package/dist/lib/agents/commands.d.ts +5 -0
  93. package/dist/lib/agents/commands.js +143 -97
  94. package/dist/lib/branch/index.d.ts +1 -0
  95. package/dist/lib/database/drizzle-schema.d.ts +465 -0
  96. package/dist/lib/database/drizzle-schema.js +53 -0
  97. package/dist/lib/database/index.d.ts +47 -1
  98. package/dist/lib/database/index.js +138 -20
  99. package/dist/lib/execution/config.d.ts +15 -1
  100. package/dist/lib/execution/config.js +28 -0
  101. package/dist/lib/execution/runners.d.ts +45 -0
  102. package/dist/lib/execution/runners.js +187 -26
  103. package/dist/lib/execution/session-utils.d.ts +16 -1
  104. package/dist/lib/execution/session-utils.js +71 -4
  105. package/dist/lib/execution/spawner.js +15 -2
  106. package/dist/lib/execution/storage.d.ts +6 -1
  107. package/dist/lib/execution/storage.js +35 -5
  108. package/dist/lib/execution/types.d.ts +3 -0
  109. package/dist/lib/mcp/tools/board.js +4 -6
  110. package/dist/lib/mcp/tools/cli-passthrough.js +25 -6
  111. package/dist/lib/mcp/tools/epic.js +8 -3
  112. package/dist/lib/mcp/tools/index.d.ts +1 -0
  113. package/dist/lib/mcp/tools/index.js +1 -0
  114. package/dist/lib/mcp/tools/spec.js +1 -1
  115. package/dist/lib/mcp/tools/ticket.js +11 -9
  116. package/dist/lib/mcp/tools/tmux.d.ts +16 -0
  117. package/dist/lib/mcp/tools/tmux.js +182 -0
  118. package/dist/lib/mcp/tools/work.js +148 -6
  119. package/dist/lib/mcp/types.d.ts +10 -0
  120. package/dist/lib/multiline-input.js +2 -1
  121. package/dist/lib/pmo/base-command.js +4 -4
  122. package/dist/lib/pmo/schema.d.ts +1 -1
  123. package/dist/lib/pmo/schema.js +1 -0
  124. package/dist/lib/pmo/storage/actions.js +1 -1
  125. package/dist/lib/pmo/storage/base.js +402 -50
  126. package/dist/lib/pmo/storage/dependencies.d.ts +1 -0
  127. package/dist/lib/pmo/storage/dependencies.js +11 -3
  128. package/dist/lib/pmo/storage/epics.js +1 -1
  129. package/dist/lib/pmo/storage/helpers.d.ts +4 -4
  130. package/dist/lib/pmo/storage/helpers.js +36 -26
  131. package/dist/lib/pmo/storage/projects.d.ts +2 -0
  132. package/dist/lib/pmo/storage/projects.js +207 -119
  133. package/dist/lib/pmo/storage/specs.d.ts +2 -0
  134. package/dist/lib/pmo/storage/specs.js +274 -188
  135. package/dist/lib/pmo/storage/tickets.d.ts +2 -0
  136. package/dist/lib/pmo/storage/tickets.js +350 -290
  137. package/dist/lib/pmo/storage/types.d.ts +1 -0
  138. package/dist/lib/pmo/storage/views.d.ts +2 -0
  139. package/dist/lib/pmo/storage/views.js +183 -130
  140. package/dist/lib/prompt-command.d.ts +20 -0
  141. package/dist/lib/prompt-command.js +38 -2
  142. package/dist/lib/prompt-json.d.ts +41 -4
  143. package/dist/lib/prompt-json.js +138 -7
  144. package/dist/lib/styles.d.ts +37 -0
  145. package/dist/lib/styles.js +73 -0
  146. package/oclif.manifest.json +4046 -3385
  147. package/package.json +11 -6
  148. package/LICENSE +0 -190
@@ -1,7 +1,6 @@
1
1
  import { Flags, Args } from '@oclif/core';
2
2
  import * as fs from 'node:fs';
3
3
  import * as path from 'node:path';
4
- import inquirer from 'inquirer';
5
4
  import { createBoardContent, createSpecFolders, PMOCommand, pmoBaseFlags, BUILTIN_TEMPLATES } from '../../lib/pmo/index.js';
6
5
  import { styles } from '../../lib/styles.js';
7
6
  import { slugify } from '../../lib/pmo/utils.js';
@@ -164,16 +163,16 @@ export default class ProjectCreate extends PMOCommand {
164
163
  }
165
164
  async promptProjectData(fields) {
166
165
  // Build inquirer prompts from fields, adding validators and dynamic defaults
167
- const answers = await inquirer.prompt(fields.map(field => ({
166
+ const answers = await this.prompt(fields.map(field => ({
168
167
  ...field,
169
168
  validate: field.name === 'name'
170
- ? ((input) => input.length > 0 || 'Name is required')
169
+ ? ((input) => String(input).length > 0 || 'Name is required')
171
170
  : undefined,
172
171
  // Dynamic default for id based on name
173
172
  default: field.name === 'id'
174
173
  ? ((answers) => slugify(answers.name))
175
174
  : field.default,
176
- })));
175
+ })), null);
177
176
  return {
178
177
  name: answers.name,
179
178
  id: answers.id || undefined,
@@ -1,5 +1,4 @@
1
1
  import { Args, Flags } from '@oclif/core';
2
- import inquirer from 'inquirer';
3
2
  import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
4
3
  import { styles } from '../../lib/styles.js';
5
4
  import { shouldOutputJson, outputPromptAsJson, outputErrorAsJson, outputSuccessAsJson, createMetadata, buildFormPromptConfig, } from '../../lib/prompt-json.js';
@@ -66,12 +65,12 @@ export default class ProjectUpdate extends PMOCommand {
66
65
  }, createMetadata('project update', flags));
67
66
  return;
68
67
  }
69
- const { selectedProjectId } = await inquirer.prompt([{
68
+ const { selectedProjectId } = await this.prompt([{
70
69
  type: 'list',
71
70
  name: 'selectedProjectId',
72
71
  message: 'Select project to update:',
73
72
  choices: projectChoices,
74
- }]);
73
+ }], null);
75
74
  projectId = selectedProjectId;
76
75
  }
77
76
  // Get the project
@@ -103,12 +102,12 @@ export default class ProjectUpdate extends PMOCommand {
103
102
  outputPromptAsJson(buildFormPromptConfig(fields), createMetadata('project update', flags));
104
103
  return;
105
104
  }
106
- const answers = await inquirer.prompt(fields.map(field => ({
105
+ const answers = await this.prompt(fields.map(field => ({
107
106
  ...field,
108
107
  validate: field.name === 'name'
109
- ? ((input) => input.length > 0 || 'Name is required')
108
+ ? ((input) => String(input).length > 0 || 'Name is required')
110
109
  : undefined,
111
- })));
110
+ })), null);
112
111
  newName = answers.name;
113
112
  newDescription = answers.description;
114
113
  }
@@ -1,5 +1,6 @@
1
1
  import { Flags } from '@oclif/core';
2
2
  import { PMOCommand, pmoBaseFlags } from '../lib/pmo/base-command.js';
3
+ import { shouldOutputJson } from '../lib/prompt-json.js';
3
4
  import { styles, divider } from '../lib/styles.js';
4
5
  import { loadDietConfig, formatDietConfig, } from '../lib/pmo/diet.js';
5
6
  export default class Pull extends PMOCommand {
@@ -26,6 +27,7 @@ export default class Pull extends PMOCommand {
26
27
  };
27
28
  async execute() {
28
29
  const { flags } = await this.parse(Pull);
30
+ const jsonMode = shouldOutputJson(flags);
29
31
  const projectId = await this.requireProject();
30
32
  const count = flags.count;
31
33
  const dryRun = flags['dry-run'];
@@ -60,6 +62,28 @@ export default class Pull extends PMOCommand {
60
62
  const existingReadyTickets = await this.storage.listTickets(projectId, { statusCategory: 'unstarted' });
61
63
  // Run the pull algorithm
62
64
  const result = await this.runPullAlgorithm(allBacklogTickets, existingReadyTickets, dietConfig, count);
65
+ // JSON output path
66
+ if (jsonMode) {
67
+ this.log(JSON.stringify({
68
+ type: 'success',
69
+ result: {
70
+ dryRun,
71
+ pulled: result.pulled,
72
+ skippedBlocked: result.skippedBlocked,
73
+ skippedCeiling: result.skippedCeiling,
74
+ totalCandidates: result.totalCandidates,
75
+ targetStatus: targetStatus.name,
76
+ }
77
+ }, null, 2));
78
+ // Still move tickets if not dry-run
79
+ if (!dryRun && result.pulled.length > 0) {
80
+ for (const ticket of result.pulled) {
81
+ // eslint-disable-next-line no-await-in-loop -- Sequential moves to maintain ordering
82
+ await this.storage.moveTicket(projectId, ticket.id, targetStatus.name);
83
+ }
84
+ }
85
+ return;
86
+ }
63
87
  // Display results
64
88
  this.displayPullResults(result, dietConfig, targetStatus, dryRun);
65
89
  // Move tickets if not dry-run
@@ -0,0 +1,54 @@
1
+ import { PromptCommand } from '../../lib/prompt-command.js';
2
+ export default class QA extends PromptCommand {
3
+ static description: string;
4
+ static aliases: string[];
5
+ static examples: string[];
6
+ static flags: {
7
+ seed: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ watch: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ environment: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ 'display-mode': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ 'permission-mode': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ prompt: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ };
16
+ run(): Promise<void>;
17
+ /**
18
+ * Load the explore-cli action prompt from PMO storage.
19
+ */
20
+ private getExploreCLIPrompt;
21
+ /**
22
+ * Run seed-explore-data.mjs to pre-populate test data.
23
+ */
24
+ private runSeedData;
25
+ /**
26
+ * Run in tracked mode - inside an HQ
27
+ * Creates an ephemeral QA agent with full tracking
28
+ */
29
+ private runTracked;
30
+ /**
31
+ * Run in yolo mode - outside any HQ
32
+ */
33
+ private runYolo;
34
+ /**
35
+ * Resolve execution environment (devcontainer vs host).
36
+ */
37
+ private resolveEnvironment;
38
+ /**
39
+ * Resolve display mode.
40
+ */
41
+ private resolveDisplayMode;
42
+ /**
43
+ * Resolve permission mode. Defaults to danger for QA (container provides isolation).
44
+ */
45
+ private resolvePermissionMode;
46
+ /**
47
+ * Set up catch-all devcontainer for directories without one.
48
+ */
49
+ private setupCatchallDevcontainer;
50
+ /**
51
+ * Check if catch-all container image is available.
52
+ */
53
+ private checkCatchallImage;
54
+ }