@speclife/core 0.2.1 → 0.3.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.
- package/dist/adapters/git-adapter.d.ts +2 -2
- package/dist/adapters/git-adapter.d.ts.map +1 -1
- package/dist/adapters/git-adapter.js +14 -4
- package/dist/adapters/git-adapter.js.map +1 -1
- package/dist/adapters/github-adapter.d.ts +39 -28
- package/dist/adapters/github-adapter.d.ts.map +1 -1
- package/dist/adapters/github-adapter.js +142 -119
- package/dist/adapters/github-adapter.js.map +1 -1
- package/dist/adapters/index.d.ts +5 -4
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +6 -5
- package/dist/adapters/index.js.map +1 -1
- package/dist/config.d.ts +27 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +9 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +34 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/workflows/implement.d.ts +24 -16
- package/dist/workflows/implement.d.ts.map +1 -1
- package/dist/workflows/implement.js +70 -258
- package/dist/workflows/implement.js.map +1 -1
- package/dist/workflows/index.d.ts +5 -0
- package/dist/workflows/index.d.ts.map +1 -1
- package/dist/workflows/index.js +6 -0
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/init.d.ts +10 -12
- package/dist/workflows/init.d.ts.map +1 -1
- package/dist/workflows/init.js +16 -187
- package/dist/workflows/init.js.map +1 -1
- package/dist/workflows/submit.d.ts.map +1 -1
- package/dist/workflows/submit.js +3 -1
- package/dist/workflows/submit.js.map +1 -1
- package/dist/workflows/worktree.d.ts +62 -0
- package/dist/workflows/worktree.d.ts.map +1 -0
- package/dist/workflows/worktree.js +97 -0
- package/dist/workflows/worktree.js.map +1 -0
- package/package.json +1 -1
- package/dist/adapters/claude-cli-adapter.d.ts +0 -70
- package/dist/adapters/claude-cli-adapter.d.ts.map +0 -1
- package/dist/adapters/claude-cli-adapter.js +0 -234
- package/dist/adapters/claude-cli-adapter.js.map +0 -1
- package/dist/adapters/claude-sdk-adapter.d.ts +0 -49
- package/dist/adapters/claude-sdk-adapter.d.ts.map +0 -1
- package/dist/adapters/claude-sdk-adapter.js +0 -278
- package/dist/adapters/claude-sdk-adapter.js.map +0 -1
- package/dist/adapters/cursor-adapter.d.ts +0 -26
- package/dist/adapters/cursor-adapter.d.ts.map +0 -1
- package/dist/adapters/cursor-adapter.js +0 -54
- package/dist/adapters/cursor-adapter.js.map +0 -1
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAA6B,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,8CAA8C;AAC9C,MAAM,WAAW,0BAA0B;IACzC,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,6BAA6B;AAC7B,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,SAAS,EAAE;QACT,sDAAsD;QACtD,QAAQ,EAAE,iBAAiB,CAAC;QAC5B,gCAAgC;QAChC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;KAC3D,CAAC;CACH;AAED,sDAAsD;AACtD,MAAM,WAAW,iBAAiB;IAChC,mDAAmD;IACnD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mDAAmD;IACnD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sEAAsE;IACtE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,4BAA4B;AAC5B,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC;CACpC;AAED,oCAAoC;AACpC,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAEhB,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAA6B,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,8CAA8C;AAC9C,MAAM,WAAW,0BAA0B;IACzC,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,6BAA6B;AAC7B,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,SAAS,EAAE;QACT,sDAAsD;QACtD,QAAQ,EAAE,iBAAiB,CAAC;QAC5B,gCAAgC;QAChC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;KAC3D,CAAC;CACH;AAED,sDAAsD;AACtD,MAAM,WAAW,iBAAiB;IAChC,mDAAmD;IACnD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mDAAmD;IACnD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sEAAsE;IACtE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,4BAA4B;AAC5B,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC;CACpC;AAED,6CAA6C;AAC7C,MAAM,WAAW,SAAS;IACxB,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,oCAAoC;AACpC,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAEhB,6CAA6C;IAC7C,GAAG,CAAC,EAAE,SAAS,CAAC;IAEhB;;;OAGG;IACH,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAE3C;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,aAAa,EAAE,aAAa,CAAC;IAE7B;;;OAGG;IACH,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IAEF,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IAEpB,6BAA6B;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,6BAA6B;IAC7B,QAAQ,EAAE,cAAc,CAAC;IAEzB,kDAAkD;IAClD,aAAa,EAAE,OAAO,CAAC;IAEvB,4BAA4B;IAC5B,OAAO,EAAE,aAAa,CAAC;CACxB;AA+BD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GACpC,OAAO,CAaT;AAkCD;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,cAAc,CAAC,CA6DrF"}
|
package/dist/config.js
CHANGED
|
@@ -43,6 +43,11 @@ export function isAutoReleaseAllowed(config, bumpType) {
|
|
|
43
43
|
/** Default configuration values */
|
|
44
44
|
const defaults = {
|
|
45
45
|
specDir: 'openspec',
|
|
46
|
+
git: {
|
|
47
|
+
baseBranch: 'main',
|
|
48
|
+
branchPrefix: 'spec/',
|
|
49
|
+
worktreeDir: 'worktrees',
|
|
50
|
+
},
|
|
46
51
|
aiProvider: 'claude',
|
|
47
52
|
aiModel: 'claude-sonnet-4-20250514',
|
|
48
53
|
implementMode: 'claude-cli',
|
|
@@ -93,6 +98,10 @@ export async function loadConfig(cwd = process.cwd()) {
|
|
|
93
98
|
const config = {
|
|
94
99
|
...defaults,
|
|
95
100
|
...fileConfig,
|
|
101
|
+
git: {
|
|
102
|
+
...defaults.git,
|
|
103
|
+
...fileConfig.git,
|
|
104
|
+
},
|
|
96
105
|
github: {
|
|
97
106
|
...defaults.github,
|
|
98
107
|
...fileConfig.github,
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAsB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Core library for SpecLife - adapters and workflows for spec-driven development.
|
|
5
5
|
*/
|
|
6
6
|
export * from './types.js';
|
|
7
|
-
export { loadConfig, isAutoReleaseAllowed, type SpecLifeConfig, type WorktreeConfig, type EnvironmentBootstrapConfig, type ReleaseConfig, type ReleaseAutoConfig, } from './config.js';
|
|
7
|
+
export { loadConfig, isAutoReleaseAllowed, type SpecLifeConfig, type GitConfig, type WorktreeConfig, type EnvironmentBootstrapConfig, type ReleaseConfig, type ReleaseAutoConfig, } from './config.js';
|
|
8
8
|
export * from './adapters/index.js';
|
|
9
9
|
export * from './workflows/index.js';
|
|
10
10
|
export * from './utils/index.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EACL,UAAU,EACV,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAC;AAGrB,cAAc,qBAAqB,CAAC;AAGpC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EACL,UAAU,EACV,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAC;AAGrB,cAAc,qBAAqB,CAAC;AAGpC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,kBAAkB,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,kBAAkB;AAClB,cAAc,YAAY,CAAC;AAE3B,mBAAmB;AACnB,OAAO,EACL,UAAU,EACV,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,kBAAkB;AAClB,cAAc,YAAY,CAAC;AAE3B,mBAAmB;AACnB,OAAO,EACL,UAAU,EACV,oBAAoB,GAOrB,MAAM,aAAa,CAAC;AAErB,qBAAqB;AACrB,cAAc,qBAAqB,CAAC;AAEpC,sBAAsB;AACtB,cAAc,sBAAsB,CAAC;AAErC,sBAAsB;AACtB,cAAc,kBAAkB,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -38,10 +38,31 @@ export interface GitStatus {
|
|
|
38
38
|
/** Pull request information */
|
|
39
39
|
export interface PullRequest {
|
|
40
40
|
number: number;
|
|
41
|
-
url: string;
|
|
42
41
|
title: string;
|
|
42
|
+
body: string;
|
|
43
43
|
state: 'open' | 'closed' | 'merged';
|
|
44
|
+
draft: boolean;
|
|
45
|
+
/** URL to the pull request */
|
|
46
|
+
url: string;
|
|
47
|
+
/** Same as url (GitHub API field name) */
|
|
48
|
+
html_url: string;
|
|
49
|
+
head: {
|
|
50
|
+
ref: string;
|
|
51
|
+
sha: string;
|
|
52
|
+
};
|
|
53
|
+
base: {
|
|
54
|
+
ref: string;
|
|
55
|
+
};
|
|
56
|
+
merged: boolean;
|
|
44
57
|
mergeable: boolean | null;
|
|
58
|
+
mergeable_state?: string;
|
|
59
|
+
}
|
|
60
|
+
/** Simplified pull request info (for backwards compatibility) */
|
|
61
|
+
export interface PullRequestInfo {
|
|
62
|
+
number: number;
|
|
63
|
+
url: string;
|
|
64
|
+
title: string;
|
|
65
|
+
state: 'open' | 'closed' | 'merged';
|
|
45
66
|
draft: boolean;
|
|
46
67
|
}
|
|
47
68
|
/** Structured error for SpecLife operations */
|
|
@@ -63,9 +84,15 @@ export declare const ErrorCodes: {
|
|
|
63
84
|
readonly CLI_NOT_FOUND: "CLI_NOT_FOUND";
|
|
64
85
|
readonly TEST_FAILED: "TEST_FAILED";
|
|
65
86
|
};
|
|
66
|
-
/**
|
|
87
|
+
/**
|
|
88
|
+
* @deprecated Use /openspec-apply slash command instead of speclife_implement MCP tool.
|
|
89
|
+
* Implementation modes for speclife_implement
|
|
90
|
+
*/
|
|
67
91
|
export type ImplementMode = 'claude-cli' | 'claude-sdk' | 'cursor';
|
|
68
|
-
/**
|
|
92
|
+
/**
|
|
93
|
+
* @deprecated Use /openspec-apply slash command instead of speclife_implement MCP tool.
|
|
94
|
+
* Options for the implement workflow
|
|
95
|
+
*/
|
|
69
96
|
export interface ImplementOptions {
|
|
70
97
|
/** Change ID to implement */
|
|
71
98
|
changeId: string;
|
|
@@ -76,7 +103,10 @@ export interface ImplementOptions {
|
|
|
76
103
|
/** Return plan without executing */
|
|
77
104
|
dryRun?: boolean;
|
|
78
105
|
}
|
|
79
|
-
/**
|
|
106
|
+
/**
|
|
107
|
+
* @deprecated Use /openspec-apply slash command instead of speclife_implement MCP tool.
|
|
108
|
+
* Result of the implement workflow
|
|
109
|
+
*/
|
|
80
110
|
export interface ImplementResult {
|
|
81
111
|
/** Mode used for implementation */
|
|
82
112
|
mode: ImplementMode;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,8BAA8B;AAC9B,MAAM,MAAM,WAAW,GACnB,SAAS,GACT,cAAc,GACd,SAAS,GACT,WAAW,GACX,QAAQ,CAAC;AAEb,gCAAgC;AAChC,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,iCAAiC;AACjC,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE;QACN,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;CACH;AAED,2BAA2B;AAC3B,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,6BAA6B;AAC7B,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,+BAA+B;AAC/B,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AA8EH,+CAA+C;AAC/C,MAAM,OAAO,aAAc,SAAQ,KAAK;IAEpB;IAEA;IAHlB,YACkB,IAAY,EAC5B,OAAe,EACC,OAAiC;QAEjD,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAAQ;QAEZ,YAAO,GAAP,OAAO,CAA0B;QAGjD,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,yBAAyB;AACzB,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,cAAc,EAAE,gBAAgB;IAChC,aAAa,EAAE,eAAe;IAC9B,gBAAgB,EAAE,kBAAkB;IACpC,aAAa,EAAE,eAAe;IAC9B,UAAU,EAAE,YAAY;IACxB,YAAY,EAAE,cAAc;IAC5B,QAAQ,EAAE,UAAU;IACpB,aAAa,EAAE,eAAe;IAC9B,aAAa,EAAE,eAAe;IAC9B,WAAW,EAAE,aAAa;CAClB,CAAC"}
|
|
@@ -1,28 +1,36 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Implement workflow -
|
|
2
|
+
* Implement workflow - DEPRECATED
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* This workflow is deprecated. Use /openspec-apply slash command instead.
|
|
5
|
+
*
|
|
6
|
+
* The agent IS the AI - there's no need to invoke AI from within a tool call.
|
|
7
|
+
* Slash commands guide the agent to implement changes directly.
|
|
8
8
|
*/
|
|
9
9
|
import { type OpenSpecAdapter } from '../adapters/openspec-adapter.js';
|
|
10
|
-
import { type ClaudeCliAdapter } from '../adapters/claude-cli-adapter.js';
|
|
11
|
-
import { type ClaudeSdkAdapter } from '../adapters/claude-sdk-adapter.js';
|
|
12
|
-
import { type CursorAdapter } from '../adapters/cursor-adapter.js';
|
|
13
10
|
import { type SpecLifeConfig } from '../config.js';
|
|
14
|
-
import { type
|
|
15
|
-
|
|
16
|
-
interface ImplementDependencies {
|
|
11
|
+
import { type ImplementMode, type ProgressCallback } from '../types.js';
|
|
12
|
+
export interface ImplementDependencies {
|
|
17
13
|
openspec: OpenSpecAdapter;
|
|
18
14
|
config: SpecLifeConfig;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
}
|
|
16
|
+
export interface ImplementOptions {
|
|
17
|
+
changeId: string;
|
|
18
|
+
mode?: ImplementMode;
|
|
19
|
+
taskId?: string;
|
|
20
|
+
dryRun?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface ImplementResult {
|
|
23
|
+
mode: ImplementMode;
|
|
24
|
+
status: 'success' | 'partial' | 'failed' | 'manual';
|
|
25
|
+
tasksAttempted: number;
|
|
26
|
+
tasksCompleted: number;
|
|
27
|
+
message: string;
|
|
28
|
+
plan?: string;
|
|
22
29
|
}
|
|
23
30
|
/**
|
|
24
|
-
* Implement a change using
|
|
31
|
+
* Implement a change using AI
|
|
32
|
+
*
|
|
33
|
+
* @deprecated Use /openspec-apply slash command instead
|
|
25
34
|
*/
|
|
26
35
|
export declare function implementWorkflow(options: ImplementOptions, deps: ImplementDependencies, onProgress?: ProgressCallback): Promise<ImplementResult>;
|
|
27
|
-
export type { ImplementDependencies };
|
|
28
36
|
//# sourceMappingURL=implement.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"implement.d.ts","sourceRoot":"","sources":["../../src/workflows/implement.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"implement.d.ts","sourceRoot":"","sources":["../../src/workflows/implement.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAExE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACpD,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAWD;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,qBAAqB,EAC3B,UAAU,CAAC,EAAE,gBAAgB,GAC5B,OAAO,CAAC,eAAe,CAAC,CAsE1B"}
|
|
@@ -1,277 +1,89 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Implement workflow -
|
|
2
|
+
* Implement workflow - DEPRECATED
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* This workflow is deprecated. Use /openspec-apply slash command instead.
|
|
5
|
+
*
|
|
6
|
+
* The agent IS the AI - there's no need to invoke AI from within a tool call.
|
|
7
|
+
* Slash commands guide the agent to implement changes directly.
|
|
8
8
|
*/
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
const DEPRECATION_WARNING = `
|
|
10
|
+
⚠️ DEPRECATION WARNING: implementWorkflow is deprecated.
|
|
11
|
+
|
|
12
|
+
Use /openspec-apply slash command instead.
|
|
13
|
+
|
|
14
|
+
The agent IS the AI - there's no need to invoke AI from within a tool call.
|
|
15
|
+
Slash commands guide the agent to implement changes directly.
|
|
16
|
+
`;
|
|
15
17
|
/**
|
|
16
|
-
* Implement a change using
|
|
18
|
+
* Implement a change using AI
|
|
19
|
+
*
|
|
20
|
+
* @deprecated Use /openspec-apply slash command instead
|
|
17
21
|
*/
|
|
18
22
|
export async function implementWorkflow(options, deps, onProgress) {
|
|
19
|
-
const { changeId,
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
type: 'step_completed',
|
|
27
|
-
message: `Starting implementation with mode: ${mode}`,
|
|
28
|
-
data: { mode, changeId },
|
|
29
|
-
});
|
|
30
|
-
// Read change context
|
|
31
|
-
const change = await deps.openspec.readChange(changeId);
|
|
32
|
-
const proposalContent = await readChangeFile(changeId, 'proposal.md', deps);
|
|
33
|
-
const tasksContent = await readChangeFile(changeId, 'tasks.md', deps);
|
|
34
|
-
const designContent = await readChangeFile(changeId, 'design.md', deps).catch(() => undefined);
|
|
35
|
-
// Filter tasks if taskId specified
|
|
36
|
-
let tasksToImplement = change.tasks.filter(t => !t.completed);
|
|
37
|
-
if (taskId) {
|
|
38
|
-
tasksToImplement = tasksToImplement.filter(t => t.id === taskId);
|
|
39
|
-
if (tasksToImplement.length === 0) {
|
|
40
|
-
throw new SpecLifeError(ErrorCodes.CHANGE_NOT_FOUND, `Task '${taskId}' not found or already completed`, { changeId, taskId });
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
onProgress?.({
|
|
44
|
-
type: 'step_completed',
|
|
45
|
-
message: `Found ${tasksToImplement.length} task(s) to implement`,
|
|
46
|
-
data: { taskCount: tasksToImplement.length },
|
|
47
|
-
});
|
|
48
|
-
// Gather additional context files
|
|
49
|
-
const contextFiles = await gatherContextFiles(deps.config.contextFiles ?? [], process.cwd());
|
|
50
|
-
// Dispatch based on mode
|
|
51
|
-
switch (mode) {
|
|
52
|
-
case 'claude-cli':
|
|
53
|
-
return implementWithClaudeCli({ changeId, proposalContent, tasksContent, designContent, contextFiles, tasksToImplement, dryRun }, deps, onProgress);
|
|
54
|
-
case 'claude-sdk':
|
|
55
|
-
return implementWithClaudeSdk({ changeId, proposalContent, tasksContent, designContent, contextFiles, tasksToImplement, dryRun }, deps, onProgress);
|
|
56
|
-
case 'cursor':
|
|
57
|
-
return implementWithCursor({ changeId, dryRun }, deps, onProgress);
|
|
58
|
-
default:
|
|
59
|
-
throw new SpecLifeError(ErrorCodes.CONFIG_INVALID, `Unknown implementation mode: ${mode}`, { mode });
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Implement using Claude CLI
|
|
64
|
-
*/
|
|
65
|
-
async function implementWithClaudeCli(context, deps, onProgress) {
|
|
66
|
-
const cli = deps.claudeCli ?? createClaudeCliAdapter();
|
|
67
|
-
// Check if CLI is available
|
|
68
|
-
if (!await cli.isAvailable()) {
|
|
69
|
-
throw new SpecLifeError(ErrorCodes.CLI_NOT_FOUND, 'Claude CLI not found. Install from https://docs.anthropic.com/claude-cli or use mode: claude-sdk', { mode: 'claude-cli' });
|
|
70
|
-
}
|
|
71
|
-
// Generate the implementation prompt
|
|
72
|
-
const prompt = generateImplementationPrompt({
|
|
73
|
-
changeId: context.changeId,
|
|
74
|
-
proposal: context.proposalContent,
|
|
75
|
-
tasks: context.tasksContent,
|
|
76
|
-
design: context.designContent,
|
|
77
|
-
contextFiles: context.contextFiles,
|
|
78
|
-
});
|
|
79
|
-
if (context.dryRun) {
|
|
80
|
-
return {
|
|
81
|
-
mode: 'claude-cli',
|
|
82
|
-
status: 'success',
|
|
83
|
-
output: 'Dry run - no changes made',
|
|
84
|
-
tasksCompleted: [],
|
|
85
|
-
plan: prompt,
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
onProgress?.({
|
|
89
|
-
type: 'step_completed',
|
|
90
|
-
message: 'Invoking Claude CLI...',
|
|
91
|
-
});
|
|
92
|
-
// Run Claude CLI with streaming
|
|
93
|
-
const result = await cli.runStreaming(prompt, { cwd: process.cwd(), model: deps.config.aiModel }, (chunk) => {
|
|
94
|
-
onProgress?.({
|
|
95
|
-
type: 'step_completed',
|
|
96
|
-
message: chunk,
|
|
97
|
-
data: { streaming: true },
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
if (!result.success) {
|
|
101
|
-
return {
|
|
102
|
-
mode: 'claude-cli',
|
|
103
|
-
status: 'failed',
|
|
104
|
-
output: result.stderr || 'Claude CLI execution failed',
|
|
105
|
-
tasksCompleted: [],
|
|
106
|
-
tasksFailed: context.tasksToImplement.map(t => ({
|
|
107
|
-
taskId: t.id,
|
|
108
|
-
reason: 'CLI execution failed',
|
|
109
|
-
})),
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
// Parse output to detect completed tasks
|
|
113
|
-
// This is a simple heuristic - look for task IDs mentioned with completion indicators
|
|
114
|
-
const completedTasks = detectCompletedTasks(result.stdout, context.tasksToImplement);
|
|
115
|
-
return {
|
|
116
|
-
mode: 'claude-cli',
|
|
117
|
-
status: completedTasks.length === context.tasksToImplement.length ? 'success' : 'partial',
|
|
118
|
-
output: result.stdout,
|
|
119
|
-
tasksCompleted: completedTasks,
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Implement using Claude SDK (fully automated)
|
|
124
|
-
*/
|
|
125
|
-
async function implementWithClaudeSdk(context, deps, onProgress) {
|
|
126
|
-
const sdk = deps.claudeSdk ?? createClaudeSdkAdapter();
|
|
127
|
-
// Check if API key is configured
|
|
128
|
-
if (!sdk.isConfigured()) {
|
|
129
|
-
throw new SpecLifeError(ErrorCodes.MISSING_TOKEN, 'ANTHROPIC_API_KEY environment variable required for claude-sdk mode', { mode: 'claude-sdk' });
|
|
130
|
-
}
|
|
131
|
-
// Generate prompts
|
|
132
|
-
const systemPrompt = generateAgenticSystemPrompt();
|
|
133
|
-
const userPrompt = generateImplementationPrompt({
|
|
134
|
-
changeId: context.changeId,
|
|
135
|
-
proposal: context.proposalContent,
|
|
136
|
-
tasks: context.tasksContent,
|
|
137
|
-
design: context.designContent,
|
|
138
|
-
contextFiles: context.contextFiles,
|
|
139
|
-
});
|
|
140
|
-
if (context.dryRun) {
|
|
141
|
-
return {
|
|
142
|
-
mode: 'claude-sdk',
|
|
143
|
-
status: 'success',
|
|
144
|
-
output: 'Dry run - no changes made',
|
|
145
|
-
tasksCompleted: [],
|
|
146
|
-
plan: `System prompt:\n${systemPrompt}\n\nUser prompt:\n${userPrompt}`,
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
onProgress?.({
|
|
150
|
-
type: 'step_completed',
|
|
151
|
-
message: 'Starting agentic implementation loop...',
|
|
152
|
-
});
|
|
153
|
-
// Run the agentic loop
|
|
154
|
-
const result = await sdk.runAgenticLoop(systemPrompt, userPrompt, {
|
|
155
|
-
cwd: process.cwd(),
|
|
156
|
-
model: deps.config.aiModel,
|
|
157
|
-
maxIterations: 50,
|
|
158
|
-
onProgress,
|
|
159
|
-
});
|
|
160
|
-
if (!result.success) {
|
|
23
|
+
const { changeId, mode = deps.config.implementMode, dryRun = false } = options;
|
|
24
|
+
// Show deprecation warning
|
|
25
|
+
console.warn(DEPRECATION_WARNING);
|
|
26
|
+
onProgress?.({ type: 'step_completed', message: '⚠️ This tool is deprecated. Use /openspec-apply instead.' });
|
|
27
|
+
// Check if change exists
|
|
28
|
+
const exists = await deps.openspec.changeExists(changeId);
|
|
29
|
+
if (!exists) {
|
|
161
30
|
return {
|
|
162
|
-
mode
|
|
31
|
+
mode,
|
|
163
32
|
status: 'failed',
|
|
164
|
-
|
|
165
|
-
tasksCompleted:
|
|
166
|
-
|
|
167
|
-
taskId: t.id,
|
|
168
|
-
reason: result.errors[0] ?? 'Unknown error',
|
|
169
|
-
})),
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
|
-
// Detect completed tasks from the final response
|
|
173
|
-
const completedTasks = detectCompletedTasks(result.finalResponse, context.tasksToImplement);
|
|
174
|
-
onProgress?.({
|
|
175
|
-
type: 'step_completed',
|
|
176
|
-
message: `Implementation complete. ${result.iterations} iterations, ${result.filesModified.length} files modified`,
|
|
177
|
-
data: { iterations: result.iterations, filesModified: result.filesModified },
|
|
178
|
-
});
|
|
179
|
-
return {
|
|
180
|
-
mode: 'claude-sdk',
|
|
181
|
-
status: completedTasks.length === context.tasksToImplement.length ? 'success' : 'partial',
|
|
182
|
-
output: result.finalResponse,
|
|
183
|
-
tasksCompleted: completedTasks,
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Implement using Cursor IDE (manual)
|
|
188
|
-
*/
|
|
189
|
-
async function implementWithCursor(context, deps, onProgress) {
|
|
190
|
-
const cursor = deps.cursor ?? createCursorAdapter();
|
|
191
|
-
// Check if Cursor is available
|
|
192
|
-
if (!await cursor.isAvailable()) {
|
|
193
|
-
throw new SpecLifeError(ErrorCodes.CLI_NOT_FOUND, "Cursor CLI not found. Install Cursor and ensure 'cursor' command is available", { mode: 'cursor' });
|
|
194
|
-
}
|
|
195
|
-
const worktreePath = process.cwd();
|
|
196
|
-
if (context.dryRun) {
|
|
197
|
-
return {
|
|
198
|
-
mode: 'cursor',
|
|
199
|
-
status: 'success',
|
|
200
|
-
output: 'Dry run - no changes made',
|
|
201
|
-
tasksCompleted: [],
|
|
202
|
-
plan: `Would open Cursor at: ${worktreePath}`,
|
|
33
|
+
tasksAttempted: 0,
|
|
34
|
+
tasksCompleted: 0,
|
|
35
|
+
message: `Change '${changeId}' not found`,
|
|
203
36
|
};
|
|
204
37
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
message: 'Opening Cursor IDE...',
|
|
208
|
-
});
|
|
209
|
-
// Open Cursor
|
|
210
|
-
const result = await cursor.open(worktreePath);
|
|
211
|
-
if (!result.success) {
|
|
38
|
+
// If dry run, return the deprecation notice as the "plan"
|
|
39
|
+
if (dryRun) {
|
|
212
40
|
return {
|
|
213
|
-
mode
|
|
214
|
-
status: '
|
|
215
|
-
|
|
216
|
-
tasksCompleted:
|
|
41
|
+
mode,
|
|
42
|
+
status: 'manual',
|
|
43
|
+
tasksAttempted: 0,
|
|
44
|
+
tasksCompleted: 0,
|
|
45
|
+
message: 'Dry run - use /openspec-apply slash command for implementation',
|
|
46
|
+
plan: `
|
|
47
|
+
# Implementation Plan for ${changeId}
|
|
48
|
+
|
|
49
|
+
This tool is deprecated. To implement this change:
|
|
50
|
+
|
|
51
|
+
1. Use the /openspec-apply slash command
|
|
52
|
+
2. The agent (you) will implement the tasks directly
|
|
53
|
+
3. No AI-invoking-AI needed - you ARE the AI!
|
|
54
|
+
|
|
55
|
+
## Recommended Workflow
|
|
56
|
+
|
|
57
|
+
\`\`\`
|
|
58
|
+
/openspec-apply
|
|
59
|
+
\`\`\`
|
|
60
|
+
|
|
61
|
+
This will guide you through:
|
|
62
|
+
- Reading the proposal and tasks
|
|
63
|
+
- Implementing each task
|
|
64
|
+
- Running tests
|
|
65
|
+
- Updating task status
|
|
66
|
+
`.trim(),
|
|
217
67
|
};
|
|
218
68
|
}
|
|
69
|
+
// For non-dry-run, return manual status with guidance
|
|
219
70
|
return {
|
|
220
71
|
mode: 'cursor',
|
|
221
72
|
status: 'manual',
|
|
222
|
-
|
|
223
|
-
tasksCompleted:
|
|
73
|
+
tasksAttempted: 0,
|
|
74
|
+
tasksCompleted: 0,
|
|
75
|
+
message: `
|
|
76
|
+
This tool is deprecated. Please use the /openspec-apply slash command instead.
|
|
77
|
+
|
|
78
|
+
The slash command will guide you (the agent) to:
|
|
79
|
+
1. Read the proposal at openspec/changes/${changeId}/proposal.md
|
|
80
|
+
2. Read tasks at openspec/changes/${changeId}/tasks.md
|
|
81
|
+
3. Implement each task
|
|
82
|
+
4. Run tests and fix any issues
|
|
83
|
+
5. Mark tasks as complete
|
|
84
|
+
|
|
85
|
+
No AI-invoking-AI needed - you ARE the AI!
|
|
86
|
+
`.trim(),
|
|
224
87
|
};
|
|
225
88
|
}
|
|
226
|
-
/**
|
|
227
|
-
* Read a file from the change directory
|
|
228
|
-
*/
|
|
229
|
-
async function readChangeFile(changeId, filename, deps) {
|
|
230
|
-
const changePath = join(process.cwd(), deps.config.specDir, 'changes', changeId, filename);
|
|
231
|
-
return readFile(changePath, 'utf-8');
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* Gather context files from the project
|
|
235
|
-
*/
|
|
236
|
-
async function gatherContextFiles(paths, projectRoot) {
|
|
237
|
-
const files = [];
|
|
238
|
-
for (const path of paths) {
|
|
239
|
-
try {
|
|
240
|
-
const fullPath = join(projectRoot, path);
|
|
241
|
-
const content = await readFile(fullPath, 'utf-8');
|
|
242
|
-
files.push({ path, content });
|
|
243
|
-
}
|
|
244
|
-
catch {
|
|
245
|
-
// Skip files that don't exist or can't be read
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
return files;
|
|
249
|
-
}
|
|
250
|
-
/**
|
|
251
|
-
* Detect which tasks were completed based on output text
|
|
252
|
-
* This is a heuristic that looks for task IDs with completion indicators
|
|
253
|
-
*/
|
|
254
|
-
function detectCompletedTasks(output, tasks) {
|
|
255
|
-
const completed = [];
|
|
256
|
-
// Look for patterns like "completed task 1.1", "✓ 1.1", "task 1.1 done", etc.
|
|
257
|
-
const completionPatterns = [
|
|
258
|
-
/completed?\s+(?:task\s+)?(\d+\.\d+)/gi,
|
|
259
|
-
/✓\s*(\d+\.\d+)/g,
|
|
260
|
-
/(?:task\s+)?(\d+\.\d+)\s+(?:done|complete|finished)/gi,
|
|
261
|
-
/\[x\]\s*(\d+\.\d+)/gi,
|
|
262
|
-
];
|
|
263
|
-
for (const task of tasks) {
|
|
264
|
-
for (const pattern of completionPatterns) {
|
|
265
|
-
pattern.lastIndex = 0; // Reset regex state
|
|
266
|
-
let match;
|
|
267
|
-
while ((match = pattern.exec(output)) !== null) {
|
|
268
|
-
if (match[1] === task.id) {
|
|
269
|
-
completed.push(task.id);
|
|
270
|
-
break;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
return [...new Set(completed)]; // Remove duplicates
|
|
276
|
-
}
|
|
277
89
|
//# sourceMappingURL=implement.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"implement.js","sourceRoot":"","sources":["../../src/workflows/implement.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"implement.js","sourceRoot":"","sources":["../../src/workflows/implement.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA2BH,MAAM,mBAAmB,GAAG;;;;;;;CAO3B,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAyB,EACzB,IAA2B,EAC3B,UAA6B;IAE7B,MAAM,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAE/E,2BAA2B;IAC3B,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAClC,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,2DAA2D,EAAE,CAAC,CAAC;IAE/G,yBAAyB;IACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC1D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,IAAI;YACJ,MAAM,EAAE,QAAQ;YAChB,cAAc,EAAE,CAAC;YACjB,cAAc,EAAE,CAAC;YACjB,OAAO,EAAE,WAAW,QAAQ,aAAa;SAC1C,CAAC;IACJ,CAAC;IAED,0DAA0D;IAC1D,IAAI,MAAM,EAAE,CAAC;QACX,OAAO;YACL,IAAI;YACJ,MAAM,EAAE,QAAQ;YAChB,cAAc,EAAE,CAAC;YACjB,cAAc,EAAE,CAAC;YACjB,OAAO,EAAE,gEAAgE;YACzE,IAAI,EAAE;4BACgB,QAAQ;;;;;;;;;;;;;;;;;;;CAmBnC,CAAC,IAAI,EAAE;SACH,CAAC;IACJ,CAAC;IAED,sDAAsD;IACtD,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,QAAQ;QAChB,cAAc,EAAE,CAAC;QACjB,cAAc,EAAE,CAAC;QACjB,OAAO,EAAE;;;;2CAI8B,QAAQ;oCACf,QAAQ;;;;;;CAM3C,CAAC,IAAI,EAAE;KACL,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Workflows for spec-driven development
|
|
3
|
+
*
|
|
4
|
+
* DEPRECATION NOTES:
|
|
5
|
+
* - implementWorkflow: Deprecated - use /openspec-apply slash command
|
|
6
|
+
* - GitHub-dependent workflows: May show deprecation warnings
|
|
3
7
|
*/
|
|
4
8
|
export { initWorkflow, type InitOptions, type InitResult } from './init.js';
|
|
5
9
|
export { statusWorkflow, type StatusOptions, type StatusResult } from './status.js';
|
|
@@ -7,4 +11,5 @@ export { submitWorkflow, type SubmitOptions, type SubmitResult } from './submit.
|
|
|
7
11
|
export { mergeWorkflow, type MergeOptions, type MergeResult } from './merge.js';
|
|
8
12
|
export { implementWorkflow, type ImplementDependencies } from './implement.js';
|
|
9
13
|
export { releaseWorkflow, parseConventionalCommit, suggestVersionBump, bumpVersion, generateChangelog, } from './release.js';
|
|
14
|
+
export { worktreeCreate, worktreeRemove, worktreeList, type WorktreeCreateOptions, type WorktreeCreateResult, type WorktreeRemoveOptions, type WorktreeRemoveResult, type WorktreeListResult, } from './worktree.js';
|
|
10
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workflows/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workflows/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;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;AAC/E,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,WAAW,EACX,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,cAAc,EACd,cAAc,EACd,YAAY,EACZ,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,GACxB,MAAM,eAAe,CAAC"}
|