@coralai/sps-cli 0.6.0

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 (145) hide show
  1. package/dist/commands/cardAdd.d.ts +2 -0
  2. package/dist/commands/cardAdd.d.ts.map +1 -0
  3. package/dist/commands/cardAdd.js +65 -0
  4. package/dist/commands/cardAdd.js.map +1 -0
  5. package/dist/commands/doctor.d.ts +9 -0
  6. package/dist/commands/doctor.d.ts.map +1 -0
  7. package/dist/commands/doctor.js +264 -0
  8. package/dist/commands/doctor.js.map +1 -0
  9. package/dist/commands/monitorTick.d.ts +2 -0
  10. package/dist/commands/monitorTick.d.ts.map +1 -0
  11. package/dist/commands/monitorTick.js +47 -0
  12. package/dist/commands/monitorTick.js.map +1 -0
  13. package/dist/commands/pipelineTick.d.ts +2 -0
  14. package/dist/commands/pipelineTick.d.ts.map +1 -0
  15. package/dist/commands/pipelineTick.js +44 -0
  16. package/dist/commands/pipelineTick.js.map +1 -0
  17. package/dist/commands/pmCommand.d.ts +2 -0
  18. package/dist/commands/pmCommand.d.ts.map +1 -0
  19. package/dist/commands/pmCommand.js +159 -0
  20. package/dist/commands/pmCommand.js.map +1 -0
  21. package/dist/commands/projectInit.d.ts +2 -0
  22. package/dist/commands/projectInit.d.ts.map +1 -0
  23. package/dist/commands/projectInit.js +75 -0
  24. package/dist/commands/projectInit.js.map +1 -0
  25. package/dist/commands/qaTick.d.ts +2 -0
  26. package/dist/commands/qaTick.d.ts.map +1 -0
  27. package/dist/commands/qaTick.js +43 -0
  28. package/dist/commands/qaTick.js.map +1 -0
  29. package/dist/commands/schedulerTick.d.ts +2 -0
  30. package/dist/commands/schedulerTick.d.ts.map +1 -0
  31. package/dist/commands/schedulerTick.js +45 -0
  32. package/dist/commands/schedulerTick.js.map +1 -0
  33. package/dist/commands/tick.d.ts +14 -0
  34. package/dist/commands/tick.d.ts.map +1 -0
  35. package/dist/commands/tick.js +251 -0
  36. package/dist/commands/tick.js.map +1 -0
  37. package/dist/commands/workerLaunch.d.ts +2 -0
  38. package/dist/commands/workerLaunch.d.ts.map +1 -0
  39. package/dist/commands/workerLaunch.js +56 -0
  40. package/dist/commands/workerLaunch.js.map +1 -0
  41. package/dist/core/config.d.ts +38 -0
  42. package/dist/core/config.d.ts.map +1 -0
  43. package/dist/core/config.js +131 -0
  44. package/dist/core/config.js.map +1 -0
  45. package/dist/core/context.d.ts +23 -0
  46. package/dist/core/context.d.ts.map +1 -0
  47. package/dist/core/context.js +28 -0
  48. package/dist/core/context.js.map +1 -0
  49. package/dist/core/lock.d.ts +14 -0
  50. package/dist/core/lock.d.ts.map +1 -0
  51. package/dist/core/lock.js +65 -0
  52. package/dist/core/lock.js.map +1 -0
  53. package/dist/core/logger.d.ts +24 -0
  54. package/dist/core/logger.d.ts.map +1 -0
  55. package/dist/core/logger.js +62 -0
  56. package/dist/core/logger.js.map +1 -0
  57. package/dist/core/paths.d.ts +27 -0
  58. package/dist/core/paths.d.ts.map +1 -0
  59. package/dist/core/paths.js +29 -0
  60. package/dist/core/paths.js.map +1 -0
  61. package/dist/core/queue.d.ts +14 -0
  62. package/dist/core/queue.d.ts.map +1 -0
  63. package/dist/core/queue.js +38 -0
  64. package/dist/core/queue.js.map +1 -0
  65. package/dist/core/state.d.ts +32 -0
  66. package/dist/core/state.d.ts.map +1 -0
  67. package/dist/core/state.js +52 -0
  68. package/dist/core/state.js.map +1 -0
  69. package/dist/engines/CloseoutEngine.d.ts +60 -0
  70. package/dist/engines/CloseoutEngine.d.ts.map +1 -0
  71. package/dist/engines/CloseoutEngine.js +596 -0
  72. package/dist/engines/CloseoutEngine.js.map +1 -0
  73. package/dist/engines/ExecutionEngine.d.ts +65 -0
  74. package/dist/engines/ExecutionEngine.d.ts.map +1 -0
  75. package/dist/engines/ExecutionEngine.js +603 -0
  76. package/dist/engines/ExecutionEngine.js.map +1 -0
  77. package/dist/engines/MonitorEngine.d.ts +39 -0
  78. package/dist/engines/MonitorEngine.d.ts.map +1 -0
  79. package/dist/engines/MonitorEngine.js +473 -0
  80. package/dist/engines/MonitorEngine.js.map +1 -0
  81. package/dist/engines/SchedulerEngine.d.ts +24 -0
  82. package/dist/engines/SchedulerEngine.d.ts.map +1 -0
  83. package/dist/engines/SchedulerEngine.js +195 -0
  84. package/dist/engines/SchedulerEngine.js.map +1 -0
  85. package/dist/interfaces/HookProvider.d.ts +9 -0
  86. package/dist/interfaces/HookProvider.d.ts.map +1 -0
  87. package/dist/interfaces/HookProvider.js +2 -0
  88. package/dist/interfaces/HookProvider.js.map +1 -0
  89. package/dist/interfaces/Notifier.d.ts +11 -0
  90. package/dist/interfaces/Notifier.d.ts.map +1 -0
  91. package/dist/interfaces/Notifier.js +2 -0
  92. package/dist/interfaces/Notifier.js.map +1 -0
  93. package/dist/interfaces/RepoBackend.d.ts +23 -0
  94. package/dist/interfaces/RepoBackend.d.ts.map +1 -0
  95. package/dist/interfaces/RepoBackend.js +2 -0
  96. package/dist/interfaces/RepoBackend.js.map +1 -0
  97. package/dist/interfaces/TaskBackend.d.ts +24 -0
  98. package/dist/interfaces/TaskBackend.d.ts.map +1 -0
  99. package/dist/interfaces/TaskBackend.js +2 -0
  100. package/dist/interfaces/TaskBackend.js.map +1 -0
  101. package/dist/interfaces/WorkerProvider.d.ts +23 -0
  102. package/dist/interfaces/WorkerProvider.d.ts.map +1 -0
  103. package/dist/interfaces/WorkerProvider.js +2 -0
  104. package/dist/interfaces/WorkerProvider.js.map +1 -0
  105. package/dist/main.d.ts +3 -0
  106. package/dist/main.d.ts.map +1 -0
  107. package/dist/main.js +226 -0
  108. package/dist/main.js.map +1 -0
  109. package/dist/models/types.d.ts +68 -0
  110. package/dist/models/types.d.ts.map +1 -0
  111. package/dist/models/types.js +2 -0
  112. package/dist/models/types.js.map +1 -0
  113. package/dist/providers/ClaudeWorkerProvider.d.ts +84 -0
  114. package/dist/providers/ClaudeWorkerProvider.d.ts.map +1 -0
  115. package/dist/providers/ClaudeWorkerProvider.js +293 -0
  116. package/dist/providers/ClaudeWorkerProvider.js.map +1 -0
  117. package/dist/providers/CodexWorkerProvider.d.ts +50 -0
  118. package/dist/providers/CodexWorkerProvider.d.ts.map +1 -0
  119. package/dist/providers/CodexWorkerProvider.js +275 -0
  120. package/dist/providers/CodexWorkerProvider.js.map +1 -0
  121. package/dist/providers/GitLabRepoBackend.d.ts +42 -0
  122. package/dist/providers/GitLabRepoBackend.d.ts.map +1 -0
  123. package/dist/providers/GitLabRepoBackend.js +280 -0
  124. package/dist/providers/GitLabRepoBackend.js.map +1 -0
  125. package/dist/providers/MarkdownTaskBackend.d.ts +88 -0
  126. package/dist/providers/MarkdownTaskBackend.d.ts.map +1 -0
  127. package/dist/providers/MarkdownTaskBackend.js +414 -0
  128. package/dist/providers/MarkdownTaskBackend.js.map +1 -0
  129. package/dist/providers/MatrixNotifier.d.ts +30 -0
  130. package/dist/providers/MatrixNotifier.d.ts.map +1 -0
  131. package/dist/providers/MatrixNotifier.js +82 -0
  132. package/dist/providers/MatrixNotifier.js.map +1 -0
  133. package/dist/providers/PlaneTaskBackend.d.ts +86 -0
  134. package/dist/providers/PlaneTaskBackend.d.ts.map +1 -0
  135. package/dist/providers/PlaneTaskBackend.js +409 -0
  136. package/dist/providers/PlaneTaskBackend.js.map +1 -0
  137. package/dist/providers/TrelloTaskBackend.d.ts +53 -0
  138. package/dist/providers/TrelloTaskBackend.d.ts.map +1 -0
  139. package/dist/providers/TrelloTaskBackend.js +300 -0
  140. package/dist/providers/TrelloTaskBackend.js.map +1 -0
  141. package/dist/providers/registry.d.ts +10 -0
  142. package/dist/providers/registry.d.ts.map +1 -0
  143. package/dist/providers/registry.js +29 -0
  144. package/dist/providers/registry.js.map +1 -0
  145. package/package.json +36 -0
