@idea1/cli 1.8.1 → 1.8.3

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 (110) hide show
  1. package/README.md +93 -19
  2. package/dist/commands/approve-pr.js +5 -5
  3. package/dist/commands/approve-pr.js.map +1 -1
  4. package/dist/commands/attach-project-item.d.ts.map +1 -1
  5. package/dist/commands/attach-project-item.js +27 -7
  6. package/dist/commands/attach-project-item.js.map +1 -1
  7. package/dist/commands/help.d.ts.map +1 -1
  8. package/dist/commands/help.js +8 -6
  9. package/dist/commands/help.js.map +1 -1
  10. package/dist/commands/index.d.ts +2 -1
  11. package/dist/commands/index.d.ts.map +1 -1
  12. package/dist/commands/index.js +3 -1
  13. package/dist/commands/index.js.map +1 -1
  14. package/dist/commands/integrate.d.ts +13 -0
  15. package/dist/commands/integrate.d.ts.map +1 -0
  16. package/dist/commands/integrate.js +128 -0
  17. package/dist/commands/integrate.js.map +1 -0
  18. package/dist/commands/ready-for-approval.js +1 -1
  19. package/dist/commands/ready-for-approval.js.map +1 -1
  20. package/dist/commands/release.d.ts +4 -0
  21. package/dist/commands/release.d.ts.map +1 -1
  22. package/dist/commands/release.js +105 -20
  23. package/dist/commands/release.js.map +1 -1
  24. package/dist/commands/ship-local-changes.d.ts +8 -0
  25. package/dist/commands/ship-local-changes.d.ts.map +1 -0
  26. package/dist/commands/ship-local-changes.js +33 -0
  27. package/dist/commands/ship-local-changes.js.map +1 -0
  28. package/dist/commands/start-agent-implementation.d.ts.map +1 -1
  29. package/dist/commands/start-agent-implementation.js +8 -3
  30. package/dist/commands/start-agent-implementation.js.map +1 -1
  31. package/dist/commands/start-project-item.d.ts +27 -0
  32. package/dist/commands/start-project-item.d.ts.map +1 -0
  33. package/dist/commands/start-project-item.js +325 -0
  34. package/dist/commands/start-project-item.js.map +1 -0
  35. package/dist/commands/start.d.ts +6 -0
  36. package/dist/commands/start.d.ts.map +1 -1
  37. package/dist/commands/start.js +53 -18
  38. package/dist/commands/start.js.map +1 -1
  39. package/dist/index.js +0 -0
  40. package/dist/lib/claude-options.d.ts +3 -2
  41. package/dist/lib/claude-options.d.ts.map +1 -1
  42. package/dist/lib/claude-options.js +15 -4
  43. package/dist/lib/claude-options.js.map +1 -1
  44. package/dist/lib/settings.d.ts +13 -3
  45. package/dist/lib/settings.d.ts.map +1 -1
  46. package/dist/lib/settings.js +12 -3
  47. package/dist/lib/settings.js.map +1 -1
  48. package/dist/prompts/platform-prompts.d.ts +1 -0
  49. package/dist/prompts/platform-prompts.d.ts.map +1 -1
  50. package/dist/prompts/platform-prompts.js +7 -1
  51. package/dist/prompts/platform-prompts.js.map +1 -1
  52. package/dist/services/git.d.ts +34 -13
  53. package/dist/services/git.d.ts.map +1 -1
  54. package/dist/services/git.js +75 -39
  55. package/dist/services/git.js.map +1 -1
  56. package/dist/services/github.d.ts +15 -0
  57. package/dist/services/github.d.ts.map +1 -1
  58. package/dist/services/github.js +47 -0
  59. package/dist/services/github.js.map +1 -1
  60. package/dist/services/platform.d.ts +9 -4
  61. package/dist/services/platform.d.ts.map +1 -1
  62. package/dist/services/platform.js +10 -5
  63. package/dist/services/platform.js.map +1 -1
  64. package/dist/services/setup.d.ts.map +1 -1
  65. package/dist/services/setup.js +18 -24
  66. package/dist/services/setup.js.map +1 -1
  67. package/dist/services/workflow.d.ts +17 -0
  68. package/dist/services/workflow.d.ts.map +1 -0
  69. package/dist/services/workflow.js +39 -0
  70. package/dist/services/workflow.js.map +1 -0
  71. package/dist/types/index.d.ts +18 -24
  72. package/dist/types/index.d.ts.map +1 -1
  73. package/dist/version.d.ts +2 -1
  74. package/dist/version.d.ts.map +1 -1
  75. package/dist/version.js +3 -2
  76. package/dist/version.js.map +1 -1
  77. package/dist/workflow/engine/approval-flow.d.ts +8 -1
  78. package/dist/workflow/engine/approval-flow.d.ts.map +1 -1
  79. package/dist/workflow/engine/approval-flow.js +23 -8
  80. package/dist/workflow/engine/approval-flow.js.map +1 -1
  81. package/dist/workflow/engine/handlers/agent-implementation.d.ts +2 -1
  82. package/dist/workflow/engine/handlers/agent-implementation.d.ts.map +1 -1
  83. package/dist/workflow/engine/handlers/agent-implementation.js +12 -3
  84. package/dist/workflow/engine/handlers/agent-implementation.js.map +1 -1
  85. package/dist/workflow/engine/handlers/approve-pr.d.ts.map +1 -1
  86. package/dist/workflow/engine/handlers/approve-pr.js +11 -5
  87. package/dist/workflow/engine/handlers/approve-pr.js.map +1 -1
  88. package/dist/workflow/engine/handlers/dev-implementation.d.ts +2 -1
  89. package/dist/workflow/engine/handlers/dev-implementation.d.ts.map +1 -1
  90. package/dist/workflow/engine/handlers/dev-implementation.js +10 -2
  91. package/dist/workflow/engine/handlers/dev-implementation.js.map +1 -1
  92. package/dist/workflow/engine/handlers/ready-for-approval.d.ts +7 -1
  93. package/dist/workflow/engine/handlers/ready-for-approval.d.ts.map +1 -1
  94. package/dist/workflow/engine/handlers/ready-for-approval.js +21 -9
  95. package/dist/workflow/engine/handlers/ready-for-approval.js.map +1 -1
  96. package/dist/workflow/engine/{release-flow.d.ts → release-engine.d.ts} +77 -6
  97. package/dist/workflow/engine/release-engine.d.ts.map +1 -0
  98. package/dist/workflow/engine/{release-flow.js → release-engine.js} +279 -17
  99. package/dist/workflow/engine/release-engine.js.map +1 -0
  100. package/dist/workflow/engine/ship-flow.d.ts +87 -0
  101. package/dist/workflow/engine/ship-flow.d.ts.map +1 -0
  102. package/dist/workflow/engine/ship-flow.js +227 -0
  103. package/dist/workflow/engine/ship-flow.js.map +1 -0
  104. package/dist/workflow/engine/workflow-engine.d.ts +29 -5
  105. package/dist/workflow/engine/workflow-engine.d.ts.map +1 -1
  106. package/dist/workflow/engine/workflow-engine.js +87 -23
  107. package/dist/workflow/engine/workflow-engine.js.map +1 -1
  108. package/package.json +2 -2
  109. package/dist/workflow/engine/release-flow.d.ts.map +0 -1
  110. package/dist/workflow/engine/release-flow.js.map +0 -1
