@speclife/core 0.1.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 (69) hide show
  1. package/dist/adapters/claude-cli-adapter.d.ts +57 -0
  2. package/dist/adapters/claude-cli-adapter.d.ts.map +1 -0
  3. package/dist/adapters/claude-cli-adapter.js +161 -0
  4. package/dist/adapters/claude-cli-adapter.js.map +1 -0
  5. package/dist/adapters/claude-sdk-adapter.d.ts +49 -0
  6. package/dist/adapters/claude-sdk-adapter.d.ts.map +1 -0
  7. package/dist/adapters/claude-sdk-adapter.js +278 -0
  8. package/dist/adapters/claude-sdk-adapter.js.map +1 -0
  9. package/dist/adapters/cursor-adapter.d.ts +26 -0
  10. package/dist/adapters/cursor-adapter.d.ts.map +1 -0
  11. package/dist/adapters/cursor-adapter.js +54 -0
  12. package/dist/adapters/cursor-adapter.js.map +1 -0
  13. package/dist/adapters/environment-adapter.d.ts +153 -0
  14. package/dist/adapters/environment-adapter.d.ts.map +1 -0
  15. package/dist/adapters/environment-adapter.js +690 -0
  16. package/dist/adapters/environment-adapter.js.map +1 -0
  17. package/dist/adapters/git-adapter.d.ts +41 -0
  18. package/dist/adapters/git-adapter.d.ts.map +1 -0
  19. package/dist/adapters/git-adapter.js +95 -0
  20. package/dist/adapters/git-adapter.js.map +1 -0
  21. package/dist/adapters/github-adapter.d.ts +39 -0
  22. package/dist/adapters/github-adapter.d.ts.map +1 -0
  23. package/dist/adapters/github-adapter.js +129 -0
  24. package/dist/adapters/github-adapter.js.map +1 -0
  25. package/dist/adapters/index.d.ts +11 -0
  26. package/dist/adapters/index.d.ts.map +1 -0
  27. package/dist/adapters/index.js +13 -0
  28. package/dist/adapters/index.js.map +1 -0
  29. package/dist/adapters/openspec-adapter.d.ts +36 -0
  30. package/dist/adapters/openspec-adapter.d.ts.map +1 -0
  31. package/dist/adapters/openspec-adapter.js +182 -0
  32. package/dist/adapters/openspec-adapter.js.map +1 -0
  33. package/dist/config.d.ts +60 -0
  34. package/dist/config.d.ts.map +1 -0
  35. package/dist/config.js +112 -0
  36. package/dist/config.js.map +1 -0
  37. package/dist/index.d.ts +10 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +14 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/types.d.ts +105 -0
  42. package/dist/types.d.ts.map +1 -0
  43. package/dist/types.js +28 -0
  44. package/dist/types.js.map +1 -0
  45. package/dist/workflows/implement.d.ts +28 -0
  46. package/dist/workflows/implement.d.ts.map +1 -0
  47. package/dist/workflows/implement.js +277 -0
  48. package/dist/workflows/implement.js.map +1 -0
  49. package/dist/workflows/index.d.ts +9 -0
  50. package/dist/workflows/index.d.ts.map +1 -0
  51. package/dist/workflows/index.js +9 -0
  52. package/dist/workflows/index.js.map +1 -0
  53. package/dist/workflows/init.d.ts +55 -0
  54. package/dist/workflows/init.d.ts.map +1 -0
  55. package/dist/workflows/init.js +195 -0
  56. package/dist/workflows/init.js.map +1 -0
  57. package/dist/workflows/merge.d.ts +40 -0
  58. package/dist/workflows/merge.d.ts.map +1 -0
  59. package/dist/workflows/merge.js +90 -0
  60. package/dist/workflows/merge.js.map +1 -0
  61. package/dist/workflows/status.d.ts +34 -0
  62. package/dist/workflows/status.d.ts.map +1 -0
  63. package/dist/workflows/status.js +53 -0
  64. package/dist/workflows/status.js.map +1 -0
  65. package/dist/workflows/submit.d.ts +44 -0
  66. package/dist/workflows/submit.d.ts.map +1 -0
  67. package/dist/workflows/submit.js +143 -0
  68. package/dist/workflows/submit.js.map +1 -0
  69. package/package.json +48 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"implement.js","sourceRoot":"","sources":["../../src/workflows/implement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Workflows for spec-driven development
3
+ */
4
+ export { initWorkflow, type InitOptions, type InitResult } from './init.js';
5
+ export { statusWorkflow, type StatusOptions, type StatusResult } from './status.js';
6
+ export { submitWorkflow, type SubmitOptions, type SubmitResult } from './submit.js';
7
+ export { mergeWorkflow, type MergeOptions, type MergeResult } from './merge.js';
8
+ export { implementWorkflow, type ImplementDependencies } from './implement.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workflows/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Workflows for spec-driven development
3
+ */
4
+ export { initWorkflow } from './init.js';
5
+ export { statusWorkflow } from './status.js';
6
+ export { submitWorkflow } from './submit.js';
7
+ export { mergeWorkflow } from './merge.js';
8
+ export { implementWorkflow } from './implement.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflows/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAqC,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAyC,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,cAAc,EAAyC,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,aAAa,EAAuC,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAA8B,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Init workflow - create branch and scaffold change proposal
3
+ */
4
+ import { type GitAdapter } from '../adapters/git-adapter.js';
5
+ import { type GitHubAdapter } from '../adapters/github-adapter.js';
6
+ import { type OpenSpecAdapter } from '../adapters/openspec-adapter.js';
7
+ import { type EnvironmentRegistry, type BootstrapResult } from '../adapters/environment-adapter.js';
8
+ import { type SpecLifeConfig } from '../config.js';
9
+ import { type PullRequest, type ProgressCallback } from '../types.js';
10
+ export interface InitOptions {
11
+ /** Change identifier (kebab-case) */
12
+ changeId: string;
13
+ /** Brief description for the proposal */
14
+ description?: string;
15
+ /** Disable worktree creation (create branch in current worktree instead) */
16
+ noWorktree?: boolean;
17
+ /** Skip environment bootstrap (dependencies won't be set up) */
18
+ skipBootstrap?: boolean;
19
+ /** Preview changes without applying */
20
+ dryRun?: boolean;
21
+ /** Skip draft PR creation (overrides config.createDraftPR) */
22
+ skipDraftPR?: boolean;
23
+ }
24
+ export interface InitResult {
25
+ /** Created branch name */
26
+ branch: string;
27
+ /** Worktree path (if worktree created) */
28
+ worktreePath?: string;
29
+ /** Path to proposal.md */
30
+ proposalPath: string;
31
+ /** Path to tasks.md */
32
+ tasksPath: string;
33
+ /** Environment bootstrap results (if bootstrap ran) */
34
+ bootstrapResults?: BootstrapResult[];
35
+ /** Draft PR created (if createDraftPR is enabled) */
36
+ pullRequest?: PullRequest;
37
+ }
38
+ interface InitDependencies {
39
+ git: GitAdapter;
40
+ openspec: OpenSpecAdapter;
41
+ config: SpecLifeConfig;
42
+ /** Environment registry (uses default if not provided) */
43
+ environmentRegistry?: EnvironmentRegistry;
44
+ /** GitHub adapter (required if createDraftPR is enabled) */
45
+ github?: GitHubAdapter;
46
+ }
47
+ /**
48
+ * Initialize a new change
49
+ *
50
+ * By default, creates a worktree for isolated development.
51
+ * Use noWorktree to create a branch in the current worktree instead.
52
+ */
53
+ export declare function initWorkflow(options: InitOptions, deps: InitDependencies, onProgress?: ProgressCallback): Promise<InitResult>;
54
+ export {};
55
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/workflows/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,KAAK,eAAe,EAAyB,MAAM,iCAAiC,CAAC;AAC9F,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EAErB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAA6B,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEjG,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gEAAgE;IAChE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,uCAAuC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,qDAAqD;IACrD,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,UAAU,gBAAgB;IACxB,GAAG,EAAE,UAAU,CAAC;IAChB,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,cAAc,CAAC;IACvB,0DAA0D;IAC1D,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,4DAA4D;IAC5D,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,gBAAgB,EACtB,UAAU,CAAC,EAAE,gBAAgB,GAC5B,OAAO,CAAC,UAAU,CAAC,CAsKrB"}
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Init workflow - create branch and scaffold change proposal
3
+ */
4
+ import { createOpenSpecAdapter } from '../adapters/openspec-adapter.js';
5
+ import { createDefaultEnvironmentRegistry, } from '../adapters/environment-adapter.js';
6
+ import { SpecLifeError, ErrorCodes } from '../types.js';
7
+ /**
8
+ * Initialize a new change
9
+ *
10
+ * By default, creates a worktree for isolated development.
11
+ * Use noWorktree to create a branch in the current worktree instead.
12
+ */
13
+ export async function initWorkflow(options, deps, onProgress) {
14
+ const { changeId, description, noWorktree = false, skipBootstrap = false, dryRun = false, skipDraftPR = false } = options;
15
+ const { git, openspec, config, environmentRegistry, github } = deps;
16
+ // Determine if we should create a draft PR
17
+ const shouldCreateDraftPR = config.createDraftPR && !skipDraftPR && !dryRun;
18
+ // Validate that github adapter is provided if draft PR is needed
19
+ if (shouldCreateDraftPR && !github) {
20
+ throw new SpecLifeError(ErrorCodes.CONFIG_INVALID, 'GitHub adapter is required when createDraftPR is enabled', { createDraftPR: config.createDraftPR, skipDraftPR });
21
+ }
22
+ // Validate changeId format (kebab-case)
23
+ if (!/^[a-z][a-z0-9]*(-[a-z0-9]+)*$/.test(changeId)) {
24
+ throw new SpecLifeError(ErrorCodes.CONFIG_INVALID, `Invalid changeId format: "${changeId}". Must be kebab-case (e.g., "add-user-auth")`, { changeId });
25
+ }
26
+ const branch = `spec/${changeId}`;
27
+ const worktreePath = `worktrees/${changeId}`;
28
+ // Check if branch already exists
29
+ if (await git.branchExists(branch)) {
30
+ throw new SpecLifeError(ErrorCodes.BRANCH_EXISTS, `Branch '${branch}' already exists`, { branch });
31
+ }
32
+ // For worktree mode, check if change exists in main repo's openspec
33
+ // For non-worktree mode, check current directory
34
+ // TODO: Improve change existence check for worktree mode
35
+ if (dryRun) {
36
+ const basePath = noWorktree ? '' : `${worktreePath}/`;
37
+ return {
38
+ branch,
39
+ worktreePath: noWorktree ? undefined : worktreePath,
40
+ proposalPath: `${basePath}openspec/changes/${changeId}/proposal.md`,
41
+ tasksPath: `${basePath}openspec/changes/${changeId}/tasks.md`,
42
+ };
43
+ }
44
+ if (noWorktree) {
45
+ // Legacy mode: create branch in current worktree
46
+ onProgress?.({ type: 'step_completed', message: `Creating branch ${branch}` });
47
+ await git.createBranch(branch, config.github.baseBranch);
48
+ // Scaffold proposal files in current directory
49
+ onProgress?.({ type: 'step_completed', message: 'Scaffolding proposal files' });
50
+ const { proposalPath, tasksPath } = await openspec.scaffoldChange(changeId, { description });
51
+ // Create draft PR if enabled
52
+ let pullRequest;
53
+ if (shouldCreateDraftPR && github) {
54
+ pullRequest = await createInitialDraftPR({
55
+ git,
56
+ github,
57
+ changeId,
58
+ description,
59
+ branch,
60
+ baseBranch: config.github.baseBranch,
61
+ onProgress,
62
+ });
63
+ }
64
+ onProgress?.({ type: 'step_completed', message: 'Initialization complete' });
65
+ return {
66
+ branch,
67
+ proposalPath,
68
+ tasksPath,
69
+ pullRequest,
70
+ };
71
+ }
72
+ // Default: Create worktree for isolated development
73
+ onProgress?.({ type: 'step_completed', message: `Creating worktree at ${worktreePath}` });
74
+ await git.createWorktree(worktreePath, branch);
75
+ // Bootstrap environment (unless skipped)
76
+ let bootstrapResults;
77
+ if (!skipBootstrap) {
78
+ const registry = environmentRegistry ?? createDefaultEnvironmentRegistry();
79
+ const strategy = config.worktree?.bootstrap?.strategy ?? 'symlink';
80
+ onProgress?.({ type: 'step_completed', message: 'Detecting and bootstrapping environments' });
81
+ // Get the source root (current working directory)
82
+ const sourceRoot = process.cwd();
83
+ bootstrapResults = await registry.bootstrapAll(worktreePath, sourceRoot, strategy, onProgress);
84
+ // Report results
85
+ const successful = bootstrapResults.filter(r => r.success);
86
+ const failed = bootstrapResults.filter(r => !r.success);
87
+ if (successful.length > 0) {
88
+ onProgress?.({
89
+ type: 'step_completed',
90
+ message: `Bootstrapped ${successful.length} environment(s): ${successful.map(r => r.environment).join(', ')}`,
91
+ data: { results: successful },
92
+ });
93
+ }
94
+ if (failed.length > 0) {
95
+ onProgress?.({
96
+ type: 'step_completed',
97
+ message: `Warning: ${failed.length} environment(s) failed to bootstrap: ${failed.map(r => r.message).join('; ')}`,
98
+ data: { results: failed },
99
+ });
100
+ }
101
+ }
102
+ // Create OpenSpec adapter for the worktree
103
+ const worktreeOpenspec = createOpenSpecAdapter({
104
+ projectRoot: worktreePath,
105
+ specDir: config.specDir,
106
+ });
107
+ // Scaffold proposal files in worktree
108
+ onProgress?.({ type: 'step_completed', message: 'Scaffolding proposal files in worktree' });
109
+ const { proposalPath, tasksPath } = await worktreeOpenspec.scaffoldChange(changeId, { description });
110
+ // Create draft PR if enabled
111
+ // For worktree mode, we need a git adapter for the worktree
112
+ let pullRequest;
113
+ if (shouldCreateDraftPR && github) {
114
+ // Create a git adapter for the worktree to commit and push from there
115
+ const { createGitAdapter } = await import('../adapters/git-adapter.js');
116
+ const worktreeGit = createGitAdapter(worktreePath);
117
+ pullRequest = await createInitialDraftPR({
118
+ git: worktreeGit,
119
+ github,
120
+ changeId,
121
+ description,
122
+ branch,
123
+ baseBranch: config.github.baseBranch,
124
+ onProgress,
125
+ });
126
+ }
127
+ onProgress?.({ type: 'step_completed', message: 'Initialization complete' });
128
+ return {
129
+ branch,
130
+ worktreePath,
131
+ proposalPath,
132
+ tasksPath,
133
+ bootstrapResults,
134
+ pullRequest,
135
+ };
136
+ }
137
+ /**
138
+ * Helper to create initial commit, push, and draft PR
139
+ */
140
+ async function createInitialDraftPR(params) {
141
+ const { git, github, changeId, description, branch, baseBranch, onProgress } = params;
142
+ // Stage and commit the scaffolded files
143
+ onProgress?.({ type: 'step_completed', message: 'Committing proposal files' });
144
+ await git.add(['.']);
145
+ await git.commit(`spec: add ${changeId} proposal`);
146
+ // Push to origin
147
+ onProgress?.({ type: 'step_completed', message: `Pushing to origin/${branch}` });
148
+ await git.push('origin', branch);
149
+ // Create draft PR
150
+ onProgress?.({ type: 'step_completed', message: 'Creating draft pull request' });
151
+ const prTitle = generatePRTitle(changeId, description);
152
+ const prBody = generateInitialPRBody(changeId, description);
153
+ const pullRequest = await github.createPullRequest({
154
+ title: prTitle,
155
+ body: prBody,
156
+ head: branch,
157
+ base: baseBranch,
158
+ draft: true,
159
+ });
160
+ onProgress?.({ type: 'step_completed', message: `Created draft PR #${pullRequest.number}` });
161
+ return pullRequest;
162
+ }
163
+ /**
164
+ * Generate PR title from changeId and description
165
+ */
166
+ function generatePRTitle(changeId, description) {
167
+ if (description) {
168
+ const firstLine = description.split('\n')[0].trim();
169
+ if (firstLine.length > 72) {
170
+ return firstLine.slice(0, 69) + '...';
171
+ }
172
+ return firstLine;
173
+ }
174
+ // Convert kebab-case to title case
175
+ return changeId.replace(/-/g, ' ').replace(/\b\w/g, c => c.toUpperCase());
176
+ }
177
+ /**
178
+ * Generate initial PR body for draft PR
179
+ */
180
+ function generateInitialPRBody(_changeId, description) {
181
+ const lines = [
182
+ '## Proposal',
183
+ '',
184
+ description || '_Proposal pending - see proposal.md for details_',
185
+ '',
186
+ '---',
187
+ '',
188
+ '> 📝 **Draft PR** - This PR was created during `speclife_init` to track the change from the start.',
189
+ '> Update the proposal and tasks as you implement the change.',
190
+ '',
191
+ '*Created with [SpecLife](https://github.com/malarbase/speclife)*',
192
+ ];
193
+ return lines.join('\n');
194
+ }
195
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/workflows/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Merge workflow - merge PR, sync main, cleanup worktree
3
+ */
4
+ import { type GitAdapter } from '../adapters/git-adapter.js';
5
+ import { type GitHubAdapter } from '../adapters/github-adapter.js';
6
+ import { type SpecLifeConfig } from '../config.js';
7
+ import { type PullRequest, type ProgressCallback } from '../types.js';
8
+ export interface MergeOptions {
9
+ /** Change ID to merge */
10
+ changeId: string;
11
+ /** Merge method: squash (default), merge, or rebase */
12
+ method?: 'squash' | 'merge' | 'rebase';
13
+ /** Delete local branch after merge */
14
+ deleteBranch?: boolean;
15
+ /** Remove worktree after merge (if in worktree) */
16
+ removeWorktree?: boolean;
17
+ }
18
+ export interface MergeResult {
19
+ /** PR that was merged */
20
+ pullRequest: PullRequest;
21
+ /** Whether main was synced */
22
+ mainSynced: boolean;
23
+ /** Whether local branch was deleted */
24
+ branchDeleted: boolean;
25
+ /** Whether worktree was removed */
26
+ worktreeRemoved: boolean;
27
+ /** Path to worktree that was removed (if any) */
28
+ worktreePath?: string;
29
+ }
30
+ interface MergeDependencies {
31
+ git: GitAdapter;
32
+ github: GitHubAdapter;
33
+ config: SpecLifeConfig;
34
+ }
35
+ /**
36
+ * Merge a submitted change: merge PR, sync main, cleanup
37
+ */
38
+ export declare function mergeWorkflow(options: MergeOptions, deps: MergeDependencies, onProgress?: ProgressCallback): Promise<MergeResult>;
39
+ export {};
40
+ //# sourceMappingURL=merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/workflows/merge.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAA6B,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEjG,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IACvC,sCAAsC;IACtC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mDAAmD;IACnD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,yBAAyB;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,8BAA8B;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,uCAAuC;IACvC,aAAa,EAAE,OAAO,CAAC;IACvB,mCAAmC;IACnC,eAAe,EAAE,OAAO,CAAC;IACzB,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,iBAAiB;IACzB,GAAG,EAAE,UAAU,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,iBAAiB,EACvB,UAAU,CAAC,EAAE,gBAAgB,GAC5B,OAAO,CAAC,WAAW,CAAC,CA2GtB"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Merge workflow - merge PR, sync main, cleanup worktree
3
+ */
4
+ import { SpecLifeError, ErrorCodes } from '../types.js';
5
+ /**
6
+ * Merge a submitted change: merge PR, sync main, cleanup
7
+ */
8
+ export async function mergeWorkflow(options, deps, onProgress) {
9
+ const { changeId, method = 'squash', deleteBranch = true, removeWorktree = true } = options;
10
+ const { git, github, config } = deps;
11
+ const branch = `spec/${changeId}`;
12
+ const baseBranch = config.github.baseBranch;
13
+ // Find PR for this branch
14
+ onProgress?.({ type: 'step_completed', message: `Looking for PR for branch ${branch}` });
15
+ const pr = await github.getPullRequestByBranch(branch);
16
+ if (!pr) {
17
+ throw new SpecLifeError(ErrorCodes.CHANGE_NOT_FOUND, `No open PR found for branch '${branch}'. Submit the change first with speclife_submit.`, { changeId, branch });
18
+ }
19
+ // Get full PR details including mergeable status
20
+ const fullPr = await github.getPullRequest(pr.number);
21
+ // Check if already merged
22
+ if (fullPr.state === 'merged') {
23
+ throw new SpecLifeError(ErrorCodes.CONFIG_INVALID, `PR #${pr.number} is already merged`, { prNumber: pr.number });
24
+ }
25
+ // Check if PR is mergeable
26
+ const mergeableCheck = await github.isPullRequestMergeable(pr.number);
27
+ if (!mergeableCheck.mergeable) {
28
+ throw new SpecLifeError(ErrorCodes.CONFIG_INVALID, `PR #${pr.number} is not mergeable: ${mergeableCheck.reason ?? 'unknown reason'}`, { prNumber: pr.number, reason: mergeableCheck.reason });
29
+ }
30
+ // Find worktree for this branch (if any)
31
+ let worktreePath;
32
+ const worktrees = await git.listWorktrees();
33
+ for (const wt of worktrees) {
34
+ if (wt.branch === branch) {
35
+ worktreePath = wt.path;
36
+ break;
37
+ }
38
+ }
39
+ // Merge the PR
40
+ onProgress?.({ type: 'step_completed', message: `Merging PR #${pr.number} (${method})` });
41
+ await github.mergePullRequest(pr.number, method);
42
+ // Get updated PR state
43
+ const mergedPr = await github.getPullRequest(pr.number);
44
+ // Checkout main branch
45
+ onProgress?.({ type: 'step_completed', message: `Checking out ${baseBranch}` });
46
+ await git.checkout(baseBranch);
47
+ // Pull latest changes
48
+ onProgress?.({ type: 'step_completed', message: `Pulling latest ${baseBranch}` });
49
+ let mainSynced = false;
50
+ try {
51
+ await git.pull('origin', baseBranch);
52
+ mainSynced = true;
53
+ }
54
+ catch {
55
+ // Pull might fail in worktree scenarios; continue with cleanup
56
+ }
57
+ // Delete local branch
58
+ let branchDeleted = false;
59
+ if (deleteBranch) {
60
+ onProgress?.({ type: 'step_completed', message: `Deleting local branch ${branch}` });
61
+ try {
62
+ await git.deleteBranch(branch, true); // Force delete since it's merged
63
+ branchDeleted = true;
64
+ }
65
+ catch {
66
+ // Branch might not exist locally; that's okay
67
+ }
68
+ }
69
+ // Remove worktree if applicable
70
+ let worktreeRemoved = false;
71
+ if (removeWorktree && worktreePath) {
72
+ onProgress?.({ type: 'step_completed', message: `Removing worktree at ${worktreePath}` });
73
+ try {
74
+ await git.removeWorktree(worktreePath);
75
+ worktreeRemoved = true;
76
+ }
77
+ catch {
78
+ // Worktree removal might fail; report but don't throw
79
+ }
80
+ }
81
+ onProgress?.({ type: 'step_completed', message: 'Merge complete' });
82
+ return {
83
+ pullRequest: mergedPr,
84
+ mainSynced,
85
+ branchDeleted,
86
+ worktreeRemoved,
87
+ worktreePath: worktreeRemoved ? worktreePath : undefined,
88
+ };
89
+ }
90
+ //# sourceMappingURL=merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/workflows/merge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Status workflow - get current change state
3
+ */
4
+ import { type GitAdapter } from '../adapters/git-adapter.js';
5
+ import { type OpenSpecAdapter } from '../adapters/openspec-adapter.js';
6
+ import { type Change } from '../types.js';
7
+ export interface StatusOptions {
8
+ /** Change ID to get status for (optional, uses current branch if not provided) */
9
+ changeId?: string;
10
+ }
11
+ export interface StatusResult {
12
+ /** Change context */
13
+ change: Change;
14
+ /** Current git branch */
15
+ currentBranch: string;
16
+ /** Whether on the change's branch */
17
+ onBranch: boolean;
18
+ /** Task completion summary */
19
+ taskSummary: {
20
+ total: number;
21
+ completed: number;
22
+ percentage: number;
23
+ };
24
+ }
25
+ interface StatusDependencies {
26
+ git: GitAdapter;
27
+ openspec: OpenSpecAdapter;
28
+ }
29
+ /**
30
+ * Get status of a change
31
+ */
32
+ export declare function statusWorkflow(options: StatusOptions, deps: StatusDependencies): Promise<StatusResult | null>;
33
+ export {};
34
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/workflows/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,KAAK,MAAM,EAAoB,MAAM,aAAa,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,yBAAyB;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,QAAQ,EAAE,OAAO,CAAC;IAClB,8BAA8B;IAC9B,WAAW,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,UAAU,kBAAkB;IAC1B,GAAG,EAAE,UAAU,CAAC;IAChB,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAsC9B"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Status workflow - get current change state
3
+ */
4
+ /**
5
+ * Get status of a change
6
+ */
7
+ export async function statusWorkflow(options, deps) {
8
+ const { git, openspec } = deps;
9
+ let changeId = options.changeId;
10
+ const currentBranch = await git.getCurrentBranch();
11
+ // If no changeId provided, try to get from current branch
12
+ if (!changeId) {
13
+ const match = currentBranch.match(/^spec\/(.+)$/);
14
+ if (!match) {
15
+ return null; // Not on a spec branch
16
+ }
17
+ changeId = match[1];
18
+ }
19
+ // Check if change exists
20
+ if (!await openspec.changeExists(changeId)) {
21
+ return null;
22
+ }
23
+ // Read change
24
+ const change = await openspec.readChange(changeId);
25
+ // Calculate task summary
26
+ const total = change.tasks.length;
27
+ const completed = change.tasks.filter(t => t.completed).length;
28
+ const percentage = total > 0 ? Math.round((completed / total) * 100) : 0;
29
+ // Determine state based on tasks
30
+ const state = determineState(change, completed, total);
31
+ change.state = state;
32
+ return {
33
+ change,
34
+ currentBranch,
35
+ onBranch: currentBranch === `spec/${changeId}`,
36
+ taskSummary: { total, completed, percentage },
37
+ };
38
+ }
39
+ /**
40
+ * Determine the change state based on progress
41
+ */
42
+ function determineState(_change, completed, total) {
43
+ // TODO: Check for PR existence to determine 'submitted' state
44
+ // TODO: Check for archived status to determine 'merged' state
45
+ if (completed === 0) {
46
+ return 'created';
47
+ }
48
+ if (completed < total) {
49
+ return 'implementing';
50
+ }
51
+ return 'testing'; // All tasks complete, likely in testing phase
52
+ }
53
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/workflows/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AA+BH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAsB,EACtB,IAAwB;IAExB,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAE/B,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAChC,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAEnD,0DAA0D;IAC1D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,uBAAuB;QACtC,CAAC;QACD,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IAED,yBAAyB;IACzB,IAAI,CAAC,MAAM,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc;IACd,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAEnD,yBAAyB;IACzB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;IAClC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;IAC/D,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzE,iCAAiC;IACjC,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACvD,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IAErB,OAAO;QACL,MAAM;QACN,aAAa;QACb,QAAQ,EAAE,aAAa,KAAK,QAAQ,QAAQ,EAAE;QAC9C,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE;KAC9C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,OAAe,EAAE,SAAiB,EAAE,KAAa;IACvE,8DAA8D;IAC9D,8DAA8D;IAE9D,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,SAAS,GAAG,KAAK,EAAE,CAAC;QACtB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,OAAO,SAAS,CAAC,CAAC,8CAA8C;AAClE,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Submit workflow - commit, push, create PR, and archive change
3
+ */
4
+ import { type GitAdapter } from '../adapters/git-adapter.js';
5
+ import { type GitHubAdapter } from '../adapters/github-adapter.js';
6
+ import { type OpenSpecAdapter } from '../adapters/openspec-adapter.js';
7
+ import { type SpecLifeConfig } from '../config.js';
8
+ import { type PullRequest, type ProgressCallback } from '../types.js';
9
+ export interface SubmitOptions {
10
+ /** Change ID to submit */
11
+ changeId: string;
12
+ /** Create PR as draft */
13
+ draft?: boolean;
14
+ /** Custom commit message (defaults to proposal-based message) */
15
+ commitMessage?: string;
16
+ /** Skip archiving the change */
17
+ skipArchive?: boolean;
18
+ }
19
+ export interface SubmitResult {
20
+ /** Commit SHA */
21
+ commitSha: string;
22
+ /** Branch that was pushed */
23
+ branch: string;
24
+ /** Created or existing PR */
25
+ pullRequest: PullRequest;
26
+ /** Whether PR was newly created or already existed */
27
+ prCreated: boolean;
28
+ /** Whether an existing draft PR was marked ready for review */
29
+ prMarkedReady: boolean;
30
+ /** Whether change was archived */
31
+ archived: boolean;
32
+ }
33
+ interface SubmitDependencies {
34
+ git: GitAdapter;
35
+ github: GitHubAdapter;
36
+ openspec: OpenSpecAdapter;
37
+ config: SpecLifeConfig;
38
+ }
39
+ /**
40
+ * Submit a change: commit, push, create PR, archive
41
+ */
42
+ export declare function submitWorkflow(options: SubmitOptions, deps: SubmitDependencies, onProgress?: ProgressCallback): Promise<SubmitResult>;
43
+ export {};
44
+ //# sourceMappingURL=submit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit.d.ts","sourceRoot":"","sources":["../../src/workflows/submit.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAA6B,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEjG,MAAM,WAAW,aAAa;IAC5B,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,sDAAsD;IACtD,SAAS,EAAE,OAAO,CAAC;IACnB,+DAA+D;IAC/D,aAAa,EAAE,OAAO,CAAC;IACvB,kCAAkC;IAClC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,kBAAkB;IAC1B,GAAG,EAAE,UAAU,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,cAAc,CAAC;CACxB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,kBAAkB,EACxB,UAAU,CAAC,EAAE,gBAAgB,GAC5B,OAAO,CAAC,YAAY,CAAC,CA6GvB"}