@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.
Files changed (72) hide show
  1. package/dist/adapters/git-adapter.d.ts +15 -2
  2. package/dist/adapters/git-adapter.d.ts.map +1 -1
  3. package/dist/adapters/git-adapter.js +75 -4
  4. package/dist/adapters/git-adapter.js.map +1 -1
  5. package/dist/adapters/github-adapter.d.ts +39 -26
  6. package/dist/adapters/github-adapter.d.ts.map +1 -1
  7. package/dist/adapters/github-adapter.js +154 -93
  8. package/dist/adapters/github-adapter.js.map +1 -1
  9. package/dist/adapters/index.d.ts +5 -4
  10. package/dist/adapters/index.d.ts.map +1 -1
  11. package/dist/adapters/index.js +6 -5
  12. package/dist/adapters/index.js.map +1 -1
  13. package/dist/config.d.ts +52 -4
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +58 -0
  16. package/dist/config.js.map +1 -1
  17. package/dist/index.d.ts +2 -1
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +3 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/types.d.ts +124 -15
  22. package/dist/types.d.ts.map +1 -1
  23. package/dist/types.js.map +1 -1
  24. package/dist/utils/format.d.ts +57 -0
  25. package/dist/utils/format.d.ts.map +1 -0
  26. package/dist/utils/format.js +154 -0
  27. package/dist/utils/format.js.map +1 -0
  28. package/dist/utils/index.d.ts +5 -0
  29. package/dist/utils/index.d.ts.map +1 -0
  30. package/dist/utils/index.js +5 -0
  31. package/dist/utils/index.js.map +1 -0
  32. package/dist/workflows/implement.d.ts +24 -16
  33. package/dist/workflows/implement.d.ts.map +1 -1
  34. package/dist/workflows/implement.js +70 -258
  35. package/dist/workflows/implement.js.map +1 -1
  36. package/dist/workflows/index.d.ts +6 -0
  37. package/dist/workflows/index.d.ts.map +1 -1
  38. package/dist/workflows/index.js +7 -0
  39. package/dist/workflows/index.js.map +1 -1
  40. package/dist/workflows/init.d.ts +11 -7
  41. package/dist/workflows/init.d.ts.map +1 -1
  42. package/dist/workflows/init.js +16 -107
  43. package/dist/workflows/init.js.map +1 -1
  44. package/dist/workflows/merge.d.ts +9 -13
  45. package/dist/workflows/merge.d.ts.map +1 -1
  46. package/dist/workflows/merge.js +11 -103
  47. package/dist/workflows/merge.js.map +1 -1
  48. package/dist/workflows/release.d.ts +28 -0
  49. package/dist/workflows/release.d.ts.map +1 -0
  50. package/dist/workflows/release.js +212 -0
  51. package/dist/workflows/release.js.map +1 -0
  52. package/dist/workflows/submit.d.ts +7 -1
  53. package/dist/workflows/submit.d.ts.map +1 -1
  54. package/dist/workflows/submit.js +92 -4
  55. package/dist/workflows/submit.js.map +1 -1
  56. package/dist/workflows/worktree.d.ts +62 -0
  57. package/dist/workflows/worktree.d.ts.map +1 -0
  58. package/dist/workflows/worktree.js +97 -0
  59. package/dist/workflows/worktree.js.map +1 -0
  60. package/package.json +2 -2
  61. package/dist/adapters/claude-cli-adapter.d.ts +0 -72
  62. package/dist/adapters/claude-cli-adapter.d.ts.map +0 -1
  63. package/dist/adapters/claude-cli-adapter.js +0 -232
  64. package/dist/adapters/claude-cli-adapter.js.map +0 -1
  65. package/dist/adapters/claude-sdk-adapter.d.ts +0 -49
  66. package/dist/adapters/claude-sdk-adapter.d.ts.map +0 -1
  67. package/dist/adapters/claude-sdk-adapter.js +0 -278
  68. package/dist/adapters/claude-sdk-adapter.js.map +0 -1
  69. package/dist/adapters/cursor-adapter.d.ts +0 -26
  70. package/dist/adapters/cursor-adapter.d.ts.map +0 -1
  71. package/dist/adapters/cursor-adapter.js +0 -54
  72. 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
- /** AI provider to use */
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
- /** AI model identifier */
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
- /** Implementation mode for speclife_implement (default: "claude-cli") */
67
+ /**
68
+ * @deprecated Use /openspec-apply slash command instead.
69
+ * Implementation mode for speclife_implement MCP tool.
70
+ */
32
71
  implementMode: ImplementMode;
33
- /** GitHub configuration */
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
  *
@@ -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,yBAAyB;IACzB,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAE3C,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAEhB,yEAAyE;IACzE,aAAa,EAAE,aAAa,CAAC;IAE7B,2BAA2B;IAC3B,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;CACxB;AAsBD;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,cAAc,CAAC,CAiDrF"}
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) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
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
@@ -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,GAChC,MAAM,aAAa,CAAC;AAGrB,cAAc,qBAAqB,CAAC;AAGpC,cAAc,sBAAsB,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 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,GAIX,MAAM,aAAa,CAAC;AAErB,qBAAqB;AACrB,cAAc,qBAAqB,CAAC;AAEpC,sBAAsB;AACtB,cAAc,sBAAsB,CAAC"}
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
- /** Implementation modes for speclife_implement */
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
- /** Options for the implement workflow */
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
- /** Result of the implement workflow */
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 for semantic versioning */
106
- export type VersionBumpType = 'patch' | 'minor' | 'major';
107
- /** Result of AI version bump analysis */
108
- export interface VersionAnalysis {
109
- /** Recommended bump type */
110
- bump: VersionBumpType;
111
- /** AI reasoning for the recommendation */
112
- reasoning: string;
113
- }
114
- /** Options for version bump during merge */
115
- export type VersionBumpOption = VersionBumpType | 'auto' | 'none';
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
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
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;AAwDH,+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
+ {"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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"}