@@ -0,0 +1,128 @@
1
+ import { logger } from '../lib/logger.js';
2
+ import { promptInput, promptSelect } from '../lib/prompt.js';
3
+ import { resolveNamedList } from '../cli/named-lists.js';
4
+ import * as git from '../services/git.js';
5
+ import * as github from '../services/github.js';
6
+ import * as worktree from '../services/worktree.js';
7
+ import { INTEGRATION_KIND, PR_MODE_OPTION, createGatedPr, runPrMode, validateSourceBranch } from '../services/release-flow.js';
8
+ /**
9
+ * The integration branch to integrate: the one given, else the current branch when it is one,
10
+ * else a pick from the integration branches on origin.
11
+ */
12
+ async function resolveIntegrationBranch(cliBranch) {
13
+ const integrationBranches = await worktree.listExistingIntegrationBranches();
14
+ if (cliBranch) {
15
+ if (!integrationBranches.includes(cliBranch)) {
16
+ throw new Error(`'${cliBranch}' is not an integration branch on origin.` +
17
+ (integrationBranches.length > 0 ? `\nIntegration branches: ${integrationBranches.join(', ')}` : ''));
18
+ }
19
+ return cliBranch;
20
+ }
21
+ const currentBranch = await git.getCurrentBranch();
22
+ if (integrationBranches.includes(currentBranch)) {
23
+ return currentBranch;
24
+ }
25
+ if (integrationBranches.length === 0) {
26
+ throw new Error('No integration branches exist on origin.');
27
+ }
28
+ return promptSelect('Which integration branch?', integrationBranches.map(branch => ({ label: branch, value: branch })));
29
+ }
30
+ async function promptAssignee() {
31
+ return promptSelect('Who approves this integration by merging its PR? (the approver of record)', await resolveNamedList('github-members'));
32
+ }
33
+ async function promptPrTitle(integrationBranch) {
34
+ const integrationName = await worktree.extractIntegrationName(integrationBranch);
35
+ const defaultTitle = `Integration ${integrationName} ${new Date().toISOString().split('T')[0]}`;
36
+ return promptInput('Enter PR title:', { default: defaultTitle });
37
+ }
38
+ /**
39
+ * Stage 1 of change management for an integration branch (change-management-policy.md clause 2):
40
+ * the work items merged into `working/integration/<name>-main` were each approved there by their
41
+ * assignee; this command carries the integration branch into the release branch through its own
42
+ * PR, assigned to its approver. The assignee approves by merging it - after the required CI/CD
43
+ * checks pass - with the same sequence and the same recorded admin override as `idea1 release`.
44
+ *
45
+ * Creating the PR and merging it are usually done by different people at different times, so
46
+ * the command reuses an open PR when one exists and the assignee runs it in `merge` mode.
47
+ */
48
+ export const integrateCommand = {
49
+ name: 'integrate',
50
+ aliases: ['int'],
51
+ description: 'Open the PR from an integration branch into the release branch, assigned to its approver, and (as the assignee) merge it once the checks pass',
52
+ options: [
53
+ {
54
+ longName: 'branch',
55
+ shortName: 'b',
56
+ description: 'Integration branch to integrate (default: the current branch, or a pick from origin)',
57
+ defaultValue: '',
58
+ promptWhenDefaultExists: false
59
+ },
60
+ {
61
+ longName: 'target',
62
+ shortName: 't',
63
+ description: 'Branch to integrate into (default: baseBranch)',
64
+ defaultValue: '',
65
+ promptWhenDefaultExists: false
66
+ },
67
+ {
68
+ longName: 'assignee',
69
+ shortName: 'a',
70
+ description: 'Who approves the integration by merging its PR - the approver of record (prompted when the PR is created)',
71
+ defaultValue: '',
72
+ promptWhenDefaultExists: false
73
+ },
74
+ PR_MODE_OPTION,
75
+ {
76
+ longName: 'title',
77
+ description: 'PR title',
78
+ defaultValue: '',
79
+ promptWhenDefaultExists: false
80
+ }
81
+ ],
82
+ async execute(resolved) {
83
+ const branchArg = resolved['branch'] || undefined;
84
+ const targetArg = resolved['target'] || undefined;
85
+ const assigneeArg = resolved['assignee'] || undefined;
86
+ const prMode = resolved['pr-mode'];
87
+ const titleArg = resolved['title'] || undefined;
88
+ await github.ensureGitHubCli();
89
+ const integrationBranch = await resolveIntegrationBranch(branchArg);
90
+ const targetBranch = targetArg ?? await worktree.resolveBaseBranch();
91
+ logger.header(`Integration: ${integrationBranch} -> ${targetBranch}`);
92
+ logger.newline();
93
+ logger.info(`PR mode: ${prMode}`);
94
+ logger.newline();
95
+ const existingPr = await github.checkPrExists(integrationBranch, targetBranch);
96
+ let prUrl;
97
+ if (existingPr) {
98
+ logger.info(`Using the open PR #${existingPr.number}`);
99
+ prUrl = existingPr.url;
100
+ }
101
+ else {
102
+ await validateSourceBranch(integrationBranch);
103
+ const assignee = assigneeArg ?? await promptAssignee();
104
+ const prTitle = titleArg ?? await promptPrTitle(integrationBranch);
105
+ logger.info(`Using title: ${prTitle}`);
106
+ logger.newline();
107
+ prUrl = await createGatedPr({
108
+ sourceBranch: integrationBranch,
109
+ targetBranch,
110
+ title: prTitle,
111
+ assignee,
112
+ kind: INTEGRATION_KIND
113
+ });
114
+ }
115
+ logger.newline();
116
+ await runPrMode({
117
+ mode: prMode,
118
+ sourceBranch: integrationBranch,
119
+ targetBranch,
120
+ prUrl,
121
+ kind: INTEGRATION_KIND,
122
+ openActionsAfterMerge: false
123
+ });
124
+ logger.newline();
125
+ logger.hint(`PR: ${prUrl}`);
126
+ }
127
+ };
128
+ //# sourceMappingURL=integrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrate.js","sourceRoot":"","sources":["../../src/commands/integrate.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import * as git from '../services/git.js';
6
6
  import * as github from '../services/github.js';