@@ -0,0 +1,195 @@
1
+ import { readState } from '../core/state.js';
2
+ import { readQueue, removeFromQueue } from '../core/queue.js';
3
+ import { Logger } from '../core/logger.js';
4
+ export class SchedulerEngine {
5
+ ctx;
6
+ taskBackend;
7
+ notifier;
8
+ log;
9
+ constructor(ctx, taskBackend, notifier) {
10
+ this.ctx = ctx;
11
+ this.taskBackend = taskBackend;
12
+ this.notifier = notifier;
13
+ this.log = new Logger('scheduler', ctx.projectName, ctx.paths.logsDir);
14
+ }
15
+ async tick(opts = {}) {
16
+ const actions = [];
17
+ const result = {
18
+ project: this.ctx.projectName,
19
+ component: 'scheduler',
20
+ status: 'ok',
21
+ exitCode: 0,
22
+ actions,
23
+ recommendedActions: [],
24
+ details: {},
25
+ };
26
+ try {
27
+ // 1. Read state to check slots and active cards
28
+ const state = readState(this.ctx.paths.stateFile, this.ctx.maxWorkers);
29
+ // 2. Get Planning cards from PM
30
+ const planningCards = await this.taskBackend.listByState('Planning');
31
+ const pipelineLabel = this.ctx.config.PIPELINE_LABEL || 'AI-PIPELINE';
32
+ // Filter to AI-PIPELINE cards only
33
+ const eligibleCards = planningCards.filter((c) => c.labels.includes(pipelineLabel));
34
+ if (eligibleCards.length === 0) {
35
+ this.log.info('No eligible Planning cards');
36
+ result.details = { reason: 'no_eligible_card' };
37
+ return result;
38
+ }
39
+ // 3. Determine processing order:
40
+ // - If pipeline_order.json has entries → use that order
41
+ // - Otherwise → auto-scan: sort eligible cards by seq ascending
42
+ const queue = readQueue(this.ctx.paths.pipelineOrderFile);
43
+ const orderedSeqs = [];
44
+ if (queue.length > 0) {
45
+ // Queue-driven: use explicit order, only include cards that exist in Planning
46
+ const eligibleSeqs = new Set(eligibleCards.map((c) => parseInt(c.seq, 10)));
47
+ for (const seq of queue) {
48
+ if (eligibleSeqs.has(seq))
49
+ orderedSeqs.push(seq);
50
+ }
51
+ }
52
+ else {
53
+ // Auto-scan: all eligible Planning cards sorted by seq
54
+ const seqs = eligibleCards
55
+ .map((c) => parseInt(c.seq, 10))
56
+ .filter((n) => !isNaN(n))
57
+ .sort((a, b) => a - b);
58
+ orderedSeqs.push(...seqs);
59
+ }
60
+ if (orderedSeqs.length === 0) {
61
+ this.log.info('No eligible cards in queue or Planning');
62
+ result.details = { reason: 'no_eligible_card' };
63
+ return result;
64
+ }
65
+ // 4. Walk ordered list and promote eligible cards
66
+ let actionsThisTick = 0;
67
+ const maxActions = this.ctx.config.MAX_ACTIONS_PER_TICK;
68
+ for (const seq of orderedSeqs) {
69
+ if (actionsThisTick >= maxActions)
70
+ break;
71
+ // Check admission rules
72
+ const skipReason = this.checkAdmission(state);
73
+ if (skipReason) {
74
+ this.log.info(`Skipping: ${skipReason}`);
75
+ result.details = { ...result.details, stoppedAt: skipReason };
76
+ break;
77
+ }
78
+ const card = eligibleCards.find((c) => c.seq === String(seq));
79
+ if (!card)
80
+ continue;
81
+ // Check conflict domain for this specific card
82
+ const conflictBlock = this.checkConflictDomain(card, state);
83
+ if (conflictBlock) {
84
+ this.log.info(`seq ${seq} blocked by conflict: ${conflictBlock}`);
85
+ actions.push({
86
+ action: 'skip',
87
+ entity: `seq:${seq}`,
88
+ result: 'skip',
89
+ message: conflictBlock,
90
+ });
91
+ continue;
92
+ }
93
+ // Admission passed — promote card
94
+ if (opts.dryRun) {
95
+ this.log.info(`[dry-run] Would move seq ${seq} to Backlog`);
96
+ actions.push({
97
+ action: 'promote',
98
+ entity: `seq:${seq}`,
99
+ result: 'ok',
100
+ message: 'dry-run: would move Planning → Backlog',
101
+ });
102
+ }
103
+ else {
104
+ try {
105
+ await this.taskBackend.move(card.seq, 'Backlog');
106
+ removeFromQueue(this.ctx.paths.pipelineOrderFile, seq);
107
+ this.log.ok(`Moved seq ${seq} Planning → Backlog`);
108
+ if (this.notifier) {
109
+ await this.notifier.send(`[${this.ctx.projectName}] seq:${seq} "${card.name}" scheduled (Planning → Backlog)`, 'info').catch(() => { });
110
+ }
111
+ this.log.event({
112
+ component: 'scheduler',
113
+ action: 'promote',
114
+ entity: `seq:${seq}`,
115
+ result: 'ok',
116
+ });
117
+ actions.push({
118
+ action: 'promote',
119
+ entity: `seq:${seq}`,
120
+ result: 'ok',
121
+ message: 'Moved Planning → Backlog',
122
+ });
123
+ }
124
+ catch (err) {
125
+ const msg = err instanceof Error ? err.message : String(err);
126
+ this.log.error(`Failed to move seq ${seq}: ${msg}`);
127
+ this.log.event({
128
+ component: 'scheduler',
129
+ action: 'promote',
130
+ entity: `seq:${seq}`,
131
+ result: 'fail',
132
+ meta: { error: msg },
133
+ });
134
+ actions.push({
135
+ action: 'promote',
136
+ entity: `seq:${seq}`,
137
+ result: 'fail',
138
+ message: msg,
139
+ });
140
+ result.status = 'fail';
141
+ result.exitCode = 1;
142
+ }
143
+ }
144
+ actionsThisTick++;
145
+ }
146
+ if (actionsThisTick === 0 && result.status === 'ok') {
147
+ result.details = { ...result.details, reason: 'no_eligible_card' };
148
+ }
149
+ }
150
+ catch (err) {
151
+ const msg = err instanceof Error ? err.message : String(err);
152
+ this.log.error(`Scheduler tick failed: ${msg}`);
153
+ result.status = 'fail';
154
+ result.exitCode = 1;
155
+ result.details = { error: msg };
156
+ }
157
+ return result;
158
+ }
159
+ /**
160
+ * Check global admission rules.
161
+ * Returns null if admission passes, or a reason string if blocked.
162
+ */
163
+ checkAdmission(state) {
164
+ const hasIdleSlot = Object.values(state.workers).some((w) => w.status === 'idle');
165
+ if (!hasIdleSlot)
166
+ return 'no_idle_slot';
167
+ return null;
168
+ }
169
+ /**
170
+ * Check conflict domain constraints for a specific card.
171
+ */
172
+ checkConflictDomain(card, state) {
173
+ const activeCards = Object.values(state.activeCards);
174
+ if (activeCards.length === 0)
175
+ return null;
176
+ const cardDomains = card.labels
177
+ .filter((l) => l.startsWith('conflict:'))
178
+ .map((l) => l.slice('conflict:'.length));
179
+ if (cardDomains.length === 0) {
180
+ if (this.ctx.config.CONFLICT_DEFAULT === 'serial') {
181
+ return 'serial_default_blocked';
182
+ }
183
+ return null;
184
+ }
185
+ for (const active of activeCards) {
186
+ for (const domain of cardDomains) {
187
+ if (active.conflictDomains.includes(domain)) {
188
+ return `conflict_domain_collision:${domain}:seq:${active.seq}`;
189
+ }
190
+ }
191
+ }
192
+ return null;
193
+ }
194
+ }
195
+ //# sourceMappingURL=SchedulerEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchedulerEngine.js","sourceRoot":"","sources":["../../src/engines/SchedulerEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface HookProvider {
2
+ onSessionStart(project: string, seq: string, worker: string): Promise<void>;
3
+ onTaskSent(project: string, seq: string, worker: string): Promise<void>;
4
+ onWaiting(project: string, seq: string, prompt: string, destructive: boolean): Promise<void>;
5
+ onCompleted(project: string, seq: string, worker: string): Promise<void>;
6
+ onStop(project: string, seq: string, reason: string): Promise<void>;
7
+ onError(project: string, seq: string, error: string): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=HookProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HookProvider.d.ts","sourceRoot":"","sources":["../../src/interfaces/HookProvider.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7F,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=HookProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HookProvider.js","sourceRoot":"","sources":["../../src/interfaces/HookProvider.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ export interface Notifier {
2
+ send(message: string, level?: 'info' | 'success' | 'warning' | 'error'): Promise<void>;
3
+ sendSuccess(message: string): Promise<void>;
4
+ sendWarning(message: string): Promise<void>;
5
+ sendError(message: string): Promise<void>;
6
+ sendDigest(items: {
7
+ title: string;
8
+ status: string;
9
+ }[]): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=Notifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Notifier.d.ts","sourceRoot":"","sources":["../../src/interfaces/Notifier.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvF,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,UAAU,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Notifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Notifier.js","sourceRoot":"","sources":["../../src/interfaces/Notifier.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import type { MrStatus } from '../models/types.js';
2
+ export interface RepoBackend {
3
+ ensureCleanBase(repoDir: string, baseBranch: string): Promise<void>;
4
+ ensureBranch(repoDir: string, branchName: string, baseBranch: string): Promise<void>;
5
+ ensureWorktree(repoDir: string, branchName: string, worktreePath: string): Promise<void>;
6
+ commit(worktree: string, message: string): Promise<void>;
7
+ push(worktree: string, branch: string, force?: boolean): Promise<void>;
8
+ createOrUpdateMr(branch: string, title: string, description: string): Promise<{
9
+ url: string;
10
+ iid: number;
11
+ }>;
12
+ getMrStatus(branch: string): Promise<MrStatus>;
13
+ mergeMr(iid: number): Promise<{
14
+ merged: boolean;
15
+ error?: string;
16
+ }>;
17
+ detectMerged(branch: string): Promise<boolean>;
18
+ rebase(worktree: string, baseBranch: string): Promise<{
19
+ success: boolean;
20
+ conflictFiles?: string[];
21
+ }>;
22
+ }
23
+ //# sourceMappingURL=RepoBackend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RepoBackend.d.ts","sourceRoot":"","sources":["../../src/interfaces/RepoBackend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,WAAW,WAAW;IAC1B,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzF,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5G,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnE,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CACvG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RepoBackend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RepoBackend.js","sourceRoot":"","sources":["../../src/interfaces/RepoBackend.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import type { Card, CardState } from '../models/types.js';
2
+ export interface TaskBackend {
3
+ listByState(state: CardState): Promise<Card[]>;
4
+ getBySeq(seq: string): Promise<Card | null>;
5
+ move(seq: string, targetState: CardState): Promise<void>;
6
+ addLabel(seq: string, label: string): Promise<void>;
7
+ removeLabel(seq: string, label: string): Promise<void>;
8
+ claim(seq: string, workerSlot: string): Promise<void>;
9
+ releaseClaim(seq: string): Promise<void>;
10
+ comment(seq: string, text: string): Promise<void>;
11
+ create(name: string, desc: string, state: CardState): Promise<Card>;
12
+ checklistCreate(seq: string, items: string[]): Promise<void>;
13
+ checklistList(seq: string): Promise<{
14
+ id: string;
15
+ text: string;
16
+ checked: boolean;
17
+ }[]>;
18
+ checklistCheck(seq: string, itemId: string): Promise<void>;
19
+ checklistUncheck(seq: string, itemId: string): Promise<void>;
20
+ metaRead(seq: string): Promise<Record<string, unknown>>;
21
+ metaWrite(seq: string, data: Record<string, unknown>): Promise<void>;
22
+ bootstrap(): Promise<void>;
23
+ }
24
+ //# sourceMappingURL=TaskBackend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskBackend.d.ts","sourceRoot":"","sources":["../../src/interfaces/TaskBackend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/C,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC,CAAC;IACtF,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=TaskBackend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskBackend.js","sourceRoot":"","sources":["../../src/interfaces/TaskBackend.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import type { WorkerStatus } from '../models/types.js';
2
+ export interface WorkerProvider {
3
+ prepareEnv(worktree: string, seq: string): Promise<void>;
4
+ launch(session: string, worktree: string): Promise<void>;
5
+ waitReady(session: string, timeoutMs?: number): Promise<boolean>;
6
+ sendTask(session: string, promptFile: string): Promise<void>;
7
+ inspect(session: string): Promise<{
8
+ alive: boolean;
9
+ paneText: string;
10
+ }>;
11
+ detectWaiting(session: string): Promise<{
12
+ waiting: boolean;
13
+ destructive: boolean;
14
+ prompt: string;
15
+ }>;
16
+ detectCompleted(session: string, logDir: string, branch: string): Promise<WorkerStatus>;
17
+ detectBlocked(session: string): Promise<boolean>;
18
+ sendFix(session: string, fixPrompt: string): Promise<void>;
19
+ resolveConflict(session: string, worktree: string, branch: string): Promise<void>;
20
+ stop(session: string): Promise<void>;
21
+ collectSummary(session: string): Promise<string>;
22
+ }
23
+ //# sourceMappingURL=WorkerProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkerProvider.d.ts","sourceRoot":"","sources":["../../src/interfaces/WorkerProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpG,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACxF,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClF,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAClD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=WorkerProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkerProvider.js","sourceRoot":"","sources":["../../src/interfaces/WorkerProvider.ts"],"names":[],"mappings":""}
package/dist/main.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":""}
package/dist/main.js ADDED
@@ -0,0 +1,226 @@
1
+ #!/usr/bin/env node
2
+ import { executeDoctor } from './commands/doctor.js';
3
+ import { executeTick } from './commands/tick.js';
4
+ import { executeSchedulerTick } from './commands/schedulerTick.js';
5
+ import { executePipelineTick } from './commands/pipelineTick.js';
6
+ import { executeWorkerLaunch } from './commands/workerLaunch.js';
7
+ import { executeProjectInit } from './commands/projectInit.js';
8
+ import { executeQaTick } from './commands/qaTick.js';
9
+ import { executeMonitorTick } from './commands/monitorTick.js';
10
+ import { executePmCommand } from './commands/pmCommand.js';
11
+ import { executeCardAdd } from './commands/cardAdd.js';
12
+ const VERSION = '0.6.0';
13
+ const COMMANDS = {
14
+ tick: { desc: 'Run continuous pipeline (--once for single tick)', usage: 'sps tick <project> [--once]' },
15
+ card: { desc: 'Card management', usage: 'sps card add <project> "<title>" ["desc"]' },
16
+ doctor: { desc: 'Project health check', usage: 'sps doctor <project> [--json] [--skip-remote]' },
17
+ scheduler: { desc: 'Planning → Backlog promotion', usage: 'sps scheduler <tick|inspect|validate> <project>' },
18
+ pipeline: { desc: 'Execution chain (Backlog → Todo → Inprogress)', usage: 'sps pipeline <tick|inspect> <project>' },
19
+ worker: { desc: 'Worker lifecycle management', usage: 'sps worker <launch|release|inspect> <project> [seq|slot]' },
20
+ pm: { desc: 'PM backend operations', usage: 'sps pm <scan|move|comment|checklist> <project> [args...]' },
21
+ qa: { desc: 'QA / closeout (QA → merge → Done)', usage: 'sps qa <tick|inspect> <project>' },
22
+ monitor: { desc: 'Anomaly detection and diagnostics', usage: 'sps monitor <tick|inspect-worker|inspect-card> <project>' },
23
+ project: { desc: 'Project init and validation', usage: 'sps project <init|doctor|validate|paths> <project>' },
24
+ };
25
+ function printHelp() {
26
+ console.log(`sps v${VERSION} — SPS CLI\n`);
27
+ console.log('Usage: sps <command> [subcommand] <project> [options]\n');
28
+ console.log('Commands:');
29
+ for (const [cmd, info] of Object.entries(COMMANDS)) {
30
+ console.log(` ${cmd.padEnd(12)} ${info.desc}`);
31
+ }
32
+ console.log('\nGlobal options:');
33
+ console.log(' --json Output structured JSON');
34
+ console.log(' --dry-run Preview actions without executing');
35
+ console.log(' --help Show help');
36
+ console.log(' --version Show version');
37
+ }
38
+ // Commands that always have subcommands
39
+ const SUBCOMMAND_COMMANDS = new Set(['scheduler', 'pipeline', 'worker', 'pm', 'qa', 'monitor', 'project', 'card']);
40
+ function parseArgs(argv) {
41
+ const flags = {};
42
+ const positionals = [];
43
+ for (const arg of argv) {
44
+ if (arg.startsWith('--')) {
45
+ const eqIdx = arg.indexOf('=');
46
+ if (eqIdx > 0) {
47
+ // --key=value → treat as boolean true (value parsed by command if needed)
48
+ flags[arg.slice(2, eqIdx)] = true;
49
+ }
50
+ else {
51
+ flags[arg.slice(2)] = true;
52
+ }
53
+ }
54
+ else {
55
+ positionals.push(arg);
56
+ }
57
+ }
58
+ const command = positionals[0] || '';
59
+ const hasSubcommand = SUBCOMMAND_COMMANDS.has(command);
60
+ if (hasSubcommand) {
61
+ return {
62
+ command,
63
+ subcommand: positionals[1] || null,
64
+ project: positionals[2] || null,
65
+ positionals: positionals.slice(3),
66
+ flags,
67
+ };
68
+ }
69
+ // Commands without subcommands: tick, doctor
70
+ return {
71
+ command,
72
+ subcommand: null,
73
+ project: positionals[1] || null,
74
+ positionals: positionals.slice(2),
75
+ flags,
76
+ };
77
+ }
78
+ function requireProject(args, usage) {
79
+ const project = args.project || args.subcommand;
80
+ if (!project) {
81
+ console.error(`Usage: ${usage}`);
82
+ process.exit(2);
83
+ }
84
+ return project;
85
+ }
86
+ async function main() {
87
+ const args = parseArgs(process.argv.slice(2));
88
+ if (args.flags.version) {
89
+ console.log(VERSION);
90
+ process.exit(0);
91
+ }
92
+ if (args.flags.help || !args.command) {
93
+ printHelp();
94
+ process.exit(0);
95
+ }
96
+ // ─── tick (supports multiple projects) ──────────────────────
97
+ if (args.command === 'tick') {
98
+ // Collect all projects: project + positionals
99
+ const projects = [];
100
+ if (args.project)
101
+ projects.push(args.project);
102
+ projects.push(...args.positionals);
103
+ if (projects.length === 0) {
104
+ console.error('Usage: sps tick <project> [project2] [project3] ...');
105
+ process.exit(2);
106
+ }
107
+ await executeTick(projects, args.flags);
108
+ return;
109
+ }
110
+ // ─── doctor (shorthand) ──────────────────────────────────────
111
+ if (args.command === 'doctor') {
112
+ const project = requireProject(args, 'sps doctor <project>');
113
+ await executeDoctor(project, args.flags);
114
+ return;
115
+ }
116
+ // ─── project ─────────────────────────────────────────────────
117
+ if (args.command === 'project' && args.subcommand === 'init') {
118
+ if (!args.project) {
119
+ console.error('Usage: sps project init <project>');
120
+ process.exit(2);
121
+ }
122
+ await executeProjectInit(args.project, args.flags);
123
+ return;
124
+ }
125
+ if (args.command === 'project' && args.subcommand === 'doctor') {
126
+ if (!args.project) {
127
+ console.error('Usage: sps project doctor <project>');
128
+ process.exit(2);
129
+ }
130
+ await executeDoctor(args.project, args.flags);
131
+ return;
132
+ }
133
+ // ─── scheduler ───────────────────────────────────────────────
134
+ if (args.command === 'scheduler') {
135
+ if (args.subcommand === 'tick') {
136
+ if (!args.project) {
137
+ console.error('Usage: sps scheduler tick <project>');
138
+ process.exit(2);
139
+ }
140
+ await executeSchedulerTick(args.project, args.flags);
141
+ return;
142
+ }
143
+ }
144
+ // ─── pipeline ────────────────────────────────────────────────
145
+ if (args.command === 'pipeline') {
146
+ if (args.subcommand === 'tick') {
147
+ if (!args.project) {
148
+ console.error('Usage: sps pipeline tick <project>');
149
+ process.exit(2);
150
+ }
151
+ await executePipelineTick(args.project, args.flags);
152
+ return;
153
+ }
154
+ }
155
+ // ─── worker ──────────────────────────────────────────────────
156
+ if (args.command === 'worker') {
157
+ if (args.subcommand === 'launch') {
158
+ if (!args.project) {
159
+ console.error('Usage: sps worker launch <project> <seq>');
160
+ process.exit(2);
161
+ }
162
+ const seq = args.positionals[0] || '';
163
+ await executeWorkerLaunch(args.project, seq, args.flags);
164
+ return;
165
+ }
166
+ }
167
+ // ─── qa ─────────────────────────────────────────────────────
168
+ if (args.command === 'qa') {
169
+ if (args.subcommand === 'tick') {
170
+ if (!args.project) {
171
+ console.error('Usage: sps qa tick <project>');
172
+ process.exit(2);
173
+ }
174
+ await executeQaTick(args.project, args.flags);
175
+ return;
176
+ }
177
+ }
178
+ // ─── monitor ────────────────────────────────────────────────
179
+ if (args.command === 'monitor') {
180
+ if (args.subcommand === 'tick') {
181
+ if (!args.project) {
182
+ console.error('Usage: sps monitor tick <project>');
183
+ process.exit(2);
184
+ }
185
+ await executeMonitorTick(args.project, args.flags);
186
+ return;
187
+ }
188
+ }
189
+ // ─── pm ─────────────────────────────────────────────────────
190
+ if (args.command === 'pm') {
191
+ if (!args.subcommand) {
192
+ console.error('Usage: sps pm <scan|move|comment|checklist> <project> [args...]');
193
+ process.exit(2);
194
+ }
195
+ if (!args.project) {
196
+ console.error(`Usage: sps pm ${args.subcommand} <project> [args...]`);
197
+ process.exit(2);
198
+ }
199
+ await executePmCommand(args.project, args.subcommand, args.positionals, args.flags);
200
+ return;
201
+ }
202
+ // ─── card ───────────────────────────────────────────────────
203
+ if (args.command === 'card') {
204
+ if (args.subcommand === 'add') {
205
+ if (!args.project) {
206
+ console.error('Usage: sps card add <project> "<title>" ["description"]');
207
+ process.exit(2);
208
+ }
209
+ await executeCardAdd(args.project, args.positionals, args.flags);
210
+ return;
211
+ }
212
+ }
213
+ // ─── Unknown or not-yet-implemented ──────────────────────────
214
+ if (!(args.command in COMMANDS)) {
215
+ console.error(`Unknown command: ${args.command}\n`);
216
+ printHelp();
217
+ process.exit(2);
218
+ }
219
+ console.error(`[${args.command}${args.subcommand ? ' ' + args.subcommand : ''}] Not yet implemented.`);
220
+ process.exit(1);
221
+ }
222
+ main().catch((err) => {
223
+ console.error(err instanceof Error ? err.message : String(err));
224
+ process.exit(1);
225
+ });
226
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}