@idea1/cli 1.5.2 → 1.7.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/README.md +123 -92
- package/dist/commands/approve-pr.d.ts.map +1 -1
- package/dist/commands/approve-pr.js +7 -163
- package/dist/commands/approve-pr.js.map +1 -1
- package/dist/commands/attach-project-item.d.ts.map +1 -1
- package/dist/commands/attach-project-item.js +38 -89
- package/dist/commands/attach-project-item.js.map +1 -1
- package/dist/commands/close-worktree.d.ts.map +1 -1
- package/dist/commands/close-worktree.js +12 -9
- package/dist/commands/close-worktree.js.map +1 -1
- package/dist/commands/create-worktree.d.ts.map +1 -1
- package/dist/commands/create-worktree.js +3 -2
- package/dist/commands/create-worktree.js.map +1 -1
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +19 -14
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/index.d.ts +3 -2
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +5 -3
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/join-project-item.d.ts.map +1 -1
- package/dist/commands/join-project-item.js +38 -77
- package/dist/commands/join-project-item.js.map +1 -1
- package/dist/commands/next-workflow-step.d.ts.map +1 -1
- package/dist/commands/next-workflow-step.js +66 -51
- package/dist/commands/next-workflow-step.js.map +1 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +5 -3
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/ready-for-approval.d.ts.map +1 -1
- package/dist/commands/ready-for-approval.js +7 -66
- package/dist/commands/ready-for-approval.js.map +1 -1
- package/dist/commands/release.d.ts.map +1 -1
- package/dist/commands/release.js +5 -4
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/start-agent-implementation.d.ts +3 -0
- package/dist/commands/start-agent-implementation.d.ts.map +1 -0
- package/dist/commands/start-agent-implementation.js +41 -0
- package/dist/commands/start-agent-implementation.js.map +1 -0
- package/dist/commands/start-dev-implementation.d.ts.map +1 -1
- package/dist/commands/start-dev-implementation.js +8 -55
- package/dist/commands/start-dev-implementation.js.map +1 -1
- package/dist/commands/start.d.ts +13 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +81 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +29 -9
- package/dist/interactive.js.map +1 -1
- package/dist/lib/claude-options.d.ts +33 -0
- package/dist/lib/claude-options.d.ts.map +1 -0
- package/dist/lib/claude-options.js +83 -0
- package/dist/lib/claude-options.js.map +1 -0
- package/dist/lib/settings.d.ts +18 -0
- package/dist/lib/settings.d.ts.map +1 -1
- package/dist/lib/settings.js +23 -5
- package/dist/lib/settings.js.map +1 -1
- package/dist/lib/workflow-states.d.ts +21 -3
- package/dist/lib/workflow-states.d.ts.map +1 -1
- package/dist/lib/workflow-states.generated.d.ts +21 -0
- package/dist/lib/workflow-states.generated.d.ts.map +1 -0
- package/dist/lib/workflow-states.generated.js +34 -0
- package/dist/lib/workflow-states.generated.js.map +1 -0
- package/dist/lib/workflow-states.js +47 -26
- package/dist/lib/workflow-states.js.map +1 -1
- package/dist/services/branch-setup.d.ts +42 -0
- package/dist/services/branch-setup.d.ts.map +1 -0
- package/dist/services/branch-setup.js +118 -0
- package/dist/services/branch-setup.js.map +1 -0
- package/dist/services/claude.d.ts +14 -4
- package/dist/services/claude.d.ts.map +1 -1
- package/dist/services/claude.js +39 -4
- package/dist/services/claude.js.map +1 -1
- package/dist/services/config.d.ts +3 -3
- package/dist/services/config.d.ts.map +1 -1
- package/dist/services/config.js +6 -4
- package/dist/services/config.js.map +1 -1
- package/dist/services/git.d.ts +66 -0
- package/dist/services/git.d.ts.map +1 -1
- package/dist/services/git.js +188 -8
- package/dist/services/git.js.map +1 -1
- package/dist/services/setup.d.ts +3 -1
- package/dist/services/setup.d.ts.map +1 -1
- package/dist/services/setup.js +19 -7
- package/dist/services/setup.js.map +1 -1
- package/dist/services/workflow-engine.d.ts +67 -0
- package/dist/services/workflow-engine.d.ts.map +1 -0
- package/dist/services/workflow-engine.js +371 -0
- package/dist/services/workflow-engine.js.map +1 -0
- package/dist/services/workflow-handlers/agent-implementation.d.ts +9 -0
- package/dist/services/workflow-handlers/agent-implementation.d.ts.map +1 -0
- package/dist/services/workflow-handlers/agent-implementation.js +37 -0
- package/dist/services/workflow-handlers/agent-implementation.js.map +1 -0
- package/dist/services/workflow-handlers/approve-pr.d.ts +8 -0
- package/dist/services/workflow-handlers/approve-pr.d.ts.map +1 -0
- package/dist/services/workflow-handlers/approve-pr.js +161 -0
- package/dist/services/workflow-handlers/approve-pr.js.map +1 -0
- package/dist/services/workflow-handlers/dev-implementation.d.ts +8 -0
- package/dist/services/workflow-handlers/dev-implementation.d.ts.map +1 -0
- package/dist/services/workflow-handlers/dev-implementation.js +34 -0
- package/dist/services/workflow-handlers/dev-implementation.js.map +1 -0
- package/dist/services/workflow-handlers/index.d.ts +18 -0
- package/dist/services/workflow-handlers/index.d.ts.map +1 -0
- package/dist/services/workflow-handlers/index.js +36 -0
- package/dist/services/workflow-handlers/index.js.map +1 -0
- package/dist/services/workflow-handlers/ready-for-approval.d.ts +8 -0
- package/dist/services/workflow-handlers/ready-for-approval.d.ts.map +1 -0
- package/dist/services/workflow-handlers/ready-for-approval.js +60 -0
- package/dist/services/workflow-handlers/ready-for-approval.js.map +1 -0
- package/dist/services/workflow.d.ts +1 -21
- package/dist/services/workflow.d.ts.map +1 -1
- package/dist/services/workflow.js +1 -67
- package/dist/services/workflow.js.map +1 -1
- package/dist/services/worktree.d.ts +23 -33
- package/dist/services/worktree.d.ts.map +1 -1
- package/dist/services/worktree.js +61 -140
- package/dist/services/worktree.js.map +1 -1
- package/dist/types/index.d.ts +41 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
- package/dist/commands/start-project-item.d.ts +0 -27
- package/dist/commands/start-project-item.d.ts.map +0 -1
- package/dist/commands/start-project-item.js +0 -325
- package/dist/commands/start-project-item.js.map +0 -1
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { basename } from 'path';
|
|
2
1
|
import { logger } from '../lib/logger.js';
|
|
3
2
|
import { isolationModeOption, resolveIsolationMode } from '../lib/isolation.js';
|
|
3
|
+
import { claudeSessionOptions, resolveClaudeSessionOptions } from '../lib/claude-options.js';
|
|
4
|
+
import { WorkflowStates, normalizeWorkflowState } from '../lib/workflow-states.js';
|
|
5
|
+
import { validateProjectItemUrl } from '../lib/project-item-url.js';
|
|
4
6
|
import * as git from '../services/git.js';
|
|
5
7
|
import * as worktree from '../services/worktree.js';
|
|
6
8
|
import * as claude from '../services/claude.js';
|
|
7
9
|
import * as github from '../services/github.js';
|
|
8
|
-
import {
|
|
9
|
-
import { normalizeWorkflowState } from '../lib/workflow-states.js';
|
|
10
|
-
import { startProjectItemCommand, VALID_PERMISSION_MODES, VALID_EFFORT_LEVELS } from './start-project-item.js';
|
|
10
|
+
import { ensureManaged, resolveContext, syncBranchStateFromRemote } from '../services/workflow-engine.js';
|
|
11
11
|
export const joinProjectItemCommand = {
|
|
12
12
|
name: 'join-project-item',
|
|
13
13
|
aliases: ['j', 'join'],
|
|
@@ -47,64 +47,34 @@ export const joinProjectItemCommand = {
|
|
|
47
47
|
promptWhenDefaultExists: false
|
|
48
48
|
},
|
|
49
49
|
isolationModeOption,
|
|
50
|
-
|
|
51
|
-
longName: 'permission-mode',
|
|
52
|
-
shortName: 'pm',
|
|
53
|
-
description: 'Claude permission mode',
|
|
54
|
-
defaultValue: 'plan',
|
|
55
|
-
promptWhenDefaultExists: false,
|
|
56
|
-
choices: VALID_PERMISSION_MODES.map(m => ({ label: m, value: m })),
|
|
57
|
-
validate: (value) => VALID_PERMISSION_MODES.includes(value)
|
|
58
|
-
? undefined
|
|
59
|
-
: `Must be one of: ${VALID_PERMISSION_MODES.join(', ')}`
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
longName: 'effort',
|
|
63
|
-
shortName: 'e',
|
|
64
|
-
description: 'Claude effort level (reasoning depth)',
|
|
65
|
-
defaultValue: 'high',
|
|
66
|
-
promptWhenDefaultExists: false,
|
|
67
|
-
choices: VALID_EFFORT_LEVELS.map(l => ({ label: l, value: l })),
|
|
68
|
-
validate: (value) => VALID_EFFORT_LEVELS.includes(value)
|
|
69
|
-
? undefined
|
|
70
|
-
: `Must be one of: ${VALID_EFFORT_LEVELS.join(', ')}`
|
|
71
|
-
}
|
|
50
|
+
...claudeSessionOptions(false)
|
|
72
51
|
],
|
|
73
52
|
async execute(resolved) {
|
|
74
53
|
const sourcePath = resolved['source-path'];
|
|
75
|
-
const permissionMode = (resolved['permission-mode'] ?? 'plan');
|
|
76
|
-
const effort = (resolved['effort'] ?? 'high');
|
|
77
54
|
const url = resolved['project-item-url'] || undefined;
|
|
78
55
|
const branchArg = resolved['branch-name'] || undefined;
|
|
79
56
|
const prUrl = resolved['pull-request-url'] || undefined;
|
|
80
57
|
const isolationMode = resolveIsolationMode(resolved);
|
|
58
|
+
const { permissionMode, model, effort } = resolveClaudeSessionOptions(resolved);
|
|
81
59
|
if (sourcePath) {
|
|
82
60
|
process.chdir(sourcePath);
|
|
83
61
|
}
|
|
84
62
|
await git.fetchLatest();
|
|
85
|
-
// Resolve the target branch (and, in URL mode,
|
|
86
|
-
// when no branch exists yet for
|
|
63
|
+
// Resolve the target branch (and, in URL mode, put the item under workflow
|
|
64
|
+
// management when no branch exists yet for it).
|
|
87
65
|
let branch;
|
|
88
66
|
if (url) {
|
|
89
67
|
const resolvedBranch = await git.resolveBranchFromProjectItemUrl(url);
|
|
90
|
-
if (
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
'base-branch': baseBranch,
|
|
100
|
-
'claude-entry-point': 'none',
|
|
101
|
-
'source-path': '',
|
|
102
|
-
isolation: isolationMode
|
|
103
|
-
});
|
|
104
|
-
return;
|
|
68
|
+
if (resolvedBranch) {
|
|
69
|
+
branch = resolvedBranch;
|
|
70
|
+
logger.info(`Resolved branch for ${url}: ${branch}`);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
logger.info(`No branch found for ${url} — putting it under workflow management first.`);
|
|
74
|
+
const context = await resolveContext({ projectItemUrl: url, options: resolved });
|
|
75
|
+
await ensureManaged(context, { deferItemStatusWrite: false });
|
|
76
|
+
branch = context.branchName;
|
|
105
77
|
}
|
|
106
|
-
branch = resolvedBranch;
|
|
107
|
-
logger.info(`Resolved branch for ${url}: ${branch}`);
|
|
108
78
|
}
|
|
109
79
|
else if (prUrl) {
|
|
110
80
|
logger.step(`Looking up PR: ${prUrl}`);
|
|
@@ -127,52 +97,45 @@ export const joinProjectItemCommand = {
|
|
|
127
97
|
logger.section('Join Project Item');
|
|
128
98
|
// Set up the working environment on the existing branch: an isolated
|
|
129
99
|
// worktree, or the branch checked out in the main repository.
|
|
130
|
-
const workingPath = isolationMode
|
|
131
|
-
|
|
132
|
-
: await git.createWorktreeForBranch(branch, basename(branch));
|
|
100
|
+
const { workingPath } = await worktree.ensureBranchEnvironment(isolationMode, branch);
|
|
101
|
+
process.chdir(workingPath);
|
|
133
102
|
// Recover durable per-branch metadata committed on the branch, then re-seed
|
|
134
|
-
// local git config and fill any missing state with
|
|
103
|
+
// local git config and fill any missing state with sensible defaults.
|
|
135
104
|
await reestablishBranchState(workingPath, branch, url);
|
|
136
105
|
logger.success(`Joined ${branch}`);
|
|
137
|
-
|
|
106
|
+
// Join attaches to in-progress work, so it never launches an implementation session.
|
|
107
|
+
await worktree.launchClaudeForBranch(workingPath, {
|
|
138
108
|
projectItemUrl: url,
|
|
139
109
|
permissionMode,
|
|
110
|
+
model,
|
|
140
111
|
effort,
|
|
141
112
|
claudeEntryPointMode: 'none'
|
|
142
113
|
});
|
|
143
114
|
}
|
|
144
115
|
};
|
|
145
116
|
/**
|
|
146
|
-
* Re-establish workflow state for a joined branch:
|
|
147
|
-
* (the durable
|
|
148
|
-
*
|
|
149
|
-
*
|
|
117
|
+
* Re-establish workflow state for a joined branch: adopt the metadata committed
|
|
118
|
+
* on origin (the durable copy), default any field a legacy branch never
|
|
119
|
+
* recorded — a branch joined without a state is treated as being in Agent
|
|
120
|
+
* Implementation, where work happens — and persist newly-seeded state back to
|
|
121
|
+
* origin so future joins see it.
|
|
150
122
|
*/
|
|
151
123
|
async function reestablishBranchState(workingPath, branch, urlOverride) {
|
|
152
|
-
const remote = await
|
|
153
|
-
const projectItemUrl = urlOverride ?? remote?.projectItemUrl;
|
|
124
|
+
const remote = await syncBranchStateFromRemote(branch);
|
|
125
|
+
const projectItemUrl = urlOverride ?? remote?.projectItemUrl ?? await git.getProjectItemUrl(branch) ?? undefined;
|
|
154
126
|
const baseBranch = remote?.baseBranch ?? await worktree.resolveBaseBranch();
|
|
155
|
-
const workflowState = normalizeWorkflowState(remote?.workflowState) ??
|
|
127
|
+
const workflowState = normalizeWorkflowState(remote?.workflowState) ?? WorkflowStates.AgentImplementation;
|
|
156
128
|
const devWorkflowType = remote?.devWorkflowType ?? 'independent';
|
|
157
|
-
const stackBranch = remote?.stackBranch;
|
|
158
|
-
const integrationBranch = remote?.integrationBranch;
|
|
159
|
-
// Re-seed git config (local fast-path) against the branch.
|
|
160
129
|
if (projectItemUrl)
|
|
161
130
|
await git.storeProjectItemUrl(projectItemUrl, branch);
|
|
162
131
|
await git.storeBaseBranch(baseBranch, branch);
|
|
163
132
|
await git.storeWorkflowState(workflowState, branch);
|
|
164
133
|
await git.storeDevWorkflowType(devWorkflowType, branch);
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
if (integrationBranch)
|
|
168
|
-
await git.storeIntegrationBranch(integrationBranch, branch);
|
|
169
|
-
// If the item had no workflow state recorded, it was not properly started —
|
|
170
|
-
// mirror start-project-item by setting the item's status on idea1.ai.
|
|
134
|
+
// If the item had no workflow state recorded, it was never properly started —
|
|
135
|
+
// record the defaulted state on idea1.ai too.
|
|
171
136
|
if (!remote?.workflowState && projectItemUrl) {
|
|
172
|
-
await claude.setWorkflowStatus(projectItemUrl, workflowState);
|
|
137
|
+
await claude.setWorkflowStatus(projectItemUrl, workflowState, branch);
|
|
173
138
|
}
|
|
174
|
-
// Persist to the remote when we filled in anything missing, so the committed
|
|
175
|
-
// metadata reflects the recovered state.
|
|
176
139
|
const needsPersist = !remote ||
|
|
177
140
|
remote.workflowState !== workflowState ||
|
|
178
141
|
remote.devWorkflowType !== devWorkflowType ||
|
|
@@ -183,12 +146,10 @@ async function reestablishBranchState(workingPath, branch, urlOverride) {
|
|
|
183
146
|
const metadata = { branchName: branch, baseBranch, workflowState, devWorkflowType };
|
|
184
147
|
if (projectItemUrl)
|
|
185
148
|
metadata.projectItemUrl = projectItemUrl;
|
|
186
|
-
if (stackBranch)
|
|
187
|
-
metadata.stackBranch = stackBranch;
|
|
188
|
-
if (integrationBranch)
|
|
189
|
-
metadata.integrationBranch = integrationBranch;
|
|
190
|
-
// Operate inside the directory where the branch (and its `.idea1/` dir) is checked out.
|
|
191
|
-
process.chdir(workingPath);
|
|
149
|
+
if (remote?.stackBranch)
|
|
150
|
+
metadata.stackBranch = remote.stackBranch;
|
|
151
|
+
if (remote?.integrationBranch)
|
|
152
|
+
metadata.integrationBranch = remote.integrationBranch;
|
|
192
153
|
await git.writeBranchMetadata(metadata, workingPath);
|
|
193
154
|
const committed = await git.commitBranchMetadataIfChanged(branch);
|
|
194
155
|
if (committed) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"join-project-item.js","sourceRoot":"","sources":["../../src/commands/join-project-item.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"join-project-item.js","sourceRoot":"","sources":["../../src/commands/join-project-item.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next-workflow-step.d.ts","sourceRoot":"","sources":["../../src/commands/next-workflow-step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"next-workflow-step.d.ts","sourceRoot":"","sources":["../../src/commands/next-workflow-step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAQjD,eAAO,MAAM,uBAAuB,EAAE,OA0DrC,CAAC"}
|
|
@@ -1,61 +1,76 @@
|
|
|
1
1
|
import { logger } from '../lib/logger.js';
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
/**
|
|
8
|
-
* Resolve a transition command's options (prompting for any that weren't
|
|
9
|
-
* supplied) before executing it. Running the transition directly with an empty
|
|
10
|
-
* object would skip resolution entirely, leaving options like the PR assignee
|
|
11
|
-
* undefined.
|
|
12
|
-
*/
|
|
13
|
-
async function runTransition(command) {
|
|
14
|
-
const resolved = await resolveOptions(command, {});
|
|
15
|
-
await command.execute(resolved);
|
|
16
|
-
}
|
|
2
|
+
import { validateProjectItemUrl } from '../lib/project-item-url.js';
|
|
3
|
+
import { WORKFLOW_STATES, getNextWorkflowState, isStateAtOrAfter, normalizeWorkflowState } from '../lib/workflow-states.js';
|
|
4
|
+
import { branchCreationOptions } from '../services/branch-setup.js';
|
|
5
|
+
import { advanceTo, ensureManaged, resolveContext } from '../services/workflow-engine.js';
|
|
6
|
+
import { deferredHandlerOptions } from '../services/workflow-handlers/index.js';
|
|
17
7
|
export const nextWorkflowStepCommand = {
|
|
18
8
|
name: 'next-workflow-step',
|
|
19
9
|
aliases: ['next', 'n'],
|
|
20
|
-
description: '
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
10
|
+
description: 'Advance the project item to the next workflow state (or through several, with --to), running the automation of every state entered',
|
|
11
|
+
options: [
|
|
12
|
+
{
|
|
13
|
+
longName: 'url',
|
|
14
|
+
shortName: 'u',
|
|
15
|
+
description: 'Project item URL (required when not on the item\'s branch)',
|
|
16
|
+
defaultValue: '',
|
|
17
|
+
promptWhenDefaultExists: false,
|
|
18
|
+
validate: (value) => (value ? validateProjectItemUrl(value) : undefined)
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
longName: 'to',
|
|
22
|
+
description: 'Workflow state to advance to; every state between the current one and it is entered in order',
|
|
23
|
+
defaultValue: '',
|
|
24
|
+
promptWhenDefaultExists: false,
|
|
25
|
+
validate: (value) => (value === '' || normalizeWorkflowState(value) !== null
|
|
26
|
+
? undefined
|
|
27
|
+
: `Unknown workflow state '${value}'. One of: ${WORKFLOW_STATES.join(', ')}`)
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
longName: 'source-path',
|
|
31
|
+
shortName: 'p',
|
|
32
|
+
description: 'Path to source directory',
|
|
33
|
+
defaultValue: '',
|
|
34
|
+
promptWhenDefaultExists: false
|
|
35
|
+
},
|
|
36
|
+
// Branch creation choices apply when the item has no branch yet; the engine
|
|
37
|
+
// prompts for what it needs, so none of these are asked up front.
|
|
38
|
+
...branchCreationOptions.map(option => ({ ...option, dependsOn: () => false })),
|
|
39
|
+
...deferredHandlerOptions()
|
|
40
|
+
],
|
|
41
|
+
async execute(resolved) {
|
|
42
|
+
const sourcePath = resolved['source-path'];
|
|
43
|
+
if (sourcePath) {
|
|
44
|
+
process.chdir(sourcePath);
|
|
26
45
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const nextTransition = await workflow.getNextTransition();
|
|
33
|
-
if (!nextTransition) {
|
|
34
|
-
if (status.workflowState === 'Approved and Merged' || status.workflowState === 'Released') {
|
|
35
|
-
logger.success('Workflow is complete! No more steps to perform.');
|
|
36
|
-
logger.hint(`Project item: ${status.projectItemUrl}`);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
logger.warning('No valid transitions available from the current state.');
|
|
40
|
-
}
|
|
46
|
+
const context = await resolveContext({ projectItemUrl: resolved['url'] || undefined, options: resolved });
|
|
47
|
+
const targetState = resolveTargetState(context.currentState, resolved['to']);
|
|
48
|
+
if (!targetState) {
|
|
49
|
+
logger.success('Workflow is complete! No more steps to perform.');
|
|
50
|
+
logger.hint(`Project item: ${context.projectItemUrl}`);
|
|
41
51
|
return;
|
|
42
52
|
}
|
|
43
|
-
logger.info(`
|
|
44
|
-
|
|
45
|
-
//
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
break;
|
|
50
|
-
case 'ready-for-approval':
|
|
51
|
-
await runTransition(readyForApprovalCommand);
|
|
52
|
-
break;
|
|
53
|
-
case 'approve-pr':
|
|
54
|
-
await runTransition(approvePrCommand);
|
|
55
|
-
break;
|
|
56
|
-
default:
|
|
57
|
-
throw new Error(`Unknown transition: ${nextTransition}`);
|
|
58
|
-
}
|
|
53
|
+
logger.info(`Current workflow state: ${context.currentState ?? '(not started)'}`);
|
|
54
|
+
// An item that was never started enters the first state here, which is the
|
|
55
|
+
// whole transition; otherwise the branch is only made consistent and the
|
|
56
|
+
// transition below records the new state.
|
|
57
|
+
await ensureManaged(context, { deferItemStatusWrite: context.currentState !== null });
|
|
58
|
+
await advanceTo(context, targetState);
|
|
59
59
|
}
|
|
60
60
|
};
|
|
61
|
+
/**
|
|
62
|
+
* The state to move to: the requested one, or the next state when none was
|
|
63
|
+
* requested. Null when there is nothing ahead. Requesting a state the item is
|
|
64
|
+
* already at or past is an error — the CLI never moves an item backwards.
|
|
65
|
+
*/
|
|
66
|
+
function resolveTargetState(currentState, requested) {
|
|
67
|
+
if (!requested) {
|
|
68
|
+
return getNextWorkflowState(currentState);
|
|
69
|
+
}
|
|
70
|
+
const targetState = normalizeWorkflowState(requested);
|
|
71
|
+
if (currentState !== null && isStateAtOrAfter(currentState, targetState)) {
|
|
72
|
+
throw new Error(`The item is already at '${currentState}', which is not before '${targetState}'. Move it back in the web client if that is intended; the CLI only advances.`);
|
|
73
|
+
}
|
|
74
|
+
return targetState;
|
|
75
|
+
}
|
|
61
76
|
//# sourceMappingURL=next-workflow-step.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next-workflow-step.js","sourceRoot":"","sources":["../../src/commands/next-workflow-step.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"next-workflow-step.js","sourceRoot":"","sources":["../../src/commands/next-workflow-step.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAU,MAAM,mBAAmB,CAAC;AAQzD,eAAO,MAAM,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAU,MAAM,mBAAmB,CAAC;AAQzD,eAAO,MAAM,WAAW,EAAE,OAwHzB,CAAC"}
|
package/dist/commands/push.js
CHANGED
|
@@ -2,7 +2,7 @@ import { logger } from '../lib/logger.js';
|
|
|
2
2
|
import * as git from '../services/git.js';
|
|
3
3
|
import * as github from '../services/github.js';
|
|
4
4
|
import * as test from '../services/test.js';
|
|
5
|
-
import
|
|
5
|
+
import * as worktree from '../services/worktree.js';
|
|
6
6
|
import { promptProjectItemUrl } from '../lib/prompt.js';
|
|
7
7
|
export const pushCommand = {
|
|
8
8
|
name: 'push',
|
|
@@ -33,10 +33,12 @@ export const pushCommand = {
|
|
|
33
33
|
promptWhenDefaultExists: false
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
|
+
// Left empty so the repo's `.idea1/settings.json` still has a say; resolved
|
|
37
|
+
// below through the standard hierarchy.
|
|
36
38
|
longName: 'dest-branch',
|
|
37
39
|
shortName: 'd',
|
|
38
40
|
description: 'PR target branch',
|
|
39
|
-
defaultValue:
|
|
41
|
+
defaultValue: '',
|
|
40
42
|
promptWhenDefaultExists: false
|
|
41
43
|
}
|
|
42
44
|
],
|
|
@@ -44,7 +46,7 @@ export const pushCommand = {
|
|
|
44
46
|
const noProjectItem = resolved['no-project-item'] === 'true';
|
|
45
47
|
const noTests = resolved['no-tests'] === 'true';
|
|
46
48
|
const createPr = resolved['create-pr'] !== 'false';
|
|
47
|
-
const destBranch = resolved['dest-branch'];
|
|
49
|
+
const destBranch = await worktree.resolveBaseBranch(resolved['dest-branch'] || undefined);
|
|
48
50
|
// Get current branch
|
|
49
51
|
const branchName = await git.getCurrentBranch();
|
|
50
52
|
logger.info(`Current branch: ${branchName}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,qBAAqB,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ready-for-approval.d.ts","sourceRoot":"","sources":["../../src/commands/ready-for-approval.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"ready-for-approval.d.ts","sourceRoot":"","sources":["../../src/commands/ready-for-approval.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAKjD,eAAO,MAAM,uBAAuB,EAAE,OAWrC,CAAC"}
|
|
@@ -1,74 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import * as claude from '../services/claude.js';
|
|
5
|
-
import * as workflow from '../services/workflow.js';
|
|
6
|
-
import { removeWorktreeForWorkflowState } from '../services/worktree.js';
|
|
1
|
+
import { WorkflowStates } from '../lib/workflow-states.js';
|
|
2
|
+
import { advanceTo, requireCurrentState, resolveContext } from '../services/workflow-engine.js';
|
|
3
|
+
import { readyForApprovalHandler } from '../services/workflow-handlers/ready-for-approval.js';
|
|
7
4
|
export const readyForApprovalCommand = {
|
|
8
5
|
name: 'ready-for-approval',
|
|
9
6
|
aliases: ['rfa'],
|
|
10
7
|
description: 'Mark PR as ready for approval and assign reviewers/assignee',
|
|
11
|
-
options:
|
|
12
|
-
{
|
|
13
|
-
longName: 'assignee',
|
|
14
|
-
shortName: 'a',
|
|
15
|
-
description: 'Who to assign the PR to',
|
|
16
|
-
choices: 'github-members',
|
|
17
|
-
allowNone: true
|
|
18
|
-
},
|
|
19
|
-
{
|
|
20
|
-
longName: 'reviewers',
|
|
21
|
-
shortName: 'r',
|
|
22
|
-
description: 'Who to request a review from (select any number)',
|
|
23
|
-
choices: 'github-members',
|
|
24
|
-
multiSelect: true
|
|
25
|
-
}
|
|
26
|
-
],
|
|
8
|
+
options: readyForApprovalHandler.options,
|
|
27
9
|
async execute(resolved) {
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
.map(name => name.trim())
|
|
32
|
-
.filter(name => name.length > 0);
|
|
33
|
-
// Validate transition
|
|
34
|
-
const validation = await workflow.validateTransition('ready-for-approval');
|
|
35
|
-
if (!validation.valid) {
|
|
36
|
-
throw new Error(validation.error ?? 'Invalid transition');
|
|
37
|
-
}
|
|
38
|
-
// Ensure workflow preconditions
|
|
39
|
-
await workflow.ensureWorkflowPreconditions();
|
|
40
|
-
// Get branch info
|
|
41
|
-
const branchName = await git.getCurrentBranch();
|
|
42
|
-
const projectItemUrl = await git.getProjectItemUrl();
|
|
43
|
-
const baseBranch = await git.getBaseBranch() ?? 'working/release';
|
|
44
|
-
if (!projectItemUrl) {
|
|
45
|
-
throw new Error('No project item URL found for this branch.');
|
|
46
|
-
}
|
|
47
|
-
logger.info(`Current branch: ${branchName}`);
|
|
48
|
-
// Check PR exists
|
|
49
|
-
const prInfo = await github.checkPrExists(branchName, baseBranch);
|
|
50
|
-
if (!prInfo) {
|
|
51
|
-
throw new Error('No PR exists for this branch. Create a PR first with: idea1 push');
|
|
52
|
-
}
|
|
53
|
-
logger.info(`PR #${prInfo.number} found`);
|
|
54
|
-
// Request reviews and set the assignee (each no-ops when nothing was chosen)
|
|
55
|
-
await github.assignReviewers(branchName, reviewers);
|
|
56
|
-
await github.assignAssignee(branchName, assignee);
|
|
57
|
-
if (reviewers.length === 0 && !assignee) {
|
|
58
|
-
logger.dim('No reviewers requested and no assignee set.');
|
|
59
|
-
}
|
|
60
|
-
// Update workflow state, commit metadata, and push before worktree removal
|
|
61
|
-
await git.storeWorkflowState('Needs Approval for Release');
|
|
62
|
-
await git.commitBranchMetadataIfChanged(branchName);
|
|
63
|
-
await git.pushToRemote(branchName);
|
|
64
|
-
await claude.setWorkflowStatus(projectItemUrl, 'Needs Approval for Release');
|
|
65
|
-
// If in a worktree, remove it when settings say the worktree goes at this state
|
|
66
|
-
await removeWorktreeForWorkflowState('Needs Approval for Release', branchName, projectItemUrl, { checkoutBranchInMainRepo: false });
|
|
67
|
-
logger.newline();
|
|
68
|
-
logger.success('PR is ready for approval');
|
|
69
|
-
logger.newline();
|
|
70
|
-
logger.hint(`PR: ${prInfo.url}`);
|
|
71
|
-
logger.hint('When approved, run: idea1 approve-pr');
|
|
10
|
+
const context = await resolveContext({ options: resolved });
|
|
11
|
+
requireCurrentState(context, WorkflowStates.DevImplementation, 'ready-for-approval');
|
|
12
|
+
await advanceTo(context, WorkflowStates.NeedsApprovalForRelease);
|
|
72
13
|
}
|
|
73
14
|
};
|
|
74
15
|
//# sourceMappingURL=ready-for-approval.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ready-for-approval.js","sourceRoot":"","sources":["../../src/commands/ready-for-approval.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ready-for-approval.js","sourceRoot":"","sources":["../../src/commands/ready-for-approval.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChG,OAAO,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAC;AAE9F,MAAM,CAAC,MAAM,uBAAuB,GAAY;IAC9C,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,CAAC,KAAK,CAAC;IAChB,WAAW,EAAE,6DAA6D;IAC1E,OAAO,EAAE,uBAAuB,CAAC,OAAO;IAExC,KAAK,CAAC,OAAO,CAAC,QAAgC;QAC5C,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5D,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,CAAC;QACrF,MAAM,SAAS,CAAC,OAAO,EAAE,cAAc,CAAC,uBAAuB,CAAC,CAAC;IACnE,CAAC;CACF,CAAC"}
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../src/commands/release.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAuSjD,eAAO,MAAM,cAAc,EAAE,OAwE5B,CAAC"}
|
package/dist/commands/release.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { logger } from '../lib/logger.js';
|
|
2
|
-
import { getReleaseBranch, getReleaseTargetBranch } from '../lib/settings.js';
|
|
2
|
+
import { DEFAULT_BRANCH_SETTINGS, getBaseBranch, getReleaseBranch, getReleaseTargetBranch } from '../lib/settings.js';
|
|
3
3
|
import { exec, execOrThrow } from '../lib/shell.js';
|
|
4
4
|
import { runHook } from '../services/hooks.js';
|
|
5
5
|
import * as git from '../services/git.js';
|
|
@@ -17,7 +17,8 @@ async function resolveReleaseBranch(cliBranch) {
|
|
|
17
17
|
if (settingsBranch) {
|
|
18
18
|
return settingsBranch;
|
|
19
19
|
}
|
|
20
|
-
|
|
20
|
+
// A repo that names only a base branch releases from it.
|
|
21
|
+
return await getBaseBranch(repoRoot) ?? DEFAULT_BRANCH_SETTINGS.releaseBranch;
|
|
21
22
|
}
|
|
22
23
|
/**
|
|
23
24
|
* Resolve the target branch
|
|
@@ -31,7 +32,7 @@ async function resolveTargetBranch(cliTarget) {
|
|
|
31
32
|
if (settingsTarget) {
|
|
32
33
|
return settingsTarget;
|
|
33
34
|
}
|
|
34
|
-
return
|
|
35
|
+
return DEFAULT_BRANCH_SETTINGS.releaseTargetBranch;
|
|
35
36
|
}
|
|
36
37
|
/**
|
|
37
38
|
* Validate that we're on the expected branch
|
|
@@ -202,7 +203,7 @@ async function handleMergeMode(sourceBranch, targetBranch, prUrl) {
|
|
|
202
203
|
await openGitHubActions();
|
|
203
204
|
logger.newline();
|
|
204
205
|
logger.success('========================================');
|
|
205
|
-
logger.success(
|
|
206
|
+
logger.success(`Release merge to ${targetBranch} complete!`);
|
|
206
207
|
logger.success('========================================');
|
|
207
208
|
}
|
|
208
209
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/commands/release.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/commands/release.ts"],"names":[],"mappings":"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"}
|