7
7
  import * as worktree from '../services/worktree.js';
8
8
  import { ensurePrReadyForApproval } from '../workflow/engine/approval-flow.js';
9
- import { validateSourceBranch } from '../workflow/engine/release-flow.js';
9
+ import { validateSourceBranch } from '../workflow/engine/release-engine.js';
10
10
  import { advanceAsNeededTo, resolveTransitionIfManaged } from '../workflow/engine/workflow-engine.js';
11
11
  import { deferredHandlerOptions } from '../workflow/engine/handlers/index.js';
12
12
  import { readyForApprovalHandler } from '../workflow/engine/handlers/ready-for-approval.js';
@@ -1 +1 @@
1
- {"version":3,"file":"ready-for-approval.js","sourceRoot":"","sources":["../../src/commands/ready-for-approval.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ready-for-approval.js","sourceRoot":"","sources":["../../src/commands/ready-for-approval.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,10 @@ import type { Command } from '../types/index.js';
5
5
  * releaser and the approver, and their merge is the recorded approval. No review is required:
6
6
  * every change in the release was already approved on its own PR, and the body lists them. What
7
7
  * this stage gates is the build - the required CI/CD checks must pass before the merge.
8
+ *
9
+ * Before the PR is opened, the packages that changed since the last release get their version
10
+ * bumps, committed and pushed to the release branch by this command. `--approve` instead approves
11
+ * and merges the release PR that is already open.
8
12
  */
9
13
  export declare const releaseCommand: Command;
10
14
  //# sourceMappingURL=release.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../src/commands/release.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AA4DjD;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,OAuE5B,CAAC"}
1
+ {"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../src/commands/release.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAkJjD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,EAAE,OAgG5B,CAAC"}
@@ -1,10 +1,9 @@
1
1
  import { logger } from '../lib/logger.js';
2
- import { readBranchSettings } from '../lib/settings.js';
3
- import { promptInput } from '../lib/prompt.js';
4
- import { runHook } from '../services/hooks.js';
2
+ import { readBranchSettings, readReleaseSettings } from '../lib/settings.js';
3
+ import { promptInput, promptSelect } from '../lib/prompt.js';
5
4
  import * as git from '../services/git.js';
6
5
  import * as github from '../services/github.js';
7
- import { PR_MODE_OPTION, RELEASE_KIND, createGatedPr, runPrMode, validateSourceBranch } from '../workflow/engine/release-flow.js';
6
+ import { PR_MODE_OPTION, RELEASE_KIND, VERSION_BUMP_TYPES, approveRelease, commitVersionBumps, createGatedPr, detectPendingVersionBumps, runPrMode, validateSourceBranch } from '../workflow/engine/release-engine.js';
8
7
  /**
9
8
  * Resolve the release branch (source branch)
10
9
  */
@@ -12,7 +11,7 @@ async function resolveReleaseBranch(cliBranch) {
12
11
  if (cliBranch) {
13
12
  return cliBranch;
14
13
  }
15
- return (await readBranchSettings(await git.getRepoRoot())).releaseBranch;
14
+ return (await readBranchSettings(await git.getRepoRoot())).baseBranch;
16
15
  }
17
16
  /**
18
17
  * Resolve the target branch
@@ -31,30 +30,96 @@ async function promptPrTitle() {
31
30
  return promptInput('Enter PR title:', { default: defaultTitle });
32
31
  }
33
32
  /**
34
- * Release-time automation declared by the repository (`pre-release` in .idea1/settings.json -
35
- * here the version bumps). It runs before the PR is opened so the PR's head, and the one CI/CD
36
- * run the release is gated on, already include whatever it committed.
33
+ * Why a `--bumps` value is malformed, or undefined when it is well formed: comma-separated
34
+ * `<package>=<patch|minor|major>` entries, e.g. `filekit=minor,cli=patch`.
37
35
  */
38
- async function runPreReleaseHook() {
39
- logger.step('Running pre-release hook...');
36
+ function bumpsOptionError(value) {
37
+ for (const entry of value.split(',').map(part => part.trim()).filter(part => part.length > 0)) {
38
+ const [name, type, ...rest] = entry.split('=').map(part => part.trim());
39
+ if (!name || rest.length > 0 || !VERSION_BUMP_TYPES.includes(type)) {
40
+ return `"${entry}" is not <package>=<${VERSION_BUMP_TYPES.join('|')}> (e.g. filekit=minor,cli=patch)`;
41
+ }
42
+ }
43
+ return undefined;
44
+ }
45
+ /** The bump types a well-formed `--bumps` value names, by package name. */
46
+ function parseBumpsOption(value) {
47
+ return new Map(value.split(',')
48
+ .map(part => part.trim())
49
+ .filter(part => part.length > 0)
50
+ .map(entry => {
51
+ const [name, type] = entry.split('=').map(part => part.trim());
52
+ return [name, type];
53
+ }));
54
+ }
55
+ /**
56
+ * Bump the versions of the packages that changed since the last release, before the PR is opened,
57
+ * so the PR's head - and the one CI/CD run the release is gated on - already carries them. The
58
+ * bump is made here, in the local checkout: the packages' `package.json` and lockfiles are edited,
59
+ * committed and pushed to the release branch. Nothing is asked, and nothing is committed, when no
60
+ * versioned package needs a bump or the repository declares none. A bump is never made onto an
61
+ * open release PR, which may already be approved.
62
+ */
63
+ async function bumpPendingVersions(sourceBranch, targetBranch, requestedBumps) {
40
64
  const repoRoot = await git.getRepoRoot();
41
- const hookResult = await runHook('pre-release', repoRoot);
42
- if (!hookResult.success) {
43
- throw new Error('Pre-release hook failed. Aborting release.');
65
+ const settings = await readReleaseSettings(repoRoot);
66
+ if (settings.versionedPackages.length === 0) {
67
+ if (requestedBumps.size > 0) {
68
+ throw new Error('--bumps was given, but this repository declares no release.versionedPackages in .idea1/settings.json.');
69
+ }
70
+ return;
71
+ }
72
+ const knownNames = settings.versionedPackages.map(pkg => pkg.name);
73
+ const unknownNames = [...requestedBumps.keys()].filter(name => !knownNames.includes(name));
74
+ if (unknownNames.length > 0) {
75
+ throw new Error(`--bumps names unknown package(s): ${unknownNames.join(', ')}. ` +
76
+ `The versioned packages are: ${knownNames.join(', ')}.`);
77
+ }
78
+ if (await github.checkPrExists(sourceBranch, targetBranch)) {
79
+ logger.dim('A release PR is already open, so no version bump is made onto it');
80
+ logger.newline();
81
+ return;
82
+ }
83
+ logger.step('Checking which versioned packages changed since the last release...');
84
+ const pending = await detectPendingVersionBumps(settings.versionedPackages, sourceBranch, targetBranch);
85
+ if (pending.length === 0) {
86
+ logger.success('No versioned package needs a version bump');
87
+ logger.newline();
88
+ return;
89
+ }
90
+ const bumps = {};
91
+ for (const pkg of pending) {
92
+ bumps[pkg.name] = requestedBumps.get(pkg.name) ?? await promptBumpType(pkg);
93
+ }
94
+ for (const name of requestedBumps.keys()) {
95
+ if (!(name in bumps)) {
96
+ logger.dim(`${name} is unchanged or already bumped for this release - ignoring its --bumps entry`);
97
+ }
44
98
  }
45
99
  logger.newline();
100
+ await commitVersionBumps({ releaseBranch: sourceBranch, pending, bumps });
101
+ logger.newline();
102
+ }
103
+ async function promptBumpType(pkg) {
104
+ return await promptSelect(`The ${pkg.label} (${pkg.currentVersion}) changed since the last release - version bump:`, VERSION_BUMP_TYPES.map(type => ({ label: type, value: type })), { default: 'patch' });
46
105
  }
106
+ const isApprove = (resolved) => resolved['approve'] === 'true';
47
107
  /**
48
108
  * Stage 2 of change management (change-management-policy.md clause 2): the release PR from the
49
109
  * release branch into main. It is assigned to the person who runs the command - they are the
50
110
  * releaser and the approver, and their merge is the recorded approval. No review is required:
51
111
  * every change in the release was already approved on its own PR, and the body lists them. What
52
112
  * this stage gates is the build - the required CI/CD checks must pass before the merge.
113
+ *
114
+ * Before the PR is opened, the packages that changed since the last release get their version
115
+ * bumps, committed and pushed to the release branch by this command. `--approve` instead approves
116
+ * and merges the release PR that is already open.
53
117
  */
54
118
  export const releaseCommand = {
55
119
  name: 'release',
56
120
  aliases: ['r', 'rel'],
57
- description: 'Open the release PR from the release branch into main, assigned to you, and merge it once the checks pass',
121
+ description: 'Bump the versions of changed packages, open the release PR from the release branch into main assigned to you, ' +
122
+ 'and merge it once the checks pass (--approve merges the open release PR)',
58
123
  options: [
59
124
  {
60
125
  longName: 'branch',
@@ -70,26 +135,46 @@ export const releaseCommand = {
70
135
  defaultValue: '',
71
136
  promptWhenDefaultExists: false
72
137
  },
73
- PR_MODE_OPTION,
138
+ {
139
+ longName: 'approve',
140
+ description: 'Approve and merge the open release PR instead of opening one',
141
+ isFlag: true
142
+ },
143
+ {
144
+ longName: 'bumps',
145
+ description: 'Version bump per changed package, e.g. filekit=minor,cli=patch (changed packages not named are prompted)',
146
+ defaultValue: '',
147
+ promptWhenDefaultExists: false,
148
+ validate: bumpsOptionError,
149
+ dependsOn: resolved => !isApprove(resolved)
150
+ },
151
+ { ...PR_MODE_OPTION, dependsOn: resolved => !isApprove(resolved) },
74
152
  {
75
153
  longName: 'title',
76
154
  description: 'PR title',
77
155
  defaultValue: '',
78
- promptWhenDefaultExists: false
156
+ promptWhenDefaultExists: false,
157
+ dependsOn: resolved => !isApprove(resolved)
79
158
  }
80
159
  ],
81
160
  async execute(resolved) {
82
161
  const branchArg = resolved['branch'] || undefined;
83
162
  const targetArg = resolved['target'] || undefined;
84
- const prMode = resolved['pr-mode'];
85
- const titleArg = resolved['title'] || undefined;
86
163
  const sourceBranch = await resolveReleaseBranch(branchArg);
87
164
  const targetBranch = await resolveTargetBranch(targetArg);
165
+ await github.ensureGitHubCli();
166
+ if (isApprove(resolved)) {
167
+ logger.header(`Approve release: ${sourceBranch} -> ${targetBranch}`);
168
+ logger.newline();
169
+ await approveRelease(sourceBranch, targetBranch);
170
+ return;
171
+ }
172
+ const prMode = resolved['pr-mode'];
173
+ const titleArg = resolved['title'] || undefined;
88
174
  logger.header(`Release: ${sourceBranch} -> ${targetBranch}`);
89
175
  logger.newline();
90
- await github.ensureGitHubCli();
91
176
  await validateSourceBranch(sourceBranch);
92
- await runPreReleaseHook();
177
+ await bumpPendingVersions(sourceBranch, targetBranch, parseBumpsOption(resolved['bumps']));
93
178
  const prTitle = titleArg ?? await promptPrTitle();
94
179
  logger.info(`Using title: ${prTitle}`);
95
180
  logger.info(`PR mode: ${prMode}`);
@@ -1 +1 @@
1
- {"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/commands/release.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/commands/release.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Command } from '../types/index.js';
2
+ /**
3
+ * `start --carry-local-changes --approve-and-merge` with nothing asked beyond what a new item
4
+ * needs (its title and Project): the uncommitted changes of the base branch checkout become a
5
+ * project item's branch and PR, which merges into the base branch once the required checks pass.
6
+ */
7
+ export declare const shipLocalChangesCommand: Command;
8
+ //# sourceMappingURL=ship-local-changes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-local-changes.d.ts","sourceRoot":"","sources":["../../src/commands/ship-local-changes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAWjD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,OAuBrC,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { isolationModeOption } from '../lib/isolation.js';
2
+ import { branchCreationOptions } from '../workflow/engine/branch-setup.js';
3
+ import { approveAndMergeOption, carryLocalChangesOption, commitMessageOption, unpromptedReviewersOption } from '../workflow/engine/ship-flow.js';
4
+ import { projectItemTargetOptions, startProjectItem } from './start.js';
5
+ /**
6
+ * `start --carry-local-changes --approve-and-merge` with nothing asked beyond what a new item
7
+ * needs (its title and Project): the uncommitted changes of the base branch checkout become a
8
+ * project item's branch and PR, which merges into the base branch once the required checks pass.
9
+ */
10
+ export const shipLocalChangesCommand = {
11
+ name: 'ship-local-changes',
12
+ aliases: ['ship'],
13
+ description: 'Ship the uncommitted changes of your base branch checkout: create a project item and its branch, commit and push the changes there, and advance it through approval, merging its PR once the checks pass',
14
+ options: [
15
+ ...projectItemTargetOptions.map(option => option.longName === 'url'
16
+ ? { ...option, description: 'Project item URL (default: create a new item)', promptWhenDefaultExists: false }
17
+ : option),
18
+ ...branchCreationOptions
19
+ .filter(option => option.longName !== 'workflow-type')
20
+ .map(option => ({ ...option, defaultValue: '', promptWhenDefaultExists: false })),
21
+ commitMessageOption,
22
+ { ...isolationModeOption, description: 'Where to work on the branch while it is shipped', defaultValue: 'worktree', promptWhenDefaultExists: false },
23
+ unpromptedReviewersOption
24
+ ],
25
+ async execute(resolved) {
26
+ await startProjectItem({
27
+ ...resolved,
28
+ [carryLocalChangesOption.longName]: 'true',
29
+ [approveAndMergeOption.longName]: 'true'
30
+ });
31
+ }
32
+ };
33
+ //# sourceMappingURL=ship-local-changes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-local-changes.js","sourceRoot":"","sources":["../../src/commands/ship-local-changes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,yBAAyB,EAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAExE;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAY;IAC9C,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,CAAC,MAAM,CAAC;IACjB,WAAW,EAAE,0MAA0M;IACvN,OAAO,EAAE;QACP,GAAG,wBAAwB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK;YACjE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,+CAA+C,EAAE,uBAAuB,EAAE,KAAK,EAAE;YAC7G,CAAC,CAAC,MAAM,CAAC;QACX,GAAG,qBAAqB;aACrB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,eAAe,CAAC;aACrD,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,CAAC;QACnF,mBAAmB;QACnB,EAAE,GAAG,mBAAmB,EAAE,WAAW,EAAE,iDAAiD,EAAE,YAAY,EAAE,UAAU,EAAE,uBAAuB,EAAE,KAAK,EAAE;QACpJ,yBAAyB;KAC1B;IAED,KAAK,CAAC,OAAO,CAAC,QAAgC;QAC5C,MAAM,gBAAgB,CAAC;YACrB,GAAG,QAAQ;YACX,CAAC,uBAAuB,CAAC,QAAQ,CAAC,EAAE,MAAM;YAC1C,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,MAAM;SACzC,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"start-agent-implementation.d.ts","sourceRoot":"","sources":["../../src/commands/start-agent-implementation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAQjD,eAAO,MAAM,+BAA+B,EAAE,OAsC7C,CAAC"}
1
+ {"version":3,"file":"start-agent-implementation.d.ts","sourceRoot":"","sources":["../../src/commands/start-agent-implementation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AASjD,eAAO,MAAM,+BAA+B,EAAE,OA8C7C,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { logger } from '../lib/logger.js';
2
+ import { promptConfirm } from '../lib/prompt.js';
2
3
  import { WorkflowStates, isStateAtOrAfter } from '../workflow/data/workflow-states.js';
3
4
  import { branchCreationOptions } from '../workflow/engine/branch-setup.js';
4
5
  import { advanceAsNeededTo, reenterState, resolveTransition } from '../workflow/engine/workflow-engine.js';
@@ -8,7 +9,7 @@ export const startAgentImplementationCommand = {
8
9
  name: 'start-agent-implementation',
9
10
  // 'start-project-item' is kept so existing team command templates keep working.
10
11
  aliases: ['implement', 'sai', 'start-project-item'],
11
- description: 'Start implementing a project item: put it under workflow management, move it to Agent Implementation and launch Claude',
12
+ description: 'Start implementing a project item: put it under workflow management, move it to Agent Implementation and launch Claude (asking first when the item is already there)',
12
13
  options: [
13
14
  ...projectItemTargetOptions,
14
15
  ...branchCreationOptions,
@@ -27,8 +28,12 @@ export const startAgentImplementationCommand = {
27
28
  }
28
29
  logger.section('Agent Implementation');
29
30
  if (transition.currentState === WorkflowStates.AgentImplementation) {
30
- // Nothing to transition: set up the working environment and launch Claude.
31
- logger.info('The item is already in Agent Implementation — setting up the working environment.');
31
+ // Nothing to transition: set up the working environment and launch Claude, once the user confirms.
32
+ const relaunch = await promptConfirm(`${projectItemUrl} is already in Agent Implementation. Set up its working environment and launch a new Claude session?`, { default: true });
33
+ if (!relaunch) {
34
+ logger.info('No Claude session was launched.');
35
+ return;
36
+ }
32
37
  await reenterState(transition, WorkflowStates.AgentImplementation);
33
38
  return;
34
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"start-agent-implementation.js","sourceRoot":"","sources":["../../src/commands/start-agent-implementation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC3G,OAAO,EAAE,0BAA0B,EAAE,MAAM,qDAAqD,CAAC;AACjG,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAElF,MAAM,CAAC,MAAM,+BAA+B,GAAY;IACtD,IAAI,EAAE,4BAA4B;IAClC,gFAAgF;IAChF,OAAO,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,oBAAoB,CAAC;IACnD,WAAW,EAAE,wHAAwH;IACrI,OAAO,EAAE;QACP,GAAG,wBAAwB;QAC3B,GAAG,qBAAqB;QACxB,GAAG,CAAC,0BAA0B,CAAC,OAAO,IAAI,EAAE,CAAC;KAC9C;IAED,KAAK,CAAC,OAAO,CAAC,QAAgC;QAC5C,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC3C,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAElF,IAAI,UAAU,CAAC,YAAY,IAAI,gBAAgB,CAAC,UAAU,CAAC,YAAY,EAAE,cAAc,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC3G,MAAM,IAAI,KAAK,CACb,GAAG,cAAc,iDAAiD,UAAU,CAAC,YAAY,KAAK;gBAC9F,mDAAmD,cAAc,oCAAoC,CACtG,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAEvC,IAAI,UAAU,CAAC,YAAY,KAAK,cAAc,CAAC,mBAAmB,EAAE,CAAC;YACnE,2EAA2E;YAC3E,MAAM,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAC;YACjG,MAAM,YAAY,CAAC,UAAU,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;YACnE,OAAO;QACT,CAAC;QAED,MAAM,iBAAiB,CAAC,UAAU,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;IAC1E,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"start-agent-implementation.js","sourceRoot":"","sources":["../../src/commands/start-agent-implementation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC3G,OAAO,EAAE,0BAA0B,EAAE,MAAM,qDAAqD,CAAC;AACjG,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAElF,MAAM,CAAC,MAAM,+BAA+B,GAAY;IACtD,IAAI,EAAE,4BAA4B;IAClC,gFAAgF;IAChF,OAAO,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,oBAAoB,CAAC;IACnD,WAAW,EAAE,sKAAsK;IACnL,OAAO,EAAE;QACP,GAAG,wBAAwB;QAC3B,GAAG,qBAAqB;QACxB,GAAG,CAAC,0BAA0B,CAAC,OAAO,IAAI,EAAE,CAAC;KAC9C;IAED,KAAK,CAAC,OAAO,CAAC,QAAgC;QAC5C,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC3C,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAElF,IAAI,UAAU,CAAC,YAAY,IAAI,gBAAgB,CAAC,UAAU,CAAC,YAAY,EAAE,cAAc,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC3G,MAAM,IAAI,KAAK,CACb,GAAG,cAAc,iDAAiD,UAAU,CAAC,YAAY,KAAK;gBAC9F,mDAAmD,cAAc,oCAAoC,CACtG,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAEvC,IAAI,UAAU,CAAC,YAAY,KAAK,cAAc,CAAC,mBAAmB,EAAE,CAAC;YACnE,mGAAmG;YACnG,MAAM,QAAQ,GAAG,MAAM,aAAa,CAClC,GAAG,cAAc,sGAAsG,EACvH,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAC;YACF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;gBAC/C,OAAO;YACT,CAAC;YAED,MAAM,YAAY,CAAC,UAAU,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;YACnE,OAAO;QACT,CAAC;QAED,MAAM,iBAAiB,CAAC,UAAU,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;IAC1E,CAAC;CACF,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { Command, ClaudePermissionMode, ClaudeEffortLevel } from '../types/index.js';
2
+ export declare const VALID_PERMISSION_MODES: ClaudePermissionMode[];
3
+ export declare const VALID_EFFORT_LEVELS: ClaudeEffortLevel[];
4
+ export declare const WORKFLOW_CHOICES: {
5
+ label: string;
6
+ value: string;
7
+ }[];
8
+ export interface IntegrationBranchSelection {
9
+ integrationName: string;
10
+ integrationBranchName: string;
11
+ isNew: boolean;
12
+ }
13
+ /**
14
+ * Prompt the user whether to stack this branch on another and resolve the
15
+ * chosen stack branch. Prompt-only: performs no branch writes. Returns the
16
+ * resolved stack branch name, or null when the user opts not to stack.
17
+ * Shared by start-project-item and attach-project-item.
18
+ */
19
+ export declare function promptForStackBranch(): Promise<string | null>;
20
+ /**
21
+ * Prompt the user for integration-branch selection. Prompt-only: does not
22
+ * perform any branch writes. Must be invoked before setWorkflowStatus so the
23
+ * user completes all setup questions up front.
24
+ */
25
+ export declare function promptForIntegrationBranch(): Promise<IntegrationBranchSelection>;
26
+ export declare const startProjectItemCommand: Command;
27
+ //# sourceMappingURL=start-project-item.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-project-item.d.ts","sourceRoot":"","sources":["../../src/commands/start-project-item.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAwB,iBAAiB,EAAkC,MAAM,mBAAmB,CAAC;AAUhJ,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,EAAmF,CAAC;AAE7I,eAAO,MAAM,mBAAmB,EAAE,iBAAiB,EAA8C,CAAC;AAQlG,eAAO,MAAM,gBAAgB;;;GAG5B,CAAC;AAkBF,MAAM,WAAW,0BAA0B;IACzC,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA6BnE;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,0BAA0B,CAAC,CAoBtF;AAED,eAAO,MAAM,uBAAuB,EAAE,OAqLrC,CAAC"}