@speclife/core 0.1.7 → 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 +15 -2
- package/dist/adapters/git-adapter.d.ts.map +1 -1
- package/dist/adapters/git-adapter.js +75 -4
- package/dist/adapters/git-adapter.js.map +1 -1
- package/dist/adapters/github-adapter.d.ts +39 -26
- package/dist/adapters/github-adapter.d.ts.map +1 -1
- package/dist/adapters/github-adapter.js +154 -93
- 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 +52 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +58 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +124 -15
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/format.d.ts +57 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +154 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- 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 +6 -0
- package/dist/workflows/index.d.ts.map +1 -1
- package/dist/workflows/index.js +7 -0
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/init.d.ts +11 -7
- package/dist/workflows/init.d.ts.map +1 -1
- package/dist/workflows/init.js +16 -107
- package/dist/workflows/init.js.map +1 -1
- package/dist/workflows/merge.d.ts +9 -13
- package/dist/workflows/merge.d.ts.map +1 -1
- package/dist/workflows/merge.js +11 -103
- package/dist/workflows/merge.js.map +1 -1
- package/dist/workflows/release.d.ts +28 -0
- package/dist/workflows/release.d.ts.map +1 -0
- package/dist/workflows/release.js +212 -0
- package/dist/workflows/release.js.map +1 -0
- package/dist/workflows/submit.d.ts +7 -1
- package/dist/workflows/submit.d.ts.map +1 -1
- package/dist/workflows/submit.js +92 -4
- 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 +2 -2
- package/dist/adapters/claude-cli-adapter.d.ts +0 -72
- package/dist/adapters/claude-cli-adapter.d.ts.map +0 -1
- package/dist/adapters/claude-cli-adapter.js +0 -232
- 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
CHANGED
|
@@ -20,17 +20,59 @@ export interface WorktreeConfig {
|
|
|
20
20
|
environments?: Record<string, EnvironmentBootstrapConfig>;
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
|
+
/** Auto-release configuration by version bump type */
|
|
24
|
+
export interface ReleaseAutoConfig {
|
|
25
|
+
/** Auto-release for patch bumps (default: true) */
|
|
26
|
+
patch?: boolean;
|
|
27
|
+
/** Auto-release for minor bumps (default: true) */
|
|
28
|
+
minor?: boolean;
|
|
29
|
+
/** Auto-release for major bumps (default: false - requires manual) */
|
|
30
|
+
major?: boolean;
|
|
31
|
+
}
|
|
32
|
+
/** Release configuration */
|
|
33
|
+
export interface ReleaseConfig {
|
|
34
|
+
/**
|
|
35
|
+
* Auto-release configuration.
|
|
36
|
+
* - If boolean: enables/disables auto-release for all types (except major)
|
|
37
|
+
* - If object: fine-grained control per bump type
|
|
38
|
+
* Default: { patch: true, minor: true, major: false }
|
|
39
|
+
*/
|
|
40
|
+
auto?: ReleaseAutoConfig | boolean;
|
|
41
|
+
}
|
|
42
|
+
/** Git configuration (new minimal config) */
|
|
43
|
+
export interface GitConfig {
|
|
44
|
+
/** Base branch for new changes (default: "main") */
|
|
45
|
+
baseBranch?: string;
|
|
46
|
+
/** Branch prefix for change branches (default: "spec/") */
|
|
47
|
+
branchPrefix?: string;
|
|
48
|
+
/** Directory for worktrees (default: "worktrees") */
|
|
49
|
+
worktreeDir?: string;
|
|
50
|
+
}
|
|
23
51
|
/** SpecLife configuration schema */
|
|
24
52
|
export interface SpecLifeConfig {
|
|
25
53
|
/** OpenSpec directory location (default: "openspec") */
|
|
26
54
|
specDir: string;
|
|
27
|
-
/**
|
|
55
|
+
/** Git configuration (new minimal config) */
|
|
56
|
+
git?: GitConfig;
|
|
57
|
+
/**
|
|
58
|
+
* @deprecated Use slash commands instead of MCP tools.
|
|
59
|
+
* AI provider to use - only used by deprecated MCP server.
|
|
60
|
+
*/
|
|
28
61
|
aiProvider: 'claude' | 'openai' | 'gemini';
|
|
29
|
-
/**
|
|
62
|
+
/**
|
|
63
|
+
* @deprecated Use slash commands instead of MCP tools.
|
|
64
|
+
* AI model identifier - only used by deprecated MCP server.
|
|
65
|
+
*/
|
|
30
66
|
aiModel: string;
|
|
31
|
-
/**
|
|
67
|
+
/**
|
|
68
|
+
* @deprecated Use /openspec-apply slash command instead.
|
|
69
|
+
* Implementation mode for speclife_implement MCP tool.
|
|
70
|
+
*/
|
|
32
71
|
implementMode: ImplementMode;
|
|
33
|
-
/**
|
|
72
|
+
/**
|
|
73
|
+
* @deprecated Use @github MCP or gh CLI instead. Owner/repo auto-detected from git remote.
|
|
74
|
+
* GitHub configuration - only used by deprecated MCP server.
|
|
75
|
+
*/
|
|
34
76
|
github: {
|
|
35
77
|
owner: string;
|
|
36
78
|
repo: string;
|
|
@@ -46,7 +88,13 @@ export interface SpecLifeConfig {
|
|
|
46
88
|
worktree: WorktreeConfig;
|
|
47
89
|
/** Create draft PR during init (default: true) */
|
|
48
90
|
createDraftPR: boolean;
|
|
91
|
+
/** Release configuration */
|
|
92
|
+
release: ReleaseConfig;
|
|
49
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* Check if auto-release is allowed for a given bump type
|
|
96
|
+
*/
|
|
97
|
+
export declare function isAutoReleaseAllowed(config: SpecLifeConfig, bumpType: 'major' | 'minor' | 'patch'): boolean;
|
|
50
98
|
/**
|
|
51
99
|
* Load configuration from standard locations
|
|
52
100
|
*
|
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,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
|
@@ -3,9 +3,51 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { cosmiconfig } from 'cosmiconfig';
|
|
5
5
|
import { SpecLifeError, ErrorCodes } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Merge auto-release configuration
|
|
8
|
+
* Handles both boolean and object forms
|
|
9
|
+
*/
|
|
10
|
+
function mergeAutoReleaseConfig(defaultConfig, userConfig) {
|
|
11
|
+
// If user provided boolean, expand it
|
|
12
|
+
if (typeof userConfig === 'boolean') {
|
|
13
|
+
return {
|
|
14
|
+
patch: userConfig,
|
|
15
|
+
minor: userConfig,
|
|
16
|
+
major: false, // Major always defaults to false for safety
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
// If user provided object, merge with defaults
|
|
20
|
+
const defaultObj = typeof defaultConfig === 'boolean'
|
|
21
|
+
? { patch: defaultConfig, minor: defaultConfig, major: false }
|
|
22
|
+
: defaultConfig ?? {};
|
|
23
|
+
return {
|
|
24
|
+
patch: userConfig?.patch ?? defaultObj.patch ?? true,
|
|
25
|
+
minor: userConfig?.minor ?? defaultObj.minor ?? true,
|
|
26
|
+
major: userConfig?.major ?? defaultObj.major ?? false,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Check if auto-release is allowed for a given bump type
|
|
31
|
+
*/
|
|
32
|
+
export function isAutoReleaseAllowed(config, bumpType) {
|
|
33
|
+
const autoConfig = config.release?.auto;
|
|
34
|
+
if (autoConfig === undefined) {
|
|
35
|
+
// Default: auto for patch/minor, manual for major
|
|
36
|
+
return bumpType !== 'major';
|
|
37
|
+
}
|
|
38
|
+
if (typeof autoConfig === 'boolean') {
|
|
39
|
+
return bumpType === 'major' ? false : autoConfig;
|
|
40
|
+
}
|
|
41
|
+
return autoConfig[bumpType] ?? (bumpType !== 'major');
|
|
42
|
+
}
|
|
6
43
|
/** Default configuration values */
|
|
7
44
|
const defaults = {
|
|
8
45
|
specDir: 'openspec',
|
|
46
|
+
git: {
|
|
47
|
+
baseBranch: 'main',
|
|
48
|
+
branchPrefix: 'spec/',
|
|
49
|
+
worktreeDir: 'worktrees',
|
|
50
|
+
},
|
|
9
51
|
aiProvider: 'claude',
|
|
10
52
|
aiModel: 'claude-sonnet-4-20250514',
|
|
11
53
|
implementMode: 'claude-cli',
|
|
@@ -21,6 +63,13 @@ const defaults = {
|
|
|
21
63
|
},
|
|
22
64
|
},
|
|
23
65
|
createDraftPR: true,
|
|
66
|
+
release: {
|
|
67
|
+
auto: {
|
|
68
|
+
patch: true,
|
|
69
|
+
minor: true,
|
|
70
|
+
major: false,
|
|
71
|
+
},
|
|
72
|
+
},
|
|
24
73
|
};
|
|
25
74
|
/**
|
|
26
75
|
* Load configuration from standard locations
|
|
@@ -49,6 +98,10 @@ export async function loadConfig(cwd = process.cwd()) {
|
|
|
49
98
|
const config = {
|
|
50
99
|
...defaults,
|
|
51
100
|
...fileConfig,
|
|
101
|
+
git: {
|
|
102
|
+
...defaults.git,
|
|
103
|
+
...fileConfig.git,
|
|
104
|
+
},
|
|
52
105
|
github: {
|
|
53
106
|
...defaults.github,
|
|
54
107
|
...fileConfig.github,
|
|
@@ -61,6 +114,11 @@ export async function loadConfig(cwd = process.cwd()) {
|
|
|
61
114
|
...fileConfig.worktree?.bootstrap,
|
|
62
115
|
},
|
|
63
116
|
},
|
|
117
|
+
release: {
|
|
118
|
+
...defaults.release,
|
|
119
|
+
...fileConfig.release,
|
|
120
|
+
auto: mergeAutoReleaseConfig(defaults.release?.auto, fileConfig.release?.auto),
|
|
121
|
+
},
|
|
64
122
|
};
|
|
65
123
|
// Apply environment variable overrides
|
|
66
124
|
if (process.env.SPECLIFE_AI_PROVIDER) {
|
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,8 @@
|
|
|
4
4
|
* Core library for SpecLife - adapters and workflows for spec-driven development.
|
|
5
5
|
*/
|
|
6
6
|
export * from './types.js';
|
|
7
|
-
export { loadConfig, type SpecLifeConfig, type WorktreeConfig, type EnvironmentBootstrapConfig, } 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
|
+
export * from './utils/index.js';
|
|
10
11
|
//# sourceMappingURL=index.d.ts.map
|
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,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,0BAA0B,
|
|
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
CHANGED
|
@@ -6,9 +6,11 @@
|
|
|
6
6
|
// Re-export types
|
|
7
7
|
export * from './types.js';
|
|
8
8
|
// Re-export config
|
|
9
|
-
export { loadConfig, } from './config.js';
|
|
9
|
+
export { loadConfig, isAutoReleaseAllowed, } from './config.js';
|
|
10
10
|
// Re-export adapters
|
|
11
11
|
export * from './adapters/index.js';
|
|
12
12
|
// Re-export workflows
|
|
13
13
|
export * from './workflows/index.js';
|
|
14
|
+
// Re-export utilities
|
|
15
|
+
export * from './utils/index.js';
|
|
14
16
|
//# sourceMappingURL=index.js.map
|
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,
|
|
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;
|
|
@@ -102,15 +132,94 @@ export interface ProgressEvent {
|
|
|
102
132
|
}
|
|
103
133
|
/** Progress callback type */
|
|
104
134
|
export type ProgressCallback = (event: ProgressEvent) => void;
|
|
105
|
-
/** Version bump types
|
|
106
|
-
export type VersionBumpType = '
|
|
107
|
-
/**
|
|
108
|
-
export interface
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
135
|
+
/** Version bump types */
|
|
136
|
+
export type VersionBumpType = 'major' | 'minor' | 'patch';
|
|
137
|
+
/** Commit information for version analysis */
|
|
138
|
+
export interface CommitInfo {
|
|
139
|
+
sha: string;
|
|
140
|
+
message: string;
|
|
141
|
+
type?: string;
|
|
142
|
+
scope?: string;
|
|
143
|
+
isBreaking: boolean;
|
|
144
|
+
}
|
|
145
|
+
/** Options for the release workflow */
|
|
146
|
+
export interface ReleaseOptions {
|
|
147
|
+
/** Explicit version to release (skips analysis) */
|
|
148
|
+
version?: string;
|
|
149
|
+
/** Don't create PR, just show what would happen */
|
|
150
|
+
dryRun?: boolean;
|
|
151
|
+
/** Skip changelog generation */
|
|
152
|
+
skipChangelog?: boolean;
|
|
153
|
+
/** Enable auto-merge on the release PR (requires repo settings to allow auto-merge) */
|
|
154
|
+
autoMerge?: boolean;
|
|
155
|
+
}
|
|
156
|
+
/** Result of the release workflow */
|
|
157
|
+
export interface ReleaseResult {
|
|
158
|
+
/** The new version */
|
|
159
|
+
version: string;
|
|
160
|
+
/** Previous version */
|
|
161
|
+
previousVersion: string;
|
|
162
|
+
/** Suggested bump type */
|
|
163
|
+
bumpType: VersionBumpType;
|
|
164
|
+
/** Commits included in this release */
|
|
165
|
+
commits: CommitInfo[];
|
|
166
|
+
/** Generated changelog content */
|
|
167
|
+
changelog?: string;
|
|
168
|
+
/** URL of the created PR (if not dry run) */
|
|
169
|
+
prUrl?: string;
|
|
170
|
+
/** Release branch name */
|
|
171
|
+
branch?: string;
|
|
172
|
+
/** Whether auto-merge was enabled on the PR */
|
|
173
|
+
autoMergeEnabled?: boolean;
|
|
174
|
+
}
|
|
175
|
+
/** Progress information for a change */
|
|
176
|
+
export interface ChangeProgress {
|
|
177
|
+
/** Number of completed tasks */
|
|
178
|
+
completed: number;
|
|
179
|
+
/** Total number of tasks */
|
|
180
|
+
total: number;
|
|
181
|
+
/** Completion percentage (0-100) */
|
|
182
|
+
percentage: number;
|
|
183
|
+
}
|
|
184
|
+
/** PR status for display */
|
|
185
|
+
export type PRDisplayStatus = 'draft' | 'ready' | 'merged' | 'closed' | 'local';
|
|
186
|
+
/** Enriched change item for list display */
|
|
187
|
+
export interface ChangeListItem {
|
|
188
|
+
/** Change identifier */
|
|
189
|
+
id: string;
|
|
190
|
+
/** Task progress */
|
|
191
|
+
progress: ChangeProgress;
|
|
192
|
+
/** PR status */
|
|
193
|
+
prStatus: PRDisplayStatus;
|
|
194
|
+
/** PR number if exists */
|
|
195
|
+
prNumber?: number;
|
|
196
|
+
/** PR URL if exists */
|
|
197
|
+
prUrl?: string;
|
|
198
|
+
/** Last activity timestamp */
|
|
199
|
+
lastActive?: Date;
|
|
200
|
+
/** Whether this is the current branch */
|
|
201
|
+
isCurrent: boolean;
|
|
202
|
+
}
|
|
203
|
+
/** Options for listing changes */
|
|
204
|
+
export interface ListOptions {
|
|
205
|
+
/** Show compact single-line output */
|
|
206
|
+
compact?: boolean;
|
|
207
|
+
/** Filter by PR status */
|
|
208
|
+
status?: PRDisplayStatus;
|
|
209
|
+
/** Sort order */
|
|
210
|
+
sort?: 'activity' | 'progress' | 'name';
|
|
211
|
+
}
|
|
212
|
+
/** Validation status */
|
|
213
|
+
export type ValidationStatus = 'pass' | 'pass_with_warnings' | 'fail';
|
|
214
|
+
/** Validation report from openspec validate */
|
|
215
|
+
export interface ValidationReport {
|
|
216
|
+
/** Overall validation status */
|
|
217
|
+
status: ValidationStatus;
|
|
218
|
+
/** Validation errors (cause failure) */
|
|
219
|
+
errors: string[];
|
|
220
|
+
/** Validation warnings */
|
|
221
|
+
warnings: string[];
|
|
222
|
+
/** Raw output from openspec validate */
|
|
223
|
+
output?: string;
|
|
224
|
+
}
|
|
116
225
|
//# sourceMappingURL=types.d.ts.map
|
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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatting utilities for display
|
|
3
|
+
*/
|
|
4
|
+
import type { ChangeProgress, ChangeListItem, PRDisplayStatus } from '../types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Format a progress bar using ASCII characters
|
|
7
|
+
* @param progress Progress info
|
|
8
|
+
* @param width Width of the bar (default 10)
|
|
9
|
+
* @returns ASCII progress bar like "████████░░"
|
|
10
|
+
*/
|
|
11
|
+
export declare function formatProgressBar(progress: ChangeProgress, width?: number): string;
|
|
12
|
+
/**
|
|
13
|
+
* Format a relative time string
|
|
14
|
+
* @param date Date to format
|
|
15
|
+
* @returns String like "2 hours ago", "3 days ago"
|
|
16
|
+
*/
|
|
17
|
+
export declare function formatRelativeTime(date: Date | undefined): string;
|
|
18
|
+
/**
|
|
19
|
+
* Format PR status for display
|
|
20
|
+
* @param status PR status
|
|
21
|
+
* @param prNumber PR number (if exists)
|
|
22
|
+
* @returns Formatted string like "PR #42 (draft)" or "local only"
|
|
23
|
+
*/
|
|
24
|
+
export declare function formatPRStatus(status: PRDisplayStatus, prNumber?: number): string;
|
|
25
|
+
/**
|
|
26
|
+
* Format a change item as a compact single line
|
|
27
|
+
* @param item Change list item
|
|
28
|
+
* @returns Compact format string
|
|
29
|
+
*/
|
|
30
|
+
export declare function formatCompactLine(item: ChangeListItem): string;
|
|
31
|
+
/**
|
|
32
|
+
* Format changes as a detailed table
|
|
33
|
+
* @param items Change list items
|
|
34
|
+
* @returns Formatted table string
|
|
35
|
+
*/
|
|
36
|
+
export declare function formatTable(items: ChangeListItem[]): string;
|
|
37
|
+
/**
|
|
38
|
+
* Format a summary line for the list
|
|
39
|
+
* @param items All change items
|
|
40
|
+
* @returns Summary string
|
|
41
|
+
*/
|
|
42
|
+
export declare function formatSummary(items: ChangeListItem[]): string;
|
|
43
|
+
/**
|
|
44
|
+
* Sort change items based on sort option
|
|
45
|
+
* @param items Change list items
|
|
46
|
+
* @param sort Sort option
|
|
47
|
+
* @returns Sorted items
|
|
48
|
+
*/
|
|
49
|
+
export declare function sortItems(items: ChangeListItem[], sort?: 'activity' | 'progress' | 'name'): ChangeListItem[];
|
|
50
|
+
/**
|
|
51
|
+
* Filter change items by status
|
|
52
|
+
* @param items Change list items
|
|
53
|
+
* @param status Status to filter by
|
|
54
|
+
* @returns Filtered items
|
|
55
|
+
*/
|
|
56
|
+
export declare function filterByStatus(items: ChangeListItem[], status?: PRDisplayStatus): ChangeListItem[];
|
|
57
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,GAAE,MAAW,GAAG,MAAM,CAItF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,GAAG,MAAM,CAkBjE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAMjF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAS9D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,MAAM,CAwB3D;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,MAAM,CAoB7D;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,IAAI,GAAE,UAAU,GAAG,UAAU,GAAG,MAAmB,GAAG,cAAc,EAAE,CAoBxH;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,cAAc,EAAE,CAGlG"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatting utilities for display
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Format a progress bar using ASCII characters
|
|
6
|
+
* @param progress Progress info
|
|
7
|
+
* @param width Width of the bar (default 10)
|
|
8
|
+
* @returns ASCII progress bar like "████████░░"
|
|
9
|
+
*/
|
|
10
|
+
export function formatProgressBar(progress, width = 10) {
|
|
11
|
+
const filled = Math.round((progress.percentage / 100) * width);
|
|
12
|
+
const empty = width - filled;
|
|
13
|
+
return '█'.repeat(filled) + '░'.repeat(empty);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Format a relative time string
|
|
17
|
+
* @param date Date to format
|
|
18
|
+
* @returns String like "2 hours ago", "3 days ago"
|
|
19
|
+
*/
|
|
20
|
+
export function formatRelativeTime(date) {
|
|
21
|
+
if (!date)
|
|
22
|
+
return 'unknown';
|
|
23
|
+
const now = new Date();
|
|
24
|
+
const diffMs = now.getTime() - date.getTime();
|
|
25
|
+
const diffSeconds = Math.floor(diffMs / 1000);
|
|
26
|
+
const diffMinutes = Math.floor(diffSeconds / 60);
|
|
27
|
+
const diffHours = Math.floor(diffMinutes / 60);
|
|
28
|
+
const diffDays = Math.floor(diffHours / 24);
|
|
29
|
+
const diffWeeks = Math.floor(diffDays / 7);
|
|
30
|
+
if (diffMinutes < 1)
|
|
31
|
+
return 'just now';
|
|
32
|
+
if (diffMinutes < 60)
|
|
33
|
+
return `${diffMinutes}m ago`;
|
|
34
|
+
if (diffHours < 24)
|
|
35
|
+
return `${diffHours}h ago`;
|
|
36
|
+
if (diffDays < 7)
|
|
37
|
+
return `${diffDays}d ago`;
|
|
38
|
+
if (diffWeeks < 4)
|
|
39
|
+
return `${diffWeeks}w ago`;
|
|
40
|
+
return date.toLocaleDateString();
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Format PR status for display
|
|
44
|
+
* @param status PR status
|
|
45
|
+
* @param prNumber PR number (if exists)
|
|
46
|
+
* @returns Formatted string like "PR #42 (draft)" or "local only"
|
|
47
|
+
*/
|
|
48
|
+
export function formatPRStatus(status, prNumber) {
|
|
49
|
+
if (status === 'local')
|
|
50
|
+
return 'local only';
|
|
51
|
+
if (!prNumber)
|
|
52
|
+
return status;
|
|
53
|
+
const statusLabel = status === 'ready' ? 'ready' : status;
|
|
54
|
+
return `PR #${prNumber} (${statusLabel})`;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Format a change item as a compact single line
|
|
58
|
+
* @param item Change list item
|
|
59
|
+
* @returns Compact format string
|
|
60
|
+
*/
|
|
61
|
+
export function formatCompactLine(item) {
|
|
62
|
+
const name = item.id.padEnd(24);
|
|
63
|
+
const bar = `[${formatProgressBar(item.progress)}]`;
|
|
64
|
+
const progress = `${item.progress.completed}/${item.progress.total}`.padStart(5);
|
|
65
|
+
const pr = formatPRStatus(item.prStatus, item.prNumber).padEnd(16);
|
|
66
|
+
const time = formatRelativeTime(item.lastActive).padStart(8);
|
|
67
|
+
const current = item.isCurrent ? ' ←' : '';
|
|
68
|
+
return `${name} ${bar} ${progress} ${pr} ${time}${current}`;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Format changes as a detailed table
|
|
72
|
+
* @param items Change list items
|
|
73
|
+
* @returns Formatted table string
|
|
74
|
+
*/
|
|
75
|
+
export function formatTable(items) {
|
|
76
|
+
const lines = [];
|
|
77
|
+
// Header
|
|
78
|
+
lines.push('┌─────────────────────────────────┬────────────────┬─────────────────┬──────────────┐');
|
|
79
|
+
lines.push('│ Change │ Progress │ PR Status │ Last Active │');
|
|
80
|
+
lines.push('├─────────────────────────────────┼────────────────┼─────────────────┼──────────────┤');
|
|
81
|
+
// Rows
|
|
82
|
+
for (const item of items) {
|
|
83
|
+
const name = (item.id + (item.isCurrent ? ' ←' : '')).slice(0, 31).padEnd(31);
|
|
84
|
+
const bar = formatProgressBar(item.progress);
|
|
85
|
+
const progressText = `${item.progress.completed}/${item.progress.total}`.padStart(4);
|
|
86
|
+
const progress = `${bar} ${progressText}`.padEnd(14);
|
|
87
|
+
const pr = formatPRStatus(item.prStatus, item.prNumber).slice(0, 15).padEnd(15);
|
|
88
|
+
const time = formatRelativeTime(item.lastActive).padEnd(12);
|
|
89
|
+
lines.push(`│ ${name} │ ${progress} │ ${pr} │ ${time} │`);
|
|
90
|
+
}
|
|
91
|
+
// Footer
|
|
92
|
+
lines.push('└─────────────────────────────────┴────────────────┴─────────────────┴──────────────┘');
|
|
93
|
+
return lines.join('\n');
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Format a summary line for the list
|
|
97
|
+
* @param items All change items
|
|
98
|
+
* @returns Summary string
|
|
99
|
+
*/
|
|
100
|
+
export function formatSummary(items) {
|
|
101
|
+
const total = items.length;
|
|
102
|
+
const withPRs = items.filter(i => i.prStatus !== 'local').length;
|
|
103
|
+
const ready = items.filter(i => i.prStatus === 'ready').length;
|
|
104
|
+
const drafts = items.filter(i => i.prStatus === 'draft').length;
|
|
105
|
+
const parts = [`${total} change${total !== 1 ? 's' : ''}`];
|
|
106
|
+
if (ready > 0) {
|
|
107
|
+
parts.push(`${ready} ready for review`);
|
|
108
|
+
}
|
|
109
|
+
if (drafts > 0) {
|
|
110
|
+
parts.push(`${drafts} draft${drafts !== 1 ? 's' : ''}`);
|
|
111
|
+
}
|
|
112
|
+
if (withPRs < total) {
|
|
113
|
+
const local = total - withPRs;
|
|
114
|
+
parts.push(`${local} local only`);
|
|
115
|
+
}
|
|
116
|
+
return `Summary: ${parts.join(', ')}`;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Sort change items based on sort option
|
|
120
|
+
* @param items Change list items
|
|
121
|
+
* @param sort Sort option
|
|
122
|
+
* @returns Sorted items
|
|
123
|
+
*/
|
|
124
|
+
export function sortItems(items, sort = 'activity') {
|
|
125
|
+
const sorted = [...items];
|
|
126
|
+
switch (sort) {
|
|
127
|
+
case 'activity':
|
|
128
|
+
sorted.sort((a, b) => {
|
|
129
|
+
const aTime = a.lastActive?.getTime() ?? 0;
|
|
130
|
+
const bTime = b.lastActive?.getTime() ?? 0;
|
|
131
|
+
return bTime - aTime; // Most recent first
|
|
132
|
+
});
|
|
133
|
+
break;
|
|
134
|
+
case 'progress':
|
|
135
|
+
sorted.sort((a, b) => b.progress.percentage - a.progress.percentage);
|
|
136
|
+
break;
|
|
137
|
+
case 'name':
|
|
138
|
+
sorted.sort((a, b) => a.id.localeCompare(b.id));
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
return sorted;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Filter change items by status
|
|
145
|
+
* @param items Change list items
|
|
146
|
+
* @param status Status to filter by
|
|
147
|
+
* @returns Filtered items
|
|
148
|
+
*/
|
|
149
|
+
export function filterByStatus(items, status) {
|
|
150
|
+
if (!status)
|
|
151
|
+
return items;
|
|
152
|
+
return items.filter(i => i.prStatus === status);
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"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"}
|